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