mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-02 17:44:40 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
1727 lines
136 KiB
Plaintext
1727 lines
136 KiB
Plaintext
BEGIN 00000100
|
|
COMMENT CUBE LIBRARY VERSION 11/20/68 00000101
|
|
CUBE LIBRARY NUMBER Q000006 00000102
|
|
SOURCE FILE NAME LIBMAKE/Q000006 00000103
|
|
PROGRAM NAME LIBTAPE/MAKER; 00000104
|
|
COMMENT FOR A DESCRIPTION OF HOW TO USE THIS PROGRAM WRITE TO: 00000200
|
|
COMPUTER CENTER 00000300
|
|
WESTINGHOUSE RESEARCH AND DEVELOPMENT CENTER 00000400
|
|
BEULAH ROAD 00000500
|
|
PITTSBURGH,PENNSYLVANIA 15235 00000600
|
|
-- AND REQUEST RESEARCH MEMO 67-1C4-COMP-M85 00000700
|
|
"PROGRAMMATIC LIBRARY TAPE MAINTENANCE ON THE B-5500"; 00000800
|
|
INTEGER COMSW; 00000900
|
|
INTEGER DUMNDX; 00001000
|
|
INTEGER NPRIN,NPR; ARRAY PRIN[0:511,0:14]; 00001100
|
|
BOOLEAN CODEFILE,TWOT,CHECKTAPE,ONET; 00001200
|
|
FILE IN CARD(2,10,30); 00001300
|
|
FILE IN TAPE 2(1,1023); 00001400
|
|
FILE OUT NEWTAP2 2(1,1023,SAVE 999); 00001500
|
|
FILE OUT NEWTAPE 2(1,1023,SAVE 999); 00001600
|
|
FILE SCRATCH DISK SERIAL [20:30](2,10,30); 00001700
|
|
00001800
|
|
00001900
|
|
ARRAY TRFAR[0:14]; 00002000
|
|
LABEL ENOF,PARI; 00002100
|
|
LABEL DONEREAD; 00002200
|
|
DEFINE PRINTER=PRIN[NPRIN~NPRIN+1,*]#; FILE OUT PRINT 4(2,15); 00002300
|
|
INTEGER ADDR,LEN; 00002400
|
|
INTEGER TEM, ECT, COUNT, TAPNDX, NEWTAPENAME, N, TAPENAME, NDX, 00002500
|
|
MFID, T, J, FID, TE, I, NX , 00002600
|
|
TU, 00002700
|
|
FNDX,TFID,LASTFILE, 00002800
|
|
ERRCOUNT,R, 00002900
|
|
ND; 00003000
|
|
ARRAY RESERV[0:15],ID[0:10],DIR[0:1022],EXCPT[0:60], 00003100
|
|
DUMMY[0:10], 00003200
|
|
ZEROF[0:29], 00003300
|
|
NEWDIR[0:1022], FILARR[0:5], EX[0:30], 00003400
|
|
STORE[0:1], 00003500
|
|
HED[0:30], TAPEINFO[0:199,0:2]; 00003600
|
|
REAL CHRGNO; 00003700
|
|
BOOLEAN PROCEDURE DIRECTORYSEARCH(P,S,H);VALUE P,S; 00003800
|
|
ALPHA P,S; ARRAY H[0]; 00003900
|
|
BEGIN BOOLEAN FF; 00004000
|
|
INTEGER N,RL,BL; 00004100
|
|
INTEGER STREAM PROCEDURE SIZE(A); 00004200
|
|
BEGIN SI~LOC A; DI~LOC SIZE;DI~DI+6;SI~SI+1; 00004300
|
|
DS~NUM; DS~CHR; 00004400
|
|
END; 00004500
|
|
STREAM PROCEDURE MOVEHDR(B,H,N,F); VALUE N; 00004600
|
|
BEGIN SI~F;SI~SI-24;DI~LOC F;DS~WDS; 00004700
|
|
SI~F;SI~SI+56;SI~SI+56;DI~LOC F;DS~WDS; 00004800
|
|
SI~F;DI~H;DS~N WDS; 00004900
|
|
END MOVEHDR; 00005000
|
|
LABEL START; 00005100
|
|
RL~BL~10; 00005200
|
|
START: BEGIN FILE OUT DF DISK(1,RL,BL); 00005300
|
|
FILL DF WITH P,S; 00005400
|
|
IF FF THEN 00005500
|
|
BEGIN IF(N~SIZE(H))>30 THEN N~30; 00005600
|
|
MOVEHDR(DF(0),H,N,DF); 00005700
|
|
FF ~ FALSE; 00005800
|
|
END ELSE 00005900
|
|
BEGIN SEARCH(DF,H[*]); 00006000
|
|
DIRECTORYSEARCH ~ FF ~ H[0] > 0; 00006100
|
|
RL ~ H[3]; BL ~ H[4]; 00006200
|
|
END; 00006300
|
|
END; 00006400
|
|
IF FF THEN GO TO START; 00006500
|
|
END DIRECTORYSEARCH; 00006600
|
|
BOOLEAN PROCEDURE DIRECTORYSCAN(MFID,FID,HEADER,TEST); 00006700
|
|
ALPHA MFID, FID; 00006800
|
|
ARRAY HEADER[0]; 00006900
|
|
BOOLEAN TEST; 00007000
|
|
BEGIN 00007100
|
|
OWN BOOLEAN FTOG; 00007200
|
|
FILE OUT DUMMY DISK[1: 1](1, 480); 00007300
|
|
OWN ARRAY AREA[0:480]; 00007400
|
|
OWN INTEGER SEG,ROW; 00007500
|
|
INTEGER SIZE,DESADD,BUFADD; 00007600
|
|
LABEL START, LOOP, GOTONE, EOF; 00007700
|
|
INTEGER STREAM PROCEDURE ABSADD(DES); 00007800
|
|
BEGIN 00007900
|
|
SI~ DES; 00008000
|
|
ABSADD~ SI 00008100
|
|
END; 00008200
|
|
STREAM PROCEDURE DISKREAD(DISK, DES, BUF, O); 00008300
|
|
VALUE DISK, DES, BUF; 00008400
|
|
BEGIN 00008500
|
|
SI~ DES; 00008600
|
|
DI~ O; 00008700
|
|
DS~ WDS; 00008800
|
|
SI~ LOC BUF; 00008900
|
|
DI~ DES; 00009000
|
|
DS~ WDS; 00009100
|
|
DI~ DES; 00009200
|
|
DS~ 5 LIT "RP|AK"; 00009300
|
|
DS~ 3 RESET; 00009400
|
|
SI~ LOC DISK; 00009500
|
|
DI~ BUF; 00009600
|
|
DS~ 8 DEC 00009700
|
|
END; 00009800
|
|
STREAM PROCEDURE EVOM(A, B, C, D); 00009900
|
|
VALUE B, C; 00010000
|
|
BEGIN 00010100
|
|
SI~ A; 00010200
|
|
DI~ B; 00010300
|
|
DS~ WDS; 00010400
|
|
SI~ C; 00010500
|
|
SI~ SI+8; 00010600
|
|
DI~ D; 00010700
|
|
8(DS~ 60 WDS) 00010800
|
|
END; 00010900
|
|
STREAM PROCEDURE MOVE(A, B, C); 00011000
|
|
VALUE C; 00011100
|
|
BEGIN 00011200
|
|
SI~ A; 00011300
|
|
DI~ B; 00011400
|
|
DS~ C WDS 00011500
|
|
END; 00011600
|
|
INTEGER STREAM PROCEDURE LNGTH(A); 00011700
|
|
BEGIN 00011800
|
|
SI~ LOC A; 00011900
|
|
DI~ LOC LNGTH; 00012000
|
|
SI~ SI+1; 00012100
|
|
DI~ DI+6; 00012200
|
|
DS~ NUM; 00012300
|
|
DS~ CHR 00012400
|
|
END; 00012500
|
|
IF SIZE~LNGTH(HEADER)>30 THEN SIZE ~ 30; 00012600
|
|
IF FTOG THEN GO TO LOOP; 00012700
|
|
FTOG ~ TRUE; 00012800
|
|
SEG~ 987; 00012900
|
|
START: 00013000
|
|
BUFADD~ ABSADD(DUMMY(0))-1; 00013100
|
|
DESADD~ ABSADD(DUMMY); 00013200
|
|
DISKREAD(SEG~ SEG+16, DESADD, BUFADD, AREA[480]); 00013300
|
|
RELEASE(DUMMY); 00013400
|
|
WAIT(DESADD,(0&1[2:47:1])); 00013500
|
|
ROW~ 480; 00013600
|
|
EVOM(AREA[480], DESADD, BUFADD, AREA[0]); 00013700
|
|
FOR ROW~ ROW-2 STEP -2 UNTIL 450 DO 00013800
|
|
BEGIN 00013900
|
|
IF REAL(BOOLEAN(MFID~AREA[ROW])EQV BOOLEAN( 76 ) )=REAL(NOT FALSE) 00014000
|
|
THEN GO TO EOF; 00014100
|
|
IF REAL(BOOLEAN(MFID)EQV BOOLEAN(12 ))=REAL(NOT FALSE)THEN GO LOOP; 00014200
|
|
IF(FID~AREA[ROW+1]).[36:6]="~" THEN GO TO LOOP; 00014300
|
|
FID ~ AREA[ROW+1]; 00014400
|
|
MOVE(AREA[(ROW-450)|15],HEADER[0],SIZE); 00014500
|
|
IF (DIRECTORYSCAN ~ TEST) THEN 00014600
|
|
GO TO GOTONE; 00014700
|
|
LOOP: 00014800
|
|
END; 00014900
|
|
GO TO START; 00015000
|
|
EOF: 00015100
|
|
FTOG ~ FALSE; 00015200
|
|
GOTONE: 00015300
|
|
END; 00015400
|
|
SAVE ARRAY INFO[0:900],ACARD[0:10]; 00015500
|
|
BOOLEAN NTPROC,MAK; 00015600
|
|
LABEL PAR,EOF; 00015700
|
|
LABEL MAKTAPE, AFTERSEMI,ERR,PROCDISK,PROCTAPE, EXIT; 00015800
|
|
BOOLEAN JTOG, ITOG, NOTRED; 00015900
|
|
INTEGER INITADDR; 00016000
|
|
DEFINE C=COUNT#; 00016100
|
|
DEFINE 00016200
|
|
MAKE =1 #, 00016300
|
|
DISPLAY=2 #, 00016400
|
|
FROM =3 #, 00016500
|
|
DISKK =4 #, 00016600
|
|
ALL =5 #, 00016700
|
|
EXCEPT =6 #, 00016800
|
|
IDENT =7 #, 00016900
|
|
COLON =8 #, 00017000
|
|
SEMI =9 #, 00017100
|
|
EQUAL =10#, 00017200
|
|
SLASH =11#, 00017300
|
|
COMMA =12#, 00017400
|
|
ERRR =13#, 00017500
|
|
ENDOFI =14#, 00017600
|
|
ASTER=15#, 00017700
|
|
LPAR=16#, 00017800
|
|
RPAR=17#; 00017900
|
|
BOOLEAN STREAM PROCEDURE LABELOK(SOURCE,MFID,FID); 00018000
|
|
BEGIN 00018100
|
|
LOCAL T; LABEL FIN; 00018200
|
|
SI~SOURCE; 00018300
|
|
DI~LOC T; DS~8 LIT " LABEL "; 00018400
|
|
DI~DI-8; IF 8 SC=DC THEN 00018500
|
|
BEGIN DI~MFID; IF 8 SC=DC THEN 00018600
|
|
BEGIN DI~FID; IF 8 SC=DC THEN 00018700
|
|
BEGIN TALLY~1; GO FIN 00018800
|
|
END 00018900
|
|
END; 00019000
|
|
END; 00019100
|
|
FIN: LABELOK~TALLY 00019200
|
|
END; 00019300
|
|
BOOLEAN STREAM PROCEDURE ZEROHED(A,B); 00019400
|
|
BEGIN LABEL EXIT; 00019500
|
|
SI~A; DI~B; 30(IF 8 SC!DC THEN JUMP OUT TO EXIT);TALLY~1; 00019600
|
|
EXIT: ZEROHED~TALLY END; 00019700
|
|
STREAM PROCEDURE RENAME(A,B,N); 00019800
|
|
BEGIN SI~B; DI~A; DS~5 CHR; SI~N; DS~3 DEC END; 00019900
|
|
INTEGER STREAM PROCEDURE PREFIX(M); VALUE M; 00020000
|
|
BEGIN 00020100
|
|
SI~LOC M; DI~LOC PREFIX; DI~DI+6; 00020200
|
|
IF SC="1" THEN DS~LIT"*" 00020300
|
|
ELSE IF SC="0" THEN DS~LIT" " 00020400
|
|
ELSE DS~LIT"-"; 00020500
|
|
SI~SI+1; 00020600
|
|
DS~CHR 00020700
|
|
END; 00020800
|
|
PROCEDURE DISPLAYHEADER(MFID,FID); 00020900
|
|
VALUE MFID,FID; 00021000
|
|
INTEGER MFID,FID; 00021100
|
|
BEGIN 00021200
|
|
DEFINE H=HED#; 00021300
|
|
INTEGER AREASIZE,YRC,DAYC,MC,YRA,DAYA,MA,AREAS,J; %DU 00021400
|
|
REAL TMP2,YRTMP,T,TMP; 00021500
|
|
BOOLEAN INTERLOCKFLAG,NOCS; 00021600
|
|
FORMAT FMT1(A2,A6"/"A1,A6"= "A1,A6" ["I2":"I5"] ("I4","I4", SV", 00021700
|
|
I4") ["I5"] "A3,I3 ", 19"I2" ("A3,I3 ") AREA "I2 00021800
|
|
"("I6")"A2,A1,I7), 00021900
|
|
FMT2(A2,A6"/"A1,A6" CONSISTS ONLY OF A ZERO HEADER"); 00022000
|
|
ALPHA ARRAY MONTH[0:11]; 00022100
|
|
ALPHA STREAM PROCEDURE OCV(OCTL); %DU 00022105
|
|
BEGIN LOCAL ALF; %DU 00022110
|
|
SI:=OCTL;DI:=LOC ALF;DS:=8 DEC;SI:=LOC ALF; %DU 00022115
|
|
DI:=LOC OCV;DS:=WDS; %DU 00022120
|
|
END OCV; %DU 00022125
|
|
FILL MONTH[*] WITH 00022200
|
|
"MAR","APR","MAY","JUN","JUL","AUG","SEP", 00022300
|
|
"OCT","NOV","DEC","JAN","FEB"; 00022400
|
|
IF ZEROHED(H,ZEROF) THEN WRITE(PRINTER,FMT2,PREFIX(MFID), 00022500
|
|
MFID,FID.[6:6],FID) ELSE 00022600
|
|
BEGIN 00022700
|
|
AREASIZE~H[0].[30:12] | H[8] DIV H[0].[42:6]; 00022800
|
|
IF H[3].[1:1] NEQ 1 THEN TMP2:=H[3] %DU 00022900
|
|
ELSE BEGIN J:=H[3].[12:18];TMP2:=OCV(J);END; %DU 00022905
|
|
IF(YRC~10|TMP2.[18:6]+TMP2.[24:6]) MOD 4.0=0 THEN 00023000
|
|
YRTMP~366.0 ELSE YRTMP~365.0; 00023100
|
|
DAYC~10|TMP2.[36:6]+TMP2.[30:6]|100+TMP2.[42:6]; 00023200
|
|
MC~(T~(DAYC+305.0) MOD YRTMP+0.5) DIV 30.6; 00023300
|
|
DAYC~T MOD 30.6 +0.5 ; 00023400
|
|
IF H[3].[1:1] NEQ 1 THEN TMP2:=H[4] %DU 00023500
|
|
ELSE BEGIN J:=H[3].[30:18];TMP2:=OCV(J);END; %DU 00023505
|
|
IF(YRA~10|TMP2.[18:6] + TMP2.[24:6]) MOD 4.0=0 THEN %DU 00023600
|
|
YRTMP~366.0 ELSE YRTMP~365.0; 00023700
|
|
DAYA~ 10| TMP2.[36:6] + TMP2.[30:6]| 100 +TMP2.[42:6]; %DU 00023800
|
|
MA~(T~(DAYA+305.0) MOD YRTMP +0.5) DIV 30.6; 00023900
|
|
DAYA~ T MOD 30.6 +0.5; 00024000
|
|
INTERLOCKFLAG~BOOLEAN(H[4].[2:1]); 00024100
|
|
NOCS~ REAL(NOT BOOLEAN(H[6]))=REAL(NOT FALSE); 00024200
|
|
AREAS~0; 00024300
|
|
FOR I~10 STEP 1 UNTIL 29 DO 00024400
|
|
IF HED[I]>0 THEN AREAS~AREAS+1; 00024500
|
|
WRITE(PRINTER,FMT1, 00024600
|
|
PREFIX(MFID), MFID, FID.[6:6], FID, 00024700
|
|
(TMP~ HED[6]).[6:6], TMP, HED[9], AREASIZE, 00024800
|
|
HED[0].[1:14], HED[0].[15:15], HED[3].[2:10], HED[7], %DU 00024900
|
|
MONTH[MC], DAYC, YRC, MONTH[MA], DAYA, AREAS , 00025000
|
|
HED[8], IF INTERLOCKFLAG THEN " *" ELSE " ", 00025100
|
|
IF NOCS THEN "#" ELSE " ", AREAS|HED[8]); 00025200
|
|
END 00025300
|
|
END DISPLAYHEADER; 00025400
|
|
INTEGER STREAM PROCEDURE GETADD(WORD); 00025500
|
|
BEGIN SI~WORD; GETADD~SI END; 00025600
|
|
STREAM PROCEDURE PUTINFO(WORD); 00025700
|
|
BEGIN DI~WORD; DS~LIT "."; DS~ LIT """; DS~LIT "." END; 00025800
|
|
STREAM PROCEDURE UNLABEL (F); 00025900
|
|
BEGIN 00026000
|
|
SI~F; SI~SI-24; DI~LOC F; DS~WDS; 00026100
|
|
DI~F; DI~DI+32; SKIP 2 DB; DS~SET 00026200
|
|
END; 00026300
|
|
STREAM PROCEDURE LABELF(F); 00026400
|
|
BEGIN 00026500
|
|
SI~F; SI~SI-24; DI~LOC F; DS~WDS; 00026600
|
|
DI~F; DI~DI+32; SKIP 2 DB; DS~RESET; 00026700
|
|
END; 00026800
|
|
REAL PROCEDURE SCAN; 00026900
|
|
BEGIN 00027000
|
|
LABEL ZERO,ONE,TWO,START,EOF; 00027100
|
|
SWITCH TYPESW~ ZERO,ONE,TWO ; 00027200
|
|
INTEGER I,TYPE; 00027300
|
|
INTEGER STREAM PROCEDURE SCANN(LEN,TYPE,DEST,ADDR); VALUE ADDR; 00027400
|
|
BEGIN LABEL L,L1,L2; 00027500
|
|
SI~ADDR;DI~DEST;DI~DI+1; 00027600
|
|
L:IF SC=" " THEN BEGIN SI~SI+1;GO L END; 00027700
|
|
IF SC=ALPHA THEN 00027800
|
|
BEGIN 00027900
|
|
DS~CHR;TALLY~1; 00028000
|
|
L1:IF SC=ALPHA THEN 00028100
|
|
BEGIN DS~CHR;TALLY~TALLY+1;GO L1 END; 00028200
|
|
DS~8 LIT " ";SCANN~SI; 00028300
|
|
ADDR~TALLY;DI~LEN;SI~LOC ADDR;DS~WDS; 00028400
|
|
TALLY~1;ADDR~TALLY;DI~TYPE;SI~LOC ADDR;DS~WDS; 00028500
|
|
END ELSE 00028600
|
|
IF SC=""" THEN 00028700
|
|
BEGIN SI~SI+1; 00028800
|
|
L2:IF SC!""" THEN 00028900
|
|
BEGIN DS~CHR;TALLY~TALLY+1;GO L2 END; 00029000
|
|
SI~SI+1;DS~8 LIT " ";SCANN~SI; 00029100
|
|
ADDR~TALLY;DI~LEN;SI~LOC ADDR;DS~WDS; 00029200
|
|
TALLY~2;ADDR~TALLY;DI~TYPE;SI~LOC ADDR;DS~WDS; 00029300
|
|
END ELSE 00029400
|
|
BEGIN DI~LEN;DI~DI+7;DS~CHR;SCANN~SI; 00029500
|
|
TALLY~3;ADDR~TALLY;DI~TYPE;SI~LOC ADDR;DS~WDS 00029600
|
|
END 00029700
|
|
END SCANN; 00029800
|
|
START: 00029900
|
|
LEN~0; 00030000
|
|
ID[0]~0; 00030100
|
|
R~IDENT; 00030200
|
|
ADDR~ SCANN(LEN,TYPE,ID,ADDR); 00030300
|
|
GO TYPESW[TYPE]; 00030400
|
|
ZERO: IF LEN{7 THEN 00030500
|
|
BEGIN 00030600
|
|
R~-2; WHILE RESERV[R~R+2]!0 DO 00030700
|
|
IF REAL(BOOLEAN(RESERV[R]) EQV BOOLEAN(ID[0]))=REAL 00030800
|
|
(NOT FALSE 00030900
|
|
) THEN 00031000
|
|
BEGIN R~RESERV[R+1]; GO ONE END; 00031100
|
|
R~IDENT; 00031200
|
|
END; 00031300
|
|
GO ONE; 00031400
|
|
TWO: IF LEN="." THEN 00031500
|
|
BEGIN READ(SCRATCH,10,ACARD[*]) [EOF]; ADDR~INITADDR; 00031600
|
|
PUTINFO(ACARD[10]); 00031700
|
|
GO START; EOF: R~ENDOFI; GO ONE; 00031800
|
|
END; 00031900
|
|
R~ IF LEN="," THEN COMMA ELSE 00032000
|
|
IF LEN="/" THEN SLASH ELSE 00032100
|
|
IF LEN="*" THEN ASTER ELSE 00032200
|
|
IF LEN=";" THEN SEMI ELSE 00032300
|
|
IF LEN="=" THEN EQUAL ELSE 00032400
|
|
IF LEN=":" THEN COLON ELSE 00032500
|
|
IF LEN="(" THEN LPAR ELSE IF LEN=")" THEN RPAR ELSE ERRR; 00032600
|
|
ONE: SCAN~R; 00032700
|
|
END SCAN; 00032800
|
|
PROCEDURE ERROR(N); VALUE N; INTEGER N; 00032900
|
|
BEGIN 00033000
|
|
STREAM PROCEDURE BLANKK(A); 00033100
|
|
BEGIN DI~A; DS~8 LIT " "; SI~A; DS~4 WDS END; 00033200
|
|
SWITCH FORMAT SWHFI~ 00033300
|
|
("ZERO"), 00033400
|
|
("NO TAPENAME"), 00033500
|
|
("NO FROM"), 00033600
|
|
("NO COLON"), 00033700
|
|
("NO SLASH"), 00033800
|
|
("ALL EXCEPT MFID/"), 00033900
|
|
("ALL EXCEPT =/"), 00034000
|
|
("NO ID FOLLOWING *"), 00034100
|
|
("ALL EXCEPT"), 00034200
|
|
("ALL"), 00034300
|
|
("=/"), 00034400
|
|
("=/ID EXCEPT"), 00034500
|
|
("ID/= EXCEPT"), 00034600
|
|
("ID/= EXCEPT MFID/"), 00034700
|
|
("MFID/"), 00034800
|
|
("NOT DISK OR TN"), 00034900
|
|
("INC MESSAGE"), 00035000
|
|
("END OF FILE"), 00035100
|
|
("PARITY ERROR"), 00035200
|
|
("MISSING CHARGE NUMBER"), 00035300
|
|
("MISSING RIGHT PARENTHESIS"); 00035400
|
|
ERRCOUNT~ERRCOUNT+1; 00035500
|
|
BLANKK(PRIN[NPRIN+1,10]); 00035600
|
|
WRITE(PRINTER,10,ACARD[*]); 00035700
|
|
WRITE(PRINTER,SWHFI[N]); 00035800
|
|
IF R=SEMI THEN GO AFTERSEMI; 00035900
|
|
IF R=ENDOFI THEN GO EXIT; 00036000
|
|
WHILE TRUE DO 00036100
|
|
BEGIN 00036200
|
|
IF SCAN=SEMI THEN GO AFTERSEMI; 00036300
|
|
IF R=ENDOFI THEN GO EXIT 00036400
|
|
END; 00036500
|
|
END; 00036600
|
|
STREAM PROCEDURE MOVECHARACTERS(N,A,AC,B,BC); 00036700
|
|
VALUE N,AC,BC; 00036800
|
|
BEGIN SI~A; SI~SI+AC; DI~B; DI~DI+BC; DS~N CHR END; 00036900
|
|
STREAM PROCEDURE MOVE(N,A,B); VALUE N; 00037000
|
|
BEGIN SI~A; DI~B; DS~N WDS END; 00037100
|
|
PROCEDURE CHECKDUP(A,B); VALUE A,B; REAL A,B; 00037200
|
|
BEGIN 00037300
|
|
INTEGER CCNT,LIMIT; LABEL FIN; 00037400
|
|
FORMAT FMT1(A2,A6"/"A1,A6" DUPLICATED. THE LATTER FILE WILL BE ON TAPE")00037500
|
|
; 00037600
|
|
LIMIT~COUNT-1; 00037700
|
|
FOR CCNT~0 STEP 2 UNTIL LIMIT DO 00037800
|
|
BEGIN IF REAL(BOOLEAN(NEWDIR[CCNT]) EQV BOOLEAN(A))=REAL(NOT FALSE) 00037900
|
|
THEN IF REAL(BOOLEAN(NEWDIR[CCNT+1]) EQV BOOLEAN(B))=REAL(NOT FALSE) 00038000
|
|
THEN BEGIN MOVE(1,FILARR[2],NEWDIR[CCNT]); DUMNDX~DUMNDX+1; 00038100
|
|
RENAME(FILARR[3],FILARR[3],DUMNDX); 00038200
|
|
MOVE (1,FILARR[3],NEWDIR[CCNT+1]); 00038300
|
|
WRITE(PRINTER,FMT1,PREFIX(A),A,B.[6:6],B); 00038400
|
|
GO FIN END END 00038500
|
|
; FIN: END; 00038600
|
|
PROCEDURE LOOKFOR(M,N,O); INTEGER M,N,O; 00038700
|
|
BEGIN 00038800
|
|
DEFINE LOOKUP=REAL(BOOLEAN(M) EQV BOOLEAN(N))= REAL(NOT FALSE)#; 00038900
|
|
WHILE 00039000
|
|
DIRECTORYSCAN(STORE[0],STORE[1],HED,LOOKUP) DO 00039100
|
|
BEGIN 00039200
|
|
CHECKDUP(STORE[0],STORE[1]); 00039300
|
|
MOVE(2,STORE[0],NEWDIR[COUNT+1]); COUNT~COUNT+2; 00039400
|
|
END; 00039500
|
|
END; 00039600
|
|
PROCEDURE GETHEADER; 00039700
|
|
BEGIN 00039800
|
|
LABEL E; 00039900
|
|
RENAME(TFID,FILARR,FNDX); 00040000
|
|
READ(TAPE,10,DUMMY[*])[EOF:PAR]; 00040100
|
|
CLOSE(TAPE,*); 00040200
|
|
IF LABELOK(DUMMY,TAPENAME,TFID) THEN 00040300
|
|
BEGIN 00040400
|
|
READ(TAPE,30,HED[*])[EOF:PAR]; 00040500
|
|
WHILE TRUE DO SPACE(TAPE,1)[E:PAR]; 00040600
|
|
E: 00040700
|
|
CLOSE(TAPE,*); COMMENT GET PAST FILE AND TM; 00040800
|
|
SPACE(TAPE,1)[EOF:PAR]; 00040900
|
|
DISPLAYHEADER(DIR[J]&0[4:47:1],DIR[J+1]&0[4:47:1]); 00041000
|
|
END ELSE GO PAR 00041100
|
|
END ; 00041200
|
|
PROCEDURE GETDISHED; 00041300
|
|
BEGIN 00041400
|
|
INTEGER Z,I; LABEL EE1,EE2; 00041500
|
|
IF (Z~(FNDX-LASTFILE)-1)>0 THEN 00041600
|
|
BEGIN 00041700
|
|
FOR I~1 STEP 1 UNTIL Z DO 00041800
|
|
BEGIN 00041900
|
|
WHILE TRUE DO SPACE(TAPE,1)[EE1:PARI]; 00042000
|
|
EE1: CLOSE(TAPE,*); 00042100
|
|
WHILE TRUE DO SPACE(TAPE,1)[EE2:PARI]; 00042200
|
|
EE2: CLOSE(TAPE,*); 00042300
|
|
END; 00042400
|
|
SPACE(TAPE,1)[ENOF:PARI]; 00042500
|
|
END; 00042600
|
|
GETHEADER; 00042700
|
|
LASTFILE~FNDX 00042800
|
|
END; 00042900
|
|
PROCEDURE MARKINDIR; 00043000
|
|
BEGIN LABEL FIN; 00043100
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00043200
|
|
BEGIN 00043300
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(MFID))=REAL(NOT FALSE) THEN 00043400
|
|
IF REAL(BOOLEAN(DIR[J+1]) EQV BOOLEAN(ID[0])) 00043500
|
|
=REAL(NOT FALSE) THEN 00043600
|
|
BEGIN 00043700
|
|
DIR[J]~DIR[J]&1[4:47:1]; GO FIN; 00043800
|
|
END; 00043900
|
|
IF REAL(BOOLEAN(DIR[J])EQV BOOLEAN(12 ))=REAL(NOT FALSE) THEN GO FIN; 00044000
|
|
END; 00044100
|
|
FIN: END; 00044200
|
|
PROCEDURE ALLEXCEPT(MAK); VALUE MAK; BOOLEAN MAK; 00044300
|
|
BEGIN 00044400
|
|
LABEL IDE,II, HOPOUT,OUTHOP; 00044500
|
|
IF MAK THEN 00044600
|
|
BEGIN 00044700
|
|
FILL TAPE WITH TAPENAME,"FILE000"; 00044800
|
|
READ(TAPE,1023,DIR[*])[ENOF:PARI]; 00044900
|
|
CLOSE(TAPE,RELEASE); 00045000
|
|
END; 00045100
|
|
IDE: IF TEM~SCAN{7 THEN 00045200
|
|
BEGIN 00045300
|
|
COMMENT ALL EXCEPT ID/; 00045400
|
|
II: 00045500
|
|
MOVE(1,ID,MFID); 00045600
|
|
IF SCAN! SLASH THEN 00045700
|
|
ERROR(4); 00045800
|
|
IF T~SCAN{7 THEN 00045900
|
|
BEGIN IF MAK THEN 00046000
|
|
BEGIN MOVE(1,MFID,EXCPT[NDX~NDX+1]); 00046100
|
|
MOVE(1,ID,EXCPT[NDX~NDX+1]); 00046200
|
|
END ELSE MARKINDIR; 00046300
|
|
IF T~SCAN=COMMA THEN GO IDE 00046400
|
|
END ELSE 00046500
|
|
IF T=EQUAL THEN 00046600
|
|
BEGIN 00046700
|
|
COMMENT THIS HANDLES "ALL EXCEPT ID/="; 00046800
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00046900
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(MFID))= 00047000
|
|
REAL(NOT FALSE) THEN 00047100
|
|
BEGIN IF MAK THEN 00047200
|
|
BEGIN MOVE(1,MFID,EXCPT[NDX~NDX+1]); 00047300
|
|
MOVE(1,DIR[J+1],EXCPT[NDX~NDX+1]); 00047400
|
|
END ELSE DIR[J]~DIR[J]&1[4:47:1]; 00047500
|
|
END ELSE 00047600
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(12 )) =REAL(NOT FALSE) 00047700
|
|
THEN GO HOPOUT; 00047800
|
|
ERROR(4); 00047900
|
|
HOPOUT: IF T~SCAN=COMMA THEN GO IDE 00048000
|
|
END ELSE 00048100
|
|
ERROR(5); 00048200
|
|
END ELSE 00048300
|
|
IF TEM=EQUAL THEN 00048400
|
|
BEGIN 00048500
|
|
IF SCAN! SLASH THEN 00048600
|
|
COMMENT ALL EXCEPT =/ID; 00048700
|
|
IF SCAN> 7 THEN 00048800
|
|
ERROR(4); 00048900
|
|
ERROR(6); 00049000
|
|
MOVE(1,ID,FID); 00049100
|
|
FOR J~1 STEP 2 WHILE TRUE DO 00049200
|
|
BEGIN 00049300
|
|
IF REAL(BOOLEAN(DIR[J-1]) EQV BOOLEAN(12 )) =REAL(NOT FALSE) 00049400
|
|
THEN GO OUTHOP; 00049500
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(FID))= 00049600
|
|
REAL(NOT FALSE) THEN 00049700
|
|
BEGIN IF MAK THEN 00049800
|
|
BEGIN MOVE(1,DIR[J-1],EXCPT[NDX~NDX+1]); 00049900
|
|
MOVE(1,FID,EXCPT[NDX~NDX+1]); 00050000
|
|
END ELSE DIR[J-1]~DIR[J-1]&1[4 :47:1 ]; 00050100
|
|
END END; 00050200
|
|
OUTHOP: IF T~SCAN=COMMA THEN GO IDE 00050300
|
|
END ELSE 00050400
|
|
IF TEM=ASTER THEN BEGIN IF TEM~SCAN>7 THEN 00050500
|
|
ERROR(7); 00050600
|
|
ID[0]~ID[0]&1[5:47:1]; GO II END ELSE 00050700
|
|
ERROR(8); 00050800
|
|
END; 00050900
|
|
PROCEDURE EQIDEXD(MAK);VALUE MAK; BOOLEAN MAK; 00051000
|
|
BEGIN 00051100
|
|
LABEL LOP,LK; 00051200
|
|
IF TU~SCAN>7 THEN 00051300
|
|
IF TU=ASTER THEN BEGIN IF SCAN>7 THEN 00051400
|
|
ERROR(7); 00051500
|
|
ID[0]~ID[0]&1[5:47:1] END ELSE 00051600
|
|
ERROR(12); 00051700
|
|
ND~0; 00051800
|
|
LOP: MOVE(1,ID,MFID); 00051900
|
|
IF SCAN!SLASH THEN 00052000
|
|
ERROR(4); 00052100
|
|
IF TE~ SCAN { 7 THEN 00052200
|
|
IF REAL(BOOLEAN(ID[0]) EQV BOOLEAN(FID))=REAL(NOT FALSE) THEN 00052300
|
|
BEGIN 00052400
|
|
MOVE(1,MFID,EX[ND~ND+1]); 00052500
|
|
IF T~SCAN=COMMA THEN 00052600
|
|
BEGIN IF TE~SCAN{7 THEN GO LOP; 00052700
|
|
IF TE=ASTER THEN IF TE~SCAN>7 THEN 00052800
|
|
ERROR(7) 00052900
|
|
ELSE BEGIN ID[0]~ID[0]&1[5:47:1] ; GO LOP END 00053000
|
|
END 00053100
|
|
END ELSE JTOG~TRUE ELSE ITOG~TRUE; 00053200
|
|
LK: IF DIRECTORYSCAN(STORE[0],STORE[1],HED,REAL(BOOLEAN(STORE[1]) 00053300
|
|
EQV BOOLEAN(FID)) = REAL(NOT FALSE)) THEN 00053400
|
|
BEGIN 00053500
|
|
FOR I~1 STEP 1 UNTIL ND DO 00053600
|
|
IF REAL(BOOLEAN(STORE[0]) EQV BOOLEAN(EX[I]))=REAL(NOT FALSE) 00053700
|
|
THEN GO LK; 00053800
|
|
IF MAK THEN 00053900
|
|
BEGIN 00054000
|
|
CHECKDUP(STORE[0],FID); 00054100
|
|
MOVE(1,STORE[0],NEWDIR[C~C+1]);MOVE(1,FID,NEWDIR[C~C+1]); 00054200
|
|
END ELSE DISPLAYHEADER(STORE[0],STORE[1]); 00054300
|
|
GO LK; 00054400
|
|
END; 00054500
|
|
END EQIDEXD; 00054600
|
|
PROCEDURE IDEQEXD(MAK); VALUE MAK; BOOLEAN MAK; 00054700
|
|
BEGIN 00054800
|
|
LABEL HERE,LOOK; 00054900
|
|
IF TU~SCAN>7 THEN 00055000
|
|
IF TU=ASTER THEN BEGIN IF SCAN>7 THEN 00055100
|
|
ERROR(7); 00055200
|
|
ID[0]~ID[0]&1[5:47:1] END ELSE 00055300
|
|
ERROR(12); 00055400
|
|
ND~0; 00055500
|
|
HERE: IF REAL(BOOLEAN(ID[0]) EQV BOOLEAN(MFID))=REAL(NOT FALSE) 00055600
|
|
THEN 00055700
|
|
BEGIN 00055800
|
|
IF SCAN!SLASH THEN 00055900
|
|
ERROR(4); 00056000
|
|
IF SCAN> 7 THEN 00056100
|
|
ERROR(13); 00056200
|
|
MOVE(1,ID,EX[ND~ND+1]); 00056300
|
|
IF T~SCAN=COMMA THEN 00056400
|
|
BEGIN IF TE~SCAN{7 THEN GO HERE; 00056500
|
|
IF TE=ASTER THEN IF SCAN>7 THEN 00056600
|
|
ERROR(7) 00056700
|
|
ELSE 00056800
|
|
BEGIN ID[0]~ID[0]&1[5:47:1]; GO HERE; 00056900
|
|
END 00057000
|
|
END; 00057100
|
|
END; 00057200
|
|
LOOK: IF DIRECTORYSCAN(STORE[0],STORE[1],HED, REAL(BOOLEAN(STORE[0]) 00057300
|
|
EQV BOOLEAN(MFID))=REAL(NOT FALSE)) THEN 00057400
|
|
BEGIN 00057500
|
|
FOR I~1 STEP 1 UNTIL ND DO 00057600
|
|
IF REAL(BOOLEAN(STORE[1]) EQV BOOLEAN(EX[I]))= 00057700
|
|
REAL(NOT FALSE) THEN GO LOOK; 00057800
|
|
IF MAK THEN 00057900
|
|
BEGIN 00058000
|
|
CHECKDUP(MFID,STORE[1]); 00058100
|
|
MOVE (1,MFID,NEWDIR[C~C+1]); MOVE(1,STORE[1],NEWDIR[C~C+1]); 00058200
|
|
END ELSE DISPLAYHEADER(STORE[0],STORE[1]); 00058300
|
|
GO LOOK 00058400
|
|
END; 00058500
|
|
END IDEQEXD; 00058600
|
|
PROCEDURE IDEQEX(MAK); VALUE MAK; BOOLEAN MAK; 00058700
|
|
BEGIN 00058800
|
|
LABEL LP1,F,HOUT; 00058900
|
|
NX~0; 00059000
|
|
IF TU~SCAN>7 THEN 00059100
|
|
IF TU=ASTER THEN BEGIN IF SCAN>7 THEN 00059200
|
|
ERROR(7); 00059300
|
|
ID[0]~ID[0]&1[5:47:1] END ELSE 00059400
|
|
ERROR(12); 00059500
|
|
LP1: IF REAL(BOOLEAN(MFID) EQV BOOLEAN(ID[0]))=REAL(NOT FALSE) 00059600
|
|
THEN 00059700
|
|
BEGIN 00059800
|
|
IF SCAN!SLASH THEN ERROR(4); 00059900
|
|
IF SCAN>7 THEN ERROR(13); 00060000
|
|
MOVE(1,ID,EX[NX~NX+1]); 00060100
|
|
IF T~SCAN=COMMA THEN BEGIN IF TEM~SCAN{7 THEN GO LP1; 00060200
|
|
IF TEM=ASTER THEN IF SCAN>7 THEN 00060300
|
|
ERROR(7) 00060400
|
|
ELSE BEGIN ID[0]~ID[0]&1[5:47:1]; GO LP1 END 00060500
|
|
END; 00060600
|
|
END; 00060700
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00060800
|
|
BEGIN 00060900
|
|
IF REAL(BOOLEAN(DIR[J])EQV BOOLEAN(MFID)) 00061000
|
|
=REAL(NOT FALSE) 00061100
|
|
THEN 00061200
|
|
BEGIN 00061300
|
|
FOR I~1 STEP 1 UNTIL NX DO 00061400
|
|
IF REAL(BOOLEAN(DIR[J+1]) EQV BOOLEAN(EX[I]))= 00061500
|
|
REAL(NOT FALSE) THEN GO F; 00061600
|
|
IF MAK THEN 00061700
|
|
BEGIN 00061800
|
|
CHECKDUP(MFID,DIR[J+1]); 00061900
|
|
MOVE(1,MFID,NEWDIR[C~C+1]);MOVE(1,DIR[J+1],NEWDIR[C~C+1]); 00062000
|
|
END ELSE DIR[J]~DIR[J]&1[4 :47:1 ]; 00062100
|
|
END ELSE 00062200
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(12 ))=REAL(NOT FALSE) 00062300
|
|
THEN GO HOUT ; 00062400
|
|
F: END; 00062500
|
|
HOUT: 00062600
|
|
END IDEQEX; 00062700
|
|
PROCEDURE EQIDEX(MAK); VALUE MAK; BOOLEAN MAK; 00062800
|
|
BEGIN 00062900
|
|
LABEL LP,GOUT,FIN; 00063000
|
|
IF TU~SCAN>7 THEN 00063100
|
|
IF TU=ASTER THEN BEGIN IF SCAN>7 THEN 00063200
|
|
ERROR(7); 00063300
|
|
ID[0]~ID[0]&1[5:47:1] END ELSE 00063400
|
|
ERROR(11); 00063500
|
|
NX~ 0 ; 00063600
|
|
LP: MOVE(1,ID,MFID); 00063700
|
|
IF SCAN!SLASH THEN 00063800
|
|
ERROR(4); 00063900
|
|
IF T~SCAN {7 THEN 00064000
|
|
IF REAL(BOOLEAN(ID[0]) EQV BOOLEAN(FID)) =REAL (NOT FALSE) 00064100
|
|
THEN 00064200
|
|
BEGIN MOVE (1,MFID,EX[NX~NX+1]); 00064300
|
|
IF T~SCAN=COMMA THEN BEGIN 00064400
|
|
IF TEM~SCAN{7 THEN GO LP; 00064500
|
|
IF TEM=ASTER THEN IF SCAN>7 THEN 00064600
|
|
ERROR(7) 00064700
|
|
ELSE BEGIN ID[0]~ID[0]&1[5:47:1]; GO 00064800
|
|
LP END 00064900
|
|
END END ELSE ITOG~TRUE ELSE JTOG~TRUE; 00065000
|
|
FOR J~1 STEP 2 WHILE TRUE DO 00065100
|
|
BEGIN 00065200
|
|
IF REAL(BOOLEAN(DIR[J-1]) EQV BOOLEAN(12 ))=REAL(NOT FALSE) 00065300
|
|
THEN GO GOUT; 00065400
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(FID)) = 00065500
|
|
REAL(NOT FALSE) THEN 00065600
|
|
BEGIN 00065700
|
|
FOR I~ 1 STEP 1 UNTIL NX DO 00065800
|
|
IF REAL(BOOLEAN(DIR[J-1]) EQV BOOLEAN(EX[I])) 00065900
|
|
= REAL(NOT FALSE) THEN GO FIN; 00066000
|
|
IF MAK THEN 00066100
|
|
BEGIN 00066200
|
|
CHECKDUP(DIR[J-1],FID); 00066300
|
|
MOVE(1,DIR[J-1],NEWDIR[COUNT~COUNT+1]); 00066400
|
|
MOVE(1,FID,NEWDIR[COUNT~COUNT+1]); 00066500
|
|
END ELSE DIR[J-1]~DIR[J-1]&1[4 :47:1 ]; 00066600
|
|
END; 00066700
|
|
FIN:END; 00066800
|
|
GOUT: END EQIDEX; 00066900
|
|
FILL RESERV[*] WITH 00067000
|
|
"MAKE ", 1, 00067100
|
|
"DISPLAY", 2, 00067200
|
|
"FROM ", 3, 00067300
|
|
"DISK ", 4, 00067400
|
|
"ALL ", 5, 00067500
|
|
"EXCEPT ", 6, 00067600
|
|
0; 00067700
|
|
FILL FILARR[*] WITH 00067800
|
|
"FILE000", 00067900
|
|
"ALL ", "DUMMY ", 00068000
|
|
"+FILE000"; 00068100
|
|
FOR I~0 STEP 1 UNTIL 29 DO ZEROF[I]~0; 00068200
|
|
COMMENT THE PROGRAM STARTS HERE; 00068300
|
|
MAK~ 00068400
|
|
CODEFILE~TWOT~CHECKTAPE~ 00068500
|
|
ITOG~JTOG~FALSE; 00068600
|
|
DUMNDX~-1; 00068700
|
|
NPRIN~-1; 00068800
|
|
CHRGNO~ 00068900
|
|
ERRCOUNT~0; 00069000
|
|
ADDR~ 00069100
|
|
INITADDR~GETADD(ACARD); 00069200
|
|
WHILE TRUE DO 00069300
|
|
BEGIN READ(CARD,10,ACARD[*])[DONEREAD]; 00069400
|
|
WRITE(SCRATCH,10,ACARD[*]); 00069500
|
|
END; 00069600
|
|
DONEREAD: REWIND(SCRATCH); CLOSE(CARD,RELEASE); 00069700
|
|
READ(SCRATCH,10,ACARD[*])[EOF]; 00069800
|
|
PUTINFO(ACARD[10]); 00069900
|
|
IF BOOLEAN(COMSW) THEN CODEFILE~TRUE; 00070000
|
|
IF BOOLEAN(COMSW.[46:1]) THEN TWOT~TRUE; 00070100
|
|
IF BOOLEAN(COMSW.[45:1]) THEN CHECKTAPE~TRUE; 00070200
|
|
ONET~TRUE; 00070300
|
|
IF TEM~SCAN=MAKE 00070400
|
|
THEN MAK~TRUE ELSE 00070500
|
|
IF TEM=DISPLAY THEN GO AFTERSEMI ELSE ERROR(0); 00070600
|
|
IF SCAN> 7 THEN 00070700
|
|
ERROR(1); 00070800
|
|
COUNT ~ -1; TAPNDX~0; 00070900
|
|
MOVE(1,ID,NEWTAPENAME); 00071000
|
|
AFTERSEMI: 00071100
|
|
IF T~SCAN!FROM THEN 00071200
|
|
IF T=ENDOFI THEN GO MAKTAPE ELSE ERROR(2); 00071300
|
|
N~ COUNT; 00071400
|
|
NTPROC~TRUE; 00071500
|
|
IF T~SCAN=DISKK THEN GO PROCDISK; 00071600
|
|
IF T>7 THEN 00071700
|
|
ERROR(15); 00071800
|
|
MOVE(1,ID,TAPENAME); IF SCAN!COLON THEN 00071900
|
|
ERROR(3); 00072000
|
|
IF NOT MAK THEN 00072100
|
|
BEGIN FILL TAPE WITH TAPENAME,FILARR[0]; 00072200
|
|
READ(TAPE,1023,DIR[*])[ENOF:PARI]; 00072300
|
|
CLOSE(TAPE,*); 00072400
|
|
END; 00072500
|
|
PROCTAPE: 00072600
|
|
BEGIN 00072700
|
|
LABEL HI,IDT,HH,HHH,HPOUT,LOOKFORSEMI,NT,G,TRY, 00072800
|
|
ISEMI, 00072900
|
|
HOUT,H,HPO, 00073000
|
|
SETAPINFO,GETOUT; 00073100
|
|
INTEGER Z; 00073200
|
|
NOTRED~TRUE; 00073300
|
|
NDX~-1; 00073400
|
|
IF TEM~SCAN=ALL THEN 00073500
|
|
BEGIN 00073600
|
|
IF T~SCAN=EXCEPT THEN 00073700
|
|
BEGIN IF MAK THEN BEGIN 00073800
|
|
ALLEXCEPT(TRUE); GO LOOKFORSEMI END ELSE 00073900
|
|
BEGIN 00074000
|
|
ALLEXCEPT(FALSE); 00074100
|
|
UNLABEL(TAPE); FNDX~0; 00074200
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00074300
|
|
BEGIN 00074400
|
|
FNDX~FNDX+1; 00074500
|
|
IF REAL(BOOLEAN(DIR[J])EQV BOOLEAN(12 ))=REAL(NOT FALSE) THEN GO HPOUT00074600
|
|
ELSE 00074700
|
|
IF NOT BOOLEAN(DIR[J].[4:1]) THEN 00074800
|
|
GETDISHED 00074900
|
|
END; 00075000
|
|
HPOUT: 00075100
|
|
CLOSE(TAPE,RELEASE); LABELF(TAPE); 00075200
|
|
GO LOOKFORSEMI; 00075300
|
|
END; 00075400
|
|
END; 00075500
|
|
IF T=SLASH THEN 00075600
|
|
BEGIN 00075700
|
|
COMMENT ALL MUST BE AN ID; 00075800
|
|
MOVE(1,FILARR[1],MFID); GO IDT 00075900
|
|
END 00076000
|
|
ELSE 00076100
|
|
BEGIN 00076200
|
|
COMMENT COPY ALL FILES; 00076300
|
|
IF MAK THEN 00076400
|
|
BEGIN FILL TAPE WITH TAPENAME,FILARR[0]; 00076500
|
|
READ(TAPE,1023,DIR[*])[ENOF:PARI]; 00076600
|
|
CLOSE(TAPE,RELEASE); 00076700
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00076800
|
|
IF REAL(BOOLEAN(DIR[ J]) EQV BOOLEAN(12 ))=REAL(NOT FALSE) 00076900
|
|
THEN GO SETAPINFO 00077000
|
|
ELSE 00077100
|
|
BEGIN 00077200
|
|
CHECKDUP(DIR[J],DIR[J+1]); 00077300
|
|
MOVE(2,DIR[J],NEWDIR[COUNT~COUNT+1]); 00077400
|
|
COUNT~COUNT+1; 00077500
|
|
END; 00077600
|
|
END ELSE 00077700
|
|
BEGIN 00077800
|
|
COMMENT DISPLAY ALL HEADERS; 00077900
|
|
UNLABEL(TAPE); FNDX~0; 00078000
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00078100
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(12 ))= REAL(NOT FALSE) 00078200
|
|
THEN GO HOUT 00078300
|
|
ELSE 00078400
|
|
BEGIN 00078500
|
|
FNDX~FNDX+1; 00078600
|
|
GETHEADER; 00078700
|
|
END; 00078800
|
|
HOUT: 00078900
|
|
CLOSE(TAPE,RELEASE); LABELF(TAPE); 00079000
|
|
GO LOOKFORSEMI END 00079100
|
|
END; 00079200
|
|
END ELSE 00079300
|
|
H: IF TEM=EQUAL THEN 00079400
|
|
BEGIN 00079500
|
|
COMMENT MUST BE =/ID; 00079600
|
|
IF SCAN!SLASH THEN 00079700
|
|
ERROR(4); 00079800
|
|
IF SCAN> 7 THEN 00079900
|
|
ERROR(10); 00080000
|
|
IF MAK THEN 00080100
|
|
IF NOTRED THEN 00080200
|
|
BEGIN FILL TAPE WITH TAPENAME,FILARR[0]; 00080300
|
|
READ(TAPE,1023,DIR[*])[ENOF:PARI]; 00080400
|
|
NOTRED~FALSE; CLOSE(TAPE,RELEASE); 00080500
|
|
END; 00080600
|
|
MOVE(1,ID,FID); 00080700
|
|
IF T ~ SCAN! EXCEPT THEN 00080800
|
|
BEGIN 00080900
|
|
COMMENT IT IS =/ID ONLY; 00081000
|
|
FOR J~1 STEP 2 WHILE TRUE DO 00081100
|
|
BEGIN 00081200
|
|
IF REAL(BOOLEAN(DIR[J-1]) EQV BOOLEAN(12 )) = REAL(NOT FALSE) THEN GO 00081300
|
|
GETOUT; 00081400
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(FID))=REAL(NOT FALSE) THEN 00081500
|
|
BEGIN 00081600
|
|
IF MAK THEN BEGIN 00081700
|
|
COUNT~COUNT+1; 00081800
|
|
CHECKDUP(DIR[J-1],DIR[J]); 00081900
|
|
MOVE(2,DIR[J-1],NEWDIR[COUNT]);COUNT~COUNT+1; 00082000
|
|
END ELSE DIR[J-1]~DIR[J-1]&1[4:47:1]; 00082100
|
|
END END; 00082200
|
|
GETOUT: IF T=COMMA THEN BEGIN TEM~SCAN; GO H END ELSE 00082300
|
|
IF MAK THEN GO LOOKFORSEMI ELSE GO ISEMI; 00082400
|
|
END ELSE 00082500
|
|
BEGIN 00082600
|
|
COMMENT IT IS =/ID EXCEPT; 00082700
|
|
EQIDEX(MAK); 00082800
|
|
NX~0; 00082900
|
|
IF ITOG THEN BEGIN ITOG~FALSE; GO HH END ELSE 00083000
|
|
IF JTOG THEN BEGIN JTOG~FALSE; GO HHH END; 00083100
|
|
IF T=COMMA THEN GO H ELSE IF MAK THEN 00083200
|
|
GO LOOKFORSEMI ELSE GO ISEMI 00083300
|
|
END 00083400
|
|
END ELSE 00083500
|
|
IF TEM { 7 THEN 00083600
|
|
BEGIN 00083700
|
|
HI: 00083800
|
|
MOVE(1,ID,MFID); IF SCAN! SLASH 00083900
|
|
THEN ERROR(4); 00084000
|
|
IDT: 00084100
|
|
IF T ~SCAN{ 7 THEN 00084200
|
|
HH: BEGIN 00084300
|
|
IF MAK THEN BEGIN 00084400
|
|
CHECKDUP(MFID,ID[0]); 00084500
|
|
MOVE(1,MFID,NEWDIR[COUNT~COUNT+1]); 00084600
|
|
MOVE(1,ID,NEWDIR[COUNT~COUNT+1]); 00084700
|
|
END ELSE MARKINDIR; 00084800
|
|
COMMENT IT IS MFID/FID; 00084900
|
|
IF T~SCAN=COMMA THEN BEGIN TEM~SCAN; GO H END ELSE 00085000
|
|
IF MAK THEN GO LOOKFORSEMI ELSE GO ISEMI; 00085100
|
|
END ELSE 00085200
|
|
HHH:IF T=EQUAL THEN 00085300
|
|
BEGIN 00085400
|
|
IF MAK THEN IF NOTRED THEN 00085500
|
|
BEGIN FILL TAPE WITH TAPENAME,FILARR[0]; 00085600
|
|
READ(TAPE,1023,DIR[*])[ENOF:PARI]; 00085700
|
|
NOTRED~FALSE; CLOSE(TAPE,RELEASE); 00085800
|
|
END; 00085900
|
|
IF T ~ SCAN=EXCEPT THEN 00086000
|
|
BEGIN 00086100
|
|
COMMENT IT IS ID/= EXCEPT; 00086200
|
|
IDEQEX(MAK); 00086300
|
|
NX~0; 00086400
|
|
IF T=COMMA THEN GO H ELSE IF MAK THEN 00086500
|
|
GO LOOKFORSEMI ELSE GO ISEMI; 00086600
|
|
END ELSE 00086700
|
|
BEGIN 00086800
|
|
COMMENT IT IS ID/=; 00086900
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00087000
|
|
IF REAL(BOOLEAN(MFID) EQV BOOLEAN(DIR[J]))=REAL(NOT FALSE) 00087100
|
|
THEN 00087200
|
|
BEGIN IF MAK THEN BEGIN 00087300
|
|
CHECKDUP(MFID,DIR[J+1]); 00087400
|
|
MOVE(1,MFID,NEWDIR[COUNT~COUNT+1]); 00087500
|
|
MOVE(1,DIR[J+1],NEWDIR[C~C+1]); 00087600
|
|
END ELSE DIR[J]~DIR[J]&1[4:47:1]; 00087700
|
|
END ELSE 00087800
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(12 ))=REAL(NOT FALSE) 00087900
|
|
THEN GO HPO; 00088000
|
|
HPO: IF T=COMMA THEN BEGIN TEM~SCAN; GO H END 00088100
|
|
ELSE IF MAK THEN GO LOOKFORSEMI ELSE GO ISEMI 00088200
|
|
END 00088300
|
|
END ELSE 00088400
|
|
ERROR(14); 00088500
|
|
END ELSE 00088600
|
|
IF TEM=ASTER THEN IF SCAN{7 THEN 00088700
|
|
BEGIN ID[0]~ID[0]&1[5:47:1]; GO HI END ELSE 00088800
|
|
ERROR(7) ELSE ERROR(16); 00088900
|
|
ISEMI: 00089000
|
|
LASTFILE~0; 00089100
|
|
UNLABEL(TAPE); FNDX~0; 00089200
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00089300
|
|
BEGIN FNDX~FNDX+1; 00089400
|
|
IF BOOLEAN(DIR[J].[4:1]) THEN 00089500
|
|
GETDISHED ELSE 00089600
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(12 ))=REAL(NOT FALSE) 00089700
|
|
THEN BEGIN CLOSE(TAPE,RELEASE); LABELF(TAPE); 00089800
|
|
GO LOOKFORSEMI END; 00089900
|
|
END; 00090000
|
|
LOOKFORSEMI: 00090100
|
|
COMMENT FILES ON TAPE; 00090200
|
|
IF MAK THEN BEGIN 00090300
|
|
IF T=SEMI THEN 00090400
|
|
BEGIN 00090500
|
|
NT: NTPROC~FALSE; 00090600
|
|
IF NDX>0 THEN 00090700
|
|
BEGIN 00090800
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00090900
|
|
BEGIN 00091000
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(12 ))=REAL(NOT FALSE) THEN GO G ; 00091100
|
|
FOR I~0 STEP 2 UNTIL NDX DO 00091200
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(EXCPT[I]))=REAL(NOT 00091300
|
|
FALSE) THEN 00091400
|
|
IF REAL(BOOLEAN(DIR[J+1]) EQV BOOLEAN(EXCPT[I+1])) 00091500
|
|
= REAL(NOT FALSE) THEN GO TRY ; 00091600
|
|
C~C+1; 00091700
|
|
CHECKDUP(DIR[J],DIR[J+1]); 00091800
|
|
MOVE(2,DIR[J],NEWDIR[C]); 00091900
|
|
C~C+1; 00092000
|
|
TRY:END; 00092100
|
|
G: 00092200
|
|
END; 00092300
|
|
SETAPINFO: 00092400
|
|
TAPEINFO[TAPNDX,0] ~ N+1; 00092500
|
|
TAPEINFO[TAPNDX ,1]~ COUNT; 00092600
|
|
MOVE(1,TAPENAME,TAPEINFO[TAPNDX,2]); 00092700
|
|
TAPNDX~TAPNDX+1; 00092800
|
|
IF T=ENDOFI THEN GO MAKTAPE ELSE GO AFTERSEMI; 00092900
|
|
END ELSE IF T=ENDOFI THEN 00093000
|
|
BEGIN IF NTPROC THEN GO NT ELSE GO MAKTAPE END ELSE 00093100
|
|
ERROR(16); 00093200
|
|
END ELSE BEGIN IF T=SEMI THEN GO AFTERSEMI 00093300
|
|
ELSE IF T=ENDOFI THEN GO EXIT ELSE ERROR(16); 00093400
|
|
END; 00093500
|
|
GO MAKTAPE; 00093600
|
|
END; 00093700
|
|
PROCDISK: 00093800
|
|
BEGIN 00093900
|
|
LABEL TN; 00094000
|
|
LABEL PROC,LQ,HII,L,LL,ZZ,MUSTBESEMI; 00094100
|
|
INTEGER MMFID,FFID; 00094200
|
|
FORMAT FMT4A("NO FILE ON DISK ",A1,A6,"/",A1,A6); %DU 00094205
|
|
IF SCAN!COLON THEN ERROR(3); 00094300
|
|
PROC: 00094400
|
|
TE~SCAN; 00094500
|
|
LQ: 00094600
|
|
IF TE{7 THEN 00094700
|
|
BEGIN 00094800
|
|
HII: 00094900
|
|
MOVE(1,ID,MFID); 00095000
|
|
IF SCAN!SLASH THEN 00095100
|
|
ERROR(4); 00095200
|
|
IF TE~SCAN{7 THEN 00095300
|
|
BEGIN 00095400
|
|
COMMENT IT IS MFID/FID; 00095500
|
|
L: 00095600
|
|
IF CODEFILE THEN IF NOT DIRECTORYSEARCH(MFID,ID[0],HED) THEN 00095700
|
|
BEGIN WRITE(PRINTER,FMT4A,MFID.[6:6],MFID,ID[0].[6:6],ID[0]); %DU 00095705
|
|
IF T~SCAN=COMMA THEN GO PROC ELSE GO MUSTBESEMI; 00095800
|
|
END; %DU 00095805
|
|
IF MAK THEN BEGIN 00095900
|
|
CHECKDUP(MFID,ID[0]); 00096000
|
|
MOVE(1,MFID,NEWDIR[C~C+1]); MOVE(1,ID,NEWDIR[C~C+1]); 00096100
|
|
END ELSE 00096200
|
|
IF CODEFILE THEN DISPLAYHEADER(MFID,ID[0]) ELSE 00096300
|
|
IF DIRECTORYSEARCH(MFID,ID[0],HED) THEN 00096400
|
|
DISPLAYHEADER(MFID,ID[0]) ELSE %MAR 69 00096500
|
|
WRITE(PRINTER,FMT4A,MFID.[6:6],MFID,ID[0].[6:6],ID[0]);%MAR 69 00096550
|
|
IF T~ SCAN=COMMA THEN GO PROC ELSE GO MUSTBESEMI; 00096600
|
|
END ELSE 00096700
|
|
LL: 00096800
|
|
IF TE= EQUAL THEN 00096900
|
|
IF T~ SCAN! EXCEPT THEN 00097000
|
|
BEGIN 00097100
|
|
COMMENT IT IS ID/= ONLY; 00097200
|
|
IF MAK THEN 00097300
|
|
LOOKFOR(STORE[0],MFID,STORE[1]) ELSE 00097400
|
|
WHILE DIRECTORYSCAN(MMFID,FFID,HED, 00097500
|
|
REAL(BOOLEAN(MMFID) EQV BOOLEAN(MFID))=REAL(NOT FALSE)) 00097600
|
|
DO DISPLAYHEADER(MMFID,FFID); 00097700
|
|
IF T=COMMA THEN GO PROC ELSE GO MUSTBESEMI 00097800
|
|
END ELSE 00097900
|
|
BEGIN 00098000
|
|
COMMENT IT IS ID/= EXCEPT; 00098100
|
|
IDEQEXD(MAK); 00098200
|
|
IF T=COMMA THEN GO LQ ELSE GO MUSTBESEMI; 00098300
|
|
END; 00098400
|
|
ERROR(16) 00098500
|
|
END ELSE 00098600
|
|
ZZ: 00098700
|
|
IF TE= EQUAL THEN 00098800
|
|
BEGIN 00098900
|
|
IF SCAN! SLASH THEN 00099000
|
|
BEGIN IF R=LPAR THEN 00099100
|
|
BEGIN IF SCAN=IDENT THEN BEGIN MOVECHARACTERS(5,ID[0],1, 00099200
|
|
CHRGNO,3); 00099300
|
|
WHILE DIRECTORYSCAN(MMFID,FFID,HED,REAL(BOOLEAN(CHRGNO) 00099400
|
|
EQV BOOLEAN(HED[6].[6:30]))=REAL(NOT FALSE)) DO 00099500
|
|
BEGIN CHECKDUP(MMFID,FFID); 00099600
|
|
MOVE(1,MMFID,NEWDIR[COUNT+1]); 00099700
|
|
MOVE(1,FFID,NEWDIR[COUNT~COUNT+2]); 00099800
|
|
END; IF SCAN=RPAR THEN IF T~SCAN =COMMA THEN GO PROC 00099900
|
|
ELSE GO MUSTBESEMI ELSE ERROR(20); 00100000
|
|
END ELSE ERROR(19) END ELSE ERROR(4) 00100100
|
|
END; 00100200
|
|
IF SCAN> 7 THEN 00100300
|
|
ERROR(10); 00100400
|
|
MOVE(1,ID,FID); 00100500
|
|
IF T ~ SCAN=EXCEPT THEN 00100600
|
|
BEGIN 00100700
|
|
COMMENT IT IS =/ID EXCEPT; 00100800
|
|
EQIDEXD(MAK); 00100900
|
|
IF ITOG THEN BEGIN ITOG~FALSE; GO LL END; 00101000
|
|
IF JTOG THEN BEGIN JTOG~FALSE; GO L END; 00101100
|
|
IF T=COMMA THEN GO ZZ ELSE GO MUSTBESEMI; 00101200
|
|
END ELSE 00101300
|
|
BEGIN 00101400
|
|
COMMENT IT IS =/ID ONLY; 00101500
|
|
IF MAK THEN 00101600
|
|
LOOKFOR(STORE[1],FID,STORE[0]) ELSE 00101700
|
|
WHILE DIRECTORYSCAN(MMFID,FFID,HED, 00101800
|
|
REAL(BOOLEAN(FFID) EQV BOOLEAN(FID)) 00101900
|
|
=REAL(NOT FALSE)) DO DISPLAYHEADER(MMFID,FFID); 00102000
|
|
IF T=COMMA THEN GO PROC ELSE GO MUSTBESEMI; 00102100
|
|
END 00102200
|
|
END ELSE 00102300
|
|
IF TE=ASTER THEN IF SCAN{7 THEN 00102400
|
|
BEGIN ID[0]~ID[0]&1[5:47:1]; GO HII END ELSE 00102500
|
|
ERROR(7) 00102600
|
|
ELSE 00102700
|
|
ERROR(16); 00102800
|
|
MUSTBESEMI: 00102900
|
|
COMMENT FILES ON DISK; 00103000
|
|
IF MAK THEN 00103100
|
|
BEGIN 00103200
|
|
IF T=SEMI THEN 00103300
|
|
BEGIN 00103400
|
|
TN: NTPROC~FALSE; 00103500
|
|
TAPEINFO[TAPNDX,0] ~N+1; 00103600
|
|
TAPEINFO[TAPNDX,1] ~COUNT; 00103700
|
|
TAPEINFO[TAPNDX,2] ~-1; 00103800
|
|
TAPNDX~TAPNDX+1; 00103900
|
|
IF T=ENDOFI THEN GO MAKTAPE ELSE GO AFTERSEMI; 00104000
|
|
END ELSE 00104100
|
|
IF T=ENDOFI THEN 00104200
|
|
BEGIN IF NTPROC THEN GO TN ELSE GO MAKTAPE END ELSE 00104300
|
|
ERROR(16); 00104400
|
|
END ELSE BEGIN IF T=SEMI THEN GO AFTERSEMI ELSE 00104500
|
|
IF T=ENDOFI THEN GO EXIT ELSE ERROR(16); 00104600
|
|
END; 00104700
|
|
END; 00104800
|
|
MAKTAPE: 00104900
|
|
BEGIN 00105000
|
|
LABEL TRYA,TRYB; 00105100
|
|
LABEL PARRR,ENDD,PARR2,ENDD2,FINNT,NS,NS2,QT,QTT,PP,ENDT; 00105200
|
|
LABEL EN2,PA2,EN3,PA3,EN4,PA4; 00105300
|
|
LABEL EN5; 00105400
|
|
LABEL PARQ,PARQQ,PARZ,PARZZ,IFONE,IFTWO,NZ; 00105500
|
|
INTEGER NSEGT,NTT; 00105600
|
|
ARRAY ATTAPE[0:900]; 00105700
|
|
FORMAT FFFO("TAPE DOES NOT AGREE WITH TAPE"); 00105800
|
|
INTEGER NSEG,NSEG2,N2,STARTSEG; 00105900
|
|
LABEL FINTAPE,PARR,ENDO,PAR2,END2,QQQ,QQ,FINN,CHK,EE,EEE,GETFIL; 00106000
|
|
FORMAT FFO("TAPE AND DISK DO NOT CHECK"); 00106100
|
|
FORMAT FFD(2(A2,A6)), 00106200
|
|
FFH("#ENTER NUMBER OF BOTH TAPES ",A1,A6," IN FORM XXX-X XXX-X~"), 00106300
|
|
FFI("#ENTER NUMBER OF TAPE ",A1,A6" IN FORM XXX-X~"), 00106400
|
|
FFG(2A1,A6,X1,A1,A6); 00106500
|
|
BOOLEAN NOTZEROF; 00106600
|
|
LABEL E1,E2,E3,E4,E5,E6; 00106700
|
|
FORMAT FMT2(A2,A6,"/",A1,A6), 00106800
|
|
FMT3("FILES ON ", A1,A6,":" ), 00106900
|
|
FMT4("THERE IS NO FILE ",A2,A6"/"A1,A6); 00107000
|
|
REAL T; 00107100
|
|
ARRAY CODEDIR[0:1022]; 00107200
|
|
ARRAY ATAPE,ATAPE2[0:1022]; 00107300
|
|
INTEGER TAP,STARTFIL,ENDFIL,FILD, 00107400
|
|
Z,FILO,LASTFILE, 00107500
|
|
SEGPERAREA,DISKBUF, 00107600
|
|
TFID,K,TEMP, 00107700
|
|
FNDX, 00107800
|
|
BEGSEG,BLKRED,WHATAREA,NOBLKS,LEFTOVER; 00107900
|
|
LABEL READSEG,REDSEG; 00108000
|
|
LABEL UPAREA,READPART; 00108100
|
|
LABEL PARERR,BACKUP,NEXT,READTO,GETLABEL,ENO; 00108200
|
|
LABEL NOTTHERE,G1; 00108300
|
|
FORMAT FFOO("DIRECTORY NOT WRITTEN CORRECTLY"); 00108400
|
|
LABEL GETNEXT,NOTOK,THRU; INTEGER J; 00108500
|
|
STREAM PROCEDURE INCR(V,I);VALUE I; 00108600
|
|
BEGIN DI~V;SI~LOC I;DI~DI+5;SI~SI+5;DS~3ADD;END INCR; 00108700
|
|
BOOLEAN PROCEDURE COMPR(TPNAM); FILE TPNAM; 00108800
|
|
BEGIN LABEL EN,PA; INTEGER I; 00108900
|
|
BOOLEAN STREAM PROCEDURE COMPARDIR(M,N,A,B); VALUE M,N; 00109000
|
|
BEGIN LABEL EXIT; 00109100
|
|
SI~A; DI~B; 00109200
|
|
M(8(IF 60 SC!DC THEN JUMP OUT 2 TO EXIT)); 00109300
|
|
N(IF 8 SC!DC THEN JUMP OUT TO EXIT); 00109400
|
|
TALLY~1; 00109500
|
|
EXIT: COMPARDIR~TALLY 00109600
|
|
END; 00109700
|
|
WHILE TRUE DO 00109800
|
|
PA: SPACE(TPNAM,-1)[EN:PA]; EN: CLOSE(TPNAM,*); 00109900
|
|
READ(TPNAM,COUNT+2,ATAPE[*])[EOF:PARI]; 00110000
|
|
IF CODEFILE THEN 00110100
|
|
BEGIN 00110200
|
|
IF COMPARDIR((COUNT+2) DIV 60,I~((COUNT+2) MOD 60),ATAPE,CODEDIR) 00110300
|
|
THEN COMPR~TRUE 00110400
|
|
END ELSE 00110500
|
|
BEGIN 00110600
|
|
IF COMPARDIR((COUNT+2) DIV 60,I~((COUNT+2) MOD 60),ATAPE,NEWDIR) 00110700
|
|
THEN COMPR~TRUE 00110800
|
|
END; 00110900
|
|
END; 00111000
|
|
BOOLEAN STREAM PROCEDURE SAME(A,B,N); VALUE N; 00111100
|
|
BEGIN LABEL EXIT; 00111200
|
|
SI~A; DI~B; 00111300
|
|
N(4(IF 60 SC!DC THEN JUMP OUT 2 TO EXIT)); 00111400
|
|
TALLY~1 00111500
|
|
; 00111600
|
|
EXIT: SAME~TALLY 00111700
|
|
END; 00111800
|
|
FILE OUT DISKREADDUMMYFILE1 DISK SERIAL [1:1] (1,1022); 00111900
|
|
PROCEDURE OPEN;BEGIN STREAM PROCEDURE O(B);SI~B; 00112000
|
|
O(DISKREADDUMMYFILE1(0)); 00112100
|
|
END; 00112200
|
|
BOOLEAN PROCEDURE DISKREAD(SGNO,NOSEG,D,HDR); VALUE SGNO,NOSEG; 00112300
|
|
REAL SGNO,NOSEG; ARRAY D[0],HDR[0]; COMMENT UNPROTECTED<<<<<<<; 00112400
|
|
BEGIN DEFINE D1 = DISKREADDUMMYFILE1#; 00112500
|
|
FORMAT FFF("ADDR=",I8,"NOSEG=",I8); 00112600
|
|
INTEGER ADDR; 00112700
|
|
STREAM PROCEDURE MOVESEG(N,A,B); VALUE N; 00112800
|
|
BEGIN SI~A; DI~B; N(DS~30 WDS) END; 00112900
|
|
INTEGER STREAM PROCEDURE ABSADDR(A); BEGIN SI~A;ABSADDR~SI END; 00113000
|
|
STREAM PROCEDURE SETUP(F,T,B,D,A); VALUE D,B,A; 00113100
|
|
BEGIN COMMENT FIRST SAVE NORMAL I/O DESCRIPTOR IN T; 00113200
|
|
SI ~ F; DI ~ T; DS ~ WDS; 00113300
|
|
COMMENT NEXT MAKE "D" A DESCRIPTOR & REPLACE I/O DESC BY IT; 00113400
|
|
SI~LOC D; DI~F; DS~WDS; DI~DI-8; DS~SET; 00113500
|
|
COMMENT NOW PLACE DISK ADDRESS IN (BUFF-1):A SAVE ARRAY; 00113600
|
|
SI ~ LOC A; DI ~ B; DS ~ 8 DEC; 00113700
|
|
END SETUP; 00113800
|
|
STREAM PROCEDURE RESTORE(T,F); 00113900
|
|
BEGIN SI ~ T; DI ~ F; DS ~ WDS END; 00114000
|
|
BOOLEAN STREAM PROCEDURE CHECKDISKPARITY(A); 00114100
|
|
BEGIN 00114200
|
|
SI~A; 00114300
|
|
SKIP 2 SB; 00114400
|
|
IF SB THEN TALLY~0 ELSE TALLY~1; 00114500
|
|
CHECKDISKPARITY~TALLY 00114600
|
|
END CHECKDISKPARITY; 00114700
|
|
IF (ADDR ~ SGNO DIV HDR[8])<HDR[9] THEN 00114800
|
|
IF DISKREAD ~(ADDR ~ HDR[10+ADDR])!0 THEN 00114900
|
|
BEGIN SETUP(D1,HDR[30],DISKBUF,(0&2188[15:36:12]&880[3:36:12] 00115000
|
|
&1[2:47:1]) 00115100
|
|
&DISKBUF[33:33:15]&NOSEG[27:42:6], 00115200
|
|
ADDR ~ SGNO MOD HDR[8] + ADDR); 00115300
|
|
RELEASE(D1); 00115400
|
|
WAIT(ABSADDR(D1),(0&1[19:47:1]&1[2:47:1])); 00115500
|
|
IF(CHECKDISKPARITY(D1)) THEN 00115600
|
|
BEGIN 00115700
|
|
WRITE(PRINTER,FFF,ADDR,NOSEG); 00115800
|
|
DISKREAD~FALSE 00115900
|
|
END ELSE 00116000
|
|
MOVESEG(NOSEG,D1(1),D[0]); 00116100
|
|
RESTORE(HDR[30],D1); 00116200
|
|
END; 00116300
|
|
END DISKREAD; 00116400
|
|
PROCEDURE WRITEZEROFILE; 00116500
|
|
BEGIN WRITE(NEWTAPE,30,ZEROF[*]); 00116600
|
|
CLOSE(NEWTAPE,*); 00116700
|
|
END; 00116800
|
|
INTEGER STREAM PROCEDURE LENGTH (A); 00116900
|
|
BEGIN SI~A; SI~SI-8; DI~LOC LENGTH; DS~WDS END; 00117000
|
|
BOOLEAN PROCEDURE NOFILE; 00117100
|
|
BEGIN 00117200
|
|
LABEL HOPOUT,HP; 00117300
|
|
INTEGER J,TIF; 00117400
|
|
IF (NEWDIR[FILD+1])<0 THEN 00117500
|
|
BEGIN 00117600
|
|
NOFILE~TRUE; GO HP 00117700
|
|
END; 00117800
|
|
FOR J~0 STEP 2 WHILE TRUE DO 00117900
|
|
BEGIN 00118000
|
|
IF REAL(BOOLEAN(DIR[J]) EQV BOOLEAN(12 )) =REAL(NOT FALSE) 00118100
|
|
THEN BEGIN NOFILE~TRUE; 00118200
|
|
WRITE(PRINTER,FMT4,IF CODEFILE THEN PREFIX(CODEDIR[FILD]) ELSE 00118300
|
|
PREFIX(NEWDIR[FILD]),NEWDIR[FILD],(T~NEWDIR[FILD+1]).[6:6],T); 00118400
|
|
GO HP END 00118500
|
|
ELSE 00118600
|
|
IF REAL(BOOLEAN(NEWDIR[FILD])EQV BOOLEAN(ABS(DIR[J]))) 00118700
|
|
=REAL(NOT FALSE) THEN 00118800
|
|
IF REAL(BOOLEAN(NEWDIR[FILD+1]) EQV BOOLEAN(DIR[J+1])) 00118900
|
|
=REAL(NOT FALSE) THEN GO HOPOUT; 00119000
|
|
END; 00119100
|
|
HOPOUT: Z~(FILO~(J/2)+1)-LASTFILE; 00119200
|
|
RENAME(TFID,FILARR,FILO) 00119300
|
|
; 00119400
|
|
LASTFILE~FILO; 00119500
|
|
HP: 00119600
|
|
FNDX~FNDX+1; 00119700
|
|
RENAME(TIF,FILARR,FNDX); 00119800
|
|
00119900
|
|
FILL NEWTAPE WITH NEWTAPENAME,TIF; 00120000
|
|
00120100
|
|
END; 00120200
|
|
PROCEDURE WRITEFILE; 00120300
|
|
BEGIN LABEL FIN; 00120400
|
|
READ(TAPE[NO])[FIN]; 00120500
|
|
N~LENGTH(TAPE(0)); READ(TAPE,N,HED[*])[FIN:PARI]; 00120600
|
|
WRITE(NEWTAPE,N,HED[*]); 00120700
|
|
WHILE TRUE DO 00120800
|
|
BEGIN 00120900
|
|
READ(TAPE[NO])[FIN]; 00121000
|
|
N~LENGTH(TAPE(0)); 00121100
|
|
READ(TAPE,N,ATAPE[*])[FIN:PARI]; 00121200
|
|
WRITE(NEWTAPE,N,ATAPE[*]); 00121300
|
|
END; 00121400
|
|
FIN: END; 00121500
|
|
IF MAK THEN IF ERRCOUNT=0 THEN 00121600
|
|
BEGIN 00121700
|
|
NOTZEROF~TRUE; 00121800
|
|
OPEN; DISKBUF~GETADD(DISKREADDUMMYFILE1(0))-1; 00121900
|
|
FILL NEWTAPE WITH NEWTAPENAME,FILARR[0]; 00122000
|
|
00122100
|
|
IF CODEFILE THEN BEGIN 00122200
|
|
FOR I~0 STEP 2 UNTIL COUNT DO BEGIN 00122300
|
|
CODEDIR[I]~0&NEWDIR[I][6:6:42]; 00122400
|
|
MOVE(1,NEWDIR[I+1],CODEDIR[I+1]); 00122500
|
|
END; 00122600
|
|
CODEDIR[COUNT+1]~12; WRITE(NEWTAPE,COUNT+2,CODEDIR[*]) END 00122700
|
|
ELSE BEGIN 00122800
|
|
NEWDIR[COUNT+1]~12; 00122900
|
|
WRITE(NEWTAPE,COUNT+2,NEWDIR[*]); 00123000
|
|
END; 00123100
|
|
IF CHECKTAPE THEN 00123200
|
|
IF COMPR(NEWTAPE) THEN CLOSE(NEWTAPE,*) ELSE 00123300
|
|
BEGIN WRITE(PRINTER,FFOO); IF TWOT THEN ONET~FALSE ELSE GO EXIT 00123400
|
|
END ELSE 00123500
|
|
CLOSE(NEWTAPE,*); 00123600
|
|
WRITE(PRINTER,FMT3,(T~NEWTAPENAME).[6:6],T); 00123700
|
|
TAP~-1; 00123800
|
|
FNDX~0; 00123900
|
|
WHILE TAP~TAP+1 <TAPNDX DO 00124000
|
|
BEGIN 00124100
|
|
STARTFIL~TAPEINFO[TAP,0]; ENDFIL~TAPEINFO[TAP,1]; 00124200
|
|
IF TAPEINFO[TAP,2]=-1 THEN 00124300
|
|
BEGIN 00124400
|
|
COMMENT THE FILES ARE ON DISK; 00124500
|
|
FOR FILD~STARTFIL STEP 2 UNTIL ENDFIL DO 00124600
|
|
BEGIN 00124700
|
|
FNDX~FNDX+1; 00124800
|
|
RENAME(TFID,FILARR,FNDX); 00124900
|
|
00125000
|
|
FILL NEWTAPE WITH NEWTAPENAME,TFID; 00125100
|
|
00125200
|
|
IF (NEWDIR[FILD+1])<0 THEN 00125300
|
|
BEGIN 00125400
|
|
WRITEZEROFILE; 00125500
|
|
GO NEXT END; 00125600
|
|
IF DIRECTORYSEARCH(NEWDIR[FILD],NEWDIR[FILD+1],HED) THEN 00125700
|
|
BEGIN 00125800
|
|
COMMENT TRANSFER DISK FILES; 00125900
|
|
WRITE(PRINTER,FMT2,IF CODEFILE THEN PREFIX(CODEDIR[FILD]) ELSE 00126000
|
|
PREFIX(NEWDIR[FILD]), NEWDIR[FILD],(T~NEWDIR[FILD+1]).[6:6],T); 00126100
|
|
HED[4]~HED[4]&0[2:47:1]; 00126200
|
|
00126300
|
|
WRITE(NEWTAPE,30,HED[*]); 00126400
|
|
00126500
|
|
IF (SEGPERAREA~HED[8]) MOD 30 =0 THEN 00126600
|
|
BEGIN 00126700
|
|
COMMENT NO. DISK SEGS PER AREA IS A MULTIPLE OF 30; 00126800
|
|
BEGSEG~BLKRED~WHATAREA~0; NOBLKS~HED[8] DIV 30; 00126900
|
|
GO UPAREA; 00127000
|
|
READSEG: 00127100
|
|
IF DISKREAD(BEGSEG,30,INFO,HED) THEN 00127200
|
|
BEGIN 00127300
|
|
00127400
|
|
WRITE(NEWTAPE,900,INFO[*]); 00127500
|
|
00127600
|
|
BEGSEG~BEGSEG+30; 00127700
|
|
IF (BLKRED~BLKRED+1) < NOBLKS THEN 00127800
|
|
GO READSEG; 00127900
|
|
COMMENT COMPARE HIGHEST LOGICAL RECORD NUMBER WRITTEN IN 00128000
|
|
WITH NO. LOGICAL RECORDS WRITTEN ON TAPE; 00128100
|
|
END ELSE GO PARERR; 00128200
|
|
UPAREA: 00128300
|
|
WHILE (WHATAREA~WHATAREA+1){20 DO 00128400
|
|
BEGIN 00128500
|
|
IF HED[WHATAREA+9 ]=0 THEN 00128600
|
|
BEGSEG~BEGSEG+SEGPERAREA ELSE 00128700
|
|
BEGIN BLKRED~0; 00128800
|
|
GO READSEG; 00128900
|
|
END 00129000
|
|
END; GO FINTAPE; 00129100
|
|
END ELSE 00129200
|
|
BEGIN 00129300
|
|
COMMENT NO. DISK SEGS PER AREA NOT A MULTIPLE OF 30; 00129400
|
|
BEGSEG~BLKRED~WHATAREA~0; 00129500
|
|
IF HED[10]!0 THEN BEGIN WHATAREA~1; 00129600
|
|
IF(NOBLKS~HED[8] DIV 30) ! 0 00129700
|
|
THEN 00129800
|
|
BEGIN 00129900
|
|
REDSEG: 00130000
|
|
IF DISKREAD(BEGSEG,30,INFO,HED) THEN 00130100
|
|
BEGIN 00130200
|
|
00130300
|
|
WRITE(NEWTAPE,900,INFO[*]); 00130400
|
|
00130500
|
|
BEGSEG~BEGSEG+30; 00130600
|
|
IF (BLKRED~BLKRED+1) < NOBLKS THEN GO REDSEG; 00130700
|
|
END ELSE GO PARERR; 00130800
|
|
END; 00130900
|
|
READPART: 00131000
|
|
IF DISKREAD(BEGSEG,LEFTOVER~ HED[8] MOD 30, INFO, HED) THEN 00131100
|
|
BEGIN IF ONET THEN 00131200
|
|
WRITE(NEWTAPE,LEFTOVER|30,INFO[*]); 00131300
|
|
00131400
|
|
END ELSE GO PARERR; 00131500
|
|
BEGSEG~BEGSEG+LEFTOVER; 00131600
|
|
END; 00131700
|
|
WHILE(WHATAREA~WHATAREA+1){20 DO 00131800
|
|
BEGIN 00131900
|
|
IF HED[ WHATAREA + 9 ] =0 THEN 00132000
|
|
BEGSEG~BEGSEG+SEGPERAREA ELSE 00132100
|
|
BEGIN BLKRED~0; 00132200
|
|
IF NOBLKS!0 THEN GO REDSEG ELSE GO READPART END; 00132300
|
|
END; 00132400
|
|
FINTAPE: 00132500
|
|
CLOSE(NEWTAPE,*); 00132600
|
|
END END ELSE 00132700
|
|
BEGIN WRITEZEROFILE; 00132800
|
|
WRITE(PRINTER,FMT4,PREFIX(NEWDIR[FILD]), NEWDIR[FILD], 00132900
|
|
(T~NEWDIR[FILD+1]).[6:6],T) 00133000
|
|
END ; 00133100
|
|
NEXT: 00133200
|
|
END; 00133300
|
|
IF CHECKTAPE THEN 00133400
|
|
BEGIN 00133500
|
|
IF TAP=0 THEN 00133600
|
|
BEGIN REWIND(NEWTAPE); SPACE(NEWTAPE,1)[FINN:PARZ]; 00133700
|
|
CLOSE(NEWTAPE,*); 00133800
|
|
END ELSE 00133900
|
|
BEGIN UNLABEL(NEWTAPE); 00134000
|
|
J~(ENDFIL+1-STARTFIL)DIV 2+1; 00134100
|
|
FOR I~1 STEP 1 UNTIL J DO 00134200
|
|
BEGIN 00134300
|
|
WHILE TRUE DO 00134400
|
|
PA2: SPACE(NEWTAPE,-1)[EN2:PA2]; % GET OVER LABEL 00134500
|
|
EN2:CLOSE(NEWTAPE,*); 00134600
|
|
WHILE TRUE DO 00134700
|
|
PA3: SPACE(NEWTAPE,-1000)[EN3:PA3]; % GET OVER FILE00134800
|
|
EN3:CLOSE(NEWTAPE,*); 00134900
|
|
END; 00135000
|
|
SPACE(NEWTAPE,1)[EN4:PARZ]; EN4: CLOSE(NEWTAPE,*); 00135100
|
|
LABELF(NEWTAPE); 00135200
|
|
SPACE(NEWTAPE,1)[EN5:PARZ]; EN5: CLOSE(NEWTAPE,*); 00135300
|
|
END; 00135400
|
|
FOR FILD~STARTFIL STEP 2 UNTIL ENDFIL DO 00135500
|
|
BEGIN 00135600
|
|
IF(NEWDIR[FILD+1])<0 THEN 00135700
|
|
NOTTHERE: BEGIN 00135800
|
|
BEGIN SPACE(NEWTAPE,1)[FINN:PARZ];CLOSE(NEWTAPE,*); END; 00135900
|
|
END ELSE BEGIN 00136000
|
|
IF DIRECTORYSEARCH(NEWDIR[FILD], NEWDIR[FILD+1],HED) THEN 00136100
|
|
BEGIN SEGPERAREA~HED[8]; 00136200
|
|
00136300
|
|
00136400
|
|
STARTSEG~0; 00136500
|
|
NOTZEROF~TRUE; 00136600
|
|
READ(NEWTAPE,30,ATAPE[*])[FINN:PARQ]; 00136700
|
|
IF NOT SAME(HED,ATAPE,1) THEN 00136800
|
|
PARQ: 00136900
|
|
BEGIN WRITE(PRINTER,FFO); 00137000
|
|
CLOSE(NEWTAPE); 00137100
|
|
GO EXIT 00137200
|
|
END; 00137300
|
|
00137400
|
|
WHILE TRUE DO 00137500
|
|
BEGIN 00137600
|
|
READ(NEWTAPE[NO])[FINN:PARZ]; 00137700
|
|
NSEG~(N~LENGTH(NEWTAPE(0))) DIV 30; 00137800
|
|
READ(NEWTAPE,N,ATAPE[*])[FINN:PARZ]; 00137900
|
|
IF(STARTSEG MOD SEGPERAREA)=0 THEN 00138000
|
|
BEGIN TRYA: 00138100
|
|
IF HED[10+WHATAREA~(STARTSEG DIV SEGPERAREA)]=0 THEN 00138200
|
|
BEGIN STARTSEG~STARTSEG+SEGPERAREA; 00138300
|
|
IF WHATAREA<HED[9]-1 THEN GO TRYA END END; 00138400
|
|
IF DISKREAD(STARTSEG,NSEG,INFO,HED) THEN 00138500
|
|
BEGIN IF NOT SAME(INFO,ATAPE,NSEG) THEN 00138600
|
|
PARZ:BEGIN WRITE(PRINTER,FFO); 00138700
|
|
CLOSE(NEWTAPE); GO EXIT; 00138800
|
|
END ELSE STARTSEG~STARTSEG+NSEG 00138900
|
|
END ELSE GO PARERR; 00139000
|
|
END END ELSE GO NOTTHERE END;FINN:CLOSE(NEWTAPE,*);END;END; 00139100
|
|
END ELSE 00139200
|
|
BEGIN 00139300
|
|
COMMENT THE FILES ARE ON TAPE; 00139400
|
|
LASTFILE~0; 00139500
|
|
FILL TAPE WITH TAPEINFO[TAP,2],FILARR[0]; 00139600
|
|
READ(TAPE,1023,DIR[*])[ENOF:PARI]; 00139700
|
|
CLOSE(TAPE,*); 00139800
|
|
J~-2; 00139900
|
|
FOR K~STARTFIL STEP 2 UNTIL ENDFIL DO 00140000
|
|
BEGIN IF NEWDIR[K+1]<0 THEN 00140100
|
|
BEGIN 00140200
|
|
DIR[J~J+2]~-1; GO THRU END; 00140300
|
|
WHILE DIR[J~J+2]!12 DO 00140400
|
|
IF REAL(BOOLEAN(NEWDIR[K])EQV BOOLEAN(DIR[J]))=REAL(NOT FALSE) 00140500
|
|
THEN IF REAL(BOOLEAN(NEWDIR[K+1]) EQV BOOLEAN(DIR[J+1]))= 00140600
|
|
REAL(NOT FALSE) THEN 00140700
|
|
BEGIN 00140800
|
|
DIR[J]~-DIR[J]; GO THRU END; GO NOTOK; 00140900
|
|
THRU: END; 00141000
|
|
COMMENT FILES ARE IN ORDER ON THE TAPE; 00141100
|
|
BEGIN 00141200
|
|
INTEGER LAST,J,CNT,MAXFI; REAL FFF; LABEL EOF,NXT; 00141300
|
|
CNT~0; MAXFI~(ENDFIL+1-STARTFIL)/2; 00141400
|
|
RENAME(FFF,FILARR,FNDX); 00141500
|
|
LAST~ -2; 00141600
|
|
FOR J~0 STEP 2 WHILE CNT<MAXFI DO 00141700
|
|
IF DIR[J]<0 THEN 00141800
|
|
BEGIN CNT~CNT+1; 00141900
|
|
WHILE J-LAST>2 DO 00142000
|
|
BEGIN SPACE(TAPE,1)[ENOF:PARI]; 00142100
|
|
CLOSE(TAPE,*); LAST~LAST+2; 00142200
|
|
END; 00142300
|
|
INCR(FFF,1); FNDX~FNDX+1; 00142400
|
|
FILL NEWTAPE WITH NEWTAPENAME,FFF; 00142500
|
|
IF DIR[J]=-1 THEN 00142600
|
|
BEGIN SPACE(TAPE,1); WRITE(NEWTAPE,30,ZEROF[*]); 00142700
|
|
END ELSE 00142800
|
|
BEGIN 00142900
|
|
WRITEFILE; 00143000
|
|
WRITE(PRINTER,FMT2,PREFIX(ABS(DIR[J])),DIR[J],(T~DIR[J+1]).[6:6],T); 00143100
|
|
END; 00143200
|
|
CLOSE(TAPE,*); 00143300
|
|
CLOSE(NEWTAPE,*); 00143400
|
|
LAST~J; 00143500
|
|
END; 00143600
|
|
IF CHECKTAPE THEN 00143700
|
|
BEGIN 00143800
|
|
BOOLEAN STREAM PROCEDURE CK(T1,T2); 00143900
|
|
BEGIN LOCAL M,N; 00144000
|
|
LABEL XT; 00144100
|
|
TALLY~1; 00144200
|
|
SI~T1;SI~SI-2;DI~LOC M;DS~7LIT"0"; DS~CHR;DS~7LIT"0"; 00144300
|
|
DS~CHR; 00144400
|
|
SI~T1; DI~T2; 00144500
|
|
SI~SI-8; DI~DI-8; 00144600
|
|
IF 8SC!DC THEN GO XT; 00144700
|
|
M(2(32(IF 8SC!DC THEN JUMP OUT 3 TO XT))); 00144800
|
|
N(IF 8SC!DC THEN JUMP OUT TO XT); 00144900
|
|
TALLY~0; 00145000
|
|
XT:CK~TALLY; 00145100
|
|
END CK; 00145200
|
|
FORMAT 00145300
|
|
FOR1("READ REVERSE ERROR EOF ON NEWTAPE 1"), 00145400
|
|
FOR2("READ REV PAR ERROR ON NEWTAPE 1"), 00145500
|
|
FOR3("ORIG TAPE AND NEWTAPE 1 DO NOT CHECK"), 00145600
|
|
FOR4("READ REV EOF ERROR ON ORIG TAPE"), 00145700
|
|
FOR5("READ REV PAR ERROR ON ORIG TAPE"); 00145800
|
|
LABEL P1,P2,P3,P4,P6,P7,P8,P10,P11, 00145900
|
|
E1,E2,E3,E4,E6,E7,E8,E10,E11, 00146000
|
|
EOF,NXT; 00146100
|
|
LABEL E12; 00146200
|
|
J~LAST; LAST~LAST+2; 00146300
|
|
UNLABEL(NEWTAPE); UNLABEL(TAPE); 00146400
|
|
FOR J~J STEP -2 UNTIL 0 DO 00146500
|
|
IF DIR[J]<0 THEN 00146600
|
|
BEGIN 00146700
|
|
WHILE LAST-J>2 DO 00146800
|
|
BEGIN 00146900
|
|
P1: WHILE TRUE DO SPACE(TAPE,-1)[E1:P1]; E1:CLOSE(TAPE,*); 00147000
|
|
P2: WHILE TRUE DO SPACE(TAPE,-1000)[E2:P2]; E2: CLOSE(TAPE,*); 00147100
|
|
LAST~LAST-2; 00147200
|
|
END; 00147300
|
|
P3: WHILE TRUE DO SPACE(TAPE,-1)[E3:P3]; E3: CLOSE(TAPE,*); 00147400
|
|
P4:WHILE TRUE DO SPACE(NEWTAPE,-1)[E4:P4];E4:CLOSE(NEWTAPE,*); 00147500
|
|
IF DIR[J]=-1 THEN 00147600
|
|
BEGIN 00147700
|
|
WHILE TRUE DO SPACE(TAPE,-1000)[E12:P7]; 00147800
|
|
E12: 00147900
|
|
WHILE TRUE DO SPACE(NEWTAPE,-1)[EOF:P8]; 00148000
|
|
END; 00148100
|
|
NXT: 00148200
|
|
READ REVERSE(TAPE[NO])[EOF:NXT]; 00148300
|
|
READ REVERSE(NEWTAPE[NO])[E8:P8]; 00148400
|
|
IF CK(TAPE(0),NEWTAPE(0)) THEN GO E6; 00148500
|
|
READ REVERSE(TAPE)[E7:P7 ]; 00148600
|
|
READ REVERSE(NEWTAPE)[E8:P8]; 00148700
|
|
GO TO NXT; 00148800
|
|
EOF: 00148900
|
|
CLOSE(NEWTAPE,*); CLOSE(TAPE,*); 00149000
|
|
LAST~J; 00149100
|
|
END; 00149200
|
|
CLOSE(TAPE); 00149300
|
|
LABELF(TAPE); 00149400
|
|
P10: SPACE(NEWTAPE,1)[E10:P10]; E10: CLOSE(NEWTAPE,*); 00149500
|
|
LABELF(NEWTAPE); 00149600
|
|
IF TAP+1<TAPNDX THEN 00149700
|
|
BEGIN 00149800
|
|
FOR J~1 STEP 1 UNTIL CNT DO 00149900
|
|
BEGIN 00150000
|
|
SPACE(NEWTAPE,1)[E11:PARI]; E11: CLOSE(NEWTAPE,*); 00150100
|
|
END; 00150200
|
|
END; 00150300
|
|
GO GETNEXT; 00150400
|
|
E8: 00150500
|
|
WRITE(PRINTER,FOR1); GO EXIT; 00150600
|
|
P8: WRITE(PRINTER,FOR2); GO EXIT; 00150700
|
|
E6: WRITE(PRINTER,FOR3); 00150800
|
|
GO EXIT; 00150900
|
|
E7: WRITE(PRINTER,FOR4); GO EXIT; 00151000
|
|
P7: WRITE(PRINTER,FOR5); GO EXIT; 00151100
|
|
END ELSE CLOSE(TAPE); % DONT CHECK TAPE 00151200
|
|
GO GETNEXT; 00151300
|
|
END; NOTOK: UNLABEL(TAPE); 00151400
|
|
FILD~STARTFIL; 00151500
|
|
FNDX~FNDX+1;RENAME(TFID,FILARR,FNDX); 00151600
|
|
FILL NEWTAPE WITH NEWTAPENAME,TFID; 00151700
|
|
IF NOFILE THEN 00151800
|
|
WRITEZEROFILE 00151900
|
|
ELSE 00152000
|
|
BEGIN 00152100
|
|
IF Z>1 THEN 00152200
|
|
BEGIN 00152300
|
|
K~1 ; 00152400
|
|
READTO: 00152500
|
|
WHILE TRUE DO SPACE(TAPE,1)[E1:PARI]; 00152600
|
|
E1: 00152700
|
|
CLOSE(TAPE,*); 00152800
|
|
WHILE TRUE DO SPACE(TAPE,100)[E2:PARI]; 00152900
|
|
E2: 00153000
|
|
CLOSE(TAPE,*); COMMENT PAST FILE AND TM; 00153100
|
|
SPACE(TAPE,1)[ENOF:PARI]; 00153200
|
|
IF(K~K+1)< Z THEN GO READTO; 00153300
|
|
END; 00153400
|
|
GETLABEL: 00153500
|
|
READ(TAPE,10,DUMMY[*])[ENOF:PARI]; CLOSE(TAPE,*); 00153600
|
|
IF LABELOK(DUMMY,TAPEINFO[TAP,2],TFID) THEN 00153700
|
|
BEGIN WRITEFILE; 00153800
|
|
IF NOT ZEROHED(HED,ZEROF) THEN 00153900
|
|
WRITE(PRINTER,FMT2,IF CODEFILE THEN PREFIX(CODEDIR[FILD]) 00154000
|
|
ELSE PREFIX(NEWDIR[FILD]),NEWDIR[FILD],(T~NEWDIR[FILD+1]).[6:6],00154100
|
|
T); 00154200
|
|
IF CHECKTAPE THEN 00154300
|
|
IF NOTZEROF THEN 00154400
|
|
BEGIN 00154500
|
|
NOTZEROF~TRUE; 00154600
|
|
00154700
|
|
BEGIN WHILE TRUE DO 00154800
|
|
PARRR: SPACE(NEWTAPE,-1000)[ENDD:PARRR]; 00154900
|
|
ENDD: CLOSE(NEWTAPE,*); 00155000
|
|
END; 00155100
|
|
CLOSE(TAPE,*); SPACE(TAPE,-1)[EE:PARI]; EE: CLOSE(TAPE,*); 00155200
|
|
WHILE TRUE DO 00155300
|
|
PP: SPACE(TAPE,-100)[ENDT:PP]; ENDT: 00155400
|
|
CLOSE(TAPE,*);SPACE(TAPE,1)[EEE:PARI]; EEE: CLOSE(TAPE,*); 00155500
|
|
WHILE TRUE DO 00155600
|
|
BEGIN 00155700
|
|
READ(TAPE[NO])[FINNT:PARI]; 00155800
|
|
NSEGT~(NTT~LENGTH(TAPE(0))) DIV 30; 00155900
|
|
READ(TAPE,NTT,ATTAPE[*])[FINNT:PARI]; 00156000
|
|
00156100
|
|
BEGIN 00156200
|
|
READ(NEWTAPE[NO])[FINNT:NZ]; 00156300
|
|
NSEG~(N~LENGTH(NEWTAPE(0))) DIV 30; 00156400
|
|
READ(NEWTAPE,N,ATAPE[*])[FINNT:NZ]; 00156500
|
|
END; 00156600
|
|
00156700
|
|
QTT: 00156800
|
|
BEGIN IF NTT=N THEN 00156900
|
|
BEGIN 00157000
|
|
IF NOT SAME(ATTAPE,ATAPE,NSEG) THEN 00157100
|
|
BEGIN NS: WRITE(PRINTER,FFFO); 00157200
|
|
CLOSE(NEWTAPE); 00157300
|
|
GO EXIT 00157400
|
|
END END ELSE 00157500
|
|
BEGIN GO NS; NZ: WRITE(PRINTER,FFFO); 00157600
|
|
CLOSE(NEWTAPE); GO EXIT; END; 00157700
|
|
END; 00157800
|
|
END; 00157900
|
|
END ELSE NOTZEROF~TRUE; 00158000
|
|
FINNT: IF ONET THEN CLOSE(NEWTAPE,*); 00158100
|
|
00158200
|
|
CLOSE(TAPE,*); 00158300
|
|
END ELSE 00158400
|
|
GO PARI; 00158500
|
|
END; 00158600
|
|
GETFIL: 00158700
|
|
IF FILD~FILD+2<ENDFIL THEN 00158800
|
|
BEGIN 00158900
|
|
FNDX~FNDX+1; RENAME(TFID,FILARR,FNDX); 00159000
|
|
FILL NEWTAPE WITH NEWTAPENAME,TFID; 00159100
|
|
IF NOFILE THEN WRITEZEROFILE 00159200
|
|
ELSE 00159300
|
|
BEGIN 00159400
|
|
IF Z>0 THEN 00159500
|
|
BEGIN IF (TEMP~Z-1)>0 THEN 00159600
|
|
BEGIN 00159700
|
|
FOR K~1 STEP 1 UNTIL TEMP DO 00159800
|
|
BEGIN 00159900
|
|
WHILE TRUE DO SPACE(TAPE,1)[E3:PARI]; 00160000
|
|
E3: 00160100
|
|
CLOSE(TAPE,*); 00160200
|
|
WHILE TRUE DO SPACE(TAPE,100)[E4:PARI]; 00160300
|
|
E4: 00160400
|
|
CLOSE(TAPE,*); 00160500
|
|
END 00160600
|
|
END; 00160700
|
|
SPACE(TAPE,1) [ENOF:PARI ]; 00160800
|
|
GO GETLABEL; 00160900
|
|
END ELSE 00161000
|
|
IF Z{0 THEN 00161100
|
|
BEGIN 00161200
|
|
Z~ABS(Z); 00161300
|
|
K~0; 00161400
|
|
READ REVERSE(TAPE,10,DUMMY[*])[ENO:PARI]; 00161500
|
|
ENO: CLOSE(TAPE,*); COMMENT GET PAST TM; 00161600
|
|
BACKUP: 00161700
|
|
WHILE TRUE DO SPACE(TAPE,-100)[E5:PARI]; 00161800
|
|
E5: 00161900
|
|
CLOSE(TAPE,*); 00162000
|
|
COMMENT GET PAST FILE; 00162100
|
|
IF(K~K+1){ Z THEN 00162200
|
|
BEGIN 00162300
|
|
WHILE TRUE DO SPACE(TAPE,-1)[E6:PARI]; 00162400
|
|
E6: 00162500
|
|
CLOSE(TAPE,*); 00162600
|
|
GO BACKUP 00162700
|
|
END; 00162800
|
|
SPACE(TAPE,-1)[ENOF:PARI]; 00162900
|
|
GO GETLABEL; 00163000
|
|
END; 00163100
|
|
END; 00163200
|
|
GO GETFIL; 00163300
|
|
END 00163400
|
|
; 00163500
|
|
CLOSE(TAPE,RELEASE); 00163600
|
|
LABELF(TAPE); 00163700
|
|
END; 00163800
|
|
GETNEXT: 00163900
|
|
END; 00164000
|
|
IF TWOT THEN BEGIN REWIND(NEWTAPE); 00164100
|
|
BEGIN FILE OUT NEWTAP2 9(1,1023); 00164200
|
|
BOOLEAN STREAM PROCEDURE CK(T1,T2); 00164300
|
|
BEGIN LOCAL M,N; 00164400
|
|
LABEL XT; 00164500
|
|
TALLY~1; 00164600
|
|
SI~T1;SI~SI-2;DI~LOC M;DS~7LIT"0"; DS~CHR;DS~7LIT"0"; 00164700
|
|
DS~CHR; 00164800
|
|
SI~T1; DI~T2; 00164900
|
|
SI~SI-8; DI~DI-8; 00165000
|
|
IF 8SC!DC THEN GO XT; 00165100
|
|
M(2(32(IF 8SC!DC THEN JUMP OUT 3 TO XT))); 00165200
|
|
N(IF 8SC!DC THEN JUMP OUT TO XT); 00165300
|
|
TALLY~0; 00165400
|
|
XT:CK~TALLY; 00165500
|
|
END CK; 00165600
|
|
FORMAT FOR6("PROBLEM WITH NEWTAPE 1"), 00165700
|
|
FOR7("PROBLEM WITH NEWTAPE 2"); 00165800
|
|
ARRAY A[0:1022]; 00165900
|
|
INTEGER TM,L; LABEL L1,L2,EOF1,RDLBL,RDRCD,EOF,EOT,NXT,EOF2,DONE; 00166000
|
|
DEFINE LOOPIT=L~LENGTH(NEWTAPE(0)); 00166100
|
|
READ(NEWTAPE,L,A[*])[ L1:L1 ]; WRITE(NEWTAP2,L,A[*])#, 00166200
|
|
CLOSETHEM=CLOSE(NEWTAP2,*); CLOSE(NEWTAPE,*)#; 00166300
|
|
FILL NEWTAPE WITH NEWTAPENAME,"FILE000"; 00166400
|
|
READ(NEWTAPE)[EOF1:L1 ]; 00166500
|
|
EOF1: UNLABEL(NEWTAPE); REWIND(NEWTAPE); WHEN(3); 00166600
|
|
RDLBL: READ(NEWTAPE[NO])[EOT: L1 ];LOOPIT;CLOSETHEM; TM~TM+1; 00166700
|
|
RDRCD: READ(NEWTAPE[NO])[EOF: L1 ];LOOPIT; GO TO RDRCD; 00166800
|
|
EOF:CLOSETHEM;TM~TM+1; LOOPIT; GO TO RDLBL; 00166900
|
|
EOT: CLOSETHEM; 00167000
|
|
IF CHECKTAPE THEN 00167100
|
|
BEGIN 00167200
|
|
READ REVERSE(NEWTAP2[NO])[NXT: L2 ]; 00167300
|
|
FOR TM~TM STEP-1 UNTIL 0 DO 00167400
|
|
BEGIN 00167500
|
|
NXT: READ REVERSE(NEWTAPE[NO])[EOF2:L1 ]; 00167600
|
|
READ REVERSE(NEWTAP2[NO])[L2:L2 ]; 00167700
|
|
IF CK(NEWTAPE(0),NEWTAP2(0)) THEN GO L2; 00167800
|
|
READ REVERSE(NEWTAP2)[L2:L2 ]; 00167900
|
|
READ REVERSE(NEWTAPE)[L1:L1 ]; 00168000
|
|
GO TO NXT; 00168100
|
|
EOF2: CLOSETHEM; 00168200
|
|
END; 00168300
|
|
REWIND(NEWTAPE); REWIND(NEWTAP2); 00168400
|
|
READ(NEWTAPE[NO])[ L1:L1 ]; 00168500
|
|
READ(NEWTAP2[NO])[ L2:L2 ]; 00168600
|
|
IF CK(NEWTAPE(0),NEWTAP2(0)) THEN GO L2; 00168700
|
|
END; LOCK(NEWTAPE,RELEASE); LOCK(NEWTAP2,RELEASE); GO DONE; 00168800
|
|
L1: WRITE(PRINTER,FOR6); ONET~TWOT~FALSE; 00168900
|
|
GO DONE; 00169000
|
|
L2: WRITE(PRINTER,FOR7); TWOT~FALSE; 00169100
|
|
DONE: 00169200
|
|
END 00169300
|
|
END ELSE LOCK(NEWTAPE,RELEASE); 00169400
|
|
00169500
|
|
END; 00169600
|
|
GO EXIT; 00169700
|
|
PARERR: ERROR(18); 00169800
|
|
END MAKTAPE; 00169900
|
|
ENOF: 00170000
|
|
EOF: 00170100
|
|
ERROR(17); 00170200
|
|
PAR: 00170300
|
|
PARI: ERROR(18); 00170400
|
|
ERR: 00170500
|
|
EXIT: 00170600
|
|
WRITE(PRINT[PAGE]); 00170700
|
|
FOR NPR~0 STEP 1 UNTIL NPRIN DO 00170800
|
|
WRITE(PRINT,15,PRIN[NPR,*]); 00170900
|
|
END. 00171000
|
|
LAST CARD ON CRDIMG TAPE 99999999
|