実時間プログラムは,いくつかの並行単位と外部手続きで構成されます。
並行単位の1個は,PARACT行で始まりEND PARACT行で終わります。
PARACT行にはその並行単位の名前を書きます。
プログラムを起動すると,一番最初の並行単位が実行を開始します。
他の並行単位はSTART文で起動します。
例
PARACT p1
START p2
FOR i=1 TO 1000
PRINT i
NEXT i
END PARACT
PARACT p2
FOR i=1001 TO 2000
PRINT i
NEXT i
END PARACT
DECLARE STRUCTURE struct1 :3 OF NUMERIC
DECLARE SHARED share0 OF struct1
PARACT p1
LET a=1
LET b=2
LET c=3
PUT TO share0 FROM a^2,b^2,c^2
START p2
PUT TO share0 FROM a^3,b^3,c^3
START p3
PUT TO share0 FROM a^4,b^4,c^4
START p4
END PARACT
PARACT p2
GET FROM share0 TO a,b,c
PRINT A,B,C
END PARACT
PARACT p3
GET FROM share0 TO a,b,c
PRINT A,B,C
END PARACT
PARACT p4
GET FROM share0 TO a,b,c
PRINT A,B,C
END PARACT
DECLARE STRUCTURE struct1 :3 OF NUMERIC
DECLARE SHARED share1 OF struct1
DECLARE SHARED share2 OF struct1
DECLARE SHARED share3 OF struct1
PARACT p1
LET a=1
LET b=2
LET c=3
PUT TO share1 FROM a^2,b^2,c^2
PUT TO share2 FROM a^3,b^3,c^3
PUT TO share3 FROM a^4,b^4,c^4
START p2
START p3
START p4
END PARACT
PARACT p2
GET FROM share1 TO a,b,c
PRINT A,B,C
END PARACT
PARACT p3
GET FROM share2 TO a,b,c
PRINT A,B,C
END PARACT
PARACT p4
GET FROM share3 TO a,b,c
PRINT A,B,C
END PARACT
DECLARE STRUCTURE data: 1 of string(2), 2 of numeric(2)
DECLARE SHARED s1 OF data
PARACT p1
DIM s$(2), a(2), b(2)
DATA "Yamada", "Yoshida"
DATA 90, 80
DATA 70, 90
MAT READ s$
MAT READ a
MAT READ b
PUT TO s1 FROM s$, a, b
START p2
END paract
PARACT p2
DIM s$(2), a(2), b(2)
GET FROM s1 TO s$,a,b
MAT PRINT s$,a,b
END PARACT
複数の並行活動が同時に
SET POINT COLOR ……
PLOT POINTS: ……
を実行すると,他の並行活動が指定した色で点が描かれてしまうことが起こる。
適当な名前,たとえば,ColorPointを指定したSEIZE~END SEIZEでくくると
PLOT POINTSを実行する直前に実行したSET POINT COLOR文が直前に書かれたものであることを保証できる。
DECLARE STRUCTURE struct2: 2 OF NUMERIC
DECLARE MESSAGE buff OF struct2
PARACT part1
START part2
LET left = -2
LET right= .8
LET h = (right - left)
SET WINDOW left, right,-h/2,h/2
DRAW axes
SET POINT STYLE 1
ASK PIXEL SIZE(left,-h/2;right,h/2) px,py
SEND TO buff FROM px,py
DECLARE EXTERNAL SUB mandelb
call mandelb(0,int(px/2),int(py/2),py)
END PARACT
PARACT part2
RECEIVE FROM buff TO px,py
DECLARE EXTERNAL SUB mandelb
CALL mandelb(INT(px/2)+1,px,INT(py/2),py)
END PARACT
EXTERNAL SUB mandelb(a0,a1,b0,b1)
FOR a=a0 TO a1
LET u=problemx(a)
FOR b=b0 TO b1
LET v=problemy(b)
LET x = 0
LET y = 0
FOR n = 1 TO 250
LET x1 = x^2 - y^2 + u
LET y1 = 2 * x * y + v
LET x = x1
LET y = y1
IF x^2+y^2>4 THEN
SEIZE colorPoint
SET POINT COLOR MIN(n,15)
PLOT POINTS: u,v
PLOT POINTS: u,-v
END SEIZE
EXIT FOR
END IF
NEXT n
NEXT b
NEXT a
END SUB
図形機能はプログラム全体でひとつの存在です。
SET WINDOW文などは1回実行すれば十分です。並行単位ごとに書く必要はありませんし,また,そうすることは望ましくありません。
図形の変換を行う現在変形行列もプログラム全体でひとつです。複数の並行活動で DRAW … WITH を実行すると動作したとしても訳のわからない状態になります。
そのため並行活動を含むプログラムに DRAW … WITH を書くと警告するようにしていますが,変形を行う並行活動が1個のみであれば正常に動作する可能性があります。
PARACT p1
SET WINDOW -4,4,-4,4
DRAW grid
START p2
FOR k=1 TO 5 STEP 2
SEIZE plotlines
SET LINE COLOR k
SET LINE STYLE k
FOR x=-4 TO 4 STEP 0.1
PLOT LINES:x,x^k;
NEXT x
PLOT LINES
END SEIZE
NEXT k
END PARACT
PARACT p2
FOR k=2 TO 4 STEP 2
SEIZE plotlines
SET LINE COLOR k
SET LINE STYLE k
FOR x=-4 TO 4 STEP 0.1
PLOT LINES:x,x^k;
NEXT x
PLOT LINES
END SEIZE
NEXT k
END PARACT