mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-19 17:17:48 +00:00
Commit DCMCP transcription as of 2012-06-28.
This commit is contained in:
parent
03c7cfb18d
commit
60fcb5cfa1
@ -4548,3 +4548,513 @@ LL: DS~LIT"~"; DI~DI-1; B~DI; 05953025
|
||||
TMID~WORD; 05956550
|
||||
SCAN; IF WORD!"/" THEN GO EXIT; 05956600
|
||||
FILEID: 05956650
|
||||
SCAN; IF NOT TYPE=1 OR TYPE=2) THEN GO EXIT; 05956700
|
||||
IF ID~IF TYPE=2 THEN DECWORD ELSE WORD; 05956750
|
||||
FILTOG~TRUE; 05956800
|
||||
SCAN; 05956850
|
||||
END; 05956900
|
||||
IF TYPE=2 THEN % NUMBER 05956950
|
||||
BEGIN 05957000
|
||||
A~WORD; 05957050
|
||||
SCAN; 05957100
|
||||
IF TYPE=3 THEN IF WORD="/" THEN 05957150
|
||||
BEGIN 05957200
|
||||
WORD~A; 05957250
|
||||
A~0; 05957300
|
||||
TMID~DECWORD; 05957350
|
||||
GO FILEID; 05957400
|
||||
END ELSE SCAN; 05957450
|
||||
IF TYPE=2 THEN N~WORD; 05957500
|
||||
END; 05957550
|
||||
END; 05957600
|
||||
SEGS~N~N+(N=0); 05957650
|
||||
IF (A!0) THEN 05957700
|
||||
BEGIN 05957750
|
||||
STREAM(A,D:=[FID]); 05958600
|
||||
BEGIN SI:=LOC A; DS:=8 DEC; END; 05958800
|
||||
IF (J:=A DIV 1000000) GEQ NEUP.NEUF OR A LSS DIRECTORYTOP+4 THEN 05959000
|
||||
V: BEGIN STREAM(FID,BUFF); 05959200
|
||||
BEGIN DS:=22LIT" INVALID DISK ADDRESS "; 05959400
|
||||
SI:=LOC FID; DS:=8CHR; DS:=LIT"~"; 05959600
|
||||
DI:=DI=9; DS:=7 FILL; 05959800
|
||||
END; 05960000
|
||||
GO TO EXIT; 05960200
|
||||
END; 05960400
|
||||
IF WAITIO([FID]INX@100000000,@64,18+FID.[5:1]).[42:1] THEN GO TO V; 05960600
|
||||
IF (R:=FID.[12:6]) GEQ 2 THEN % CHECK FOR 40 MIL ADDRESS 05960650
|
||||
IF NOT WAITIO([FID]INX @140000000,@64,18+FID.[5:1]).[43:1] 05960660
|
||||
THEN GO TO V ELSE IF R GEQ 4 THEN GO TO V;% INV ADD 05960670
|
||||
END; 05960675
|
||||
IF FILTOG THEN GO XDFILE; 05960680
|
||||
IF A=0 THEN GO EXIT; 05960685
|
||||
SLEEP([TOGLE],USERDISKMASK); LOCKTOG(USERDISKMASK); 05960700
|
||||
$ SET OMIT = NOT(SHAREDISK) 05960705
|
||||
J~J+1; 05960800
|
||||
BZ: D:=(I:=(E:=U[J]).STARTWRD) MOD 30; 05961000
|
||||
$ SET OMIT = NOT(SHAREDISK) 05961005
|
||||
$ SET OMIT = SHAREDISK 05961199
|
||||
AVS:=30-(S:=(C:=E AND NUMENTM)+D)MOD 30+S; 05961200
|
||||
FIXARRAY(UT,R,AVS); DISKWAIT(-R,AVS,B:=I DIV 30+USERDISKBOTTOM); 05961400
|
||||
K:=S; I:=D; S:=I+C; 05961600
|
||||
$ POP OMIT 05961601
|
||||
G:=I-(NT2:=(P(U[J-1],DUP) AND NUMENTM)+P(XCH).STARTWRD); 05961800
|
||||
S:=U[J+1].STARTWRD-S; H:=K:=K-1; IF UT[T:=L].DEND GTR A THEN GO X; 05962000
|
||||
W: IF UT[T+(H+L+1) DIV 2].DEND > A THEN IF UT[H~T-1].DEND > A THEN GO W05962200
|
||||
ELSE ELSE IF UT[T~T+1].DEND { A THEN BEGIN L~T+1; GO W END; 05962400
|
||||
X: IF A GEQ L:=(H:=UT[T].DEND)-(Q:=UT[T].DSIZE) THEN 05962600
|
||||
IF (LA:=(A+N)) LEQ H THEN GO AZ%AREA AVAILABLE 05962700
|
||||
ELSE IF LA LEQ SA1:=(UT[T+1].DEND-UT[T+1].DSIZE) THEN 05962800
|
||||
N:=LA-A:=H ELSE N:=SA1-A:=H ELSE IF (LA:=A+N) GTR L THEN 05962900
|
||||
N:=L-A ELSE RDT:=RDT OR @100000; 05963000
|
||||
GO INUSE; 05963100
|
||||
Y: TMID:=IF RDT THEN "DKTEST " ELSE "BADISK "; 05963800
|
||||
$ SET OMIT = NOT(DKBNODFX AND NOT DFX) 05963809
|
||||
STREAM(TMID,FID,N,MID,B,BUFF); 05964000
|
||||
BEGIN DS:=LIT "."; SI:=LOC TMID; SI:=SI+1; DS:=7 CHR; 05964200
|
||||
DS:=LIT "/"; SI:=SI-1; DS:=7 CHR; 05964400
|
||||
DS:=13 LIT " NOT CREATED("; SI:=SI+8; SKIP SB; 05964500
|
||||
IF SB THEN ELSE 05964600
|
||||
BEGIN SI:=LOC N; DS:=7 DEC; N:=DI; DI:=DI-7; DS:=7 FILL; 05964800
|
||||
DI:=N; DS:=5 LIT " SEGS"; SI:=SI+1; 05964900
|
||||
END; DS:=11 LIT " IN USE BY "; DS:=7 CHR; DS:=LIT"/"; 05965000
|
||||
SI:=SI+1; DS:=7 CHR; 05965200
|
||||
DS:=2 LIT")~"; 05965400
|
||||
END; 05965600
|
||||
FORGETSPACE(R); 05966100
|
||||
GO EXIT; 05966110
|
||||
INUSE: % SEARCH THE DIRECTORY TO FIND THE NAME OF THE CONFLICTING05966200
|
||||
% FILE. SINCE USERDISK REMAINS LOCKED, DISK ALLOCATION 05966210
|
||||
% CANNOT CHANGE. HENCE, THE DIRECTORY NEED NOT BE LOCKED.05966220
|
||||
FORGETSPACE(R); 05966400
|
||||
FIXARRAY(UT,R,480); 05966600
|
||||
FOR J:=DIRECTORYTOP+4 STEP 16 WHILE TRUE DO 05967000
|
||||
BEGIN DISKWAIT(-R,480,J); 05967200
|
||||
FOR I:=14 STEP -1 UNTIL 0 DO 05967400
|
||||
BEGIN E:=UT[450+2|I]; 05967600
|
||||
IF(E EQV @114)=NOT 0 THEN 05967800
|
||||
BEGIN MID:="SYSTEM "; B:=FID; GO Z; END; 05967900
|
||||
IF (E EQV @14) NEQ NOT 0 THEN 05968000
|
||||
BEGIN B:=UT[30|I+9] AND 31; 05968200
|
||||
FOR K:=1 SETP 1 UNTIL B DO 05968400
|
||||
IF (C:=UT[30|I+9+K))NEQ 0 THEN 05968600
|
||||
IF A GEQ C THEN IF A LSS 05968800
|
||||
SA1:=(C+D:=UT[30|I+8]) THEN 05968900
|
||||
BEGIN MID:=E&((LA LEQ SA1) AND 05969000
|
||||
(RDT.[18:15]))[1:47:1]; 05969100
|
||||
IF A+N GTR SA1 THEN N~SA1-A; 05969150
|
||||
B:=UT[451+2|I]; 05969200
|
||||
GO TO Z; 05969400
|
||||
END; 05969600
|
||||
END; 05969800
|
||||
END; 05970000
|
||||
END; 05970200
|
||||
Z: 05970300
|
||||
$ SET OMIT = NOT SHAREDISK 05970390
|
||||
UNLOCKTOG(USERDISKMASK); 05970500
|
||||
GO TO Y; 05970600
|
||||
AZ: IF A NEQ L AND LA NEQ H THEN 05970800
|
||||
BEGIN IF S=0 THEN 05971000
|
||||
$ SET OMIT = NOT (SHAREDISK) 05971005
|
||||
$ SET OMIT = SHAREDISK 05971095
|
||||
BEGIN IF G=0 OR D=0 THEN 05971200
|
||||
BEGIN USERDISKSPECIALCASE(2,E,UT,J); GO TO BZ END; 05971400
|
||||
S:=IF P((G+1) DIV 2,DUP) > D THEN P(DEL,D) ELSE P; 05971600
|
||||
U[J].STARTWRD:=I-S; G:=D-S; K:=G+C-1; 05971800
|
||||
$ POP OMIT 05971801
|
||||
MOVE(C,[UT[D]],[UT[G]]); T:=T-S; 05972000
|
||||
END; 05972200
|
||||
FOR G:=K STEP -1 UNTIL T DO UT[G+1]:=UT[G]; 05972400
|
||||
UT[T]:=A&(A-L)[TODSIZE]; 05972600
|
||||
UT[T+1]:=H&(H-LA)[TODSIZE]; 05972800
|
||||
C:=C+1; 05973000
|
||||
K ~ K+1; 05973100
|
||||
END ELSE 05973200
|
||||
IF A=L AND LA=H THEN 05973400
|
||||
BEGIN C:=C-1; MOVE(K-T,[UT[T+1]],[UT[T]]); K:=K-1 END 05973600
|
||||
ELSE UT[T]:=(IF A=L THEN H ELSE A)&(Q-N)[TODSIZE]; 05973800
|
||||
U[J].NUMENT:=C; 05974000
|
||||
IF Q=U[J].MAXSIZ THEN 05974200
|
||||
BEGIN Q:=UT[H:=K-C+1].DSIZE; 05974400
|
||||
FOR H:=H STEP 1 UNTIL K DO 05974600
|
||||
IF P(UT[H].DSIZE,DUP) GTR Q THEN Q:=P ELSE P(DEL); 05974800
|
||||
U[J].MAXSIZ:=Q; 05975000
|
||||
END; 05975200
|
||||
MID:=IF RDT THEN "DKTEST " ELSE "BADISK "; 05975400
|
||||
$ SET OMIT = NOT(DKBNODFX AND NOT DFX) 05975404
|
||||
$ SET OMIT = NOT(SHAREDISK) 05975410
|
||||
$ SET OMIT = SHAREDISK 05975595
|
||||
DISKWAIT(R,AVS,B); 05975600
|
||||
$ POP OMIT 05975601
|
||||
UNLOCKTOG(USERDISKMASK); 05975610
|
||||
FORGETSPACE(R); 05975620
|
||||
CZ: ENTERFILE; 05975630
|
||||
GO EXIT; 05975640
|
||||
XDFILE: 05975700
|
||||
IF (HEADER:=DIRECTORYSEARCH(TMID,NFLAG(-TFID OR M),4)) LSS 64 THEN 05975750
|
||||
BEGIN 05975800
|
||||
TYPE:=HEADER; 05975850
|
||||
GO MSG; 05975900
|
||||
END; 05975950
|
||||
HA~HEADER.[FF]; 05976000
|
||||
HDR~[M[HEADER~HEADER INX 0]) & 30[8:38:10]; 05976050
|
||||
MID~-"BADISK "; 05976100
|
||||
S~HDR[8]; % SEGMENTS PER ROW 05976150
|
||||
IF A!0 THEN 05976200
|
||||
BEGIN 05976250
|
||||
FOR I!HDR[9] STEP -1 UNTIL 1 DO 05976300
|
||||
IF (LA~HDR[I+9])!0 THEN 05976350
|
||||
IF A GEQ LA AND A LSS LA+S THEN % FOUND ROW 05976400
|
||||
IF A+N LEQ LA+S THEN GO FOUND ELSE GO CONFLICT; 05976450
|
||||
TYPE~4; 05976500
|
||||
IF FALSE THEN 05976550
|
||||
BEGIN 05976600
|
||||
CONFLICT: TYPE~3; 05976650
|
||||
SEGS~A+N-LA-S; 05976700
|
||||
END; 05976750
|
||||
HEADERUNLOCK(TMID,TFID,HEADER&HA[CTF]); 05976800
|
||||
GO MSG; 05976850
|
||||
FOUND: 05976900
|
||||
HDR[I+9]~0; 05976950
|
||||
DISKWAIT(HEADER,30,HA); 05977000
|
||||
IF (I~A-LA) GTR 0 THEN FORGETUSERDISK(LA,I); 05977050
|
||||
IF (I~LA+S-(LA~A+N)) GTR 0 THEN FORGETUSERDISK(LA,I); 05977100
|
||||
$ SET OMIT = NOT(DKBNODFX AND NOT DFX) 05977124
|
||||
ENTERFILE; 05977150
|
||||
GO FINIS; 05977200
|
||||
END; 05977250
|
||||
N~S; SEGS~0; 05977300
|
||||
FOR I~HDR[9] STEP -1 UNTIL 1 DO 05977350
|
||||
IF (A~HDR[I+9])!0 THEN 05977400
|
||||
BEGIN 05977450
|
||||
HDR[I+9]~0; 05977500
|
||||
DISKWAIT(HEADER,30,HA); 05977550
|
||||
WORD~A; FID~DECWORD; 05977600
|
||||
$ SET OMIT = NOT(DKBNODFX AND NOT DFX) 05977624
|
||||
ENTERFILE; 05977650
|
||||
SEGS~SEGS+N; 05977700
|
||||
END; 05977750
|
||||
FINIS: 05977800
|
||||
FORGETSPACE(HEADER); 05977850
|
||||
P(DIRECTORYSEARCH(-TMID,TFID,6),DEL); 05977900
|
||||
TYPE~5; 05977950
|
||||
MSG: 05978000
|
||||
STREAM(TMID,TFID,SEGS,A,TYPE,BUFF); 05978050
|
||||
BEGIN 05978100
|
||||
SI~LOC SEGS; DI~LOC SEGS; DS~8DEC; DS~8DEC; 05978150
|
||||
DI~LOC SEGS; DS~8FILL; DI~LOC A; DS~8 FILL; DI~BUFF; 05978200
|
||||
DS~LIT","; SI~LOC TMID; SI~SI+1; DS~7CHR; 05978250
|
||||
DS~LIT"/"; SI~SI+1; DS~7CHR; 05978300
|
||||
DS~11 LIT" NOT XD-ED("; 05978350
|
||||
CI~CI+TYPE; 05978400
|
||||
GO T0; GO T1; GO T2; GO T3; GO T4; GO T5; 05978450
|
||||
T0: DS~11 LIT"NOT ON DISK"; GO EXT; 05978500
|
||||
T3: DS~8 CHR; DS~6 LIT" SEGS "; 05978550
|
||||
T1: DS~6 LIT"IN USE"; GO EXT; 05978600
|
||||
T2: DS~11 LIT"SYSTEM FILE"; GO EXT; 05978650
|
||||
T4: SI~SI+8; DS~8 CHR; 05978700
|
||||
DS~12 LIT" NOT IN FILE"; GO EXT; 05978750
|
||||
T5: DI~DI-11; 05978800
|
||||
DS~6 LIT" SEGS="; DS~8 CHR; DS~7 LIT" XD-ED~"; 05978850
|
||||
TYPE~DI; DI~BUFF; DS~LIT" "; DI~TYPE; GO EXT; 05978900
|
||||
EXT: DS~2 LIT")~"; 05978950
|
||||
END STREAM; 05979000
|
||||
A~1; N~SEGS; % FOR LOGGING 05979050
|
||||
GO EXIT; 05979100
|
||||
EXIT: 05979310
|
||||
IF A!0 THEN 05979320
|
||||
BEGIN 05979330
|
||||
B~BUFF; 05979340
|
||||
MLOGIT; 05979350
|
||||
END; 05979360
|
||||
IF RDT THEN M[SLEEPER INX 0] :=1 ELSE SPOUT(BUFF); 05979400
|
||||
BUFF:=0; IF MSCW NEQ 1 THEN KILL([MSCW]); % CALLED AS IND. RUNNER 05979500
|
||||
END; 05979600
|
||||
SAVE PROCEDURE DISKIO(LOCIOD,CORE,SIZE,DISK);% 06000000
|
||||
VALUE CORE,SIZE,DISK;% 06001000
|
||||
REAL LOCIOD;% 06002000
|
||||
INTEGER CORE,SIZE,DISK;% 06003000
|
||||
BEGIN REAL IOD, OLAYIO, FIN; 06004000
|
||||
OLAYIO := SIZE.[3:1]; SIZE.[3:1] := 0; 06004010
|
||||
CORE:=CORE; SIZE:=SIZE; DISK:=DISK; % INTEGERIZE %645-06004100
|
||||
IF DISK.[1:1] THEN 06005000
|
||||
BEGIN % AUXILIARY MEMORY 06006000
|
||||
$ SET OMIT = NOT(AUXMEM) 06006999
|
||||
$ SET OMIT = AUXMEM 06009200
|
||||
PUNT(NVLDAUXIO); 06009300
|
||||
$ POP OMIT 06009400
|
||||
END 06009500
|
||||
ELSE BEGIN IOD := ABS(CORE) & SIZE[8:38:10] 06010000
|
||||
& ((SIZE INX 29) DIV 30 +@1000)[CTF] 06011000
|
||||
& CORE[24:1:1] & 3[5:46:2]; 06012000
|
||||
$ SET OMIT = NOT(SHAREDISK) 06012499
|
||||
STREAM(DISK,D:=CORE.[CF]); 06013000
|
||||
BEGIN SI ~ LOC DISK; DS ~ 8 DEC END;% 06014000
|
||||
SIZE ~ 2;% 06015000
|
||||
END;% 06016000
|
||||
FIN:=IF OLAYIO THEN IOD&DISK[CTC]&DISK[8:21:12] ELSE IOD; 06016100
|
||||
% ACTUAL DISK ADDRESS IN FINALQUE FOR OLAY I/O-S 06016200
|
||||
IOREQUEST(NABS(FIN)&@377[25:40:8],IOD,[LOCIOD]&% 06017000
|
||||
(SIZE+16)[12:42:6]&OLAYIO[9:47:1]); 06018000
|
||||
LOCIOD ~ 0;% 06019000
|
||||
END DISKIO;% 06020000
|
||||
PROCEDURE FORGETESPDISK(SEGMENT); VALUE SEGMENT; REAL SEGMENT; FORWARD; 06020500
|
||||
REAL PROCEDURE GETESPDISK;% 06021000
|
||||
BEGIN REAL T=NT1; 06022000
|
||||
IF ESPCOUNT=0 THEN 06022100
|
||||
BEGIN 06022200
|
||||
STREAM(D:=T:=SPACE(2)); 06022300
|
||||
DS~12 LIT " NO ESPDISK~"; 06022400
|
||||
SPOUT(T); 06022500
|
||||
SLEEP([ESPCOUNT],NOT 0); 06022600
|
||||
END; 06022700
|
||||
STREAM(T~0,A~ESPTAB:X~0); 06023000
|
||||
BEGIN SI~A; 06024000
|
||||
L1: IF SC=""" THEN BEGIN SI~SI+1; GO TO L1 END; 06025000
|
||||
A~SI; DI~A; 06026000
|
||||
L2: IF SB THEN 06027000
|
||||
BEGIN TALLY~TALLY+1; SKIP SB; SKIP DB; GO TO L2 END; 06028000
|
||||
T~TALLY; DS~SET; 06029000
|
||||
END; 06030000
|
||||
GETESPDISK~((P(DUP).[CF]-ESPTAB)|8 06031000
|
||||
+P(XCH).[30:3])|6+P+ESPDISKBOTTOM; 06032000
|
||||
ESPCOUNT~ESPCOUNT-1; 06033000
|
||||
END; 06033100
|
||||
PROCEDURE FORGETESPDISK(SEGMENT); VALUE SEGMENT; REAL SEGMENT;% 06036000
|
||||
BEGIN REAL S,T; 06037000
|
||||
IF SEGMENT LSS ESPDISKBOTTOM OR 06037100
|
||||
SEGMENT GTR ESPDISKTOP THEN 06037200
|
||||
BYBY("ESPDISK ERROR~",14); 06037300
|
||||
T:=(S:=(T:=SEGMENT-ESPDISKBOTTOM) DIV 6)|6-T; 06037700
|
||||
S~S.[30:15]&S[30:45:3]|ESPTAB; 06038000
|
||||
STREAM(T,S); BEGIN SKIP T DB; DS~RESET END; 06038100
|
||||
ESPCOUNT~ESPCOUNT+1; 06038200
|
||||
END;% 06039000
|
||||
$ SET OMIT = NOT(DEBUGGING) 06045999
|
||||
REAL SCHEDULEIDS; % A BIT IN POSITION X MEANS THAT THERE IS A JOB IN THE06056099
|
||||
% SCHEDULE(SHEET) WITH SCHEDULE-ID X. USED BY COM5, 06056100
|
||||
% SELECTRUN AND CCFINISH. 06056200
|
||||
$ SET OMIT = NOT(SHAREDISK) 06057000
|
||||
SAVE PROCEDURE DISKWAIT(CORE,SIZE,DISK); 06061500
|
||||
VALUE CORE,SIZE,DISK; 06062000
|
||||
REAL CORE,SIZE,DISK; 06063000
|
||||
BEGIN REAL T; 06064000
|
||||
DISKIO(T,(ABS(CORE)-1)&CORE[1:1:1],SIZE,DISK); 06065000
|
||||
SLEEP([T],IOMASK); 06066000
|
||||
END; 06067000
|
||||
PROCEDURE DISKSQUASH(BUFF); 06068000
|
||||
VALUE BUFF; REAL BUFF; 06068100
|
||||
BEGIN 06068200
|
||||
REAL RCW=+0, B=+1, E=B+1, F=E+1, R=F+1, HI=R+1, LO=HI+1, 06068300
|
||||
MSCW=-2, 06068350
|
||||
CNT=LO+1, USE=CNT+1, TOG=USE+1, IOD=TOG+1; 06068400
|
||||
REAL T=IOD+1, SUM=T; 06068500
|
||||
REAL A1= T+1, A2=A1+1, A3=A2+1, A4=A3+1, A5=A4+1; % ARRAY VARIABLES 06068600
|
||||
REAL X1=A5+1, X2=X1+1, X3=X2+1, X4=X3+1, X5=X4+1; % SCRATCH VARIABLES 06068700
|
||||
REAL LOCIOD=X4, HICNT=X4, LSTCNT=X5; 06068800
|
||||
BOOLEAN CONFLICT=X5+1, PASTWO=CONFLICT+1, EUNOTSQUASHED=PASSTWO+1, 06068900
|
||||
FILEOK=EUNOTSQUASHED+1, SQALL=FILEOK+1; 06069000
|
||||
INTEGER C=SQALL+1, D=C+1, I=D+1, S=I+1, EU=S+1, AV=EU+1, 06069100
|
||||
AVSIZE=AV+1, DISKAV=AVSIZE+1, SQSIZE=DISKAV+1; 06069200
|
||||
ARRAY UT=SQSIZE+1[*], MV=UT+1[*], DIR=MV+1[*], EUS=DIR+1[*]; 06069300
|
||||
REAL PRTADDR=EUS+1, PRTVALUE=PRTADDR+1; 06069400
|
||||
$ SET OMIT = NOT SHAREDISK 06069500
|
||||
LABEL SCAN, SPOUTER,CK,OKINUSE,NOTOK,OKBOUNDS,MVEMORE,MVE, 06069900
|
||||
ENDMVE,AGAIN,OK,NEXT,SQIT,STOPSQ,STOPIT,SDXIT,OUT,FIXMV; 06070000
|
||||
DEFINE 06070100
|
||||
$ SET OMIT = SHAREDISK 06070200
|
||||
U = AVTABLE#, 06070300
|
||||
$ POP OMIT 06070400
|
||||
LINK = [12:10]#, 06070500
|
||||
ASIZE = [3:19]#, 06070600
|
||||
LOCKED = [2:1]#, 06070700
|
||||
FACTOR = 10000#, 06070800
|
||||
MINSIZE = 10#, 06070900
|
||||
MAXMVSIZE = 900#, 06071000
|
||||
KEYINMASK = [18:15]#; 06071100
|
||||
COMMENT 06071200
|
||||
FACTOR: THE MAXIMUM SEPARATION, IN SEGMENTS, ALLOWED 06071300
|
||||
BETWEEN TWO AVAILABLE AREAS WHICH ARE TO BE 06071400
|
||||
SQUASHED. IN GENERAL, FACTOR SHOULD NOT BE MADE 06071500
|
||||
LARGER THAN THE CAPACITY OFA 20 ML SUBMOD,I.E., 06071600
|
||||
10,000 SEGMENTS. 06071700
|
||||
MINSIZE: THE MINIMUM SIZE, IN SEGMENTS, ALLOWED FOR AN 06071800
|
||||
AVAILABLE AREA TO BE CONSIDERED AS A CANDIDATE 06071900
|
||||
FOR SQUASHING. MINSIZE MAY BE MADE AS SMALL AS 06072000
|
||||
ONE, BUT AS SQUASH TIME VARIES INVERSLY WITH 06072100
|
||||
MINSIZE, SMALLER VALUES WILL INCREASE SQUASH- 06072200
|
||||
ING TIME PROPORTIONALLY. MINSIZE LIMITA- 06072300
|
||||
TIONS MAY BE OVERRIDEN BY THE LOOKAHEAD 06072400
|
||||
FACILITY. 06072500
|
||||
MAXMVSIZE: LIMITS THE NUMBER OF INDIVIDUAL AREAS IN AN 06072600
|
||||
IN-USE AREA TO BE AT MOST MAXMVSIZE/3 AREAS 06072700
|
||||
FOR SQUASHING TO OCCUR. 06072800
|
||||
NOTE: 06072900
|
||||
1) MAXMVSIZE MUST BE LESS THAN 1024, 06073000
|
||||
2) MAXMVSIZE MUST BE A MULTIPLE OF 3. ; 06073100
|
||||
DEFINE CELL = M[PRTADDR]#, 06073200
|
||||
STOP = M[PRTADDR]#, 06073300
|
||||
STOPCK = IF M[PRTADDR] THEN GO STOPSQ#, 06073400
|
||||
MOVEABLE = NOT DIR[X3+4].[42:1]#, 06073500
|
||||
TEMPDSK = MV[I+2].[1;1]#; 06073600
|
||||
SUBROUTINE SQUASHMESS; 06073700
|
||||
BEGIN 06073800
|
||||
IF (X1:=P(XCH))>1 THEN X3:=IF SQSIZE!0 THEN SQSIZE 06073900
|
||||
ELSE EUS[EU-1].DSIZE; 06074000
|
||||
STREAM(A:=EU-1,B:=X1,C:=X3,C1:=0,C2:=0,CX:=0, 06074100
|
||||
NOSQ:=EUNOTSQUASHED, X2:=X2:=SPACE(10)); 06074200
|
||||
BEGIN 06074300
|
||||
C1:=CI; GO TO L0; 06074400
|
||||
SI:=LOC A; DS:=4 LIT" EU"; DS:=2 DEC; 06074500
|
||||
A:=DI; DI:=DI-2; DS:=FILL; DS:=A; CI:=CX; 06074600
|
||||
L0: C2:=CI; GO TO L2; DS:=4 LIT"NULL"; CI:=CX; 06074700
|
||||
L1: DS:=7 LIT" SQUASH"; CI:=CX; 06074800
|
||||
L2: CI:=CI+B; 06074900
|
||||
GO TO LL0; GO TO LL0; GO TO LL2; TO TO LL2; 06075000
|
||||
LL0: CX:=CI; CI:=C1; 06075100
|
||||
N(NOSQ(DS:=LIT" "; CX:=CI; CI:=C2)); 06075200
|
||||
CX:=CI; GO TO L1; 06075300
|
||||
B(NOSQ(JUMP OUT 2 TO LL1); DS:=2 LIT"ED"; 06075400
|
||||
JUMP OUT TO LL1); 06075500
|
||||
DS:=3 LIT"ING"; 06075600
|
||||
LL1: GO TO EXT; 06075700
|
||||
LL2: DS:=LIT" "; CX:=C1; CI:=C2; 06075800
|
||||
CX:=CI; GO TO L1; 06075900
|
||||
SI:=B; 2(SI:=SI-8); B:=SI; 06076000
|
||||
B(CX:=CI; CI:=C1); 06076100
|
||||
DS:=2 LIT" ("; SI:=LOC C; 06076200
|
||||
DS:=6 DEC; C:=DI; DI:=DI-6; DS:=5 FILL; DI:=C; 06076300
|
||||
DS:=19 LIT" SEGMENTS AVAILABLE"; 06076400
|
||||
B(JUMP OUT TO LL3); DS:=4 LIT" ON "; 06076500
|
||||
CX:=CI; CI:=C1; 06076600
|
||||
LL3: DS:=LIT")"; 06076700
|
||||
EXT: DS:=LIT"~"; 06076800
|
||||
END; 06076900
|
||||
SPOUT(X2); 06077000
|
||||
END PRINTING MESSAGES; 06077100
|
||||
SUBROUTINE SCANMESSAGE; 06077200
|
||||
BEGIN 06077300
|
||||
X1:=(X5:=NEUP.[FF])-1; X2:=BUFF.[30:18]; 06077400
|
||||
FIXARRAY(EUS,A5,X5); 06077500
|
||||
MOVE(X5,A5-1,A5); 06077600
|
||||
X5:=-1; % WILL BE GEQ ZERO AFTER FIRST PASS THRU SCAN 06077700
|
||||
SCAN: 06077800
|
||||
STREAM(A:=0,SIZ:=0,EU1:=-1,EU2:=-1,ERRTOG:=0:NO:=0, 06077900
|
||||
B:=X5<0,EU:=@2564000000000000,CX:=0,C1:=0, 06078000
|
||||
C2:=0,KTR:=X2); 06078100
|
||||
BEGIN 06078200
|
||||
C1:=CI; GO TO L2; 06078300
|
||||
IF SC<0 THEN 06078400
|
||||
A0: BEGIN TALLY:=1; NO:=TALLY; CI:=CX END; 06078500
|
||||
IF SC=12 THEN GO TO A0; 06078600
|
||||
DI:=LOC SIZ; 06078700
|
||||
L1: IF SC GEQ 0 THEN IF SC<12 THEN 06078800
|
||||
BEGIN 06078900
|
||||
TALLY:=TALLY+1; 06079000
|
||||
SI:=SI+1; 06079100
|
||||
GO TO L1; 06079200
|
||||
END; 06079300
|
||||
NO:=TALLY; 06079400
|
||||
SI:=SI-NO; 06079500
|
||||
DS:=NO OCT; 06079600
|
||||
TALLY:=0; NO:=TALLY; 06079700
|
||||
CI:=CX; 06079800
|
||||
L2: C2:=CI; GO TO STR; 06079900
|
||||
TALLY:=1; DI:=LOC EU; 06080000
|
||||
IF 2 SC=DC THEN % AN EU SPECIFIED 06080100
|
||||
BEGIN 06080200
|
||||
CX:=CI; GO TO L3; 06080300
|
||||
IF SC GEQ 0 THEN IF SC<12 THEN 06080400
|
||||
BEGIN 06080500
|
||||
SI:=SI+1; DI:=LOC EU1; 06080600
|
||||
IF SC GEQ 0 THEN IF SC<12 THEN 06080700
|
||||
TALLY:=2 ELSE GO TO A1; 06080800
|
||||
SI:=SI-1; NO:=TALLY; 06080900
|
||||
DS:=NO OCT; TALLY:=0; 06081000
|
||||
END ELSE GO TO A1; 06081100
|
||||
END; 06081200
|
||||
NO:=TALLY; CI:=A; 06081300
|
||||
CI:=A; 06081400
|
||||
L3: IF SC=" " THEN BEGIN SI:=SI+1; GO TO L3 END; CI:=CX; 06081500
|
||||
STR: SI:=KTR; CI:=CI+B; GO TO L5; GO TO L4; 06081600
|
||||
L4: IF SC="~" THEN GO TO EXT; 06081700
|
||||
CX:=CI; CI:=C1; % SIZE CHECK 06081800
|
||||
NO(JUMP OUT TO L5); 06081900
|
||||
CX:=CI; GO TO L3; 06082000
|
||||
IF SC!"~" THEN 06082100
|
||||
A1: GO TO ERR; 06082200
|
||||
GO EXT; 06082300
|
||||
L5: A:=CI; CI:=C2; % EU CHECK 06082400
|
||||
NO(JUMP OUT TO ERR); 06082500
|
||||
IF SC="-" THEN 06082600
|
||||
BEGIN 06082700
|
||||
SI:=SI+1; CX:=CI; GO TO L3; 06082800
|
||||
CX:=CI; CI:=C1; % SIZE CHECK 06082900
|
||||
NO(JUMP OUT TO L6); GO TO L7; 06083000
|
||||
L6: TALLY:=EU1; EU2:=TALLY; 06083100
|
||||
A:= CI; CI:=C2; % EU CHECK 06083200
|
||||
NO(JUMP OUT TO ERR); 06083300
|
||||
END; 06083400
|
||||
L7: A:=TALLY; % ZERO OUT A 06083500
|
||||
IF SC="~" THEN GO TO EXT; 06083600
|
||||
IF SC="," THEN 06083700
|
||||
BEGIN SI:=SI+1; A:=SI; GO EXT END; 06083800
|
||||
ERR: TALLY:=1; ERRTOG:=TALLY; 06083900
|
||||
EXT: 06084000
|
||||
END; 06084100
|
||||
IF P THEN % ERROR IN INPUT MESSAGE 06084200
|
||||
BEGIN 06084300
|
||||
SPOUTERR: 06084400
|
||||
SPOUT(P(BUFF.[15:15]-1,DUP)&M[P-1][9:9:9]); 06084500
|
||||
FORGETSPACE(A5); 06084600
|
||||
P(XIT); 06084700
|
||||
END; 06084800
|
||||
IF (X3:=P) GEQ 0 THEN % AN EU RANGE SPECIFIED. 06084900
|
||||
BEGIN 06085000
|
||||
IF (X4:=P)>X1 OR X3<X1 THEN GO SPOUTERR; 06085100
|
||||
FOR I:=X3 STEP 1 UNTIL X4 DO EUS[I]:=1; 06085200
|
||||
P(DEL); GO CK; 06085300
|
||||
END; 06085400
|
||||
X5:=P(XCH); % SIZE OF SQUASH 06085500
|
||||
IF (X4:=P) GEQ 0 THEN IF X4>X1 THEN GO SPOUTERR ELSE 06085600
|
||||
EUS[X4]:=1&X5[TODSIZE] ELSE IF X5=0 THEN SQALL:=1 06085700
|
||||
ELSE SQSIZE:=X5; 06085800
|
||||
CK: IF (XS:=P)!0 THEN GO SCAN; % NOT FINISHED YET 06085900
|
||||
END SCANNING INPUT MESSAGE; 06086000
|
||||
SUBROUTINE FIXANDWRITEHEADER; 06086100
|
||||
BEGIN 06086200
|
||||
M[A4+9+X2.[28:5]]:=C; 06086300
|
||||
DISKWAIT(A4,30,X2.[CF]); 06086400
|
||||
END WRITING NEW HEADER; 06086500
|
||||
SUBROUTINE BOUNDARYCK; 06086600
|
||||
BEGIN 06086700
|
||||
LSTCNT:=0; M[X2-1]:=-1; 06086800
|
||||
MVEMORE: 06086900
|
||||
X3:=HICNT:=0; STOPCK; 06087000
|
||||
FOR I:=CNT SETP -3 UNTIL 0 DO 06087100
|
||||
IF P(MV[I],DUP).DEND>X3 AND P(XCH)>0 THEN 06087200
|
||||
BEGIN X3:=MV[I].DEND; HICNT:=I END; 06087300
|
||||
IF X3=0 THEN % RE-ORDERING OF MV ARRAY COMPLETE 06087400
|
||||
BEGIN 06087500
|
||||
MV[LSTCNT+2].LINK:=@1777; 06087600
|
||||
GO OKBOUNDS; 06087700
|
||||
END; 06087800
|
||||
IF M[A2-1]<0 THEN M[A2-1]:=HICNT ELSE MV[LSTCNT+2].LINK:=HICNT; 06087900
|
||||
MV[LSTCNT:=HICNT]:=NABS(*P(DUP)); 06088000
|
||||
MV[HICNT+1].[2:26]:=HI; 06088100
|
||||
HI:=HI-(X3:=MV[HICNT].DSIZE); 06088200
|
||||
IF X3 LEQ UT[AV+1].ASIZE THEN 06088300
|
||||
OK: BEGIN 06088400
|
||||
MV[HICNT+2]:=0; 06088500
|
||||
GO MVEMORE; 06088600
|
||||
END ELSE 06088700
|
||||
BEGIN % LOOKING FOR TEMPORARY STORAGE 06088800
|
||||
FOR I:=S-2 STEP -1 UNTIL D DO 06088900
|
||||
IF X3 LEQ UT[I].ASIZE THEN 06089000
|
||||
IF NOT UT[I].LOCKED THEN % OK FOR TEMP STORAGE 06089100
|
||||
BEGIN 06089200
|
||||
MV[HICNT+2]:=UT[I].DEND&I[2:38:10]; 06089300
|
||||
GO MVEMORE; 06089400
|
||||
END; 06089500
|
||||
END; 06089600
|
||||
IF PASSTWO THEN % NON-PROTECTED FILE TRANSFER 06089700
|
||||
BEGIN 06089800
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user