1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-01-13 15:17:03 +00:00

Release emulator version 0.17:

1. Enable (finally!) functioning of P2, the second processor, in CentralControl and Processor.
2. Fix bugs in Character Mode syllables FAD, FSU: initial compare of operands was alphanumeric instead of numeric.
3. Fix bugs in Character Mode syllables TRN, TRZ, TBN: non-boundary destination words were not being fetched into the B register.
4. Enable configuration of additional tape drives (up to the maximum of 16).
5. Implement new flip-flop latching mechanism in CentralControl for use by B5500Console.
6. Optimize clearing of interrupts in Central Control.
7. Implement preliminary mechanism to allow P2 to be added to the configuration temporarily without altering B5500SystemConfiguration.js.
8. Implement new average slack and delay algorithms in Processor.schedule().
9. Optimize some Character Mode syllables by substituting local variables for "this" properties.
10. Fix bugs in Processor single-precision divide syllables leaving the stack in an incorrect state after a divide by zero in Control State.
11. Further minor tweaks to performance throttling.
12. Optimize references to this.cc in Processor.run().
13. Minor improvements to B5500MagTapeDrive: eliminate oscillation at load point, improve timing of rewind operations.
14. Implement build-release.cmd script to generate emulator release archive files.
15. Commit initial Mark-XVI TSSINT transcription from Fausto Saporito.
This commit is contained in:
Paul Kimpel 2013-12-16 04:52:03 +00:00
parent 44dc63133e
commit f07b2579e1
2 changed files with 878 additions and 0 deletions

View File

