1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

3104 lines
246 KiB
Plaintext

$* PRT INDEX 00000000
W12 PUTS REACTIVATED SUSPENSION EVENT AT HEAD OF HALENDAR 00000112
$+STREAM -LIST + ZERO LEFT 00001000
COMMENT SUMMARY OF PATCHES 00001100
W01 FIXES HANDLING OF "ALPHA FILE IN/OUT" %W0100001101
W02 FIX HANDLING OF MULTIPLE SUBSETS IN "FIND" %W0200001102
W03 INCREMENT REACTIVATION PTR IN INCORRECTLY PLACED "RESUME" %W0300001103
W04 REMOVE PARANTHESES FROM SCHED. ENTITY IN "CAUSE" OUTPUT %W0400001104
W05 FIX INCORRECT CODE FROM "DISPLAY...SET" %W0500001105
W06 FIX HANDLING OF MULTIPLE "IS" TESTS %W0600001106
W07 FIX HANDLING OF "WAIT(...)" %W0700001107
W08 ENSURE THAT "EVNAME" (ETC.) CANNOT BE DESTINATIONS %W0800001108
W09 RESET ENT FILL FOR MULTIPLE SIMULATION BLOCKS %W0900001109
W10 SUPPRESS EXTRANEOUS ENTRIES IN SUS CASE FROM "RESUME..WAIT" %W1000001110
W11 PROVIDE CHECK OF RANKING EXISTING AT BOTTOM BEFORE SEARCH %W1100001111
; 00001999
BEGIN REAL COMMON,IN?FIN; 00002000
FORMAT FM?FER(X*,2A6": NOT AN ENTITY POINTER."), 00003000
FM?FNS(X*,2A6": DOES NOT OWN A SET."), 00004000
FM?FAD(X*,2A6": ENTITY ALREADY DESTROYED."), 00005000
FM?STAT1(X*,2A6": "3(I5,X3),F7.2,3(A6,O)), 00006000
FM?STAT2(X*,"- Q: "3(I5,X3),F7.2,A6,O,A6,O," CAP.="I5), 00007000
FM?STATH(X*,X14"CUR-MEM*TOT-MEM*MAX-MEM*AVG-MEM* MAX-MEM-", 00008000
"TIME* AVG-MEM-TIME* SET-UP-TIME"/), 00009000
FM?END(X*"W A L S E SIMULATION SUMMARY SHEET"/ 00010000
X*"EXECUTION COMPLETED AT "O" ON "O/ 00011000
X*"INITIAL SIMULATION TIME ="A6,O/ 00012000
X*"FINAL SIMULATION TIME =" A6, O/ 00013000
X*"MAXIMUM ENTITY SPACE USAGE ="I5" WORDS"/ 00014000
X*"COUNT OF USER ENTITIES CREATED ="I7/ 00015000
X*"PROCESSOR TIME ="F8.2", IO ="F8.2" SECONDS"/), 00016000
FM?GEND(X*"ATTR.#->"I12,20(X5"*"I15)/); 00017000
INTEGER R?WCNT,C?UNT,C?OL,CALENDAR,ERRORNUMBER,ERRORLINE, 00018000
LASTEVENT,T?MESCALE,S?T,S?USPENDED,K?P,R?W,C?L; 00019000
ALPHA J?NK,T?ME,E?P; 00020000
ALPHA ARRAY R?1[0:127,0:255]; 00021000
ALPHA ARRAY R?2[0:127]; 00022000
FILE READER(1,10,150), PRINTER 6(1,15); 00023000
ARRAY POWERS?OF?TEN[0:69]; 00024000
ALPHA ARRAY F?TCHLIST,EV?CELL[0:0]; INTEGER EV?MAX; 00025000
REAL SC?NCR; 00026000
REAL CAL?HDR, % ADDRESS OF CALENDAR SET HEADER 00027000
EDIT?CH, % CHAR. POSITION FOR EDIT ROUTINES 00028000
SIGNIFICANCE, % SIGNIFICANT FIGS IN "DISPLAY" FMT 00029000
ST?RTIME, % ALSO USED AS PRE-STARTUP LIST 00030000
R?TIME, % STARTING CLOCK TIME 00031000
R?DATE, % "REAL" DATE 00032000
SUS?EN, % EVENT NOTICE OF SUSPENDED EVENT 00033000
SUS?HDR; % ADDRESS OF SUSPENSION LIST HEADER 00034000
DEFINE PHYS?PAGE =45#; %LINE NUMBER OF CHANNELS 10 & 12. 00035000
LIST E?LST(0); 00036000
INTEGER L?MAR,R?MAR, % MARGINS 00037000
LINEC?NT, % CURRENT LINE NUMBER 00038000
LINESPERPAGE, % LINE NUMBER FOR PAGE FOOTER 00039000
PAGEHEADLINES, % NUMBER OF TITLE LINES 00040000
MAX?SP, % MAXIMUM ENTITY SPACE 00041000
CRE?CNT, % COUNT OF ENTITIES CREATED 00042000
CUR?SP, % CURRENT ENTITY SPACE USAGE 00043000
PAGENUMBER; % 00044000
DEFINE F?RSTIME = BOOLEAN(ST?RTIME.[1:1])#; 00045000
ARRAY PAGEHEADARRAY[0:14,0:17]; 00046000
ARRAY INB?FF[0:255]; 00047000
ARRAY RANDOM[0:10]; 00048000
BOOLEAN RAND?MASK, % USED IN RANDOM GENERATOR 00049000
TRACE?TOG; % FLAGS FOR TRACE 00050000
PROCEDURE TR?CE(E,N); VALUE E,N; REAL E,N; FORWARD; 00051000
PROCEDURE CHECK?PAGE(N);VALUE N; REAL N; FORWARD; 00052000
PROCEDURE DISPLAY?D(A,B,E);VALUE A,B,E;ALPHA A,B,E;FORWARD; 00053000
INTEGER PROCEDURE G?TSPACE(S); VALUE S; INTEGER S; 00054000
00055000
00056000
BEGIN 00057000
ALPHA A,B,C,D,F; 00058000
LABEL FOUND,E; 00059000
BOOLEAN BIG; 00060000
STREAM PROCEDURE CLEARMEM(M,W2,W1); VALUE W1,W2; 00061000
BEGIN 00062000
DI~M; DS~8 LIT "0"; 00063000
SI~M; DS~W1 WDS; 00064000
W2(DS~32 WDS; DS~32 WDS); 00065000
END; 00066000
S ~ S; 00067000
FOR F~0 STEP 1 WHILE C~R?2[F] ! 0 DO 00068000
00069000
IF C ! 256 THEN 00070000
IF C.[18:15] } S THEN GO FOUND; 00071000
FOR F~0 STEP 1 WHILE C~R?2[F] ! 0 DO 00072000
00073000
IF BOOLEAN(C).[1:1] THEN BEGIN % GARBAGE COLLECT 00074000
A ~ C.[33:15]; 00075000
WHILE A ! 256 DO BEGIN 00076000
IF D~(B~R?1[F,A]).[3:15] } S THEN BEGIN 00077000
IF R?2[F].[18:15] < D THEN 00078000
R?2[F] ~ ABS(*) & D[18:18:15] 00079000
ELSE 00080000
R?2[F] ~ ABS(*); 00081000
C ~ A; 00082000
GO FOUND; 00083000
END; 00084000
IF (C~D+1+A) ! 256 THEN 00085000
IF C~R?1[F,C] > 0 THEN BEGIN 00086000
IF C.[18:15] = 256 THEN 00087000
R?2[F].[33:15] ~ C; 00088000
D ~ C.[3:15] + D + 1; 00089000
IF R?2[F].[18:15] < D THEN 00090000
R?2[F].[18:15] ~ D; 00091000
R?1[F,A].[3:15] ~ D; 00092000
IF C.[33:15] = 256 THEN 00093000
R?1[F,C.[18:15]].[33:15] ~ 256 00094000
ELSE 00095000
IF D~C.[18:15] = 256 THEN 00096000
R?1[F,C].[18:15] ~ 256 00097000
ELSE BEGIN 00098000
R?1[F,C] ~ (*) & C[18:18:15]; 00099000
R?1[F,D] ~ (*) & C[33:33:15]; 00100000
END; 00101000
END ELSE 00102000
A ~ B.[33:15] 00103000
ELSE 00104000
A ~ B.[33:15]; 00105000
END; 00106000
R?2[F] ~ ABS(*); 00107000
END; 00108000
R?2[F] ~ (C~1) & 254[18:33:15]; 00109000
R?1[F,C] ~ 256 & 254[3:33:15] & 256[18:33:15]; 00110000
FOUND: 00111000
C ~ C.[33:15]; 00112000
WHILE C ! 256 DO 00113000
IF B~(A~R?1[F,C]).[3:15] } S THEN BEGIN 00114000
BIG ~ R?2[F].[18:15] = B; 00115000
R?1[F,C~C+B-S] ~ -0&(C?UNT~REAL(C?UNT.[40:8]=255) 00116000
+C?UNT+1)[10:40:8] & S[2:40:8]; 00117000
G?TSPACE ~ C & C?UNT[10:40:8] & 3[1:46:2] & F[33:41:7]; 00118000
IF S > 0 THEN CLEARMEM(R?1[F,C+1],(D~S-1).[36:6],D); 00119000
IF B = S THEN BEGIN % GOT THE WHOLE THING 00120000
IF A.[33:15] = 256 THEN 00121000
IF A.[18:15] = 256 THEN % ONLY LINK 00122000
R?2[F] ~ 256 00123000
ELSE 00124000
R?1[F,A.[18:15]].[33:15] ~ 256 00125000
ELSE 00126000
IF B~A.[18:15] = 256 THEN BEGIN 00127000
R?1[F,A].[18:15] ~ 256; 00128000
R?2[F].[33:15] ~ A; 00129000
END ELSE BEGIN 00130000
R?1[F,A] ~ (*) & A[18:18:15]; 00131000
R?1[F,B] ~ (*) & A[33:33:15]; 00132000
END; 00133000
END ELSE 00134000
R?1[F,C~C+S-B].[3:15] ~ B-S-1; 00135000
GO E; 00136000
END ELSE 00137000
C ~ A.[33:15]; 00138000
E: 00139000
IF BIG THEN BEGIN 00140000
B ~ 0; 00141000
C ~ R?2[F].[33:15]; 00142000
WHILE C ! 256 DO BEGIN 00143000
IF D~(A~R?1[F,C]).[3:15] > B THEN B ~ D; 00144000
C ~ A.[33:15]; 00145000
END; 00146000
R?2[F].[18:15] ~ B; 00147000
END; 00148000
IF (CUR?SP~CUR?SP+S+1)>MAX?SP THEN MAX?SP ~ CUR?SP; 00149000
END G?TSPACE; 00150000
INTEGER PROCEDURE SYS?SPACE(N); VALUE N; INTEGER N; 00151000
BEGIN 00152000
SYS?SPACE ~ N ~ G?TSPACE(N) & 0[10:40:8]; 00153000
R?1[N.[33:7],N.[40:8]].[10:8] ~ 0; 00154000
END SYS?SPACE; 00155000
PROCEDURE F?RGETSPACE(X); VALUE X; INTEGER X; 00156000
BEGIN 00157000
ALPHA B,C; 00158000
INTEGER I,J; 00159000
CUR?SP ~ CUR?SP - 00160000
B ~ R?1[I~X.[33:7],J~X.[40:8]].[2:8]; 00161000
IF C~R?2[I].[33:15] = 256 THEN BEGIN % WAS EMPTY 00162000
R?2[I] ~ J & B[18:33:15]; 00163000
R?1[I,J] ~ 256 & 256[18:33:15] & B[3:33:15]; 00164000
END ELSE BEGIN 00165000
C ~ C & R?1[I,C][18:18:15]; 00166000
R?1[I,J] ~ C & B[3:33:15]; 00167000
R?1[I,C].[18:15] ~ J; 00168000
IF R?2[I].[18:15] < B THEN 00169000
R?2[I] ~ -J & B[18:33:15] 00170000
ELSE 00171000
R?2[I] ~ -ABS(*) & J[33:33:15]; 00172000
END; 00173000
END F?RGETSPACE; 00174000
ALPHA PROCEDURE DAY(T); VALUE T; INTEGER T; 00175000
BEGIN 00176000
ALPHA STREAM PROCEDURE CNV(T,S); VALUE T,S; 00177000
BEGIN DI ~ LOC CNV; SI ~ LOC T; DS ~ 7 DEC; DS ~ LIT "/"; 00178000
DI ~ DI-6; DS ~ 6 FILL; S(DI ~ DI-1;DS~LIT"-"); 00179000
END CNV; 00180000
DAY ~ CNV(ABS(T) | T?MESCALE DIV 86400,T<0); 00181000
END PROC DAY; 00182000
ALPHA PROCEDURE ALPHATIME(T); VALUE T; INTEGER T; 00183000
BEGIN 00184000
ALPHA STREAM PROCEDURE CNV(H,M,S); VALUE H,M,S; 00185000
BEGIN SI ~ LOC H; DI ~ LOC CNV; 00186000
DS ~ 2 DEC; DS ~ LIT":"; DS ~ 2 DEC; 00187000
DS~ LIT ":"; DS~ 2 DEC; 00188000
00189000
L: END STREAM; 00190000
T ~ ABS(T)|T?MESCALE MOD 86400; 00191000
ALPHATIME ~ CNV(T DIV 3600,(T~T MOD 3600) DIV 60, T ~ T MOD 60); 00192000
END P ALPHATIME; 00193000
PROCEDURE E?RROR(S,N,L); 00194000
VALUE S,N; 00195000
INTEGER S,N; 00196000
PROCEDURE L; 00197000
BEGIN 00198000
FILE ALF DISK "WALSE " "ERRORS " (1,10,30); 00199000
INTEGER M,O; 00200000
DEFINE A = INB?FF#; 00201000
INTEGER STREAM PROCEDURE NEXTONE(A,C); 00202000
BEGIN 00203000
DI ~ LOC NEXTONE; SI ~ A; 00204000
IF SC="+" THEN BEGIN DS~CHR; SI~SI+3 END ELSE DS~4 OCT; 00205000
DI ~ C; DS ~ 4 OCT; DI ~ A; DS ~ 8 LIT " "; 00206000
END; 00207000
FORMAT F1(A6" #"I3" AT LINE #"I6,X5"SYSTEM CLOCK:"R25.11" = "A6,O), 00208000
F2(" ERROR IN ERROR LISTING, PLEASE NOTIFY " 00209000
"SYSTEMS GROUP"); 00210000
ERRORNUMBER ~ N; ERRORLINE ~ S ~ ABS(S); 00211000
CHECK?PAGE(-(IF(LINEC?NT+10}PHYS?PAGE AND LINEC?NT{PHYS?PAGE) 00212000
OR N}0 THEN LINESPERPAGE ELSE 10)); 00213000
LINEC?NT ~ LINEC?NT+2; 00214000
WRITE(PRINTER[DBL],F1,IF N}0 THEN "*ERROR"ELSE"*NOTE ",N~ 00215000
ABS(N),S,T?ME,DAY(T?ME),ALPHATIME(T?ME)); 00216000
DO BEGIN 00217000
READ(ALF[M~N],10,A[*]); 00218000
N~NEXTONE(A,O); 00219000
IF O!M OR (N{M AND N!0) THEN 00220000
BEGIN 00221000
WRITE(PRINTER,F2);LINEC?NT~LINEC?NT+1; 00222000
N ~ 0; 00223000
END 00224000
ELSE 00225000
WRITE(PRINTER,10,A[*]);LINEC?NT~LINEC?NT+1; 00226000
END UNTIL N=0; 00227000
IF NOT BOOLEAN(N.[1:1]) THEN 00228000
BEGIN WRITE(PRINTER[DBL]); 00229000
LINEC?NT ~ LINEC?NT+2; 00230000
END; 00231000
IF ERRORNUMBER}0 THEN L; 00232000
END; 00233000
PROCEDURE C?ECK(S,N,E,W,L); 00234000
VALUE S,N,E; 00235000
INTEGER S,N,E; 00236000
PROCEDURE L; 00237000
REAL W; 00238000
IF E.[1:9] ! 384 OR W~R?1[E.[33:7],E.[40:8]] } 0 OR 00239000
W.[10:8] ! E.[10:8] THEN 00240000
E?RROR(S,N,L); 00241000
REAL PROCEDURE SAME(A); 00242000
VALUE A; 00243000
INTEGER A; 00244000
BEGIN 00245000
REAL W; 00246000
IF A.[1:9]!384 OR W~R?1[A.[33:7],A.[40:8]]}0 OR 00247000
W.[10:8]!A.[10:8] THEN 00248000
SAME ~ REAL(NOT FALSE) 00249000
ELSE 00250000
SAME ~ A&0[18:18:15]; 00251000
END; 00252000
PROCEDURE CREATE(S,L,N,VL,E); 00253000
VALUE S,N,VL; 00254000
INTEGER S,N,E; 00255000
PROCEDURE L; LIST VL; 00256000
BEGIN 00257000
IF N < 0 THEN 00258000
E?RROR(S,0,L); 00259000
IF N > 254 THEN 00260000
E?RROR(S,1,L); 00261000
S ~ E ~ G?TSPACE(N~N); 00262000
R?W~S.[33:7]; C?L~S.[40:8]; S~0; 00263000
FOR VL DO IF (S~S+1){N THEN R?1[R?W,C?L+S]~VL; 00264000
CRE?CNT ~ CRE?CNT + 1; 00265000
END CREATE; 00266000
PROCEDURE DESTROY(S,L,E); 00267000
VALUE S,E; 00268000
INTEGER S,E; 00269000
PROCEDURE L; 00270000
BEGIN 00271000
ALPHA A,B,C,D,F; 00272000
LABEL XT; 00273000
IF E.[1:9] ! 384 THEN E?RROR(S,2,L); 00274000
IF (C~A~R?1[E.[33:7],E.[40:8]])}0 OR (D~E.[10:8])!A.[10:8] 00275000
OR D=0 THEN GO TO XT; 00276000
WHILE B~C.[18:15] ! 0 DO 00277000
BEGIN 00278000
F ~ R?1[B.[33:7],B.[40:8]]; 00279000
DO BEGIN D~F;F~R?1[F.[33:7],F.[40:8]] END 00280000
UNTIL F.[10:8]=0; 00281000
R?1[R?W~D.[33:7],(C?L~D.[40:8])+1]~ *-1; 00282000
R?1[R?W,C?L+4]~ *+T?ME; 00283000
IF R?1[R?W,C?L+11]<F~R?1[B.[33:7],B.[40:8]+2]+ 00284000
T?ME THEN 00285000
R?1[R?W,C?L+11]~ F; 00286000
IF(F~R?1[R?W~B.[33:7],(C?L~B.[40:8])+1].[3:7])=0 THEN 00287000
BEGIN 00288000
R?1[(C~ R?1[R?W,C?L]).[18:7], C.[25:8]] 00289000
.[33:15] ~ C; 00290000
R?1[C.[33:7], C.[40:8]].[18:15]~ C.[18:15]; 00291000
END; 00292000
C~ R?1[R?W,C?L+1]; 00293000
IF F=0 THEN F?RGETSPACE(B) 00294000
ELSE R?1[R?W,C?L+1] ~ 0&F[3:41:7]; 00295000
END; 00296000
IF A~ A.[33:15]>0 THEN 00297000
BEGIN 00298000
C~ R?1[A.[33:7], A.[40:8]]; 00299000
WHILE B~ C.[33:15]!A DO 00300000
BEGIN 00301000
IF (F~D~R?1[B.[33:7],B.[40:8]+1]) < 0 THEN 00302000
BEGIN 00303000
C ~ R?1[F.[33:7],F.[40:8]].[18:15]; 00304000
WHILE C!B DO 00305000
C~ R?1[(D~ C+1).[33:7], D.[40:8]].[18:15]; 00306000
R?1[D.[33:7], D.[40:8]].[18:15]~ F.[18:15]; 00307000
END; 00308000
IF F.[3:7]=0 THEN F?RGETSPACE(B) 00309000
ELSE R?1[B.[33:7],B.[40:8]+1]~1&F[3:3:7]; 00310000
END; 00311000
IF ST?RTIME<0 THEN R?1[A.[33:7],A.[40:8]].[33:15] ~ 0 00312000
ELSE F?RGETSPACE(A); 00313000
END; 00314000
F?RGETSPACE(E); 00315000
XT: END PROC DESTROY; 00316000
INTEGER PROCEDURE R?OW(S,L,A,E,I); 00317000
VALUE S,A,E,I; 00318000
INTEGER S,A,E,I; 00319000
PROCEDURE L; 00320000
BEGIN 00321000
C?ECK(S,3,E,J?NK,L); 00322000
IF I < 0 THEN E?RROR(S,27,L); 00323000
IF A~A+I < 1 THEN 00324000
E?RROR(S,4,L); 00325000
IF J?NK.[2:8] < A THEN 00326000
E?RROR(S,5,L); 00327000
R?OW ~ E.[33:7]; 00328000
C?OL ~ E.[40:8] + A; 00329000
END; 00330000
INTEGER PROCEDURE S?THDR; 00331000
BEGIN REAL S; 00332000
S?THDR~S~G?TSPACE(13); 00333000
R?1[R?W~S.[33:7],C?L~S.[40:8]] ~ (*)&0[10:40:8] 00334000
&S[33:33:15]&S[18:33:15]; 00335000
R?1[R?W,C?L+7] ~ IN?FIN; 00336000
IF F?RSTIME THEN 00337000
BEGIN R?1[R?W,C?L+6] ~ ST?RTIME; 00338000
ST?RTIME ~ S & 0[10:40:8]; 00339000
END ELSE 00340000
R?1[R?W,C?L+6] ~ T?ME; R?1[R?W,C?L+2] ~ 1; 00341000
END S?THDR; 00342000
PROCEDURE PUT(S,L,E,T,Q,R); 00343000
VALUE S,E,T,Q,R; 00344000
INTEGER S,E,T,Q,R; 00345000
PROCEDURE L; 00346000
BEGIN 00347000
ALPHA A,B,C,D; 00348000
REAL SM; 00349000
LABEL BAL,PT; 00350000
IF E.[1:9]!384 OR (A~R?1[E.[33:7],E.[40:8]])}0 00351000
OR A.[10:8]!E.[10:8] THEN E?RROR(S,6,L); 00352000
IF S<0 THEN B~Q ELSE 00353000
IF Q.[1:9]!384 OR (B~R?1[Q.[33:7],Q.[40:8]])}0 00354000
OR Q.[10:8]!B.[10:8] THEN E?RROR(S,7,L); 00355000
IF (R?W~B.[33:7])+(C?L~B.[40:8])=0 THEN BEGIN 00356000
00357000
R?1[Q.[33:7],Q.[40:8]] ~ B ~ B & S?THDR[33:33:15]; 00358000
SM ~ R?1[R?W,C?L+1] ~ 1; 00359000
00360000
00361000
00362000
00363000
END ELSE 00364000
SM ~ R?1[R?W,C?L+1] ~ *+1; 00365000
IF T<0 THEN BEGIN T~R?1[R?W,C?L+2]; 00366000
IF ABS(T)> 2 THEN BEGIN 00367000
R~ T.[18:15]|SIGN(T); 00368000
T~ T.[33:15]; 00369000
END; 00370000
END; 00371000
R?1[R?W,C?L+3]~ *+1; 00372000
R?1[R?W,C?L+4]~ *-T?ME; 00373000
IF R?1[R?W,C?L+5]< SM THEN 00374000
R?1[R?W,C?L+5]~ SM; 00375000
B ~ B.[33:15]; 00376000
R?1[((C~ G?TSPACE(2))-1).[33:7],(C-1).[40:8]]~ E&A[18:18:15]; 00377000
R?1[C.[33:7],C.[40:8]+2]~ -T?ME; 00378000
R?1[E.[33:7],E.[40:8]] ~ A & C[18:33:15]; 00379000
IF T ! 1 THEN 00380000
D ~ R?1[B.[33:7],B.[40:8]].[33:15] 00381000
ELSE 00382000
D ~ B; 00383000
IF T > 2 THEN BEGIN 00384000
00385000
C?ECK(S,8,R,0,L); 00386000
BAL: IF D = B THEN 00387000
E?RROR(S,9,L); 00388000
IF (J?NK~R?1[D.[33:7],D.[40:8]+1]).[33:15]!R.[33:15] 00389000
OR J?NK } 0 THEN 00390000
BEGIN D~ R?1[D.[33:7], D.[40:8]].[33:15]; 00391000
GO BAL 00392000
END; 00393000
IF T=4 THEN 00394000
D~ R?1[D.[33:7], D.[40:8]].[33:15] 00395000
END 00396000
ELSE 00397000
IF T=2 THEN 00398000
BEGIN T~SIGN(R); R~ABS(R); 00399000
A~ T|R?1[R?OW(S, L, R, E, 0), C?OL]; 00400000
IF D = B THEN GO PT; %W1100401000
Q ~ R?1[R?W,C?L].[18:15]; %W1100402000
IF J?NK~R?1[Q.[33:7],Q.[40:8]+1]<0 THEN % VALID %W1100403000
IF T|R?1[R?OW(S,L,R,J?NK&0[3:3:7],0),C?OL]{A %W1100404000
THEN BEGIN D~B; GO PT END; % RANKED, BOTTOM %W1100405000
WHILE D!B DO 00406000
BEGIN 00407000
00408000
00409000
00410000
IF J?NK~R?1[D.[33:7],D.[40:8]+1]<0 THEN 00411000
00412000
IF T|R?1[R?OW(S,L,R,J?NK&0[3:3:7],0),C?OL]>A 00413000
THEN GO PT; 00414000
D~R?1[D.[33:7],D.[40:8]].[33:15]; 00415000
END; 00416000
END; 00417000
PT: J?NK~ R?1[D.[33:7], D.[40:8]]; 00418000
R?1[C.[33:7], C.[40:8]].[18:30]~ D&J?NK[18:18:15]; 00419000
R?1[D.[33:7], D.[40:8]].[18:15]~ C; 00420000
R?1[J?NK.[18:7], J?NK.[25:8]].[33:15]~ C; 00421000
END; 00422000
PROCEDURE REMOVE(S,L,E,Q); 00423000
VALUE S,E,Q; 00424000
INTEGER S,E,Q; 00425000
PROCEDURE L; 00426000
BEGIN 00427000
ALPHA A,B,C; 00428000
LABEL LOOP; 00429000
IF E.[1:9]!384 OR (A~R?1[E.[33:7],E.[40:8]])}0 00430000
OR A.[10:8]!E.[10:8] THEN E?RROR(S,10,L); 00431000
IF S<0 THEN C ~ B ~ Q ELSE 00432000
BEGIN IF Q.[1:9]!384 OR (B~R?1[Q.[33:7],Q.[40:8]])}0 00433000
OR Q.[10:8]!B.[10:8] THEN E?RROR(S,11,L); 00434000
IF (C ~ B.[33:15])=0 THEN E?RROR(S,12,L); 00435000
END; 00436000
E ~ E.[33:15]; 00437000
00438000
Q~ R?1[B.[33:7], B.[40:8]].[33:15]; 00439000
LOOP: IF Q=C THEN E?RROR(S,14,L); 00440000
IF (J?NK~R?1[R?W~Q.[33:7],(C?L~Q.[40:8])+1]).[33:15]!E 00441000
OR J?NK } 0 THEN 00442000
BEGIN 00443000
Q ~ R?1[R?W,C?L].[33:15]; 00444000
GO TO LOOP 00445000
END; 00446000
WHILE A.[18:15]!Q DO 00447000
A~ R?1[(E~ A.[18:15]+1).[33:7], E.[40:8]]; 00448000
R?1[E.[33:7], E.[40:8]].[18:15]~ J?NK.[18:15]; 00449000
A ~ R?1[R?W,C?L+2] + T?ME; 00450000
IF (S~R?1[R?W,C?L+1].[3:7])=0 THEN 00451000
BEGIN 00452000
R?1[(B~R?1[R?W,C?L]).[18:7],B.[25:8]].[33:15] ~ B; 00453000
R?1[B.[33:7], B.[40:8]].[18:15]~ B.[18:15]; 00454000
F?RGETSPACE(Q); 00455000
END ELSE 00456000
R?1[R?W,C?L+1] ~ 0&S[3:41:7]; 00457000
IF R?1[R?W~C.[33:7],(C?L~C.[40:8])+11]<A THEN 00458000
R?1[R?W,C?L+11] ~ A; 00459000
R?1[R?W,C?L+4] ~ *+T?ME; 00460000
R?1[R?W,C?L+1] ~ *-1; 00461000
END P REMOVE; 00462000
INTEGER PROCEDURE SC?N(E,CV,B); VALUE E; %E POINTS TO LAST SCANNED 00463000
REAL E,CV; 00464000
BOOLEAN B; 00465000
BEGIN 00466000
LABEL XT,ER,NXT,X; 00467000
REAL T1,T2,T3,T4,T5; 00468000
IF E=0 THEN % BAD POINTER 00469000
ER: BEGIN SC?N~ CV~ 1; GO XT; END; 00470000
T3~ E.[1:2]; 00471000
IF (T1~R?1[R?W~E.[33:7],C?L~E.[40:8]]).[10:8]=0 THEN GO NXT; 00472000
IF T1.[1:9]!258 THEN GO ER; IF (T4 ~ E.[3:2]) ! 0 THEN 00473000
IF (T2 ~ R?1[R?W,C?L+1].[3:7]) < 125 THEN 00474000
BEGIN IF T2~T2-T4 < 0 THEN GO TO ER; 00475000
IF T5~ R?1[R?W,C?L+1]~(*)&T2[3:41:7]}0 AND T2=0 THEN 00476000
BEGIN COMMENT DEAD LINK ENTITY -- BURY IT; 00477000
IF T5 = 0 THEN 00478000
BEGIN COMMENT SET STILL EXISTS -- DELINK; 00479000
R?1[T1.[33:7],T1.[40:8]] ~ (*)&T1[18:18:15]; 00480000
R?1[T1.[18:7],T1.[25:8]].[33:15]~ T1; 00481000
END; 00482000
F?RGETSPACE(E); 00483000
END; 00484000
END; 00485000
NXT:IF (E~R?1[R?W~T1.[33:7],C?L~T1.[40:8]]).[10:8]=0 THEN 00486000
BEGIN CV ~ 0; GO XT END BECAUSE THIS IS SET HEADER; 00487000
IF T4 ~ R?1[R?W,C?L+1] < 0 THEN 00488000
BEGIN CV ~ T4&0[3:41:7]&T1[18:33:15]; 00489000
IF B THEN GO X; 00490000
END; 00491000
T1 ~ E; GO TO NXT; 00492000
X: IF T3!0 THEN IF (T2~T4.[3:7]+T3)<128 THEN 00493000
R?1[R?W,C?L+1] ~ T4&T2[3:41:7]; 00494000
XT: END SC?N; 00495000
00496000
INTEGER PROCEDURE N?XT(S,L,CV,B);VALUE S;INTEGER S,CV;PROCEDURE L; 00497000
BOOLEAN B;BEGIN INTEGER C;C~CV;IF SC?N(CV.[18:15]&5[1:45:3],CV,B)>0 00498000
THEN E?RROR(S,35,L); N?XT~CV-C; END N?XT; 00499000
INTEGER PROCEDURE F?RST(S,L,Q,E,CV,B);VALUE S,Q,E; INTEGER S,Q,E,CV; 00500000
PROCEDURE L; BOOLEAN B; 00501000
BEGIN 00502000
C?ECK(S,15,Q,J?NK,L); CV~ 0; 00503000
IF J?NK ~ J?NK.[33:15]!0 THEN 00504000
IF J?NK ! R?1[J?NK.[33:7],J?NK.[40:8]].[33:15] THEN 00505000
IF SC?N(J?NK&REAL(E!0)[1:47:1],CV,B) > 0 THEN E?RROR (S,36,L); 00506000
00507000
IF E < 0 THEN WHILE CV.[33:15]!E AND CV < 0 DO 00508000
J?NK ~ N?XT(S,L,CV,B); 00509000
F?RST ~ CV; 00510000
END F?RST; 00511000
PROCEDURE CAUSE(S, L, P, E, N, T); 00512000
VALUE S, P, N, E, T; 00513000
INTEGER S, N, P, T; 00514000
PROCEDURE L; 00515000
LIST E; 00516000
BEGIN 00517000
ALPHA A, B, C; 00518000
IF T<T?ME THEN 00519000
E?RROR(S, 16, L); 00520000
R?1[R?W~(B~G?TSPACE(P~P+3)).[33:7],C?L~B.[40:8]+1] ~ T; 00521000
FOR E DO 00522000
BEGIN 00523000
IF C=P THEN 00524000
E?RROR(S, 17, L) 00525000
ELSE 00526000
IF C=0 THEN 00527000
BEGIN IF SAME(E)= REAL(NOT FALSE) THEN 00528000
E ~ E?P; 00529000
R?1[R?W,C?L+1] ~ E & N[18:33:15]; 00530000
C ~ 2; 00531000
END 00532000
ELSE 00533000
R?1[R?W,C?L+C] ~ E; 00534000
C~ C+1 00535000
END; 00536000
00537000
00538000
00539000
R?1[R?W,C?L+2] ~ -1; 00540000
IF TRACE?TOG THEN IF BOOLEAN(F?TCHLIST[N.[40:8]|2+1].[1:1]) 00541000
THEN TR?CE(B,4); 00542000
IF S<0 THEN K?P ~ B ELSE 00543000
PUT(-S,L,B,REAL(N}0)|2,CAL?HDR,1); 00544000
END; 00545000
INTEGER PROCEDURE FIRST(S,L,Q); 00546000
VALUE S,Q; 00547000
INTEGER S,Q; 00548000
PROCEDURE L; 00549000
BEGIN 00550000
C?ECK(S,19,Q,0,L); 00551000
IF FIRST~F?RST(S,L,Q,0,Q,TRUE) = 0 THEN 00552000
E?RROR(S,20,L); 00553000
END; 00554000
INTEGER PROCEDURE NEXTEVENT(S,L); 00555000
VALUE S; 00556000
INTEGER S; 00557000
PROCEDURE L; 00558000
BEGIN 00559000
IF SC?N(CAL?HDR,J?NK,TRUE)>0 THEN E?RROR(S,56,L); 00560000
IF J?NK!0 THEN 00561000
NEXTEVENT ~ R?1[J?NK.[33:7],J?NK.[40:8]+2] 00562000
ELSE 00563000
NEXTEVENT~-1; 00564000
END; 00565000
INTEGER PROCEDURE LAST(S,L,Q);VALUE S,Q;INTEGER S;PROCEDURE L; 00566000
ALPHA Q; BEGIN LABEL XT; 00567000
C?ECK(S,22,Q,Q,L); 00568000
IF Q ~ Q.[33:15] = 0 THEN E?RROR(S,23,L); 00569000
IF Q = (Q~R?1[Q.[33:7],Q.[40:8]]).[33:15] THEN E?RROR(S,23,L); 00570000
WHILE (Q~R?1[R?W~Q.[18:7],C?L~Q.[25:8]]).[10:8]!0 DO 00571000
IF (J?NK~R?1[R?W,C?L+1])<0 THEN GO TO XT; 00572000
E?RROR(S,23,L); 00573000
XT: LAST ~ J?NK&0[3:41:7]; 00574000
END PROCEDURE LAST; 00575000
00576000
00577000
00578000
INTEGER PROCEDURE NEXT(S,L,E);VALUE S,E; REAL S,E; PROCEDURE L; 00579000
BEGIN 00580000
00581000
IF SC?N(E.[18:15],E,TRUE)>0 THEN E?RROR(S,37,L); 00582000
NEXT ~ E; 00583000
END P NEXT; 00584000
$$ A TIMEIT 00585000
PROCEDURE CANCEL(S,L,E); 00586000
VALUE S,E; 00587000
INTEGER S,E; 00588000
PROCEDURE L; 00589000
BEGIN 00590000
ALPHA A; 00591000
LABEL F; 00592000
C?ECK(S,24,E,0,L); 00593000
00594000
00595000
E ~ E.[33:15]; 00596000
IF SC?N(CAL?HDR,A,R?1[A.[33:7],A.[40:8]+2].[33:15]=E 00597000
OR A.[33:15]=E)>0 THEN E?RROR(S,56,L); 00598000
IF A ! 0 THEN 00599000
BEGIN 00600000
IF TRACE?TOG.[46:1] THEN 00601000
IF BOOLEAN(F?TCHLIST[R?1[A.[33:7],A.[40:8]+2].[25:8] 00602000
|2+1].[1:1]) THEN TR?CE(A,5); 00603000
REMOVE(-S,L,A,CAL?HDR); 00604000
F?RGETSPACE(A); 00605000
00606000
END ELSE 00607000
E?RROR(S, 26, L); 00608000
END M P CANCEL; 00609000
00610000
INTEGER PROCEDURE FIND(E,M,X,V);VALUE E,M;REAL X,V;LIST E; REAL M; 00611000
BEGIN 00612000
REAL T,F; 00613000
LABEL XT; 00614000
V ~ -IN?FIN; 00615000
FOR E DO 00616000
IF (T~X) > V THEN 00617000
BEGIN FIND~ F~ E; 00618000
IF M=0 THEN GO XT; 00619000
V ~ T; 00620000
END; 00621000
V ~ M | V; 00622000
XT: IF T~ R?1[F.[18:7],F.[25:8]+1].[2:8]}254 THEN 00623000
R?1[F.[18:7],F.[25:8]+1].[2:8]~ T-2; 00624000
END; 00625000
PROCEDURE SIMULATION; 00626000
BEGIN T?MESCALE ~ 1; 00627000
R?DATE ~ TIME(8); R?TIME ~ TIME(9); 00628000
L?MAR ~ 0; R?MAR ~ 107; 00629000
LINESPERPAGE ~ 45; 00630000
PAGENUMBER ~ PAGEHEADLINES ~ CRE?CNT ~ MAX?SP ~ CUR?SP ~ 00631000
C?UNT ~ R?WCNT ~ 0; 00632000
ST?RTIME ~ -0; 00633000
CALENDAR ~ SYS?SPACE(0); 00634000
S?USPENDED ~ SYS?SPACE(0); 00635000
SIGNIFICANCE ~ 8; 00636000
E?P ~ SYS?SPACE(0); 00637000
R?1[CALENDAR.[33:7],CALENDAR.[40:8]].[33:15]~CAL?HDR~S?THDR.[33:15]; 00638000
R?1[S?USPENDED.[33:7],S?USPENDED.[40:8]].[33:15] ~ 00639000
SUS?HDR ~ S?THDR.[33:15]; 00640000
FOR J?NK ~ 0 STEP 1 UNTIL 10 DO 00641000
RANDOM[J?NK] ~ (J?NK*2 + 1.77).[12:36]; 00642000
RAND?MASK ~ <1140000000000000>; 00643000
IN?FIN~REAL(NOT FALSE)&0[1:46:2]; 00644000
FILL POWERS?OF?TEN[*] WITH 00645000
OCT1141000000000000,OCT1131200000000000, 00646000
OCT1121440000000000,OCT1111750000000000,OCT1102342000000000, 00647000
OCT1073032400000000,OCT1063641100000000,OCT1054611320000000, 00648000
OCT1045753604000000,OCT1037346545000000,OCT1011124027620000, 00649000
OCT0001351035564000,OCT0011643245121000,OCT0022214116345200, 00650000
OCT0032657142036440,OCT0043432772446150,OCT0054341571157602, 00651000
OCT0065432127413543,OCT0076740555316473,OCT0111053071060221, 00652000
OCT0121265707274266,OCT0131543271153343,OCT0142074147406234, 00653000
OCT0152513201307703,OCT0163236041571663,OCT0174105452130240, 00654000
OCT0205126764556310,OCT0216354561711772,OCT0231004771627437, 00655000
OCT0241206170175347,OCT0251447626234641,OCT0261761573704011, 00656000
OCT0272356132665013,OCT0303051561442216,OCT0313664115752661, 00657000
OCT0324641141345435,OCT0336011371636745,OCT0347413670206536, 00658000
OCT0361131664625027,OCT0371360241772234,OCT0401654312370703, 00659000
OCT0412227375067064,OCT0422675274304701,OCT0433454553366062, 00660000
OCT0444367706263476,OCT0455465667740415,OCT0467003245730521, 00661000
OCT0501060411731665,OCT0511274514320242,OCT0521553637404312, 00662000
OCT0532106607305375,OCT0542530351166674,OCT0553256443424453, 00663000
OCT0564132154331566,OCT0575160607420123,OCT0606414751324150, 00664000
OCT0621012014361120,OCT0631214417455344,OCT0641457523370635, 00665000
OCT0651773450267005,OCT0662372362344606,OCT0673071057035747, 00666000
OCT0703707272645341,OCT0714671151416632,OCT0726047403722400, 00667000
OCT0737461304707100,OCT0751137556607072,OCT0761367512350710, 00668000
OCT0771665435043073; 00669000
END; 00670000
PROCEDURE RANKING(S,L,E,T); 00671000
VALUE S,E,T; 00672000
PROCEDURE L; 00673000
INTEGER E,T; REAL S; 00674000
BEGIN 00675000
IF T.[33:15]>2 THEN 00676000
E?RROR(S,41,L); 00677000
C?ECK(S,42,E,S,L); 00678000
IF (R?W~S.[33:7])+(C?L~S.[40:8])=0 THEN 00679000
00680000
R?1[E.[33:7],E.[40:8]] ~ S&S?THDR[33:33:15]; 00681000
00682000
00683000
00684000
00685000
00686000
R?1[R?W,C?L+2] ~ T; 00687000
END; 00688000
INTEGER PROCEDURE SIZE(S,L,E);VALUE S,E;INTEGER S,E; PROCEDURE L; 00689000
BEGIN 00690000
C?ECK(S,45,E,S,L); 00691000
SIZE~S.[2:8]; 00692000
END; 00693000
PROCEDURE FL?P(A,N); VALUE N; INTEGER N; ARRAY A[*]; 00694000
BEGIN ARRAY F[0:N]; 00695000
$$ B EXCHANGE 00696000
EXCHANGE(A,F); 00697000
END FL?P; 00698000
INTEGER PROCEDURE CCSC?N(RESULT); ALPHA RESULT; 00699000
BEGIN INTEGER J,K; 00700000
LABEL NOTINT,RESC,DONE; DEFINE NCR=SC?NCR#; 00701000
INTEGER STREAM PROCEDURE CCS(NCRV,RS); VALUE NCRV; 00702000
BEGIN LABEL L1,L2,L3,SP; 00703000
SI ~ NCRV; DI ~ RS; 00704000
L1: IF SC=" " THEN BEGIN SI~SI+1; GO L1 END; 00705000
IF SC > "9" THEN GO SP; 00706000
IF SC } "0" THEN 00707000
BEGIN 00708000
L4: IF SC = "0" THEN BEGIN SI ~ SI+1; GO L4 END; 00709000
IF SC < "0" THEN SI~SI-1; 00710000
IF SC > "9" THEN SI~SI-1; 00711000
CCS ~ SI; 00712000
63(TALLY~TALLY+1; SI~SI+1; IF SC<"0" THEN JUMP OUT; 00713000
IF SC>"9"THEN JUMP OUT); 00714000
NCRV ~ TALLY; SI ~ LOC RS; SI~SI-1; 00715000
DS ~ 7 LIT"3000000"; DS ~ CHR; 00716000
END ELSE 00717000
IF SC=ALPHA THEN 00718000
BEGIN DS ~ LIT "1"; 00719000
7(IF SC=ALPHA THEN DS~CHR ELSE DS~LIT" "); 00720000
L2: IF SC=ALPHA THEN BEGIN SI~SI+1; GO TO L2 END; 00721000
CCS ~ SI; 00722000
END ELSE 00723000
IF SC = """ THEN 00724000
BEGIN SI ~ SI+1; DS~LIT"1"; DS ~ CHR; 00725000
6(IF SC!""" THEN DS ~ CHR ELSE DS ~ LIT" "); 00726000
L3: IF SC!""" THEN BEGIN SI ~ SI+1; GO L3 END; 00727000
SI ~ SI+1; CCS ~ SI; 00728000
END ELSE 00729000
SP: BEGIN 00730000
DS ~ 7 LIT"2000000"; 00731000
DS ~ CHR; CCS ~ SI; 00732000
END; 00733000
END CCS; 00734000
INTEGER STREAM PROCEDURE INTS(NC,N,R); VALUE NC,N; 00735000
BEGIN SI~NC; DI~R; DS~N OCT; INTS~SI; 00736000
END INTS; 00737000
NCR ~ CCS(NCR,RESULT); 00738000
IF (CCSC?N~RESULT.[1:5])!3 THEN GO NOTINT; 00739000
K ~ (K~((J~RESULT.[42:6])-1)MOD 8)+1; 00740000
NCR ~ INTS(NCR,K,RESULT); 00741000
IF (J~J-K) { 0 THEN GO TO DONE; 00742000
RESC: NCR ~ INTS(NCR,8,K); 00743000
RESULT ~ RESULT|100000000 + K; 00744000
IF (J~J-8) > 0 THEN GO TO RESC; 00745000
IF RESULT.[2:7] ! 0 THEN CCSC?N ~ 4; 00746000
GO TO DONE; 00747000
NOTINT: RESULT.[1:5] ~ 0; 00748000
DONE: 00749000
END CCSCAN; 00750000
BOOLEAN PROCEDURE FETCH(S,L,X);VALUE S; REAL S; PROCEDURE L; LIST X; 00751000
BEGIN 00752000
LABEL LLL,XT,ON,LEV,EOF,EOF1,AGN,ER1,FX,EVON,FX2,ER2; 00753000
LABEL NXT; 00754000
DEFINE NCR=SC?NCR#; 00755000
BOOLEAN INSET; 00756000
REAL TYPE,RESULT,I,T,TT,N ; 00757000
INTEGER J,FCR; 00758000
INTEGER STREAM PROCEDURE MKABS(B); BEGIN SI~B; MKABS~SI; END; 00759000
STREAM PROCEDURE BLANK(B,NW,NC); VALUE B,NW,NC; 00760000
BEGIN DI ~ B; NW(DS ~ 8 LIT" "); NC(DS ~ LIT" "); 00761000
END BLANK; 00762000
STREAM PROCEDURE MOVE(NN,N,S,D); VALUE NN,N; 00763000
BEGIN SI ~ S; DI ~ D; 00764000
NN(DS ~ 32 WDS; DS ~ 32 WDS); 00765000
DS ~ N WDS; 00766000
END MOVE; 00767000
FOR X DO BEGIN 00768000
X ~ 0; 00769000
IF NCR<0 THEN GO TO XT; 00770000
NCR ~ -1; 00771000
NXT: 00772000
READ (READER[NO],10,INB?FF[*])[XT]; 00773000
FCR ~ NCR ~ MKABS(READER(0)); 00774000
AGN:IF (T~CCSC?N(RESULT))!1 THEN 00775000
BEGIN IF T=3 THEN GO FX; 00776000
IF RESULT="." OR RESULT="-" THEN GO FX; 00777000
E?RROR(S,-40,L); 00778000
FX2: WRITE(PRINTER[DBL],10,INB?FF[*]); LINEC?NT~LINEC?NT+2; 00779000
FX: I ~ 1023; T ~ 255; 00780000
GO ON; 00781000
END; 00782000
J ~ NCR; 00783000
IF RESULT="SET " THEN 00784000
BEGIN IF INSET THEN GO ER2; 00785000
INSET ~ TRUE; 00786000
GO AGN; 00787000
END; 00788000
IF RESULT="END " THEN BEGIN READ(READER); GO XT END; 00789000
I ~ -2; 00790000
WHILE (T ~ F?TCHLIST[I~I+2])}0 DO 00791000
IF T= RESULT THEN GO ON; 00792000
ER2:E?RROR(S,IF INSET THEN -31 ELSE -39,L); 00793000
GO FX2; 00794000
ON: IF I } EV?MAX THEN 00795000
BEGIN COMMENT ENTITY; 00796000
IF J!0 THEN BLANK(FCR,J.[33:15]-FCR,J.[30:3]); 00797000
IF I ! 1023 THEN IF (T ~ F?TCHLIST[I+1])>255 THEN 00798000
BEGIN I ~ 1023; 00799000
T ~ 255; 00800000
END; 00801000
IF T<0 THEN 00802000
BEGIN COMMENT "PAGEHEAD" DATA; 00803000
R?W ~ 1; C?L ~ 80; NCR ~ -1; 00804000
READ(READER,/,R?W,C?L)[XT]; 00805000
IF C?L>80 THEN C?L ~ 80; 00806000
FOR PAGEHEADLINES ~ 0 STEP 1 UNTIL R?W-1 DO 00807000
BEGIN 00808000
READ(READER,10,INB?FF[*])[XT]; 00809000
PAGEHEADARRAY[PAGEHEADLINES,0] ~ C?L; 00810000
MOVE(C?L.[40:2],C?L,INB?FF[0],PAGEHEADARRAY[PAGEHEADLINES,1]); 00811000
END; 00812000
GO TO NXT; 00813000
END; 00814000
READ(READER,/,FOR J ~ 1 STEP 1 UNTIL T DO INB?FF[J], 00815000
FOR J ~ T+1 STEP 1 WHILE TRUE DO RESULT)[EOF]; 00816000
IF FALSE THEN EOF: NCR ~ -1; 00817000
IF I = 1023 THEN T ~ J-1; 00818000
CREATE(S,L,T,E?LST,X); 00819000
MOVE(T.[40:2], T,INB?FF[1],R?1[X.[33:7],X.[40:8]+1]); 00820000
END ENTITY CASE ELSE 00821000
BEGIN COMMENT EVENT; 00822000
IF (T ~ CCSC?N(RESULT))=2 THEN GO TO EVON; 00823000
IF T ! 3 THEN GO TO ER1; 00824000
N ~ RESULT; TYPE ~ T?MESCALE; 00825000
J ~ NCR; 00826000
IF CCSC?N(RESULT)!2 THEN GO TO ER1; 00827000
IF RESULT=":" THEN 00828000
BEGIN 00829000
TYPE ~ 3600; TT ~ 60; 00830000
GO TO LLL; 00831000
END; 00832000
IF RESULT = "/" THEN 00833000
BEGIN TYPE ~ -86400; 00834000
TT ~ 24; 00835000
LLL: J ~ NCR; 00836000
IF (T~CCSC?N(RESULT))=2 THEN GO TO EVON; 00837000
IF T ! 3 THEN GO ER1; 00838000
N ~ TT|N + RESULT; 00839000
TYPE ~ TYPE/TT; 00840000
TT ~ 60; 00841000
J ~ NCR; 00842000
IF CCSC?N(RESULT)!2 THEN GO TO ER1; 00843000
IF RESULT=":" THEN GO TO LLL; 00844000
END; 00845000
EVON: 00846000
IF RESULT!"," AND RESULT!"." THEN GO TO ER1; 00847000
IF TYPE=60 AND T?MESCALE=1 THEN TYPE~ 1 ELSE 00848000
IF TYPE~ABS(TYPE)<1 THEN 00849000
BEGIN 00850000
ER1: E?RROR(S,-38,L); 00851000
WRITE(PRINTER[DBL],10,INB?FF[*]); LINEC?NT~LINEC?NT+2; 00852000
END; 00853000
BLANK(FCR,J.[33:15]-FCR,J.[30:3]); 00854000
J ~ ABS(F?TCHLIST[I+1]); 00855000
T ~ (FCR ~ J MOD 100 + 10) + J DIV 100; 00856000
IF T} 999 THEN I ~ I+1; IF T>255 THEN T ~ 255; 00857000
INB?FF[10]~0; MOVE((T-10).[40:2],T-10,INB?FF[10],INB?FF[11]); 00858000
READ(READER,/,FOR J~10 STEP 1 UNTIL T DO INB?FF[J], 00859000
FOR J~T+1 STEP 1 WHILE TRUE DO RESULT)[EOF1]; 00860000
IF FALSE THEN EOF1: NCR ~ -1; 00861000
IF (J ~ J-1) { FCR THEN TT ~ 0 ELSE 00862000
IF BOOLEAN(I) THEN TT~J-FCR ELSE TT~T-FCR; 00863000
CREATE(S,L,TT,E?LST,X); 00864000
MOVE(TT.[40:2],TT,INB?FF[FCR+1],R?1[(J~X).[33:7],J.[40:8]+1]); 00865000
IF N~(INB?FF[10]+N)|TYPE/T?MESCALE{0 THEN N~T?ME ELSE IF N<T?ME 00866000
THEN BEGIN E?RROR(S,-44,L); 00867000
WRITE(PRINTER,10,INB?FF[*]); LINEC?NT ~ LINEC?NT+3; 00868000
WRITE(PRINTER[DBL],<"TIME CHANGED TO "A6,O".">, 00869000
DAY(T?ME~N),ALPHATIME(N)); 00870000
END; 00871000
CAUSE(S,L,FCR-10,[J,FOR T~11 STEP 1 UNTIL FCR DO INB?FF[T]], 00872000
I DIV 2,N); 00873000
END EVENT CASE; 00874000
IF INSET THEN WHILE FETCH(S,L,T) AND T!0 DO PUT(S,L,T,1,J,0); 00875000
END LIST SCAN; 00876000
XT: FETCH ~ NCR}0; 00877000
END P FETCH; 00878000
PROCEDURE RESUME(S,L,P,E,I,T,W,Q,N); 00879000
VALUE S,P,T,N,I,Q; 00880000
REAL S,P,E,T,W,N,I,Q; 00881000
PROCEDURE L; 00882000
BEGIN 00883000
ALPHA B; 00884000
STREAM PROCEDURE MOVE(S,D,M,N);VALUE M,N;BEGIN SI~S;DI~D; 00885000
SI~SI+8;M(DS~32WDS;DS~32WDS);DS~N WDS;END MOVE; 00886000
R?1[R?W~(B~G?TSPACE(P+3)).[33:7],(C?L~B.[40:8])+1] ~T; 00887000
IF P>0 THEN MOVE(E,R?1[R?W,C?L+4],P.[36:6],P); 00888000
IF SAME(E)=REAL(NOT FALSE) THEN E ~ E?P; 00889000
R?1[R?W,C?L+2] ~ E&N[18:33:15]; 00890000
IF(R?1[R?W,C?L+3]~I&Q[18:33:15])}0 THEN PUT(-S,L,B,1,SUS?HDR,0); 00891000
IF T<T?ME THEN E?RROR(S,16,L); 00892000
PUT(-S,L,SUS?EN~W~B,2,CAL?HDR,1); 00893000
END RESUME PROCEDURE; 00894000
BOOLEAN PROCEDURE NOTF?LL(S,L,E);VALUE S,E;REAL S,E;PROCEDURE L; 00895000
BEGIN IF E.[1:9]!384 OR J?NK~R?1[E.[33:7],E.[40:8]]}0 OR 00896000
J?NK.[10:8]!E.[10:8] THEN E?RROR(S,46,L); 00897000
IF NOT(NOTF?LL~(R?W~J?NK.[33:7])+(C?L~J?NK.[40:8])=0) THEN 00898000
NOTF?LL ~ R?1[R?W,C?L+1]<R?1[R?W,C?L+7]; 00899000
END NOTF?LL; 00900000
00901000
REAL PROCEDURE ST?T(S,L,E,I); 00902000
VALUE S,E,I; 00903000
REAL S,E,I; 00904000
PROCEDURE L; 00905000
BEGIN 00906000
C?ECK(S,46,E,S,L); IF S.[33:15]!0 THEN 00907000
IF I=4 THEN 00908000
ST?T~ R?1[S.[33:7],S.[40:8]+4]+T?ME|R?1[S.[33:7],S.[40:8]+1] 00909000
ELSE 00910000
IF I=10 THEN 00911000
ST?T~R?1[S.[33:7],S.[40:8]+10]+T?ME|R?1[S.[33:7],S.[40:8]+12] 00912000
ELSE 00913000
ST?T~ R?1[S.[33:7],S.[40:8]+I]; 00914000
END; 00915000
PROCEDURE RESET(S,L,E,V); 00916000
VALUE S,E,V; 00917000
REAL S,E,V; 00918000
PROCEDURE L; 00919000
BEGIN 00920000
C?ECK(S,18,E,S,L); 00921000
IF (R?W~S.[33:7])+(C?L~S.[40:8])=0 THEN 00922000
00923000
R?1[E.[33:7],E.[40:8]]~S~ S&S?THDR[33:33:15]; 00924000
00925000
00926000
00927000
00928000
E~ R?1[R?W,C?L+3]~ R?1[R?W,C?L+1]; %TOTMEMBERS 00929000
R?1[R?W,C?L+4]~ -T?ME|E; % OCCUP 00930000
R?1[R?W,C?L+5]~ E; % MAXMEMBERS 00931000
R?1[R?W,C?L+6] ~ T?ME; 00932000
IF V!IN?FIN THEN R?1[R?W,C?L+7]~ V; 00933000
R?1[R?W,C?L+8]~ E~R?1[R?W,C?L+12]; 00934000
R?1[R?W,C?L+9]~ 0; 00935000
R?1[R?W,C?L+10]~ -T?ME|E; 00936000
R?1[R?W,C?L+11]~ 0; 00937000
E ~ S.[33:15]; 00938000
WHILE (S ~ R?1[R?W,C?L]).[33:15] ! E DO 00939000
R?1[R?W~S.[33:7],(C?L~S.[40:8])+2] ~ -T?ME; 00940000
END; 00941000
PROCEDURE RE?CORD(L,P,A,S); VALUE L,A,S; PROCEDURE P; REAL L,A,S; 00942000
BEGIN 00943000
REAL B; C?ECK(L,47,A,A,P); 00944000
00945000
IF R?1[R?W~A.[33:7],(C?L~A.[40:8])+9]<B~R?1[K?P.[33:7],K?P.[40:8]+S] 00946000
+T?ME THEN R?1[R?W,C?L+9]~ B; 00947000
R?1[R?W,C?L+10]~ *+T?ME; 00948000
R?1[R?W,C?L+12]~ *-1; 00949000
END; 00950000
PROCEDURE CAPACITY(S,L,E,C); VALUE S,E,C; 00951000
REAL S,E,C; PROCEDURE L; 00952000
BEGIN 00953000
C?ECK(S,49,E,S,L); 00954000
IF (R?W~S.[33:7])+(C?L~S.[40:8])=0 THEN 00955000
00956000
R?1[E.[33:7],E.[40:8]] ~ S&S?THDR[33:33:15]; 00957000
00958000
00959000
00960000
00961000
R?1[R?W,C?L+7] ~ C; 00962000
END; 00963000
BOOLEAN PROCEDURE QUEUE(S,L,A,B,LST,SIZE,EV,CT); 00964000
VALUE S,A,B,SIZE,EV,CT; 00965000
REAL S,A,B,LST,SIZE,EV,CT; 00966000
PROCEDURE L; 00967000
00968000
BEGIN 00969000
LABEL XT; 00970000
ALPHA D,E,F; 00971000
STREAM PROCEDURE MOVE(S,D,M,N);VALUE M,N;BEGIN SI~S;DI~D; 00972000
SI~SI+8;M(DS~32WDS;DS~32WDS);DS~N WDS;END MOVE; 00973000
00974000
00975000
00976000
00977000
C?ECK(S,47,B,F,L); C?ECK(S,48,A,0,L); 00978000
IF (R?W~F.[33:7])+(C?L~F.[40:8])=0 THEN 00979000
R?1[B.[33:7],B.[40:8]] ~ F & S?THDR[33:33:15]; 00980000
IF QUEUE~ R?1[R?W,C?L+1]<R?1[R?W,C?L+7] THEN GO TO XT; 00981000
IF(R?1[R?W,C?L+12]~*+1)>R?1[R?W,C?L+13] THEN 00982000
R?1[R?W,C?L+13] ~ *+1; 00983000
R?1[R?W,C?L+8]~ *+1; 00984000
R?1[R?W,C?L+10]~ *-T?ME; 00985000
R?1[R?W~(D~G?TSPACE(SIZE+4)).[33:7],(C?L~D.[40:8])+3] ~ CT; 00986000
MOVE(LST,R?1[R?W,C?L+4],SIZE.[36:6],SIZE); 00987000
R?1[R?W,C?L+1] ~ IN?FIN; 00988000
IF SAME(LST)=REAL(NOT FALSE) THEN LST ~ E?P; 00989000
R?1[R?W,C?L+2] ~ LST & EV[18:33:15]; 00990000
R?1[R?W,C?L+SIZE+4] ~ -T?ME; 00991000
00992000
PUT(-S,L,D,1,SUS?HDR,0); 00993000
PUT(-S,L,SUS?EN~D,1,CAL?HDR,0); 00994000
00995000
XT: END QUEUE PROCEDURE; 00996000
PROCEDURE TR?CE(E,N); VALUE E,N; REAL E,N; 00997000
BEGIN 00998000
REAL J,R,C,P,AT,LM,RM,A,D,T; 00999000
FORMAT 01000000
F0(A6,O,":ACTIVATE "A1,A6 ), 01001000
F1(A6,O,":REACTIVATE "A1,A6"["I3"]"), 01002000
F2(A6,O,":SUSPEND "A1,A6"["I3"] UNTIL "A6,O), 01003000
F3(A6,O,":TERMINATE "A1,A6), 01004000
F4(A6,O,":SCHEDULE "A1,A6" FOR "A6,O), 01005000
F5(A6,O,":CANCEL "A1,A6"["I3"]"), 01006000
F6(A6,O,":RESCHEDULE "A1,A6"["I3"] FOR "A6,O), 01007000
F7(A6,O,":SUSPEND "A1,A6"["I3"]"); 01008000
ALPHA STREAM PROCEDURE ALPH(N); VALUE N; 01009000
BEGIN SI ~ LOC N; DI ~ LOC ALPH; DS ~ 8 DEC; 01010000
DI ~ DI-6; DS ~ 5 FILL; 01011000
END ALPH; 01012000
STREAM PROCEDURE MOVE(S,D,M,N); VALUE M,N; 01013000
BEGIN SI~S; DI ~ D; 01014000
M(DS ~ 32 WDS; DS ~ 32 WDS); 01015000
DS ~ N WDS; 01016000
END MOVE; 01017000
LIST L0(DAY(T?ME),ALPHATIME(T?ME),(E~F?TCHLIST[0&J[39:25:8]]) 01018000
.[6:6],E), 01019000
L1(L0,J.[18:7]), 01020000
L2(L0,J.[18:7],DAY(E~R?1[R,C+1]),ALPHATIME(E)), 01021000
L3(L0,DAY(E~R?1[R,C+1]),ALPHATIME(E)); 01022000
IF(T~J~R?1[R~E.[33:7],(C~E.[40:8])+2]).[33:15]=E?P.[33:15] 01023000
THEN T ~ LM ~ 0 01024000
ELSE LM ~ (R?1[J.[33:7],J.[40:8]].[2:8]+4) DIV 5; 01025000
IF N=3 THEN P~0 ELSE 01026000
IF (P~R?1[R,C].[2:8]-3)!0 THEN 01027000
BEGIN A ~ G?TSPACE(P); 01028000
MOVE(R?1[R,C+4],R?1[A.[33:7],A.[40:8]+1],P.[36:6],P); 01029000
END; 01030000
CHECK?PAGE(-((P+9)DIV 5 + LM)); 01031000
LM ~ L?MAR; RM ~ R?MAR; L?MAR ~ 15; R?MAR ~ 107; 01032000
CASE N OF 01033000
BEGIN; 01034000
IF J.[18:7]=0 THEN WRITE(PRINTER[11],F0,L0) 01035000
ELSE WRITE(PRINTER[11],F1,L1); 01036000
IF R?1[R,C+1]}REAL(<0777777777777776>) THEN 01037000
WRITE(PRINTER[11],F7,L1) ELSE WRITE(PRINTER[11],F2,L2); 01038000
WRITE(PRINTER[11],F3,L0); 01039000
WRITE(PRINTER[11],F4,L3); 01040000
WRITE(PRINTER[11],F5,L1); 01041000
WRITE(PRINTER[11],F6,L2); 01042000
END; 01043000
LINEC?NT ~ LINEC?NT+1; 01044000
IF P!0 THEN 01045000
BEGIN DISPLAY?D("PARAME","TERS ",A); 01046000
F?RGETSPACE(A); 01047000
END; 01048000
IF T!0 THEN DISPLAY?D("ENTITY",ALPH(J.[33:15]),J); 01049000
L?MAR ~ LM; R?MAR ~ RM; 01050000
END TR?CE; 01051000
INTEGER PROCEDURE EVNAME(S,L,E); VALUE S,E; REAL S,E; PROCEDURE L; 01052000
BEGIN INTEGER A; 01053000
C?ECK(S,50,E,0,L); 01054000
E ~ E.[33:15]; 01055000
IF SC?N(CAL?HDR,A,(EVNAME~R?1[A.[33:7],A.[40:8]+2]).[33:15]=E 01056000
OR A.[33:15]=E)>0 THEN E?RROR(S,56,L); 01057000
IF A=0 THEN EVNAME ~ 0; 01058000
END EVNAME PROC; 01059000
PROCEDURE RESCHEDULE(S,L,E,T,X); VALUE S,E,T,X; 01060000
REAL S,E,T,X; PROCEDURE L; 01061000
BEGIN INTEGER N; 01062000
C?ECK(S,51,E,0,L); 01063000
E ~ E.[33:15]; 01064000
IF SC?N(CAL?HDR,N,R?1[N.[33:7],N.[40:8]+2].[33:15]=E 01065000
OR N.[33:15]=E)>0 THEN E?RROR(S,56,L); 01066000
IF N=0 THEN E?RROR(S,52,L); 01067000
REMOVE(-S,L,N,CAL?HDR); 01068000
IF X=-2 THEN R?1[N.[33:7],N.[40:8]+1] ~ *+T ELSE 01069000
R?1[N.[33:7],N.[40:8]+1] ~ T; 01070000
IF TRACE?TOG.[45:1] THEN 01071000
IF BOOLEAN(F?TCHLIST[R?1[N.[33:7],N.[40:8]+2].[25:8]|2+1].[1:1]) 01072000
THEN TR?CE(N,6); 01073000
IF X=-1 THEN K?P ~ N ELSE PUT(-S,L,N,ABS(X),CAL?HDR,1); 01074000
END RESCHEDULE PROC; 01075000
PROCEDURE MOVE(S,L,E,V,T);VALUE S,E,T;INTEGER S,E,V,T;PROCEDURE L; 01076000
BEGIN 01077000
INTEGER N,EN; 01078000
C?ECK(S,53,V,0,L); 01079000
EN ~ V.[33:15]; 01080000
IF SC?N(CAL?HDR,N,N.[33:15]=EN)>0 THEN E?RROR(S,56,L); 01081000
IF N=0 THEN E?RROR(S,54,L); 01082000
IF (EN~R?1[N.[33:7],N.[40:8]+3])>0 OR (EN~EN.[18:15])>3 THEN 01083000
E?RROR(S,54,L); 01084000
IF REAL(BOOLEAN(T)AND BOOLEAN(EN))!0 THEN 01085000
R?1[N.[33:7],N.[40:8]+2].[18:7] ~ T; 01086000
V ~ E; K?P ~ N; 01087000
END; 01088000
INTEGER PROCEDURE SCHEDENTITY(S,L,E);VALUE S,E;REAL S,E;PROCEDURE L; 01089000
SCHEDENTITY ~ R?1[R?OW(S,L,2,E,0),C?OL]; 01090000
PROCEDURE CHECK?PAGE(N); VALUE N; REAL N; 01091000
BEGIN INTEGER I,J,M; LABEL FRST; 01092000
FORMAT H1(X*,O,X2,O," -WALSE SIMULATION-",X*,"PAGE"I5); 01093000
STREAM PROCEDURE F(B,W,C,N,M,S);VALUE C,N,M;BEGIN DI~B;DS~8LIT" "; 01094000
SI~B;DS~17WDS;SI~S;DI~W;DI~DI+C;N(DS~32CHR);DS~M CHR;END F; 01095000
IF PAGENUMBER=0 THEN GO FRST; 01096000
IF LINEC?NT + ABS(N) } LINESPERPAGE THEN 01097000
BEGIN 01098000
IF LINEC?NT<PHYS?PAGE THEN 01099000
BEGIN WRITE(PRINTER[10]); 01100000
LINEC?NT ~ PHYS?PAGE; 01101000
END; 01102000
IF LINEC?NT=PHYS?PAGE AND(LINEC?NT~LINEC?NT+1){LINESPERPAGE 01103000
THEN BEGIN WRITE(PRINTER[11]); 01104000
WHILE LINEC?NT~LINEC?NT+2{LINESPERPAGE DO WRITE(PRINTER[DBL]); 01105000
IF BOOLEAN(LINEC?NT-LINESPERPAGE) THEN WRITE(PRINTER); 01106000
END; 01107000
WRITE(PRINTER[PAGE],H1,L?MAR,R?DATE ,R?TIME ,R?MAR-L?MAR-46, 01108000
PAGENUMBER); 01109000
IF 2<LINESPERPAGE-PHYS?PAGE<6 THEN WRITE(PRINTER[PAGE]); 01110000
FRST: PAGENUMBER ~ PAGENUMBER+1; 01111000
IF PAGEHEADLINES=0 THEN LINEC?NT ~ 1 ELSE 01112000
BEGIN 01113000
FOR I~0 STEP 1 UNTIL PAGEHEADLINES-1 DO BEGIN 01114000
IF J~(R?MAR+L?MAR-(M~PAGEHEADARRAY[I,0]))DIV 2<L?MAR 01115000
THEN BEGIN M~ R?MAR-L?MAR; J~L?MAR END; 01116000
F(INB?FF,INB?FF[J.[37:8]], J.[45:3],M.[37:6],M.[43:5], 01117000
PAGEHEADARRAY[I,1]); 01118000
WRITE(PRINTER,17,INB?FF[*]); 01119000
END; 01120000
WRITE(PRINTER); 01121000
LINEC?NT ~ PAGEHEADLINES + 2; 01122000
END; 01123000
END; 01124000
IF N>0 THEN LINEC?NT ~ (LINEC?NT+N)MOD LINESPERPAGE; 01125000
END CHECK?PAGE; 01126000
PROCEDURE MARGINS(S,L,LM,RM);VALUE S,LM,RM;INTEGER S,LM,RM;PROCEDURE 01127000
L;BEGIN FORMAT F( A6, "TED LEFT MARGIN ="I13", RIGHT MARGIN ="I13); 01128000
IF (LM~LM)<1 OR(RM~RM)>131 OR RM-LM < 45 THEN 01129000
BEGIN E?RROR(S,-55,L); LINEC?NT ~ LINEC?NT+3; 01130000
WRITE(PRINTER,F,"REQUES",LM,RM); 01131000
IF RM-LM>131 THEN BEGIN LM~0;RM~108 END ELSE 01132000
IF RM>131 THEN BEGIN LM ~ LM-RM+108; RM ~ 108 END ELSE 01133000
IF LM<1 THEN BEGIN RM ~ RM-LM+1; LM ~ 1 END; 01134000
IF RM-LM<45 THEN IF RM>108 THEN BEGIN LM~63;RM~108 END 01135000
ELSE RM ~ LM+45; 01136000
WRITE(PRINTER[DBL],F," ADJUS",LM,RM) 01137000
END; 01138000
L?MAR ~ LM-1; 01139000
R?MAR ~ RM-1; 01140000
END PROCEDURE MARGINS; 01141000
PROCEDURE LINE?D(N); VALUE N; INTEGER N; 01142000
BEGIN CHECK?PAGE(-(N~N)); IF LINEC?NT>PAGEHEADLINES+2 THEN BEGIN 01143000
IF(N ~ LINEC?NT+N)>PHYS?PAGE THEN 01144000
BEGIN IF LINEC?NT < PHYS?PAGE THEN WRITE(PRINTER[10]); 01145000
IF LINEC?NT { PHYS?PAGE THEN 01146000
BEGIN WRITE(PRINTER[11]); 01147000
LINEC?NT ~ PHYS?PAGE+1; 01148000
END; 01149000
END; 01150000
WHILE LINEC?NT ~ LINEC?NT+2 { N DO WRITE(PRINTER[DBL]); 01151000
IF BOOLEAN(LINEC?NT-N) THEN WRITE(PRINTER); 01152000
LINEC?NT ~ N; 01153000
END; 01154000
END; 01155000
PROCEDURE HEAD?D(F,L,W); VALUE L,W; FORMAT F; INTEGER L,W; 01156000
BEGIN INTEGER LM; 01157000
LIST L1(FOR L~L-1 STEP -1 UNTIL 0 DO LM), 01158000
L2(L?MAR+7, FOR L~1 STEP 1 UNTIL W DO L); 01159000
IF L{0 THEN W ~ (R?MAR-L?MAR-12)DIV 16 ELSE 01160000
IF LM~(L?MAR+R?MAR-W)DIV 2 >L?MAR THEN LM ~ L?MAR ELSE 01161000
IF LM<0 THEN LM ~ 0; 01162000
CHECK?PAGE(-(ABS(L)+5)); 01163000
IF LINEC?NT{PHYS?PAGE AND(LINEC?NT~LINEC?NT+ABS(L)+1)>PHYS?PAGE THEN 01164000
IF L>0 THEN WRITE(PRINTER,F,L1) ELSE WRITE(PRINTER,F,L2) ELSE 01165000
IF L>0 THEN WRITE(PRINTER[11],F,L1)ELSE WRITE(PRINTER[11],F,L2); 01166000
END HEAD?D; 01167000
PROCEDURE SET?D(SF,D,F,I); FORMAT SF; PROCEDURE D; REAL F,I; 01168000
BEGIN CHECK?PAGE(-10); 01169000
IF LINEC?NT{PHYS?PAGE AND (LINEC?NT~LINEC?NT+2)>PHYS?PAGE THEN 01170000
BEGIN WRITE(PRINTER[11],SF,L?MAR); 01171000
WRITE(PRINTER[11]); 01172000
END ELSE 01173000
WRITE(PRINTER[DBL],SF,L?MAR); 01174000
FOR S?T ~ F STEP I WHILE S?T!0 DO 01175000
D(" -",0,S?T); 01176000
LINE?D(1); 01177000
END SET?D; 01178000
PROCEDURE VECTOR?D(SF,D,A,B,LB,UB); VALUE B,LB,UB; FORMAT SF; 01179000
PROCEDURE D; ARRAY A[*]; INTEGER B,LB,UB; 01180000
BEGIN 01181000
ALPHA STREAM PROCEDURE XX(N,S); VALUE N,S; 01182000
BEGIN DI ~ LOC XX; SI ~ LOC N; DS ~ 8 DEC; 01183000
DI ~ DI-6; DS ~ 5 FILL; 01184000
S(DI ~ DI-1; DS ~ LIT "-"); 01185000
END XX; 01186000
CHECK?PAGE(-10); 01187000
IF LINEC?NT{PHYS?PAGE AND (LINEC?NT~LINEC?NT+2)>PHYS?PAGE THEN 01188000
BEGIN WRITE(PRINTER[11],SF,L?MAR); 01189000
WRITE(PRINTER[11]); 01190000
END ELSE 01191000
WRITE(PRINTER[DBL],SF,L?MAR); 01192000
FOR LB ~ LB STEP 1 UNTIL UB DO 01193000
D(" ",XX(ABS(LB),LB<0),A[LB]); 01194000
LINE?D(1); 01195000
END VECTOR?D; 01196000
PROCEDURE START?UP(S,L);VALUE S; REAL S; PROCEDURE L; 01197000
BEGIN INTEGER A,B; 01198000
A ~ G?TSPACE(0); 01199000
WHILE (B ~ ST?RTIME) < 0 DO 01200000
BEGIN ST?RTIME ~ R?1[R?W~B.[33:7],(C?L~B.[40:8])+6]; 01201000
IF R?1[R?W,C?L].[33:15] = 0 THEN F?RGETSPACE(B) ELSE 01202000
BEGIN 01203000
R?1[A.[33:7],A.[40:8]].[33:15] ~ B; 01204000
RESET(S,L,A,IN?FIN); 01205000
END; 01206000
END; 01207000
F?RGETSPACE(A); ST?RTIME ~ T?ME; 01208000
END START?UP; 01209000
PROCEDURE STATISTICS?D(N1,N2,E);VALUE N1,N2,E;ALPHA N1,N2;INTEGER E; 01210000
BEGIN 01211000
REAL LM,QM,ET,ST,CM,TM,OC,T; 01212000
LABEL PR; 01213000
LIST LNN(L?MAR,N1,N2); 01214000
IF N2=0 THEN N2 ~ " "; 01215000
IF E.[1:9]!384 THEN WRITE(INB?FF [*],FM?FER,LNN) ELSE 01216000
IF J?NK ~ R?1[E.[33:7],E.[40:8]]}0 OR J?NK.[10:8]!E.[10:8] THEN 01217000
WRITE(INB?FF [*],FM?FAD,LNN) ELSE 01218000
IF (R?W~J?NK.[33:7])+(C?L~J?NK.[40:8])=0 THEN 01219000
WRITE(INB?FF [*],FM?FNS,LNN) ELSE 01220000
BEGIN 01221000
QM ~ R?1[R?W,C?L+8]; 01222000
IF LM ~(R?MAR+L?MAR-87)DIV 2 > L?MAR THEN LM ~ L?MAR ELSE 01223000
IF LM<0 THEN LM ~ 0; 01224000
IF (ET ~ T?ME - (ST ~ R?1[R?W,C?L+6]))=0THEN ET ~ 1; 01225000
WRITE(INB?FF[*],FM?STAT1,LM,N1,N2, 01226000
CM ~ R?1[R?W,C?L+1], 01227000
TM ~ R?1[R?W,C?L+3], 01228000
R?1[R?W,C?L+5], 01229000
(OC ~R?1[R?W,C?L+4]+T?ME|CM)/ET, 01230000
DAY(T ~ R?1[R?W,C?L+11]),ALPHATIME(T), 01231000
DAY(T~IF TM=0 THEN 0 ELSE OC/TM),ALPHATIME(T), 01232000
DAY(ST),ALPHATIME(ST)); 01233000
END; 01234000
CHECK?PAGE(-REAL(QM!0)-1); 01235000
PR: IF LINEC?NT = PHYS?PAGE THEN WRITE(PRINTER[11],17,INB?FF[*]) 01236000
ELSE WRITE(PRINTER,17,INB?FF[*]); 01237000
LINEC?NT ~ LINEC?NT+1; 01238000
IF QM!0 THEN 01239000
BEGIN WRITE(INB?FF[*],FM?STAT2,LM+9, 01240000
CM ~ R?1[R?W,C?L+12], 01241000
QM, R?1[R?W,C?L+13], 01242000
(OC ~ R?1[R?W,C?L+10]+T?ME|CM)/ET, 01243000
DAY(T ~ R?1[R?W,C?L+9]),ALPHATIME(T), 01244000
DAY(T ~ OC/TM),ALPHATIME(T), 01245000
R?1[R?W,C?L+7]); 01246000
QM ~ 0; 01247000
GO TO PR; 01248000
END; 01249000
END STATISTICS?D; 01250000
DEFINE STATISTICS?F= F? FM?STATH,1,87 F?#; 01251000
PROCEDURE CLEAR?BUFF(W);VALUE W;BOOLEAN W; 01252000
BEGIN 01253000
STREAM PROCEDURE C(B);BEGIN DI~B;DS~8LIT" ";SI~B;DS~16WDS;END C; 01254000
IF W THEN 01255000
BEGIN IF LINEC?NT!PHYS?PAGE THEN WRITE(PRINTER,17,INB?FF[*]) 01256000
ELSE WRITE(PRINTER[11],17,INB?FF[*]); 01257000
LINEC?NT ~ LINEC?NT+1; 01258000
END; 01259000
C(INB?FF[0]); 01260000
EDIT?CH ~ L?MAR; 01261000
END; 01262000
PROCEDURE EDIT?NAME(N1,N2);VALUE N1,N2; ALPHA N1,N2; 01263000
BEGIN 01264000
STREAM PROCEDURE W(BW,C,N1,N2);VALUE C,N1,N2; 01265000
BEGIN DI ~ BW; DI ~ DI+C; SI ~ LOC N1; 01266000
SI ~ SI+2; DS ~ 6CHR; SI ~ SI+2; DS ~ 6CHR; 01267000
DS ~ LIT":"; 01268000
END; 01269000
W(INB?FF[EDIT?CH.[35:10]],EDIT?CH.[45:3], 01270000
N1,IF N2=0 THEN " " ELSE N2); 01271000
EDIT?CH ~ EDIT?CH + 13; 01272000
END EDIT?NAME; 01273000
PROCEDURE EDIT?ENT(W,E);VALUE W,E; INTEGER W,E; 01274000
BEGIN INTEGER LB; 01275000
STREAM PROCEDURE EC(BW,BC,T,E);VALUE BC,T,E; 01276000
BEGIN DI ~ BW; DI~DI+BC; SI ~ LOC E; 01277000
DS ~ 3 LIT"ENT"; T(DS ~ 3 LIT"ITY"); 01278000
DS ~ 5 DEC; DI ~ DI-5; DS ~ 4 FILL; 01279000
END; 01280000
IF (W ~ ABS(W))>11 THEN LB ~ (W-10).[38:9] ELSE 01281000
IF W>8 THEN LB ~ W-8 ELSE W ~ 8; 01282000
EC(INB?FF[EDIT?CH.[35:10]],EDIT?CH.[45:3]+LB,W}11,E.[33:15]); 01283000
EDIT?CH ~ EDIT?CH + W; 01284000
END EDIT?ENT; 01285000
$* PAGE 01286000
PROCEDURE EDIT?N(X,W,S,D); VALUE X,W,S,D; REAL X; INTEGER W,S,D; 01287000
BEGIN LABEL EFM,OK,XT,EF2,IFM; 01288000
DEFINE TEN = POWERS?OF?TEN#; 01289000
DEFINE NCR = INB?FF[EDIT?CH.[35:10]]#,SKP=EDIT?CH.[45:3]#; 01290000
DEFINE MAXINT = REAL(<7777777777777>)#; 01291000
INTEGER E,G,LB,AD,XD,NCH,B; 01292000
ALPHA A1,A2,XS; 01293000
BOOLEAN STOG; 01294000
INTEGER PROCEDURE SCALE(X,S,R,D);VALUE X,D;REAL X,R;INTEGER S,D; 01295000
BEGIN INTEGER E,I; 01296000
LABEL DC; 01297000
BOOLEAN ADJ; 01298000
INTEGER STREAM PROCEDURE DECCON(N,X1,X2,R,T); VALUE N,X1,X2,T; 01299000
BEGIN SI ~ LOC X1; DI ~ R; DS ~ N DEC; DS ~ 8 DEC; 01300000
CI ~ CI+T; GO TX; R ~ DI; DI ~ LOC T; SI ~ R; 01301000
L: SI~SI-1;IF SC="0"THEN BEGIN TALLY~TALLY+1;GO L END; 01302000
TX: DECCON ~ TALLY; 01303000
END DECCON; 01304000
INTEGER STREAM PROCEDURE DEC1(N,X,R,T); VALUE N,X,T; 01305000
BEGIN SI ~ LOC X; DI ~ R; DS ~ N DEC; 01306000
CI ~ CI+T; GO TX; R ~ DI; DI ~ LOC T; SI ~ R; 01307000
L: SI~SI-1;IF SC="0"THEN BEGIN TALLY~TALLY+1;GO L END; 01308000
TX: DEC1 ~ TALLY; 01309000
END DEC1; 01310000
ADJ ~ X}0; 01311000
I ~ X.[3:6]; 01312000
E ~ ((X~1.0|ABS(X)).[3:6]&X[1:2:1]+12) | .90309; 01313000
IF E } 0 THEN 01314000
BEGIN 01315000
IF X } TEN[E+1] THEN E ~ E+1 ELSE 01316000
IF X < TEN[E] THEN E ~ E-1 01317000
END ELSE 01318000
IF TEN[-(E+1)]|X} 1.0 THEN E ~ E+1 ELSE 01319000
IF TEN[-E] | X < 1.0 THEN E ~ E-1; 01320000
IF I = 0 THEN 01321000
BEGIN S ~ E+1; 01322000
I ~ X; 01323000
GO TO DC; 01324000
END EXACT INTEGER CASE; 01325000
IF (I ~ E+1-S)>0 THEN X ~ X/TEN[I] 01326000
ELSE X ~ TEN[-I] | X; 01327000
IF X > MAXINT THEN 01328000
BEGIN S ~ S-1; 01329000
I ~ X/10.0 01330000
END ELSE I ~ X; 01331000
IF TEN[S] { I THEN 01332000
BEGIN I ~ TEN[S-1]; 01333000
E ~ E+1; 01334000
END; 01335000
DC: X ~ S-E-1; 01336000
IF E<0 AND ADJ THEN S ~ (-E-1)MOD 5 + S; 01337000
IF S>8 THEN I~DECCON(S-8,I DIV @8,I~I MOD @8,R,X>D) 01338000
ELSE I~DEC1(S,I,R,X>D); 01339000
IF X < 0 AND ADJ THEN 01340000
BEGIN 01341000
S ~ (-X) MOD 3 + S; 01342000
SCALE ~ E-S+1; 01343000
END ELSE 01344000
IF I=0 THEN SCALE ~ -X ELSE 01345000
BEGIN IF I>X-D THEN I ~ X-D; 01346000
S ~ S-I; 01347000
SCALE ~ I-X; 01348000
END; 01349000
END SCALE; 01350000
STREAM PROCEDURE CONV(D ,S,LB,G,ID,IDG,IZG,P,FZG,FDG,FD,EF); 01351000
VALUE LB,G,ID,IDG,IZG,P,FZG,FDG,FD,EF ; 01352000
BEGIN DI ~ D; SI ~ S; DI ~ DI+LB; 01353000
CI ~ CI+G; GO L1; DS ~ LIT"-"; 01354000
L1: DS ~ ID CHR; 01355000
IDG(CI~CI+EF; DS~LIT","; DS~3CHR;); 01356000
IZG(CI~CI+EF; DS~LIT","; DS~3LIT"0";); 01357000
CI ~ CI+P; 01358000
DS ~ LIT"0"; COMMENT P=0; 01359000
DS ~ LIT"."; COMMENT P=1; 01360000
FZG(DS~5LIT"0"; CI~CI+EF; DS~LIT" ";); 01361000
FDG(DS~5 CHR; CI~CI+EF; DS~LIT" ";); 01362000
DS ~ FD CHR; 01363000
END CONV; 01364000
STREAM PROCEDURE ECON(D ,S,LB,G,P,FD,AF,XS,E,XD); 01365000
VALUE LB,G,P,FD,AF,XS,E,XD ; 01366000
BEGIN SI ~ S; DI ~ D; DI ~ DI+LB; 01367000
G(DS ~ LIT"-"); 01368000
DS ~ CHR; 01369000
P(DS ~ LIT"." ; DS ~ FD CHR); 01370000
SI ~ LOC E; SI ~ SI-AF; DS ~ AF CHR; 01371000
DS ~ XD DEC; 01372000
END ECON; 01373000
IF X=0 THEN 01374000
BEGIN E~0; 01375000
XS ~ S ~ 1; 01376000
STOG ~ TRUE; 01377000
GO TO IFM; 01378000
END SPECIAL CASE FOR ZERO; 01379000
IF TEN[0]=0 THEN SIMULATION; 01380000
STOG ~ S>0; IF(S ~ ABS(S)) > 12 THEN S ~ 12 ELSE 01381000
IF S<1 THEN IF (S~W-5)<1 THEN S~1; 01382000
G ~ REAL(X<0); XS ~ S; 01383000
IF D } ABS(W) AND W!0 AND NOT STOG THEN GO TO EFM; 01384000
IF X}MAXINT AND W<0 THEN GO TO EFM; 01385000
E ~ SCALE(X~ABS(X),S,A1,IF W<0 THEN D ELSE D - D DIV 6); 01386000
IF E}0 THEN 01387000
IFM:BEGIN NCH ~ S+E+G; 01388000
IF W } 0 THEN NCH ~ (S+E-1) DIV 3 + NCH; 01389000
IF W = 0 THEN W ~ NCH ELSE 01390000
IF NCH > ABS(W) THEN GO TO EFM; 01391000
IF (LB~ABS(W)-D-1-NCH)<0 THEN 01392000
IF STOG THEN LB~0 ELSE GO TO EFM; 01393000
CONV(NCR,A1,SKP+LB,G,XD~(S-1)MOD 3+1,(S-1)DIV 3,E DIV 3, 01394000
4,0,0,0,REAL(W<0)|2); 01395000
GO XT; 01396000
END IFORM; 01397000
IF W}0 THEN B ~ (-E-1)DIV 5; 01398000
IF (AD ~ E+S)>0 THEN 01399000
BEGIN 01400000
NCH ~ AD-E+G+1; 01401000
IF W}0 THEN NCH ~ (XD~(AD-1)DIV 3)+ B + NCH; 01402000
IF W = 0 THEN W ~ NCH ELSE 01403000
IF NCH > ABS(W) THEN GO EFM; 01404000
IF B-E > D THEN IF STOG THEN D ~ B-E ELSE GO TO EFM; 01405000
IF (LB ~ ABS(W)-D-1-AD-G-XD)<0 THEN 01406000
IF STOG THEN LB~0 ELSE GO TO EFM; 01407000
CONV(NCR,A1,SKP+LB,G,XD~(AD-1)MOD 3+1,(AD-1)DIV 3,0,2,0, 01408000
(-E-1)DIV 5,XD~(-E-1)MOD 5+1,REAL(W<0)|2); 01409000
GO XT; 01410000
END FFORM; 01411000
BEGIN COMMENT E+S { 0; 01412000
NCH ~ G-E+1+B; 01413000
IF W = 0 THEN W ~ NCH+1 ELSE 01414000
IF ABS(W) < NCH THEN GO TO EFM; 01415000
IF B-E > D THEN IF STOG THEN D ~ B-E ELSE GO TO EFM; 01416000
IF (LB~ABS(W)-D-G-1)>0 THEN 01417000
BEGIN LB~LB-1; 01418000
XD~0; 01419000
END ELSE 01420000
BEGIN XD~2; 01421000
IF LB<0 AND NOT STOG THEN GO TO EFM; 01422000
LB~0; 01423000
END; 01424000
CONV(NCR,A1,SKP+LB,G,0,0,0,XD,AD DIV 5, (S-1)DIV 5, 01425000
XD~(S-1)MOD 5+1, REAL(W<0)|2); 01426000
GO XT; 01427000
END; 01428000
EFM:COMMENT E FORMAT; 01429000
S ~ XS; W ~ ABS(W); 01430000
EF2: 01431000
E ~ SCALE(-X,S,A1,500); 01432000
XD ~ AD ~ 2; 01433000
IF (E+S - 1) } 0 THEN XS ~ "@+" ELSE XS ~ "@-"; 01434000
IF (NCH ~ S+G+1+AD+XD) { W THEN GO OK; 01435000
IF ABS(E+S-1)<10 THEN 01436000
BEGIN NCH ~ NCH + 1 - XD; XD ~ 1; 01437000
IF NCH { W THEN GO OK; 01438000
END; 01439000
IF XS="@+" THEN XS ~ "@"; 01440000
NCH ~ NCH+1-AD; AD ~ 1; 01441000
IF NCH { W THEN GO OK; 01442000
IF (S ~ S-1)>0 THEN GO TO EF2; 01443000
NCH ~ G+2+AD+XD; 01444000
OK: IF S{1 THEN 01445000
BEGIN S~1; 01446000
IF NCH{W AND AD=1 THEN 01447000
BEGIN AD~2; 01448000
IF XS="@" THEN XS~"@+"; 01449000
END ELSE NCH ~ NCH-1; 01450000
END; 01451000
IF (LB ~ W-NCH)<0 THEN BEGIN LB~0; W~NCH END ELSE 01452000
IF D-3>S THEN IF (LB~LB-D+S+3)<0 THEN LB ~ 0; 01453000
ECON(NCR,A1,SKP+LB,G,S>1,S-1,AD,XS,ABS(E+S-1),XD); 01454000
XT: 01455000
EDIT?CH ~ EDIT?CH + ABS(W); 01456000
END EDIT?N; 01457000
PROCEDURE DISPLAY?D(N1,N2,E);VALUE N1,N2,E; ALPHA N1,N2,E; 01458000
BEGIN INTEGER SZ,EPL; REAL LW; 01459000
LIST LNN(L?MAR,N1,N2); 01460000
IF N2=0 THEN N2 ~ " "; 01461000
IF E.[1:9]!384 THEN 01462000
BEGIN CHECK?PAGE(-1); 01463000
WRITE(INB?FF[*],FM?FER,LNN); 01464000
END ELSE 01465000
IF (LW ~ R?1[E.[33:7],E.[40:8]])}0 OR LW.[10:8]!E.[10:8] THEN 01466000
BEGIN CHECK?PAGE(-1); 01467000
WRITE(INB?FF[*],FM?FAD,LNN); 01468000
END ELSE 01469000
BEGIN 01470000
SZ ~ LW.[2:8]; EPL ~ (R?MAR-L?MAR-12) DIV 16; 01471000
CLEAR?BUFF(FALSE); 01472000
CHECK?PAGE(-(SZ+EPL-1)DIV EPL); 01473000
EDIT?NAME(N1,N2); 01474000
R?W ~ E.[33:7]; C?L ~ E.[40:8]; N2 ~ 0; 01475000
FOR N1~ 1 STEP 1 UNTIL SZ DO 01476000
BEGIN 01477000
IF (E ~ R?1[R?W,C?L+N1]).[1:9]=384 THEN 01478000
BEGIN 01479000
IF (LW~R?1[E.[33:7],E.[40:8]])<0 AND LW.[10:8]=E.[10:8] 01480000
THEN EDIT?ENT(15,E) 01481000
ELSE EDIT?N(E,-15,SIGNIFICANCE,6); 01482000
END ELSE EDIT?N(E,-15,SIGNIFICANCE,6); 01483000
IF (N2 ~ N2+1)=EPL THEN 01484000
BEGIN CLEAR?BUFF(TRUE); 01485000
EDIT?CH ~ EDIT?CH+13; 01486000
N2 ~ 0; 01487000
END ELSE 01488000
EDIT?CH ~ EDIT?CH+1; 01489000
END; 01490000
END; 01491000
IF N2!0 THEN 01492000
BEGIN IF LINEC?NT!PHYS?PAGE THEN WRITE(PRINTER,17,INB?FF[*]) 01493000
ELSE WRITE(PRINTER[11],17,INB?FF[*]); 01494000
LINEC?NT ~ LINEC?NT+1; 01495000
END; 01496000
END DISPLAY?D; 01497000
PROCEDURE END?SIM; 01498000
BEGIN 01499000
CHECK?PAGE(-LINESPERPAGE); 01500000
R?W ~(L?MAR+R?MAR)DIV 2; 01501000
WRITE(PRINTER[DBL],FM?END,R?W-18,R?W-21,TIME(9),TIME(8), 01502000
R?W-19,DAY(ST?RTIME),ALPHATIME(ST?RTIME),R?W-19,DAY(T?ME), 01503000
ALPHATIME(T?ME),R?W-19,MAX?SP,R?W-19,CRE?CNT, 01504000
R?W-23,TIME(2)/60,TIME(3)/60); 01505000
IF R?MAR-L?MAR } 86 THEN BEGIN L?MAR~R?W-43;R?MAR~R?W+43 END ELSE 01506000
IF R?W < 43 THEN BEGIN L?MAR~0;R?MAR~86 END ELSE 01507000
IF R?W } 64 THEN BEGIN L?MAR~21;R?MAR~107 END; 01508000
HEAD?D(FM?STATH,1,87); 01509000
STATISTICS?D("CALEND","AR ",CALENDAR); 01510000
STATISTICS?D("SUSPEN","SIONS ",S?USPENDED); 01511000
01512000
01513000
END END?SIM; 01514000
PROCEDURE PAG?NUMBER(N); VALUE N; INTEGER N; 01515000
BEGIN IF PAGENUMBER=0 THEN CHECK?PAGE(0); 01516000
IF N<1 THEN PAGENUMBER ~ 1 ELSE 01517000
IF N<90000 THEN PAGENUMBER ~ N ELSE PAGENUMBER ~ 90000; 01518000
END PAG?NUMBER; 01519000
PROCEDURE LIN?SPERPAGE(N); VALUE N; INTEGER N; 01520000
BEGIN 01521000
IF N}15 THEN LINESPERPAGE ~ N; 01522000
END LIN?SPERPAGE; 01523000
PROCEDURE TRACE(L); VALUE L; LIST L; 01524000
BEGIN INTEGER I,J; 01525000
FOR L DO 01526000
IF L>0 THEN F?TCHLIST[2|L+1] ~ (*) & I[1:47:1] ELSE 01527000
CASE (-L) OF 01528000
BEGIN 01529000
FOR J ~ 3 STEP 2 UNTIL EV?MAX DO 01530000
F?TCHLIST[J] ~ (*) & I[1:47:1]; 01531000
I ~ 1; 01532000
I ~ 0; 01533000
TRACE?TOG.[47:1] ~ BOOLEAN(I); 01534000
TRACE?TOG.[46:1] ~ BOOLEAN(I); 01535000
TRACE?TOG.[45:1] ~ BOOLEAN(I); 01536000
END; 01537000
END PROCEDURE TRACE; 01538000
$ - STREAM + LIST 09999000
$* PAGE 10000000
INTEGER MSTRING AT?TOG, % COMMUNICATE: "ATTRIBUTE" & "ARRAY" 10002000
S?TOG , % COMMUNICATE FOR SPECIAL STMT TYPES 10003000
W?LVL , % BEGINLEVEL OF SIMULATION BLOCK 10004000
DF?FN[2], % SWITCH FORMAT NUMBER 10005000
DF?SUB[3], % SWITCH FORMAT SUBSCRIPT 10006000
10007000
WT?TYPE[2], % RECORDS PRESENCE OF "ENTRY" LABELS 10008000
PRER?SRV[*], % RESERVE BEFORE PROGRAM "BEGIN" 10009000
EV?CNT[3]; % EVENT NUMBER 10010000
MSTRING I?TOG[1], % COMMUNICATE BTWN "ATTRIBUTE" & TYPES 10011000
DIS?NAM[400],% ALPHA NAME IN DISPLAY ELEMENTS 10012000
DIS?FM[69], %FORM NAME IN DISPLAY 10013000
D?EC, % PIECES OF DECLARATIONS 10014000
EV?NT, % NAME OF CURRENT EVENT 10015000
F?ORVAR, % FOR LOOP CONTROL VARIABLE 10016000
EX?EC, % NAME OF EXECUTIVE PROCEDURE 10017000
IN?TL[65], % NAME OF INITIALIZE PROCEDURE 10018000
FM?FILL[*]; % SWITCH FORMAT ACCUMULATOR 10019000
MSTRING GE?NERAL[*]; % HOLD GENERAL INFO 10020000
DEFINE SEQUENCE=LINE#; 10021000
MFIELD ONE=[0:1],TWO=[0:2],THREE=[0:3],F53=[5:3],F7=[0:7]; 10022000
MSTRING ENT?FILL,EV?FILL[*]; 10023000
INTEGER MPOINTER EVR?SRV,EV?CASE,SIMR?SRV,FMR?SRV; 10024000
INTEGER MSTRING F?TCHCNT[4]; 10025000
MSTRING P?ARAMETERS,S?WTCHLIST[300],S?IZE,N?MBER[3], 10026000
P?UT,R?MV,J?UNK[65]; 10027000
INTEGER MPOINTER S?WTCHSPACE; 10028000
INTEGER MSTRING E?LVL,S?WTCH[3]; 10029000
10030000
MSTRING SUS?CASE[*]; 10031000
INTEGER MSTRING SU?CNT[3]; 10032000
MACRO BOOLEAN; BEGIN 10033000
STRING A[63]; 10034000
I?TOG ~ "B"; 10035000
A~ ELEMENT; 10036000
IF <>!I?TOG THEN 10037000
BEGIN 10038000
OUTPUT "BOOLEAN", D?EC, A; 10039000
D?EC~<>; 10040000
I?TOG ~ <>; 10041000
END; 10042000
END; 10043000
MACRO INTEGER; 10044000
BEGIN 10045000
MSTRING A[63]; 10046000
I?TOG ~ "I"; 10047000
A~ ELEMENT; 10048000
IF <>!I?TOG THEN 10049000
BEGIN 10050000
OUTPUT "INTEGER", D?EC, A; 10051000
D?EC~<>; 10052000
I?TOG ~ <>; 10053000
END; 10054000
END; 10055000
MACRO REAL; 10056000
BEGIN 10057000
MSTRING A[62]; 10058000
I?TOG ~ "R"; 10059000
A~ ELEMENT; 10060000
IF <>!I?TOG THEN 10061000
BEGIN 10062000
OUTPUT "REAL", D?EC, A; 10063000
D?EC~ <>; 10064000
I?TOG ~ <>; 10065000
END; 10066000
END; 10067000
MACRO ALPHA; 10068000
BEGIN MSTRING A[65]; 10069000
I?TOG ~ "A"; 10070000
A ~ ELEMENT; 10071000
IF <>!I?TOG THEN 10072000
BEGIN OUTPUT "ALPHA",D?EC,A; 10073000
D?EC ~ I?TOG ~ <>; 10074000
END; 10075000
END ALPHA; 10076000
MACRO ARRAY; 10077000
IF AT?TOG=1 THEN 10078000
OUTPUT "VECTOR" 10079000
ELSE 10080000
IF <>!I?TOG THEN 10081000
D?EC.APPENDS ~ "ARRAY" 10082000
ELSE 10083000
OUTPUT "ARRAY"; 10084000
MACRO ATTRIBUTE; 10085000
BEGIN 10086000
MSTRING NAME,DFN[64],A[400],C[63],T[1]; 10087000
INTEGER MSTRING N[3]; 10088000
AT?TOG~1; 10089000
IF A~ELEMENT!"VECTOR" THEN 10090000
BEGIN DFN ~ I?TOG & "?ATTR"; 10091000
A.APPENDS ~ THRU "["; 10092000
END ELSE 10093000
BEGIN DFN~I?TOG & "ARRAY?ATTR"; A~THRU "["; 10094000
END; 10095000
IF <>=I?TOG THEN DFN ~ "R"&DFN; 10096000
L1: 10097000
IF N~INTGER THEN ELSE 10098000
ERROR "ATTRIBUTE POSITION MUST BE INTEGER CONSTANT"; 10099000
IF T~CHARACTER!"]" THEN ERROR "MISSING",QUOTE("]") ELSE 10100000
T~ CHARACTER; 10101000
NAME ~ DFN.TWO & "AT?" & N; 10102000
OUTPUT "MACRO",NAME,"EQV",DFN,";"; 10103000
IF "."=T THEN BEGIN NAME.APPENDC ~ "."&THRU "]"; T~CHARACTER END; 10104000
L2: A->(C~ IDENTIFIER), A; 10105000
OUTPUT "DEFINE",C,"=",NAME,"#;"; 10106000
A->(C ~ ELEMENT),A; 10107000
IF ","=C THEN GO L2 ELSE 10108000
IF "["!C THEN ERROR "ILLEGAL ITEM",QUOTE(C); 10109000
IF ","=T THEN BEGIN A ~ THRU "["; GO L1 END; 10110000
IF <>!I?TOG THEN BEGIN OUTPUT "?"; I?TOG ~ <> END; 10111000
AT?TOG ~ 0; 10112000
END ATTRIBUTE; 10113000
DEFINE AT?CODE1= 10114000
IF A~CHARACTER = "." THEN BEGIN 10115000
PF ~ "." & THRU "]"; 10116000
A ~ CHARACTER; 10117000
END; 10118000
IF "(" ! A THEN 10119000
IF <>=F?ORVAR THEN ERROR "MISSING", 10120000
QUOTE("(") ELSE INPUT F?ORVAR,")",A; 10121000
OUTPUT "R?1[R?OW(",LINE,",E?RR,",N,",",EXPRESSION,","; 10122000
IF CHARACTER ! ")" THEN ERROR "MISSING",QUOTE(")") #; 10123000
DEFINE AT?CODE2= 10124000
IF CHARACTER ! "[" THEN ERROR "MISSING",QUOTE("["); 10125000
OUTPUT EXPRESSION,"),C?OL]"&PF; 10126000
IF CHARACTER ! "]" THEN ERROR "MISSING",QUOTE("]") #; 10127000
DEFINE AT?CODE3= 10128000
IF A~CHARACTER = "." THEN BEGIN 10129000
PF ~ "." & THRU "]"; 10130000
A ~ CHARACTER; 10131000
END; 10132000
IF "(" ! A THEN 10133000
IF <>=F?ORVAR THEN ERROR "MISSING", 10134000
QUOTE("(") ELSE INPUT F?ORVAR,")",A; 10135000
B~ "R?1[R?OW(",LINE,",E?RR,",N,",",EXPRESSION,","; 10136000
IF CHARACTER ! ")" THEN ERROR "MISSING",QUOTE(")") #; 10137000
LIST MACRO R?ATTR; 10138000
BEGIN 10139000
MSTRING N,PF[63],A[1]; 10140000
N ~ N.F53; 10141000
IF S?TOG=1 THEN OUTPUT N ELSE 10142000
BEGIN 10143000
AT?CODE1; OUTPUT "0),C?OL]"&PF; 10144000
END; 10145000
END; 10146000
LIST MACRO I?ATTR; 10147000
BEGIN 10148000
MSTRING N,PF[63],A[1]; 10149000
N ~ N.F53; 10150000
IF S?TOG=1 THEN OUTPUT N ELSE 10151000
BEGIN 10152000
AT?CODE1; OUTPUT "0),C?OL]"&PF; 10153000
IF A~ CHARACTER = "~" THEN 10154000
OUTPUT "~C?OL~" 10155000
ELSE 10156000
OUTPUT A; 10157000
END; 10158000
END; 10159000
LIST MACRO A?ATTR; 10160000
BEGIN MSTRING N,PF[63],A[1]; 10161000
N ~ N.F53; 10162000
IF S?TOG=1 THEN OUTPUT N ELSE 10163000
BEGIN AT?CODE1; 10164000
OUTPUT "0),C?OL]" & PF; 10165000
END; 10166000
END A?ATTR; 10167000
LIST MACRO IARRAY?ATTR; 10168000
BEGIN 10169000
MSTRING N,PF[63],A[1]; 10170000
N ~ N.F53; 10171000
IF S?TOG=1 THEN OUTPUT N ELSE 10172000
BEGIN 10173000
AT?CODE1; 10174000
AT?CODE2; 10175000
IF A~ CHARACTER="~" THEN 10176000
OUTPUT "~C?OL~" 10177000
ELSE 10178000
OUTPUT A; 10179000
END; 10180000
END; 10181000
LIST MACRO RARRAY?ATTR; 10182000
BEGIN 10183000
MSTRING N,PF[63],A[1]; 10184000
N ~ N.F53; 10185000
IF S?TOG=1 THEN OUTPUT N ELSE 10186000
BEGIN 10187000
AT?CODE1; 10188000
AT?CODE2; 10189000
END; 10190000
END; 10191000
LIST MACRO B?ATTR; 10192000
BEGIN 10193000
MSTRING N,PF[63],A[1],B[400]; 10194000
N ~ N.F53; 10195000
IF S?TOG=1 THEN OUTPUT N ELSE 10196000
BEGIN 10197000
AT?CODE3; B~ B, "0),C?OL]"&PF; 10198000
IF A~ CHARACTER = "~" THEN 10199000
OUTPUT B,"~REAL(",BOOLEAN EXPRESSION,")" 10200000
ELSE 10201000
OUTPUT "BOOLEAN(",B,")",A; 10202000
END; 10203000
END; 10204000
LIST MACRO BARRAY?ATTR; 10205000
BEGIN 10206000
MSTRING N,PF[63],A[1],B[400]; 10207000
N ~ N.F53; 10208000
IF S?TOG=1 THEN OUTPUT N ELSE 10209000
BEGIN 10210000
AT?CODE3; 10211000
IF CHARACTER ! "[" THEN ERROR "MISSING",QUOTE("["); 10212000
B.APPENDC ~ EXPRESSION & "),C?OL]" & PF; 10213000
IF CHARACTER ! "]" THEN ERROR "MISSING",QUOTE("]"); 10214000
IF A~ CHARACTER ="~" THEN 10215000
OUTPUT B,"~REAL(",BOOLEAN EXPRESSION,")" 10216000
ELSE 10217000
OUTPUT "BOOLEAN(",B,")",A; 10218000
END; 10219000
END; 10220000
LIST MACRO AARRAY?ATTR; 10221000
BEGIN MSTRING N,PF[63],A[1]; 10222000
N ~ N.F53; 10223000
IF S?TOG=1 THEN OUTPUT N ELSE 10224000
BEGIN AT?CODE1; 10225000
AT?CODE2; 10226000
END; 10227000
END AARRAY?ATTR; 10228000
MACRO ENTITY; 10229000
BEGIN 10230000
MSTRING A,D[396],C,B[128]; 10231000
INTEGER MSTRING N[3]; 10232000
D~ "REAL"; 10233000
START: A~ UNTIL 10234000
"[", "?"; 10235000
B~ EXPRESSION; 10236000
DELETE ELEMENT; 10237000
IF 3=S?TOG THEN 10238000
BEGIN OUTPUT "ENTITY",B & ";"; 10239000
GO XIT; 10240000
END; 10241000
B -> (N~INTGER),C; 10242000
IF TOGGLE THEN IF <>=C THEN 10243000
IF N>255 THEN ERROR "ENTITY SIZE > 255" ELSE GO TO LOOP; 10244000
N ~ 999; 10245000
LOOP: A->(C~ IDENTIFIER), A; 10246000
OUTPUT "DEFINE", C&"?SIZE=E?SZ",B & ";#;"; 10247000
ENT?FILL.APPENDC ~ QUOTE(C.F7) & "," & N & ","; 10248000
F?TCHCNT ~ F?TCHCNT + 2; 10249000
10250000
10251000
10252000
IF "?"!A THEN 10253000
BEGIN 10254000
D.APPENDS ~ C & ","; 10255000
A->(C~ ELEMENT), A; 10256000
GO LOOP 10257000
END; 10258000
A~ ELEMENT; 10259000
IF ","=A THEN 10260000
BEGIN 10261000
D.APPENDS ~ C & ","; 10262000
GO START 10263000
END; 10264000
OUTPUT D, C&";"; 10265000
XIT: 10266000
10267000
END ENTITY; 10268000
MACRO CREATE; 10269000
BEGIN 10270000
MSTRING A,B[63]; 10271000
S?TOG~ 3; 10272000
IF A ~ IDENTIFIER = "ENTITY" THEN GO LL: 10273000
RESCAN A & "?SIZE"; 10274000
IF ELEMENT ! "E?SZ" THEN ERROR "UNDECLARED ENTITY",A 10275000
ELSE BEGIN 10276000
LL: OUTPUT "CREATE(" & LINE & ",E?RR," & EXPRESSION & ","; 10277000
DELETE ELEMENT; 10278000
END; 10279000
IF B ~ ELEMENT = "(" THEN 10280000
BEGIN OUTPUT "["; 10281000
L: OUTPUT EXPRESSION; 10282000
IF B ~ ELEMENT = "," THEN 10283000
BEGIN 10284000
OUTPUT B; 10285000
GO TO L; 10286000
END; 10287000
IF ")"!B THEN ERROR "MISSING",QUOTE(")") 10288000
ELSE B ~ ELEMENT; 10289000
OUTPUT "],"; 10290000
END ELSE OUTPUT "E?LST,"; 10291000
IF B="CALLED" THEN 10292000
OUTPUT VARIABLE, ")" 10293000
ELSE 10294000
OUTPUT A, ")", B; 10295000
S?TOG~ 0; 10296000
END; 10297000
MACRO DESTROY; 10298000
BEGIN 10299000
MSTRING A,B[63]; 10300000
A~ EXPRESSION; 10301000
B~ ELEMENT; 10302000
IF B="CALLED" THEN 10303000
OUTPUT "DESTROY(", SEQUENCE, ",E?RR,", EXPRESSION, ")" 10304000
ELSE 10305000
OUTPUT "DESTROY(", SEQUENCE, ",E?RR,", A, ")", B 10306000
END; 10307000
% 10308000
MACRO EVENTS; 10309000
BEGIN 10310000
STRING A, D, G, H[396], E, C[63], B[128]; 10311000
INTEGER MSTRING P,F[2],N[3]; 10312000
IF BEGINLEVEL-1!W?LVL THEN ERROR "EVENTS MUST BE AT OUTER LEVEL" 10313000
, "OF SIMULATION BLOCK"; 10314000
10315000
START: A~ THRU "["; 10316000
B ~ C ~ <>; 10317000
IF N~B~INTGER THEN IF C~CHARACTER = "]" THEN 10318000
BEGIN IF N { 255 THEN BEGIN INPUT "]"; GO TO LOOP; END; 10319000
WARNING "ENTITY SIZE > 255"; 10320000
END; 10321000
INPUT B,C; B ~ EXPRESSION; N ~ 999; 10322000
LOOP: A->(C~ IDENTIFIER),(E~ ELEMENT), A; 10323000
IF "("=E THEN 10324000
BEGIN 10325000
A->(G~ ELEMENT),(E~ ELEMENT),(E~ ELEMENT), A; 10326000
F~ ENTIER(G); 10327000
END 10328000
ELSE 10329000
F~ 0; 10330000
G~ "X"; 10331000
H~ "I"; 10332000
OUTPUT "DEFINE",C&"?SIZE=E?SZ",B & ";#,", 10333000
C&"?EV=EV?NO",F,EV?CNT,"#;" ; 10334000
IF <>=D THEN D~C ELSE D.APPENDS~","&C; 10335000
10336000
EV?FILL.APPENDC ~ QUOTE(C.F7) & "," & N & F & ","; 10337000
F ~ F+1; P ~ 2; 10338000
LL: IF P{F THEN 10339000
BEGIN 10340000
H.APPENDC ~ ",R?1[R?W,C?L+" & P & "]"; 10341000
P ~ P+1; 10342000
GO TO LL 10343000
END; 10344000
F?TCHCNT ~ F?TCHCNT + 2; 10345000
PATCH EV?CASE,C &"?P(" & H & ");"; 10346000
EV?CNT~ EV?CNT+1; 10347000
10348000
10349000
IF "["!E THEN GO TO LOOP; 10350000
IF B~CHARACTER!"]" THEN ERROR "MISSING",QUOTE("]") 10351000
ELSE B ~ CHARACTER; 10352000
IF "," = B THEN GO TO START; 10353000
INPUT "REAL",D,B; DELETE ELEMENT; 10354000
10355000
END EVENTS MACRO; 10356000
10357000
10358000
10359000
10360000
10361000
10362000
10363000
LIST MACRO P?RAM; 10364000
BEGIN MSTRING N[68]; 10365000
IF S?TOG=99 THEN OUTPUT "R?1[R?W,C?L+"&N.[3:2]&"]" 10366000
ELSE OUTPUT N.[5:LENGTH(N)-5]; 10367000
END; 10368000
MACRO FORWARD; 10369000
BEGIN 10370000
IF E?LVL=999 THEN OUTPUT"F?RWARD" ELSE OUTPUT "FORWARD"; 10371000
END; 10372000
MACRO EVENT; 10373000
BEGIN INTEGER MSTRING P,F[2]; 10374000
MSTRING A,B[63],C[*],E[999]; 10375000
IF BEGINLEVEL-1!W?LVL THEN ERROR 10376000
"EVENTS MUST BE AT OUTER LEVEL OF SIMULATION BLOCK"; 10377000
EV?NT ~ A ~ P?ARAMETERS ~ IDENTIFIER; P ~ 3; E?LVL ~ 999;WT?TYPE~0;10378000
C ~ "MACRO P?R02"&A,"EQV P?RAM;DEFINE" ,A&"=P?R02"&A&"#;"; 10379000
IF B ~ CHARACTER = "(" THEN 10380000
BEGIN 10381000
LP: P ~ P+1; 10382000
B ~ IDENTIFIER; 10383000
P?ARAMETERS.APPENDC ~ "," & B; 10384000
C.APPENDC ~ "MACRO P?R" & P & B, "EQV P?RAM;DEFINE", 10385000
B & "=P?R" & P & B & "#;"; 10386000
IF B ~ CHARACTER = "," THEN GO TO LP; 10387000
IF ")"=B THEN B ~ CHARACTER 10388000
ELSE ERROR "MISSING",QUOTE(")"); 10389000
END; 10390000
P ~ P-3; 10391000
RESCAN A&"?EV"; IF ELEMENT="EV?NO" THEN 10392000
BEGIN 10393000
IF S?IZE ~ INTGER ! P THEN ERROR 10394000
"NUMBER OF PARAMETERS DISAGREES"; 10395000
N?MBER ~ INTGER; 10396000
IF "["=B THEN 10397000
BEGIN DELETE EXPRESSION; 10398000
IF B ~ CHARACTER = "]" THEN B ~ CHARACTER ELSE 10399000
ERROR "MISSING",QUOTE("]"); 10400000
END; 10401000
END ELSE 10402000
BEGIN N?MBER ~ EV?CNT; 10403000
S?IZE ~ <>; 10404000
IF "["=B THEN 10405000
BEGIN IF S?IZE~E~INTGER THEN IF B~CHARACTER="]"THEN GO LS; 10406000
INPUT S?IZE,B; E ~ EXPRESSION; S?IZE ~ "999"; 10407000
IF B ~ CHARACTER ! "]" THEN ERROR "MISSING",QUOTE("]") ELSE 10408000
LS: B ~ CHARACTER; 10409000
INPUT "DEFINE",A&"?SIZE=E?SZ",E & ";#;;"; DELETE ELEMENT; 10410000
END ELSE S?IZE ~ "999"; 10411000
INPUT"DEFINE",A&"?EV=EV?NO",P,EV?CNT,"#;;";DELETE ELEMENT; 10412000
EV?FILL.APPENDC ~ QUOTE(A.F7) & "," & S?IZE & P & ","; 10413000
S?IZE ~ P; 10414000
EV?CNT ~ EV?CNT+1; 10415000
F?TCHCNT ~ F?TCHCNT+2; 10416000
E ~ "I"; F ~ P+1; P ~ 2; 10417000
LC: IF P{F THEN 10418000
BEGIN 10419000
E.APPENDC ~ ",R?1[R?W,C?L+" & P & "]"; 10420000
P ~ P+1; 10421000
GO TO LC; 10422000
END; 10423000
PATCH EV?CASE, A&"?P(" & E & ");"; 10424000
END; 10425000
IF ";"!B THEN ERROR "MISSING",QUOTE(";"); 10426000
E ~ "PROCEDURE",A&"?P("&P?ARAMETERS&");VALUE",P?ARAMETERS 10427000
&";REAL",P?ARAMETERS & ";"; 10428000
INPUT "REAL",A&";"&E; DELETE ELEMENT; B ~ ELEMENT,ELEMENT,ELEMENT; 10429000
IF A ~ ELEMENT = "BEGIN" THEN 10430000
BEGIN 10431000
PATCH EVR?SRV, "DEFINE",EV?NT&"=EV?CELL["&N?MBER&"]#;"&E & "FORWARD;";10432000
OUTPUT B,A,C,"LABEL ENTRY?TO,ENTRY?FROM;"; E?LVL~BEGINLEVEL; 10433000
P?UT ~ R?MV ~ "L?ABL,"; 10434000
S?WTCHSPACE ~ []; S?WTCHSPACE ~ RESERVESTMT(10); 10435000
END ELSE 10436000
BEGIN 10437000
E?LVL ~ 0; 10438000
IF A! "F?RWARD" THEN BEGIN 10439000
PATCH EVR?SRV, "DEFINE",EV?NT&"=EV?CELL["&N?MBER&"]#;"&E & "FORWARD;";10440000
OUTPUT B,A; END ELSE IF A~CHARACTER!";" THEN BEGIN WARNING 10441000
"MISSING",QUOTE(";"); OUTPUT A;END; 10442000
END; 10443000
END MACRO EVENT; 10444000
LIST MACRO FILE; %W0110445000
BEGIN COMMENT GENERAL DECLARATION KLUDGE; %W0110446000
MSTRING NM[100]; %W0110447000
IF <>!I?TOG THEN IF <>=D?EC THEN D?EC~NM ELSE D?EC.APPENDS~NM %W0110448000
ELSE OUTPUT NM; %W0110449000
END FILE; %W0110450000
MACRO OUT EQV FILE; %W0110451000
MACRO PROCEDURE; 10452000
IF <>!I?TOG THEN 10453000
IF <>=D?EC THEN D?EC~"PROCEDURE" ELSE D?EC.APPENDS~"PROCEDURE" 10454000
ELSE 10455000
OUTPUT "PROCEDURE"; 10456000
MACRO STREAM; 10457000
IF <>!I?TOG THEN 10458000
IF <>=D?EC THEN D?EC~"STREAM" ELSE D?EC.APPENDS~"STREAM" 10459000
ELSE 10460000
OUTPUT "STREAM"; 10461000
MACRO CAUSE; 10462000
BEGIN 10463000
MSTRING A,F[396],B,C,D[63]; 10464000
INTEGER MSTRING Q[2]; 10465000
IF S?TOG=90 THEN BEGIN OUTPUT "T? 3"; GO XT; END; 10466000
S?TOG~ 2; 10467000
F~ C~ IDENTIFIER; 10468000
RESCAN C&"?EV"; IF ELEMENT!"EV?NO" THEN ERROR "UNDECLARED EVENT",C 10469000
ELSE BEGIN 10470000
Q ~ D ~ ELEMENT; 10471000
D ~ ELEMENT; 10472000
END; 10473000
10474000
B~ ELEMENT; 10475000
IF "("=B THEN 10476000
BEGIN 10477000
L: A.APPENDC ~ "," & EXPRESSION; 10478000
B~ ELEMENT; 10479000
10480000
IF ","=B THEN 10481000
GO L; 10482000
B~ ELEMENT 10483000
END; 10484000
IF B="CALLED" THEN 10485000
BEGIN 10486000
F ~ EXPRESSION; %W0410487000
B~ ELEMENT 10488000
END; 10489000
IF B="NOW" THEN OUTPUT "BEGIN CAUSE(-" 10490000
ELSE OUTPUT "CAUSE("; 10491000
OUTPUT LINE&",E?RR,"&Q&",["&F&A&"],"; 10492000
IF B = "AFTER" THEN OUTPUT D & "," & EXPRESSION & "+T?ME)" ELSE 10493000
IF B = "IN?IN" THEN OUTPUT D & "," & EXPRESSION & "+T?ME)" ELSE 10494000
IF "AT" = B THEN OUTPUT D & "," & EXPRESSION & ")" ELSE 10495000
IF B = "NOW" THEN OUTPUT D & ",T?ME);AC?TIVATE(K?P,J?NK)END" 10496000
ELSE 10497000
IF B="EXPRESS" THEN OUTPUT "-"&D&",T?ME)" ELSE 10498000
OUTPUT D & ",T?ME)" & B; 10499000
XT: S?TOG ~ 0; 10501000
END; 10502000
MACRO REMOVE; 10503000
BEGIN 10504000
MSTRING A,B[63]; 10505000
A~ EXPRESSION; 10506000
B~ ELEMENT; 10507000
IF B="CALLED" THEN 10508000
BEGIN 10509000
A~ EXPRESSION; 10510000
DELETE ELEMENT 10511000
END; 10512000
OUTPUT "REMOVE(" & LINE & ",E?RR,",A,",", EXPRESSION, ")" 10513000
END; 10514000
MACRO PUT; 10515000
BEGIN 10516000
MSTRING B,C[396],D[1]; 10517000
S?TOG~ 2; 10518000
OUTPUT "PUT(", SEQUENCE, ",E?RR,", EXPRESSION; 10519000
B~ ELEMENT; 10520000
IF B="IN?IN" THEN 10521000
BEGIN 10522000
B ~ EXPRESSION;S?TOG ~ 1; 10523000
IF C~ELEMENT = "LOFO" THEN GO TO M; 10524000
IF C="HIFO" THEN BEGIN D~"-"; GO TO M; END; 10525000
IF "BY"=C THEN GO TO L; 10526000
IF C="RANKED" THEN 10527000
BEGIN IF C~ELEMENT="LOFO" THEN GO TO M; 10528000
IF C="HIFO" THEN BEGIN D~"-"; GO TO M; END; 10529000
IF "BY"!C THEN INPUT C; 10530000
GO TO L; 10531000
M: IF C~ELEMENT!"BY" THEN INPUT C; 10532000
L: OUTPUT ",2,",B,",",D,EXPRESSION,")"; 10533000
END ELSE 10534000
10535000
IF C="BEFORE" THEN 10536000
OUTPUT ",3,", B, ",", EXPRESSION, ")" 10537000
ELSE 10538000
IF C="AFTER" THEN 10539000
OUTPUT ",4,", B, ",", EXPRESSION, ")" 10540000
ELSE 10541000
OUTPUT ",-1,",B,",0)",C; 10542000
END 10543000
ELSE 10544000
BEGIN 10545000
IF "AT"=B THEN 10546000
B~ ELEMENT; 10547000
C~ EXPRESSION; 10548000
IF "OF"=C THEN C~EXPRESSION ELSE 10549000
IF "IN?IN"=C THEN C~ EXPRESSION; 10550000
IF B="TOP" THEN 10551000
OUTPUT ",0,", C, ",0)" 10552000
ELSE 10553000
OUTPUT ",1,", C, ",0)" 10554000
END; 10555000
S?TOG~ 0 10556000
END; 10557000
MSTRING S?TEND[63]; 10558000
LIST MACRO SET; 10559000
BEGIN 10560000
STRING X,Y,Z[300],T[63]; 10561000
IF X="MEMBERS" THEN GO TO CKOF; 10562000
IF X="EACH" THEN 10563000
BEGIN 10564000
CKOF: T ~ ELEMENT; 10565000
IF "OF"!T THEN INPUT T; 10566000
END; 10567000
IF <>=F?ORVAR THEN ERROR "MISPLACED SUBSET DESIGNATOR"; 10568000
X ~ EXPRESSION; %W0510569000
10570000
10571000
IF F?ORVAR = "S?T" THEN OUTPUT "S?",X; %W0510572000
Y ~ "1"; Z ~ "TRUE"; 10573000
L: T ~ ELEMENT; 10574000
IF T = "FROM" THEN 10575000
BEGIN IF "1"!Y THEN ERROR "MULTIPLE",QUOTE(T); 10576000
Y ~ EXPRESSION; 10577000
GO TO L; 10578000
END; 10579000
IF T = "WITH" THEN 10580000
BEGIN IF Z="TRUE" THEN Z ~ "("&BOOLEAN EXPRESSION&")" ELSE 10581000
10582000
Z.APPENDC ~ "AND(" & BOOLEAN EXPRESSION & ")"; 10583000
GO TO L; 10584000
END; 10585000
OUTPUT "F?RST(",LINE,",E?RR,",X,",",Y,",",F?ORVAR,",",Z, 10586000
")STEP N?XT(",LINE,",E?RR,",F?ORVAR,",",Z,")WHILE", 10587000
F?ORVAR,"!0"; 10588000
10589000
10590000
10591000
IF F?ORVAR="S?T" THEN OUTPUT"S?"; 10592000
S?TEND ~ T; 10593000
OUTPUT T; 10594000
END SET; 10595000
MACRO EACH EQV SET; 10596000
MACRO EVERY EQV SET; 10597000
MACRO MEMBERS EQV SET; 10598000
MACRO FIND; 10599000
BEGIN INTEGER STRING S[8]; 10600000
STRING B[100],T[63],X,Y,Z,MX[300],FV,V[100]; 10601000
S?TOG ~ 6; 10602000
FV ~ F?ORVAR; F?ORVAR ~ VARIABLE; 10603000
B ~ ELEMENT; 10604000
IF B ! "IN?IN" THEN 10605000
BEGIN ERROR "MISSING",QUOTE("IN"); 10606000
INPUT B; 10607000
END; 10608000
NXT:X ~ EXPRESSION; 10609000
Y ~ "1"; Z ~ "TRUE"; 10610000
L: T ~ ELEMENT; 10611000
IF T = "FROM" THEN 10612000
BEGIN IF "1"!Y THEN ERROR "MULTIPLE",QUOTE(T); 10613000
Y ~ EXPRESSION; 10614000
GO TO L; 10615000
END; 10616000
IF T = "WITH" THEN 10617000
BEGIN IF Z="TRUE" THEN Z ~ "("&BOOLEAN EXPRESSION&")" ELSE 10618000
Z.APPENDC ~ "AND(" & BOOLEAN EXPRESSION & ")"; 10619000
GO TO L; 10620000
END; 10621000
IF S ! 0 THEN GO G; %W0210622000
IF "TO" = T THEN GO AW; 10623000
IF "," = T THEN 10624000
BEGIN 10625000
AW: %W0210626000
% %W0210627000
S ~ 1; MX ~ "0,0"; V ~ "0"; 10628000
OUTPUT "IF",F?ORVAR,"~FIND([FOR",F?ORVAR,"~"; 10629000
G: %W0210630000
OUTPUT "F?RST(",LINE,",E?RR,",X,",",Y,",",F?ORVAR,",",Z, 10631000
")STEP N?XT(",LINE,",E?RR,",F?ORVAR,",",Z,")WHILE",F?ORVAR,"!0"; 10632000
IF "," = T THEN BEGIN OUTPUT T; GO TO NXT; END; 10633000
END ELSE GO ON; 10634000
B ~ ELEMENT; 10635000
IF B = "MAXIMIZE" THEN MX ~ "1" ELSE 10636000
IF B ! "MINIMIZE" THEN 10637000
ERROR "MISSING",QUOTE("MAXIMIZE"),"OR",QUOTE("MINIMIZE"); 10638000
B ~ VARIABLE; 10639000
T ~ CHARACTER; 10640000
IF "=" ! T THEN INPUT B,T ELSE V ~ B; 10641000
IF"1"=MX THEN MX~"1,"&EXPRESSION ELSE MX~"-1,-("&EXPRESSION&")"; 10642000
T ~ ELEMENT; 10643000
ON: IF 0 = S THEN BEGIN IF "1"=Y THEN Y~"0";OUTPUT "IF",F?ORVAR, 10644000
"~F?RST(",LINE,",E?RR,",X,",",Y,",",F?ORVAR,",",Z;END 10645000
ELSE OUTPUT "DO",F?ORVAR,"],",MX,",",V; 10646000
IF T = "ELSE" THEN OUTPUT ")=0 THEN" ELSE OUTPUT ")!0 THEN"; 10647000
IF T ! "THEN" THEN OUTPUT T; 10648000
S?TOG ~ 0; F?ORVAR ~ FV; 10649000
END M FIND; 10650000
MACRO FOR; 10651000
BEGIN 10652000
MSTRING T[63],FV[100]; 10653000
IF S?TOG=97 THEN BEGIN OUTPUT "F?";GO XT;END; 10654000
FV ~ F?ORVAR; F?ORVAR ~ VARIABLE;OUTPUT "FOR",F?ORVAR; 10655000
T ~ ELEMENT; 10656000
IF "~" ! T THEN GO TO FL; 10657000
NXT:OUTPUT T,EXPRESSION; 10658000
T ~ ELEMENT; 10659000
IF ":" = T THEN GO TO LTO; 10660000
IF "TO"= T THEN 10661000
LTO:BEGIN OUTPUT "STEP 1 UNTIL",EXPRESSION; 10662000
T ~ ELEMENT 10663000
END ELSE 10664000
IF "(" = T THEN 10665000
BEGIN OUTPUT "STEP",EXPRESSION; 10666000
T ~ ELEMENT; 10667000
IF ")" ! T THEN ERROR "MISSING",QUOTE(")") 10668000
ELSE T ~ "UNTIL"; 10669000
OUTPUT T,EXPRESSION; 10670000
T ~ ELEMENT 10671000
END ELSE 10672000
IF T = "STEP" THEN 10673000
BEGIN OUTPUT T,EXPRESSION; 10674000
T ~ ELEMENT; 10675000
IF T = "UNTIL" THEN 10676000
BEGIN OUTPUT T,EXPRESSION; 10677000
T ~ ELEMENT 10678000
END ELSE 10679000
IF T = "WHILE" THEN 10680000
BEGIN OUTPUT T,BOOLEAN EXPRESSION; 10681000
T ~ ELEMENT; 10682000
END ELSE 10683000
OUTPUT "WHILE TRUE" 10684000
END ELSE 10685000
IF T = "WHILE" THEN 10686000
BEGIN OUTPUT T, BOOLEAN EXPRESSION; 10687000
T ~ ELEMENT; 10688000
END; 10689000
TC: IF "," = T THEN GO TO NXT; 10690000
FL: OUTPUT T; F?ORVAR ~ FV; 10691000
XT: END FOR MACRO; 10692000
MACRO END; 10693000
BEGIN 10694000
INTEGER MSTRING N,M[4]; 10695000
IF BEGINLEVEL-1=W?LVL THEN 10696000
BEGIN 10697000
N ~ EV?CNT | 2; 10698000
PATCH SIMR?SRV,"FL?P(F?TCHLIST,"&F?TCHCNT&");FL?P(EV?CELL,"&10699000
EV?CNT&");EV?MAX~"&N&";FILL F?TCHLIST[*]WITH",EV?FILL&ENT?FILL 10700000
& QUOTE("PAGEHEA") & ",-1,-1;"; 10701000
PATCH FMR?SRV,FM?FILL & ";"; 10702000
OUTPUT ";"&IN?TL,GE?NERAL,"IF CALENDAR!0 THEN BEGIN"; 10703000
IF <>!SUS?CASE THEN OUTPUT "INTEGER R?W,C?L;"& 10704000
"BOOLEAN PROCEDURE T?T(K?P);VALUE K?P;REAL K?P;"& 10705000
"CASE R?1[R?W~K?P.[33:7],(C?L~K?P.[40:8])+3]OF BEGIN", 10706000
SUS?CASE,"END;"; 10707000
OUTPUT "LABEL L,L1;L:"&EX?EC; 10708000
IF <>!SUS?CASE THEN 10709000
OUTPUT "IF SC?N(SUS?HDR,K?P,T?T(K?P))>0 THEN E?RROR("&10710000
LINE&",57,E?RR);IF K?P!0 THEN BEGIN", 10711000
"REMOVE(-" & LINE & ",E?RR,K?P,CAL?HDR);" & 10712000
"R?1[R?W,C?L+1]~T?ME;" & 10712500
"PUT(-" & LINE & ",E?RR,K?P,0,CAL?HDR,0);REMOVE(-"&LINE& 10713000
",E?RR,K?P,SUS?HDR);GO L1 END;"; 10714000
OUTPUT "IF SC?N(CAL?HDR,K?P,TRUE)>0 THEN E?RROR("&LINE& 10715000
",56,E?RR);IF K?P!0 THEN BEGIN", 10716000
"IF J?NK~R?1[K?P.[33:7],K?P.[40:8]+1]<T?ME THEN E?RROR(" & 10717000
LINE &",30,E?RR);IF J?NK=IN?FIN THEN BEGIN REMOVE(-" & 10718000
LINE & ",E?RR,K?P,CAL?HDR);GO L END;" & 10719000
"IF J?NK<REAL(<0777777777777776>)THEN T?ME~J?NK;" & 10720000
"REMOVE(-"&LINE&",E?RR,K?P,CAL?HDR);" & 10721000
"L1:AC?TIVATE(K?P,LASTEVENT);GO L END;" & 10722000
10723000
10724000
10725000
10726000
"END END;STOP:END?SIM;"; 10727000
W?LVL~0; M~ 1; 10728000
END; 10729000
IF E?LVL!0 THEN IF E?LVL=BEGINLEVEL THEN 10730000
IF S?WTCH!0 THEN BEGIN 10731000
10732000
PATCH S?WTCHSPACE,"DEFINE W?TE="&WT?TYPE&"#;LABEL", 10733000
S?WTCHLIST&"L?ABEL,L?ABL;SWITCH", 10734000
"W?AIT~"&P?UT&R?MV&S?WTCHLIST&"L?ABEL;GO W?AIT["&EV?NT& 10735000
".[18:7]];L?ABL:"; 10736000
S?WTCH~E?LVL~0; S?WTCHSPACE ~ []; 10737000
S?WTCHLIST~ <>; 10738000
OUTPUT ";L?ABEL:"; 10739000
END; 10740000
IF BEGINLEVEL-M=2 THEN 10741000
OUTPUT "END;"; 10742000
OUTPUT "END" 10743000
END; 10744000
MACRO IN; 10745000
IF <> ! I?TOG THEN D?EC.APPENDS ~ "IN" ELSE %W0110746000
IF 0<S?TOG THEN 10747000
OUTPUT "IN?IN" 10748000
ELSE 10749000
OUTPUT "IN"; 10750000
MACRO FIRST; 10751000
OUTPUT "FIRST(" & LINE & ",E?RR,", PRIMARY, ")"; 10752000
MACRO LAST; 10753000
OUTPUT "LAST(", SEQUENCE, ",E?RR,", PRIMARY, ")"; 10754000
10755000
DEFINE INFINITY=REAL(<0777777777777776>)#; 10756000
10757000
MACRO EMPTY; 10758000
OUTPUT "ST?T(" & LINE & ",E?RR," & PRIMARY & ",1)=0"; 10759000
MACRO SAME; 10760000
BEGIN 10761000
STRING A[256]; 10762000
A ~ PRIMARY; 10763000
IF "AS"=A THEN 10764000
OUTPUT "&0[18:18:15]=SAME(",PRIMARY,")" 10765000
ELSE 10766000
OUTPUT "&0[18:18:15]=SAME(",A,")"; 10767000
END; 10768000
MACRO TIME; 10769000
BEGIN 10770000
MSTRING A[1]; 10771000
A~ CHARACTER; 10772000
IF "("=A THEN 10773000
OUTPUT "TIME(" 10774000
ELSE OUTPUT "T?ME",A; 10775000
IF "~"=A THEN ERROR "READ-ONLY ITEM"; 10776000
END; 10777000
MACRO EXECUTIVE; 10778000
BEGIN 10779000
EX?EC~ ELEMENT; 10780000
IF ";"=EX?EC THEN 10781000
BEGIN 10782000
EX?EC~ "EXECUTIVE;"; 10783000
OUTPUT "PROCEDURE EXECUTIVE;" 10784000
END 10785000
ELSE 10786000
BEGIN OUTPUT "PROCEDURE", EX?EC; EX?EC~EX?EC&";";END; 10787000
END; 10788000
MACRO CANCEL; 10789000
BEGIN 10790000
MSTRING A,B[63]; 10791000
IF S?TOG=90 THEN BEGIN OUTPUT "T? 4"; GO XT; END; 10792000
A~ EXPRESSION; 10793000
B~ ELEMENT; 10794000
IF B="CALLED" THEN 10795000
OUTPUT "CANCEL(", SEQUENCE, ",E?RR,", EXPRESSION, ")" 10796000
ELSE 10797000
OUTPUT "CANCEL(", SEQUENCE, ",E?RR,", A, ")", B; 10798000
XT: S?TOG ~ 0; 10799000
END; 10800000
MACRO ERROR; 10801000
BEGIN 10802000
MSTRING A[63]; 10803000
A~ IDENTIFIER; 10804000
OUTPUT "LABEL", A, ";PROCEDURE E?RR;GO TO", A 10805000
END; 10806000
MACRO RESCHEDULE; 10807000
BEGIN STRING A[300],B[63]; 10808000
IF S?TOG=90 THEN BEGIN OUTPUT "T? 5"; GO XT; END; 10809000
S?TOG ~ 2; 10810000
A ~ EXPRESSION; 10811000
IF B~ELEMENT="CALLED" THEN 10812000
BEGIN A ~ EXPRESSION; 10813000
B ~ ELEMENT; 10814000
END; 10815000
IF "NOW"=B THEN OUTPUT "BEGIN"; 10816000
OUTPUT "RESCHEDULE("&LINE&",E?RR,"&A&","; 10817000
IF "AT"=B THEN OUTPUT EXPRESSION & ",2)" ELSE 10818000
IF "IN?IN"=B THEN OUTPUT EXPRESSION & "+T?ME,2)" ELSE 10819000
IF "AFTER"=B THEN OUTPUT EXPRESSION & "+T?ME,2)" ELSE 10820000
IF "NOW"=B THEN OUTPUT "T?ME,-1);AC?TIVATE(K?P,J?NK)END" ELSE 10821000
IF "ADVANCED" = B THEN 10822000
BEGIN IF A~ EXPRESSION = "BY" THEN A ~ EXPRESSION; 10823000
OUTPUT "-("&A&"),-2)" 10824000
END ELSE 10825000
IF "DELAYED" = B THEN 10826000
BEGIN IF A~ EXPRESSION = "BY" THEN A ~ EXPRESSION; 10827000
OUTPUT A & ",-2)" 10828000
END ELSE 10829000
IF "EXPRESS"=B THEN OUTPUT "T?ME,0)" ELSE 10830000
OUTPUT "T?ME,2)"&B; 10831000
XT: S?TOG ~ 0; 10832000
END RESCHEDULE MAC; 10833000
MACRO SIMULATION; 10834000
BEGIN 10835000
IF W?LVL!0 THEN BEGIN 10836000
ERROR "ILLEGAL PLACEMENT OF SIMULATION BLOCK"; 10837000
GO EXIT END; 10838000
OUTPUT "LABEL START,STOP;PROCEDURE E?RR;GO TO STOP;"; 10839000
F?TCHCNT ~ 4; EV?CNT~1; SU?CNT~0; EV?FILL~"0,0,"; 10840000
ENT?FILL ~ <>; %W0910841000
SIMR?SRV ~ []; SIMR?SRV ~ RESERVE(40); 10842000
OUTPUT"START:SIMULATION;BEGIN"; 10843000
DELETE CHARACTER; 10844000
EVR?SRV ~ []; EVR?SRV ~ RESERVE(99); 10845000
OUTPUT "PROCEDURE AC?TIVATE(K?P,I);VALUE K?P;REAL K?P,I;" 10846000
& "BEGIN REAL J,R?W,C?L;BOOLEAN B;SUS?EN~0;" 10847000
& "IF BOOLEAN(ST?RTIME.[1:1])THEN START?UP("&LINE&",E?RR);"10848000
&"IF B~BOOLEAN(F?TCHLIST[(J~(I~R?1[R?W~K?P.[33:7],C?L~K?P.[40:8]+2])"10849000
& ".[25:8])|2+1].[1:1])THEN TR?CE(K?P,1);CASE J OF BEGIN;";10850000
10851000
EV?CASE ~ []; EV?CASE ~ RESERVE(99); 10852000
OUTPUT "END;IF B THEN IF SUS?EN!0 THEN BEGIN TR?CE(SUS?EN,2);" 10853000
& "SUS?EN~0;END ELSE " 10854000
& "TR?CE(K?P,3);DESTROY(" & LINE & ",E?RR,K?P)END;"; 10855000
FMR?SRV ~ []; FMR?SRV ~ RESERVE(99); 10856000
DF?SUB ~ DF?FN ~ 0; 10857000
FM?FILL ~ "SWITCH FORMAT FM?00~()"; 10858000
W?LVL~ BEGINLEVEL; 10859000
EXIT: 10860000
END; 10861000
MACRO INITIALIZATION; 10862000
BEGIN 10863000
IN?TL~ ELEMENT; 10864000
IF ";"=IN?TL THEN 10865000
BEGIN 10866000
IN?TL~ "INITIALIZATION;"; 10867000
OUTPUT "PROCEDURE INITIALIZATION;"; 10868000
END 10869000
ELSE 10870000
BEGIN OUTPUT "PROCEDURE", IN?TL;IN?TL~IN?TL,";" END; 10871000
END; 10872000
MACRO SCHEDTIME; 10873000
BEGIN 10874000
DELETE ELEMENT; 10875000
OUTPUT "(R?1[R?OW(",SEQUENCE,",E?RR,1,",PRIMARY,",0),C?OL])"; 10876000
DELETE ELEMENT; 10877000
END; 10878000
LIST MACRO EVNAME; 10879000
BEGIN MSTRING MN[300],A,B[63],T[1]; 10880000
INTEGER MSTRING I,J[5]; 10881000
B ~ ELEMENT; 10882000
IF MN="SCHEDENTITY" THEN GO TO FT; 10883000
IF MN="EVNAME" THEN 10884000
BEGIN 10885000
FT: MN.APPENDC ~ "(" & LINE & ",E?RR,"; 10886000
IF "("!B THEN 10887000
BEGIN MN.APPENDC ~ F?ORVAR & ")"; 10888000
IF <> = F?ORVAR THEN ERROR "MISSING",QUOTE("("); 10889000
END ELSE 10890000
BEGIN MN.APPENDC ~ EXPRESSION & ")"; 10891000
IF B~ELEMENT ! ")" THEN ERROR "MISSING",QUOTE(")") 10892000
ELSE B ~ ELEMENT; 10893000
END; 10894000
END ELSE 10895000
IF MN = "NEXTEVENT" THEN 10896000
MN.APPENDC ~ "(" & LINE & ",E?RR"; 10897000
IF "IS" ! B THEN 10898000
BEGIN OUTPUT MN; 10899000
IF "~"=B THEN ERROR"THIS ATTRIBUTE MAY NOT BE ALTERED.";%W0810900000
GO EXIT; 10901000
END ELSE B ~ ELEMENT; 10902000
IF B = "NOT" THEN 10903000
BEGIN T ~ "!"; 10904000
A ~ "AND J?NK"; 10905000
B ~ ELEMENT; 10906000
END ELSE 10907000
BEGIN T ~ "="; 10908000
A ~ "OR J?NK"; 10909000
END; 10910000
IF "(" = B THEN 10911000
BEGIN B ~ ELEMENT; 10912000
OUTPUT "((J?NK~" & MN & ".[18:15])" 10913000
END ELSE 10914000
BEGIN A ~ <>; 10915000
OUTPUT MN; 10916000
END; 10917000
L: RESCAN B&"?EV"; 10918000
IF ELEMENT ! "EV?NO" THEN ERROR "UNDECLARED EVENT",B ELSE 10919000
BEGIN 10920000
DELETE ELEMENT; I ~ B ~ NUMBER; END; 10921000
IF B ~ ELEMENT = "[" THEN 10922000
BEGIN J ~ B ~ NUMBER; I ~ J | 256 + I; 10923000
IF B~ELEMENT ! "]" THEN ERROR "MISSING",QUOTE("]") 10924000
ELSE B ~ ELEMENT; 10925000
IF <> = A THEN 10926000
BEGIN OUTPUT ".[18:15]" & T & I; 10927000
GO EXIT; 10928000
END; 10929000
END ELSE 10930000
BEGIN 10931000
IF <> = A THEN 10932000
BEGIN OUTPUT ".[25:8]" & T & I; 10933000
GO EXIT; 10934000
END; 10935000
OUTPUT ".[40:8]"; %W0610936000
END; 10937000
OUTPUT T & I; %W0610938000
IF ","=B THEN 10939000
LOR: BEGIN OUTPUT A; 10940000
B ~ ELEMENT; 10941000
GO TO L; 10942000
END; 10943000
IF "OR" = B THEN GO TO LOR; 10944000
IF ")"!B THEN ERROR "MISSING",QUOTE(")"); 10945000
EXIT: OUTPUT B; 10946000
END EVNAME MAC; 10947000
MACRO NEXTEVENT EQV EVNAME; 10948000
MACRO LASTEVENT EQV EVNAME; 10949000
MACRO SCHEDENTITY EQV EVNAME; 10950000
ATTRIBUTE ARRAY PARAMETER[3]; 10951000
MACRO VALID; 10952000
OUTPUT "SAME(",PRIMARY,")!REAL(NOT FALSE)"; 10953000
MACRO NEXT; 10954000
OUTPUT "NEXT(",SEQUENCE,",E?RR,",PRIMARY,")"; 10955000
10956000
10957000
MACRO TIMEUNIT; 10958000
BEGIN MSTRING A[63]; INTEGER MSTRING TIMEUNITS[5]; 10959000
IF A ~ ELEMENT="~" THEN A~ ELEMENT; 10960000
IF LENGTH(A) > 3 THEN A ~ A.THREE; 10961000
10962000
IF "MIN"=A THEN TIMEUNITS ~ 60 ELSE 10963000
IF "HOU"=A THEN TIMEUNITS ~ 3600 ELSE 10964000
IF "DAY"=A THEN TIMEUNITS ~ 86400 ELSE 10965000
IF "SEC"=A THEN TIMEUNITS ~ 1 ELSE 10966000
IF A.TWO = "HR" THEN TIMEUNITS ~ 3600 ELSE 10967000
BEGIN ERROR "MISSING TIME-UNIT";OUTPUT A;GO L;END; 10968000
OUTPUT "T?MESCALE ~ "&TIMEUNITS; 10969000
L: 10970000
10971000
10972000
10973000
END TIMEUNIT; 10974000
MACRO DAY; 10975000
BEGIN MSTRING A[1]; 10976000
A ~ CHARACTER; 10977000
IF "("!A THEN OUTPUT "(T?ME" ELSE 10978000
BEGIN OUTPUT "(",EXPRESSION; 10979000
A ~ CHARACTER; 10980000
IF ")"!A THEN ERROR"MISSING",QUOTE(")") 10981000
ELSE A ~ <>; 10982000
END; 10983000
OUTPUT"|T?MESCALE DIV 86400)",A; 10984000
END M DAY; 10985000
10986000
10987000
10988000
10989000
10990000
10991000
MACRO ALPHATIME; 10992000
BEGIN MSTRING A[1]; 10993000
A ~ CHARACTER; OUTPUT "ALPHATIME("; 10994000
IF "("!A THEN OUTPUT "T?ME)" ELSE 10995000
BEGIN OUTPUT EXPRESSION; 10996000
A ~ CHARACTER; 10997000
IF ")"!A THEN 10998000
BEGIN ERROR"MISSING",QUOTE(")"); 10999000
OUTPUT ")"; 11000000
END; 11001000
END; 11002000
OUTPUT A; 11003000
END M ALPHATIME; 11004000
11005000
11006000
MACRO MSTRING; 11007000
IF <>!I?TOG THEN 11008000
D?EC.APPENDS ~ "MSTRING" 11009000
ELSE 11010000
OUTPUT "MSTRING"; 11011000
MACRO RANKING; 11012000
BEGIN 11013000
MSTRING A[63],B[1]; 11014000
S?TOG~ 1; 11015000
IF CHARACTER!"(" THEN ERROR "MISSING",QUOTE("("); 11016000
OUTPUT "RANKING(",LINE,",E?RR,", EXPRESSION, ","; 11017000
IF CHARACTER!")" THEN ERROR "MISSING",QUOTE(")"); 11018000
IF CHARACTER!"~" THEN ERROR "MISSING",QUOTE("~"); 11019000
IF A~ ELEMENT="FIFO" THEN OUTPUT "1)" ELSE 11020000
IF A="LIFO" THEN OUTPUT "0)" ELSE 11021000
IF A="LOFO" THEN GO L ELSE 11022000
IF A="HIFO" THEN 11023000
BEGIN 11024000
B~ "-"; 11025000
L: IF A~ ELEMENT !"BY" THEN INPUT A; 11026000
OUTPUT B, "2&(",EXPRESSION,")[18:33:15])"; 11027000
END 11028000
ELSE ERROR "MISSING","RANKING SPECIFICATION"; 11029000
S?TOG~ 0; 11030000
END; 11031000
MACRO L?ST; 11032000
BEGIN MSTRING A[1],B[63]; 11033000
INTEGER MSTRING F[8]; 11034000
IF A~CHARACTER THEN 11035000
IF "["!A THEN INPUT A ELSE OUTPUT "["; 11036000
L1: IF B~ELEMENT ="[" THEN 11037000
BEGIN RESCAN "L?ST"; OUTPUT "[",UNTIL "L?ST","]"; 11038000
IF B~CHARACTER !"]" THEN ERROR "MISSING",QUOTE("]") 11039000
ELSE B~CHARACTER; 11040000
GO TO L2; 11041000
END; 11042000
IF B="FOR" THEN 11043000
BEGIN F ~ 1; OUTPUT B; 11044000
LF: IF B~ELEMENT ="FOR"THEN F~F+1; 11045000
OUTPUT B; 11046000
IF "DO"!B THEN GO TO LF; 11047000
IF F~F-1 !0 THEN GO TO LF; 11048000
GO TO L1; 11049000
END; 11050000
INPUT B; 11051000
OUTPUT EXPRESSION; 11052000
B ~ CHARACTER; 11053000
L2: IF ","=B THEN 11054000
BEGIN OUTPUT ","; 11055000
GO TO L1 11056000
END; 11057000
IF "["=A THEN 11058000
IF "]"!B THEN ERROR "MISSING",QUOTE("]") 11059000
ELSE BEGIN OUTPUT B; B ~ <> END; 11060000
OUTPUT "L?ST",B; 11061000
END L?ST; 11062000
MACRO FETCH; 11063000
BEGIN 11064000
MSTRING A[63],B[*]; 11065000
RESCAN "L?ST"; 11066000
B ~ "FETCH(",LINE,",E?RR,",UNTIL "L?ST",")"; 11067000
IF A ~ ELEMENT = "ELSE" THEN OUTPUT "IF NOT",B,"THEN" 11068000
ELSE IF A = "THEN" THEN OUTPUT "IF",B,A 11069000
ELSE OUTPUT "BEGIN IF",B,"THEN END",A; 11070000
END M FETCH; 11071000
MACRO SIZE; 11072000
OUTPUT "SIZE(",LINE,",E?RR,",PRIMARY,")"; 11073000
MACRO MOVE; 11074000
BEGIN 11075000
MSTRING C[396],B[65]; INTEGER MSTRING T[1]; 11076000
C~ EXPRESSION; 11077000
11078000
IF B~ ELEMENT="TO" THEN T~ 1 ELSE 11079000
IF B="FROM" THEN T~2 ELSE 11080000
ERROR "MISSING",QUOTE("TO"),"OR",QUOTE("FROM"); 11081000
11082000
11083000
11084000
11085000
11086000
11087000
OUTPUT "BEGIN"; 11088000
L: OUTPUT "MOVE(",LINE,",E?RR,",C,",",VARIABLE,",",T,");", 11089000
"AC?TIVATE(K?P,J?NK);"; 11090000
IF B~ELEMENT="FROM" THEN T ~ 2 ELSE 11091000
IF "TO"=B THEN T ~ 1 ELSE GO TO X; 11092000
GO TO L; 11093000
X: OUTPUT "END",B; 11094000
END MOVE MACRO; 11095000
MACRO WAIT; 11096000
BEGIN 11097000
INTEGER MSTRING EVNO[5]; MSTRING A[63]; 11098000
IF S?TOG=97 THEN BEGIN OUTPUT "WAIT"; GO XT END; S?TOG ~ 97; 11099000
A~ELEMENT;S?TOG~0;IF"("=A THEN BEGIN OUTPUT "WAIT(";GO XT;END; %W0711100000
IF"AT"!A THEN IF"IN?IN"!A THEN IF"F?"!A THEN 11101000
INPUT "EV?CELL["&N?MBER&"]"&A; 11102000
IF E?LVL!BEGINLEVEL THEN IF BLOCKLEVEL>E?LVL THEN 11103000
ERROR "WAIT STATEMENTS MUST BE IN THE OUTER BLOCK OF AN EVENT"; 11104000
IF S?WTCH ~ S?WTCH+1 = 1 THEN S?WTCH ~ 3; 11105000
EVNO ~ S?WTCH|256 + ENTIER(N?MBER); 11106000
S?WTCHLIST.APPENDC ~ "S?" & S?WTCH & ","; 11107000
OUTPUT "BEGIN RESUME(",LINE,",E?RR,",S?IZE,",",EV?NT, 11108000
11109000
",-1,IN?FIN,",VARIABLE,",W?TE,",EVNO,");GO L?ABEL;S?"&S?WTCH&":END";11110000
POST "THIS IS REACTIVATION POINT",EV?NT&"["&S?WTCH&"]...."; 11111000
XT: 11112000
END WAIT MACRO; 11113000
MACRO ENTRY; 11114000
BEGIN 11115000
MSTRING A[63]; 11116000
IF A~ CHARACTER!"(" THEN ERROR "MISSING",QUOTE("("); 11117000
IF A~ ELEMENT="TO" THEN 11118000
IF P?UT!"L?ABL," THEN ERROR "DUPLICATE ENTRY PLACEMENT","(TO)" 11119000
ELSE 11120000
BEGIN WT?TYPE ~ WT?TYPE+1; 11121000
P?UT ~ "ENTRY?TO"&","; 11122000
OUTPUT "ENTRY?TO"&":"; 11123000
END 11124000
ELSE IF A="FROM" THEN 11125000
IF R?MV!"L?ABL," THEN ERROR "DUPLICATE ENTRY PLACEMENT","(FROM)"11126000
ELSE 11127000
BEGIN WT?TYPE ~ WT?TYPE+2; 11128000
R?MV ~ "ENTRY?FROM"&","; 11129000
OUTPUT "ENTRY?FROM"&":"; 11130000
END 11131000
ELSE ERROR "ILLEGAL ENTRY SPECIFIER",A; 11132000
XT: IF A~ CHARACTER!")" THEN ERROR "MISSING",QUOTE(")"); 11133000
IF A~ CHARACTER!":" THEN 11134000
BEGIN 11135000
ERROR "MISSING",QUOTE(":"); 11136000
OUTPUT A; 11137000
END; IF S?WTCH=0 THEN S?WTCH~ 3; 11138000
END; 11139000
MACRO RESUME; 11140000
BEGIN 11141000
MSTRING TEXP,BEXP[500],A[63],C[6]; 11142000
INTEGER MSTRING S[5],EVNO[5],EVSZ[5]; 11143000
IF E?LVL=BEGINLEVEL THEN GO Q; 11144000
IF BLOCKLEVEL>E?LVL THEN 11145000
ERROR "SUSPENSIONS ONLY ALLOWED FROM OUTER BLOCK OF AN EVENT"; %W0311146000
% %W0311147000
Q: IF S?WTCH~ S?WTCH+1=1 THEN S?WTCH~ 3; 11148000
S?TOG~ 2; 11149000
C ~ "S?" & S?WTCH; S?WTCHLIST.APPENDC ~ C & ","; 11150000
EVNO ~ S?WTCH|256 + ENTIER(N?MBER); 11151000
TEXP ~ "IN?FIN"; 11152000
OUTPUT "BEGIN"; 11153000
IF A~ELEMENT="IN?IN" THEN GO DLY; 11154000
IF "AFTER"=A THEN 11155000
DLY: TEXP~ "T?ME+"&EXPRESSION ELSE 11156000
IF "AT"=A THEN 11157000
TEXP~ EXPRESSION ELSE 11158000
IF "WHEN"=A THEN 11159000
GO W ELSE 11160000
ERROR "MISSING",QUOTE("AFTER"),",",QUOTE("AT"),"OR",QUOTE("WHEN"); 11161000
IF A~ ELEMENT!"OR" THEN 11162000
BEGIN IF ","=A THEN BEGIN TEXP ~ "-1,"&TEXP; GO WW END; 11163000
TEXP ~ "-1," & TEXP & ",0,4,"; 11164000
11165000
END ELSE 11166000
BEGIN 11167000
IF A~ELEMENT!"WHEN" THEN 11168000
BEGIN ERROR "MISSING",QUOTE("WHEN"); 11169000
INPUT A; 11170000
END; 11171000
W: S?TOG~ 99; BEXP~ "T?T~"& BOOLEAN EXPRESSION; 11172000
S?TOG ~ 0; TEXP ~ SU?CNT & "," & TEXP; 11173000
IF A~CHARACTER = "," THEN 11174000
WW: BEGIN S?TOG~ 97; 11175000
IF ELEMENT ! "WAIT" THEN ERROR "MISSING",QUOTE("WAIT") 11176000
ELSE DELETE ELEMENT; 11177000
S?TOG ~ 0; 11178000
TEXP.APPENDC ~ "," & VARIABLE & ",W?TE,"; 11179000
A ~ <>; 11180000
END ELSE 11181000
TEXP.APPENDC ~ ",0,4,"; 11182000
IF <> = BEXP THEN GO NS; %W1011183000
SUS?CASE.APPENDC ~ BEXP & ";"; 11184000
SU?CNT ~ SU?CNT+1; 11185000
END; 11186000
NS: %W1011187000
OUTPUT "RESUME("&LINE&",E?RR,"&S?IZE&","&EV?NT&","&TEXP&EVNO 11188000
&");GO L?ABEL;"&C&":END",A; 11189000
POST "THIS IS REACTIVATION POINT",EV?NT&"["&S?WTCH&"]...."; 11190000
S?TOG ~ 0; 11191000
END MACRO RESUME; 11192000
11193000
LIST MACRO S?TAT; 11194000
BEGIN 11195000
MSTRING N[10],B[1],C[300]; 11196000
IF B~CHARACTER!"("THEN IF <>=F?ORVAR THEN ERROR "MISSING", 11197000
QUOTE("(") ELSE C~F?ORVAR ELSE BEGIN C~EXPRESSION; 11198000
IF B~CHARACTER!")"THEN ERROR"MISSING",QUOTE(")")ELSE B~<>;END; 11199000
OUTPUT "ST?T("&LINE&",E?RR,"&C&","&N.[5:2]&")"&B; 11200000
END; 11201000
MACRO S?TAT01 EQV S?TAT; 11202000
MACRO S?TAT03 EQV S?TAT; 11203000
MACRO S?TAT04 EQV S?TAT; 11204000
MACRO S?TAT05 EQV S?TAT; 11205000
MACRO S?TAT06 EQV S?TAT; 11206000
MACRO S?TAT13 EQV S?TAT; 11207000
MACRO S?TAT08 EQV S?TAT; 11208000
MACRO S?TAT09 EQV S?TAT; 11209000
MACRO S?TAT10 EQV S?TAT; MACRO S?TAT12 EQV S?TAT; 11210000
MACRO S?TAT11 EQV S?TAT; 11211000
DEFINE TOTMEMBERS=S?TAT03#, 11212000
SETMEMBERS=S?TAT01#, 11213000
OCCUPANCY=S?TAT04#, 11214000
MAXMEMBERS=S?TAT05#, 11215000
STARTTIME=S?TAT06#, 11216000
MAXMEMBERTIME = S?TAT11#, 11217000
TOTQ = S?TAT08#, 11218000
MAXQTIME = S?TAT09#, 11219000
OCCQ = S?TAT10#, 11220000
CURRQ = S?TAT12#, 11221000
MAXQ = S?TAT13#; 11222000
MACRO RESET; 11223000
BEGIN 11224000
MSTRING A,B[300],C[63]; 11225000
A~ EXPRESSION; 11226000
IF B~ ELEMENT="," THEN 11227000
BEGIN 11228000
S?TOG~ 98; 11229000
IF B~ ELEMENT!"CAPACITY" THEN 11230000
ERROR "MISSING",QUOTE("CAPACITY"); 11231000
IF B~ ELEMENT!"~" THEN 11232000
ERROR "MISSING", QUOTE("~"); 11233000
S?TOG~ 0; 11234000
B~ EXPRESSION; 11235000
C~ <>; 11236000
END 11237000
ELSE BEGIN 11238000
C~ B; 11239000
B~ "IN?FIN"; 11240000
END; 11241000
OUTPUT "RESET(",LINE,",E?RR,",A,",",B,")",C; 11242000
END; 11243000
MACRO QUEUE; 11244000
BEGIN 11245000
MSTRING A,B[200],C[6],D,E[63]; 11246000
INTEGER STRING EVNO[8],S[5]; 11247000
IF E?LVL=BEGINLEVEL THEN GO Q; 11248000
IF BLOCKLEVEL>E?LVL THEN 11249000
ERROR "QUEUE STATEMENTS MUST BE IN THE OUTER BLOCK OF AN EVENT" 11250000
ELSE 11251000
Q: IF S?WTCH~ S?WTCH+1=1 THEN S?WTCH~ 3; 11252000
C ~ "S?" & S?WTCH; S?WTCHLIST.APPENDC ~ C & ","; 11253000
S?TOG~ 99; OUTPUT "BEGIN"; 11254000
A~ EXPRESSION; 11255000
D~ ELEMENT; B~ EXPRESSION; 11256000
IF "AT"=D THEN BEGIN D~ B; B~ EXPRESSION; END; 11257000
IF "OF"=B THEN B~EXPRESSION ELSE 11258000
IF "IN?IN"=B THEN B~ EXPRESSION; 11259000
IF D="TOP" THEN E~",0," ELSE E~ ",1,"; S?TOG~2; 11260000
EVNO~ S?WTCH|256+ENTIER(N?MBER); 11261000
S ~ ENTIER(S?IZE) + 4; 11262000
11263000
OUTPUT "IF NOT QUEUE(",LINE,",E?RR,",A,",",B,",", 11264000
EV?NT,",",S?IZE,",",EVNO,",",SU?CNT,") THEN", 11265000
"BEGIN GO L?ABEL;",C&":", 11266000
"RE?CORD(",LINE,",E?RR,",B,",",S,");END;PUT(",LINE,",E?RR,",A; 11267000
SUS?CASE.APPENDC ~ "T?T~NOTF?LL("&LINE&",E?RR,"&B&");"; 11268000
SU?CNT~ SU?CNT+1; C~<>; 11269000
IF D="IN?IN" THEN 11270000
BEGIN 11271000
IF D~ELEMENT="LOFO" THEN GO M; 11272000
IF D="HIFO" THEN BEGIN C~"-";GO M; END; 11273000
IF "BY"=D THEN GO L; 11274000
IF D="RANKED" THEN 11275000
BEGIN IF D~ELEMENT="LOFO" THEN ELSE IF D="HIFO" THEN C~"-" ELSE 11276000
IF "BY"=D THEN GO L; M:D~ELEMENT; IF"BY"=D THEN ELSE 11277000
INPUT D; D~ "BY"; 11278000
L: S?TOG~1; END; 11279000
IF "BY"=D THEN 11280000
OUTPUT ",2,",B,",",C,EXPRESSION,")END" 11281000
ELSE IF D="BEFORE" THEN 11282000
OUTPUT ",3,",B,",",EXPRESSION,")END" 11283000
ELSE IF D="AFTER" THEN 11284000
OUTPUT ",4,", B,",",EXPRESSION,")END" 11285000
ELSE OUTPUT ",-1,",B,"0)END",D; 11286000
END 11287000
ELSE BEGIN 11288000
OUTPUT E,B,",0)END"; 11289000
END; 11290000
POST "THIS IS REACTIVATION POINT",EV?NT&"["&S?WTCH&"]...."; 11291000
S?TOG~ 0; 11292000
END; 11293000
MACRO CAPACITY; BEGIN 11294000
MSTRING C[1],D[200]; 11295000
IF S?TOG=98 THEN OUTPUT "CAPACITY" ELSE 11296000
BEGIN 11297000
D~ PRIMARY; 11298000
IF C~CHARACTER="~" THEN 11299000
OUTPUT "CAPACITY(",LINE,",E?RR,",D,",",EXPRESSION,")" 11300000
ELSE OUTPUT "ST?T(",LINE,",E?RR,",D,",7)",C; 11301000
END; 11302000
END; 11303000
DEFINE TRACE = TRACE?TOG~TRUE#, UNTRACE = TRACE?TOG~FALSE#; 11304000
MACRO PAGEHEAD; 11305000
BEGIN 11306000
MSTRING A,B[400]; 11307000
INTEGER MSTRING L,N,I[3]; 11308000
OUTPUT "BEGIN"; 11309000
NUL:A ~ ELEMENT; I ~ 0; 11310000
IF A.ONE = """ THEN BEGIN 11311000
B.APPENDC ~ A.[1:LENGTH(A)-2]; 11312000
A ~ CHARACTER; 11313000
END; 11314000
IF ","=A THEN GO TO NUL; 11315000
N ~ LENGTH(B); 11316000
IF N=0 THEN OUTPUT "PAGEHEADARRAY["& L & ",0]~ 0;" ELSE 11317000
BEGIN 11318000
OUTPUT "FILL PAGEHEADARRAY["&L&",*]WITH",N; 11319000
LL: OUTPUT ","&QUOTE(B.[I:8]); 11320000
I ~ I+8; 11321000
IF I < N THEN GO TO LL; 11322000
OUTPUT ";"; 11323000
END; 11324000
L ~ L+1; 11325000
IF "/"=A THEN BEGIN B ~ <>; GO TO NUL; END; 11326000
OUTPUT "PAGEHEADLINES~" & L & ";END" , A; 11327000
END PAGEHEAD; 11328000
MACRO MARGINS; 11329000
BEGIN MSTRING A[400]; 11330000
OUTPUT "MARGINS(" & LINE & ",E?RR,"; 11331000
L: IF A~EXPRESSION THEN BEGIN OUTPUT A & ","; A~CHARACTER; END ELSE 11332000
BEGIN IF A~CHARACTER = "~" THEN GO TO L; 11333000
IF "*"=A THEN A ~ CHARACTER; 11334000
OUTPUT "L?MAR+1,"; 11335000
END; 11336000
IF "," = A THEN GO R; 11337000
IF ":" = A THEN 11338000
R: IF A~EXPRESSION THEN 11339000
BEGIN OUTPUT A & ")"; 11340000
GO XT; 11341000
END ELSE A ~ CHARACTER; 11342000
IF "*" = A THEN OUTPUT "R?MAR+1)" ELSE OUTPUT "R?MAR+1)"&A; 11343000
XT: END MACRO MARGINS; 11344000
MACRO DISPLAY; 11345000
BEGIN 11346000
MSTRING FN,HN[30],C[69],B,D[400]; 11347000
MFIELD F6 = [0:6], N6 = [6:6]; 11348000
DEFINE N=DIS?NAM#,A=DIS?FM#; 11349000
F?ORVAR ~ "S?T"; COMMENT TO HANDLE SETS PROPERLY; 11350000
IF C ~ CHARACTER = "[" THEN 11351000
BEGIN 11352000
A ~ IDENTIFIER; 11353000
11354000
11355000
11356000
11357000
11358000
11359000
11360000
RESCAN A & "?F"; 11361000
IF ELEMENT ! "F?" THEN ERROR "INVALID FORM NAME",QUOTE(A) 11362000
ELSE HN ~ UNTIL "F?"; 11363000
11364000
11365000
11366000
IF C ~ CHARACTER ! "]" THEN 11367000
BEGIN ERROR "MISSING",QUOTE("]"); 11368000
INPUT C; 11369000
END; 11370000
END ELSE 11371000
BEGIN A ~"DISPLAY"; 11372000
HN ~ "FM?GEND,-1,0"; 11373000
11374000
END; 11375000
OUTPUT "BEGIN CHECK?PAGE(-2);"; 11376000
L1: N ~ <>; B ~ EXPRESSION; 11377000
IF B.ONE = """ THEN 11378000
BEGIN N ~ B.[1:LENGTH(B)-2]; 11379000
IF C ~ CHARACTER ! ":" THEN RESCAN N,C; 11380000
11381000
B ~ EXPRESSION 11382000
11383000
END ELSE IF <> = N THEN N ~ B; 11384000
IF B = "LINE" THEN BEGIN OUTPUT "LINE?D(1);" ; GO TO NXT;END; 11385000
IF B = "HEAD" THEN BEGIN OUTPUT "HEAD?D("&HN&");"; GO TO NXT;END; 11386000
IF "S?" = B THEN 11387000
BEGIN COMMENT "SET" REQUESTED; 11388000
IF "S?" = N THEN N ~ "MEMBERS OF", VARIABLE 11389000
ELSE DELETE VARIABLE; 11390000
% %W0511391000
IF LENGTH(FM?FILL)>1500 THEN 11392000
BEGIN DF?FN ~ DF?FN+1; DF?SUB ~ 0; 11393000
PATCH FMR?SRV,FM?FILL&";"; 11394000
FM?FILL ~ "SWITCH FORMAT FM?"&DF?FN&"~"; 11395000
END ELSE 11396000
BEGIN 11397000
DF?SUB ~ DF?SUB+1; 11398000
FM?FILL.APPENDC ~ ","; 11399000
END; 11400000
FM?FILL.APPENDC ~ "(X*"&QUOTE(N,"- -")&")"; 11401000
OUTPUT "SET?D(FM?"&DF?FN&"["&DF?SUB&"],"&A&"?D,"&EXPRESSION; 11402000
DELETE ELEMENT; COMMENT "STEP"; 11403000
OUTPUT "," & EXPRESSION & ");"; 11404000
DELETE THRU "S?"; GO TO NXT; 11405000
END SET CASE; 11406000
IF "D?"=B THEN 11407000
BEGIN COMMENT SOMEONE ELSE DID THE WORK; 11408000
OUTPUT UNTIL "D?"; GO TO NXT; 11409000
END; 11410000
IF C~ELEMENT ! "LINES" THEN IF C ! "LINE" THEN 11411000
BEGIN 11412000
OUTPUT A & "?D(" & QUOTE(N.F6) & ","; 11413000
IF LENGTH(N)>6 THEN OUTPUT QUOTE(N.N6) ELSE OUTPUT 0; 11414000
OUTPUT "," & B & ");"; 11415000
IF ","=C THEN GO TO L1; GO TO XT; 11416000
END; 11417000
OUTPUT "LINE?D(" & B & ");"; 11418000
NXT:IF C~CHARACTER = "," THEN GO TO L1; 11419000
XT: OUTPUT "LINE?D(1);END",C; 11420000
DIS?NAM ~ F?ORVAR ~ <>; 11421000
END DISPLAY MACRO; 11422000
MACRO VECTOR; 11423000
BEGIN MSTRING B,D[400],C[69]; DEFINE N=DIS?NAM#; 11424000
IF F?ORVAR!"S?T" THEN OUTPUT "VECTOR" ELSE 11425000
BEGIN 11426000
B ~ IDENTIFIER & "["; 11427000
IF C ~ CHARACTER ! "[" THEN 11428000
BEGIN 11429000
ERROR "MISSING",QUOTE("["); 11430000
RESCAN C; 11431000
END; 11432000
L2: D ~ EXPRESSION; 11433000
IF C ~ CHARACTER ="," THEN 11434000
BEGIN B.APPENDC ~ D & ","; 11435000
GO TO L2; 11436000
END; 11437000
IF <>=N THEN N ~ "VECTOR",B&"*]"; 11438000
IF ":"!C THEN 11439000
BEGIN ERROR "MISSING",QUOTE(":"),"OR",QUOTE(","); 11440000
DELETE THRU "]"; 11441000
GO XT; 11442000
END; 11443000
B ~ B & "*],0"; 11444000
IF LENGTH(FM?FILL)>1500 THEN 11445000
BEGIN DF?FN ~ DF?FN+1; DF?SUB ~ 0; 11446000
PATCH FMR?SRV,FM?FILL&";"; 11447000
FM?FILL ~ "SWITCH FORMAT FM?"&DF?FN&"~"; 11448000
END ELSE 11449000
BEGIN DF?SUB ~ DF?SUB+1; 11450000
FM?FILL.APPENDC ~ ","; 11451000
END; 11452000
FM?FILL.APPENDC ~ "(X*"&QUOTE(N,"- -") & ")"; 11453000
OUTPUT "D? VECTOR?D(FM?"&DF?FN&"["&DF?SUB&"],"&DIS?FM&"?D," 11454000
&B&","&D&","&EXPRESSION&");D?"; 11455000
IF C~CHARACTER ! "]" THEN 11456000
BEGIN ERROR "MISSING",QUOTE("]"); 11457000
OUTPUT C; 11458000
END; 11459000
XT: END; 11460000
END MACRO VECTOR; 11461000
MACRO RESERVE; 11462000
BEGIN MSTRING A[63]; 11463000
IF F?ORVAR="S?T" THEN OUTPUT "D? IF C?OL~"&EXPRESSION& 11464000
">0 THEN CHECK?PAGE(-C?OL);D?" 11465000
ELSE OUTPUT"BEGIN IF C?OL~"&EXPRESSION&">0 THEN", 11466000
"CHECK?PAGE(C?OL);END"; 11467000
IF A~ELEMENT ! "LINES" THEN IF A ! "LINE" THEN OUTPUT A; 11468000
11469000
END MACRO RESERVE; 11470000
MACRO PAGE; 11471000
BEGIN 11472000
IF F?ORVAR ! "S?T" THEN OUTPUT "PAGE" ELSE 11473000
OUTPUT "D? CHECK?PAGE(-LINESPERPAGE);D?"; 11474000
END MACRO PAGE; 11475000
MACRO FORM; 11476000
BEGIN WARNING "FORM DECLARATION NOT IMPLEMENTED."; 11477000
RESCAN "COMMENT"; 11478000
END TEMPORARY FORM MACRO; 11479000
MACRO RANDOM; 11480000
BEGIN MSTRING A[1],B[400]; 11481000
IF A ~ CHARACTER = "[" THEN 11482000
BEGIN B ~ EXPRESSION; 11483000
IF A~CHARACTER = "]" THEN A ~ CHARACTER 11484000
ELSE ERROR "MISSING", QUOTE("]"); 11485000
END ELSE B ~ "0"; 11486000
IF "~"!A THEN OUTPUT "REAL(BOOLEAN(RANDOM["&B&"]~(0&RANDOM[" & 11487000
B&"][12:21:27]+RANDOM["&B&"]+657).[12:36])" & 11488000
"OR RAND?MASK)"&A 11489000
ELSE OUTPUT "RANDOM["&B&"]~(("&EXPRESSION&")+("&B& 11490000
")*2+1.77).[12:36]"; 11491000
END MACRO RANDOM; 11492000
MACRO TRACE; 11493000
BEGIN 11494000
MSTRING A,T[63]; 11495000
S?TOG ~ 90; T ~ ",0"; 11496000
C1: IF A~CHARACTER THEN 11497000
BEGIN IF ","=A THEN GO TO C1; 11498000
OUTPUT "TRACE(-1"; GO TO X; 11499000
END; 11500000
IF A~ELEMENT = "OFF" THEN 11501000
BEGIN OUTPUT "TRACE(-2"; 11502000
GO TO NC; 11503000
END; 11504000
OUTPUT "TRACE(-1"; 11505000
IF "ON"=A THEN GO NC; GO LL; 11506000
ZT: T ~ <>; 11507000
NC: S?TOG ~ 90; 11508000
IF A~CHARACTER THEN 11509000
BEGIN IF ","=A THEN GO TO NC; 11510000
GO TO X; 11511000
END; 11512000
IF A~ELEMENT = "OFF" THEN 11513000
BEGIN OUTPUT ",-2"; 11514000
GO TO NC; 11515000
END; 11516000
IF "ON"=A THEN 11517000
BEGIN OUTPUT ",-1"; 11518000
GO NC; 11519000
END; 11520000
LL: IF "T?"=A THEN 11521000
BEGIN OUTPUT ",-" & ELEMENT; 11522000
GO TO ZT; 11523000
END; 11524000
IF A="ALL" THEN 11525000
BEGIN OUTPUT ",0"; 11526000
GO TO ZT; 11527000
END; 11528000
RESCAN A & "?EV"; 11529000
IF ELEMENT = "EV?NO" THEN 11530000
BEGIN DELETE ELEMENT; 11531000
OUTPUT "," & ELEMENT; 11532000
GO TO ZT; 11533000
END; 11534000
X: OUTPUT T & ")" & A; 11535000
S?TOG ~ 0; 11536000
END TRACE MACRO; 11537000
LIST MACRO PAGENUMBER; 11538000
BEGIN MSTRING NM[63],B[1]; 11539000
IF B~CHARACTER ! "~" THEN OUTPUT "(" & NM & ")" & B ELSE 11540000
BEGIN 11541000
OUTPUT NM.[0:3]&"?"&NM.[4:9] & "(" & EXPRESSION & ")"; 11542000
END; 11543000
END; 11544000
MACRO LINESPERPAGE EQV PAGENUMBER; 11545000
$* DUMP ZERO 11547000
$* DUMP ZERO 90000000
99999999
99999999