mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-13 07:09:23 +00:00
4097 lines
364 KiB
Plaintext
4097 lines
364 KiB
Plaintext
R / C -- A MULTI USER REMOTE/CARD. 00000500
|
|
WRITTEN BY RON BRODY; BURROUGHS CORP.; PAOLI, PA. 215-NI4-4700 X219 00001000
|
|
BEGIN 00001500
|
|
DEFINE VERSION = 94# ; % NOVEMBER 18, 1971. 00002000
|
|
DEFINE MAXUSERS = 8#, MAXUSER = 7#; 00002500
|
|
DEFINE CHRSPERBUFFER = 56 #, % OR 28 00002600
|
|
WORDSPERBUFFER = 8#, % OR 5 00002700
|
|
WDSPERBUFFER = 7# ; % OR 4 00002800
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00003000
|
|
ALPHA FILE IN TWXINPUT 14 (MAXUSER + MAXUSER, 8); 00003500
|
|
ALPHA FILE OUT TWXOUTPUT 14 (MAXUSERS, WORDSPERBUFFER) ; 00004000
|
|
DEFINE TWXOUT = TWXOUTPUT (STATIONI, 0)# ; 00008500
|
|
ARRAY PRETANK [0 : 3], 00009500
|
|
BUFFERS [0 : MAXUSERS, 0 : 44] ; 00010000
|
|
DEFINE BUFFER [BUFFER1] = BUFFERS [USER, BUFFER1]#, 00010200
|
|
BLOC = BUFFER [29]#, 00010300
|
|
BUFF [BUFF1] = BUFFERS [MAXUSERS, BUFF1]# ; 00010400
|
|
INTEGER ARRAY READYQ [0 : MAXUSERS] ; 00011000
|
|
DEFINE RATTLEINDEX = READYQ [MAXUSERS]# ; 00011500
|
|
INTEGER USER, 00012000
|
|
USER32, 00012200
|
|
CLOCK, 00013000
|
|
READYQTOP, 00013500
|
|
NEXTCLOCK, 00014500
|
|
TINK, 00015000
|
|
BIGBIRD ; 00016000
|
|
BOOLEAN GLOBALBOOL ; 00016500
|
|
DEFINE 00017000
|
|
TANKEDOUTPUT = GLOBALBOOL . [47 : 1]#, 00017010
|
|
OUTPUTREADY = (GLOBALBOOL)#, 00017020
|
|
Q = GLOBALBOOL . [46 : 1]#, 00017100
|
|
LOCKED = GLOBALBOOL . [45 : 1]#, 00017200
|
|
XLOCKED = GLOBALBOOL . [44 : 1]#, 00017210
|
|
YLOCKED = GLOBALBOOL . [43 : 1]#, 00017220
|
|
QINPUT = GLOBALBOOL . [42 : 1]#, 00017300
|
|
ERRTOG = GLOBALBOOL . [1 : 1]# ; 00017500
|
|
ARRAY INPUT [0 : 14] ; 00018000
|
|
DEFINE T0 = INPUT [10]#, 00018100
|
|
T1 = INPUT [11]#, 00018200
|
|
TN = INPUT [12]#, 00018300
|
|
FREEHEAD = INPUT [13]#, 00018400
|
|
MAXFREEHEAD = INPUT [14]# ; 00018500
|
|
DEFINE CHRS = BUFFER [30]#, 00019000
|
|
NCHRS = BUFFER [31]#, 00019100
|
|
USERCODEI = BUFFER [32]#, 00019500
|
|
STATIONI = BUFFER [33]#, 00020000
|
|
BREAKI = BUFFER [34]#, 00020500
|
|
ABNORMALEND = BUFFER [35]#, 00020600
|
|
INREADYQ = BUFFER [36]#, 00020700
|
|
FIRSTCHANCE = BUFFER [37]#, 00020710
|
|
ILFCRI = BUFFER [38]#, 00020800
|
|
TRANSLATEI = BUFFER [39]#, 00020900
|
|
HEADI = BUFFER [40]#, 00021000
|
|
TIMEI = BUFFER [41]#, 00021100
|
|
TAILI = BUFFER [42]#, 00021500
|
|
SLOTI = BUFFER [43]#, 00022000
|
|
BLOCK = BUFFER [44]#, 00022100
|
|
COUNTI = BUFFER [0]# ; 00022500
|
|
ALPHA ARRAY RECORD [0 : 9] ; 00023000
|
|
REAL ARRAY LINKLISTS [0 : 32 | MAXUSERS - 1, 0 : 255] ; 00023500
|
|
DEFINE TIMEX = TIME (1)#, 00023600
|
|
FIRST = LINKLISTS [USER32, 0]#, 00023800
|
|
LAST = LINKLISTS [USER32, 1]#, 00023900
|
|
LEFTSIDE = [35 : 5]#, 00024000
|
|
RIGHTSIDE = [40 : 8]#, 00024500
|
|
LL [LL1] = 00025000
|
|
LINKLISTS [(TINK := LL1).LEFTSIDE + USER32, TINK.RIGHTSIDE]#, 00025500
|
|
S = [1 : 21]#, 00026000
|
|
SF = 1 : 27 : 21#, 00026500
|
|
F = [22 : 13]#, 00027000
|
|
FF = 22 : 35 : 13#, 00027500
|
|
T = [35 : 13]#, 00028000
|
|
TF = 35 : 35 : 13#, 00028500
|
|
INFINITY = 2097151#, %MAXIMUM SEQUENCE NUMBER = 2*21-1. 00029000
|
|
FINITY = 2097150#, 00029010
|
|
MAXFILELENGTH = 8191# ;% = 2*13-1. 00029500
|
|
DEFINE MODIFY (MODIFY1) = 00029700
|
|
MODIFIED := MODIFIED OR TWO ((MODIFY1).LEFTSIDE)# ; 00029800
|
|
DEFINE WAITFLAG = BOOL . [47 : 1]#, WAITING = (BOOL)#, 00030500
|
|
INLINETOG = BOOL . [46 : 1]#, 00031000
|
|
EXTRALFCR = BOOL . [45 : 1]#, 00031500
|
|
EXECUTEECHO = BOOL . [44 : 1]#, 00032000
|
|
TRANSLATING = BOOL . [43 : 1]#, % INITIALLY ON 00032500
|
|
XECHO = BOOL . [42 : 1]#, 00033000
|
|
NUM1 = BOOL . [36 : 2]#, 00035000
|
|
NUM2 = BOOL . [34 : 2]#, 00035500
|
|
NUM3 = BOOL . [32 : 2]#, 00036000
|
|
NUM4 = BOOL . [30 : 2]#, 00036500
|
|
EMPTY1 = BOOL . [36 : 1]#, 00037500
|
|
EMPTY2 = BOOL . [34 : 1]#, 00038000
|
|
EMPTY3 = BOOL . [32 : 1]#, 00038500
|
|
EMPTY4 = BOOL . [30 : 1]#, 00039000
|
|
NOSTAR = BOOL . [29 : 1]#, 00039500
|
|
MOREINPUT = BOOL . [23 : 1]#, 00042500
|
|
NOTFIRSTINPUT = BOOL . [22 : 1]#, 00043000
|
|
INLINEECHO = BOOL . [21 : 1]#, % INITIALLY ON 00043010
|
|
CHANGEECHO = BOOL . [20 : 1]#, 00043020
|
|
EDITECHO = BOOL . [19 : 1]#, 00043030
|
|
COPYCLOBBER = BOOL . [18 : 1]#, 00043040
|
|
DITTOCLOBBER = BOOL . [17 : 1]#, 00043050
|
|
TEMPTOG = BOOL . [16 : 1]#, 00043060
|
|
TABON = BOOL . [15 : 1]#, % INITIALLY ON 00043070
|
|
COLUMNS = BOOL . [12 : 1]#, 00043100
|
|
INORDER = BOOL . [1 : 1]#, 00043500
|
|
INITIALBOOL = BOOLEAN ("44000+")# ; 00043600
|
|
ARRAY CONTROLS [0 : 90] ; 00043700
|
|
DEFINE VN = CONTROLS [89]#, 00043800
|
|
STRINGI = CONTROLS [88]#, 00043900
|
|
STRINGID = CONTROLS [87]#, 00044000
|
|
STRINGILEFT = CONTROLS [86]#, 00044100
|
|
STRINGIREPEAT = CONTROLS [85]#, 00044200
|
|
STRINGJ = CONTROLS [84]#, 00044300
|
|
STRINGJD = CONTROLS [83]#, 00044400
|
|
STRINGJLEFT = CONTROLS [82]#, 00044500
|
|
STRINGJREPEAT = CONTROLS [81]#, 00044600
|
|
CHARACTER = CONTROLS [80]#, 00044700
|
|
MAXCOLSTOP = CONTROLS [79]#, 00044800
|
|
COLSTOPS = CONTROLS [78]#, 00044900
|
|
COLSTOP4 = CONTROLS [77]#, 00045000
|
|
COLSTOP3 = CONTROLS [76]#, 00045100
|
|
COLSTOP2 = CONTROLS [75]#, 00045200
|
|
COLSTOP1 = CONTROLS [74]#, 00045300
|
|
COLSTOP [COLSTOP1] = CONTROLS [73 + COLSTOP1]#, 00045400
|
|
RELATIVENUMBER = CONTROLS [73]#, 00045500
|
|
STRING = CONTROLS [30]# ; % - CONTROLS [37] 00046600
|
|
REAL PARAMETER0, % CONTROLS [38] 00046610
|
|
PARAMETER1, % CONTROLS [39] 00046620
|
|
PARAMETER2, % CONTROLS [40] 00046630
|
|
PARAMETER3, % CONTROLS [41] 00046640
|
|
PARAMETER4, % CONTROLS [42] 00046650
|
|
USERCODE, % CONTROLS [43] 00046700
|
|
STATION, % CONTROLS [44] 00046800
|
|
PREFIX, % CONTROLS [45] 00046900
|
|
SUFFIX, % CONTROLS [46] 00047000
|
|
MACROLIBRARY ; % CONTROLS [47] 00047100
|
|
BOOLEAN MODIFIED ; % CONTROLS [48] 00047200
|
|
INTEGER FILEINFO, % CONTROLS [49] 00047300
|
|
TABAMOUNT, % CONTROLS [50] 00047400
|
|
FILEACCESS, % CONTROLS [51] 00047500
|
|
SAVEFACTOR, % CONTROLS [52] 00047600
|
|
PREWHERE, % CONTROLS [53] 00047700
|
|
XDEX, % CONTROLS [54] 00047800
|
|
N, % CONTROLS [55] 00047900
|
|
AT, % CONTROLS [56] 00048000
|
|
D, % CONTROLS [57] 00048100
|
|
M, % CONTROLS [58] 00048200
|
|
INC, % CONTROLS [59] 00048300
|
|
I, % CONTROLS [60] 00048400
|
|
RESETN ; % CONTROLS [61] 00048500
|
|
BOOLEAN BOOL ; % CONTROLS [62] 00048800
|
|
DEFINE COBOLFILE = BOOLEAN (FILEINFO)#, 00048820
|
|
DATAFILE = FILEINFO = DATA#, 00048830
|
|
ALGOLFILE = FILEINFO GEQ ALGOL#, 00048840
|
|
COMPILER = FILEINFO#, 00048850
|
|
LENGTH = (IF ALGOLFILE THEN 72 ELSE IF COBOLFILE THEN 66 ELSE 80)#, 00048860
|
|
HALFLENGTH=(IF ALGOLFILE THEN 36 ELSE IF COBOLFILE THEN 33 ELSE 40)#,00048870
|
|
FULLLENGTH = (IF DATAFILE THEN 80 ELSE 72)#, 00048880
|
|
HALFFULLLENGTH = (IF DATAFILE THEN 40 ELSE 36)#, 00048890
|
|
COBOL = 1#, 00049600
|
|
DATA = 2#, 00049610
|
|
ALGOL = 4#, 00049620
|
|
XALGOL = 6#, 00049630
|
|
FORTRAN = 8#, 00049640
|
|
BASIC = 10#, 00049650
|
|
FILEOPEN = FILEACCESS GTR 0#, 00050710
|
|
FILECLOSED = FILEACCESS LEQ 0#, 00050720
|
|
READONLYFILE = FILEACCESS = 2#, 00050730
|
|
READWRITEFILE = FILEACCESS GEQ 3# ; 00050740
|
|
SAVE ARRAY IMAGE [0 : 29] ; 00058000
|
|
DEFINE RSWDM = 27#, 00058500
|
|
RSWD [RSWD1] = CONTROLS [RSWD1]#, 00061500
|
|
RWTEACH = RSWD [24]# ; 00062000
|
|
FILE DISC DISK SERIAL (2, 10, 30) ; 00064000
|
|
FILE LIBRARY DISK SERIAL (2, 10, 30) ; 00065500
|
|
FILE R1 DISK SERIAL "R/C" "#1" (1, 90) ; 00069500
|
|
FILE R2 DISK SERIAL "R/C" "#2" (1, 256) ; 00070000
|
|
FILE IO DISK RANDOM [20:150] (1, 30) ; 00070500
|
|
ARRAY ZIPPY [0 : MAX (29, MAXUSERS + MAXUSERS + 1)] ; 00071500
|
|
FORMAT ZIPPER ("CC COMPILE ", A1, A6, "/", A1, A6, " WITH ", 00072000
|
|
A1, A6, " LIBRARY; ALGOL FILE CARD=", A1, A6, "/", A1, A6, 00072500
|
|
"SERIAL; ALGOL FILE LINE=LINE/", A1, A6, " SERIAL; END."), 00073000
|
|
EOJ ("{!GOOD BYE{!!!~"), 00073600
|
|
NOROOM (X8, "SORRY, FULL UP.{!BYE{!~"), 00073700
|
|
USERUN (X8, "USE:{!?? RUN ...~"), 00078600
|
|
STAR ("*", X79), 00079000
|
|
DATE (X6, A1, A6, "/", A1, A6, " LISTED AT", I3, ":", I2, " ON ", 00079300
|
|
A6, "DAY ", O, " BY ", A1, A6, X62), 00079400
|
|
WAITF ("WAIT...~"), 00085000
|
|
RATTLE (X8, "<<<~"), 00087000
|
|
TEACH1 ("{!THE VALID VERBS ARE:~"), 00087500
|
|
TEACH2 (7 (A1, A6, X2)), 00088000
|
|
TEACH3 ("FOR SYNTAX OF A VERB (E.G. TAB), INPUT: * TEACH", 00088500
|
|
" VERB. (E.G. * TEACH TAB) "), 00089000
|
|
BROKEN (X8, "{!BREAK{!~") ; 00092000
|
|
DEFINE ONOFF (ONOFF1) = (IF ONOFF1 THEN " ON " ELSE " OFF ")# ; 00097100
|
|
DEFINE XMAX = 5# ; 00099600
|
|
ARRAY XARRAY [0:MAXUSER, 0:XMAX | 13 - 1] ; 00099700
|
|
DEFINE 00099800
|
|
XSUB = XDEX | 13#, 00099810
|
|
XPARAMETERS [XPARAMETERS1] = XARRAY [USER, XSUB + XPARAMETERS1]#, 00099900
|
|
XSTART = XARRAY [USER, XSUB + 5]#, 00100000
|
|
XLAST = XARRAY [USER, XSUB + 6]#, 00100100
|
|
XN = XARRAY [USER, XSUB + 7]#, 00100200
|
|
XREPEAT = XARRAY [USER, XSUB + 8]#, 00100300
|
|
XPREFIX = XARRAY [USER, XSUB + 9]#, 00100400
|
|
XSUFFIX = XARRAY [USER, XSUB + 10]#, 00100500
|
|
XFILETYPE = XARRAY [USER, XSUB + 11]#, 00100600
|
|
XNCHRS = XARRAY [USER, XSUB + 12]# ; 00100700
|
|
PROCEDURE PROGRAM ; FORWARD ; 00101000
|
|
ALPHA PROCEDURE OCTDECIMAL (N, M, F) ; 00101100
|
|
VALUE N, F ; 00101200
|
|
INTEGER N, M, F ; 00101300
|
|
BEGIN 00101400
|
|
ALPHA STREAM PROCEDURE OCTDECX (N, F, Q, T) ; 00101500
|
|
VALUE F, Q, T ; 00101600
|
|
BEGIN 00102500
|
|
LABEL EXIT ; 00102600
|
|
DI := LOC OCTDECX ; 00103000
|
|
SI := N ; 00103100
|
|
T (Q (DS := F OCT ; JUMP OUT 2 TO EXIT) ; 00103200
|
|
SKIP F DB ; DS := SET ; JUMP OUT TO EXIT) ; 00103500
|
|
Q (F (SI := SI + 2 ; DS := 2 CHR ; DS := LIT "/" ; DS := 2 CHR ; 00103600
|
|
DS := LIT "/" ; DS := 2 CHR ; JUMP OUT 2 TO EXIT) ; 00103700
|
|
DI := DI + 7 ; DS := CHR ; JUMP OUT TO EXIT) ; 00103800
|
|
DS := 8 DEC ; 00104000
|
|
F (DI := DI - 7 ; DS := 6 FILL) ; 00104100
|
|
EXIT: 00104200
|
|
END OCTDECX; 00104300
|
|
IF F LEQ 1 THEN 00104400
|
|
BEGIN 00104500
|
|
N := N ; 00104600
|
|
OCTDECIMAL := OCTDECX (N, F, 0, 0) ; 00104700
|
|
END ELSE IF F = 2 THEN 00104800
|
|
OCTDECIMAL := OCTDECX (M, 0, 1, 0) 00104900
|
|
ELSE IF F = 3 THEN 00104910
|
|
OCTDECIMAL := OCTDECX (N, 1, 1, 0) 00104920
|
|
ELSE IF F = 4 THEN 00104930
|
|
OCTDECIMAL := OCTDECX (M, N, 1, 1) 00104940
|
|
ELSE 00105000
|
|
OCTDECIMAL := OCTDECX (M, N:= 47 - N, 0, 1) ; 00105100
|
|
END OCTDECIMAL ; 00105200
|
|
DEFINE OCTDEC (OCTDEC1) = OCTDECIMAL (OCTDEC1, M, 0)#, 00105300
|
|
OCTDEX (OCTDEX1) = OCTDECIMAL (OCTDEX1, M, 1)#, 00105400
|
|
FIRSTCHAR (FIRSTCHAR1) = OCTDECIMAL (0, FIRSTCHAR1, 2)#, 00105500
|
|
MMDDYY = OCTDECIMAL (TIME (5), M, 3)#, 00105600
|
|
DEC (DEC1, DEC2) = OCTDECIMAL (DEC2, DEC1, 4)#, 00105700
|
|
TWO (TWO1) = BOOLEAN (OCTDECIMAL (TWO1, M, 5))# ; 00105800
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00120500
|
|
DEFINE SEQUENCE = 00121000
|
|
IF ALGOLFILE THEN 00121500
|
|
IMAGE [9] := OCTDEC (IF N = FINITY THEN 99999999 ELSE N) 00122000
|
|
ELSE IF COBOLFILE THEN 00122500
|
|
BEGIN 00123000
|
|
IMAGE [0].[1:35] := OCTDEC (N) ; 00124000
|
|
IMAGE [9] := SUFFIX & "."[1:43:5] ; 00124500
|
|
END# ; 00125500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00126000
|
|
PROCEDURE STATIONFIX (STATION, I) ; 00126500
|
|
VALUE STATION, I ; 00126600
|
|
REAL STATION ; 00126700
|
|
INTEGER I ; 00126800
|
|
BEGIN 00126900
|
|
REAL X ; 00127000
|
|
IF I LEQ 4 THEN 00127100
|
|
X := STATUS (STATION, I) 00127200
|
|
ELSE IF I LEQ 6 THEN 00127300
|
|
RELEASE (STATION) 00127400
|
|
ELSE IF I LEQ 8 THEN 00127500
|
|
BEGIN 00127600
|
|
SEEK (TWXINPUT (STATION)) ; 00127625
|
|
X := STATUS (STATION, 0) ; 00127650
|
|
END 00127675
|
|
ELSE IF I = 9 THEN 00127700
|
|
BEGIN 00127800
|
|
WRITE (TWXOUTPUT (STATION), NOROOM) ; 00127900
|
|
RELEASE (STATION) ; 00128000
|
|
END 00128100
|
|
ELSE IF I = 10 THEN 00128200
|
|
BEGIN 00128300
|
|
IF BOOLEAN (STATUS (STATION, 0)).[30:1] OR 00128400
|
|
USERCODEI NEQ STATUS (STATION) THEN 00128500
|
|
ABNORMALEND := 1 ; 00128600
|
|
END ; 00128700
|
|
END STATIONFIX ; 00128800
|
|
DEFINE CHARGE (CHARGE1) = STATIONFIX (CHARGE1, 0)#, 00128900
|
|
FREEFILE (FREEFILE1) = STATIONFIX (FREEFILE1, 3)#, 00129000
|
|
UNFREEFILE (UNFREEFILE1) = STATIONFIX (UNFREEFILE1, 4)#, 00129100
|
|
FORGET (FORGET1) = STATIONFIX (FORGET1, 5)#, 00129200
|
|
DETACH = STATIONFIX (STATION, 6)#, 00129300
|
|
ATTACH = STATIONFIX (STATION, 7)#, 00129400
|
|
REATTACH = STATIONFIX (STATION, 8)#, 00129500
|
|
NOMOREROOM = STATIONFIX (STATION, 9)#, 00129600
|
|
CHECK (CHECK1) = STATIONFIX (CHECK1, 10)# ; 00129700
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00129800
|
|
PROCEDURE OUTPUT ; 00130000
|
|
BEGIN 00130200
|
|
STREAM PROCEDURE MOVE (S, D, W, C) ; VALUE W, C ; 00130400
|
|
BEGIN 00130600
|
|
SI := S ; 00130800
|
|
DI := D ; 00131000
|
|
DS := W WDS ; 00131200
|
|
DS := C CHR ; 00131400
|
|
END MOVE ; 00131600
|
|
INTEGER USER, 00131800
|
|
T, 00132200
|
|
SPOT ; 00132400
|
|
BOOLEAN X ; 00132600
|
|
LABEL FAKEOUT, 00132800
|
|
NEXT ; 00133000
|
|
DEFINE A = INPUT# ; 00133200
|
|
CHARGE (0) ; 00133400
|
|
TANKEDOUTPUT := FALSE ; 00133600
|
|
A [WDSPERBUFFER] := "~ " ; 00133800
|
|
FOR USER := 0 STEP 1 UNTIL BIGBIRD DO 00134000
|
|
BEGIN 00134200
|
|
IF COUNTI GEQ 0 THEN 00134600
|
|
BEGIN 00134800
|
|
IF TIMEI - TIMEX GTR 180 THEN 00135000
|
|
GO TO FAKEOUT ; 00135200
|
|
SPOT := HEADI ; 00135400
|
|
IF REAL ((X := BOOLEAN (STATUS (STATIONI, 0)).[22:9]) 00135600
|
|
AND BOOLEAN ("6A")) NEQ 0 THEN 00135800
|
|
BEGIN 00136000
|
|
IF X.[39:1] THEN % BUSY 00136200
|
|
BEGIN 00136400
|
|
T := 15 ; 00136600
|
|
GO TO FAKEOUT ; 00136800
|
|
END ; 00137000
|
|
IF REAL (X AND BOOLEAN (10)) NEQ 0 AND NOT X THEN 00137200
|
|
WRITE (TWXOUT, BROKEN) ; % CLEAR WRITE READY 00137400
|
|
IF SPOT GEQ 0 THEN 00137600
|
|
BEGIN 00137800
|
|
A [0] := FREEHEAD ; 00138000
|
|
WRITE (IO [TAILI], 1, A [*]) ; 00138200
|
|
FREEHEAD := SPOT ; 00138400
|
|
END ; 00138600
|
|
COUNTI := XDEX := -1 ; 00138800
|
|
TIMEI := 0 ; 00139000
|
|
BREAKI := 1 ; 00139200
|
|
MOREINPUT := FALSE ; 00139400
|
|
GO TO NEXT ; 00139600
|
|
END ; 00139800
|
|
IF SPOT GEQ 0 THEN 00140000
|
|
BEGIN 00140200
|
|
READ (IO [SPOT], 30, BUFF [*]) ; 00140400
|
|
MOVE (BUFF [BLOCK], A [1], 0, CHRSPERBUFFER) ; 00140600
|
|
WRITE (TWXOUT, WORDSPERBUFFER, A [*]) [FAKEOUT] ; 00140800
|
|
T := CHRSPERBUFFER ; 00141000
|
|
IF BLOCK := BLOCK + WDSPERBUFFER GEQ 29 THEN 00141200
|
|
BEGIN 00141400
|
|
BLOCK := 1 ; 00141600
|
|
A [0] := FREEHEAD ; 00141800
|
|
WRITE (IO [SPOT], 1, A [*]) ; 00142000
|
|
FREEHEAD := SPOT ; 00142200
|
|
HEADI := BUFF[0] ; 00142400
|
|
END ; 00142600
|
|
END ELSE 00142800
|
|
BEGIN 00143000
|
|
MOVE (BUFFER [1], A [1], 0, CHRSPERBUFFER) ; 00143200
|
|
WRITE (TWXOUT, WORDSPERBUFFER, A [*]) [FAKEOUT] ; 00143400
|
|
IF BLOC := BLOC - WDSPERBUFFER LSS 1 THEN 00143600
|
|
BEGIN 00143800
|
|
COUNTI := -1 ; 00144000
|
|
IF ABNORMALEND GEQ 2 THEN 00144200
|
|
ABNORMALEND := ABNORMALEND + 1 ; 00144400
|
|
GO TO NEXT ; 00144600
|
|
END ; 00144800
|
|
T := CHRSPERBUFFER ; 00145000
|
|
MOVE (BUFFER[WORDSPERBUFFER],BUFFER[1],29-WORDSPERBUFFER,0);00145200
|
|
END; 00145400
|
|
FAKEOUT: 00145600
|
|
IF TIMEI:=MAX(TIMEI,TIMEX)+T|6 LSS TN OR NOT OUTPUTREADY THEN 00145800
|
|
BEGIN 00146000
|
|
TN := TIMEI ; 00146200
|
|
TANKEDOUTPUT := TRUE ; 00146400
|
|
END ; 00146600
|
|
NEXT: 00146800
|
|
END ; 00147000
|
|
END ; 00147200
|
|
IF OUTPUTREADY THEN 00147400
|
|
NEXTCLOCK := CLOCK - T0 | (TN - TIMEX - 90) / 150 00147600
|
|
ELSE 00147800
|
|
NEXTCLOCK := -99 ; 00148000
|
|
CHARGE (STATION) ; 00148200
|
|
END OUTPUT ; 00148400
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00148600
|
|
PROCEDURE WRITETWX ; 00148800
|
|
BEGIN 00149200
|
|
INTEGER STREAM PROCEDURE COUNT (S) ; 00149400
|
|
BEGIN 00149600
|
|
SI := S ; 00149800
|
|
28 (IF SC = "~" THEN 00150000
|
|
JUMP OUT ; 00150200
|
|
TALLY := TALLY + 1 ; 00150400
|
|
SI := SI + 1) ; 00150600
|
|
S := SI ; 00150800
|
|
DI := S ; 00151000
|
|
DS := LIT "~" ; 00151200
|
|
COUNT := TALLY ; 00151400
|
|
END COUNT ; 00151600
|
|
STREAM PROCEDURE MOVE (S, D, SKPS, SKPD, N) ; 00151800
|
|
VALUE SKPS, SKPD, N ; 00152000
|
|
BEGIN 00152200
|
|
SI := S ; 00152400
|
|
DI := D ; 00152600
|
|
SI := SI + SKPS ; 00152800
|
|
DI := DI + SKPD ; 00153000
|
|
DS := N CHR ; 00153200
|
|
END MOVE ; 00153400
|
|
INTEGER C, J, K ; 00153600
|
|
DEFINE A = PRETANK# ; 00153700
|
|
LABEL NOSKIP, 00153800
|
|
SKIP ; 00154000
|
|
IF BOOLEAN (ILFCRI) THEN 00154200
|
|
BEGIN 00154400
|
|
ILFCRI := 0 ; 00154600
|
|
IF FIRSTCHAR (A [0]) = "{" THEN 00154800
|
|
J := 2 ; 00155000
|
|
END ; 00155200
|
|
IF C := COUNT (A) - J NEQ 0 AND NOT BOOLEAN (BREAKI) THEN 00155400
|
|
BEGIN 00155600
|
|
IF K := COUNTI LSS 0 THEN 00155800
|
|
BEGIN 00156000
|
|
BUFFER [4] := "~ " ; 00156200
|
|
MOVE (A [0], BUFFER [1], J, 0, 28); 00156400
|
|
IF TIMEI - TIMEX GEQ 180 THEN 00156600
|
|
GO TO NOSKIP ; 00156800
|
|
WRITE (TWXOUT, 5, BUFFER [*]) [NOSKIP : NOSKIP] ; 00157000
|
|
TIMEI := MAX (TIMEI, TIMEX) + C | 6 ; 00157200
|
|
GO TO SKIP ; 00157400
|
|
NOSKIP: 00157600
|
|
COUNTI := C ; 00157800
|
|
BLOCK := BLOC := 1; 00158000
|
|
HEADI := -1 ; 00158200
|
|
IF TIMEI LSS TN OR NOT OUTPUTREADY THEN 00158400
|
|
BEGIN 00158600
|
|
NEXTCLOCK := CLOCK - T0 | ((TN:=TIMEI)-TIMEX-120) / 150 ; 00158800
|
|
TANKEDOUTPUT := TRUE ; 00159000
|
|
END ; 00159200
|
|
GO TO SKIP ; 00159400
|
|
END ; 00159600
|
|
IF K LSS CHRSPERBUFFER THEN 00159800
|
|
BEGIN 00160000
|
|
MOVE (A, BUFFER [BLOC], J, K, CHRSPERBUFFER - K) ; 00160200
|
|
J := J + CHRSPERBUFFER - K ; 00160400
|
|
IF COUNTI := K := K + C LSS CHRSPERBUFFER THEN 00160600
|
|
GO TO SKIP ; 00160800
|
|
C := K - CHRSPERBUFFER ; 00161000
|
|
END ; 00161200
|
|
IF BLOC := BLOC + WDSPERBUFFER GEQ 29 THEN 00161400
|
|
BEGIN 00161600
|
|
BLOC := 1 ; 00161800
|
|
IF FREEHEAD NEQ MAXFREEHEAD THEN 00162000
|
|
BEGIN 00162200
|
|
READ (IO [FREEHEAD], 1, BUFFER [*]) ; 00162400
|
|
K := BUFFER [0] ; 00162600
|
|
END ELSE 00162800
|
|
K := MAXFREEHEAD := MAXFREEHEAD + 1 ; 00163000
|
|
BUFFER [0] := -1 ; 00163200
|
|
WRITE (IO [FREEHEAD], 30, BUFFER [*]) ; 00163400
|
|
IF HEADI GEQ 0 THEN 00163600
|
|
BEGIN 00163800
|
|
READ (IO [TAILI], 30, BUFFER [*]) ; 00164000
|
|
BUFFER [0] := FREEHEAD ; 00164200
|
|
WRITE (IO [TAILI], 30, BUFFER [*]) ; 00164400
|
|
END ELSE 00164600
|
|
HEADI := FREEHEAD ; 00164800
|
|
TAILI := FREEHEAD ; 00165000
|
|
FREEHEAD := K ; 00165200
|
|
END ; 00165400
|
|
MOVE (A, BUFFER [BLOC], J, 0, 29) ; 00165600
|
|
COUNTI := C ; 00165800
|
|
END ; 00166000
|
|
SKIP: 00166200
|
|
END WRITETWX ; 00166400
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00170000
|
|
DEFINE ITSOLD (ITSOLD1) = BOOLEAN (KOUNT (ITSOLD1, 0, 0))#, 00170010
|
|
LOC (LOC1) = KOUNT (LOC1, 1, 0)# ; 00170020
|
|
INTEGER PROCEDURE KOUNT (N, M, KK) ; 00170030
|
|
VALUE N, M, KK ; 00170040
|
|
INTEGER N, M, KK ; 00170050
|
|
BEGIN 00170060
|
|
INTEGER K ; 00170070
|
|
REAL L ; 00170080
|
|
WHILE N LSS (L := LL [AT]).S DO 00170090
|
|
AT := L.F ; 00170100
|
|
WHILE N GTR (L := LL [AT]).S DO 00170110
|
|
AT := L.T ; 00170120
|
|
IF KK NEQ 0 THEN 00170130
|
|
BEGIN 00170140
|
|
IF M = INFINITY THEN M := M - 1 ; 00170150
|
|
WHILE M GEQ (L := LL [AT]).S AND K := K + 1 NEQ KK DO 00170160
|
|
AT := L.T ; 00170170
|
|
KOUNT := K - REAL (M LSS L.S) ; 00170180
|
|
END ELSE 00170190
|
|
IF BOOLEAN (M) THEN 00170200
|
|
KOUNT := AT 00170210
|
|
ELSE 00170220
|
|
KOUNT := REAL (N = L.S) ; 00170230
|
|
END KOUNT ; 00170240
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00170500
|
|
DEFINE 00175000
|
|
WRITESEQUENCE = WRITEALINE (0)#, 00175100
|
|
WRITELFCR = WRITEALINE (1)#, 00175200
|
|
WRITESEQ = WRITEALINE (2)#, 00175300
|
|
WRITEQUEUED = WRITEALINE (5)#, 00175600
|
|
WRITESEGMENT = WRITEALINE (6)#, 00175700
|
|
WRITERELADDR = WRITEALINE (7)# ; 00175800
|
|
PROCEDURE WRITEALINE (K) ; 00175900
|
|
VALUE K ; 00176000
|
|
INTEGER K ; 00176100
|
|
BEGIN 00176200
|
|
STREAM PROCEDURE FORM (PRETANK, N, K, LFCR, COLON, F) ; 00176300
|
|
VALUE N, K, LFCR, COLON, F ; 00176400
|
|
BEGIN 00176500
|
|
LABEL EXIT ; 00176600
|
|
DI := PRETANK ; 00176700
|
|
LFCR (DS := 2 LIT "{!" ; 00176800
|
|
K (SI := LOC N ; 00176900
|
|
DS := K DEC ; 00177000
|
|
F (PRETANK := DI ; 00177100
|
|
DI := DI - K ; 00177200
|
|
DS := K FILL ; 00177300
|
|
DI := PRETANK) ; 00177400
|
|
JUMP OUT) ; 00177500
|
|
COLON (DS := LIT ":") ; 00177600
|
|
JUMP OUT TO EXIT) ; 00177700
|
|
COLON (SI := LOC N ; 00177800
|
|
F (DS := 7 LIT "QUEUED(" ; 00177900
|
|
DS := 2 DEC ; 00178000
|
|
DS := LIT ")" ; 00178100
|
|
JUMP OUT 2 TO EXIT) ; 00178200
|
|
K (DS := 9 LIT "REL ADDR=" ; 00178300
|
|
DS := 4 DEC ; 00178400
|
|
JUMP OUT 2 TO EXIT) ; 00178500
|
|
DS := 8 LIT "SEGMENT=" ; 00178600
|
|
DS := 4 DEC ; 00178700
|
|
JUMP OUT TO EXIT) ; 00178900
|
|
F (N (DS := LIT " ") ; JUMP OUT TO EXIT) ; 00179000
|
|
DS := LIT ">" ; 00179100
|
|
EXIT: 00179200
|
|
DS := LIT "~" ; 00179300
|
|
END FORM ; 00179400
|
|
DEFINE XON = FORM (PRETANK, 0, 0, 0, 0, 0)#, 00179500
|
|
TABIT = FORM (PRETANK, I, 0, 0, 0, 1)#, 00179600
|
|
LFCR = FORM (PRETANK, 0, 0, 1, 0, 0)#, 00179700
|
|
COLON = FORM (PRETANK, 0, 0, 1, 1, 0)#, 00179800
|
|
SEQ = FORM (PRETANK, IF N = INFINITY THEN 99999999 ELSE N, 00179900
|
|
IF COBOLFILE THEN 6 ELSE 8, 1, 00180000
|
|
IF COBOLFILE THEN 0 ELSE 1, 1)#, 00180100
|
|
OLDSEQ = FORM (PRETANK, IF N = INFINITY THEN 99999999 ELSE N, 00180200
|
|
IF COBOLFILE THEN 6 ELSE 8, 1, 00180300
|
|
IF COBOLFILE THEN 0 ELSE 1, 1-REAL(ITSOLD (N)))#, 00180400
|
|
QUEFORM = FORM (PRETANK, READYQTOP, 0, 0, 1, 1)#, 00180500
|
|
SEGMENT = FORM (PRETANK, PARAMETER2, 0, 0, 1, 0)#, 00180600
|
|
RELADDR = FORM (PRETANK, PARAMETER3, 1, 0, 1, 0)#, 00180700
|
|
TWX (TWX1) = BEGIN TWX1 ; WRITETWX ; END# ; 00180800
|
|
IF K = 0 THEN 00181000
|
|
BEGIN 00181100
|
|
IF FILEOPEN THEN 00181200
|
|
BEGIN 00181300
|
|
TWX (OLDSEQ) ; 00181400
|
|
IF INLINETOG AND EXTRALFCR THEN 00181500
|
|
TWX (LFCR) ; 00181600
|
|
IF TABON AND TABAMOUNT NEQ 0 THEN 00181700
|
|
BEGIN 00181800
|
|
IF I := TABAMOUNT GTR 27 THEN 00181900
|
|
BEGIN 00182000
|
|
I := I - 27 ; 00182100
|
|
TWX (TABIT) ; 00182200
|
|
I := 27 ; 00182300
|
|
END ; 00182400
|
|
TWX (TABIT) ; 00182500
|
|
END ; 00182600
|
|
END 00182700
|
|
ELSE 00182800
|
|
TWX (COLON) ; 00182900
|
|
IF XDEX LSS 0 AND NOT ERRTOG THEN 00183000
|
|
TWX (XON) 00183100
|
|
ELSE 00183200
|
|
ERRTOG := FALSE ; 00183300
|
|
END 00183400
|
|
ELSE IF K = 1 THEN 00183500
|
|
BEGIN 00183600
|
|
TWX (LFCR) ; 00183700
|
|
ILFCRI := 1 ; 00183800
|
|
END 00183900
|
|
ELSE 00184000
|
|
TWX (IF K=2 THEN SEQ ELSE IF K=5 THEN QUEFORM ELSE 00184100
|
|
IF K=6 THEN SEGMENT ELSE IF K=7 THEN RELADDR) ; 00184200
|
|
END WRITEALINE ; 00184300
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00190500
|
|
PROCEDURE WRITEROW (ROW, Q, F) ; 00191000
|
|
VALUE Q, 00191500
|
|
F ; 00192000
|
|
BOOLEAN Q ; 00192500
|
|
INTEGER F ; 00193000
|
|
ARRAY ROW [0] ; 00193500
|
|
BEGIN 00193600
|
|
STREAM PROCEDURE MOVE (S, D, SKPS, N) ; 00193700
|
|
VALUE SKPS, N ; 00193800
|
|
BEGIN 00193900
|
|
SI := S ; 00194000
|
|
DI := D ; 00194100
|
|
SI := SI + SKPS ; 00194200
|
|
DS := N CHR ; 00194300
|
|
END MOVE ; 00194400
|
|
STREAM PROCEDURE BLANKOUTSPECIALCHARACTERS (S, D, N, K) ; 00195000
|
|
VALUE N, 00195500
|
|
K ; 00195600
|
|
BEGIN 00196000
|
|
DI := LOC N ; DS := 6 LIT "!><}{~" ; 00197500
|
|
DI := D ; 00198000
|
|
DS := 8 LIT " " ; 00198500
|
|
SI := D ; 00199000
|
|
DS := 9 WDS ; 00199500
|
|
SI := S ; 00200000
|
|
DI := D ; 00200500
|
|
2 (K (IF SC = " " THEN 00201000
|
|
BEGIN 00201500
|
|
N (SI := SI - 1 ; 00202000
|
|
IF SC = " " THEN 00202500
|
|
DI := DI - 1 ; 00203000
|
|
SI := SI + 1) ; 00203500
|
|
DS := CHR ; 00204000
|
|
END ELSE 00204500
|
|
IF SC = ALPHA THEN 00205000
|
|
DS := CHR 00205500
|
|
ELSE 00206000
|
|
BEGIN 00206500
|
|
D := DI ; 00207000
|
|
DI := LOC N ; 00207500
|
|
6 (IF SC = DC THEN JUMP OUT ; SI := SI - 1) ; 00208000
|
|
DI := D ; 00208500
|
|
IF TOGGLE THEN 00209000
|
|
DS := 1 LIT "$" 00209500
|
|
ELSE 00210000
|
|
DS := CHR ; 00210500
|
|
END)) ; 00211000
|
|
END BLANKOUTSPECIALCHARACTERS ; 00219000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00219500
|
|
BOOLEAN STREAM PROCEDURE ALLBLANK (S, SKP, N) ; 00220000
|
|
VALUE SKP, 00220500
|
|
N ; 00221000
|
|
BEGIN 00221500
|
|
LABEL GRPMKIT ; 00222000
|
|
SI := S ; 00222500
|
|
SI := SI + SKP ; 00223000
|
|
SI := SI + N ; 00223500
|
|
N (SI := SI - 1 ; 00224000
|
|
IF SC NEQ " " THEN 00224500
|
|
JUMP OUT TO GRPMKIT) ; 00225000
|
|
TALLY := 1 ; 00225500
|
|
SI := SI - 1 ; 00226000
|
|
GRPMKIT: 00226500
|
|
SI := SI + 1 ; 00227000
|
|
N := SI ; 00227500
|
|
DI := N ; 00228000
|
|
DS := 1 LIT "~" ; 00228500
|
|
ALLBLANK := TALLY ; 00229000
|
|
END ALLBLANK ; 00229500
|
|
BOOLEAN DATUM ; 00229600
|
|
DEFINE FILEINFO = F# ; 00229700
|
|
INTEGER Z ; 00229800
|
|
BLANKOUTSPECIALCHARACTERS (ROW, INPUT, Q, HALFFULLLENGTH) ; 00230000
|
|
IF DATAFILE THEN 00230100
|
|
BEGIN 00230200
|
|
MOVE (INPUT [9], ZIPPY [15], 0, 8) ; 00230300
|
|
DATUM := NOT ALLBLANK (ZIPPY [15], 0, 8) ; 00230400
|
|
END ; 00230500
|
|
EXTRALFCR := NOT (COBOLFILE OR Q:=ALLBLANK (INPUT [Z:=7], 7, 9)) ;00231000
|
|
IF EXTRALFCR OR COBOLFILE THEN 00231500
|
|
WRITELFCR ; 00232000
|
|
IF Q THEN 00232500
|
|
IF Q := ALLBLANK (INPUT [7], 0, 7) THEN 00233000
|
|
IF Q := ALLBLANK (INPUT [Z:=3], 4, 28) THEN 00233500
|
|
Q := ALLBLANK (INPUT [Z:=0], 0, 28) ; 00234000
|
|
IF NOT Q THEN 00234500
|
|
FOR F := 0 STEP 3 UNTIL Z DO 00235000
|
|
BEGIN 00235500
|
|
MOVE (INPUT [F], PRETANK [0], 4 | F DIV 3, 28) ; 00236000
|
|
WRITETWX ; 00236500
|
|
END ; 00237000
|
|
IF DATUM THEN 00237050
|
|
BEGIN 00237100
|
|
WRITELFCR ; 00237200
|
|
MOVE (ZIPPY [15], PRETANK, 0, 9) ; 00237300
|
|
WRITETWX ; 00237400
|
|
END ; 00237450
|
|
WRITELFCR ; 00237460
|
|
END WRITEROW ; 00237500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00237510
|
|
PROCEDURE ERRORX (K, A, B) ; 00237512
|
|
VALUE K, 00237514
|
|
A, 00237516
|
|
B ; 00237518
|
|
INTEGER K ; 00237520
|
|
REAL A, 00237522
|
|
B ; 00237524
|
|
BEGIN 00237526
|
|
STREAM PROCEDURE CRUNCH (S, K, A, B) ; VALUE K, A, B ; 00237528
|
|
BEGIN 00237530
|
|
LABEL E0, E1, E2, E3, E4, E5, E6, FILENAME, CRUNCH, DEBLANK ; 00237532
|
|
SI := LOC A ; 00237534
|
|
SI := SI + 1 ; 00237536
|
|
DI := S ; 00237538
|
|
DS := 2 LIT "{!" ; 00237540
|
|
CI := CI + K ; 00237542
|
|
GO TO E0 ; 00237544
|
|
GO TO E1 ; 00237546
|
|
GO TO E2 ; 00237548
|
|
GO TO E3 ; 00237550
|
|
GO TO E4 ; 00237552
|
|
GO TO E5 ; 00237554
|
|
GO TO E6 ; 00237556
|
|
GO TO E0 ; 00237558
|
|
GO TO E0 ; 00237560
|
|
E1: 00237562
|
|
DS := 10 LIT "INV USER: " ; 00237564
|
|
GO TO E6 ; 00237566
|
|
E2: 00237568
|
|
DS := 2 LIT "NO" ; 00237570
|
|
GO TO FILENAME ; 00237572
|
|
E3: 00237574
|
|
DS := 3 LIT "BAD" ; 00237576
|
|
GO TO FILENAME ; 00237578
|
|
E5: 00237580
|
|
DS := 8 LIT "NO FILE " ; 00237582
|
|
E0: 00237584
|
|
DS := 7 CHR ; 00237586
|
|
SI := SI + 1 ; 00237588
|
|
DS := 7 CHR ; 00237590
|
|
GO TO CRUNCH ; 00237592
|
|
E4: 00237594
|
|
DS := 3 LIT "DUP" ; 00237596
|
|
FILENAME: 00237598
|
|
DS := 7 LIT " FILE: " ; 00237600
|
|
E6: 00237602
|
|
DS := 7 CHR ; 00237604
|
|
DS := LIT "/" ; 00237606
|
|
SI := SI + 1 ; 00237608
|
|
DS := 7 CHR ; 00237610
|
|
CRUNCH: 00237612
|
|
DS := LIT "~" ; 00237614
|
|
SI := S ; 00237616
|
|
DI := S ; 00237618
|
|
28 (IF SC = " " THEN 00237620
|
|
BEGIN 00237622
|
|
DEBLANK: 00237624
|
|
SI := SI + 1 ; 00237626
|
|
IF SC = " " THEN 00237628
|
|
GO TO DEBLANK ; 00237630
|
|
IF SC = ALPHA THEN 00237632
|
|
DS := 1 LIT " " ; 00237634
|
|
END ELSE 00237636
|
|
DS := CHR) ; 00237638
|
|
END CRUNCH ; 00237640
|
|
IF A = "#000000" THEN A := " " ; 00237642
|
|
IF B = "#000000" THEN B := " " ; 00237644
|
|
CRUNCH (PRETANK, K, A, B) ; 00237646
|
|
WRITETWX ; 00237648
|
|
IF K LEQ 6 THEN 00237650
|
|
BEGIN 00237652
|
|
ERRTOG := TRUE ; 00237654
|
|
MOREINPUT := FALSE ; 00237656
|
|
NOSTAR := FALSE ; 00237658
|
|
XDEX := -1 ; 00237660
|
|
END ELSE IF K = 8 THEN 00237662
|
|
ILFCRI := 1 ; 00237664
|
|
END ERRORX ; 00237666
|
|
DEFINE ERROR (ERROR1, ERROR2, ERROR3, ERROR4) = 00237668
|
|
BEGIN 00237670
|
|
ERRORX (ERROR2, ERROR3, ERROR4) ; 00237672
|
|
GO TO ERROR1 ; 00237674
|
|
END ERROR#, 00237676
|
|
SHOW (SHOW1, SHOW2) = ERRORX (8, SHOW1, SHOW2)# ; 00237678
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00237700
|
|
BOOLEAN PROCEDURE FILECHECK (B) ; 00237740
|
|
VALUE B ; 00237750
|
|
BOOLEAN B ; 00237760
|
|
BEGIN 00237770
|
|
LABEL NEXT ; 00237780
|
|
IF B THEN 00237790
|
|
BEGIN 00237800
|
|
IF FILECLOSED THEN 00237810
|
|
ERROR (NEXT, 5, " OPEN: ", PARAMETER0) ; 00237820
|
|
IF B.[46:1] AND READONLYFILE THEN 00237830
|
|
ERROR (NEXT, 0, "READ ON", "LY FILE") ; 00237840
|
|
END ELSE 00237850
|
|
IF FILEOPEN THEN 00237860
|
|
BEGIN 00237870
|
|
SEARCH (DISC, INPUT [*]) ; 00237880
|
|
IF INPUT [0] LSS FILEACCESS THEN 00237890
|
|
BEGIN 00237900
|
|
CHARGE (STATION) ; 00237905
|
|
CLOSE (DISC) ; 00237910
|
|
FILL DISC WITH PREFIX, SUFFIX ; 00237920
|
|
SEARCH (DISC, INPUT [*]) ; 00237930
|
|
IF INPUT [0] LSS FILEACCESS THEN 00237940
|
|
BEGIN 00237950
|
|
FILEACCESS := 0 ; 00237960
|
|
INORDER := TRUE ; 00237970
|
|
ERROR (NEXT, 1 + REAL (INPUT [0] LSS 0), PREFIX, SUFFIX) ; 00237980
|
|
END ; 00238000
|
|
END ; 00238010
|
|
END ; 00238020
|
|
IF FALSE THEN 00238030
|
|
NEXT: 00238040
|
|
FILECHECK := TRUE ; 00238050
|
|
END FILECHECK ; 00238060
|
|
DEFINE OPENCHECK = IF FILECHECK (TRUE) THEN GO TO NEXT#, 00238070
|
|
READONLYCHECK = IF FILECHECK (BOOLEAN (3)) THEN GO TO NEXT#, 00238080
|
|
SECURITYCHECK = IF FILECHECK (FALSE) THEN GO TO NEXT# ; 00238090
|
|
PROCEDURE STATE (S) ; 00238100
|
|
VALUE S ; 00238200
|
|
BOOLEAN S ; 00238300
|
|
BEGIN 00238400
|
|
STREAM PROCEDURE STUFFSTATE (N, RECORD, P0, C) ; 00238500
|
|
VALUE N ; 00238600
|
|
BEGIN 00239000
|
|
LABEL EXIT ; 00239100
|
|
N (DI := C ; 00239200
|
|
SI := P0 ; 00239300
|
|
DS := 25 WDS ; 00239400
|
|
SI := RECORD ; 00239600
|
|
DS := 10 WDS ; 00239700
|
|
JUMP OUT TO EXIT) ; 00240400
|
|
SI := C ; 00240500
|
|
DI := P0 ; 00240600
|
|
DS := 25 WDS ; 00240700
|
|
DI := RECORD ; 00240900
|
|
DS := 10 WDS ; 00241000
|
|
EXIT: 00241700
|
|
END STUFFSTATE ; 00246000
|
|
INTEGER I, K ; 00247500
|
|
CLOSE (DISC) ; 00248000
|
|
K := IF S.[46:1] THEN SLOTI ELSE 46 ; 00248500
|
|
IF S THEN 00248600
|
|
BEGIN 00248700
|
|
STUFFSTATE (1, RECORD, PARAMETER0, CONTROLS [38]) ; 00250000
|
|
WRITE (R1 [K], 90, CONTROLS [*]) ; 00250600
|
|
IF S.[46:1] AND FILEOPEN AND REAL (MODIFIED) NEQ 0 THEN 00251000
|
|
BEGIN 00251500
|
|
K := D.LEFTSIDE ; 00252000
|
|
FOR I := 0 STEP 1 UNTIL K DO 00252500
|
|
BEGIN 00253000
|
|
IF MODIFIED THEN 00253100
|
|
WRITE (R2 [32|SLOTI + I], 256, LINKLISTS [USER32+I, *]) ; 00253200
|
|
MODIFIED := MODIFIED.[16:31] ; 00253500
|
|
END ; 00254000
|
|
MODIFIED := FALSE ; 00254100
|
|
END ; 00254200
|
|
END SAVESTATE ELSE 00254500
|
|
BEGIN 00255500
|
|
READ (R1 [K], 90, CONTROLS [*]) ; 00256500
|
|
STUFFSTATE (0, RECORD, PARAMETER0, CONTROLS [38]) ; 00257500
|
|
FILL DISC WITH PREFIX, SUFFIX ; 00258500
|
|
IF S.[46:1] THEN 00259000
|
|
MODIFIED := FALSE ; 00259500
|
|
USER32 := USER | 32 ; 00260000
|
|
END RESTORESTATE ; 00260500
|
|
PREWHERE := -1 ; 00261000
|
|
END STATE ; 00262000
|
|
DEFINE SAVESTATE = STATE (BOOLEAN(3))#, 00262500
|
|
RESTORESTATE = STATE (BOOLEAN (2))#, 00263000
|
|
UNSWAPSTATE = STATE (FALSE)#, 00263500
|
|
SWAPSTATE = STATE (TRUE)# ; 00264000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00264500
|
|
DEFINE WAIT (WAIT1, WAIT2) = 00265000
|
|
BEGIN 00265100
|
|
IF NOT WAITING THEN 00265150
|
|
IF WAITX (WAIT1, WAIT2) THEN 00265200
|
|
GO TO NEXT ; 00265250
|
|
END# ; 00265300
|
|
BOOLEAN PROCEDURE WAITX (TOCKS, FORCED) ; 00265500
|
|
VALUE TOCKS, 00265600
|
|
FORCED ; 00265700
|
|
INTEGER TOCKS ; 00265800
|
|
BOOLEAN FORCED ; 00265900
|
|
BEGIN 00266000
|
|
DEFINE SEGMENT =# ; 00266100
|
|
IF TOCKS GEQ CLOCK OR FORCED THEN 00266200
|
|
IF Q THEN 00266300
|
|
BEGIN 00266400
|
|
READYQ [READYQTOP := READYQTOP + 1] := USER ; 00266500
|
|
INREADYQ := 1 ; 00266600
|
|
WRITEQUEUED ; 00266700
|
|
N := RESETN ; 00266900
|
|
IF NOTFIRSTINPUT THEN 00267000
|
|
SAVESTATE ; 00267100
|
|
STATION := 0 ; 00267200
|
|
WAITX := TRUE ; 00267300
|
|
END ELSE 00267400
|
|
BEGIN 00267500
|
|
IF FORCED.[46:1] THEN 00267600
|
|
BEGIN 00267700
|
|
WAITX := BOOLEAN (USER := READYQ [1]) ; 00267800
|
|
CHARGE (STATIONI) ; 00267900
|
|
INREADYQ := 0 ; 00268000
|
|
FOR I := 2 STEP 1 UNTIL READYQTOP DO 00268100
|
|
READYQ [I - 1] := READYQ [I] ; 00268200
|
|
READYQTOP := READYQTOP - 1 ; 00268300
|
|
RESTORESTATE ; 00268400
|
|
READ (IO [USER], 30, IMAGE [*]) ; 00268410
|
|
END ; 00268500
|
|
WRITE (PRETANK [*], WAITF ) ; 00268600
|
|
WRITETWX ; 00268700
|
|
WAITFLAG := TRUE ; 00268800
|
|
READYQ [0] := USER ; 00268900
|
|
END ; 00269300
|
|
END WAITX ; 00269400
|
|
DEFINE INTERRUPT (INTERRUPT1) = INTERUPT (INTERRUPT1, 0, 0)#, 00282000
|
|
INTERUPT (INTERUPT1, INTERUPT2, INTERUPT3) = 00282100
|
|
BEGIN 00282500
|
|
IF CLOCK := CLOCK - INTERUPT1 LEQ NEXTCLOCK THEN 00283000
|
|
OUTPUT ; 00283100
|
|
IF CLOCK LEQ 0 THEN 00283200
|
|
IF INTERRUPTS (INTERUPT2, INTERUPT3) THEN 00283500
|
|
GO TO NEXT ; 00284000
|
|
END# ; 00284500
|
|
BOOLEAN PROCEDURE INTERRUPTS (LIB, LOC) ; 00285000
|
|
VALUE LIB, LOC ; 00285100
|
|
INTEGER LIB, LOC ; 00285200
|
|
BEGIN 00285500
|
|
LABEL NEWBIRD, NONE, NEXT ; 00286000
|
|
T0 := CLOCK := MAX (50, T0 | 150 / (-T1 + T1 := TIMEX)) ; 00286500
|
|
IF WAITING THEN 00287000
|
|
BEGIN 00287500
|
|
INPUT [5] := 0 & "~"[1:43:5] ; 00288000
|
|
READ (TWXINPUT (0, 0), 8, INPUT [*]) [NONE] ; 00288500
|
|
QINPUT := TRUE ; 00289000
|
|
NEWBIRD: 00289500
|
|
SWAPSTATE ; 00290000
|
|
CLOSE (LIBRARY) ; 00290100
|
|
CHARGE (STATION := 0) ; 00290500
|
|
INREADYQ := 3 ; 00291000
|
|
Q := TRUE ; 00291500
|
|
PROGRAM ; 00292000
|
|
Q := FALSE ; 00292500
|
|
USER := READYQ [0] ; 00293000
|
|
CHARGE (STATIONI) ; 00295500
|
|
INREADYQ := 0 ; 00296000
|
|
UNSWAPSTATE ; 00296500
|
|
SECURITYCHECK ; 00297000
|
|
IF LIB NEQ 0 THEN 00297100
|
|
BEGIN 00297200
|
|
FILL LIBRARY WITH IF BOOLEAN (LIB) THEN PARAMETER1 ELSE PREFIX, 00297300
|
|
IF BOOLEAN (LIB) THEN PARAMETER2 ELSE SUFFIX ; 00297400
|
|
READ SEEK (LIBRARY [LOC]) ; 00297500
|
|
END ; 00297600
|
|
NONE: 00297700
|
|
IF RATTLEINDEX := RATTLEINDEX + 1 = 5 THEN 00298000
|
|
BEGIN 00298500
|
|
FOR TINK := 0 STEP 1 UNTIL READYQTOP DO 00299000
|
|
BEGIN 00299500
|
|
USER := READYQ [TINK] ; 00300000
|
|
IF COUNTI LSS 0 THEN 00300500
|
|
IF REAL (BOOLEAN (STATUS (STATIONI, 0)).[22:9] AND 00301000
|
|
BOOLEAN ("6C")) = 0 THEN 00301100
|
|
WRITE (TWXOUT, RATTLE) ; 00301500
|
|
END ; 00302000
|
|
USER := READYQ [RATTLEINDEX := 0] ; 00302500
|
|
CHARGE (STATION) ; 00302700
|
|
IF 2 | BIGBIRD + 2 LSS STATUS (ZIPPY [*]) THEN 00303000
|
|
GO TO NEWBIRD ; 00303500
|
|
IF FALSE THEN 00304000
|
|
NEXT: 00304500
|
|
INTERRUPTS := TRUE ; 00305000
|
|
END ; 00305500
|
|
END ; 00306000
|
|
CLOCK := T0 ; 00306100
|
|
T1 := TIMEX ; 00306200
|
|
IF OUTPUTREADY THEN 00306300
|
|
NEXTCLOCK := CLOCK - T0 | (TN - T1 - 90) / 150 ; 00306400
|
|
END INTERRUPTS ; 00307000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00318000
|
|
INTEGER PROCEDURE XFILE (P, S, FS) ; 00318100
|
|
VALUE P, S, FS ; 00318110
|
|
REAL P, S, FS ; 00318120
|
|
BEGIN 00318130
|
|
DEFINE SEGMENT = # ; 00318140
|
|
IF P = 12 THEN 00318150
|
|
BEGIN 00318160
|
|
IF NUM1 THEN 00318170
|
|
BEGIN 00318180
|
|
NUM1 := FALSE ; 00318190
|
|
P := PARAMETER1 := OCTDEC (PARAMETER1) ; 00318200
|
|
END ELSE 00318210
|
|
P := PARAMETER1 ; 00318220
|
|
IF NUM2 THEN 00318230
|
|
BEGIN 00318240
|
|
NUM2 := FALSE ; 00318250
|
|
S := PARAMETER2 := OCTDEC (PARAMETER2) ; 00318260
|
|
END ELSE 00318270
|
|
S := PARAMETER2 ; 00318280
|
|
END ; 00318290
|
|
FILL LIBRARY WITH P, S ; 00318300
|
|
SEARCH (LIBRARY, INPUT [*]) ; 00318310
|
|
IF XFILE := INPUT [0] LSS FS THEN 00318320
|
|
ERRORX (1 + REAL (INPUT [0] LSS 0), P, S) ; 00318330
|
|
END XFILE ; 00318350
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00318360
|
|
PROCEDURE READIN ; 00319000
|
|
BEGIN 00319100
|
|
BOOLEAN PROCEDURE MORE ; 00319210
|
|
BEGIN 00319220
|
|
LABEL NEXT, 00319230
|
|
EXIT ; 00319240
|
|
INTEGER STREAM PROCEDURE TRAILINGBLANKS (S, N) ; 00319250
|
|
VALUE N ; 00319260
|
|
BEGIN 00319270
|
|
LABEL DONE ; 00319280
|
|
SI := S ; 00319290
|
|
SI := SI + 7 ; 00319300
|
|
S := TALLY ; 00319310
|
|
DI := S ; 00319320
|
|
2 (N (IF SC NEQ " " THEN JUMP OUT 2 TO DONE ; 00319330
|
|
SI := SI - 1 ; 00319340
|
|
DI := DI + 8)) ; 00319350
|
|
DONE: 00319360
|
|
TRAILINGBLANKS := DI ; 00319370
|
|
END TRAILINGBLANKS ; 00319380
|
|
INTEGER XSUB ; 00319390
|
|
DEFINE FILEINFO = XFILETYPE# ; 00319400
|
|
IF FILEOPEN THEN 00319410
|
|
BEGIN 00319420
|
|
IF N GTR FINITY THEN 00319430
|
|
IF N := LL [LAST.F].S + INC GTR FINITY THEN 00319440
|
|
BEGIN 00319450
|
|
N := FINITY ; 00319460
|
|
ERROR (NEXT, 0, "SEQ. OV", "ER-FLOW") ; 00319470
|
|
END ; 00319480
|
|
IF N LEQ 0 THEN 00319490
|
|
N := 1 ; 00319500
|
|
END ; 00319510
|
|
IF MOREINPUT THEN 00319520
|
|
BEGIN 00319530
|
|
READ (IO [USER + MAXUSERS], 30, IMAGE [*]) ; 00319540
|
|
CHRS := NCHRS ; 00319545
|
|
GO TO EXIT ; 00319550
|
|
END ; 00319560
|
|
IF XDEX LSS 0 THEN 00319570
|
|
BEGIN 00319580
|
|
NEXT: 00319590
|
|
IF NOT NOSTAR THEN 00319600
|
|
WRITESEQUENCE ; 00319610
|
|
CHRS := 0 ; 00319620
|
|
SAVESTATE ; 00319630
|
|
END ELSE 00319640
|
|
BEGIN 00319650
|
|
XSUB := XDEX | 13 ; 00319660
|
|
WHILE XN := XN + 1 GTR XLAST DO 00319670
|
|
IF XREPEAT := XREPEAT - 1 GTR 0 THEN 00319680
|
|
XN := XSTART 00319690
|
|
ELSE 00319700
|
|
BEGIN 00319710
|
|
IF XSUFFIX = "#MACRO#" THEN 00319720
|
|
BEGIN 00319730
|
|
IF XFILE (XPREFIX, XSUFFIX, 7) LSS 7 THEN 00319740
|
|
GO TO NEXT ; 00319750
|
|
READ (LIBRARY) ; 00319760
|
|
DETACH ; 00319770
|
|
CLOSE (LIBRARY, PURGE) ; 00319780
|
|
REATTACH ; 00319790
|
|
END ; 00319800
|
|
IF BOOLEAN (XNCHRS.[1:1]) THEN 00319810
|
|
BEGIN 00319820
|
|
READ (IO [2|MAXUSERS+XMAX|USER+XDEX], 30, IMAGE [*]) ; 00319830
|
|
CHRS := ABS (XNCHRS) ; 00319840
|
|
XDEX := XDEX - 1 ; 00319850
|
|
GO TO EXIT ; 00319860
|
|
END ; 00319870
|
|
IF XDEX := XDEX - 1 LSS 0 THEN 00319880
|
|
GO TO NEXT ; 00319890
|
|
XSUB := XDEX | 13 ; 00319900
|
|
END ; 00319910
|
|
IF XFILE (XPREFIX, XSUFFIX, 2) LSS 2 THEN 00319920
|
|
GO TO NEXT ; 00319930
|
|
IF XECHO THEN 00319940
|
|
WRITESEQUENCE ; 00319950
|
|
SAVESTATE ; 00319960
|
|
INTERRUPT (3) ; 00319970
|
|
READ (LIBRARY [XN - 1], 10, IMAGE [*]) ; 00319980
|
|
CLOSE (LIBRARY) ; 00319990
|
|
CHRS := (I := FULLLENGTH) - 00320000
|
|
TRAILINGBLANKS (IMAGE [I.[41:4]-1], I.[41:6]) ; 00320010
|
|
IF XECHO THEN 00320020
|
|
WRITEROW (IMAGE [*], FALSE, XFILETYPE) ; 00320030
|
|
EXIT: 00320040
|
|
MORE := TRUE ; 00320050
|
|
END ; 00320060
|
|
END MORE ; 00320070
|
|
BOOLEAN STREAM PROCEDURE LINEEDIT (S, D, C, CHRS, P, OVER80, EIGHTY1) ;00321000
|
|
VALUE C, 00321100
|
|
P, 00321200
|
|
OVER80, 00321300
|
|
EIGHTY1 ; 00321400
|
|
BEGIN 00321500
|
|
LOCAL T, 00321600
|
|
PERCENT1, PERCENT ; 00321700
|
|
LABEL AROUND, NEXT ; 00321800
|
|
P (DI := LOC PERCENT ; DS := 14 LIT "%?-~=!(<)>[{]}") ; 00321900
|
|
SI := LOC C ; 00322000
|
|
DI := LOC T ; 00322100
|
|
SI := SI + 6 ; 00322200
|
|
DI := DI + 7 ; 00322300
|
|
DS := CHR ; 00322400
|
|
SI := S ; 00322500
|
|
DI := D ; 00322600
|
|
T (DI := DI + 32 ; DI := DI + 32) ; 00322700
|
|
DI := DI + C ; 00322800
|
|
56(IF SC = "~" THEN 00322900
|
|
GO TO AROUND ; 00323000
|
|
IF SC = "}" THEN% DISCONNECT OR EXCLAMATION 00323010
|
|
BEGIN 00323020
|
|
TALLY := 1 ; 00323030
|
|
GO TO AROUND ; 00323040
|
|
END ; 00323050
|
|
IF SC = "!" THEN% LINE ERASE 00323100
|
|
BEGIN 00323200
|
|
C := TALLY ; 00323300
|
|
OVER80 := TALLY ; 00323400
|
|
DI := D ; 00323500
|
|
GO TO AROUND ; 00323600
|
|
END ; 00323700
|
|
IF SC = "{" THEN% BACKSPACE 00323800
|
|
BEGIN 00323900
|
|
S := SI ; 00324000
|
|
T := DI ; 00324100
|
|
SI := LOC C ; 00324200
|
|
DI := LOC LINEEDIT ; 00324300
|
|
IF 8 SC NEQ DC THEN 00324400
|
|
BEGIN 00324500
|
|
OVER80 (SI := SI - 8 ; 00324600
|
|
DI := LOC EIGHTY1 ; 00324700
|
|
IF 8 SC = DC THEN 00324800
|
|
OVER80 := TALLY) ; 00324900
|
|
SI := C ; 00325000
|
|
SI := SI - 8 ; 00325100
|
|
C := SI ; 00325200
|
|
DI := T ; 00325300
|
|
DI := DI - 1 ; 00325400
|
|
END ELSE 00325500
|
|
DI := T ; 00325600
|
|
SI := S ; 00325700
|
|
AROUND: 00325800
|
|
END ELSE 00325900
|
|
BEGIN 00326500
|
|
S := SI ; 00326600
|
|
OVER80 (DI := DI + 1 ; 00326700
|
|
SI := C ; 00326900
|
|
SI := SI + 8 ; 00327000
|
|
C := SI ; 00327100
|
|
SI := S ; 00327200
|
|
JUMP OUT TO AROUND) ; 00327300
|
|
T := DI ; 00327500
|
|
P (DI := S ; 00327600
|
|
SI := T ; 00327700
|
|
SI := SI - 1 ; 00327800
|
|
IF SC = "%" THEN 00327900
|
|
BEGIN 00328000
|
|
SI := LOC PERCENT ; 00328100
|
|
7 (IF SC = DC THEN 00328200
|
|
BEGIN 00328300
|
|
DI := T ; 00328400
|
|
DI := DI - 1 ; 00328500
|
|
DS := CHR ; 00328600
|
|
SI := S ; 00328700
|
|
JUMP OUT 2 TO AROUND ; 00328900
|
|
END ; 00329000
|
|
SI := SI + 1 ; 00329100
|
|
DI := DI - 1) ; 00329200
|
|
END) ; 00329300
|
|
SI := C ; 00330600
|
|
SI := SI + 8 ; 00330700
|
|
C := SI ; 00330800
|
|
SI := LOC C ; 00330900
|
|
DI := LOC EIGHTY1 ; 00331000
|
|
IF 8 SC = DC THEN 00331100
|
|
BEGIN 00331200
|
|
TALLY := 1 ; 00331300
|
|
OVER80 := TALLY ; 00331400
|
|
TALLY := 0 ; 00331500
|
|
END ; 00331600
|
|
SI := S ; 00331700
|
|
DI := T ; 00331800
|
|
IF TOGGLE THEN 00331900
|
|
DI := DI + 1 00332000
|
|
ELSE BEGIN 00332100
|
|
DS := CHR ; 00332200
|
|
SI := SI - 1 ; 00332300
|
|
END ; 00332400
|
|
GO TO NEXT ; 00332500
|
|
END ; 00332550
|
|
IF SC = "~" THEN JUMP OUT ; 00332560
|
|
IF SC = "}" THEN JUMP OUT ; 00332570
|
|
NEXT: 00332580
|
|
SI := SI + 1) ; 00332600
|
|
SI := LOC C ; 00332700
|
|
DI := CHRS ; 00332800
|
|
DS := WDS ; 00332900
|
|
LINEEDIT := TALLY ; 00333100
|
|
END LINEEDIT ; 00333200
|
|
BOOLEAN PROCEDURE FINALANALYSIS ; 00333210
|
|
BEGIN 00333220
|
|
STREAM PROCEDURE MOVE (S, D, SKPS, SKPD, N) ; 00333230
|
|
VALUE SKPS, SKPD, N ; 00333240
|
|
BEGIN 00333250
|
|
LOCAL T ; 00333260
|
|
SI := LOC N ; 00333270
|
|
DI := LOC T ; 00333280
|
|
SI := SI + 6 ; 00333290
|
|
DI := DI + 7 ; 00333300
|
|
DS := CHR ; 00333310
|
|
SI := S ; 00333320
|
|
DI := D ; 00333330
|
|
SI := SI + SKPS ; 00333340
|
|
DI := DI + SKPD ; 00333350
|
|
T (DS := 32 CHR ; DS := 32 CHR) ; 00333360
|
|
DS := N CHR ; 00333370
|
|
END MOVE ; 00333380
|
|
INTEGER STREAM PROCEDURE HUNT (S, D, C, N) ; 00333390
|
|
VALUE C, 00333400
|
|
N ; 00333500
|
|
BEGIN 00333600
|
|
LABEL AGAIN, 00333700
|
|
XIT ; 00333800
|
|
SI := D ; 00333900
|
|
DI := D ; 00334000
|
|
DS := 8 LIT " " ; 00334100
|
|
DS := 9 WDS ; 00334200
|
|
D := TALLY ; 00334300
|
|
DI := LOC D ; 00334400
|
|
SI := LOC C ; 00334500
|
|
SI := SI + 7 ; 00334600
|
|
DS := CHR ; 00334700
|
|
AGAIN: 00334800
|
|
SI := LOC N ; 00334900
|
|
SI := SI + 1 ; 00335000
|
|
IF 7 SC = DC THEN 00335100
|
|
GO TO XIT ; 00335200
|
|
SI := N ; 00335300
|
|
SI := SI - 8 ; 00335400
|
|
N := SI ; 00335500
|
|
SI := S ; 00335600
|
|
DI := LOC D ; 00335700
|
|
IF SC = DC THEN 00335800
|
|
GO TO XIT ; 00335900
|
|
S := SI ; 00336000
|
|
SI := HUNT ; 00336100
|
|
SI := SI + 8 ; 00336200
|
|
HUNT := SI ; 00336300
|
|
GO TO AGAIN ; 00336400
|
|
XIT: 00336500
|
|
END HUNT ; 00336600
|
|
BOOLEAN STREAM PROCEDURE MORE (IMAGE, INPUT, C, CHRS) ; 00344000
|
|
VALUE C ; 00344010
|
|
BEGIN 00344500
|
|
LOCAL QUOTES, 00345000
|
|
ENDQUOTE, 00345500
|
|
ZERO, 00345510
|
|
TEMP ; 00346000
|
|
LABEL NOTHINGYET, 00346500
|
|
BUMP, 00347000
|
|
FOUNDQUOTE, 00347500
|
|
FOUNDSEMICOLAN, 00348000
|
|
LOOP, 00348500
|
|
XIT, 00349000
|
|
EXIT ; 00349100
|
|
SI := IMAGE ; 00349500
|
|
DI := LOC QUOTES ; 00350000
|
|
DS := 2 LIT """ ; 00350500
|
|
DS := 6 LIT "..()[]" ; 00351000
|
|
DI := LOC ENDQUOTE ; 00351100
|
|
DS := 2 LIT ";;" ; 00351200
|
|
LOOP: 00351300
|
|
IMAGE := SI ; 00351310
|
|
SI := LOC C ; 00351330
|
|
DI := LOC ZERO ; 00351340
|
|
IF 8 SC = DC THEN 00351350
|
|
GO TO XIT ; 00351360
|
|
SI := C ; 00351370
|
|
SI := SI - 8 ; 00351380
|
|
C := SI ; 00351390
|
|
SI := IMAGE ; 00351400
|
|
CI := CI + MORE ; 00351500
|
|
GO TO NOTHINGYET ; 00352000
|
|
GO TO LOOP ; 00352500
|
|
GO TO FOUNDQUOTE ; 00353000
|
|
NOTHINGYET: 00353500
|
|
IF SC = ALPHA THEN 00354000
|
|
GO TO BUMP ; 00354500
|
|
IF SC = " " THEN 00355000
|
|
GO TO BUMP ; 00355500
|
|
DI := LOC QUOTES ; 00356000
|
|
4 (IF SC = DC THEN 00356500
|
|
BEGIN 00359000
|
|
TEMP := SI ; 00359500
|
|
ENDQUOTE := DI ; 00360000
|
|
DI := LOC ENDQUOTE ; 00360500
|
|
SI := ENDQUOTE ; 00361000
|
|
DS := 1 CHR ; 00361500
|
|
TALLY := 2 ; 00362000
|
|
MORE := TALLY ; 00362500
|
|
SI := TEMP ; 00363000
|
|
JUMP OUT TO LOOP ; 00363500
|
|
END ; 00364000
|
|
SI := SI - 1 ; 00364100
|
|
DI := DI + 1) ; 00364200
|
|
IF SC = ";" THEN 00365500
|
|
GO TO FOUNDSEMICOLAN ; 00369000
|
|
BUMP: 00371500
|
|
SI := SI + 1 ; 00372000
|
|
GO TO LOOP ; 00372500
|
|
FOUNDQUOTE: 00374500
|
|
DI := LOC ENDQUOTE ; 00375000
|
|
IF SC = DC THEN 00375500
|
|
BEGIN 00376000
|
|
DI := DI - 1 ; 00376100
|
|
DS := LIT ";" ; 00376200
|
|
TALLY := 0 ; 00376500
|
|
MORE := TALLY ; 00377000
|
|
END ; 00377500
|
|
GO TO LOOP ; 00378000
|
|
XIT: 00378500
|
|
SI := LOC ENDQUOTE ; 00378600
|
|
DI := IMAGE ; 00378700
|
|
DS := 2 CHR ; 00378800
|
|
GO TO EXIT ; 00378900
|
|
FOUNDSEMICOLAN: 00378910
|
|
TALLY := 1 ; 00378920
|
|
MORE := TALLY ; 00378930
|
|
SI := LOC C ; 00378940
|
|
DI := CHRS ; 00378950
|
|
DS := WDS ; 00378960
|
|
SI := LOC C ; 00378970
|
|
DI := LOC TEMP ; 00378980
|
|
SI := SI + 6 ; 00378990
|
|
DI := DI + 7 ; 00379000
|
|
DS := CHR ; 00379010
|
|
SI := IMAGE ; 00379020
|
|
SI := SI + 1 ; 00379030
|
|
DI := INPUT ; 00379040
|
|
TEMP (DS := 32 CHR ; DS := 32 CHR) ; 00379050
|
|
DS := C CHR ; 00379060
|
|
EXIT: 00379070
|
|
END MORE ; 00379500
|
|
INTEGER STREAM PROCEDURE FIX (IM, TAB, C, Z, P, Q) ; 00380000
|
|
VALUE TAB, 00380500
|
|
C, 00381000
|
|
P, 00381100
|
|
Q ; 00381200
|
|
BEGIN 00381500
|
|
LOCAL T ; 00382000
|
|
P (SI := IM ; 00382100
|
|
IF SC = "%" THEN 00382110
|
|
BEGIN 00382120
|
|
SI := SI + 1 ; 00382130
|
|
IF SC = "*" THEN 00382140
|
|
BEGIN 00382150
|
|
SI := C ; 00382180
|
|
SI := SI - 8 ; 00382190
|
|
C := SI ; 00382200
|
|
TALLY := 1 ; 00382210
|
|
FIX := TALLY ; 00382220
|
|
END ; 00382230
|
|
END) ; 00382240
|
|
SI := Z ; 00382500
|
|
DI := Z ; 00383000
|
|
DS := 8 LIT " " ; 00383500
|
|
DS := 9 WDS ; 00384000
|
|
SI := LOC C ; 00384100
|
|
DI := LOC T ; 00384200
|
|
SI := SI + 6 ; 00384300
|
|
DI := DI + 7 ; 00384400
|
|
DS := CHR ; 00384500
|
|
SI := IM ; 00384600
|
|
SI := SI + FIX ; 00384650
|
|
DI := Z ; 00384700
|
|
DI := DI + TAB ; 00384800
|
|
T (DS := 32 CHR ; DS := 32 CHR) ; 00384900
|
|
DS := C CHR ; 00385000
|
|
SI := Z ; 00389000
|
|
DI := IM ; 00389500
|
|
DS := 10 WDS ; 00390000
|
|
Q (DI := IM ; DS := 1 LIT "0") ; 00390100
|
|
END FIX ; 00390500
|
|
INTEGER C, 00390505
|
|
H, 00390508
|
|
K ; 00390510
|
|
LABEL ERR, NEXT ; 00390520
|
|
NOSTAR := (FIRSTCHAR (IMAGE [0]) NEQ "*" OR H := CHRS = 0) 00390540
|
|
AND READWRITEFILE ; 00390550
|
|
NOTFIRSTINPUT := MOREINPUT ; 00390560
|
|
IF NOSTAR THEN 00390570
|
|
BEGIN 00390580
|
|
I := IF COBOLFILE THEN 6 ELSE 0 ; 00390590
|
|
IF XDEX GEQ 0 THEN IF BOOLEAN (XFILETYPE) THEN I := 0 ; 00390595
|
|
MOREINPUT := FALSE ; 00390600
|
|
IF H + TABAMOUNT GTR LENGTH THEN 00390610
|
|
GO TO ERR ; 00390630
|
|
H := H + TABAMOUNT + I - FIX (IMAGE, TABAMOUNT + I, H, 00390640
|
|
ZIPPY, TRANSLATING AND H GEQ 2, I = 6) ; 00390650
|
|
IF COLUMNS THEN 00390660
|
|
BEGIN 00390670
|
|
FOR K := 1 STEP 1 UNTIL COLSTOPS DO 00390680
|
|
IF I := MIN (H, MAXCOLSTOP) NEQ 00390690
|
|
C := HUNT (IMAGE, ZIPPY, CHARACTER, I) THEN 00390700
|
|
BEGIN 00390710
|
|
WHILE C GEQ I := COLSTOP [K] DO 00390720
|
|
K := K + 1 ; 00390730
|
|
I := I - 1 ; 00390760
|
|
MOVE (IMAGE, ZIPPY, 0, 0, C) ; 00390770
|
|
IF H := H + I - (C := C + 1) GTR FULLLENGTH THEN 00390780
|
|
BEGIN 00390785
|
|
ERR: 00390790
|
|
FINALANALYSIS := TRUE ; 00390795
|
|
ERROR (NEXT, 0, "INPUT ", "OVERFLW") ; 00390800
|
|
END ; 00390805
|
|
MOVE (IMAGE [C.[41:4]], ZIPPY [I.[41:4]], C.[45:3], 00390810
|
|
I.[45:3], H - I) ; 00390820
|
|
MOVE (ZIPPY, IMAGE, 0, 0, 80) ; 00390840
|
|
END ELSE 00390850
|
|
K := 5 ; 00390860
|
|
END ; 00390870
|
|
CHRS := H ; 00390875
|
|
IF XDEX LSS 0 AND NOT INLINETOG AND N := N+INC LSS INFINITY THEN00390880
|
|
WRITESEQUENCE ; 00390910
|
|
N := N - INC ; 00390920
|
|
END 00391110
|
|
ELSE 00391120
|
|
BEGIN 00391130
|
|
IF H GTR 240 THEN 00391140
|
|
GO TO ERR ; 00391150
|
|
INLINETOG := FALSE ; 00391160
|
|
MOREINPUT := MORE (IMAGE, ZIPPY, H, NCHRS) ; 00391170
|
|
IF MOREINPUT THEN 00391175
|
|
WRITE (IO [USER + MAXUSERS], 30, ZIPPY [*]) ; 00391180
|
|
END ; 00391190
|
|
NEXT: 00391210
|
|
END FINALANALYSIS ; 00391230
|
|
INTEGER C, 00391240
|
|
LASTUSER ; 00391250
|
|
REAL X ; 00391260
|
|
LABEL AGAIN, 00392000
|
|
INPUTFULL, 00392500
|
|
EXIT, 00394500
|
|
NEXT, 00394600
|
|
ESCAPE ; 00394700
|
|
INTEGER PROCEDURE READTWX ; 00394800
|
|
BEGIN 00394900
|
|
LABEL NONE, TROUBLE, EXIT ; 00395000
|
|
REAL TIMEOUT, X ; 00395100
|
|
INPUT [5] := 0 & "~"[1:43:5] ; 00395200
|
|
IF NOT Q THEN 00395300
|
|
TIMEOUT := IF OUTPUTREADY THEN MAX(0,MIN(15,(TN-TIMEX-60)/60)) 00395400
|
|
ELSE 15 ; 00395500
|
|
READ (TWXINPUT (0, TIMEOUT), 8, INPUT [*]) [NONE:TROUBLE] ; 00395600
|
|
GO TO EXIT ; 00395700
|
|
NONE: 00395800
|
|
IF Q THEN 00395900
|
|
BEGIN 00396000
|
|
USER := MAXUSERS ; 00396100
|
|
READTWX := 1 ; % ESCAPE 00396200
|
|
GO TO EXIT ; 00396300
|
|
END ; 00396400
|
|
IF OUTPUTREADY THEN 00396500
|
|
OUTPUT ; 00396600
|
|
T1 := TIMEX ; 00396700
|
|
FOR USER := 0 STEP 1 UNTIL BIGBIRD DO 00396800
|
|
BEGIN 00396900
|
|
CHECK (STATIONI) ; 00397100
|
|
IF BOOLEAN (ABNORMALEND) THEN 00397200
|
|
BEGIN 00397300
|
|
READTWX := 1 ; 00397400
|
|
GO TO EXIT ; 00397500
|
|
END ; 00397600
|
|
IF X := (T1 - TIMEI)/1000 LSS 0 THEN 00397700
|
|
X := X + 5184 ; 00397800
|
|
IF X GTR 15 AND X LSS 100 THEN 00397900
|
|
BEGIN 00398000
|
|
IF X LSS 18 THEN 00398100
|
|
FIRSTCHANCE := 0 00398200
|
|
ELSE IF X GEQ 36 THEN 00398300
|
|
BEGIN 00398400
|
|
WRITE (PRETANK [*], EOJ) ; 00398500
|
|
WRITETWX ; 00398600
|
|
ABNORMALEND := READTWX := 1 ; 00398700
|
|
GO TO EXIT ; 00398800
|
|
END ELSE IF FIRSTCHANCE = 0 THEN 00398900
|
|
BEGIN 00399000
|
|
FIRSTCHANCE := 1 ; 00399100
|
|
X := TIMEI ; 00399200
|
|
ERRORX (7, "LOOK ", "ALIVE. ") ; 00399300
|
|
TIMEI := X ; 00399400
|
|
END ; 00399500
|
|
END ; 00399600
|
|
END ; 00399700
|
|
READTWX := 2 ; % AGAIN 00399800
|
|
GO TO EXIT ; 00399900
|
|
TROUBLE: 00400000
|
|
READ (TWXINPUT (0, 0), 1, INPUT [*]) ; 00400100
|
|
INPUT [1] := "}" ; 00400200
|
|
EXIT: 00400300
|
|
END READTWX ; 00400400
|
|
PROCEDURE INITIALIZE ; 00406000
|
|
BEGIN 00407000
|
|
MONITOR INTOVR, FLAG ; 00407500
|
|
INTEGER I, 00408000
|
|
C ; 00408100
|
|
REAL U ; 00408200
|
|
BOOLEAN OLDUSER ; 00408500
|
|
DEFINE DIRCTRY = CONTROLS# ; 00408600
|
|
LABEL OLD, 00409000
|
|
FAULT, 00409500
|
|
NEW, 00410000
|
|
MAILCALL, 00410500
|
|
NEXT ; 00410600
|
|
USER := BIGBIRD := BIGBIRD + 1 ; 00420000
|
|
ATTACH ; 00421000
|
|
STATIONI := STATION ; 00421500
|
|
IF USERCODEI := USERCODE = -1 THEN 00422500
|
|
USERCODE := OCTDEX (100|STATION.[9:4]+STATION.[14:4]) ; 00423000
|
|
COUNTI := -1 ; 00426000
|
|
ILFCRI := 1 ; 00426100
|
|
ERRORX (7, "VERSION", OCTDEX (VERSION)) ; 00427900
|
|
FAULT: 00427910
|
|
READ (R1 [45], 90, DIRCTRY [*]) ; 00427920
|
|
IF OLDUSER THEN 00427930
|
|
BEGIN 00427940
|
|
OLDUSER := FALSE ; 00427950
|
|
I := C + C ; 00427960
|
|
ERROR (OLD, 0, "BACKUP ", "ERROR. ") ; 00427970
|
|
END ; 00427980
|
|
C := 200 ; 00428000
|
|
FOR I := 0 STEP 2 WHILE U := DIRCTRY [I] NEQ 12 DO 00428100
|
|
IF USERCODE = U THEN 00428200
|
|
BEGIN 00428300
|
|
OLDUSER := TRUE ; 00428400
|
|
IF STATION = DIRCTRY [I + 1] THEN 00428500
|
|
GO TO OLD ; 00428600
|
|
C := I ; 00428700
|
|
END ELSE 00428800
|
|
IF U = 0 AND NOT OLDUSER THEN 00428900
|
|
C := I ; 00429000
|
|
IF C NEQ 200 THEN 00429100
|
|
I := C 00429300
|
|
ELSE IF I LEQ 88 THEN 00432500
|
|
DIRCTRY [I + 2] := 12 00433500
|
|
ELSE 00434500
|
|
WHILE DIRCTRY [I := I - 2] LSS 0 DO ; 00435000
|
|
OLD: 00436500
|
|
C := SLOTI := I / 2 ; 00437000
|
|
DIRCTRY [I] := - USERCODE ; 00437500
|
|
DIRCTRY [I + 1] := STATION ; 00438000
|
|
WRITE (R1 [45], 90, DIRCTRY [*]) ; 00438500
|
|
IF NOT OLDUSER THEN 00438600
|
|
GO TO NEW ; 00438700
|
|
INTOVR := FAULT ; 00439500
|
|
FLAG := FAULT ; 00440500
|
|
RESTORESTATE ; 00441000
|
|
STATION := STATIONI ; 00441500
|
|
IF VN LSS 94 OR VN GTR VERSION THEN 00441800
|
|
GO TO FAULT ; 00441900
|
|
IF FILECLOSED THEN 00443000
|
|
GO TO MAILCALL ; 00444500
|
|
IF D GTR MAXFILELENGTH THEN 00445100
|
|
GO TO FAULT ; 00445200
|
|
READ SEEK (R2 [32 | C]) ; 00445300
|
|
SECURITYCHECK ; 00447000
|
|
IF INPUT [5] + 2 LSS D OR INPUT [3] NEQ 10 THEN 00450000
|
|
ERROR (MAILCALL, 3, PREFIX, SUFFIX) ; 00452500
|
|
AT := D.LEFTSIDE ; 00453000
|
|
FOR I := 0 STEP 1 UNTIL AT DO 00453100
|
|
READ (R2, 256, LINKLISTS [USER32 + I, *]) [FAULT] ; 00453200
|
|
AT := 0 ; 00453500
|
|
FOR I := 1 STEP 1 UNTIL D DO 00454000
|
|
BEGIN 00454100
|
|
IF AT NEQ LL [AT := LL [AT] . T] . F THEN 00454400
|
|
I := D 00454500
|
|
ELSE IF AT = 1 THEN 00454600
|
|
ERROR (NEXT, 6, PREFIX, SUFFIX) ; 00455000
|
|
END ; 00455100
|
|
ERROR (MAILCALL, 7, "LINKLIS", "T ERROR") ; 00456500
|
|
NEW: 00458500
|
|
WRITE (R2 [32 | C + 31], 1, IMAGE [*]) ; 00459000
|
|
LOCK (R2) ; 00459500
|
|
USER32 := USER | 32 ; 00460000
|
|
BOOL := INITIALBOOL ; 00461000
|
|
INC := 100 ; 00462500
|
|
MACROLIBRARY := "MACRO " ; 00462900
|
|
CHARACTER := "#" ; 00463000
|
|
SAVEFACTOR := 7 ; 00463500
|
|
COLSTOPS := STRINGI := 0 ; 00465000
|
|
FILL RSWD [*] WITH "EXECUTE", "DITTO ", "COPY ", "INLINE ", 00466000
|
|
"ZIP ", "CHANGE ", "EDIT ", "SAVE ", "RESEQ ", 00466500
|
|
"PUNCH ", "PRINT ", "DELETE ", "CLOSE ", "COMPILE", 00467000
|
|
"COLUMN ", "SCAN ", "LISTING", "INC ", "TAB ", 00467500
|
|
"PERCENT", "QUICK ", "LIST ", "OPEN ", "MAIL ", 00468000
|
|
"TEACH ", "REMOVE ", "REPLACE", "END " ; 00468500
|
|
MAILCALL: 00469000
|
|
FILEACCESS := 0 ; 00469100
|
|
INORDER := TRUE ; 00469200
|
|
NEXT: 00469300
|
|
TRANSLATEI := REAL (TRANSLATING) ; 00472100
|
|
VN := VERSION ; 00472200
|
|
ERRORX (0, (IF XFILE ("MAIL % ", USERCODE, -1) = 7 THEN "MAIL % " 00489500
|
|
ELSE "HELLO ") & REAL (NOT OLDUSER)[42:47:1], USERCODE) ; 00490000
|
|
END INITIALIZE ; 00490500
|
|
LASTUSER := MAXUSERS ; 00490600
|
|
IF QINPUT THEN 00491000
|
|
BEGIN 00491100
|
|
QINPUT := FALSE ; 00491200
|
|
GO TO INPUTFULL ; 00491300
|
|
END ; 00491400
|
|
IF STATION NEQ 0 THEN 00493200
|
|
BEGIN 00493300
|
|
LASTUSER := USER ; 00493400
|
|
NEXT: 00493410
|
|
IF MORE THEN 00493500
|
|
GO TO EXIT ; 00494000
|
|
END ; 00494400
|
|
IF NOT Q AND READYQTOP GTR 0 THEN 00494600
|
|
BEGIN 00494700
|
|
LASTUSER := REAL (WAITX (0, BOOLEAN (3))) ; 00494800
|
|
SECURITYCHECK ; 00494900
|
|
GO TO EXIT ; 00495000
|
|
END ; 00495100
|
|
AGAIN: 00495200
|
|
CHARGE (0) ; 00495300
|
|
IF 2 | BIGBIRD LSS C := STATUS (ZIPPY [*]) - 2 THEN 00495500
|
|
BEGIN 00495600
|
|
LASTUSER := BIGBIRD + 1 ; 00495650
|
|
FOR X := 0 STEP 2 UNTIL C DO 00495700
|
|
BEGIN 00495800
|
|
STATION := 0 & ZIPPY [X] [9:9:9] ; 00495900
|
|
FOR USER := 0 STEP 1 UNTIL BIGBIRD DO 00496000
|
|
IF STATION = STATIONI THEN 00496100
|
|
USER := MAXUSERS ; 00496200
|
|
IF USER LEQ MAXUSERS THEN 00496300
|
|
BEGIN 00496400
|
|
IF BIGBIRD LSS MAXUSER THEN 00496500
|
|
BEGIN 00496600
|
|
USERCODE := ZIPPY [X + 1] ; 00496700
|
|
INITIALIZE ; 00496800
|
|
GO TO NEXT ; 00496900
|
|
END ; 00497000
|
|
NOMOREROOM ; 00497100
|
|
END ; 00497300
|
|
END ; 00497400
|
|
END ; 00497500
|
|
IF X := READTWX NEQ 0 THEN 00497600
|
|
BEGIN 00497700
|
|
IF X = 2 THEN 00497800
|
|
GO TO AGAIN ; 00497900
|
|
GO TO ESCAPE ; 00498100
|
|
END ; 00498300
|
|
INPUTFULL: 00506000
|
|
X := INPUT [0] ; 00506100
|
|
USER := 0 ; 00506500
|
|
WHILE STATIONI NEQ 0 & X[9:9:9] DO 00507000
|
|
IF USER := USER + 1 GTR BIGBIRD THEN 00507500
|
|
GO TO AGAIN ; 00507600
|
|
CHARGE (X) ; 00508000
|
|
IF C := CHRS NEQ 0 THEN 00508500
|
|
READ (IO [USER], 30, IMAGE [*]) ; 00509000
|
|
BREAKI := 0 ; 00511000
|
|
IF LINEEDIT (INPUT [1], IMAGE, C, C, 00512000
|
|
TRANSLATEI, C GTR 240, 241) THEN 00512100
|
|
ERROR (AGAIN, 7, "DEL{!~ ", CHRS := 0) ; 00512300
|
|
IF BOOLEAN (X.[25:1]) THEN 00512500
|
|
BEGIN 00512600
|
|
IF FIRSTCHAR (INPUT [5]) = "~" THEN 00513000
|
|
C := C - 4 ; 00513500
|
|
CHRS := C ; 00513700
|
|
WRITE (IO [USER], 30, IMAGE [*]) ; 00514000
|
|
GO TO AGAIN ; 00520000
|
|
END ; 00520500
|
|
IF BOOLEAN (INREADYQ) THEN 00520600
|
|
ERROR (AGAIN, 7, "PLEASE ", "WAIT...") ; 00520700
|
|
WRITELFCR ; 00520800
|
|
CHRS := C ; 00520810
|
|
CLOCK := T0 ; 00520850
|
|
T1 := TIMEX ; 00520900
|
|
IF OUTPUTREADY THEN 00520950
|
|
NEXTCLOCK := CLOCK - T0 | (TN - T1 - 90) / 150 ; 00520960
|
|
IF LASTUSER NEQ LASTUSER := USER THEN 00522000
|
|
RESTORESTATE ; 00522500
|
|
SECURITYCHECK ; 00522600
|
|
WAITFLAG := FALSE ; 00522700
|
|
EXIT: 00532000
|
|
IF FINALANALYSIS THEN 00532500
|
|
GO TO NEXT ; 00533500
|
|
IF OUTPUTREADY THEN 00533600
|
|
IF TN - 60 LEQ TIMEX THEN 00533700
|
|
OUTPUT ; 00533800
|
|
ESCAPE: 00534500
|
|
END READIN ; 00546500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00547000
|
|
DEFINE RDISC (RDISC1, RDISC2) = 00547100
|
|
IF RDISCX (RDISC1, RDISC2) THEN GO TO NEXT# ; 00547200
|
|
BOOLEAN PROCEDURE RDISCX (WHERE, IMAGE) ; 00547500
|
|
VALUE WHERE ; 00548000
|
|
INTEGER WHERE ; 00548500
|
|
ARRAY IMAGE [0] ; 00549000
|
|
BEGIN 00549500
|
|
LABEL EOF ; 00549600
|
|
STREAM PROCEDURE ZOT (D) ; 00549710
|
|
BEGIN 00549720
|
|
DI := D ; 00549730
|
|
DS := RESET ; 00549740
|
|
END ZOT ; 00549750
|
|
IF PREWHERE + 1 NEQ PREWHERE := ABS (WHERE) - 2 THEN 00550000
|
|
READ SEEK (DISC [PREWHERE]) ; 00550500
|
|
READ (DISC, 10, IMAGE [*]) [EOF] ; 00551000
|
|
IF COBOLFILE THEN 00551010
|
|
ZOT (IMAGE) ; 00551020
|
|
IF WHERE LSS 0 THEN 00551030
|
|
SEQUENCE ; 00551040
|
|
IF FALSE THEN 00551100
|
|
BEGIN 00551150
|
|
EOF: 00551200
|
|
ERRORX (5, "AT SEQ#", OCTDEX (N)) ; 00551250
|
|
RDISCX := TRUE ; 00551350
|
|
PREWHERE := -2 ; 00551400
|
|
END ; 00551450
|
|
END RDISC ; 00551500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00552000
|
|
DEFINE WRITEAT = 00552500
|
|
IF WRITEATX (QUICK, -N, RECORD) THEN 00552800
|
|
GO TO NEXT# ; 00552900
|
|
BOOLEAN PROCEDURE WRITEATX (QUICK, NN, RECORD) ; 00553000
|
|
VALUE QUICK, NN ; 00553100
|
|
BOOLEAN QUICK ; 00553200
|
|
INTEGER NN ; 00553300
|
|
ARRAY RECORD [0] ; 00553400
|
|
BEGIN 00554000
|
|
LABEL NEXT ; 00554100
|
|
N := ABS (NN) ; 00555500
|
|
IF NOT COBOLFILE THEN 00556000
|
|
WRITESEQ ; 00556500
|
|
IF NN LSS 0 THEN 00556600
|
|
RDISC (AT, RECORD) ; 00557000
|
|
IF COBOLFILE THEN 00557500
|
|
RECORD [0].[1:35] := OCTDEC (N) ; 00558000
|
|
WRITEROW (RECORD, QUICK, FILEINFO) ; 00558500
|
|
IF BOOLEAN (BREAKI) THEN 00559600
|
|
NEXT: 00559700
|
|
WRITEATX := TRUE ; 00559800
|
|
END WRITEAX ; 00560000
|
|
DEFINE WRITEME (WRITEME1, WRITEME2) = 00560100
|
|
IF WRITEATX (QUICK, WRITEME1, WRITEME2) THEN 00560200
|
|
GO TO NEXT# ; 00560300
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00560500
|
|
BOOLEAN PROCEDURE TOGGLE (OLDVALUE, I) ; 00561000
|
|
VALUE OLDVALUE, 00561500
|
|
I ; 00562000
|
|
BOOLEAN OLDVALUE ; 00562500
|
|
REAL I ; 00563000
|
|
BEGIN 00563500
|
|
LABEL NEXT ; 00564000
|
|
IF I = 3 THEN 00564100
|
|
BEGIN 00564110
|
|
IF REAL (OLDVALUE) = "ALGOL " THEN 00564120
|
|
TOGGLE := BOOLEAN (ALGOL) 00564130
|
|
ELSE IF REAL (OLDVALUE) = "XALGOL " THEN 00564140
|
|
TOGGLE := BOOLEAN (XALGOL) 00564150
|
|
ELSE IF REAL (OLDVALUE) = "DATA " THEN 00564160
|
|
TOGGLE := BOOLEAN (DATA) 00564170
|
|
ELSE IF REAL (OLDVALUE) = "FORTRAN" THEN 00564180
|
|
TOGGLE := BOOLEAN (FORTRAN) 00564190
|
|
ELSE IF REAL (OLDVALUE) = "COBOL " THEN 00564200
|
|
TOGGLE := BOOLEAN (COBOL) 00564210
|
|
ELSE IF REAL (OLDVALUE) = "BASIC " THEN 00564220
|
|
TOGGLE := BOOLEAN (BASIC) ; 00564230
|
|
GO TO NEXT ; 00564240
|
|
END ; 00564250
|
|
IF (IF I = 1 THEN EMPTY1 ELSE EMPTY2) THEN 00564500
|
|
ERROR (NEXT, 7, PARAMETER0, ONOFF (TOGGLE := OLDVALUE)) ; 00565000
|
|
I := IF I = 1 THEN PARAMETER1 ELSE PARAMETER2 ; 00565100
|
|
IF NOT (TOGGLE := I = "ON ") THEN 00565500
|
|
IF I NEQ "OFF " THEN 00566000
|
|
ERRORX (0, "MISSING", " ON/OFF") ; 00566500
|
|
NEXT: 00567000
|
|
END TOGGLE ; 00567500
|
|
DEFINE FILETYPE (FILETYPE1) = REAL (TOGGLE (BOOLEAN (FILETYPE1), 3))# ;00567600
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00568000
|
|
BOOLEAN PROCEDURE VERIFAX (XEROX, DD) ; 00680000
|
|
VALUE XEROX, DD ; 00680500
|
|
INTEGER XEROX, 00681000
|
|
DD ; 00681100
|
|
BEGIN 00681500
|
|
DEFINE 00681600
|
|
PRINTING = XEROX = 2#, 00681700
|
|
PUNCHING = XEROX = 4#, 00681800
|
|
ZIPPING = XEROX = 8# ; 00681900
|
|
FILE COPY DISK SERIAL [20:DD] (2, 10, 150, SAVE SAVEFACTOR) ; 00682000
|
|
BOOLEAN B ; 00683500
|
|
REAL L ; 00684000
|
|
LABEL NEXT ; 00684500
|
|
XLOCKED := TRUE ; 00687000
|
|
IF BOOLEAN (XEROX) THEN 00687500
|
|
BEGIN 00688000
|
|
FILL COPY WITH PREFIX, SUFFIX, *, *, *, 12 ; 00689000
|
|
L := FIRST ; 00691000
|
|
WHILE AT := L.T NEQ 1 DO 00692000
|
|
BEGIN 00692500
|
|
N := (L := LL [AT]).S ; 00693000
|
|
RDISC (-AT, ZIPPY) ; 00693500
|
|
WRITE (COPY, 10, ZIPPY [*]) ; 00695500
|
|
INTERRUPT (1) ; 00696000
|
|
END ; 00696500
|
|
READ (DISC [0]) ; 00697500
|
|
DETACH ; 00698000
|
|
CLOSE (DISC, PURGE) ; 00698500
|
|
LOCK (COPY) ; 00699500
|
|
REATTACH ; 00700000
|
|
INORDER := TRUE ; 00702500
|
|
FILEACCESS := 0 ; 00705500
|
|
SAVESTATE ; 00706000
|
|
END XEROX 00706500
|
|
ELSE 00707000
|
|
BEGIN 00708000
|
|
FILL COPY WITH PARAMETER1, PARAMETER2, *, *, *, 00709000
|
|
IF PRINTING THEN 15 ELSE IF PUNCHING THEN 22 ELSE 12 ; 00709500
|
|
IF PRINTING THEN 00713000
|
|
BEGIN 00713500
|
|
WRITE (ZIPPY [*], DATE, PREFIX.[6:6], PREFIX, 00714000
|
|
SUFFIX.[6:6], SUFFIX, (L := TIME (1)) DIV 216000, 00714500
|
|
L DIV 3600 MOD 60, TIME (6), MMDDYY, 00715000
|
|
USERCODE.[6:6], USERCODE) ; 00715500
|
|
DETACH ; 00716000
|
|
WRITE (COPY [DBL], 17, ZIPPY [*]) ; 00716500
|
|
REATTACH ; 00719000
|
|
END ; 00720000
|
|
L := N ; 00720500
|
|
DD := M := 0 ; 00721000
|
|
B := PRINTING AND PARAMETER2 = "DOUBLE " ; 00721100
|
|
WHILE N := LL [DD := LL [DD].T].S LEQ PARAMETER4 DO 00721500
|
|
IF PARAMETER3 LEQ N THEN 00722000
|
|
BEGIN 00723000
|
|
RDISC (DD & (REAL (NOT ZIPPING))[1:47:1], ZIPPY) ; 00723500
|
|
IF PRINTING THEN 00724000
|
|
ZIPPY [14] := OCTDEX (M := M + 1) & "#"[1:43:5] ; 00724500
|
|
IF B THEN 00726000
|
|
WRITE (COPY [DBL], 17, ZIPPY [*]) 00726500
|
|
ELSE WRITE (COPY, 17, ZIPPY [*]) ; 00727000
|
|
INTERRUPT (1) ; 00727500
|
|
END 00728000
|
|
ELSE M := M + 1 ; 00728500
|
|
IF ZIPPING THEN 00729000
|
|
ZIP WITH COPY ; 00729500
|
|
LOCK (COPY) ; 00730000
|
|
N := L ; 00730500
|
|
END THERMOFAX ; 00731000
|
|
IF FALSE THEN 00731100
|
|
NEXT: 00731200
|
|
VERIFAX := TRUE ; 00731300
|
|
XLOCKED := FALSE ; 00731400
|
|
END VERIFAX ; 00731500
|
|
DEFINE THERMOFAX (THERMOFAX1, THERMOFAX2) = 00731600
|
|
BEGIN 00731650
|
|
WAIT (KOUNT (PARAMETER3, PARAMETER4, CLOCK), XLOCKED) ; 00731700
|
|
IF VERIFAX (THERMOFAX1, THERMOFAX2) THEN 00731750
|
|
GO TO NEXT ; 00731800
|
|
END#, 00731850
|
|
CREATEFILE (CREATEFILE1) = 00731900
|
|
BEGIN 00731950
|
|
LIBRARY.AREAS := 20 ; 00732000
|
|
LIBRARY.AREASIZE := CREATEFILE1 ; 00732010
|
|
LIBRARY.SAVE := SAVEFACTOR ; 00732020
|
|
WRITE (LIBRARY, 10, RECORD [*]) ; 00732030
|
|
LOCK (LIBRARY) ; 00732040
|
|
LIBRARY.AREASIZE := 0 ; 00732050
|
|
LIBRARY.AREAS := 0 ; 00732060
|
|
END#, 00732100
|
|
CLOSEMYFILE = 00732150
|
|
BEGIN 00732200
|
|
IF NOT INORDER THEN 00732250
|
|
BEGIN 00732300
|
|
WAIT (KOUNT (1, FINITY, CLOCK), XLOCKED) ; 00732350
|
|
IF VERIFAX (17, (D + 14) DIV 15 | 15) THEN 00732400
|
|
GO TO NEXT ; 00732450
|
|
END ELSE 00732500
|
|
BEGIN 00732550
|
|
FILEACCESS := 0 ; 00732600
|
|
CLOSE (DISC) ; 00732650
|
|
END ; 00732700
|
|
END# ; 00732750
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00733000
|
|
DEFINE WDISC = IF WDISCX (IMAGE) THEN GO TO NEXT# ; 00733500
|
|
BOOLEAN PROCEDURE WDISCX (IMAGE) ; 00734000
|
|
ARRAY IMAGE [0] ; 00734500
|
|
BEGIN 00735000
|
|
REAL L ; 00735100
|
|
LABEL EOT, 00735500
|
|
NEXT ; 00735600
|
|
WHILE N GTR (L := LL [AT]).S DO 00743500
|
|
AT := L.T ; 00744000
|
|
WHILE N LSS (L := LL [AT]).S DO 00744500
|
|
AT := L.F ; 00745000
|
|
IF N NEQ L.S THEN 00745500
|
|
BEGIN 00746000
|
|
IF D GEQ MAXFILELENGTH THEN 00746500
|
|
ERROR (NEXT, 0, "FILE TO", " LONG. ") ; 00747000
|
|
IF PREWHERE NEQ PREWHERE := D - 2 THEN 00747100
|
|
READ SEEK (DISC [PREWHERE + 1]) ; 00747200
|
|
L := LL [D := D + 1] := (L.T) & N [SF] & AT [FF] ; 00747500
|
|
MODIFY (D) ; 00748000
|
|
LL [AT] . T := D ; 00748500
|
|
MODIFY (AT) ; 00748600
|
|
AT := L.T ; 00749000
|
|
IF AT NEQ 1 THEN 00749500
|
|
INORDER := FALSE ; 00750000
|
|
LL [AT] . F := D ; 00750500
|
|
MODIFY (AT) ; 00750600
|
|
AT := D ; 00751000
|
|
END ; 00751500
|
|
SEQUENCE ; 00752000
|
|
IF PREWHERE + 1 NEQ PREWHERE := AT - 2 THEN 00752500
|
|
WRITE (DISC [PREWHERE], 10, IMAGE [*]) 00753000
|
|
ELSE WRITE (DISC, 10, IMAGE [*]) [EOT] ; 00753500
|
|
N := N + INC ; 00753510
|
|
IF FALSE THEN 00753600
|
|
BEGIN 00753610
|
|
EOT: 00753620
|
|
LL [L.F] . T := AT := L.T ; 00753630
|
|
LL [AT] . F := L.F ; 00753640
|
|
D := D - 1 ; 00753650
|
|
INORDER := FALSE ; 00753660
|
|
SHOW ("FILE ", "FULL. ") ; 00753670
|
|
ERRORX (0, "PLEASE ", "REOPEN.") ; 00753690
|
|
NEXT: 00753700
|
|
WDISCX := TRUE ; 00753800
|
|
END ; 00753900
|
|
END WDISC ; 00754000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00754500
|
|
INTEGER PROCEDURE GETPARAMETERS (N) ; VALUE N ; INTEGER N ; 00754600
|
|
BEGIN 00754650
|
|
INTEGER STREAM PROCEDURE STAR (S, D, E) ; VALUE E ; 00754700
|
|
BEGIN 00754750
|
|
LOCAL N, 00754800
|
|
PLUS, 00754850
|
|
MINUS, 00754900
|
|
CROSSHATCH, 00754950
|
|
K ; 00755000
|
|
LABEL DEBLANK, 00755050
|
|
NALPHA, 00755100
|
|
BLANK, 00755150
|
|
NUMALPHA, 00755200
|
|
GETREPEAT ; 00755250
|
|
SI := S ; 00755300
|
|
SI := SI - 1 ; 00755350
|
|
DI := D ; 00755400
|
|
5 (DS := 8 LIT "+#000000") ; 00755450
|
|
DI := D ; 00755500
|
|
E (IF SC = "(" THEN JUMP OUT ; 00755550
|
|
IF SC = "@" THEN JUMP OUT TO GETREPEAT ; 00755600
|
|
IF SC = ";" THEN JUMP OUT TO GETREPEAT ; 00755650
|
|
SI := SI + 1) ; 00755700
|
|
5 (TALLY := 0 ; 00755750
|
|
K := TALLY ; 00755800
|
|
PLUS := TALLY ; 00755850
|
|
MINUS := TALLY ; 00755900
|
|
CROSSHATCH := TALLY ; 00755950
|
|
TALLY := 1 ; 00756000
|
|
DEBLANK: 00756050
|
|
SI := SI + 1 ; 00756100
|
|
IF SC = " " THEN 00756150
|
|
GO TO DEBLANK ; 00756200
|
|
IF SC = ALPHA THEN 00756250
|
|
TALLY := 0 00756300
|
|
ELSE 00756350
|
|
BEGIN 00756400
|
|
IF SC = ";" THEN 00756450
|
|
JUMP OUT TO GETREPEAT ; 00756500
|
|
IF SC = """ THEN 00756550
|
|
JUMP OUT TO GETREPEAT ; 00756600
|
|
IF SC = "(" THEN 00756650
|
|
JUMP OUT TO GETREPEAT ; 00756700
|
|
IF SC = "[" THEN 00756750
|
|
JUMP OUT TO GETREPEAT ; 00756800
|
|
IF SC = "." THEN 00756850
|
|
JUMP OUT TO GETREPEAT ; 00756900
|
|
IF SC = "@" THEN 00756950
|
|
JUMP OUT TO GETREPEAT ; 00757000
|
|
IF SC = "/" THEN 00757050
|
|
K := TALLY 00757100
|
|
ELSE IF SC = "+" THEN 00757150
|
|
PLUS := TALLY 00757200
|
|
ELSE IF SC = "#" THEN 00757250
|
|
CROSSHATCH := TALLY 00757300
|
|
ELSE IF SC = "-" THEN 00757350
|
|
MINUS := TALLY ; 00757400
|
|
GO TO DEBLANK ; 00757450
|
|
END ; 00757500
|
|
IF SC GEQ "0" THEN 00757550
|
|
BEGIN 00757600
|
|
K (JUMP OUT TO NALPHA) ; 00757650
|
|
K := SI ; 00757700
|
|
8 (IF SC LSS "0" THEN 00757750
|
|
JUMP OUT ; 00757800
|
|
TALLY := TALLY + 1 ; 00757850
|
|
SI := SI + 1) ; 00757900
|
|
N := TALLY ; 00757950
|
|
IF TOGGLE THEN 00758000
|
|
BEGIN 00758050
|
|
IF SC = ALPHA THEN 00758100
|
|
GO TO NUMALPHA ; 00758150
|
|
BLANK: 00758200
|
|
IF SC = " " THEN 00758250
|
|
BEGIN 00758300
|
|
SI := SI + 1 ; 00758350
|
|
GO TO BLANK ; 00758400
|
|
END ; 00758450
|
|
IF SC = "/" THEN 00758500
|
|
BEGIN 00758550
|
|
NUMALPHA: 00758600
|
|
SI := K ; 00758650
|
|
GO TO NALPHA ; 00758700
|
|
END ; 00758750
|
|
END ; 00758800
|
|
SI := K ; 00758850
|
|
DS := N OCT ; 00758900
|
|
END 00758950
|
|
ELSE 00759000
|
|
BEGIN 00759050
|
|
NALPHA: 00759100
|
|
DS := 1 LIT "+" ; 00759150
|
|
7 (IF SC = ALPHA THEN 00759200
|
|
DS := 1 CHR 00759250
|
|
ELSE DS := 1 LIT " ") ; 00759300
|
|
END ; 00759350
|
|
DI := DI - 8 ; 00759400
|
|
SKIP 2 DB ; 00759450
|
|
DS := PLUS SET ; 00759500
|
|
DI := DI - 1 ; 00759550
|
|
SKIP 3 DB ; 00759600
|
|
DS := MINUS SET ; 00759650
|
|
DI := DI - 1 ; 00759700
|
|
SKIP 4 DB ; 00759750
|
|
DS := CROSSHATCH SET ; 00759800
|
|
DI := DI + 7 ; 00759850
|
|
SI := SI - 1) ; 00759900
|
|
GETREPEAT: 00759910
|
|
E (IF SC = ")" THEN JUMP OUT ; 00759950
|
|
IF SC = ";" THEN JUMP OUT ; 00760000
|
|
IF SC = "@" THEN JUMP OUT ; 00760050
|
|
SI := SI + 1) ; 00760100
|
|
E (DI := LOC STAR ; 00760200
|
|
DS := 8 LIT "00000001" ; 00760250
|
|
DI := DI - 8 ; 00760300
|
|
10 (IF SC = ";" THEN JUMP OUT ; 00760350
|
|
IF SC GEQ "0" THEN 00760400
|
|
BEGIN 00760450
|
|
TALLY := 1 ; 00760500
|
|
3 (SI := SI + 1 ; 00760550
|
|
IF SC LSS "0" THEN JUMP OUT ; 00760600
|
|
TALLY := TALLY + 1) ; 00760650
|
|
K := TALLY ; 00760700
|
|
SI := SI - K ; 00760750
|
|
DS := K OCT ; 00760800
|
|
JUMP OUT ; 00760850
|
|
END ; 00760900
|
|
SI := SI + 1) ; 00760950
|
|
JUMP OUT) ; 00761000
|
|
END STAR ; 00761050
|
|
DEFINE XSUB = (XDEX + 1) | 13# ; 00761100
|
|
IF N = 0 THEN 00761150
|
|
GETPARAMETERS := STAR (IMAGE, PARAMETER0, 0) 00761200
|
|
ELSE 00761250
|
|
GETPARAMETERS := STAR (IMAGE, XPARAMETERS [0], 63) ; 00761300
|
|
END GET PARAMETERS ; 00761350
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00761400
|
|
INTEGER PROCEDURE VERB ; 00763900
|
|
BEGIN 00764000
|
|
BOOLEAN PROCEDURE NUMBER (N, C) ; 00764100
|
|
INTEGER N ; 00764300
|
|
REAL C ; 00764400
|
|
BEGIN 00764500
|
|
INTEGER XDEXX ; 00764510
|
|
LABEL ZERO ; 00764520
|
|
IF XDEX GEQ 0 THEN 00764530
|
|
BEGIN 00764540
|
|
XDEXX := XDEX + 1 ; 00764550
|
|
WHILE BOOLEAN (C.[4:1]) AND XDEXX := XDEXX - 1 GEQ 0 DO 00764560
|
|
C := XARRAY [USER, XDEXX|13 + ABS (C&0[1:44:4]-1) MOD 5] ; 00764570
|
|
END ; 00764580
|
|
C.[4:1] := 0 ; 00764600
|
|
IF NUMBER := (NOT BOOLEAN (C.[1:1])) & (C = -"#000000")[46:47:1] THEN00764610
|
|
BEGIN 00764620
|
|
IF C . [2:2] NEQ 0 AND FILEOPEN THEN 00764700
|
|
BEGIN 00764800
|
|
C . [1:3] := C . [3:3] ; 00764900
|
|
IF C = 0 THEN 00765100
|
|
BEGIN 00765200
|
|
C := N ; 00765300
|
|
GO TO ZERO ; 00765400
|
|
END ; 00765500
|
|
IF NOT (ITSOLD (N) OR BOOLEAN (C . [1:1])) THEN 00765600
|
|
C := C - 1 ; 00765700
|
|
FOR N := 1 - C STEP 1 UNTIL 0 DO 00765800
|
|
IF AT := LL [AT] . T = 1 THEN 00765900
|
|
BEGIN 00766000
|
|
N := 0 ; 00766100
|
|
AT := LAST . F ; 00766200
|
|
END ; 00766300
|
|
FOR N := C + 1 STEP 1 UNTIL 0 DO 00766400
|
|
IF AT := LL [AT] . F = 0 THEN 00766500
|
|
BEGIN 00766600
|
|
N := 0 ; 00766700
|
|
AT := FIRST . T ; 00766800
|
|
END ; 00766900
|
|
C := LL [AT] . S ; 00767000
|
|
END ELSE C.[2:2] := 0 ; 00767100
|
|
ZERO: 00767200
|
|
C := MIN (FINITY, MAX (1, N := C)) ; 00767300
|
|
END ELSE 00767310
|
|
C.[1:3] := 0 ; 00767320
|
|
END NUMBER ; 00767400
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00767500
|
|
INTEGER STREAM PROCEDURE INLINEEDIT (S, D, T, C, N, BIDR, INITIAL) ; 00767600
|
|
VALUE INITIAL, 00767700
|
|
C, 00767800
|
|
N, 00767900
|
|
BIDR ; 00768000
|
|
BEGIN 00768100
|
|
LABEL SEARCH, 00768200
|
|
INSERT, 00768300
|
|
DELETE, 00768400
|
|
REPLACE, 00768500
|
|
WRAPUP, 00768600
|
|
LOOP, 00768700
|
|
ERROR1, 00768710
|
|
HERE, 00768720
|
|
THERE, 00768730
|
|
IDR, 00768800
|
|
XIT ; 00768900
|
|
BIDR (SI := S ; SI := SI + 6 ; S := SI ; 00769000
|
|
SI := D ; SI := SI + 6 ; D := SI ; 00769100
|
|
DI := T ; DS := 6 LIT "0" ; T := DI ; 00769200
|
|
SI := C ; SI := SI - 48 ; C := SI) ; 00769300
|
|
DI := LOC BIDR ; 00769400
|
|
DS := 4 LIT " IDR" ; 00769500
|
|
DI := T ; 00769600
|
|
SI := T ; 00769700
|
|
DS := 8 LIT " " ; 00769800
|
|
DS := 9 WDS ; 00769900
|
|
2 (N (CI := CI + INITIAL ; 00770400
|
|
GO TO SEARCH ; 00770500
|
|
GO TO IDR ; 00770600
|
|
GO TO IDR ; 00770700
|
|
GO TO IDR ; 00770800
|
|
GO TO WRAPUP ; 00770900
|
|
SEARCH: 00771000
|
|
SI := LOC C ; 00771100
|
|
SI := SI + 6 ; 00771200
|
|
DI := LOC N ; 00771300
|
|
IF 2 SC = DC THEN 00771400
|
|
GO TO ERROR1 ; 00771500
|
|
SI := C ; 00771900
|
|
SI := SI - 8 ; 00772000
|
|
C := SI ; 00772100
|
|
SI := D ; 00772200
|
|
DI := T ; 00772300
|
|
DS := 1 CHR ; 00772400
|
|
D := SI ; 00772500
|
|
T := DI ; 00772600
|
|
SI := S ; 00772700
|
|
DI := LOC BIDR ; 00772800
|
|
4 (IF SC = DC THEN 00772900
|
|
JUMP OUT ; 00773000
|
|
SI := SI - 1 ; 00773100
|
|
TALLY := TALLY + 1) ; 00773200
|
|
IF TOGGLE THEN 00773300
|
|
ELSE 00773400
|
|
BEGIN 00773500
|
|
ERROR1: 00773510
|
|
TALLY := 1 ; 00773600
|
|
JUMP OUT 2 TO HERE ; 00773700
|
|
END ; 00773800
|
|
INITIAL := TALLY ; 00773900
|
|
TALLY := 0 ; 00774000
|
|
S := SI ; 00774100
|
|
GO TO LOOP ; 00774200
|
|
IDR: 00774300
|
|
SI := LOC C ; 00774400
|
|
SI := SI + 6 ; 00774500
|
|
DI := LOC N ; 00774600
|
|
IF 2 SC = DC THEN 00774700
|
|
BEGIN 00774800
|
|
SI := D ; 00774900
|
|
DI := T ; 00775000
|
|
TALLY := 4 ; 00775100
|
|
INITIAL := TALLY ; 00775200
|
|
WRAPUP: 00775300
|
|
DS := 1 CHR ; 00775400
|
|
GO TO LOOP ; 00775500
|
|
END ; 00775600
|
|
SI := C ; 00775700
|
|
SI := SI - 8 ; 00775800
|
|
C := SI ; 00775900
|
|
SI := S ; 00776000
|
|
CI := CI + INITIAL ; 00776100
|
|
GO TO WRAPUP ; 00776200
|
|
GO TO INSERT ; 00776300
|
|
GO TO DELETE ; 00776400
|
|
GO TO REPLACE ; 00776500
|
|
INSERT: 00776600
|
|
DI := T ; 00776700
|
|
DS := 1 CHR ; 00776800
|
|
S := SI ; 00776900
|
|
T := DI ; 00777000
|
|
DI := INLINEEDIT ; 00777100
|
|
DI := DI + 8 ; 00777200
|
|
INLINEEDIT := DI ; 00777300
|
|
GO TO LOOP ; 00777400
|
|
DELETE: 00777500
|
|
DI := D ; 00777600
|
|
DI := DI + 1 ; 00777700
|
|
D := DI ; 00777800
|
|
SI := SI + 1 ; 00777900
|
|
S := SI ; 00778000
|
|
GO TO LOOP ; 00778100
|
|
REPLACE: 00778200
|
|
DI := T ; 00778300
|
|
DS := 1 CHR ; 00778400
|
|
S := SI ; 00778500
|
|
T := DI ; 00778600
|
|
SI := D ; 00778700
|
|
SI := SI + 1 ; 00778800
|
|
D := SI ; 00778900
|
|
LOOP: 00779000
|
|
)) ; 00779100
|
|
GO TO THERE ; 00779110
|
|
HERE: 00779120
|
|
GO TO XIT ; 00779130
|
|
THERE: 00779140
|
|
TALLY := 0 ; 00779200
|
|
S := SI ; 00779300
|
|
SI := LOC INLINEEDIT ; 00779400
|
|
DI := LOC BIDR ; 00779500
|
|
SI := SI + 6 ; 00779600
|
|
DI := DI + 7 ; 00779700
|
|
DS := 1 CHR ; 00779800
|
|
SI := S ; 00779900
|
|
BIDR (2 (32 (IF SC NEQ " " THEN 00780000
|
|
BEGIN 00780100
|
|
TALLY := 2 ; 00780200
|
|
JUMP OUT 3 TO XIT ; 00780300
|
|
END ; 00780400
|
|
SI := SI + 1))) ; 00780500
|
|
INLINEEDIT (IF SC NEQ " " THEN 00780600
|
|
BEGIN 00780700
|
|
TALLY := 2 ; 00780800
|
|
JUMP OUT 1 TO XIT ; 00780900
|
|
END ; 00781000
|
|
SI := SI + 1) ; 00781100
|
|
XIT: 00781200
|
|
INLINEEDIT := TALLY ; 00781300
|
|
END INLINE ; 00781400
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00781500
|
|
LABEL NEXT, 00786000
|
|
VERBEXIT ; 00786100
|
|
DEFINE QUICK = FALSE# ; 00786110
|
|
NEXT: 00806500
|
|
READIN ; 00807000
|
|
IF BOOLEAN (ABNORMALEND) OR USER = MAXUSERS THEN 00807500
|
|
BEGIN 00808000
|
|
VERB := RSWDM + REAL (USER = MAXUSERS) ; 00809000
|
|
GO TO VERBEXIT ; 00809500
|
|
END ; 00810000
|
|
IF INLINETOG THEN 00811000
|
|
BEGIN 00811500
|
|
INLINETOG := FALSE ; 00811600
|
|
IF M := INLINEEDIT (IMAGE, RECORD, ZIPPY, CHRS, 00813000
|
|
HALFLENGTH, FILEINFO = COBOL, M) = 0 THEN 00813500
|
|
BEGIN 00814000
|
|
IF INLINEECHO EQV TEMPTOG THEN 00814100
|
|
WRITEME (N, ZIPPY) ; 00814200
|
|
IF WDISCX (ZIPPY) THEN ; 00814500
|
|
NOSTAR := FALSE ; 00815000
|
|
GO TO NEXT ; 00815200
|
|
END ; 00815500
|
|
IF M = 2 THEN 00816000
|
|
ERROR (NEXT, 0, PARAMETER0, " OVRFLW") ; 00816100
|
|
ERROR (NEXT, 0, "NEEDS I", ",R OR D") ; 00816500
|
|
END ; 00817500
|
|
IF NOSTAR THEN 00818000
|
|
BEGIN 00818500
|
|
IF WDISCX (IMAGE) THEN ; 00822500
|
|
GO TO NEXT ; 00826000
|
|
END ; 00826500
|
|
WRITE (IO [USER], 30, IMAGE [*]) ; 00827000
|
|
I := GETPARAMETERS (0) ; 00828000
|
|
TEMPTOG := PARAMETER0.[2:2] = 0 ; 00828100
|
|
IF NUMBER (N, PARAMETER0) THEN 00837000
|
|
BEGIN 00837100
|
|
IF FILECLOSED THEN 00837500
|
|
ERROR (NEXT, 5, " OPEN: ", OCTDEX (PARAMETER0)) ; 00838000
|
|
IF NOT MOREINPUT AND ITSOLD (N := PARAMETER0) THEN 00838500
|
|
WRITEAT ; 00838600
|
|
GO TO NEXT ; 00839000
|
|
END ; 00839500
|
|
M := RESETN := N ; 00839700
|
|
FOR I := 0 STEP 1 UNTIL RSWDM DO 00840000
|
|
IF PARAMETER0 = RSWD [I] THEN 00840500
|
|
BEGIN 00840600
|
|
RELATIVENUMBER := PARAMETER1 ; 00840605
|
|
NUM1 := NUMBER (M, PARAMETER1) ; 00840610
|
|
NUM2 := NUMBER (M, PARAMETER2) ; 00840620
|
|
NUM3 := NUMBER (M, PARAMETER3) ; 00840630
|
|
NUM4 := NUMBER (M, PARAMETER4) ; 00840640
|
|
VERB := I ; 00840700
|
|
GO TO VERBEXIT ; 00841000
|
|
END ; 00841010
|
|
IF I := XFILE (PARAMETER0, MACROLIBRARY, -1) LSS 2 00841100
|
|
AND MACROLIBRARY NEQ "MACRO " THEN 00841200
|
|
I := XFILE (PARAMETER0, "MACRO ", -1) ; 00841220
|
|
IF I LSS 2 OR INPUT [3] NEQ 10 THEN 00841300
|
|
BEGIN 00841320
|
|
SHOW (PARAMETER0, " INVALI") ; 00841360
|
|
ERROR (NEXT, 0, "D:* ", RWTEACH) ; 00841400
|
|
END ; 00841500
|
|
VERBEXIT: 00844500
|
|
END ; 00845000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00846000
|
|
DEFINE QUICKLIST = LISTIT (1)#, 00850000
|
|
SCAN = LISTIT (2)#, 00850100
|
|
CHANGE = LISTIT (4)#, 00850200
|
|
EDIT = LISTIT (8)# ; 00850300
|
|
PROCEDURE LISTIT (LISTTYPE) ; VALUE LISTTYPE ; INTEGER LISTTYPE ; 00850400
|
|
BEGIN 00850500
|
|
LABEL NEXT ; 00850600
|
|
DEFINE QUICK = BOOLEAN (LISTTYPE) AND TRUE#, 00850700
|
|
SCANTOG = LISTTYPE = 2#, 00850800
|
|
CHANGETOG = LISTTYPE = 4#, 00850900
|
|
EDITTOG = LISTTYPE = 8#, 00851000
|
|
POSTING = LISTTYPE GEQ 16# ; 00851100
|
|
BOOLEAN PROCEDURE STRINGFOUND ; 00851110
|
|
BEGIN 00851120
|
|
BOOLEAN STREAM PROCEDURE PRESENT (S, R, I, SR, T, ID, K) ; 00851200
|
|
VALUE I, 00851300
|
|
SR, 00851400
|
|
ID, 00851500
|
|
K, 00851600
|
|
T ; 00851700
|
|
BEGIN 00851800
|
|
LABEL XIT ; 00851900
|
|
SI := S ; 00852000
|
|
SI := SI + K ; 00852100
|
|
S := SI ; 00852200
|
|
SI := LOC SR ; 00852300
|
|
DI := LOC K ; 00852400
|
|
SI := SI + 6 ; 00852500
|
|
DI := DI + 7 ; 00852600
|
|
DS := CHR ; 00852700
|
|
DI := R ; 00852800
|
|
K (DI := DI + 32 ; DI := DI + 32) ; 00852900
|
|
DI := DI + SR ; 00853000
|
|
R := DI ; 00853100
|
|
TALLY := 1 ; 00853200
|
|
SI := LOC T ; 00853300
|
|
DI := LOC K ; 00853400
|
|
SI := SI + 6 ; 00853500
|
|
DI := DI + 7 ; 00853600
|
|
DS := 1 CHR ; 00853700
|
|
DI := R ; 00853800
|
|
K (2 (32 ( 00853900
|
|
SI := S ; 00854000
|
|
IF I SC = DC THEN 00854100
|
|
BEGIN 00854200
|
|
ID (JUMP OUT 4 TO XIT) ; 00854300
|
|
R := DI ; 00854400
|
|
SI := R ; 00854500
|
|
IF SC = ALPHA THEN ELSE 00854600
|
|
BEGIN 00854700
|
|
SI := SI - I ; 00854800
|
|
SI := SI - 1 ; 00854900
|
|
IF SC = ALPHA THEN ELSE 00855000
|
|
JUMP OUT 3 TO XIT ; 00855100
|
|
END ; 00855200
|
|
END ; 00855300
|
|
DI := DI - I ; 00855400
|
|
DI := DI + 1))) ; 00855500
|
|
T ( 00855600
|
|
SI := S ; 00855700
|
|
IF I SC = DC THEN 00855800
|
|
BEGIN 00855900
|
|
ID (JUMP OUT 2 TO XIT) ; 00856000
|
|
R := DI ; 00856100
|
|
SI := R ; 00856200
|
|
IF SC = ALPHA THEN ELSE 00856300
|
|
BEGIN 00856400
|
|
SI := SI - I ; 00856500
|
|
SI := SI - 1 ; 00856600
|
|
IF SC = ALPHA THEN ELSE 00856700
|
|
JUMP OUT TO XIT ; 00856800
|
|
END ; 00856900
|
|
END ; 00857000
|
|
DI := DI - I ; 00857100
|
|
DI := DI + 1) ; 00857200
|
|
TALLY := 0 ; 00857300
|
|
XIT: 00857400
|
|
PRESENT := TALLY ; 00857500
|
|
END PRESENT ; 00857600
|
|
IF PRESENT (STRING, ZIPPY, STRINGI, STRINGILEFT, STRINGIREPEAT, 00857610
|
|
1-STRINGID, 0) EQV TEMPTOG THEN 00857620
|
|
STRINGFOUND := TRUE 00857630
|
|
ELSE IF STRINGJ NEQ 0 THEN 00857640
|
|
STRINGFOUND := 00857650
|
|
PRESENT (STRING, ZIPPY, STRINGJ, STRINGJLEFT, STRINGJREPEAT, 00857660
|
|
1-STRINGJD, STRINGI) EQV TEMPTOG ; 00857670
|
|
END STRINGFOUND ; 00857680
|
|
DEFINE GETSTRINGS = IF ISOLATESTRINGS (LISTTYPE) THEN GO TO NEXT# ; 00857700
|
|
BOOLEAN PROCEDURE ISOLATESTRINGS (LISTTYPE) ; 00857800
|
|
VALUE LISTTYPE ; 00857900
|
|
INTEGER LISTTYPE ; 00858000
|
|
BEGIN 00858100
|
|
STREAM PROCEDURE ISOLATE (S, D, L1, L2) ; 00858200
|
|
BEGIN 00858300
|
|
LOCAL STOPCHR, 00858400
|
|
DX, 00858500
|
|
QUOTES ; 00858600
|
|
LABEL OK, 00858700
|
|
NOSTRING, 00858800
|
|
STRING, 00858900
|
|
JUMPOUT, 00858910
|
|
NO, 00859000
|
|
NEXTNO ; 00859100
|
|
TALLY := 63 ; 00859200
|
|
STOPCHR := TALLY ; 00859300
|
|
DI := LOC QUOTES ; 00859400
|
|
DS := 2 LIT """ ; 00859500
|
|
DS := 6 LIT "..()[]" ; 00859600
|
|
2 (SI := S ; 00859700
|
|
63 (SI := SI + 1 ; 00859800
|
|
IF SC = ALPHA THEN 00859900
|
|
ELSE IF SC NEQ " " THEN 00860000
|
|
BEGIN 00860100
|
|
DI := LOC QUOTES ; 00860200
|
|
4 (IF SC = DC THEN JUMP OUT 2 TO OK ; 00860300
|
|
SI := SI - 1 ; 00860400
|
|
DI := DI + 1) ; 00860500
|
|
IF SC = ";" THEN JUMP OUT ; 00860600
|
|
END) ; 00860700
|
|
GO TO NOSTRING ; 00860800
|
|
OK: 00861200
|
|
DX := DI ; 00861300
|
|
SI := SI - 1 ; 00861400
|
|
IF SC = "." THEN 00861500
|
|
BEGIN 00861600
|
|
DI := L1 ; 00861700
|
|
DS := LIT "+" ; 00861800
|
|
END ; 00861900
|
|
SI := SI + 1 ; 00862000
|
|
TALLY := 0 ; 00862100
|
|
STOPCHR (DI := DX ; 00862200
|
|
IF SC = DC THEN 00862300
|
|
JUMP OUT 1 TO STRING ; 00862400
|
|
SI := SI - 1 ; 00862500
|
|
DI := D ; 00862600
|
|
DS := 1 CHR ; 00862700
|
|
D := DI ; 00862800
|
|
TALLY := TALLY + 1) ; 00862900
|
|
NOSTRING: 00863000
|
|
DI := L1 ; 00863010
|
|
DS := 8 LIT "00000010" ; 00863020
|
|
GO TO JUMPOUT ; 00863030
|
|
STRING: 00863100
|
|
DI := L1 ; 00863200
|
|
DI := DI + 2 ; 00863300
|
|
2 (DX := DI ; 00863400
|
|
10 (IF SC GEQ "0" THEN 00863500
|
|
BEGIN 00863600
|
|
DI := DX ; 00863700
|
|
DS := LIT "0" ; 00863800
|
|
DS := CHR ; 00863900
|
|
IF SC GEQ "0" THEN 00864000
|
|
BEGIN 00864100
|
|
SI := SI - 1 ; 00864200
|
|
DI := DI - 2 ; 00864300
|
|
DS := 2 CHR ; 00864400
|
|
END ; 00864500
|
|
JUMP OUT 1 TO NEXTNO ; 00864600
|
|
END ; 00864700
|
|
IF SC = ALPHA THEN 00864800
|
|
ELSE IF SC NEQ " " THEN 00864900
|
|
BEGIN 00865000
|
|
IF SC = ";" THEN JUMP OUT 2 TO NO ; 00865100
|
|
DI := LOC QUOTES ; 00865200
|
|
4 (IF SC = DC THEN 00865300
|
|
BEGIN 00865400
|
|
SI := SI - 1 ; 00865500
|
|
JUMP OUT 3 TO NO ; 00865600
|
|
END ; 00865700
|
|
SI := SI - 1 ; 00865800
|
|
DI := DI + 1) ; 00865900
|
|
END ; 00866000
|
|
SI := SI + 1) ; 00866100
|
|
JUMP OUT TO NO ; 00866200
|
|
NEXTNO: 00866300
|
|
) ; 00866400
|
|
GO TO NO ; 00866410
|
|
JUMPOUT: 00866420
|
|
JUMP OUT ; 00866430
|
|
NO: 00866500
|
|
SI := SI - 1 ; 00866600
|
|
S := SI ; 00866700
|
|
DI := L1 ; 00866800
|
|
L1 := TALLY ; 00866900
|
|
TALLY := STOPCHR ; 00867000
|
|
L1 (TALLY := TALLY + 63) ; 00867100
|
|
STOPCHR := TALLY ; 00867200
|
|
SI := LOC L1 ; 00867300
|
|
DI := DI + 7 ; 00867400
|
|
SI := SI + 7 ; 00867500
|
|
DS := 1 CHR ; 00867600
|
|
DI := L2 ; 00867700
|
|
L1 := DI) ; 00867800
|
|
END ISOLATE ; 00867900
|
|
LABEL NEXT ; 00868000
|
|
INTEGER PROCEDURE DEFINESTRING (I, LEFT, RIGHT) ; 00868010
|
|
VALUE LEFT, RIGHT ; INTEGER I, LEFT, RIGHT ; 00868020
|
|
BEGIN 00868030
|
|
IF LEFT := 10|I.[12:6] + I.[18:6] = 99 THEN 00868060
|
|
BEGIN 00868070
|
|
LEFT := 1 ; 00868080
|
|
RIGHT := 80 ; 00868090
|
|
END ELSE 00868100
|
|
IF RIGHT := 10|I.[24:6] + I.[30:6] = 99 THEN 00868110
|
|
RIGHT := LEFT ; 00868120
|
|
I := FULLLENGTH + 1 - STRINGI ; 00868130
|
|
LEFT := MIN (MAX (LEFT,IF COBOLFILE THEN 6 ELSE 1), I) ; 00868140
|
|
RIGHT := MIN (MAX (LEFT,RIGHT), I) ; 00868150
|
|
DEFINESTRING := LEFT - 1 ; 00868160
|
|
I := RIGHT - LEFT + 1 ; 00868170
|
|
END DEFINESTRING ; 00868190
|
|
IF NOT SCANTOG THEN 00868200
|
|
BEGIN 00868300
|
|
IF PARAMETER1 = "ECHO " THEN 00868400
|
|
BEGIN 00868500
|
|
IF CHANGETOG THEN 00868600
|
|
CHANGEECHO := TOGGLE (CHANGEECHO, 2) 00868700
|
|
ELSE 00868800
|
|
EDITECHO := TOGGLE (EDITECHO, 2) ; 00868900
|
|
GO TO NEXT ; 00869000
|
|
END ; 00869100
|
|
READONLYCHECK ; 00869200
|
|
END ; 00869300
|
|
IF EDITTOG THEN 00869400
|
|
BEGIN 00869500
|
|
IF NOT (NUM1 AND NUM2 AND NUM3) THEN 00869600
|
|
ERROR (NEXT, 0, PARAMETER0, " ERROR.") ; 00869700
|
|
IF NOT ITSOLD (N := PARAMETER3) THEN 00869800
|
|
ERROR (NEXT, 0, "MISSING", " FORMAT") ; 00869900
|
|
RDISC (AT, RECORD) ; 00870000
|
|
IF COBOLFILE THEN 00870100
|
|
RECORD [0].[1:35] := "@@@@@@" ; 00870200
|
|
END ELSE 00870300
|
|
BEGIN 00870400
|
|
I := M := 0 & "9999" [12:24:24] ; 00870500
|
|
ISOLATE (IMAGE, STRING, I, M) ; 00870600
|
|
IF I NEQ 64 THEN 00870700
|
|
BEGIN 00870800
|
|
RELATIVENUMBER := FILEINFO ; 00870900
|
|
IF SCANTOG THEN 00871000
|
|
IF NOT (EMPTY1 OR (NUM1 AND (NUM2 OR EMPTY2))) THEN 00871100
|
|
FILEINFO := DATA ; 00871200
|
|
STRINGI := I.[41:7] ; 00871300
|
|
STRINGID := REAL (I LSS 0) ; 00871400
|
|
STRINGILEFT := DEFINESTRING (I, 0, 0) ; 00871500
|
|
STRINGIREPEAT := I ; 00871600
|
|
IF M NEQ 64 THEN 00871700
|
|
BEGIN 00871800
|
|
STRINGJ := M.[41:7] ; 00871900
|
|
STRINGJD := REAL (M LSS 0) ; 00872000
|
|
STRINGJLEFT := DEFINESTRING (M, 0, 0) ; 00872100
|
|
STRINGJREPEAT := M ; 00872200
|
|
END ELSE 00872300
|
|
STRINGJ := 64 ; 00872400
|
|
FILEINFO := RELATIVENUMBER ; 00872500
|
|
END ; 00874100
|
|
IF STRINGI = 0 OR (CHANGETOG AND STRINGJ = 64) THEN 00874200
|
|
ERROR (NEXT, 0, "MISSING", " STRING") ; 00874300
|
|
IF STRINGJ = 64 THEN 00874400
|
|
STRINGJ := 0 ; 00874500
|
|
END ; 00874600
|
|
IF FALSE THEN 00874700
|
|
NEXT: 00874800
|
|
ISOLATESTRINGS := TRUE ; 00874900
|
|
END ISOLATESTRINGS ; 00875000
|
|
PROCEDURE EXTERNALFILE (LISTTYPE) ; 00875100
|
|
VALUE LISTTYPE ; INTEGER LISTTYPE ; 00875200
|
|
BEGIN 00875300
|
|
FILE RO DISK SERIAL (2, INPUT [3], INPUT [4]) ; 00875400
|
|
LABEL MORE, 00875600
|
|
EOF, 00875700
|
|
NEXT ; 00875800
|
|
BOOLEAN POSTED, 00875900
|
|
B ; 00876000
|
|
LOCKED := TRUE ; 00876100
|
|
RESETN := N ; 00876300
|
|
FILL RO WITH INPUT [1], INPUT [2], *, *, *, 00876400
|
|
12 + REAL (POSTED := PARAMETER1 = "MAIL % ") ; 00876500
|
|
N := 0 ; 00876600
|
|
M := INPUT [5] + 1 ; 00876700
|
|
B := POSTING ; 00876800
|
|
IF NUM3 THEN 00876900
|
|
BEGIN 00877000
|
|
IF N := PARAMETER3 - 1 GEQ M THEN 00877100
|
|
ERROR (NEXT, 0, "USE REC", "ORD #S.") ; 00877110
|
|
READ SEEK (RO [N]) ; 00877120
|
|
IF NUM4 THEN 00877200
|
|
M := PARAMETER4 ; 00877300
|
|
END 00877400
|
|
ELSE IF NOT EMPTY3 THEN 00877500
|
|
B := TRUE ; 00877600
|
|
I := IF POSTING THEN ALGOL ELSE DATA ; 00877700
|
|
WRITE (ZIPPY [*], STAR) ; 00877750
|
|
MORE: 00877800
|
|
INTERRUPT (1) ; 00877900
|
|
IF N := N + 1 GTR M THEN 00878000
|
|
GO TO EOF ; 00878100
|
|
READ (RO, 10, ZIPPY [*]) [EOF] ; 00878200
|
|
IF SCANTOG THEN 00878300
|
|
IF NOT STRINGFOUND THEN 00878400
|
|
GO TO MORE ; 00878500
|
|
IF B THEN 00879100
|
|
BEGIN 00879200
|
|
IF POSTING AND FIRSTCHAR (ZIPPY [0]) = "*" THEN 00879300
|
|
GO TO MORE ; 00879400
|
|
WRITELFCR ; 00879500
|
|
END ELSE WRITESEQ ; 00879600
|
|
WRITEROW (ZIPPY, QUICK, I) ; 00879700
|
|
IF POSTED THEN 00879800
|
|
WRITE (RO, STAR) ; 00879900
|
|
IF BREAKI = 0 THEN 00880000
|
|
BEGIN 00880100
|
|
GO TO MORE ; 00880200
|
|
EOF: 00880300
|
|
IF POSTED THEN 00880400
|
|
BEGIN 00880500
|
|
DETACH ; 00880600
|
|
CLOSE (RO, PURGE) ; 00880700
|
|
REATTACH ; 00880800
|
|
END ; 00880900
|
|
END ; 00880910
|
|
NEXT: 00881000
|
|
N := RESETN ; 00881100
|
|
LOCKED := FALSE ; 00881200
|
|
END EXTERNALFILE ; 00881300
|
|
PROCEDURE SPECIAL (LISTTYPE, ECHO) ; 00881400
|
|
VALUE LISTTYPE, ECHO ; INTEGER LISTTYPE ; BOOLEAN ECHO ; 00881500
|
|
BEGIN 00881600
|
|
LABEL 00881700
|
|
REWRITE, 00881800
|
|
OVERFLOW, 00881850
|
|
NEXT ; 00881900
|
|
DEFINE QUICK = FALSE# ; 00882100
|
|
INTEGER STREAM PROCEDURE CHANGED (S,D,I,J,STRING,SS,T,T1,SR,M,N,ID) ; 00882200
|
|
VALUE I, 00882300
|
|
J, 00882400
|
|
SS, 00882500
|
|
T, 00882600
|
|
T1, 00882700
|
|
SR, 00882800
|
|
ID, 00882900
|
|
M, 00883000
|
|
N ; 00883100
|
|
BEGIN 00883200
|
|
LOCAL K, 00883300
|
|
TOTAL ; 00883400
|
|
LABEL AROUND, 00883500
|
|
XIT, 00883600
|
|
NO, 00883700
|
|
UNDERFLOW, 00883800
|
|
HERE, 00883900
|
|
THERE, 00883910
|
|
EXIT ; 00883920
|
|
DI := D ; 00884000
|
|
DS := 8 LIT " " ; 00884100
|
|
SI := D ; 00884200
|
|
DS := 9 WDS ; 00884300
|
|
SI := LOC SS ; 00884400
|
|
DI := LOC K ; 00884500
|
|
SI := SI + 6 ; 00884600
|
|
DI := DI + 7 ; 00884700
|
|
DS := CHR ; 00884800
|
|
SI := S ; 00884900
|
|
DI := D ; 00885000
|
|
K (DS := 32 CHR ; DS := 32 CHR) ; 00885100
|
|
DS := SS CHR ; 00885200
|
|
S := SI ; 00885300
|
|
D := DI ; 00885400
|
|
K := TALLY ; 00885500
|
|
2 (T (K (DS := N CHR ; 00885600
|
|
TALLY := K ; 00885700
|
|
JUMP OUT TO HERE) ; 00886000
|
|
DI := S ; 00886100
|
|
SI := STRING ; 00886200
|
|
IF I SC NEQ DC THEN 00886300
|
|
BEGIN 00886400
|
|
NO: 00886500
|
|
SI := S ; 00886600
|
|
DI := D ; 00886700
|
|
DS := CHR ; 00886800
|
|
S := SI ; 00886900
|
|
D := DI ; 00887000
|
|
SI := SR ; 00887100
|
|
SI := SI - 8 ; 00887200
|
|
SR := SI ; 00887300
|
|
TALLY := 1 ; 00887310
|
|
GO TO HERE ; 00887400
|
|
END ; 00887500
|
|
ID (SS := DI ; 00887600
|
|
SI := SS ; 00887700
|
|
IF SC = ALPHA THEN 00887800
|
|
JUMP OUT TO NO ; 00887900
|
|
SI := SI - I ; 00888000
|
|
SI := SI - 1 ; 00888100
|
|
IF SC = ALPHA THEN 00888200
|
|
JUMP OUT TO NO ; 00888300
|
|
SI := STRING ; 00888400
|
|
SI := SI + I) ; 00888500
|
|
TALLY := 1 ; 00888600
|
|
CHANGED := TALLY ; 00888700
|
|
S := DI ; 00888800
|
|
DI := D ; 00888900
|
|
GO TO THERE ; 00888910
|
|
HERE: 00888920
|
|
GO TO AROUND ; 00888930
|
|
THERE: 00888940
|
|
N (DI := DI + J ; 00889000
|
|
D := DI ; 00889100
|
|
DI := TOTAL ; 00889200
|
|
8 (DI := DI + J ; 00889300
|
|
DI := DI - I) ; 00889400
|
|
TOTAL := DI ; 00889500
|
|
DI := SR ; 00889600
|
|
8 (DI := DI - J) ; 00889700
|
|
SR := DI ; 00889800
|
|
DI := D ; 00889900
|
|
DI := DI - J ; 00890000
|
|
DS := CHR ; 00890100
|
|
TALLY := J ; 00890200
|
|
JUMP OUT TO AROUND) ; 00890300
|
|
DS := J CHR ; 00890400
|
|
D := DI ; 00890500
|
|
SI := SR ; 00890600
|
|
8 (SI := SI - I) ; 00890700
|
|
SR := SI ; 00890800
|
|
TALLY := I ; 00890900
|
|
AROUND: 00891000
|
|
TALLY := TALLY + 63 ; 00891100
|
|
K := TALLY) ; 00891200
|
|
TALLY := T1 ; 00891600
|
|
T := TALLY) ; 00891700
|
|
CI := CI + CHANGED ; 00891800
|
|
GO TO EXIT ; 00891900
|
|
M (K (DS := N CHR ; 00892000
|
|
TALLY := K ; 00892100
|
|
TALLY := TALLY + 63 ; 00892200
|
|
K := TALLY ; 00892300
|
|
JUMP OUT)) ; 00892400
|
|
TALLY := 2 ; 00892500
|
|
K (CHANGED := TALLY ; 00892600
|
|
JUMP OUT TO EXIT) ; 00892700
|
|
SI := LOC SR ; 00892800
|
|
DI := LOC SS ; 00892900
|
|
6 (IF SC NEQ "0" THEN JUMP OUT TO UNDERFLOW ; SI := SI + 1) ; 00893000
|
|
DI := DI + 7 ; 00893100
|
|
DS := CHR ; 00893200
|
|
SI := S ; 00893300
|
|
DI := D ; 00893400
|
|
SS (DS := 32 CHR ; DS := 32 CHR) ; 00893500
|
|
DS := SR CHR ; 00893600
|
|
S := SI ; 00893700
|
|
GO TO UNDERFLOW ; 00893710
|
|
EXIT: 00893720
|
|
GO TO XIT ; 00893730
|
|
UNDERFLOW: 00893800
|
|
N (SI := LOC TOTAL ; 00893900
|
|
DI := LOC K ; 00894000
|
|
SI := SI + 6 ; 00894100
|
|
DI := DI + 7 ; 00894200
|
|
DS := 1 CHR ; 00894300
|
|
SI := S ; 00894400
|
|
K (2 (32 (IF SC NEQ " " THEN 00894500
|
|
BEGIN 00894600
|
|
CHANGED := TALLY ; 00894700
|
|
JUMP OUT 4 TO XIT ; 00894800
|
|
END ; 00894900
|
|
SI := SI + 1))) ; 00895000
|
|
TOTAL (IF SC NEQ " " THEN 00895100
|
|
BEGIN 00895200
|
|
CHANGED := TALLY ; 00895300
|
|
JUMP OUT 2 TO XIT ; 00895400
|
|
END ; 00895500
|
|
SI := SI + 1)) ; 00895600
|
|
XIT: 00895700
|
|
END CHANGED ; 00895800
|
|
BOOLEAN STREAM PROCEDURE EDITS (F, S, D, N) ; 00895900
|
|
VALUE N ; 00896000
|
|
BEGIN 00896100
|
|
LABEL XIT ; 00896200
|
|
DI := D ; 00896300
|
|
DS := 8 LIT " " ; 00896400
|
|
SI := D ; 00896500
|
|
DS := 9 WDS ; 00896600
|
|
DI := D ; 00896700
|
|
D := TALLY ; 00896800
|
|
2 (N (SI := F ; 00896900
|
|
IF SC = "@" THEN 00897000
|
|
BEGIN 00897100
|
|
SI := SI + 1 ; 00897200
|
|
F := SI ; 00897300
|
|
SI := S ; 00897400
|
|
DS := CHR ; 00897500
|
|
S := SI ; 00897600
|
|
END 00897700
|
|
ELSE IF SC = "#" THEN 00897800
|
|
BEGIN 00897900
|
|
SI := SI + 1 ; 00898000
|
|
F := SI ; 00898100
|
|
SI := S ; 00898200
|
|
SI := SI + 1 ; 00898300
|
|
S := SI ; 00898400
|
|
END 00898500
|
|
ELSE 00898600
|
|
BEGIN 00898700
|
|
DS := CHR ; 00898800
|
|
F := SI ; 00898900
|
|
SI := D ; 00899000
|
|
SI := SI + 8 ; 00899100
|
|
D := SI ; 00899200
|
|
END)) ; 00899300
|
|
SI := LOC D ; 00899400
|
|
DI := LOC N ; 00899500
|
|
SI := SI + 6 ; 00899600
|
|
DI := DI + 7 ; 00899700
|
|
DS := 1 CHR ; 00899800
|
|
SI := S ; 00899900
|
|
N ( 2 ( 32 (IF SC NEQ " " THEN 00900000
|
|
BEGIN 00900100
|
|
TALLY : = 1 ; 00900200
|
|
EDITS := TALLY ; 00900300
|
|
JUMP OUT 3 TO XIT ; 00900400
|
|
END ; 00900500
|
|
SI := SI + 1))) ; 00900600
|
|
D (IF SC NEQ " " THEN 00900700
|
|
BEGIN 00900800
|
|
TALLY := 1 ; 00900900
|
|
EDITS := TALLY ; 00901000
|
|
JUMP OUT ; 00901100
|
|
END ; 00901200
|
|
SI := SI + 1) ; 00901300
|
|
XIT: 00901400
|
|
END EDITS ; 00901500
|
|
REAL L ; 00901600
|
|
IF CHANGETOG THEN 00901700
|
|
BEGIN 00901710
|
|
PARAMETER1 := STRINGIREPEAT DIV 2 ; 00901720
|
|
PARAMETER2 := STRINGIREPEAT - PARAMETER1 ; 00901730
|
|
PARAMETER3 := FULLLENGTH - STRINGILEFT ; 00901740
|
|
PARAMETER4 := MIN (PARAMETER3, 63) ; 00901750
|
|
END ; 00901760
|
|
WHILE N := (L := LL [AT]).S LEQ M DO 00901900
|
|
BEGIN 00902000
|
|
RDISC (AT, ZIPPY) ; 00902100
|
|
IF SCANTOG THEN 00902200
|
|
BEGIN 00902300
|
|
IF STRINGFOUND THEN 00902400
|
|
BEGIN 00902700
|
|
WRITEME (N, ZIPPY) ; 00902900
|
|
N := N + 1 ; 00902910
|
|
GO TO NEXT ; 00903000
|
|
END ; 00903100
|
|
END 00903700
|
|
ELSE IF CHANGETOG THEN 00903800
|
|
BEGIN 00903900
|
|
IF I := CHANGED (ZIPPY, IMAGE, STRINGI, STRINGJ, 00904000
|
|
STRING, STRINGILEFT, PARAMETER1, PARAMETER2, 00904100
|
|
PARAMETER3, PARAMETER4, STRINGI LSS STRINGJ, 00904200
|
|
STRINGID) = 1 THEN 00904300
|
|
BEGIN 00904500
|
|
RESETN := N ; 00904600
|
|
REWRITE: 00904700
|
|
IF ECHO THEN 00904800
|
|
WRITEME (N, IMAGE) ; 00904900
|
|
WDISC ; 00905000
|
|
END ELSE 00905100
|
|
IF I = 2 THEN 00905200
|
|
OVERFLOW: 00905250
|
|
ERROR (NEXT, 0, PARAMETER0, " OVRFLW") ; 00905300
|
|
END 00905400
|
|
ELSE 00905500
|
|
BEGIN 00905600
|
|
IF EDITS (RECORD, ZIPPY, IMAGE, HALFFULLLENGTH) THEN 00905700
|
|
GO TO OVERFLOW ; 00905800
|
|
GO TO REWRITE ; 00905900
|
|
END ; 00906000
|
|
INTERRUPT (1) ; 00906100
|
|
AT := L.T ; 00906110
|
|
END ; 00906200
|
|
IF SCANTOG THEN 00906300
|
|
ERRORX (0, "EOF NO ", "STRING.") ; 00906400
|
|
NEXT: 00906500
|
|
IF CHANGETOG THEN 00906600
|
|
N := RESETN ; 00906700
|
|
END SPECIAL ; 00906800
|
|
BOOLEAN COMPLEX ; 00906900
|
|
REAL L ; 00906910
|
|
IF COMPLEX := SCANTOG OR CHANGETOG OR EDITTOG THEN 00907000
|
|
GETSTRINGS ; 00907100
|
|
IF NUM1 AND (NUM2 OR EMPTY2 OR CHANGETOG) THEN 00907200
|
|
BEGIN 00907300
|
|
N := PARAMETER1 ; 00907400
|
|
IF NUM2 THEN 00907500
|
|
M := PARAMETER2 00907600
|
|
ELSE IF SCANTOG THEN 00907700
|
|
M := FINITY 00907800
|
|
ELSE M := N ; 00907900
|
|
END 00908000
|
|
ELSE IF NOT (EMPTY1 OR CHANGETOG) THEN 00908100
|
|
BEGIN 00908200
|
|
IF XFILE (12, 0, 2) LSS 2 THEN 00908300
|
|
GO TO NEXT ; 00908400
|
|
IF LOCKED OR NOT POSTING THEN 00908500
|
|
WAIT ((IF NUM3 AND NUM4 THEN 00908600
|
|
MIN (PARAMETER4, INPUT [5]) ELSE INPUT [5]) - 00908700
|
|
(IF NUM3 THEN PARAMETER3 ELSE 0), LOCKED) ; 00908800
|
|
EXTERNALFILE (LISTTYPE) ; 00908900
|
|
GO TO NEXT ; 00909000
|
|
END 00909100
|
|
ELSE 00909200
|
|
BEGIN 00909300
|
|
IF NOT COMPLEX THEN 00909400
|
|
BEGIN 00909500
|
|
AT := 0 ; 00909600
|
|
N := 1 ; 00909700
|
|
END ; 00909800
|
|
IF CHANGETOG THEN 00909900
|
|
M := N 00910000
|
|
ELSE 00910100
|
|
M := FINITY ; 00910200
|
|
END ; 00910300
|
|
OPENCHECK ; 00910400
|
|
IF COMPLEX THEN 00910500
|
|
WAIT (KOUNT (N, M, CLOCK), FALSE) ; 00910600
|
|
IF ITSOLD (N) THEN ; 00910700
|
|
IF COMPLEX THEN 00910900
|
|
SPECIAL (LISTTYPE, TEMPTOG EQV (IF CHANGETOG THEN CHANGEECHO 00911000
|
|
ELSE EDITECHO)) 00911050
|
|
ELSE 00911100
|
|
BEGIN 00911200
|
|
WHILE N := (L := LL [AT]).S LEQ M DO 00911300
|
|
BEGIN 00911310
|
|
WRITEAT ; 00911400
|
|
INTERRUPT (1) ; 00911410
|
|
AT := L.T ; 00911420
|
|
END ; 00911500
|
|
N := LL [L.F].S + INC ; 00911600
|
|
END ; 00911700
|
|
NEXT: 00911800
|
|
END LISTIT ; 00911900
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00912000
|
|
PROCEDURE EXECUTE ; 00950000
|
|
BEGIN 00950100
|
|
LABEL NEXT ; 00950200
|
|
INTEGER XSUB ; 00950300
|
|
REAL YSTART, 00950400
|
|
YLAST, 00950500
|
|
YFILETYPE, 00950600
|
|
YREPEAT, 00950700
|
|
YNCHRS ; 00950800
|
|
BOOLEAN VERBISEXECUTE ; 00950900
|
|
IF VERBISEXECUTE := PARAMETER0 = RSWD [0] THEN 00951000
|
|
IF PARAMETER1 = "LIBRARY" THEN 00951100
|
|
BEGIN 00951200
|
|
IF EMPTY2 THEN 00951300
|
|
ERROR (NEXT, 7, "MACRO=/", MACROLIBRARY) ; 00951400
|
|
IF NUM2 THEN 00951500
|
|
MACROLIBRARY := OCTDEC (PARAMETER2) 00951600
|
|
ELSE 00951700
|
|
MACROLIBRARY := PARAMETER2 ; 00951800
|
|
GO TO NEXT ; 00951900
|
|
END ELSE 00952000
|
|
IF PARAMETER1 = "ECHO " THEN 00952100
|
|
BEGIN 00952200
|
|
EXECUTEECHO := TOGGLE (EXECUTEECHO, 2) ; 00952300
|
|
GO TO NEXT ; 00952400
|
|
END ; 00952500
|
|
IF XDEX + 1 GEQ XMAX THEN 00952600
|
|
ERROR (NEXT, 0, PARAMETER0, " OVRFLW") ; 00952700
|
|
XSUB := (XDEX + 1) | 13 ; 00952800
|
|
YFILETYPE := DATA ; 00952900
|
|
IF NOT VERBISEXECUTE THEN 00953000
|
|
BEGIN 00953100
|
|
XPARAMETERS [0] := PARAMETER1 ; 00953200
|
|
XPARAMETERS [1] := PARAMETER2 ; 00953300
|
|
XPARAMETERS [2] := PARAMETER3 ; 00953400
|
|
XPARAMETERS [3] := PARAMETER4 ; 00953500
|
|
XPARAMETERS [4] := -"#000000" ; 00953600
|
|
YREPEAT := 1 ; 00953700
|
|
PARAMETER2 := INPUT [2] ; 00953800
|
|
PARAMETER1 := PARAMETER0 ; 00953900
|
|
YLAST := INPUT [5] + 1 ; 00954000
|
|
END ELSE 00954100
|
|
IF FILEOPEN AND (NUM1 OR EMPTY1) AND (NUM2 OR EMPTY2) THEN 00954200
|
|
BEGIN 00954300
|
|
IF NUM1 THEN 00954400
|
|
BEGIN 00954500
|
|
PARAMETER3 := PARAMETER1 ; 00954600
|
|
IF NUM2 THEN 00954700
|
|
PARAMETER4 := PARAMETER2 00954800
|
|
ELSE 00954900
|
|
PARAMETER4 := PARAMETER3 ; 00955000
|
|
END ELSE 00955100
|
|
BEGIN 00955200
|
|
PARAMETER3 := 1 ; 00955300
|
|
PARAMETER4 := INFINITY ; 00955400
|
|
END ; 00955500
|
|
PARAMETER1 := OCTDEC(XDEX+1+10|STATION.[14:4]+1000|STATION.[9:4]);00955600
|
|
PARAMETER2 := "#MACRO#" ; 00955700
|
|
IF YFILETYPE := XFILE (PARAMETER1, PARAMETER2, -1) = 7 THEN 00955800
|
|
BEGIN 00955900
|
|
READ (LIBRARY) ; 00956000
|
|
DETACH ; 00956100
|
|
CLOSE (LIBRARY, PURGE) ; 00956200
|
|
REATTACH ; 00956300
|
|
END ELSE 00956400
|
|
IF YFILETYPE GEQ 0 THEN 00956500
|
|
ERROR (NEXT, 4, PARAMETER1, PARAMETER2) ; 00956600
|
|
YLAST := KOUNT (PARAMETER3, PARAMETER4, -1) ; 00956700
|
|
I := SAVEFACTOR ; 00956710
|
|
FREEFILE (STATION) ; 00956800
|
|
THERMOFAX (SAVEFACTOR := 0, (YLAST + 14) DIV 15 | 15) ; 00956900
|
|
UNFREEFILE (STATION) ; 00957000
|
|
SAVEFACTOR := I ; 00957010
|
|
YFILETYPE := FILEINFO ; 00957100
|
|
END ELSE 00957200
|
|
BEGIN 00957300
|
|
IF XFILE (12, 0, 2) LSS 2 THEN 00957400
|
|
GO TO NEXT ; 00957500
|
|
YLAST := INPUT [5] + 1 ; 00957600
|
|
IF NUM3 THEN 00957700
|
|
BEGIN 00957800
|
|
IF YSTART := PARAMETER3 - 1 GTR YLAST THEN 00957900
|
|
ERROR (NEXT, 0, "USE REC", "ORD #S.") ; 00958000
|
|
IF NUM4 THEN 00958100
|
|
IF PARAMETER4 LSS YLAST THEN 00958200
|
|
YLAST := PARAMETER4 ; 00958300
|
|
END ; 00958400
|
|
END ; 00958500
|
|
IF XDEX LSS 0 THEN 00958600
|
|
XECHO := TEMPTOG EQV EXECUTEECHO ; 00958700
|
|
IF VERBISEXECUTE THEN 00958800
|
|
IF YREPEAT := GETPARAMETERS (63) = 0 THEN 00958900
|
|
GO TO NEXT ; 00959000
|
|
WAIT ((YLAST - YSTART) | YREPEAT | 3, FALSE) ; 00959100
|
|
IF MOREINPUT THEN 00959200
|
|
BEGIN 00959300
|
|
READ (IO [USER + MAXUSERS], 30, IMAGE [*]) ; 00959400
|
|
WRITE (IO [2|MAXUSERS+XMAX|USER+XDEX+1], 30, IMAGE [*]) ; 00959410
|
|
YNCHRS := NCHRS & 1[1:47:1] ; 00959500
|
|
MOREINPUT := FALSE ; 00959600
|
|
END ; 00959700
|
|
XDEX := XDEX + 1 ; 00959800
|
|
XN := XSTART := YSTART ; 00959900
|
|
XLAST := YLAST ; 00960000
|
|
XFILETYPE := YFILETYPE ; 00960100
|
|
XREPEAT := YREPEAT ; 00960200
|
|
XNCHRS := YNCHRS ; 00960300
|
|
XPREFIX := PARAMETER1 ; 00960400
|
|
XSUFFIX := PARAMETER2 ; 00960500
|
|
NEXT: 00960600
|
|
END EXECUTE ; 00960700
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00970000
|
|
PROCEDURE XVERBS (K) ; VALUE K ; INTEGER K ; 00970100
|
|
BEGIN 00970200
|
|
DEFINE 00970300
|
|
REPLACE = 00970400
|
|
BEGIN 00970500
|
|
IF NUM2 OR EMPTY2 THEN 00970600
|
|
ERROR (NEXT, 0, PARAMETER2, " IS BAD") ; 00970700
|
|
M := -1 ; 00970800
|
|
FOR I := 0 STEP 1 UNTIL RSWDM DO 00970900
|
|
IF PARAMETER0 := RSWD [I] = PARAMETER1 THEN 00971000
|
|
M := I 00971100
|
|
ELSE IF PARAMETER0 = PARAMETER2 THEN 00971200
|
|
ERROR (NEXT, 0, "DUP ", PARAMETER2) ; 00971300
|
|
IF M LSS 0 THEN 00971400
|
|
ERROR (NEXT, 0, "NO VERB", PARAMETER1) ; 00971500
|
|
RSWD [M] := PARAMETER2 ; 00971600
|
|
END#, 00971700
|
|
DELETE = 00971800
|
|
BEGIN 00971900
|
|
OPENCHECK ; 00972000
|
|
IF NOT NUM1 THEN 00972100
|
|
PARAMETER1 := N ; 00972200
|
|
INORDER := READONLYFILE ; 00972300
|
|
IF NOT NUM2 OR PARAMETER2 LSS PARAMETER1 THEN 00972400
|
|
PARAMETER2 := PARAMETER1 ; 00972500
|
|
I := LL [LOC (PARAMETER1)] . F ; 00972600
|
|
IF ITSOLD (PARAMETER2) THEN 00972700
|
|
AT := LL [AT] . T ; 00972800
|
|
LL [I] . T := AT ; 00972900
|
|
MODIFY (I) ; 00973000
|
|
LL [AT] . F := I ; 00973100
|
|
MODIFY (AT) ; 00973200
|
|
N := LL [I] .S + INC ; 00973300
|
|
END#, 00973400
|
|
PRINTORPUNCH = 00973500
|
|
BEGIN 00973600
|
|
OPENCHECK ; 00973700
|
|
IF NOT NUM3 THEN 00973800
|
|
PARAMETER3 := 1 ; 00973900
|
|
IF NOT NUM4 THEN 00974000
|
|
PARAMETER4 := FINITY ; 00974100
|
|
THERMOFAX (K, 0) ; 00974200
|
|
END# ; 00974300
|
|
LABEL NEXT ; 00974400
|
|
IF BOOLEAN (K) THEN 00974500
|
|
IF K = 1 THEN 00974600
|
|
REPLACE 00974700
|
|
ELSE 00974800
|
|
DELETE 00974900
|
|
ELSE IF K = 0 THEN 00975000
|
|
CLOSEMYFILE 00975100
|
|
ELSE 00975200
|
|
PRINTORPUNCH ; 00975300
|
|
NEXT: 00975400
|
|
END XVERBS ; 00975500
|
|
DEFINE CLOSEFILE = XVERBS (0)#, 00975600
|
|
REPLACE = XVERBS (1)#, 00975700
|
|
PRINT = XVERBS (2)#, 00975800
|
|
DELETE = XVERBS (3)#, 00975900
|
|
PUNCH = XVERBS (4)# ; 00976000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01023000
|
|
PROCEDURE MAIL ; 01023500
|
|
BEGIN 01024000
|
|
LABEL NEXT ; 01024100
|
|
BOOLEAN STREAM PROCEDURE POSTFROM (SENDER, MESSAGE, Z) ; 01024500
|
|
BEGIN 01025000
|
|
LABEL OK, 01025500
|
|
EXIT ; 01026000
|
|
SI := Z ; 01026500
|
|
DI := Z ; 01027000
|
|
DS := 8 LIT " " ; 01027500
|
|
DS := 8 WDS ; 01028000
|
|
SI := MESSAGE ; 01028500
|
|
20 (IF SC = ":" THEN 01029000
|
|
JUMP OUT TO OK ; 01029500
|
|
SI := SI + 1) ; 01030000
|
|
TALLY := 1 ; 01030500
|
|
POSTFROM := TALLY ; 01031000
|
|
GO TO EXIT ; 01031500
|
|
OK: 01032000
|
|
SI := SI + 1 ; 01032500
|
|
DI := Z ; 01033000
|
|
63 (IF SC = ";" THEN 01033500
|
|
JUMP OUT ; 01034000
|
|
DS := 1 CHR) ; 01034500
|
|
DS := 1 LIT "-" ; 01035000
|
|
SI := SENDER ; 01035500
|
|
SI := SI + 1 ; 01036000
|
|
DS := 7 CHR ; 01036500
|
|
EXIT: 01037000
|
|
END POSTFROM ; 01037500
|
|
IF NUM2 THEN 01038000
|
|
PARAMETER2 := OCTDEC (PARAMETER2) ; 01038500
|
|
I := XFILE ("MAIL % ", IF EMPTY1 THEN USERCODE ELSE PARAMETER2, 01039000
|
|
-1) ; 01039500
|
|
IF EMPTY1 THEN 01040500
|
|
BEGIN 01041000
|
|
IF I LSS 7 THEN 01041500
|
|
ERROR (NEXT, 0, "SORRY, ", "NO MAIL") ; 01042000
|
|
PARAMETER1 := "MAIL % " ; 01042500
|
|
NUM1 := FALSE ; 01043500
|
|
PARAMETER2 := USERCODE ; 01044000
|
|
NUM2 := FALSE ; 01045000
|
|
NUM3 := FALSE ; 01045500
|
|
LISTIT (17) ;% POSTING AND QUICK 01046000
|
|
END 01047000
|
|
ELSE 01047500
|
|
BEGIN 01048000
|
|
IF PARAMETER1 NEQ "TO " THEN 01048500
|
|
ERROR (NEXT, 0, "MISSING", " TO. ") ; 01049000
|
|
IF POSTFROM (USERCODE, IMAGE, RECORD) THEN 01049500
|
|
ERROR (NEXT, 0, "MISSING", " COLON.") ; 01050000
|
|
IF I LSS 0 THEN 01050500
|
|
BEGIN 01051000
|
|
FREEFILE (STATION) ; 01051500
|
|
PARAMETER1 := "MAIL % " ; 01052000
|
|
CREATEFILE (15) ; 01053000
|
|
UNFREEFILE (STATION) ; 01053500
|
|
END 01054000
|
|
ELSE IF I GTR 2 THEN 01054500
|
|
BEGIN 01055000
|
|
WRITE (LIBRARY [INPUT [5] + 1], 10, RECORD [*]) ; 01055500
|
|
CLOSE (LIBRARY) ; 01056000
|
|
END ELSE 01056500
|
|
ERRORX (1, "MAIL % ", PARAMETER2) ; 01056600
|
|
END ; 01057500
|
|
NEXT: 01058000
|
|
END POSTMAN ; 01058500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01059000
|
|
PROCEDURE COPY ; 01059500
|
|
BEGIN 01060000
|
|
BOOLEAN B, 01060100
|
|
MERGE ; 01060200
|
|
LABEL NEXT ; 01060500
|
|
IF PARAMETER1 = "OVERITE" THEN 01060550
|
|
BEGIN 01060600
|
|
COPYCLOBBER := TOGGLE (COPYCLOBBER, 2) ; 01060700
|
|
GO TO NEXT ; 01060850
|
|
END ; 01060900
|
|
READONLYCHECK ; 01060950
|
|
IF XFILE (12, 0, 2) LSS 2 THEN 01061500
|
|
GO TO NEXT ; 01062000
|
|
IF INPUT [3] NEQ 10 OR INPUT [4] MOD 30 NEQ 0 THEN 01063500
|
|
ERROR (NEXT, 3, PARAMETER1, PARAMETER2) ; 01064000
|
|
IF NUM3 THEN 01064500
|
|
BEGIN 01065000
|
|
I := PARAMETER3 - 1 ; 01065500
|
|
IF I GTR INPUT [5] THEN 01066000
|
|
ERROR (NEXT, 0, "USE REC", "ORD #S.") ; 01066500
|
|
IF NUM4 THEN 01067000
|
|
M := MIN (PARAMETER4 - 1, INPUT [5]) 01067500
|
|
ELSE M := I ; 01070000
|
|
END 01070500
|
|
ELSE 01071000
|
|
BEGIN 01071500
|
|
I := 0 ; 01072000
|
|
M := INPUT [5] ; 01072500
|
|
IF DATAFILE AND MERGE := PARAMETER3 = "MERGE " THEN 01072600
|
|
ERROR (NEXT, 5, " TYPE: ", PARAMETER3) ; 01072700
|
|
END ; 01073000
|
|
WAIT (M - I, FALSE) ; 01073500
|
|
READ SEEK (LIBRARY [I]) ; 01075000
|
|
B := NOT (COPYCLOBBER EQV TEMPTOG) ; 01075100
|
|
FOR I := I STEP 1 UNTIL M DO 01075500
|
|
BEGIN 01076000
|
|
READ (LIBRARY, 10, IMAGE [*]) ; 01076100
|
|
IF MERGE THEN 01076200
|
|
N := IF COBOLFILE THEN DEC (IMAGE [0], 6) 01076300
|
|
ELSE DEC (IMAGE [9], 8) ; 01076400
|
|
IF ITSOLD (N) AND B THEN 01076500
|
|
ERROR (NEXT, 0, "OVERITE", " IS OFF") ; 01076600
|
|
WDISC ; 01077000
|
|
INTERUPT (1, 1, I + 1) ; 01078000
|
|
END ; 01078500
|
|
NEXT: 01079500
|
|
CLOSE (LIBRARY) ; 01079600
|
|
END ; 01080000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01086500
|
|
PROCEDURE ZIPIT ; 01087000
|
|
BEGIN 01087500
|
|
ALPHA STREAM PROCEDURE ENDCHECK (S) ; 01087550
|
|
BEGIN 01087600
|
|
SI := S ; 01087650
|
|
IF SC = "?" THEN 01087700
|
|
BEGIN 01087710
|
|
DI := LOC ENDCHECK ; 01087750
|
|
DI := DI + 3 ; 01087800
|
|
DS := CHR ; 01087810
|
|
63 (IF SC NEQ " " THEN JUMP OUT ; 01087850
|
|
SI := SI + 1) ; 01087900
|
|
4 (IF SC = ALPHA THEN DS := 1 CHR ELSE JUMP OUT) ; 01087950
|
|
END ; 01087960
|
|
END ENDCHECK ; 01088000
|
|
LABEL NEXT ; 01088050
|
|
READONLYCHECK ; 01088100
|
|
RDISC (FIRST . T, RECORD) ; 01089500
|
|
IF ENDCHECK (RECORD) = 0 THEN 01090000
|
|
ERROR (NEXT, 0, "INV FIR", "ST CARD") ; 01090500
|
|
RDISC (LAST . F, IMAGE) ; 01092000
|
|
IF ENDCHECK (IMAGE) NEQ "?END0" THEN 01093100
|
|
ERROR (NEXT, 0, "NO END ", "CARD. ") ; 01093200
|
|
WAIT (KOUNT (1, FINITY, CLOCK) | 2, XLOCKED) ; 01095500
|
|
FILL LIBRARY WITH PREFIX, SUFFIX ; 01096000
|
|
READ SEEK (LIBRARY [M := (AT := FIRST.T) - 2]) ; 01096500
|
|
I := 0 ; 01096600
|
|
WHILE AT := LL [AT] . T NEQ 1 DO 01097000
|
|
BEGIN 01097500
|
|
RDISC (AT, IMAGE) ; 01098000
|
|
I := I + 1 ; 01098100
|
|
IF ENDCHECK (IMAGE) NEQ 0 THEN 01098500
|
|
BEGIN 01099000
|
|
RECORD [9] := I ; 01100000
|
|
WRITE (LIBRARY, 10, RECORD [*]) ; 01100500
|
|
IF M + 1 NEQ M := AT - 2 THEN 01100510
|
|
READ SEEK (LIBRARY [M]) ; 01100600
|
|
READ (IMAGE [*], 10, RECORD [*]) ; 01101600
|
|
END ; 01102000
|
|
INTERUPT (1, 2, M) ; 01102500
|
|
END ; 01103000
|
|
IMAGE [9] := I ; 01104000
|
|
WRITE (LIBRARY, 10, IMAGE [*]) ; 01104500
|
|
CLOSE (LIBRARY) ; 01104600
|
|
IF NOT EMPTY1 THEN 01105000
|
|
BEGIN 01105500
|
|
PARAMETER3 := 1 ; 01106100
|
|
PARAMETER4 := FINITY ; 01106200
|
|
THERMOFAX (8, (D + 14) DIV 15 | 15) ; 01107500
|
|
END 01108500
|
|
ELSE 01109000
|
|
BEGIN 01109500
|
|
FILEINFO := DATA ; 01109600
|
|
CLOSEFILE ; 01110000
|
|
ZIP WITH DISC ; 01111000
|
|
END ; 01111500
|
|
NEXT: 01111600
|
|
CLOSE (LIBRARY) ; 01111700
|
|
END ; 01112000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01113000
|
|
DEFINE CLOSEIT = 01113500
|
|
BEGIN 01113600
|
|
OPENCHECK ; 01113700
|
|
CLOSEFILE ; 01114000
|
|
END# ; 01116500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01117000
|
|
PROCEDURE OPEN ; 01117500
|
|
BEGIN 01118000
|
|
LABEL NEXT ; 01118500
|
|
IF FILEOPEN THEN CLOSEFILE ; 01119000
|
|
TABAMOUNT := 0 ; 01119500
|
|
PREWHERE := - 1 ; 01121000
|
|
IF FILEINFO := FILETYPE (PARAMETER3) = 0 THEN 01122000
|
|
ERROR (NEXT, 5, " TYPE: ", PARAMETER3) ; 01126000
|
|
I := XFILE (12, 0, -1) ; 01126100
|
|
FILL DISC WITH PREFIX := PARAMETER1, SUFFIX := PARAMETER2 ; 01126200
|
|
IF PARAMETER4 = "NEW " THEN 01126500
|
|
BEGIN 01127000
|
|
IF I GEQ 0 THEN 01128500
|
|
ERROR (NEXT, 4, PARAMETER1, PARAMETER2) ; 01129000
|
|
CREATEFILE (450) ; 01130000
|
|
FILEACCESS := 7 ; 01130500
|
|
FIRST := D := 1 ; 01130650
|
|
LAST := 1 & INFINITY [SF] ; 01130700
|
|
MODIFIED := TRUE ; 01130750
|
|
N := 0 ; 01130800
|
|
INORDER := FALSE ; 01130850
|
|
GO TO NEXT ; 01130900
|
|
END ; 01131000
|
|
IF I LEQ 0 THEN 01133500
|
|
ERROR (NEXT, 1 - I, PARAMETER1, PARAMETER2) ; 01134000
|
|
IF INPUT [3] NEQ 10 OR INPUT [4] MOD 30 NEQ 0 THEN 01134500
|
|
ERROR (NEXT, 3, PARAMETER1, PARAMETER2) ; 01135000
|
|
IF INPUT [6] NEQ 0 THEN 01135500
|
|
ERROR (NEXT, 0, "FILE IN", " USE. ") ; 01136000
|
|
IF D := INPUT [5] + 2 GTR MAXFILELENGTH THEN 01146000
|
|
ERROR (NEXT, 0, "FILE TO", " LONG. ") ; 01147500
|
|
IF PARAMETER4 = "OLD " OR DATAFILE THEN 01155000
|
|
BEGIN 01155500
|
|
INORDER := DATAFILE OR READONLYFILE ; 01156000
|
|
N := 0 ; 01157500
|
|
FOR AT := 2 STEP 1 UNTIL D DO 01157600
|
|
LL [AT] := (AT+1) & (N:=N+INC)[SF] & (AT-1)[FF] ; 01157700
|
|
END ELSE 01158000
|
|
BEGIN 01158500
|
|
WAIT (D, FALSE) ; 01158600
|
|
M := 0 ; 01159000
|
|
FOR AT := 2 STEP 1 UNTIL D DO 01160000
|
|
BEGIN 01160500
|
|
READ (LIBRARY, 10, IMAGE [*]) ; 01161000
|
|
N := IF COBOLFILE THEN DEC (IMAGE [0], 6) 01161500
|
|
ELSE DEC (IMAGE [9], 8) ; 01162000
|
|
IF M GTR N THEN 01164500
|
|
ERROR (NEXT, 0, "SEQERR ", OCTDEX (M)) ; 01166000
|
|
LL [AT] := (AT+1) & (M:=N)[SF] & (AT-1)[FF] ; 01167500
|
|
INTERUPT (1, 2, AT - 1) ; 01167600
|
|
END ; 01168000
|
|
END ; 01168100
|
|
FILEACCESS := I ; 01168200
|
|
MODIFIED := NOT FALSE ; 01168210
|
|
LL [D] . T := 1 ; 01168220
|
|
FIRST := 2 ; 01168230
|
|
LAST := 1 & INFINITY [SF] & D [FF] ; 01168240
|
|
LL [2] . F := 0 ; 01168250
|
|
NEXT: 01168500
|
|
CLOSE (LIBRARY) ; 01168600
|
|
N := N + INC ; 01169000
|
|
AT := 0 ; 01169100
|
|
IF READONLYFILE THEN 01169500
|
|
ERRORX (7, "READ ON", "LY FILE") ; 01170000
|
|
END ; 01171000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01171500
|
|
DEFINE INCREMENT = 01172000
|
|
BEGIN 01172100
|
|
IF NOT NUM1 THEN 01172500
|
|
ERRORX (7, PARAMETER0, OCTDEX (INC)) 01173000
|
|
ELSE INC := PARAMETER1 ; 01173500
|
|
END# ; 01174000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01174500
|
|
PROCEDURE RESEQ ; 01175000
|
|
BEGIN 01175500
|
|
REAL L ; 01175600
|
|
LABEL NEXT ; 01176000
|
|
OPENCHECK ; 01176100
|
|
IF NUM2 THEN 01176500
|
|
BEGIN 01177000
|
|
IF NOT NUM1 THEN 01177500
|
|
ERROR (NEXT, 0, PARAMETER1, "INVALID") ; 01178000
|
|
IF NUM4 THEN 01178500
|
|
INC := PARAMETER4 ; 01179000
|
|
IF NUM3 THEN 01179500
|
|
M := PARAMETER3 - INC 01180000
|
|
ELSE M := PARAMETER1 - INC ; 01180500
|
|
IF M + INC | KOUNT (PARAMETER1,PARAMETER2,-1) GEQ LL [AT].S THEN01180600
|
|
ERROR (NEXT, 0, PARAMETER0, " ERROR.") ; 01180700
|
|
AT := LOC (PARAMETER1) ; 01181000
|
|
IF M + INC LEQ LL [LL [AT].F].S THEN 01181010
|
|
ERROR (NEXT, 0, PARAMETER0, " ERROR.") ; 01181020
|
|
N := M ; 01181500
|
|
WHILE (L := LL [AT]).S LEQ PARAMETER2 DO 01182000
|
|
BEGIN 01182500
|
|
LL [AT] . S := N := N + INC ; 01183000
|
|
MODIFY (AT) ; 01183500
|
|
AT := L.T ; 01183600
|
|
END ; 01184000
|
|
END 01185500
|
|
ELSE 01186000
|
|
BEGIN 01186500
|
|
IF NUM1 THEN 01187000
|
|
INC := PARAMETER1 ; ; 01187500
|
|
IF INC | KOUNT (1, FINITY, -1) GEQ INFINITY THEN 01187600
|
|
ERROR (NEXT, 0, PARAMETER0, " ERROR.") ; 01187700
|
|
N := 0 ; 01188000
|
|
AT := 0 ; 01188500
|
|
WHILE AT := LL [AT] . T NEQ 1 DO 01189000
|
|
LL [AT] . S := N := N + INC ; 01189500
|
|
MODIFIED := NOT FALSE ; 01189600
|
|
END ; 01190000
|
|
N := N + INC ; 01190500
|
|
IF NOT DATAFILE THEN 01191000
|
|
INORDER := READONLYFILE ; 01191500
|
|
NEXT: 01192000
|
|
END RESEQ ; 01192500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01193000
|
|
DEFINE TAB = 01193500
|
|
BEGIN 01193600
|
|
IF NOT NUM1 THEN 01194000
|
|
BEGIN 01194010
|
|
IF NOT EMPTY1 THEN 01194100
|
|
TABON := TOGGLE (TABON, 1) 01194300
|
|
ELSE 01194450
|
|
ERRORX (7, PARAMETER0, ONOFF (TABON) & 01194500
|
|
OCTDEX (IF COBOLFILE THEN TABAMOUNT + 7 ELSE TABAMOUNT + 1) 01194600
|
|
[36:36:12]) ; 01194700
|
|
END ELSE 01194800
|
|
BEGIN 01194900
|
|
IF RELATIVENUMBER.[2:2] NEQ 0 THEN 01194910
|
|
PARAMETER1 := TABAMOUNT + 1 + 01194920
|
|
(RELATIVENUMBER & RELATIVENUMBER[1:3:3]) 01194930
|
|
ELSE IF COBOLFILE THEN 01194940
|
|
PARAMETER1 := PARAMETER1 - 6 ; 01194950
|
|
IF TABAMOUNT := PARAMETER1 GTR 55 THEN 01195000
|
|
TABAMOUNT := 55 ; 01195500
|
|
IF TABAMOUNT := TABAMOUNT - 1 LSS 0 THEN 01197000
|
|
TABAMOUNT := 0 ; 01197500
|
|
END ; 01197600
|
|
END#, 01198000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01198500
|
|
SAVEIT = 01199000
|
|
BEGIN 01199100
|
|
IF NOT NUM1 THEN 01199500
|
|
ERRORX (7, PARAMETER0, OCTDEX (SAVEFACTOR)) 01200000
|
|
ELSE SAVEFACTOR := PARAMETER1 ; 01200500
|
|
END # ; 01201000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01211500
|
|
PROCEDURE COMPILE ; 01212000
|
|
BEGIN 01212500
|
|
LABEL NEXT ; 01213000
|
|
OPENCHECK ; 01213100
|
|
IF EMPTY2 THEN 01213500
|
|
ERROR (NEXT, 3, PARAMETER1, PARAMETER2) ; 01214000
|
|
IF DATAFILE AND EMPTY3 THEN 01216000
|
|
ERROR (NEXT, 3, PREFIX, SUFFIX) ; 01216500
|
|
IF NOT EMPTY3 THEN 01217000
|
|
IF XFILE (PARAMETER3, "DISK ", 2) LSS 2 THEN 01218000
|
|
GO TO NEXT ; 01218500
|
|
IF PARAMETER0 := XFILE ("LINE ", USERCODE, -1) = 7 THEN 01221500
|
|
BEGIN 01223000
|
|
READ (LIBRARY) ; 01223500
|
|
DETACH ; 01224000
|
|
CLOSE (LIBRARY, PURGE) ; 01224500
|
|
REATTACH ; 01225000
|
|
END ELSE 01225500
|
|
IF PARAMETER0 GEQ 0 THEN 01226000
|
|
ERROR (NEXT, 4, "LINE ", USERCODE) ; 01226500
|
|
IF XFILE (12, 0, -1) GEQ 0 THEN 01227000
|
|
ERROR (NEXT, 4, PARAMETER1, PARAMETER2) ; 01228500
|
|
CLOSEFILE ; 01229000
|
|
IF EMPTY3 THEN 01230000
|
|
IF COMPILER = ALGOL THEN 01230500
|
|
PARAMETER3 := "ALGOL " 01231000
|
|
ELSE IF COMPILER = FORTRAN THEN 01231500
|
|
PARAMETER3 := "FORTRAN" 01232000
|
|
ELSE IF COMPILER = XALGOL THEN 01232500
|
|
PARAMETER3 := "XALGOL " 01233000
|
|
ELSE IF COMPILER = BASIC THEN 01233500
|
|
PARAMETER3 := "BASIC " 01234000
|
|
ELSE 01234500
|
|
PARAMETER3 := "COBOL " ; 01235000
|
|
WRITE (ZIPPY [*], ZIPPER, PARAMETER1.[6:6], 01238000
|
|
PARAMETER1, PARAMETER2.[6:6], PARAMETER2, PARAMETER3.[6:6], 01238500
|
|
PARAMETER3, PREFIX.[6:6], PREFIX, SUFFIX.[6:6], SUFFIX, 01239000
|
|
USERCODE . [6 : 6], USERCODE) ; 01239500
|
|
ZIP WITH ZIPPY [*] ; 01240000
|
|
NEXT: 01242000
|
|
END COMPILE ; 01242500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01243000
|
|
PROCEDURE DITTO ; 01243500
|
|
BEGIN 01244000
|
|
BOOLEAN B ; 01244100
|
|
REAL L ; 01244200
|
|
PROCEDURE LINK (X, Y) ; VALUE X, Y ; INTEGER X, Y ; 01244300
|
|
BEGIN 01244310
|
|
LL [X].T := Y ; 01244320
|
|
MODIFY (X) ; 01244330
|
|
LL [Y].F := X ; 01244340
|
|
MODIFY (Y) ; 01244350
|
|
END LINK ; 01244360
|
|
LABEL NEXT ; 01244500
|
|
IF PARAMETER1 = "OVERITE" THEN 01244550
|
|
BEGIN 01244600
|
|
DITTOCLOBBER := TOGGLE (DITTOCLOBBER, 2) ; 01244700
|
|
GO TO NEXT ; 01244850
|
|
END ; 01244900
|
|
READONLYCHECK ; 01245000
|
|
IF NOT NUM1 THEN 01246000
|
|
ERROR (NEXT, 0, PARAMETER0, " ERROR.") ; 01246500
|
|
IF PARAMETER2 = "MOVE " OR PARAMETER3 = "MOVE " THEN 01246510
|
|
BEGIN 01246520
|
|
IF NOT NUM2 THEN 01246530
|
|
PARAMETER2 := PARAMETER1 ; 01246540
|
|
B := ITSOLD (N) ; 01246550
|
|
PARAMETER4 := LL [PARAMETER3 := AT] ; 01246560
|
|
M := LL [I := LOC (PARAMETER1)].F ; 01246570
|
|
IF PARAMETER0 := KOUNT (PARAMETER1,PARAMETER2,-1) - 1 LSS 0 THEN01246580
|
|
GO TO NEXT ; 01246590
|
|
IF ITSOLD (PARAMETER2) THEN 01246600
|
|
L := LL [AT].T 01246610
|
|
ELSE 01246620
|
|
AT := LL [L := AT].F ; 01246630
|
|
IF (B AND B := LL [M].S GEQ N OR N GEQ LL [L].S) OR 01246640
|
|
N+INC|PARAMETER0 GEQ (IF B THEN PARAMETER4 ELSE LL [L]).S THEN01246650
|
|
ERROR (NEXT, 0, "NO ROOM", ": MOVE ") ; 01246660
|
|
IF B THEN 01246670
|
|
BEGIN 01246680
|
|
LINK (M, L) ; 01246690
|
|
LINK (AT, PARAMETER3) ; 01246700
|
|
LINK (PARAMETER4.F, I) ; 01246710
|
|
END ELSE 01246720
|
|
PARAMETER3 := L ; 01246730
|
|
DO BEGIN 01246740
|
|
LL [I].S := N ; 01246750
|
|
N := N + INC ; 01246760
|
|
MODIFY (I) ; 01246770
|
|
END UNTIL I := LL [I].T = PARAMETER3 ; 01246780
|
|
INORDER := FALSE ; 01246790
|
|
GO TO NEXT ; 01246800
|
|
END ; 01246810
|
|
CLOSE (DISC) ; 01247000
|
|
PREWHERE := PARAMETER3 := -1 ; 01247100
|
|
IF NUM2 THEN 01247500
|
|
WAIT (KOUNT (PARAMETER1, PARAMETER2, CLOCK), FALSE) 01248500
|
|
ELSE PARAMETER2 := PARAMETER1 ; 01250000
|
|
FILL LIBRARY WITH PREFIX, SUFFIX ; 01250500
|
|
I := LOC (PARAMETER1) ; 01251600
|
|
M := D ; 01252000
|
|
B := NOT (DITTOCLOBBER EQV TEMPTOG) ; 01252100
|
|
WHILE (L := LL [I]).S LEQ PARAMETER2 AND I LEQ M DO 01252500
|
|
BEGIN 01253500
|
|
IF PARAMETER3 + 1 NEQ PARAMETER3 := I THEN 01254000
|
|
READ SEEK (LIBRARY [I - 2]) ; 01254500
|
|
IF ITSOLD (N) AND B THEN 01255000
|
|
ERROR (NEXT, 0, "OVERITE", " IS OFF") ; 01255500
|
|
I := L.T ; 01256000
|
|
READ (LIBRARY, 10, IMAGE [*]) ; 01256500
|
|
WDISC ; 01257000
|
|
INTERUPT (1, 2, I - 2) ; 01257500
|
|
END ; 01258000
|
|
NEXT: 01259500
|
|
CLOSE (LIBRARY) ; 01260000
|
|
END DITTO ; 01261000
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01261500
|
|
PROCEDURE REMOVE ; 01262000
|
|
BEGIN 01262500
|
|
LABEL NEXT ; 01263000
|
|
IF EMPTY2 AND PARAMETER1 = "LISTING" THEN 01263100
|
|
BEGIN 01263200
|
|
PARAMETER1 := "LINE " ; 01263300
|
|
PARAMETER2 := USERCODE ; 01263400
|
|
END ; 01263500
|
|
IF XFILE (12, 0, 4) LSS 4 THEN 01263600
|
|
GO TO NEXT ; 01263700
|
|
IF PARAMETER1 = PREFIX THEN 01264000
|
|
IF PARAMETER2 = SUFFIX AND READWRITEFILE THEN 01264500
|
|
BEGIN 01265000
|
|
READ (DISC [0]) ; 01265500
|
|
DETACH ; 01266000
|
|
CLOSE (DISC, PURGE) ; 01266500
|
|
REATTACH ; 01267500
|
|
FILEACCESS := 0 ; 01268000
|
|
INORDER := TRUE ; 01268500
|
|
GO TO NEXT ; 01269000
|
|
END ; 01269500
|
|
IF INPUT [6] NEQ 0 THEN 01273000
|
|
ERROR (NEXT, 0, "FILE IN", " USE. ") ; 01273500
|
|
READ (LIBRARY) ; 01274000
|
|
DETACH ; 01274500
|
|
CLOSE (LIBRARY, PURGE) ; 01275000
|
|
REATTACH ; 01275500
|
|
NEXT: 01276000
|
|
END REMOVE ; 01276500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01277000
|
|
PROCEDURE LISTING ; 01277200
|
|
BEGIN 01277400
|
|
BOOLEAN LOCKED ; 01277500
|
|
INTEGER P5 ; 01277510
|
|
LABEL NEXT ; 01277600
|
|
FILE LINE 15 (2, 15) ; 01277800
|
|
FILE FEEDBACK DISK SERIAL (2, 15, 30) ; 01278000
|
|
REAL STREAM PROCEDURE READZ (Z, SKP, A, N) ; 01278200
|
|
VALUE SKP, A, N ; 01278210
|
|
BEGIN 01278220
|
|
LABEL EXIT ; 01278230
|
|
SI := Z ; 01278240
|
|
SI := SI + SKP ; 01278250
|
|
DI := LOC READZ ; 01278260
|
|
A (DI := DI + 8 ; DI := DI - N ; DS := N CHR ; JUMP OUT TO EXIT) ; 01278270
|
|
DS := N OCT ; 01278280
|
|
EXIT: 01278290
|
|
END READZ ; 01278300
|
|
IF XFILE ("LINE ", USERCODE, 1) LSS 1 THEN 01278400
|
|
GO TO NEXT ; 01278600
|
|
IF NOT EMPTY1 THEN 01279200
|
|
IF I := FILETYPE (PARAMETER1) = 0 OR I = DATA THEN 01279400
|
|
ERROR (NEXT, 5, "TYPE: ", PARAMETER1) ; 01281600
|
|
WAIT (INPUT [5], YLOCKED) ; 01281800
|
|
YLOCKED := LOCKED := TRUE ; 01282000
|
|
FILL FEEDBACK WITH "LINE ", USERCODE ; 01282200
|
|
IF NUM2 AND NUM3 AND NUM4 THEN 01282400
|
|
BEGIN 01282600
|
|
PARAMETER1 := 1 ; 01282800
|
|
WRITESEGMENT ; 01283200
|
|
PARAMETER0 := IF I=FORTRAN THEN 10 ELSE REAL(I GEQ ALGOL)+12 ; 01283300
|
|
P5 := IF I GEQ ALGOL THEN PARAMETER0 - 1 ELSE 0 ; 01283310
|
|
END 01283600
|
|
ELSE IF PARAMETER2.[6:30] = "ERROR" OR PARAMETER2 01283800
|
|
= "SYNTAX " THEN 01284000
|
|
BEGIN 01284100
|
|
PARAMETER1 := 2 ; 01284200
|
|
P5 := IF I=FORTRAN THEN 9 ELSE 12 ; 01284300
|
|
END 01284310
|
|
ELSE IF EMPTY2 THEN 01284400
|
|
BEGIN 01284600
|
|
FILL LINE WITH "LINE ", USERCODE ; 01284800
|
|
DETACH ; 01285000
|
|
WRITE (LINE) ; 01285200
|
|
REATTACH ; 01285400
|
|
PARAMETER1 := 3 ; 01285600
|
|
END 01285800
|
|
ELSE 01286000
|
|
ERROR (NEXT, 0, PARAMETER0, " ERROR.") ; 01286200
|
|
DO BEGIN 01286400
|
|
READ (FEEDBACK, 15, ZIPPY [*]) [NEXT] ; 01287000
|
|
IF PARAMETER1 = 1 THEN 01287200
|
|
BEGIN 01287400
|
|
IF I = FORTRAN THEN 01287600
|
|
BEGIN 01287800
|
|
IF N := READZ (ZIPPY [11], 4, 1, 4) NEQ "LONG" THEN 01288000
|
|
IF N := READZ (ZIPPY [11], 3, 0, 4) NEQ 0 THEN 01288200
|
|
M := N ; 01288400
|
|
END 01288800
|
|
ELSE IF I GEQ ALGOL THEN 01289000
|
|
BEGIN 01289200
|
|
IF N := READZ (ZIPPY [14], 4, 0, 4) NEQ 0 THEN 01289400
|
|
M := N ; 01289600
|
|
END 01289800
|
|
ELSE M := READZ (ZIPPY [12], N := 0, 0, 4) ; 01293000
|
|
IF M = PARAMETER2 AND N = 0 THEN 01293200
|
|
BEGIN 01293400
|
|
N := READZ (ZIPPY [PARAMETER0], REAL (I=COBOL) + 4, 0, 4) ; 01293600
|
|
IF N GTR PARAMETER4 THEN 01294600
|
|
GO TO NEXT ; 01294800
|
|
IF PARAMETER3 LEQ N THEN 01295000
|
|
BEGIN 01295200
|
|
PARAMETER3 := N ; 01295400
|
|
N := READZ (ZIPPY [P5], IF I=COBOL THEN 3 ELSE 0, 0, 8) ; 01295600
|
|
WRITESEQ ; 01296600
|
|
WRITERELADDR ; 01297000
|
|
END ; 01297200
|
|
END ; 01297400
|
|
END 01297600
|
|
ELSE IF PARAMETER1 = 2 THEN 01297800
|
|
BEGIN 01298000
|
|
IF I = COBOL THEN 01298200
|
|
BEGIN 01298400
|
|
M := READZ (ZIPPY [0], 0, 1, 1) ; 01298600
|
|
IF M = " " OR M = "[" THEN 01298800
|
|
M := READZ (ZIPPY [0], 5, 0, 6) 01299000
|
|
ELSE M := 0 ; 01299200
|
|
END 01299400
|
|
ELSE M := READZ (ZIPPY [P5], 0, 0, 8) ; 01300000
|
|
IF M = 0 AND N GTR 0 THEN 01300200
|
|
BEGIN 01301200
|
|
WRITESEQ ; 01301600
|
|
WRITEROW (ZIPPY, TRUE, DATA) ; 01301800
|
|
END ELSE N := M ; 01302000
|
|
END 01302200
|
|
ELSE 01302400
|
|
WRITE (LINE [DBL], 15, ZIPPY [*]) ; 01302600
|
|
INTERRUPT (1) ; 01302800
|
|
END UNTIL BOOLEAN (BREAKI) ; 01303000
|
|
NEXT: 01303200
|
|
N := RESETN ; 01303400
|
|
IF LOCKED THEN 01303500
|
|
YLOCKED := FALSE ; 01303600
|
|
END LISTING ; 01303800
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01345000
|
|
PROCEDURE INLINE ; 01345500
|
|
BEGIN 01345550
|
|
LABEL NEXT ; 01345560
|
|
DEFINE QUICK = FALSE# ; 01345570
|
|
IF PARAMETER1 = "ECHO " THEN 01345600
|
|
BEGIN 01345610
|
|
INLINEECHO := TOGGLE (INLINEECHO, 2) ; 01345620
|
|
GO TO NEXT ; 01345660
|
|
END ; 01345670
|
|
READONLYCHECK ; 01345700
|
|
IF NUM1 THEN 01346000
|
|
BEGIN 01346500
|
|
N := PARAMETER1 ; 01347000
|
|
IF NOT ITSOLD (N) THEN 01347500
|
|
ERROR (NEXT, 0, "MISSING", OCTDEX (N)) ; 01348000
|
|
IF NOT MOREINPUT THEN 01348500
|
|
WRITEAT ; 01349000
|
|
I := PARAMETER2.[6:6] ; 01349500
|
|
END 01350000
|
|
ELSE 01350500
|
|
BEGIN 01351000
|
|
AT := LL [LOC (N)].F ; 01351500
|
|
N := LL [AT].S ; 01352500
|
|
I := PARAMETER1.[6:6] ; 01353000
|
|
END ; 01353500
|
|
IF NOT NUM1 OR MOREINPUT THEN 01353600
|
|
RDISC (AT, RECORD) ; 01354000
|
|
INLINETOG := TRUE ; 01354500
|
|
IF I = "I" THEN 01356000
|
|
M := 1 01356500
|
|
ELSE IF I = "D" THEN 01357000
|
|
M := 2 01357500
|
|
ELSE IF I = "R" THEN 01358000
|
|
M := 3 01358500
|
|
ELSE M := 0 ; 01359000
|
|
NEXT: 01359500
|
|
END INLINE; 01359600
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01360000
|
|
PROCEDURE COLUMN ; 01360100
|
|
BEGIN 01360150
|
|
INTEGER STREAM PROCEDURE GETCHAR (S) ; 01360200
|
|
BEGIN 01360250
|
|
LABEL NOPE, YES, XIT ; 01360300
|
|
DI := LOC GETCHAR ; 01360350
|
|
SI := S ; 01360400
|
|
2(40(IF SC = ALPHA THEN ELSE IF SC = " " THEN ELSE 01360450
|
|
IF SC = """ THEN 01360500
|
|
JUMP OUT 2 TO YES 01360550
|
|
ELSE IF SC = "." THEN 01360600
|
|
JUMP OUT 2 TO YES 01360650
|
|
ELSE IF SC = "(" THEN 01360700
|
|
JUMP OUT 2 TO YES 01360750
|
|
ELSE IF SC = "[" THEN 01360800
|
|
JUMP OUT 2 TO YES 01360850
|
|
ELSE IF SC = ";" THEN 01360900
|
|
JUMP OUT 2 TO NOPE ; 01360950
|
|
SI := SI + 1)) ; 01361000
|
|
NOPE: 01361050
|
|
DS := 8 LIT "+0000001" ; 01361100
|
|
GO TO XIT ; 01361150
|
|
YES: 01361200
|
|
SI := SI + 1 ; 01361250
|
|
DI := DI + 7 ; 01361300
|
|
DS := CHR ; 01361350
|
|
XIT: 01361400
|
|
END GETCHAR ; 01361450
|
|
IF I := GETCHAR (IMAGE) GEQ 0 THEN 01361500
|
|
CHARACTER := I ; 01361550
|
|
IF NUM1 THEN 01361600
|
|
BEGIN 01361650
|
|
COLSTOP1 := MIN (PARAMETER1, 80) ; 01361700
|
|
IF NUM2 THEN 01361900
|
|
BEGIN 01361950
|
|
COLSTOP2 := MIN (MAX (PARAMETER2, COLSTOP1), 80) ; 01362000
|
|
IF NUM3 THEN 01362050
|
|
BEGIN 01362100
|
|
COLSTOP3 := MIN (MAX (PARAMETER3, COLSTOP2), 80) ; 01362150
|
|
IF NUM4 THEN 01362200
|
|
BEGIN 01362250
|
|
COLSTOP4 := MIN (MAX (PARAMETER4, COLSTOP3), 80) ; 01362300
|
|
COLSTOPS := 4 ; 01362350
|
|
END ELSE 01362400
|
|
COLSTOPS := 3 ; 01362450
|
|
END ELSE 01362500
|
|
COLSTOPS := 2 ; 01362550
|
|
END ELSE 01362600
|
|
COLSTOPS := 1 ; 01362650
|
|
MAXCOLSTOP := COLSTOP [COLSTOPS] ; 01362675
|
|
END ELSE 01362700
|
|
IF EMPTY1 THEN 01362750
|
|
BEGIN 01363100
|
|
SHOW (PARAMETER0, ONOFF (COLUMNS) & (CHARACTER)[42:42:6]) ; 01363200
|
|
IF COLSTOPS LSS 1 THEN 01363210
|
|
PARAMETER1 := 0 & "#"[6:42:6] 01363220
|
|
ELSE PARAMETER1 := OCTDEX (COLSTOP1) ; 01363230
|
|
IF COLSTOPS LSS 2 THEN 01363240
|
|
PARAMETER2 := 0 & "#"[6:42:6] 01363250
|
|
ELSE PARAMETER2 := OCTDEX (COLSTOP2) ; 01363260
|
|
SHOW (PARAMETER1, PARAMETER2) ; 01363270
|
|
IF COLSTOPS LSS 3 THEN 01363280
|
|
PARAMETER3 := 0 & "#"[6:42:6] 01363290
|
|
ELSE PARAMETER3 := OCTDEX (COLSTOP3) ; 01363300
|
|
IF COLSTOPS LSS 4 THEN 01363310
|
|
PARAMETER4 := 0 & "#"[6:42:6] 01363320
|
|
ELSE PARAMETER4 := OCTDEX (COLSTOP4) ; 01363330
|
|
ERRORX (7, PARAMETER3, PARAMETER4) ; 01363410
|
|
END ELSE 01363420
|
|
COLUMNS := TOGGLE (COLUMNS, 1) ; 01363430
|
|
END COLUMN ; 01364500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01365000
|
|
PROCEDURE TEACH ; 01365500
|
|
BEGIN 01366000
|
|
LABEL NEXT ; 01366500
|
|
IF NOT EMPTY1 THEN 01367000
|
|
BEGIN 01367500
|
|
M := -1 ; 01368000
|
|
FOR I := 0 STEP 1 UNTIL RSWDM DO 01368500
|
|
IF PARAMETER1 = RSWD [I] THEN 01369000
|
|
BEGIN 01369500
|
|
M := I ; 01370000
|
|
I := RSWDM ; 01370500
|
|
END ; 01371000
|
|
IF M LSS 0 THEN 01371500
|
|
BEGIN 01371600
|
|
IF I := XFILE (PARAMETER1, PARAMETER2:=MACROLIBRARY, -1) LSS 201371700
|
|
AND MACROLIBRARY NEQ "MACRO " THEN 01371800
|
|
I := XFILE (PARAMETER1, PARAMETER2:="MACRO ", -1) ; 01371830
|
|
IF I LSS 2 THEN 01371900
|
|
BEGIN 01372000
|
|
SHOW (PARAMETER1, " INVALI") ; 01372020
|
|
ERROR (NEXT, 0, "D: * ", RWTEACH) ; 01372040
|
|
END ; 01372050
|
|
NUM2 := FALSE ; 01372100
|
|
NUM3 := BOOLEAN (2) ; 01372200
|
|
LISTIT (0) ; 01372300
|
|
GO TO NEXT ; 01372400
|
|
END ; 01372450
|
|
PARAMETER1 := "TEACHER" ; 01372500
|
|
PARAMETER2 := OCTDEC (VERSION) ; 01373000
|
|
IF XFILE (PARAMETER1, PARAMETER2, 2) LSS 2 THEN 01373500
|
|
GO TO NEXT ; 01374000
|
|
READ (LIBRARY [M], 1, IMAGE [*]) ; 01375000
|
|
N := DEC (IMAGE [0], 8) ; 01376000
|
|
CLOSE (LIBRARY) ; 01376500
|
|
PARAMETER3 := N DIV 10000 ; 01377000
|
|
NUM3 := TRUE ; 01377500
|
|
PARAMETER4 := N MOD 10000 ; 01378000
|
|
NUM4 := TRUE ; 01378500
|
|
N := RESETN ; 01379000
|
|
LISTIT (17) ;% POSTING AND QUICK 01379500
|
|
END ELSE 01380500
|
|
BEGIN 01380600
|
|
WRITE (PRETANK [*], TEACH1) ; 01381500
|
|
WRITETWX ; 01382000
|
|
FOR I := 0 STEP 7 UNTIL RSWDM DO 01382500
|
|
BEGIN 01383000
|
|
WRITE (IMAGE [*], TEACH2, FOR M := 0 STEP 1 UNTIL 6 DO 01383500
|
|
[(PARAMETER0 := RSWD [I + M]).[6:6], PARAMETER0]) ; 01384000
|
|
WRITEROW (IMAGE, FALSE, COBOL) ; 01384500
|
|
END ; 01386500
|
|
WRITE (IMAGE [*], TEACH3) ; 01387000
|
|
WRITEROW (IMAGE, FALSE, COBOL) ; 01387500
|
|
END ; 01390500
|
|
NEXT: 01390600
|
|
END TEACH ; 01390700
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01391500
|
|
DEFINE PERCENT = 01392000
|
|
BEGIN 01392500
|
|
TRANSLATING := BOOLEAN (I := REAL (TOGGLE (TRANSLATING, 1))) ; 01393000
|
|
TRANSLATEI := I ; 01393500
|
|
END# ; 01394500
|
|
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 01402000
|
|
PROCEDURE STOP ; 01402500
|
|
BEGIN 01403000
|
|
DEFINE DIRCTRY = CONTROLS# ; 01403100
|
|
LABEL NEXT ; 01403500
|
|
IF BOOLEAN (ABNORMALEND) THEN 01403600
|
|
BEGIN 01403610
|
|
EMPTY1 := ABNORMALEND = 3 ; 01403620
|
|
ABNORMALEND := BREAKI := 0 ; 01403630
|
|
IF BOOLEAN (INREADYQ) THEN 01403650
|
|
BEGIN 01403690
|
|
FOR I := 1 STEP 1 WHILE READYQ [I] NEQ USER DO ; 01403700
|
|
FOR I := I + 1 STEP 1 UNTIL READYQTOP DO 01403750
|
|
READYQ [I - 1] := READYQ [I] ; 01403755
|
|
READYQTOP := READYQTOP - 1 ; 01403800
|
|
INREADYQ := 0 ; 01403810
|
|
END ; 01403825
|
|
END ELSE 01403850
|
|
BEGIN 01403875
|
|
IF FILEOPEN AND PARAMETER1 NEQ "DS " THEN 01403900
|
|
CLOSEFILE ; 01404500
|
|
WRITE (PRETANK [*], EOJ) ; 01407000
|
|
WRITETWX ; 01407500
|
|
IF NOT EMPTY1 THEN 01407600
|
|
SAVESTATE ; 01407700
|
|
IF COUNTI GEQ 0 THEN 01407710
|
|
BEGIN 01407720
|
|
ABNORMALEND := IF EMPTY1 THEN 2 ELSE 4 ; 01407730
|
|
STATION := 0 ; 01407740
|
|
GO TO NEXT ; 01407750
|
|
END ; 01407760
|
|
END ; 01407800
|
|
FORGET (STATIONI) ; 01407900
|
|
I := 2 | SLOTI ; 01408000
|
|
READ (R1 [45], 90, DIRCTRY [*]) ; 01408100
|
|
IF EMPTY1 THEN 01408500
|
|
DIRCTRY [I] := 0 01408600
|
|
ELSE 01408700
|
|
DIRCTRY [I].[1:1] := 0 ; 01408800
|
|
DIRCTRY [I + 1] := 0 ; 01409000
|
|
WRITE (R1 [45], 90, DIRCTRY [*]) ; 01409500
|
|
STATION := 0 ; 01410500
|
|
IF USER NEQ BIGBIRD THEN 01415100
|
|
BEGIN 01415110
|
|
WRITE (BUFFERS [USER, *], 45, BUFFERS [BIGBIRD, *]) ; 01415130
|
|
IF BOOLEAN (INREADYQ) THEN 01415140
|
|
FOR I := 0 STEP 1 UNTIL READYQTOP DO 01415150
|
|
IF READYQ [I] = BIGBIRD THEN 01415160
|
|
READYQ [I] := USER ; 01415170
|
|
READ (R1 [IF INREADYQ=3 THEN 46 ELSE SLOTI], 90, CONTROLS [*]) ;01415180
|
|
FILEACCESS := CONTROLS [51] ; 01415190
|
|
IF FILEOPEN THEN 01415200
|
|
BEGIN 01415210
|
|
N := BIGBIRD | 32 ; 01415215
|
|
M := CONTROLS [57].LEFTSIDE ; 01415220
|
|
FOR I := 0 STEP 1 UNTIL M DO 01415230
|
|
WRITE (LINKLISTS [USER32 + I, *], 256, 01415240
|
|
LINKLISTS [N + I, *]) ; 01415250
|
|
END ; 01415260
|
|
IF XDEX := CONTROLS [62] GEQ 0 THEN 01415265
|
|
BEGIN 01415270
|
|
WRITE (XARRAY [USER, *], XMAX | 13, XARRAY [BIGBIRD, *]) ; 01415275
|
|
FOR XDEX := XDEX STEP -1 UNTIL 0 DO 01415280
|
|
IF BOOLEAN (XNCHRS).[1:1] THEN 01415285
|
|
BEGIN 01415290
|
|
READ (IO [2|MAXUSERS+XMAX|BIGBIRD+XDEX], 30, IMAGE [*]) ; 01415295
|
|
WRITE (IO [2|MAXUSERS+XMAX|USER+XDEX], 30, IMAGE [*]) ; 01415300
|
|
END ; 01415305
|
|
END ; 01415310
|
|
END ; 01415315
|
|
BIGBIRD := BIGBIRD - 1 ; 01415500
|
|
NEXT: 01416500
|
|
END ; 01417000
|
|
PROCEDURE PROGRAM ; 01417100
|
|
BEGIN 01417110
|
|
LABEL NEXT, EXIT ; 01417120
|
|
NEXT: 01417150
|
|
CASE VERB OF 01417160
|
|
BEGIN 01417170
|
|
EXECUTE ; 01417175
|
|
DITTO ; 01417180
|
|
COPY ; 01417190
|
|
INLINE ; 01417200
|
|
ZIPIT ; 01417210
|
|
CHANGE ; 01417220
|
|
EDIT ; 01417230
|
|
SAVEIT ; 01417240
|
|
RESEQ ; 01417250
|
|
PUNCH ; 01417260
|
|
PRINT ; 01417270
|
|
DELETE ; 01417280
|
|
CLOSEIT ; 01417300
|
|
COMPILE ; 01417310
|
|
COLUMN ; 01417320
|
|
SCAN ; 01417330
|
|
LISTING ; 01417340
|
|
INCREMENT ; 01417350
|
|
TAB ; 01417360
|
|
PERCENT ; 01417370
|
|
QUICKLIST ; 01417380
|
|
LISTIT (0) ; 01417390
|
|
OPEN ; 01417400
|
|
MAIL ; 01417410
|
|
TEACH ; 01417420
|
|
REMOVE ; 01417430
|
|
REPLACE ; 01417440
|
|
STOP ; 01417450
|
|
GO TO EXIT ; 01417460
|
|
END ; 01417470
|
|
IF BIGBIRD GEQ 0 THEN 01417480
|
|
GO TO NEXT ; 01417490
|
|
EXIT: 01417500
|
|
END PROGRAM ; 01418000
|
|
BOOLEAN PROCEDURE RC (START) ; 01418100
|
|
VALUE START ; 01418200
|
|
BOOLEAN START ; 01418300
|
|
BEGIN 01418500
|
|
SAVE FILE OUT RONE DISK SERIAL [1:47] "R/C" "#1" (1, 90, SAVE 99) ; 01418600
|
|
SAVE FILE OUT RTWO DISK SERIAL [15:96] "R/C" "#2" (1, 256, SAVE 99) ; 01418700
|
|
ARRAY DIRCTRY, NEWDIRCTRY [0:90], 01418800
|
|
LINKLIST [0:255] ; 01418900
|
|
LABEL ENDOFPROGRAM ; 01419000
|
|
CHARGE (0) ; 01419100
|
|
FREEFILE (0) ; 01419150
|
|
IF START THEN 01419200
|
|
BEGIN 01419300
|
|
SEARCH (RONE, IMAGE [*]) ; 01419500
|
|
IF IMAGE [6] GTR 0 THEN 01420000
|
|
BEGIN 01420100
|
|
I := STATUS (IMAGE [*]) ; 01420200
|
|
WRITE (TWXOUTPUT (IMAGE [0]), USERUN) ; 01420300
|
|
GO TO ENDOFPROGRAM ; 01420500
|
|
END ; 01420600
|
|
IF IMAGE [0] GEQ 0 THEN 01421000
|
|
BEGIN 01421500
|
|
READ (R1 [45], 90, DIRCTRY [*]) ; 01422000
|
|
DIRCTRY [90] := 12 ; 01422500
|
|
FOR I := 0 STEP 2 WHILE USERCODE := DIRCTRY [I] NEQ 12 DO 01423000
|
|
DIRCTRY [I] := ABS (USERCODE) ; 01423500
|
|
WRITE (R1 [45], 90, DIRCTRY [*]) ; 01424000
|
|
END ELSE 01424500
|
|
BEGIN 01425000
|
|
DIRCTRY [0] := 12 ; 01425500
|
|
WRITE (RONE [45], 90, DIRCTRY [*]) ; 01426000
|
|
END ; 01426500
|
|
SEARCH (RTWO, IMAGE [*]) ; 01432500
|
|
IF IMAGE [0] LSS 0 THEN 01433000
|
|
WRITE (RTWO[0], 1, IMAGE [*]) ; 01433500
|
|
END ELSE 01436500
|
|
BEGIN 01436600
|
|
READ (R1 [45], 90, DIRCTRY [*]) ; 01437300
|
|
USER := -2 ; 01437500
|
|
FOR N := 0 STEP 1 UNTIL 1 DO 01437600
|
|
FOR I := 0 STEP 2 WHILE USERCODE := DIRCTRY [I] NEQ 12 DO 01438000
|
|
IF USERCODE NEQ 0 THEN 01439000
|
|
BEGIN 01439500
|
|
READ (R1 [I/2], 90, CONTROLS [*]) ; 01440000
|
|
FILEACCESS := CONTROLS [51] ; 01440100
|
|
IF FILEOPEN OR BOOLEAN (N) THEN 01440500
|
|
BEGIN 01441000
|
|
NEWDIRCTRY [USER := USER + 2] := USERCODE ; 01441500
|
|
WRITE (RONE, 90, CONTROLS [*]) ; 01442500
|
|
IF FILEOPEN THEN 01442600
|
|
BEGIN 01442700
|
|
READ SEEK (R2 [16 | I]) ; 01443000
|
|
NEWDIRCTRY [USER + 1] := DIRCTRY [I + 1] ; 01443100
|
|
M := CONTROLS [57].LEFTSIDE ; 01444100
|
|
FOR D := 0 STEP 1 UNTIL M DO 01444500
|
|
BEGIN 01445000
|
|
READ (R2, 256, LINKLIST [*]) ; 01445500
|
|
WRITE (RTWO, 256, LINKLIST [*]) ; 01446000
|
|
END ; 01446500
|
|
IF M NEQ 31 THEN 01446600
|
|
WRITE (RTWO [16 | USER + 31], 1, CONTROLS [*]) ; 01446700
|
|
DIRCTRY [I] := 0 ; 01447000
|
|
END ; 01447100
|
|
END ; 01447500
|
|
END ; 01448000
|
|
NEWDIRCTRY [USER + 2] := 12 ; 01455000
|
|
IF USER GEQ 0 THEN 01455500
|
|
WRITE (RONE [45], 90, NEWDIRCTRY [*]) ; 01456000
|
|
CLOSE (R1, PURGE) ; 01456500
|
|
READ (R2 [0]) ; 01456600
|
|
CLOSE (R2, PURGE) ; 01457000
|
|
ENDOFPROGRAM: 01458100
|
|
RC := TRUE ; 01458200
|
|
END ; 01458300
|
|
END RC ; 01458500
|
|
CONTROLS [90] := 12 ; 01458900
|
|
IF NOT RC (TRUE) THEN 01459000
|
|
BEGIN 01459100
|
|
BIGBIRD := -1 ; 01459110
|
|
T0 := 150 ; 01459120
|
|
FREEHEAD := MAXFREEHEAD := (XMAX + 2) | MAXUSERS ; 01459130
|
|
PROGRAM ; 01459200
|
|
BOOL := RC (FALSE) ; 01459300
|
|
IF XFILE ("TEACHER", OCTDEC (VERSION), -1) GTR 0 THEN 01459310
|
|
READ (LIBRARY) ; 01459320
|
|
END ; 01459400
|
|
END. 01459500
|
|
99999990
|