mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-31 13:11:51 +00:00
261 lines
23 KiB
Plaintext
261 lines
23 KiB
Plaintext
$ SET LINEINFO 00000100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00001000
|
|
%% SRCE/MISC/B5500/INCL2OMIT %%00001100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00001200
|
|
% CONVERTS $INCLUDE AND $OMIT PRAGMAS IN THE B5500 MARK XIII MCP 00001300
|
|
% SOURCE TO THE NEWER $OMIT SCHEME USED IN LATER RELEASES. READS THE 00001400
|
|
% MCP SOURCE FROM INTNAME "SOURCE" AND WRITES CHANGED LINES TO 00001500
|
|
% INTNAME "PATCH". 00001600
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00010000
|
|
% 2013-03-08 P.KIMPEL 00010010
|
|
% ORIGINAL VERSION. 00010020
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00099900
|
|
00100000
|
|
BEGIN 00100100
|
|
DEFINE 00100200
|
|
ALL1 = REAL(NOT FALSE) #; 00100300
|
|
00100400
|
|
INTEGER 00100500
|
|
LASTSEQNR, 00100600
|
|
LEFT, 00100700
|
|
OMITDEPTH, 00100750
|
|
OMITTYPE, 00100800
|
|
POPCOUNT, 00100900
|
|
POPSEQNR, 00101000
|
|
STOPSEQNR, 00101100
|
|
THISSEQNR, 00101200
|
|
TOKLEFT, 00101300
|
|
TOKLENGTH, 00101400
|
|
TOKOFFSET, 00101500
|
|
X; 00101600
|
|
00101700
|
|
POINTER 00101800
|
|
P; 00101900
|
|
00102000
|
|
ARRAY 00102100
|
|
POPLIST[0:15]; 00102200
|
|
00102300
|
|
EBCDIC ARRAY 00102400
|
|
PREC[0:89], 00102500
|
|
REC[0:89], 00102600
|
|
TOKEN[0:89]; 00102700
|
|
00102800
|
|
FILE 00102900
|
|
SOURCE(KIND=DISK, DEPENDENTSPECS, FILEUSE=IN, 00103000
|
|
TITLE="SRCE/MISC/B5500/MARKXIII/MCP."), 00103100
|
|
PATCH(KIND=DISK, MAXRECSIZE=15, BLOCKSIZE=420, FRAMESIZE=48, 00103200
|
|
AREAS=10, AREASIZE=1008, FLEXIBLE, FILEKIND=ESPOLSYMBOL, 00103300
|
|
TITLE="PATCH/MISC/B5500/MARKXIII/MCP/INCL2OMIT."); 00103350
|
|
00103400
|
|
TRUTHSET 00103500
|
|
NUMBERS ("0123456789"), 00103600
|
|
ALPHANUM (NUMBERS OR "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 00103700
|
|
00300000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00300100
|
|
INTEGER PROCEDURE SCANNER; 00300200
|
|
BEGIN 00300300
|
|
INTEGER 00300400
|
|
LEFT; 00300500
|
|
POINTER 00300600
|
|
P; 00300700
|
|
00300800
|
|
SCAN P:REC[TOKOFFSET] FOR LEFT:TOKLEFT WHILE=" "; 00300900
|
|
IF LEFT = 0 THEN 00301000
|
|
BEGIN 00301100
|
|
TOKLENGTH:= TOKLEFT:= 0; 00301200
|
|
REPLACE TOKEN BY 48"00"; 00301300
|
|
END 00301400
|
|
ELSE 00301500
|
|
BEGIN 00301600
|
|
TOKOFFSET:= *+TOKLEFT-LEFT; 00301700
|
|
IF P IN NUMBERS THEN 00301800
|
|
REPLACE TOKEN[1] BY P FOR TOKLEFT:LEFT WHILE IN NUMBERS 00301900
|
|
ELSE IF P IN ALPHANUM THEN 00302000
|
|
REPLACE TOKEN[1] BY P FOR TOKLEFT:LEFT WHILE IN ALPHANUM 00302100
|
|
ELSE 00302200
|
|
BEGIN 00302300
|
|
REPLACE TOKEN[1] BY P FOR 1; 00302400
|
|
TOKLEFT:= LEFT-1; 00302500
|
|
END; 00302600
|
|
00302700
|
|
TOKLENGTH:= LEFT-TOKLEFT; 00302800
|
|
TOKOFFSET:= *+TOKLENGTH; 00302900
|
|
REPLACE TOKEN BY TOKLENGTH.[7:48] FOR 1; 00303000
|
|
END; 00303100
|
|
00303200
|
|
SCANNER:= TOKLENGTH; 00303300
|
|
END SCANNER; 00303400
|
|
00303500
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00303600
|
|
INTEGER PROCEDURE INSERTPOP(STOPSEQNR); 00303700
|
|
VALUE STOPSEQNR; 00303800
|
|
INTEGER STOPSEQNR; 00303900
|
|
BEGIN 00304000
|
|
INTEGER 00304100
|
|
X; 00304200
|
|
00304300
|
|
X:= POPLIST[0]; 00304400
|
|
IF X > 0 THEN 00304500
|
|
X:= MASKSEARCH(0, ALL1, POPLIST[X]); 00304600
|
|
00304700
|
|
IF X < 1 THEN 00304800
|
|
BEGIN 00304850
|
|
X:= POPLIST[0]:= *+1; 00304900
|
|
IF SIZE(POPLIST) <= X THEN 00305000
|
|
RESIZE(POPLIST, X+16, RETAIN); 00305100
|
|
END; 00305200
|
|
00305300
|
|
POPLIST[X]:= STOPSEQNR; 00305400
|
|
OMITDEPTH:= *+1; 00305450
|
|
INSERTPOP:= X; 00305500
|
|
END INSERTPOP; 00305600
|
|
00305700
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00305800
|
|
INTEGER PROCEDURE REMOVEPOP(STOPSEQNR); 00305900
|
|
VALUE STOPSEQNR; 00306000
|
|
INTEGER STOPSEQNR; 00306100
|
|
BEGIN 00306200
|
|
INTEGER 00306300
|
|
X; 00306400
|
|
00306500
|
|
X:= POPLIST[0]; 00306600
|
|
WHILE X > 0 DO 00306700
|
|
BEGIN 00306800
|
|
IF POPLIST[X] > STOPSEQNR THEN 00306900
|
|
X:= *-1 00307000
|
|
ELSE 00307100
|
|
BEGIN 00307200
|
|
REMOVEPOP:= POPLIST[X]; 00307300
|
|
POPLIST[X]:= 0; 00307400
|
|
IF POPLIST[0] = X THEN 00307500
|
|
POPLIST[0]:= *-1; 00307600
|
|
00307700
|
|
X:= 0; % KILL THE LOOP 00307800
|
|
IF OMITDEPTH > 0 THEN 00307820
|
|
OMITDEPTH:= *-1; 00307840
|
|
END; 00307900
|
|
END; 00308000
|
|
END REMOVEPOP; 00308100
|
|
00900000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00900100
|
|
%% OUTER BLOCK 00900200
|
|
00900300
|
|
REPLACE REC BY " " FOR 72, "0" FOR 8, " " FOR 10; 00900500
|
|
REPLACE REC BY "$# MARKXIII/MCP INCL2OMIT"; 00900600
|
|
WRITE(PATCH, 15, REC); 00900700
|
|
00900800
|
|
WHILE NOT READ(SOURCE, 15, REC) DO 00900900
|
|
BEGIN 00901000
|
|
TOKOFFSET:= 0; 00901100
|
|
TOKLEFT:= 72; 00901200
|
|
LASTSEQNR:= THISSEQNR; 00901300
|
|
THISSEQNR:= INTEGER(REC[72], 8); 00901400
|
|
IF THISSEQNR <= LASTSEQNR THEN 00901500
|
|
DISPLAY("SEQUENCE ERROR " !! STRING(LASTSEQNR,8) !! " : " !! 00901600
|
|
STRING(THISSEQNR,8)); 00901700
|
|
00901800
|
|
POPCOUNT:= 0; 00901900
|
|
POPSEQNR:= REMOVEPOP(THISSEQNR); 00901950
|
|
WHILE POPSEQNR > 0 DO 00902000
|
|
BEGIN 00902100
|
|
IF POPSEQNR >= THISSEQNR THEN 00902200
|
|
BEGIN 00902250
|
|
POPCOUNT:= *+1; 00902300
|
|
POPSEQNR:= REMOVEPOP(THISSEQNR); 00902320
|
|
END 00902340
|
|
ELSE 00902400
|
|
BEGIN 00902500
|
|
REPLACE PREC BY " " FOR 72, POPSEQNR FOR 8 DIGITS, " " FOR 10; 00902600
|
|
REPLACE P:PREC BY " $POP OMIT"; 00902700
|
|
LASTSEQNR:= POPSEQNR; 00902710
|
|
DO BEGIN 00902720
|
|
POPSEQNR:= REMOVEPOP(THISSEQNR); 00902730
|
|
IF POPSEQNR = LASTSEQNR THEN 00902740
|
|
REPLACE P:P BY " OMIT"; 00902750
|
|
END 00902760
|
|
UNTIL POPSEQNR ^= LASTSEQNR; 00902770
|
|
WRITE(PATCH, 15, PREC); 00902800
|
|
END; 00903000
|
|
END WHILE; 00903100
|
|
00903200
|
|
SCANNER; 00903300
|
|
IF TOKEN ^= 48"01""$" THEN 00903400
|
|
IF POPCOUNT > 0 THEN 00903405
|
|
BEGIN 00903410
|
|
REPLACE PREC BY " " FOR 72, THISSEQNR-1 FOR 8 DIGITS, " " FOR 10; 00903415
|
|
REPLACE P:PREC BY " $POP "; 00903420
|
|
WHILE POPCOUNT > 0 DO 00903425
|
|
BEGIN 00903430
|
|
REPLACE P:P BY "OMIT "; 00903435
|
|
POPCOUNT:= *-1; 00903440
|
|
END WHILE; 00903445
|
|
WRITE(PATCH, 15, PREC); 00903450
|
|
END; 00903455
|
|
ELSE 00903460
|
|
BEGIN 00903500
|
|
SCANNER; 00903600
|
|
OMITTYPE:= (IF TOKEN=48"07""INCLUDE" THEN 1 ELSE 00903700
|
|
IF TOKEN=48"04""OMIT" THEN 2 ELSE 0); 00903800
|
|
IF OMITTYPE > 0 THEN 00903900
|
|
BEGIN 00904000
|
|
SCANNER; 00904100
|
|
IF TOKEN[1] IN NUMBERS FOR TOKLENGTH THEN 00904200
|
|
BEGIN 00904300
|
|
STOPSEQNR:= INTEGER(TOKEN[1], TOKLENGTH); 00904400
|
|
SCANNER; 00904500
|
|
IF TOKEN = 48"01""," THEN 00904600
|
|
SCANNER; 00904700
|
|
00904800
|
|
IF TOKEN = 48"02""IF" THEN 00904900
|
|
BEGIN 00905000
|
|
REPLACE PREC BY " " FOR 90; 00905100
|
|
REPLACE P:PREC BY " $"; 00905200
|
|
IF POPCOUNT > 0 THEN 00905300
|
|
BEGIN 00905400
|
|
REPLACE P:P BY "POP "; 00905500
|
|
WHILE POPCOUNT > 0 DO 00905600
|
|
BEGIN 00905700
|
|
REPLACE P:P BY "OMIT "; 00905800
|
|
POPCOUNT:= *-1; 00905900
|
|
END WHILE; 00906000
|
|
END; 00906100
|
|
00906200
|
|
INSERTPOP(STOPSEQNR); 00906250
|
|
REPLACE P:P BY "SET OMIT="; 00906300
|
|
IF OMITTYPE = 1 THEN 00906400
|
|
REPLACE P:P BY "NOT"; 00906500
|
|
00906600
|
|
REPLACE P:P BY "("; 00906700
|
|
SCANNER; 00906800
|
|
DO BEGIN 00906900
|
|
REPLACE P:P BY TOKEN[1] FOR TOKLENGTH, " "; 00907000
|
|
SCANNER; 00907100
|
|
END 00907200
|
|
UNTIL TOKLENGTH = 0 OR TOKEN=48"01"";"; 00907300
|
|
IF TOKEN = 48"01"";" THEN 00907320
|
|
SCANNER; 00907340
|
|
00907360
|
|
REPLACE P:P-1 BY ") "; 00907400
|
|
IF OMITDEPTH > 1 THEN 00907420
|
|
REPLACE P:P BY "OR OMIT "; 00907440
|
|
00907450
|
|
WHILE TOKLENGTH > 0 DO 00907500
|
|
BEGIN 00907600
|
|
REPLACE P:P BY TOKEN[1] FOR TOKLENGTH, " "; 00907700
|
|
SCANNER; 00907800
|
|
END WHILE; 00907900
|
|
00908000
|
|
REPLACE PREC[72] BY THISSEQNR FOR 8 DIGITS; 00908100
|
|
WRITE(PATCH, 15, PREC); 00908200
|
|
END; 00908300
|
|
00908400
|
|
END; 00908500
|
|
END; 00908600
|
|
END; 00908700
|
|
END READ SOURCE; 00908800
|
|
00908900
|
|
CLOSE(PATCH, CRUNCH); 00909000
|
|
CLOSE(SOURCE); 00909100
|
|
00999800
|
|
END. 00999900
|