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.
295 lines
23 KiB
Plaintext
295 lines
23 KiB
Plaintext
BEGIN 00001000
|
|
ALPHA FILE DATADEVICE 14(2,8); 00002000
|
|
ALPHA FILE DATADEVICE1 14(2,8); 00003000
|
|
ALPHA ARRAY B[1:56],A[1:1023],C[1:1023]; 00004000
|
|
ALPHA ARRAY ID[1:2]; 00005000
|
|
INTEGER BUFFSPEC,SWC,P,I,V,X,Z,Y,RCDSIZE,BLKSIZE,SWT,ADR,ADDR,BADR,EADR,00006000
|
|
INCR,SWH; 00007000
|
|
INTEGER RECORDZ; 00008000
|
|
FORMAT Z1(X8,"{!*~"),F8(X8,"{!ILC*","~"),Z2(X8,"{!NCF*","~"), 00009000
|
|
Z3(*A1),Z4(X8,"{!REPACK*","~"),F10(X8,"{!~"),Z21(X8,"{!",I4,"**~"), 00010000
|
|
M1(X8,"{!FILE REMOVED","~"),M2(X8,"{!","OLD","~"), 00011000
|
|
F7(X8," NLN*","~"),Z6(X8,""{!~"),F5(X8,"#",I4,"{!",""","~"); 00012000
|
|
LABEL A1,A2,A3,A4,A6,EOJ,R1; 00013000
|
|
PROCEDURE REMOTEWRITE2(DATADEVICE,BUFFSPEC,REMOTEREC,REMSIZE) ; 00014000
|
|
COMMENT EXTERNAL TO PROCEDURE AS FIRST STEP IN PROGRAM ISSUE READ SEEK 00015000
|
|
AFTER GETDCOM; 00016000
|
|
ALPHA ARRAY REMOTEREC[1] ; 00017000
|
|
INTEGER REMSIZE,BUFFSPEC; 00018000
|
|
FILE DATADEVICE; 00019000
|
|
BEGIN 00020000
|
|
LABEL L1,L2,L3,L4, L6,L7,L9,WRITE2EXIT,STEP1; 00021000
|
|
INTEGER I,P,P1,Q,Z,SIZE,J,SIZ; 00022000
|
|
INTEGER ARRAY LIMITS[1:2] ; 00023000
|
|
LABEL STP; 00024000
|
|
LABEL ONTOS; 00025000
|
|
INTEGER ZP; 00026000
|
|
FORMAT OUTFORM(X8,56A1); 00027000
|
|
ALPHA ARRAY WRITEREC[1:56],DELIMITER[1:7] ; 00028000
|
|
LIST OUTLIST(FOR I~ LIMITS[1] STEP 1 UNTIL LIMITS[2] DO WRITEREC[I]) ; 00029000
|
|
FILL DELIMITER[*] WITH 7, % TOTAL OF 7 ENTRIES 00030000
|
|
"{", % CR 00031000
|
|
"<", % RO 00032000
|
|
"!", % LF 00033000
|
|
">", % X-ON 00034000
|
|
"~", %END OF MESSAGE 00035000
|
|
"}"; % EOT 00036000
|
|
Q~56; 00037000
|
|
ZP~1; 00038000
|
|
L1: SIZE~P1~1; 00039000
|
|
LIMITS[1]~1; 00040000
|
|
L2: FOR J~P1 STEP 1 UNTIL REMSIZE DO 00041000
|
|
BEGIN 00042000
|
|
FOR I~2 STEP 1 UNTIL DELIMITER[1] DO 00043000
|
|
IF REMOTEREC[J]=DELIMITER[I] THEN GO TO STP; 00044000
|
|
P1~J; GO TO STEP1; 00045000
|
|
STP: END; 00046000
|
|
LIMITS[2]~REMSIZE ; 00047000
|
|
WRITE(DATADEVICE(BUFFSPEC),OUTFORM,OUTLIST); 00048000
|
|
GO TO WRITE2EXIT; 00049000
|
|
STEP1: IF REMOTEREC[J]="~" THEN BEGIN WRITEREC[SIZE]~"~"; 00050000
|
|
LIMITS[2]~SIZE; WRITE(DATADEVICE(BUFFSPEC),OUTFORM,OUTLIST); 00051000
|
|
GO TO WRITE2EXIT; END; IF J>REMSIZE THEN GO TO L3; 00052000
|
|
WRITEREC[SIZE]~REMOTEREC[J]; 00053000
|
|
IF SIZE}Q THEN GO TO L4; 00054000
|
|
IF ZP=1 THEN 00055000
|
|
IF J-P1+1<71 THEN BEGIN SIZE~SIZE+1; J~J+1; GO TO STEP1; END 00056000
|
|
ELSE GO TO ONTOS; 00057000
|
|
IF J-P1+1<72 THEN BEGIN SIZE~SIZE+1; J~J+1; GO TO STEP1; END; 00058000
|
|
ONTOS: 00059000
|
|
SIZE~SIZE+1; WRITEREC[SIZE]~"{"; 00060000
|
|
SIZE~SIZE+1; IF SIZE>Q THEN GO TO L6 ELSE WRITEREC[SIZE]~"!"; 00061000
|
|
IF SIZE}Q THEN BEGIN LIMITS[2]~SIZE ; 00062000
|
|
WRITE(DATADEVICE(BUFFSPEC),OUTFORM,OUTLIST); 00063000
|
|
SIZE~1 END ELSE SIZE~SIZE+1; 00064000
|
|
L9: 00065000
|
|
IF ZP=1 THEN BEGIN 00066000
|
|
ZP~2; 00067000
|
|
P1~P1+71; J~J+1; GO TO STEP1; END; 00068000
|
|
P1~P1+72; J~J+1; GO TO STEP1; 00069000
|
|
L3: LIMITS[2]~SIZE; 00070000
|
|
WRITEREC[SIZE]~"~"; WRITE(DATADEVICE(BUFFSPEC),OUTFORM,OUTLIST); 00071000
|
|
GO TO WRITE2EXIT; 00072000
|
|
L4: LIMITS[1]~1; LIMITS[2]~SIZE ; 00073000
|
|
IF J-P1+1<72 THEN BEGIN WRITE(DATADEVICE(BUFFSPEC),OUTFORM,OUTLIST); 00074000
|
|
SIZE~1; END ELSE BEGIN 00075000
|
|
WRITE(DATADEVICE(BUFFSPEC),OUTFORM,OUTLIST); 00076000
|
|
SIZE~3; WRITEREC[ 1 ]~"{"; WRITEREC[ 2 ]~"!"; 00077000
|
|
P1~P1+72;END; J~J+1; GO TO STEP1; 00078000
|
|
L6: LIMITS[1]~1; LIMITS[2]~SIZE-1; 00079000
|
|
WRITE(DATADEVICE(BUFFSPEC),OUTFORM,OUTLIST); 00080000
|
|
SIZE~2; WRITEREC[SIZE]~"!"; 00081000
|
|
GO TO L9; 00082000
|
|
WRITE2EXIT: 00083000
|
|
END OF MULT; 00084000
|
|
PROCEDURE GETDATACOM(DATADEVICE1,BUFFSPEC) ; 00085000
|
|
FILE DATADEVICE1 ; 00086000
|
|
INTEGER BUFFSPEC; 00087000
|
|
BEGIN 00088000
|
|
ARRAY A[0:7] ; 00089000
|
|
BUFFSPEC ~ STATUS(A[*]); 00090000
|
|
COMMENT THIS TECHNIQUE DERIVES FROM CUBE TIC-TAC-TOE PROGRAM ; 00091000
|
|
BUFFSPEC ~ A[0] ; 00092000
|
|
END ; % GETDATACOM 00093000
|
|
PROCEDURE REMOTEREAD2(DATADEVICE1,BUFFSPEC,REMOTEREC,REMSIZE); 00094000
|
|
COMMENT EXTERNAL TO PROCEDURE AS FIRST STEP IN PROGRAM ISSUE READ 00095000
|
|
SEEK AFTER GETDCOM; 00096000
|
|
VALUE BUFFSPEC; 00097000
|
|
INTEGER REMSIZE,BUFFSPEC; 00098000
|
|
ALPHA ARRAY REMOTEREC[1] ; 00099000
|
|
FILE DATADEVICE1; 00100000
|
|
BEGIN 00101000
|
|
INTEGER I,CHECK; 00102000
|
|
FORMAT INFORM(X8,28A1); 00103000
|
|
INTEGER ARRAY LIMITS[1:2] ; 00104000
|
|
LABEL AGAIN,READ2EXIT; 00105000
|
|
LIST INLIST(FOR I~ LIMITS[1] STEP 1 UNTIL LIMITS[2] DO REMOTEREC[I]); 00106000
|
|
CHECK ~ 0 ; 00107000
|
|
LIMITS[1]~1; 00108000
|
|
IF REMSIZE<28 THEN LIMITS[2]~REMSIZE+1 ELSE LIMITS[2]~28; 00109000
|
|
READ SEEK(DATADEVICE1(BUFFSPEC)); 00110000
|
|
AGAIN : 00111000
|
|
READ(DATADEVICE1(BUFFSPEC),INFORM,INLIST); 00112000
|
|
IF STATUS(BUFFSPEC,0).[25:1]=0 THEN BEGIN 00113000
|
|
REMOTEREC[I]~" "; GO TO READ2EXIT; END; 00114000
|
|
CHECK ~ REMSIZE - 28 ; 00115000
|
|
IF CHECK > 28 THEN LIMITS[2] ~ 28 + LIMITS[2] 00116000
|
|
ELSE LIMITS[2]~REMSIZE+1; 00117000
|
|
LIMITS[1] ~ LIMITS[1] + 28 ; 00118000
|
|
GO TO AGAIN; 00119000
|
|
READ2EXIT : 00120000
|
|
READ SEEK(DATADEVICE1(BUFFSPEC)); 00121000
|
|
END ; % REMOTEREAD2 00122000
|
|
GETDATACOM(DATADEVICE,BUFFSPEC); 00123000
|
|
SWH~1; 00124000
|
|
A3: 00125000
|
|
WRITE(DATADEVICE(BUFFSPEC),Z1); 00126000
|
|
REMOTEREAD2(DATADEVICE1,BUFFSPEC,B,56); 00127000
|
|
IF B[1]!"S" THEN 00128000
|
|
IF B[1]="E" THEN GO TO EOJ ELSE BEGIN 00129000
|
|
WRITE(DATADEVICE(BUFFSPEC),F8); GO TO A3; END; 00130000
|
|
A6: 00131000
|
|
SWC~0; 00132000
|
|
FOR I~2 STEP 1 UNTIL 56 DO IF B[I]="/" THEN BEGIN 00133000
|
|
P~I-2; X~1; Z~2; 00134000
|
|
ID[1]~ID[2]~" "; 00135000
|
|
A1: 00136000
|
|
ID[X].[ 6:6]~B[Z]; Z~Z+1; P~P-1; 00137000
|
|
IF P=0 THEN GO TO R1; 00138000
|
|
ID[X].[12:6]~B[Z]; Z~Z+1; P~P-1; 00139000
|
|
IF P=0 THEN GO TO R1; 00140000
|
|
ID[X].[18:6]~B[Z]; Z~Z+1; P~P-1; 00141000
|
|
IF P=0 THEN GO TO R1; 00142000
|
|
ID[X].[24:6]~B[Z]; Z~Z+1; P~P-1; 00143000
|
|
IF P=0 THEN GO TO R1; 00144000
|
|
ID[X].[30:6]~B[Z]; Z~Z+1; P~P-1; 00145000
|
|
IF P=0 THEN GO TO R1; 00146000
|
|
ID[X].[36:6]~B[Z]; Z~Z+1; P~P-1; 00147000
|
|
IF P=0 THEN GO TO R1; 00148000
|
|
ID[X].[42:6]~B[Z]; Z~Z+1; P~P-1; 00149000
|
|
R1: 00150000
|
|
IF X=2 THEN GO TO A2; 00151000
|
|
FOR Y~I+1 STEP 1 UNTIL 56 DO IF B[Y]="*" THEN BEGIN 00152000
|
|
P~Y-I-1; Z~I+1; X~2; GO TO A1; END; 00153000
|
|
WRITE(DATADEVICE(BUFFSPEC),F8); GO TO A3; 00154000
|
|
END; WRITE(DATADEVICE(BUFFSPEC),F8); GO TO A3; 00155000
|
|
A2: 00156000
|
|
IF B[Y+1]="P" THEN BEGIN SWT~1; GO TO A4;END; 00157000
|
|
SWT~3; 00158000
|
|
A4: 00159000
|
|
BEGIN 00160000
|
|
FILE IN DISC DISK RANDOM (2,30,30,SAVE 99); ARRAY FILCK[0:6]; 00161000
|
|
LABEL A5; 00162000
|
|
FILL DISC WITH ID[1],ID[2]; 00163000
|
|
SEARCH(DISC,FILCK[*]); 00164000
|
|
IF SIGN(FILCK[0])=-1 AND SIGN(FILCK[3])=-1 AND SIGN(FILCK[4])=-1 AND 00165000
|
|
SIGN(FILCK[5])=-1 AND SIGN(FILCK[6])=-1 THEN BEGIN 00166000
|
|
WRITE(DATADEVICE(BUFFSPEC),Z2); 00167000
|
|
GO TO A3; END; 00168000
|
|
A5: 00169000
|
|
RCDSIZE~FILCK[3]; 00170000
|
|
BLKSIZE~FILCK[4]; 00171000
|
|
RECORDZ~RCDSIZE|8; 00172000
|
|
CLOSE(DISC,RELEASE); 00173000
|
|
END; 00174000
|
|
BEGIN 00175000
|
|
FILE TISK DISK RANDOM (2,RCDSIZE,BLKSIZE,SAVE 99); 00176000
|
|
FILE OUT DISH DISK RANDOM [20:200] (2,RCDSIZE,BLKSIZE,SAVE 99); 00177000
|
|
LABEL A7,E3,A9,C5,C1,C2,D5,D7,E1,D9,D8,A8,D3,B3,D2,B9,B1,D1,B7,F1,F2,F3,00178000
|
|
F4,F6,B90; 00179000
|
|
LIST L1(RECORDZ,FOR I~1 STEP 1 UNTIL RECORDZ DO A[I]); 00180000
|
|
LIST L2(RECORDZ,FOR I~1 STEP 1 UNTIL RECORDZ DO C[I]); 00181000
|
|
FILL TISK WITH ID[1],ID[2]; 00182000
|
|
IF SWT=1 THEN BEGIN ADR~1; 00183000
|
|
READ(TISK[ADR],Z3,L1)[A7]; 00184000
|
|
WRITE(DATADEVICE(BUFFSPEC),M1); 00185000
|
|
A7: CLOSE(TISK,PURGE); GO TO A3; END; 00186000
|
|
E3: 00187000
|
|
WRITE(DATADEVICE(BUFFSPEC),Z1); 00188000
|
|
REMOTEREAD2(DATADEVICE1,BUFFSPEC,B,56); 00189000
|
|
IF B[1]!"D" THEN GO TO C5; 00190000
|
|
A9: 00191000
|
|
FOR I~1 STEP 1 UNTIL 56 DO IF B[I]="," THEN BEGIN X~I; GO TO C1; END; 00192000
|
|
X~56; 00193000
|
|
C1: 00194000
|
|
FOR I~1 STEP 1 UNTIL 56 DO IF B[I]="~" THEN BEGIN Y~I; GO TO C2; END; 00195000
|
|
Y~56; 00196000
|
|
C2: 00197000
|
|
IF Y>X THEN BEGIN 00198000
|
|
P~X-2; V~0; Z~1; 00199000
|
|
FOR I~X-1 STEP -1 UNTIL 2 DO BEGIN V~V+B[I]|Z; Z~10|Z; END; 00200000
|
|
BADR~V; V~0; Z~1; 00201000
|
|
FOR I~Y-1 STEP -1 UNTIL X+1 DO BEGIN V~V+B[I]|Z; Z~Z|10; END; 00202000
|
|
EADR~V; INCR~V; 00203000
|
|
END ELSE BEGIN V~0; Z~1; 00204000
|
|
FOR I~Y-1 STEP -1 UNTIL 2 DO BEGIN V~B[I]|Z+V; Z~Z|10; 00205000
|
|
END; 00206000
|
|
BADR~EADR~V; INCR~0; END; 00207000
|
|
GO TO A8; 00208000
|
|
C5: 00209000
|
|
IF B[1]="P" THEN GO TO A9; 00210000
|
|
IF B[1]="I" THEN GO TO A9; 00211000
|
|
IF B[1]="S" THEN GO TO D5; 00212000
|
|
IF B[1]!"E" THEN BEGIN 00213000
|
|
WRITE(DATADEVICE(BUFFSPEC),F8); GO TO E3; END; 00214000
|
|
SWH~0; 00215000
|
|
D5: 00216000
|
|
IF SWC=1 THEN GO TO D7; 00217000
|
|
CLOSE(TISK,RELEASE); 00218000
|
|
IF SWH=0 THEN GO TO EOJ; 00219000
|
|
GO TO A6; 00220000
|
|
D7: 00221000
|
|
FILL DISH WITH ID[1],ID[2]; 00222000
|
|
ADR~ADDR~0; 00223000
|
|
E1: 00224000
|
|
READ(TISK[ADR],Z3,L1)[D8]; 00225000
|
|
FOR I~1 STEP 1 UNTIL 8 DO IF A[I]!"%" THEN GO TO D9; 00226000
|
|
ADR~ADR+1; GO TO E1; 00227000
|
|
D9: 00228000
|
|
WRITE(DISH[ADDR],Z3,L1); ADR~ADR+1; ADDR~ADDR+1; GO TO E1; 00229000
|
|
D8: 00230000
|
|
WRITE(DATADEVICE(BUFFSPEC),M2); 00231000
|
|
CLOSE(TISK,PURGE); LOCK(DISH,SAVE); 00232000
|
|
SWC~0; 00233000
|
|
IF SWH=0 THEN GO TO EOJ; 00234000
|
|
GO TO A6; 00235000
|
|
A8: 00236000
|
|
IF B[1]="P" THEN GO TO B1; 00237000
|
|
IF B[1]="I" THEN GO TO B3; 00238000
|
|
WRITE(DATADEVICE(BUFFSPEC),Z4); 00239000
|
|
REMOTEREAD2(DATADEVICE1,BUFFSPEC,C,8); 00240000
|
|
IF C[1]="Y" THEN BEGIN SWC~1; FOR I~1 STEP 1 UNTIL 8 DO A[I]~"%"; END 00241000
|
|
ELSE BEGIN SWC~0; FOR I~1 STEP 1 UNTIL RECORDZ DO A[I]~" "; END; 00242000
|
|
FOR ADR~BADR STEP 1 UNTIL EADR DO WRITE(TISK[ADR],Z3,L1)[D3]; 00243000
|
|
GO TO E3; 00244000
|
|
D3: WRITE(DATADEVICE(BUFFSPEC),F7); GO TO E3; 00245000
|
|
B1: 00246000
|
|
WRITE(DATADEVICE(BUFFSPEC),F10); 00247000
|
|
FOR ADR~BADR STEP 1 UNTIL EADR DO BEGIN 00248000
|
|
WRITE(DATADEVICE(BUFFSPEC),F5,ADR) ; 00249000
|
|
READ(TISK[ADR],Z3,L1)[D1]; 00250000
|
|
REMOTEWRITE2(DATADEVICE,BUFFSPEC,A,RECORDZ); 00251000
|
|
WRITE(DATADEVICE(BUFFSPEC),Z6); 00252000
|
|
END; 00253000
|
|
GO TO E3; 00254000
|
|
D1: WRITE(DATADEVICE(BUFFSPEC),F7); 00255000
|
|
GO TO E3; 00256000
|
|
B3: 00257000
|
|
ADR~BADR; 00258000
|
|
D2: 00259000
|
|
WRITE(DATADEVICE(BUFFSPEC),Z21,ADR); 00260000
|
|
REMOTEREAD2(DATADEVICE1,BUFFSPEC,A,RECORDZ); 00261000
|
|
IF A[1]!"%" THEN GO TO B9; 00262000
|
|
IF A[2]!"*" THEN GO TO B9; 00263000
|
|
IF A[3]="~" THEN GO TO E3; 00264000
|
|
B9: 00265000
|
|
FOR I~1 STEP 1 UNTIL RECORDZ DO IF A[I]="~" THEN BEGIN 00266000
|
|
FOR Y~I STEP 1 UNTIL RECORDZ DO A[Y]~" "; GO TO B90;END; 00267000
|
|
B90: 00268000
|
|
WRITE(TISK[ADR],Z3,L1)[B7]; 00269000
|
|
IF INCR=0 THEN GO TO E3; 00270000
|
|
ADR~ADR+INCR; GO TO D2; 00271000
|
|
B7: 00272000
|
|
FILL DISH WITH ID[1],ID[2]; ADDR~1; 00273000
|
|
F1: 00274000
|
|
READ(TISK[ADDR],Z3,L2)[F2]; 00275000
|
|
WRITE(DISH[ADDR],Z3,L2); 00276000
|
|
ADDR~ADDR+1; GO TO F1; 00277000
|
|
F2: CLOSE(TISK,PURGE); 00278000
|
|
GO TO F3; 00279000
|
|
F4: 00280000
|
|
WRITE(DATADEVICE(BUFFSPEC),Z1); 00281000
|
|
REMOTEREAD2(DATADEVICE1,BUFFSPEC,A,RECORDZ); 00282000
|
|
IF A[1]!"%" THEN GO TO F3; 00283000
|
|
IF A[2]!"*" THEN GO TO F3; 00284000
|
|
IF A[3]="~" THEN GO TO F6; 00285000
|
|
F3: 00286000
|
|
WRITE(DISH[ADR],Z3,L1); 00287000
|
|
IF INCR=0 THEN GO TO F6; 00288000
|
|
ADR~ADR+INCR; GO TO F4; 00289000
|
|
F6: LOCK(DISH,SAVE); GO TO E3; 00290000
|
|
END; 00291000
|
|
EOJ: 00292000
|
|
END. 00293000
|
|
END;END. LAST CARD ON 0CRDING TAPE 99999999
|