From 9f8e721b03d5e8afe06a6e378307ee47d137962d Mon Sep 17 00:00:00 2001 From: Paul Kimpel Date: Wed, 29 Aug 2012 16:55:20 +0000 Subject: [PATCH] Commit ESPOL, ESPOLXEM debugging patches and SYMBOL/COOL proofreading corrections as of 2012-08-29. ESPOLXEM now successfully compiles COOL as either the COLD- or COOL-start loader program. --- SYMBOL/COOL.esp_m | 1927 ++++++++++++++++++++------------------ SYMBOL/ESPOL.alg_m | 4 +- tools/xem/ESPOLXEM.alg_m | 20 +- 3 files changed, 1024 insertions(+), 927 deletions(-) diff --git a/SYMBOL/COOL.esp_m b/SYMBOL/COOL.esp_m index 26a5c84..7341d26 100644 --- a/SYMBOL/COOL.esp_m +++ b/SYMBOL/COOL.esp_m @@ -1,916 +1,1013 @@ - STARTER DECKS 00010000 - MAY 1969 BY P.E.G. 00020000 - $ SET OMIT = COOL 00030000 - B-5500 COLD START PROGRAM 00040000 - $ POP OMIT 00040050 - $ SET OMIT = NOT(COOL) 00050000 - B-5500 COOL START PROGRAM 00060000 - $ POP OMIT 00060050 - COMMENT: * TITLE: B5500/B5700 MARK XIV SYSTEM RELEASE * 00060100 - * FILE ID: SYMBOL/COOL TAPE ID: SYMBOL2/FILE000 * 00060101 - * THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00060102 - * AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00060103 - * EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00060104 - * WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00060105 - * BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00060106 - * * 00060107 - * COPYRIGHT (C) 1971, 1972 BURROUGHS CORPORATION * 00060108 - * AA320206 AA386657 *; 00060109 - BEGIN DEFINE P=POLISH#,M=MEMORY#; 00070000 - DEFINE DEFAULTDIRECT=4500#; 00071000 - DEFINE KERNELADR=1#; 00072000 - DEFINE MEMDISKADR=20#; 00073000 - DEFINE ESPBOTTOM=50#; 00074000 - DEFINE SCN(SCN1)=SCAN(CARD,SCN1)#, 00075000 - NAAME=1#, NUMBER=2#, DELIM=0#, PERCENT=4#; 00076000 - REAL CORE,READBACK,LOADER,J,I,DISKTOP,CARD,TYPE,MN,YR; 00080000 - REAL ESUTEMP; 00081000 - $ SET OMIT = COOL 00082000 - REAL LOWADR; 00083000 - $ POP OMIT 00084000 - ARRAY INFO[*],SHAR[*],BUFFER[*],TEMMP[*],FILEX[*]; 00090000 - ARRAY FILEH[*],LABELS[*],ZERO[*],RT[*]; 00100000 - INTEGER DY,LOADED,QX,XY,N,T,K,SYSNO,NUMWDS; 00120000 - REAL TREAL=T; 00120010 - $ SET OMIT = NOT(COOL) 00120099 - BOOLEAN RD,SKEDTOG,HARD,HARC,RC,FNDERR; 00120100 - $ POP OMIT 00120101 - LABEL READCARD,FENCE ,ESU,DATE,FILE,USE,DKA,DKB,STOP,EXIT,TIMER00130000 - ,ERROR,START,TART,DIRECT,DIRECTORYTOP 00140000 - ,WRCLEAN,XLOADED,HANDLE,SYSTEMS; 00150000 - $ SET OMIT = NOT(COOL) 00160000 - DEFINE REMOVE(REMOVE1)#BEGIN REMOVER(REMOVE1); GO REMOVED END#; 00169000 - LABEL QUIT,REMOVED,PUNT,ARND,LP,ON; 00170000 - REAL HDRO,RTI; 00170010 - DEFINE RECSIZE=HDRO.[1:14]#,BLOCKSIZE=HDRO.[15:15]#, 00170020 - RECSPERBLOCK=HDRO.[30:12]#,SEGSPERBLOCK=HDRO.[42:6]#; 00170030 - BOOLEAN FIRSTCARD; 00170049 - $ POP OMIT 00170050 - LABEL REMCD,MEMDUMP,BOMBOUT,REM,RECONSTR,GLOB; 00170100 - SWITCH TYPESWITCH:=ERROR,FILE,FENCE,STOP,ESU,USE,DATE,USE,USE 00180000 - ,DIRECT,DIRECTORYTOP,SYSTEMS,REMCD,MEMDUMP 00190000 - ,REM,RECONSTR,XLOADED; % SAVE FOR LAST 00191000 - ARRAY MONTHS[12]_ 0,31,59,90,120,151,181,212,243,273,304,334; 00200000 - BOOLEAN SPDIO,P1IO,P2IO,PRINTWAIT; 00201000 -DEFINE KERNEL=16#; % SHOULD BE NUMBER OF FIRST WORDS - 1 00201100 -ARRAY FIRST[17]:=0, 00210000 - "FILE0000", 00220000 - "FENCE000", 00230000 - "STOP0000", 00240000 - "ESU00000", 00250000 - "USE00000", 00260000 - "DATEO000", 00270000 - "TYPE0000", 00280000 - "OPTN0000", 00290000 - "DIRECT00", 00300000 - "DRCTRYTP", 00310000 - "SYSTEMS0", 00320000 - "REMOVECD", 00321000 - "MEMDUMP0", 00321100 - "REMOVEF0", 00321200 - "RECONSTR", 00321300 - "_0000000"; 00330000 - ARRAY OPTIONS[54] _ 0, 00340000 - "DRA00000", %47, USE DRUM A - - "CHECK DE","CLARED F","ILE ADDR","ESSES_ ", % 65 01035050 - "NO. OF E","SUS TO B","E CHANGE","D FROM "," ",%6901035060 - "________"; 01039000 - ARRAY LOADBUTTON[15]_ 01040000 - OCT0441000401570421, % 1 20 01050000 - OCT0157000000104411, % 2 21 01060000 - OCT0211001441310055, % 3 22 01070000 - OCT4155124500004425, % 4 23 01080000 - OCT0060013101600064, % 5 24 01090000 - OCT4441010402530305, % 6 25 01100000 - OCT0100023441310055, % 7 26 01110000 - OCT0062011441310055, % 8 27 01120000 - OCT0066013441310055, % 9 30 00113000 - OCT0072015441310055, % 10 31 01140000 - OCT0076017441310055, % 11 32 01150000 - OCT5140000047700200, % 12 33 01160000 - OCT0441100401004441, % 13 34 01170000 - OCT0253010420527405, % 14 35 01180000 - OCT7405005101002411; % 15 36 01190000 -BOOLEAN STREAM PROCEDURE OK(B); VALUE B; 01195000 -BEGIN SI:=B; L: IF SC=" " THEN BEGIN SI:=SI+1; GO L END; 01195100 - IF SC="O" THEN SI:=SI+1 ELSE GO AWAY; 01195200 - IF SC="K" THEN TALLY:=1; 01195300 - AWAY:OK:=TALLY; 01195400 -END OK; 01195500 -REAL STREAM PROCEDURE DECI(V); VALUE V; 01195700 -BEGIN SI:=LOC V; DI:=LOC DECI; DS:=8 DEC; 01195800 -END DECI; 01195900 - REAL STREAM PROCEDURE SEARCH(CARD,FIRST,N); VALUE CARD,N; 01200000 - BEGIN LABEL L,EXIT; 01210000 - SI:=CARD; SI:=SI-N; DI:=LOC CARD; DS:=8LIT"0"; 01220000 - DI:=LOC CARD; N(DS:=CHR); 01225000 - L: SI _ FIRST; SI _ SI+8; TALLY _ TALLY+1; 01230000 - IF SC = "_" THEN BEGIN TALLY _ C; GO TO EXIT END; 01240000 - DI _ FIRST; DI _ DI+8; FIRST _ DI; 01250000 - SI:=LOC CARD; 01260000 - IF 8 SC NEQ DC THEN GO L; 01270000 - EXIT:SEARCH _ TALLY; 01280000 - END; 01290000 - REAL STREAM PROCEDURE SCAN(LSTADR,TOKEN); 01290100 - BEGIN LABEL L,XXIT; LOCAL SV,SVR; 01290200 - DI:=TOKEN; DS:=8LIT"00000000"; DI:=DI-8; 01290250 - SI:=LSTADR; SI:=SI+5; SI:=SC; 01290300 - TALLY:=3; SCAN:=TALLY; 01290400 - L: IF SC=" " THEN BEGIN SI:=SI+1; GO L; END; 01290500 - IF SC=ALPHA THEN 01290600 - IF SC LSS "0" THEN BEGIN % ALPHA 01290700 - TALLY:=7; DI:=DI+1; 01290800 - 7(DS:=CHR; TALLY:=TALLY+63; IF SC=ALPHA THEN ELSE JUMP OUT); 01290900 - SV:=TALLY; SV(DS:=LIT" "); 01291000 - TALLY:=1; SCAN:=TALLY; 01291100 - END 01291200 - ELSE BEGIN % NUMBER 01291300 - TALLY:=0; 01291400 - 7(SI:=SI+1; TALLY:=TALLY+1; 01291500 - IF SC=ALPHA THEN 01291600 - IF SC GEQ "0" THEN ELSE JUMP OUT TO XXIT 01291700 - ELSE JUMP OUT); 01291800 - SV:=TALLY; SI:=SI-SV; 01291900 - DS:=SV OCT; 01292000 - TALLY:=2; SCAN:=TALLY; 01292100 - END 01292200 - ELSE 01292300 - IF SC=""" THEN BEGIN 01292400 - SI:=SI+1; TALLY:=7; DI:=DI+1; 01292500 - 8(IF SC NEQ """ THEN BEGIN DS:=CHR; TALLY:=TALLY+63; END 01292600 - ELSE BEGIN SI:=SI+1; JUMP OUT; END); 01292700 - IF TOGGLE THEN GO XXIT; 01292800 - SV:=TALLY; SV(DS:=LIT" "); SVR:=SI; 01292900 - SI:=LOC SV; SI:=SI+7; IF SC="7" THEN GO XXIT 01293000 - ELSE BEGIN TALLY:=1; SCAN:=TALLY; 01293100 - SI:=SVR; END; 01293200 - END ELSE BEGIN 01293300 - IF SC="%" THEN BEGIN TALLY:=4; SCAN:=TALLY; 01293400 - GO XXIT; END; 01293500 - DI:=DI+7; 01293600 - DS:=CHR; 01293700 - TALLY:=0; SCAN:=TALLY; 01293800 - END; 01293900 -XXIT: SV:=SI; SI:=LOC SV; DI:=LSTADR; DS:=WDS; 01294000 - END; 01294100 - REAL STREAM PROCEDURE ISOLATE(CARD); 01300000 - BEGIN LABEL L,A,X,E; 01310000 - LOCAL T; 01320000 - SI _ CARD; SI _ SI+5; SI _ SC; 01330000 - L: IF SC = " " THEN BEGIN SI _ SI+1; GO TO L END; 01340000 - IF SC = """ THEN 01350000 - BEGIN SI _ SI+1; 01360000 - 17(SI _SI+1; TALLY _ TALLY+1; 01370000 - IF SC = """ THEN 01380000 - BEGIN T _ SI; DI _ T; DS _ LIT " "; 01390000 - JUMP OUT TO X 01400000 - ENDL); 01410000 - E: TALLY _ 0; GO TO X; 01420000 - END; 01430000 - IF SC = ALPHA THEN BEGIN 01440000 - 17(SI_SI+1; TALLY _ TALLY+1; 01450000 - IF SC = ALPHA THEN GO TO A; 01460000 - JUMP OUT TO X; A:;); 01470000 - GO TO E; 01480000 - END ELSE BEGIN SI _ SI+1; TALLY _ 1 END; 01490000 - X: ISOLATE _ TALLY; 01500000 - T _ SI; 01510000 - DI _ CARD; SI _ LOC T; DS _ WDS; 01520000 - END; 01530000 - SAVE PROCEDURE SPECIAL(C); VALUE C; REAL C; 01540000 - BEGIN IF ISOLATE(CARD) ! 1 THEN GO TO ERROR; 01550000 - STREAM(C:CARD); 01560000 - BEGIN SI _ CARD; SI _ SI-1; 01570000 - DI _ LOC C; DI _ DI+7; 01580000 - IF SC ! DC THEN TALLY _ 1; 01590000 - C _ TALLY; 01600000 - END; 01610000 - IF P THEN GO TO ERROR; 01620000 - END; 01630000 - SAVE PROCEDURE IOERR(IOD); VALUE IOD; REAL IOD; FORWARD; 01640000 - SAVE REAL PROCEDURE EOM; FORWARD; 01650000 -% 01651000 -SAVE PROCEDURE WAITFORPRINTERFINISH(U); VALUE U; REAL U; 01652000 - BEGIN PRINTWAIT:=TRUE; 01653000 - DO UNTIL EOM=U; 01654000 - PRINTWAIT:=FALSE; 01655000 - END; 01656000 - SAVE PROCEDURE IO(ADDRESS,IOD); VALUE ADDRESS,IOD; REAL ADDRESS,IOD; 01660000 - BEGIN REAL T; 01670000 - LABEL L; 01680000 - IOD _ ADDRESS INX IOD; 01690000 - L: P([IOD],IIO); 01700000 - T _ EOM; 01710000 - IF T.[30:3] ! 0 THEN 01720000 - IF QX THEN GO TO L ELSE QX := 2; 01730000 - IF ADDRESS } 0 THEN 01735000 - IF T.[26:4] ! 0 THEN 01740000 - IF T.[29:1] AND T.[3:5]=6 AND M[ADDRESS]=@40 01751000 - THEN BEGIN 01752000 - M[ADDRESS]:=0; 01753000 - M[ADDRESS+1]:=0; 01754000 - GO L; 01755000 - END 01756000 - ELSE IF (T.[3:5]=22 OR T.[3:5]=26) 01757000 - THEN IF T.[27:1] 01758000 - THEN BEGIN 01759000 - WAITFORPRINTERFINISH(T.[3:5]); 01760000 - IOD:=0&T[3:3:5]&1[18:47:1] 01761000 - &1[29:44:4]; 01762000 - GO L; 01763000 - END 01764000 - ELSE WAITFORPRINTERFINISH(T.[3:5]) 01765000 - ELSE IF T.[29:1] AND T.[3:5]=10 AND 01767000 - M[ADDRESS]=0 01768000 - THEN 01769000 - ELSE BEGIN IOERR(IOD); GO L; END; 01770000 - END; 01850000 - SAVE PROCEDURE SPOINOUT(WHICH); VALUE WHICH; INTEGER WHICH; 01851000 - BEGIN 01852000 - IF SPOIO THEN 01853000 - IO(MESSAGE INX ABS(WHICH),@740000000000000&WHICH[24:1:1]);01854000 - END SPOINOUT; 01855000 - DEFINE KEYIN(KEYIN1)=SPOINOUT(NABS(KEYIN1))#; 01856000 - DEFINE SPOUT=SPOINOUT#; 01857000 - SAVE PROCEDURE IOERR(IOD); VALUE IOD; REAL IOD; 01860000 - BEGIN REAL T; 01870000 - IOD _ IOD.[3:5]; 01890000 - T _ IF IOD=30 THEN "SPO" ELSE 01900000 - IF IOD=10 THEN "CRA" ELSE 01910000 - IF IOD= 6 THEN "DKA" ELSE 01920000 - IF IOD=22 THEN "LPA" ELSE 01921000 - IF IOD=26 THEN "LPB" ELSE 01922000 - IF IOD= 4 THEN "DRA" ELSE "XXX"; 01930000 - STREAM(T,A_[MESSAGE[4]]); 01940000 - BEGIN SI _ LOC T; SI _ SI+5; DS _ 3CHR; END; 01950000 - SPOUT(4); 01960000 - IF IOD =10 THEN 01970000 - BEGIN DO UNTIL P(RRR).[24:1] = 0; 01980000 - DO UNTIL P(RRR).[24:1]; 01990000 - END ELSE 02000000 - IF IOD LSS 22 THEN GO BOMBOUT; 02000100 - END IOERR; 02020000 - SAVE PROCEDURE DISKIO(A,C); VALUE A; 02030000 - ARRAY C[*]; 02040000 - REAL A; 02050000 - BEGIN BOOLEAN R; 02060000 - C :=C INX NOT 0; 02070000 - IF R:=A.[1:1] THEN A := ABS (A); 02080000 - STREAM(A,X_FLAG(C)); 02090000 - BEGIN SI _ LOC A; DS _ 8 DEC END; 02100000 - IF R THEN IO(C,@140360140100000&NUMWDS[8:38:10] 02110000 - &((NUMWDS+29)DIV 30)[27:42:6]) ELSE 02120000 - BEGIN 02130000 - IO(C,@140360100100000); 02140000 - M[READBACK] _ M[C]; 02150000 - IO(READBACK,@140360140100000); 02160000 - STREAM(READBACK:X_FLAG(C)); 02170000 - BEGIN SI _ READBACK; SI _ SI+8L DI _ DI+8; 02180000 - 5(IF 48 SC ! DC THEN TALLY _ 1); 02190000 - READBACK _ TALLY; 02200000 - END; 02210000 - IF P THEN IOERR(@140000000000000); 02220000 - END; 02230000 - END; 02240000 - SAVE REAL PROCEDURE SCANWORD(TABLE); ARRAY TABLE[*]; 02250000 - BEGIN REAL T; 02260000 - T:=IF(M[CARD] EQV 0)=NOT 0 THEN KERNEL ELSE ISOLATE(CARD);02270000 - SCANWORD:=IF T=KERNEL THEN T ELSE SEARCH(CARD,TABLE,T); 02280000 - END; 02290000 - SAVE REAL PROCEDURE SCANUMBER; 02300000 - BEGIN REAL T; 02310000 - T _ ISOLATE(CARD); 02320000 - STREAM(R_0:T,CARD); 02330000 - BEGIN DI_DI-T; CARD _ DI; 02340000 - SI _ CARD; 02350000 - DI _ LOC R; 02360000 - DS _ T OCT; 02370000 - END; 02380000 - SCANUMBER _ P; 02390000 - END; 02400000 -% 02410000 - $ SET OMIT = NOT(COOL) 02410500 -SAVE BOOLEAN PROCEDURE LOOKFOR(L1,L2); VALUE L1,L2; REAL L1,L2; 02411000 - BEGIN REAL I; LABEL XXIT; 02411100 - FOR I:=0 STEP 2 UNTIL RTI DO 02411200 - IF (L1 EQV RT[I])=NOT 0 OR RT[I] LSS 0 THEN 02411300 - IF (L2 EQV RT[I+1])=NOT 0 OR RT[I+1] LSS 0 THEN 02411400 - BEGIN LOOKFOR:=TRUE; I:=RTI; GO XXIT; END; 02411500 -XXIT: 02411600 - END; 02411700 - $ POP OMIT 02411750 -% 02411800 -SAVE INTEGER PROCEDURE PACKER; 02420000 - BEGIN; 02430000 - STREAM (A:=[BUFFER[9]],B:=[PACKER]); 02440000 - BEGIN SI := A; SI := SI + 4; 02450000 - DI := B; DI := DI + 6; 02460000 - 4(SKIP 3 SB; 3(IF SB THEN DS:=SET ELSE SKIP DB;SKIP SB));02470000 - END; 02480000 - END; 02490000 -% 02500000 -SAVE PROCEDURE LOADERS; 02510000 - BEGIN LABEL TOPPER,NXTCRD,EXIT; 02520000 - INTEGER N,SIZE; 02521000 - IF (TYPE=KERNEL AND LOADED) 02530000 - OR (TYPE!KERNEL AND (LOADED.[46:1])) THEN 02531000 - BEGIN SPOUT(9); 02540000 - GO BOMBOUT; 02550000 - END; 02560000 - IF TYPE NEQ KERNEL THEN GO NXTCRD; 02561000 - TOPERR: STREAM(B:=[BUFFER[1]],A:=N:=BUFFER[9].[6:9], 02570000 - D_PACKER INX BUFFER); 02580000 - BEGIN SI _B; DS _ A WDS; END; 02590000 - SIZE:=SIZE+N; 02591000 - NXTCRD: IO(BUFFER INX 0,@240120040000000); 02600000 - IF BUFFER[0].[4:44]=0 THEN GO TO TOPPER; 02610000 - SIZE:=(SIZE+29) DIV 30; 02611000 - IF (TYPE=KERNEL AND (1+SIZE) GTR MEMDISKADR) THEN 02612000 - BEGIN 02612100 - SPOUT(36); 02612300 - LOADED:=LOADED OR 2; 02612400 - END ELSE 02612500 - IF (TYPE!KERNEL AND (MEMDISKADR+SIZE) GTR ESPBOTTOM) THEN 02612600 - BEGIN 02612700 - SPOUT(32); 02612800 - GO EXIT; 02612900 - END; 02613000 - TEMMP := BUFFER; 02620000 - BUFFER := 111 INX BUFFER; 02630000 - BUFFER[0] := IF TYPE=KERNEL THEN 1 ELSE DECI(MEMDISKADR); 02640000 - LOADED := LOADED OR 02650000 - (IF TYPE=KERNEL THEN 1 ELSE 2); 02651000 - IO(BUFFER INX 0,@140000000000000&SIZE[27:42:6]); 02660000 - BUFFER := TEMMP; 02670000 - EXIT: 02671000 - END; 02680000 - $ SET OMIT = NOT COOL 02689999 -SAVE PROCEDURE REMOVER(L); VALUE L; INTEGER L; 02690000 - BEGIN 02700000 - STREAM(A:=[LABELS[I]],X:=(L=0),L,ADR:=J-(L NEQ 0)x 02710000 - ((80-I) DIV 2),MONTHS); 02711000 - BEGIN 55(DS:=LIT" "); DS:=LIT"_"; DI:=MONTHS; 02712000 - SI:=A; X(DS:=8CHR;DS:=LIT"/"; DS:=8CHR; JUMP OUT TO RMVE);02720000 - SI:=SI+ 1;DS:=7 CHR; DS:=LIT"/";SI:=SI+1;DS:=7CHR; 02720200 - RMVE:DS:=9LIT" REMOVED("; 02730000 - CI:=CI+L; 02730100 - GO NAM; 02730120 - GO HDR; 02730140 - GO DECK; 02730160 - NAM :DS:=8LIT"BAD NAME";GO FIN; 02730200 - HDR :DS:=7LIT"BAD HDR"; GO FIN; 02730300 - DECK:DS:=4LIT"DECK"; 02730400 - FIN :DS:=9LIT") AT ADR="; 02730500 - SI:=LOC ADR; X:=DI; DS:=8DEC; DI:=X; DS:=7FILL; 02730600 - END; 02740000 - LABELS[I]:=@14; 02750000 - IF NOT(P1IO OR P2IO) THEN IF NOT SPOIO THEN ELSE 02751000 - IO(MONTHS INX 0,@740000000000000) ELSE 02755000 - IO(MONTHS INX 0,IF P1IO THEN @540070004000000 ELSE 02757000 - @640070004000000); 02760000 - END; 02770000 - $ POP OMIT 02700001 - SAVE REAL PROCEDURE EOM; 02780000 - BEGIN GO TO TIMER END; 02790000 -%***********************START HERE**************************** 02800000 - TART :@20: QX _ 1; GO TO START; 02810000 - TIMER :@22:P(INI); GO TO TIMER; % TIME INTERVAL 02820000 - :@24:GO TO TIMER; % KEYBOARD REQUEST 02830000 - :@25:P(22); GO GLOB; % LPA FINISHED 02840000 - :@26:P(26); GO GLOB; % LPB FINISHED 02850000 - :@27:P(@14,LOD,RTN); % I/O #1 FINISHED 02860000 - :@30:P(@15,LOD,RTN); % I/O #2 FINISHED 02870000 - :@31:P(@16,LOD,RTN); % I/O #3 FINISHED 02880000 - :@32:P(@17,LOD,RTN); % I/O #4 FINISHED 02890000 - :@34:GO TO TIMER; % INQUIRY REQUEST 02900000 -%**********************CODE STARTS HERE************************** 02910000 - START:*: P(64,STS); 02920000 - DISKTOP _ -1; 02930000 - NUMWDS := 30; 02940000 - CORE _ P(.EOM,LOD).[33:15]+3; 02950000 - STREAM(CORE); 02960000 - BEGIN DS _ 8 LIT "0"; SI _ CORE; 02970000 - 32(DS _ 32 WDS); 02980000 - END; 02990000 - SHAR := [M[CORE]]&31[8:38:10]; 03000000 - CORE := CORE +31; 03010000 - LOADER _ CORE; 03020000 - CORE _ CORE+30; 03030000 - INFO _ [M[CORE]]&30[8:38:10]; 03040000 - CORE _ CORE+40; 03050000 - FILEH _ [M[CORE]]&30[8:38:10]; 03060000 - CORE _ CORE+40; 03070000 - FILEX := [M[CORE]]&450[8:38:10]; 03080000 - CORE := CORE + 450; 03090000 - LABELS _ [M[CORE]]&30[8:38:10]; 03100000 - CORE _ CORE+40; 03110000 - READBACK _ CORE; 03120000 - CORE _ CORE+40; 03130000 - ZERO:=[M[CORE]]&30[8:38:10]; 03130100 - CORE:=CORE+40; 03130200 - RT:=[M[CORE]]&300[8:38:10]; 03130300 - CORE:=CORE+310; 03130400 - SPOIO:=P(RRR).[22:1]; 03131000 - P1IO:=P(RRR).[27:1]; 03131050 - P2IO:=P(RRR).[26:1]; 03131100 - $ SET OMIT = COOL 03131299 - LOWADR:=99999999; % INITIALIZE 03131300 - $ POP OMIT 03131401 - $ SET OMIT = NOT(COOL) 03140000 - DISKIO(-0,SHAR); 03150000 - FOR I := 13 STEP 5 UNTIL 28 03160000 - DO SHAR[I] := SHAR[I+1] := 0; %CLEAR ALL INT 03170000 - INFO[0] := @40; 03180000 - INFO[1] _ 0; 03185000 - IO(-(INFO INX 0),@140004000000000); 03190000 - SYSNO := INFO[1].[4:2]; %GET SYSTEM NUMBER 03200000 - FIRSTCARD:=TRUE; 03200025 - RTI:=-1; 03200030 - $ POP OMIT 03200050 - I _ 0; 03210000 - BUFFER := [M[CORE]]&10[8:38:10]; 03230000 -% 03240000 -READCARD: CARD _ CORE; %READ CARD 03250000 - IO(CARD,@240000040000000); 03260000 -HANDLE: STREAM (C:=CARD+10); DS := 2 LIT "%-"; 03270000 - TYPE:=SCANWORD(FIRST); 03280000 - $ SET OMIT = NOT(COOL) 03280099 - IF FIRSTCARD THEN 03280100 - IF TYPE NEQ 10 AND TYPE NEQ KERNEL THEN 03280200 - BEGIN 03280300 - SPOUT(24); 03280400 - GO TO ERROR; 03280500 - END; 03280600 - $ POP OMIT 03280601 - GO TYPESWITCH[TYPE]; 03280700 -GLOB:: IF PRINTWAIT THEN P(RTN) ELSE P(DEL); 03280800 - GO TIMER; 03280900 -% 03290000 -ERROR:: SPOUT(2); 03300000 - DO UNTIL P(RRR).[24:1] = 0; 03310000 - DO UNTIL P(RRR).[24:1]; 03320000 - P(64,STS); 03330000 - GO READCARD; 03340000 -% 03350000 -MEMDUMP: 03351000 -XLOADED: LOADERS; %LOAD LOADER DECK 03360000 - CARD := CORE; 03370000 - GO TO HANDLE; 03380000 -% 03390000 -REM: 03391000 - $ SET OMIT = COOL 03391100 - GO ERROR; 03391200 - $ POP OMIT 03391300 - $ SET OMIT = NOT(COOL) 03391400 - CARD:=CORE; 03391500 - IO(CARD,@240000040000000); 03391600 - STREAM(C:=CARD+10); DS:=2LIT"%-"; 03391700 -LP: IF P(SCN(HDRO)) NEQ NAAME THEN 03391900 - IF HDRO NEQ "=" THEN GO ERROR 03392000 - ELSE RT[RTI:=RTI+1]:=-1 03392100 - IF P(SCN(HDRO)) NEQ DELIM THEN 03392300 - IF RT[RTI]="STOP " THEN BEGIN RTI:=RTI-1; GO READCARD; END03392400 - ELSE GO ERROR 03392500 - ELSE 03392600 - IF HDRO NEQ "/" THEN GO ERROR; 03392700 - IF P(SCN(HDRO)) NEQ NAAME THEN 03392800 - IF HDRO NEQ "=" THEN GO ERROR 03392900 - ELSE RT[RTI:=RTI+1]:=-1 03393000 - ELSE RT[RTI:=RTI+1]:=HDRO; 03393100 - IF P(SCN(HDRO),DUP) NEQ PERCENT THEN 03393200 - IF P NEQ DELIM THEN GO ERROR 03393300 - ELSE GO LP 03393400 - ELSE BEGIN P(DEL); GO REM; END;03393500 - $ POP OMIT 03393600 -% 03393700 -SYSTEMS: SPECIAL ("="); 03400000 - SHAR[0] := SCANUMBER ; 03410000 - IF SHAR[0] GTR 4 OR SHAR[0] LSS 1 THEN 03420000 - BEGIN SHAR[0] := 1; 03430000 - GO TO ERROR; 03440000 - END; 03450000 - GO TO READCARD; 03460000 -% 03470000 -DIRECTORYTOP: 03480000 - $ SET OMT = NOT(COOL) 03480050 - IF NOT FIRSTCARD THEN 03480100 - BEGIN 03480200 - SPOUT(27); 03480300 - GO BOMBOUT; 03480400 - END; 03480500 - $ POP OMIT 03480501 - DISKTOP:=SCANUMBER; 03480600 - J _ DISKTOP+19; 03490000 - $ SET OMIT = NOT(COOL) 03500000 - DISKIO(-(DISKTOP-SYSNO),INFO); 03510000 - FIRSTCARD:=FALSE; 03510100 - $ POP OMIT 03510101 - GO TO READCARD; 03520000 -% 03530000 -DIRECT: INFO[4] _ SHAR[4]_SCANUMBER; 03540000 - GO TO READCARD; 03550000 -% 03560000 -FENCE: SPECIAL("="); 03570000 - INFO[19]_@100000-(P(DUP)-SCANUMBER) DIV 1024x1024; 03580000 - IF INFO[19]<@20000 THEN INFO[19]_@20000 ELSE 03590000 - IF INFO[19]>@70000 THEN IFNO[19]_@70000; 03600000 - GO TO READCARD; 03610000 -% 03620000 -ESU: ESUTEMP:=SCANUMBER; 03630000 - SPECIAL("%"); 03635000 - GO READCARD; 03640000 -% 03650000 - DATE: MN _ SCANUMBER; 03660000 - IF MN < 1 OR MN > 12 THEN GO TO ERROR; 03670000 - SPECIAL("/"); 03680000 - DY _ SCANUMBER; 03690000 - SPECIAL("/"); 03700000 - YR _ SCANUMBER; 03710000 - DY _ MONTHS[MN-1]+DY; 03720000 - IF YR MOD 4 = 0 AND (YR MOD 100 ! 0 OR YR MOD 400 = 0) 03730000 - AND MN } 3 THEN DY _ DY+1; 03740000 - DY _ YR MOD 100 x 1000+DY; 03750000 - STREAM(D_[DY],I_[INFO[1]]); 03760000 - BEGIN SI _ D; DS _ 8 DEC END; 03770000 - GO READCARD; 03780000 - % 03810000 - USE: IF TYPE NEQ 8 THEN XY:=SCANWORD(OPTIONS) 03820000 - ELSE XY:=48-SCANUMBER; 03820100 - IF XY=0 THEN GO ERROR; 03830000 - TREAL:=1; 03880000 - FOR K:=2 STEP 1 UNTIL XY DO TREAL:=0&TREAL[1:2:46]; 03890000 - INFO[0]:=INFO[0] OR TREAL; 03900000 - SPECIAL("%"); 03905000 - GO READCARD; 03910000 - % 03920000 - FILE: 03930000 - $ SET OMIT = NOT(COOL) 03940000 - GO TO ERROR; 03950000 - $ POP OMIT 03950050 - $ SET OMIT = COOL 03960000 - IF P(SCN(LABELS[28-I])) NEQ NAAME THEN GO ERROR; 03971000 - IF P(SCN(N)) NEQ DELIM THEN GO ERROR 03972000 - ELSE IF N NEQ "/" THEN GO ERROR; 03973000 - IF P(SCN(LABELS[29-I])) NEQ NAAME THEN GO ERROR; 03974000 - IF DISKTOP LSS 0 THEN BEGIN SPOUT(6); GO ERROR; END; 03975000 - FILEH[0]:=(*P(DUP))&30[1:34:14]&30[15:33:15]& 03975100 - 1[30:36:12]&1[42:42:6]; 03975200 - IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03976000 - IF P(SCN(FILEH[9])) NEQ NUMBER THEN GO ERROR; 03977000 - IF FILEH[9] GTR 20 THEN GO ERROR; 03978000 - IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03979000 - IF P(SCN(FILEH[8])) NEQ NUMBER THEN GO ERROR; 03980000 - IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03981000 - IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03982000 - ELSE IF N GTR 999 THEN GO ERROR 03983000 - ELSE FILEH[3]:=-DY&DY[12:30:18]&N[2:38:10]; 03984000 - IF (K:=P(SCN(N))) = PERCENT THEN 03985000 - ELSE 03986000 - BEGIN IF K NEQ DELIM THEN GO ERROR; 03987000 - IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03988000 - ELSE FILEH[0]:=(*P(DUP))& 03989000 - N[1:34:14]; 03989100 - K:=N; 03989200 - IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03990000 - IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03991000 - ELSE FILEH[0]:=(*P(DUP))& 03992000 - N[15:33:15]; 03992100 - FILEH[0]:=(*P(DUP))&((N+29) DIV 30)[42:42:6] 03992200 - &(N DIV K)[30:36:12]; 03992300 - IF P(SCN(N)) NEQ PERCENT THEN GO ERROR; 03993000 - END; 03994000 - N:=FILEH[9]; 03996000 - FOR K _ 1 STEP 1 UNTIL N DO 04180000 - BEGIN CARD _ CORE; 04190000 - IO(CARD,@240000040000000); 04200000 - IF SCANWBRD(FIRST) ! 0 THEN GO TO ERROR; 04210000 - CARD _ CORE; 04220000 - FILEH[9+K] _ SCANUMBER; 04230000 - SPECIAL("%"); 04240000 - IF FILEH[9+K] LSS LOWADR THEN 04241000 - IF FILEH[9+K] NEQ DISKTOP+4 THEN LOWADR:=FILEH[9+K]; 04245000 - END; 04250000 - FOR K _ K STEP 1 UNTIL 20 DO 04260000 - FILEH[9+K] _ 0; 04270000 - FILEH[4]:=@44; 04280200 - FILEH[7] _ FILEH[8]xN-1; 04290000 - I _ I+2; 04300000 - DISKIO(J-(I DIV 2),FILEH); 04310000 - IF I = 30 THEN 04320000 - BEGIN DISKIO(J,LABELS); 04330000 - J _ J+16; 04340000 - I _ 0 04350000 - END; 04360000 - GO TO READCARD; 04370000 - $ POP OMIT 04370050 -RECONSTR: 04371000 - $ SET OMIT = NOT COOL 04371100 - RC:=HARD:=TRUE; GO READCARD; 04371200 - $ SET OMIT = COOL 04371300 - GO ERROR; 04371400 - $ RESET OMIT 04371500 -REMCD: 04372000 - $ SET OMIT = NOT COOL 04372009 - RD:=HARD:=TRUE; GO READCARD; 04372010 - $ SET OMIT = COOL 04372015 - GO TO ERROR; 04372020 - $ RESET OMIT 04372021 - %::::::::::::::::::::::NO MORE CARDS::::::::::::::::::::::::::::: 04380000 -STOP: SHAR[4]:=INFO[4]; 04390500 - INFO[16]:=15; 04395000 - IF SPOIO THEN 04395100 - BEGIN 04395200 - SPOUT(12); 04395300 - KEYIN(12); 04395400 - IF NOT OK([MESSAGE[12]] INX 0) THEN 04395500 -BOMBOUT:: 04395550 - BEGIN STREAM(B:=[MESSAGE[12]]); 04395600 - DS:=24 LIT "COOL/COLD START ABORTED_"; 04395700 - SPOUT(12); 04395800 - DO UNTIL FALSE; 04395900 - END; 04396000 - STREAM(A:=INFO[4],SV:=0,N:=(MESSAGE[27]]); 04396050 - BEGIN DS:=20LIT"USER DISK BEGINS AT "; SI:=LOC A; 04396100 - DS:=8DEC; SV:=DI; DI:=DI-8; DS:=7FILL; DI:=SV; 04396150 - DS:=LIT"_"; 04396200 - END; 04396250 - SPOUT(27); 04396300 - END; 04396400 - $ SET OMIT = COOL 04397000 - IF (INFO[4] LEQ DISKTOP OR (N:=LOWADR LSS INFO[4])) THEN 04397100 - BEGIN IF SPOIO THEN 04397200 - BEGIN SPOUT(62); IF N=1 THEN SPOUT(65); END; 04397300 - GO BOMBOUT; 04397400 - END; 04397500 - IF DISKTOP < 0 THEN 04400000 - BEGIN 04410000 - SPOUT(6); 04420000 - GO TO ERROR; 04430000 - END; 04440000 - $ POP OMIT 04440001 - IF ESUTEMP LEQ 0 THEN 04441000 - BEGIN 04441100 - SPOUT(17); 04441200 - GO TO ERROR; 04441300 - END; 04441400 - SHAR[1] _ DISKTOP; 04450000 - IF SHAR[0] GTR 4 OR SHAR[0] LSS 1 THEN SHAR[0] := 1; 04460000 - $ SET OMIT = NOT COOL 04470004 - %********* LOOK AT SEGMENT ZERO ********** 04470005 - IF SHAR[1] GTR 10000 OR SHAR[1] LSS 50 OR 04470010 - SHAR[4] GTR 100000 OR SHAR[4] LSS 50 04470015 - THEN BEGIN SPOUT(53); GO BOMBOUT; END; 04470020 - FOR N:=C STEP 1 UNTIL 29 DO 04470030 - IF P(SHAR[N],TOP,XCH,DEL) THEN ELSE 04470035 - BEGIN FNDERR:=TRUE; SHAR[N]:=0; END; 04470040 - FOR N:=10 STEP 5 UNTIL SHAR[0]x5+5 DO 04470045 - BEGIN 04470050 - IF ((SHAR[N] OR SHAR[N+1]) AND @3700000000000000) NEQ 0 04470055 - THEN BEGIN FNDERR:=TRUE; SHAR[N]:=SHAR[N+1]:=0; END; 04470060 - IF ((SHAR[N+3] OR SHAR[N+4]) AND @3700000000000000) NEQ 0 04470065 - THEN BEGIN FNDERR:=TRUE; SHAR[N+3]:=SHAR[N+4]:=0; END; 04470070 - END; 04470075 - IF FNDERR THEN SPOUT(53); 04470080 -%********** END OF SEGMENT ZERO EXAMINATION ********** 04470085 - $ POP OMIT 04470090 - DISKIO(0,SHAR); 04470095 - $ SET OMIT = NOT COOL 04470099 - IF ESUTEMP NEQ INFO[2] THEN 04470100 - IF SPOIO THEN 04470105 - BEGIN 04470110 - STREAM(A:=INFO[2],D:=0,B:=ESUTEMP,C:=MESSAGE INX 69); 04470120 - BEGIN DI:=DI+31; SI:=LOC A; C:=DI; DI:=LOC D; DS:=8DEC; 04470130 - DI:=LOC D; DS:=7FILL; DI:=C; 8(IF SC=" " THEN SI:=SI+1 04470140 - ELSE DS:=CHR); DS:=4LIT" TO "; C:=DI; DI:=LOC D; DS:=8DEC;04470150 - DI:=LOC D; DS:=7FILL; DI:=C; SI:=LOC D; 8(IF SC=" " THEN 04470160 - SI:=SI+1 ELSE DS:=CHR); DS:=LIT"_"; 04470170 - END; 04470180 - SPOUT(69); 04470200 - SPOUT(14); 04470210 - KEYIN(69); 04470220 - IF NOT OK(MESSAGE INX 69) THEN GO BOMBOUT; 04470230 - END; 04470235 - $ POP OMIT 04470236 - INFO[2]:=ESUTEMP; 04470240 - $ SET OMIT = COOL 04480000 - LABELS[28-I] _ @114; 04490000 - LABELS[29-I] _ 0; 04500000 - FOR I:=0 STEP 1 UNTIL(SHAR[0]-1)DO DISKIO(DISKTOP-I,INFO);04510000 - $ POP OMIT 04510050 - $ SET OMIT = NOT(COOL) 04520000 - FOR I:=-7 STEP 1 UNTIL -4 DO DISKIO(DISKTOP+I,ZERO); 04520200 - FOR I:=1 STEP 1 UNTIL 3 DO DISKIO(DISKTOP+I,ZERO); 04520300 -%********** LOOK AT DIRECTORYTOP ********** 04520400 - FNDERR:=FALSE; 04520450 - FOR I:=0 STEP 1 UNTIL 29 DO 04520500 - IF P(INFO[I],TOP,XCH,DEL) THEN ELSE 04520600 - BEGIN FNDERR:=TRUE; INFO[I]:=0; END; 04520700 - IF (INFO[2] DIV 100) GTR 10 OR (INFO[2] MOD 100) GTR 10 04520800 - THEN BEGIN SPOUT(56); GO BOMBOUT; END; 04520900 - IF INFO[8] GTR @7777 THEN 04521000 - BEGIN FNDERR:=TRUE; INFO[8]:=1; END; 04521050 - IF INFO[9] LSS 0 THEN 04521100 - BEGIN FNDERR:=TRUE; INFO[1]:=1; END; 04521150 - IF FNDERR THEN SPOUT(56); 04521175 -%********** END OF DIRECTORYTOP EXAMINATION ********** 04521200 - DISKIO(DISKTOP-SYSNO,INFO); 04521300 - $ POP OMIT 04530050 - N := ESPBOTTOM ;%START CLEAN ESPDISK 04540000 -MRCLEAN: IF N LSS (DISKTOP-SHAR[0]) THEN 04550000 - BEGIN ;STREAM(B:=N,X:=FILEH); 04560000 - BEGIN SI:=LOC B;DS:=8 DEC;END; 04570000 - P(N); 04580000 - IF (N:=DISKTOP-SHAR[0]-N))GEQ 63 THEN 04590000 - IO(FILEH INX 0,@14000007700000) 04600000 - ELSE 04610000 - IO(FILEH INX 0,@14000000000000&N[27:42:6]); 04620000 - N := P + 63; 04630000 - GO TO MRCLEAN; 04640000 - END; 04650000 - STREAM (B:=DISKTOP+1,X:=FILEH); 04660000 - BEGIN SI:=LOC B;DS:=8 DEC;END; 04670000 - IO(FILEH INX 0,@141320000000000 & 04680000 - $ SET OMIT = NOT(COOL) 04680099 - (IF RD THEN 3 ELSE 2)[30:45:3]); 04680100 - $ POP OMIT 04680101 - $ SET OMIT = COOL 04680199 - 3[30:45:3]); 04680200 - $ POP OMIT 04680201 - $ SET OMIT = NOT(COOL) 04685000 - N_(((INFO[4]-DISKTOP+3) DIV (35/2))x16) + J; 04690000 - MN:=DISKTOP +4; 04691000 - YR:=INFO[4]; 04691100 - TYPE:=INFO[2]x1000000; 04691200 - IF P1IO OR P2IO THEN BEGIN 04691300 - STREAM(M:=[MESSAGE[53]]); 04691400 - DS:=25LIT"CHECK PRINTER FOR OUTPUT_"; 04691500 - SPOUT(53); 04691600 - END; 04691700 - FOR J_J STEP 16 UNTIL N DO 04700000 - BEGIN 04710000 - NUMWDS := 480; 04720000 - DISKIO(-(J-15),FILEX); 04730000 - FOR I:=0 STEP 2 UNTIL 28 DO 04740000 - BEGIN 04750000 - STREAM(A:=0?D:=[LABELS[I]]); 04760000 - BEGIN SI:=D;IF SC!"0" THEN TALLY:=1; 04770000 - SI:=SI+8;IF SC!"0" THEN TALLY:=1; 04780000 - A:=TALLY; 04790000 - END; 04800000 - IF P THEN REMOVE(0); 04810000 - END; 04820000 - FOR I_28 STEP -2 UNTIL 0 DO 04830000 - IF LABELS[I]=@114 THEN GO QUIT ELSE 04840000 - IF LABELS[I]!@14 THEN 04850000 - IF RTI LEQ 0 THEN GO ON ELSE 04851000 - IF P(LOOKFOR(LABELS[I],LABELS[I+1])) 04852000 - THEN BEGIN 04853000 - STREAM(A:=(LABELS[I]],B:=[MESSAGE[59]]); 04854000 - BEGIN SI:=A; SI:=SI+1; DS:=7CHR; 04855000 - DI:=DI+1; SI:=SI+1; DS:=7CHR; 04856000 - END; 04856500 - LABELS[I]:=@14; 04856600 - IF NOT(P1IO OR P2IO) THEN 04856650 - IF NOT SPOIO THEN ELSE 04856670 - IO(MESSAGE INX 59,@740000000000000) 04856700 - ELSE 04856750 - IO(MESSAGE INX 59,IF P1IO THEN 04856760 - @540030004000000 ELSE 04756770 - @640030004000000); 04856780 - END 04857000 - ELSE 04858000 -ON: BEGIN 04860000 - IF (LABELS[I] EQV "DECK ")=NOT 0 THEN 04869000 - BEGIN 04869200 - IF NOT HARD THEN BEGIN 04869400 - IF SPOIO THEN 04869500 - BEGIN 04869550 - SPOUT(20); KEYIN(20); 04869600 - RD:=OK([MESSAGE[20]] INX 0); 04869800 - HARD:=TRUE; 04870000 - END; 04870100 - END; 04870200 - IF RD THEN 04870400 - IF ((LABELS[I+1] AND @77000000007777) EQV 04880000 - @12000000003714)=NOT 0 THEN 04890000 - BEGIN 04900000 - LABELS[I+1]_(P(DUP,LOD) AND 04910000 - @77777777770000) OR @6060; 04920000 - REMOVE(2); 04930000 - END; 04935000 - END; 04940000 - SKEDTOG:=LABELS[I].[6:24]="FILE" AND 04941000 - (LABELS[I+1] EQV "SHCEDUL")=NOT 0; 04942000 - FILEH := ((NUMWDS:=Ix15)INX FILEX)&30[8:38:10];04950000 - K:= 04959000 - FILEH[9]:=(*[(DUP)) AND 31; 04960000 - STREAM(T_0:FILEH); 04970000 - BEGIN SI_FILEH; 30(IF S? THEN BEGIN TALLY_1; 04980000 - JUMP OUT END ELSE SI_SI+8); T_TALLY; 04990000 - END; 05000000 - IF P OR(K GTR 20) THEN REMOVE(1); 05010000 - FOR T:=K+9 STEP -1 UNTIL 10 DO 05020000 - IF (DY:=FILEH[T]) NEQ 0 THEN 05030000 - IF DY GEQ TYPE OR 05040000 - (DY LEQ YR AND DY GTR MN) THEN REMOVE(1); 05050000 - DY:=0; 05059000 - FOR T:=10 STEP 1 UNTIL 29 DO 05060000 - BEGIN 05061000 - DY:=DY+(XY:=(FILEH[T] NEQ 0)); 05062000 - IF T GEQ K+10 THEN IF XY THEN T:=31; 05063000 - END; 05064000 - IF ((T=31) OR (DY GTR K) AND NOT SKEDTOG) OR 05065000 - (DY NEQ 0 AND FILEH[8]=0) THEN REMOVE(1); 05070000 -%********** RECONSTRUCT BAD HEADERS ********** 05070005 - IF (HDRO:=FILEH[0]).[1:14]=0 OR BLOCKSIZE=0 OR 05070010 - RECSPERBLOCK=0 OR SEGSPERBLOCK=0 THEN 05070020 - BEGIN 05070030 - IF NOT HARC THEN BEGIN 05070040 - IF SPOIO THEN 05070045 - BEGIN 05070047 - SPOUT(40); KEYIN(40); 05070050 - RC:=OK([MESSAGE[40]] INX 0); 05070060 - HARC:=TRUE; 05070070 - END; 05070075 - END; 05070080 - IF RC THEN 05070090 - BEGIN IF SEGSPERBLOCK=0 THEN 05070100 - BEGIN IF RECSPERBLOCK=0 THEN 05070110 - BEGIN 05070120 - IF RECSIZE=0 THEN GO PUNT; 05070130 - IF BLOCKSIZE=0 THEN GO PUNT; 05070140 - RECSPERBLOCK:=BLOCKSIZE DIV RECSIZE; 05070150 - SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30; 05070160 - END 05070170 - ELSE 05070180 - BEGIN 05070190 - IF BLOCKSIZE=0 THEN 05070200 - IF RECSIZE=0 THEN GO PUNT 05070210 - ELSE 05070220 - BEGIN BLOCKSIZE:=RECSPERBLOCKxRECSIZE; 05070230 - SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30;05070240 - END 05070250 - ELSE 05070260 - BEGIN 05070270 - RECSIZE:=BLOCKSIZE DIV RECSPERBLOCK; 05070280 - SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30; 05070290 - END 05070300 - END 05070310 - END 05070320 - ELSE 05070330 - BEGIN 05070340 - BLOCKSIZE:=SEGSPERBLOCK x 30; 05070350 - IF RECSIZE=0 THEN 05070360 - IF RECSPERBLOCK=0 THEN GO PUNT 05070370 - ELSE 05070380 - RECSIZE:=BLOCKSIZE DIV RECSPERBLOCK 05070385 - ELSE RECSPERBLOCK:=BLOCKSIZE DIV RECSIZE; 05070390 - END; 05070400 - FILEH[0]:=HDR0; 05070405 - GO ARND; 05070410 -PUNT: BLOCKSIZE:=30; 05070420 - RECSIZE:=30; 05070425 - RECSPERBLOCK:=1; 05070430 - SEGSPERBLOCK:=1; 05070435 - FILEH[0]:=HDRO; 05070440 -ARND: 05070450 - IF NUMWDS NEQ 0 THEN ESUTEMP:=FILEX[NUMWDS-1]; 05070452 - DISKIO(J-15+(I DIV 2),FILEX[NUMWDS-1]); 05070454 - IF NUMWDS NEQ 0 THEN FILEX[NUMWDS-1]:=ESUTEMP; 05070456 - END; 05070460 - STREAM(A:=[LABELS[I]],BS:=BLOCKSIZE,RS:=RECSIZE,RPB:=RECSPERBLOCK, 05070470 - SPB:=SEGSPERBLOCK,SV:=0,B:=[MESSAGE[45]]); 05070480 - BEGIN SI:=A; SI:=SI+1; DI:=B; DS:=7CHR; DI:=DI+1; SI:=SI+1; 05070490 - DS:=7CHR; DI:=DI+8; SI:=LOC BS; DS:=5DEC; SV:=DI; DI:=DI-5; 05070500 - DS:=4FILL; DI:=SV; DI:=DI+8; DS:=5DEC; SV:=DI; DI:=DI-5; 05070510 - DS:=4FILL; DI:=SV; DI:=DI+6; DS:=4DEC; SV:=DI; DI:=DI-4; 05070520 - DS:=3FILL; DI:=SV; DI:=DI+6; DS:=2DEC; DI:=DI-2; DS:=FILL; 05070530 - END; 05070540 - IF NOT(P1IO OR P2IO) THEN IF NOT SPOIO THEN ELSE 05070550 - IO(MESSAGE INX 45,@740000000000000) ELSE 05070560 - IO(MESSAGE INX 45,IF P1IO THEN @540100004000000 05070570 - ELSE @640100004000000); 05070580 - END; 05070590 -%************* END RECONSTRUCTION CODE ********** 05070600 -REMOVED: 05071000 - END; 05100000 - LABELS[0]_@114; 05110000 -QUIT: 05120000 - IF P1IO OR P2IO THEN IO(0,@440004000100000&(IF P1IO THEN 05120010 - @1 ELSE @2)[4:46:2]); 05120010 - $ POP OMIT 05120050 - DISKIO(J,LABELS); 05130000 - FOR I _ 0 STEP 1 UNTIL 29 DO INFO[I] _0; 05160000 - IF SPOIO THEN 05160100 - SPOUT(0); 05170000 - QX _ 0; 05180000 - IO(LOADER,@240000540000000); 05190000 - IF QX ! 2 THEN 05200000 - STREAM(L_LOADER,A_16); BEGIN SI_L; DS_20 WDS END 05210000 - ELSE 05220000 - STREAM(LOADBUTTON,A_@20); BEGIN SI_LOADBUTTON;DS_15 WDS END;05230000 - P(0,STS,0,STF); 05240000 - GO TO TART; 05250000 +$ SET LIST $ LISTA DECK STUFF 00000011 +$ SET COOL 00000090 + STARTER DECKS 00010000 + MAY 1969 BY P.E.G. 00020000 + $ SET OMIT = COOL 00030000 + B-5500 COLD START PROGRAM 00040000 + $ POP OMIT 00040050 + $ SET OMIT = NOT(COOL) 00050000 + B-5500 COOL START PROGRAM 00060000 + $ POP OMIT 00060050 + COMMENT: * TITLE: B5500/B5700 MARK XIV SYSTEM RELEASE * 00060100 + * FILE ID: SYMBOL/COOL TAPE ID: SYMBOL2/FILE000 * 00060101 + * THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00060102 + * AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00060103 + * EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00060104 + * WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00060105 + * BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00060106 + * * 00060107 + * COPYRIGHT (C) 1971, 1972 BURROUGHS CORPORATION * 00060108 + * AA320206 AA386657 *; 00060109 + BEGIN DEFINE P=POLISH#,M=MEMORY#; 00070000 + DEFINE DEFAULTDIRECT=4500#; 00071000 + DEFINE KERNELADR=1#; 00072000 + DEFINE MEMDISKADR=20#; 00073000 + DEFINE ESPBOTTOM=50#; 00074000 + DEFINE SCN(SCN1)=SCAN(CARD,SCN1)#, 00075000 + NAAME=1#, NUMBER=2#, DELIM=0#, PERCENT=4#; 00076000 + REAL CORE,READBACK,LOADER,J,I,DISKTOP,CARD,TYPE,MN,YR; 00080000 + REAL ESUTEMP; 00081000 + $ SET OMIT = COOL 00082000 + REAL LOWADR; 00083000 + $ POP OMIT 00084000 + ARRAY INFO[*],SHAR[*],BUFFER[*],TEMMP[*],FILEX[*]; 00090000 + ARRAY FILEH[*],LABELS[*],ZERO[*],RT[*]; 00100000 + INTEGER DY,LOADED,QX,XY,N,T,K,SYSNO,NUMWDS; 00120000 + REAL TREAL=T; 00120010 + $ SET OMIT = NOT(COOL) 00120099 + BOOLEAN RD,SKEDTOG,HARD,HARC,RC,FNDERR; 00120100 + $ POP OMIT 00120101 + LABEL READCARD,FENCE ,ESU,DATE,FILE,USE,DKA,DKB,STOP,EXIT,TIMER00130000 + ,ERROR,START,TART,DIRECT,DIRECTORYTOP 00140000 + ,MRCLEAN,XLOADED,HANDLE,SYSTEMS; 00150000 + $ SET OMIT = NOT(COOL) 00160000 + DEFINE REMOVE(REMOVE1)=BEGIN REMOVER(REMOVE1); GO REMOVED END#; 00169000 + LABEL QUIT,REMOVED,PUNT,ARND,LP,ON; 00170000 + REAL HDR0,RTI; 00170010 + DEFINE RECSIZE=HDR0.[1:14]#,BLOCKSIZE=HDR0.[15:15]#, 00170020 + RECSPERBLOCK=HDR0.[30:12]#,SEGSPERBLOCK=HDR0.[42:6]#; 00170030 + BOOLEAN FIRSTCARD; 00170049 + $ POP OMIT 00170050 + LABEL REMCD,MEMDUMP,BOMBOUT,REM,RECONSTR,GLOB; 00170100 + SWITCH TYPESWITCH:=ERROR,FILE,FENCE,STOP,ESU,USE,DATE,USE,USE 00180000 + ,DIRECT,DIRECTORYTOP,SYSTEMS,REMCD,MEMDUMP 00190000 + ,REM,RECONSTR,XLOADED; % SAVE FOR LAST 00191000 + ARRAY MONTHS[12]~ 0,31,59,90,120,151,181,212,243,273,304,334; 00200000 + BOOLEAN SPOIO,P1IO,P2IO,PRINTWAIT; 00201000 +DEFINE KERNEL=16#; % SHOULD BE NUMBER OF FIRST WORDS - 1 00201100 +ARRAY FIRST[17]:=0, 00210000 + "FILE0000", 00220000 + "FENCE000", 00230000 + "STOP0000", 00240000 + "ESU00000", 00250000 + "USE00000", 00260000 + "DATEO000", 00270000 + "TYPE0000", 00280000 + "OPTN0000", 00290000 + "DIRECT00", 00300000 + "DRCTRYTP", 00310000 + "SYSTEMS0", 00320000 + "REMOVECD", 00321000 + "MEMDUMP0", 00321100 + "REMOVEF0", 00321200 + "RECONSTR", 00321300 + "~0000000"; 00330000 + ARRAY OPTIONS[54] ~ 0, 00340000 + "DRA00000", %47, USE DRUM A 00350000 + "DRB00000", %46, USE DRUM B 00360000 + "BOJ00000", %45 00370000 + "EOJ00000", %44 00380000 + "OPEN0000", %43, TYPE FILE OPEN 00390000 + "TERMNATE", %42, CALL TERMINATE PROCEDURE 00400000 + "DATE0000", %41, INITIALIZE DATE @ H/L 00410000 + "TIME0000", %40, INITIALIZE TIME @ H/L 00420000 + "ONEBREAK", %39, USE ONLY ONE BREAKOUT TAPE 00430000 + "AUTOPRNT", %38, AUTOMATICALLY PRINT PBT 00440000 + "CLEARWRS", %37, CLEAR WRITE READY STATUS @ TERMINAL 00450000 + "DISCONDC", %36, WRITE DISC, CODE ON TERMINAL 00460000 + "CMPLFILE", %35, TYPE WHEN COMPILER FILES OPEN & CLOSE 00470000 + "CLOSE000", %34, TYPE FILE CLOSE 00480000 + "ERRORMSG", %33, ERROR MSGS WHEN PROGR RECOVERY USED 00490000 + "RET00000", %32, TYPE MT RETENTION MESSAGES 00500000 + "LIBMSG00", %31, TYPE LIBRARY MESSAGES 00510000 + "SCHEDMSG", %30, TYPE SCHEDULE MESSAGES 00520000 + "SECMSG00", %29, TYPE FILE SECURITY MESSAGES 00530000 + "DSKTOG00", %28, PREVENT I/O BELOW USER DISK AREA 00540000 + "RELTOG00", %27, PREVENT DISK RELEASE STATEMENT 00550000 + "PBDREL00", %26, PRINTER BACKUP DISK RELEASE 00560000 + "CHECK000", %25, CHECK MEMORY LINKS 00570000 + "DISKMSG0", %24, TYPE DISK ERROR MESSAGES 00580000 + "DISKLOG0", %23 DISK LOGGING 00590000 + "LIBERR00", %22 SUPPRESS LIBRARY ERROR MESSAGES 00600000 + "PBDONLY0", %21 GO TO PRINTER BACK-UP ONLY 00610000 + "SAVEPBT0", %20 DONT STACK FILES ON PB TAPES 00620000 + "RSMSG000", %19 PRINT SET OR RESET MESSAGES 00630000 + "AUTOUNLD", %18 NO USER DISK WILL UNLOAD EXPIRED 00640000 + "RNALL000", %17 RUN ALL DECKS(SHAREDISK) 00650000 + "CODEOLAY", %16 OLAY CODE TO ECM(AUXMEM) 00660000 + "COREST00", %15 JOB CORE ESTIMATES(STATISTICS) 00670000 + "DATAOLAY", %14 OLAY DATA TO ECM(AUXMEM) 00680000 + "HALT0000", %13 MAKES SYSTM HANG ON-SHOULD HL MSG 00690000 + "REMOTE00", %12 ENABLES DATACOM(TSS, IF NOT DCP) 00700000 + "CEMESS00", %11 LIBRARY MESSAGES FOR CANDE 00710000 + "BATCHZIP", %10 ZIP DECKS TO RUN ON BATCH(SHAREDISK) 00720000 + "NOBATCH0", %9 CONTROLS RUNNING OF BATCH JOBS ON TSS 00730000 + "STOPTEST", %8 INHIBIT TAPE WRITE FAILURE TEST 00740000 + "PNCHLOCK", %7 LOCK PUNCH AFTER RELEASE 00750000 + "CDONLY00", %6 RUN WITH LDCNTRL ONLY 00760000 + "PKTONLY0", %5 RUN WITH PACKETS ONLY 00770000 + "SEPARATE", %4 SEPARATES PRINTOUT 00780000 + "AUTOCE00", %3 AUTOMATIC INITIATION OF CANDE 00790000 + "MOD3IOS0", %2 MODEL III I/O CHANNELS 00800000 + "AUTOMESS", %1 SMALL MESSAGES IF NOT SET 00810000 + "OPTN0000", %0 00820000 + "~0000000"; 00870000 + ARRAY MESSAGE[75]:= 00880000 + "DIRECTRY", 00890000 + $ SET OMIT = COOL 00900000 + " BUILT~ ", 00910000 + $ POP OMIT 00910050 + $ SET OMIT = NOT(COOL) 00920000 + " CHECKD~", 00930000 + $ POP OMIT 00930050 + "INCORREC", 00940000 + "T CARD~0", 00950000 + " ERRO", 00960000 + "R ~ ", 00970000 + "DIRECTOR", 00980000 + "YTOP NOT", 00990000 + " SET~ ", 01000000 + "LOADER L", 01010000 + "OADED AL", 01020000 + "READY~ ", 01030000 + $ SET OMIT = NOT(COOL) 01031999 + "COOL STA", 01032000 + $ POP OMIT 01032001 + $ SET OMIT = NOT(NOT COOL) 01032999 + "COLD STA", 01033000 + $ POP OMIT 01033001 + "RTING...","ENTER OK"," TO CONT","INUE.~..", 01034000 + "NEED VAL", 01034100 + "ID ESU C", 01034200 + "ARD~ ","ENTER OK"," TO REMO","VE DECKS",".~ ", 01034300 + "DRCTRYTP", 01034400 + " CARD NO", 01034500 + "T FIRST~", 01034600 + "DUPLICAT", 01034700 + "E DRCTRY", 01034800 + "TYP CARD", 01034900 + "-MUST RE", 01034920 + "START~ ", % 31 01034940 + "MEMDUMP ","TOO LARG","E-NOT LO","ADED~ ", %32 01034950 + "MEMDUMP ","OVERWRIT","TTEN BY ","KERNEL~ ", %36 01034960 + "ENTER OK"," TO RECO","NSTRUCT ","BAD HEAD","ERS.~ ", 01034970 + " /"," ",",BLKSZ= "," ,RE","CSZ= ", 01034990 + " ,RPB= "," ,SPB","= ~", % 45 01035000 + "SEGMENT ","ZERO MAY"," BE BAD~", % 53 01035010 + "DIRECTOR","YTOP MAY"," BE BAD~", % 56 01035020 + " /"," ","REMOVED~", % 59 01035030 + "BAD DIRE","CT VALUE","~ ", % 62 01035040 + "CHECK DE","CLARED F","ILE ADDR","ESSES~ ", % 65 01035050 + "NO. OF E","SUS TO B","E CHANGE","D FROM "," ",%6901035060 + "~~~~~~~~"; 01039000 + ARRAY LOADBUTTON[15]~ 01040000 + OCT0441000401570421, % 1 20 01050000 + OCT0157000000104411, % 2 21 01060000 + OCT0211001441310055, % 3 22 01070000 + OCT4155124500004425, % 4 23 01080000 + OCT0060013101600064, % 5 24 01090000 + OCT4441010402530305, % 6 25 01100000 + OCT0100023441310055, % 7 26 01110000 + OCT0062011441310055, % 8 27 01120000 + OCT0066013441310055, % 9 30 01130000 + OCT0072015441310055, % 10 31 01140000 + OCT0076017441310055, % 11 32 01150000 + OCT5140000047700200, % 12 33 01160000 + OCT0441100401004441, % 13 34 01170000 + OCT0253010420527405, % 14 35 01180000 + OCT7405005101002411; % 15 36 01190000 +BOOLEAN STREAM PROCEDURE OK(B); VALUE B; 01195000 +BEGIN SI:=B; L: IF SC=" " THEN BEGIN SI:=SI+1; GO L END; 01195100 + IF SC="O" THEN SI:=SI+1 ELSE GO AWAY; 01195200 + IF SC="K" THEN TALLY:=1; 01195300 + AWAY:OK:=TALLY; 01195400 +END OK; 01195500 +REAL STREAM PROCEDURE DECI(V); VALUE V; 01195700 +BEGIN SI:=LOC V; DI:=LOC DECI; DS:=8 DEC; 01195800 +END DECI; 01195900 + REAL STREAM PROCEDURE SEARCH(CARD,FIRST,N); VALUE CARD,N; 01200000 + BEGIN LABEL L,EXIT; 01210000 + SI:=CARD; SI:=SI-N; DI:=LOC CARD; DS:=8LIT"0"; 01220000 + DI:=LOC CARD; N(DS:=CHR); 01225000 + L: SI ~ FIRST; SI ~ SI+8; TALLY ~ TALLY+1; 01230000 + IF SC = "~" THEN BEGIN TALLY ~ 0; GO TO EXIT END; 01240000 + DI ~ FIRST; DI ~ DI+8; FIRST ~ DI; 01250000 + SI:=LOC CARD; 01260000 + IF 8 SC NEQ DC THEN GO L; 01270000 + EXIT:SEARCH ~ TALLY; 01280000 + END; 01290000 + REAL STREAM PROCEDURE SCAN(LSTADR,TOKEN); 01290100 + BEGIN LABEL L,XXIT; LOCAL SV,SVR; 01290200 + DI:=TOKEN; DS:=8LIT"00000000"; DI:=DI-8; 01290250 + SI:=LSTADR; SI:=SI+5; SI:=SC; 01290300 + TALLY:=3; SCAN:=TALLY; 01290400 + L: IF SC=" " THEN BEGIN SI:=SI+1; GO L; END; 01290500 + IF SC=ALPHA THEN 01290600 + IF SC LSS "0" THEN BEGIN % ALPHA 01290700 + TALLY:=7; DI:=DI+1; 01290800 + 7(DS:=CHR; TALLY:=TALLY+63; IF SC=ALPHA THEN ELSE JUMP OUT); 01290900 + SV:=TALLY; SV(DS:=LIT" "); 01291000 + TALLY:=1; SCAN:=TALLY; 01291100 + END 01291200 + ELSE BEGIN % NUMBER 01291300 + TALLY:=0; 01291400 + 7(SI:=SI+1; TALLY:=TALLY+1; 01291500 + IF SC=ALPHA THEN 01291600 + IF SC GEQ "0" THEN ELSE JUMP OUT TO XXIT 01291700 + ELSE JUMP OUT); 01291800 + SV:=TALLY; SI:=SI-SV; 01291900 + DS:=SV OCT; 01292000 + TALLY:=2; SCAN:=TALLY; 01292100 + END 01292200 + ELSE 01292300 + IF SC=""" THEN BEGIN 01292400 + SI:=SI+1; TALLY:=7; DI:=DI+1; 01292500 + 8(IF SC NEQ """ THEN BEGIN DS:=CHR; TALLY:=TALLY+63; END 01292600 + ELSE BEGIN SI:=SI+1; JUMP OUT; END); 01292700 + IF TOGGLE THEN GO XXIT; 01292800 + SV:=TALLY; SV(DS:=LIT" "); SVR:=SI; 01292900 + SI:=LOC SV; SI:=SI+7; IF SC="7" THEN GO XXIT 01293000 + ELSE BEGIN TALLY:=1; SCAN:=TALLY; 01293100 + SI:=SVR; END; 01293200 + END ELSE BEGIN 01293300 + IF SC="%" THEN BEGIN TALLY:=4; SCAN:=TALLY; 01293400 + GO XXIT; END; 01293500 + DI:=DI+7; 01293600 + DS:=CHR; 01293700 + TALLY:=0; SCAN:=TALLY; 01293800 + END; 01293900 +XXIT: SV:=SI; SI:=LOC SV; DI:=LSTADR; DS:=WDS; 01294000 + END; 01294100 + REAL STREAM PROCEDURE ISOLATE(CARD); 01300000 + BEGIN LABEL L,A,X,E; 01310000 + LOCAL T; 01320000 + SI ~ CARD; SI ~ SI+5; SI ~ SC; 01330000 + L: IF SC = " " THEN BEGIN SI ~ SI+1; GO TO L END; 01340000 + IF SC = """ THEN 01350000 + BEGIN SI ~ SI+1; 01360000 + 17(SI ~SI+1; TALLY ~ TALLY+1; 01370000 + IF SC = """ THEN 01380000 + BEGIN T ~ SI; DI ~ T; DS ~ LIT " "; 01390000 + JUMP OUT TO X 01400000 + END;); 01410000 + E: TALLY ~ 0; GO TO X; 01420000 + END; 01430000 + IF SC = ALPHA THEN BEGIN 01440000 + 17(SI~SI+1; TALLY ~ TALLY+1; 01450000 + IF SC = ALPHA THEN GO TO A; 01460000 + JUMP OUT TO X; A:;); 01470000 + GO TO E; 01480000 + END ELSE BEGIN SI ~ SI+1; TALLY ~ 1 END; 01490000 + X: ISOLATE ~ TALLY; 01500000 + T ~ SI; 01510000 + DI ~ CARD; SI ~ LOC T; DS ~ WDS; 01520000 + END; 01530000 + SAVE PROCEDURE SPECIAL(C); VALUE C; REAL C; 01540000 + BEGIN IF ISOLATE(CARD) ! 1 THEN GO TO ERROR; 01550000 + STREAM(C:CARD); 01560000 + BEGIN SI ~ CARD; SI ~ SI-1; 01570000 + DI ~ LOC C; DI ~ DI+7; 01580000 + IF SC ! DC THEN TALLY ~ 1; 01590000 + C ~ TALLY; 01600000 + END; 01610000 + IF P THEN GO TO ERROR; 01620000 + END; 01630000 + SAVE PROCEDURE IOERR(IOD); VALUE IOD; REAL IOD; FORWARD; 01640000 + SAVE REAL PROCEDURE EOM; FORWARD; 01650000 +% 01651000 +SAVE PROCEDURE WAITFORPRINTERFINISH(U); VALUE U; REAL U; 01652000 + BEGIN PRINTWAIT:=TRUE; 01653000 + DO UNTIL EOM=U; 01654000 + PRINTWAIT:=FALSE; 01655000 + END; 01656000 + SAVE PROCEDURE IO(ADDRESS,IOD); VALUE ADDRESS,IOD; REAL ADDRESS,IOD; 01660000 + BEGIN REAL T; 01670000 + LABEL L; 01680000 + IOD ~ ADDRESS INX IOD; 01690000 + L: P([IOD],IIO); 01700000 + T ~ EOM; 01710000 + IF T.[30:3] ! 0 THEN 01720000 + IF QX THEN GO TO L ELSE QX := 2; 01730000 + IF ADDRESS } 0 THEN 01735000 + IF T.[26:4] ! 0 THEN 01740000 + IF T.[29:1] AND T.[3:5]=6 AND M[ADDRESS]=@40 01751000 + THEN BEGIN 01752000 + M[ADDRESS]:=0; 01753000 + M[ADDRESS+1]:=0; 01754000 + GO L; 01755000 + END 01756000 + ELSE IF (T.[3:5]=22 OR T.[3:5]=26) 01757000 + THEN IF T.[27:1] 01758000 + THEN BEGIN 01759000 + WAITFORPRINTERFINISH(T.[3:5]); 01760000 + IOD:=0&T[3:3:5]&1[18:47:1] 01761000 + &1[29:44:4]; 01762000 + GO L; 01763000 + END 01764000 + ELSE WAITFORPRINTERFINISH(T.[3:5]) 01765000 + ELSE IF T.[29:1] AND T.[3:5]=10 AND 01767000 + M[ADDRESS]=0 01768000 + THEN 01769000 + ELSE BEGIN IOERR(IOD); GO L; END; 01770000 + END; 01850000 + SAVE PROCEDURE SPOINOUT(WHICH); VALUE WHICH; INTEGER WHICH; 01851000 + BEGIN 01852000 + IF SPOIO THEN 01853000 + IO(MESSAGE INX ABS(WHICH),@740000000000000&WHICH[24:1:1]);01854000 + END SPOINOUT; 01855000 + DEFINE KEYIN(KEYIN1)=SPOINOUT(NABS(KEYIN1))#; 01856000 + DEFINE SPOUT=SPOINOUT#; 01857000 + SAVE PROCEDURE IOERR(IOD); VALUE IOD; REAL IOD; 01860000 + BEGIN REAL T; 01870000 + IOD ~ IOD.[3:5]; 01890000 + T ~ IF IOD=30 THEN "SPO" ELSE 01900000 + IF IOD=10 THEN "CRA" ELSE 01910000 + IF IOD= 6 THEN "DKA" ELSE 01920000 + IF IOD=22 THEN "LPA" ELSE 01921000 + IF IOD=26 THEN "LPB" ELSE 01922000 + IF IOD= 4 THEN "DRA" ELSE "XXX"; 01930000 + STREAM(T,A~[MESSAGE[4]]); 01940000 + BEGIN SI ~ LOC T; SI ~ SI+5; DS ~ 3CHR; END; 01950000 + SPOUT(4); 01960000 + IF IOD =10 THEN 01970000 + BEGIN DO UNTIL P(RRR).[24:1] = 0; 01980000 + DO UNTIL P(RRR).[24:1]; 01990000 + END ELSE 02000000 + IF IOD LSS 22 THEN GO BOMBOUT; 02000100 + END IOERR; 02020000 + SAVE PROCEDURE DISKIO(A,C); VALUE A; 02030000 + ARRAY C[*]; 02040000 + REAL A; 02050000 + BEGIN BOOLEAN R; 02060000 + C := C INX NOT 0; 02070000 + IF R:=A.[1:1] THEN A := ABS (A); 02080000 + STREAM(A,X~FLAG(C)); 02090000 + BEGIN SI ~ LOC A; DS ~ 8 DEC END; 02100000 + IF R THEN IO(C,@140360140100000&NUMWDS[8:38:10] 02110000 + &((NUMWDS+29)DIV 30)[27:42:6]) ELSE 02120000 + BEGIN 02130000 + IO(C,@140360100100000); 02140000 + M[READBACK] ~ M[C]; 02150000 + IO(READBACK,@140360140100000); 02160000 + STREAM(READBACK:X~FLAG(C)); 02170000 + BEGIN SI ~ READBACK; SI ~ SI+8; DI ~ DI+8; 02180000 + 5(IF 48 SC ! DC THEN TALLY ~ 1); 02190000 + READBACK ~ TALLY; 02200000 + END; 02210000 + IF P THEN IOERR(@140000000000000); 02220000 + END; 02230000 + END; 02240000 + SAVE REAL PROCEDURE SCANWORD(TABLE); ARRAY TABLE[*]; 02250000 + BEGIN REAL T; 02260000 + T:=IF(M[CARD] EQV 0)=NOT 0 THEN KERNEL ELSE ISOLATE(CARD);02270000 + SCANWORD:=IF T=KERNEL THEN T ELSE SEARCH(CARD,TABLE,T); 02280000 + END; 02290000 + SAVE REAL PROCEDURE SCANUMBER; 02300000 + BEGIN REAL T; 02310000 + T ~ ISOLATE(CARD); 02320000 + STREAM(R~0:T,CARD); 02330000 + BEGIN DI~DI-T; CARD ~ DI; 02340000 + SI ~ CARD; 02350000 + DI ~ LOC R; 02360000 + DS ~ T OCT; 02370000 + END; 02380000 + SCANUMBER ~ P; 02390000 + END; 02400000 +% 02410000 + $ SET OMIT = NOT(COOL) 02410500 +SAVE BOOLEAN PROCEDURE LOOKFOR(L1,L2); VALUE L1,L2; REAL L1,L2; 02411000 + BEGIN REAL I; LABEL XXIT; 02411100 + FOR I:=0 STEP 2 UNTIL RTI DO 02411200 + IF (L1 EQV RT[I])=NOT 0 OR RT[I] LSS 0 THEN 02411300 + IF (L2 EQV RT[I+1])=NOT 0 OR RT[I+1] LSS 0 THEN 02411400 + BEGIN LOOKFOR:=TRUE; I:=RTI; GO XXIT; END; 02411500 +XXIT: 02411600 + END; 02411700 + $ POP OMIT 02411750 +% 02411800 +SAVE INTEGER PROCEDURE PACKER; 02420000 + BEGIN; 02430000 + STREAM (A:=[BUFFER[9]],B:=[PACKER]); 02440000 + BEGIN SI := A; SI := SI + 4; 02450000 + DI := B; DI := DI + 6; 02460000 + 4(SKIP 3 SB; 3(IF SB THEN DS:=SET ELSE SKIP DB;SKIP SB));02470000 + END; 02480000 + END; 02490000 +% 02500000 +SAVE PROCEDURE LOADERS; 02510000 + BEGIN LABEL TOPPER,NXTCRD,EXIT; 02520000 + INTEGER N,SIZE; 02521000 + IF (TYPE=KERNEL AND LOADED) 02530000 + OR (TYPE!KERNEL AND (LOADED.[46:1])) THEN 02531000 + BEGIN SPOUT(9); 02540000 + GO BOMBOUT; 02550000 + END; 02560000 + IF TYPE NEQ KERNEL THEN GO NXTCRD; 02561000 + TOPPER: STREAM(B:=[BUFFER[1]],A:=N:=BUFFER[9].[6:9], 02570000 + D~PACKER INX BUFFER); 02580000 + BEGIN SI ~B; DS ~ A WDS; END; 02590000 + SIZE:=SIZE+N; 02591000 + NXTCRD: IO(BUFFER INX 0,@240120040000000); 02600000 + IF BUFFER[0].[4:44]=0 THEN GO TO TOPPER; 02610000 + SIZE:=(SIZE+29) DIV 30; 02611000 + IF (TYPE=KERNEL AND (1+SIZE) GTR MEMDISKADR) THEN 02612000 + BEGIN 02612100 + SPOUT(36); 02612300 + LOADED:=LOADED OR 2; 02612400 + END ELSE 02612500 + IF (TYPE!KERNEL AND (MEMDISKADR+SIZE) GTR ESPBOTTOM) THEN 02612600 + BEGIN 02612700 + SPOUT(32); 02612800 + GO EXIT; 02612900 + END; 02613000 + TEMMP := BUFFER; 02620000 + BUFFER := 111 INX BUFFER; 02630000 + BUFFER[0] := IF TYPE=KERNEL THEN 1 ELSE DECI(MEMDISKADR); 02640000 + LOADED := LOADED OR 02650000 + (IF TYPE=KERNEL THEN 1 ELSE 2); 02651000 + IO(BUFFER INX 0,@140000000000000&SIZE[27:42:6]); 02660000 + BUFFER := TEMMP; 02670000 + EXIT: 02671000 + END; 02680000 + $ SET OMIT = NOT COOL 02689999 +SAVE PROCEDURE REMOVER(L); VALUE L; INTEGER L; 02690000 + BEGIN 02700000 + STREAM(A:=[LABELS[I]],X:=(L=0),L,ADR:=J-(L NEQ 0)| 02710000 + ((30-I) DIV 2),MONTHS); 02711000 + BEGIN 55(DS:=LIT" "); DS:=LIT"~"; DI:=MONTHS; 02712000 + SI:=A; X(DS:=8CHR;DS:=LIT"/"; DS:=8CHR; JUMP OUT TO RMVE);02720000 + SI:=SI+ 1;DS:=7 CHR; DS:=LIT"/";SI:=SI+1;DS:=7CHR; 02720200 + RMVE:DS:=9LIT" REMOVED("; 02730000 + CI:=CI+L; 02730100 + GO NAM; 02730120 + GO HDR; 02730140 + GO DECK; 02730160 + NAM :DS:=8LIT"BAD NAME";GO FIN; 02730200 + HDR :DS:=7LIT"BAD HDR"; GO FIN; 02730300 + DECK:DS:=4LIT"DECK"; 02730400 + FIN :DS:=9LIT") AT ADR="; 02730500 + SI:=LOC ADR; X:=DI; DS:=8DEC; DI:=X; DS:=7FILL; 02730600 + END; 02740000 + LABELS[I]:=@14; 02750000 + IF NOT(P1IO OR P2IO) THEN IF NOT SPOIO THEN ELSE 02751000 + IO(MONTHS INX 0,@740000000000000) ELSE 02755000 + IO(MONTHS INX 0,IF P1IO THEN @540070004000000 ELSE 02757000 + @640070004000000); 02760000 + END; 02770000 + $ POP OMIT 02770001 + SAVE REAL PROCEDURE EOM; 02780000 + BEGIN GO TO TIMER END; 02790000 +%***********************START HERE**************************** 02800000 + TART :@20: QX ~ 1; GO TO START; 02810000 + TIMER :@22:P(INI); GO TO TIMER; % TIME INTERVAL 02820000 + :@24:GO TO TIMER; % KEYBOARD REQUEST 02830000 + :@25:P(22); GO GLOB; % LPA FINISHED 02840000 + :@26:P(26); GO GLOB; % LPB FINISHED 02850000 + :@27:P(@14,LOD,RTN); % I/O #1 FINISHED 02860000 + :@30:P(@15,LOD,RTN); % I/O #2 FINISHED 02870000 + :@31:P(@16,LOD,RTN); % I/O #3 FINISHED 02880000 + :@32:P(@17,LOD,RTN); % I/O #4 FINISHED 02890000 + :@34:GO TO TIMER; % INQUIRY REQUEST 02900000 +%**********************CODE STARTS HERE************************** 02910000 + START:*: P(64,STS); 02920000 + DISKTOP ~ -1; 02930000 + NUMWDS := 30; 02940000 + CORE ~ P(.EOM,LOD).[33:15]+3; 02950000 + STREAM(CORE); 02960000 + BEGIN DS ~ 8 LIT "0"; SI ~ CORE; 02970000 + 32(DS ~ 32 WDS); 02980000 + END; 02990000 + SHAR := [M[CORE]]&31[8:38:10]; 03000000 + CORE := CORE +31; 03010000 + LOADER ~ CORE; 03020000 + CORE ~ CORE+30; 03030000 + INFO ~ [M[CORE]]&30[8:38:10]; 03040000 + CORE ~ CORE+40; 03050000 + FILEH ~ [M[CORE]]&30[8:38:10]; 03060000 + CORE ~ CORE+40; 03070000 + FILEX := [M[CORE]]&450[8:38:10]; 03080000 + CORE := CORE + 450; 03090000 + LABELS ~ [M[CORE]]&30[8:38:10]; 03100000 + CORE ~ CORE+40; 03110000 + READBACK ~ CORE; 03120000 + CORE ~ CORE+40; 03130000 + ZERO:=[M[CORE]]&30[8:38:10]; 03130100 + CORE:=CORE+40; 03130200 + RT:=[M[CORE]]&300[8:38:10]; 03130300 + CORE:=CORE+310; 03130400 + SPOIO:=P(RRR).[22:1]; 03131000 + P1IO:=P(RRR).[27:1]; 03131050 + P2IO:=P(RRR).[26:1]; 03131100 + $ SET OMIT = COOL 03131299 + LOWADR:=99999999; % INITIALIZE 03131300 + $ POP OMIT 03131401 + $ SET OMIT = NOT(COOL) 03140000 + DISKIO(-0,SHAR); 03150000 + FOR I := 13 STEP 5 UNTIL 28 03160000 + DO SHAR[I] := SHAR[I+1] := 0; %CLEAR ALL INT 03170000 + INFO[0] := @40; 03180000 + INFO[1] ~ 0; 03185000 + IO(-(INFO INX 0),@140004000000000); 03190000 + SYSNO := INFO[1].[4:2]; %GET SYSTEM NUMBER 03200000 + FIRSTCARD:=TRUE; 03200025 + RTI:=-1; 03200030 + $ POP OMIT 03200050 + I ~ 0; 03210000 + BUFFER := [M[CORE]]&10[8:38:10]; 03230000 +% 03240000 +READCARD: CARD ~ CORE; %READ CARD 03250000 + IO(CARD,@240000040000000); 03260000 +HANDLE: STREAM (C:=CARD+10); DS := 2 LIT "%-"; 03270000 + TYPE:=SCANWORD(FIRST); 03280000 + $ SET OMIT = NOT(COOL) 03280099 + IF FIRSTCARD THEN 03280100 + IF TYPE NEQ 10 AND TYPE NEQ KERNEL THEN 03280200 + BEGIN 03280300 + SPOUT(24); 03280400 + GO TO ERROR; 03280500 + END; 03280600 + $ POP OMIT 03280601 + GO TYPESWITCH[TYPE]; 03280700 +GLOB:: IF PRINTWAIT THEN P(RTN) ELSE P(DEL); 03280800 + GO TIMER; 03280900 +% 03290000 +ERROR:: SPOUT(2); 03300000 + DO UNTIL P(RRR).[24:1] = 0; 03310000 + DO UNTIL P(RRR).[24:1]; 03320000 + P(64,STS); 03330000 + GO READCARD; 03340000 +% 03350000 +MEMDUMP: 03351000 +XLOADED: LOADERS; %LOAD LOADER DECK 03360000 + CARD := CORE; 03370000 + GO TO HANDLE; 03380000 +% 03390000 +REM: 03391000 + $ SET OMIT = COOL 03391100 + GO ERROR; 03391200 + $ POP OMIT 03391300 + $ SET OMIT = NOT(COOL) 03391400 + CARD:=CORE; 03391500 + IO(CARD,@240000040000000); 03391600 + STREAM(C:=CARD+10); DS:=2LIT"%-"; 03391700 +LP: IF P(SCN(HDR0)) NEQ NAAME THEN 03391900 + IF HDR0 NEQ "=" THEN GO ERROR 03392000 + ELSE RT[RTI:=RTI+1]:=-1 03392100 + ELSE RT[RTI:=RTI+1]:=HDR0; 03392200 + IF P(SCN(HDR0)) NEQ DELIM THEN 03392300 + IF RT[RTI]="STOP " THEN BEGIN RTI:=RTI-1; GO READCARD; END03392400 + ELSE GO ERROR 03392500 + ELSE 03392600 + IF HDR0 NEQ "/" THEN GO ERROR; 03392700 + IF P(SCN(HDR0)) NEQ NAAME THEN 03392800 + IF HDR0 NEQ "=" THEN GO ERROR 03392900 + ELSE RT[RTI:=RTI+1]:=-1 03393000 + ELSE RT[RTI:=RTI+1]:=HDR0; 03393100 + IF P(SCN(HDR0),DUP) NEQ PERCENT THEN 03393200 + IF P NEQ DELIM THEN GO ERROR 03393300 + ELSE GO LP 03393400 + ELSE BEGIN P(DEL); GO REM; END;03393500 + $ POP OMIT 03393600 +% 03393700 +SYSTEMS: SPECIAL ("="); 03400000 + SHAR[0] := SCANUMBER ; 03410000 + IF SHAR[0] GTR 4 OR SHAR[0] LSS 1 THEN 03420000 + BEGIN SHAR[0] := 1; 03430000 + GO TO ERROR; 03440000 + END; 03450000 + GO TO READCARD; 03460000 +% 03470000 +DIRECTORYTOP: 03480000 + $ SET OMIT = NOT(COOL) 03480050 + IF NOT FIRSTCARD THEN 03480100 + BEGIN 03480200 + SPOUT(27); 03480300 + GO BOMBOUT; 03480400 + END; 03480500 + $ POP OMIT 03480501 + DISKTOP:=SCANUMBER; 03480600 + J ~ DISKTOP+19; 03490000 + $ SET OMIT = NOT(COOL) 03500000 + DISKIO(-(DISKTOP-SYSNO),INFO); 03510000 + FIRSTCARD:=FALSE; 03510100 + $ POP OMIT 03510101 + GO TO READCARD; 03520000 +% 03530000 +DIRECT: INFO[4] ~ SHAR[4]~SCANUMBER; 03540000 + GO TO READCARD; 03550000 +% 03560000 +FENCE: SPECIAL("="); 03570000 + INFO[19]~@100000-(P(DUP)-SCANUMBER) DIV 1024|1024; 03580000 + IF INFO[19]<@20000 THEN INFO[19]~@20000 ELSE 03590000 + IF INFO[19]>@70000 THEN INFO[19]~@70000; 03600000 + GO TO READCARD; 03610000 +% 03620000 +ESU: ESUTEMP:=SCANUMBER; 03630000 + SPECIAL("%"); 03635000 + GO READCARD; 03640000 +% 03650000 + DATE: MN ~ SCANUMBER; 03660000 + IF MN < 1 OR MN > 12 THEN GO TO ERROR; 03670000 + SPECIAL("/"); 03680000 + DY ~ SCANUMBER; 03690000 + SPECIAL("/"); 03700000 + YR ~ SCANUMBER; 03710000 + DY ~ MONTHS[MN-1]+DY; 03720000 + IF YR MOD 4 = 0 AND (YR MOD 100 ! 0 OR YR MOD 400 = 0) 03730000 + AND MN } 3 THEN DY ~ DY+1; 03740000 + DY ~ YR MOD 100 | 1000+DY; 03750000 + STREAM(D~[DY],I~[INFO[1]]); 03760000 + BEGIN SI ~ D; DS ~ 8 DEC END; 03770000 + GO READCARD; 03780000 +% 03810000 +USE: IF TYPE NEQ 8 THEN XY:=SCANWORD(OPTIONS) 03820000 + ELSE XY:=48-SCANUMBER; 03820100 + IF XY=0 THEN GO ERROR; 03830000 + TREAL:=1; 03880000 + FOR K:=2 STEP 1 UNTIL XY DO TREAL:=0&TREAL[1:2:46]; 03890000 + INFO[0]:=INFO[0] OR TREAL; 03900000 + SPECIAL("%"); 03905000 + GO READCARD; 03910000 +% 03920000 +FILE: 03930000 + $ SET OMIT = NOT(COOL) 03940000 + GO TO ERROR; 03950000 + $ POP OMIT 03950050 + $ SET OMIT = COOL 03960000 + IF P(SCN(LABELS[28-I])) NEQ NAAME THEN GO ERROR; 03971000 + IF P(SCN(N)) NEQ DELIM THEN GO ERROR 03972000 + ELSE IF N NEQ "/" THEN GO ERROR; 03973000 + IF P(SCN(LABELS[29-I])) NEQ NAAME THEN GO ERROR; 03974000 + IF DISKTOP LSS 0 THEN BEGIN SPOUT(6); GO ERROR; END; 03975000 + FILEH[0]:=(*P(DUP))&30[1:34:14]&30[15:33:15]& 03975100 + 1[30:36:12]&1[42:42:6]; 03975200 + IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03976000 + IF P(SCN(FILEH[9])) NEQ NUMBER THEN GO ERROR; 03977000 + IF FILEH[9] GTR 20 THEN GO ERROR; 03978000 + IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03979000 + IF P(SCN(FILEH[8])) NEQ NUMBER THEN GO ERROR; 03980000 + IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03981000 + IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03982000 + ELSE IF N GTR 999 THEN GO ERROR 03983000 + ELSE FILEH[3]:=-DY&DY[12:30:18]&N[2:38:10]; 03984000 + IF (K:=P(SCN(N))) = PERCENT THEN 03985000 + ELSE 03986000 + BEGIN IF K NEQ DELIM THEN GO ERROR; 03987000 + IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03988000 + ELSE FILEH[0]:=(*P(DUP))& 03989000 + N[1:34:14]; 03989100 + K:=N; 03989200 + IF P(SCN(N)) NEQ DELIM THEN GO ERROR; 03990000 + IF P(SCN(N)) NEQ NUMBER THEN GO ERROR 03991000 + ELSE FILEH[0]:=(*P(DUP))& 03992000 + N[15:33:15]; 03992100 + FILEH[0]:=(*P(DUP))&((N+29) DIV 30)[42:42:6] 03992200 + &(N DIV K)[30:36:12]; 03992300 + IF P(SCN(N)) NEQ PERCENT THEN GO ERROR; 03993000 + END; 03994000 + N:=FILEH[9]; 03996000 + FOR K ~ 1 STEP 1 UNTIL N DO 04180000 + BEGIN CARD ~ CORE; 04190000 + IO(CARD,@240000040000000); 04200000 + IF SCANWORD(FIRST) ! 0 THEN GO TO ERROR; 04210000 + CARD ~ CORE; 04220000 + FILEH[9+K] ~ SCANUMBER; 04230000 + SPECIAL("%"); 04240000 + IF FILEH[9+K] LSS LOWADR THEN 04241000 + IF FILEH[9+K] NEQ DISKTOP+4 THEN LOWADR:=FILEH[9+K]; 04245000 + END; 04250000 + FOR K ~ K STEP 1 UNTIL 20 DO 04260000 + FILEH[9+K] ~ 0; 04270000 + FILEH[4]:=@44; 04280200 + FILEH[7] ~ FILEH[8]|N-1; 04290000 + I ~ I+2; 04300000 + DISKIO(J-(I DIV 2),FILEH); 04310000 + IF I = 30 THEN 04320000 + BEGIN DISKIO(J,LABELS); 04330000 + J ~ J+16; 04340000 + I ~ 0 04350000 + END; 04360000 + GO TO READCARD; 04370000 + $ POP OMIT 04370050 +RECONSTR: 04371000 + $ SET OMIT = NOT COOL 04371100 + RC:=HARD:=TRUE; GO READCARD; 04371200 + $ SET OMIT = COOL 04371300 + GO ERROR; 04371400 + $ RESET OMIT 04371500 +REMCD: 04372000 + $ SET OMIT = NOT COOL 04372009 + RD:=HARD:=TRUE; GO READCARD; 04372010 + $ SET OMIT = COOL 04372015 + GO TO ERROR; 04372020 + $ RESET OMIT 04372021 + %::::::::::::::::::::::NO MORE CARDS::::::::::::::::::::::::::::: 04380000 +STOP: SHAR[4]:=INFO[4]; 04390500 + INFO[16]:=15; 04395000 + IF SPOIO THEN 04395100 + BEGIN 04395200 + SPOUT(12); 04395300 + KEYIN(12); 04395400 + IF NOT OK([MESSAGE[12]] INX 0) THEN 04395500 +BOMBOUT:: 04395550 + BEGIN STREAM(B:=[MESSAGE[12]]); 04395600 + DS:=24 LIT "COOL/COLD START ABORTED~"; 04395700 + SPOUT(12); 04395800 + DO UNTIL FALSE; 04395900 + END; 04396000 + STREAM(A:=INFO[4],SV:=0,N:=[MESSAGE[27]]); 04396050 + BEGIN DS:=20LIT"USER DISK BEGINS AT "; SI:=LOC A; 04396100 + DS:=8DEC; SV:=DI; DI:=DI-8; DS:=7FILL; DI:=SV; 04396150 + DS:=LIT"~"; 04396200 + END; 04396250 + SPOUT(27); 04396300 + END; 04396400 + $ SET OMIT = COOL 04397000 + IF (INFO[4] LEQ DISKTOP OR (N:=LOWADR LSS INFO[4])) THEN 04397100 + BEGIN IF SPOIO THEN 04397200 + BEGIN SPOUT(62); IF N=1 THEN SPOUT(65); END; 04397300 + GO BOMBOUT; 04397400 + END; 04397500 + IF DISKTOP < 0 THEN 04400000 + BEGIN 04410000 + SPOUT(6); 04420000 + GO TO ERROR; 04430000 + END; 04440000 + $ POP OMIT 04440001 + IF ESUTEMP LEQ 0 THEN 04441000 + BEGIN 04441100 + SPOUT(17); 04441200 + GO TO ERROR; 04441300 + END; 04441400 + SHAR[1] ~ DISKTOP; 04450000 + IF SHAR[0] GTR 4 OR SHAR[0] LSS 1 THEN SHAR[0] := 1; 04460000 + $ SET OMIT = NOT COOL 04470004 + %********* LOOK AT SEGMENT ZERO ********** 04470005 + IF SHAR[1] GTR 10000 OR SHAR[1] LSS 50 OR 04470010 + SHAR[4] GTR 100000 OR SHAR[4] LSS 50 04470015 + THEN BEGIN SPOUT(53); GO BOMBOUT; END; 04470020 + FOR N:=0 STEP 1 UNTIL 29 DO 04470030 + IF P(SHAR[N],TOP,XCH,DEL) THEN ELSE 04470035 + BEGIN FNDERR:=TRUE; SHAR[N]:=0; END; 04470040 + FOR N:=10 STEP 5 UNTIL SHAR[0]|5+5 DO 04470045 + BEGIN 04470050 + IF ((SHAR[N] OR SHAR[N+1]) AND @3700000000000000) NEQ 0 04470055 + THEN BEGIN FNDERR:=TRUE; SHAR[N]:=SHAR[N+1]:=0; END; 04470060 + IF ((SHAR[N+3] OR SHAR[N+4]) AND @3700000000000000) NEQ 0 04470065 + THEN BEGIN FNDERR:=TRUE; SHAR[N+3]:=SHAR[N+4]:=0; END; 04470070 + END; 04470075 + IF FNDERR THEN SPOUT(53); 04470080 +%********** END OF SEGMENT ZERO EXAMINATION ********** 04470085 + $ POP OMIT 04470090 + DISKIO(0,SHAR); 04470095 + $ SET OMIT = NOT COOL 04470099 + IF ESUTEMP NEQ INFO[2] THEN 04470100 + IF SPOIO THEN 04470105 + BEGIN 04470110 + STREAM(A:=INFO[2],D:=0,B:=ESUTEMP,C:=MESSAGE INX 69); 04470120 + BEGIN DI:=DI+31; SI:=LOC A; C:=DI; DI:=LOC D; DS:=8DEC; 04470130 + DI:=LOC D; DS:=7FILL; DI:=C; 8(IF SC=" " THEN SI:=SI+1 04470140 + ELSE DS:=CHR); DS:=4LIT" TO "; C:=DI; DI:=LOC D; DS:=8DEC;04470150 + DI:=LOC D; DS:=7FILL; DI:=C; SI:=LOC D; 8(IF SC=" " THEN 04470160 + SI:=SI+1 ELSE DS:=CHR); DS:=LIT"~"; 04470170 + END; 04470180 + SPOUT(69); 04470200 + SPOUT(14); 04470210 + KEYIN(69); 04470220 + IF NOT OK(MESSAGE INX 69) THEN GO BOMBOUT; 04470230 + END; 04470235 + $ POP OMIT 04470236 + INFO[2]:=ESUTEMP; 04470240 + $ SET OMIT = COOL 04480000 + LABELS[28-I] ~ @114; 04490000 + LABELS[29-I] ~ 0; 04500000 + FOR I:=0 STEP 1 UNTIL(SHAR[0]-1)DO DISKIO(DISKTOP-I,INFO);04510000 + $ POP OMIT 04510050 + $ SET OMIT = NOT(COOL) 04520000 + FOR I:=-7 STEP 1 UNTIL -4 DO DISKIO(DISKTOP+I,ZERO); 04520200 + FOR I:=1 STEP 1 UNTIL 3 DO DISKIO(DISKTOP+I,ZERO); 04520300 +%********** LOOK AT DIRECTORYTOP ********** 04520400 + FNDERR:=FALSE; 04520450 + FOR I:=0 STEP 1 UNTIL 29 DO 04520500 + IF P(INFO[I],TOP,XCH,DEL) THEN ELSE 04520600 + BEGIN FNDERR:=TRUE; INFO[I]:=0; END; 04520700 + IF (INFO[2] DIV 100) GTR 10 OR (INFO[2] MOD 100) GTR 10 04520800 + THEN BEGIN SPOUT(56); GO BOMBOUT; END; 04520900 + IF INFO[8] GTR @7777 THEN 04521000 + BEGIN FNDERR:=TRUE; INFO[8]:=1; END; 04521050 + IF INFO[9] LSS 0 THEN 04521100 + BEGIN FNDERR:=TRUE; INFO[9]:=1; END; 04521150 + IF FNDERR THEN SPOUT(56); 04521175 +%********** END OF DIRECTORYTOP EXAMINATION ********** 04521200 + DISKIO(DISKTOP-SYSNO,INFO); 04521300 + $ POP OMIT 04530050 + N := ESPBOTTOM ;%START CLEAN ESPDISK 04540000 +MRCLEAN: IF N LSS (DISKTOP-SHAR[0]) THEN 04550000 + BEGIN ;STREAM(B:=N,X:=FILEH); 04560000 + BEGIN SI:=LOC B;DS:=8 DEC;END; 04570000 + P(N); 04580000 + IF (N:=(DISKTOP-SHAR[0]-N))GEQ 63 THEN 04590000 + IO(FILEH INX 0,@140000007700000) 04600000 + ELSE 04610000 + IO(FILEH INX 0,@140000000000000&N[27:42:6]); 04620000 + N := P + 63; 04630000 + GO TO MRCLEAN; 04640000 + END; 04650000 + STREAM (B:=DISKTOP+1,X:=FILEH); 04660000 + BEGIN SI:=LOC B;DS:=8 DEC;END; 04670000 + IO(FILEH INX 0,@141320000000000 & 04680000 + $ SET OMIT = NOT(COOL) 04680099 + (IF RD THEN 3 ELSE 2)[30:45:3]); 04680100 + $ POP OMIT 04680101 + $ SET OMIT = COOL 04680199 + 3[30:45:3]); 04680200 + $ POP OMIT 04680201 + $ SET OMIT = NOT(COOL) 04685000 + N~(((INFO[4]-DISKTOP+3) DIV (35/2))|16) + J; 04690000 + MN:=DISKTOP +4; 04691000 + YR:=INFO[4]; 04691100 + TYPE:=INFO[2]|1000000; 04691200 + IF P1IO OR P2IO THEN BEGIN 04691300 + STREAM(M:=[MESSAGE[53]]); 04691400 + DS:=25LIT"CHECK PRINTER FOR OUTPUT~"; 04691500 + SPOUT(53); 04691600 + END; 04691700 + FOR J~J STEP 16 UNTIL N DO 04700000 + BEGIN 04710000 + NUMWDS := 480; 04720000 + DISKIO(-(J-15),FILEX); 04730000 + FOR I:=0 STEP 2 UNTIL 28 DO 04740000 + BEGIN 04750000 + STREAM(A:=0:D:=[LABELS[I]]); 04760000 + BEGIN SI:=D;IF SC!"0" THEN TALLY:=1; 04770000 + SI:=SI+8;IF SC!"0" THEN TALLY:=1; 04780000 + A:=TALLY; 04790000 + END; 04800000 + IF P THEN REMOVE(0); 04810000 + END; 04820000 + FOR I~28 STEP -2 UNTIL 0 DO 04830000 + IF LABELS[I]=@114 THEN GO QUIT ELSE 04840000 + IF LABELS[I]!@14 THEN 04850000 + IF RTI LEQ 0 THEN GO ON ELSE 04851000 + IF P(LOOKFOR(LABELS[I],LABELS[I+1])) 04852000 + THEN BEGIN 04853000 + STREAM(A:=[LABELS[I]],B:=[MESSAGE[59]]); 04854000 + BEGIN SI:=A; SI:=SI+1; DS:=7CHR; 04855000 + DI:=DI+1; SI:=SI+1; DS:=7CHR; 04856000 + END; 04856500 + LABELS[I]:=@14; 04856600 + IF NOT(P1IO OR P2IO) THEN 04856650 + IF NOT SPOIO THEN ELSE 04856670 + IO(MESSAGE INX 59,@740000000000000) 04856700 + ELSE 04856750 + IO(MESSAGE INX 59,IF P1IO THEN 04856760 + @540030004000000 ELSE 04856770 + @640030004000000); 04856780 + END 04857000 + ELSE 04858000 +ON: BEGIN 04860000 + IF (LABELS[I] EQV "DECK ")=NOT 0 THEN 04869000 + BEGIN 04869200 + IF NOT HARD THEN BEGIN 04869400 + IF SPOIO THEN 04869500 + BEGIN 04869550 + SPOUT(20); KEYIN(20); 04869600 + RD:=OK([MESSAGE[20]] INX 0); 04869800 + HARD:=TRUE; 04870000 + END; 04870100 + END; 04870200 + IF RD THEN 04870400 + IF ((LABELS[I+1] AND @77000000007777) EQV 04880000 + @12000000003714)=NOT 0 THEN 04890000 + BEGIN 04900000 + LABELS[I+1]~(P(DUP,LOD) AND 04910000 + @77777777770000) OR @6060; 04920000 + REMOVE(2); 04930000 + END; 04935000 + END; 04940000 + SKEDTOG:=LABELS[I].[6:24]="FILE" AND 04941000 + (LABELS[I+1] EQV "SCHEDUL")=NOT 0; 04942000 + FILEH := ((NUMWDS:=I|15)INX FILEX)&30[8:38:10];04950000 + K:= 04959000 + FILEH[9]:=(*P(DUP)) AND 31; 04960000 + STREAM(T~0:FILEH); 04970000 + BEGIN SI~FILEH; 30(IF SB THEN BEGIN TALLY~1; 04980000 + JUMP OUT END ELSE SI~SI+8); T~TALLY; 04990000 + END; 05000000 + IF P OR(K GTR 20) THEN REMOVE(1); 05010000 + FOR T:=K+9 STEP -1 UNTIL 10 DO 05020000 + IF (DY:=FILEH[T]) NEQ 0 THEN 05030000 + IF DY GEQ TYPE OR 05040000 + (DY LEQ YR AND DY GTR MN) THEN REMOVE(1); 05050000 + DY:=0; 05059000 + FOR T:=10 STEP 1 UNTIL 29 DO 05060000 + BEGIN 05061000 + DY:=DY+(XY:=(FILEH[T] NEQ 0)); 05062000 + IF T GEQ K+10 THEN IF XY THEN T:=31; 05063000 + END; 05064000 + IF ((T=31) OR (DY GTR K) AND NOT SKEDTOG) OR 05065000 + (DY NEQ 0 AND FILEH[8]=0) THEN REMOVE(1); 05070000 +%********** RECONSTRUCT BAD HEADERS ********** 05070005 + IF (HDR0:=FILEH[0]).[1:14]=0 OR BLOCKSIZE=0 OR 05070010 + RECSPERBLOCK=0 OR SEGSPERBLOCK=0 THEN 05070020 + BEGIN 05070030 + IF NOT HARC THEN BEGIN 05070040 + IF SPOIO THEN 05070045 + BEGIN 05070047 + SPOUT(40); KEYIN(40); 05070050 + RC:=OK([MESSAGE[40]] INX 0); 05070060 + HARC:=TRUE; 05070070 + END; 05070075 + END; 05070080 + IF RC THEN 05070090 + BEGIN IF SEGSPERBLOCK=0 THEN 05070100 + BEGIN IF RECSPERBLOCK=0 THEN 05070110 + BEGIN 05070120 + IF RECSIZE=0 THEN GO PUNT; 05070130 + IF BLOCKSIZE=0 THEN GO PUNT; 05070140 + RECSPERBLOCK:=BLOCKSIZE DIV RECSIZE; 05070150 + SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30; 05070160 + END 05070170 + ELSE 05070180 + BEGIN 05070190 + IF BLOCKSIZE=0 THEN 05070200 + IF RECSIZE=0 THEN GO PUNT 05070210 + ELSE 05070220 + BEGIN BLOCKSIZE:=RECSPERBLOCK|RECSIZE; 05070230 + SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30;05070240 + END 05070250 + ELSE 05070260 + BEGIN 05070270 + RECSIZE:=BLOCKSIZE DIV RECSPERBLOCK; 05070280 + SEGSPERBLOCK:=(BLOCKSIZE+29) DIV 30; 05070290 + END 05070300 + END 05070310 + END 05070320 + ELSE 05070330 + BEGIN 05070340 + BLOCKSIZE:=SEGSPERBLOCK | 30; 05070350 + IF RECSIZE=0 THEN 05070360 + IF RECSPERBLOCK=0 THEN GO PUNT 05070370 + ELSE 05070380 + RECSIZE:=BLOCKSIZE DIV RECSPERBLOCK 05070385 + ELSE RECSPERBLOCK:=BLOCKSIZE DIV RECSIZE; 05070390 + END; 05070400 + FILEH[0]:=HDR0; 05070405 + GO ARND; 05070410 +PUNT: BLOCKSIZE:=30; 05070420 + RECSIZE:=30; 05070425 + RECSPERBLOCK:=1; 05070430 + SEGSPERBLOCK:=1; 05070435 + FILEH[0]:=HDR0; 05070440 +ARND: 05070450 + IF NUMWDS NEQ 0 THEN ESUTEMP:=FILEX[NUMWDS-1]; 05070452 + DISKIO(J-15+(I DIV 2),FILEX[NUMWDS]); 05070454 + IF NUMWDS NEQ 0 THEN FILEX[NUMWDS-1]:=ESUTEMP; 05070456 + END; 05070460 + STREAM(A:=[LABELS[I]],BS:=BLOCKSIZE,RS:=RECSIZE,RPB:=RECSPERBLOCK, 05070470 + SPB:=SEGSPERBLOCK,SV:=0,B:=[MESSAGE[45]]); 05070480 + BEGIN SI:=A; SI:=SI+1; DI:=B; DS:=7CHR; DI:=DI+1; SI:=SI+1; 05070490 + DS:=7CHR; DI:=DI+8; SI:=LOC BS; DS:=5DEC; SV:=DI; DI:=DI-5; 05070500 + DS:=4FILL; DI:=SV; DI:=DI+8; DS:=5DEC; SV:=DI; DI:=DI-5; 05070510 + DS:=4FILL; DI:=SV; DI:=DI+6; DS:=4DEC; SV:=DI; DI:=DI-4; 05070520 + DS:=3FILL; DI:=SV; DI:=DI+6; DS:=2DEC; DI:=DI-2; DS:=FILL; 05070530 + END; 05070540 + IF NOT(P1IO OR P2IO) THEN IF NOT SPOIO THEN ELSE 05070550 + IO(MESSAGE INX 45,@740000000000000) ELSE 05070560 + IO(MESSAGE INX 45,IF P1IO THEN @540100004000000 05070570 + ELSE @640100004000000); 05070580 + END; 05070590 +%************* END RECONSTRUCTION CODE ********** 05070600 +REMOVED: 05071000 + END; 05080000 + DISKIO(J,LABELS); 05090000 + END; 05100000 + LABELS[0]~@114; 05110000 +QUIT: 05120000 + IF P1IO OR P2IO THEN IO(0,@440004000100000&(IF P1IO THEN 05120010 + @1 ELSE @2)[4:46:2]); 05120020 + $ POP OMIT 05120050 + DISKIO(J,LABELS); 05130000 + FOR I ~ 0 STEP 1 UNTIL 29 DO INFO[I] ~ 0; 05160000 + IF SPOIO THEN 05160100 + SPOUT(0); 05170000 + QX ~ 0; 05180000 + IO(LOADER,@240000540000000); 05190000 + IF QX ! 2 THEN 05200000 + STREAM(L~LOADER,A~16); BEGIN SI~L; DS~20 WDS END 05210000 + ELSE 05220000 + STREAM(LOADBUTTON,A~@20); BEGIN SI~LOADBUTTON;DS~15 WDS END;05230000 + P(0,STS,0,STF); 05240000 + GO TO TART; 05250000 DO UNTIL FALSE; 05260000 -END OF WARM LOADER. 05270000 \ No newline at end of file +END OF WARM LOADER. 05270000 diff --git a/SYMBOL/ESPOL.alg_m b/SYMBOL/ESPOL.alg_m index 9e799e1..55dd95c 100644 --- a/SYMBOL/ESPOL.alg_m +++ b/SYMBOL/ESPOL.alg_m @@ -3597,7 +3597,7 @@ FCR:= (LCR:=MKABS(TBUFF[9]))-9 END; 07025030 IDBIT ~ BOOID < ACLASS AND ACLASS < LABELID; 07047000 IF SCLASS = NAMEID THEN 07048000 BEGIN 07049000 - IF IDBIT THEN VARIABLE(FL); 07050000 + IF IDBIT THEN VARIABLE(FL) 07050000 ELSE 07051000 POL: IF ELCLASS = POLISHV THEN POLISHER(1) 07052000 ELSE ERR(IF ELCLASS=0 THEN 0 ELSE 123); 07053000 @@ -5977,7 +5977,7 @@ HF: 14382000 ERRORTOG~TRUE; 14443000 END; 14444000 END; 14445000 - G~(GT2+TAKE(J+1)).PURPT; 14446000 + G~(GT2~TAKE(J+1)).PURPT; 14446000 IF GT1.[2:8] ! STLABID|2+1 THEN 14447000 STACKHEAD[(0>2[12:12:36])MOD 125]~TAKE(J).LINK; 14448000 END UNTIL J~J-G{1; 14449000 diff --git a/tools/xem/ESPOLXEM.alg_m b/tools/xem/ESPOLXEM.alg_m index 911d0e5..353bf09 100644 --- a/tools/xem/ESPOLXEM.alg_m +++ b/tools/xem/ESPOLXEM.alg_m @@ -1,4 +1,3 @@ -$ RESET LIST 00000009120821PK %#######################################################################00005000=00001000= % 00010000=00001010= % B-5700 ESPOLXEM COMPILER 00015000 @@ -7004,12 +7003,13 @@ ANOTHER: 29240000 BEGIN 29322000 TVAR:= FL; 29324000 VARIABLE(TVAR); 29325000=07050000= - END; 29326000 + END 29326000 + ELSE 29328000=07051000= POL: 29330000=07052000= - IF ELCLASS = POLISHV THEN 29335000=07052000= - POLISHER(1) 29340000=07053000= - ELSE 29345000=07053000= - ERR(IF ELCLASS = 0 THEN 0 ELSE 123); 29350000=07053000= + IF ELCLASS = POLISHV THEN 29335000=07052000= + POLISHER(1) 29340000=07053000= + ELSE 29345000=07053000= + ERR(IF ELCLASS = 0 THEN 0 ELSE 123); 29350000=07053000= GO TO COMMON; 29355000=07054000= END; 29360000=07055000= IF SCLASS = REALARRAYID THEN 29365000=07056000= @@ -10818,7 +10818,7 @@ HF: BEGIN 47785000 BEGIN 48055000=14417000= REAL 48060000=14418000= NLOC, 48065000=14418000= - NLAB; 48070000=14418000= + NLAB; 48070000=14418000= DEFINE 48075000=14419000= SES = 18 #, 48080000=14419000= SED = 6 #, 48085000=14419000= @@ -10853,7 +10853,7 @@ HF: BEGIN 47785000 ERRORTOG:= TRUE; 48230000=14443000= END; 48235000=14444000= END; 48240000=14445000= - G:= (GT2+TAKE(J+1)).PURPT; 48245000=14446000= + G:= (GT2:= TAKE(J+1)).PURPT; 48245000=14446000= IF GT1.[45:8] ^= STLABID*2+1 THEN 48250000=14447000= STACKHEAD[(0 & GT2[35:35:36]) MOD 125]:= TAKE(J).LINK; 48255000=14448000= END 48260000=14449000= @@ -11471,8 +11471,8 @@ COMMENT DO LABEL DECS UPON APPEARANCE OF LABEL ; 51265000 LFTPAREN = LEFTPAREN #, 51340000=16003000= LOC = [11:12] #, 51345000=16003000= LASTGT = [23:12] #, 51350000=16004000= - LOCFLD = 36:36:12 #, 51355000=16004000= - LGTFLD = 24:24:12 #; 51360000=16004000= + LOCFLD = 11:11:12 #, 51355000=16004000= + LGTFLD = 23:23:12 #; 51360000=16004000= DEFINE 51365000=16005000= LEVEL = LVL #, 51370000=16005000= ADDOP = ADOP #; 51375000=16005000=