From b8d5a26090588abccb933d722dafd70a6ecc20e3 Mon Sep 17 00:00:00 2001 From: Paul Kimpel Date: Sun, 2 Mar 2014 17:29:02 +0000 Subject: [PATCH] Commit Mark XVI DCMCP transcription as of 2014-03-02. --- Mark-XVI/SYMBOL/DCMCP.esp_m | 909 +++++++++++++++++++++++++++++++++++- 1 file changed, 908 insertions(+), 1 deletion(-) diff --git a/Mark-XVI/SYMBOL/DCMCP.esp_m b/Mark-XVI/SYMBOL/DCMCP.esp_m index 26bd85a..ed763fa 100644 --- a/Mark-XVI/SYMBOL/DCMCP.esp_m +++ b/Mark-XVI/SYMBOL/DCMCP.esp_m @@ -24114,4 +24114,911 @@ BEGIN REAL RCW=+0;% 39001000 BEGIN IF USEPBD 39092070 $ SET OMIT = NOT(DATACOM AND RJE ) 39092074 THEN TYPE:=22; GO TO LOOKOUT; 39092080 - END; 39092090 + IF TYPE=1 OR TYPE=4 OR (TYPE>14 AND TYPE<19) THEN 39092100 + BEGIN IF USEPDB 39092150 + $ SET OMIT = NOT(DATACOM AND RJE ) 39092154 + THEN TYPE:=15; 39092160 + $ SET OMIT = NOT(PACKETS) 39092164 +IF (T1:=PSEUDOMIX[P1MIX])!0 THEN IF PACKETPAGE[T1-32]!0 THEN %107-39092165 + IF FORMS THEN FPB[FNUM+3].[23:1]:=1 ELSE % SETS FREEF 39092170 + IF NOT FPB[FNUM+3].[23:1] THEN TYPE:=15; 39092175 + $ POP OMIT 39092180 + GO LOOKOUT; 39092185 + END; 39092190 + IF REEL=0 THEN REEL~1; 39092200 + IF IO THEN 39092500 + IF TYPE!6 AND TYPE!20 THEN 39093000 + IF TYPE}10 THEN GO TO INSW[TYPE-10] ELSE GO LOOK 39093500 + ELSE GO TO DCN; 39094000 + IF TYPE}10 AND TYPE!20 THEN GO TO OUTSW[TYPE-10] ELSE GO LOOKOUT; 39094500 +LOOK: IF IO THEN OTHERFILEOPENIN(1) ELSE OTHERFILEOPENOUT(1); 39095000 + IF U LSS 0 THEN GO TO EXIT ELSE GO TO PREFINAL; 39096000 +DCN: FILEMESS(-"I/O ERR",0,MFID,FID,REEL,CDATE,CYCLE);% 39143000 + GETBUFFERS(BLEN,NBUFS, U,ALPHA);% 39144000 +PREFINAL:: MAKEIODS;% 39145000 + IF KIND=11 THEN 39145100 + BEGIN IF COBOL { 0 THEN % ALGOL OR COBOL68 39145200 + IF READEMFROMDISK(CIDROW[U-32],M[ALPHA]) THEN 39145210 + M[ALPHA]~P(DUP,LOD)&0[2:2:1]&1[27:47:1]; 39145300 + END ELSE 39145400 + FILLBUFFERS(FIB[16],FIB[19],COBOL,NBUFS); 39146000 + IF COBOL>0 THEN FIB[16]~(*P(DUP))&M[ALPHA][CTC]; 39147000 +FINALIN:: FIB[6] ~ FIB[7] ~ FIB[17] ~ 0; GO TO FIXFIB; 39148000 +LOOKOUT:: IF IO THEN OTHERFILEOPENIN(0) ELSE OTHERFILEOPENOUT(0); 39155000 + IF U LSS 0 THEN GO TO EXIT ELSE GO TO FIND; 39156000 +FINALOUT:: IF NOT FIB[18].[1:1] THEN GETBUFFERS(BLEN,NBUFS,U,ALPHA);% 39230000 +FIND: MAKEIODS;% 39231000 + FIB[6]~FIB[7]~0;% 39232000 + FIB[17]~IF COBOL THEN FIB[18].[3:15]ELSE FIB[18].[18:15];% 39233000 + ID KINS = 10 THEN 39233100 + FOR T2 ~ 0 STEP 1 UNTIL (NBUFS-1) DO 39233200 + P(@170000000000,M[ALPHA+T2],~); 39233300 + IF KIND=13 THEN 39233400 + M[ALPHA+1]~ P(DUP,LOD)&P(DUP,LNG)[24:24:1]; 39233500 + GO TO FIXFIB;% 39234000 +DC0: U:=30; KIND:=10; 39235000 + $ SET OMIT = NOT(DATACOM AND RJE ) 39235099 + GO TO SPDC; 39235200 +DC19: 39236000 + OTHERFILEOPENIN(2); 39236100 + $ SET OMIT = NOT(DATACOM AND DCSPO ) 39236154 + GO TO SPDC; 39236160 +SPO:: MODE~ 0; U~ 25; KIND~ 5; 39236900 +SPDC: CNTCTL~DIREC~0; UNLABELED~1; 39237000 + STARTIMING(FNUM,U);% 39238000 + GO TO FINALOUT;% 39239000 +SPN:: U~25; KIND~5; 39240000 + MODE~CNTCTL~DIREC~0; UNLABELED~1;% 39241000 + STARTIMING(FNUM,U);% 39242000 + IF BLEN<10 THEN BLEN~10;% 39243000 + GETBUFFERS(BLEN,NBUFS,U,ALPHA);% 39244000 + MAKEIODS;% 39245000 + GO TO FINALIN;% 39246000 +DKRN:: DKR0: ACCESS:-1; 39247000 + GO TO DK1; 39248000 +DKU0:: IO:=1; 39249000 +DKUN:: ACCESS:=2; 39250000 + GO TO DK1; 39251000 +DKPN:: DKP0: 39252000 + $ SET OMIT = NOT SHAREDISK 39252999 + $ SET OMIT = SHAREDISK 39254999 + GO TO DCN; 39255000 + $ POP OMIT 39255001 +DKSN:: DKS0: ACCESS~0; 39256000 +DK1: DISKFILEOPEN(0); 39257000 + IF TOG THEN GO TO EXIT; 39258000 + GO TO FIXFIB; 39259000 + DCIN:: U~30; KIND~10; 39293100 + CNTCTL~DIREC~0; UNLABELED~1; 39293200 + STARTIMING(FNUM,U); 39293300 + GETBUFFERS(BLEN,NBUFS,U,ALPHA); 39293400 + IOMASK:=0; MAKEIODS; 39293500 +FIXFIB:: FIB[4].[2:1]~UNLABELED;% 39294000 + FIB[4].[8:4]~KIND;% 39295000 + FIB[15].[24:6]~U; 39296000 + FIB[13].[28:10]~REEL;% 39297000 + FPB~PRT[P1MIX,3]; 39297010 + FPB[FNUM+3].[43:5]~TYPE; 39297020 + STREAM(REEL,D:=[FPB[FNUM+2]]); 39297100 + BEGIN DI:=D;SI:=LOC REEL;DS:=30DEC END; 39297200 + RDCTABLE[U].[8:6]~P1MIX;% 39298000 + IF FIB[18].[1:1] THEN% 39299000 + BEGIN FIB[16]~0;% 39300000 + FIB[5]~STATE&8[39:42:6];% 39301000 + FIB[10].[3:15]~0; 39301100 + END ELSE% 39302000 + FIB[5].[CF]~STATE&DIREC[44:47:1]&IO[39:43:5]&FIB[5][45:45:1];39303000 + IF COBOL>0 OR FIB[4].[7:1] THEN M[FIB INX NOT 1].[3:6] ~ 6 39304000 + ELSE M[ALPHA-7].[3:6]~4;% 39305000 + FIB[4].[27:3]~ACCESS;% 39306000 + IF U<16 THEN IF KIND!7 THEN FPB[FNUM+3].[23:1]:=10; 39306010 + IF (U~T1~FIB[10].[3:15])!0 THEN 39306100 + DO BEGIN IF KIND=10 THEN M[U-1]~0; %FAKE QUEUE 39306200 + M[U-2].[3:6]~3 END UNTIL (U~M[U].[FF]-2)=T1; 39306300 +EXIT::% 39307000 + IF XTRA THEN 39307100 + XTRAC:=NOT(FIB[4].[7:1] OR UNLABELED) AND XTRAC NEQ 2; 39307200 + IF XTRA LSS 2 THEN GO TO INITIATE; 39307300 + RCW:=XTRAR; 39307400 +END FILEOPEN;% 39308000 +PROCEDURE SUSTATUS(A,DDD,B); VALUE A,DDD,B; REAL A,B; ARRAY DDD[*]; 39900000 + BEGIN REAL RT1,I; 39901000 + ARRAY D[*],ZSF[*],VADAR[*]; 39902000 + SUBROUTINE SPOUTITNOW; 39903000 + BEGIN 39904000 + STREAM(X:=[TINU[B]], D, EUNUM:=0, SU:=0, I, RT1); 39905000 + BEGIN SI:=X; SI:=SI+5; 39906000 + DS:=LIT" "; DS:=3 CHR; SI:=D; 39907000 + 10(IF SC!"0" THEN 39908000 + BEGIN X:=SI; EUNUM:=TALLY; 39909000 + SI:=LOC EUNUM; DS:= 3 LIT" EU"; DS:=DEC; 39910000 + DS:=4 LIT" SU "; TALLY:=0; 39911000 + 5(SU:=TALLY; SI:=X; SKIP SB; SKIP SU SB; 39912000 + IF SB THEN 39913000 + BEGIN SI:=LOC SU; 39914000 + DS:=DEC; DS:=LIT","; 39915000 + END; 39916000 + TALLY:=TALLY+1); 39917000 + SI:=X; TALLY:=EUNUM; 39918000 + END; 39919000 + TALLY:=TALLY+1; SI:=SI+1); 39920000 + SI:-LOC I; SI:=SI+7; DI:=DI-1; 39921000 + IF SC!"0" THEN 39922000 + BEGIN DS:=5 LIT" WENT"; 39923000 + IF SC="2" THEN DS:=4 LIT" NOT"; 39924000 + END ELSE DS:=4 LIT" ARE"; 39925000 + DS:=8 LIT" READY.~"; 39926000 + END; 39927000 + SPOUT(RT1); 39928000 + END OF SPOUTITNOW; 39929000 + 39929100 + SUBROUTINE DOIT; 39930000 + BEGIN 39931000 + IF NOT (ZSF[0] OR ZSF[1].[1:11]) ! NOT 0 THEN 39932000 + BEGIN B:=18; D:=ZSF; 39933000 + RT1:=SPACE(20); 39934000 + SPOUTITNOW; 39935000 + END; 39936000 + IF NOT (ZSF[2] OR ZSF[3].[1:11]) ! NOT 0 THEN 39937000 + BEGIN B:=19; D:=[ZSF[2]]; 39938000 + RT1:=SPACE(20); 39939000 + SPOUTITNOW; 39940000 + END; 39941000 + END OF DOIT; 39942000 +% 39942900 +% START OF CODE 39942910 +% 39942920 + IF B!0 THEN 39943000 + BEGIN D:=[MULTITABLE[16]]&2[8:38:10]; 39944000 + RT1:=A; 39945000 + $ SET OMIT = DFX 39945999 + IF B THEN D:=2 INX D; 39946000 + $ POP OMIT 39946001 + IF NOT (IF B THEN P(RRR).[28:1] ELSE P(RRR).[29:1]) 39947000 + $ SET OMIT = DFX 39947999 + OR NOT (D[0] OR D[1].[1:11]) = NOT 0 39948000 + $ POP OMIT 39948001 + THEN 39949000 + BEGIN STREAM(X:=[TINU[B]], RT1); 39950000 + BEGIN SI:=X; SI:=SI+5; 39951000 + DS:=LIT" "; DS:=3 CHR; 39952000 + DS:=11 LIT" NOT READY~"; 39953000 + END; 39954000 + SPOUT(RT1); 39955000 + END ELSE SPOUTITNOW; 39956000 + END ELSE 39957000 + BEGIN ZSF:=[M[SPACE(4)]]&4[8:38:10]; 39958000 + VADAR:=[MULTITABLE[16]]&4[8:38:10]; 39959000 + DISKWAIT(-A,-30,DIRECTORYTOP); 39960000 + FOR I:=0 STEP 1 UNTIL 3 DO 39961000 + ZSF[I]:=VADAR[I] AND NOT DDD[23+I]; 39962000 + I:=1; DOIT; 39963000 + FOR I:=0 STEP 1 UNTIL 3 DO 39964000 + BEGIN ZSF[I]:=NOT VADAR[I] AND DDD[23+I]; 39965000 + DDD[23+I]:=VADAR[I]; 39966000 + END; 39967000 + DISKWAIT(A,-30,DIRECTORYTOP); 39968000 + I:=2; DOIT; 39969000 + FORGETSPACE(ZSF); 39970000 + END; 39971000 + END; 39972000 + PROCEDURE DIRECTORYBUILDER(A,DDD); 40000000 + VALUE A,DDD; 40001000 + REAL A; 40002000 + ARRAY DDD[*]; 40003000 +BEGIN REAL Y,Z,B,C,I,J,T,RA,RL,RT1,R;INTEGER RADD,RLEN; 40004000 +REAL NEXTLINK, AD, X, K, SEVEN7, FORTY, EUSU; %791-40004500 +ARRAY SU[*]; 40005000 +ARRAY HEAD[*],KK[*],PL[*]; 40005050 +REAL W,ESPADD,DISKTOP,SUPER,EUM,NT1,NT2,NT3,NT4; 40005100 +BOOLEAN UCHANG,ERROR;INTEGER LO,REM,TN,TM,MN;REAL X1,X2,EUMASK; 40005110 +ARRAY ZSF[*],SOCK[*]; 40005200 +REAL D,Y1,Y2; 40005210 +REAL AA,AAA; 40005220 +LABEL FORGET; 40005230 + ARRAY V[*,*]; 40006000 + INTEGER S; 40006100 + ARRAY VR=V[*]; 40007000 + REAL H,FI,FJ; 40007500 + $ SET OMIT = NOT SHAREDISK 40007990 + LABEL LOOKATDKB,BACK,EXIT,M1,SKBLK,BYE; 40008050 +DEFINE ROW=SU[X].[3:4]#, %MC40008100 + LASTAVAIL=HEAD[0].[3:15]#, 40008110 + AVAILABLE=HEAD[0].[FF]#, 40008120 + FIRSTLINK=HEAD[0].[CF]#, 40008130 + DA=9:24]#,DAC[9:24:24#, %MC40008140 + SIZE=PL[1].[DA]#, 40008150 + ADDRESS=PL[0].[DA]#, 40008160 + HIGHLINK=PL[0].[CF]#, 40008170 + LOWLINK=PL[1].[CF]#, 40008180 + DISKRUNNING=[18:1]#, %MC40008190 + FORTYMILLDISK=[19:1]#, %MC40008200 + OCCUPIED=[20:1]#, %MC40008210 + AV1=480#,AVBLOCK=16#; 40008220 +SUBROUTINE SAVIT; %MC40008300 +BEGIN %MC40008310 +IF (W~W+2)}28 THEN %MC40008320 +BEGIN ZSF[29]~ESPADD;DISKWAIT(ZSF INX 0,30,ESPADD~GETESPDISK); %MC40008330 +W~0 END;ZSF[W]~T;ZSF[W+1]~DDD[479-2|I]; %MC40008340 +END SAVIT; %MC40008350 + SUBROUTINE CLEAR; 40009000 + BEGIN V[S,0]~0; 40010000 + V[S,1] ~ BYPASS.[CF]; 40011000 + V[S,2]~@14; 40012000 + V[S,3]~V[S,4]~0; 40013000 + MOVE(57,[V[S,2]],[V[S,5]]); 40014000 + END; 40015000 +SUBROUTINE SETUP; %MC40016000 +BEGIN 40016020 +LO:=(X+1) MOD 5;LO:=LO+(LO=0)|5; 40016025 +IF RADD NEQ (LO:=LO|FORTY) OR (LO=RADD AND RLEN LSS FORTY) THEN 40016026 +BEGIN %MC40016100 +IF Y:=(SU[X].[CF]=0) THEN 40016200 + BEGIN %MC40016220 + NT1:=SU[X]:=SPACE(16)&SU[X][18:18:9]; 40016240 + MOVE(16,NT1-1,NT1); 40016260 + END; %MC40016300 +M[SU[X] INX K]~RT1~SPACE(64+Y); 40016400 +KK~[M[RT1]]&(64+Y)[8:38:10];JUNK~61+Y; 40016410 +MOVE(64+Y,RT1-1,RT1); 40016420 +FOR R:=3|Y SETP 2 UNTIL JUNK DO KK[R]:=RT1+R+2; 40016500 +HEAD~[M[M[SU[X]]]&1[8:38:10]; %MC40016510 +IF Y THEN %MC40016600 +BEGIN 40016700 + KK[1]:=KK[2]:=SEVEN7; 40016800 + KK[1].[DA]:=LO; 40016900 + KK[2].[DA]:=IF X EQL 0 THEN FORTY-(DISKBOTTOM+5) ELSE FORTY; 40016910 + M[SU[X]].[DA]:=LO; 40016920 + HEAD[0]:=RT1+1; 40017050 +END; 40017100 +HEAD[0].[FF]~RT1+3|Y; %MC40017200 +HEAD[0].[3:15]~62+RT1+Y; %MC40017250 +END 40017260 + ELSE 40017270 +DO 40017275 +BEGIN SU[X].OCCUPIED:=1; 40017280 + RADD:=RADD-FORTY; 40017285 + X:=X-1; 40017290 +END UNTIL (RLEN:=RLEN-FORTY) LSS FORTY; 40017295 +END OF SETUP; %MC40017300 +SUBROUTINE BUILDAVAIL; %MC40027100 +BEGIN %MC40027200 +BACK::ERROR~1;REM~0; %MC40027230 +IF (Z:=SU[X])!0 AND Z.[CF]=0 THEN 40027240 + BEGIN K:=0; SETUP; GO BACK END; 40027245 +IF (Z:=SU[X]).DISKRUNNING AND NOT Z.OCCUPIED AND RLEN>0 THEN 40027250 + BEGIN %MC40027260 + IF M[SU[X]],[DA] GEQ RADD THEN 40027270 + BEGIN 40027280 + P(M[M[SU[X]]],0&RADD[9:24:24],LLL,0,INX,.AD,~,DEL); %MC40027290 + HEAD~[M[M[SU[X]]]]&1[8:38:10];PL~[M[AD]]&2[8:38:10]; %MC40027300 + IF ((RA:=ADDRESS)-(RL:=SIZE) LSS RADD-RLEN OR 40039000 + (REM:=IF(NT1:=RADD NOD FORTH)=0 THEN 0 ELSE NT1-RLEN) LSS 40039100 + 0)AND RADD NEQ RA THEN 40039200 + BEGIN %MC40040000 + IF REM LSS 0 THEN RLEN:=RADD MOD FORTY; 40040500 + IF AVAILABLE=0 THEN%NEED ANOTHER ROW %MC40041000 + BEGIN %MC40042000 + K~ROW;K~K+1;ROW~K; %MC40042100 + IF K GTR 15 THEN DO UNTIL FALSE; %MC40043000 + SETUP; %MC40044000 + END; %MC40045000 + NEXTLINK~M[R~AVAILABLE]; %MC40046000 + M[R]~AD&(RADD-RLEN)[DAC]; %MC40047000 + IF AD.[CF]=SEVEN7 THEN M[SU[X]].[DA]~RADD-RLEN; %MC40047100 + IF LOWLINK=SEVEN7 THEN 40048000 + FIRSTLINK:=R 40049000 + ELSE 40050000 + M[LOWLINK].[CF]:=R; 40051000 + M[R+1]:=PL[1]&(RADD-RLEN-(RA-RL))[DAC]; 40055000 + PL[1]:=R&(RA-RADD)[DAC]; 40056000 + RLEN~0; %MC40056100 + AVAILABLE~NEXTLINK;ERROR~FALSE; %MC40057000 + END %MC40058000 + ELSE%REDUCE EXISTING AREA(BEWARE OF ADDRESS CONFLICT OR%MC40059000 + %EU UNDERFLOW). %MC40060000 + BEGIN %MC40060050 + IF (RA-RL) GEQ RADD THEN RLEN := 0 ELSE %604-40060060 + IF RADD=RA AND RL GEQ RLEN THEN 40060100 + BEGIN %MC40060200 + ADDRESS~RA-RLEN; %MC40060300 + IF HIGHLINK=SEVEN7 THEN %MC40060302 + M[SU[X]].[DA]~ADDRESS; %MC40060305 + SIZE~RL~RLEN;ERROR~RLEN~0; %MC40060400 + END %MC40060500 + ELSE %MC40060600 + IF RLEN>RL THEN %MC40061000 + IF LOWLINK=SEVEN7 AND(X-1)MOD 5!4 THEN %MC40062000 + BEGIN %MC40063000 + RADD~RADD-RL-1;RLEN~RLEN-RL-1;SIZE~0;ERROR~0; %MC40064000 + END %MC40065000 + ELSE 40065010 + IF RADD0RLEN LSS (NT1:=M[LOWLINK].[DA]) THEN 40065020 + BEGIN 40065030 + RLEN:=RLEN-(RADD-(RADD:=NT1)); 40065040 + SUPER:=1;GO BACK; 40065050 + END 40065060 + ELSE 40065070 + IF RADD GTR RA-RL THEN 40065080 + BEGIN 40065090 + RLEN:=RADD-(RA-RL);SUPER:=1; 40065100 + GO BACK; 40065110 + END 40065120 + ELSE RLEN~ 0 %MC40066000 + ELSE %MC40067000 + BEGIN SIZE~RL-RLEN;ERROR~RLEN~0; END; %MC40068000 + END; %MC40068050 + IF SIZE=0 THEN %MC40068100 + BEGIN %MC40069000 + IF HIGHLINK-SEVEN7 AND LOWLINK=SEVEN7 THEN %MC40070000 + BEGIN %MC40071000 + SU[X].OCCUPIED~TRUE; %MC40072000 + K~-1; %MC40073000 + WHILE(Y~M[SU[X]INX (K~K+1)])!0 AND K{15 DO %MC40074000 + FORGETSPACE(Y); %MC40075000 + FORGETSPACE(SU[X]]); %MC40076000 + END %MC40077000 + ELSE %MC40078015 + BEGIN %MC40078020 + IF HIGHLINK=SEVEN7 THEN %MC40078030 + BEGIN %MC40078031 + M[PL[1]].[CF]~SEVEN7; %MC40078032 + M[SU[X]].[DA]~M[PL[1]].[DA]; %MC40078033 + END %MC40078034 + ELSE %MC40078035 + BEGIN %MC40078036 + M[PL[0]+1].[CF]:=LOWLINK; 40078038 + IF LOWLINK=SEVEN7 THEN %MC40078040 + FIRSTLINK~HIGHLINK %MC40078042 + ELSE %MC40078046 + M[PL[1]].[CF]:=HIGHLINK; 40078048 + END; %MC40078050 + IF M[LASTAVAIL]=O THEN %MC40078052 + M[LASTAVAIL]~AD;LASTAVAIL~AD; %MC40078054 + IF AVAILABLE=0 THEN AVAILABLE~AD; %MC40078058 + PL[0]:=0; 40078060 + END; %MC40078065 + END; %MC40078067 +IF REM LSS 0 THEN BEGIN RADD~X MOD 5;RADD~(RADD+(RADD=0))|FORTY; 40078068 + RLEN~ABS(REM); END; 40078069 + X~X-(RLEN!0); %MC40078070 + END ELSE 40078072 + IF(NT1:=M[SU[X]].[DA]) GTR RADD-RLEN THEN 40078074 + BEGIN RLEN:=RLEN-(RADD-(RADD:=NT1)); 40078076 + SUPER:=1; GO BACK; 40078078 + END %MC40078080 + ELSE 40078085 + RLEN~0; %MC40078087 + END; %MC40078090 + IF RLEN>0 AND NOT ERROR THEN GO BACK; %MC40078091 +SUPER:=SUPER OR (ERROR AND SU[X].DISKRUNNING); 40078092 +END OF COMPLEMENTING DISK DIRECTORY; 40078093 +SUBROUTINE LOCKED; 40100000 +BEGIN 40100100 +IF (X1:=(RADD-RLEN) DIV TN)=(XS:=RADD DIV TN) THEN 40100200 +IF(TWO(X1) AND EUM)=0 THEN BUILDAVAIL ELSE GO FORGET ELSE 40100300 +BEGIN 40100400 + Y1:=RADD;Y2:=RLEN; 40100500 + IF(RLEN:=(X1+1)|TN-(RADD-Y2 ) )GTR 0 AND (TWO(X1) AND EUM)=0 THEN 40100600 + BEGIN RADD:=(X1+1)|TN;X:=5|D+((Y1-Y2)DIV FORTY);BUILDAVAIL END;40100700 + IF (RLEN:= Y1-(X2|TN)) GTR 0 AND (TWO(X2) AND EUM) EQL 0 THEN 40100800 + BEGIN RADD:=Y1;X:=5|D+RADD DIV FORTY;BUILDAVAIL; END; 40100900 + WHILE (X2:=X2-1) GTR X1 DO 40101100 + BEGIN 40101200 + RLEN:=TN;X:=5|D+((RADD:=(X2+1)|TN)-1)DIV FORTY; 40101250 + IF (TWO(X2) AND EUM)=0 THEN BUILDAVAIL; 40101300 + END; 40101400 +END; 40101500 +FORGET: 40101510 +END OF LOCKED; 40101600 +% 40199900 + $ SET OMIT = NOT SHAREDISK 40199990 +SU~[M[RT1~SPACE(100)]]&100[8:38:10]; 40249100 +SEVEN7:=@77777;FORTY:=40000;TN:=10000;MN:=1000000;TM:=10000000; 40249105 +MOVE(100,RT1-1,RT1); 40249110 +SOCK:=[M[RT1:=SPACE(40)]]&40[8:38:10]; 40249120 +MOVE(40,RT1-1,RT1); 40249130 +X1:=NEUP.[3:15]-1;% CHECK ONLY UNITS THAT EXIST 40249200 +VR:=[MULTITABLE[16]]&4[8:38:10]; 40249250 +LOOKATDKB; %MC40249300 +FOR J:=0 STEP 1 UNTIL X1 DO 40250000 +BEGIN 40251000 +X2:=19; 40252000 +FOR I:=0STEP 1 UNTIL X2 DO 40253000 +BEGIN 40254000 + RADD:=MN|J+I|TN; 40254100 + STREAM(Q:=RADD,B:=40+A); 40255000 + BEGIN SI:=LOC Q;DS:=8 DEC END; 40256000 +OKSEGZEROWRITE:= TRUE; %204-40256010 + IF I EQL 0 THEN 40257000 + BEGIN X2:=20|WAITIO(40+A INX@140000000,@64,18+C).[43:1]+X2; 40257030 + IF X2=39 THEN VR[NT1:=1+C|2]:=P(DUP,LOD) OR TWO(11-J); 40257060 + END; 40257100 + IF NOT(R~WAITIO(40+A INX @100000000,@64,18+C)).[42:1] THEN 40258000 + BEGIN 40261000 + NT2:=(NT1:=5|J+50|C)+(I DIV(SU[NT1].FORTYMILLDISK+1)DIV 4); 40261010 + SU[NT2]:=P(DUP,LOD)&1[18:47:1]&(X2>19)[19:47:1]; 40261040 + IF R.[43:1] THEN 40261042 + BEGIN FORTY:=FORTY|((X2 GTR 19)+1); 40261043 + SOCK[C|10+J]:=(*P(DUP)) OR TWO(I); 40261044 + X:=NT2;RADD:=(RADD MOD MN)+(RLEN:=TN);BUILDAVAIL; 40261046 + FORTY:=40000; 40261047 + END ELSE SOCK[C+10+J+20]:=(*P(DUP)) OR TWO(IF X2=19 THEN I ELSE 40261048 + (I DIV 8)|4 + (I AND 3)); 40261049 + END ELSE %NOT READY CHECK NEXT SU 40261050 + BEGIN EUSU:=EUSU OR TWO(4-(IF X2=19 THEN I ELSE (I DIV 8)|4+(I AND 40261100 + 3))DIV 4); 40261150 + I:=I+(((SU[NT1:=(5|J+50|C)].FORTYMILLDISK+1)|4)-1); 40261200 +OKSEGZEROWRITE:= FALSE; %204-40261210 +END END; 40261250 + STREAM(A:=(NOT EUSU).[43:5], J, D:=VR INX C INX C); 40261300 + BEGIN SI:=LOC A; SI:=SI+7; 40261350 + DI:=DI+J; DS:=CHR; 40261400 + END; 40261450 + EUSU:=0; 40261500 +END; 40262000 + $ SET OMIT = NOT(DK8NODFX AND NOT DFX) 40262299 + $ SET OMIT = NOT(DFX) 40262369 + J~DIRMOD; 40262500 + V ~ [M[SPACE(J)]]& J [8:38:10]; 40263000 + J ~ J-1; 40264000 + FOR S ~ 0 STEP 1 UNTIL J DO 40264500 + BEGIN VR[S] ~ [M[GETSPACE(61,0,0)+1]]&62[8:38:10]; 40265000 + BYPASS~BYPASS-2; 40266000 + CLEAR; 40267000 + END; 40268000 + AAA:=AA:=SPACE(480); 40275200 + DISKWAIT(-A,480,J:=DIRECTORYTOP+4); 40275300 + ZSF~[M[SPACE(31)]]&30[8:38:10]; 40275500 + ZSF[0]~@14; 40275600 + W~0; 40275700 + FOR J:=J STEP 16 WHILE J!16 DO 40276000 + BEGIN 40277000 + DISKIO(NT3,-(AAA-1),480,J+16); 40278000 + IF J+15 GEQ BYPASS.[CF] THEN 40278100 + BYE: BYBY("DIRECTORY FULL~",15); 40278150 + BYPASS.[FF]~J+15; 40278200 + FOR I ~ 0 STEP 1 UNTIL 14 DO% 40279000 + BEGIN T ~ DDD[478-2|I];% 40280000 + H:=J+14-I; 40280100 + IF T=@114 THEN 40281000 + BEGIN DDD[479-2|I]:=0; 40281100 + UCHANG:=0; %R6140281110 + I:=15; 40281200 + END ELSE 40281300 + IF T=@14 OR 40282000 + DDD[424-I|30].[1:1] THEN 40283100 + BEGIN DDD[478-2|I]:=@14; 40283200 + UCHANG:0; %R6140283210 + DDD[479-2|I]:=NEXTSLOT; 40283300 + IF NEXTSLOT=0 THEN 40283400 + BEGIN FI:=I;FJ:=J+15 END; 40283500 + NEXTSLOT:=H; 40283600 + END ELSE 40284000 + BEGIN DDD[429-I|30].[1:42]:=0; 40285000 + B:=DDD[429-I|30]; 40285005 + IF (C~DDD[423-I|30])}0 THEN 40285010 + BEGIN DDD[423-I|30]~ 40285020 + -C&C[2:8:10]; 40285030 + UCHANG:=0; %R6140285035 + DDD[424-I|30]+0;40285135 + END 40285140 + ELSE 40285150 + DDD[424-I|30]~P(DUP,LOD) 40285160 + AND @0037000000007774; 40285170 + IF C.[2:10]=0 OR 40285500 + DDD[424-I|30].[44:1] THEN40285600 + SAVIT; 40285700 + FOR C:=1 STEP 1 UNTIL B DO 40286000 + BEGIN RADD:=DDD[429-I|30+C]; 40287000 + IF RADD GEQ DISKBOTTOM+5 THEN 40290000 + BEGIN 40290100 + IF (RADD:=RADD+(RLEN:=DDD[428-I|30])) GTR TM THEN 40290200 + BEGIN RADD:=RADD MOD TM;X:=50 END ELSE X:=0; 40290300 + IF SU[X:=X+5|(D:=RADD DIV MN)].FROTYMILLDISK THEN 40290400 + FORTY:=P(FORTY,DUP,+); 40290500 + X:=((RADD:=RADD MOD MN)-1) DIV FORTY + X; 40290600 + IF (EUM:=SOCK[D]) NEQ 0 THEN LOCKED ELSE BUILDAVAIL; 40292050 + FORTY:=40000; 40292060 +IF SUPER THEN 40292200 + BEGIN %MC40292210 + STREAM(A:=T,B:=DDD[479-2|I],T:=SUPER:=SPACE(10)); 40292212 + BEGIN DS:=2LIT". "; SI:=LOC A; SI:=SI+1; DS:=7CHR; DS:=LIT"/"; 40292214 + SI:=SI+1; DS:=7CHR; DS:=19LIT" DISK ADDRESS ERROR"; 40292216 + DS:=LIT"~"; 40292218 + END; 40292220 + SPOUT(SUPER); 40292222 + ERROR:=SUPER:=0; 40292230 + END; %MC40292240 + END; 40292250 + END; %MC40292300 + B:=DDD[479-2|I]; 40293010 + S:=(S:=DISKBOTTOM 40293020 + -SCRAMBLE(T,B)). 40293030 + [36:11]; 40293040 + C:=V[S,0]; 40293050 + V[S,C+2]:=T; V[S,C+3]:=B; 40293060 + V[X,C+4]:=H; 40293070 + IF (V[S,0]:=C+3)=60 THEN 40293080 + BEGIN V[X,4].[FF]~BYPASS~ 40293090 + BYPASS-2; 40293100 + IF J+15}BYPASS.[CF]THEN40293101 + GO BYE; 40293102 + DISKWAIT([V[S,2]].[CF],40293110 + 60,V[S,1]); 40293120 + CLEAR; 40293140 + END; 40293150 + PBCOUNT:= (((("PBD " EQV T) = NOT 0) OR 40309100 + (("PUD " EQV T) = NOT 0)) AND 40309150 + (B.[CF] = 1)) + PBCOUNT; 40309200 + END; END;% 40310000 + SLEEP([NT3],NOT 0); 40311000 + DDD:=DDD&P(DUP,AAA)[CTC]; 40311100 + AAA:=P INX 0; %SWAP DDD BUFFERS 40311200 + DISKWAIT(AAA,480,J); 40311300 + IF I = 16 THEN% 40312000 + BEGIN% 40313000 + J ~ 0;% 40314000 + END;% 40315000 + END;% 40317000 + FOR I:= 0 STEP 1 UNTIL DIRMOD-1 DO 40317200 + BEGIN DISKIO(T,[C[I,1]].[CF],60,V[I,1]); 40317210 + SLEEP([T],IOMASK); 40317220 + FORGETSPACE([V[I,1]]); 40317230 + END; 40317240 + B:=V.[CF]; 40317300 + IF NEXTSLOT!0 THEN 40317310 + BEGIN 40317320 + DISKWAIT(-B,30,FJ); 40317400 + VR[-2*FI+29]:=H; 40317500 + DISKWAIT(B,30,FJ); 40317600 + END ELSE NEXTSLOT:=H; 40317610 + FORGETSPACE(B); 40317700 + DDD:=DDD&A[CTC]; FORGETSPACE(AA); 40317800 + IF PBCOUNT > 0 THEN % TELL OPERATOR %791-40320100 + BEGIN;STREAM(PBCOUNT,X~X~SPACE(10)); 40320200 + BEGIN DS~11 LIT" THERE ARE"; X~DI; SI~LOC PBCOUNT; 40320300 + DS~4 DEC; DS~18 LIT" PB FILES ON DISK~"; 40320400 + DI~X; DS~3 FILL; 40320500 + END; SPOUT(X); 40320600 + END; 40320700 +Z~USERDISKBOTTOM; %MC40321000 +X:=-5; DDD[1]:=0; 40321100 + $ SET OMIT = NOT(SHAREDISK) 40321104 + $ SET OMIT = SHAREDISK 40321129 +R:=0; VR:=AVTABLE; 40321130 + $ POP OMIT 40321131 +RADD:=R; R:=R-1 ; 40321135 + NT3:=NEUP.NEUF-1; % DONT USE NT3 BETWEEN HERE AND 40334065 40321140 + FOR NT2:=0 STEP 1 UNTIL NT3 DO 40321200 + BEGIN I~RA~-1;RLEN~RL~0;RADD~RADD+(Z-USERDISKBOTTOM)|30; 40321300 + FORTY:=(SU[X:=X+5].FORTYMILLDISK+1)|FORTY; 40321310 + WHILE (C:=SU[X+(I:=I+1)]).DISKRUNNING AND I LEQ 4 DO 40321400 +IF NOT C.OCCUPIED THEN 40321500 + BEGIN %MC40321600 + IF C.[CF]=0 THEN %MC40321700 + BEGIN %MC40321800 + RA~RA+1; %MC40321810 + C:=0; 40321900 + S:=(I+1)|FORTY; 40322000 + J~IF X+I=0 THEN %MC40322100 + FORTY-(DISKBOTTOM+5) ELSE FORTY; 40322150 + END %MC40322200 + ELSE %MC40322210 + BEGIN AD~M[M[SU[X+1]]].[CF];RA~-1; END; %MC40322220 + DO %MC40322250 + BEGIN %MC40322300 + IF C!0 THEN BEGIN S~M[AD].[DA];F~M[1+AD].[DA] END; %MC40322400 + S:=S+(X MOD 50)DIV 5|MN; 40322410 + IF J>RLEN THEN RLEN:=J; 40322420 + IF X GEQ 50 THEN S:=S+TM; 40322425 + IF J GTR 0 AND (NT1:=S-J) GEQ DISKBOTTOM+3 THEN 40322430 + IF (Y:=DDD[ABS(R)]).DEND EQL NT1 THEN 40322440 + BEGIN DDD[R]:=S&(LO:=Y.DSIZE+J)[TODSIZE]; 40322442 + IF LO GTR RLEN THEN RLEN:=LO END 40322444 + ELSE %MC40322450 + BEGIN %MC40322460 + IF R=AV1 THEN %MC40322470 + BEGIN %MC40322480 + DISKWAIT(A,AV1,Z);Z~Z + AVBLOCK;R~ -1; %MC40322600 + END; %MC40322700 + DDD[R~R+1]~ S& J[TODSIZE];RL~RL+1; 40322800 + END; %MC40323000 + IF C!0 THEN %MC40323100 + IF M[AD].[CF]!SEVEN7 THEN %MC40323200 + AD~M[AD].[CF] ELSE %MC40323300 + BEGIN %MC40323400 + K~-1; %MC40323500 + WHILE (B~(M[SU[X+1]INX(K~K+1)]))!0 AND K{15 DO %MC40323600 + FORGETSPACE(B);FORGETSPACE(SU[X+I]); %MC40323700 + C~0; %MC40323710 + END; %MC40323800 + END UNTIL C=0; %MC40323900 + END; 40324000 +IF (DDD[R].DEND MOD MN)=((NT1:=5|FORTY)-1) THEN DDD[R].DEND:=NT1+ 40324102 + NT2|MN; % NT2 = X DIV 5 40324104 +RL~RL+1; 40324120 + VR[NT2+1]:=0&(SU[X].FORTYMILLDISK+1)[TOSPEED]&RL[TONUMENT]& 40324200 + RADD[TOSTARTWRD]&RLEN[TOMAXSIZ]&(NT2}NEUP.[3:15] AND NT2<10)[TOEUNP]; 40324210 + IF R=AV1 THEN 40324300 + BEGIN 40324400 + DISKWAIT(A,AV1,Z); 40324800 + Z~Z+AVBLOCK;R~-1; 40325300 + END; 40326000 +DDD[R:=R+1]:=400000 DIV(2-SU[X].FORTYMILLDISK)+(X MOD 100)DIV 5|MN+1; 40327000 + IF (LO:=RL DIV 4) LSS AVDIFFMIN THEN LP:=AVDIFFMIN ELSE 40328000 + IF LO>AVDIFFMAX THEN LO~AVDIFFMAX; 40329000 + IF (R:=R+LO) GTR AV1 THEN 40330000 + BEGIN 40331000 + DISKWAIT(A,AV1,Z);Z~Z+AVBLOCK; 40332000 + R:=R-AV1 ; 40333000 + END; 40334000 +FORTY:=40000 ; 40334054 +RADD:=R+1 ; 40334055 +END; 40334056 +DISKWAIT(A,AV1,Z); 40334057 + NT2:=NT3 + 3; % NT2:=NEUP.NUEF+2 40334060 + FOR NT1:=NT3 STEP -1 UNTIL 0 DO 40334065 + IF (NT4:=(NOT SOCK[NT1+20]).[28:20]) ! 0 THEN % LOCK OUT THIS EU 40334070 + BEGIN EUMASK:=TWO(NT1) OR EUMASK; % TURN ON EU LOCK OUT MASK 40334075 + IF NT1 THEN VR[NT1 DIV 2 + NT2].[8:20]:=NT4 40334077 + ELSE VR[NT1 DIV 2 + NT2].[28:20]:=NT4; 40334079 + END; 40334081 +VR[0]:=P(DUP,LOC)&EUMASK[TOMAXSIZ]; 40334085 + $ SET OMIT = NOT(SHAREDISK) 40334308 + FORGETSPACE(SU); 40335000 + $ SET OMIT = SHAREDISK 40335990 + UNLOCKDIRECTORY; 40336000 + $ POP OMIT 40336010 + TOGLE:=TOGLE OR ABORTMASK OR USERDISKMASK; 40336100 + MESSAGETABLEBUILDER; 40339000 + FOR W~W STEP -2 WHILE ZSF[W]!@14 DO 40353100 + BEGIN 40353110 + IF W<0 THEN 40353120 + BEGIN 40353130 + DISKWAIT(-(ZSF INX 0),30,ESPADD); 40353140 + FORGETESPDISK(ESPADD); 40353160 + ESPADD~ZSF[29]; 40353170 + W~26; 40353180 + END; 40353190 + FORGETSPACE(DIRECTORYSEARCH(ZSF[W],ZSF[W+1],6)); 40353200 + END; 40353210 + FORGETSPACE(ZSF); FORGETSPACE(SOCK); 40356550 + SUSTATUS(A,DDD,0); 40356800 + END; 40400000 +PROCEDURE REALFILECLOSE(ALPHA); VALUE ALPHA; INTEGER ALPHA;% 41000000 +BEGIN ARRAY FIB[*],FPB[*],HEADER[*];% 41001000 +%%% DONT ADD ANY SECLARATIONS BETWEEN "HEADER" AND "KIND" %%% MCP 41001500 + INTEGER KIND,NUBFS,U,BLEN,CODE,UNLABELED,COBOL,I,J,FNUM; 41002000 + REAL MID,FID,R,D,C,FORMS,STATE; 41003000 + REAL RCW=+0,XTRA=-3; 41003100 + LABEL PX,PBD; %P 41004000 + LABEL DC19; REAL STA; 41004100 + LABEL CR,LP,MT,CLOSED,DK,SP,CP,BKUP,PP,PR,DC,CD,CC; 41005000 + SWITCH SW~ CR,LP,MT,CLOSED,DK,SP,CP,BKUP,PP,PR,DC,CD,BKUP,DC19; 41006000 + LABEL EOF,ON,DNE,CLEANUP;% 41007000 + LABEL EOD; 41007100 + REAL T1,T2,T3,TOD; ARRAY SEG0[*],SKEL[*]; LABEL L1,L2,L3; 41007200 + REAL T,ACCESS;% 41017000 + NAME SAIOD=T; 41017100 + BOOLEAN COMPGO; 41017200 + REAL TYPE; 41017300 + DEFINE REW=CODE.[47:1]#,% 41018000 + KRUNCH=NOT CODE.[42:1]#, 41018100 + REL=CODE.[46:1]#,% 41019000 + TIME=CODE.[45:1]#,% 41020000 + LOCK=NOT CODE.[44:1]#,% 41021000 + PURGE=NOT CODE.[43:1]#;% 41022000 + LABEL CLOSEOUT;% 41035000 + LABEL EOFIT;% 41036000 + CODE~(NOT *P(.ALPHA)).[18:15];% 41038000 + ALPHA~P(.ALPHA,LOD).[33:15];% 41039000 + FIB~M[ALPHA-3]; FPB~PRT[P1MIX,3];% 41040000 + IF (STATE~FIB[5]).[42:1] THEN GO TO CLOSED;% 41041000 + NBUFS~FIB[13].[1:9]; FNUM~FIB[4].[13:11];% 41042000 + U~FIB[15].[24:6]; 41043000 + UNLABELED~FIB[4].[2:1];% 41044000 + BLEN~FIB[18].[3:15];% 41045000 + STREAM(S~[FPB[FNUM]],D~[MID]);% 41046000 + BEGIN SI~S; DS~2 WDS; DS~3 OCT; DS~5 OCT; DS~ OCT END;% 41047000 + IF D<0 THEN D~D.[18:30];% 41047500 + FORMS~FPB[FNUM+3].[42:1];% 41048000 + I~FIB[13].[28:10];% 41049000 + IF (R=0 AND I!1) OR R!0 THEN R~I;% 41050000 + COBOL~(FIB[13] AND 1)&(PFIB].[8:10]=22)[1:47:1]; % COBOL 60 & 68 41051000 + IF COBOL>0 OR FIB[4].[7:1] THEN % COBOL 60 OR SORT 41051100 + M[FIB INX NOT 1].[3:6]~2 41051200 + ELSE M[ALPHA-7].[3:6]~2; 41051300 + IF (I~J~FIB[10].[3:15])!0 THEN %THERE-S A BUFFER RING TO MARK 41051400 + DO M[I-2].[3:6]~2 UNTIL (I~M[I].[FF]-2)=J; 41051500 + COMMENT MARK IT ALL DATA TO PROTECT IT FROM NSEC DS; 41051600 + IF FIB.[7:1] THEN CHECKJOBORFILEMESS(P1MIX,ALPHA-3,U); 41051620 + GO TO SW[KIND~FIB[4].[8:4]];% 41052000 +CR:CC:CP:LP:SP:MT:PP:PR:CD: 41054000 + OTHERCLOSE(0); 41055000 + GO TO CLEANUP;% 41142000 +BKUP: TYPE:=FPB[FNUM+3].[43:5]; BACKCLOSE(0); 41144000 +CLOSEOUT:: STATE.[39:4]~1; TIME~1;% 41187000 +CLEANUP::% 41188000 + IF NOT STATE.[41:1] THEN% 41189000 + IF KIND{2 OR KIND=11 OR KIND}6 AND KIND{9 41190000 + $ SET OMIT = NOT(PACKETS) 41190099 + OR KIND=4 41190100 + $ POP OMIT 41190101 + THEN BEGIN 41190200 + $ SET OMIT = PACKETS 41190299 + FILEMESSAGE(( 41190600 + $ SET OMIT = NOT(PACKETS) 41190699 + IF PURGE THEN " PRG" ELSE IF LOCK THEN " LOK" ELSE 41190700 + $ POP OMIT 41190701 + " REL")&TINU[U][6:30:18],0,MID,FID, 41190800 + IF KIND=2 OR KIND=9 THEN R ELSE 0, 41190900 + IF KIND=2 OR KIND=9 THEN D ELSE 0, 41191000 + C,IF KIND=4 THEN 64 ELSE 41191100 + CLOSEMESS AND ((T:=JAR[P1MIX,0])>0 41191200 + OR (T<0) AND COPNMESS)); 41191300 + END; 41191500 + IF (FIB[5]~STATE).[42:1] THEN FIB[4].[6:4]~3;% 41194000 + IF (T~FIB[10].[3:15])!0 THEN %THERE-S A BUFFER RING TO FORGET 41195000 + BEGIN %FORGETTING IT 41196000 + FOR I~0 STEP 1 UNTIL NBUFS-1 DO% 41197000 + BEGIN J~M[T1.[18:15]-2;% 41198000 + forgetspace(t);% 41199000 + T~J;% 41200000 + M[ALPHA+I]~P(DUP,LOD)&0[2:2:1]&1[25:47:1]% 41201000 + &(ALPHA+1)[33:33:15];% 41202000 + END;% 41203000 + FIB[10].[3:15]~0; FIB[16].[CF]~0; %501-41204000 + END;% 41205000 + IF NOT UNLABELED THEN% 41206000 + IF KIND!0 THEN% 41207000 + IF (T~M[ALPHA-2].[33:15])!0 THEN% 41208000 + FORGETSPACE(T-2);% 41209000 + M[ALPHA-2]~P(DUP,LOD)&P(0,XCH)[8:8:10];% 41210000 + FIB[6]~FIB[7]~0;% 41211000 + IF TIME THEN STOPTIMING(FNUM,1023); 41212000 + IF COBOL>0 OR FIB[4].[7:1] THEN % COBOL 60 OR SORT 41212100 + M[FIB INX NOT 1].[3:6]:=6 ELSE M[ALPHA-7].[3:6]:=4; 41212200 + GO TO CLOSED;% 41213000 +DK:: DISKCLOSE(0); 41215000 + GO CLEANUP;% 41269000 + DC:: 41281000 + $ SET OMIT = NOT(DATACOM ) 41281999 +DC19:: 41307010 + $ SET OMIT = NOT(DATACOM) 41307020 + GO CLOSEOUT; 41307290 + CLOSED:: 41308000 + RCW:=XTRA; 41309000 +END FILE CLOSE; 41310000 +PROCEDURE LINKUP(TYPE,KEY); VALUE TYPE,KEY; REAL TYPE,KEY; 41310100 + BEGIN 41310200 + KEY := P(.KEY,LOD) INX 0 -1; 41310300 + M[KEY+1]:= (*P(DUP))&TYPE[3:42:6]&(LOGENTRY:=LOGENTRY+1)[25:34:14]; 41310400 + M[KEY+2] := (*P(DUP)) & (XCLOCK + P(RTR))[3:24:24]; 41310500 + IF (LOGHOLDER INX 0) = 0 THEN 41310600 + BEGIN LOGHOLDER.[CF] := KEY; 41310700 + INDEPENDENTRUNNER(P(.MAINTLOGGER),0,100); 41310800 + END ELSE M[LOGHOLDER.[FF]].[CF] := KEY; 41310900 + M[KEY].[CF] := 0; LOGHOLDER.[FF] := KEY; 41311000 + IF (NUMAINTMESS:=NUMAINTMESS+1) > 0 THEN SLEEP([NUMAINTMESS],-0); 41311100 + END LINKUP; 41311200 +PROCEDURE CHECKJOBORFILEMESS(MIX,FIB,U); 41312000 + VALUE MIX,FIB,U; REAL MIX,FIB,U; 41312100 + BEGIN 41312200 + REAL KEY,FNUM; 41312300 + IF NOT JAR[MIX,2].[3:1] THEN 41312400 + BEGIN 41312500 + JAR[MIX,2].[3:1] := 1; 41312600 + KEY := TYPEDSPACE(5,MAINTBUFAREAV);% %167-41312700 + M[KEY-2].[9:6] := 0; 41312800 + M[KEY ] := 0 & MIX[20:43:5]; 41312900 + M[KEY+1] := JAR[MIX,5].[6:18]; 41313000 + M[KEY+2] := JAR[MIX,5]; 41313100 + M[KEY+3] := JAR[MIX,0]; 41313200 + M[KEY+4] := JAR[MIX,1]; 41313300 + LINKUP(12,KEY); 41313400 + END; 41313500 + IF FIB!0 THEN IF NOT M[FIB].[6:1] THEN 41313600 + BEGIN 41313700 + M[FIB].[6:1] := 1; 41313800 + FNUM := M[M[FIB] INX 4].[13:11]; 41313900 + KEY := TYPEDSPACE(5,MAINTBUFFAREAV);% %167-41314000 + M[KEY-2].[9:6] := 0; 41314100 + M[KEY ] := 0 & MIX[20:43:5] 41314200 + & ((FNUM DIV ETRLNG)+1)[9:39:9]; 41314300 + M[KEY+1] := JAR(MIX,5].[6:18]; 41314400 + M[KEY+2] := M[(FNUM:= PRT[MIX,3] INX FNUM)+3]; 41314500 + M[KEY+3] := M[FNUM]; 41314600 + M[KEY+4] := M[FNUM+1]; 41314700 + LINKUP(13,KEY); 41314800 + END;END CHECKJOBORFILEMESS; 41314900 +PROCEDURE LOGOUTMAINT(B); VALUE B; REAL B; 41316000 + BEGIN 41316100 + REAL RCW = +0; 41316200 + REAL MSCW=-2; 41316250 + REAL FH = +1, T1 = +2, T2 = +3, T3 = +4, SAVENTRY = +5; 41316300 + REAL MFID = +6, FID = +7; BOOLEAN FORKED = +8; 41316400 + INTEGER LASTL = +9, SEGNO = +10, SEGSIZ = +11, LDATE = +12; 41316410 + LABEL CS,SCAN,NEWLOG,BUILDMESS,EXIT,FINISHUP; 41316500 + SUBROUTINE FIXCOLDHDR; 41316505 + BEGIN 41316510 + M[FH INX 0]:= @0000500036000601; 41316515 + M[FH INX 1]:= (XCLOCK+P(RTR)) & LDATE[6:30:18]; 41316520 + STREAM(DATE,X:=FH INX 3); 41316525 + BEGIN SI:=LOC DATE; DS:=8 OCT; DI:=X; DS:=2 LIT"+#"; 41316530 + SI:=X; SI:=SI+5; DS:=3 CHR; 41316535 + END; 41316540 + $ SET OMIT = NOT(SHAREDISK) 41316545 + $ SET OMIT = SHAREDISK 41316575 + M[FH INX 4]:= 0 & 72[9:41:7]; % SYSTEM DATA FILE 41316580 + $ POP OMIT 41316585 + M[FH INX 7]:= (LOGSIZE|6)-1; 41316590 + END FIXCOLDHDR; 41316595 + P(0,0,0,0,0,0,0,0,0,0,0,0); 41317100 + IF FORKED:= B=0 THEN % INDEPENDENT RUNNER 41317200 + BEGIN IF MROW > 0 THEN SLEEP([MROW],-0); 41317300 + MROW := ABS(MROW); 41317400 + LASTL := LOGENTRY; 41317500 + LOGENTRY := 0; 41317600 + END ELSE LASTL:=ABS(B)-2; 41317700 + FID:= "MNTLOG " 41317710 + $ SET OMIT = NOT(SHAREDISK) 41317719 + ; 41317730 + STREAM(DATE,C:=[LDATE]); BEGIN SI:=LOC DATE; DS:=8 OCT; END; 41317780 + T1:=SPACE(335); 41317790 + IF (FH:=DIRECTORYSEARCH(MFID:="MAINT ",T3:="LOG " 41317800 + $ SET OMIT = NOT(SHAREDISK) 41317900 + ,5))=0 THEN 41318100 + BEGIN 41318200 + FH:=SPACE(30); 41318210 + MOVE(30,FH-1,FH); 41318220 + M[FH+ 9]:= 1; 41318230 + M[FH+10]:= GETUSERDISK(-(M[FH+8]:=LOGSIZE:=1000)); 41318240 +CS: FIXCOLDHDR; 41318250 + IF FH.[FF]=0 THEN ENTERUSERFILE(-MFID,T3,FH-1) 41318360 + ELSE DISKWAIT(FH INX 0,30,FH.[FF]); 41318370 + FID:= T3; 41318380 + MROW:= M[FH INX 10]; 41318400 + GO BUILDMESS; 41318500 + END; 41318600 + LOGSIZE:= M[FH INX 8]; 41318610 + IF M[FH INX 4].[45:1] THEN FORKED:=FORKED OR 2; % JUST COLD STARTED 41318620 + IF B>0 THEN 41318630 + BEGIN 41318640 + $ SET OMIT = NOT(SHAREDISK) 41318649 + $ SET OMIT = SHAREDISK 41318679 + M[FH INX 4]:= 0 & 72[9:41:7]; % SYSTEM DATA FILE 41318680 + $ POP OMIT 41318681 + DISKWAIT(-T1,5,MROW:=M[FH INX 10]); 41318740 + MLOG:= SEGNO:= M[T1].[24:15]; 41318760 +SCAN: IF MLOG}LOGSIZE-1 THEN 41318780 + BEGIN 41318800 + IF (FORKED AND 2)!0 THEN GO CS; 41318810 + IF MLOG!SEGNO THEN DISKWAIT(-T1,5,MROW); 41318820 + M[T1]:= P(DUP,LOD) & 1[2:47:1]; 41318840 + DISKWAIT(T1,5,MROW); 41318860 + MLOG:= IF SEGNO5 THEN IF LASTL+T3 > (T2:=(MLOG+1)|30) THEN 41319240 + BEGIN 41319260 + M[T1+SEGSIZ]:= P(DUP,LOD) & 1[2:47:1] & 41319280 + ((T2-LASTL) DIV 5 -1)[39:39:9]; 41319300 + DISKWAIT(T1,30,MROW+SEGNO); 41319320 + END;END; 41319340 + END; 41319360