1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-01-31 13:11:51 +00:00
Files
retro-software.B5500-software/tools/INCL2OMIT.alg_m

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