1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

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