$* 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]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]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 T0 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, 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 TR?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?NT0 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])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)#; 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 ",""E(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*""E(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*""E(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