$ 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