@ -23927,3 +23927,191 @@ ONE: BEGIN STREAM(I: F~"ENDPACK", D~M[ALPHA-2]);% 38711000
I~TALLY;% 38716000
END;% 38717000
IF NOT P THEN% 38718000
BEGIN BLASTQ(U);% 38719000
DO UNTIL WAITIO(M[ALPHA-2],@40,U)!0;% 38720000
GO TO ONE;% 38721000
END;% 38722000
END;% 38723000
BLASTQ(U); 38724000
CC:: 38725000
M[M[ALPHA-2] INX NOT 3].[9:6]:=0; 38726000
LABELTABLE[U]~-@14; 38730000
RDCTABLE[U]~0; 38731000
IF 32{U AND U{63 THEN PSEUDOCOPY~PSEUDOCOPY+1; 38732000
INDEPENDENTRUNNER(P(..CONTROLCARD),(M[ALPHA-2].[CF])& 38732100
$ SET OMIT = NOT(DATACOM AND RJE ) 38732199
U[2:42:6]&JAR[P1MIX,6][1:1:1], 38732300
192); 38732400
GO CLOSEOUT;% 38733000
CP: EMPTY;% 38735000
IF NOT UNLABELED THEN P(WAITIO(M[ALPHA-2],0,U),DEL);% 38736000
SETNOTINUSE(U,FORMS OR PUNCHLCK); 38737000
GO CLOSEOUT;% 38738000
LP: EMPTY;% 38740000
IF SEPARATE THEN P(WAITIO(@4000100000,0,U),DEL) %150-38741000
ELSE P(WAITIO(@4002000000,0,U),DEL); %150-38741100
IF NOT UNLABELED THEN P(WAITIO(M[ALPHA-2],0,U),DEL);% 38742000
IF NOT SEPARATE THEN P(WAITIO(@4000100000,0,U),DEL); %150-38742100
SETNOTINUSE(U,FORMS); 38743000
GO CLOSEOUT;% 38744000
SP: IF STATE.[43:1] THEN COOLOFF ELSE EMPTY;% 38746000
GO CLOSEOUT;% 38747000
MT: IF NOT STATE.[41:1] THEN% 38749000
BEGIN IF STATE.[43:1] THEN% 38750000
BEGIN COOLOFF; BLASTQ(U);% 38751000
IF NOT REW THEN 38752000
BEGIN T~@1000000140000005&STATE[22:44:1];% 38753000
IF I}NBUFS THEN DO UNTIL WAITIO(T,@377,U).[42:1]; 38754000
IF NOT UNLABELED THEN 38754100
P(WAITIO(T,@377,U),DEL); 38755000
END;% 38756000
END ELSE% 38757000
BEGIN EMPTY;% 38758000
EOFIT: T~@1737000000000000;% 38759000
P(WAITIO([T],@40,U),DEL);% 38760000
IF NOT UNLABELED THEN% 38761000
BEGIN;STREAM(BC~FIB[6],RC~FIB[7],D~M[ALPHA-2]);% 38762000
BEGIN SI~LOC BC; DI~DI+40;% 38763000
DS~5 dec; DS~7 DEC;% 38764000
END;% 38765000
P(WAITIO(M[ALPHA-2],@40,U),DEL);% 38766000
P(WAITIO([T],@40,U),DEL);% 38767000
T~@1000000340000005;% 38768000
P(WAITIO(T,@40,U) ,DEL);% 38769000
END;% 38770000
END;% 38771000
END ELSE% 38772000
IF FIB[18].[1:1]THEN BEGIN FIB[18].[1:1]~FIB[16]~0; 38773000
FIB[10].[3:15]:=0; GO EOFIT END; 38773100
IF REW THEN% 38774000
BEGIN P(WAITIO(@4200000000,@377,U),DEL);% 38775000
STATE.[40:1]~0;% 38776000
END ELSE STATE.[40:1]~NOT STATE.[44:1];% 38777000
PX: IF REL THEN% 38778000
BEGIN SETNOTINUSE(U,0); 38779000
STATE.[41:2]~1;% 38780000
END ELSE STATE.[41:2]~2;% 38781000
IF LOCK THEN% 38782000
BEGIN SETNOTINUSE(U,1); 38783000
STATE.[41:2]~1;% 38784000
END;% 38785000
IF U LSS 16 THEN 38786000
IF PURGE THEN% 38787000
BEGIN IF PRNTABLE[U]<0 THEN% 38788000
BEGIN RDCTABLE[U].[8:6]~0; %538-38788500
INDEPENDENTRUNNER(P(.PURGEID),U,64) 38789000
END %538-38789050
ELSE SETNOTINUSE(U,0); 38789100
STATE.[41:2]~2;% 38790000
END;% 38791000
GO TO CLEANUP;% 38792000
PP:: IF NOT STATE.[41:1] THEN% 38794000
BEGIN EMPTY; P(WAITIO(@2004500000000,@40,U),DEL) END;% 38795000
GO TO PX; 38796000
PR:: IF NOT STATE.[41:1] THEN BEGIN COOLOFF; BLASTQ(U) END;% 38798000
IF REW THEN P(WAITIO(@10340000000,@377,U),DEL);% 38799000
GO TO PX;% 38800000
CD:: 38802000
IF M[ALPHA].[27:1] THEN MOVE(10,FIB[16].[33:15],M[ALPHA-2]) ELSE 38803000
EOD: DO UNTIL READMEFROMDISK(CIDROW[U-32],M[ALPHA-2]); 38804000
$ SET OMIT = PACKETS 38804999
IF JAR[P1MIX,0]<0 AND PRT[P1MIX,21]!0 OR JAR[P1MIX,1]<0 THEN 38806000
BEGIN 38806050
$ SET OMIT = NOT(PACKETS) 38806099
PACKETERR[U-32]:=TRUE; 38806200
IF CIDTABLE[U-32,3] LEQ CIDTABLE[U-32,7] THEN 38806300
$ POP OMIT 38806301
BEGIN STREAM(E~"ENDWAIT": Q~@14, D~M[ALPHA-2]); 38807000
BEGIN SI~LOC Q; SI~SI+7; IF SC!DC THEN DI~DI+1; Q~DI; SI~Q; 38808000
L: IF SC=" " THEN BEGIN SI~SI+1; GO TO L END; 38809000
DI~LOC E; DI~DI+1; IF 3 SC!DC THEN TALLY~1; 38810000
$ SET OMIT = NOT(PACKETS) 38810099
IF TOGGLE THEN 38810100
BEGIN SI~SI-3; IF 4 SC=DC THEN TALLY~0; END; 38810200
$ POP OMIT 38810201
E~TALLY; 38810500
END; 38811000
IF P THEN GO TO EOD; 38812000
END; 38813000
END; 38813100
KIND~0; 38814000
GO TO CC; 38815000
CLOSEOUT:: STATE.[39:4]~1; TIME~1; 38817000
CLEANUP:: CLOSED: DK: BKUP: DC: 38818000
P(P&RCW[CTC],0,RDS,0,XCH,P&P[CTF],STF); 38819000
END OTHER CLOSE; 38820000
PROCEDURE FILEOPEN(XTRA,ALPHA); 39000000
VALUE ALPHA,XTRA; INTEGER ALPHA,XTRA; 39000100
BEGIN REAL RCW=+0;% 39001000
REAL IOM=IOMASK, IOMASK; 39001100
REAL XTRAR=-4,XTRAC=-6; 39001200
INTEGER NBUFS,FNUM,RLEN,TYPE,IO,BLEN,U,KIND, 39002000
MODE,DIREC,FORMS,COBOL,UNLABELED,OPTIONAL,CNTCTL; 39003000
REAL T1,T2,MASK,STATE; 39004000
REAL MFID,FID; INTEGER REEL,CDATE,CYCLE; %KEEP THESE TOGETHER 39004100
ARRAY FIB[*],FPB[*];% 39005000
INTEGER ACCESS,FIB7; 39006000
LABEL DCIN,PBS; 39006100
LABEL DC19; 39006800
LABEL DKRN,SPN,DKSN,DKUN,DKPN,DCN; 39007000
SWITCH INSW~DKRN,SPN,DKSN,DKUN,DCIN; 39008000
LABEL LOOK,EXIT,LOOKOUT,LPS,FINALIN,FINALOUT,SPDC;% 39009000
REAL SUBROUTINE DSED; DSED:=TERMSET(P1MIX); 39009050
REAL SUBROUTINE CNTLBITS;% 39026000
CNTLBITS~IOMASK&MODE[21:47:1]&DIREC[22:47:1]&CNTCTL[23:47:1]39027000
&IO[24:47:1]&(KIND=7 OR KIND>9 AND KIND{12)[20:47:1] 39028000
&(IF KIND=1OR KIND=7OR KIND=12THEN@20ELSE 0)[27:42:6];39029000
SUBROUTINE MAKEIODS;% 39031000
BEGIN FIB[16]~T1~((BLEN-1)|DIREC+M[ALPHA])&CNTLBITS[18:18:15]% 39032000
&(IF BLEN{1023 THEN BLEN ELSE 1023)[838:10]% 39033000
&TINU[IF (KIND=7 OR KIND=12) THEN IF TYPE<20 39034000
THEN 20 ELSE 22 ELSE 39034050
IF KIND=11 THEN 23 ELSE U][3:3:5] OR M; 39034100
FIB[19]~(IF STATE.[46:2]=0 THEN (DIREC INX T1)% 39035000
&(2|DIREC+(BLEN>1023)+1)[3:43:5] ELSE% 39036000
IF STATE.[46:2]=1 THEN ((NOT RLEN INX 2)|DIREC INX T1)39037000
&RLEN[8:38:10]&(3|DIREC+2)[3:43:5] ELSE% 39038000
(1-DIREC INX T1)&RLEN[8:38:10]&(DIREC+6)[3:43:5])% 39039000
&IO[25:47:1];% 39040000
IF NOT (IO OR COBOL)THEN% 39041000
T1~FIB[19]&T1[3:3:5]&0[25:25:1];% 39042000
FIB[10],[3:15]~M[ALPHA]-2; %HEAD OF BUFFER RING 39042100
T2~T1.[33:15]-M[ALPHA];% 39043000
FOR MASK~0 STEP 1 UNTIL NBUFS-1 DO% 39044000
BEGIN %P 39045000
M[ALPHA+MASK]~FLAG((P(DUP,LOD)+T2)&P(T1,XCH)[33:33:15]);% 39046000
END;% 39047000
END MAKEIODS;% 39048000
LABEL DKR0,SPO,DKS0,DKU0,DKP0,DC0; 39049000
SWITCH OUTSW~DKR0,SPO,DKS0,DKU0,DC0;% 39050000
LABEL FIXFIB,FIND,SPACER;% 39054000
LABEL PREFINAL,DK1;% 39055000
ARRAY HEADER[*];% 39056000
REAL TOG; 39056100
LABEL AGN; 39056500
FIB~M[ALPHA-3]; FPB~PRT[P1MIX,3];% 39083000
IOMASK:=IOM; 39083100
NBUFS~FIB[13].[1:9]; FNUM~FIB[4].[13:11]; BLEN~FIB[18].[3:15];% 39084000
TYPE~FPB[FNUM+3].[43;5];% 39085000
STREAM(S ~ [FPB[FNUM+2]], D ~ [REEL]);% 39086000
BEGIN SI:=S;DS:=3OCT;DS:=5OCT;DS:=OCT END;% 39087000
P(CDATE, RSB, .CDATE,~); 39087100
IF FPB[FNUM+4]>0 THEN REEL ~ CDATE ~ CYCLE ~ 0; 39087500
MODE~FIB[13].[24:1]; IO~FIB[13].[27:1]; RLEN~FIB[18].[33:15];% 39088000
DIREC~FIB[13].[25:1]; FORMS~FPB[FNUM+3].[42:1];% 39089000
STATE~FIB[5]; UNLABELED~FIB[4].[2:1]; 39090000
MFID~FPB[FNUM]; FOD~FPB[FNUM+1]; OPTIONAL~FIB[4].[5:1];% 39091000
COBOL~(FIB[13] AND 1)&([FIB].[8:10]=22)[1:47:1]; % COBOL 60 & 68 39091100
KIND~FIB[4].[8:4]; IF FIB[13].[28:10]!0 THEN REEL~FIB[13].[28:10]; 39092000
IF COBOL>0 OR FIB[4].[7:1] THEN % COBOL 60 OR SORT 39092010
M[FIB INX NOT 1].[3:6]~2 39092020
ELSE M[ALPHA-7].[3:6]~2; 39092030
$ SET OMIT = NOT(DATACOM AND RJE ) 39092039
IF TYPE=19 THEN GO TO DC19 ELSE 39092045
IF TYPE=26 THEN GO TO DKPN ELSE 39092050
IF TYPE>26 THEN GO TO DCN; 39092055
IF (TYPE=0 AND NOT IO) OR TYPE GTR 20 THEN 39092060
BEGIN IF USEPBD 39092070
$ SET OMIT = NOT(DATACOM AND RJE ) 39092074
THEN TYPE:=22; GO TO LOOKOUT; 39092080
END; 39092090

View File

@ -0,0 +1,690 @@
% I N T R I N S I C S M A R K XVI.0.00 10/01/74
COMMENT: * TITLE: B5500/B5700 MARK XVI SYSTEM RELEASE *
* FILE ID: SYMBOL/INTRINS TAPE ID: SYMBOL1/FILE000 *
* THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION *
* AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED *
* EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON *
* WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF *
* BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 *
* *
* COPYRIGHT (C) 1971, 1972, 1974 *
* BURROUGHS CORPORATION *
* AA320206 AA393180 AA332366 *;
BEGIN
DEFINE ETRLNG = 5#,
INTDESC(INTDESC1) = FLAG(INTDESC1 & 85[1:41:7]) #,
INTCALL(INTCALL1,INTCALL2) = P(INTCALL2 & 85[1:41:7],
INTCALL1,COC) #,
CALLINT(CALLINT1) = P(CALLINT1 & 85[1:41:7],XCH,COC) #,
COBOLDCI= @167 #,
FORTERRI= @134 #,
EXPI = @20 #,
LNI = @17 #,
DEXPI = @77 #,
DLOGI = @101 #,
CABSI = @53 #,
SINI = @14 #,
SQRTI = @13 #,
ATAN2I = @114 #,
DMODI = @65 #,
DSINI = @105 #,
DSQRTI = @123 #,
XTOII = @6 #,
CXTOII = @56 #,
COSI = @15 #,
TANI = @111 #,
ARCTANI = @16 #,
DATANI = @113 #,
ARSINI = @116 #,
GAMMAI = @126 #,
EDITIT(EDITIT1,EDITIT2,EDITIT3,EDITIT4,EDITIT5) = P(MKS,
EDITIT1,EDITIT2,EDITIT3,(-1),(EDITIT4),(EDITIT5),
@153&85[1:41:7],XCH,COC) #,
% EDITIT(BUFFADDRESS,FIELDWIDTH(W),TYPE,LOWPART,HIGHPART)
% WILL EDIT THE VALUE (LOWPART,HIGHPART) INTO A FIELD
% STARTING AT BUFFADDRESS. EDITIT RETURNS THE ENDING
% ADDRESS. THE WIDTH OF THE EDITED FIELD IS CONSTRAINED
% TO W CHARACTERS (EDITED VALUE IS RIGHT JUSTIFIED WITH
% LEADING BLANKS IF W IS LARGER THAN NEEDED) -- BUT IF
% W=0, THEN EDITIT WILL ADJUST THE FIELD WIDTH TO
% ACCOMODATE FULL NUMERICAL SIGNIFICANCE. TYPE=2 => EDITIT
% WILL CHOOSE BETWEEN REAL, INTEGER, AND DOUBLEPRECISION
% EDITING (DOUBLEPRECISION IS USED IF LOWPART!0).
% TYPE=1 => USE ONLY INTEGER, TYPE=3 => USE ONLY REAL,
% TYPE=4 => USE ONLY LOGICAL, TYPE=5 => USE ONLY DOUBLE-
% PRECISION.
CTC = 33:33:15#,
CTF = 18:33:15#,
FTC = 33:18:15#,
FTF = 18:18:15#,
CF = 33:15#,
FF = 18:15#;
REAL JUNK = 5;
NAME MEM=2, M=2, MEMORY=2 ;
REAL BLKCNTRL = 5;
DEFINE DUMPNOW(DUMPNOW1)=P(DUMPNOW1,0,48,COM,DEL,DEL)#,
TRACENOW(TRACENOW1,TRACENOW2)=
P(TRACENOW1,1,TRACENOW2 ,+ ,48,COM,DEL,DEL)#;
PROCEDURE OUTPUTINT(TEN, FILX, CHSKP, LNSKP, FI, FRMT, LISX);% %WF
VALUE CHSKP, LNSKP, FI, LISX;% %WF
NAME FILX;% %WF
ARRAY TEN[*], FRMT[*];% %WF
REAL LISX;% %WF
INTEGER CHSKP, LNSKP, FI;% %WF
FORWARD;% CODE=00200000, INTRINSIC NUMBER=@ 1 %WF
PROCEDURE INTRINSIC(DUPE, D, NUMDIM, SIZE, TYPE);% %WF
VALUE DUPE, D, NUMDIM, SIZE, TYPE;% %WF
NAME D;% %WF
ARRAY DUPE[*];% %WF
INTEGER NUMDIM, SIZE, TYPE;% %WF
FORWARD;% CODE=00400000, INTRINSIC NUMBER=@ 2 %WF
PROCEDURE INPUTINT(TEN, FILX, DKADR, ACT,% %WF
FI, FRMT, LISX, EOFL, PARL);% %WF
VALUE ACT, FI;% %WF
NAME FILX, LISX;% %WF
ARRAY TEN[*], FRMT[*];% %WF
REAL EOFL, PARL;% %WF
INTEGER DKADR, ACT, FI;% %WF
FORWARD;% CODE=00600000, INTRINSIC NUMBER=@ 3 %WF
PROCEDURE DISKSORT(T1, T2, RELA, ENDQ, BINGO, IPFIDX,% %WF
OUTPRO, INPRO, OUTF, INF, OPTOG, IPTOG, DKO, DKI,% %WF
TP1, TP2, TP3, TP4, TP5, NT, HIVALU, EQUALS,% %WF
R, ALFA, CORESIZE, DISKSIZE);% %WF
VALUE OPTOG, IPTOG, NT, HIVALU, EQUALS, R, ALFA,% %WF
CORESIZE, DISKSIZE;% %WF
NAME TP1, TP2, TP3, TP4, TP5;% %WF
REAL T1, T2, RELA, ENDQ, BINGO, IPFIDX, OUTPRO, INPRO,% %WF
OUTF, INF, DKO, DKI, NT, HIVALU, EQUALS, CORESIZE;% %WF
BOOLEAN OPTOG, IPTOG, ALFA;% %WF
INTEGER R, DISKSIZE;% %WF
FORWARD;% CODE=00700000, INTRINSIC NUMBER=@ 4 %WF
REAL PROCEDURE DUMPINT(SN, CV, BV, TIPE,% %WF
TENS, ALFA, CHAR, FIEL, FORMT);% %WF
VALUE SN, CV, BV, TIPE, TENS, ALFA, CHAR, FORMT;% %WF
NAME FIEL;% %WF
REAL SN, CV, BV, TIPE, TENS, ALFA, CHAR, FORMT;% %WF
FORWARD;% CODE=42000000, INTRINSIC NUMBER=@ 5 %WF
PROCEDURE XTOTHEIINT(BASE, EXPON, M, LOG, EXP);% %WF
VALUE BASE, EXPON, M, LOG, EXP;% %WF
REAL BASE, EXPON, M, LOG, EXP;%
FORWARD;% CODE=42254000, INTRINSIC NUMBER=@ 6
REAL PROCEDURE ABSINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@ 7
REAL PROCEDURE SIGNINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@10
INTEGER PROCEDURE ENTIERINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@11
REAL PROCEDURE TIMEINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@12
PROCEDURE SQRTINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@13
PROCEDURE SININT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@14
PROCEDURE COSINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@15
REAL PROCEDURE ARCTANINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@16
PROCEDURE LNINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@17
REAL PROCEDURE EXPINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@20
REAL PROCEDURE GOTOSOLVERINT(L, X, F, B);%
VALUE L, X, F, B;%
ARRAY F[*];%
REAL L, X, B;%
FORWARD;% CODE= INTRINSIC NUMBER=@21
PROCEDURE ALGOLWRITE(TEN, FILX, CHSKP, LNSKP, FI, AEXP,%
ARRY, LINESKIP, CHANSKIP, SUPRS, NUMWDS, TANK);%
VALUE CHSKP, LNSKP, FI, AEXP, LINESKIP,%
CHANSKIP, SUPRS, NUMWDS, TANK;%
NAME FILX, TANK;%
ARRAY TEN[*], ARRY[*];%
INTEGER CHSKP, LNSKP, FI, AEXP, LINESKIP,%
CHANSKIP, SUPRS, NUMWDS;%
FORWARD;% CODE=00100100, INTRINSIC NUMBER=@22
PROCEDURE ALGOLREAD(TEN, FILX, DKADD, ACT, FI, AEXP,%
ARRY, EOFL, PARL, DKADR, CODE, TANK);%
VALUE ACT, FI, AEXP, DKADR, CODE, TANK;%
NAME FILX, TANK;%
ARRAY TEN[*], ARRY[*];%
REAL DKADD, EOFL, PARL, DKADR, CODE;%
INTEGER ACT, FI, AEXP;%
FORWARD;% CODE=00500000, INTRINSIC NUMBER=@23
PROCEDURE ALGOLSELECT(ACT1, ACT2, TANK, I);%
VALUE ACT1, ACT2, TANK, I;%
NAME TANK;%
INTEGER ACT1, ACT2, I;%
FORWARD;% CODE= INTRINSIC NUMBER=@24
PROCEDURE COBOLFCR;%
FORWARD;% CODE=43000000, INTRINSIC NUMBER=@25
PROCEDURE COBOLID;% % GO TO 02700000
FORWARD;% CODE=43230000, INTRINSIC NUMBER=@26
PROCEDURE POLYMERGE(T1, T2, T3, ENDQ, BINGO, IPFIDX,%
OUTPRO, INPRO, OUTF, INF, OPTOG, IPTOG, DKO, DKI,%
TP1, TP2, TP3, TP4, TP5, NT, HIVALU, EQUALS,%
R, ALFA, CORESIZE, DISKSIZE);%
VALUE OPTOG, IPTOG, NT, HIVALU, EQUALS, R, ALFA,%
CORESIZE, DISKSIZE;%
NAME TP1, TP2, TP3, TP4, TP5;%
REAL T1, T2, T3, ENDQ, BINGO, IPFIDX, OUTPRO, INPRO,%
OUTF, INF, DKO, DKI, NT, HIVALU, EQUALS, R, CORESIZE;
BOOLEAN OPTOG, IPTOG, ALFA;%
INTEGER DISKSIZE;%
FORWARD;% CODE=40140000, INTRINSIC NUMBER=@27
PROCEDURE STATUSINT(T, C);%
VALUE T, C;%
REAL T;%
INTEGER C;%
FORWARD;% CODE= INTRINSIC NUMBER=@30
REAL PROCEDURE MAXINT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@31
REAL PROCEDURE MININT(X);%
VALUE X;%
REAL X;%
FORWARD;% CODE= INTRINSIC NUMBER=@32
PROCEDURE DELAYINT(ARRY, MASK, TIME);%
VALUE ARRY, MASK, TIME;%
ARRAY ARRY[*];%
REAL MASK;%
INTEGER TIME;%
FORWARD;% CODE= INTRINSIC NUMBER=@33
PROCEDURE SUPERMOVERINT(SORCE, DEST, AEXP);%
VALUE AEXP;%
ARRAY SORCE[*], DEST[*];%
INTEGER AEXP;%
FORWARD;% CODE= INTRINSIC NUMBER=@34
PROCEDURE SISO; FORWARD; %INT#35,SEQ#08400000
INTEGER PROCEDURE DELTA(P1,P2);%INT#36,SEQ#00022300
VALUE P1,P2; INTEGER P1,P2; FORWARD;
PROCEDURE ICVD; FORWARD; %INT#37,SEQ#00022500
PROCEDURE DYNAMICDIALER(B, A, X, F);
VALUE B, A, X, F;
INTEGER B, A, X; BOOLEAN F;
FORWARD;% CODE=00022700, INTRINSIC NUMBER=@40
PROCEDURE SCAN(UPDPDD,PRT,UPDCDD,HISCOUNT,CASECODE,CHAR);
VALUE PTR, HISCOUNT, CASECODE, CHAR;
NAME UPDPDD, UPDCDD;
INTEGER PTR, HISCOUNT, CASECODE, CHAR;
FORWARD;
PROCEDURE REPL; FORWARD; %INT#42,SEQ#08420000
PROCEDURE COMPARE;FORWARD; %INT#43,SEQ#08430000
PROCEDURE BASICPRINT(TYPE);
VALUE TYPE;
REAL TYPE;
FORWARD; CODE=08500000, INTRINSIC NUMBER=@44
PROCEDURE SWAP; FORWARD; %INT#45,SEQ#00023700
PROCEDURE BASICINPUT(TYPES);
VALUE TYPES;
REAL TYPES;
FORWARD;% CODE=08700000, INTRINSIC NUMBER=@46
PROCEDURE READATA(TYPE);
VALUE TYPE;
REAL TYPE;
FORWARD;% CODE=08600000, INTRINSIC NUMBER=@47
PROCEDURE FTINT ; FORWARD; % 050
PROCEDURE FTOUT ; FORWARD; % 051
PROCEDURE DABS ; FORWARD; % 052
PROCEDURE CABS ; FORWARD; % 053
PROCEDURE AINT ; FORWARD; % 054
PROCEDURE MATH ; FORWARD; % 055
PROCEDURE XTOI ; FORWARD; % 056
PROCEDURE IDINT ; FORWARD; % 057
PROCEDURE FLOAT ; FORWARD; % 060
PROCEDURE SNGL ; FORWARD; % 061
PROCEDURE DBLE ; FORWARD; % 062
PROCEDURE AMOD ; FORWARD; % 063
PROCEDURE TIME ; FORWARD; % 064
PROCEDURE DMOD ; FORWARD; % 065
PROCEDURE DMAX1 ; FORWARD; % 066
PROCEDURE DMIN1 ; FORWARD; % 067
PROCEDURE SIGNV ; FORWARD; % 070
PROCEDURE DSIGN ; FORWARD; % 071
PROCEDURE DIIM ; FORWARD; % 072
PROCEDURE REALP ; FORWARD; % 073
PROCEDURE AIMAG ; FORWARD; % 074
PROCEDURE CMPLX ; FORWARD; % 075
PROCEDURE CONJG ; FORWARD; % 076
PROCEDURE DEXP ; FORWARD; % 077
PROCEDURE CEXP ; FORWARD; % 100
PROCEDURE DLOG ; FORWARD; % 101
PROCEDURE CLOG ; FORWARD; % 102
PROCEDURE ALOG10; FORWARD; % 103
PROCEDURE DLOG10; FORWARD; % 104
PROCEDURE DSIN ; FORWARD; % 105
PROCEDURE CSIN ; FORWARD; % 106
PROCEDURE DCOS ; FORWARD; % 107
PROCEDURE CCOS ; FORWARD; % 110
PROCEDURE TANF ; FORWARD; % 111
PROCEDURE COTAN ; FORWARD; % 112
PROCEDURE DATAN ; FORWARD; % 113
PROCEDURE ATAN2 ; FORWARD; % 114
PROCEDURE DATAN2; FORWARD; % 115
PROCEDURE ARSIN ; FORWARD; % 116
PROCEDURE ARCOS ; FORWARD; % 117
PROCEDURE SINH ; FORWARD; % 120
PROCEDURE COSH ; FORWARD; % 121
PROCEDURE TANH ; FORWARD; % 122
PROCEDURE DSQRT ; FORWARD; % 123
PROCEDURE CSQRT ; FORWARD; % 124
PROCEDURE ERF ; FORWARD; % 125
PROCEDURE GAMMA ; FORWARD; % 126
PROCEDURE ALGAMA; FORWARD; % 127
PROCEDURE ANDI ; FORWARD; % 130
PROCEDURE ORI ; FORWARD; % 131
PROCEDURE CMPL ; FORWARD; % 132
PROCEDURE EQUIVP; FORWARD; % 133
PROCEDURE FORTERR;FORWARD; % 134
PROCEDURE MAX; FORWARD; % 135
PROCEDURE MIN; FORWARD; % 136
PROCEDURE IMOD; FORWARD; % 137
PROCEDURE CONCAT; FORWARD; % 140
PROCEDURE CONCAT;
FORWARD;% CODE=08400000, INTRINSIC NUMBER=@140
PROCEDURE MATRIXDIDDLER(A, B, C, TYPE);
VALUE A, B, C, TYPE;
ARRAY A[*], B[*], C[*];
INTEGER TYPE;
FORWARD;% CODE=08800000, INTRINSIC NUMBER=@~4~
PROCEDURE INVERT(A, B);
VALUE A, B;
ARRAY A[*], B[*];
FORWARD;% CODE=09100000, INTRINSIC NUMBER=@142
PROCEDURE TRANSPOSE(A, B);
VALUE A, B;
ARRAY A[*], B[*];
FORWARD;% CODE=08900000, INTRINSIC NUMBER=@143
PROCEDURE MATRIXMULTIPLY(A, B, C);
VALUE A, B, C;
ARRAY A[*], B[*], C[*];
FOWARD;% CODE=09000000, INTRINSIC NUMBER=@144
PROCEDURE RANDOM(NUMBER, BASE);
VALUE NUMBER;
REAL NUMBER;
INTEGER BASE;
FORWARD;% CODE=00022900, INTRINSIC NUMBER=@145
PROCEDURE FORTRANFREEREAD;
FORWARD;% CODE=09200000, INTRINSIC NUMBER=@146
PROCEDURE BASICLOSE(FILX);
VALUE FILX; NAME FILX;
BEGIN REAL SELECT=14, ALGOLWRITE=12; ARRAY AIT=6[*];
REAL T,I; ARRAY FIB[*]; NAME M=2;
SUBROUTINE MAYBEPRINT;
BEGIN FIB:=FILX[NOT 2];
IF FIB[5].[41:3]=0 THEN %NOT CLOSED-NOT INPUT
IF FIB[4].[8:4] NEQ 10 THEN %NOT DATA COM
IF FIB[20].[3:15]!0 THEN % DATA LEFT
P(MKS,1,0,0,(FIB[20].[18:10]+1),FILX,ALGOLWRITE);
END;
IF P(.FILX,LOD)=0 THEN %EOJ FILE CLOSE
BEGIN I:=AIT[0]+1; WHILE (T:=AIT[I:=I-1]).[8:10] NEQ 0
DO IF T.[1:1] THEN
BEGIN FILX:=M[M[T.[18:15]] INX 4]; MAYBEPRINT END;
END ELSE %FILE RESTORE
BEGIN MAYBEPRINT;
P(MKS,2,0,[FILX[NOT 2]],4,SELECT);
FIB[0]:=FIB[8]:=FIB[20]:=FIB[21]:=0;
END;
END BASIC FILE RESTORE;
PROCEDURE FILEATTRIBUTES(T,E,D,V,G,I,TN); VALUE T,I,V,D,G; REAL D,G,I,E;
INTEGER V; ARRAY TN[*]; NAME T; FORWARD; % CODE @ 0043000, INT # @150
PROCEDURE COBOLDECIMALTOOCTALCONVERT(A); % INT #=@151, CODE=09300000
VALUE A; NAME A; FORWARD ;
PROCEDURE COBOLOCTOLTODECIMALCONVERT(A,L,H,R,N,S,T); % INT #=@152
VALUE L,H,R,N,S,T; REAL L,H,R,N,S,T; NAME A; FORWARD; % CODE=09400000
PROCEDURE FORTRANFREEWRITE(F,D,R,W,L,I,N,S); VALUE I,D,R,W,L; INTEGER R,
W; REAL I,D,L; NAME F; ARRAY S[*],N[*]; FORWARD ;%COD @02976019.INT@153
PROCEDURE FINNAME; FORWARD;
PROCEDURE FOUTNAME; FORWARD;
PROCEDURE FTINTFIX(F1,D2,F2,F3,L1,E1,E2,P1); VALUE D1,F2,L1,E1,E2,P1 ;
REAL D1,F2,L1,E1,E2,P1; ARRAY F3[*]; NAME F1; FORWARD; % INTRINSIC @156
PROCEDURE FTOUTFIX(F,D,R,Q,L,E,EL,PL); VALUE D,R,L,E,EL,PL; REAL D,R,L,E
,EL,PL; NAME F; ARRAY Q[*]; FORWARD ; % CODE AT SEQ # 02886040, INT@157
PROCEDURE FBINBACKBLOCK(F1,D,F2,F3,L,E1,E2,P1); VALUE D,F2,L,E1,E2,P1 ;
REAL D,F2,L,E1,E2,P1; ARRAY F3[*]; NAME F1; FORWARD; % INT # @160.
PROCEDURE COBOLVARSZ; FORWARD;% CODE=09500000 INT #=@161
PROCEDURE COBOLIONONDSK; FORWARD;% CODE=096000000 INT #=@162
PROCEDURE COBOLIODSK; FORWARD;% CODE=09700000 INT #=@163
PROCEDURE FORTRANMEMHANDLER(A,H);VALUE H;REAL H;ARRAY A[*];FORWARD;%164
PROCEDURE COBOLATT; FORWARD; % CODE = 02650000 INT # = @165 %CJC 103I
PROCEDURE INTERRUPTER; FORWARD; % CODE=09800000; INT #=@166
PROCEDURE COBOLDC; FORWARD; % CODE = 02690000 INT #=@167
INTEGER PROCEDURE DELTA(P1,P2); VALUE P1,P2; REAL P1,P2; %@036
BEGIN
DEFINE
DOT=[18:13]#, AMPER=[18:35:13]#;
COMMENT @4000000=2|20, WHICH IS 1 LARGER THAN ANY 6500 COUNT.;
COMMENT DELTA=2|20 IF DESC(P1)!DESC(P2) OR CSIZE-S ARE !;
IF (P2-P1).[31:17]!0 THEN DELTA~@4000000 ELSE
DELTA~P2.DOT-P1.DOT;
END DELTA;
PROCEDURE ICVD; %37
BEGIN
DEFINE DOT=[18:13]#, AMPER=[18:35:13]#, CSIZE=[31:02]#,SIX=0#;
ARRAY STRING[*];
NAME M = 2;
REAL PTR=-3; INTEGER N=-1;
IF PTR.CSIZE!SIX THEN POLISH(M&1[17:47:01],9999,CDC,DEL);
STRING ~ M[PTR];
N~N; COMMENT MAKE SURE N IS INTEGERIZED;
IF N>8 THEN POLISH(M&1[14:47:01],N,CDC,DEL);
POLISH([STRING[(PTR.DOT+N-1).[35:10]]], DEL);
STREAM(RESULT~0:S~[STRING[PTR.[18:10]]], N,
SKS~PTR.[28:03]);
BEGIN
DI ~ LOC RESULT;
SI ~ S; SI ~ SI+SKS
DS ~ N OCT;
END;
PTR ~ P;
END ICVD;
PROCEDURE DYNAMICDIALER(A,B,X,F) ;
VALUE B, A, X, F;
INTEGER B, A, X; BOOLEAN F;
BEGIN % A,B,X,Y,Z ARE AS IN Y&Z[A:B:X].
% F=TRUE => X WAS LITERAL, AND TRB WILL BE DONE AFTER XITING.
REAL Y=-7, Z=-6, C=+1 ;
DEFINE Q= @3403007777777777 #, % MASK FOR ZERO-ING OUT THE G,H,K&V-
% REGISTER PARTS OF THE ROW.
R= @0055005500610065 #, % NOP,DIA,DIB,TRB.
S= @0055703404210435 #; % NOP,LITC Y,STD,XIT.
IF (A~A)<1 OR (B~B)<1 OR (X~X)<1 OR X+A>48 OR X+B>48
THEN P((-63),26,COM) ;
IF F THEN P(Q,AND,0&(B MOD 6)[4:9:3],A MOD 6,DIB 7,TRB 3,
P&(B DIV 6)[12:45:3],A DIV 6,DIB 15,TRB 3,OR,0,0,XIT) ;
GO P(P(R)&(B DIV 6)[12:45:3],A DIV 6,DIB 24,TRB 3,P&(B MOD 6)
[15:9:3],A MOD 6,DIB 27,TRB 3,P&X[36:42:6],.A,~,S,.B,~,Y,Z,[A]);
END DYNAMICDIALER;
PROCEDURE RANDOM(NUMBER, BASE);
VALUE NUMBER;
REAL NUMBER;
INTEGER BASE;
BEGIN INTEGER N;
REAL T;
IF (T := NUMBER MOD 1.0)>0 THEN
BEGIN BASE := T.[9:38]; P(RTN); END;
IF NUMBER!0 THEN
BEGIN T := POLISH(1, 1, COM);
N := 0 & T[10:36:6] & T[16:42:6] & T[22:30:6]
& ((T.[30:18])|P(DUP))[28:22:20];
END ELSE IF (N := BASE)=0 THEN N := @2631353020000;
T := 3 & (N.[10:26]|6137 + 2197513)[10:12:36];
POLISH((((BASE := T) OR 0.5) - 0.5) + P(DUP), RTN);
END RANDOM;
PROCEDURE SWAP; % 045
BEGIN
ARRAY A = -2 [*,*], B = -1 [*,*];
STREAM(A, B, CA~0, CB~0, FA~A.[18:15], FB~B.[18:15]);
BEGIN
SI ~ A; CA ~ SI;
SI ~ B; CB ~ SI;
DI ~ LOC B; DI ~ DI+5; SKIP 3 DB;
SI ~ LOC CA; SI ~ SI+5; SKIP 3 SB;
3(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB); DS ~ 2 CHR;
DI ~ DB; SI ~ LOC B; DS ~ WDS;
DI ~ LOC A; DI ~ DI+5; SKIP 3 DB;
SI ~ LOC CB; SI ~ SI+5; SKIP 2 SB;
3(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB); DS ~ 2 CHR;
DI ~ FA; SI ~ LOC A; DS ~ WDS;
END;
END SWAP;
COMMENT ALGOL WRITE INTRINSIC;%
PROCEDURE ALGOLWRITE(TEN, FILX, CHSKP, LNSKP, FI, AEXP,
ARRY, LINESKIP, CHANSKIP, SUPRS, NUMWDS, TANK);
VALUE LINESKIP, CHANSKIP, SUPRS, NUMWDS, TANK,
CHSKP, LNSKP, FI, ARRY;
INTEGER CHSKP, LNSKP, FI, AEXP,
LINESKIP, CHANSKIP, NUMWDS, SUPRS;
NAME FILX, TANK;
ARRAY ARRY[*], TEN[*];
BEGIN REAL SELECT=14,REED=13,ADDRESS;%
NAME MEM=2;%
LABEL AB,ACTION;
LABEL DS,WINDUP1;
ARRAY FPB=3[*],FIB[*],HEADER[*];%
INTEGER I,RSIZE;%
INTEGER SPOUT;
ARRAY TINK=TANK[*];
REAL CHNSKP=CHANSKIP;
REAL ALGOLWRITE=12;
DEFINE FNUM = FIB[4].[11:31] #;
$ SET OMIT = NOT(TIMESHARING)
SUBROUTINE WAIT; POLISH(TANK, @2000000000, 36, COM, DEL DEL);
$ POP OMIT
$ SET OMIT = TIMESHARING
LABEL ERR,LP1,MT1,CLOSED,DK1,SP1,CP1,DC1,PP1;%
LABEL DCN1,DCN2,SPIN;
$ SET OMIT = NOT SHAREDISK
SWITCH SW1~ ERR,LP1,MT1,CLOSED,DK1,SP1,CP1,LP1,PP1,ERR,DC1,
ERR,LP1,DCN1;
LABEL LP2,MT2,DK2,SP2,CP2,DC2,PP2;%
SWITCH SW2~ ERR,LP2,MT2,ERR,DK2,SP2,CP2,LP2,PP2,ERR,DC2,ERR,
LP2,DCN2;
LABEL DS1,DR1,DU1;%
SWITCH DSW1~DS1,DR1,DU1,CLOSED;
LABEL UT,PBIT,DWT,D19,RELEASE,STA,EXIT,L1,WINDUP,DBIT;%
LABEL TYPEU,TYPEA,TYPEC;%
SWITCH TYPE~TYPEU,TYPEA,ERR,TYPEC;%
LABEL DS2,DR2,DU2;%
SWITCH DSW2~DS2,DR2,DU2;%
SUBROUTINE BLOCK;%
BEGIN GO TO TYPE[I~FIB[5].[46:2]];%
TYPEC: STREAM(D1~IOD,S~(NUMWDS~NUMWDS+1)|8,%
D2~(TANK[0]~NUMWDS INX IOD));%
BEGIN SI~LOC S; DI~DI-8; DS~4 DEC; DI~D1;%
SI~D2; SI~SI-8; DI~DI-4; DS~4 CHR;%
END;%
IF (FIB[17]~FIB[17]-NUMWDS)>RSIZE+1 THEN BEGIN%
OWT: FIB[7]~FIB[7]+1; P(XIT);%
TYPEA: IF (FIB[17]~FIB[17]-RSIZE)}RSIZE THEN%
BEGIN TANK[0]~RSIZE INX IOD; GO OWT END END;%
NUMWDS~FIB[18].[18:5]-FIB[17]+(I=3);%
TYPEU: END BLOCK;%
REAL SUBROUTINE DISKADDRESS;%
BEGIN%
ADDRESS~(CHANSKIP DIV HEADER[0].[30:12])|HEADER[0].[42:6];%
IF (SUPRS~ADDRESS DIV HEADER[1]+10)}30 THEN
BEGIN P(0); GO TO EXIT END;
IF HEADER[SUPRS]=0 THEN
IF HEADER[9]>(SUPRS-10) THEN%
P(FPB[FNUM+3],FPB[FNUM],FPB[FNUM+1],SUPRS,HEADER,
4,11,COM,DEL,DEL,DEL,DEL,DEL,DEL) ELSE
BEGIN P(0); GO TO EXIT END;%
ADDRESS~HEADER[SUPRS]+SUPRS+ADDRESS MOD HEADER[1];%
STREAM(D~[ADDRESS]); BEGIN SI~D; DS~8 DEC END; P(1);%
EXIT: DISKADDRESS~P;%
END DISKADDRESS;%
IF TINK=0 THEN %WF
BEGIN FIB ~ FILX[NOT 2]; %WF
IF FIB[5].[11:2]<2 THEN P(MKS,"WRITING",FILX,7,SELECT) ;
IF FIB[5].[43:1] THEN
P(MKS, CHSKP, 0, FILX, 1, SELECT);
IF LNSKP>1 AND ARRY{0 AND (I~FIB[4].[8:4])!1
$ SET OMIT = NOT(TIMESHARING)
AND I!7 AND I!12 AND I!10 THEN
$ SET OMIT = TIMESHARING
P(XIT);%CARRIAGE CONTROL ON NON-PRINTER FILE
RSIZE ~ P(MKS, LNSKP, CHSKP, SUPRS, %WF
(-1), FILX, ALGOLWRITE); %WF
IF ARRY{0 THEN SUPRS ~ 1 ELSE %WF
BEGIN % 11/24/72 - CORRECTED 10/3/73
IF ARRY.[8:10]=P(DUP,0) THEN % INDEXED WRITE
P(DEL,AEXP) % WRITE MIN(AEXP,RSIZE) WORDS
ELSE % WRITE MIN(ARRY, SIZE,AEXP,RSIZE) WORDS
IF P GTR P(DUP,AEXP) %
THEN P(DEL,AEXP); %WF
IF P(DUP)}RSIZE THEN P(DEL) ELSE RSIZE ~ P; %WF
STREAM(P4 ~ [ARRY[0]], P3 ~ RSIZE, %WF
P2 ~ P(DUP).[36:6], P1 ~ *FILX); %WF
END; %WF
END; %WF
IF RSIZE>0 THEN P(MKS, LNSKP, %WF
CHSKP, SUPRS, RSIZE, FILX, ALGOLWRITE); %WF
FILX[NOT 4] ~ FILX[NOT 3] ~ 0; %WF
P(XIT); %WF
END; %WF
FIB~TANK[NOT 2];%
UT: I~FIB[4].[8:4]; RSIZE~FIB[18].[33:15];%
SPOUT:=(I=5);
$ SET OMIT = TIMESHARING
IF CHNSKP.[4:1] THEN
BEGIN CHNSKP.[4:1]~0;
$ SET OMIT = NOT SHAREDISK
END;
IF NUMWDS<0 THEN GO TO SW1[I]; GO TO SW2[I];%
LP1: MT1: SP1: CP1: PP1:
%
D19: IF IOD.[19:1] THEN%
PBIT: IF IOD.[2:1] THEN P(RSIZE,RTN) ELSE%
IF IOD.[25:1] THEN%
CLOSED: BEGIN
FIB[13].[27:1]~0;
IF (I~(FPB[FNUM+3] AND 31)!10 AND I!12
AND I!13 AND I!26 THEN FIB[5].[45:1]~0 ELSE
FIB[5].[45:1]~P(TANK[NOT 3],DUP)!0 AND P(XCH)!15;
P(TANK,0,11,COM,DEL,DEL) ;
IF NOT FIB[5].[45:1] THEN GO UT ;
P(TANK[NOT 3]); TANK[NOT 3]~TANK[NOT 4]~0 ;
P(MKS,9,BLKCNTRL,DEL) ;% TAKE PARITY ACTION LBL BRNCH.
P(1); GO TO DS;
END ELSE
IF IOD.[27:1] AND (I=2 OR I=7 OR I=8) THEN%
BEGIN IF NOT FIB[4].[2:1] THEN%
BEGIN HEADER~TANK[NOT 1];HEADER[4].[42:6]~1 END;
IF I=7 THEN FIB[9].[1:1]~1; % MULTI-REEL PBT FILE
I~FIB[13].[28:10]+1;%
P(MKS,6,0,(NOT 2) INX TANK,4,SELECT);%
FIB[13].[28:10]~I; GO TO CLOSED;%
END ELSE%
BEGIN
ERR: P(3);
DS: P(TANK,XCH,11,COM);
END;
WAIT; GO TO PBIT;%
DK1: HEADER~*[FIB[14]]; GO TO DSW1[FIB[4].[27:3]];%
DK2: HEADER~*[FIB[14]]; GO TO DSW2[FIB[4].[27:3]];%
CP2: BLOCK; TANK[0]~FLAG(FIB[16])&CHANSKIP[32:47:1]; GO TO RELEASE;%
LP2: IF SUPRS THEN STREAM(RSIZE,D~IOD); BEGIN RSIZE(DS~8 LIT " ") END;
CHANSKIP~CHANSKIP+LINESKIP.[45:1];
IF CHANSKIP!0 THEN%
BEGIN IF (I~FIB[17]-RSIZE)>0 THEN%
STREAM(I,D~RSIZE INX IOD); BEGIN I(DS~8 LIT " ") END;%
END ELSE BLOCK;%
TANK[0]~FLAG(FIB[16])&LINESKIP[27:47:1]&LINESKIP[28:46:1]%
&CHANSKIP[29:44:4]&NUMWDS[8:38:10];%
GO TO RELEASE;%
SP2: PP2:%
MT2: BLOCK;%
P(TANK[0]~FLAG(FIB[16])&NUMWDS[8:38:10],NUMWDS,XCH,INX,%
@3700000000000000,XCH,~);%
IF SPOUT THEN % SPO OUTPUT
IF FPB[FNUM+3].[42:6]=43 THEN P(XIT) ELSE %DUMMY
P(0,0,NOT,IOD,INX,15,COM,XIT)
ELSE
RELEASE: P(FLAG(FIB[19])&IOD[3:3:5],TANK,PRL,DEL);%
WINDUP: I~FIB[19].[33:15]-FIB[16].[33:15];%
FIB[16].[33:15]~SUPRS~MEM[P(DUP) INX NOT 1].[18:15];%
FIB[19].[33:15]~SUPRS+I;%
WINDUP1:
FIB[6]~FIB[6]+1; FIB[7]~FIB[7]+1; FIB[17]~FIB[18].[18:15];%
P(XIT);%
DU1:%
DS1: IF LINESKIP!0 THEN%
BEGIN IF IOD.[27:1] AND IOD.[19:1] THEN GO AB;
IF FIB[17]=FIB[18].[18:15] THEN
BEGIN CHANSKIP~FIB[7];%
L1: IF DISKADDRESS THEN%
IF IOD.[19:1] THEN DBIT: IF IOD.[2:1] THEN%
BEGIN
$ SET OMIT = NOT SHAREDISK
MEM[FIB[16]]~ADDRESS;
P(RSIZE,RTN);
END ELSE
IF IOD.[25:1] THEN GO TO CLOSED ELSE
$ SET OMIT = NOT SHAREDISK
BEGIN
$ SET OMIT = NOT SHAREDISK
GO TO AB;
END ELSE
BEGIN WAIT; GO TO DBIT; END ELSE
BEGIN
$ SET OMIT = NOT SHAREDISK
GO TO AB;
END;
END; P(RSIZE,RTN);%
END;%
P(MKS,CHANSKIP,4,TANK,1,SELECT); GO TO L1;
DS2: IF FIB[7]>HEADER[7] THEN HEADER[7]~FIB[7];%
BLOCK; TANK[0]~FLAG(FIB[16]); GO RELEASE;%
DR1: IF LINESKIP!0 THEN CHANSKIP~FIB[7] ELSE FIB[7]~CHANSKIP;%
IF HEADER[7]<CHANSKIP THEN HEADER[7]~CHANSKIP;%
$ SET OMIT = NOT SHAREDISK
IF FIB[5].[46:2]=0 THEN GO TO L1;%
IF DISKADDRESS THEN%
BEGIN FIB[16].[24:1]~1;%
$ SET OMIT = SHAREDISK
P(MKS,CHANSKIP+1,1,TANK,REED,RTN);%
$ SET POP OMIT
$ SET OMIT = NOT SHAREDISK
END;%
$ SET OMIT = NOT SHAREDISK
GO TO AB;
DR2:
$ SET OMIT = NOT SHAREDISK
TANK[0]~FLAG(FIB[16])&0[24:24:1];
P(FLAG(FIB[19])&IOD[3:3:5]&1[27:47:1],TANK,PRL,DEL);%
$ SET OMIT = NOT SHAREDISK
GO TO WINDUP;%
DU2:: FIB[5].[43:2]~2;%
IF FIB[7]>HEADER[7] THEN HEADER[7]~FIB[7];%
BLOCK;%
CHANSKIP~FIB[7]+FIB[13].[10:9]|HEADER[0].[30:12];%
IF DISKADDRESS THEN%
BEGIN P(TANK[0]~FLAG(FIB[16])&0[24:24:1],(NOT 0),XCH,INX,%
ADDRESS,XCH,~);%
P(FLAG(FIB[19])&1[24:47:1],TANK,PRL,DEL);%
END ELSE%
BEGIN TANK[0]~FLAG(FIB[16])&0[24:24:1];%
P(FLAG(FIB[19]&1[24:44:4],TANK,PRL,DEL);%
END;%
GO TO WINDUP;%
$ SET OMIT = NOT(TIMESHARING)
DC1:: P(RSIZE, RTN);
$ SET OMIT = TIMESHARING
AB:: BEGIN IF(ADDRESS~TANK[NOT 4])=0 THEN GO ERR;
ACTION:: TANK[NOT 3]~TANK[NOT 4] ~0;
TANK[0] := IOD OR MEM;
P(ADDRESS,MKS,9,JUNK); GO TO ERR;