mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-02 17:44:40 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
7892 lines
624 KiB
Plaintext
7892 lines
624 KiB
Plaintext
00000000
|
|
00000010
|
|
00000020
|
|
00000030
|
|
00000040
|
|
00000050
|
|
BEGIN 00000097
|
|
DEFINE LANGUAGELEVEL = 3#; 00000098
|
|
DEFINE DATE = "/16/68"&"01"[1:37:11]#; 00000099
|
|
COMMENT SUMMARY OF PATCHES................... 00000100
|
|
G01 GENERAL REPAIR AND IMPROVEMENTS %G0100000101
|
|
; 00000999
|
|
$ INCLUDE 00004001, IF ADVANCED; 00003000
|
|
$ SET INTERMEDIATE = TRUE; 00004000
|
|
INTEGER 00005000
|
|
ERRCT, % # OF SYNTAX ERRORS, "COMMON" ON STARTUP 00006000
|
|
RCCNT; % CURRENT INPUT IMAGE "LINE" 00007000
|
|
$ INCLUDE 00008001, IF INTERMEDIATE; 00007999
|
|
REAL CAT1,CAT2; % FIXED LOCATIONS FOR ISOCAT 00008000
|
|
$ INCLUDE 00015000, IF COUNTING; 00010000
|
|
ARRAY COUNTING[0:19]; 00011000
|
|
DEFINE ASCT = COUNTING[ 0] #, 00011200
|
|
BSCT = COUNTING[ 1] #, 00011400
|
|
SSCT = COUNTING[ 2] #, 00011600
|
|
ESCT = COUNTING[ 3] #, 00011800
|
|
STEPCT = COUNTING[ 4] #, 00012000
|
|
INDCT = COUNTING[ 5] #, 00012200
|
|
STKCT = COUNTING[ 6] #, 00012400
|
|
STKMX = COUNTING[ 7] #, 00012600
|
|
STKDP = COUNTING[ 8] #, 00012800
|
|
PSEU = COUNTING[ 9] #, 00013000
|
|
MSTCT = COUNTING[10] #, 00013200
|
|
PUTCT = COUNTING[11] #, 00013400
|
|
GETCT = COUNTING[12] #, 00013600
|
|
MOVCT = COUNTING[13] #, 00013800
|
|
PTRCT = COUNTING[14] #, 00014000
|
|
PTCHCT = COUNTING[15] #; 00014050
|
|
BOOLEAN 00100000
|
|
$ INCLUDE 00100101, IF DEBUGGING; 00100099
|
|
ACMLST, % LISTING OF ACM REQUESTED ("ACCUM") 00100100
|
|
ATOG, % ARITHMETIC EXPRESSION TOGGLE 00101000
|
|
BLOCK, % BLOCK LEVEL LISTING REQUESTED ("BLOCK") 00102000
|
|
BOOLEANEXTOG,% COMPILING A BOOLEAN EXPRESSION 00103000
|
|
CCDATATOG, % PROCESSING DATA SECTION OF CCHANDLER 00104000
|
|
CCLISTOG, % LISTING OF CONTROL DECK REQUESTED 00105000
|
|
CMT, % PROCESSING A COMMENT 00106000
|
|
COND, % COMPILING A CONDITIONAL STMT 00107000
|
|
CONVERTTOG, % INTERPRETIVE MSTRING CONVERSION REQUIRED 00108000
|
|
DBLINE, % DOUBLE SPACING REQUESTED ("DOUBLE") 00109000
|
|
$ INCLUDE 00110001, IF DEBUGGING; 00109999
|
|
DBUGN, % LISTING OF COMPILED CODE REQUESTED ("DEBUGN") 00110000
|
|
DEC, % PROCESSING A DECLARATION 00111000
|
|
DECOMTOG, % COMPILING A DECOMPOSITION STMT 00112000
|
|
DJTOG, % DECLARATION JUGGLING INTO OUTPUT STRING 00113000
|
|
DOLLARSIGN, % "$" IMAGE GOING INTO OUTPUT STRING 00114000
|
|
ENDT, % PROCESSING AN END COMMENT 00115000
|
|
EQVTOG, % NEED NAME OF A MACRO W/O INTERPRETATION 00116000
|
|
EX, % "EXPRESSION" BEING SCANNED BY ESCAN 00117000
|
|
FIELDTOG, % INTERPRETING AN MFIELD 00118000
|
|
FLUSHD, % LAST OUTPUT STRING IMAGE FLUSHED: POB IS CLEAN 00119000
|
|
FMTTOG, % FORMAT BEING PROCESSED...SCAN DIFFERENTLY 00120000
|
|
INDEXING, % INDEX REQUESTED ("INDEX") 00121000
|
|
INTERLIST, % OUTPUT STRING LISTING REQUESTED ("INTER") 00122000
|
|
ITOG, % INTEGER MSTRING BEING PROCESSED 00123000
|
|
LENGTHTOG, % INTERPRETING PARTIAL MSTRING 00124000
|
|
LUOK, % LASTUSED OK TO PRINT INPUT IMAGE 00125000
|
|
MACROTOG, % COMPILING A MACRO DECLARATION 00126000
|
|
$ INCLUDE 00127001, IF DEBUGGING; 00126999
|
|
MONITER, % INTERPRER MONITORING REQUESTED ("MONITOR") 00127000
|
|
NEWFILE, % NEW DISK FILE REQUESTED ("NEW DISK") 00128000
|
|
NEWRESEQ, % RESEQUENCING IN NEW DISK REQUESTED ("SEQ") 00129000
|
|
NOJUMP, % JUMP NOT ALLOWED FOLLOWING PREVIOUS SYLLABLE 00130000
|
|
NOREAD, % PREVENT SCANNING BEYOND END OF PSEUDOREADER 00131000
|
|
PACKLAST, % SETPACK CALLED LAST 00131100
|
|
PREV, % PREVIOUS ITEM PACKED WAS A SPECIAL CHR 00132000
|
|
PRINT, % LISTING OF INPUT REQUESTED ("LIST") 00133000
|
|
PROCTOG, % PROCESSING PROCEDURE DECLARATION 00134000
|
|
$ INCLUDE 00135001, IF DEBUGGING; 00134999
|
|
PSEUDOTOG, % MONITORING OF PSEUDORDRS REQUESTED("PSEUDO") 00135000
|
|
$ INCLUDE 00136001, IF INTERMEDIATE; 00135999
|
|
PWT, % PARTIAL WORD TOGGLE 00136000
|
|
RESCANTOG, % ALLOWS INTERPRETATION OF SCANNED ITEMS 00137000
|
|
SPCT, % PROCESSING PROCEDURE SPECIFICATIONS PART 00138000
|
|
$ INCLUDE 00139001, IF DEBUGGING; 00138999
|
|
SRT, % ADDRESS ASSIGNMENTS REQUESTED ("PRT") 00139000
|
|
STREAMTOG, % PROCESSING A STREAM PROCEDURE 00140000
|
|
SVT, % SAVE TOGGLE FOR LOCKING CODE FILE 00141000
|
|
TOGGLE, % INTERPRETATION SUCCESS TOGGLE FOR MACROS 00142000
|
|
TRACE, % ENTRY-EXIT OF MACROS REQUESTED ("TRACE") 00143000
|
|
UNPACK, % UNPACKED OUTPUT STRING REQUESTED ("UNPACK") 00144000
|
|
$ INCLUDE 00144101, IF ADVANCED; 00144099
|
|
USERTOG, % USER TOGGLE FOR CONDITIONAL MACROS 00144100
|
|
VOIDING, % PROCESSING A MCALGOL $ VOID CARD 00145000
|
|
WARNING, % WARNING MESSAGES HAVE OCCURRED IN PROGRAM 00146000
|
|
WARNTOG, % WARNING MESSAGES REQUESTED ("WARN") 00147000
|
|
WRITEIT; % A LISTING HAS BEEN PRODUCED 00148000
|
|
ALPHA CHAR, % LAST SCANNED SPECIAL CHARACTER 00149000
|
|
DATANAME, % TIME-DERIVED NAME FOR CC DATA FILES 00150000
|
|
F, % SUFFIX OF CODE FILE 00151000
|
|
LANG, % NAME OF LANGUAGE FILE 00152000
|
|
MF, % PREFIX OF CODE FILE 00153000
|
|
V, % LAST GET VALUE 00154000
|
|
W; % LAST ELBAT WORD FROM INDICT 00155000
|
|
INTEGER A, % GLOBAL TEMP 00156000
|
|
ALGOLDICT, % POINTER TO START OF ALGOL RESWDS IN DICT 00157000
|
|
BASE, % SUBTRACTION BASE FOR SCANCOUNT 00158000
|
|
BC, % BFR CHR POINTER 00159000
|
|
BECT, % SERIAL NUMBER FOR DECLARATION IDS 00160000
|
|
BELB, % BASE POSITION OF PHYSICAL ELBAT ARRAY 00161000
|
|
BFRLNG, % LEFTMOST CHR POS OF CURRENT PSEUDOREADER 00162000
|
|
BLOCKLEVEL, % CURRENT BLOCK NESTING DEPTH 00163000
|
|
BLVL, % CURRENT BEGIN NESTING DEPTH 00164000
|
|
BNO, % SERIAL NUMBER OF CURRENT "BEGIN" FOR MATCHING 00165000
|
|
BNOMAX, % NEXT BNO TO ASSIGN 00166000
|
|
BW, % BFR WORD POINTER 00167000
|
|
BWMAX, % RIGHTMOST CHR POS OF CURRENT PSEUDOREADER 00168000
|
|
CARDREC, % RECORD # OF CURRENT CARD IMAGE 00169000
|
|
CCC, % CONTROL CARD COUNTER (* CARDS) 00170000
|
|
CFIELD, % COMPILE-TIME FIELD WORD 00171000
|
|
CIN, % PSEUDOREADER STACKING INDEX 00172000
|
|
CODEREC, % SERIAL # OF CODE FILE IMAGE 00173000
|
|
CONP, % NEXT AVAILABLE WORD IN CONSTANT POOL 00174000
|
|
COUNT, % CHR COUNTER USED BY SCANNERS 00175000
|
|
DECP, % INDEX INTO DECL 00176000
|
|
DISKREC, % RECORD # OF CURRENT DISK IMAGE 00177000
|
|
DOLLARDICT, % POINTER TO MCALGOL DOLLAR CARD WORDS 00178000
|
|
DSTK, % NESTING DEPTH OF DISKSTACK 00178100
|
|
ELB, % ELBAT WORD OF CURRENTLY SCANNED ITEM 00179000
|
|
EP, % SYLLABLE OF MACRO CODE BEING INTERPRETED 00180000
|
|
FC, % FIRST CHR OF PARTIAL MSTRING(USUALLY 0) 00181000
|
|
GADR, % CURRENT INTERPRETING OPERATOR 00182000
|
|
GLAT, % NEXT GLOBAL ALPHA MSTRING ADDRESS 00183000
|
|
GLIT, % NEXT GLOBAL INTEGER MSTRING ADDRESS 00184000
|
|
GLOT, % NEXT GLOBAL MPOINTER ADDRESS 00185000
|
|
GOP, % CURRENT INTERPRETING OPERATOR 00186000
|
|
HM, % CHR COUNT (+3) OF ACCM 00187000
|
|
I, % GLOBAL TEMP 00188000
|
|
IACCM, % INTEGER ACCUMULATOR 00189000
|
|
IACCM1, % SIDE IACCM FOR RELATIONS 00190000
|
|
II, % GLOBAL TEMP FOR PSEUDOREADING 00191000
|
|
INDENT, % 3|RECURSION DEPTH OF MACROS FOR TRACING 00192000
|
|
INXR, % INDEX RECORD COUNTER 00193000
|
|
J, % GLOBAL TEMP 00194000
|
|
LACT, % NEXT LOCAL ALPHA MSTRING ADDRESS 00195000
|
|
LAD, % LAST ADINFO FIELD FROM INDICT 00196000
|
|
LASTDICT, % LAST ASSIGNED POSITION IN DICT 00197000
|
|
LASTUSED, % INPUT MEDIA SWITCH IN READACARD 00198000
|
|
LICT, % NEXT LOCAL INTEGER MSTRING ADDRESS 00199000
|
|
LIMT, % LENGTH OF LAST INTEGER MSTRING 00200000
|
|
LOCT, % NEXT LOCAL MPOINTER ADDRESS 00201000
|
|
LSTUDICT, % LAST ASSIGNED POISTION IN UDICT 00202000
|
|
MACRODICT, % POINTER TO MACRO RESWDS IN DICT 00203000
|
|
MACT, % RECURSION DEPTH OF MACROS 00204000
|
|
MADDR, % DICT ADDRESS OF CURRENT MACRO FOR TRACING 00205000
|
|
MCBL, % BLOCK LEVEL AT WHICH MACRO WAS DECLARED 00206000
|
|
MEL, % INDEX INTO TELBAT 00207000
|
|
ML, % CODE ADDRESS DURING MACRO COMPILING 00208000
|
|
MSTORP, % CURRENT ROWS IN MDECL AND MCODE 00209000
|
|
NEST, % PROCEDURE NESTING LEVEL INDEX 00210000
|
|
NEWINC, % SEQUENCE INCREMENT FOR NEWDISK FILE 00211000
|
|
NEWSEQ, % SEQUENCE # FOR NEWDISK FILE 00212000
|
|
NEXTDICT, % NEXT AVAILABLE DICT ENTRY LOCATION 00213000
|
|
$ INCLUDE 00214001, IF INTERMEDIATE; 00213999
|
|
NOWCODE, % CURRENT RECORD OF ISOCODE IN CODRAY 00214000
|
|
NWCT, % CHR POS IN DECL FOR PACKET 00215000
|
|
NXTCODE, % NEXT RECORD & REL-ADR FOR MFIELD CODE 00216000
|
|
NXTELB, % SERIAL # OF NEXT ELBAT WORD 00217000
|
|
NXTPTCHREC, % NEXT AVAILABLE RECORD IN BACKPATCHES 00218000
|
|
NXTPTCHX, % INDEX INTO PATCHSPACE 00219000
|
|
NXTUDICT, % NEXT AVAILABLE UDICT LOCATION 00220000
|
|
OHM, % CHR COUNT (+3) IN OA 00221000
|
|
OP, % CURRENT COMPILE TIME OPERATOR 00222000
|
|
OUTC, % CHR POS IN POB FOR CODE RECORD PACKING 00223000
|
|
OUTERLIMIT, % BEGIN NESTING LEVEL OF OUTPUT STRING 00224000
|
|
PANK, % INDEX INTO TANK 00225000
|
|
PL, % PARTIAL MFIELD LENGTH 00226000
|
|
PT, % INDEX INTO MCODE 00227000
|
|
SAVEA, % SAVED LAST MSTRING ADDRESS 00228000
|
|
SAVEML, % ML FOR LISTING 00229000
|
|
SAVEOP, % TEMP OP 00230000
|
|
% 00231000
|
|
SEQ, % CURRENT SEQUENCE # IN CODE FILE (STEP 100) 00232000
|
|
SSTK, % STATEMENT PATCH STACK INDEX 00233000
|
|
STMTSTKLVL, % OUTER BLOCK BEGIN NESTING LEVEL 00234000
|
|
STREAMDICT, % POINTER TO STREAM RESWDS IN DICT 00235000
|
|
TABLET, % THE "I" USED IN STEPI 00236000
|
|
TEMP, % NEED I SAY MORE 00237000
|
|
TFC, % TEMPORARY STORAGE FOR PARTIAL MFIELD FC 00238000
|
|
TNWCT, % OVERFLOW NWCT FOR PACKET 00239000
|
|
TOGGLECT, % COUNT OF TOGGLE SETTING OPERATIONS 00239200
|
|
TPANK, % TTANK INDEX 00240000
|
|
TYPE; % CLASS OF LAST ITEM FROM TABLE 00241000
|
|
REAL FIELD; % MFIELD DESCRIPTOR 00242000
|
|
00243000
|
|
DEFINE % ELBAT FIELDS 00300000
|
|
DIFF = [ 1: 8] #, % BACK TRACE LINK 00301000
|
|
BLKLVL = [ 9: 9] #, % BLOCK LEVEL 00302000
|
|
SUB = [18: 9] #, % SUBCLASS 00303000
|
|
CLASS = [27: 6] #, % CLASS 00304000
|
|
ADINFO = [33:15] #, % ADDITIONAL INFO 00305000
|
|
TODIFF = 1:40: 8#, 00306000
|
|
TOBLKLVL = 9:39: 9#, 00307000
|
|
TOSUB = 18:39: 9#, 00308000
|
|
TOCLASS = 27:42: 6#, 00309000
|
|
TOCLSUB = 18:33:15#, 00310000
|
|
CLUBCLUB = 18:18:15#, 00311000
|
|
TOADINFO = 33:33:15#, 00312000
|
|
% INTEGER MSTRING ADINFO FIELDS 00313000
|
|
OFFSET = [ 9: 9] #, % DICTIONARY DISPLACEMENT 00314000
|
|
REF = [18:15] #, % REFERENCE ADDRESS 00315000
|
|
LIM = [33:15] #, % SIZE LIMIT 00316000
|
|
TOOFFSET = 9:39: 9#, 00317000
|
|
OFFTOOFF = 3: 3:15#, 00318000
|
|
REFTOREF = 18:18:15#, 00318500
|
|
TOREF = 18:33:15#, 00319000
|
|
TOLIM = 33:33:15#, 00320000
|
|
% MACRO ADINFO FIELDS 00321000
|
|
MCIF = [ 2: 6] #, % CONDITIONAL INTERROGATION FLAG 00321900
|
|
MLICT = [ 8:10] #, % # LOCAL INTEGER MSTRINGS 00322000
|
|
MLACT = [18:10] #, % # LOCAL ALPHA MSTRINGS 00323000
|
|
MPOOL = [28:10] #, % SIZE OF CONSTANT POOL 00324000
|
|
MML = [38:10] #, % SIZE OF CODE STRING 00325000
|
|
MSMAP = [13:10] #, % SIZE OF SPACEMAP ENTRY 00326000
|
|
MLOCT = [23:10] #, % # LOCAL MPOINTERS 00327000
|
|
MPT = [33:15] #, % LOCATION OF CODE STRING 00328000
|
|
TOMCIF = 2:42: 6#, 00328900
|
|
TOMLICT = 8:38:10#, 00329000
|
|
TOMLACT = 18:38:10#, 00330000
|
|
TOMPOOL = 28:38:10#, 00331000
|
|
TOMML = 38:38:10#, 00332000
|
|
TOMSMAP = 13:38:10#, 00333000
|
|
TOMLOCT = 23:38:10#, 00334000
|
|
TOMPT = 33:33:15#, 00335000
|
|
% PSEUDOREADER FIELDS 00336000
|
|
SENDT = [ 4: 1] #, % END COMMENT TOGGLE 00337000
|
|
SRSC = [ 5: 1] #, % RESCANTOG 00338000
|
|
SLST = [ 6: 3] #, % LASTUSED 00339000
|
|
SMAX = [ 9:13] #, % BWMAX 00340000
|
|
SLNG = [22:13] #, % BFRLNG 00341000
|
|
SBC = [35: 3] #, % BC 00342000
|
|
SBW = [38:10] #, % BW 00343000
|
|
TOSENDT = 4:47: 1#, 00344000
|
|
TOSRSC = 5:47: 1#, 00345000
|
|
TOSLST = 6:45: 3#, 00346000
|
|
TOSMAX = 9:35:13#, 00347000
|
|
TOSLNG = 22:35:13#, 00348000
|
|
TOSBC = 35:45: 3#, 00349000
|
|
TOSBW = 38:38:10#, 00350000
|
|
% BLIST FIELDS FOR CUTBACK 00351000
|
|
BBLKL = [ 3:15] #, % BLOCK LEVEL 00352000
|
|
BNXTD = [18:15] #, % NEXTDICT 00353000
|
|
BBNO = [33:15] #, % DECLARATION BNO 00354000
|
|
TOBBLKL = 3:33:15#, 00355000
|
|
TOBNXTD = 18:33:15#, 00356000
|
|
TOBBNO = 33:33:15#, 00357000
|
|
% PATCH FIELDS 00358000
|
|
PNOTT = [ 1: 1] #, % NOT TOUCHED OR FOUND 00359000
|
|
PLINK = [ 2: 1] #, % PATCH LINK FLAG 00360000
|
|
PSEQN = [ 9:29] #, % SEQUENCE # OF LINK RECORD 00361000
|
|
PBASE = [38:10] #, % BASE RECORD IN PATCH FILE 00362000
|
|
PUSED = [ 3:15] #, % # RECORD USED 00363000
|
|
PSIZE = [18:15] #, % REQUESTED SIZE 00364000
|
|
PCODE = [33:15] #, % CODEREC OF LINK RECORD 00365000
|
|
PLVL = [18:15] #, % OUTERLIMIT OF PATCH 00366000
|
|
PLOC = [33:15] #, % LOCATION OF PATCH 00367000
|
|
TOPNOTT = 1:47: 1#, 00368000
|
|
TOPLINK = 2:47: 1#, 00369000
|
|
TOPSEQN = 9:19:29#, 00370000
|
|
TOPBASE = 38:38:10#, 00371000
|
|
TOPUSED = 3:33:15#, 00372000
|
|
TOPSIZE = 18:33:15#, 00373000
|
|
TOPCODE = 33:33:15#, 00374000
|
|
TOPLVL = 18:33:15#, 00375000
|
|
TOPLOC = 33:33:15#, 00376000
|
|
% SCAN RESTORATION FIELDS 00377000
|
|
RPANK = [ 8:10] #, % TANK POINTER 00378000
|
|
RT = [18:10] #, % T OF STEPI FAME 00379000
|
|
RNELB = [28:10] #, % NXTELB 00380000
|
|
RX = [38:10] #, % CURRENTLY UNUSED 00381000
|
|
TORPANK = 8:38:10#, 00382000
|
|
TORT = 18:38:10#, 00383000
|
|
TORNELB = 28:38:10#, 00384000
|
|
TORX = 38:38:10#, 00385000
|
|
% PARAMETRIC DEFINE FIELDS 00386000
|
|
PDC1 = [ 2: 2] #, % CONSTANT CLASS, PART 1 00387000
|
|
PDC2 = [ 4: 2] #, % " " " 2 00388000
|
|
PDP1 = [ 6: 6] #, % PARAMETER NO, " 1 00389000
|
|
PDP2 = [12: 6] #, % " " " 2 00390000
|
|
PDF1 = [18:15] #, % CONSTANT FIELD, " 1 00391000
|
|
PDF2 = [33:15] #, % " " " 2 00392000
|
|
TOPDC1 = 2:46: 2#, 00393000
|
|
TOPDC2 = 4:46: 2#, 00394000
|
|
TOPDP1 = 6:42: 6#, 00395000
|
|
TOPDP2 = 12:42: 6#, 00396000
|
|
TOPDF1 = 18:33:15#, 00397000
|
|
TOPDF2 = 33:33:15#, 00398000
|
|
% LOADSCAN FIELDS 00399000
|
|
LSLNK = [ 6: 6] #, % LINK TO NEXT ENTRY 00400000
|
|
LSCTR = [12: 6] #, % COUNTER FIELD 00401000
|
|
LSCMP = [12:36] #, % COMPARISON FIELD 00402000
|
|
LSBAK = [18:15] #, % BACK LINK TO LAST ENTRY 00403000
|
|
LSNXT = [33:15] #, % INDEX OF NEXT ENTRY 00404000
|
|
% OPERATOR TEST FIELDS 00405000
|
|
MOVM = [15: 1] #, % MOVE CHR INTO MSTRING 00406000
|
|
DBMN = [16: 1] #, % DEBUG USING MNEMON 00407000
|
|
DBA = [17: 1] #, % DEBUG IN ALPHA 00408000
|
|
SCMP = [20: 1] #, % STRING COMPARISON 00409000
|
|
MINT = [21: 1] #, % INTEGER OPERATOR 00410000
|
|
MCON = [22: 1] #, % MAY TAKE A CONSTANT 00411000
|
|
ZACM = [23: 1] #, % CLEAR ACCM 00412000
|
|
% MFIELD FIELDS 00413000
|
|
MFDG = [ 1: 1] #, % MFIELD DESIGNATOR IN LDFT 00414000
|
|
MFVN = [ 2: 1] #, % MFIELD VALUE IN NEXT LDFT WORD 00415000
|
|
MFINT = [ 3: 1] #, % INTEGER MFIELD 00416000
|
|
MFDCT = [ 4: 1] #, % DICT LIMIT PRESENT 00416050
|
|
MFLIM = [ 6:12] #, % ALPHA SIZE LIMIT 00416150
|
|
MFOFF = [18: 6] #, % OFFSET FOR DICTIONARY 00417000
|
|
MFBGN = [24:12] #, % START POSITION 00418000
|
|
MFLNG = [36:12] #, % LENGTH 00419000
|
|
CROW = [24:12] #, % CODE ROW 00420000
|
|
CRAD = [36:12] #, % CODE RELATIVE ADDRESS 00421000
|
|
TOMFDG = 1:47: 1#, 00422000
|
|
TOMFVN = 2:47: 1#, 00423000
|
|
TOMFINT = 3:47: 1#, 00424000
|
|
TOMFDCT = 4:47: 1#, 00424050
|
|
TOMFLIM = 6:36:12#, 00424150
|
|
TOMFOFF = 18:42: 6#, 00425000
|
|
TOMFBGN = 24:36:12#, 00426000
|
|
TOMFLNG = 36:36:12#, 00427000
|
|
TOCROW = 24:36:12#, 00428000
|
|
TOCRAD = 36:36:12#, 00429000
|
|
% USER DICTIONARY FIELDS 00430000
|
|
USIZ = [18: 9] #, % REQUESTED SIZE OF ENTRY 00431000
|
|
UXXX = [27: 6] #, % OPEN 00432000
|
|
UQUAL = [33:15] #, % QUALIFIER 00433000
|
|
UDCT = [ 2: 1] #, % DICTIONARY ADDRESS 00433050
|
|
TOUSIZ = 18:39: 9#, 00434000
|
|
TOUXXX = 27:42: 6#, 00435000
|
|
TOUQUAL = 33:33:15#, 00436000
|
|
TOUDCT = 2:47: 1#, 00436050
|
|
% CHARACTER FIELDS 00437000
|
|
C0 = [ 1: 5] #, TOC0 = 1:43: 5#, 00438000
|
|
C1 = [ 6: 6] #, TOC1 = 6:42: 6#, 00439000
|
|
C2 = [12: 6] #, TOC2 = 12:42: 6#, 00440000
|
|
C3 = [18: 6] #, TOC3 = 18:42: 6#, 00441000
|
|
C4 = [24: 6] #, TOC4 = 24:42: 6#, 00442000
|
|
C5 = [30: 6] #, TOC5 = 30:42: 6#, 00443000
|
|
C6 = [36: 6] #, TOC6 = 36:42: 6#, 00444000
|
|
C7 = [42: 6] #, TOC7 = 42:42: 6#, 00445000
|
|
C12 = [ 6:12] #, TOC12 = 6:36:12#, 00446000
|
|
C23 = [12:12] #, TOC23 = 12:36:12#, 00447000
|
|
C34 = [18:12] #, TOC34 = 18:36:12#, 00448000
|
|
% MISCELLANY 00449000
|
|
CTR = [ 1:17] #, % MSTRING COUNT FIELD 00450000
|
|
TOCTR = 1:31:17#, 00451000
|
|
IR = [33: 7] #, % INDEX ROW 00452000
|
|
IC = [40: 8] #, % INDEX COLUMN 00453000
|
|
XIR = [ 3: 7] #, % X-FIELD INDEX ROW 00454000
|
|
XIC = [10: 8] #, % X-FIELD INDEX COLUMN 00455000
|
|
XF = [ 3:15] #, % X-TRA FIELD 00456000
|
|
TOXF = 3:33:15#, 00457000
|
|
IRTOIR = 33:33: 7#, 00458000
|
|
WRD = [35:10] #, % WORD INDEX (DIV 8) 00459000
|
|
CHR = [45: 3] #, % CHR INDEX (MOD 8) 00460000
|
|
SADD = [33:15] #, % STREAM ADDRESS 00461000
|
|
SCHR = [30: 3] #, % STREAM CHR POS 00462000
|
|
TOWRD = 35:38:10#, 00463000
|
|
TOCHR = 45:45: 3#, 00464000
|
|
TOSADD = 33:33:15#, 00465000
|
|
TOSCHR = 30:45: 3#, 00466000
|
|
JADR = [37:11] #, % JUMPING ADDRESS 00467000
|
|
STA = [ 9: 9] #, % STATION FROM STATUS WORD 00468000
|
|
NEXT = [18:15] #, % NEXT BASE COUNT 00469000
|
|
CUR = [33:15] #, % CURRENT BASE COUNTER 00470000
|
|
TONEXT = 18:33:15#, 00471000
|
|
TOCUR = 33:33:15#, 00472000
|
|
D2 = [37:10] #, % DIV 2 00473000
|
|
D4 = [36:10] #, % DIV 4 00474000
|
|
D32 = [33:10] #, % DIV 32 00475000
|
|
D512 = [33: 6] #, % DIV 512 00476000
|
|
M4 = [46: 2] #, % MOD 4 00477000
|
|
M32 = [43: 5] #, % MOD 32 00478000
|
|
CFX8 = 30:33:15#; % C-FIELD | 8 00479000
|
|
00480000
|
|
DEFINE % MACRO ADDRESS STRUCTURES 00481000
|
|
LALFBAS = 0 #, 00482000
|
|
LINTBAS = 256 #, 00483000
|
|
LPTRBAS = 768 #, 00484000
|
|
GALFBAS = 1280 #, 00485000
|
|
GINTBAS = 1792 #, 00486000
|
|
GPTRBAS = 2816 #, 00487000
|
|
CONSBAS = 3840 #, 00488000
|
|
LALFMAX = 255 #, 00489000
|
|
LINTMAX = 767 #, 00490000
|
|
LPTRMAX = 1279 #, 00491000
|
|
GALFMAX = 1791 #, 00492000
|
|
GINTMAX = 2815 #, 00493000
|
|
GPTRMAX = 3839 #, 00494000
|
|
CONSMAX = 4095 #, 00495000
|
|
00496000
|
|
ELBMAX = 90 #, 00497000
|
|
TANKMAX = 180 #, 00498000
|
|
BFRMAX = 350 #, % SIZE OF BFR 00498100
|
|
IDMAX = 90 #, % MAX CHR IN SCANNED ITEM (NOT A STRING) 00499000
|
|
MSMAX = 1950 #, % MAX CHR IN MSTRING 00500000
|
|
CONVBAS = 1011 #, 00501000
|
|
CREV = 6 #, % REVERSE COMPARE 00502000
|
|
PATCHMAX= 1000 #, % MAX BACKPATCHES 00502050
|
|
PTCHMAX = 268 #, % MAX RESERVES | 2 00502100
|
|
MLMAX = 2043 #; % MAX CODE ADDRESS 00503000
|
|
00504000
|
|
DEFINE % MACRO OPERATORS 00505000
|
|
ONOPP = 00 #, % NO OPERATION 00506000
|
|
OOPSU = 01 #, % OPEN PSEUDOREADER 00507000
|
|
OCPSU = 02 #, % CLOSE PSEUDOREADER 00508000
|
|
OSEQL = 03 #, % STRING COMPARE EQUAL 00509000
|
|
OSNEQ = 04 #, % STRING COMPARE NOT EQUAL 00510000
|
|
OSLSS = 05 #, % STRING COMPARE LESS 00511000
|
|
OSLEQ = 06 #, % STRING COMPARE LESS THAN OR EQUAL 00512000
|
|
OSGTR = 07 #, % STRING COMPARE GREATER 00513000
|
|
OSGEQ = 08 #, % STRING COMPARE GREATER THAN OR EQUAL 00514000
|
|
OOPDC = 09 #, % MSTRING OPERAND CALL..CAT 00515000
|
|
OOPDS = 10 #, % MSTRING OPERAND CALL..SPACE 00516000
|
|
ONSTR = 11 #, % NON-DESTRUCTIVE MSTRING STORE 00517000
|
|
ODSTR = 12 #, % DESTRUCTIVE MSTRING STORE 00518000
|
|
OISTR = 13 #, % INTEGER STORE 00519000
|
|
OIOPC = 14 #, % INTEGER MSTRING OPERAND CALL 00520000
|
|
OADDI = 15 #, % ADD INTEGER MSTRING 00521000
|
|
OSUBI = 16 #, % SUBTRACT INTEGER MSTRING 00522000
|
|
OMULI = 17 #, % MULTIPLY INTEGER MSTRING 00523000
|
|
ODIVI = 18 #, % DIVIDE INTEGER MSTRING 00524000
|
|
OOP19 = 19 #, 00525000
|
|
OOP20 = 20 #, 00526000
|
|
OILIT = 21 #, % INTEGER LITERAL CALL 00527000
|
|
OADDL = 22 #, % ADD LITERAL 00528000
|
|
OSUBL = 23 #, % SUBTRACT LITERAL 00529000
|
|
OMULL = 24 #, % MULTIPLY LITERAL 00530000
|
|
ODIVL = 25 #, % DIVIDE LITERAL 00531000
|
|
OLT1C = 26 #, % 1-LIT..CAT 00532000
|
|
OLT2C = 27 #, % 2-LIT..CAT 00533000
|
|
OLT2S = 28 #, % 2-LIT..SPACE 00534000
|
|
OOP29 = 29 #, 00535000
|
|
OOP30 = 30 #, 00536000
|
|
OOP31 = 31 #, 00537000
|
|
OOP32 = 32 #, 00538000
|
|
OOP33 = 33 #, 00539000
|
|
OOP34 = 34 #, 00540000
|
|
OOP35 = 35 #, 00541000
|
|
OINPT = 36 #, % INPUT SEQUENCE 00542000
|
|
OOTPT = 37 #, % OUTPUT SEQUENCE 00543000
|
|
OERRO = 38 #, % ERROR, WARNING, NOTE SEQUENCE 00544000
|
|
OOP39 = 39 #, 00545000
|
|
OOP40 = 40 #, 00546000
|
|
OLDFT = 41 #, % LOAD FOR TEST 00547000
|
|
OSUNC = 42 #, % SCAN UNTIL..CAT 00548000
|
|
OSUNS = 43 #, % SCAN UNTIL..SPACE 00549000
|
|
OSTHC = 44 #, % SCAN THRU..CAT 00550000
|
|
OSTHS = 45 #, % SCAN THRU..SPACE 00551000
|
|
OENTR = 46 #, % USERDICT ENTRY 00552000
|
|
OFIND = 47 #, % FIND USERDICT ENTRY 00553000
|
|
OSRCH = 48 #, % SEARCH USERDICT 00554000
|
|
OOP49 = 49 #, 00555000
|
|
OOP50 = 50 #, 00556000
|
|
OTYPC = 51 #, % SCAN TYPE..CAT 00557000
|
|
OTYPS = 52 #, % SCAN TYPE..SPACE 00558000
|
|
OSETL = 53 #, % SET LENGTH 00559000
|
|
OCONV = 54 #, % CONVERT 00560000
|
|
OINDC = 55 #, % INDIRECT ADDRESS CALL 00561000
|
|
OICMP = 56 #, % INTEGER COMPARE 00562000
|
|
OTOGL = 57 #, % TOGGLE SET RESET OPERATIONS 00563000
|
|
OOP58 = 58 #, 00564000
|
|
OOP59 = 59 #, 00565000
|
|
OOP60 = 60 #, 00566000
|
|
OJMPC = 61 #, % JUMP CONDITIONAL 00567000
|
|
OJUMP = 62 #, % JUMP UNCONDITIONAL 00568000
|
|
OINT1 = 63 #, % INTRINSIC 1 (CASES FOLLOW (+64)) 00569000
|
|
OBGNL = 64 #, % BEGINLEVEL (+OP) 00570000
|
|
OBLKL = 69 #, % BLOCKLEVEL (+OP) 00571000
|
|
ODIAL = 74 #, % DIAL FIRST CHARACTER 00572000
|
|
OLINC = 75 #, % LINE..CAT 00573000
|
|
OLINS = 76 #, % LINE..SPACE 00574000
|
|
OENTI = 77 #, % ENTIER 00575000
|
|
OLENG = 78 #, % LENGTH 00576000
|
|
ORDCD = 79 #, % READACARD 00577000
|
|
ODELE = 80 #, % DELETE 00578000
|
|
OSTCK = 81 #, % STACK 00579000
|
|
ONSTK = 82 #, % UNSTACK 00580000
|
|
OSCNT = 83 #, % SCAN COUNT 00581000
|
|
OLEVL = 88 #, % UDICT LEVEL 00582000
|
|
OQUAL = 89 #, % UDICT QUALIFIER 00583000
|
|
ONAME = 90 #, % UDICT ENTRY NAME 00584000
|
|
OEXIT = 91 #; % EXIT MACRO 00585000
|
|
00586000
|
|
00587000
|
|
DEFINE % SCAN CLASSES 00588000
|
|
VSPECIAL = 00 #, % SPECIAL CHARACTER 00589000
|
|
VNUMBER = 01 #, % REAL OR INTEGER NUMBER 00590000
|
|
VOCTAL = 02 #, % WRL OCTAL CONSTANT 00591000
|
|
VSTRING = 03 #, % QUOTED STRING 00592000
|
|
VTORF = 04 #, % TRUE OR FALSE 00593000
|
|
VNOTDEC = 05 #, % NON RESCANNED ID 00594000
|
|
VMFIELDID = 13 #, % MFIELD FUNCTION 00595000
|
|
% 0 => ALPHA 00596000
|
|
% 1 => INTEGER 00597000
|
|
VMACRONAME = 14 #, % MACRO IDENTIFIER 00598000
|
|
% SEE VOTHERS SUBCLASSES 00599000
|
|
VPARAMID = 15 #, % PARAMETRIC DEFINE PARAMETER 00600000
|
|
% N = PARAMETER # 00601000
|
|
VSTRINGNAME = 16 #, % MSTRING, MPOINTER ID 00602000
|
|
% 0 => ALPHA MSTRING 00603000
|
|
% 1 => INTEGER MSTRING 00604000
|
|
% 2 => ALPHA MPOINTER 00605000
|
|
% 3 => INTEGER MPOINTER 00606000
|
|
% 4 => DICTIONARY ALPHA MSTRING 00607000
|
|
% 5 => DICTIONARY INTEGER MSTRING 00608000
|
|
% 6 => DICTIONARY MPOINTER 00609000
|
|
VALGOLIDENT = 17 #, % ALGOL DECLARED ID 00610000
|
|
% SEE VOTHERS SUBCLASSES 00611000
|
|
VDEFINEDID = 18 #, % DEFINE ID 00612000
|
|
% 0 => 1 IDENTIFIER 00613000
|
|
% 1 => MANY THINGS, LAST ITEM = ID 00614000
|
|
% 2 => 1 SPCHR 00615000
|
|
% 3 => MANY THINGS, LAST ITEM = SPCHR 00616000
|
|
% 4+=> PARAMETRIC 00617000
|
|
VDOLLARID = 19 #, % MCALGOL DOLLAR CARD RESERVED WORD 00618000
|
|
% 00 => CARD 00619000
|
|
% 01 => DISK 00620000
|
|
% 02 => NEW 00621000
|
|
% 03 => SEQ 00622000
|
|
% 04 => DUMP 00623000
|
|
% 05 => VOID 00624000
|
|
% 06 => LIST 00625000
|
|
% 07 => DOUBLE 00626000
|
|
% 08 => MONITOR 00627000
|
|
% 09 => TRACE 00628000
|
|
% 10 => DEBUGN 00629000
|
|
% 11 => ACCUM 00630000
|
|
% 12 => UNPACK 00631000
|
|
% 13 => INTER 00632000
|
|
% 14 => PRT 00633000
|
|
% 15 => BLOCK 00634000
|
|
% 16 => WARN 00635000
|
|
% 17 => PAGE 00636000
|
|
% 18 => INDEX 00637000
|
|
% 19 => PSEUDO 00638000
|
|
VSTREAMRES = 20 #, % STREAM RESERVED WORD 00639000
|
|
VMACRORES = 21 #, % MACRO RESERVED WORD 00640000
|
|
% SEE VMACRORES SUBCLASSES 00641000
|
|
VOTHERS = 22 #, % ALGOL RESERVED? WORD 00642000
|
|
% SEE VOTHERS SUBCLASSES 00643000
|
|
VDECLRN = 23 #, % DECLARATION POINTER 00644000
|
|
VPATCHID = 24 #; % PATCH IDENTIFIER 00645000
|
|
00646000
|
|
DEFINE % VOTHERS SUBCLASSES 00647000
|
|
OWNV = 01 #, 00648000
|
|
SAVEV = 02 #, 00649000
|
|
BOOLEANV = 03 #, 00650000
|
|
REALV = 04 #, 00651000
|
|
ALPHAV = 05 #, 00652000
|
|
INTEGERV = 06 #, 00653000
|
|
LABELV = 07 #, 00654000
|
|
DUMPV = 08 #, 00655000
|
|
MONITORV = 09 #, 00656000
|
|
OUTV = 10 #, 00657000
|
|
INV = 11 #, 00658000
|
|
SWITCHV = 12 #, 00659000
|
|
STREAMV = 13 #, 00660000
|
|
PROCEDUREV = 14 #, 00661000
|
|
ARRAYV = 15 #, 00662000
|
|
STRINGV = 16 #, 00663000
|
|
FILEV = 17 #, 00664000
|
|
LISTV = 18 #, 00665000
|
|
FORMATV = 19 #, 00666000
|
|
MACROV = 20 #, 00667000
|
|
DEFINEV = 21 #, 00668000
|
|
MFIELDV = 22 #, 00669000
|
|
DICTIONARYV = 23 #, 00670000
|
|
MPOINTERV = 24 #, 00671000
|
|
NOV = 31 #, 00672000
|
|
PAGEV = 32 #, 00673000
|
|
DBLV = 33 #, 00674000
|
|
READV = 36 #, 00675000
|
|
WRITEV = 37 #, 00676000
|
|
BEGINV = 42 #, 00677000
|
|
FORV = 43 #, 00678000
|
|
THENV = 44 #, 00679000
|
|
DOV = 45 #, 00680000
|
|
UNTILV = 46 #, 00681000
|
|
ELSEV = 47 #, 00682000
|
|
ENDV = 48 #, 00683000
|
|
FILLV = 49 #, 00684000
|
|
TOV = 50 #, 00685000
|
|
IFV = 51 #, 00686000
|
|
GOV = 52 #, 00687000
|
|
RELEASEV = 53 #, 00688000
|
|
DOUBLEV = 54 #, 00689000
|
|
REVERSEV = 55 #, 00690000
|
|
MODV = 56 #, 00691000
|
|
DIVV = 57 #, 00692000
|
|
ENTIERV = 58 #, 00693000
|
|
COSV = 59 #, 00694000
|
|
EXPV = 60 #, 00695000
|
|
LNV = 61 #, 00696000
|
|
ARCTANV = 62 #, 00697000
|
|
SINV = 63 #, 00698000
|
|
SQRTV = 64 #, 00699000
|
|
SIGNV = 65 #, 00700000
|
|
ABSV = 66 #, 00701000
|
|
COMMENTV = 71 #, 00702000
|
|
FORWARDV = 72 #, 00703000
|
|
STEPV = 73 #, 00704000
|
|
WHILEV = 74 #, 00705000
|
|
REPLACEV = 75 #, 00706000
|
|
VALUEV = 76 #, 00707000
|
|
WITHV = 77 #, 00708000
|
|
NOTV = 85 #, 00709000
|
|
EQVV = 88 #, 00710000
|
|
IMPV = 89 #, 00711000
|
|
ORV = 90 #, 00712000
|
|
ANDV = 91 #; 00713000
|
|
00714000
|
|
DEFINE % VMACRORES SUBCLASSES 00715000
|
|
% STATEMENT BEGINNERS 00716000
|
|
INPUTM = 00 #, 00717000
|
|
RESCANM = 01 #, 00718000
|
|
OUTPUTM = 02 #, 00719000
|
|
ERRORM = 03 #, 00720000
|
|
WARNINGM = 04 #, 00721000
|
|
POSTM = 05 #, 00722000
|
|
DELETEM = 06 #, 00723000
|
|
PATCHM = 07 #, 00724000
|
|
SETM = 08 #, 00725000
|
|
RESETM = 09 #, 00726000
|
|
% INTEGER SEQUENCE ELEMENTS ONLY 00727000
|
|
RESERVEM = 25 #, 00728000
|
|
RESERVESTMTM = 26 #, 00729000
|
|
ENTERM = 27 #, 00730000
|
|
FINDM = 28 #, 00731000
|
|
SEARCHM = 29 #, 00732000
|
|
LEVELM = 30 #, 00733000
|
|
QUALIFIERM = 31 #, 00734000
|
|
% INTEGER OR ALPHA SEQUENCE ELEMENTS 00735000
|
|
LINEM = 50 #, 00736000
|
|
ENTIERM = 51 #, 00737000
|
|
LENGTHM = 52 #, 00738000
|
|
% + OPERATORS 00739000
|
|
BEGINLEVELM = 60 #, 00740000
|
|
BLOCKLEVELM = 61 #, 00741000
|
|
SCANCOUNTM = 62 #, 00742000
|
|
% ALPHA SEQUENCE ELEMENTS ONLY 00743000
|
|
UNTILM = 75 #, 00744000
|
|
THRUM = 76 #, 00745000
|
|
QUOTEM = 77 #, 00746000
|
|
NAMEM = 78 #, 00747000
|
|
% MISC 00748000
|
|
NULLM = 97 #, 00748050
|
|
EQUIVM = 98 #, 00748100
|
|
TOGGLEM = 99 #; 00749000
|
|
00750000
|
|
DEFINE % VMACRORES SCAN TYPES SUBCLASSES 00751000
|
|
% ALPHA ONLY 00752000
|
|
BEXPRESSIONM = 100 #, 00753000
|
|
CHARACTERM = 101 #, 00754000
|
|
ELEMENTM = 102 #, 00755000
|
|
EXPRESSIONM = 103 #, 00756000
|
|
IDENTIFIERM = 104 #, 00757000
|
|
STATEMENTM = 105 #, 00758000
|
|
VARIABLEM = 106 #, 00759000
|
|
DECLARATIONM = 107 #, 00760000
|
|
BPRIMARYM = 108 #, 00761000
|
|
PRIMARYM = 109 #, 00762000
|
|
% INTEGER OR ALPHA 00763000
|
|
NUMBERM = 125 #, 00764000
|
|
INTGERM = 126 #, 00765000
|
|
% TOGGLE CONDITIONS 00766000
|
|
DECLAREM = 200 #, 00767000
|
|
COMMENTM = 201 #, 00768000
|
|
ENDCOMMENTM = 202 #, 00769000
|
|
INHIBITM = 203 #, 00770000
|
|
USERM = 255 #; 00771000
|
|
00772000
|
|
DEFINE 00773000
|
|
T = TABLET #, 00774000
|
|
STEPI = TYPE ~ TABLE(TABLET~TABLET+1)#; 00775000
|
|
ARRAY ACCM[0:255],COMMENT ALPHA SEQUENCE ACCUMULATOR. FORMAT FOR 00800000
|
|
ALL ALPHA MSTRINGS IS 3 CHR FOR BINARY COUNTER 00801000
|
|
FIELD FOLLOWED BY CHARACTERS FOLLOWED BY SPACE; 00802000
|
|
BFR[0:BFRMAX-1], COMMENT PSEUDO & INPUT IMAGE BUFFER TO 00803000
|
|
CONTAIN "INPUT STRING". INPUT IMAGES ARE PLACED 00804000
|
|
IN THE RIGHTMOST 10 WORDS WITH A SCANNER 00805000
|
|
TERMINATING "%" IN COLUMN 73. PSEUDO INPUT IS 00806000
|
|
"STACKED" TO THE LEFT OF THE NEXT ITEM TO BE 00807000
|
|
SCANNED. A "%" IS PLACED AT THE RIGHT OF EACH 00808000
|
|
PSEUDOREADER TO CAUSE UNSTACKING AND/OR 00809000
|
|
PREVENT OVER-SCANNING ON DECOMPOSITION; 00810000
|
|
BLIST[0:249], COMMENT BEGIN-END AND BLOCK CONTROL 00811000
|
|
CUT BACK INFO FOR DICTIONARY ENTRIES. 00812000
|
|
MCALGOL DICT LIST IN 0-124, 00813000
|
|
USER DICT LIST IN 125-249; 00814000
|
|
COMCON[0:255], COMMENT MACRO COMPILE-TIME CONSTANTS 00815000
|
|
STORAGE AREA; 00816000
|
|
DECL[0:255], COMMENT DECLARATION TIME STORAGE SPACE FOR 00817000
|
|
PACKED ELEMENTS OF A DECLARATION; 00818000
|
|
DFN[0:255], COMMENT USED TO EXPAND DEFINES; 00819000
|
|
DICT[0:63,0:255], COMMENT MCALGOL DICTIONARY. 00820000
|
|
WORD[0] CONTAINS SCRAMBLE LINK WORD. 00821000
|
|
=-1 IF END OF CHAIN. 00822000
|
|
WORD[1] CONTAINS ELBAT WORD. 00823000
|
|
WORDS[2-N] CONTAIN IDENTIFIER IN ALPHA 00824000
|
|
MSTRING FORMAT. 00825000
|
|
N IS (CTR+10)DIV 8-2 WORDS FOR THE 00826000
|
|
CHR REMAINING AFTER FIRST FIVE. 00827000
|
|
WORD[1].ADINFO HAS THE FOLLOWING USES: 00828000
|
|
MSTRINGS, MPOINTERS: WORD[N+1] 00829000
|
|
LIM = LENGTH IN CHR 00830000
|
|
REF = SYMBOLIC ADDRESS 00831000
|
|
MACROS: WORD[N+1] 00832000
|
|
MLICT = # LOCAL INTEGERS 00833000
|
|
MLACT = # LOCAL ALPHAS 00834000
|
|
MPOOL = # WORDS IN CONSTANT POOL 00835000
|
|
MML = # WORDS OF CODE 00836000
|
|
WORD[N+2]: 00837000
|
|
MLOCT = # LOCAL MPOINTERS 00838000
|
|
MPT = LOCATION OF CODE IN MCODE 00839000
|
|
MFIELDS: WORD[N+1] = CONSTANT POOL 00840000
|
|
ENTRY FOR MFIELD DESCRIPTOR. 00841000
|
|
DECLARATIONS: MDECL ADDRESS WHERE 00842000
|
|
ALPHA CAN BE FOUND. 00843000
|
|
IDENTIFIERS: TANK ADDRESS OF ORIGINAL 00844000
|
|
ALPHA. 00845000
|
|
SPECIAL CHARACTERS: THE CHARACTER. 00846000
|
|
PARAMETRIC DEFINES: WORD[N+1] 00847000
|
|
LIM = # RECONSTRUCTION PARTS 00848000
|
|
REF = MDECL ADDRESS OF RECON INFO 00849000
|
|
WORDS[N+2->...] SPACE FOR PARAMETER 00850000
|
|
POINTERS DURING PROCESSING 00851000
|
|
ELBAT.SUB = 4+# OF PARAMETERS 00852000
|
|
; 00853000
|
|
DLIST[0:249], COMMENT SCRAMBL STACKHEAD. 00854000
|
|
MCALGOL DICT IN 0-124. USER DICT IN 125-249; 00855000
|
|
ELBAT[0:269], COMMENT CONTAINS ELBAT WORDS FOR SCANNED 00856000
|
|
ITEMS. NXTELB IS SERIAL. BELB IS CURRENT BASE 00857000
|
|
INDEX OF ELBAT[0]. OVERFLOW KEEPS LAST 10 ITEMS; 00858000
|
|
ERB[0:14], COMMENT ERROR BUFFER AND GLOBAL ALPHA TEMP; 00859000
|
|
GINT[0:255],COMMENT GLOBAL INTEGER MSTRING SPACE; 00860000
|
|
GLOBAL[0:63,0:255], COMMENT GLOBAL ALPHA MSTRINGS. ROW 00861000
|
|
SIZES ARE FORESHORTENED AT DECLARATION TIME. 00862000
|
|
MAX SIZE IS 512, BUT NO ONE HAS YET USED OR 00863000
|
|
EXCEEDED 64; 00864000
|
|
GPTR[0:255], COMMENT GLOBAL MPOINTERS; 00865000
|
|
IDENT[0:255], COMMENT LAST SCANNED IDENTIFIER OR 00866000
|
|
QUOTED STRING; 00867000
|
|
LINKS[0:3], COMMENT SEQUENCE FIELDS OF INPUT AND PREVIOUS 00868000
|
|
ERROR IMAGES; 00869000
|
|
LOCAL[0:63,0:255], COMMENT LOACL STORAGE FOR MACROS. ROWS OF 00870000
|
|
LOCAL CONTAIN: 00871000
|
|
0 - INTEGER MSTRINGS, 1 WORD PER MSTRING 00872000
|
|
1 - CONSTANT POOL 00873000
|
|
2 - CODE STRING 00874000
|
|
3 - ALPHA COMPARISON SPACE & "JUNK" 00875000
|
|
4 - SCAN POOL FOR LOAD-FOR-TEST SEQUENCE 00876000
|
|
5 - TEMP ACCM STORAGE WHILE LOADING..NOT STACKED TO DISK 00877000
|
|
6 - MPOINTERS 00878000
|
|
7-N - ALPHA MSTRINGS, 4 UNITS OF 64 WORDS EACH; 00879000
|
|
00880000
|
|
MAXINFO[0:99], COMMENT PSEUDOREADER STACKING INFO; 00883000
|
|
MC[0:255], COMMENT MACRO COMPILE-TIME CODE ARRAY; 00884000
|
|
MCODE[0:255], COMMENT STORAGE FOR COMPILED CODE, 00885000
|
|
CONSTANTS, AND SIZING INFO; 00886000
|
|
MDECL[0:255], COMMENT STORAGE FOR PACKED 00887000
|
|
DECLARATIONS AND DEFINES; 00888000
|
|
MNEMON[0:99], COMMENT CONTAINS DEBUGGING MNEMONICS FOR 00889000
|
|
OPCODES AND THE INTERPRETATION-TIME PROPERTIES 00890000
|
|
THEREOF. 0-63 ARE ACTUAL OPCODES. }64 ARE 00891000
|
|
OINT1 CASE SWITCH OPERATORS(+64); 00892000
|
|
OA[0:1022],COMMENT OUTPUT ACCUMULATOR FOR OUTPUT OF A MACRO. 00893000
|
|
SEQUENCES ARE APPENDED SERIALLY AT END. 00894000
|
|
OA WILL BE PSEUDOREAD UPON TERMINATION 00895000
|
|
OF MACRO; 00896000
|
|
$ INCLUDE 00899001, IF INTERMEDIATE; 00896999
|
|
PATCHSPACE[0:PTCHMAX+1],COMMENT LOCATOR SPACE FOR PATCH RECORDS.00897000
|
|
TWO WORD ENTRIES KEEP TRACK OF REQUESTED AND 00898000
|
|
USED SPACE; 00899000
|
|
POB[0:14], COMMENT PACKED OUTPUT BUFFER FOR OUTPUT STRING; 00900000
|
|
PPB[0:14], COMMENT PACKED PATCH BUFFER FOR BACKPATCHES; 00901000
|
|
PROCT[0:63], COMMENT PROCEDURE NESTING AND BEGIN-END 00902000
|
|
COUNTER; 00903000
|
|
RELOP[0:11], COMMENT RELATION AND COUNTER RELATION 00904000
|
|
OPTIMIZATION ARRAY; 00905000
|
|
SPACEMAP[0:23], COMMENT BIT MAP OF SPACE ASSIGNMENTS 00906000
|
|
IN GLOBAL & LOCAL; 00907000
|
|
STMTSTACK[0:127], COMMENT RESERVE STATEMENT STACKED 00908000
|
|
OCCURENCE STORAGE; 00909000
|
|
TANK[0:179], COMMENT CIRCULAR FILE OF IDENTIFIER ALPHA 00910000
|
|
POINTED TO BY ELBAT WORDS; 00911000
|
|
TELBAT[0:89], COMMENT TEMPORARY STORAGE FOR ELBAT WORDS 00912000
|
|
ALREADY PRESCANNED AT THE TIME OF A PSEUDOREAD. 00913000
|
|
THEY WILL BE RECALLED WHEN THE PSEUDOREADER 00914000
|
|
IS CLOSED; 00915000
|
|
TTANK[0:179], COMMENT CIRCULAR FILE OF ALPHA FOR ITEMS 00916000
|
|
IN TELBAT; 00917000
|
|
$ INCLUDE 00917101, IF DEBUGGING; 00917049
|
|
TYPENAME[0:63], COMMENT NAMES OF SCANTYPE PROCEDURES 00917050
|
|
USED IN TRACING; 00917100
|
|
$ INCLUDE 00926001, IF ADVANCED; 00917999
|
|
UDICT[0:63,0:255]; COMMENT USER DICTIONARY. 00918000
|
|
WORD[0] IS DLIST LINK. 00919000
|
|
WORD[1] HAS THE FOLLOWING FIELDS: 00920000
|
|
00921000
|
|
00922000
|
|
00923000
|
|
00924000
|
|
00925000
|
|
; 00926000
|
|
$ OMIT 00926051, IF ADVANCED; 00926049
|
|
UDICT[0:0]; % DUMMY 00926050
|
|
BOOLEAN ARRAY 00927000
|
|
ERRMASK[0:31]; COMMENT A BIT IS SET IN ERRMASK FOR EACH 00928000
|
|
ERROR AND WARNING MESSAGE ENCOUNTERED. THIS 00929000
|
|
GUIDES THE ERROR MESSAGE LISTER AT THE END 00930000
|
|
OF THE PROGRAM; 00931000
|
|
FILE OUT CODE DISK SERIAL[20:IF ERRCT=0 THEN 120 ELSE(ERRCT+299) 00950000
|
|
DIV 300|15](1,10,150,SAVE 780); 00951000
|
|
FILE OUT PRINTER 4(1,15); 00952000
|
|
FILE OUT CC DISK SERIAL [20:24](1,10,60); 00953000
|
|
FILE IN DISK DISK SERIAL (1,150,10); 00954000
|
|
FILE IN CARD (1,10,150); 00955000
|
|
FILE OUT NEWDISK DISK SERIAL [20:(ERRCT+299)DIV 300|15] 00956000
|
|
(1,10,150,SAVE 780); 00957000
|
|
FILE DISKSTACK DISK RANDOM [20:20](2,270); 00958000
|
|
$ INCLUDE 00959101, IF INTERMEDIATE; 00958999
|
|
FILE BACKPATCHES DISK RANDOM[20:(PATCHMAX+199)DIV 200|10] 00959000
|
|
(1,9,90); 00959100
|
|
FILE OUT INDEX DISK SERIAL [20:60](1,10,150,SAVE 1); 00960000
|
|
$ INCLUDE 00961001, IF INTERMEDIATE; 00960999
|
|
FILE ISOCODE DISK RANDOM [20: 5] (1,120); 00961000
|
|
FILE MSTOR DISK RANDOM [20:15] (1,256); 00962000
|
|
FILE ERRORS DISK RANDOM (1,10,30); 00963000
|
|
FORMAT 00975000
|
|
MON1(A5"["I5"] "A1,X1,O" ("3I6")"A7,X1,A1), 00976000
|
|
MON2("CAD="I4" OP="A4" ADD="V4" T="I5" TOG="L1" HM="I4, 00977000
|
|
" OHM="I4" IACCM="I9" IACCM1="I9), 00978000
|
|
MON3("SLIPWORDS"2I5), 00979000
|
|
MON4(A2,I5,L6); 00980000
|
|
FORMAT 00981000
|
|
FLUSH("FLUSHED"); 00982000
|
|
$ INCLUDE 00984001, IF DEBUGGING; 00982999
|
|
FORMAT 00983000
|
|
DEBUG(I5" OP="A4" ADDR="V4); 00984000
|
|
$ INCLUDE 01014001, IF INTERMEDIATE; 00999999
|
|
INTEGER SPOTISOCAT; % MOVE NOT THESE 3 DECLARATIONS 01000000
|
|
REAL PROCEDURE ISOCAT(A); VALUE A; INTEGER A; 01001000
|
|
BEGIN REAL B; ISOCAT ~ B END; 01002000
|
|
SAVE ARRAY CODRAY[0:119]; 01003000
|
|
PROCEDURE STARTUPISOCAT; BEGIN 01004000
|
|
STREAM PROCEDURE FIXISOCAT(SCAT); 01005000
|
|
BEGIN 01006000
|
|
SI~SCAT; SI~SI+21; 01007000
|
|
DI~SCAT; DI~DI+8; DS~5 LIT "=0000"; DS~3 CHR; 01008000
|
|
DI~DI-3; DS~3 RESET; 01009000
|
|
END; 01010000
|
|
NOWCODE ~ REAL(NOT FALSE); 01011000
|
|
CODRAY[0] ~ REAL(<55400662310055>); % F-1,LFU 01012000
|
|
FIXISOCAT(SPOTISOCAT); 01013000
|
|
END STARTUPISOCAT; 01014000
|
|
BEGIN % END SETUP 01100000
|
|
LABEL DP,EOF,ENDDD; 01101000
|
|
PROCEDURE READACARD; FORWARD; 01102000
|
|
PROCEDURE PACKET; FORWARD; 01103000
|
|
PROCEDURE SLIPWORDS(A,B); VALUE A,B; INTEGER A,B; FORWARD; 01104000
|
|
PROCEDURE WRAPBLOCK(T); VALUE T; BOOLEAN T; FORWARD; 01105000
|
|
PROCEDURE MACRON(QQ,Q); VALUE Q,QQ; REAL Q,QQ; FORWARD; 01106000
|
|
PROCEDURE MACRO(Q); VALUE Q; REAL Q; FORWARD; 01107000
|
|
PROCEDURE DECLARATION; FORWARD; 01108000
|
|
INTEGER PROCEDURE TABLE(P); VALUE P; INTEGER P; FORWARD; 01109000
|
|
$ INCLUDE 01110001, IF INTERMEDIATE; 01109999
|
|
REAL PROCEDURE COMPILEFIELD(A,B); VALUE A,B; INTEGER A,B; FORWARD; 01110000
|
|
BOOLEAN PROCEDURE MDOLLAR(B); VALUE B; BOOLEAN B; FORWARD; 01111000
|
|
COMMENT TIMEIT POSTS THE TIME LINE AT THE BEGINNING AND 01112000
|
|
ENDING OF THE LISTING; 01113000
|
|
PROCEDURE TIMEIT(A); 01114000
|
|
FILE A; 01115000
|
|
BEGIN 01116000
|
|
OWN BOOLEAN B; 01117000
|
|
INTEGER E, F, G, H, I; 01118000
|
|
STREAM PROCEDURE C(A,B,D); VALUE A; BEGIN 01119000
|
|
SI~LOC A; SI~SI+3; DI~B; DS~2 OCT; DI~D; DS~3 OCT END; 01120000
|
|
STREAM PROCEDURE D(A, B, C, E, F, G, H, I, J, K); 01121000
|
|
VALUE A, B, C, E, F, G, H, I, J; 01122000
|
|
BEGIN 01123000
|
|
LABEL L, M, N, O, P, Q; 01124000
|
|
DI~K; DS~8 LIT " "; SI~K; DS~14 WDS; DI~K; SI~LOC A; 01125000
|
|
DS~2 DEC; 2(DS~LIT ":"; DS~2 DEC); DI~DI+1; 01126000
|
|
CI~CI+E; % 5 SYLLABLE HOPS 01127000
|
|
DS~3 LIT "SUN"; GO L; SKIP SB; 01128000
|
|
DS~3 LIT "MON"; GO L; SKIP SB; 01129000
|
|
DS~4 LIT "TUES"; GO L; SKIP SB; 01130000
|
|
DS~6 LIT "WEDNES"; GO L; 01131000
|
|
DS~5 LIT "THURS"; GO L; 01132000
|
|
DS~3 LIT "FRI"; GO L; SKIP SB; 01133000
|
|
DS~5 LIT "SATUR"; 01134000
|
|
L: DS~4 LIT "DAY,"; DI~DI+1; 01135000
|
|
CI~CI+F; % 5 SYLLABLE HOPS 01136000
|
|
DS~3 LIT "JAN"; GO M; SKIP SB; 01137000
|
|
DS~4 LIT "FEBR"; GO M; SKIP SB; 01138000
|
|
DS~5 LIT "MARCH"; GO O; 01139000
|
|
DS~5 LIT "APRIL"; GO O; 01140000
|
|
DS~3 LIT "MAY"; GO O; SKIP SB; 01141000
|
|
DS~4 LIT "JUNE"; GO O; SKIP SB; 01142000
|
|
DS~4 LIT "JULY"; GO O; SKIP SB; 01143000
|
|
DS~6 LIT "AUGUST"; GO O; 01144000
|
|
DS~6 LIT "SEPTEM"; GO N; 01145000
|
|
DS~4 LIT "OCTO"; GO N; SKIP SB; 01146000
|
|
DS~5 LIT "NOVEM"; GO N; 01147000
|
|
DS~5 LIT "DECEM"; GO N; 01148000
|
|
M: DS~4 LIT "UARY"; GO O; 01149000
|
|
N: DS~3 LIT "BER"; 01150000
|
|
O: DI~DI+1; A~DI; DI~LOC B; SI~LOC G; DS~2 DEC; DI~A; 01151000
|
|
SI~LOC B; IF SC="0" THEN SI~SI+1 ELSE DS~CHR; DS~CHR; 01152000
|
|
DS~4 LIT ", 19"; SI~LOC H; DS~2 DEC; 01153000
|
|
IF SC!"+" THEN BEGIN 01154000
|
|
DI~DI+4; DS~16 LIT "PROCESSOR TIME ="; DI~DI+1; 01155000
|
|
A~CI; GO P; 01156000
|
|
DI~DI+4; DS~10 LIT "I/O TIME ="; DI~DI+1; 01157000
|
|
SI~LOC J; A~CI; GO P; GO Q; 01158000
|
|
P: B~DI; DI~LOC C; DS~8 DEC; SI~LOC C; DI~B; 01159000
|
|
5(IF TOGGLE THEN IF SC="0" THEN SI~SI+1 ELSE 01160000
|
|
DS~CHR ELSE DS~CHR); 01161000
|
|
DS~CHR; DS~LIT "."; DS~2 CHR; DS~8 LIT " SECONDS"; 01162000
|
|
CI~A; 01163000
|
|
Q: END; 01164000
|
|
END; 01165000
|
|
ARRAY J[0:14]; 01166000
|
|
C(TIME(0), E, F); 01167000
|
|
G~((((E-1) DIV 4)+E+F) MOD 7)|5; 01168000
|
|
IF F<60 THEN 01169000
|
|
F~ F-1 01170000
|
|
ELSE 01171000
|
|
IF E MOD 4=0 THEN 01172000
|
|
F~ F-1; 01173000
|
|
IF F>212 THEN 01174000
|
|
F~(F+31) DIV 61+F 01175000
|
|
ELSE 01176000
|
|
IF F>59 THEN 01177000
|
|
F~(F+62) DIV 61+F; 01178000
|
|
H~ TIME(1)|.016667; 01179000
|
|
D(H DIV 3600,I~H DIV 60 MOD 60,I~H MOD 60,G,(F DIV 31)|5, 01180000
|
|
H~F MOD 31+1,E,IF B THEN H~TIME(2)|1.6667 ELSE-1,IF B 01181000
|
|
THEN H~ TIME(3)|1.6667 ELSE-1, J[0]); 01182000
|
|
B~ TRUE; 01183000
|
|
WRITE(A[DBL], 15, J[*]) 01184000
|
|
END; 01185000
|
|
COMMENT SETSIZE CHANGES THE DESCRIPTOR SIZE FIELD OF 01200000
|
|
AN ARRAY OR VECTOR. L MUST NOT BE ZERO OR A NAME DESCRIPTOR 01201000
|
|
WILL RESULT; 01202000
|
|
STREAM PROCEDURE SETSIZE(L,A,M,N); 01203000
|
|
VALUE L, M, N; 01204000
|
|
BEGIN 01205000
|
|
SI~LOC L; SI~SI+6; DI~A; 01206000
|
|
N(DI~DI+8); M(16(DI~DI+32)); 01207000
|
|
DI~DI+1; DS~NUM; DS~CHR; 01208000
|
|
END; 01209000
|
|
COMMENT SIZE OBTAINS THE ARRAY SIZE FROM A ROW 01210000
|
|
DESCRIPTOR; 01211000
|
|
INTEGER STREAM PROCEDURE SIZE(A); 01212000
|
|
BEGIN 01213000
|
|
SI~LOC A; SI~SI+1; DI~LOC SIZE; DI~DI+6; 01214000
|
|
DS~NUM; DS~CHR; 01215000
|
|
END; 01216000
|
|
COMMENT MOVEDEC CREATES A DECIMAL STRING 8 CHR WIDE FROM A, 01217000
|
|
F LEADING ZEROES FILLED, AT B +C CHR. E CHR ARE TRANSFERRED 01218000
|
|
STARTING AT CHR D. A BLANK IS ALWAYS EMITTED TO THE RIGHT; 01219000
|
|
STREAM PROCEDURE MOVEDEC(A,B,C,D,E,F); 01220000
|
|
VALUE A,C,D,E,F; 01221000
|
|
BEGIN 01222000
|
|
SI~LOC A; DI~LOC A; DS~8 DEC; DI~DI-8; DS~F FILL; 01223000
|
|
SI~SI-8; DI~B; DI~DI+C; SI~SI+D; DS~E CHR; DS~LIT " "; 01224000
|
|
END; 01225000
|
|
COMMENT MASK SETS A BIT IN THE ERROR MASK FOR SYNTAX 01226000
|
|
ERRORS; 01227000
|
|
BOOLEAN STREAM PROCEDURE MASK(X); VALUE X; BEGIN 01228000
|
|
DI~LOC MASK; DI~DI+2; SKIP X DB; DS~SET END; 01229000
|
|
COMMENT CR OBTAINS A CHR FROM THE WORD & POSITION GIVEN; 01230000
|
|
ALPHA STREAM PROCEDURE CR(S,N); 01231000
|
|
VALUE N; 01232000
|
|
BEGIN 01233000
|
|
SI~S; SI~SI+N; DI~LOC CR; DI~DI+7; DS~CHR; 01234000
|
|
END; 01235000
|
|
COMMENT DIALB DIALS BLANKS INTO A SEQUENCE. USUALLY USED 01236000
|
|
FOR FILLING PARTIAL FIELDS WHEN SEQUENCE IS NOT LONG ENOUGH; 01237000
|
|
STREAM PROCEDURE DIALB(N,M,A,P); VALUE N,M,P; 01238000
|
|
BEGIN 01239000
|
|
DI~ A; DI~ DI+ P; 01240000
|
|
M(DS~ LIT " "); 01241000
|
|
N(32(DS~2 LIT " ")); 01242000
|
|
END; 01243000
|
|
COMMENT CONSTANTCONVERT TAKES A SIGNED OR UNSIGNED NUMBER 01244000
|
|
L CHR LONG AND CONVERTS IT TO A BINARY QUANTITY; 01245000
|
|
INTEGER STREAM PROCEDURE CONSTANTCONVERT(S,L); 01246000
|
|
VALUE L; 01247000
|
|
BEGIN 01248000
|
|
SI~ S; 01249000
|
|
SI~ SI+3; 01250000
|
|
IF SC="-" THEN BEGIN 01251000
|
|
TALLY~1; SI~ SI+1; END ELSE 01252000
|
|
IF SC="+" THEN SI~ SI+1; 01253000
|
|
DI~ LOC CONSTANTCONVERT; 01254000
|
|
DS~ L OCT; 01255000
|
|
DI~ LOC CONSTANTCONVERT; 01256000
|
|
L~ TALLY; L(DS~ LIT "+"); 01257000
|
|
END; 01258000
|
|
STREAM PROCEDURE BLANK(D,S1,S2); VALUE S1,S2; 01259000
|
|
COMMENT BLANK BLANKS OUT (64|S1 + S2 + 1) WORDS OF AN 01260000
|
|
ARRAY ROW; 01261000
|
|
BEGIN 01262000
|
|
DI~D; DS~8 LIT " "; SI~D; 01263000
|
|
S1(DS~32 WDS; DS~32 WDS); 01264000
|
|
DS~S2 WDS; 01265000
|
|
END; 01266000
|
|
COMMENT MOVE MOVES UP TO 4095 WORDS FROM S TO D; 01267000
|
|
STREAM PROCEDURE MOVE(N,S,D); 01268000
|
|
VALUE N; 01269000
|
|
BEGIN 01270000
|
|
LOCAL M; 01271000
|
|
SI~LOC N; SI~SI+6; DI~LOC M; DI~DI+7; DS~CHR; 01272000
|
|
SI~S; DI~D; DS~N WDS; M(DS~32 WDS; DS~32 WDS); 01273000
|
|
END MOVE; 01274000
|
|
COMMENT GET GETS WORD A OUT OF THE DICTIONARY; 01275000
|
|
REAL PROCEDURE GET(A); 01276000
|
|
VALUE A; 01277000
|
|
INTEGER A; 01278000
|
|
BEGIN 01279000
|
|
$ INCLUDE 01279520, IF COUNTING; 01279500
|
|
GETCT ~ *+1; 01279510
|
|
GET ~ V ~ DICT[A.IR,A.IC]; 01280000
|
|
$ INCLUDE 01283001, IF DEBUGGING; 01280999
|
|
IF MONITER AND PRINT THEN BEGIN LABEL L; L: 01281000
|
|
WRITE(PRINTER,MON1," DICT",A.ADINFO,"=",V, 01282000
|
|
V.CLASS,V.SUB,V.ADINFO)END; 01283000
|
|
END; 01284000
|
|
COMMENT PUT PUTS A WORD INTO THE DICTIONARY; 01285000
|
|
PROCEDURE PUT(A,V); 01286000
|
|
VALUE A, V; 01287000
|
|
INTEGER A; 01288000
|
|
REAL V; 01289000
|
|
BEGIN 01290000
|
|
$ INCLUDE 01290520, IF COUNTING; 01290500
|
|
PUTCT ~ *+1; 01290510
|
|
DICT[A.IR,A.IC] ~ V; 01291000
|
|
$ INCLUDE 01294001, IF DEBUGGING; 01291999
|
|
IF MONITER AND PRINT THEN BEGIN LABEL L; L: 01292000
|
|
WRITE(PRINTER,MON1," DICT",A.ADINFO,"~",V, 01293000
|
|
V.CLASS,V.SUB,V.ADINFO)END; 01294000
|
|
END; 01295000
|
|
COMMENT ERRORLINK LISTS ERRORS FROM STANDARD 01295020
|
|
LINKED ERROR FILES: "LANGUAG"/"ERRORS" AND "MCALGOL"/"ERRORS"; 01295040
|
|
PROCEDURE ERRORLINK(L); VALUE L; INTEGER L; 01295060
|
|
BEGIN 01295080
|
|
INTEGER STREAM PROCEDURE NEXTONE(A,B,C); VALUE B; BEGIN 01295100
|
|
SI~A; DI~LOC NEXTONE; DS~4 OCT; DI~C; DS~4 OCT; 01295120
|
|
SI~SI-4; DI~A; DS~4 CHR; DS~4 LIT " "; 01295140
|
|
B(DI~A; DS~4 LIT " "); 01295160
|
|
END; 01295180
|
|
LABEL WRONG; 01295200
|
|
INTEGER I,J,K; 01295220
|
|
READ(ERRORS[L],10,ERB[*])[WRONG]; 01295240
|
|
WHILE J~NEXTONE(ERB,I,K) ! 0 OR (I=0 AND L!K) DO 01295260
|
|
IF L!K THEN BEGIN 01295280
|
|
I ~ -1; 01295300
|
|
WRONG: WRITE(ERB[*],<"00009999ERROR IN ERROR FILE," 01295320
|
|
" PLEASE NOTIFY SYSTEMS GROUP">); 01295340
|
|
END ELSE BEGIN 01295360
|
|
WRITE(PRINTER,10,ERB[*]); 01295380
|
|
READ(ERRORS[L~J],10,ERB[*]); 01295400
|
|
I ~ 1; 01295420
|
|
END; 01295440
|
|
WRITE(PRINTER,10,ERB[*]); 01295460
|
|
END ERRORLINK; 01295480
|
|
COMMENT ERROR POSTS MCALGOL ERROR & WARNING MESSAGES; 01296000
|
|
PROCEDURE ERROR(CODE); 01297000
|
|
VALUE CODE; 01298000
|
|
INTEGER CODE; 01299000
|
|
BEGIN 01300000
|
|
ARRAY TERB[0:14]; 01301000
|
|
LABEL NOPRINT; 01302000
|
|
INTEGER X, Y; 01303000
|
|
STREAM PROCEDURE ADERR(S,SS,W,C,D,E,F); 01304000
|
|
VALUE SS,W,C,E,F; 01305000
|
|
BEGIN 01306000
|
|
DI~D; DS~8 LIT " "; SI~D; DS~10 WDS; 01307000
|
|
DS~8 LIT "*"; SI~SI+8; DS~3 WDS; DI~D; SI~S; 01308000
|
|
SI~SI+SS; W(DS~8 CHR); DS~C CHR; 01309000
|
|
SI~LOC F; SI~SI+3; DS~LIT "~"; DS~5 CHR; SI~LOC E; DS~4 DEC; 01310000
|
|
DS~6 LIT " ?"; DI~DI-10; DS~3 FILL; 01311000
|
|
END; 01312000
|
|
IF CODE<0 THEN BEGIN 01313000
|
|
IF NOT WARNTOG THEN GO NOPRINT; 01314000
|
|
WARNING~ TRUE; 01315000
|
|
CODE~ABS(CODE); 01316000
|
|
END 01317000
|
|
ELSE 01318000
|
|
ERRCT~ ERRCT+1; 01319000
|
|
IF X~CODE.REF ! 0 THEN BEGIN 01320000
|
|
CODE ~ CODE & 0[TOREF]; 01321000
|
|
ADERR(DICT[Y~X.IR,X~X.IC+2],3,0,DICT[Y,X].CTR,TERB, 01322000
|
|
CODE,IF WARNING THEN "NOTE " ELSE "ERROR"); 01323000
|
|
END ELSE 01324000
|
|
IF LASTUSED>0 THEN 01325000
|
|
ADERR(ERB,0,BW-BFRMAX+10,BC,TERB,CODE,IF WARNING THEN 01326000
|
|
"NOTE " ELSE "ERROR") 01327000
|
|
ELSE 01328000
|
|
BEGIN 01329000
|
|
IF Y~ BW|8+BC-X~ BFRLNG>72 THEN 01330000
|
|
X~ X+Y-Y~ 72; 01331000
|
|
ADERR(BFR[X.WRD],X.CHR,Y.WRD,Y.CHR,TERB, 01332000
|
|
CODE,IF WARNING THEN "NOTE " ELSE "ERROR"); 01333000
|
|
END; 01334000
|
|
MOVE(1, LINKS[1], TERB[11]); 01335000
|
|
MOVE(1, LINKS[0], LINKS[1]); 01336000
|
|
WRITE(PRINTER[DBL], 15, TERB[*]); 01337000
|
|
ERRMASK[CODE.[38:5]] ~ ERRMASK[CODE.[38:5]] OR MASK(BOOLEAN 01338000
|
|
(CODE) AND <37>); 01339000
|
|
IF ERRCT}100 THEN 01340000
|
|
BEGIN 01341000
|
|
WRITE(PRINTER,FLUSH); 01342000
|
|
BLVL~ 0; 01343000
|
|
GO EOF; 01344000
|
|
END; 01345000
|
|
NOPRINT: 01346000
|
|
END; 01347000
|
|
COMMENT OVRFL CALLS ADOVR TO POST MSTRING OVERFLOWS; 01348000
|
|
PROCEDURE OVRFL; 01349000
|
|
BEGIN 01350000
|
|
ARRAY ERB[0:14]; 01351000
|
|
STREAM PROCEDURE ADOVR(D,E,L,M,A); 01352000
|
|
VALUE E, L; 01353000
|
|
BEGIN 01354000
|
|
DI~ D; 01355000
|
|
DS~ 21 LIT "MSTRING OVERFLOW>>>>>"; 01356000
|
|
SI~M; SI~SI+3; DS~L CHR; DS~2 LIT " +"; 01357000
|
|
SI~LOC E; DS~4 DEC; DI~A; DS~8 LIT "*"; 01358000
|
|
SI~A; DS~3 WDS; 01359000
|
|
END ADOVR; 01360000
|
|
BLANK(ERB,0,14); 01361000
|
|
ERRCT~ ERRCT+1; 01362000
|
|
ADOVR(ERB,EP,GET(MADDR).CTR,DICT[MADDR.IR,MADDR.IC], 01363000
|
|
ERB[11]); 01364000
|
|
MOVE(1, LINKS[1], ERB[11]); 01365000
|
|
MOVE(1, LINKS[0], LINKS[1]); 01366000
|
|
WRITE(PRINTER[DBL], 15, ERB[*]); 01367000
|
|
END; 01368000
|
|
COMMENT SETINUSE SETS A BIT IN SPACEMAP FOR THE 01369000
|
|
FIRST AREA OF AN MSTRING; 01370000
|
|
STREAM PROCEDURE SETINUSE(MAP,BIT); VALUE BIT; BEGIN 01371000
|
|
DI~MAP; DI~DI+1; SKIP BIT DB; DS~SET END; 01372000
|
|
COMMENT INUSE CHECKS TO SEE IF A SECTOR OF MSTRING 01373000
|
|
SPACE CONTAINS A COUNT FIELD; 01374000
|
|
BOOLEAN STREAM PROCEDURE INUSE(MAP,BIT); VALUE BIT; BEGIN 01375000
|
|
SI~MAP; SI~SI+1; SKIP BIT SB; 01376000
|
|
IF SB THEN BEGIN TALLY~1; INUSE~TALLY END; 01377000
|
|
END; 01378000
|
|
COMMENT HOWLONG COUNTS CONTIGUOUS MSTRING SECTORS; 01379000
|
|
INTEGER STREAM PROCEDURE HOWLONG(MAP,BIT); VALUE BIT; BEGIN 01380000
|
|
SI~MAP; SI~SI+1; SKIP BIT SB; 01381000
|
|
3(SKIP SB; IF SB THEN JUMP OUT ELSE TALLY~TALLY+1); 01382000
|
|
TALLY~TALLY+1; HOWLONG~TALLY; 01383000
|
|
END; 01384000
|
|
COMMENT M MOVES AN ARBITRARY SEQUENCE FROM ONE ARBITRARY 01385000
|
|
PLACE TO ANOTHER. A TERMINATING SPACE IS ALSO PLACED; 01386000
|
|
STREAM PROCEDURE M(S,S1,D,D1,N1,N2,N3); 01387000
|
|
VALUE S1, D1, N1, N2, N3; 01388000
|
|
BEGIN 01389000
|
|
SI~ S; 01390000
|
|
DI~ D; 01391000
|
|
SI~ SI+S1; 01392000
|
|
DI~ DI+D1; 01393000
|
|
N1(4(32(DS~ 32 CHR))); 01394000
|
|
N2(DS~ 32 CHR;DS~ 32 CHR); 01395000
|
|
DS~ N3 CHR; 01396000
|
|
SI~LOC N1; IF SC!"+" THEN DS~LIT " "; 01397000
|
|
END; 01398000
|
|
COMMENT MOVER CHECKS FOR OVERFLOW, MAINTAINS THE CHR 01399000
|
|
COUNT, AND SHUFFLES SEQUENCES INTO MSTRINGS; 01400000
|
|
INTEGER PROCEDURE MOVER(N,S,SS,D,DS,SZ); 01401000
|
|
VALUE N,SS,DS,SZ; 01402000
|
|
INTEGER N,SS,DS,SZ; 01403000
|
|
ARRAY S, D[0]; 01404000
|
|
BEGIN 01405000
|
|
$ INCLUDE 01405520, IF COUNTING; 01405500
|
|
MOVCT ~ *+N; 01405510
|
|
IF DS<0 OR N+DS>8|SIZE(D)-1 OR N+DS>8|SZ!0 THEN BEGIN 01406000
|
|
OVRFL; 01407000
|
|
MOVER ~ DS; 01408000
|
|
END ELSE BEGIN 01409000
|
|
MOVER~ DS+N; 01410000
|
|
M(S[SS.WRD],SS.CHR,D[DS.WRD],DS.CHR, 01411000
|
|
(N~N).C5,N.C6,N); 01412000
|
|
END 01413000
|
|
END; 01414000
|
|
COMMENT P PUTS A CHR & A BLANK INTO AN MSTRING; 01415000
|
|
STREAM PROCEDURE P(C,D,D1); 01416000
|
|
VALUE C, D1; 01417000
|
|
BEGIN 01418000
|
|
SI~LOC C; DI~D; SI~SI+7; DI~DI+D1; DS~CHR; DS~ LIT " "; 01419000
|
|
END; 01420000
|
|
COMMENT PUTTER CHECKS FOR OVERFLOW, MAINTAINS THE CHR COUNT 01421000
|
|
AND PLACES ONE CHR INTO AN MSTRING; 01422000
|
|
INTEGER PROCEDURE PUTTER(C,D,DS); 01423000
|
|
VALUE C, DS; 01424000
|
|
INTEGER C, DS; 01425000
|
|
ARRAY D[0]; 01426000
|
|
BEGIN 01427000
|
|
$ INCLUDE 01427520, IF COUNTING; 01427500
|
|
PTRCT ~ *+1; 01427510
|
|
IF DS+1>SIZE(D)|8-2 THEN BEGIN 01428000
|
|
OVRFL; 01429000
|
|
PUTTER ~ DS; 01430000
|
|
END ELSE BEGIN 01431000
|
|
P(C,D[DS.WRD],DS.CHR); 01432000
|
|
PUTTER ~ DS+1; 01433000
|
|
END 01434000
|
|
END; 01435000
|
|
COMMENT INSERT PLACES N CHR, COUNT CHR OVER INTO IDN. NO 01436000
|
|
SPACE FOLLOWS THE INSERTION; 01437000
|
|
STREAM PROCEDURE INSERT(COUNT,IDN,SPC,N); 01438000
|
|
VALUE N,COUNT,SPC; 01439000
|
|
BEGIN 01440000
|
|
SI~LOC N; SI~SI-N; DI~IDN; DI~DI+COUNT; DS~N CHR; 01441000
|
|
END INSERT; 01442000
|
|
COMMENT COMPARE COMPARES (4096|P + 64|M + N) CHR OF TWO 01443000
|
|
MSTRINGS. EQUALITY HOLDS UNTIL FIRST UNEQUAL CHR. RELATION IS 01444000
|
|
THEN MADE ON THESE 2 CHR. 01445000
|
|
0 = LOW 01446000
|
|
1 = EQUAL 01447000
|
|
2 = HIGH; 01448000
|
|
INTEGER STREAM PROCEDURE COMPARE(S,D,P,M,N); 01449000
|
|
VALUE P, M, N; 01450000
|
|
BEGIN 01451000
|
|
LABEL L, EX; 01452000
|
|
SI~S; SI~SI+3; DI~D; DI~DI+3; 01453000
|
|
P(4(32(32(IF SC!DC THEN JUMP OUT 4 TO L)))); 01454000
|
|
M(2(32(IF SC!DC THEN JUMP OUT 3 TO L))); 01455000
|
|
N(IF SC!DC THEN JUMP OUT 1 TO L); 01456000
|
|
TALLY~ 1; 01457000
|
|
GO EX; 01458000
|
|
L: SI~ SI-1; 01459000
|
|
DI~ DI-1; 01460000
|
|
IF SC<DC THEN 01461000
|
|
TALLY~ 0 01462000
|
|
ELSE 01463000
|
|
TALLY~ 2; 01464000
|
|
EX: COMPARE~ TALLY; 01465000
|
|
END COMPARE; 01466000
|
|
COMMENT SEQN PUTS AN 8 CHR DECIMAL # IN D FROM S; 01467000
|
|
STREAM PROCEDURE SEQN(S,D); 01468000
|
|
VALUE S; 01469000
|
|
BEGIN 01470000
|
|
SI~LOC S; DI~D; DS~8 DEC; 01471000
|
|
END SEQN; 01472000
|
|
COMMENT SHAFT SHIFTS LEFT UP TO 63 CHR. USED TO RECOVER 01473000
|
|
FROM ASSUMED OCTAL CONSTANT WHICH WAS A RELATION; 01474000
|
|
STREAM PROCEDURE SHAFT(W,C); 01475000
|
|
VALUE C; 01476000
|
|
BEGIN 01477000
|
|
SI~W; SI~SI+4; DI~W; DI~DI+3; DS~C CHR; DS~4 LIT " "; 01478000
|
|
END SHAFT; 01479000
|
|
COMMENT IN4 CONVERTS 4 DIGIT DECLARATION # BACK TO BINARY; 01480000
|
|
INTEGER STREAM PROCEDURE IN4(A); 01481000
|
|
VALUE A; 01482000
|
|
BEGIN 01483000
|
|
SI~LOC A; SI~SI+4; DI~LOC IN4; DS~4 OCT; 01484000
|
|
END; 01485000
|
|
COMMENT STACKIT PUSHES AN ARRAY INTO DISKSTACK; 01486000
|
|
PROCEDURE STACKIT(S,A); VALUE S; INTEGER S; ARRAY A[0]; 01487000
|
|
BEGIN 01488000
|
|
WRITE(DISKSTACK[DSTK],S,A[*]); 01489000
|
|
DSTK ~ DSTK + 1; 01490000
|
|
$ INCLUDE 01490530, IF COUNTING; 01490500
|
|
STKCT ~ *+1; 01490510
|
|
IF STKDP~*+1>STKMX THEN STKMX~STKDP; 01490520
|
|
END; 01491000
|
|
COMMENT UNSTACKIT POPS AN ARRAY OUT OF THE DISKSTACK 01492000
|
|
AND RELOADS THE BUFFER; 01493000
|
|
PROCEDURE UNSTACKIT(S,A); VALUE S; INTEGER S; ARRAY A[0]; 01494000
|
|
BEGIN 01495000
|
|
READ(DISKSTACK[DSTK~DSTK-1],S,A[*]); 01496000
|
|
IF DSTK > 0 THEN 01497000
|
|
READ SEEK(DISKSTACK[DSTK-1]); 01498000
|
|
$ INCLUDE 01498530, IF COUNTING; 01498500
|
|
STKCT ~ *+1; 01498510
|
|
STKDP ~ *-1; 01498520
|
|
END; 01499000
|
|
COMMENT WRITIT MOVES L WORDS FROM AN MSTRING INTO A TWO- 01500000
|
|
DIMENSIONAL STORAGE SPACE, SPLITTING ACROSS ROWS IF REQD. P IS A 01501000
|
|
CALL BY NAME TO KEEP TRACK OF NEXT FREE SPOT IN F; 01502000
|
|
PROCEDURE WRITIT(A,L,P,F); 01503000
|
|
VALUE L; 01504000
|
|
ARRAY A[0],F[0]; 01505000
|
|
INTEGER L, P; 01506000
|
|
BEGIN LABEL NP; 01507000
|
|
II~ 0; 01508000
|
|
IF P.REF = 0 THEN IF MSTORP.PDF1 ! P.IR THEN BEGIN 01509000
|
|
IF BOOLEAN(MSTORP).PDP1 THEN BEGIN 01509050
|
|
WRITE(MSTOR[MSTORP.PDF1],256,F[*]); 01509100
|
|
$ INCLUDE 01509151, IF COUNTING; 01509149
|
|
MSTCT ~ * + 1; 01509150
|
|
MSTORP.PDP1 ~ 0; 01509200
|
|
END; 01509250
|
|
READ(MSTOR[P.IR],256,F[*])[NP] ; 01510000
|
|
$ INCLUDE 01510120, IF COUNTING; 01510100
|
|
MSTCT ~ *+1; 01510110
|
|
END ELSE ELSE 01510200
|
|
IF P.REF = 1 THEN IF MSTORP.PDF2 ! P.IR THEN BEGIN 01511000
|
|
IF BOOLEAN(MSTORP).PDP2 THEN BEGIN 01511050
|
|
WRITE(MSTOR[MSTORP.PDF2+150],256,F[*]); 01511100
|
|
$ INCLUDE 01511151, IF COUNTING; 01511149
|
|
MSTCT ~ MSTCT + 1; 01511150
|
|
MSTORP.PDP2 ~ 0; 01511200
|
|
END; 01511250
|
|
READ(MSTOR[P.IR+150],256,F[*])[NP]; 01512000
|
|
$ INCLUDE 01512120, IF COUNTING; 01512100
|
|
MSTCT ~ *+1; 01512110
|
|
END; 01512200
|
|
NP: WHILE L>0 DO 01513000
|
|
BEGIN 01514000
|
|
IF J ~ 256-P.IC > L THEN 01515000
|
|
J~ L; 01516000
|
|
MOVE(J,A[II],F[P.IC]); 01517000
|
|
CASE P.REF OF BEGIN 01518000
|
|
BEGIN % MCODE 01519000
|
|
MSTORP.PDF1 ~ P.IR; 01520000
|
|
IF P.IC + J = 256 THEN BEGIN 01520100
|
|
$ INCLUDE 01520520, IF COUNTING; 01520500
|
|
MSTCT ~ *+1; 01520510
|
|
WRITE(MSTOR[P.IR],256,F[*]); 01521000
|
|
END ELSE 01521100
|
|
MSTORP.PDP1 ~ 1; 01521200
|
|
END; 01522000
|
|
BEGIN % MDECL 01523000
|
|
MSTORP.PDF2 ~ P.IR; 01524000
|
|
IF P.IC + J = 256 THEN BEGIN 01524100
|
|
$ INCLUDE 01524520, IF COUNTING; 01524500
|
|
MSTCT ~ *+1; 01524510
|
|
WRITE(MSTOR[P.IR+150],256,F[*]); 01525000
|
|
END ELSE 01525100
|
|
MSTORP.PDP2 ~ 1; 01525200
|
|
END; 01526000
|
|
; % MISC MOVES 01527000
|
|
END; 01528000
|
|
P~ P+J; 01529000
|
|
II~ II+J; 01530000
|
|
L~ L-J 01531000
|
|
END 01532000
|
|
END; 01533000
|
|
COMMENT READIT RECOVERS L WORDS FROM A 2-DIMENSIONAL ARRAY 01534000
|
|
INTO A 1-DIM ARRAY ROW(MSTRING). P IS NAME TO ALLOW SEQUENTIAL 01535000
|
|
RECOVERIES; 01536000
|
|
PROCEDURE READIT(A,L,P,F); 01537000
|
|
VALUE L; 01538000
|
|
ARRAY A[0],F[0]; 01539000
|
|
INTEGER L, P; 01540000
|
|
BEGIN INTEGER II; 01541000
|
|
II~ 0; 01542000
|
|
WHILE L>0 DO 01543000
|
|
BEGIN 01544000
|
|
IF J ~ 256-P.IC > L THEN 01545000
|
|
J~ L; 01546000
|
|
CASE P.REF OF BEGIN 01547000
|
|
IF MSTORP.PDF1 ! P.IR THEN BEGIN % MCODE 01548000
|
|
IF BOOLEAN(MSTORP).PDP1 THEN BEGIN 01548050
|
|
WRITE(MSTOR[MSTORP.PDF1],256,F[*]); 01548100
|
|
MSTORP.PDP1 ~ 0; 01548150
|
|
END; 01548200
|
|
MSTORP.PDF1 ~ P.IR; 01549000
|
|
$ INCLUDE 01549520, IF COUNTING; 01549500
|
|
MSTCT ~ *+1; 01549510
|
|
READ(MSTOR[P.IR],256,F[*]); 01550000
|
|
END; 01551000
|
|
IF MSTORP.PDF2 ! P.IR THEN BEGIN % MDECL 01552000
|
|
IF BOOLEAN(MSTORP).PDP2 THEN BEGIN 01552050
|
|
WRITE(MSTOR[MSTORP.PDF2+150],256,F[*]); 01552100
|
|
MSTORP.PDP2 ~ 0; 01552150
|
|
END; 01552200
|
|
MSTORP.PDF2 ~ P.IR; 01553000
|
|
$ INCLUDE 01553520, IF COUNTING; 01553500
|
|
MSTCT ~ *+1; 01553510
|
|
READ(MSTOR[P.IR+150],256,F[*]); 01554000
|
|
END; 01555000
|
|
; % MISC MOVES 01556000
|
|
END; 01557000
|
|
MOVE(J,F[P.IC],A[II]); 01558000
|
|
P~ P+J; 01559000
|
|
II~ II+J; 01560000
|
|
L~ L-J 01561000
|
|
END 01562000
|
|
END; 01563000
|
|
COMMENT SAVEIT DISK STACKS THE TANK & ELBAT PREPARITORY TO 01564000
|
|
SCANNING "INVISIBLE" DATA SUCH AS DECLARATIONS OR PROCESSING 01565000
|
|
MACROS. MACRO SCANNING IS INVISIBLE TO THE OUTPUT STRING. MACRO 01566000
|
|
OUTPUT WILL LATER BE PSEUDOREAD & SCANNED ON ITS OWN; 01567000
|
|
PROCEDURE SAVEIT; 01568000
|
|
BEGIN LABEL L; L: 01569000
|
|
ELBAT[0]~ BELB; 01570000
|
|
ELBAT[1] ~ 0 & (NXTELB-BELB)[TORNELB] & (T-BELB)[TORT] 01571000
|
|
& PANK[TORPANK]; 01572000
|
|
T~ T-1; 01573000
|
|
MOVE(TANKMAX,TANK,ELBAT[ELBMAX]); 01574000
|
|
STACKIT(270,ELBAT[*]); 01575000
|
|
END; 01576000
|
|
COMMENT FOLLOWING SECTION CONTAINS THE SCANNERS & MISC; 01577000
|
|
COMMENT RECALLIT UNSTACKS & RESTORES TANK & ELBAT; 01578000
|
|
PROCEDURE RECALLIT; 01579000
|
|
BEGIN LABEL L; L: 01580000
|
|
UNSTACKIT(270,ELBAT[*]); 01581000
|
|
MOVE(TANKMAX,ELBAT[ELBMAX],TANK); 01582000
|
|
NXTELB ~ (BELB~ELBAT[0])+(T~ELBAT[1]).RNELB; 01583000
|
|
PANK ~ T.RPANK; 01584000
|
|
T ~ T.RT + BELB; 01585000
|
|
END; 01586000
|
|
COMMENT SCANNER AND I/O PROCESSING PORTION; 05000000
|
|
COMMENT SHIFT SHIFTS AN ELBAT WORD INTO THE ELBAT ARRAY. 05001000
|
|
IF THE ITEM IS ALPHA, THE ALPHA IS MOVED INTO TANK & A POINTER 05002000
|
|
IS LEFT IN ADINFO. IF ELBAT WOULD OVERFLOW, 11 WORDS ARE 05003000
|
|
ROTATED OUT THE BOTTOM; 05004000
|
|
PROCEDURE SHIFT(W,C,S); 05005000
|
|
VALUE W, C, S; 05006000
|
|
INTEGER W, C, S; 05007000
|
|
BEGIN LABEL L; 05008000
|
|
IF W=0 THEN 05009000
|
|
W ~ 0&C[TOCLASS]&S[TOSUB] 05010000
|
|
ELSE 05011000
|
|
BEGIN 05012000
|
|
C~ W.CLASS; 05013000
|
|
S~ W.SUB 05014000
|
|
END; 05015000
|
|
IF ENDT AND W="." THEN 05016000
|
|
IF CIN>0 THEN 05017000
|
|
MAXINFO[CIN].SLST ~ 5 05018000
|
|
ELSE 05019000
|
|
LASTUSED~ 5; 05020000
|
|
IF ENDT THEN ENDT~(NOT(UNTILV{S{ENDV AND C!VOTHERS)AND 0!C!63); 05021000
|
|
IF NOT(ENDT OR CMT) THEN 05022000
|
|
BEGIN 05023000
|
|
IF W>63 THEN 05024000
|
|
BEGIN 05025000
|
|
IF(C~(IDENT[1].CTR+10).WRD)+PANK > 05026000
|
|
TANKMAX THEN 05027000
|
|
PANK~ 0; 05028000
|
|
IF C > TANKMAX THEN BEGIN 05029000
|
|
ERROR(103); 05030000
|
|
GO L; 05031000
|
|
END; 05032000
|
|
MOVE(C,IDENT[1],TANK[W~W&PANK[TOADINFO]]); 05033000
|
|
PANK~ PANK+C 05034000
|
|
END; 05035000
|
|
L: IF NXTELB-BELB = ELBMAX THEN 05036000
|
|
BEGIN 05037000
|
|
MOVE(ELBMAX-11, ELBAT[11], ELBAT); 05038000
|
|
BELB~ BELB+11 05039000
|
|
END; 05040000
|
|
IF ELBAT[NXTELB-BELB]~ ABS(W)=";" THEN 05041000
|
|
IF NEST>0 AND NOT (DEC OR MACROTOG) THEN 05042000
|
|
IF PROCT[NEST]=0 THEN 05043000
|
|
BEGIN 05044000
|
|
IF STREAMTOG AND NOT PROCTOG THEN 05045000
|
|
FOR I~ 0 STEP 1 UNTIL 124 DO 05046000
|
|
WHILE A~ DLIST[I]<MACRODICT AND 05047000
|
|
A}0 DO 05048000
|
|
DLIST[I] ~ DICT[A.IR,A.IC]; 05049000
|
|
NEST~ NEST-1; 05050000
|
|
SPCT~ STREAMTOG~ PROCTOG~ FALSE; 05051000
|
|
WRAPBLOCK(FALSE) 05052000
|
|
END; 05053000
|
|
$ INCLUDE 05056001, IF DEBUGGING; 05053999
|
|
IF MONITER AND PRINT THEN 05054000
|
|
WRITE(PRINTER,MON1,"ELBAT",NXTELB,"~",W, 05055000
|
|
W.CLASS,W.SUB,W.ADINFO,IDENT[1],CHAR); 05056000
|
|
NXTELB~ NXTELB+1; 05057000
|
|
END; 05058000
|
|
IF CMT THEN CMT ~ ABS(W) ! ";" AND C ! 63; 05059000
|
|
END; 05060000
|
|
COMMENT CCHANDLER PROCESSES "*" CARDS & STASHES THEM AWAY 05061000
|
|
IN THE CONTROL CARD FILE. THIS FILE WILL BE ZIPPED AT THE END 05062000
|
|
OF A SUCCESSFUL MCALGOL RUN; 05063000
|
|
PROCEDURE CCHANDLER; 05064000
|
|
BEGIN 05065000
|
|
REAL X; 05066000
|
|
ARRAY CCA[0:9]; 05067000
|
|
BOOLEAN STREAM PROCEDURE DATA(ERB,L); VALUE L; BEGIN 05068000
|
|
DI~LOC L; DS~8 LIT "DATALIST"; DI~DI-8; 05069000
|
|
SI~ERB; L1: IF SC=" " THEN BEGIN SI~SI+1; GO L1 END; 05070000
|
|
IF 4 SC=DC THEN TALLY~1 ELSE GO XIT; 05071000
|
|
L2: IF SC=" " THEN BEGIN SI~SI+1; GO L2 END; 05072000
|
|
IF 4 SC=DC THEN TALLY ~ 3; 05073000
|
|
XIT: DATA ~ TALLY END; 05074000
|
|
FORMAT 05075000
|
|
CC1("?="A1,A6), 05076000
|
|
CC2("?ALGOL FILE CARD="A1,A6"/"A1,A6" SERIAL"), 05077000
|
|
CC3("?ALGOL PROCESS="I8), 05078000
|
|
CC4("?DATA "I7), 05079000
|
|
CC5("?FILE READER= "I7); 05080000
|
|
IF CCC=0 THEN 05081000
|
|
BEGIN 05082000
|
|
X~TIME(5); 05082850
|
|
ERROR(112) 05082900
|
|
; 05082950
|
|
WRITE(CC,CC1,X.C1,X); 05083000
|
|
X ~ MOVER(71,ERB,0,CCA,1,0); 05084000
|
|
INSERT(0, CCA, "?", 1); 05085000
|
|
DATANAME ~ TIME(1); 05086000
|
|
WRITE(CC, 10, CCA[*]); 05087000
|
|
WRITE(CC,CC2,MF.C1,MF,F.C1,F); 05088000
|
|
WRITE(CC,CC5,DATANAME); 05089000
|
|
IF X~TIME(10) > 10 THEN % REQUESTED PROCESS IN SECONDS 05089950
|
|
WRITE(CC,CC3,X/60); 05090000
|
|
CCC ~ 4; 05091000
|
|
END 05092000
|
|
ELSE 05093000
|
|
BEGIN 05094000
|
|
IF CCDATATOG ~ DATA(ERB,0) THEN BEGIN 05095000
|
|
CCLISTOG ~ CCDATATOG.[46:1] OR CCLISTOG; 05096000
|
|
WRITE(CC,CC4,DATANAME); 05097000
|
|
DATANAME ~ TIME(1); 05098000
|
|
READACARD; 05099000
|
|
WHILE CR(LINKS,7)!"*" AND LASTUSED!5 DO BEGIN 05100000
|
|
WRITE(CC,10,ERB[*]); 05101000
|
|
CCC ~ CCC + 1; 05102000
|
|
READACARD; 05103000
|
|
END; 05104000
|
|
CCDATATOG ~ FALSE; 05105000
|
|
END; 05106000
|
|
IF LASTUSED ! 5 THEN BEGIN 05107000
|
|
X ~ MOVER(71,ERB,0,CCA,1,0); 05108000
|
|
INSERT(0, CCA, "?", 1); 05109000
|
|
CCC ~ CCC + 1; 05110000
|
|
WRITE(CC, 10, CCA[*]) 05111000
|
|
END; 05112000
|
|
END; 05113000
|
|
END; 05114000
|
|
COMMENT OUTPUT PROCESSES AN OUTPUT STRING IMAGE ALREADY 05115000
|
|
FORMATTED THRU FLUSHIT. INTERLISTING OCCURS IN THE LISTING 05116000
|
|
ASYNCHRONOUSLY WITH THE INPUT DUE TO MACRO PROCESSING. THE 05117000
|
|
OUTPUT IS LISTED ONLY AS EACH RECORD REACHES THE OUTER BLOCK; 05118000
|
|
PROCEDURE OUTPUT; 05119000
|
|
BEGIN 05120000
|
|
IF ERRCT=0 AND NOT SVT.[46:1] THEN 05121000
|
|
WRITE(CODE,10,POB[*]); 05121100
|
|
CODEREC ~ CODEREC + 1; 05122000
|
|
IF INTERLIST AND PRINT THEN BEGIN 05123000
|
|
BLANK(DECL,0,14); 05124000
|
|
MOVE(10,POB,DECL[3]); 05125000
|
|
IF DBLINE THEN 05126000
|
|
WRITE(PRINTER[DBL],15,DECL[*]) 05127000
|
|
ELSE 05128000
|
|
WRITE(PRINTER,15,DECL[*]); 05129000
|
|
END; 05130000
|
|
BLANK(POB,0,14); 05131000
|
|
SEQN(SEQ~SEQ+100,POB[9]); 05132000
|
|
OUTC ~ 0; 05133000
|
|
FLUSHD ~ TRUE; 05134000
|
|
END; 05135000
|
|
COMMENT READACARD IS RESPONSIBLE FOR KEEPING INPUT IMAGES 05200000
|
|
IN BFR & FLUSHING ACROSS THE ENDS OF PSEUDOREADERS INTO THE 05201000
|
|
NEXT INPUT AREA. FLUSH OF INPUT IMAGE CAUSES READING & MERGING 05202000
|
|
FROM CARD & DISK FILES WITH VOIDING; 05203000
|
|
PROCEDURE READACARD; 05204000
|
|
BEGIN 05205000
|
|
REAL X,Y,A; 05206000
|
|
LABEL CARDS,ACARD,ADISK,COMPARE,EXIT,CARDL,DISKL,EQUAL, 05207000
|
|
DISKS,EOF0,START,BOTH,SET,EOF1,EOF2,EOF3,EOF4,EOF5, 05208000
|
|
EOF6,LOOP; 05209000
|
|
SWITCH WHICH ~ CARDS,ACARD,ADISK,DISKS,EOF0,BOTH; 05210000
|
|
SWITCH WITCH ~ CARDL,DISKL,EQUAL; 05211000
|
|
INTEGER STREAM PROCEDURE COMPAR(C, D); 05212000
|
|
BEGIN SI~C; DI~D; 05213000
|
|
IF 8 SC{DC THEN BEGIN 05214000
|
|
SI~C; DI~D; 05215000
|
|
IF 8 SC<DC THEN TALLY~1 ELSE TALLY~3; 05216000
|
|
END ELSE TALLY~2; 05217000
|
|
COMPAR~TALLY; 05218000
|
|
END COMPAR; 05219000
|
|
INTEGER STREAM PROCEDURE MKABS(A); BEGIN SI~A; MKABS~SI END; 05220000
|
|
BOOLEAN STREAM PROCEDURE NOTPRES(A); BEGIN 05221000
|
|
SI~A; SKIP 2 SB; IF SB THEN ELSE TALLY~1; 05222000
|
|
NOTPRES~TALLY; 05223000
|
|
END; 05224000
|
|
INTEGER STREAM PROCEDURE LINK(A); BEGIN LOCAL B; 05225000
|
|
DI~LOC B; DS~5 LIT "?LINK"; DI~DI-5; SI~A; 05226000
|
|
IF SC!DC THEN GO X; 05227000
|
|
L1: IF SC=" " THEN BEGIN SI~SI+1; GO L1 END; 05228000
|
|
IF 4 SC!DC THEN GO X; 05229000
|
|
L2: IF SC=" " THEN BEGIN SI~SI+1; GO L2 END; 05230000
|
|
DI~LOC B; IF SC="+" THEN BEGIN DS~CHR; 05231000
|
|
L3: IF SC=" " THEN BEGIN SI~SI+1; GO L3 END; 05232000
|
|
END ELSE DS~LIT "0"; 05233000
|
|
8(IF SC }"0" THEN BEGIN SI~SI+1; TALLY~TALLY+1 END 05234000
|
|
ELSE JUMP OUT); 05235000
|
|
A~TALLY; DI~LOC LINK; SI~SI-A; DS~A OCT; 05236000
|
|
DI~DI-8; SI~LOC B; DS~CHR; 05237000
|
|
X: END LINK; 05238000
|
|
START: LOOP: IF LASTUSED>0 THEN 05239000
|
|
BEGIN 05240000
|
|
RCCNT~ RCCNT+1; 05241000
|
|
GO WHICH[LASTUSED] 05242000
|
|
END; 05243000
|
|
BW ~ (X~MAXINFO[CIN~CIN-1]).SBW; 05244000
|
|
BC ~ X.SBC; 05245000
|
|
BFRLNG ~ X.SLNG; 05246000
|
|
BWMAX ~ X.SMAX; 05247000
|
|
RESCANTOG ~ BOOLEAN(X).SRSC; 05248000
|
|
ENDT ~ BOOLEAN(X).SENDT OR ENDT; 05249000
|
|
IF LASTUSED ~ X.SLST=5 AND MACT=0 THEN 05250000
|
|
GO TO EOF; 05251000
|
|
IF NOREAD THEN X~TELBAT[MEL] ELSE 05251900
|
|
FOR I~ MEL-X~ TELBAT[MEL] STEP 1 UNTIL MEL-1 DO 05252000
|
|
BEGIN 05253000
|
|
IF(A~ TELBAT[I]).CLASS!0 THEN 05254000
|
|
MOVE((TTANK[A].CTR+10).WRD,TTANK[A],IDENT[1]); 05255000
|
|
SHIFT(A, 0, 0) 05256000
|
|
END; 05257000
|
|
MEL ~ MEL-X-1; CHAR ~ " "; 05258000
|
|
GO TO EXIT; 05259000
|
|
CARDS: IF NOTPRES(CARD) THEN 05260000
|
|
BEGIN 05261000
|
|
WAIT(MKABS(CARD), REAL(<1000000004000000>)); 05262000
|
|
IF NOTPRES(CARD) THEN 05263000
|
|
BEGIN 05264000
|
|
LASTUSED~ 5; 05265000
|
|
GO TO EOF0; 05266000
|
|
END 05267000
|
|
END; 05268000
|
|
IF I~LINK(CARD(0))!0 THEN BEGIN 05269000
|
|
CARDREC ~ IF I<0 THEN CARDREC-I ELSE I; 05270000
|
|
READ(CARD[CARDREC]); 05271000
|
|
GO CARDS; 05272000
|
|
END; 05273000
|
|
MOVE(10,CARD(0),BFR[BFRMAX-10]); 05274000
|
|
CARDREC~ CARDREC+1; 05275000
|
|
READ(CARD)[EOF1]; 05276000
|
|
EOF1: GO TO SET; 05277000
|
|
ACARD: IF NOTPRES(CARD) THEN 05278000
|
|
BEGIN 05279000
|
|
WAIT(MKABS(CARD), REAL(<1000000004000000>)); 05280000
|
|
IF NOTPRES(CARD) THEN 05281000
|
|
BEGIN 05282000
|
|
LASTUSED~ 4; 05283000
|
|
GO TO DISKS 05284000
|
|
END 05285000
|
|
END; 05286000
|
|
IF I~LINK(CARD(0))!0 THEN BEGIN 05287000
|
|
CARDREC ~ IF I<0 THEN CARDREC-I ELSE I; 05288000
|
|
READ(CARD[CARDREC]); 05289000
|
|
GO ACARD; 05290000
|
|
END; 05291000
|
|
GO TO COMPARE; 05292000
|
|
ADISK: IF NOTPRES(DISK) THEN 05293000
|
|
BEGIN 05294000
|
|
WAIT(MKABS(DISK), REAL(<1000000004000000>)); 05295000
|
|
IF NOTPRES(DISK) THEN 05296000
|
|
BEGIN 05297000
|
|
LASTUSED~ 1; 05298000
|
|
GO TO CARDS; 05299000
|
|
END 05300000
|
|
END; 05301000
|
|
IF I~LINK(DISK(0))!0 THEN BEGIN 05302000
|
|
DISKREC ~ IF I<0 THEN DISKREC-I ELSE I; 05303000
|
|
READ(DISK[DISKREC]); 05304000
|
|
GO ADISK; 05305000
|
|
END; 05306000
|
|
GO TO COMPARE; 05307000
|
|
DISKS: IF NOTPRES(DISK) THEN 05308000
|
|
BEGIN 05309000
|
|
WAIT(MKABS(DISK), REAL(<1000000004000000>)); 05310000
|
|
IF NOTPRES(DISK) THEN 05311000
|
|
BEGIN 05312000
|
|
LASTUSED~ 5; 05313000
|
|
GO TO EOF0; 05314000
|
|
END 05315000
|
|
END; 05316000
|
|
IF I~LINK(DISK(0))!0 THEN BEGIN 05317000
|
|
DISKREC ~ IF I<0 THEN DISKREC-I ELSE I; 05318000
|
|
READ(DISK[DISKREC]); 05319000
|
|
GO DISKS; 05320000
|
|
END; 05321000
|
|
MOVE(10,DISK(0),BFR[BFRMAX-10]); 05322000
|
|
DISKREC~ DISKREC+1; 05323000
|
|
READ(DISK)[EOF2]; 05324000
|
|
EOF2: GO TO SET; 05325000
|
|
BOTH: IF NOTPRES(DISK) THEN 05326000
|
|
BEGIN 05327000
|
|
WAIT(MKABS(DISK), REAL(<1000000004000000>)); 05328000
|
|
IF NOTPRES(DISK) THEN 05329000
|
|
BEGIN 05330000
|
|
LASTUSED~ 1; 05331000
|
|
GO TO CARDS 05332000
|
|
END 05333000
|
|
END; 05334000
|
|
IF I~LINK(DISK(0))!0 THEN BEGIN 05335000
|
|
DISKREC ~ IF I<0 THEN DISKREC-I ELSE I; 05336000
|
|
READ(DISK[DISKREC]); 05337000
|
|
GO BOTH; 05338000
|
|
END; 05339000
|
|
GO TO ACARD; 05340000
|
|
COMPARE: GO TO WITCH[COMPAR(CARD(9), DISK(9))]; 05341000
|
|
CARDL: MOVE(10,CARD(0),BFR[BFRMAX-10]); 05342000
|
|
CARDREC~ CARDREC+1; 05343000
|
|
READ(CARD)[EOF3]; 05344000
|
|
EOF3: LASTUSED~ 2; 05345000
|
|
GO TO SET; 05346000
|
|
DISKL: MOVE(10,DISK(0),BFR[BFRMAX-10]); 05347000
|
|
DISKREC~ DISKREC+1; 05348000
|
|
READ(DISK)[EOF4]; 05349000
|
|
EOF4: LASTUSED~ 3; 05350000
|
|
GO TO SET; 05351000
|
|
EQUAL: MOVE(10,CARD(0),BFR[BFRMAX-10]); 05352000
|
|
CARDREC~ CARDREC+1; DISKREC~ DISKREC+1; 05353000
|
|
LASTUSED~ 6; 05354000
|
|
READ(CARD)[EOF5]; 05355000
|
|
EOF5: READ(DISK)[EOF6]; 05356000
|
|
EOF6: GO TO SET; 05357000
|
|
EOF0: IF MACT=0 THEN 05358000
|
|
GO EOF; 05359000
|
|
BLANK(ERB,0,14); 05360000
|
|
BW~ 1013; 05361000
|
|
BC~ 0; 05362000
|
|
ERROR(48); 05363000
|
|
GO EOF; 05364000
|
|
SET: MOVE(1,BFR[BFRMAX-1],LINKS); 05365000
|
|
IF VOIDING THEN 05366000
|
|
IF COMPAR(LINKS[0],LINKS[2])}2 THEN 05367000
|
|
VOIDING~ FALSE 05368000
|
|
ELSE 05369000
|
|
GO START; 05370000
|
|
IF NEWFILE THEN BEGIN LABEL L; L: 05371000
|
|
MOVE(10,BFR[BFRMAX-10],NEWDISK(0)); 05372000
|
|
IF NEWRESEQ THEN BEGIN 05373000
|
|
SEQN(NEWSEQ~NEWSEQ+NEWINC,NEWDISK(9)); 05374000
|
|
IF X~CR(LINKS,7)="$" OR X="*" THEN 05375000
|
|
INSERT(7,NEWDISK(9),X,1); 05376000
|
|
MOVE(1,NEWDISK(9),LINKS) END; 05377000
|
|
WRITE(NEWDISK); 05378000
|
|
END; 05379000
|
|
BLANK(ERB,0,14); 05380000
|
|
MOVE(10,BFR[BW~BFRMAX-10],ERB); 05381000
|
|
INSERT(0,BFR[BFRMAX-1],"%",1); 05382000
|
|
BC~ 0; 05383000
|
|
BWMAX ~ 8|BFRMAX - 8; 05384000
|
|
LUOK~ TRUE; 05385000
|
|
EXIT: IF LASTUSED>0 THEN 05386000
|
|
SAVEML~ ML; 05387000
|
|
IF X~ CR(LINKS[0], 7)="$" THEN 05388000
|
|
BEGIN 05389000
|
|
IF MDOLLAR(FALSE) THEN; 05390000
|
|
GO LOOP 05391000
|
|
END; 05392000
|
|
IF Y~CR(BFR[BFRMAX-10],0) = "$" THEN 05392050
|
|
IF CR(BFR[BFRMAX-10],1) = "*" THEN 05392100
|
|
IF NOT MDOLLAR(TRUE) THEN 05392150
|
|
GO LOOP; 05392200
|
|
IF X="*" OR CCDATATOG THEN LUOK ~ FALSE; 05393000
|
|
IF PRINT AND LUOK THEN BEGIN 05394000
|
|
$ INCLUDE 05395021, IF NOT INTERMEDIATE AND NOT ADVANCED; 05394999
|
|
FORMAT TOP(X46"WRL MCALGOL BASIC VERSION OF " 05395000
|
|
O". LANGUAGE IS "A1,A6); 05395020
|
|
$ INCLUDE 05395051, IF INTERMEDIATE AND NOT ADVANCED; 05395030
|
|
FORMAT TOP(X46"WRL MCALGOL INTERMEDIATE VERSION OF " 05395040
|
|
O". LANGUAGE IS "A1,A6); 05395050
|
|
$ INCLUDE 05395081, IF INTERMEDIATE AND ADVANCED; 05395060
|
|
FORMAT TOP(X46"WRL MCALGOL ADVANCED VERSION OF " 05395070
|
|
O". LANGUAGE IS "A1,A6); 05395080
|
|
IF NOT WRITEIT THEN 05396000
|
|
BEGIN 05397000
|
|
WRITE(PRINTER[NO],TOP,DATE,LANG.C1,LANG); 05398000
|
|
TIMEIT(PRINTER); 05399000
|
|
WRITEIT ~ TRUE; 05400000
|
|
END; 05401000
|
|
LUOK~ FALSE; 05402000
|
|
MOVEDEC(RCCNT,ERB[9],0,1,7,7); 05403000
|
|
MOVEDEC(SEQ, ERB[13], 7, 0, 8, 0); 05404000
|
|
MOVE(1, LINKS[0], ERB[10]); 05405000
|
|
MOVEDEC(SAVEML, ERB[11], 1, 4, 4, 8); 05406000
|
|
IF 3{LASTUSED{4 THEN BEGIN 05407000
|
|
MOVEDEC(DISKREC,ERB[11],7,3,5,7); 05408000
|
|
INSERT(4,ERB[12],"D",1); 05409000
|
|
END 05410000
|
|
ELSE BEGIN 05411000
|
|
MOVEDEC(CARDREC,ERB[11],7,3,5,7); 05412000
|
|
INSERT(5,ERB[12],"C",1); 05413000
|
|
END; 05414000
|
|
IF DBLINE THEN 05415000
|
|
WRITE(PRINTER[DBL], 15, ERB[*]) 05416000
|
|
ELSE 05417000
|
|
WRITE(PRINTER, 15, ERB[*]); 05418000
|
|
END; 05419000
|
|
IF Y = "$" THEN BEGIN 05420000
|
|
% 05421000
|
|
IF OUTC>0 THEN 05425000
|
|
OUTPUT; 05426000
|
|
MOVE(9,BFR[BFRMAX-10],POB); 05427000
|
|
OUTPUT; 05428000
|
|
GO START; 05429000
|
|
END; 05430000
|
|
IF X="*" AND NOT CCDATATOG THEN 05431000
|
|
BEGIN 05432000
|
|
CCHANDLER; 05433000
|
|
GO TO START 05434000
|
|
END; 05435000
|
|
END; 05436000
|
|
COMMENT PSEUDOREAD IS RESPONSIBLE FOR STACKING -C- CHRS 05500000
|
|
FROM MSTRING A. ANY PRESCANNED ITEMS ARE SAVED IN TELBAT & 05501000
|
|
TANK TO BE RESTORED WHEN THIS PSEUDOREADER IS FLUSHED; 05502000
|
|
PROCEDURE PSEUDOREAD(A,C,Z); 05503000
|
|
VALUE C,Z; 05504000
|
|
INTEGER C,Z; 05505000
|
|
ARRAY A[0]; 05506000
|
|
BEGIN 05507000
|
|
FORMAT F1("PSEUDOREADER"I4"@"I4"["I4"-"I4"]U="I1, 05508000
|
|
2L1";SZ="I4" I="I3); 05509000
|
|
STREAM PROCEDURE BWBC(BWC,A); VALUE BWC; BEGIN 05510000
|
|
DI~A; DS~8 LIT " "; SI~A; DS~14 WDS; 05511000
|
|
SI~LOC BWC; DI~A; DS~4 DEC END; 05512000
|
|
IF MEL+I~NXTELB-T-1 > 255 THEN 05514000
|
|
OVRFL 05515000
|
|
ELSE 05516000
|
|
BEGIN 05517000
|
|
$ INCLUDE 05520001, IF DEBUGGING; 05517999
|
|
IF PSEUDOTOG AND PRINT THEN 05518000
|
|
WRITE(PRINTER,F1,CIN,8|BW+BC,BFRLNG,BWMAX, 05519000
|
|
LASTUSED,RESCANTOG,ENDT,C,I); 05520000
|
|
FOR II~ 1 STEP 1 UNTIL I DO 05521000
|
|
IF(W~ ELBAT[T+II-BELB]).CLASS!0 THEN 05522000
|
|
BEGIN 05523000
|
|
IF(J~(TANK[W].CTR+10).WRD)+TPANK > 05524000
|
|
TANKMAX THEN 05525000
|
|
TPANK~ 0; 05526000
|
|
MOVE(J, TANK[W], TTANK[TPANK]); 05527000
|
|
TELBAT[MEL+II] ~ W&TPANK[TOADINFO]; 05528000
|
|
TPANK~ TPANK+J 05529000
|
|
END 05530000
|
|
ELSE 05531000
|
|
TELBAT[MEL+II]~ W; 05532000
|
|
NXTELB~ T+1; 05533000
|
|
IF I<0 THEN I~0; 05534000
|
|
TELBAT[MEL~ MEL+I+1]~ I 05535000
|
|
END; 05536000
|
|
IF CIN>255 THEN 05537000
|
|
BEGIN 05538000
|
|
ERROR(56);WRITE(PRINTER[DBL]);WRITE(PRINTER,FLUSH); 05539000
|
|
GO EOF; 05540000
|
|
END; 05541000
|
|
MAXINFO[CIN] ~ BW&BC[TOSBC]&BFRLNG[TOSLNG]&BWMAX[TOSMAX]& 05542000
|
|
LASTUSED[TOSLST]&REAL(RESCANTOG)[TOSRSC]&REAL(ENDT)[TOSENDT]; 05543000
|
|
LASTUSED~ 0; 05544000
|
|
BWMAX ~ MOVER(C-1,A,8|Z+3,BFR,BW~BW|8+BC-1-C,0)+1; 05545000
|
|
BC~(BFRLNG~ BW)-(BW~ BW.WRD)|8; 05546000
|
|
INSERT(BWMAX.CHR,BFR[BWMAX.WRD],"%",1); 05547000
|
|
$ INCLUDE 05547520, IF COUNTING; 05547500
|
|
IF BW < PSEU THEN PSEU ~ BW; 05547510
|
|
$ INCLUDE 05560001, IF DEBUGGING; 05547999
|
|
IF PSEUDOTOG AND PRINT THEN BEGIN 05548000
|
|
INTEGER R,L,B; 05548100
|
|
R ~ (B~8|BFRMAX-7-8|BW-BC) DIV 104; 05549000
|
|
B ~ B MOD 104; 05550000
|
|
BWBC(8|BW+BC,PPB); 05551000
|
|
M(BFR[BW],BC,PPB[(L~112-B).WRD],L.CHR+1,0, 05552000
|
|
(B~B-1).C6,B); 05553000
|
|
WRITE(PRINTER,15,PPB[*]); 05554000
|
|
FOR L~1 STEP 1 UNTIL R DO BEGIN 05555000
|
|
BWBC((B~BFRMAX-14-(R-L)|13)|8,PPB); 05556000
|
|
MOVE(13,BFR[B],PPB[1]); 05557000
|
|
WRITE(PRINTER,15,PPB[*]); 05558000
|
|
END; 05559000
|
|
END; 05560000
|
|
CIN~ CIN+1; 05561000
|
|
ENDT~ RESCANTOG~ FALSE; 05562000
|
|
END; 05563000
|
|
COMMENT INDICT LOOKS UP IDENTIFIER IN IDENT AND RETURNS 05600000
|
|
LOCATION IF FOUND, NEGATIVE # FOR SPECIAL ACTION OR NOT FOUND. 05601000
|
|
W CONTAINS ELBAT WORD. LAD CONTAINS ADINFO FIELD; 05602000
|
|
INTEGER PROCEDURE INDICT; 05603000
|
|
BEGIN 05604000
|
|
LABEL TEST,TEST2,FOUND,DEFYN,NOPE,EXIT; 05605000
|
|
INTEGER NW, D; 05606000
|
|
BOOLEAN BOOL; 05607000
|
|
NW~ DLIST[IDENT[1] MOD 125]; 05608000
|
|
$ INCLUDE 05608520, IF COUNTING; 05608500
|
|
INDCT ~ *+1; 05608510
|
|
IF NW}0 THEN DO 05609000
|
|
% 05610000
|
|
IF DICT[NW.IR,NW.IC+2] = D~IDENT[1] THEN 05611000
|
|
IF COMPARE(DICT[NW.IR,NW.IC+2],IDENT[1], 05612000
|
|
0,(D~D.CTR).C6,D) = 1 THEN BEGIN % MATCH 05613000
|
|
LAD ~ (W~DICT[NW.IR,NW.IC+1].[9:39]).ADINFO; 05614000
|
|
IF W.CLASS = VDEFINEDID AND MACROTOG THEN 05615000
|
|
GO DEFYN; 05616000
|
|
IF LASTUSED > 0 OR RESCANTOG THEN 05617000
|
|
IF EX EQV (DEC OR MACROTOG)THEN 05618000
|
|
GO TEST; 05619000
|
|
IF VDEFINEDID ! W.CLASS ! VMACRONAME THEN 05620000
|
|
GO TEST2; 05621000
|
|
IF EQVTOG THEN 05622000
|
|
GO FOUND; 05623000
|
|
GO NOPE; 05624000
|
|
TEST: IF W.CLASS = VDEFINEDID THEN BEGIN 05625000
|
|
DEFYN: IF CMT OR ENDT THEN BEGIN % FORGETIT 05626000
|
|
INDICT ~ -1; 05627000
|
|
GO EXIT; 05628000
|
|
END; 05629000
|
|
IF W.SUB > 4 THEN BEGIN % PARAMETRIC, LET TABLE DO IT 05630000
|
|
INDICT ~ -5; 05631000
|
|
GO EXIT; 05632000
|
|
END; 05633000
|
|
% 05634000
|
|
LAD.REF ~ 1; 05638000
|
|
READIT(DFN,1,LAD,MDECL); 05638100
|
|
LAD ~ LAD - 1; 05638200
|
|
D ~ DFN[0].CTR + 10; 05639000
|
|
READIT(DFN,D.WRD,LAD,MDECL); 05640000
|
|
LAD ~ W.ADINFO; 05641000
|
|
IF W.SUB = 0 THEN BEGIN % 1 ID 05642000
|
|
MOVE(D.WRD,DFN,IDENT[1]); 05643000
|
|
INDICT ~ INDICT; % RECURSIVE LOOKUP 05644000
|
|
GO EXIT; 05645000
|
|
END; 05646000
|
|
BOOL ~ LASTUSED > 0 OR RESCANTOG; 05647000
|
|
IF CHAR ! " " THEN % BACK UP BFR 1 CHR 05648000
|
|
BC ~ -(BW~(NW~8|BW+BC-1).WRD)|8 + NW; 05649000
|
|
IF W.SUB = 2 THEN BEGIN % 1 SP CHR 05650000
|
|
CHAR ~ CR(DFN,3); 05651000
|
|
INDICT ~ -4; 05652000
|
|
GO EXIT; 05653000
|
|
END; 05654000
|
|
PSEUDOREAD(DFN,D-9,0); 05655000
|
|
RESCANTOG ~ BOOL; 05656000
|
|
NXTELB ~ NXTELB - 1; 05657000
|
|
INDICT ~ -3; 05658000
|
|
GO EXIT; 05659000
|
|
END; 05660000
|
|
TEST2: 05661000
|
|
$ INCLUDE 05666998, IF ADVANCED; 05661099
|
|
IF W.CLASS=VOTHERS AND ELB.SUB=REPLACEV THEN BEGIN 05661100
|
|
D ~ (DICT[W.IR,W.IC].CTR+10).WRD; 05662000
|
|
MOVE(D,DICT[W.IR,W.IC],IDENT[1]); 05663000
|
|
INDICT ~ -2; 05664000
|
|
GO EXIT; 05665000
|
|
END; 05666000
|
|
IF W.CLASS = VMACRONAME THEN 05666050
|
|
IF D~DICT[W.IR,W.IC].MCIF ! 0 THEN 05666100
|
|
IF REAL(MASK(D-1)AND USERTOG)=0 THEN 05666150
|
|
GO NOPE; 05666200
|
|
FOUND: INDICT ~ NW + 1; 05667000
|
|
GO EXIT; 05668000
|
|
NOPE: END UNTIL NW ~ DICT[NW.IR,NW.IC] < 0; 05669000
|
|
INDICT ~ -1; 05670000
|
|
EXIT: END INDICT; 05671000
|
|
COMMENT ADDICT ENTERS IDENTIFIER IN IDENT INTO DICT WITH 05672000
|
|
AN ELBAT WORD CREATED FROM THE CLASS & SUBCLASS PARAMETERS. 05673000
|
|
TWO WORDS BEYOND ENTRY ARE ZEROED TO PREVENT FLAG BITS FROM OLD 05674000
|
|
CUTBACK ENTRIES; 05675000
|
|
INTEGER PROCEDURE ADDICT(CODEWORD,SUBCODE); 05676000
|
|
VALUE CODEWORD, SUBCODE; 05677000
|
|
INTEGER CODEWORD, SUBCODE; 05678000
|
|
BEGIN 05679000
|
|
INTEGER LENGTH,NW,I,J; 05680000
|
|
IF CODEWORD=VOTHERS AND SUBCODE=REPLACEV THEN 05681000
|
|
LENGTH~ IDENT[0] 05682000
|
|
ELSE 05683000
|
|
LENGTH ~ (IDENT[1].CTR+10).WRD; 05684000
|
|
NW~ DLIST[I~ IDENT[1] MOD 125]; 05685000
|
|
IF (J~NEXTDICT).IC>254-LENGTH THEN BEGIN 05686000
|
|
NEXTDICT ~ 0&(NEXTDICT+256)[IRTOIR]; 05687000
|
|
IF BLIST[BLVL].BNXTD = J THEN 05688000
|
|
BLIST[BLVL].BNXTD ~ NEXTDICT; 05689000
|
|
END; 05690000
|
|
J~ NEXTDICT-LASTDICT; 05691000
|
|
LASTDICT~ NEXTDICT; 05692000
|
|
DLIST[I]~ NEXTDICT; 05693000
|
|
PUT(NEXTDICT, NW); 05694000
|
|
ADDICT~ NEXTDICT+1; 05695000
|
|
MOVE(LENGTH,IDENT[1],DICT[NEXTDICT.IR,NEXTDICT.IC+2]); 05696000
|
|
PUT(NEXTDICT+1,(NEXTDICT~ NEXTDICT+LENGTH+2)&(64|SUBCODE+ 05697000
|
|
CODEWORD)[TOCLSUB]&BLVL[TOBLKLVL]&J[TODIFF]); 05698000
|
|
DICT[NEXTDICT.IR,NEXTDICT.IC] ~ DICT[(NW~NEXTDICT+1) 05699000
|
|
.IR,NW.IC] ~ 0; 05700000
|
|
END ADDICT; 05701000
|
|
COMMENT SETPACK PUTS TANKED ALPHA INTO ACCM DURING A SCAN; 05702000
|
|
PROCEDURE SETPACK; 05703000
|
|
BEGIN 05703100
|
|
PACKLAST ~ TRUE; 05703200
|
|
HM ~ MOVER(TANK[ELB].CTR,TANK,3&ELB[CFX8],ACCM,HM,0)+1; 05704000
|
|
END; 05704100
|
|
COMMENT PACKET PACKS TANKED ALPHA INTO DECL. CONTAINS 05705000
|
|
PACKING ALGORITHM TO KEEP IDENTIFIERS FROM BREAKING ACROSS 05706000
|
|
"CARDS" AND KEEP QUESTION MARKS OUT OF "COLUMN 1". DECLARATIONS, 05707000
|
|
UNLESS PROGRAMMATICALLY DECOMPOSED & ALTERED, ARE LEFT PACKED 05708000
|
|
GOING INTO THE OUTPUT STRING; 05709000
|
|
PROCEDURE PACKET; 05710000
|
|
BEGIN 05711000
|
|
INTEGER I, J; 05712000
|
|
INTEGER K,L,M,N,O; 05713000
|
|
BOOLEAN OK; 05714000
|
|
LABEL MOVITOUT; 05715000
|
|
IF(NWCT+(I~IF ELB>63 THEN TANK[ELB].CTR ELSE 1)+7).WRD > 05716000
|
|
255 THEN 05717000
|
|
MOVITOUT: BEGIN 05718000
|
|
J ~ (NWCT+6).WRD; 05719000
|
|
WRITIT(DECL, J, DECP, MDECL); 05720000
|
|
TNWCT~ 8|J+TNWCT; 05721000
|
|
BLANK(DECL,3,63); 05722000
|
|
NWCT~ 4; 05723000
|
|
END; 05724000
|
|
IF PREV AND ELB<64 AND NWCT>4 THEN 05725000
|
|
NWCT~ NWCT-1; 05726000
|
|
IF ELB>63 THEN BEGIN 05727000
|
|
IF J~(NWCT-3) DIV 72 ! K~(NWCT+I-3) DIV 72 THEN BEGIN 05728000
|
|
IF K-J = 1 THEN 05729000
|
|
NWCT ~ K|72 + 3 05730000
|
|
ELSE BEGIN 05731000
|
|
M ~ 75; 05732000
|
|
N ~ ELB.ADINFO; 05733000
|
|
DO BEGIN 05734000
|
|
OK ~ TRUE; 05735000
|
|
FOR L~M STEP 72 UNTIL I+3 DO 05736000
|
|
IF CR(TANK[(O~N|8+L).WRD],O.CHR)=12 05737000
|
|
THEN BEGIN 05738000
|
|
OK ~ FALSE; 05739000
|
|
L ~ I+3; 05740000
|
|
END; 05741000
|
|
END UNTIL OK OR (M~M-1){3; 05742000
|
|
IF ((NWCT~(J+1)|72+78-M)+I+7).WRD > 255 THEN 05743000
|
|
GO MOVITOUT; 05744000
|
|
END END; 05745000
|
|
NWCT ~ MOVER(I,TANK,3&ELB[CFX8],DECL,NWCT,0) 05746000
|
|
END ELSE 05747000
|
|
NWCT~ PUTTER(ELB,DECL,NWCT); 05748000
|
|
NWCT~ NWCT+REAL(PREV~ELB>63); 05749000
|
|
END PACKET; 05750000
|
|
COMMENT SETINSERT PUTS SPECIAL CHR IN ACCM DURING SCANS; 05751000
|
|
PROCEDURE SETINSERT; 05752000
|
|
BEGIN 05752100
|
|
HM ~ HM - REAL(PACKLAST); 05752200
|
|
PACKLAST ~ FALSE; 05752300
|
|
HM ~ PUTTER(ELB,ACCM,HM); 05753000
|
|
END; 05753100
|
|
COMMENT SCA IS THE NORMAL DEBLANKING ITEM SCANNER. NO 05754000
|
|
LOCALS NOR JUMPS >63 SYLLABLES MAY BE PATCHED INTO THIS 05755000
|
|
ROUTINE AND HAVE IT WORK RIGHT. THE FINAL STREAM ADDRESS IS 05756000
|
|
PLACED ON TOP OF LITC 0 IN CALLS ON SCA TO DETERMINE LENGTH 05757000
|
|
OF ITEM. IF CHR TO RIGHT!" ", CHAR IS SET TO IT FOR LOOK-AHEAD; 05758000
|
|
INTEGER STREAM PROCEDURE SCA(BW,AW,TYPE,BC,AC,TYPEV,CT,D); 05759000
|
|
VALUE BC, AC, TYPEV; 05760000
|
|
BEGIN 05761000
|
|
LABEL DEBL, INT, IDEN, GETI, L, IDEN1, GETA; 05762000
|
|
SI~BW; SCA~SI; SI~SI+BC; DI~AW; DI~DI+AC; 05763000
|
|
CI~ CI+TYPEV; 05764000
|
|
GO TO DEBL; 05765000
|
|
GO TO INT; 05766000
|
|
GO TO IDEN1; 05767000
|
|
GO TO DEBL; 05768000
|
|
GO TO GETA; 05769000
|
|
GO TO GETI; 05770000
|
|
GETI: IF SC=" " THEN BEGIN SI~SI+1; GO GETI END; 05771000
|
|
IF SC}"0" THEN BEGIN BC~SI; SI~D; SI~SI+7; 05772000
|
|
TALLY~TALLY+1; DS~CHR; SI~BC; END; 05773000
|
|
GO TO INT; 05774000
|
|
GETA: IF SC=" " THEN BEGIN SI~SI+1; GO GETA END; 05775000
|
|
IF SC=ALPHA THEN BEGIN BC~SI; SI~D; SI~SI+7; 05776000
|
|
TALLY~TALLY+1; DS~CHR; SI~BC; END; 05777000
|
|
IDEN1: GO TO IDEN; 05778000
|
|
DEBL: IF SC=" " THEN BEGIN SI~SI+1; GO DEBL END; 05779000
|
|
IF SC}"0" THEN 05780000
|
|
BEGIN 05781000
|
|
INT: 63(IF SC}"0" THEN BEGIN DS~CHR;TALLY~TALLY+1;END 05782000
|
|
ELSE JUMP OUT); 05783000
|
|
BC~ TALLY; 05784000
|
|
TALLY~ 1; 05785000
|
|
DS~ 4 LIT " "; 05786000
|
|
END 05787000
|
|
ELSE 05788000
|
|
IF SC=ALPHA THEN 05789000
|
|
BEGIN 05790000
|
|
IDEN: 63(IF SC=ALPHA THEN BEGIN DS~ CHR;TALLY~ TALLY+1 05791000
|
|
END ELSE JUMP OUT); 05792000
|
|
BC~ TALLY; 05793000
|
|
TALLY~ 2; 05794000
|
|
DS~ 4 LIT " "; 05795000
|
|
END ELSE BEGIN 05796000
|
|
BC~TALLY; TALLY~3; 05797000
|
|
END; 05798000
|
|
TYPEV~TALLY; DI~D; DS~7 LIT "0"; 05799000
|
|
IF SC=ALPHA THEN DS~LIT " " ELSE DS~CHR; 05800000
|
|
AC~SI; SI~LOC BC; DI~CT; DS~WDS; 05801000
|
|
DI~LOC SCA; DI~DI-24; DS~WDS; % TRICK..... 05802000
|
|
DI~TYPE; DS~WDS; 05803000
|
|
END; 05804000
|
|
COMMENT MDOLLAR PROCESSES MCALGOL DOLLAR CARDS; 06000000
|
|
BOOLEAN PROCEDURE MDOLLAR(PARAM); VALUE PARAM; BOOLEAN PARAM; 06001000
|
|
BEGIN 06002000
|
|
COMMENT MFF LEFT JUSTIFIES SCANNED ID TO MAKE A FILE ID; 06003000
|
|
REAL STREAM PROCEDURE MFF(I,L); 06004000
|
|
VALUE L; 06005000
|
|
BEGIN 06006000
|
|
DI~LOC MFF; DS~8 LIT "0 "; DI~DI-7; 06007000
|
|
SI~I; SI~SI+10; DS~L CHR; 06008000
|
|
END; 06009000
|
|
FORMAT 06010000
|
|
MD1(I5,2I4,I6,2I3,I4,I6,I8), 06011000
|
|
MD2(10(I6"="I4)); 06012000
|
|
INTEGER S, CT; 06013000
|
|
OWN INTEGER TYPE; 06014000
|
|
BOOLEAN OK,ADTOG; 06015000
|
|
ARRAY I[0:(COUNT+10).WRD]; 06016000
|
|
LABEL EXIT,AGAIN,EOF,ALFA,SPCHR; 06017000
|
|
LABEL ASEQ,BOF; 06018000
|
|
PROCEDURE SCANIT(S,CT,I); 06019000
|
|
ARRAY I[0]; 06020000
|
|
INTEGER S,CT; 06021000
|
|
BEGIN 06022000
|
|
TYPE~ 0; 06023000
|
|
BC ~ (S~0-SCA(BFR[BW],I,TYPE,BC,11,TYPE,CT,CHAR)).SCHR; 06024000
|
|
BW ~ BW + S.SADD; 06025000
|
|
S ~ I[1] ~ I[1]&CT[TOC2]; 06026000
|
|
END; 06027000
|
|
SWITCH T ~ ALFA,ALFA,SPCHR; 06028000
|
|
SLIPWORDS(DOLLARDICT,STREAMDICT); 06029000
|
|
MOVE((COUNT+10).WRD,IDENT,I); 06030000
|
|
I[1].CTR ~ COUNT; 06031000
|
|
EQVTOG ~ ADTOG ~ TRUE; 06032000
|
|
DO BEGIN 06033000
|
|
SCANIT(S,CT,IDENT); 06034000
|
|
GO T[TYPE]; 06035000
|
|
GO EXIT; 06036000
|
|
EOF: LASTUSED~ 1; 06037000
|
|
GO SPCHR; 06038000
|
|
ALFA: 06039000
|
|
IF INDICT < 0 OR W.CLASS ! VDOLLARID THEN BEGIN 06040000
|
|
IF OK THEN BEGIN 06041000
|
|
OK~ FALSE; 06042000
|
|
FILL CODE WITH MF,F~MFF(IDENT,IF CT>7 THEN 06043000
|
|
7 ELSE CT);GO SPCHR; 06044000
|
|
END; 06045000
|
|
IF CHAR="/" AND SEQ=0 AND CCC=0 THEN 06046000
|
|
BEGIN 06047000
|
|
MF~ MFF(IDENT,IF CT>7 THEN 7 ELSE CT); 06048000
|
|
IF NOT SVT.[46:1] THEN SVT ~ OK ~ TRUE; 06049000
|
|
END; 06050000
|
|
GO EXIT; 06051000
|
|
END; 06052000
|
|
CASE W.SUB OF BEGIN 06053000
|
|
BEGIN % CARD 06054000
|
|
IF LASTUSED ! 5 THEN CLOSE(DISK); 06055000
|
|
LASTUSED ~ IF LASTUSED = 4 THEN 5 ELSE 1; 06056000
|
|
PRINT ~ FALSE; 06057000
|
|
END; 06058000
|
|
BEGIN % DISK 06059000
|
|
IF LASTUSED = 1 THEN READ(DISK[NO])[EOF]; 06060000
|
|
LASTUSED ~ 2; 06061000
|
|
PRINT ~ FALSE; 06062000
|
|
END; 06063000
|
|
BEGIN % NEW 06064000
|
|
SCANIT(S,CT,IDENT); 06065000
|
|
IF S ! "4DISK " THEN GO EXIT; 06066000
|
|
NEWFILE ~ ADTOG; 06067000
|
|
END; 06068000
|
|
BEGIN % SEQ 06069000
|
|
IF NOT (NEWRESEQ~ADTOG) THEN GO SPCHR; 06070000
|
|
IF CHAR = "+" THEN GO ASEQ; 06071000
|
|
IF CHAR ! " " THEN GO SPCHR; 06072000
|
|
SCANIT(S,CT,IDENT); 06073000
|
|
IF TYPE = 1 THEN BEGIN 06074000
|
|
NEWSEQ ~ CONSTANTCONVERT(IDENT[1],CT); 06075000
|
|
IF CHAR = " " THEN SCANIT(S,CT,IDENT); 06076000
|
|
END ELSE 06077000
|
|
IF TYPE = 2 THEN GO ALFA; 06078000
|
|
IF CHAR ! "+" THEN 06079000
|
|
IF TYPE = 3 THEN GO SPCHR ELSE GO ALFA; 06080000
|
|
ASEQ: SCANIT(S,CT,I); 06081000
|
|
IF TYPE = 1 THEN 06082000
|
|
NEWSEQ ~ NEWSEQ-NEWINC~CONSTANTCONVERT(IDENT[1],CT) 06083000
|
|
ELSE 06084000
|
|
IF TYPE = 2 THEN GO ALFA; 06085000
|
|
END; 06086000
|
|
BEGIN % DUMP 06087000
|
|
SCANIT(S,CT,IDENT); 06088000
|
|
IF S = "4ZERO " THEN 06089000
|
|
RCCNT ~ -1 06090000
|
|
ELSE 06091000
|
|
IF S = "6LOCAL" THEN BEGIN 06092000
|
|
FORMAT LF0("LOCAL VARIABLES:"), 06093000
|
|
LF1("CONVERTTOG ="L5/"FIELDTOG ="L5/ 06094000
|
|
"LENGTH ="I5/"DIAL ="I5/ 06095000
|
|
"ISOCODE ="2I5/"BASE ="2I5), 06096000
|
|
LF2("OUTPUT ACCUMULATOR:"I5" CHR"), 06097000
|
|
LF3("SEQUENCE ACCUMULATOR:"I5" CHR"), 06098000
|
|
LF4("INTEGER MSTRINGS:"), 06099000
|
|
LF5(4(I6":"I8,X2,O)), 06100000
|
|
LF6("CONSTANT POOL:"), 06101000
|
|
LF7("CODE:"), 06102000
|
|
LF8("ROW"I4";"I5" CHR:"), 06103000
|
|
LF9("MPOINTERS:"), 06104000
|
|
LF10("MSTRING"I4":"I4" CHR"); 06105000
|
|
PROCEDURE LISTIT(A,W,T); VALUE W,T; 06106000
|
|
INTEGER W,T; 06107000
|
|
ARRAY A[0]; 06108000
|
|
BEGIN 06109000
|
|
INTEGER S; 06110000
|
|
BLANK(DFN,0,14); 06111000
|
|
FOR S~0 STEP 8 UNTIL T DO BEGIN 06112000
|
|
MOVE(8,A[S+W],DFN[3]); 06113000
|
|
MOVEDEC(8|S,DFN[2],0,3,5,7); 06114000
|
|
WRITE(PRINTER,15,DFN[*]); 06115000
|
|
END END; 06116000
|
|
INTEGER S1,S2; 06117000
|
|
WRITE(PRINTER[PAGE]); 06118000
|
|
WRITE(PRINTER,LF0); 06119000
|
|
WRITE(PRINTER,MON2,EP,S~MNEMON[GOP], 06120000
|
|
IF BOOLEAN(S).DBA THEN "A" ELSE "I", 06121000
|
|
IF BOOLEAN(S).DBMN THEN MNEMON[GADR] ELSE GADR, 06122000
|
|
TABLET,TOGGLE,HM,OHM,IACCM,IACCM1); 06123000
|
|
WRITE(PRINTER,LF1,CONVERTTOG,FIELDTOG,PL,TFC, 06124000
|
|
FIELD.CROW,FIELD.CRAD,BASE.REF,BASE.LIM); 06125000
|
|
IF OHM > 3 THEN BEGIN 06126000
|
|
WRITE(PRINTER,LF2,OHM-3); 06127000
|
|
LISTIT(OA,0,(OHM+10).WRD); 06128000
|
|
END; 06129000
|
|
IF HM > 3 THEN BEGIN 06130000
|
|
WRITE(PRINTER,LF3,HM-3); 06131000
|
|
LISTIT(ACCM,0,(HM+10).WRD); 06132000
|
|
END; 06133000
|
|
S1 ~ LOCAL[0,255].MLICT - 1; 06134000
|
|
WRITE(PRINTER,LF4); 06135000
|
|
WRITE(PRINTER,LF5,FOR S~0 STEP 1 UNTIL S1 DO 06136000
|
|
[S+LINTBAS,LOCAL[0,S],LOCAL[0,S]]); 06137000
|
|
WRITE(PRINTER,LF6); 06138000
|
|
LISTIT(LOCAL[1,*],0,LOCAL[0,255].MPOOL); 06139000
|
|
WRITE(PRINTER,LF7); 06140000
|
|
LISTIT(LOCAL[2,*],0,LOCAL[0,255].MML); 06141000
|
|
IF S1~LOCAL[3,0].CTR ! 0 THEN BEGIN 06142000
|
|
WRITE(PRINTER,LF8,3,S1); 06143000
|
|
LISTIT(LOCAL[3,*],0,(S1+7).WRD); 06144000
|
|
END; 06145000
|
|
IF S1~LOCAL[4,0].CTR ! 0 THEN BEGIN 06146000
|
|
WRITE(PRINTER,LF8,4,S1); 06147000
|
|
LISTIT(LOCAL[4,*],0,(S1+7).WRD); 06148000
|
|
END; 06149000
|
|
IF S1~LOCAL[0,254].MLOCT-1 ! 0 THEN BEGIN 06150000
|
|
WRITE(PRINTER,LF9); 06150500
|
|
WRITE(PRINTER,LF5,FOR S~0 STEP 1 UNTIL S1 DO 06151000
|
|
[S+LPTRBAS,LOCAL[6,S],LOCAL[6,S]]); 06152000
|
|
END; 06153000
|
|
% WRITE(PRINTER,15,SPACEMAP[*]); 06154000
|
|
S1 ~ LOCAL[0,255].MLACT; 06155000
|
|
FOR S~28 STEP 1 UNTIL S1 DO 06156000
|
|
IF INUSE(SPACEMAP[S.D32],S.M32) THEN BEGIN 06157000
|
|
WRITE(PRINTER,LF10,S,S2~LOCAL[S.D4,S.M4|64]. 06158000
|
|
CTR); 06159000
|
|
LISTIT(LOCAL[S.D4,*],S.M4|64,(S2+7).WRD); 06160000
|
|
END; 06161000
|
|
WRITE(PRINTER[PAGE]); 06162000
|
|
GO EXIT; 06163000
|
|
END ELSE 06164000
|
|
IF S = "6TABLE" THEN BEGIN 06165000
|
|
INTEGER S1,S2; 06166000
|
|
FORMAT 06167000
|
|
DF0("CMT="L5/"CONVERTTOG="L5/"DEC="L5/ 06168000
|
|
"ENDT="L5/"EX="L5/"MACROTOG="L5/ 06169000
|
|
"NOJUMP="L5/"PROCTOG="L5/"RESCANTOG="L5/), 06170000
|
|
DF1("MCALGOL DICTIONARY"/"SCRAMBLE LIST:"), 06171000
|
|
DF2("ADDR DIFF SCR LINK BLK CL SUB +INFO ", 06172000
|
|
"# CHR ALPHA"), 06173000
|
|
$ INCLUDE 06176001, IF INTERMEDIATE; 06173999
|
|
DF3("USER DICTIONARY"/"SCRAMBLE LIST:"), 06174000
|
|
DF4("ADDR DIFF SCR LINK BLK SZ XXX OWNER ", 06175000
|
|
"# CHR ALPHA...ENTRY"), 06176000
|
|
DF5("BEGIN-END NESTING"/" LEVEL DICT BGN #"), 06177000
|
|
DF6(3I6), 06178000
|
|
DF7(//I5" PENDING STATEMENT PATCHES"/, 06179000
|
|
I5" NEST LEVEL OF LAST STMT PATCH"/ 06180000
|
|
I5" OUTER BLOCK NESTED BEGINS"), 06181000
|
|
DF8("STORED MACRO CODE,"I6" WORDS:"), 06182000
|
|
DF9("STORED DECLARATIONS,"I6" WORDS:"), 06183000
|
|
DF10("GLOBAL INTEGER, MPOINTER, ALPHA VALUES"), 06184000
|
|
DF11( 5(I6":"I8)); 06185000
|
|
IF PRINT THEN WRITE(PRINTER[PAGE]); 06186000
|
|
WRITE(PRINTER,DF0,CMT,CONVERTTOG,DEC,ENDT, 06187000
|
|
EX,MACROTOG,NOJUMP,PROCTOG,RESCANTOG); 06188000
|
|
WRITE(PRINTER,DF1); 06189000
|
|
WRITE(PRINTER,MD2,FOR S~0 STEP 1 UNTIL 124 DO 06190000
|
|
[S,DLIST[S]]); 06191000
|
|
WRITE(PRINTER[PAGE]); 06192000
|
|
WRITE(PRINTER,DF2); 06193000
|
|
S ~ (CT~NEXTDICT) - LASTDICT; 06194000
|
|
WHILE S > 0 DO BEGIN 06195000
|
|
S~(W~DICT[S1~(CT~CT-S).IR,(S2~CT.IC)+1]).DIFF; 06196000
|
|
WRITE(DFN[*],MD1,CT,S,DICT[S1,S2+2]MOD 125, 06197000
|
|
DICT[S1,S2],W.BLKLVL,W.CLASS,W.SUB, 06198000
|
|
W.ADINFO,W~DICT[S1,S2+2].CTR); 06199000
|
|
M(DICT[S1,S2+2],3,DFN[5],4,0,0,W); 06200000
|
|
WRITE(PRINTER,15,DFN[*]); 06201000
|
|
END; 06202000
|
|
WRITE(PRINTER[PAGE]); 06203000
|
|
$ INCLUDE 06221001, IF ADVANCED; 06203999
|
|
IF NXTUDICT > 0 THEN BEGIN 06204000
|
|
WRITE(PRINTER,DF3); 06205000
|
|
WRITE(PRINTER,MD2,FOR S~125 STEP 1 UNTIL 249 DO 06206000
|
|
[S-125,DLIST[S]]); 06207000
|
|
WRITE(PRINTER[PAGE]); 06208000
|
|
WRITE(PRINTER,DF4); 06209000
|
|
S ~ (CT~NXTUDICT) - LSTUDICT; 06210000
|
|
WHILE S > 0 DO BEGIN 06211000
|
|
S~(W~UDICT[S1~(CT~CT-S).IR,(S2~CT.IC)+1]).DIFF; 06212000
|
|
WRITE(DFN[*],MD1,CT,S,UDICT[S1,S2+2]MOD 125, 06213000
|
|
UDICT[S1,S2],W.BLKLVL,W.USIZ,W.UXXX, 06214000
|
|
W.UQUAL,A~UDICT[S1,S2+2].CTR); 06215000
|
|
MOVE(MIN((A+10).WRD+W.USIZ,11), 06216000
|
|
UDICT[S1,S2+2],DFN[5]); 06217000
|
|
WRITE(PRINTER,15,DFN[*]); 06218000
|
|
END; 06219000
|
|
WRITE(PRINTER[PAGE]); 06220000
|
|
END; 06221000
|
|
IF BLVL > 1 THEN BEGIN 06222000
|
|
WRITE(PRINTER,DF5); 06223000
|
|
FOR S~1 STEP 1 UNTIL BLVL DO 06224000
|
|
WRITE(PRINTER,DF6,(W~BLIST[S]).BBLKL, 06225000
|
|
W.BNXTD,W.BBNO); 06226000
|
|
END; 06227000
|
|
WRITE(PRINTER[DBL],DF7,SSTK,STMTSTKLVL,OUTERLIMIT); 06228000
|
|
IF PT > 0 THEN BEGIN 06229000
|
|
WRITE(PRINTER[PAGE]); 06230000
|
|
WRITE(PRINTER,DF8,PT); 06231000
|
|
BLANK(DFN,0,14); 06232000
|
|
S1 ~ 0; 06233000
|
|
READIT(DFN,1,0,MCODE); 06234000
|
|
% CLEAR UPDATED CODE 06235000
|
|
FOR S~0 STEP 8 UNTIL PT DO BEGIN 06236000
|
|
IF S.IR ! S1 THEN 06237000
|
|
READ(MSTOR[S1~S1+1],256,MCODE[*]); 06238000
|
|
MOVE(8,MCODE[S.IC],DFN[3]); 06239000
|
|
MOVEDEC(S,DFN[2],0,3,5,7); 06240000
|
|
WRITE(PRINTER,15,DFN[*]); 06241000
|
|
END; 06242000
|
|
MSTORP.PDF1 ~ S1; 06243000
|
|
END; 06244000
|
|
IF DECP.LIM > 0 THEN BEGIN 06245000
|
|
WRITE(PRINTER[PAGE]); 06246000
|
|
WRITE(PRINTER,DF9,DECP.LIM); 06247000
|
|
BLANK(DFN,0,14); 06248000
|
|
S1 ~ 0; 06249000
|
|
READIT(DFN,1,0&1[TOREF],MDECL); 06250000
|
|
% CLEAR UPDATED DECLARATIONS 06251000
|
|
FOR S~0 STEP 8 UNTIL DECP.LIM DO BEGIN 06252000
|
|
IF S.IR ! S1 THEN 06253000
|
|
READ(MSTOR[150+S1~S1+1],256,MDECL[*]); 06254000
|
|
MOVE(8,MDECL[S.IC],DFN[3]); 06255000
|
|
MOVEDEC(S,DFN[2],0,3,5,7); 06256000
|
|
WRITE(PRINTER,15,DFN[*]); 06257000
|
|
END; 06258000
|
|
MSTORP.PDF2 ~ S1; 06259000
|
|
END; 06260000
|
|
IF GLIT > GINTBAS OR GLOT > GPTRBAS OR 06261000
|
|
GLAT > GALFBAS THEN BEGIN 06262000
|
|
WRITE(PRINTER[PAGE]); 06263000
|
|
WRITE(PRINTER,DF10); 06264000
|
|
WRITE(PRINTER,DF11,FOR S~GINTBAS STEP 1 UNTIL GLIT 06265000
|
|
DO [S,GINT[S-GINTBAS]]); 06266000
|
|
WRITE(PRINTER[DBL]); 06267000
|
|
WRITE(PRINTER,DF11,FOR S~GPTRBAS STEP 1 UNTIL GLOT 06268000
|
|
DO [S,GPTR[S-GPTRBAS]]); 06269000
|
|
FOR S~GALFBAS STEP 1 UNTIL GLAT DO 06270000
|
|
IF INUSE(SPACEMAP[(S1~S-GALFBAS).D32+8],S1.M32) 06271000
|
|
THEN BEGIN 06272000
|
|
WRITE(PRINTER,DF11,S); 06273000
|
|
CT ~ GLOBAL[S1.D4,TYPE~S1.M4|64].CTR; 06274000
|
|
W ~ 3; 06275000
|
|
WHILE CT>0 DO BEGIN 06276000
|
|
BLANK(DFN,0,14); 06277000
|
|
M(GLOBAL[S1.D4,TYPE+W.WRD],W.CHR,DFN[2],0,0, 06278000
|
|
(S1~MIN(CT,80)).C6,S1); 06279000
|
|
WRITE(PRINTER,15,DFN[*]); 06280000
|
|
CT ~ CT - S1; 06281000
|
|
W ~ W + S1; 06282000
|
|
END; 06283000
|
|
END; 06284000
|
|
WRITE(PRINTER[PAGE]); 06285000
|
|
END; 06286000
|
|
GO EXIT; 06287000
|
|
END DUMP TABLES; 06288000
|
|
FOR S~0 STEP 1 UNTIL 124 DO 06289000
|
|
WHILE DOLLARDICT { A~DLIST[S] < STREAMDICT DO 06290000
|
|
DLIST[S] ~ DICT[A.IR,A.IC]; 06291000
|
|
GO DP; 06292000
|
|
06293000
|
|
END DUMP; 06294000
|
|
BEGIN % VOID 06295000
|
|
VOIDING ~ TRUE; 06296000
|
|
SCANIT(S,CT,IDENT); 06297000
|
|
LINKS[2] ~ 0; 06298000
|
|
M(IDENT,11,LINKS[2],8-CT,0,0,CT); 06299000
|
|
IF NEWFILE THEN SPACE(NEWDISK,-1)[BOF]; 06300000
|
|
GO EXIT; 06301000
|
|
BOF: CLOSE(NEWDISK); 06302000
|
|
GO EXIT; 06303000
|
|
END; 06304000
|
|
PRINT ~ ADTOG; % LIST 06305000
|
|
DBLINE ~ ADTOG; % DOUBLE 06306000
|
|
$ INCLUDE 06310001, IF DEBUGGING; 06306999
|
|
MONITER ~ ADTOG; % MONITOR 06307000
|
|
TRACE ~ ADTOG; % TRACE 06308000
|
|
DBUGN ~ ADTOG; % DEBUGN 06309000
|
|
ACMLST ~ ADTOG; % ACCUM 06310000
|
|
$ OMIT 06310101, IF DEBUGGING; 06310099
|
|
;;;; 06310100
|
|
UNPACK ~ ADTOG; % UNPACK 06311000
|
|
IF INTERLIST ~ ADTOG THEN UNPACK ~ TRUE; % INTER 06312000
|
|
$ INCLUDE 06313001, IF DEBUGGING; 06312999
|
|
SRT ~ ADTOG; % PRT 06313000
|
|
BLOCK ~ ADTOG; % BLOCK 06314000
|
|
WARNTOG ~ ADTOG; % WARN 06315000
|
|
IF PRINT THEN WRITE(PRINTER[PAGE]); % PAGE 06316000
|
|
IF SEQ=0 OR NOT ADTOG THEN INDEXING ~ ADTOG; % INDEX 06317000
|
|
$ INCLUDE 06318001, IF DEBUGGING; 06317999
|
|
PSEUDOTOG ~ ADTOG; % PSEUDO 06318000
|
|
$ OMIT 06318101, IF DEBUGGING; 06318099
|
|
; 06318100
|
|
END ALFA CASES; 06319000
|
|
SPCHR: IF CHAR = "-" THEN ADTOG ~ FALSE ELSE 06320000
|
|
IF CHAR = "+" THEN ADTOG ~ TRUE; 06321000
|
|
END UNTIL CHAR = "%" OR CHAR = ";"; 06322000
|
|
EXIT: MDOLLAR ~ CHAR = ";" AND PARAM; 06323000
|
|
FOR S~0 STEP 1 UNTIL 124 DO 06324000
|
|
WHILE DOLLARDICT { A~DLIST[S] < STREAMDICT DO 06325000
|
|
DLIST[S] ~ DICT[A.IR,A.IC]; 06326000
|
|
MOVE(((COUNT~I[1].CTR)+10).WRD,I,IDENT); 06327000
|
|
EQVTOG ~ FALSE; 06328000
|
|
END MDOLLAR; 06329000
|
|
COMMENT ASCAN DRIVES THE STANDARD SCANNER SCA AND CHECKS 06500000
|
|
FOR END OF INPUT ("%") FLAGS TO FLUSH TO NEXT INPUT IMAGE. 06501000
|
|
ESTABLISHES TYPE OF ITEM SCANNED; 06502000
|
|
PROCEDURE ASCAN; 06503000
|
|
BEGIN 06504000
|
|
REAL T, CT; 06505000
|
|
IF TYPE=0 THEN 06506000
|
|
COUNT~ 0; 06507000
|
|
DO 06508000
|
|
BEGIN 06509000
|
|
BC ~ (T~0-SCA(BFR[BW],IDENT[(T~COUNT+11).WRD], 06510000
|
|
TYPE,BC,T.CHR,TYPE,CT,CHAR)).SCHR; 06511000
|
|
IF(BW~(BW+T.SADD))|8+BC>BWMAX THEN 06512000
|
|
IF LASTUSED=0 THEN 06513000
|
|
BEGIN 06514000
|
|
IF(COUNT~ COUNT+CT)=0 THEN 06515000
|
|
TYPE~ 4; 06516000
|
|
CT~ 0 06517000
|
|
END 06518000
|
|
ELSE 06519000
|
|
BEGIN 06520000
|
|
READACARD; 06521000
|
|
COUNT~ COUNT+CT-63; 06522000
|
|
CT~ 63; 06523000
|
|
END; 06524000
|
|
IF COUNT ~ COUNT+CT > IDMAX THEN 06525000
|
|
COUNT ~ IDMAX; 06526000
|
|
END 06527000
|
|
UNTIL CT<63; 06528000
|
|
IF TYPE!3 THEN 06529000
|
|
IDENT[1].CTR ~ COUNT; 06530000
|
|
$ INCLUDE 06530520, IF COUNTING; 06530500
|
|
ASCT ~ *+1; 06530510
|
|
END ASCAN; 06531000
|
|
COMMENT BSCAN DEBLANKS AND ONLY RETURNS A SPECIAL CHR IF 06600000
|
|
PRESENT. USES PATCH OVER LITC 0 TRICK; 06601000
|
|
PROCEDURE BSCAN; 06602000
|
|
BEGIN 06603000
|
|
INTEGER STREAM PROCEDURE SCB(BW, BC, T, D); 06604000
|
|
VALUE BC, T; 06605000
|
|
BEGIN 06606000
|
|
LABEL L; 06607000
|
|
SI~BW; SCB~SI; SI~SI+BC; 06608000
|
|
L: IF SC=" " THEN BEGIN SI~SI+1; GO L END; DI~D; 06609000
|
|
DS~7 LIT "0"; IF SC=ALPHA THEN DS~LIT " " ELSE DS~CHR; 06610000
|
|
T~SI; SI~LOC T; DI~LOC SCB; DI~DI-24; % TRICK...... 06611000
|
|
DS~ WDS; 06612000
|
|
END SCB; 06613000
|
|
REAL T; 06614000
|
|
LABEL AGAIN; 06615000
|
|
AGAIN: BC~(T~0-SCB(BFR[BW],BC,0,CHAR)).SCHR; 06616000
|
|
IF(BW~(BW+T.SADD))|8+BC>BWMAX THEN 06617000
|
|
IF LASTUSED=0 THEN 06618000
|
|
TYPE~ 4 06619000
|
|
ELSE 06620000
|
|
BEGIN 06621000
|
|
READACARD; 06622000
|
|
GO TO AGAIN; 06623000
|
|
END; 06624000
|
|
$ INCLUDE 06624520, IF COUNTING; 06624500
|
|
BSCT ~ *+1; 06624510
|
|
END BSCAN; 06625000
|
|
COMMENT SSCAN IS USED TO PROCESS ARBITRARY LENGTH QUOTED 06700000
|
|
STRINGS. IF "%" IS FOUND, A CHECK IS MADE TO SEE IF IT WAS A 06701000
|
|
SENTINEL OR NOT. STRINGS SCANNED WHILE COMPILING MACROS ARE 06702000
|
|
STRIPPED OF QUOTES FOR USE AS CONSTANTS. STRINGS >SMAX LONG 06703000
|
|
ARE TOO ARBITRARY AND ARE TREATED AS SYNTAX ERRORS; 06704000
|
|
PROCEDURE SSCAN; 06705000
|
|
BEGIN 06706000
|
|
LABEL AGAIN, EXIT, OK; 06707000
|
|
REAL T, CT; 06708000
|
|
INTEGER STREAM PROCEDURE SCS(BW,AW,BC,AC,CT,D); 06709000
|
|
VALUE BC, AC; 06710000
|
|
BEGIN 06711000
|
|
SI~BW; SCS~SI; SI~SI+BC; DI~AW; DI~DI+AC; 06712000
|
|
63(IF SC=""" THEN JUMP OUT;IF SC!"%" THEN BEGIN DS~ CHR; 06713000
|
|
TALLY~ TALLY+1;END ELSE JUMP OUT); 06714000
|
|
DS~4 LIT " "; DI~D; DS~7 LIT "0"; DS~CHR; 06715000
|
|
AC~SI; BC~TALLY; SI~LOC BC; DI~CT; DS~WDS; 06716000
|
|
DI~LOC SCS; DI~DI-24; DS~WDS; 06717000
|
|
END SCS; 06718000
|
|
GO AGAIN; 06719000
|
|
OK: INSERT((COUNT+3).CHR,IDENT[(COUNT+11).WRD],CHAR,1); 06720000
|
|
COUNT~ COUNT+1; 06721000
|
|
AGAIN: BC ~ (T~0-SCS(BFR[BW],IDENT[(T~COUNT+11).WRD],BC, 06722000
|
|
T.CHR,CT,CHAR)).SCHR; 06723000
|
|
BW ~ BW+T.SADD; 06724000
|
|
IF COUNT~COUNT+CT > MSMAX THEN 06725000
|
|
BEGIN 06726000
|
|
COUNT~ 0; 06727000
|
|
ERROR(0); 06728000
|
|
END; 06729000
|
|
IF BW|8+BC>BWMAX THEN 06730000
|
|
BEGIN 06731000
|
|
IF LASTUSED=0 THEN 06732000
|
|
BEGIN 06733000
|
|
TYPE~ 4; 06734000
|
|
GO EXIT 06735000
|
|
END; 06736000
|
|
READACARD; 06737000
|
|
GO TO AGAIN; 06738000
|
|
END; 06739000
|
|
IF CHAR="%" THEN 06740000
|
|
GO TO OK; 06741000
|
|
IF COUNT+REAL(MACROTOG AND<1>)=1 THEN 06742000
|
|
GO TO OK; 06743000
|
|
IF CT=63 AND CHAR!""" THEN 06744000
|
|
GO OK; 06745000
|
|
EXIT: 06746000
|
|
$ INCLUDE 06746520, IF COUNTING; 06746500
|
|
SSCT ~ *+1; 06746510
|
|
END SSCAN; 06747000
|
|
COMMENT ESCAN IS USED TO SCAN OFF "EXPRESSIONS" OF THE 06800000
|
|
TYPE FOUND IN ARRAY BOUND PAIRS AND FORMAT, LIST, & PROCEDURE 06801000
|
|
DECLARATIONS BETWEEN "[ ]" & "( )"; 06802000
|
|
PROCEDURE ESCAN; 06803000
|
|
BEGIN 06804000
|
|
INTEGER PARNPAIR, BRACPAIR; 06805000
|
|
LABEL OK,ERR,CONTINUE,COLON,COMMA,LPN,LBC,RPN,RBC,EXIT; 06806000
|
|
SWITCH SWHICH ~ OK,ERR,COLON,OK,OK,OK,ERR,ERR,ERR,ERR, 06807000
|
|
ERR,ERR,ERR,ERR,ERR,OK,LBC,OK,LPN,OK,OK,OK,ERR, 06808000
|
|
ERR,ERR,ERR,ERR,ERR,ERR,ERR,ERR,ERR,OK,OK,RPN, 06809000
|
|
EXIT,OK,OK,OK,ERR,ERR,ERR,ERR,ERR,ERR,ERR,ERR, 06810000
|
|
COMMA,ERR,OK,OK,RBC; 06811000
|
|
% 06812000
|
|
GO TO CONTINUE; 06813000
|
|
OK: PACKET; 06814000
|
|
CONTINUE: IF STEPI=63 THEN 06815000
|
|
GO ERR; 06816000
|
|
IF TYPE!0 THEN 06817000
|
|
BEGIN 06818000
|
|
PACKET; 06819000
|
|
GO TO CONTINUE 06820000
|
|
END; 06821000
|
|
GO TO SWHICH[ELB-10]; 06822000
|
|
ERR: ERROR(1); 06823000
|
|
ELB~ ";"; 06824000
|
|
GO TO EXIT; 06825000
|
|
LPN: IF BRACPAIR+PARNPAIR~PARNPAIR+1 = 1 THEN 06826000
|
|
IF NOT FMTTOG THEN EX ~ TRUE; 06826050
|
|
GO TO OK; 06827000
|
|
LBC: IF PARNPAIR+BRACPAIR~BRACPAIR+1 = 1 THEN 06828000
|
|
IF NOT FMTTOG THEN EX ~ TRUE; 06828050
|
|
GO TO OK; 06829000
|
|
RPN: IF(PARNPAIR~ PARNPAIR-1)<0 THEN 06830000
|
|
GO TO EXIT; 06831000
|
|
IF PARNPAIR + BRACPAIR = 0 THEN EX ~ FALSE; 06831050
|
|
GO TO OK; 06832000
|
|
RBC: IF(BRACPAIR~ BRACPAIR-1)<0 THEN 06833000
|
|
GO TO EXIT; 06834000
|
|
IF BRACPAIR + PARNPAIR = 0 THEN EX ~ FALSE; 06834050
|
|
GO TO OK; 06835000
|
|
COLON: IF BRACPAIR=0 THEN 06836000
|
|
GO TO EXIT; 06837000
|
|
GO TO OK; 06838000
|
|
COMMA: IF BRACPAIR+PARNPAIR=0 THEN 06839000
|
|
GO TO EXIT; 06840000
|
|
GO TO OK; 06841000
|
|
EXIT: EX ~ FALSE; 06842000
|
|
$ INCLUDE 06842520, IF COUNTING; 06842500
|
|
ESCT ~ *+1; 06842510
|
|
END ESCAN; 06843000
|
|
COMMENT SLIPWORDS IS USED TO SLIP ONE CLASS OF 06850000
|
|
RESERVED WORDS INTO DICT. THESE WILL BE REMOVED BY WRAPBLOCK 06851000
|
|
MDOLLAR OR MACRO; 06852000
|
|
PROCEDURE SLIPWORDS(B,E); 06853000
|
|
VALUE B,E; 06854000
|
|
INTEGER B,E; 06855000
|
|
BEGIN 06856000
|
|
INTEGER I; 06857000
|
|
$ INCLUDE 06859001, IF DEBUGGING; 06857999
|
|
IF MONITER AND PRINT THEN 06858000
|
|
WRITE(PRINTER,MON3,B,E); 06859000
|
|
E ~ -DICT[E.IR,E.IC+1].DIFF + E; 06860000
|
|
DO BEGIN 06861000
|
|
DICT[E.IR,E.IC] ~ DLIST[I~DICT[E.IR,E.IC+2]MOD 125]; 06862000
|
|
DLIST[I] ~ E; 06863000
|
|
END UNTIL E~-(I~DICT[E.IR,E.IC+1].DIFF)+E<B OR I=0; 06864000
|
|
END SLIPWORDS; 06865000
|
|
COMMENT STARTBLOCK STACKS BLOCKLEVEL CUTBACK INFO & 06866000
|
|
MAINTAINS BEGINLEVEL CONTROL. A CALL OF TRUE IS FOR A "BEGIN". 06867000
|
|
A CALL OF FALSE IS TO PROVIDE A PSEUDOLEVEL FOR HIDING FORMAL 06868000
|
|
PARAMETERS AND MACRO WORKINGS; 06869000
|
|
PROCEDURE STARTBLOCK(T); 06870000
|
|
VALUE T; 06871000
|
|
BOOLEAN T; 06872000
|
|
BEGIN 06873000
|
|
FORMAT SP(X95"BEGIN"I4"("I2")"); 06874000
|
|
$ INCLUDE 06876001, IF DEBUGGING; 06874999
|
|
IF MONITER AND PRINT THEN 06875000
|
|
WRITE(PRINTER,MON4,"SB",NEXTDICT,T); 06876000
|
|
BLIST[BLVL]~ BNO&NEXTDICT[TOBNXTD]&BLOCKLEVEL[TOBBLKL]; 06877000
|
|
BLIST[BLVL+50] ~ NXTUDICT; 06878000
|
|
IF T THEN 06879000
|
|
BEGIN 06880000
|
|
IF PROCTOG AND STREAMTOG THEN 06881000
|
|
SLIPWORDS(STREAMDICT,MACRODICT); 06882000
|
|
SPCT~ PROCTOG~ FALSE; 06883000
|
|
IDENT[1]~ "5?0001"; 06884000
|
|
IF NEST>0 THEN 06885000
|
|
PROCT[NEST] ~ *+1; 06886000
|
|
SHIFT(0, VOTHERS, BEGINV); 06887000
|
|
BNO~ BNOMAX~ BNOMAX+1; 06888000
|
|
IF BLOCK AND PRINT THEN 06889000
|
|
WRITE(PRINTER,SP,BNO,BLVL-NEST); 06889100
|
|
END 06890000
|
|
ELSE 06891000
|
|
PROCT[NEST~ NEST+1]~ 0; 06892000
|
|
BLVL~ BLVL+1 06893000
|
|
END STARTBLOCK; 06894000
|
|
COMMENT WRAPBLOCK CUTS BACK THE DICT TO THE PREVIOUS LEVEL. 06895000
|
|
STORAGE SPACE FOR DECLARATIONS AND MACRO CODE ARE RETURNED. 06896000
|
|
UNPLACED MACRO LABELS ARE FLAGGED; 06897000
|
|
PROCEDURE WRAPBLOCK(T); 06898000
|
|
VALUE T; 06899000
|
|
BOOLEAN T; 06900000
|
|
BEGIN 06901000
|
|
INTEGER NW, I; 06902000
|
|
REAL A,WD; 06903000
|
|
FORMAT SP(X96"END "I4"("I2")"); 06904000
|
|
NW~ NEXTDICT; 06905000
|
|
$ INCLUDE 06907001, IF DEBUGGING; 06905999
|
|
IF MONITER AND PRINT THEN 06906000
|
|
WRITE(PRINTER,MON4,"WB",NW,T); 06907000
|
|
IF BLVL{1 AND T THEN 06908000
|
|
ERROR(49); 06909000
|
|
NEXTDICT ~ BLIST[BLVL~BLVL-REAL(BLVL>0)].BNXTD; 06910000
|
|
BLOCKLEVEL ~ BLIST[BLVL].BBLKL; 06911000
|
|
IF NW>NEXTDICT AND(NOT MACROTOG OR MCBL>BLVL) THEN 06912000
|
|
FOR I~ 0 STEP 1 UNTIL 124 DO 06913000
|
|
WHILE NW~ DLIST[I]}NEXTDICT DO 06914000
|
|
BEGIN 06915000
|
|
IF MACROTOG THEN 06916000
|
|
IF(A~DICT[NW.IR,NW.IC+1]).CLASS= 06917000
|
|
VALGOLIDENT AND A.SUB=LABELV THEN 06918000
|
|
IF BOOLEAN((A~GET(A.ADINFO)).PNOTT)THEN 06919000
|
|
BEGIN % UNPLACED LABEL 06920000
|
|
ERROR(58&NW[TOREF]); 06921000
|
|
ERRCT ~ ERRCT + 1; 06922000
|
|
END; 06923000
|
|
IF (WD~DICT[NW.IR,NW.IC+1]).CLASS=VDECLRN THEN 06924000
|
|
IF WD.ADINFO < DECP.ADINFO THEN 06925000
|
|
DECP.ADINFO ~ WD; 06926000
|
|
IF WD.CLASS=VMACRONAME AND WD.SUB!EQVV THEN 06927000
|
|
IF (WD~DICT[(WD~ WD.ADINFO+1).IR, 06928000
|
|
WD.IC])<PT THEN 06929000
|
|
PT~ WD; 06930000
|
|
DLIST[I] ~ DICT[NW.IR,NW.IC]; 06931000
|
|
END 06932000
|
|
ELSE 06933000
|
|
NEXTDICT~ NW; 06934000
|
|
IF NW ~ DICT[(I~NEXTDICT+1).IR,I.IC].DIFF!0 THEN 06935000
|
|
LASTDICT~ NEXTDICT -NW; 06936000
|
|
$ INCLUDE 06947001, IF ADVANCED; 06936999
|
|
NW ~ NXTUDICT; 06937000
|
|
NXTUDICT ~ BLIST[BLVL+50]; 06938000
|
|
IF NW > NXTUDICT THEN 06939000
|
|
FOR I~125 STEP 1 UNTIL 249 DO 06940000
|
|
WHILE NW~DLIST[I] } NXTUDICT DO 06941000
|
|
DLIST[I] ~ UDICT[NW.IR,NW.IC] 06942000
|
|
ELSE 06943000
|
|
NXTUDICT ~ NW; 06944000
|
|
IF NW ~ UDICT[(I~NXTUDICT+1).IR,I.IC].DIFF ! 0 THEN 06945000
|
|
LSTUDICT ~ NXTUDICT - NW; 06946000
|
|
UDICT[I.IR,I.IC] ~ 0; 06947000
|
|
DICT[I.IR,I.IC]~ 0; 06948000
|
|
IF T THEN 06949000
|
|
BEGIN 06950000
|
|
COUNT~ 5; 06951000
|
|
IDENT[1]~ "5?0000"; 06952000
|
|
SHIFT(0, VOTHERS, ENDV); 06953000
|
|
ENDT~ TRUE; 06954000
|
|
IF BLOCK AND PRINT THEN 06955000
|
|
WRITE(PRINTER,SP,BNO,BLVL-NEST); 06955100
|
|
IF NEST>0 THEN 06956000
|
|
PROCT[NEST] ~ *-1 06957000
|
|
END; 06958000
|
|
BNO ~ BLIST[BLVL].BBNO; 06959000
|
|
END WRAPBLOCK; 06960000
|
|
COMMENT TABLE IS THE HEART OF SCANNER ACTIVITY. THE RESULT 07000000
|
|
IS TO RETURN ELBAT WORDS IN ELB, CLASS FIELD IN TABLE & TYPE. 07001000
|
|
IF ITEM REQUESTED BY "STEPI" HAS ALREADY BEEN SCANNED, ONLY 07002000
|
|
ELBAT WORD RETURNED. OTHERWISE, SCANNERS ARE ACTIVATED & 07003000
|
|
RECOGNITION ATTEMPTS MADE. MACRO IDS CAUSE ACTIVATION OF 07004000
|
|
INTERPRETER (MACRON). DECLARATORS CAUSE IMMEDIATE PROCESSING 07005000
|
|
BY DECLARATION. DECOMPOSITION EOF CONDITION FLAGGED BY SHIFTING 07006000
|
|
IMPOSSIBLE CLASS OF 63 INTO ELB; 07007000
|
|
INTEGER PROCEDURE TABLE(P); 07008000
|
|
VALUE P; 07009000
|
|
INTEGER P; 07010000
|
|
BEGIN 07011000
|
|
INTEGER SPC, SGN, TTEM, A; 07012000
|
|
STREAM PROCEDURE CONVERT(IDN,C); VALUE C; BEGIN 07013000
|
|
DI~IDN; DI~DI+3; SI~LOC C; SI~SI+7; SKIP 5 SB; 07014000
|
|
IF SB THEN DS~3 RESET; SI~IDN; SI~SI+4; 07015000
|
|
C(SKIP 3 SB;3(IF SB THEN DS~SET ELSE DS~RESET;SKIP SB)); 07016000
|
|
DS~4 LIT " "; 07017000
|
|
END CONVERT; 07018000
|
|
LABEL E51; 07019000
|
|
LABEL IPART,FPART,EPART,NONE,DONE,IDEN,SPCHR,PSEUDO, 07020000
|
|
EXIT,FOUND,ONE,LOTHERS,LDEC,LOOP; 07021000
|
|
SWITCH WITCH~ IPART, IDEN, SPCHR, PSEUDO; 07022000
|
|
$ INCLUDE 07022520, IF COUNTING; 07022500
|
|
STEPCT ~ *+1; 07022510
|
|
WHILE P}NXTELB DO 07023000
|
|
BEGIN 07024000
|
|
TYPE~ 0; 07025000
|
|
ASCAN; 07026000
|
|
GO TO WITCH[TYPE]; 07027000
|
|
IPART: IF(W~ IDENT[1]).C23="5?" THEN 07028000
|
|
BEGIN 07029000
|
|
IF W~ IN4(W)=0 THEN 07030000
|
|
SHIFT(0,VOTHERS,ENDV) 07031000
|
|
ELSE 07032000
|
|
IF W=1 THEN 07033000
|
|
SHIFT(0,VOTHERS,BEGINV) 07034000
|
|
ELSE 07035000
|
|
IF INDICT>0 THEN 07036000
|
|
SHIFT(W,0,0) 07037000
|
|
ELSE BEGIN ERROR(73); 07038000
|
|
SHIFT(0,VNOTDEC,0);END; 07039000
|
|
GO SPCHR 07040000
|
|
END; 07041000
|
|
IF W.C23="4?" THEN 07042000
|
|
BEGIN 07043000
|
|
SHIFT(0,VPATCHID,0); 07044000
|
|
GO SPCHR; 07045000
|
|
END; 07046000
|
|
IF CHAR="." THEN 07047000
|
|
GO TO FPART; 07048000
|
|
IF CHAR="@" THEN 07049000
|
|
GO TO EPART; 07050000
|
|
SPC ~ 1023; % INTEGER FLAG 07051000
|
|
GO TO DONE; 07052000
|
|
FPART: SPC~ CHAR; 07053000
|
|
TYPE~ 5; 07054000
|
|
A~ COUNT; 07055000
|
|
ASCAN; 07056000
|
|
IF A=COUNT THEN 07057000
|
|
BEGIN 07058000
|
|
IF COUNT=0 THEN 07059000
|
|
GO TO NONE; 07060000
|
|
ONE: SHIFT(0,VNUMBER,REALV); 07061000
|
|
GO TO NONE 07062000
|
|
END; 07063000
|
|
IF CHAR="@" THEN 07064000
|
|
GO TO EPART; 07065000
|
|
GO TO DONE; 07066000
|
|
EPART: SPC~ CHAR; 07067000
|
|
TYPE~ 5; 07068000
|
|
A~ COUNT; 07069000
|
|
ASCAN; 07070000
|
|
IF A!COUNT THEN 07071000
|
|
GO TO DONE; 07072000
|
|
IF CHAR!"+" THEN 07073000
|
|
IF CHAR!"-" THEN 07074000
|
|
BEGIN 07075000
|
|
IF COUNT=0 THEN 07076000
|
|
GO TO NONE; 07077000
|
|
GO TO ONE 07078000
|
|
END; 07079000
|
|
SGN~ SPC; 07080000
|
|
SPC~ CHAR; 07081000
|
|
TYPE~ 5; 07082000
|
|
COUNT~ A~ 1+COUNT; 07083000
|
|
ASCAN; 07084000
|
|
IF A!COUNT THEN 07085000
|
|
BEGIN 07086000
|
|
INSERT((A+2).CHR,IDENT[(A+10).WRD],SGN,1); 07087000
|
|
GO TO DONE; 07088000
|
|
END; 07089000
|
|
SHIFT(0,VNUMBER,REALV); 07090000
|
|
SHIFT(SGN, 0, 0); 07091000
|
|
NONE: SHIFT(SPC, 0, 0); 07092000
|
|
GO TO SPCHR; 07093000
|
|
DONE: SHIFT(0,VNUMBER,IF SPC=1023 THEN INTEGERV ELSE 07094000
|
|
REALV); 07095000
|
|
GO TO SPCHR; 07096000
|
|
IDEN: IF A~INDICT < 0 THEN BEGIN 07097000
|
|
CASE ABS(A)-1 OF BEGIN 07098000
|
|
07099000
|
|
SHIFT(0,VNOTDEC,1); % NOT FOUND 07100000
|
|
SHIFT(0,VNOTDEC,2); % REPLACEMENT 07101000
|
|
GO EXIT; % PSEUDOREADER 07102000
|
|
; % SP CHR 07103000
|
|
BEGIN % PARA DEFINE 07104000
|
|
INTEGER HLD,I,CL,FLD,PRM,DCT,D,LAD; 07105000
|
|
ARRAY HOLD[0:255]; 07106000
|
|
ARRAY INST[0:63],CON[0:127]; 07107000
|
|
REAL A; 07108000
|
|
BOOLEAN BOOL; 07109000
|
|
LABEL AGAIN; 07110000
|
|
IF CHAR = " " THEN BSCAN; 07111000
|
|
IF NOT(CHAR="(" OR CHAR="[") THEN BEGIN 07112000
|
|
ERROR(87); 07113000
|
|
GO EXIT; 07114000
|
|
END; 07115000
|
|
SAVEIT; 07116000
|
|
IF BOOL ~ NWCT ! 3 THEN BEGIN 07117000
|
|
DECL[0].CTR ~ NWCT - 3; 07118000
|
|
STACKIT(CL~(NWCT+10).WRD,DECL[*]); 07119000
|
|
NWCT ~ 3; 07120000
|
|
END; 07121000
|
|
LAD ~ W.ADINFO; 07122000
|
|
HLD ~ 0 & 2[TOREF]; 07123000
|
|
D ~ W.SUB - 4; 07124000
|
|
DEC ~ TRUE; 07125000
|
|
FOR I~1 STEP 1 UNTIL D DO BEGIN 07126000
|
|
DECL[(NWCT~3).WRD] ~ " "; 07127000
|
|
WHILE STEPI ! VSPECIAL DO 07128000
|
|
AGAIN: PACKET; 07129000
|
|
IF ELB = "(" OR ELB = "[" THEN 07130000
|
|
A ~ A + 1 07131000
|
|
ELSE 07132000
|
|
IF ELB = ")" OR ELB = "]" THEN 07133000
|
|
A ~ A - 1; 07134000
|
|
IF A > 0 THEN GO AGAIN; 07135000
|
|
IF A = 0 THEN BEGIN 07136000
|
|
IF I = D THEN GO AGAIN; 07137000
|
|
IF ELB ! "," THEN GO AGAIN; 07138000
|
|
END ELSE BEGIN 07139000
|
|
IF I ! D THEN 07140000
|
|
ERROR(88); 07141000
|
|
IF ELB ! ")" AND ELB ! "]" THEN 07142000
|
|
ERROR(89); 07143000
|
|
END; 07144000
|
|
PUT(LAD+I,HLD); 07145000
|
|
DECL[0].CTR ~ NWCT-3; 07146000
|
|
WRITIT(DECL,(NWCT+10).WRD,HLD,HOLD); 07147000
|
|
END LOADING PARAMS; 07148000
|
|
IF BOOL THEN BEGIN 07149000
|
|
UNSTACKIT(CL,DECL[*]); 07150000
|
|
NWCT ~ DECL[0].CTR + 3; 07151000
|
|
END; 07152000
|
|
RECALLIT; 07153000
|
|
D ~ GET(LAD); 07154000
|
|
I ~ D.REF & 1[TOREF]; 07155000
|
|
READIT(INST,(D.LIM-1).D2+1,I,MDECL); 07156000
|
|
READIT(CON,D.OFFSET,I,MDECL); 07157000
|
|
DEC ~ FALSE; 07158000
|
|
I ~ 0; 07159000
|
|
DCT ~ 3; 07160000
|
|
DO BEGIN 07161000
|
|
IF BOOLEAN(I~I+1) THEN BEGIN 07162000
|
|
CL ~ (A~INST[(I-1).D2]).PDC1; 07163000
|
|
DFN[255] ~ FLD ~ A.PDF1; 07164000
|
|
PRM ~ A.PDP1; 07165000
|
|
END ELSE BEGIN 07166000
|
|
CL ~ A.PDC2; 07167000
|
|
DFN[255] ~ FLD ~ A.PDF2; 07168000
|
|
PRM ~ A.PDP2; 07169000
|
|
END; 07170000
|
|
CASE CL OF BEGIN 07171000
|
|
; % NOT USED 07172000
|
|
DCT ~ MOVER(1,DFN,2046,DFN,DCT,0) + 1; % 1 LIT 07173000
|
|
DCT ~ MOVER(2,DFN,2046,DFN,DCT,0) + 1; % 2 LIT 07174000
|
|
DCT ~ MOVER(CON[FLD].CTR,CON,8|FLD+3, 07175000
|
|
DFN,DCT,0)+1; % SEQUENCE 07176000
|
|
END CASE STMT; 07177000
|
|
IF PRM ! 0 THEN 07178000
|
|
DCT ~ MOVER(HOLD[FLD~GET(LAD+PRM)].CTR, 07179000
|
|
HOLD,8|FLD+3,DFN,DCT,0)+1; 07180000
|
|
END UNTIL CL=0=PRM; 07181000
|
|
BOOL ~ LASTUSED > 0 OR RESCANTOG; 07182000
|
|
PSEUDOREAD(DFN,DCT,0); 07183000
|
|
RESCANTOG ~ BOOL; 07184000
|
|
NXTELB ~ NXTELB - 1; 07185000
|
|
GO EXIT; 07186000
|
|
END PARAMETRIC DEFINE; 07187000
|
|
END OUT OF DICT CASES; 07188000
|
|
GO SPCHR; 07189000
|
|
END; 07190000
|
|
IF ENDT THEN ENDT~NOT(SGN~IDENT[1]="3END " OR 07191000
|
|
SGN="4ELSE " OR SGN="5UNTIL"); 07192000
|
|
IF SGN~ W.CLASS=VOTHERS THEN 07193000
|
|
GO LOTHERS 07194000
|
|
ELSE 07195000
|
|
IF CMT OR ENDT THEN 07196000
|
|
GO FOUND 07197000
|
|
ELSE 07198000
|
|
IF SGN=VSTREAMRES AND W.SUB=1 THEN 07199000
|
|
BEGIN 07200000
|
|
SGN~ LABELV; 07201000
|
|
GO LDEC 07202000
|
|
END 07203000
|
|
ELSE 07204000
|
|
IF SGN!VMACRONAME OR EQVTOG THEN 07205000
|
|
GO FOUND; 07206000
|
|
IF CHAR!" " THEN 07207000
|
|
BC ~ -(BW~(TTEM~ BW|8+BC-1).WRD)|8+TTEM; 07208000
|
|
MACRON(A, W.ADINFO); 07209000
|
|
GO TO EXIT; 07210000
|
|
LOTHERS: IF SGN~ W.SUB!ENDV AND ENDT OR NOT EX EQV DEC OR CMT 07211000
|
|
THEN 07212000
|
|
GO FOUND; 07213000
|
|
IF SGN>MACROV THEN 07214000
|
|
IF SGN{MPOINTERV OR SGN=VALUEV THEN GO LDEC ELSE 07215000
|
|
IF SGN=BEGINV THEN BEGIN 07216000
|
|
STARTBLOCK(TRUE); 07217000
|
|
GO SPCHR; 07218000
|
|
END ELSE 07219000
|
|
IF SGN=ENDV THEN BEGIN 07220000
|
|
WRAPBLOCK(TRUE); 07221000
|
|
GO SPCHR; 07222000
|
|
END ELSE 07223000
|
|
IF SGN=COMMENTV THEN BEGIN 07224000
|
|
CMT ~ NOT ENDT; 07225000
|
|
GO EXIT; 07226000
|
|
END ELSE 07227000
|
|
GO FOUND; 07228000
|
|
LDEC: SHIFT(0, VNOTDEC, 0); 07229000
|
|
IF ENDT THEN 07230000
|
|
GO SPCHR; 07231000
|
|
SPC~ NXTELB; 07232000
|
|
LOOP: IF DEC THEN 07233000
|
|
GO SPCHR; 07234000
|
|
IF CHAR=" " THEN 07235000
|
|
BSCAN; 07236000
|
|
IF TYPE=4 AND NOT NOREAD THEN 07237000
|
|
BEGIN 07238000
|
|
READACARD; 07239000
|
|
TYPE~ CHAR~ " "; 07240000
|
|
IF SPC=NXTELB THEN 07241000
|
|
GO TO LOOP 07242000
|
|
END; 07243000
|
|
IF CHAR!" " THEN 07244000
|
|
IF SGN!INTEGERV OR NOT MACROTOG OR (SGN!SAVEV OR CHAR!")") THEN 07245000
|
|
IF CHAR!"(" THEN 07246000
|
|
GO E51 07247000
|
|
ELSE 07248000
|
|
IF SGN=BOOLEANV OR SGN=REALV THEN 07249000
|
|
GO SPCHR 07250000
|
|
ELSE 07251000
|
|
E51: BEGIN 07252000
|
|
ERROR(51); 07253000
|
|
GO SPCHR 07254000
|
|
END 07255000
|
|
ELSE 07256000
|
|
BC ~ -(BW~(TTEM~BW|8+BC-1).WRD) 07257000
|
|
|8+TTEM; 07258000
|
|
IF SPC!NXTELB THEN 07259000
|
|
IF ELBAT[SPC-BELB].CLASS=0 THEN 07260000
|
|
GO TO EXIT; 07261000
|
|
ELBAT[SPC-1-BELB] ~ (*)&W[CLUBCLUB]; 07262000
|
|
DECLARATION; 07263000
|
|
GO TO EXIT; 07264000
|
|
FOUND: SHIFT(W, 0, 0); 07265000
|
|
SPCHR: 07266000
|
|
TTEM ~ COUNT; 07267000
|
|
IF CHAR=":" THEN BEGIN 07268000
|
|
BSCAN; 07269000
|
|
IF CHAR="=" THEN CHAR~"~" ELSE 07270000
|
|
SHIFT(":",0,0); 07271000
|
|
END; 07272000
|
|
IF CHAR="%" THEN 07273000
|
|
GO PSEUDO; 07274000
|
|
IF CHAR=" " THEN 07275000
|
|
GO TO EXIT; 07276000
|
|
COUNT~ 0; 07277000
|
|
IF CHAR="." AND NOT ENDT THEN 07278000
|
|
GO TO FPART; 07279000
|
|
IF CHAR="@" THEN 07280000
|
|
GO TO EPART; 07281000
|
|
IF CHAR=""" THEN 07282000
|
|
BEGIN 07283000
|
|
IF NOT MACROTOG THEN 07284000
|
|
BEGIN 07285000
|
|
INSERT(3, IDENT[1], CHAR, 1); 07286000
|
|
COUNT~ 1; 07287000
|
|
END; 07288000
|
|
SSCAN; 07289000
|
|
IF NOT MACROTOG THEN 07290000
|
|
BEGIN 07291000
|
|
INSERT((COUNT+3).CHR,IDENT[(COUNT+ 07292000
|
|
11).WRD],CHAR,1); 07293000
|
|
COUNT~ COUNT+1; 07294000
|
|
END; 07295000
|
|
IDENT[1].CTR ~ COUNT; 07296000
|
|
SHIFT(0, VSTRING, 0); 07297000
|
|
GO TO EXIT; 07298000
|
|
END; 07299000
|
|
IF CHAR="<" THEN 07300000
|
|
BEGIN 07301000
|
|
SPC~ CHAR; 07302000
|
|
TYPE~ 5; 07303000
|
|
ASCAN; 07304000
|
|
IF TYPE=1 AND CHAR=" " THEN 07305000
|
|
BSCAN; 07306000
|
|
IF CHAR!">" THEN 07307000
|
|
BEGIN 07308000
|
|
FMTTOG~FMTTOG OR (SPC~ELBAT[NXTELB 07309000
|
|
-BELB-1]).CLASS=0 AND (SPC="(" OR 07310000
|
|
SPC=","); 07311000
|
|
SHIFT("<", 0, 0); 07312000
|
|
IF COUNT=0 THEN 07313000
|
|
GO SPCHR; 07314000
|
|
SHAFT(IDENT[1], COUNT); 07315000
|
|
IDENT[1].CTR ~ COUNT~COUNT-1; 07316000
|
|
GO IPART; 07317000
|
|
END; 07318000
|
|
INSERT((COUNT+3).CHR,IDENT[(COUNT+11).WRD], 07319000
|
|
CHAR&SPC[TOC6],I~REAL(COUNT=0)+1); 07320000
|
|
COUNT~ COUNT+I; 07321000
|
|
IF MACROTOG THEN 07322000
|
|
BEGIN 07323000
|
|
CONVERT(IDENT[1],COUNT~COUNT-2); 07324000
|
|
COUNT~(COUNT+1).D2; 07325000
|
|
END; 07326000
|
|
IDENT[1].CTR ~ COUNT; 07327000
|
|
SHIFT(0,IF MACROTOG THEN VSTRING ELSE 07328000
|
|
VOCTAL,0); 07329000
|
|
GO EXIT; 07330000
|
|
END; 07331000
|
|
SHIFT(CHAR, 0, 0); 07332000
|
|
GO EXIT; 07333000
|
|
PSEUDO: IF NOREAD THEN 07334000
|
|
SHIFT(0, 63, 0) 07335000
|
|
ELSE 07336000
|
|
READACARD; 07337000
|
|
EXIT: 07338000
|
|
IF FMTTOG AND NOT DEC THEN DECLARATION; 07339000
|
|
END; 07340000
|
|
TABLE~(ELB~ ELBAT[P-BELB]).CLASS; 07341000
|
|
COUNT ~ TTEM; 07342000
|
|
IF P < NXTELB THEN 07343000
|
|
IF A~ELB.CLASS ! 0 AND MACROTOG THEN BEGIN 07344000
|
|
MOVE(((TANK[ELB].CTR+10).WRD).IC,TANK[ELB],IDENT[1]); 07345000
|
|
IF A=VSTRINGNAME OR A=VMFIELDID THEN % RESET LAD 07346000
|
|
A ~ INDICT; 07347000
|
|
END; 07348000
|
|
$ INCLUDE 07351001, IF DEBUGGING; 07348999
|
|
IF MONITER AND PRINT THEN 07349000
|
|
WRITE(PRINTER,MON1,"ELBAT",P,"=",ELB, 07350000
|
|
ELB.CLASS,ELB.SUB,ELB.ADINFO); 07351000
|
|
END TABLE; 07352000
|
|
COMMENT GETSPACE IS RESPONSIBLE FOR ASSIGNING PROPER 07800000
|
|
MACRO ADDRESSES TO MACRO VARIABLES. ALLOCATION OVERFLOWS ARE 07801000
|
|
CAUGHT. BASE VALUES ARE SET UP IN PROCEDURE "MACRO"; 07802000
|
|
INTEGER PROCEDURE GETSPACE(OWNT,INT,SZ); VALUE OWNT,INT,SZ; 07803000
|
|
BOOLEAN OWNT; INTEGER INT,SZ; 07804000
|
|
BEGIN 07805000
|
|
LABEL LAP,GAP; 07806000
|
|
CASE 2|INT + REAL(OWNT) OF BEGIN 07807000
|
|
BEGIN 07808000
|
|
IF SZ<0 THEN LACT ~ (LACT+4).D4 | 4 - 1; 07809000
|
|
IF GETSPACE~LACT~LACT+1 > LALFMAX THEN BEGIN 07810000
|
|
ERROR(92); % TOO MANY LOCAL VARIABLES 07811000
|
|
GETSPACE ~ LACT ~ LALFMAX; 07812000
|
|
END; 07813000
|
|
SETINUSE(SPACEMAP[LACT.D32],LACT.M32); 07814000
|
|
IF SZ < 0 THEN LACT ~ LACT + 3 ELSE 07815000
|
|
IF SZ~(SZ+10).D512 ! 0 THEN LACT ~ LACT + SZ; 07816000
|
|
END; 07817000
|
|
BEGIN 07818000
|
|
IF SZ<0 THEN GLAT ~ (GLAT+4).D4 | 4 - 1; 07819000
|
|
IF GETSPACE~GLAT~GLAT+1 > GALFMAX THEN BEGIN 07820000
|
|
ERROR(93); % TOO MANY GLOBAL VARIABLES 07821000
|
|
GETSPACE ~ GLAT ~ GALFMAX; 07822000
|
|
END; 07823000
|
|
SETINUSE(SPACEMAP[(GLAT-GALFBAS).D32+8],GLAT.M32); 07824000
|
|
IF SZ < 0 THEN GLAT ~ GLAT + 3 ELSE 07825000
|
|
IF SZ~(SZ+10).D512 ! 0 THEN GLAT ~ GLAT + SZ; 07826000
|
|
END; 07827000
|
|
IF GETSPACE~LICT~LICT+1 > LINTMAX THEN BEGIN 07828000
|
|
ERROR(92); 07829000
|
|
GETSPACE ~ LINTMAX; 07830000
|
|
END; 07831000
|
|
IF GETSPACE~GLIT~GLIT+1 > GINTMAX THEN BEGIN 07832000
|
|
ERROR(93); 07833000
|
|
GETSPACE ~ GINTMAX; 07834000
|
|
END; 07835000
|
|
LAP: IF GETSPACE~LOCT~LOCT+1 > LPTRMAX THEN BEGIN 07836000
|
|
ERROR(92); 07837000
|
|
GETSPACE ~ LPTRMAX; 07838000
|
|
END; 07839000
|
|
GAP: IF GETSPACE~GLOT~GLOT+1 > GPTRMAX THEN BEGIN 07840000
|
|
ERROR(93); 07841000
|
|
GETSPACE ~ GPTRMAX; 07842000
|
|
END; 07843000
|
|
GO LAP; % LOCAL INTEGER MPOINTER 07844000
|
|
GO GAP; % GLOBAL INTEGER MPOINTER 07845000
|
|
; % LOCAL DICTIONARY ALPHA MSTRING 07846000
|
|
; % GLOBAL DICTIONARY ALPHA MSTRING 07847000
|
|
; % LOCAL DICTIONARY INTEGER MSTRING 07848000
|
|
; % GLOBAL DICTIONARY INTEGER MSTRING 07849000
|
|
GO LAP; % LOCAL DICTIONARY MPOINTER 07850000
|
|
GO GAP; % GLOBAL DICTIONARY MPOINTER 07851000
|
|
END GETSPACE CASE; 07852000
|
|
END GETSPACE; 07853000
|
|
$ INCLUDE 07968001, IF INTERMEDIATE; 07899999
|
|
07900000
|
|
COMMENT COMPILEFIELD COMPILES B-5500 CODE INTO CODRAY FOR 07901000
|
|
INTEGER MFIELDS & RETURNS AN MFIELD POINTER GIVING THE CODE 07902000
|
|
SEGMENT & RELATIVE ADDRESS OF THE CODE. TWO-WAY CODE IS GIVEN: 07903000
|
|
CODE TO ISOLATE THE FIELD & CODE TO PACK THE FIELD. OPTIMAL CODE 07904000
|
|
IS PRODUCED FOR F&C-FIELDS AND RIGHTMOST BITS UP TO 10; 07905000
|
|
REAL PROCEDURE COMPILEFIELD(A,B); VALUE A,B; INTEGER A,B; 07906000
|
|
BEGIN 07907000
|
|
INTEGER D,D1,D2; 07908000
|
|
ARRAY C[0:3]; 07909000
|
|
LABEL ISO,CATIT,NORM,EXIT,FINAL; 07910000
|
|
IF NXTCODE.CROW ! NOWCODE THEN 07911000
|
|
READ(ISOCODE[NOWCODE~NXTCODE.CROW],120,CODRAY[*]); 07912000
|
|
FILL C[*] WITH 07913000
|
|
OCT0055005540066231, % NOP,NOP,F-1,LFW 07914000
|
|
OCT0136005500450235, % R27,DIA 0,ISO 0,RTN 07915000
|
|
OCT0136014000550061, % R27,R30,DIA 0,DIB 0 07916000
|
|
OCT0055006502350055; % NOP,TRB 0,RTN,NOP 07917000
|
|
IF B=15 THEN BEGIN 07918000
|
|
IF A=33 THEN BEGIN 07919000
|
|
C[1].[12:24] ~ REAL(<141>); % 0,INX 07920000
|
|
GO CATIT; 07921000
|
|
END ELSE 07922000
|
|
IF A=18 THEN BEGIN 07923000
|
|
C[1].[12:24] ~ REAL(<7425>); % 0,CTF 07924000
|
|
GO CATIT; 07925000
|
|
END; 07926000
|
|
GO ISO; 07927000
|
|
END; 07928000
|
|
IF B{10 AND A+B=48 THEN BEGIN % RIGHT END AND 07929000
|
|
D ~ 2*B - 1; 07930000
|
|
C[1] ~ (*) & D[12:38:10] & REAL(<415>)[24:36:12]; 07931000
|
|
GO CATIT; 07932000
|
|
END; 07933000
|
|
ISO: IF (D~(48-A-B)MOD 6)+B { 39 THEN BEGIN 07934000
|
|
D2 ~ (D1~A DIV 6)|8 + (D2~A MOD 6); 07935000
|
|
D1 ~ ((A+B-1)DIV 6-D1+1)|8 + D; 07936000
|
|
C[1] ~ (*)&D2[TOC2]&D1[TOC4]; % DIA, ISO VARIANTS 07937000
|
|
GO CATIT; 07938000
|
|
END ELSE BEGIN 07939000
|
|
ERROR(95); % INTEGER MFIELDS MUST BE { 39 BITS 07940000
|
|
GO FINAL; 07941000
|
|
END; 07942000
|
|
CATIT: D ~ 48-B; 07943000
|
|
IF B = 15 THEN BEGIN 07944000
|
|
IF A = 33 THEN D1 ~ 512 ELSE 07945000
|
|
IF A ! 18 THEN GO NORM; 07946000
|
|
IF D = 18 THEN D1 ~ D1 + 256 ELSE 07947000
|
|
IF D ! 33 THEN GO NORM; 07948000
|
|
C[2] ~ (*) & (D1+197)[24:38:10] % FTC,FTF,CTF,CTC 07949000
|
|
& REAL(<235>)[36:36:12]; % RTN 07950000
|
|
GO EXIT; 07951000
|
|
END; 07952000
|
|
NORM: 07953000
|
|
D1 ~ (A DIV 6)|8 + (A~A MOD 6); 07954000
|
|
D2 ~ (D DIV 6)|8 + (D~D MOD 6); 07955000
|
|
C[2] ~ (*) & D1[TOC4] & D2[TOC6]; % DIA & DIB VARIANTS 07956000
|
|
C[3] ~ (*) & B[TOC2]; % TRB VARIANT 07957000
|
|
EXIT: 07958000
|
|
MOVE(3,C[1],CODRAY[NXTCODE.CRAD]); 07959000
|
|
COMPILEFIELD ~ NXTCODE & 3[1:46:2]; 07960000
|
|
WRITE(ISOCODE[NOWCODE],120,CODRAY[*]); 07961000
|
|
NXTCODE.CRAD ~ NXTCODE.CRAD + 3; 07962000
|
|
IF NXTCODE.CRAD } 117 THEN BEGIN 07963000
|
|
NXTCODE ~ 0 & (NOWCODE+1)[TOCROW]; 07964000
|
|
WRITE(ISOCODE[NOWCODE+1],1,C[*]); 07965000
|
|
END; 07966000
|
|
FINAL: 07967000
|
|
END COMPILEFIELD; 07968000
|
|
COMMENT DECLARATION HANDLES ALL DECLARATORS, EVEN FUNNY 08000000
|
|
IN-LINE FORMATS. ENTRIES ARE NORMALLY PACKED INTO DECL AND THEN 08001000
|
|
STASHED INTO MDECL FOR LATER RECALL. FUNNY ID IS RETURNED FOR 08002000
|
|
SCANNING PURPOSES. MACRO DECLARATIONS CALL THE COMPILER("MACRO") 08003000
|
|
TO GENERATE CODE. ASSOCIATED MVARIABLES ARE ALSO PROCESSED HERE; 08004000
|
|
PROCEDURE DECLARATION; 08005000
|
|
BEGIN 08006000
|
|
INTEGER S,Z,SGN,SNG,TDECP; 08007000
|
|
REAL A,TEMPA; 08007500
|
|
BOOLEAN MTOG,MCTOG,OWT,PRCTOG,STRTOG,SWIT,MFLDTOG; 08008000
|
|
$ INCLUDE 08022001, IF DEBUGGING; 08008999
|
|
FORMAT SS(I6"-"A1); 08009000
|
|
PROCEDURE TRACER(T); VALUE T; BOOLEAN T; 08010000
|
|
BEGIN 08011000
|
|
ARRAY ERB[0:14]; 08011999
|
|
STREAM PROCEDURE TRACEIT(D,T,I); VALUE I,T; 08012000
|
|
BEGIN 08013000
|
|
DI~D; DS~8 LIT " "; SI~D; DS~14 WDS; DI~D; 08014000
|
|
DS~LIT "."; I(DS~LIT "."); 08015000
|
|
T(DS~ 6 LIT "BEGIN ";JUMP OUT TO X); 08016000
|
|
DS~ 6 LIT "END "; 08017000
|
|
X: DS~ 11 LIT "DECLARATION"; 08018000
|
|
END TRACEIT; 08019000
|
|
TRACEIT(ERB,T,INDENT); 08020000
|
|
WRITE(PRINTER,15,ERB[*]); 08021000
|
|
END; 08022000
|
|
% 08023000
|
|
ALPHA STREAM PROCEDURE BLOCKNAME(BNO); VALUE BNO; BEGIN 08029000
|
|
SI~LOC BNO; DI~LOC BLOCKNAME; DI~DI+2; 08030000
|
|
DS~2 LIT "5?"; DS~4 DEC; 08031000
|
|
END BLOCKNAME; 08032000
|
|
PROCEDURE STARTDEC(TDECP); INTEGER TDECP; BEGIN LABEL L; L: 08033000
|
|
DEC ~ TRUE; INDENT ~ INDENT + 3; 08034000
|
|
$ INCLUDE 08034051, IF DEBUGGING; 08034049
|
|
IF TRACE THEN TRACER(TRUE); 08034050
|
|
SAVEIT; 08035000
|
|
NWCT ~ 3; 08036000
|
|
TNWCT ~ 0; 08037000
|
|
TDECP ~ DECP; 08038000
|
|
DECL[0] ~ " "; 08039000
|
|
BLANK(DECL[1],3,62); 08040000
|
|
IF FMTTOG THEN BEGIN 08041000
|
|
STEPI; 08042000
|
|
DO BEGIN PACKET; STEPI END UNTIL TYPE=0 AND ELB=">"; 08043000
|
|
FMTTOG ~ <3>; 08043050
|
|
END; 08044000
|
|
END; 08045000
|
|
LABEL LOWN,RES,REP,BRAIL,MON,SWTCH,STRM,PROC,STR,FFL,FMTL, 08046000
|
|
DEFA,MAC,TEST,VAL,ENDEC,EXIT; 08047000
|
|
$ INCLUDE 08047051, IF INTERMEDIATE; 08047049
|
|
LABEL MFLD; 08047050
|
|
$ INCLUDE 08047101, IF ADVANCED; 08047099
|
|
LABEL DCT,MPTR; 08047100
|
|
SWITCH SW ~ LOWN,RES,BRAIL,BRAIL,BRAIL,BRAIL,BRAIL,MON,MON, 08048000
|
|
RES,RES,SWTCH,STRM,PROC,FFL,STR,FFL,FFL,FMTL,MAC,DEFA 08049000
|
|
$ INCLUDE 08049051, IF INTERMEDIATE; 08049049
|
|
,MFLD 08049050
|
|
$ INCLUDE 08049101, IF ADVANCED; 08049099
|
|
,DCT,MPTR 08049100
|
|
; 08049150
|
|
% 08050000
|
|
STARTDEC(TDECP); 08051000
|
|
IF FMTTOG THEN GO ENDEC ELSE GO RES; 08052000
|
|
REP: PACKET; 08053000
|
|
RES: IF STEPI<VTORF OR TYPE>VOTHERS THEN 08054000
|
|
ERROR(2); 08055000
|
|
IF TYPE=VSTRINGNAME AND ELB.BLKLVL}MCBL THEN BEGIN 08056000
|
|
ERROR(59); % DUP STRING DECL 08057000
|
|
STEPI; 08058000
|
|
GO TEST; 08059000
|
|
END; 08060000
|
|
SGN~ ELB.SUB; 08061000
|
|
PACKET; 08062000
|
|
IF TYPE=VOTHERS AND NOT MCTOG THEN 08063000
|
|
IF SGN=VALUEV THEN 08064000
|
|
GO TO VAL 08065000
|
|
ELSE 08066000
|
|
GO TO SW[SGN]; 08067000
|
|
IF (MTOG OR SPCT) AND NOT(STRTOG OR MCTOG OR MFLDTOG) THEN 08068000
|
|
GO TO TEST; 08069000
|
|
IF ELB.BLKLVL}BLVL AND STRTOG THEN 08070000
|
|
ERROR(3); 08071000
|
|
IF PRCTOG THEN 08072000
|
|
BEGIN 08073000
|
|
A~ ADDICT(VALGOLIDENT, PROCEDUREV); 08074000
|
|
IF INDEXING THEN BEGIN 08075000
|
|
MOVE(8,DICT[A.IR,A.IC],INDEX(0)); 08076000
|
|
MOVE(1,LINKS[0],INDEX(9)); 08077000
|
|
WRITE(INDEX); 08078000
|
|
INXR ~ INXR + 1; 08079000
|
|
END; 08080000
|
|
SPCT~ TRUE; 08081000
|
|
ESCAN; 08082000
|
|
STARTBLOCK(FALSE); 08083000
|
|
GO ENDEC; 08084000
|
|
END; 08085000
|
|
IF MCTOG THEN 08086000
|
|
BEGIN 08087000
|
|
ARRAY B[0:20]; 08088000
|
|
INTEGER D,E,F; 08089000
|
|
LABEL ED,XX,E108; 08090000
|
|
MOVE(D~(IDENT[1].CTR+10).WRD,IDENT[1],B[1]); 08091000
|
|
STEPI; 08091100
|
|
$ INCLUDE 08110001, IF ADVANCED; 08091999
|
|
IF TYPE=VSPECIAL AND ELB="=" THEN 08092000
|
|
BEGIN 08093000
|
|
STEPI; 08094000
|
|
IF E~(IDENT[1].CTR+10).WRD>20-D THEN 08095000
|
|
BEGIN 08096000
|
|
ERROR(53); 08097000
|
|
GO ED; 08098000
|
|
END; 08099000
|
|
MOVE(E, IDENT[1], B[D+1]); 08100000
|
|
D~ D+E+1; 08101000
|
|
B[0]~ D; 08102000
|
|
MOVE(D, B, IDENT); 08103000
|
|
A~ ADDICT(VOTHERS, REPLACEV); 08104000
|
|
PUT(A,GET(A)&(A+D-E)[TOADINFO]); 08105000
|
|
ED: 08106000
|
|
IF STEPI!0 AND ELB!";" THEN 08107000
|
|
ERROR(54); 08108000
|
|
GO ENDEC; 08109000
|
|
END; 08110000
|
|
MOVE(D, B[1], IDENT[1]); 08111000
|
|
A~ ADDICT(VMACRONAME,Z); 08112000
|
|
$ INCLUDE 08131001, IF INTERMEDIATE; 08112999
|
|
IF TYPE=VOTHERS AND ELB.SUB=EQVV THEN BEGIN 08113000
|
|
EQVTOG ~ TRUE; 08114000
|
|
IF STEPI!VMACRONAME OR (LISTV! 08115000
|
|
ELB.SUB!EQVV) THEN BEGIN 08116000
|
|
ERROR(74); 08117000
|
|
PUT(A,GET(A)&VNOTDEC[TOCLSUB]); 08118000
|
|
END 08119000
|
|
ELSE 08120000
|
|
PUT(A,GET(A)&LAD[TOADINFO]&EQVV[TOSUB]); 08121000
|
|
EQVTOG ~ FALSE; 08122000
|
|
IF STEPI!0 OR ELB!";" THEN 08123000
|
|
ERROR(54); 08124000
|
|
IF INDEXING THEN BEGIN 08125000
|
|
MOVE(1,LINKS[0],B[9]); 08126000
|
|
E ~ LAD; 08127000
|
|
GO XX; 08128000
|
|
END; 08129000
|
|
GO ENDEC; 08130000
|
|
END CHEAP MACRO; 08131000
|
|
NEXTDICT~ NEXTDICT+2; 08132000
|
|
DICT[NEXTDICT.IR,NEXTDICT.IC] ~ 08133000
|
|
DICT[(D~NEXTDICT+1).IR,D.IC] ~ 0; 08134000
|
|
$ INCLUDE 08134201, IF ADVANCED; 08134019
|
|
IF TYPE=VOTHERS AND ELB.SUB=IFV THEN BEGIN 08134020
|
|
IF STEPI!VNUMBER OR ELB.SUB!INTEGERV THEN BEGIN 08134040
|
|
E108: ERROR(108); 08134060
|
|
GO TEST; 08134100
|
|
END; 08134120
|
|
IF F~CONSTANTCONVERT(IDENT[1],COUNT)+1>36 THEN 08134140
|
|
GO E108; 08134160
|
|
STEPI; 08134180
|
|
END CONDITIONAL MACRO; 08134200
|
|
IF TYPE!0 OR ELB!";" THEN 08135000
|
|
ERROR(4); 08136000
|
|
IF INDEXING THEN MOVE(1,LINKS[0],B[9]); 08137000
|
|
MACRO(E ~ NEXTDICT-2); 08138000
|
|
IF F > 0 THEN 08138050
|
|
DICT[E.IR,E.IC] ~ (*) & F[TOMCIF]; 08138100
|
|
IF INDEXING THEN BEGIN 08139000
|
|
XX: MOVE(7,DICT[A.IR,A.IC],B[0]); 08140000
|
|
B[7] ~ DICT[E.IR,E.IC]; 08141000
|
|
B[8] ~ DICT[(E~E+1).IR,E.IC]; 08142000
|
|
WRITE(INDEX,10,B[*]); 08143000
|
|
INXR ~ INXR + 1; 08144000
|
|
END; 08145000
|
|
GO ENDEC; 08146000
|
|
END; 08147000
|
|
IF STRTOG THEN 08148000
|
|
BEGIN LABEL PTRP,TSMI; 08149000
|
|
A~ ADDICT(VSTRINGNAME, SNG); 08151000
|
|
IF TEMPA.LIM = 0 THEN BEGIN 08152000
|
|
TEMPA ~ NEXTDICT & NEXTDICT[TOREF]; 08153000
|
|
END ELSE BEGIN 08154000
|
|
PUT(TEMPA,NEXTDICT&GET(TEMPA)[TOXF]); 08155000
|
|
TEMPA.LIM ~ NEXTDICT; 08156000
|
|
END; 08157000
|
|
NEXTDICT ~ NEXTDICT + 1; 08158000
|
|
PUT(TEMPA,A); 08159000
|
|
DICT[(NEXTDICT+1).IR,(NEXTDICT+1).IC] ~ 0; 08160000
|
|
IF STEPI!0 OR ELB!"[" THEN 08161000
|
|
BEGIN 08162000
|
|
T ~ T - 1; 08163000
|
|
IF ELB = ";" THEN 08164000
|
|
IF BOOLEAN(SNG).[46:1] THEN 08165000
|
|
GO PTRP 08166000
|
|
ELSE 08167000
|
|
ERROR(80); 08168000
|
|
GO TSMI; 08169000
|
|
END; 08170000
|
|
IF STEPI=0 AND ELB="*" THEN 08171000
|
|
Z ~ SNG.[47:1]|9-1 08172000
|
|
ELSE 08173000
|
|
IF TYPE = VNUMBER THEN BEGIN 08174000
|
|
Z ~ CONSTANTCONVERT(IDENT[1],COUNT); 08175000
|
|
IF Z>8 AND BOOLEAN(SNG) THEN 08176000
|
|
ERROR(5) 08177000
|
|
ELSE 08178000
|
|
IF Z>MSMAX AND NOT BOOLEAN(SNG) THEN 08179000
|
|
ERROR(5); 08180000
|
|
END ELSE 08181000
|
|
ERROR(5); 08182000
|
|
IF STEPI!0 OR ELB!"]" THEN BEGIN 08183000
|
|
ERROR(6); 08184000
|
|
GO TEST; 08185000
|
|
END; 08186000
|
|
$ INCLUDE 08192001, IF ADVANCED; 08186999
|
|
IF STEPI=0 AND ELB="=" THEN BEGIN % OFFSET 08187000
|
|
IF STEPI = VNUMBER THEN 08188000
|
|
Z ~ Z & CONSTANTCONVERT(IDENT[1],COUNT) 08189000
|
|
[TOOFFSET]; 08190000
|
|
END ELSE 08191000
|
|
T ~ T - 1; 08192000
|
|
PTRP: PUT(TEMPA,0&GET(TEMPA)[TOXF]); 08193000
|
|
TEMPA ~ TEMPA.REF; 08194000
|
|
DO BEGIN 08195000
|
|
TEMPA ~ GET(A~TEMPA); 08196000
|
|
PUT(A,(Z+REAL(SNG=0))&S~GETSPACE(OWT.[47:1],SNG, 08197000
|
|
Z)[TOREF]); 08198000
|
|
$ INCLUDE 08200001, IF DEBUGGING; 08198999
|
|
IF S ! 0 AND SRT AND PRINT THEN 08199000
|
|
WRITE(PRINTER,SS,S,IF OWT THEN "G" ELSE "L"); 08200000
|
|
IF INDEXING THEN BEGIN 08201000
|
|
MOVE(8,DICT[TEMPA.XIR,TEMPA.XIC],DECL); 08202000
|
|
A ~ DECL[0]; 08202100
|
|
MOVE(1,DICT[A.IR,A.IC],DECL[8]); 08203000
|
|
MOVE(1,LINKS,DECL[9]); 08204000
|
|
WRITE(INDEX,10,DECL[*]); 08205000
|
|
INXR ~ INXR + 1; 08206000
|
|
END; 08207000
|
|
END UNTIL TEMPA.LIM = 0; 08208000
|
|
IF BOOLEAN(SNG).[46:1] THEN GO ENDEC; 08209000
|
|
TSMI: IF STEPI ! VSPECIAL OR "," ! ELB ! ";" THEN BEGIN 08210000
|
|
ERROR(54); 08210500
|
|
GO ENDEC; 08211000
|
|
END; 08211500
|
|
IF ELB = "," THEN GO REP; 08212000
|
|
IF ELB = ";" AND BOOLEAN(SNG).[46:1] THEN GO PTRP; 08212500
|
|
GO ENDEC; 08213000
|
|
END; 08213500
|
|
$ INCLUDE 08257001, IF INTERMEDIATE; 08213999
|
|
IF MFLDTOG THEN BEGIN 08214000
|
|
LABEL MER,MER2,RETRY; 08215000
|
|
INTEGER S1,S2; 08216000
|
|
A ~ ADDICT(VMFIELDID,SNG); 08217000
|
|
NEXTDICT ~ NEXTDICT + 1; 08218000
|
|
IF STEPI ! 0 OR ELB ! "=" THEN 08219000
|
|
ERROR(61); 08220000
|
|
RETRY: IF STEPI ! 0 OR ELB ! "[" THEN BEGIN 08221000
|
|
IF TYPE = VSTRINGNAME THEN BEGIN 08222000
|
|
IF 4{(S1~ELB.SUB){5 THEN BEGIN % DICT OFFSET 08223000
|
|
S2 ~ GET(LAD).OFFSET; 08224000
|
|
IF NOT(BOOLEAN(S1)EQV BOOLEAN(SNG)) THEN 08225000
|
|
ERROR(101); % MODE DISAGREEMENT 08226000
|
|
END; 08227000
|
|
IF STEPI!0 OR ELB!"." THEN 08228000
|
|
ERROR(102); % MISSING "." IN OFFSET 08229000
|
|
GO RETRY; 08230000
|
|
END ELSE BEGIN 08231000
|
|
MER: ERROR(96); % MISSING "[:]"IN DECLARATION 08232000
|
|
GO TEST; 08233000
|
|
END; 08234000
|
|
END; 08235000
|
|
IF STEPI ! VNUMBER THEN GO MER2; 08236000
|
|
S ~ CONSTANTCONVERT(IDENT[1],COUNT); 08237000
|
|
IF STEPI ! 0 OR ELB ! ":" THEN GO MER; 08238000
|
|
IF STEPI ! VNUMBER THEN GO MER2; 08239000
|
|
Z ~ CONSTANTCONVERT(IDENT[1],COUNT); 08240000
|
|
IF BOOLEAN(SNG) THEN BEGIN 08241000
|
|
IF NOT(1{S{47 OR 1{Z{47 OR S+Z{48) THEN BEGIN 08242000
|
|
MER2: ERROR(97); % INVALID MFIELD DESCRIPTION 08243000
|
|
GO TEST; 08244000
|
|
END; 08245000
|
|
PUT(NEXTDICT-1,COMPILEFIELD(S,Z)&S2[TOMFOFF]); 08246000
|
|
END ELSE 08247000
|
|
PUT(NEXTDICT-1,-Z&S[TOMFBGN]&S2[TOMFOFF]); 08248000
|
|
IF INDEXING THEN BEGIN 08249000
|
|
MOVE(8,DICT[A.IR,A.IC],INDEX(0)); 08250000
|
|
MOVE(1,DICT[(A~NEXTDICT-1).IR,A.IC],INDEX(8)); 08251000
|
|
MOVE(1,LINKS[0],INDEX(9)); 08252000
|
|
WRITE(INDEX); 08253000
|
|
INXR ~ INXR + 1; 08254000
|
|
END; 08255000
|
|
GO TEST; 08256000
|
|
END; 08257000
|
|
A ~ IF Z=VNOTDEC THEN ADDICT(VNOTDEC,0) ELSE 08258000
|
|
ADDICT(VALGOLIDENT,Z); 08259000
|
|
TEST: ESCAN; 08260000
|
|
IF ELB!";" AND(ELB!"," OR SWIT) THEN 08261000
|
|
BEGIN 08262000
|
|
PACKET; 08263000
|
|
GO TO TEST 08264000
|
|
END; 08265000
|
|
IF ELB="," THEN 08266000
|
|
GO TO REP; 08267000
|
|
GO TO ENDEC; 08270000
|
|
LOWN: OWT~ TRUE; 08271000
|
|
GO TO RES; 08272000
|
|
BRAIL: 08273000
|
|
SNG ~ REAL(SGN=INTEGERV) + SNG; 08274000
|
|
GO TO RES; 08275000
|
|
SWTCH: SWIT~ TRUE; 08276000
|
|
Z~ SGN; 08277000
|
|
GO TO RES; 08278000
|
|
STRM: STREAMTOG~ TRUE; 08279000
|
|
GO TO RES; 08280000
|
|
PROC: PROCTOG~ PRCTOG~ TRUE; 08281000
|
|
GO TO RES; 08282000
|
|
MAC: IF MACROTOG THEN 08283000
|
|
BEGIN LABEL L; L: 08284000
|
|
ERROR(57); DO STEPI UNTIL TYPE=0 AND ELB=";"; STEPI; 08285000
|
|
IF TYPE=VOTHERS AND ELB.SUB=BEGINV THEN 08286000
|
|
BEGIN 08287000
|
|
Z~ 1; 08288000
|
|
DO IF STEPI= VOTHERS THEN 08289000
|
|
IF ELB.SUB=BEGINV THEN Z~Z+1 ELSE 08290000
|
|
IF ELB.SUB=ENDV THEN Z~Z-1 08291000
|
|
UNTIL TYPE=0 AND ELB=";" AND Z=0; 08292000
|
|
END; 08293000
|
|
RECALLIT; NXTELB~ T; 08294000
|
|
GO EXIT; 08295000
|
|
END; 08296000
|
|
MCTOG ~ TRUE; 08297000
|
|
GO TO RES; 08298000
|
|
MON: MTOG~ TRUE; 08299000
|
|
GO TO RES; 08300000
|
|
STR: STRTOG~ TRUE; 08301000
|
|
OWT~ OWT OR NOT MACROTOG; 08302000
|
|
GO TO RES; 08303000
|
|
VAL: Z~ VNOTDEC; 08304000
|
|
GO TO RES; 08305000
|
|
FMTL: FMTTOG ~ TRUE; 08306000
|
|
FFL: Z~ SGN; 08307000
|
|
GO TO RES; 08308000
|
|
$ INCLUDE 08310001, IF INTERMEDIATE; 08308999
|
|
MFLD: MFLDTOG ~ TRUE; 08309000
|
|
GO RES; 08310000
|
|
$ INCLUDE 08316001, IF ADVANCED; 08310999
|
|
MPTR: STRTOG ~ TRUE; 08311000
|
|
OWT ~ OWT OR NOT MACROTOG; 08312000
|
|
SNG ~ SNG + 2; 08313000
|
|
GO RES; 08314000
|
|
DCT: SNG ~ 4; 08315000
|
|
GO RES; 08316000
|
|
DEFA: BEGIN 08317000
|
|
COMMENT DEFINES, BOTH PARAMETRIC AND REGULAR ARE PROCESSED 08318000
|
|
HERE. PACK PUTS TOGETHER RECONSTRUCTION INFO. SUBCLASS MEANS: 08319000
|
|
0 = SIMPLE IDENTIFIER..REPLACE & RE-SEARCH DICT 08320000
|
|
1 = SEVERAL ELEMENTS..PSEUDOREAD 08321000
|
|
2 = SINGLE SPECIAL CHR..SET CHAR 08322000
|
|
3 = SEVERAL ELEMENTS, SPCHR LAST..PSEUDOREAD 08323000
|
|
>4 = PARAMETRIC WITH (N-4) PARAMS..INTERPRET&RECONSTRUCT 08324000
|
|
CASES 0->3 ARE HANDLED DIRECTLY BY INDICT. PARAMETRICS MUST BE 08325000
|
|
HANDLED BY TABLE ITSELF DUE TO RECURSION; 08326000
|
|
PROCEDURE PACK(H,HX,CON,CX,CL,B); VALUE HX,CL,B; 08327000
|
|
ARRAY H,CON[0]; 08328000
|
|
REAL CL,CX,HX; 08329000
|
|
BOOLEAN B; 08330000
|
|
BEGIN 08331000
|
|
INTEGER DCLASS,FIELD; 08332000
|
|
IF NWCT > 5 THEN BEGIN 08333000
|
|
DCLASS ~ 3; 08334000
|
|
IF CX+NWCT~NWCT.WRD+1 > 127 THEN BEGIN 08335000
|
|
OVRFL; 08336000
|
|
CX ~ 0; 08337000
|
|
END; 08338000
|
|
FIELD ~ CX; 08339000
|
|
MOVE(NWCT,DECL,CON[CX]); 08340000
|
|
CX ~ CX + NWCT; 08341000
|
|
DECL[0] ~ " "; 08342000
|
|
BLANK(DECL[1],NWCT.C6,NWCT); 08343000
|
|
END ELSE BEGIN 08344000
|
|
DCLASS ~ NWCT - 3; 08345000
|
|
FIELD ~ DECL[0].C34; 08346000
|
|
DECL[0] ~ " "; 08347000
|
|
END; 08348000
|
|
NWCT ~ 3; 08349000
|
|
IF B THEN 08350000
|
|
H[HX] ~ 0&DCLASS[TOPDC1]&CL[TOPDP1]& 08351000
|
|
FIELD[TOPDF1] 08352000
|
|
ELSE 08353000
|
|
H[HX] ~ (*)&DCLASS[TOPDC2]&CL[TOPDP2]& 08354000
|
|
FIELD[TOPDF2]; 08355000
|
|
END PACK; 08356000
|
|
LABEL DEF,MORE,NEXTPARA; 08357000
|
|
BOOLEAN PARATYPE; 08358000
|
|
ARRAY HOLD,CON[0:127]; 08359000
|
|
INTEGER PNO,DNO,CX; 08360000
|
|
REAL SPC,DC,A; 08361000
|
|
DEF: IF STEPI<VTORF OR TYPE>VOTHERS THEN 08362000
|
|
ERROR(2); 08363000
|
|
A ~ ADDICT(VDEFINEDID,0); 08364000
|
|
IF STEPI=0 AND ELB="(" THEN BEGIN 08365000
|
|
PARATYPE ~ TRUE; 08366000
|
|
DNO ~ 0; 08367000
|
|
NEXTDICT ~ NEXTDICT + 1; % ADINFO 08368000
|
|
NEXTPARA: IF STEPI=VPARAMID THEN ERROR(91); 08369000
|
|
Z ~ ADDICT(VPARAMID,PNO~PNO+1); 08370000
|
|
IF STEPI!0 OR NOT(ELB="," OR ELB=")") THEN 08371000
|
|
ERROR(90); 08372000
|
|
IF ELB = "," THEN GO NEXTPARA; 08373000
|
|
END ELSE T ~ T - 1; 08374000
|
|
IF STEPI!0 OR ELB!"=" THEN BEGIN 08375000
|
|
T ~ T - 1; 08376000
|
|
ERROR(61); 08377000
|
|
END; 08378000
|
|
NWCT ~ 3; 08379000
|
|
TNWCT ~ CX ~ 0; 08380000
|
|
DECL[0] ~ " "; 08381000
|
|
BLANK(DECL[1],3,62); 08382000
|
|
TDECP ~ DECP; 08383000
|
|
Z ~ DC ~ 0; 08384000
|
|
WHILE STEPI!0 OR ELB!"#" OR DC!0 DO BEGIN 08385000
|
|
IF TYPE = VPARAMID THEN BEGIN 08386000
|
|
DNO ~ DNO + 1; 08387000
|
|
PACK(HOLD,(DNO-1).D2,CON,CX,ELB.SUB, 08388000
|
|
BOOLEAN(DNO)) 08389000
|
|
END ELSE 08390000
|
|
PACKET; 08391000
|
|
Z ~ Z + 1; 08392000
|
|
IF TYPE=VOTHERS AND ELB.SUB=DEFINEV THEN 08393000
|
|
DC~ DC+1 08394000
|
|
ELSE 08395000
|
|
IF TYPE=0 AND ELB="#" THEN BEGIN 08396000
|
|
IF STEPI=0 AND ELB=";" THEN 08397000
|
|
DC~ DC-1; 08398000
|
|
T ~ T - 1; 08399000
|
|
END; 08400000
|
|
SPC ~ REAL(TYPE!0); 08401000
|
|
END; 08402000
|
|
IF PARATYPE THEN BEGIN 08403000
|
|
DNO ~ DNO + 1; 08404000
|
|
PACK(HOLD,(DNO-1).D2,CON,0,0,BOOLEAN(DNO)); 08405000
|
|
DNO ~ DNO + 1; 08406000
|
|
PACK(HOLD,(DNO-1).D2,CON,0,0,BOOLEAN(DNO)); 08407000
|
|
PUT(A,A~GET(A)&(PNO+4)[TOSUB]); 08408000
|
|
PUT(A~A.ADINFO,(DNO+1)&DECP[TOREF] 08409000
|
|
& CX[TOOFFSET]); 08410000
|
|
WRITIT(HOLD,DNO.D2+1,DECP,MDECL); 08411000
|
|
WRITIT(CON,CX,DECP,MDECL); 08412000
|
|
FOR I~0 STEP 1 UNTIL 124 DO 08413000
|
|
WHILE Z~DLIST[I] > A DO 08414000
|
|
DLIST[I] ~ DICT[Z.IR,Z.IC]; 08415000
|
|
NEXTDICT ~ A ~ A + PNO + 1; % SPACE FOR PARAMS 08416000
|
|
DICT[(A~A+1).IR,A.IC] ~ 08417000
|
|
DICT[(A~A+1).IR,A.IC] ~ 0; 08418000
|
|
PARATYPE ~ BOOLEAN(PNO~DNO~0); 08419000
|
|
GO MORE; 08420000
|
|
END; 08421000
|
|
PUT(A,GET(A)&(2|REAL(NOT BOOLEAN(SPC)).[47:1]+REAL(Z>1)) 08422000
|
|
[TOSUB]&TDECP[TOADINFO]); 08423000
|
|
IF TNWCT~TNWCT+NWCT~NWCT+2 > 2037 THEN BEGIN 08424000
|
|
ERROR(62); 08425000
|
|
TNWCT ~ 2037; 08426000
|
|
END; 08427000
|
|
WRITIT(DECL,(TNWCT+6).WRD,DECP,MDECL); 08428000
|
|
IF TDECP.IR ! MSTORP.PDF2 THEN BEGIN 08429000
|
|
READIT(DECL,1,TDECP&1[TOREF],MDECL); 08430000
|
|
% FLUSH & GET BACK HEAD OF STRING 08431000
|
|
END; 08432000
|
|
MDECL[TDECP.IC].CTR ~ TNWCT-5-SPC; 08433000
|
|
% 08434000
|
|
MORE: 08435000
|
|
IF STEPI=0 AND ELB="," THEN BEGIN 08436000
|
|
GO DEF; 08437000
|
|
END ELSE BEGIN 08438000
|
|
IF TYPE ! VSPECIAL OR ELB ! ";" THEN 08438050
|
|
ERROR(105); 08438100
|
|
RECALLIT; 08439000
|
|
NXTELB ~ T; 08440000
|
|
GO EXIT; 08441000
|
|
END; 08442000
|
|
END; 08443000
|
|
ENDEC: PACKET; 08444000
|
|
RECALLIT; 08445000
|
|
NXTELB~ T; 08446000
|
|
IF MCTOG OR STRTOG OR MFLDTOG THEN 08447000
|
|
GO EXIT; 08448000
|
|
TNWCT~TNWCT+NWCT~NWCT+2; 08449000
|
|
IF TNWCT>8189 THEN ERROR(55); 08450000
|
|
SNG ~ (TNWCT+6).WRD; 08451000
|
|
IDENT[1]~ BLOCKNAME(BECT~ BECT+1); 08452000
|
|
PUT(A~ADDICT(VDECLRN,REAL(PRCTOG)),GET(A)&(LAD~TDECP) 08453000
|
|
[TOADINFO]); 08454000
|
|
SHIFT(0,VDECLRN,REAL(PRCTOG)); 08455000
|
|
WRITIT(DECL,(NWCT+6).WRD,DECP,MDECL); 08456000
|
|
IF TDECP.IR ! MSTORP.PDF2 THEN BEGIN 08457000
|
|
READIT(DECL,1,TDECP&1[TOREF],MDECL); 08458000
|
|
% FLUSH & GET BACK HEAD OF STRING 08459000
|
|
END; 08460000
|
|
MDECL[TDECP.IC].CTR ~ TNWCT-4; 08461000
|
|
EXIT: CHAR ~ " "; % DECL FOLLOWED BY SEMI 08462000
|
|
NWCT ~ 3; % CLEAR RECORD OF USING DECL 08463000
|
|
$ INCLUDE 08464001, IF DEBUGGING; 08463999
|
|
IF TRACE THEN TRACER(FALSE); 08464000
|
|
IF NOT (FMTTOG.[46:1] OR MACROTOG) THEN 08465000
|
|
BLOCKLEVEL ~ BLVL - NEST; 08465050
|
|
DEC ~ FMTTOG ~ FALSE; INDENT ~ INDENT - 3; 08465100
|
|
END DECLARATION; 08466000
|
|
COMMENT INTERPRETATION SECTION. FIRST PROCEDURES ARE ALGOL-TYPE 10000000
|
|
BROAD-SCOPE SYNTAX ANALYZERS. IF CALLED, AND THE ELEMENTS 10001000
|
|
SCANNED AGREE WITH THE ANALYZER, THE ELEMENTS ARE PLACED INTO 10002000
|
|
ACCM. IF FAILURE OCCURS DOWN THE LINE, -HM- IS RESTORED TO ITS 10003000
|
|
PREVIOUS VALUE & A BLANK MOVED IN TO PROTECT FURTHER OPERATIONS 10004000
|
|
IN ACCM. FAILURE USUALLY LEAVES MANY THINGS IN ACCM(ALTHOUGH HM 10005000
|
|
PREVENTS THEIR ACCESS)AND MANY ITEMS PRESCANNED IN TANK-ELBAT. 10006000
|
|
PROCEDURE NAMES PRETTY MUCH SELF-EXPLANATORY; 10007000
|
|
COMMENT MACRON IS A RECURSIVE INTERPRETER FOR MACRO CODE. 10008000
|
|
LOCAL VARIABLES OF MACROS ARE KEPT IN ARRAY -LOCAL-; 10009000
|
|
PROCEDURE MACRON(QQ,Q); VALUE QQ,Q; REAL QQ,Q; 10010000
|
|
BEGIN 10011000
|
|
BOOLEAN PROCEDURE ARITHEXPRESS; FORWARD; 10012000
|
|
BOOLEAN PROCEDURE BOOLEANEXPRESS; FORWARD; 10013000
|
|
BOOLEAN PROCEDURE LINKPART(P); VALUE P; BOOLEAN P; FORWARD; 10014000
|
|
$ INCLUDE 10014101, IF DEBUGGING; 10014099
|
|
PROCEDURE TRACER(T);VALUE T;BOOLEAN T;FORWARD; 10014100
|
|
COMMENT OPCODE DIALS INTO A CODE STRING & SPLITS NEXT 10015000
|
|
INSTRUCTION INTO ITS OPCODE & ADDRESS COMPONENTS; 10016000
|
|
STREAM PROCEDURE OPCODE(W,C,O,A); 10017000
|
|
VALUE C; 10018000
|
|
BEGIN 10019000
|
|
DI~O; SI~W; SI~SI+C; DI~DI+7; DS~CHR; 10020000
|
|
DI~A; DS~6 LIT "0"; DS~2 CHR; 10021000
|
|
END; 10022000
|
|
COMMENT MOV IS AN ARBITRARY CHR SHUFFLER; 10023000
|
|
STREAM PROCEDURE MOV(NN,N,S,SS,D,DD); 10024000
|
|
VALUE NN, N, SS, DD; 10025000
|
|
BEGIN 10026000
|
|
SI~S; SI~SI+SS; DI~D; DI~DI+DD; 10027000
|
|
NN(DS~ 32 CHR;DS~ 32 CHR); 10028000
|
|
DS~ N CHR 10029000
|
|
END; 10030000
|
|
COMMENT SCANUMBERCONV IMPLEMENTS "ENTIER". THE FIRST DIGIT 10031000
|
|
SEQUENCE IS FOUND IN THE MSTRING ARRAY. NO SIGN OR DECIMAL FIELD 10032000
|
|
IS RECOGNIZED. SCAN LIMIT IS SET BY CTR FIELD; 10033000
|
|
INTEGER STREAM PROCEDURE SCANUMBERCONV(S); 10034000
|
|
BEGIN 10035000
|
|
LOCAL O, N, M; 10036000
|
|
LABEL FD, EXIT; 10037000
|
|
SI~S; DI~LOC M; DI~DI+7; DS~CHR; DI~DI+7; DS~CHR; 10038000
|
|
DI~DI+7; DS~CHR; 10039000
|
|
O(IF SC}"0" THEN IF SC{"9" THEN JUMP OUT TO FD;SI~ SI+1); 10040000
|
|
N(2(32(IF SC}"0" THEN IF SC{"9" THEN JUMP OUT 3 TO FD; 10041000
|
|
SI~SI+1))); 10042000
|
|
M(4(32(32(IF SC}"0" THEN IF SC{"9" THEN JUMP OUT 4 TO FD; 10043000
|
|
SI~SI+1)))); 10044000
|
|
DI~ LOC SCANUMBERCONV; 10045000
|
|
DS~ 8 LIT "+0000001"; 10046000
|
|
GO EXIT; 10047000
|
|
FD: 8(SI~ SI+1;TALLY~ TALLY+1;IF SC<"0" THEN JUMP OUT;IF SC>"9" 10048000
|
|
THEN JUMP OUT); 10049000
|
|
N~ TALLY; 10050000
|
|
SI~ SI-N; 10051000
|
|
DI~ LOC SCANUMBERCONV; 10052000
|
|
DS~ N OCT; 10053000
|
|
EXIT: 10054000
|
|
END SCANUMBERCONV; 10055000
|
|
COMMENT TRANS TRANSFERS MACRO GENERATED WARNING & ERROR 10056000
|
|
MESSAGES INTO A PRINT ROW; 10057000
|
|
STREAM PROCEDURE TRANS(S,D,M,N,ML,MN,E,A,T); 10058000
|
|
VALUE M,N,ML,E,T; 10059000
|
|
BEGIN 10060000
|
|
SI~S; SI~SI+3; DI~D; M(DS~32 CHR;DS~32 CHR); 10061000
|
|
DS~N CHR; DS~6 LIT " >>>>>"; 10062000
|
|
SI~MN; SI~SI+3; DS~ML CHR; DS~2 LIT " +"; 10063000
|
|
SI~LOC E; DS~4 DEC; DI~A; DS~8 LIT "*"; 10064000
|
|
SI~A; DS~3 WDS; 10065000
|
|
SI~LOC T; SI~SI+1; DS~7 CHR; 10066000
|
|
END TRANS; 10067000
|
|
$ INCLUDE 10085001, IF ADVANCED; 10067999
|
|
COMMENT UGET GETS & MONITORS ONE WORD FROM THE USER 10068000
|
|
DICTIONARY; 10069000
|
|
REAL PROCEDURE UGET(A); VALUE A; INTEGER A; 10070000
|
|
BEGIN 10071000
|
|
UGET ~ V ~ UDICT[A.IR,A.IC]; 10072000
|
|
$ INCLUDE 10075001, IF DEBUGGING; 10072999
|
|
IF MONITER AND PRINT THEN 10073000
|
|
WRITE(PRINTER,MON1,"UDICT",A.ADINFO,"=",V, 10074000
|
|
V.BLKLVL,V.USIZ,V.UQUAL); 10075000
|
|
END; 10076000
|
|
COMMENT UPUT PUTS & MONITORS ONE WORD INTO THE USER 10077000
|
|
DICTIONARY; 10078000
|
|
PROCEDURE UPUT(A,V); VALUE A,V; INTEGER A; REAL V; 10079000
|
|
BEGIN 10080000
|
|
UDICT[A.IR,A.IC] ~ V; 10081000
|
|
IF MONITER AND PRINT THEN 10082000
|
|
WRITE(PRINTER,MON1,"UDICT",A.ADINFO,"~",V, 10083000
|
|
V.BLKLVL,V.USIZ,V.UQUAL); 10084000
|
|
END; 10085000
|
|
COMMENT LBRB IS USED TO RECURSIVELY SCAN OFF SUBSCRIPT 10100000
|
|
EXPRESSIONS ASSOCIATED WITH VARIABLES; 10101000
|
|
PROCEDURE LBRB; 10102000
|
|
BEGIN 10103000
|
|
$ INCLUDE 10103051, IF DEBUGGING; 10103049
|
|
IF TRACE THEN TRACER(<2>); 10103050
|
|
SETINSERT; 10104000
|
|
WHILE(STEPI!VSPECIAL OR ELB!"]") AND TYPE!63 DO 10105000
|
|
IF TYPE!VSPECIAL THEN 10106000
|
|
SETPACK 10107000
|
|
ELSE 10108000
|
|
IF ELB="[" THEN 10109000
|
|
LBRB 10110000
|
|
ELSE 10111000
|
|
SETINSERT; 10112000
|
|
IF TYPE!63 THEN 10113000
|
|
SETINSERT; 10114000
|
|
END; 10115000
|
|
BOOLEAN PROCEDURE RESWORD(RW); 10116000
|
|
VALUE RW; 10117000
|
|
INTEGER RW; 10118000
|
|
BEGIN 10119000
|
|
$ INCLUDE 10119051, IF DEBUGGING; 10119049
|
|
IF TRACE THEN TRACER(<2>&<1>[TOREF]); 10119050
|
|
IF STEPI=VOTHERS AND ELB.SUB=RW THEN 10120000
|
|
BEGIN 10121000
|
|
SETPACK; 10122000
|
|
RESWORD~ TRUE; 10123000
|
|
END 10124000
|
|
ELSE 10125000
|
|
T~ T-1; 10126000
|
|
END RESWORD; 10127000
|
|
BOOLEAN PROCEDURE SPCHAR(SP); 10128000
|
|
VALUE SP; 10129000
|
|
INTEGER SP; 10130000
|
|
BEGIN 10131000
|
|
$ INCLUDE 10131051, IF DEBUGGING; 10131049
|
|
IF TRACE THEN TRACER(<2>&<3>[TOREF]); 10131050
|
|
IF STEPI=VSPECIAL AND (ELB=SP OR SP=0) THEN 10132000
|
|
BEGIN 10133000
|
|
SETINSERT; 10134000
|
|
SPCHAR~ TRUE; 10135000
|
|
END 10136000
|
|
ELSE 10137000
|
|
T~ T-1; 10138000
|
|
END SPCHAR; 10139000
|
|
BOOLEAN PROCEDURE LOGICALVALUE; 10140000
|
|
BEGIN 10141000
|
|
$ INCLUDE 10141051, IF DEBUGGING; 10141049
|
|
IF TRACE THEN TRACER(<2>&<5>[TOREF]); 10141050
|
|
IF STEPI=VTORF THEN 10142000
|
|
BEGIN 10143000
|
|
SETPACK; 10144000
|
|
LOGICALVALUE~ TRUE; 10145000
|
|
END 10146000
|
|
ELSE 10147000
|
|
T~ T-1; 10148000
|
|
END LOGICALVALUE; 10149000
|
|
BOOLEAN PROCEDURE NUMBER; 10150000
|
|
BEGIN 10151000
|
|
$ INCLUDE 10151051, IF DEBUGGING; 10151049
|
|
IF TRACE THEN TRACER(<2>&<7>[TOREF]); 10151050
|
|
IF STEPI=VNUMBER THEN 10152000
|
|
BEGIN 10153000
|
|
SETPACK; 10154000
|
|
NUMBER~ TRUE; 10155000
|
|
END 10156000
|
|
ELSE 10157000
|
|
T~ T-1; 10158000
|
|
END NUMBER; 10159000
|
|
BOOLEAN PROCEDURE STRINE; 10160000
|
|
BEGIN 10161000
|
|
$ INCLUDE 10161051, IF DEBUGGING; 10161049
|
|
IF TRACE THEN TRACER(<2>&<11>[TOREF]); 10161050
|
|
IF STEPI=VSTRING THEN 10162000
|
|
BEGIN 10163000
|
|
SETPACK; 10164000
|
|
STRINE~ TRUE; 10165000
|
|
END 10166000
|
|
ELSE 10167000
|
|
T~ T-1; 10168000
|
|
END STRINE; 10169000
|
|
PROCEDURE LPRP(LP,RP); 10170000
|
|
VALUE LP, RP; 10171000
|
|
ALPHA LP, RP; 10172000
|
|
BEGIN 10173000
|
|
$ INCLUDE 10173051, IF DEBUGGING; 10173049
|
|
IF TRACE THEN TRACER(<2>&<13>[TOREF]); 10173050
|
|
SETINSERT; 10174000
|
|
WHILE(STEPI!VSPECIAL OR ELB!RP) AND TYPE!63 DO 10175000
|
|
IF TYPE!VSPECIAL THEN 10176000
|
|
SETPACK 10177000
|
|
ELSE 10178000
|
|
IF ELB=LP THEN 10179000
|
|
LPRP(LP, RP) 10180000
|
|
ELSE 10181000
|
|
SETINSERT; 10182000
|
|
IF TYPE!63 THEN 10183000
|
|
SETINSERT; 10184000
|
|
END; 10185000
|
|
BOOLEAN PROCEDURE PROCEDUREF; 10186000
|
|
BEGIN 10187000
|
|
$ INCLUDE 10187051, IF DEBUGGING; 10187049
|
|
IF TRACE THEN TRACER(<2>&<14>[TOREF]); 10187050
|
|
IF PROCEDUREF~ STEPI=VALGOLIDENT OR TYPE=VNOTDEC OR 10188000
|
|
TYPE=VOTHERS AND(IF ATOG THEN(I~ELB.SUB=REALV OR 10189000
|
|
ENTIERV{I{ABSV) ELSE ELB.SUB=BOOLEANV) THEN 10190000
|
|
BEGIN 10191000
|
|
SETPACK; 10192000
|
|
IF STEPI=VSPECIAL AND(ELB="(" OR ELB="[") THEN 10193000
|
|
LPRP(ELB, IF ELB="(" THEN ")" ELSE "]") 10194000
|
|
ELSE 10195000
|
|
T~ T-1 10196000
|
|
END 10197000
|
|
ELSE 10198000
|
|
T~ T-1 10199000
|
|
END; 10200000
|
|
BOOLEAN PROCEDURE RELATIONOP; 10201000
|
|
BEGIN 10202000
|
|
$ INCLUDE 10202051, IF DEBUGGING; 10202049
|
|
IF TRACE THEN TRACER(<2>&<16>[TOREF]); 10202050
|
|
IF SPCHAR("=") THEN 10203000
|
|
RELATIONOP~ TRUE 10204000
|
|
ELSE 10205000
|
|
IF SPCHAR("!") THEN 10206000
|
|
RELATIONOP~ TRUE 10207000
|
|
ELSE 10208000
|
|
IF SPCHAR("<") THEN 10209000
|
|
RELATIONOP~ TRUE 10210000
|
|
ELSE 10211000
|
|
IF SPCHAR(">") THEN 10212000
|
|
RELATIONOP~ TRUE 10213000
|
|
ELSE 10214000
|
|
IF SPCHAR("{") THEN 10215000
|
|
RELATIONOP~ TRUE 10216000
|
|
ELSE 10217000
|
|
IF SPCHAR("}") THEN 10218000
|
|
RELATIONOP~ TRUE; 10219000
|
|
END RELATIONOP; 10220000
|
|
PROCEDURE PWORD; 10221000
|
|
BEGIN 10222000
|
|
INTEGER TC, THM; 10223000
|
|
LABEL EXIT; 10224000
|
|
$ INCLUDE 10224051, IF DEBUGGING; 10224049
|
|
IF TRACE THEN TRACER(<2>&<20>[TOREF]); 10224050
|
|
TC~ T; 10225000
|
|
THM~ HM; 10226000
|
|
IF SPCHAR(".") THEN 10227000
|
|
IF SPCHAR("[") THEN 10228000
|
|
IF NUMBER THEN 10229000
|
|
IF SPCHAR(":") THEN 10230000
|
|
IF NUMBER THEN 10231000
|
|
IF SPCHAR("]") THEN 10232000
|
|
GO EXIT; 10233000
|
|
T~ TC; 10234000
|
|
HM~ THM; 10235000
|
|
EXIT: 10236000
|
|
END PWORD; 10237000
|
|
BOOLEAN PROCEDURE IFCLAUSE; 10250000
|
|
BEGIN 10251000
|
|
$ INCLUDE 10251051, IF DEBUGGING; 10251049
|
|
IF TRACE THEN TRACER(<2>&<21>[TOREF]); 10251050
|
|
IF RESWORD(IFV) THEN 10252000
|
|
IF BOOLEANEXPRESS THEN 10253000
|
|
IF RESWORD(THENV) THEN 10254000
|
|
IFCLAUSE~ TRUE; 10255000
|
|
END IFCLAUSE; 10256000
|
|
BOOLEAN PROCEDURE PRIMARY; 10257000
|
|
BEGIN 10258000
|
|
INTEGER TC, THM; 10259000
|
|
LABEL EXIT, CE; 10260000
|
|
BOOLEAN P; 10261000
|
|
$ INCLUDE 10261051, IF DEBUGGING; 10261049
|
|
IF TRACE THEN TRACER(<2>&<23>[TOREF]); 10261050
|
|
TC~ T; 10262000
|
|
THM~ HM; 10263000
|
|
IF P~ PROCEDUREF THEN 10264000
|
|
BEGIN 10265000
|
|
TC~ T; 10266000
|
|
THM~ HM; 10267000
|
|
IF SPCHAR("~") THEN 10268000
|
|
IF ARITHEXPRESS THEN 10269000
|
|
BEGIN 10270000
|
|
PRIMARY~ TRUE; 10271000
|
|
GO EXIT; 10272000
|
|
END; 10273000
|
|
T~ TC; 10274000
|
|
HM~ THM; 10275000
|
|
GO CE; 10276000
|
|
END; 10277000
|
|
IF NUMBER THEN 10278000
|
|
GO CE; 10279000
|
|
IF STRINE THEN 10280000
|
|
GO CE; 10281000
|
|
IF SPCHAR("*") THEN 10282000
|
|
GO CE; 10283000
|
|
IF SPCHAR("(") THEN 10284000
|
|
IF ARITHEXPRESS THEN 10285000
|
|
IF SPCHAR(")") THEN 10286000
|
|
BEGIN 10287000
|
|
P~ TRUE; 10288000
|
|
GO CE 10289000
|
|
END; 10290000
|
|
T~ TC; 10291000
|
|
HM~ THM; 10292000
|
|
GO EXIT; 10293000
|
|
CE: TC~ T; 10294000
|
|
THM~ HM; 10295000
|
|
PRIMARY~ TRUE; 10296000
|
|
IF SPCHAR("&") THEN 10297000
|
|
IF LINKPART(TRUE) THEN 10298000
|
|
GO EXIT; 10299000
|
|
T~ TC; 10300000
|
|
HM~ THM; 10301000
|
|
IF P THEN 10302000
|
|
PWORD; 10303000
|
|
EXIT: 10304000
|
|
END PRIMARY; 10305000
|
|
BOOLEAN PROCEDURE FACTOR; 10306000
|
|
BEGIN 10307000
|
|
INTEGER TC, THM; 10308000
|
|
LABEL AGAIN, EXIT; 10309000
|
|
$ INCLUDE 10309051, IF DEBUGGING; 10309049
|
|
IF TRACE THEN TRACER(<2>&<25>[TOREF]); 10309050
|
|
TC~ T; 10310000
|
|
THM~ HM; 10311000
|
|
AGAIN: IF NOT FACTOR~ PRIMARY THEN 10312000
|
|
BEGIN 10313000
|
|
T~ TC; 10314000
|
|
HM~ THM; 10315000
|
|
GO EXIT 10316000
|
|
END; 10317000
|
|
IF SPCHAR("*") THEN 10318000
|
|
GO AGAIN; 10319000
|
|
EXIT: 10320000
|
|
END FACTOR; 10321000
|
|
BOOLEAN PROCEDURE TERM; 10322000
|
|
BEGIN 10323000
|
|
INTEGER TC, THM; 10324000
|
|
LABEL AGAIN, EXIT; 10325000
|
|
$ INCLUDE 10325051, IF DEBUGGING; 10325049
|
|
IF TRACE THEN TRACER(<2>&<27>[TOREF]); 10325050
|
|
TC~ T; 10326000
|
|
THM~ HM; 10327000
|
|
AGAIN: IF NOT TERM~ FACTOR THEN 10328000
|
|
BEGIN 10329000
|
|
T~ TC; 10330000
|
|
HM~ THM; 10331000
|
|
GO EXIT 10332000
|
|
END; 10333000
|
|
IF SPCHAR("|") THEN 10334000
|
|
GO AGAIN; 10335000
|
|
IF SPCHAR("/") THEN 10336000
|
|
GO AGAIN; 10337000
|
|
IF RESWORD(MODV) THEN 10338000
|
|
GO AGAIN; 10339000
|
|
IF RESWORD(DIVV) THEN 10340000
|
|
GO AGAIN; 10341000
|
|
EXIT: 10342000
|
|
END TERM; 10343000
|
|
BOOLEAN PROCEDURE SIMPLEARITHEXPRESS; 10344000
|
|
BEGIN 10345000
|
|
INTEGER TC, THM; 10346000
|
|
LABEL AGAIN, EXIT; 10347000
|
|
$ INCLUDE 10347051, IF DEBUGGING; 10347049
|
|
IF TRACE THEN TRACER(<2>&<30>[TOREF]); 10347050
|
|
TC~ T; 10348000
|
|
THM~ HM; 10349000
|
|
IF SPCHAR("+") THEN 10350000
|
|
GO AGAIN; 10351000
|
|
IF SPCHAR("-") THEN 10352000
|
|
GO AGAIN; 10353000
|
|
AGAIN: IF NOT SIMPLEARITHEXPRESS~ TERM THEN 10354000
|
|
BEGIN 10355000
|
|
T~ TC; 10356000
|
|
HM~ THM; 10357000
|
|
GO EXIT 10358000
|
|
END; 10359000
|
|
IF SPCHAR("+") THEN 10360000
|
|
GO AGAIN; 10361000
|
|
IF SPCHAR("-") THEN 10362000
|
|
GO AGAIN; 10363000
|
|
EXIT: 10364000
|
|
END SIMPLEARITHEXPRESS; 10365000
|
|
BOOLEAN PROCEDURE ARITHEXPRESS; 10366000
|
|
BEGIN 10367000
|
|
INTEGER TC, THM; 10368000
|
|
LABEL EXIT; 10369000
|
|
$ INCLUDE 10369051, IF DEBUGGING; 10369049
|
|
IF TRACE THEN TRACER(<2>&<33>[TOREF]); 10369050
|
|
TC~ T; 10370000
|
|
THM~ HM; 10371000
|
|
IF IFCLAUSE THEN 10372000
|
|
IF ARITHEXPRESS THEN 10373000
|
|
IF RESWORD(ELSEV) THEN 10374000
|
|
IF ARITHEXPRESS THEN 10375000
|
|
BEGIN 10376000
|
|
ARITHEXPRESS~ TRUE; 10377000
|
|
GO EXIT 10378000
|
|
END; 10379000
|
|
T~ TC; 10380000
|
|
HM~ THM; 10381000
|
|
IF SIMPLEARITHEXPRESS THEN 10382000
|
|
BEGIN 10383000
|
|
ARITHEXPRESS~ TRUE; 10384000
|
|
GO EXIT 10385000
|
|
END; 10386000
|
|
T~ TC; 10387000
|
|
HM~ THM; 10388000
|
|
EXIT: 10389000
|
|
END ARITHEXPRESS; 10390000
|
|
BOOLEAN PROCEDURE RELATION; 10400000
|
|
BEGIN 10401000
|
|
INTEGER TC, THM; 10402000
|
|
LABEL AGAIN, EXIT; 10403000
|
|
$ INCLUDE 10403051, IF DEBUGGING; 10403049
|
|
IF TRACE THEN TRACER(<2>&<35>[TOREF]); 10403050
|
|
TC~ T; 10404000
|
|
THM~ HM; 10405000
|
|
IF ARITHEXPRESS THEN 10406000
|
|
IF RELATIONOP THEN 10407000
|
|
AGAIN: IF ARITHEXPRESS THEN 10408000
|
|
BEGIN 10409000
|
|
IF RELATIONOP THEN 10410000
|
|
GO AGAIN; 10411000
|
|
RELATION~ TRUE; 10412000
|
|
GO EXIT; 10413000
|
|
END; 10414000
|
|
T~ TC; 10415000
|
|
HM~ THM; 10416000
|
|
EXIT: 10417000
|
|
END RELATION; 10418000
|
|
BOOLEAN PROCEDURE BPRIMARY; 10419000
|
|
BEGIN 10420000
|
|
INTEGER TC, THM; 10421000
|
|
LABEL EXIT, CE; 10422000
|
|
BOOLEAN P; 10423000
|
|
$ INCLUDE 10423051, IF DEBUGGING; 10423049
|
|
IF TRACE THEN TRACER(<2>&<37>[TOREF]); 10423050
|
|
TC~ T; 10424000
|
|
THM~ HM; 10425000
|
|
TEMP~ REAL(RESWORD(NOTV)); 10426000
|
|
IF RELATION THEN 10427000
|
|
GO CE; 10428000
|
|
IF P~ LOGICALVALUE THEN 10429000
|
|
GO CE; 10430000
|
|
IF P~ PROCEDUREF THEN 10431000
|
|
BEGIN 10432000
|
|
TC~ T; 10433000
|
|
THM~ HM; 10434000
|
|
IF SPCHAR("~") THEN 10435000
|
|
IF BOOLEANEXPRESS THEN 10436000
|
|
BEGIN 10437000
|
|
BPRIMARY~ TRUE; 10438000
|
|
GO EXIT; 10439000
|
|
END; 10440000
|
|
T~ TC; 10441000
|
|
HM~ THM; 10442000
|
|
GO CE; 10443000
|
|
END; 10444000
|
|
IF SPCHAR("(") THEN 10445000
|
|
IF BOOLEANEXPRESS THEN 10446000
|
|
IF SPCHAR(")") THEN 10447000
|
|
BEGIN 10448000
|
|
P~ TRUE; 10449000
|
|
GO CE; 10450000
|
|
END; 10451000
|
|
T~ TC; 10452000
|
|
HM~ THM; 10453000
|
|
GO EXIT; 10454000
|
|
CE: TC~ T; 10455000
|
|
THM~ HM; 10456000
|
|
BPRIMARY~ TRUE; 10457000
|
|
IF SPCHAR("&") THEN 10458000
|
|
IF LINKPART(FALSE) THEN 10459000
|
|
GO EXIT; 10460000
|
|
T~ TC; 10461000
|
|
HM~ THM; 10462000
|
|
IF P THEN 10463000
|
|
PWORD; 10464000
|
|
EXIT: 10465000
|
|
END BPRIMARY; 10466000
|
|
BOOLEAN PROCEDURE BFACTOR; 10467000
|
|
BEGIN 10468000
|
|
INTEGER TC, THM; 10469000
|
|
LABEL AGAIN, EXIT; 10470000
|
|
$ INCLUDE 10470051, IF DEBUGGING; 10470049
|
|
IF TRACE THEN TRACER(<2>&<41>[TOREF]); 10470050
|
|
TC~ T; 10471000
|
|
THM~ HM; 10472000
|
|
AGAIN: IF NOT BFACTOR~ BPRIMARY THEN 10473000
|
|
BEGIN 10474000
|
|
T~ TC; 10475000
|
|
HM~ THM; 10476000
|
|
GO EXIT 10477000
|
|
END; 10478000
|
|
IF RESWORD(ANDV) THEN 10479000
|
|
GO AGAIN; 10480000
|
|
EXIT: 10481000
|
|
END BFACTOR; 10482000
|
|
BOOLEAN PROCEDURE BTERM; 10483000
|
|
BEGIN 10484000
|
|
INTEGER TC, THM; 10485000
|
|
LABEL AGAIN, EXIT; 10486000
|
|
$ INCLUDE 10486051, IF DEBUGGING; 10486049
|
|
IF TRACE THEN TRACER(<2>&<43>[TOREF]); 10486050
|
|
TC~ T; 10487000
|
|
THM~ HM; 10488000
|
|
AGAIN: IF NOT BTERM~ BFACTOR THEN 10489000
|
|
BEGIN 10490000
|
|
T~ TC; 10491000
|
|
HM~ THM; 10492000
|
|
GO EXIT 10493000
|
|
END; 10494000
|
|
IF RESWORD(ORV) THEN 10495000
|
|
GO AGAIN; 10496000
|
|
EXIT: 10497000
|
|
END BTERM; 10498000
|
|
BOOLEAN PROCEDURE IMPLICATION; 10499000
|
|
BEGIN 10500000
|
|
INTEGER TC, THM; 10501000
|
|
LABEL AGAIN, EXIT; 10502000
|
|
$ INCLUDE 10502051, IF DEBUGGING; 10502049
|
|
IF TRACE THEN TRACER(<2>&<44>[TOREF]); 10502050
|
|
TC~ T; 10503000
|
|
THM~ HM; 10504000
|
|
AGAIN: IF NOT IMPLICATION~ BTERM THEN 10505000
|
|
BEGIN 10506000
|
|
T~ TC; 10507000
|
|
HM~ THM; 10508000
|
|
GO EXIT 10509000
|
|
END; 10510000
|
|
IF RESWORD(IMPV) THEN 10511000
|
|
GO AGAIN; 10512000
|
|
EXIT: 10513000
|
|
END IMPLICATION; 10514000
|
|
BOOLEAN PROCEDURE SIMPLEBOOLEAN; 10515000
|
|
BEGIN 10516000
|
|
INTEGER TC, THM; 10517000
|
|
LABEL AGAIN, EXIT; 10518000
|
|
$ INCLUDE 10518051, IF DEBUGGING; 10518049
|
|
IF TRACE THEN TRACER(<2>&<46>[TOREF]); 10518050
|
|
TC~ T; 10519000
|
|
THM~ HM; 10520000
|
|
AGAIN: IF NOT SIMPLEBOOLEAN~ IMPLICATION THEN 10521000
|
|
BEGIN 10522000
|
|
T~ TC; 10523000
|
|
HM~ THM; 10524000
|
|
GO EXIT 10525000
|
|
END; 10526000
|
|
IF RESWORD(EQVV) THEN 10527000
|
|
GO AGAIN; 10528000
|
|
EXIT: 10529000
|
|
END SIMPLEBOOLEAN; 10530000
|
|
BOOLEAN PROCEDURE BOOLEANEXPRESS; 10531000
|
|
BEGIN 10532000
|
|
INTEGER TC, THM; 10533000
|
|
LABEL EXIT; 10534000
|
|
$ INCLUDE 10534051, IF DEBUGGING; 10534049
|
|
IF TRACE THEN TRACER(<2>&<50>[TOREF]); 10534050
|
|
TC~ T; 10535000
|
|
THM~ HM; 10536000
|
|
IF IFCLAUSE THEN 10537000
|
|
IF BOOLEANEXPRESS THEN 10538000
|
|
IF RESWORD(ELSEV) THEN 10539000
|
|
IF BOOLEANEXPRESS THEN 10540000
|
|
BEGIN 10541000
|
|
BOOLEANEXPRESS~ TRUE; 10542000
|
|
GO EXIT 10543000
|
|
END; 10544000
|
|
T~ TC; 10545000
|
|
HM~ THM; 10546000
|
|
IF SIMPLEBOOLEAN THEN 10547000
|
|
BEGIN 10548000
|
|
BOOLEANEXPRESS~ TRUE; 10549000
|
|
GO EXIT 10550000
|
|
END; 10551000
|
|
T~ TC; 10552000
|
|
HM~ THM; 10553000
|
|
EXIT: 10554000
|
|
END BOOLEANEXPRESS; 10555000
|
|
BOOLEAN PROCEDURE GPRIMARY(ATOG); VALUE ATOG; BOOLEAN ATOG; 10600000
|
|
BEGIN 10601000
|
|
INTEGER TC, THM; 10602000
|
|
$ INCLUDE 10602051, IF DEBUGGING; 10602049
|
|
IF TRACE THEN TRACER(<2>&<53>[TOREF]); 10602050
|
|
TC~ T; 10603000
|
|
THM~ HM; 10604000
|
|
IF ATOG THEN 10605000
|
|
IF PRIMARY THEN 10606000
|
|
GPRIMARY~ TRUE 10607000
|
|
ELSE 10608000
|
|
BEGIN 10609000
|
|
T~ TC; 10610000
|
|
HM~ THM; 10611000
|
|
END 10612000
|
|
ELSE 10613000
|
|
IF BPRIMARY THEN 10614000
|
|
GPRIMARY~ TRUE 10615000
|
|
ELSE 10616000
|
|
BEGIN 10617000
|
|
T~ TC; 10618000
|
|
HM~ THM; 10619000
|
|
END; 10620000
|
|
END GPRIMARY; 10621000
|
|
BOOLEAN PROCEDURE LINKDESCRIP; 10622000
|
|
BEGIN 10623000
|
|
INTEGER TC, THM; 10624000
|
|
LABEL EXIT; 10625000
|
|
$ INCLUDE 10625051, IF DEBUGGING; 10625049
|
|
IF TRACE THEN TRACER(<2>&<55>[TOREF]); 10625050
|
|
TC~ T; 10626000
|
|
THM~ HM; 10627000
|
|
IF TABLE(T)=VSPECIAL AND ELB="]" THEN 10628000
|
|
IF TABLE(T-1)=VNUMBER THEN 10629000
|
|
IF TABLE(T-2)=VSPECIAL AND ELB=":" THEN 10630000
|
|
BEGIN 10631000
|
|
LINKDESCRIP~ TRUE; 10632000
|
|
GO EXIT 10633000
|
|
END; 10634000
|
|
IF SPCHAR("[") THEN 10635000
|
|
IF NUMBER THEN 10636000
|
|
IF SPCHAR(":") THEN 10637000
|
|
IF NUMBER THEN 10638000
|
|
IF SPCHAR(":") THEN 10639000
|
|
IF NUMBER THEN 10640000
|
|
IF SPCHAR("]") THEN 10641000
|
|
BEGIN 10642000
|
|
LINKDESCRIP~ TRUE; 10643000
|
|
GO EXIT 10644000
|
|
END; 10645000
|
|
T~ TC; 10646000
|
|
HM~ THM; 10647000
|
|
EXIT: 10648000
|
|
END LINKDESCRIP; 10649000
|
|
BOOLEAN PROCEDURE LINKPART(P); VALUE P; BOOLEAN P; 10650000
|
|
BEGIN 10651000
|
|
INTEGER TC, THM; 10652000
|
|
LABEL AGAIN, EXIT; 10653000
|
|
$ INCLUDE 10653051, IF DEBUGGING; 10653049
|
|
IF TRACE THEN TRACER(<2>&<57>[TOREF]); 10653050
|
|
TC~ T; 10654000
|
|
THM~ HM; 10655000
|
|
AGAIN: IF LINKPART~GPRIMARY(P) THEN 10656000
|
|
BEGIN 10657000
|
|
IF NOT LINKPART~ LINKDESCRIP THEN 10658000
|
|
BEGIN 10659000
|
|
T~ TC; 10660000
|
|
HM~ THM; 10661000
|
|
GO TO EXIT 10662000
|
|
END; 10663000
|
|
IF SPCHAR("&") THEN 10664000
|
|
GO TO AGAIN 10665000
|
|
END; 10666000
|
|
EXIT: 10667000
|
|
END LINKPART; 10668000
|
|
BOOLEAN PROCEDURE EXPRESS(ATOG); VALUE ATOG; BOOLEAN ATOG; 10669000
|
|
BEGIN 10670000
|
|
INTEGER TC, THM; 10671000
|
|
$ INCLUDE 10671051, IF DEBUGGING; 10671049
|
|
IF TRACE THEN TRACER(<2>&<61>[TOREF]); 10671050
|
|
THM~ HM; 10672000
|
|
TC~ T; 10673000
|
|
IF ATOG THEN 10674000
|
|
IF NOT EXPRESS ~ ARITHEXPRESS THEN 10675000
|
|
BEGIN 10676000
|
|
T~ TC; 10677000
|
|
HM~ THM 10678000
|
|
END 10679000
|
|
ELSE 10680000
|
|
ELSE 10681000
|
|
IF NOT EXPRESS ~ BOOLEANEXPRESS THEN 10682000
|
|
BEGIN 10683000
|
|
T~ TC; 10684000
|
|
HM~ THM 10685000
|
|
END; 10686000
|
|
END EXPRESS; 10687000
|
|
BOOLEAN PROCEDURE STATE; 10700000
|
|
BEGIN 10701000
|
|
BOOLEAN S,TOGGLE; 10702000
|
|
INTEGER THENELS, BEGEND, DOUNT, FORDO; 10703000
|
|
LABEL CALTAB,CLTB,FO,THE,D,UNTI,ELS,EN,TEST,FINI,TGET,BEGI; 10704000
|
|
SWITCH WHICHWAY ~ BEGI,FO,THE,D,UNTI,ELS,EN; 10705000
|
|
$ INCLUDE 10705051, IF DEBUGGING; 10705049
|
|
IF TRACE THEN TRACER(<2>&<63>[TOREF]); 10705050
|
|
IF STEPI=VSPECIAL THEN 10706000
|
|
BEGIN 10707000
|
|
T~ T-1; 10708000
|
|
TOGGLE~ FALSE; 10709000
|
|
GO FINI; 10710000
|
|
END; 10711000
|
|
TEST: IF TYPE!VOTHERS THEN 10712000
|
|
GO CALTAB; 10713000
|
|
GO WHICHWAY[ELB.SUB+1-BEGINV]; 10714000
|
|
GO CALTAB; 10715000
|
|
BEGI: BEGEND~ BEGEND+1; 10716000
|
|
GO CALTAB; 10717000
|
|
THE: THENELS~ THENELS+1; 10718000
|
|
GO CALTAB; 10719000
|
|
D: IF FORDO=0 THEN 10720000
|
|
DOUNT~ DOUNT+1 10721000
|
|
ELSE 10722000
|
|
FORDO~ FORDO-1; 10723000
|
|
GO CALTAB; 10724000
|
|
FO: FORDO~ FORDO+1; 10725000
|
|
GO CALTAB; 10726000
|
|
ELS: IF THENELS=0 THEN 10727000
|
|
GO TGET; 10728000
|
|
THENELS~ THENELS-1; 10729000
|
|
GO CALTAB; 10730000
|
|
EN: IF BEGEND=0 THEN 10731000
|
|
GO TGET; 10732000
|
|
BEGEND~ BEGEND-1; 10733000
|
|
GO CALTAB; 10734000
|
|
UNTI: IF S~ FORDO=0 THEN 10735000
|
|
IF BEGEND=0 THEN 10736000
|
|
IF DOUNT=0 THEN 10737000
|
|
GO TGET; 10738000
|
|
IF NOT S THEN 10739000
|
|
DOUNT~ DOUNT-1; 10740000
|
|
CALTAB: IF TYPE=63 THEN 10741000
|
|
BEGIN 10742000
|
|
T~ T-1; 10743000
|
|
GO FINI 10744000
|
|
END; 10745000
|
|
SETPACK; 10746000
|
|
CLTB: IF STEPI!VSPECIAL THEN 10747000
|
|
GO TEST; 10748000
|
|
IF ELB!";" OR BEGEND!0 THEN 10749000
|
|
BEGIN 10750000
|
|
SETINSERT; 10751000
|
|
GO CLTB; 10752000
|
|
END; 10753000
|
|
TGET: TOGGLE~ TRUE; 10754000
|
|
T~ T-1; 10755000
|
|
FINI: STATE ~ TOGGLE; 10756000
|
|
END STATE; 10757000
|
|
BOOLEAN PROCEDURE INTGER; 10800000
|
|
BEGIN 10801000
|
|
INTEGER TC,THM; 10802000
|
|
LABEL EXIT; 10803000
|
|
$ INCLUDE 10803051, IF DEBUGGING; 10803049
|
|
IF TRACE THEN TRACER(<2>&<64>[TOREF]); 10803050
|
|
TC ~ T; 10804000
|
|
THM ~ HM; 10805000
|
|
IF NUMBER THEN 10806000
|
|
IF ELB.SUB = INTEGERV THEN BEGIN 10807000
|
|
INTGER ~ TRUE; 10808000
|
|
GO EXIT; 10809000
|
|
END; 10810000
|
|
T ~ TC; 10811000
|
|
HM ~ THM; 10812000
|
|
EXIT: END INTGER; 10813000
|
|
10814000
|
|
BOOLEAN PROCEDURE IDENTIFIER; 10815000
|
|
BEGIN 10815100
|
|
$ INCLUDE 10815151, IF DEBUGGING; 10815149
|
|
IF TRACE THEN TRACER(<2>&<66>[TOREF]); 10815150
|
|
IF VNOTDEC { STEPI { VOTHERS THEN BEGIN 10816000
|
|
IDENTIFIER ~ TRUE; 10817000
|
|
SETPACK; 10818000
|
|
END ELSE 10819000
|
|
T ~ T - 1; 10820000
|
|
END; 10820050
|
|
BOOLEAN PROCEDURE DECLARASHUN; 10821000
|
|
BEGIN 10821100
|
|
$ INCLUDE 10821151, IF DEBUGGING; 10821149
|
|
IF TRACE THEN TRACER(<2>&<70>[TOREF]); 10821150
|
|
IF STEPI = VDECLRN THEN BEGIN 10822000
|
|
DECLARASHUN ~ TRUE; 10823000
|
|
SETPACK; 10824000
|
|
END ELSE 10825000
|
|
T ~ T - 1; 10826000
|
|
END; 10826050
|
|
BOOLEAN PROCEDURE ELEMENT; 10827000
|
|
BEGIN 10827100
|
|
$ INCLUDE 10827151, IF DEBUGGING; 10827149
|
|
IF TRACE THEN TRACER(<2>&<72>[TOREF]); 10827150
|
|
IF ELEMENT ~ (STEPI ! 63) THEN 10828000
|
|
IF TYPE = VSPECIAL THEN 10829000
|
|
SETINSERT 10830000
|
|
ELSE 10831000
|
|
SETPACK 10832000
|
|
ELSE 10833000
|
|
T ~ T - 1; 10834000
|
|
END; 10834050
|
|
BOOLEAN PROCEDURE VARIABLE; 10835000
|
|
BEGIN 10835100
|
|
$ INCLUDE 10835151, IF DEBUGGING; 10835149
|
|
IF TRACE THEN TRACER(<2>&<74>[TOREF]); 10835150
|
|
IF VARIABLE ~ (STEPI = VALGOLIDENT OR TYPE = VNOTDEC) 10836000
|
|
THEN BEGIN 10837000
|
|
SETPACK; 10838000
|
|
IF STEPI = VSPECIAL AND ELB = "[" THEN 10839000
|
|
LBRB 10840000
|
|
ELSE 10841000
|
|
T ~ T - 1; 10842000
|
|
END ELSE 10843000
|
|
T ~ T - 1; 10844000
|
|
END; 10844050
|
|
$ INCLUDE 10961001, IF ADVANCED; 10899999
|
|
COMMENT LINKIN PROCESSES RESERVE & RESERVESTMT REQUESTS. 10900000
|
|
PATCHSPACE IS SET UP & A FUNNY 4-CHR ID IS PLACED IN ACCM TO 10901000
|
|
BE OUTPUT. PATCH RESERVATIONS GO FROM 0->266 IN STEPS OF 2. 10902000
|
|
AN OFFSET OF 500 IDENTIFIES STMT RESERVATION. ACTUAL 10903000
|
|
ASSIGNMENT OF LINK RECORD IS DELAYED UNTIL FUNNY ID REACHES 10904000
|
|
OUTER BLOCK & OUTPUT STRING; 10905000
|
|
10906000
|
|
PROCEDURE LINKIN(CTL,W,SIZE,OFFSET); 10907000
|
|
VALUE SIZE,OFFSET,W; 10908000
|
|
REAL W,SIZE,OFFSET; ARRAY CTL[0]; 10909000
|
|
BEGIN 10910000
|
|
LABEL EXIT; 10911000
|
|
IF NXTPTCHREC+SIZE}PATCHMAX OR NXTPTCHX}PTCHMAX THEN BEGIN 10912000
|
|
ERROR(65); 10913000
|
|
GO EXIT; 10914000
|
|
END; 10915000
|
|
MOVEDEC(OFFSET+NXTPTCHX~*+2,ACCM,4,5,3,0); 10916000
|
|
ACCM[0].C23 ~ 12; 10916500
|
|
HM ~ 7; 10917000
|
|
CTL[W] ~ NXTPTCHX&1[TOPLINK]; 10918000
|
|
PATCHSPACE[NXTPTCHX]~ NXTPTCHREC; 10919000
|
|
PATCHSPACE[NXTPTCHX+1] ~ -0&SIZE[TOPSIZE]; 10920000
|
|
NXTPTCHREC ~ NXTPTCHREC + SIZE; 10921000
|
|
EXIT: 10922000
|
|
END LINKIN; 10923000
|
|
COMMENT LINKOUT PROCESSES ACTUAL PATCH STMTS. SEQUENCE 10924000
|
|
IN ACCM IS OUTPUT IN 72-CHR HUNKS TO RESERVED RECORDS IN THE 10925000
|
|
FILE BACKPATCHES. ITEMS ARE NOT RESCANNED, ALTERED, PACKED OR 10926000
|
|
NOTICED IN ANY WAY. IN PARTICULAR -DICT- DOES NOT USUALLY KNOW 10927000
|
|
ABOUT DECLARED IDS HIDDEN IN PATCHES; 10928000
|
|
PROCEDURE LINKOUT(CTL,W); VALUE W; 10929000
|
|
ARRAY CTL[0]; INTEGER W; 10930000
|
|
BEGIN 10931000
|
|
LABEL EXIT; 10932000
|
|
REAL A,B,C,D,I,J; 10933000
|
|
FORMAT PATCH("PATCH IMAGE #"I3" OF"I3" RESERVED AT "I9" IN CODE"); 10933050
|
|
10934000
|
|
IF NOT BOOLEAN(C~CTL[W]).PLINK THEN BEGIN 10935000
|
|
ERROR(67); 10936000
|
|
GO EXIT; 10937000
|
|
END; 10938000
|
|
B ~ (J~PATCHSPACE[C]).PBASE; C ~ PATCHSPACE[C+1]; 10939000
|
|
D ~ C.PSIZE; 10940000
|
|
IF INTERLIST THEN 10940050
|
|
WRITE(PRINTER,PATCH,C.PUSED,D,J.PSEQN); 10940100
|
|
A ~ HM-3; 10941000
|
|
I ~ 3; 10942000
|
|
IF A>0 THEN BEGIN 10943000
|
|
WHILE A}72 DO BEGIN 10944000
|
|
BLANK(PPB,0,14); 10945000
|
|
MOV(1,8,ACCM[I.WRD],I.CHR,PPB,0); 10946000
|
|
A ~ A - 72; 10947000
|
|
I ~ I + 72; 10948000
|
|
WRITE(BACKPATCHES[B+C.PUSED],9,PPB[*]); 10949000
|
|
$ INCLUDE 10949101, IF COUNTING; 10949099
|
|
PTCHCT ~ *+1; 10949100
|
|
C.PUSED ~ C.PUSED + 1; IF C.PUSED > D THEN BEGIN 10950000
|
|
ERROR(65); 10951000
|
|
GO EXIT; 10952000
|
|
END; 10953000
|
|
END; BLANK(PPB,0,14); 10954000
|
|
MOV(A.C6,A,ACCM[I.WRD],I.CHR,PPB,0); 10955000
|
|
WRITE(BACKPATCHES[B+C.PUSED],9,PPB[*]); 10956000
|
|
$ INCLUDE 10956101, IF COUNTING; 10956099
|
|
PTCHCT ~ *+1; 10956100
|
|
BLANK(PPB,0,14); 10957000
|
|
C.PUSED ~ C.PUSED + 1; IF C.PUSED > D THEN 10958000
|
|
ERROR(65); END; 10959000
|
|
EXIT: PATCHSPACE[CTL[W]+1] ~ C; 10960000
|
|
END LINKOUT; 10961000
|
|
$ INCLUDE 10980001, IF DEBUGGING; 10961999
|
|
COMMENT TRACER TRACES ENTRY & EXIT OF MACROS 10962000
|
|
AND THE PROCESS OF TESTING SCAN TYPES; 10963000
|
|
PROCEDURE TRACER(T); VALUE T; BOOLEAN T; 10964000
|
|
BEGIN 10965000
|
|
ARRAY ERB[0:14]; 10966000
|
|
STREAM PROCEDURE TRACEIT(D,T,N,L,I); VALUE L,I,T; 10967000
|
|
BEGIN DI~D; DS~8 LIT " "; SI~D; DS~14 WDS; DI~D; 10968000
|
|
DS~LIT "."; I(DS~LIT "."); 10969000
|
|
SI~LOC T; SI~SI+2; DS~6 CHR; 10970000
|
|
SI~N; SI~SI+3; DS~L CHR; END; 10971000
|
|
IF T.[46:1] THEN 10972000
|
|
TRACEIT(ERB," SCAN ",TYPENAME[I~REAL(T).REF], 10973000
|
|
TYPENAME[I].CTR,INDENT) 10974000
|
|
ELSE 10975000
|
|
TRACEIT(ERB,IF T THEN "ENTER " ELSE "LEAVE ", 10976000
|
|
DICT[MADDR.IR,MADDR.IC],IF I~GET(MADDR).CTR > 50 10977000
|
|
THEN 50 ELSE I,INDENT); 10978000
|
|
WRITE(PRINTER,15,ERB[*]); 10979000
|
|
END; 10980000
|
|
% MACRON PROCEDURE BODY 11000000
|
|
BEGIN 11001000
|
|
INTEGER POS,TMADDR,ADDR,OP,X,D,THM,TOHM, 11002000
|
|
TFIELD,LNGTH,IADDR,TEMP; 11003000
|
|
BOOLEAN LOADING; 11004000
|
|
BOOLEAN TTOG, TATOG; 11005000
|
|
11005998
|
|
IF MACT } 1 THEN BEGIN % STACK LAST MACRO 11026000
|
|
X ~ D ~ 0; 11027000
|
|
IF OHM > 3 THEN BEGIN 11028000
|
|
STACKIT(X~(OHM+7).WRD,OA[*]); 11029000
|
|
END; 11029500
|
|
IF HM > 3 THEN BEGIN 11030000
|
|
STACKIT(D~(HM+7).WRD,ACCM[*]); 11031000
|
|
END; 11031500
|
|
LOCAL[0,253] ~ X & D[TOREF]; X ~ D ~ 0; 11032000
|
|
IF X~LOCAL[4,0].CTR ! 0 THEN BEGIN 11033000
|
|
STACKIT(X~(X+10).WRD,LOCAL[4,*]); 11034000
|
|
END; 11034500
|
|
IF D~LOCAL[3,0].CTR ! 0 THEN BEGIN 11035000
|
|
STACKIT(D~(D+10).WRD,LOCAL[3,*]); 11036000
|
|
END; 11036500
|
|
LOCAL[0,252] ~ X & D[TOREF]; 11037000
|
|
IF X~LOCAL[0,254].MLOCT ! 0 THEN BEGIN 11038000
|
|
STACKIT(X,LOCAL[6,*]); 11039000
|
|
LOCAL[6,0] ~ 0; 11040000
|
|
MOVE(X-2,LOCAL[6,0],LOCAL[6,1]); 11041000
|
|
END; 11042000
|
|
X ~ (LOCAL[0,255].MLACT+3).D4; 11043000
|
|
FOR D~7 STEP 1 UNTIL X DO BEGIN 11044000
|
|
STACKIT(256,LOCAL[D,*]); 11045000
|
|
END; 11045500
|
|
STACKIT(256,LOCAL[0,*]); 11046000
|
|
LOCAL[0,0] ~ 0; 11047000
|
|
MOVE(LOCAL[0,255].MLICT-2,LOCAL[0,0],LOCAL[0,1]); 11048000
|
|
END; 11049000
|
|
LOCAL[0,255] ~ A ~ GET(Q); 11050000
|
|
POS ~ (X ~ LOCAL[0,254] ~ GET(Q+1))&0[TOREF]; 11051000
|
|
TMADDR~ MADDR; 11052000
|
|
EP~ 0; 11053000
|
|
ACCM[0]~ " "; 11054000
|
|
PACKLAST ~ FALSE; 11054100
|
|
$ INCLUDE 11056001, IF DEBUGGING; 11054999
|
|
IF MONITER OR ACMLST THEN 11055000
|
|
BLANK(ACCM[1],0,13); 11056000
|
|
MADDR~ QQ+1; 11057000
|
|
INDENT ~ INDENT + 3; 11058000
|
|
$ INCLUDE 11059001, IF DEBUGGING; 11058999
|
|
IF TRACE THEN TRACER(TRUE); 11059000
|
|
MACT~ MACT+1; 11060000
|
|
SAVEIT; 11061000
|
|
TTOG~ TOGGLE; 11062000
|
|
TOGGLE~ FALSE; 11063000
|
|
TATOG~ ATOG; 11064000
|
|
ATOG~ FALSE; 11065000
|
|
TFIELD ~ FIELD; 11066000
|
|
FIELD ~ 0; 11067000
|
|
THM ~ HM; 11068000
|
|
TOHM ~ OHM; 11069000
|
|
OHM ~ HM ~ 3; 11069050
|
|
READIT(LOCAL[2,*],A.MML,POS,MCODE); 11070000
|
|
READIT(LOCAL[1,*],A.MPOOL,POS,MCODE); 11071000
|
|
READIT(SPACEMAP,X.MSMAP,POS,MCODE); 11072000
|
|
X ~ A.MLACT; 11072050
|
|
FOR OP~28 STEP 1 UNTIL X DO 11072100
|
|
IF INUSE(SPACEMAP[OP.D32],OP.M32) THEN 11072150
|
|
LOCAL[OP.D4,OP.M4|64] ~ 0; 11072200
|
|
IF X~A.MLICT-1 > 0 THEN BEGIN 11072250
|
|
LOCAL[0,0] ~ 0; 11072300
|
|
MOVE(X,LOCAL[0,0],LOCAL[0,1]); 11072350
|
|
END; 11072400
|
|
IF X~LOCAL[0,254].MLOCT > 0 THEN BEGIN 11072450
|
|
LOCAL[6,0] ~ 0; 11072500
|
|
IF X~X-1 > 0 THEN MOVE(X,LOCAL[6,0],LOCAL[6,1]); 11072550
|
|
END; 11072600
|
|
X ~ 0; 11073000
|
|
$ INCLUDE 11076001, IF INTERMEDIATE; 11073999
|
|
IF A.MLACT } 28 THEN 11074000
|
|
IF W.SUB!0 THEN % LIST MACRO...NEEDS CALLING NAME 11075000
|
|
OP ~ MOVER(IDENT[1].CTR+3,IDENT,8,LOCAL[7,*],0,0); 11076000
|
|
BEGIN 11077000
|
|
COMMENT ATOI CONVERTS NUMBERS IN ACCM TO AN INTEGER FORM; 11078000
|
|
INTEGER PROCEDURE ATOI; 11079000
|
|
ATOI ~ CONSTANTCONVERT(ACCM,IF A~HM-3-REAL(A~CR(ACCM,3)="+" OR 11080000
|
|
A="-") > 8 THEN 8 ELSE A); 11081000
|
|
COMMENT COPE COPES WITH OPERATORS REQUIRING ACCESS TO ONLY 11200000
|
|
ONE MSTRING OR MPOINTER AT A TIME. ALPHA OPERAND CALLS, 11201000
|
|
COMPARISONS & ADDRESSED INTEGER ARITHMETIC OCCUR HERE, AMONG 11202000
|
|
OTHER GOODIES. CHARACTERISTIC FIELDS IN THE MNEMON[OP] ENTRY 11203000
|
|
GUIDE PROCESSING; 11204000
|
|
PROCEDURE COPE(ARY,W,OP,SZ); VALUE W,OP,SZ; 11205000
|
|
INTEGER W,OP,SZ; ARRAY ARY[0]; 11206000
|
|
BEGIN 11207000
|
|
ALPHA A,B; 11208000
|
|
INTEGER C,LNGTH,N; 11209000
|
|
$ INCLUDE 11209101, IF DEBUGGING; 11209099
|
|
FORMAT CM1("CLOSE PSEUDOREADER;"I4" CHR:"); 11209100
|
|
ALPHA PROCEDURE ADJUST(A); VALUE A; ALPHA A; 11210000
|
|
ADJUST ~ IF A = "5?0001" THEN "5BEGIN" ELSE 11211000
|
|
IF A = "5?0000" THEN "3END " ELSE 11212000
|
|
A; 11213000
|
|
LABEL OPDC,NSTR; 11214000
|
|
11215000
|
|
IF BOOLEAN((C~MNEMON[OP])).SCMP THEN BEGIN 11216000
|
|
IF C~(A~ADJUST(ACCM[0]&(HM-3)[TOCTR])).CTR < 11217000
|
|
N~(B~ADJUST(ARY[W])).CTR THEN 11218000
|
|
N ~ 0 11219000
|
|
ELSE 11220000
|
|
IF C = N THEN 11221000
|
|
N ~ 1 11222000
|
|
ELSE BEGIN 11223000
|
|
C ~ N; 11224000
|
|
N ~ 2; 11225000
|
|
END; 11226000
|
|
IF C > 5 THEN 11227000
|
|
C ~ COMPARE(ACCM[0],ARY[W],C.C5,C.C6,C) 11228000
|
|
ELSE 11229000
|
|
C ~ COMPARE(A,B,0,0,C); 11230000
|
|
END ELSE 11231000
|
|
IF BOOLEAN(C).MINT THEN BEGIN 11232000
|
|
IF CONVERTTOG THEN BEGIN 11233000
|
|
C ~ CONSTANTCONVERT(ARY[W],(A~ARY[W]).CTR 11234000
|
|
- REAL(C~CR(A,3)="+" OR C="-")); 11235000
|
|
CONVERTTOG ~ FALSE; 11236000
|
|
END ELSE 11237000
|
|
$ INCLUDE 11244001, IF INTERMEDIATE; 11237999
|
|
IF FIELDTOG THEN BEGIN 11238000
|
|
CAT1 ~ ARY[W]; 11239000
|
|
IF NOWCODE ! FIELD.CROW THEN 11240000
|
|
READ(ISOCODE[NOWCODE~FIELD.CROW],120,CODRAY[*]); 11241000
|
|
C ~ ISOCAT(FIELD.CRAD); 11242000
|
|
FIELDTOG ~ FALSE; 11243000
|
|
END ELSE 11244000
|
|
C ~ ARY[W]; 11245000
|
|
END; 11246000
|
|
A ~ ARY[W]; 11247000
|
|
11248000
|
|
CASE OP OF BEGIN 11249000
|
|
; % NOPP 11250000
|
|
BEGIN % OPSR 11251000
|
|
PSEUDOREAD(ARY,A.CTR+1,W); 11252000
|
|
NOREAD ~ TRUE; 11253000
|
|
END; 11254000
|
|
BEGIN % CPSR 11255000
|
|
HM ~ 8|W + 3; 11256000
|
|
IF A ~ -8|BW + BWMAX - BC - 1 < 0 THEN A ~ 0; 11257000
|
|
$ INCLUDE 11257101, IF DEBUGGING; 11257049
|
|
IF PSEUDOTOG THEN 11257050
|
|
WRITE(PRINTER,CM1,A); 11257100
|
|
IF A!0 THEN HM ~ MOVER(A,BFR,8|BW+BC,ARY,HM,SZ); 11258000
|
|
ARY[W].CTR ~ A; 11259000
|
|
$ INCLUDE 11259951, IF DEBUGGING; 11259799
|
|
IF PSEUDOTOG THEN BEGIN 11259800
|
|
HM ~ 3; 11259825
|
|
COPE(ARY,W,OP~OOPDC,0); 11259850
|
|
HM ~ -A & OERRO[TOREF] & 2[TOOFFSET] 11259900
|
|
END ELSE 11259950
|
|
HM ~ 3; 11264000
|
|
READACARD; 11265000
|
|
NOREAD ~ FALSE; 11266000
|
|
END; 11267000
|
|
TOGGLE ~ C=1 AND N=1; % SEQL 11268000
|
|
TOGGLE ~ C!1 OR N!1; % SNEQ 11269000
|
|
TOGGLE ~ C=1 AND N=0 OR C=0; % SLSS 11270000
|
|
TOGGLE ~ C=1 AND N<2 OR C=0; % SLEQ 11271000
|
|
TOGGLE ~ C=1 AND N=2 OR C=2; % SGTR 11272000
|
|
TOGGLE ~ C=1 AND N>0 OR C=2; % SGEQ 11273000
|
|
OPDC: BEGIN % OPDC 11274000
|
|
IF LENGTHTOG THEN BEGIN 11275000
|
|
LNGTH ~ PL; 11276000
|
|
FC ~ TFC; 11277000
|
|
END ELSE BEGIN 11278000
|
|
LNGTH ~ A.CTR; 11279000
|
|
FC ~ 0; 11280000
|
|
END; 11281000
|
|
IF CONVERTTOG THEN BEGIN 11282000
|
|
LNGTH ~ LIMT; 11283000
|
|
$ INCLUDE 11290001, IF INTERMEDIATE; 11283999
|
|
IF FIELDTOG THEN BEGIN 11284000
|
|
CAT1 ~ A; 11285000
|
|
IF NOWCODE ! FIELD.CROW THEN 11286000
|
|
READ(ISOCODE[NOWCODE~FIELD.CROW],120,CODRAY[*]); 11287000
|
|
W ~ ISOCAT(FIELD.CRAD); 11288000
|
|
FIELDTOG ~ FALSE; 11289000
|
|
END ELSE 11290000
|
|
W ~ A; 11291000
|
|
IF REAL(W<0)+HM+LNGTH > MSMAX THEN 11292000
|
|
OVRFL 11293000
|
|
ELSE BEGIN 11294000
|
|
IF W < 0 THEN BEGIN 11295000
|
|
P("-",ACCM[HM.WRD],HM.CHR); 11296000
|
|
HM ~ HM+1; 11297000
|
|
END; 11298000
|
|
MOVEDEC(ABS(W),ACCM[HM.WRD],HM.CHR,8-LNGTH+FC, 11299000
|
|
LNGTH,0); 11300000
|
|
END; 11301000
|
|
HM ~ HM + LNGTH; 11302000
|
|
END ELSE BEGIN 11303000
|
|
HM ~ MOVER(LNGTH,ARY,8|W+FC+3,ACCM,HM,0); 11304000
|
|
IF C~FC+LNGTH-A.CTR > 0 THEN 11305000
|
|
DIALB(C.C6,C,ACCM[(N~HM-C).WRD],N.CHR); 11306000
|
|
END; 11307000
|
|
CONVERTTOG ~ LENGTHTOG ~ FIELDTOG ~ FALSE; 11308000
|
|
END OPDC; 11309000
|
|
BEGIN HM ~ HM + 1; GO OPDC END;% OPDS 11310000
|
|
NSTR: BEGIN % NSTR 11311000
|
|
IF LENGTHTOG THEN BEGIN 11312000
|
|
IF PL = 0 THEN BEGIN % APPEND 11313000
|
|
PL ~ HM - 3; 11314000
|
|
FC ~ A.CTR + TFC; 11315000
|
|
END ELSE 11316000
|
|
IF B~A.CTR < FC THEN 11317000
|
|
ERROR(-94); % FIELD DISJOINT FROM CONTENTS 11318000
|
|
C ~ MOVER(PL,ACCM,3,ARY,(FC~8|W+FC)+3,SZ)-8|W-3; 11319000
|
|
IF N~PL+3-HM > 0 THEN 11320000
|
|
DIALB(N.C6,N,ARY[(N~FC+HM).WRD],N.CHR); 11321000
|
|
IF C > B THEN 11322000
|
|
ARY[W].CTR ~ C; 11323000
|
|
LENGTHTOG ~ FALSE; 11324000
|
|
END ELSE 11325000
|
|
ARY[W] ~ 0&(MOVER(HM,ACCM,0,ARY,8|W,SZ)-8|W-3) 11326000
|
|
[TOCTR]&ARY[W][18:18:30]; 11327000
|
|
BASE ~ BASE.NEXT & T[TONEXT]; 11328000
|
|
END; 11329000
|
|
GO NSTR; % DSTR 11330000
|
|
BEGIN % ISTR 11331000
|
|
$ INCLUDE 11339001, IF INTERMEDIATE; 11331999
|
|
IF FIELDTOG THEN BEGIN 11332000
|
|
IF NOWCODE ! FIELD.CROW THEN 11333000
|
|
READ(ISOCODE[NOWCODE~FIELD.CROW],120,CODRAY[*]); 11334000
|
|
CAT1 ~ A; 11335000
|
|
CAT2 ~ IACCM; 11336000
|
|
ARY[W] ~ ISOCAT(FIELD.CRAD+1); 11337000
|
|
FIELDTOG ~ FALSE; 11338000
|
|
END ELSE 11339000
|
|
ARY[W] ~ IACCM; 11340000
|
|
BASE ~ BASE.NEXT & T[TONEXT]; 11341000
|
|
END; 11342000
|
|
IACCM ~ C; % IOPC 11343000
|
|
IACCM ~ IACCM + C; % ADDI 11344000
|
|
IACCM ~ IACCM - C; % SUBI 11345000
|
|
IACCM ~ IACCM | C; % MULI 11346000
|
|
IACCM ~ IACCM DIV C; % DIVI 11347000
|
|
ERROR(7); 11348000
|
|
ERROR(7); 11349000
|
|
END COPE CASE; 11350000
|
|
IF BOOLEAN(MNEMON[OP]).ZACM THEN BEGIN 11351000
|
|
ACCM[0] ~ " "; 11352000
|
|
$ INCLUDE 11354001, IF DEBUGGING; 11352999
|
|
IF MONITER OR ACMLST THEN 11353000
|
|
BLANK(ACCM[1],0,13); 11354000
|
|
HM ~ 3; 11355000
|
|
PACKLAST ~ FALSE; 11355050
|
|
END; 11356000
|
|
END COPE; 11357000
|
|
COMMENT LOADSCAN IS USED TO PROCESS OPERATORS REQUIRING 11400000
|
|
ACCESS TO 2 MSTRINGS AT ONCE. TYPICALLY THESE ARE LOADING ITEMS 11401000
|
|
FOR TEST, SCAN UNTIL/THRU, & USER DICTIONARY ACTION; 11402000
|
|
PROCEDURE LOADSCAN(ARY,W,THM,L4,OP); 11403000
|
|
VALUE OP,W; 11404000
|
|
REAL THM,OP,W; ARRAY ARY,L4[0]; 11405000
|
|
BEGIN 11406000
|
|
BOOLEAN THRUTOG; REAL LNGTH; 11407000
|
|
LABEL LDFT,LNUM,XLNUM,LOTHERS,XLOTH,LDEC,SUCC, 11408000
|
|
STRT,EXIT,LOOP; 11409000
|
|
ALPHA PROCEDURE ADJUST(A);VALUE A; ALPHA A; 11410000
|
|
IF A="5?0001" THEN ADJUST~ "5BEGIN" ELSE 11411000
|
|
IF A="5?0000" THEN ADJUST~ "3END " ELSE 11412000
|
|
ADJUST~ A; 11413000
|
|
IF OP = OLDFT THEN GO LDFT; 11414000
|
|
HM ~ HM + REAL(OP=OSUNS OR OP=OSTHS); 11415000
|
|
THRUTOG ~ OSTHC{OP{OSTHS; 11416000
|
|
TOGGLE ~ FALSE; 11417000
|
|
THM ~ 0; 11418000
|
|
GO STRT; 11419000
|
|
LOOP: TOGGLE ~ TRUE; 11420000
|
|
THM ~ 0; 11421000
|
|
IF TYPE = 0 THEN SETINSERT ELSE SETPACK; 11422000
|
|
STRT: IF STEPI=63 AND ELB.SUB=0 AND NOREAD THEN BEGIN 11423000
|
|
T ~ T - 1; 11424000
|
|
TOGGLE ~ FALSE; 11425000
|
|
GO EXIT; 11426000
|
|
END; 11427000
|
|
IF TYPE = VOTHERS THEN GO LOTHERS ELSE 11428000
|
|
IF TYPE = VDECLRN THEN GO LDEC ELSE 11429000
|
|
IF TYPE ! 0 THEN GO LNUM; 11430000
|
|
DO BEGIN 11431000
|
|
IF L4[THM].C23=ELB+64 THEN 11432000
|
|
GO SUCC; 11433000
|
|
END UNTIL THM ~ L4[THM].LSLNK = 0; 11434000
|
|
GO LOOP; 11435000
|
|
LNUM: DO BEGIN 11436000
|
|
IF A~L4[THM].LSCMP ! TANK[ELB] THEN 11437000
|
|
GO XLNUM; 11438000
|
|
IF LNGTH ~ A.LSCTR < 6 THEN GO SUCC; 11439000
|
|
IF COMPARE(TANK[ELB],L4[THM],0,0,LNGTH)=1 THEN 11440000
|
|
GO SUCC; 11441000
|
|
XLNUM: END UNTIL THM ~ L4[THM].LSLNK = 0; 11442000
|
|
GO LOOP; 11443000
|
|
LOTHERS: IF BEGINV!I~ELB.SUB!ENDV THEN GO LNUM; 11444000
|
|
DO BEGIN 11445000
|
|
A ~ L4[THM].LSCMP; 11446000
|
|
IF I = BEGINV THEN 11447000
|
|
IF A="5BEGIN" THEN GO SUCC ELSE GO XLOTH 11448000
|
|
ELSE 11449000
|
|
IF I = ENDV THEN 11450000
|
|
IF A="3END " THEN GO SUCC; 11451000
|
|
XLOTH: END UNTIL THM ~ L4[THM].LSLNK = 0; 11452000
|
|
GO LOOP; 11453000
|
|
LDEC: DO BEGIN 11454000
|
|
IF L4[THM].LSCMP = "5?DECL" THEN GO SUCC; 11455000
|
|
END UNTIL THM ~ L4[THM].LSLNK = 0; 11456000
|
|
GO LOOP; 11457000
|
|
SUCC: IF THRUTOG THEN 11458000
|
|
IF TYPE=0 THEN SETINSERT 11459000
|
|
ELSE 11460000
|
|
SETPACK; 11461000
|
|
IF TOGGLE AND PACKLAST THEN HM ~ HM - 1; 11462000
|
|
THM ~ MOVER(L4[THM].LSCTR,L4[*], 11463000
|
|
8|THM+3,ARY,8|W+3,0); 11464000
|
|
ARY[W].CTR ~ THM-3; 11465000
|
|
GO EXIT; 11466000
|
|
LDFT: 11467000
|
|
IF NOT CONVERTTOG THEN BEGIN 11468000
|
|
ARY[W] ~ ADJUST(ARY[W]); 11469000
|
|
LNGTH ~ ARY[W].LSCTR; 11470000
|
|
END; 11471000
|
|
IF CONVERTTOG THEN 11472000
|
|
BEGIN 11473000
|
|
LNGTH~ LIMT; 11474000
|
|
W ~ ARY[W]; 11475000
|
|
IF HM+LNGTH+REAL(W<0) > MSMAX THEN 11476000
|
|
OVRFL 11477000
|
|
ELSE BEGIN 11478000
|
|
IF W<0 THEN BEGIN 11479000
|
|
P("-",ACCM[HM.WRD],HM.CHR); 11480000
|
|
HM ~ HM+1 END; 11481000
|
|
MOVEDEC(ABS(W),ACCM[HM.WRD], 11482000
|
|
HM.CHR,8-LNGTH,LNGTH,0); 11483000
|
|
END; 11484000
|
|
HM~ HM+LNGTH 11485000
|
|
END 11486000
|
|
ELSE 11487000
|
|
HM ~ MOVER(LNGTH,ARY,8|W+3,ACCM,HM,0); 11488000
|
|
CONVERTTOG~ LENGTHTOG~ FALSE; 11489000
|
|
ACCM[THM.LSBAK].LSLNK ~ THM; 11490000
|
|
ACCM[THM].LSCTR ~ LNGTH; 11491000
|
|
THM.LSBAK ~ THM; 11492000
|
|
THM.LSNXT ~ (HM+7).WRD; 11493000
|
|
HM ~ THM.LSNXT|8 + 3; 11494000
|
|
ACCM[THM] ~ " "; 11495000
|
|
EXIT: END LOADSCAN; 11496000
|
|
$ INCLUDE 11754001, IF ADVANCED; 11499999
|
|
COMMENT INUDICT ATTEMPTS TO LOCATE ENTRIES IN THE USER 11500000
|
|
DICTIONARY. AN ADDRESS IS RETURNED ONLY IF ALL SPECIFIED 11501000
|
|
QUALITIES & QUALIFIERS AGREE. QUALIFIERS ARE EXAMINED IN A 11502000
|
|
RECURSIVE MANNER; 11503000
|
|
INTEGER PROCEDURE INUDICT(L4,I); VALUE I; INTEGER I; ARRAY L4[0]; 11504000
|
|
BEGIN 11505000
|
|
INTEGER NW,D,LNG; 11506000
|
|
REAL A; 11507000
|
|
LABEL NEXT,CHECKPROPERTIES,LOOP,EXIT; 11508000
|
|
11509000
|
|
A ~ L4[I]; 11510000
|
|
NW ~ DLIST[(D~A.LSCMP)MOD 125+125]; 11511000
|
|
LNG ~ A.LSCTR; 11512000
|
|
IF NW } 0 THEN DO BEGIN 11513000
|
|
IF UDICT[NW.IR,NW.IC+2] = D THEN 11514000
|
|
IF COMPARE(UDICT[NW.IR,NW.IC+2],L4[I],0,0,LNG)=1 11515000
|
|
THEN GO CHECKPROPERTIES; 11516000
|
|
NEXT: END UNTIL NW ~ UDICT[NW.IR,NW.IC] < 0; 11517000
|
|
INUDICT ~ -1; 11518000
|
|
GO EXIT; 11519000
|
|
CHECKPROPERTIES: 11520000
|
|
D ~ I; 11521000
|
|
WHILE D ~ L4[D].LSLNK ! 0 DO BEGIN 11522000
|
|
IF BOOLEAN(A~L4[D]).MFDG THEN BEGIN 11523000
|
|
IF BOOLEAN(A).MFINT THEN BEGIN 11524000
|
|
FIELD ~ A; 11525000
|
|
FIELDTOG ~ TRUE; 11526000
|
|
COPE(UDICT[NW.IR,*],(LNG+10).WRD+NW.IC+A.MFOFF 11527000
|
|
+2,OIOPC,0); 11528000
|
|
IF L4[D+1] = IACCM THEN 11529000
|
|
GO LOOP 11530000
|
|
ELSE 11531000
|
|
GO NEXT; 11532000
|
|
END ELSE BEGIN 11533000
|
|
LENGTHTOG ~ TRUE; 11534000
|
|
TFC ~ A.MFBGN; 11535000
|
|
PL ~ A.MFLNG; 11536000
|
|
COPE(UDICT[NW.IR,*],(LNG+10).WRD+NW.IC+A.MFOFF 11537000
|
|
+2,OOPDC,0); 11538000
|
|
IF COMPARE(ACCM,L4[D+1],0,0,PL) = 1 THEN 11539000
|
|
GO LOOP 11540000
|
|
ELSE 11541000
|
|
GO NEXT; 11542000
|
|
END; 11543000
|
|
END MFIELDS; 11544000
|
|
D ~ INUDICT(L4,D); 11545000
|
|
IF D < 0 THEN 11546000
|
|
GO NEXT 11547000
|
|
ELSE BEGIN 11548000
|
|
INUDICT ~ NW+1; 11549000
|
|
GO EXIT; 11550000
|
|
END; 11551000
|
|
LOOP: END WHILE; 11552000
|
|
INUDICT ~ NW+1; 11553000
|
|
EXIT: 11554000
|
|
END INUDICT; 11555000
|
|
COMMENT ADUDICT ADDS ENTRIES TO THE USER DICTIONARY. 11600000
|
|
EVERYTHING USED IS TAKEN FROM LOCAL[4,*] AS STORED BY LDFT. 11601000
|
|
WORDS RESERVED BEYOND IDENTIFIER ARE INITIALLY ZEROES TO PROTECT 11602000
|
|
AGAINST FLAG BIT ERRORS. PROPERTIES & QUALIFIERS ARE ENTERED & 11603000
|
|
CHECKED. ANY ERRORS CAUSE ENTRY NOT TO BE ENTERED & TOGGLE TO BE 11604000
|
|
SET FALSE. UDICT ADDRESS RETURNED AS VALUE; 11605000
|
|
INTEGER PROCEDURE ADUDICT(L4); ARRAY L4[0]; 11606000
|
|
BEGIN 11607000
|
|
INTEGER LNG,NW,I,J,K,SZ; 11608000
|
|
LABEL EXIT; 11609000
|
|
LNG ~ (L4[2].CTR+10).WRD; 11610000
|
|
NW ~ DLIST[I~L4[2].LSCMP MOD 125+125]; 11611000
|
|
SZ ~ L4[1]; 11612000
|
|
IF (K~J~NXTUDICT).IC > 254-LNG-SZ THEN BEGIN 11613000
|
|
NXTUDICT ~ 0&(NXTUDICT+256)[IRTOIR]; 11614000
|
|
IF BLIST[BLVL+50] = J THEN 11615000
|
|
BLIST[BLVL+50] ~ NXTUDICT; 11616000
|
|
END; 11617000
|
|
J ~ NXTUDICT - LSTUDICT; 11618000
|
|
UPUT(NXTUDICT,NW); 11619000
|
|
MOVE(LNG,L4,UDICT[NXTUDICT.IR,NXTUDICT.IC+2]); 11620000
|
|
UPUT(NXTUDICT+1,0&SZ[TOUSIZ]&BLVL[TOBLKLVL]&J[TODIFF]); 11621000
|
|
J ~ NXTUDICT + LNG + 2; 11622000
|
|
IF SZ > 0 THEN BEGIN 11623000
|
|
UDICT[J.IR,J.IC] ~ 0; 11624000
|
|
IF SZ > 1 THEN 11625000
|
|
MOVE(SZ-1,UDICT[J.IR,J.IC],UDICT[J.IR,J.IC+1]); 11626000
|
|
END; 11627000
|
|
I ~ 0; 11628000
|
|
WHILE I ~ L4[I].LSLNK ! 0 DO BEGIN 11629000
|
|
IF BOOLEAN(A~L4[I]).MFDG THEN BEGIN % MFIELD 11630000
|
|
IF BOOLEAN(A).MFINT THEN BEGIN 11631000
|
|
FIELD ~ A; 11632000
|
|
FIELDTOG ~ TRUE; 11633000
|
|
IACCM ~ L4[I+1]; 11634000
|
|
COPE(UDICT[J.IR,*],J.IC+A.MFOFF,OISTR,0); 11635000
|
|
END ELSE BEGIN 11636000
|
|
IF ((LNG~L4[I+1].CTR)+10).WRD + 11637000
|
|
(FIELD~L4[I]).MFOFF > SZ THEN 11638000
|
|
OVRFL 11639000
|
|
ELSE 11640000
|
|
NW ~ MOVER(LNG+3,L4[*],(I+1)|8, 11641000
|
|
UDICT[J.IR,*],(J.IC+A.MFOFF)|8,0); 11642000
|
|
END; 11643000
|
|
END MFIELDS ELSE BEGIN % QUALIFIER 11644000
|
|
NW ~ INUDICT(L4[*],I+1); 11645000
|
|
IF NW > 0 THEN 11646000
|
|
UPUT(NXTUDICT+1,UGET(NXTUDICT+1)&NW[TOUQUAL]) 11647000
|
|
ELSE BEGIN 11648000
|
|
ERROR(99); % INVALID QUALIFIER 11649000
|
|
NXTUDICT ~ K; 11650000
|
|
ADUDICT ~ -1; 11651000
|
|
GO EXIT; 11652000
|
|
END; 11653000
|
|
END; 11654000
|
|
END WHILE LINKING; 11655000
|
|
ADUDICT ~ NXTUDICT + 1; 11656000
|
|
NXTUDICT ~ J + SZ + 1; 11657000
|
|
EXIT: 11658000
|
|
END ADUDICT; 11659000
|
|
COMMENT SEARCHUDICT IS USED FOR SERIAL SCANS OF THE USER 11700000
|
|
DICTIONARY. SEARCHING BEGINS AT THE ITEM AFTER THE ADDRESS 11701000
|
|
GIVEN BY THE POINTER IN L4[1]. VARIOUS CHECKS ARE MADE 11702000
|
|
ALONG THE WAY FOR QUALIFICATION & ATTRIBUTES OF THE 11703000
|
|
ENTRIES. NON-MATCHES ARE BYPASSED. 11704000
|
|
TOGGLE IS TRUE ONLY ON A VALID SEARCH: END-OF-DICTIONARY 11705000
|
|
IMPLIES NO MATCH & SETS TOGGLE FALSE; 11706000
|
|
INTEGER PROCEDURE SEARCHUDICT(L4); ARRAY L4[0]; 11707000
|
|
BEGIN 11708000
|
|
INTEGER START,D; 11709000
|
|
LABEL MORE,OK,LOOP,EXIT; 11710000
|
|
IF START ~ L4[1] = 0 THEN 11711000
|
|
START ~ 1 11712000
|
|
ELSE 11713000
|
|
MORE: START ~ (UGET(START+1).CTR+7).WRD + UGET(START).USIZ + 1; 11714000
|
|
IF START } NXTUDICT THEN BEGIN 11715000
|
|
START ~ -1; 11716000
|
|
GO EXIT; 11717000
|
|
END; 11718000
|
|
D ~ 0; 11719000
|
|
WHILE D ~ L4[D].LSLNK ! 0 DO BEGIN 11720000
|
|
IF BOOLEAN(A~L4[D]).MFDG THEN BEGIN 11721000
|
|
IF BOOLEAN(A).MFINT THEN BEGIN 11722000
|
|
FIELD ~ A; 11723000
|
|
FIELDTOG ~ TRUE; 11724000
|
|
COPE(UDICT[START.IR,*],(UGET(START+1).CTR+7).WRD + 11725000
|
|
A.MFOFF + START.IC + 2,OIOPC,0); 11726000
|
|
IF L4[D+1] = IACCM THEN 11727000
|
|
GO LOOP 11728000
|
|
ELSE 11729000
|
|
GO MORE; 11730000
|
|
END ELSE BEGIN 11731000
|
|
LENGTHTOG ~ TRUE; 11732000
|
|
TFC ~ A.MFBGN; 11733000
|
|
PL ~ A.MFLNG; 11734000
|
|
COPE(UDICT[START.IR,*],(UGET(START+1).CTR+7).WRD + 11735000
|
|
A.MFOFF + START.IC + 2,OOPDC,0); 11736000
|
|
IF COMPARE(ACCM,L4[D+1],0,0,PL) = 1 THEN 11737000
|
|
GO LOOP 11738000
|
|
ELSE 11739000
|
|
GO MORE; 11740000
|
|
END; 11741000
|
|
END MFIELDS; 11742000
|
|
IF D~INUDICT(L4,D) < 0 THEN 11743000
|
|
GO MORE 11744000
|
|
ELSE 11745000
|
|
GO OK; 11746000
|
|
LOOP: END WHILE; 11747000
|
|
OK: 11748000
|
|
ACCM[0] ~ " "; 11749000
|
|
HM ~ MOVER(UGET(START+1).CTR,UDICT[START.IR,*],8|START.IC+10, 11750000
|
|
ACCM,3,0); 11751000
|
|
EXIT: 11752000
|
|
SEARCHUDICT ~ START; 11753000
|
|
END SEARCHUDICT; 11754000
|
|
COMMENT BACK TO MACRON * * * * * * *; 12000000
|
|
LABEL COPEWITHIT,LITERALLY,IOPROCESS,LOADNSCAN, 12001000
|
|
MAKEACASEOFIT,LITC,SCN,SCNTYP,OACC,EXIT,AGAIN,TEST; 12002000
|
|
TEST: IF TOGGLE THEN 12003000
|
|
IF CR(ACCM[(HM-1).WRD],(HM-1).CHR) = " " THEN 12003050
|
|
HM ~ HM - 1; 12003100
|
|
IF NOT TOGGLE THEN 12004000
|
|
INSERT(HM.CHR,ACCM[HM.WRD]," ",1); 12005000
|
|
AGAIN: X~(EP~ X)+3; 12006000
|
|
OPCODE(LOCAL[2,EP.WRD],EP.CHR,OP,ADDR); 12007000
|
|
GOP ~ OP; GADR ~ ADDR; 12008000
|
|
IF IADDR!0 AND OP!OINT1 THEN BEGIN 12009000
|
|
IF ADDR~ IADDR>0 THEN 12010000
|
|
ADDR~ IADDR.REF; 12011000
|
|
LIMT ~ IADDR.LIM; IADDR~ 0; 12012000
|
|
END; 12013000
|
|
$ INCLUDE 12022001, IF DEBUGGING; 12013999
|
|
IF MONITER OR ACMLST THEN 12014000
|
|
IF PRINT THEN BEGIN 12015000
|
|
WRITE(PRINTER,15,ACCM[*]); 12016000
|
|
IF MONITER THEN 12017000
|
|
WRITE(PRINTER,MON2,EP,A~MNEMON[OP], 12018000
|
|
IF BOOLEAN(A).DBA THEN "A" ELSE "I", 12019000
|
|
IF BOOLEAN(A).DBMN THEN MNEMON[ADDR] ELSE ADDR 12020000
|
|
,T,TOGGLE,HM,OHM,IACCM,IACCM1); 12021000
|
|
END; 12022000
|
|
IF ADDR<0 THEN 12023000
|
|
IF BOOLEAN(MNEMON[OP]).ZACM THEN 12024000
|
|
GO OACC 12025000
|
|
ELSE 12026000
|
|
GO AGAIN; 12027000
|
|
IF OP { 20 THEN GO COPEWITHIT ELSE 12028000
|
|
IF OP { 35 THEN GO LITERALLY ELSE 12029000
|
|
IF OP { 40 THEN GO IOPROCESS ELSE 12030000
|
|
IF OP { 50 THEN GO LOADNSCAN ELSE 12031000
|
|
GO MAKEACASEOFIT; 12032000
|
|
12033000
|
|
COPEWITHIT: 12034000
|
|
$ INCLUDE 12034551, IF ADVANCED; 12034049
|
|
IF BOOLEAN(ADDR).UDCT THEN BEGIN 12034050
|
|
D ~ UGET(ADDR); 12034100
|
|
TEMP ~ (UGET(ADDR+1).CTR+10).WRD; 12034150
|
|
IF BOOLEAN(LIMT).MFDCT THEN 12034200
|
|
POS ~ (LIMT.MFLIM+10).WRD 12034250
|
|
ELSE 12034300
|
|
POS ~ D.USIZ - FIELD.MFOFF; 12034350
|
|
COPE(UDICT[ADDR.IR,*],ADDR.IC+TEMP+FIELD.MFOFF, 12034400
|
|
OP,POS); 12034450
|
|
GO AGAIN; 12034500
|
|
END; 12034550
|
|
IF BOOLEAN(MNEMON[OP]).MOVM THEN 12035000
|
|
IF ADDR } GALFBAS THEN 12036000
|
|
POS ~ (HOWLONG(SPACEMAP[(POS~ADDR-GALFBAS).D32+8], 12037000
|
|
POS.M32)+POS.M4)|64 12038000
|
|
ELSE 12039000
|
|
POS ~ (HOWLONG(SPACEMAP[ADDR.D32],ADDR.M32)+ADDR.M4)|64; 12040000
|
|
IF ADDR } CONSBAS THEN 12041000
|
|
COPE(LOCAL[1,*],ADDR-CONSBAS,OP,0) 12042000
|
|
ELSE 12043000
|
|
IF ADDR } GPTRBAS THEN 12044000
|
|
COPE(GPTR,ADDR-GPTRBAS,OP,0) 12045000
|
|
ELSE 12046000
|
|
IF ADDR } GINTBAS THEN 12047000
|
|
COPE(GINT,ADDR-GINTBAS,OP,0) 12048000
|
|
ELSE 12049000
|
|
IF ADDR } GALFBAS THEN 12050000
|
|
COPE(GLOBAL[(ADDR-GALFBAS).D4,*],ADDR.M4|64,OP,POS) 12051000
|
|
ELSE 12052000
|
|
IF ADDR } LPTRBAS THEN 12053000
|
|
COPE(LOCAL[6,*],ADDR-LPTRBAS,OP,0) 12054000
|
|
ELSE 12055000
|
|
IF ADDR } LINTBAS THEN 12056000
|
|
COPE(LOCAL[0,*],ADDR-LINTBAS,OP,0) 12057000
|
|
ELSE 12058000
|
|
COPE(LOCAL[ADDR.D4,*],ADDR.M4|64,OP,POS); 12059000
|
|
$ INCLUDE 12059301, IF DEBUGGING; 12059049
|
|
IF HM < 0 THEN BEGIN 12059050
|
|
OP ~ HM.REF; 12059100
|
|
ADDR ~ HM.OFFSET; 12059150
|
|
HM ~ HM.LIM + 3; 12059200
|
|
GO IOPROCESS; 12059250
|
|
END; 12059300
|
|
GO AGAIN; 12060000
|
|
12061000
|
|
LITERALLY: 12062000
|
|
CASE OP-21 OF BEGIN 12063000
|
|
IACCM ~ ADDR; % ILIT 12064000
|
|
IACCM ~ IACCM + ADDR; % ADDL 12065000
|
|
IACCM ~ IACCM - ADDR; % SUBL 12066000
|
|
IACCM ~ IACCM | ADDR; % MULL 12067000
|
|
IACCM ~ IACCM DIV ADDR; % DIVL 12068000
|
|
BEGIN LNGTH ~ 1; GO LITC END; % LT1C 12069000
|
|
BEGIN LNGTH ~ 2; GO LITC END; % LT2C 12070000
|
|
BEGIN % LT2S 12071000
|
|
HM ~ HM + 1; 12072000
|
|
LNGTH ~ 2; 12073000
|
|
GO LITC; 12074000
|
|
END; 12075000
|
|
ERROR(10); 12076000
|
|
ERROR(10); 12077000
|
|
ERROR(10); 12078000
|
|
ERROR(10); 12079000
|
|
ERROR(10); 12080000
|
|
END LITERAL CASE; 12081000
|
|
GO AGAIN; 12082000
|
|
12083000
|
|
LITC: 12084000
|
|
IF HM+LNGTH > MSMAX THEN 12085000
|
|
OVRFL 12086000
|
|
ELSE 12087000
|
|
M(ADDR,6,ACCM[HM.WRD],HM.CHR,0,0,LNGTH); 12088000
|
|
HM ~ HM + LNGTH; 12089000
|
|
GO AGAIN; 12090000
|
|
12091000
|
|
IOPROCESS: 12092000
|
|
CASE OP-36 OF BEGIN 12093000
|
|
BEGIN % INPT 12094000
|
|
PSEUDOREAD(ACCM,HM-2,0); 12095000
|
|
RESCANTOG ~ BOOLEAN(ADDR); 12096000
|
|
END; 12097000
|
|
BEGIN % OTPT 12098000
|
|
$ INCLUDE 12104001, IF ADVANCED; 12098999
|
|
IF ADDR ! 0 THEN BEGIN 12099000
|
|
IF GPTRBAS { ADDR { GPTRMAX THEN 12100000
|
|
LINKOUT(GPTR[*],ADDR-GPTRBAS) 12101000
|
|
ELSE 12102000
|
|
LINKOUT(LOCAL[6,*],ADDR-LPTRBAS); 12103000
|
|
IF INTERLIST THEN BEGIN 12103050
|
|
OP ~ OERRO; 12103100
|
|
ADDR ~ 3; 12103150
|
|
GO IOPROCESS; 12103200
|
|
END; 12103250
|
|
END ELSE 12104000
|
|
OHM ~ MOVER(HM-3,ACCM,3,OA,OHM,0) + 1; 12105000
|
|
END; 12106000
|
|
BEGIN % ERRO 12107000
|
|
ARRAY ERB[0:14]; 12108000
|
|
BLANK(ERB,0,14); 12109000
|
|
$ INCLUDE 12128001, IF ADVANCED; 12109999
|
|
IF 2 { ADDR { 14 THEN BEGIN % POST 12110000
|
|
IF ADDR = 3 THEN 12111000
|
|
WRITE(PRINTER) 12112000
|
|
ELSE 12113000
|
|
IF ADDR } 4 THEN 12114000
|
|
WRITE(PRINTER[ADDR-3]); 12115000
|
|
A ~ HM - I~3; 12116000
|
|
IF A > 0 THEN BEGIN 12117000
|
|
WHILE A } 72 DO BEGIN 12118000
|
|
MOV(1,8,ACCM[I.WRD],I.CHR,ERB,8); 12119000
|
|
A ~ A - 72; 12120000
|
|
I ~ I + 72; 12121000
|
|
WRITE(PRINTER,15,ERB[*]); 12122000
|
|
BLANK(ERB,0,14); 12123000
|
|
END; 12124000
|
|
MOV(A.C6,A,ACCM[I.WRD],I.CHR,ERB,8); 12125000
|
|
WRITE(PRINTER,15,ERB[*]); 12126000
|
|
END; 12127000
|
|
END ELSE 12128000
|
|
IF ADDR = 15 THEN BEGIN % RECOVER 12129000
|
|
WRITE(ERB[*],<"ATTEMPT TO USE INVALID MACRO:", 12130000
|
|
X65,4("******")>); 12130500
|
|
OHM ~ MOVER(A~GET(MADDR).CTR,DICT[MADDR.IR,*], 12131000
|
|
I~MADDR.IC|8+3,OA,OHM,0)+1; 12132000
|
|
A ~ MOVER(A,DICT[MADDR.IR,*],I,ERB,32,0); 12133000
|
|
MOVE(1,LINKS[1],ERB[11]); 12133500
|
|
WRITE(PRINTER,15,ERB[*]); 12134000
|
|
MOVE(1,LINKS[0],LINKS[1]); 12134500
|
|
GO EXIT; 12135000
|
|
$ INCLUDE 12135151, IF ADVANCED; 12135049
|
|
END ELSE 12135050
|
|
IF ADDR > 15 THEN BEGIN 12135100
|
|
ERRORLINK(ADDR-3); 12135150
|
|
END ELSE BEGIN % ERROR & WARNING 12136000
|
|
IF ADDR = 0 THEN ERRCT ~ ERRCT + 1 ELSE 12137000
|
|
IF NOT WARNTOG THEN GO OACC; 12138000
|
|
IF OP ~ GET(MADDR).CTR>78-D~HM-3 THEN 12139000
|
|
D~ 78-OP; 12140000
|
|
TRANS(ACCM,ERB,D.C6,D,OP,DICT[MADDR.IR, 12141000
|
|
MADDR.IC],EP,ERB[10],IF ADDR=0 THEN 12142000
|
|
" >>>>>>" ELSE " >NOTE>"); 12143000
|
|
MOVE(1,LINKS[1],ERB[11]); 12144000
|
|
MOVE(1,LINKS[0],LINKS[1]); 12145000
|
|
WRITE(PRINTER[DBL],15,ERB[*]); 12146000
|
|
END; 12147000
|
|
END ERROR STMT; 12148000
|
|
ERROR(10); 12149000
|
|
ERROR(10); 12150000
|
|
END IOPROCESS; 12151000
|
|
GO OACC; 12152000
|
|
12153000
|
|
LOADNSCAN: 12154000
|
|
CASE OP-41 OF BEGIN 12155000
|
|
BEGIN % LDFT 12156000
|
|
LABEL L; L: 12157000
|
|
IF NOT LOADING THEN BEGIN 12158000
|
|
LOADING ~ TRUE; 12159000
|
|
IF HM>3 THEN BEGIN 12160000
|
|
ACCM[0].CTR ~ HM - 3; 12161000
|
|
MOVE((HM+10).WRD,ACCM,LOCAL[5,*]); 12162000
|
|
HM ~ 3; 12163000
|
|
LOADING ~ <3>; 12164000
|
|
END; 12165000
|
|
TEMP~ 0; 12166000
|
|
END; 12167000
|
|
IF ADDR } CONSBAS THEN 12168000
|
|
LOADSCAN(LOCAL[1,*],ADDR-CONSBAS,TEMP,LOCAL[4,*],OP) 12169000
|
|
ELSE 12170000
|
|
IF ADDR } GINTBAS THEN 12171000
|
|
LOADSCAN(GINT,ADDR-GINTBAS,TEMP,LOCAL[4,*],OP) 12172000
|
|
ELSE 12173000
|
|
IF ADDR } GALFBAS THEN 12174000
|
|
LOADSCAN(GLOBAL[(ADDR-GALFBAS).D4,*],ADDR.M4|64,TEMP,LOCAL[4,*],OP) 12175000
|
|
ELSE 12176000
|
|
IF ADDR } LINTBAS THEN 12177000
|
|
LOADSCAN(LOCAL[0,*],ADDR-LINTBAS,TEMP,LOCAL[4,*],OP) 12178000
|
|
ELSE 12179000
|
|
IF ADDR } 2 THEN 12180000
|
|
LOADSCAN(LOCAL[ADDR.D4,*],ADDR.M4|64,TEMP,LOCAL[4,*],OP) 12181000
|
|
ELSE 12182000
|
|
IF ADDR = 1 THEN BEGIN 12183000
|
|
LOCAL[0,0] ~ IACCM; 12184000
|
|
LOADSCAN(LOCAL[0,*],0,TEMP,LOCAL[4,*],OP) 12185000
|
|
END ELSE BEGIN 12186000
|
|
ACCM[0].CTR ~ HM - 3; 12187000
|
|
LOADSCAN(ACCM[*],0,TEMP,LOCAL[4,*],OP); 12188000
|
|
END; 12189000
|
|
END; 12190000
|
|
GO SCN; % SUNC 12191000
|
|
GO SCN; % SUNS 12192000
|
|
GO SCN; % STHC 12193000
|
|
SCN: BEGIN LABEL L; L: % STHS 12194000
|
|
MOVE((HM+7).WRD,ACCM,LOCAL[4,*]); % SCAN POOL 12195000
|
|
IF LOADING.[46:1] THEN BEGIN 12196000
|
|
BLANK(ACCM[1],(HM~(HM+7).WRD-2).C6,HM); 12197000
|
|
ACCM[0] ~ " "; 12198000
|
|
HM ~ LOCAL[5,0].CTR + 3; 12199000
|
|
MOVE((HM+7).WRD,LOCAL[5,*],ACCM); 12200000
|
|
END ELSE HM ~ 3; 12201000
|
|
PACKLAST ~ 12201950
|
|
LOADING ~ FALSE; 12202000
|
|
IF ADDR } GALFBAS THEN 12203000
|
|
LOADSCAN(GLOBAL[(ADDR-GALFBAS).D4,*],ADDR.M4|64,TEMP,LOCAL[4,*],OP) 12204000
|
|
ELSE 12205000
|
|
LOADSCAN(LOCAL[ADDR.D4,*],ADDR.M4|64,TEMP,LOCAL[4,*],OP); 12206000
|
|
LOCAL[4,0] ~ 0; 12207000
|
|
END; 12208000
|
|
$ INCLUDE 12236001, IF ADVANCED; 12208999
|
|
BEGIN % ENTR 12209000
|
|
LOADING ~ FALSE; 12210000
|
|
MOVE((HM+7).WRD,ACCM,LOCAL[4,*]); 12211000
|
|
HM ~ 3; 12212000
|
|
ACCM[0] ~ " "; 12213000
|
|
TOGGLE ~ (IACCM~ADUDICT(LOCAL[4,*])) } 0; 12214000
|
|
LOCAL[4,0] ~ 0; 12215000
|
|
OP ~ OISTR; 12216000
|
|
GO COPEWITHIT; 12217000
|
|
END; 12218000
|
|
BEGIN % FIND 12219000
|
|
LOADING ~ FALSE; 12220000
|
|
MOVE((HM+7).WRD,ACCM,LOCAL[4,*]); 12221000
|
|
HM ~ 3; 12222000
|
|
ACCM[0] ~ " "; 12223000
|
|
TOGGLE ~ (IACCM~INUDICT(LOCAL[4,*],0)) } 0; 12224000
|
|
LOCAL[4,0] ~ 0; 12225000
|
|
OP ~ OISTR; 12226000
|
|
GO COPEWITHIT; 12227000
|
|
END; 12228000
|
|
BEGIN % SRCH 12229000
|
|
LOADING ~ FALSE; 12230000
|
|
MOVE((HM+7).WRD,ACCM,LOCAL[4,*]); 12231000
|
|
TOGGLE ~ (IACCM~SEARCHUDICT(LOCAL[4,*])) } 0; 12232000
|
|
LOCAL[4,0] ~ 0; 12233000
|
|
OP ~ OISTR; 12234000
|
|
GO COPEWITHIT; 12235000
|
|
END; 12236000
|
|
$ OMIT 12236151, IF ADVANCED; 12236049
|
|
ERROR(10); % ENTR 12236050
|
|
ERROR(10); % FIND 12236100
|
|
ERROR(10); % SRCH 12236150
|
|
ERROR(10); 12237000
|
|
ERROR(10); 12238000
|
|
END LOADNSCAN CASE; 12239000
|
|
GO AGAIN; 12240000
|
|
12241000
|
|
MAKEACASEOFIT: 12242000
|
|
CASE OP-51 OF BEGIN 12243000
|
|
SCNTYP: BEGIN LABEL L; L: % TYPC 12244000
|
|
CASE ADDR OF BEGIN 12245000
|
|
TOGGLE ~ EXPRESS(ATOG~FALSE); % BEXP 12246000
|
|
TOGGLE ~ SPCHAR(0); % CHARACTER 12247000
|
|
TOGGLE ~ ELEMENT; % ELEMENT 12248000
|
|
TOGGLE ~ EXPRESS(ATOG~TRUE); % AEXP 12249000
|
|
TOGGLE ~ IDENTIFIER; % IDENTIFIER 12250000
|
|
TOGGLE ~ STATE; % STATEMENT 12251000
|
|
TOGGLE ~ VARIABLE; % VARIABLE 12252000
|
|
TOGGLE ~ DECLARASHUN; % DECLARATION 12253000
|
|
TOGGLE ~ BPRIMARY; % BPRIMARY 12254000
|
|
TOGGLE ~ PRIMARY; % PRIMARY 12255000
|
|
;;;;;;;;;;;;;;; % OPEN FOR ALPHA ONLY 12256000
|
|
TOGGLE ~ NUMBER; % NUMBER 12257000
|
|
TOGGLE ~ INTGER; % INTGER 12258000
|
|
END SCAN TYPES CASE; 12259000
|
|
IF TOGGLE AND PACKLAST THEN % SUCCESS AND LAST=ALPHA 12259050
|
|
IF CHAR ! " " THEN % SPCHR LEFT OVER 12259100
|
|
IF TABLET + 2 = NXTELB THEN BEGIN % UNUSED 12259150
|
|
BC ~ -(BW~(TEMP~8|BW+BC-1).WRD)|8+TEMP; 12259200
|
|
NXTELB ~ NXTELB - 1 END; 12259300
|
|
GO TEST; 12260000
|
|
END; 12261000
|
|
BEGIN HM ~ HM + 1; GO SCNTYP END; % TYPS 12262000
|
|
BEGIN % SETL 12263000
|
|
$ INCLUDE 12279001, IF ADVANCED; 12263999
|
|
IF ADDR ! 0 THEN BEGIN 12264000
|
|
REAL OFFSET; 12265000
|
|
IF LINTBAS { ADDR { LINTMAX THEN BEGIN 12266000
|
|
ADDR ~ ADDR - LINTBAS + LPTRBAS; 12267000
|
|
OFFSET ~ 500; 12268000
|
|
END ELSE 12269000
|
|
IF GINTBAS { ADDR { GINTMAX THEN BEGIN 12270000
|
|
ADDR ~ ADDR - GINTBAS + GPTRBAS; 12271000
|
|
OFFSET ~ 500; 12272000
|
|
END; 12273000
|
|
IF GPTRBAS { ADDR { GPTRMAX THEN 12274000
|
|
LINKIN(GPTR[*],ADDR-GPTRBAS,IACCM,OFFSET) 12275000
|
|
ELSE 12276000
|
|
LINKIN(LOCAL[6,*],ADDR-LPTRBAS,IACCM,OFFSET); 12277000
|
|
OP ~ OOTPT; 12278000
|
|
ADDR ~ 0; 12278100
|
|
GO IOPROCESS; 12278200
|
|
END RESERVE; 12279000
|
|
PL ~ IACCM; 12280000
|
|
LENGTHTOG ~ TRUE; 12281000
|
|
END SETL; 12282000
|
|
BEGIN BOOLEAN TOG; % CONV 12283000
|
|
$ INCLUDE 12292001, IF INTERMEDIATE; 12283999
|
|
IF CONSBAS { ADDR { CONSMAX THEN BEGIN % MFIELD 12284000
|
|
FIELD ~ LOCAL[1,ADDR-CONSBAS]; 12285000
|
|
IF NOT FIELDTOG~BOOLEAN(FIELD.MFINT) THEN BEGIN 12286000
|
|
LENGTHTOG ~ TRUE; 12287000
|
|
IF BOOLEAN(FIELD).MFDCT THEN 12287100
|
|
IF (LIMT~FIELD).MFLNG=0 THEN LENGTHTOG~FALSE; 12287200
|
|
TFC ~ FIELD.MFBGN; 12288000
|
|
PL ~ FIELD.MFLNG; 12289000
|
|
END; 12290000
|
|
GO AGAIN; 12291000
|
|
END ELSE 12292000
|
|
IF CONVBAS { ADDR { 1023 THEN BEGIN 12293000
|
|
CASE ADDR-CONVBAS OF BEGIN 12294000
|
|
IACCM ~ IACCM DIV LOCAL[0,0]; % INTR & DIVIDE 12295000
|
|
IACCM ~ IACCM | LOCAL[0,0]; % INTR & MULTIPLY 12296000
|
|
IACCM ~ IACCM - LOCAL[0,0]; % INTR & SUBTRACT 12297000
|
|
IACCM ~ IACCM + LOCAL[0,0]; % INTR & ADD 12298000
|
|
IACCM ~ LOCAL[0,0]; % INTRINSIC CHANGE 12299000
|
|
IACCM ~ IACCM DIV ATOI;% ALF->INT & DIVIDE 12300000
|
|
IACCM ~ IACCM | ATOI; % ALF->INT & MULTIPLY 12301000
|
|
IACCM ~ IACCM - ATOI; % ALF->INT & SUBTRACT 12302000
|
|
IACCM ~ IACCM + ATOI; % ALF->INT & ADD 12303000
|
|
IACCM ~ ATOI; % ALF->INT CONVERT 12304000
|
|
BEGIN % INT->ALF CONVERT (8 CHR) 12305000
|
|
IF TOG~(IACCM<0) THEN 12306000
|
|
P("-",ACCM,3); 12307000
|
|
MOVEDEC(ABS(IACCM),ACCM,3+REAL(TOG),0,8,0); 12308000
|
|
HM ~ 11 + REAL(TOG); 12309000
|
|
GO AGAIN; 12310000
|
|
END; 12311000
|
|
IACCM1 ~ IACCM; % INT-INT COMPARE 12312000
|
|
BEGIN % ALF-INT COMPARE 12313000
|
|
IACCM1 ~ CONSTANTCONVERT(ACCM,IF A~HM-3-REAL( 12314000
|
|
A~CR(ACCM,3)="+" OR A="-") > 8 THEN 12315000
|
|
8 ELSE A); 12316000
|
|
END; 12317000
|
|
END CASE; 12318000
|
|
GO OACC; 12319000
|
|
END; 12320000
|
|
CONVERTTOG ~ TRUE; 12321000
|
|
LIMT ~ ADDR; 12322000
|
|
END CONV; 12323000
|
|
$ INCLUDE 12348001, IF ADVANCED; 12323999
|
|
BEGIN LABEL L; % INDC 12324000
|
|
IF ADDR{1 THEN BEGIN % TABLE SEARCH 12325000
|
|
ACCM[0].CTR ~ HM-3; 12326000
|
|
MOVE((HM+10).WRD,ACCM,IDENT[1]); 12327000
|
|
IACCM ~ -1; TOGGLE ~ FALSE; 12328000
|
|
IF INDICT<0 THEN BEGIN 12329000
|
|
ERROR(-75); 12330000
|
|
GO L; 12331000
|
|
END; 12332000
|
|
IF W.CLASS!VSTRINGNAME OR W.SUB>1 THEN BEGIN 12333000
|
|
ERROR(-76); 12334000
|
|
GO L; 12335000
|
|
END; 12336000
|
|
IF NOT(BOOLEAN(ADDR)EQV BOOLEAN(W.SUB))THEN 12337000
|
|
BEGIN ERROR(-77); GO L END; 12338000
|
|
IACCM ~ GET(LAD); TOGGLE~ TRUE; 12339000
|
|
GO OACC; 12340000
|
|
END LOOKUP A SEQUENCE; 12341000
|
|
IF(IADDR~IF LPTRBAS{ADDR{LPTRMAX THEN LOCAL[6,ADDR 12342000
|
|
-LPTRBAS] ELSE GPTR[ADDR-GPTRBAS])=0 THEN BEGIN 12343000
|
|
ERROR(-78); 12344000
|
|
IADDR ~ -1; 12345000
|
|
GO L; 12346000
|
|
END ELSE BEGIN 12347000
|
|
L: ADDR ~ 1; 12347100
|
|
OP ~ OERRO; 12347200
|
|
GO IOPROCESS; 12347300
|
|
END; 12347400
|
|
END; 12348000
|
|
$ OMIT 12348051, IF ADVANCED; 12348049
|
|
ERROR(10); % INDC 12348050
|
|
BEGIN % ICMP 12349000
|
|
IF ADDR } 64 THEN % INT-ALF COMPARE 12350000
|
|
IACCM~ CONSTANTCONVERT(ACCM[0],IF IACCM~ HM-3-REAL( 12351000
|
|
IACCM~CR(ACCM[0],3)="+" OR IACCM="-")>8 THEN 8 12352000
|
|
ELSE IACCM); 12353000
|
|
CASE ADDR.C7 OF BEGIN 12354000
|
|
TOGGLE~ IACCM1 = IACCM; 12355000
|
|
TOGGLE~ IACCM1 ! IACCM; 12356000
|
|
TOGGLE~ IACCM1 < IACCM; 12357000
|
|
TOGGLE~ IACCM1 { IACCM; 12358000
|
|
TOGGLE~ IACCM1 > IACCM; 12359000
|
|
TOGGLE~ IACCM1 } IACCM; 12360000
|
|
TOGGLE~ REAL(BOOLEAN(IACCM1)EQV BOOLEAN(IACCM))= 12360010
|
|
REAL(NOT FALSE); 12360020
|
|
END; 12361000
|
|
GO OACC; 12362000
|
|
END; 12363000
|
|
$ INCLUDE 12373901, IF ADVANCED; 12363999
|
|
IF ADDR < 256 THEN CASE ADDR OF BEGIN % TOGL 12364000
|
|
DEC ~ FALSE; 12365000
|
|
DEC ~ TRUE; 12366000
|
|
TOGGLE ~ DEC; 12366500
|
|
ERROR(-72); 12367000
|
|
CMT ~ TRUE; 12368000
|
|
TOGGLE ~ CMT; 12368500
|
|
ERROR(-72); 12369000
|
|
ENDT ~ TRUE; 12370000
|
|
TOGGLE ~ ENDT; 12370500
|
|
EQVTOG ~ FALSE; 12371000
|
|
EQVTOG ~ TRUE; 12372000
|
|
TOGGLE ~ EQVTOG; 12372050
|
|
END SYSTEM TOGGLES ELSE BEGIN 12373000
|
|
TEMP ~ ADDR.M4; 12373050
|
|
ADDR ~ (ADDR-256).D4; 12373100
|
|
IF TEMP = 0 THEN 12373150
|
|
USERTOG ~ NOT MASK(ADDR) AND USERTOG 12373200
|
|
ELSE 12373250
|
|
IF TEMP = 1 THEN 12373300
|
|
USERTOG ~ MASK(ADDR) OR USERTOG 12373350
|
|
ELSE 12373400
|
|
TOGGLE ~ REAL(MASK(ADDR) AND USERTOG) ! 0; 12373450
|
|
END USER TOGGLES; 12373500
|
|
$ OMIT 12373951, IF ADVANCED; 12373949
|
|
ERROR(10); 12373950
|
|
ERROR(10); 12374000
|
|
ERROR(10); 12375000
|
|
ERROR(10); 12376000
|
|
BEGIN % JMPC 12377000
|
|
LOCAL[3,0] ~ 0; 12378000
|
|
IF ADDR > MLMAX EQV TOGGLE THEN 12379000
|
|
X ~ ADDR.JADR; 12380000
|
|
END; 12381000
|
|
X ~ ADDR; % JUMP 12382000
|
|
BEGIN % INT1 12383000
|
|
LABEL LINC; 12384000
|
|
CASE ADDR-64 OF BEGIN 12385000
|
|
IACCM ~ BLVL-NEST-1; % OBGN 12386000
|
|
IACCM ~ IACCM+(BLVL-NEST-1); % +BGN 12387000
|
|
IACCM ~ IACCM-(BLVL-NEST-1); % -BGN 12388000
|
|
IACCM ~ IACCM|(BLVL-NEST-1); % |BGN 12389000
|
|
IACCM ~ IACCM DIV (BLVL-NEST-1); % /BGN 12390000
|
|
IACCM ~ BLOCKLEVEL-1; % OBLK 12391000
|
|
IACCM ~ IACCM+(BLOCKLEVEL-1); % +BLK 12392000
|
|
IACCM ~ IACCM-(BLOCKLEVEL-1); % -BLK 12393000
|
|
IACCM ~ IACCM|(BLOCKLEVEL-1); % |BLK 12394000
|
|
IACCM ~ IACCM DIV (BLOCKLEVEL-1); % /BLK 12395000
|
|
TFC ~ IACCM; % DIAL 12396000
|
|
LINC: BEGIN % LINC 12397000
|
|
IF HM+5 > MSMAX THEN 12398000
|
|
OVRFL 12399000
|
|
ELSE 12400000
|
|
MOVEDEC(RCCNT,ACCM[HM.WRD],HM.CHR,3,5,0); 12401000
|
|
HM ~ HM + 5; 12402000
|
|
END; 12403000
|
|
BEGIN HM ~ HM + 1; GO LINC END; % LINS 12404000
|
|
BEGIN % ENTI 12405000
|
|
ACCM[0].CTR ~ HM-3; 12406000
|
|
IF NOT TOGGLE~(LOCAL[0,0] ~ 12407000
|
|
SCANUMBERCONV(ACCM) } 0) THEN 12408000
|
|
ERROR(-8); 12409000
|
|
END; 12410000
|
|
LOCAL[0,0] ~ HM - 3; % LENG 12411000
|
|
BEGIN % RDCD 12412000
|
|
NXTELB ~ T+1; 12413000
|
|
READACARD; 12414000
|
|
NOREAD ~ FALSE; 12415000
|
|
END; 12416000
|
|
; % DELE 12417000
|
|
BEGIN % STCK 12418000
|
|
ACCM[0].CTR ~ HM-3; 12419000
|
|
STACKIT((HM+7).WRD,ACCM[*]); 12420000
|
|
END; 12421000
|
|
BEGIN % NSTK 12422000
|
|
UNSTACKIT(256,ACCM[*]); 12423000
|
|
HM ~ ACCM[0].CTR + 3; 12424000
|
|
END; 12425000
|
|
IACCM ~ T-BASE.CUR; % OSCT 12426000
|
|
IACCM ~ IACCM + (T-BASE.CUR); % +SCT 12427000
|
|
IACCM ~ IACCM - (T-BASE.CUR); % -SCT 12428000
|
|
IACCM ~ IACCM | (T-BASE.CUR); % |SCT 12429000
|
|
IACCM ~ IACCM DIV (T-BASE.CUR); % /SCT 12430000
|
|
$ INCLUDE 12433001, IF ADVANCED; 12430999
|
|
IACCM ~ UDICT[IADDR.IR,IADDR.IC].BLKLVL;% LEVL 12431000
|
|
IACCM ~ UDICT[IADDR.IR,IADDR.IC].UQUAL;% QUAL 12432000
|
|
COPE(UDICT[IADDR.IR,*],IADDR.IC+1,OOPDC,0);%NAME 12433000
|
|
$ OMIT 12433151, IF ADVANCED; 12433049
|
|
ERROR(10); % LEVL 12433050
|
|
ERROR(10); % QUAL 12433100
|
|
ERROR(10); % NAME 12433150
|
|
GO EXIT; % EXIT 12434000
|
|
END INT1 CASES; 12435000
|
|
IF BOOLEAN(MNEMON[ADDR]).ZACM THEN 12436000
|
|
GO OACC 12437000
|
|
ELSE 12438000
|
|
GO AGAIN; 12439000
|
|
END INT1; 12440000
|
|
END MAKEACASEOFIT; 12441000
|
|
GO AGAIN; 12442000
|
|
OACC: 12443000
|
|
ACCM[0] ~ " "; 12444000
|
|
$ INCLUDE 12446001, IF DEBUGGING; 12444999
|
|
IF MONITER OR ACMLST THEN 12445000
|
|
BLANK(ACCM[1],0,13); 12446000
|
|
HM ~ 3; 12447000
|
|
PACKLAST ~ FALSE; 12447100
|
|
GO AGAIN; 12448000
|
|
EXIT: 12449000
|
|
END; 12450000
|
|
PSEUDOREAD(OA,OHM-3+REAL(OHM=3),0); 13000000
|
|
RECALLIT; 13001000
|
|
MACT~ MACT-1; 13002000
|
|
IF MACT } 1 THEN BEGIN % RECALL STACKED MACRO 13003000
|
|
UNSTACKIT(256,LOCAL[0,*]); 13004000
|
|
POS ~ (X~LOCAL[0,254]).LIM; 13005000
|
|
A ~ LOCAL[0,255]; 13006000
|
|
READIT(LOCAL[2,*],A.MML,POS,MCODE); 13007000
|
|
READIT(LOCAL[1,*],A.MPOOL,POS,MCODE); 13008000
|
|
READIT(SPACEMAP,X.MSMAP,POS,MCODE); 13009000
|
|
FOR D~(A.MLACT+3).D4 STEP -1 UNTIL 7 DO BEGIN 13010000
|
|
UNSTACKIT(256,LOCAL[D,*]); 13011000
|
|
END; 13011200
|
|
IF X.MLOCT ! 0 THEN BEGIN 13012000
|
|
UNSTACKIT(A.MLOCT,LOCAL[6,*]); 13013000
|
|
END; 13013200
|
|
IF X~LOCAL[0,252].REF ! 0 THEN BEGIN 13014000
|
|
UNSTACKIT(X,LOCAL[3,*]); 13015000
|
|
END; 13015200
|
|
IF X~LOCAL[0,252].LIM ! 0 THEN BEGIN 13016000
|
|
UNSTACKIT(X,LOCAL[4,*]); 13017000
|
|
END; 13017200
|
|
IF X~LOCAL[0,253].REF ! 0 THEN BEGIN 13018000
|
|
UNSTACKIT(X,ACCM[*]); 13019000
|
|
END; 13019200
|
|
IF X~LOCAL[0,253].LIM ! 0 THEN BEGIN 13020000
|
|
UNSTACKIT(X,OA[*]); 13021000
|
|
END; 13021200
|
|
END; 13022000
|
|
ATOG~ TATOG; 13023000
|
|
TOGGLE ~ TTOG; 13023050
|
|
$ INCLUDE 13024001, IF DEBUGGING; 13023999
|
|
IF TRACE THEN TRACER(FALSE); 13024000
|
|
INDENT ~ INDENT - 3; 13024050
|
|
MADDR~ TMADDR; 13025000
|
|
FIELD ~ TFIELD; 13026000
|
|
HM ~ THM; 13027000
|
|
OHM ~ TOHM; 13028000
|
|
END MACRON; 13029000
|
|
13030000
|
|
END MACROINTERPRETER; 13031000
|
|
COMMENT MACRO COMPILER SECTION. CODE IS EMITTED AS 3-CHR SYLLABLES. 15000000
|
|
THE FIRST CHR IS THE OP CODE (RANGE 0->63). THE NEXT 2 CHR ARE 15001000
|
|
THE ADDRESS FIELD (RANGE 0->4095); 15002000
|
|
PROCEDURE MACRO(Q); VALUE Q; REAL Q; 15003000
|
|
BEGIN 15004000
|
|
PROCEDURE MULTIASSIGNMENT(A,B,C,D); VALUE A,B,C,D; 15005000
|
|
INTEGER A,B,C; REAL D; FORWARD; 15006000
|
|
PROCEDURE ASSIGNMENT(O,A); VALUE O,A; INTEGER O,A; FORWARD; 15007000
|
|
PROCEDURE STATEMENT; FORWARD; 15008000
|
|
PROCEDURE IASSIGNMENT(O,A); VALUE O,A; INTEGER O,A; FORWARD; 15009000
|
|
COMMENT OPCODE DIALS INTO A CODE STRING & SPLITS NEXT 15010000
|
|
INSTRUCTION INTO ITS OPCODE & ADDRESS COMPONENTS; 15011000
|
|
STREAM PROCEDURE OPCODE(W,C,O,A); 15012000
|
|
VALUE C; 15013000
|
|
BEGIN 15014000
|
|
DI~O; SI~W; SI~SI+C; DI~DI+7; DS~CHR; 15015000
|
|
DI~A; DS~6 LIT "0"; DS~2 CHR; 15016000
|
|
END; 15017000
|
|
COMMENT LASTCODE CHECKS PREVIOUS OPERATION FOR EQUALITY 15018000
|
|
WITH PARAMETERS. TRUE USUALLY INDICATES THAT CODE OPTIMIZATION 15019000
|
|
CAN TAKE PLACE; 15020000
|
|
BOOLEAN PROCEDURE LASTCODE(OP,ADDR); 15021000
|
|
VALUE ADDR, OP; 15022000
|
|
INTEGER OP, ADDR; 15023000
|
|
BEGIN 15024000
|
|
INTEGER LASTADDR, LASTOP; 15025000
|
|
OPCODE(MC[(ML-3).WRD],(ML-3).CHR,LASTOP,LASTADDR); 15026000
|
|
LASTCODE ~ LASTOP=OP AND LASTADDR=ADDR AND NOJUMP; 15027000
|
|
NOJUMP~ TRUE; 15028000
|
|
END LASTCODE; 15029000
|
|
COMMENT DOCODE IS CODE EMITTER. CHECKS ARE MADE TO SEE IF 15030000
|
|
CERTAIN CONSTANT OPERANDS CAN BE MADE INTO LITERAL VALUES TO 15031000
|
|
REDUCE EXECUTION TIME. DUPLICATE CONSTANTS ARE PREVENTED; 15032000
|
|
PROCEDURE DOCODE(C,A); 15033000
|
|
VALUE C, A; 15034000
|
|
INTEGER C, A; 15035000
|
|
BEGIN 15036000
|
|
STREAM PROCEDURE MACODE(O,A,W,C); 15037000
|
|
VALUE A,O,C; 15038000
|
|
BEGIN 15039000
|
|
DI~W; DI~DI+C; SI~LOC O; SI~SI+7; DS~CHR; 15040000
|
|
IF SC!"+" THEN BEGIN SI~SI+6; DS~2 CHR END; 15041000
|
|
END; 15042000
|
|
LABEL DOIT,DONT,ANYWAY; 15043000
|
|
BOOLEAN B; 15044000
|
|
ALPHA F; 15045000
|
|
IF C < 0 THEN BEGIN 15046000
|
|
C ~ ABS(C); 15047000
|
|
I ~ IF BOOLEAN(F~IDENT[1]).MFDG THEN 15048000
|
|
5 ELSE F.CTR; 15049000
|
|
GO ANYWAY; 15050000
|
|
END; 15051000
|
|
IF NOT (B~BOOLEAN(MNEMON[C])).MCON THEN GO DOIT; 15052000
|
|
IF A } CONSBAS THEN 15053000
|
|
BEGIN 15054000
|
|
I ~ IDENT[1].CTR; 15055000
|
|
IF A = CONSMAX THEN 15056000
|
|
BEGIN 15057000
|
|
IF NOT B.MINT THEN BEGIN 15058000
|
|
IF I=0 THEN GO DONT; 15059000
|
|
IF I > 2 THEN GO ANYWAY; 15060000
|
|
C ~ IF I=2 THEN OLT2C + REAL(C=OOPDS) 15061000
|
|
ELSE IF C=OOPDS THEN OLT2C ELSE OLT1C; 15062000
|
|
IF I=1 AND C=OLT2C THEN 15063000
|
|
A ~ IDENT[1].C3 & " "[TOC6] 15064000
|
|
ELSE 15065000
|
|
A ~ IDENT[1].C34; 15066000
|
|
GO DOIT; 15067000
|
|
END 15068000
|
|
ELSE 15069000
|
|
IF I>8 THEN ERROR(84) ELSE 15070000
|
|
IF A ~ CONSTANTCONVERT(IDENT[1],I)<4096 THEN 15071000
|
|
BEGIN 15072000
|
|
C ~ C-OIOPC+OILIT; % CHR TO LIT SYL 15073000
|
|
ML ~ ML - 3; % COVER CONV SYL 15074000
|
|
GO DOIT; 15075000
|
|
END; 15076000
|
|
END; 15077000
|
|
ANYWAY: A ~ 0; 15078000
|
|
WHILE A<CONP DO BEGIN 15079000
|
|
V ~ IF BOOLEAN(F~COMCON[A]).MFDG THEN 15080000
|
|
5 ELSE F.CTR; 15081000
|
|
IF I = V THEN 15082000
|
|
IF COMPARE(IDENT[1],COMCON[A],I.C5,I 15083000
|
|
.C6,I)=1 THEN 15084000
|
|
A ~ A + CONSBAS 15085000
|
|
ELSE 15086000
|
|
A ~ A+(V+10).WRD 15087000
|
|
ELSE 15088000
|
|
A ~ A+(V+10).WRD; 15089000
|
|
END; 15090000
|
|
IF A < CONSBAS THEN 15091000
|
|
IF CONP+I~(I+10).WRD > 256 THEN 15092000
|
|
BEGIN 15093000
|
|
ERROR(11); 15094000
|
|
A ~ CONSBAS; 15095000
|
|
END 15096000
|
|
ELSE 15097000
|
|
BEGIN 15098000
|
|
A ~ CONSBAS+CONP; 15099000
|
|
MOVE(I, IDENT[1], COMCON[CONP]); 15100000
|
|
CONP~ CONP+I 15101000
|
|
END; 15102000
|
|
END; 15103000
|
|
DOIT: 15104000
|
|
IF ML > MLMAX THEN 15105000
|
|
BEGIN 15106000
|
|
ERROR(12); 15107000
|
|
ML ~ 3; 15108000
|
|
MACODE(OINT1,OEXIT,MC[0],0); 15109000
|
|
END; 15110000
|
|
MACODE(C,A,MC[ML.WRD],ML.CHR); 15111000
|
|
$ INCLUDE 15115001, IF DEBUGGING; 15111999
|
|
IF DBUGN THEN 15112000
|
|
WRITE(PRINTER,DEBUG,ML,F~MNEMON[C], 15113000
|
|
IF BOOLEAN(F).DBA THEN "A" ELSE "I", 15114000
|
|
IF BOOLEAN(F).DBMN THEN MNEMON[A] ELSE A); 15115000
|
|
ML ~ ML+3; 15116000
|
|
DONT: 15117000
|
|
END; 15118000
|
|
PROCEDURE RECOVER; 15119000
|
|
DO STEPI UNTIL (TYPE=0 AND (ELB=";" OR ELB=",")) 15120000
|
|
OR (TYPE=VOTHERS AND (I~ELB.SUB=ENDV OR I=THENV 15121000
|
|
OR I=ELSEV)); 15122000
|
|
COMMENT CLNGENT COMPILES LENGTH & ENTIER FUNCTIONS. A CHECK 15200000
|
|
IS MADE TO SEE IF PREVIOUS OPERATOR CLEARED ACCM. IF NOT A STACK 15201000
|
|
AND UNSTACK IS REQUIRED TO SAVE ITS CONTENTS; 15202000
|
|
PROCEDURE CLNGENT(OP); VALUE OP; INTEGER OP; 15203000
|
|
BEGIN 15204000
|
|
BOOLEAN P; 15205000
|
|
INTEGER W,O; 15206000
|
|
STEPI; 15207000
|
|
IF ELB!"(" THEN 15208000
|
|
ERROR(13); 15209000
|
|
DECOMTOG~ TRUE; 15210000
|
|
OPCODE(MC[(ML-3).WRD],(ML-3).CHR,W,O); 15211000
|
|
IF P~NOT(BOOLEAN(MNEMON[IF W=OINT1 THEN O ELSE W].ZACM)) THEN 15212000
|
|
DOCODE(OINT1,OSTCK); 15213000
|
|
MULTIASSIGNMENT(OINT1,0&OP[TOREF],0,0); 15214000
|
|
IF P THEN DOCODE(OINT1,ONSTK); 15215000
|
|
DECOMTOG~ FALSE; 15216000
|
|
IF ELB!")" THEN 15217000
|
|
ERROR(14); 15218000
|
|
END; 15219000
|
|
$ INCLUDE 15450001, IF INTERMEDIATE; 15299999
|
|
COMMENT FIELDIT PROCESSES LEFTPART MFIELD DESIGNATORS. 15300000
|
|
EXPLICIT PARTIAL ALPHA MSTRINGS ARE NOT ALLOWED. A DICTIONARY 15301000
|
|
MSTRING OVERRIDES ANY OFFSET CARRIED WITH THE FIELD. A SIMPLE 15302000
|
|
MSTRING SETS THE OFFSET TO ZERO; 15303000
|
|
REAL PROCEDURE FIELDIT(SAVA,TYP); VALUE SAVA,TYP; 15304000
|
|
REAL SAVA,TYP; 15305000
|
|
BEGIN 15306000
|
|
REAL F; 15307000
|
|
LABEL EXIT; 15308000
|
|
IF STEPI!VMFIELDID AND TYPE!0 AND ELB!"[" THEN BEGIN 15309000
|
|
ERROR(102); 15309500
|
|
T ~ T - 1; 15310000
|
|
GO EXIT; 15311000
|
|
END; 15312000
|
|
IF NOT(BOOLEAN(ELB.SUB) EQV BOOLEAN(TYP))AND TYP!6 THEN BEGIN 15313000
|
|
ERROR(101); % MFIELD MODE DISAGREEMENT 15314000
|
|
GO EXIT; 15315000
|
|
END; 15316000
|
|
F ~ GET(LAD); 15317000
|
|
IF TYP = 6 THEN 15318000
|
|
ITOG ~ BOOLEAN(TEMP~ELB.SUB) 15319000
|
|
ELSE 15320000
|
|
IF 4 { TYP { 5 THEN BEGIN 15321000
|
|
F ~ F & SAVA.OFFSET[TOMFOFF] & 1[TOMFDCT]; 15321500
|
|
IF TYP~SAVA.LIM-REAL(TYP=4) = 0 THEN TYP ~ 4095; 15322000
|
|
F ~ F & TYP[TOMFLIM]; 15322500
|
|
END ELSE 15323000
|
|
IF TYP < 4 THEN 15324000
|
|
F ~ F & 0[TOMFOFF]; 15325000
|
|
FIELDIT ~ F; 15326000
|
|
EXIT: 15327000
|
|
END FIELDIT; 15328000
|
|
COMMENT PARTIALWORD COMPILES CODE FOR INLINE PARTIAL 15400000
|
|
MSTRING REQUESTS. THE PROCESS CONSISTS OF COMPUTING A STARTING 15401000
|
|
CHR & "DIALING" THE INFO IN, THEN COMPUTING THE # OF CHR TO 15402000
|
|
TRANSFER & "SETTING LENGTH". SNAZZY PROGRAMMERS CAN OMIT 15403000
|
|
COMPUTING THE DIAL BY ENTERING "*" FOR THE EXPRESSION. THE VALUE 15404000
|
|
IS KEPT UNTIL AN MFIELD OR RECURSION ALTERS IT; 15405000
|
|
PROCEDURE PARTIALWORD; 15406000
|
|
BEGIN 15407000
|
|
LABEL EXIT; 15408000
|
|
IF PWT THEN 15409000
|
|
ERROR(52); 15410000
|
|
PWT~ TRUE; 15411000
|
|
IF STEPI = VMFIELDID THEN BEGIN 15412000
|
|
IF NOT(BOOLEAN(ELB.SUB)EQV ITOG)AND TEMP!6 THEN BEGIN 15413000
|
|
ERROR(101); % MFIELD MODE DISAGREEMENT 15414000
|
|
RECOVER; 15415000
|
|
T ~ T - 1; 15416000
|
|
GO EXIT; 15417000
|
|
END; 15418000
|
|
IDENT[1] ~ GET(LAD); 15419000
|
|
IF 4 { TEMP { 5 THEN 15420000
|
|
IDENT[1].MFOFF ~ SAVEA.OFFSET 15421000
|
|
ELSE 15422000
|
|
IF TEMP < 4 THEN 15423000
|
|
IDENT[1].MFOFF ~ 0; 15424000
|
|
DOCODE(-OCONV,0); 15425000
|
|
GO EXIT; 15426000
|
|
END; 15427000
|
|
IF TYPE!VSPECIAL OR ELB!"[" THEN 15428000
|
|
BEGIN 15429000
|
|
ERROR(15); 15430000
|
|
RECOVER; T~ T-1; GO EXIT; END; 15431000
|
|
LENGTHTOG~ TRUE; 15432000
|
|
IF STEPI=VSPECIAL AND ELB="*" THEN 15433000
|
|
STEPI 15434000
|
|
ELSE 15435000
|
|
BEGIN 15436000
|
|
T~ T-1; 15437000
|
|
IASSIGNMENT(OINT1,ODIAL); 15438000
|
|
END; 15439000
|
|
IF ELB!":" THEN 15440000
|
|
ERROR(16); 15441000
|
|
IASSIGNMENT(OSETL, 0); 15442000
|
|
IF ELB!"]" THEN 15443000
|
|
BEGIN 15444000
|
|
ERROR(17); 15445000
|
|
T~ T-1; END; 15446000
|
|
EXIT: 15447000
|
|
LENGTHTOG~ FALSE; 15448000
|
|
PWT~ FALSE; 15449000
|
|
END PARTIALWORD; 15450000
|
|
COMMENT CHECKMSTRING CHECKS AND VERIFIES THE POSSIBLE 15500000
|
|
FORMATS OF MSTRING SYNTAX. THE RESULT IS AN ADDRESS, LIMIT, & 15501000
|
|
OFFSET IN SAVEA AND A SUBCLASS IN ITOG & TEMP. THE PARAMETER 15502000
|
|
DETERMINES IF SUBFIELD CODE IS TO BE EMITTED IN-LINE; 15503000
|
|
PROCEDURE CHECKMSTRING(LEFT); VALUE LEFT; BOOLEAN LEFT; 15504000
|
|
BEGIN 15505000
|
|
LABEL EXIT; 15506000
|
|
ITOG ~ BOOLEAN(TEMP~ELB.SUB); 15507000
|
|
SAVEA ~ GET(LAD); 15508000
|
|
CFIELD ~ 0; 15509000
|
|
IF STEPI = VSPECIAL THEN BEGIN 15510000
|
|
$ INCLUDE 15526001, IF ADVANCED; 15510999
|
|
IF ELB = "(" THEN BEGIN % OFFSET TO DICTIONARY MPOINTER 15511000
|
|
IF NOT(4{TEMP{5) THEN BEGIN 15512000
|
|
ERROR(98); % NO DICTIONARY MSTRING 15513000
|
|
GO EXIT; 15514000
|
|
END; 15515000
|
|
IF STEPI ! VSTRINGNAME OR ELB.SUB ! 6 THEN BEGIN 15516000
|
|
ERROR(99); % NO DICTIONARY MPOINTER 15517000
|
|
GO EXIT; 15518000
|
|
END; 15519000
|
|
SAVEA ~ SAVEA & GET(LAD)[REFTOREF]; 15520000
|
|
IF STEPI ! VSPECIAL OR ELB ! ")" THEN BEGIN 15521000
|
|
ERROR(69); 15522000
|
|
T ~ T - 1; 15523000
|
|
END; 15524000
|
|
IF STEPI!VSPECIAL OR ELB!"." THEN BEGIN 15524050
|
|
CFIELD ~ -0 & 1[TOMFDCT] & SAVEA[TOMFLIM]; 15524500
|
|
T ~ T - 1; 15524600
|
|
GO EXIT; 15524700
|
|
END; 15525000
|
|
END DICTIONARY OFFSET; 15526000
|
|
$ INCLUDE 15535001, IF INTERMEDIATE; 15526999
|
|
IF ELB = "." THEN BEGIN % PARTIAL FIELD DESIGNATOR 15527000
|
|
IF LEFT THEN % MAKE DESCRIPTOR 15528000
|
|
CFIELD ~ FIELDIT(SAVEA,TEMP) 15529000
|
|
ELSE BEGIN % EMIT CODE 15530000
|
|
CFIELD ~ 0; 15531000
|
|
PARTIALWORD; 15532000
|
|
END; 15533000
|
|
GO EXIT; 15534000
|
|
END PARTIAL FIELD; 15535000
|
|
END; 15536000
|
|
T ~ T - 1; 15537000
|
|
EXIT: 15538000
|
|
END CHECKMSTRING; 15539000
|
|
COMMENT MULTIASSIGNMENT IS RESPONSIBLE FOR MODE AGREEMENTS 15600000
|
|
BETWEEN ITEMS IN THE LEFT PART LIST EMITTING CONVERTS WHERE 15601000
|
|
REQUIRED. ANALYSIS IS RECURSIVE TO PERMIT RIGHT TO LEFT 15602000
|
|
ASSIGNMENTS. RIGHTMOST RECEIVER DETERMINES MODE OF SEQUENCE; 15603000
|
|
PROCEDURE MULTIASSIGNMENT(OP,ADDR,MODE,MFIELD); 15604000
|
|
VALUE OP,ADDR,MODE,MFIELD; 15605000
|
|
INTEGER OP,ADDR,MODE; REAL MFIELD; 15606000
|
|
BEGIN 15607000
|
|
LABEL EXIT; 15608000
|
|
INTEGER TOP,TADDR,TMODE,TFIELD,I; 15609000
|
|
I ~ T; 15610000
|
|
IF STEPI=VSTRINGNAME THEN BEGIN 15611000
|
|
CHECKMSTRING(TRUE); 15612000
|
|
TADDR ~ SAVEA; 15613000
|
|
TMODE ~ TEMP; 15614000
|
|
TFIELD ~ CFIELD; 15615000
|
|
IF STEPI=0 AND ELB="~" THEN BEGIN 15616000
|
|
TOP~ IF BOOLEAN(TMODE) THEN OISTR ELSE ONSTR; 15617000
|
|
MULTIASSIGNMENT(TOP,TADDR,TMODE,TFIELD); 15618000
|
|
IF NOT(BOOLEAN(MODE) EQV BOOLEAN(TMODE)) THEN 15619000
|
|
DOCODE(OCONV,1021-MODE.[47:1]); 15620000
|
|
$ INCLUDE 15622001, IF ADVANCED; 15620999
|
|
IF MODE}2 THEN 15621000
|
|
DOCODE(OINDC,ADDR.REF); 15622000
|
|
$ INCLUDE 15624001, IF INTERMEDIATE; 15622999
|
|
IF IDENT[1]~MFIELD ! 0 THEN 15623000
|
|
DOCODE(-OCONV,0); 15624000
|
|
DOCODE(OP,ADDR.REF); 15625000
|
|
GO EXIT; 15626000
|
|
END; 15627000
|
|
END; 15628000
|
|
T ~ I; 15629000
|
|
$ INCLUDE 15634001, IF ADVANCED; 15629999
|
|
IF MODE}2 THEN 15630000
|
|
BEGIN 15631000
|
|
TOP~ OP; 15632000
|
|
OP~ OINDC; 15633000
|
|
END; 15634000
|
|
IF BOOLEAN(MODE) THEN 15635000
|
|
IASSIGNMENT(OP,ADDR.REF) 15636000
|
|
ELSE 15637000
|
|
ASSIGNMENT(OP,ADDR.REF); 15638000
|
|
$ INCLUDE 15638501, IF INTERMEDIATE; 15638099
|
|
IF BOOLEAN(IDENT[1]~MFIELD).MFDG THEN BEGIN 15638100
|
|
ML ~ ML - 3; 15638200
|
|
DOCODE(-OCONV,0); 15638300
|
|
DOCODE(OP,ADDR.REF); 15638400
|
|
END; 15638500
|
|
$ INCLUDE 15643001, IF ADVANCED; 15638999
|
|
IF MODE } 2 AND NOT NOJUMP.[46:1] THEN BEGIN 15639000
|
|
DOCODE(TOP,ADDR.REF); 15642000
|
|
END; 15643000
|
|
EXIT: 15644000
|
|
END MULTIASSIGNMENT; 15645000
|
|
COMMENT BOOLEANEX COMPILES THE CODE FOR THE BOOLEAN 16000000
|
|
EXPRESSION OF A CONDITIONAL EXPRESSION. A CERTAIN AMOUNT OF 16001000
|
|
OPTIMIZATION OCCURS DEPENDING ON THE LEFT & RIGHT SEQUENCES. 16002000
|
|
MIXED MODE COMPARISONS RESULT IN INTEGER COMPARES FOR NUMERICAL 16003000
|
|
ACCURACY. IF RIGHT SEQ IS SIMPLE MSTRING, DIRECT COMPARE TO 16004000
|
|
MSTRING RESULTS. OTHERWISE ACCM IS MOVE TO JUNK & REVERSE 16005000
|
|
COMPARISON IS MADE WITH JUNK AFTER RIGHT SEQ IS EVALUATED; 16006000
|
|
PROCEDURE BOOLEANEX; 16007000
|
|
BEGIN 16008000
|
|
LABEL NEQ,LSS,LEQ,GTR,GEQ,EQL,IAS,AS,EXIT,RIGHTPART,E,IAS1,AS1, 16009000
|
|
AS2; 16010000
|
|
BOOLEAN INTEGERCOMPARE; 16011000
|
|
INTEGER OP; 16012000
|
|
INTEGER I; 16013000
|
|
SWITCH SW~GTR,GEQ,E,E,E,E,E,E,E,E,E,E,E,E,E,E,LSS,E,E,E,E,E,E,E, 16014000
|
|
E,E,E,E,E,E,E,E,E,LEQ,E,E,E,E,E,E,E,E,E,E,E,E,NEQ, 16015000
|
|
EQL; 16016000
|
|
BOOLEANEXTOG~ TRUE; 16017000
|
|
I ~ T; 16018000
|
|
IF STEPI=VSTRINGNAME THEN BEGIN 16019000
|
|
CHECKMSTRING(TRUE); 16020000
|
|
IF ITOG THEN % INTEGER MSTRING OR MPOINTER 16021000
|
|
BEGIN 16022000
|
|
IF STEPI=0 AND ELB="~" THEN 16023000
|
|
MULTIASSIGNMENT(OISTR,SAVEA,TEMP,CFIELD) 16024000
|
|
ELSE BEGIN 16025000
|
|
T ~ I; 16026000
|
|
IAS: IASSIGNMENT(0,0); 16027000
|
|
ML~ ML-3; 16028000
|
|
END; 16029000
|
|
INTEGERCOMPARE~ TRUE; 16030000
|
|
END 16031000
|
|
ELSE BEGIN 16032000
|
|
IF STEPI=0 AND ELB="~" THEN 16033000
|
|
MULTIASSIGNMENT(ONSTR,SAVEA,TEMP,CFIELD) 16034000
|
|
ELSE BEGIN 16035000
|
|
T ~ I; 16036000
|
|
AS: ASSIGNMENT(0,0); 16037000
|
|
ML~ ML-3; 16038000
|
|
END; 16039000
|
|
END 16040000
|
|
END ELSE BEGIN 16041000
|
|
T~ T-1; 16042000
|
|
IF TYPE=VNUMBER THEN 16043000
|
|
GO IAS; 16044000
|
|
IF TYPE=VMACRORES THEN BEGIN 16045000
|
|
IF (I~ELB.SUB) = TOGGLEM THEN BEGIN 16046000
|
|
$ INCLUDE 16047401, IF ADVANCED; 16046099
|
|
IF STEPI=VSPECIAL AND ELB="(" THEN BEGIN 16046100
|
|
LABEL ER; 16046200
|
|
IF STEPI=VNUMBER AND ELB.SUB=INTEGERV THEN BEGIN 16046300
|
|
IF I~CONSTANTCONVERT(IDENT[1],COUNT)>35 THEN 16046350
|
|
BEGIN ERROR(108); GO ER END; 16046400
|
|
DOCODE(OTOGL,4|I+258); 16046450
|
|
END ELSE BEGIN 16046500
|
|
IF TYPE!VMACRORES OR I~ELB.SUB<200 THEN BEGIN 16046550
|
|
ERROR(42); 16046600
|
|
ER: RECOVER; 16046650
|
|
GO EXIT; 16046700
|
|
END; 16046750
|
|
DOCODE(OTOGL,(I-200)|3+2); 16046800
|
|
IF STEPI!VSPECIAL OR ELB!")" THEN BEGIN 16046900
|
|
ERROR(69); 16047000
|
|
GO ER; 16047100
|
|
END; 16047200
|
|
T ~ T + 1; 16047300
|
|
END END; 16047400
|
|
$ OMIT 16047501, IF ADVANCED; 16047499
|
|
T ~ T + 1; 16047500
|
|
GO EXIT; 16048000
|
|
END ELSE 16049000
|
|
$ INCLUDE 16049471, IF ADVANCED; 16049009
|
|
IF I = EQUIVM THEN BEGIN 16049010
|
|
LABEL ER; 16049020
|
|
IF STEPI!VSPECIAL OR ELB!"(" THEN BEGIN 16049030
|
|
ERROR(68); 16049040
|
|
ER: RECOVER; 16049050
|
|
GO EXIT; 16049060
|
|
END; 16049070
|
|
IF STEPI!VSTRINGNAME OR (ELB.SUB).[46:1]=0 THEN 16049080
|
|
BEGIN ERROR(104); GO ER; END; 16049090
|
|
DOCODE(OIOPC,GET(LAD).REF); 16049100
|
|
DOCODE(OCONV,1022); 16049110
|
|
IF STEPI!VSPECIAL OR ELB!"," THEN BEGIN 16049120
|
|
ERROR(34); 16049130
|
|
GO ER; 16049140
|
|
END; 16049150
|
|
IF STEPI!VSTRINGNAME OR (ELB.SUB).[46:1]=0 THEN 16049160
|
|
BEGIN ERROR(104); GO ER; END; 16049170
|
|
DOCODE(OIOPC,GET(LAD).REF); 16049180
|
|
DOCODE(OICMP,6); 16049190
|
|
IF STEPI!VSPECIAL OR ELB!")" THEN BEGIN 16049200
|
|
ERROR(69); 16049210
|
|
GO ER; 16049220
|
|
END; 16049230
|
|
T ~ T + 1; 16049240
|
|
GO EXIT; 16049250
|
|
END ELSE 16049260
|
|
IF I = NULLM THEN BEGIN 16049270
|
|
LABEL ER; 16049280
|
|
BOOLEAN B; 16049290
|
|
IF B~(STEPI=VSPECIAL AND ELB="(") THEN STEPI; 16049300
|
|
IF TYPE!VSTRINGNAME OR (ELB.SUB).[46:1]=0 THEN 16049310
|
|
BEGIN ERROR(104); 16049320
|
|
ER: RECOVER; 16049330
|
|
GO EXIT; 16049340
|
|
END; 16049350
|
|
DOCODE(OIOPC,GET(LAD).REF); 16049360
|
|
DOCODE(OCONV,1022); 16049370
|
|
DOCODE(OILIT,0); 16049380
|
|
DOCODE(OICMP,6); 16049390
|
|
IF B THEN 16049400
|
|
IF STEPI!VSPECIAL OR ELB!")" THEN BEGIN 16049410
|
|
ERROR(69); 16049420
|
|
GO ER; 16049430
|
|
END; 16049440
|
|
T ~ T + 1; 16049450
|
|
GO EXIT; 16049460
|
|
END ELSE 16049470
|
|
IF 50{I{74 OR 125{I{149 THEN 16050000
|
|
GO IAS 16051000
|
|
ELSE 16052000
|
|
IF 75{I{124 THEN 16053000
|
|
GO AS; 16054000
|
|
ERROR(42); 16055000
|
|
STEPI; 16056000
|
|
END; 16057000
|
|
GO AS; 16058000
|
|
END; 16059000
|
|
IF TYPE =VOTHERS THEN BEGIN 16060000
|
|
IF ELB.SUB=THENV THEN BEGIN 16061000
|
|
DOCODE(OINT1,ODELE); 16062000
|
|
T~ T-1; 16063000
|
|
IF INTEGERCOMPARE THEN 16063800
|
|
IF TOGGLECT = 0 THEN 16063850
|
|
ERROR(19) 16063900
|
|
ELSE ELSE 16063950
|
|
IF TOGGLECT > 1 THEN 16064000
|
|
ERROR(-70); 16065000
|
|
GO EXIT; 16066000
|
|
END; 16067000
|
|
GO E; 16068000
|
|
END ; 16069000
|
|
IF TYPE! 0 THEN GO E; 16070000
|
|
GO SW[ELB-13]; 16071000
|
|
E: ERROR(19); 16072000
|
|
EQL: OP~0; GO RIGHTPART; 16073000
|
|
NEQ: OP~1; GO RIGHTPART; 16074000
|
|
LSS: OP~2; GO RIGHTPART; 16075000
|
|
LEQ: OP~3; GO RIGHTPART; 16076000
|
|
GTR: OP~4; GO RIGHTPART; 16077000
|
|
GEQ: OP~5; 16078000
|
|
RIGHTPART: 16079000
|
|
IF STEPI=VSTRINGNAME THEN BEGIN 16080000
|
|
I ~ T - 1; 16081000
|
|
CHECKMSTRING(TRUE); 16082000
|
|
IF ITOG THEN BEGIN 16083000
|
|
DOCODE(OCONV,1023-REAL(INTEGERCOMPARE)); 16084000
|
|
IF STEPI=0 AND ELB="~" THEN BEGIN 16085000
|
|
MULTIASSIGNMENT(OISTR,SAVEA,TEMP,CFIELD); 16086000
|
|
T~ T-1; 16087000
|
|
DOCODE(OICMP,OP); 16088000
|
|
GO EXIT; 16089000
|
|
END 16090000
|
|
ELSE BEGIN 16091000
|
|
T ~ I; 16092000
|
|
IAS1: IASSIGNMENT(OICMP,OP); 16093000
|
|
T~ T-1; 16094000
|
|
GO EXIT; 16095000
|
|
END; 16096000
|
|
END 16097000
|
|
ELSE BEGIN 16098000
|
|
IF INTEGERCOMPARE THEN BEGIN 16099000
|
|
DOCODE(OCONV,1022); 16100000
|
|
IF STEPI=0 AND ELB="~" THEN BEGIN 16101000
|
|
MULTIASSIGNMENT(ONSTR,SAVEA,TEMP,CFIELD); 16102000
|
|
DOCODE(OICMP,OP+64); 16103000
|
|
T~ T-1; 16104000
|
|
GO EXIT; 16105000
|
|
END 16106000
|
|
ELSE BEGIN 16107000
|
|
T ~ I; 16108000
|
|
AS1: ASSIGNMENT(OICMP,OP+64); 16109000
|
|
T~ T-1; 16110000
|
|
GO EXIT; 16111000
|
|
END 16112000
|
|
END ELSE 16113000
|
|
IF STEPI=VOTHERS AND ELB.SUB= THENV THEN BEGIN 16114000
|
|
DOCODE(RELOP[OP],SAVEA.REF); 16115000
|
|
T~ T-1; 16116000
|
|
GO EXIT; 16117000
|
|
END 16118000
|
|
ELSE BEGIN 16119000
|
|
DOCODE(ODSTR,12); 16120000
|
|
IF TYPE=0 AND ELB="~" THEN BEGIN 16121000
|
|
MULTIASSIGNMENT(ONSTR,SAVEA,TEMP,CFIELD); 16122000
|
|
DOCODE(RELOP[OP+CREV],12); 16123000
|
|
T~ T-1; 16124000
|
|
GO EXIT; 16125000
|
|
END; 16126000
|
|
T ~ I; 16127000
|
|
AS2: ASSIGNMENT(RELOP[OP+CREV],12); 16128000
|
|
T~ T-1; 16129000
|
|
GO EXIT; 16130000
|
|
END; 16131000
|
|
END END VSTRINGNAME; 16131100
|
|
IF TYPE = VSTRING THEN 16132000
|
|
IF STEPI = VOTHERS AND ELB.SUB = THENV THEN BEGIN 16133000
|
|
T ~ T - 2; 16134000
|
|
STEPI; % REGAIN ALPHA 16135000
|
|
DOCODE(-RELOP[OP],CONSMAX); 16136000
|
|
GO EXIT; 16137000
|
|
END ELSE T ~ T - 1; 16138000
|
|
% END END; 16139000
|
|
T~ T-1; 16140000
|
|
IF TYPE = VNUMBER OR (TYPE = VMACRORES AND 16141000
|
|
(50{I~ELB.SUB{74 OR 125{I{149)) THEN BEGIN 16142000
|
|
DOCODE(OCONV,1023-REAL(INTEGERCOMPARE)); 16143000
|
|
GO IAS1; 16144000
|
|
END; 16145000
|
|
IF INTEGERCOMPARE THEN BEGIN 16146000
|
|
DOCODE(OCONV,1022); 16147000
|
|
GO AS1; 16148000
|
|
END; 16149000
|
|
DOCODE(ODSTR,12); 16150000
|
|
GO AS2; 16151000
|
|
EXIT: BOOLEANEXTOG~ FALSE; 16152000
|
|
END BOOLEANEX; 16153000
|
|
COMMENT CONDITIONAL COMPILES THE CODE FOR -IF- STMTS BY 16200000
|
|
DIRECTING OTHER COMPILER SECTIONS TO GAIN RECURSIVE ABILITY. 16201000
|
|
OPTIMIZATION FOR MISSING THEN STATEMENTS IS ATTEMPTED, BUT THIS 16202000
|
|
RESTRICTS MACRO ADDRESSING TO 2047 CHARACTERS OF CODE; 16203000
|
|
PROCEDURE CONDITIONAL; 16204000
|
|
BEGIN 16205000
|
|
INTEGER ADDR, D; 16206000
|
|
LABEL ELSEIT,NOTQUITE; 16207000
|
|
BOOLEAN CT,B; 16208000
|
|
INTEGER OP; 16209000
|
|
CT ~ COND; 16210000
|
|
COND ~ TRUE; 16211000
|
|
BOOLEANEX; 16212000
|
|
D~ ML; 16213000
|
|
DOCODE(OJMPC,0); 16214000
|
|
IF STEPI!VOTHERS OR ELB.SUB!THENV THEN 16215000
|
|
ERROR(25); 16216000
|
|
STEPI; 16217000
|
|
STATEMENT; 16218000
|
|
NOJUMP~ FALSE; 16219000
|
|
OP ~ OJUMP; 16220000
|
|
IF B~(D+3=ML AND ELB.SUB=ELSEV) THEN BEGIN % THEN-ELSE 16221000
|
|
OP ~ OJMPC; 16222000
|
|
GO ELSEIT; 16223000
|
|
END ELSE 16224000
|
|
IF D+6 = ML THEN BEGIN % CHECK FOR SIMPLE GO TO 16225000
|
|
OPCODE(MC[(ML-3).WRD],(ML-3).CHR,I,ADDR); 16226000
|
|
IF I = OJUMP AND ADDR < MLMAX THEN BEGIN % NON-FWD JUMP 16227000
|
|
B ~ TRUE; 16228000
|
|
D ~ MLMAX; 16229000
|
|
ML ~ ML - 6; 16230000
|
|
DOCODE(OJMPC,ADDR+2048); 16231000
|
|
END ELSE GO NOTQUITE; 16232000
|
|
END ELSE BEGIN % NORMAL JUMP CONDITIONAL 16233000
|
|
NOTQUITE: 16234000
|
|
ADDR ~ REAL(ELB.SUB=ELSEV)|3 + ML; 16235000
|
|
ML ~ D; 16236000
|
|
DOCODE(OJMPC,ADDR); 16237000
|
|
ML ~ ADDR; 16238000
|
|
END; 16239000
|
|
IF ELB.SUB=ELSEV THEN 16240000
|
|
BEGIN 16241000
|
|
IF NOT B THEN D ~ ML-3; 16242000
|
|
ELSEIT: STEPI; 16243000
|
|
STATEMENT; 16244000
|
|
NOJUMP~ FALSE; 16245000
|
|
ADDR ~ ML; 16246000
|
|
ML ~ D; 16247000
|
|
DOCODE(OP,REAL(OP=OJMPC)|2048+ADDR); 16248000
|
|
ML ~ ADDR; 16249000
|
|
END; 16250000
|
|
COND~ CT; 16251000
|
|
END CONDITIONAL; 16252000
|
|
COMMENT UNCONDITIONAL GENERATES CODE FOR -GO TO- STMTS. 16300000
|
|
LABELS WHICH HAVE NOT BEEN PLACED NOR DECLARED ARE DECLARED. 16301000
|
|
IF NOT PLACED, THE JUMP SYLLABLES ARE LINKED WITH THE LAST 16302000
|
|
CODE SYLLABLE LINK PLACED IN WORD[N+1] OF THE DICT ENTRY; 16303000
|
|
PROCEDURE UNCONDITIONAL; 16304000
|
|
BEGIN 16305000
|
|
INTEGER ADDR; 16306000
|
|
IF STEPI=VOTHERS AND ELB.SUB=TOV THEN 16307000
|
|
STEPI; 16308000
|
|
IF TYPE!VALGOLIDENT OR ELB.SUB!LABELV OR MCBL>ELB.BLKLVL 16309000
|
|
THEN BEGIN 16310000
|
|
PUT(LAD~GET(ADDICT(VALGOLIDENT,LABELV)).ADINFO,-0); 16311000
|
|
NEXTDICT~ NEXTDICT+1; 16312000
|
|
END; 16313000
|
|
IF BOOLEAN(ADDR~GET(LAD)).PNOTT THEN 16314000
|
|
PUT(LAD,-ML); 16315000
|
|
DOCODE(OJUMP,ABS(ADDR)&ADDR[36:1:1]); 16316000
|
|
STEPI 16317000
|
|
END UNCONDITIONAL; 16318000
|
|
$ INCLUDE 16508001, IF ADVANCED; 16399999
|
|
COMMENT USERDICT COMPILES THE LOAD-FOR-TEST SEQUENCE FOR 16400000
|
|
ENTER, FIND, & SEARCH. QUALIFICATION IS PERFORMED 16401000
|
|
BY RECURSION; 16402000
|
|
PROCEDURE USERDICT(CODE,AD); VALUE CODE,AD; INTEGER CODE,AD; 16403000
|
|
BEGIN 16404000
|
|
INTEGER ENDAD,ENDFIELD,F,TT; 16405000
|
|
LABEL ERR,EXIT; 16406000
|
|
IF CODE = OSRCH THEN BEGIN 16407000
|
|
IF STEPI ! VSPECIAL OR ELB ! "(" THEN BEGIN 16408000
|
|
ERROR(68); 16409000
|
|
GO ERR; 16410000
|
|
END; 16411000
|
|
IF STEPI ! VSTRINGNAME OR ELB.SUB ! 6 THEN BEGIN 16412000
|
|
ERROR(99); 16413000
|
|
GO ERR; 16414000
|
|
END; 16415000
|
|
DOCODE(OIOPC,GET(LAD).REF); 16416000
|
|
DOCODE(OLDFT,1); 16417000
|
|
IF STEPI ! VSPECIAL OR ")"!ELB!"," THEN BEGIN 16418000
|
|
ERROR(34); 16419000
|
|
GO ERR; 16420000
|
|
END; 16421000
|
|
IF ELB = "," THEN BEGIN 16422000
|
|
IF STEPI ! VSTRINGNAME OR BOOLEAN(ELB.SUB) THEN BEGIN 16423000
|
|
ERROR(37); 16424000
|
|
GO ERR; 16425000
|
|
END; 16426000
|
|
CHECKMSTRING(TRUE); 16427000
|
|
ENDAD ~ SAVEA & TEMP[TOLIM]; 16428000
|
|
ENDFIELD ~ CFIELD; 16429000
|
|
IF STEPI ! VSPECIAL OR ELB ! ")" THEN BEGIN 16430000
|
|
ERROR(69); 16431000
|
|
GO ERR; 16432000
|
|
END; 16433000
|
|
END COMMACHECK; 16434000
|
|
END SEARCH HANDLING ELSE 16435000
|
|
IF CODE = OENTR THEN BEGIN 16436000
|
|
IF STEPI ! VSPECIAL OR ELB ! "(" THEN BEGIN 16437000
|
|
ERROR(68); 16438000
|
|
GO ERR; 16439000
|
|
END; 16440000
|
|
IASSIGNMENT(OLDFT,1); 16441000
|
|
IF TYPE ! VSPECIAL OR ELB ! ")" THEN BEGIN 16442000
|
|
ERROR(69); 16443000
|
|
GO ERR; 16444000
|
|
END; 16445000
|
|
END; 16446000
|
|
ASSIGNMENT(OLDFT,0); 16447000
|
|
WHILE STEPI = VSPECIAL AND ELB = "(" DO BEGIN 16448000
|
|
F ~ 0; 16449000
|
|
IF STEPI = VSTRINGNAME AND (4{TEMP~ELB.SUB{5) THEN BEGIN 16450000
|
|
A ~ GET(LAD).OFFSET; 16451000
|
|
IF STEPI ! VSPECIAL OR ELB ! "." THEN BEGIN 16452000
|
|
ERROR(81); 16453000
|
|
GO ERR; 16454000
|
|
END; 16455000
|
|
IF STEPI ! VMFIELDID THEN BEGIN 16456000
|
|
ERROR(102); % MISSING MFIELD DESIGNATOR 16457000
|
|
GO ERR; 16458000
|
|
END; 16459000
|
|
F ~ GET(LAD) & A[TOMFOFF]; 16460000
|
|
END ELSE 16461000
|
|
IF TYPE = VMFIELDID THEN 16462000
|
|
F ~ GET(LAD) 16463000
|
|
ELSE BEGIN 16464000
|
|
ERR: DO RECOVER UNTIL TYPE!0 OR ELB!","; 16465000
|
|
GO EXIT; 16466000
|
|
END; 16467000
|
|
IF STEPI ! VSPECIAL OR ELB ! "=" THEN BEGIN 16468000
|
|
ERROR(61); 16469000
|
|
GO ERR; 16470000
|
|
END; 16471000
|
|
IF BOOLEAN(TT~TEMP) THEN 16472000
|
|
IASSIGNMENT(0,0) 16473000
|
|
ELSE 16474000
|
|
ASSIGNMENT(0,0); 16475000
|
|
ML ~ ML - 3; 16476000
|
|
IDENT[1] ~ F & 1[TOMFVN]; 16477000
|
|
DOCODE(-OCONV,0); 16478000
|
|
DOCODE(OLDFT,TT.[47:1]); 16479000
|
|
IF STEPI ! VSPECIAL OR ELB ! ")" THEN BEGIN 16480000
|
|
ERROR(69); 16481000
|
|
GO ERR; 16482000
|
|
END; 16483000
|
|
END FIELD CHECKS; 16484000
|
|
T ~ T - 1; 16485000
|
|
WHILE STEPI = VSPECIAL AND ELB = "[" DO BEGIN 16486000
|
|
USERDICT(0,0); 16487000
|
|
IF STEPI ! VSPECIAL OR ELB ! "]" THEN BEGIN 16488000
|
|
ERROR(36); 16489000
|
|
GO ERR; 16490000
|
|
END; 16491000
|
|
END QUALIFIER SEQUENCE; 16492000
|
|
IF CODE = 0 THEN BEGIN % RECURSED 16493000
|
|
T ~ T - 1; 16494000
|
|
GO EXIT; 16495000
|
|
END; 16496000
|
|
DOCODE(CODE,AD); 16497000
|
|
IF CODE = OSRCH THEN 16498000
|
|
IF ENDAD ! 0 THEN BEGIN 16499000
|
|
IF BOOLEAN(ENDAD).[46:1] THEN 16500000
|
|
DOCODE(OINDC,ENDAD.REF); 16501000
|
|
IF IDENT[1]~ENDFIELD ! 0 THEN 16502000
|
|
DOCODE(-OCONV,0); 16503000
|
|
DOCODE(ODSTR,ENDAD.REF); 16504000
|
|
END ELSE 16505000
|
|
DOCODE(OINT1,ODELE); 16506000
|
|
EXIT: 16507000
|
|
END USERDICT; 16508000
|
|
COMMENT IASSIGNMENT IS RESPONSIBLE FOR COMPILING CODE FOR 16509000
|
|
ANYTHING IN AN INTEGER SEQUENCE. AFTER COMPILING THE CODE, THE 16510000
|
|
PARAMETERS ARE EMITTED TO EFFECT THE ACTION OF THE STATEMENT; 16511000
|
|
PROCEDURE IASSIGNMENT(O,AD); 16512000
|
|
VALUE O, AD; 16513000
|
|
INTEGER O, AD; 16514000
|
|
BEGIN 16515000
|
|
LABEL AGAIN,EXIT,DONE,SKIP,LEVL,QUAL; 16516000
|
|
LABEL RSRV,RSRVSTMT,ENTR,FIND,SRCH,LINE,NTIER,LNGTH, 16517000
|
|
BGN,BLK,SCT,NUMBER,INTGER,MATH,INT,OOPS,E; 16518000
|
|
SWITCH ISTMT ~ RSRV,RSRVSTMT,ENTR,FIND,SRCH,LEVL,QUAL; 16519000
|
|
SWITCH IANDA ~ LINE,NTIER,LNGTH,E,E,E,E,E,E,E,BGN,BLK,SCT; 16520000
|
|
SWITCH ISCAN ~ NUMBER,INTGER; 16521000
|
|
INTEGER OP,ADDR; 16522000
|
|
$ INCLUDE 16523001, IF ADVANCED; 16522999
|
|
BOOLEAN RST; 16523000
|
|
LABEL DC; 16524000
|
|
TOGGLECT ~ 0; 16524050
|
|
OP ~ OIOPC; 16525000
|
|
AGAIN: IF STEPI = VMACRORES THEN BEGIN 16526000
|
|
IF 25 { I~ELB.SUB { 49 THEN 16527000
|
|
GO ISTMT[I-24] 16528000
|
|
ELSE 16529000
|
|
IF 50 { I { 74 THEN 16530000
|
|
GO IANDA[I-49] 16531000
|
|
ELSE 16532000
|
|
IF 125 { I { 149 THEN 16533000
|
|
GO ISCAN[I-124]; 16534000
|
|
OOPS: E: ERROR(42); 16535000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 16536000
|
|
GO EXIT; 16537000
|
|
RSRVSTMT: 16538000
|
|
$ INCLUDE 16544001, IF ADVANCED; 16538999
|
|
IF RST ~ LPTRBAS { AD { LPTRMAX THEN 16539000
|
|
AD ~ AD - LPTRBAS + LINTBAS 16540000
|
|
ELSE 16541000
|
|
IF RST ~ GPTRBAS { AD { GPTRMAX THEN 16542000
|
|
AD ~ AD - GPTRBAS + GINTBAS 16543000
|
|
ELSE GO OOPS; 16544000
|
|
RSRV: 16545000
|
|
$ INCLUDE 16555001, IF ADVANCED; 16545999
|
|
IF NOT RST THEN 16546000
|
|
IF NOT(LPTRBAS{AD{LPTRMAX OR GPTRBAS{AD{GPTRMAX)THEN 16547000
|
|
GO OOPS; 16548000
|
|
IF STEPI ! 0 OR ELB ! "(" THEN 16549000
|
|
ERROR(68); 16550000
|
|
IASSIGNMENT(OSETL,AD); 16551000
|
|
IF TYPE ! 0 OR ELB ! ")" THEN 16552000
|
|
ERROR(69); 16553000
|
|
STEPI; 16554000
|
|
NOJUMP ~ <2>; 16554100
|
|
GO EXIT; 16555000
|
|
ENTR: FIND: SRCH: 16556000
|
|
$ INCLUDE 16558001, IF ADVANCED; 16556999
|
|
USERDICT(I-ENTERM+OENTR,AD); 16557000
|
|
TOGGLECT ~ TOGGLECT + 1; 16557050
|
|
NOJUMP ~ <2>; 16557100
|
|
GO EXIT; 16558000
|
|
LEVL: QUAL: 16559000
|
|
$ INCLUDE 16568001, IF ADVANCED; 16559999
|
|
IF STEPI ! VSPECIAL OR ELB ! "(" THEN GO OOPS; 16560000
|
|
IF STEPI ! VSTRINGNAME OR ELB.SUB ! 6 THEN BEGIN 16561000
|
|
ERROR(99); 16562000
|
|
GO EXIT; 16563000
|
|
END; 16564000
|
|
DOCODE(OINDC,GET(LAD).REF); 16565000
|
|
DOCODE(OINT1,IF I=LEVELM THEN OLEVL ELSE OQUAL); 16566000
|
|
IF STEPI ! VSPECIAL OR ELB ! ")" THEN GO OOPS; 16567000
|
|
GO MATH; 16568000
|
|
$ OMIT 16568151, IF ADVANCED; 16568049
|
|
ERROR(111); 16568050
|
|
RECOVER; 16568100
|
|
GO EXIT; 16568150
|
|
LINE: DOCODE(OINT1,OLINC); 16569000
|
|
MATH: DOCODE(OCONV,1020-OP+OIOPC); 16570000
|
|
GO SKIP; 16571000
|
|
$ INCLUDE 16577001, IF INTERMEDIATE; 16571999
|
|
IF TRUE THEN BEGIN 16572000
|
|
NTIER: CLNGENT(OENTI); 16572500
|
|
TOGGLECT ~ TOGGLECT + 1; 16573000
|
|
END ELSE 16574000
|
|
LNGTH: CLNGENT(OLENG); 16575000
|
|
DOCODE(OCONV,1015-OP+OIOPC); 16576000
|
|
GO SKIP; 16577000
|
|
$ OMIT 16577101, IF INTERMEDIATE; 16577049
|
|
NTIER: LNGTH: 16577050
|
|
GO OOPS; 16577100
|
|
BGN: ADDR ~ OBGNL + OP - OIOPC; 16578000
|
|
GO INT; 16579000
|
|
BLK: ADDR ~ OBLKL + OP - OIOPC; 16580000
|
|
GO INT; 16581000
|
|
SCT: ADDR ~ OSCNT + OP - OIOPC; 16582000
|
|
INT: DOCODE(OINT1,ADDR); 16583000
|
|
GO SKIP; 16584000
|
|
INTGER: NUMBER: 16585000
|
|
$ OMIT 16585051, IF INTERMEDIATE; 16585049
|
|
IF I=INTGERM THEN GO OOPS; 16585050
|
|
DOCODE(OTYPC,I-100); 16586000
|
|
TOGGLECT ~ TOGGLECT + 1; 16586050
|
|
GO MATH; 16587000
|
|
END VMACRORES; 16588000
|
|
IF TYPE = VSTRINGNAME THEN 16589000
|
|
CHECKMSTRING(FALSE) ELSE 16590000
|
|
IF TYPE ! VNUMBER AND (TYPE!VSTRINGNAME OR NOT ITOG) THEN 16591000
|
|
BEGIN 16592000
|
|
T~ T-1; 16593000
|
|
ERROR(27); 16594000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 16595000
|
|
GO EXIT; 16596000
|
|
END; 16597000
|
|
IF TYPE=VNUMBER THEN 16598000
|
|
BEGIN 16599000
|
|
DOCODE(OCONV, 0); 16600000
|
|
ADDR ~ CONSMAX; 16601000
|
|
END 16602000
|
|
ELSE 16603000
|
|
BEGIN 16604000
|
|
ADDR ~ SAVEA.REF; 16605000
|
|
IF TEMP } 2 THEN 16606000
|
|
DOCODE(OINDC,ADDR) 16607000
|
|
ELSE 16608000
|
|
IF OP = OIOPC THEN 16609000
|
|
IF LASTCODE(OISTR,ADDR) THEN 16610000
|
|
GO SKIP; 16611000
|
|
END; 16612000
|
|
DOCODE(OP, ADDR); 16613000
|
|
SKIP: IF STEPI=VOTHERS THEN 16614000
|
|
IF I~ELB.SUB=ENDV OR I=ELSEV OR 16615000
|
|
I=THENV AND BOOLEANEXTOG THEN 16616000
|
|
GO DONE; 16617000
|
|
IF TYPE!VSPECIAL THEN 16618000
|
|
BEGIN 16619000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 16620000
|
|
ERROR(28); 16621000
|
|
GO DONE; 16622000
|
|
END; 16623000
|
|
IF LENGTHTOG THEN 16624000
|
|
BEGIN 16625000
|
|
IF ELB=":" OR ELB="]" THEN 16626000
|
|
GO DONE; 16627000
|
|
END 16628000
|
|
ELSE 16629000
|
|
IF ELB=";" THEN 16630000
|
|
GO DONE; 16631000
|
|
IF ELB="-" THEN 16632000
|
|
OP~ OSUBI 16633000
|
|
ELSE 16634000
|
|
IF ELB="+" THEN 16635000
|
|
OP ~ OADDI 16636000
|
|
ELSE 16637000
|
|
IF ELB="|" THEN 16638000
|
|
OP ~ OMULI 16639000
|
|
ELSE 16640000
|
|
IF ELB="/" THEN 16641000
|
|
OP ~ ODIVI 16642000
|
|
ELSE 16643000
|
|
GO DONE; 16644000
|
|
GO AGAIN; 16645000
|
|
DONE: DOCODE(O, AD); 16646000
|
|
NOJUMP~ TRUE; 16647000
|
|
EXIT: 16648000
|
|
END IASSIGNMENT; 16649000
|
|
COMMENT ASSIGNMENT IS RESPONSIBLE FOR COMPILING ALPHA 16700000
|
|
SEQUENCES AND EMITTING THE ACTION PARAMETERS. A CERTAIN AMOUNT 16701000
|
|
OF OPTIMIZATION IS ATTEMPTED; 16702000
|
|
PROCEDURE ASSIGNMENT(O,AD); 16703000
|
|
VALUE O, AD; 16704000
|
|
INTEGER O, AD; 16705000
|
|
BEGIN 16706000
|
|
BOOLEAN CAT; 16707000
|
|
INTEGER OP, ADDR; 16708000
|
|
INTEGER I; 16709000
|
|
LABEL STRNGNM,ER,MCRRSWD,AGAIN,TEND,EXIT,SEND,CEND,DONE, 16710000
|
|
THRU,SUNTH,ENDSUN,LIN,BGN,BLK,SCT,INT, 16711000
|
|
UNTL,ENTI,LENG,QU,NAM; 16712000
|
|
SWITCH SWAM ~ LIN,ENTI,LENG,ER,ER,ER,ER,ER,ER,ER,BGN,BLK, 16713000
|
|
SCT,ER,ER,ER,ER,ER,ER,ER,ER,ER,ER,ER,ER,UNTL,THRU,QU, 16714000
|
|
NAM; 16715000
|
|
CAT~ TRUE; 16716000
|
|
TOGGLECT ~ 0; 16717000
|
|
AGAIN: IF STEPI=VMACRORES THEN 16718000
|
|
GO MCRRSWD; 16719000
|
|
IF TYPE=VSTRINGNAME THEN 16720000
|
|
GO STRNGNM; 16721000
|
|
IF VNUMBER { TYPE { VTORF THEN 16722000
|
|
BEGIN 16723000
|
|
ADDR ~ CONSMAX; 16724000
|
|
GO SEND 16725000
|
|
END; 16726000
|
|
IF NOT BOOLEANEXTOG THEN BEGIN 16727000
|
|
ER: ERROR(30); 16728000
|
|
RECOVER END; T~T-1; 16729000
|
|
GO TEND; 16730000
|
|
STRNGNM: CHECKMSTRING(FALSE); 16731000
|
|
ADDR ~ SAVEA.REF; 16732000
|
|
IF ITOG THEN 16733000
|
|
DOCODE(OCONV,SAVEA.LIM); 16734000
|
|
IF TEMP } 2 THEN 16735000
|
|
DOCODE(OINDC,ADDR) 16736000
|
|
ELSE 16737000
|
|
SEND: IF LASTCODE(ODSTR,ADDR) THEN 16738000
|
|
BEGIN 16739000
|
|
ML~ ML-3; 16740000
|
|
DOCODE(ONSTR,-1); 16741000
|
|
GO TEND; 16742000
|
|
END; 16743000
|
|
IF CAT THEN 16744000
|
|
OP~ OOPDC 16745000
|
|
ELSE 16746000
|
|
OP~ OOPDS; 16747000
|
|
GO CEND; 16748000
|
|
MCRRSWD: 16749000
|
|
GO SWAM[ELB.SUB-49]; 16750000
|
|
IF ADDR~ELB.SUB<100 THEN BEGIN 16751000
|
|
ERROR(42); 16752000
|
|
RECOVER; 16753000
|
|
GO TEND; 16754000
|
|
END ELSE 16755000
|
|
IF ADDR~ ADDR-100=0 THEN 16756000
|
|
IF STEPI=VMACRORES THEN 16757000
|
|
IF ELB.SUB=EXPRESSIONM THEN 16758000
|
|
ELSE 16759000
|
|
IF ELB.SUB=PRIMARYM THEN 16760000
|
|
ADDR~8 16761000
|
|
ELSE 16762000
|
|
ERROR(63) 16763000
|
|
ELSE 16764000
|
|
ERROR(63); 16765000
|
|
TOGGLECT ~ TOGGLECT + 1; 16766000
|
|
OP ~ IF CAT THEN OTYPC ELSE OTYPS; 16767000
|
|
GO CEND; 16768000
|
|
THRU: OP ~ IF CAT THEN OSTHC ELSE OSTHS; 16769000
|
|
GO SUNTH; 16770000
|
|
UNTL: OP ~ IF CAT THEN OSUNC ELSE OSUNS; 16771000
|
|
SUNTH: I ~ 4; 16772000
|
|
IF STEPI = VSTRINGNAME THEN BEGIN LABEL L; 16773000
|
|
IF STEPI!VSPECIAL OR ELB!"~" THEN BEGIN 16774000
|
|
T ~ T - 2; 16775000
|
|
STEPI; 16776000
|
|
DOCODE(OLDFT,GET(LAD).REF); 16777000
|
|
GO L; 16778000
|
|
END; 16779000
|
|
IF BOOLEAN(ELB.SUB) THEN ERROR(86) ELSE 16780000
|
|
I ~ GET(LAD).REF&ELB.SUB[TOPLINK]; 16781000
|
|
IF STEPI!VSPECIAL OR ELB!"(" THEN BEGIN 16782000
|
|
ERROR(68); 16783000
|
|
GO ENDSUN; 16784000
|
|
END; 16785000
|
|
DO BEGIN 16786000
|
|
IF STEPI = VSTRING THEN 16787000
|
|
DOCODE(-OLDFT,CONSMAX) 16788000
|
|
ELSE 16789000
|
|
IF TYPE = VSTRINGNAME THEN BEGIN 16790000
|
|
IF BOOLEAN(ELB.SUB) THEN 16791000
|
|
DOCODE(OCONV,GET(LAD).LIM); 16792000
|
|
IF ELB.SUB}2 THEN 16793000
|
|
DOCODE(OINDC,GET(LAD).REF); 16794000
|
|
DOCODE(OLDFT,GET(LAD).REF); 16795000
|
|
END ELSE 16796000
|
|
ERROR(60); 16797000
|
|
IF STEPI!VSPECIAL OR NOT(ELB="," OR ELB=")") THEN 16798000
|
|
BEGIN ERROR(34); GO ENDSUN END; 16799000
|
|
END UNTIL ELB=")"; 16800000
|
|
L: END VSTRINGNAME ELSE 16801000
|
|
IF TYPE = VSTRING THEN 16802000
|
|
DOCODE(-OLDFT,CONSMAX) 16803000
|
|
ELSE 16804000
|
|
ERROR(60); 16805000
|
|
ENDSUN: IF BOOLEAN(ADDR~I).PLINK THEN 16806000
|
|
DOCODE(OINDC,ADDR); 16807000
|
|
GO CEND; 16808000
|
|
QU: IF STEPI!0 OR ELB!"(" THEN 16809000
|
|
BEGIN 16810000
|
|
ERROR(32); 16811000
|
|
T~ T-1 16812000
|
|
END; 16813000
|
|
IF CAT THEN 16814000
|
|
DOCODE(OLT1C,"" ") 16815000
|
|
ELSE 16816000
|
|
DOCODE(OLT2C,"""&" "[TOC6]); 16817000
|
|
ASSIGNMENT(OLT1C,"" "); 16818000
|
|
IF TYPE!0 OR ELB!")" THEN 16819000
|
|
BEGIN 16820000
|
|
ERROR(33); 16821000
|
|
T~ T-1; 16822000
|
|
END; 16823000
|
|
GO TEND; 16824000
|
|
NAM: IF STEPI ! VSPECIAL OR ELB ! "(" THEN BEGIN 16825000
|
|
ERROR(68); 16826000
|
|
T ~ T - 1; 16827000
|
|
GO TEND; 16828000
|
|
END; 16829000
|
|
IF STEPI ! VSTRINGNAME OR ELB.SUB ! 6 THEN GO ER; 16830000
|
|
DOCODE(OINDC,GET(LAD).REF); 16831000
|
|
DOCODE(OINT1,ONAME); 16832000
|
|
IF STEPI ! VSPECIAL OR ELB ! ")" THEN BEGIN 16833000
|
|
ERROR(69); 16834000
|
|
T ~ T - 1; 16835000
|
|
GO TEND; 16836000
|
|
END; 16837000
|
|
GO DONE; 16838000
|
|
LIN: DOCODE(OINT1,OLINS - REAL(CAT)); 16839000
|
|
GO TEND; 16840000
|
|
BGN: DOCODE(OINT1,OBGNL); 16841000
|
|
GO INT; 16842000
|
|
BLK: DOCODE(OINT1,OBLKL); 16843000
|
|
GO INT; 16844000
|
|
SCT: DOCODE(OINT1,OSCNT); 16845000
|
|
INT: DOCODE(OISTR,LINTBAS); 16846000
|
|
DOCODE(OCONV,3); 16847000
|
|
DOCODE(OOPDC,LINTBAS); 16848000
|
|
GO TEND; 16849000
|
|
LENG: IF TRUE THEN 16850000
|
|
BEGIN SAVEOP ~ OLENG; ADDR ~ 4 END 16851000
|
|
ELSE 16852000
|
|
ENTI: BEGIN SAVEOP ~ OENTI; ADDR ~ 8; 16853000
|
|
TOGGLECT ~ TOGGLECT + 1; END; 16853050
|
|
CLNGENT(SAVEOP); 16854000
|
|
DOCODE(OCONV,ADDR); 16855000
|
|
ADDR ~ LINTBAS; 16856000
|
|
OP~ OOPDC; 16857000
|
|
CEND: DOCODE(OP, ADDR); 16858000
|
|
TEND: 16859000
|
|
IF STEPI=VOTHERS THEN 16860000
|
|
IF (I~ELB.SUB)=ENDV OR I=ELSEV OR(I=THENV AND 16861000
|
|
BOOLEANEXTOG) THEN 16862000
|
|
GO EXIT; 16863000
|
|
IF ELB=")" OR ELB="(" OR ELB="]" THEN 16864000
|
|
GO EXIT; 16865000
|
|
IF ELB=";" THEN 16866000
|
|
GO EXIT; 16867000
|
|
CAT~ ELB="&"; 16868000
|
|
IF ELB!"," AND ELB!"&" THEN 16869000
|
|
IF BOOLEANEXTOG THEN 16870000
|
|
GO EXIT 16871000
|
|
ELSE BEGIN 16872000
|
|
ERROR(34); 16873000
|
|
RECOVER; 16874000
|
|
IF TYPE!0 OR ELB!"," THEN GO EXIT; 16875000
|
|
END; 16876000
|
|
GO AGAIN; 16877000
|
|
EXIT: DOCODE(O, AD); 16878000
|
|
NOJUMP~ TRUE; 16879000
|
|
DONE: 16880000
|
|
END ASSIGNMENT; 16881000
|
|
$ INCLUDE 16987001, IF INTERMEDIATE; 16899999
|
|
COMMENT DECOMPOSITION COMPILES CODE FOR MSTRING DECOMPOSI- 16900000
|
|
TIONS. THE PROCESS IS: OPEN A PSEUDOREADER WITH THE CONTENTS 16901000
|
|
OF THE MSTRING AND PROTECT IT FROM BEING FLUSHED DURING RESCAN. 16902000
|
|
SCANNING STATEMENTS ENCLOSED IN "()" ARE COMPILED NORMALLY. 16903000
|
|
AFTER EACH STMT, A TOGGLE JUMP IS MADE TO A RECOVERY AREA TO 16904000
|
|
TRY TO RESTORE THE MSTRING TO ORIGINAL CONDITION & FLUSH THE 16905000
|
|
PSEUDOREADER. NORMAL EXIT MAY CLOSE THE PSEUDOREADER BACK INTO 16906000
|
|
AN MSTRING OR FLUSH THE UNSCANNED REMNANTS; 16907000
|
|
PROCEDURE DECOMPOSITION; 16908000
|
|
BEGIN 16909000
|
|
LABEL ER, AGAIN, EXIT; 16910000
|
|
INTEGER LINKS,ADDR,D,OP; 16911000
|
|
STREAM PROCEDURE MACODE(O,A,W,C); VALUE O,A,C; BEGIN 16912000
|
|
DI~W; DI~DI+C; SI~LOC O; SI~SI+7; DS~CHR; 16913000
|
|
IF SC!"+" THEN BEGIN SI~SI+6; DS~2 CHR END; 16914000
|
|
END; 16915000
|
|
DECOMTOG~ TRUE; 16916000
|
|
IF SAVEA<0 THEN 16917000
|
|
DOCODE(OINDC,SAVEA~ ABS(SAVEA)); 16918000
|
|
DOCODE(OOPSU,SAVEA.REF); 16919000
|
|
LINKS~ 0; 16920000
|
|
AGAIN: IF STEPI=VSPECIAL AND ELB="(" THEN 16921000
|
|
BEGIN 16922000
|
|
STEPI; 16923000
|
|
STATEMENT; 16924000
|
|
IF ELB!")" THEN 16925000
|
|
BEGIN 16926000
|
|
ERROR(35); 16927000
|
|
T~ T-1; 16928000
|
|
END; 16929000
|
|
ML~ ML-3; 16930000
|
|
OPCODE(MC[ML.WRD],ML.CHR,OP,ADDR); 16931000
|
|
IF OP=ODSTR OR OP=OISTR THEN 16932000
|
|
BEGIN 16933000
|
|
IF LASTCODE(OINDC,ADDR) THEN 16934000
|
|
BEGIN 16935000
|
|
ML~ ML-3; 16936000
|
|
D~ -ADDR; 16937000
|
|
END 16938000
|
|
ELSE 16939000
|
|
D~ ADDR 16940000
|
|
END 16941000
|
|
ELSE 16942000
|
|
BEGIN 16943000
|
|
D~ 0; 16944000
|
|
DOCODE(0, 0); 16945000
|
|
END; 16946000
|
|
ADDR~ LINKS; 16947000
|
|
LINKS~ ML; 16948000
|
|
DOCODE(OJMPC, ADDR); 16949000
|
|
IF D!0 THEN 16950000
|
|
IF D<0 THEN 16951000
|
|
DOCODE(OINDC,D~ ABS(D)); 16952000
|
|
DOCODE(OP,D); 16953000
|
|
IF STEPI=VSPECIAL THEN 16954000
|
|
IF ELB="," THEN 16955000
|
|
GO AGAIN; 16956000
|
|
DOCODE(OINT1,ORDCD); 16957000
|
|
GO EXIT; 16958000
|
|
END; 16959000
|
|
IF TYPE=VSTRINGNAME THEN 16960000
|
|
BEGIN 16961000
|
|
IF BOOLEAN(ELB.SUB) THEN 16962000
|
|
BEGIN 16963000
|
|
ERROR(37); 16964000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 16965000
|
|
END; 16966000
|
|
ADDR~ GET(LAD).REF; 16967000
|
|
IF ELB.SUB}2 THEN 16968000
|
|
DOCODE(OINDC,ADDR); 16969000
|
|
DOCODE(OCPSU,ADDR); 16970000
|
|
STEPI; 16971000
|
|
GO EXIT; 16972000
|
|
END; 16973000
|
|
ER: ERROR(38); 16974000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 16975000
|
|
EXIT: DECOMTOG~ FALSE; 16976000
|
|
DOCODE(OJUMP, ML+6); 16977000
|
|
DOCODE(OINT1,ORDCD); 16978000
|
|
DO 16979000
|
|
BEGIN 16980000
|
|
OPCODE(MC[LINKS.WRD],LINKS.CHR,OP,ADDR); 16981000
|
|
MACODE(OP,ML-3,MC[LINKS.WRD],LINKS.CHR); 16982000
|
|
$ INCLUDE 16984001, IF DEBUGGING; 16982999
|
|
IF DBUGN THEN 16983000
|
|
WRITE(PRINTER,DEBUG,LINKS,MNEMON[OP],"I",ML-3); 16984000
|
|
END 16985000
|
|
UNTIL(LINKS~ ADDR)=0; 16986000
|
|
END DECOMPOSITION; 16987000
|
|
COMMENT STATEMENT INITIATES COMPILING OF ALL STATEMENTS. 17000000
|
|
CERTAIN CONSTRUCTS ARE HANDLED INLINE, OTHERS REQUIRE RECURSIVE 17001000
|
|
COMPILER PARTS. UNKNOWN IDS ARE ASSUMED TO BE LABELS AND ARE SO 17002000
|
|
DECLARED. THIS PROCESS IS REQUIRED SINCE BEGINS&ENDS IN MACROS 17003000
|
|
ARE CONSIDERED BLOCKS REGARDLESS OF ANY DECLARATIONS BEING 17004000
|
|
PRESENT; 17005000
|
|
PROCEDURE STATEMENT; 17006000
|
|
BEGIN 17007000
|
|
INTEGER I,ADDR; 17008000
|
|
$ INCLUDE 17008051, IF ADVANCED; 17008049
|
|
INTEGER LINKS; 17008050
|
|
LABEL AIDENTL,SET,RESET; 17009000
|
|
LABEL NOTDEC,STRNGNM,E1,MCRRSWD,OTHRS,RSC,DLT,OTPT,INP, 17010000
|
|
AGAIN,EXIT,ERRO,SC,WRNG,PTCH,POST,E39; 17011000
|
|
SWITCH STBEG ~ SC,E1,E1,E1,E1,NOTDEC,E1,E1,E1,E1,E1, 17012000
|
|
E1,E1,E1,E1,E1,STRNGNM,AIDENTL,E1,E1,E1,MCRRSWD, 17013000
|
|
OTHRS; 17014000
|
|
SWITCH STACT ~ INP,RSC,OTPT,ERRO,WRNG,POST,DLT,PTCH, 17015000
|
|
SET,RESET; 17016000
|
|
STREAM PROCEDURE MACODE(O,A,W,C); VALUE O,A,C; 17017000
|
|
BEGIN DI~W; DI~DI+C; SI~LOC O; SI~SI+7; DS~CHR; 17018000
|
|
IF SC!"+" THEN BEGIN SI~SI+6; DS~2 CHR END; 17019000
|
|
END; 17020000
|
|
AGAIN: GO STBEG[TYPE+1]; 17021000
|
|
GO TO E1; 17022000
|
|
STRNGNM: CHECKMSTRING(TRUE); 17023000
|
|
IF STEPI ! VSPECIAL THEN 17024000
|
|
BEGIN 17025000
|
|
ERROR(39); 17026000
|
|
T~ T-1; 17027000
|
|
GO DLT; 17028000
|
|
END; 17029000
|
|
IF NOT DECOMTOG THEN 17030000
|
|
IF ELB="-" THEN 17031000
|
|
IF STEPI=VSPECIAL AND ELB=">" THEN 17032000
|
|
BEGIN 17033000
|
|
IF ITOG THEN 17034000
|
|
ERROR(40); 17035000
|
|
IF TEMP}2 THEN SAVEA~ -SAVEA; 17036000
|
|
$ INCLUDE 17037001, IF INTERMEDIATE; 17036999
|
|
DECOMPOSITION; 17037000
|
|
$ OMIT 17037101, IF INTERMEDIATE; 17037049
|
|
ERROR(110); 17037050
|
|
RECOVER; 17037100
|
|
GO EXIT; 17038000
|
|
END; 17039000
|
|
IF ELB!"~" THEN 17040000
|
|
BEGIN 17041000
|
|
ERROR(41); 17042000
|
|
T~ T-1; 17043000
|
|
END; 17044000
|
|
$ INCLUDE 17062001, IF ADVANCED; 17044999
|
|
IF TEMP}2 THEN 17045000
|
|
IF STEPI=0 AND ELB="[" THEN BEGIN 17046000
|
|
LINKS~ T+1; 17047000
|
|
BOOLEANEXTOG~ TRUE; 17048000
|
|
ASSIGNMENT(OINDC,TEMP.[47:1]); 17049000
|
|
IF TYPE!0 OR ELB!"]" THEN 17050000
|
|
ERROR(79); 17051000
|
|
IF T=LINKS THEN BEGIN 17052000
|
|
ML~ ML-3; 17053000
|
|
DOCODE(OILIT,0); 17054000
|
|
END; 17055000
|
|
BOOLEANEXTOG~ FALSE; 17056000
|
|
STEPI; 17057000
|
|
DOCODE(OISTR,SAVEA.REF); 17058000
|
|
GO SC; 17059000
|
|
END 17060000
|
|
ELSE 17061000
|
|
T~ T-1; 17062000
|
|
MULTIASSIGNMENT(IF ITOG THEN OISTR ELSE ODSTR, SAVEA, 17063000
|
|
TEMP,CFIELD); 17064000
|
|
GO EXIT; 17065000
|
|
MCRRSWD:GO STACT[ELB.SUB+1]; 17066000
|
|
ERROR(42); 17067000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 17068000
|
|
GO TO EXIT; 17069000
|
|
PTCH: 17070000
|
|
$ OMIT 17070151, IF ADVANCED; 17070049
|
|
ERROR(111); 17070050
|
|
RECOVER; 17070100
|
|
GO EXIT; 17070150
|
|
$ INCLUDE 17084001, IF ADVANCED; 17070499
|
|
BEGIN LABEL L; L: 17070500
|
|
IF STEPI!VSTRINGNAME OR NOT BOOLEAN(ELB.SUB) THEN BEGIN 17071000
|
|
ERROR(64); 17072000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 17073000
|
|
GO EXIT; 17074000
|
|
END; 17075000
|
|
SAVEA ~ GET(LAD).REF; 17076000
|
|
IF STEPI!0 OR ELB!"," THEN BEGIN 17077000
|
|
ERROR(34); 17078000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; 17079000
|
|
GO EXIT; 17080000
|
|
END; 17081000
|
|
ASSIGNMENT(OOTPT,SAVEA); 17082000
|
|
GO EXIT; 17083000
|
|
END; 17084000
|
|
$ INCLUDE 17085001, IF INTERMEDIATE; 17084999
|
|
DLT: ASSIGNMENT(OINT1,ODELE); 17085000
|
|
$ OMIT 17085101, IF INTERMEDIATE 17085049
|
|
DLT: ERROR(110); 17085050
|
|
RECOVER; 17085100
|
|
GO EXIT; 17086000
|
|
$ INCLUDE 17087001, IF INTERMEDIATE; 17086999
|
|
RSC: ASSIGNMENT(OINPT,1); 17087000
|
|
$ OMIT 17087101, IF INTERMEDIATE; 17087049
|
|
RSC: ERROR(110); 17087050
|
|
RECOVER; 17087100
|
|
GO EXIT; 17088000
|
|
OTPT: ASSIGNMENT(OOTPT, 0); 17089000
|
|
GO EXIT; 17090000
|
|
ERRO: ASSIGNMENT(OERRO, 0); 17091000
|
|
GO EXIT; 17092000
|
|
WRNG: ASSIGNMENT(OERRO,1); 17093000
|
|
GO EXIT; 17094000
|
|
POST: BEGIN LABEL L; L: 17095000
|
|
IF STEPI = VSPECIAL AND ELB = "[" THEN BEGIN 17096000
|
|
IF STEPI = VOTHERS THEN BEGIN 17097000
|
|
IF I~ELB.SUB = PAGEV THEN 17098000
|
|
ADDR ~ 4 17099000
|
|
ELSE 17100000
|
|
IF I = DBLV THEN 17101000
|
|
ADDR ~ 3 17102000
|
|
END ELSE 17103000
|
|
IF TYPE = VNUMBER THEN BEGIN 17104000
|
|
I ~ CONSTANTCONVERT(IDENT[1],COUNT); 17105000
|
|
IF I<1 OR I>4092 THEN BEGIN 17106000
|
|
ERROR(26); 17107000
|
|
ADDR ~ 2; 17108000
|
|
END ELSE 17109000
|
|
ADDR ~ I + 3; 17110000
|
|
END ELSE 17111000
|
|
ERROR(26); 17112000
|
|
IF STEPI ! VSPECIAL OR ELB ! "]" THEN 17113000
|
|
ERROR(36); 17114000
|
|
END ELSE BEGIN 17115000
|
|
T ~ T - 1; 17116000
|
|
ADDR ~ 2; 17117000
|
|
END; 17118000
|
|
ASSIGNMENT(OERRO,ADDR); 17119000
|
|
GO EXIT; 17120000
|
|
END; 17121000
|
|
INP: ASSIGNMENT(OINPT, 0); 17122000
|
|
GO EXIT; 17123000
|
|
SET: RESET: 17124000
|
|
$ INCLUDE 17140001, IF ADVANCED; 17124999
|
|
BEGIN LABEL E; 17125000
|
|
INTEGER TR; 17126000
|
|
TR ~ REAL(ELB.SUB=SETM); 17127000
|
|
DO BEGIN 17128000
|
|
IF STEPI ! VMACRORES OR I~ELB.SUB < 200 THEN BEGIN 17129000
|
|
IF TYPE=VNUMBER AND I=INTEGERV THEN BEGIN 17129100
|
|
IF I~CONSTANTCONVERT(IDENT[1],COUNT)>35 THEN 17129200
|
|
BEGIN ERROR(108); GO E END; 17129300
|
|
DOCODE(OTOGL,4|I+256+TR); 17129400
|
|
END ELSE BEGIN 17129500
|
|
ERROR(42); 17130000
|
|
E: RECOVER; 17131000
|
|
GO EXIT; 17132000
|
|
END END ELSE 17133000
|
|
DOCODE(OTOGL,(I-200)|3+TR); 17134000
|
|
IF STEPI ! 0 OR NOT(ELB="," OR ELB=";") THEN BEGIN 17135000
|
|
ERROR(34); 17136000
|
|
GO E; 17137000
|
|
END; 17138000
|
|
END UNTIL ELB = ";"; 17139000
|
|
END SET RESET; 17140000
|
|
$ OMIT 17140051, IF ADVANCED; 17140049
|
|
ERROR(111); 17140050
|
|
GO EXIT; 17141000
|
|
OTHRS: IF I~ELB.SUB=ENDV THEN GO EXIT; 17142000
|
|
IF I=ELSEV THEN 17143000
|
|
IF COND THEN GO EXIT ELSE GO E1; 17144000
|
|
IF I=BEGINV THEN 17145000
|
|
BEGIN 17146000
|
|
DO 17147000
|
|
BEGIN 17148000
|
|
STEPI; 17149000
|
|
STATEMENT 17150000
|
|
END 17151000
|
|
UNTIL TYPE=VOTHERS AND ELB.SUB=ENDV; 17152000
|
|
STEPI; 17153000
|
|
GO TO EXIT; 17154000
|
|
END; 17155000
|
|
IF I=IFV THEN 17156000
|
|
BEGIN 17157000
|
|
CONDITIONAL; 17158000
|
|
GO EXIT; 17159000
|
|
END; 17160000
|
|
IF ELB.SUB=GOV THEN 17161000
|
|
BEGIN 17162000
|
|
UNCONDITIONAL; 17163000
|
|
GO EXIT; 17164000
|
|
END; 17165000
|
|
GO E1; 17166000
|
|
NOTDEC: PUT(GET(ADDICT(VALGOLIDENT, LABELV)), ML); 17167000
|
|
NOJUMP~ FALSE; 17168000
|
|
NEXTDICT~ NEXTDICT+1; 17169000
|
|
IF STEPI!VSPECIAL OR ELB!":" THEN 17170000
|
|
ERROR(43) 17171000
|
|
ELSE 17172000
|
|
STEPI; 17173000
|
|
GO AGAIN; 17174000
|
|
AIDENTL: IF ELB.BLKLVL<MCBL THEN 17175000
|
|
GO NOTDEC 17176000
|
|
ELSE 17177000
|
|
IF ELB.SUB=LABELV THEN 17178000
|
|
BEGIN INTEGER LINKS; 17179000
|
|
NOJUMP~ FALSE; 17180000
|
|
IF NOT BOOLEAN(LINKS~-GET(LAD)).PNOTT THEN 17181000
|
|
BEGIN 17182000
|
|
PUT(LAD,ML); 17183000
|
|
LINKS ~ LINKS.JADR; 17184000
|
|
DO BEGIN 17185000
|
|
OPCODE(MC[LINKS.WRD],LINKS.CHR,OP,ADDR); 17186000
|
|
MACODE(OP,ML,MC[LINKS.WRD],LINKS.CHR); 17187000
|
|
$ INCLUDE 17190001, IF DEBUGGING; 17187999
|
|
IF DBUGN THEN 17188000
|
|
WRITE(PRINTER,DEBUG,LINKS, 17189000
|
|
MNEMON[OP],"I",ML); 17190000
|
|
END UNTIL(LINKS~ADDR.JADR)=0; 17191000
|
|
END 17192000
|
|
ELSE 17193000
|
|
ERROR(44); 17194000
|
|
IF STEPI!VSPECIAL OR ELB!":" THEN 17195000
|
|
ERROR(45) 17196000
|
|
ELSE 17197000
|
|
STEPI; 17198000
|
|
GO AGAIN; 17199000
|
|
END; 17200000
|
|
SC: IF ELB!";" THEN 17201000
|
|
BEGIN 17202000
|
|
E1: ERROR(46); 17203000
|
|
DO RECOVER UNTIL TYPE!0 OR ELB!","; END; 17204000
|
|
EXIT: 17205000
|
|
END STATEMENT; 17206000
|
|
COMMENT MACRO IS THE DRIVER FOR MACRO COMPILATION. IT 18000000
|
|
FORCES MACRO RESWDS IN & FORCES A PSEUDOBLOCK FOR THEIR CUTBACK. 18001000
|
|
LOCAL ADDRESS ASSIGNMENTS ARE INITIALIZED. ONE CALL ON 18002000
|
|
STATEMENT IS SUFFICIENT TO COMPILE THE MACRO CODE. WRAPUP 18003000
|
|
CONSISTS OF WRITING THE CODE, CONSTANTS, & SIZING INFO INTO 18004000
|
|
MCODE AND STORING POINTERS INTO THE DICT ENTRY. FINAL STEP IS TO 18005000
|
|
DELINK THE RESWDS FROM THE SCANNERS VIEW; 18006000
|
|
INTEGER I,J; 18007000
|
|
$ INCLUDE 18008001, IF DEBUGGING; 18007999
|
|
FORMAT SS(I6"-"A1); 18008000
|
|
SLIPWORDS(MACRODICT,ALGOLDICT); 18009000
|
|
STARTBLOCK(FALSE); 18010000
|
|
MC[ML~0] ~ 0; 18011000
|
|
IF MACT } 1 THEN 18012000
|
|
MOVE(8,SPACEMAP,SPACEMAP[16]); 18013000
|
|
SPACEMAP[0] ~ 512; 18014000
|
|
MOVE(7,SPACEMAP,SPACEMAP[1]); 18015000
|
|
$ INCLUDE 18017001, IF DEBUGGING; 18015999
|
|
IF SRT AND PRINT THEN 18016000
|
|
WRITE(PRINTER,SS,PT,"M"); 18017000
|
|
LACT ~ LALFBAS + 27; 18018000
|
|
LICT ~ LINTBAS; 18019000
|
|
LOCT ~ LPTRBAS - 1; 18020000
|
|
CONP~ 1; 18021000
|
|
DEC~ NOT MACROTOG~ TRUE; 18022000
|
|
STEPI; 18023000
|
|
MCBL~ BLVL; 18024000
|
|
I ~ ERRCT; 18025000
|
|
STATEMENT; 18026000
|
|
DOCODE(OINT1,OEXIT); 18027000
|
|
ML ~ (ML+7).WRD; 18028000
|
|
PUT(Q,ML&CONP[TOMPOOL]&LACT[TOMLACT]&(LICT-LINTBAS+1) 18029000
|
|
[TOMLICT]); 18030000
|
|
PUT(Q+1,PT&(LOCT-LPTRBAS+1)[TOMLOCT]&(J~REAL(LACT.M32!0) 18031000
|
|
+LACT.D32)[TOMSMAP]); 18032000
|
|
WRAPBLOCK(FALSE); 18033000
|
|
IF I ! ERRCT THEN BEGIN 18034000
|
|
ML ~ J ~ CONP ~ 0; 18035000
|
|
DOCODE(OERRO,15); 18036000
|
|
ML ~ 1; 18036100
|
|
END; 18037000
|
|
WRITIT(MC,ML,PT,MCODE); 18038000
|
|
WRITIT(COMCON,CONP,PT,MCODE); 18039000
|
|
ML ~ 0; 18040000
|
|
WRITIT(SPACEMAP,J,PT,MCODE); 18041000
|
|
IF MACT } 1 THEN 18042000
|
|
MOVE(8,SPACEMAP[16],SPACEMAP); 18043000
|
|
NEST ~ NEST-1; 18044000
|
|
FOR I~ 0 STEP 1 UNTIL 124 DO 18045000
|
|
WHILE MACRODICT { A~DLIST[I] < ALGOLDICT DO 18046000
|
|
DLIST[I] ~ DICT[A.IR,A.IC]; 18047000
|
|
DEC ~ NOT MACROTOG ~ FALSE; 18048000
|
|
END MACRO COMPILER; 18049000
|
|
18050000
|
|
COMMENT FILEPARAMETERS RETURNS THE 5 WORD FPB ENTRY FOR 20000000
|
|
A FILE NAME (FN); 20001000
|
|
COMMENT FILEPARAMETERS; 20002000
|
|
PROCEDURE FILEPARAMETERS(FN,A);FILE FN;ARRAY A[0]; BEGIN REAL II;SAVE 20003000
|
|
ARRAY FPB[0:10];ARRAY T[0:1];INTEGER STREAM PROCEDURE LENGTH(A);BEGIN 20004000
|
|
SI~LOC A;DI~LOC LENGTH;SI~SI+1;DI~DI+6;DS~NUM;DS~CHR;END;REAL STREAM 20005000
|
|
PROCEDURE FNUM(F);BEGIN SI~F;SI~SI-24;DI~LOC F;DS~WDS;SI~F;SI~SI+34;DI~ 20006000
|
|
LOC FNUM;DI~DI+6;DS~2 CHR;DI~DI-2;DS~RESET;END;PROCEDURE FPBDESC(JUNK, 20007000
|
|
II,T);REAL JUNK,II;ARRAY T[0];BEGIN STREAM PROCEDURE F(JUNK,II,T);BEGIN 20008000
|
|
SI~II;SI~SI+8;DI~T;DS~WDS;SI~JUNK;14(SI~SI-8);DI~II;DI~DI+8;DS~WDS;END; 20009000
|
|
F(JUNK,II,T[0]);END;STREAM PROCEDURE RESTORE(II,T);BEGIN SI~T;DI~II;DI~ 20010000
|
|
DI+8;DS~WDS;END;STREAM PROCEDURE MOVE(A,B,N);VALUE N;BEGIN SI~A;DI~B;DS 20011000
|
|
~N WDS END;IF(II~LENGTH(A))>5 THEN II~5;FPBDESC(II+1,II,T);MOVE(FPB[ 20012000
|
|
FNUM(FN)],A[0],II);RESTORE(II,T[0]);END; 20013000
|
|
COMMENT INITIALIZATION BLOCK. SVT SETUP BY TESTING R+26 20014000
|
|
FOR SYNTAX OR LIBRARY OPTIONS. IF LIBRARY, MF & F ARE SET UP & 20015000
|
|
CODE FILE FLAG(WRL) RESET ELSE DUMMY TIME-DERIVED NAME GENERATED. 20016000
|
|
IF PRINTER HAS BEEN EQUATED TO DISK, A DUMMY DISK FILE OF THE 20017000
|
|
PROPER NAME AND SIZE(COMMON=RECORDS) IS LOCKED TO INITIALIZE THE 20018000
|
|
PRINTER FILE. 20019000
|
|
THE LANGUAGE FILE IS THEN READ IN TO INITIALIZE TABLES & 20020000
|
|
DEFINE THE PROPERTIES OF THE LANGUAGE TO BE PROCESSED. 20021000
|
|
THE FIRST CARD IS THEN READ. IF IT WAS A MCALGOL $ CARD, 20022000
|
|
THE CODE FILE NAME COULD HAVE BEEN CHANGED. IF THE CODE FILE IS 20023000
|
|
NOT TO BE SAVED, A "$+PURGE" IMAGE IS PUT INTO THE OUTPUT STRING; 20024000
|
|
BEGIN 20025000
|
|
FORMAT 20026000
|
|
BJ1("$+PURGE"), 20027000
|
|
BJ2("LANGUAGE LEVEL INCOMPATIBILITY, FLUSHED"); 20028000
|
|
SETSIZE(128,LOCAL,0,2); 20029000
|
|
BLANK(POB,0,14); 20030000
|
|
SVT ~ (RCCNT>0)&(RCCNT<0)[46:47:1]; 20031000
|
|
RCCNT~-1; 20032000
|
|
SEQN(0, POB[9]); 20033000
|
|
IF SVT THEN BEGIN 20034000
|
|
FILEPARAMETERS(CODE,ERB[*]); 20035000
|
|
FILL CODE WITH MF~ ERB[0].[6:42]; F~ ERB[1]; 20036000
|
|
END ELSE BEGIN 20037000
|
|
SEQN(TIME(1), F); 20038000
|
|
FILL CODE WITH MF~TIME(0)&"GW"[TOC12],F; 20039000
|
|
END; 20040000
|
|
NEWRESEQ ~ FALSE; 20041000
|
|
NEWSEQ ~ - 1000; 20042000
|
|
NEWINC ~ 1000; 20043000
|
|
$ INCLUDE 20043530, IF COUNTING; 20043500
|
|
PSEU ~ BFRMAX; 20043510
|
|
FILEPARAMETERS(PRINTER,ERB[*]); 20044000
|
|
IF ERB[3].C7=12 THEN BEGIN 20045000
|
|
FILE OUT DISK DISK SERIAL [20:(ERRCT+199) DIV 200|10] 20046000
|
|
(1,10,100,SAVE 780); 20047000
|
|
FILL DISK WITH ERB[0],ERB[1]; 20048000
|
|
WRITE (DISK); LOCK(DISK); 20049000
|
|
END; 20050000
|
|
FILL LINKS[*] WITH 0, " "; 20051000
|
|
$ INCLUDE 20052001, IF INTERMEDIATE; 20051999
|
|
STARTUPISOCAT; 20052000
|
|
FILL RELOP[*] WITH OSEQL,OSNEQ,OSLSS,OSLEQ,OSGTR,OSGEQ, 20053000
|
|
OSEQL,OSNEQ,OSGTR,OSGEQ,OSLSS,OSLEQ; 20054000
|
|
FILL MNEMON[*] WITH 20055000
|
|
"00NOPP","00OPSU","41CPSU","09SEQL","09SNEQ", 20056000
|
|
"09SLSS","09SLEQ","09SGTR","09SGEQ","02OPDC", 20057000
|
|
"02OPDS","40NSTR","41DSTR","00ISTR","06IOPC", 20058000
|
|
"06ADDI","06SUBI","06MULI","06DIVI","00OP19", 20059000
|
|
"00OP20","04ILIT","04ADDL","04SUBL","04MULL", 20060000
|
|
"04DIVL","10LT1C","10LT2C","10LT2S","00OP29", 20061000
|
|
"00OP30","00OP31","00OP32","00OP33","00OP34", 20062000
|
|
"00OP35","01INPT","01OTPT","01ERRO","00OP39", 20063000
|
|
"00OP40","00LDFT","00SUNC","00SUNS","00STHC", 20064000
|
|
"00STHS","01ENTR","01FIND","00SRCH","00OP49", 20065000
|
|
"00OP50","00TYPC","00TYPS","00SETL","00CONV", 20066000
|
|
"01INDC","00ICMP","00TOGL","00OP58","00OP59", 20067000
|
|
"00OP60","00JMPC","00JUMP","30INT1","04OBGN", 20068000
|
|
"04+BGN","04-BGN","04|BGN","04/BGN","04OBLK", 20069000
|
|
"04+BLK","04-BLK","04|BLK","04/BLK","00DIAL", 20070000
|
|
"00LINC","00LINS","05ENTI","05LENG","01RDCD", 20071000
|
|
"01DELE","01STCK","00NSTK","04OSCT","04+SCT", 20072000
|
|
"04-SCT","04|SCT","04/SCT","04LEVL","04QUAL", 20073000
|
|
"00NAME","00EXIT"; 20074000
|
|
$ INCLUDE 20074301, IF DEBUGGING; 20074019
|
|
FILL TYPENAME[*] WITH "4LBRB ","7RESWO","RD ", 20074020
|
|
"6SPCHA","R ","?LOGIC","ALVALUE ","6NUMBE","R ", 20074040
|
|
"6STRIN","G ","4LPRP ","#PROCE","DUREF ", 20074060
|
|
"#RELAT","IONOP ","5PWORD","8IFCLA","USE ", 20074080
|
|
"7PRIMA","RY ","6FACTO","R ","4TERM ", 20074100
|
|
"BSIMPL","EARITHEX","PRESS ","?ARITH","EXPRESS ", 20074120
|
|
"8RELAT","ION ","8BPRIM","ARY ","7BFACT","OR ", 20074140
|
|
"5BTERM","@IMPLI","CATION ",":SIMPL","EBOOLEAN", 20074160
|
|
":BOOLE","ANEXPRES","S ","8GPRIM","ARY ", 20074180
|
|
"@LINKD","ESCRIP ","8LINKP","ART ", 20074200
|
|
"7EXPRE","SS ","5STATE","6INTGR","R ", 20074220
|
|
"#IDENT","IFIER ","@DECLA","RATION ","7ELEME","NT ", 20074240
|
|
"8VARIA","BLE "; 20074260
|
|
MOVE(1,CARD(9),LINKS); 20075000
|
|
SPACEMAP[0] ~ 512; 20076000
|
|
MOVE(15,SPACEMAP,SPACEMAP[1]); 20077000
|
|
TABLET ~ LASTUSED ~ BNO ~ 1; 20078000
|
|
NXTELB ~ 2; 20079000
|
|
FLUSHD ~ TRUE; 20080000
|
|
PRINT ~ WARNTOG ~ TRUE; 20081000
|
|
CARDREC ~ DISKREC ~ -1; 20082000
|
|
NXTPTCHREC ~ CODEREC ~ 0; 20083000
|
|
BEGIN 20084000
|
|
FILE IN LANGUAGE DISK SERIAL(2,256); 20100000
|
|
ARRAY GLOBSIZE[0:63]; 20101000
|
|
FILEPARAMETERS(LANGUAGE,ERB[*]); 20102000
|
|
LANG ~ ERB[1]; 20103000
|
|
IF LANG="LANGUAG" THEN 20104000
|
|
LANG ~ "MCALGOL"; 20105000
|
|
IF ERB[0]=0 THEN FILL LANGUAGE WITH "MCALGOL"; 20106000
|
|
FILEPARAMETERS(ERRORS,DFN[*]); 20106050
|
|
IF DFN[0]=0 AND DFN[1]="ERRORS " THEN 20106100
|
|
FILL ERRORS WITH LANG; 20106150
|
|
READ(LANGUAGE,*,DOLLARDICT,STREAMDICT,MACRODICT, 20107000
|
|
ALGOLDICT,NEXTDICT,LASTDICT,NXTUDICT,LSTUDICT, 20108000
|
|
BLVL,RCCNT,ERRCT,BECT,OHM,PT,DECP,GLAT,GLIT,GLOT, 20109000
|
|
NXTPTCHX,NXTPTCHREC,NXTCODE); 20110000
|
|
20111000
|
|
IF ERRCT!LANGUAGELEVEL AND ERRCT!0 THEN 20112000
|
|
BEGIN 20113000
|
|
WRITE(PRINTER,BJ2); 20114000
|
|
GO ENDDD; 20115000
|
|
END; 20116000
|
|
ERRCT ~ 0; 20116050
|
|
READ(LANGUAGE,250,DLIST[*]); 20117000
|
|
IF BLVL > 1 THEN BEGIN 20118000
|
|
READ(LANGUAGE,256,DFN[*]); 20119000
|
|
MOVE(100,DFN,BLIST); 20120000
|
|
MOVE(128,DFN[100],STMTSTACK); 20121000
|
|
OUTERLIMIT ~ DFN[228]; 20122000
|
|
STMTSTKLVL ~ DFN[229]; 20123000
|
|
SSTK ~ DFN[230]; 20124000
|
|
MOVE(8,DFN[231],SPACEMAP[8]); 20125000
|
|
END; 20126000
|
|
FOR I~0 STEP 256 UNTIL NEXTDICT-1 DO 20127000
|
|
READ(LANGUAGE,256,DICT[I.IR,*]); 20128000
|
|
$ INCLUDE 2013001, IF ADVANCED; 20128999
|
|
FOR I~0 STEP 256 UNTIL NXTUDICT-1 DO 20129000
|
|
READ(LANGUAGE,256,UDICT[I.IR,*]); 20130000
|
|
% WRITE(MSTOR[0],256,DFN[*]); 20131000
|
|
% WRITE(MSTOR[150],256,DFN[*]); 20132000
|
|
FOR I~0 STEP 256 UNTIL PT-1 DO BEGIN 20133000
|
|
READ(LANGUAGE,256,MCODE[*]); 20134000
|
|
WRITE(MSTOR[I.IR],256,MCODE[*]); 20135000
|
|
END; 20136000
|
|
MSTORP.PDF1 ~ I.IR - 1; 20137000
|
|
FOR I~0 STEP 256 UNTIL DECP-1 DO BEGIN 20138000
|
|
READ(LANGUAGE,256,MDECL[*]); 20139000
|
|
WRITE(MSTOR[I.IR+150],256,MDECL[*]); 20140000
|
|
END; 20141000
|
|
MSTORP.PDF2 ~ I.IR - 1; 20142000
|
|
DECP.REF ~ 1; 20143000
|
|
IF GLAT } GALFBAS THEN BEGIN 20144000
|
|
READ(LANGUAGE,A~(GLAT-GALFBAS+4).D4,GLOBSIZE[*]); 20145000
|
|
FOR I~0 STEP 1 UNTIL A DO 20146000
|
|
IF GLOBSIZE[I] ! 0 THEN 20147000
|
|
READ(LANGUAGE,256,GLOBAL[I,*]); 20148000
|
|
END; 20149000
|
|
IF GLIT } GINTBAS THEN 20150000
|
|
READ(LANGUAGE,GLIT-GINTBAS+1,GINT[*]); 20151000
|
|
IF GLOT } GPTRBAS THEN 20152000
|
|
READ(LANGUAGE,GLOT-GPTRBAS+1,GPTR[*]); 20153000
|
|
HM~ 252; 20154000
|
|
FOR I~ 0 STEP 100 UNTIL OHM-100 DO 20155000
|
|
BEGIN 20156000
|
|
IF HM=252 THEN 20157000
|
|
BEGIN 20158000
|
|
READ(LANGUAGE, 252, ACCM[*]); 20159000
|
|
HM~ 0 20160000
|
|
END; 20161000
|
|
MOVE(9, ACCM[HM], POB[*]); 20162000
|
|
OUTPUT; 20163000
|
|
HM~ HM+9 20164000
|
|
END; 20165000
|
|
$ INCLUDE 20190001, IF INTERMEDIATE; 20165999
|
|
IF NXTPTCHX}0 THEN BEGIN 20166000
|
|
REAL A,B,C,D,E,F,G; 20167000
|
|
READ(LANGUAGE,NXTPTCHX+2,PATCHSPACE[*]); 20168000
|
|
G~252; 20169000
|
|
FOR A~0 STEP 2 UNTIL NXTPTCHX DO BEGIN 20170000
|
|
E~PATCHSPACE[A]; F~PATCHSPACE[A+1]; 20171000
|
|
B ~ F.PUSED-1; 20172000
|
|
C ~ E.PBASE; 20173000
|
|
FOR D~0 STEP 1 UNTIL B DO BEGIN 20174000
|
|
IF G=252 THEN BEGIN 20175000
|
|
READ(LANGUAGE,252,OA[*]); 20176000
|
|
G~0; 20177000
|
|
END; 20178000
|
|
MOVE(9,OA[G],PPB[*]); 20179000
|
|
% 20180000
|
|
WRITE(BACKPATCHES[C+D],9,PPB[*]); 20181000
|
|
G~G+9; 20182000
|
|
END END END; 20183000
|
|
IF NXTCODE ! 0 THEN 20184000
|
|
FOR I~0 STEP 2 UNTIL NXTCODE.CROW DO BEGIN 20185000
|
|
READ(LANGUAGE,240,OA[*]); 20186000
|
|
WRITE(ISOCODE[I],120,OA[*]); 20187000
|
|
MOVE(120,OA[120],OA); 20188000
|
|
WRITE(ISOCODE[I+1],120,OA[*]); 20189000
|
|
END; 20190000
|
|
READACARD; 20191000
|
|
IF NOT SVT THEN 20192000
|
|
BEGIN 20193000
|
|
WRITE(ACCM[*],BJ1); 20194000
|
|
MOVE(9,ACCM,POB); 20195000
|
|
OUTPUT; 20196000
|
|
END; 20197000
|
|
END; 20198000
|
|
COMCON[0]~ REAL(<17700000000>); 20199000
|
|
OHM~ HM~ 3; 20202000
|
|
BFRLNG ~ 8|(BFRMAX-10); 20203000
|
|
END; 20204000
|
|
COMMENT OUTER BLOCK DRIVER SECTION. A GENERAL "STEPI" LOOP 21000000
|
|
IS FORMED TO SCAN THE INPUT STRING. ANY ITEM REACHING HERE AS AN 21001000
|
|
ELBAT WORD IS PUT INTO THE OUTPUT STRING BY THE HANDLERS OF 21002000
|
|
THE -SCLASS- SWITCH. ITEMS SUCH AS DEFINES & MACROS AND THE 21003000
|
|
MATERIAL THEY INTERCEPT IS NOT SEEN HERE UNTIL IT HAS FILTERED 21004000
|
|
THRU TABLE WITH NO ACTION TAKEN UPON IT. 21005000
|
|
FROM THE HANDLERS THE ITEMS GO TO WRIT FOR ENTRY INTO A CODE 21006000
|
|
RECORD. PACKING RULES ARE SELECTED FROM THE OUTCLASS SWITCH 21007000
|
|
BEFORE RETURNING TO START FOR THE NEXT ITEM; 21008000
|
|
BEGIN 21009000
|
|
LABEL START,EC,SPECCHAR,OTHRS,DJ,PTCHS,PTCHX, 21010000
|
|
USUAL,WRIT,OT0,OT1,OT2,OT3,OT9; 21011000
|
|
SWITCH SCLASS ~ SPECCHAR,USUAL,USUAL,USUAL,USUAL,USUAL,EC,EC, 21012000
|
|
EC,EC,EC,EC,EC,EC,EC,EC,USUAL,USUAL,EC,EC,USUAL, 21013000
|
|
USUAL,OTHRS,DJ,PTCHS; 21014000
|
|
SWITCH OUTCLASS~ OT3,OT0,OT2,OT2,OT0,OT3,OT1; 21015000
|
|
COMMENT FLUSHIT PARTITIONS RECORDS FOR THE OUTER BLOCK 21016000
|
|
OUTPUT STRING. OA CONTAINS ONE ITEM TO BE OUTPUT: ID, #, SP CHR, 21017000
|
|
OR DECLARATION. AN ATTEMPT IS MADE TO NOT BREAK ITEMS ACROSS 21018000
|
|
RECORD BOUNDARIES; 21019000
|
|
PROCEDURE FLUSHIT; 21020000
|
|
BEGIN 21021000
|
|
WHILE A>0 DO 21022000
|
|
BEGIN IF A}72 AND NOT FLUSHD THEN OUTPUT; 21023000
|
|
WHILE A}72 DO BEGIN 21024000
|
|
M(OA[I.WRD],I.CHR,POB,0,-0,1,8); 21025000
|
|
A ~ A - 72; 21026000
|
|
I ~ I + 72; 21027000
|
|
OUTPUT; 21028000
|
|
END; 21029000
|
|
IF 72-OUTC < A THEN OUTPUT; 21030000
|
|
OP ~ A; 21031000
|
|
M(OA[I.WRD],I.CHR,POB[OUTC.WRD],OUTC.CHR,-0,OP.C6,OP); 21032000
|
|
A~ A-OP; 21033000
|
|
I~ I+OP; 21034000
|
|
IF OUTC~ OUTC+OP=72 THEN BEGIN 21035000
|
|
OUTPUT; OUTC~ REAL(A=0); END 21036000
|
|
ELSE 21037000
|
|
FLUSHD~ FALSE; 21038000
|
|
END; 21039000
|
|
END FLUSHIT; 21040000
|
|
21041000
|
|
START: GO TO SCLASS[1+STEPI]; 21042000
|
|
EC: ERROR(47); 21043000
|
|
GO TO START; 21044000
|
|
SPECCHAR: IF ELB="$" AND NOT DOLLARSIGN THEN 21045000
|
|
BEGIN 21046000
|
|
DOLLARSIGN~ TRUE; 21047000
|
|
OUTPUT 21048000
|
|
END 21049000
|
|
ELSE 21050000
|
|
IF ELB=";" AND DOLLARSIGN THEN 21051000
|
|
BEGIN 21052000
|
|
DOLLARSIGN~ FALSE; 21053000
|
|
OUTPUT; 21054000
|
|
GO TO START 21055000
|
|
END; 21056000
|
|
OA[0]~ "1? "&ELB[18:42:6]; 21057000
|
|
GO WRIT; 21058000
|
|
OTHRS: IF (I~ELB.SUB) = BEGINV THEN BEGIN 21059000
|
|
IF STMTSTKLVL = OUTERLIMIT ! 0 THEN 21060000
|
|
IF NOT DJTOG.[46:1] THEN BEGIN 21061000
|
|
T ~ T - 1; 21062000
|
|
OA[0] ~ "1; "; 21063000
|
|
DJTOG ~ TRUE; 21064000
|
|
ELB ~ ";"; 21065000
|
|
TYPE ~ 0; 21066000
|
|
GO WRIT; 21067000
|
|
END; 21068000
|
|
OA[0]~ "5BEGIN"; DJTOG~ TRUE; 21069000
|
|
P(" ",OA[1],0); 21070000
|
|
OUTERLIMIT ~ OUTERLIMIT + 1 END 21071000
|
|
ELSE 21072000
|
|
IF I=ENDV THEN 21073000
|
|
BEGIN IF STMTSTKLVL } OUTERLIMIT!0 THEN BEGIN 21074000
|
|
T ~ T - 1; 21075000
|
|
OA[0] ~ "1; "; 21076000
|
|
ELB ~ ";"; TYPE~0; 21077000
|
|
GO WRIT; 21078000
|
|
END; 21079000
|
|
OA[0] ~ "3END "; 21080000
|
|
OUTERLIMIT ~ OUTERLIMIT - 1; 21081000
|
|
END 21082000
|
|
ELSE 21083000
|
|
GO TO USUAL; 21084000
|
|
GO WRIT; 21085000
|
|
DJ: I ~ LAD&1[TOREF]; 21086000
|
|
DJTOG ~ DJTOG OR (IF ELB.SUB=1 THEN <3> ELSE TRUE); 21087000
|
|
% 21088000
|
|
READIT(OA,1,I,MDECL); 21091000
|
|
I ~ I - 1; 21091100
|
|
A ~ OA[0].CTR; 21092000
|
|
READIT(OA,(A+10).WRD,I,MDECL); I~ 3; 21093000
|
|
FLUSHIT; 21094000
|
|
IF NOT FLUSHD AND UNPACK THEN OUTPUT; 21095000
|
|
GO START; 21096000
|
|
PTCHS: 21097000
|
|
$ INCLUDE 21102001, IF INTERMEDIATE; 21097049
|
|
I ~ IN4(TANK[ELB].[24:18]); 21097050
|
|
IF I } 500 THEN BEGIN 21098000
|
|
STMTSTACK[SSTK~SSTK+1] ~ (I-500)& 21099000
|
|
(STMTSTKLVL~OUTERLIMIT)[TOPLVL]; 21100000
|
|
GO START; 21101000
|
|
END; 21102000
|
|
PTCHX: 21103000
|
|
$ INCLUDE 21117001, IF INTERMEDIATE; 21103049
|
|
IF NOT FLUSHD THEN OUTPUT; 21103050
|
|
POB[0] ~ "LINK +1"&12[TOC0]; 21104000
|
|
OUTPUT; 21105000
|
|
IF ELB.CLASS ! VPATCHID THEN I ~ STMTSTACK[SSTK].PLOC; 21106000
|
|
PATCHSPACE[I] ~ (*)&(SEQ-100)[TOPSEQN]; 21107000
|
|
PATCHSPACE[I+1] ~ ABS(*)&CODEREC[TOPCODE]; 21108000
|
|
IF ELB.CLASS ! VPATCHID THEN BEGIN 21109000
|
|
IF STMTSTKLVL = (STMTSTKLVL~STMTSTACK[SSTK~SSTK-1].PLVL)THEN 21110000
|
|
GO PTCHX; 21111000
|
|
IF DJTOG THEN BEGIN 21112000
|
|
DJTOG ~ FALSE; 21113000
|
|
IF TYPE=0 AND ELB=";" THEN GO START ELSE GO WRIT; 21114000
|
|
END; 21115000
|
|
GO OT9; 21116000
|
|
END; 21117000
|
|
GO START; 21118000
|
|
USUAL: MOVE(((TANK[ELB].CTR+10).WRD).IC,TANK[ELB],OA); 21119000
|
|
WRIT: 21120000
|
|
$ INCLUDE 21127001, IF DEBUGGING; 21120049
|
|
IF MONITER THEN 21120050
|
|
IF PRINT AND NOT INTERLIST THEN BEGIN 21121000
|
|
IF A~OA[0].CTR+1 < 117 THEN BEGIN % CLEAN OA FOR PRINT 21122000
|
|
BLANK(OA[15],0,14); 21123000
|
|
A ~ MOVER(120-A,OA,120,OA,A+3,0); 21124000
|
|
END; 21125000
|
|
WRITE(PRINTER, 15, OA[*]); 21126000
|
|
END; 21127000
|
|
IF PREV AND OUTC!0 AND TYPE=0 THEN 21128000
|
|
OUTC~ OUTC-1; 21129000
|
|
A ~ OA[0].CTR; 21130000
|
|
OA[0].C2 ~ " "; 21131000
|
|
I~ 3; 21132000
|
|
PREV~ TYPE!0; 21133000
|
|
IF OUTERLIMIT = STMTSTKLVL AND SSTK!0 THEN 21134000
|
|
IF NOT DJTOG.[46:1] AND DJTOG THEN BEGIN OA[0].CTR~A;GO PTCHX;END 21135000
|
|
ELSE IF ELB=";" THEN BEGIN 21136000
|
|
FLUSHIT; 21137000
|
|
GO PTCHX; 21138000
|
|
END; 21139000
|
|
IF TYPE=VOTHERS THEN GO OUTCLASS[ELB.SUB-BEGINV+1]; 21140000
|
|
OT0: FLUSHIT; 21141000
|
|
IF ELB=";" AND UNPACK THEN 21142000
|
|
OUTPUT; 21143000
|
|
GO OT9; 21144000
|
|
OT1: IF NOT FLUSHD AND UNPACK THEN 21145000
|
|
OUTPUT; 21146000
|
|
FLUSHIT; 21147000
|
|
GO OT9; 21148000
|
|
OT3: IF NOT FLUSHD AND UNPACK THEN 21149000
|
|
OUTPUT; 21150000
|
|
OT2: FLUSHIT; 21151000
|
|
IF UNPACK THEN 21152000
|
|
OUTPUT; 21153000
|
|
OT9: IF NOT FLUSHD THEN 21154000
|
|
IF OUTC~ OUTC+REAL(PREV)=72 THEN 21155000
|
|
OUTPUT; 21156000
|
|
IF TYPE!VOTHERS AND ELB.SUB!BEGINV THEN 21157000
|
|
DJTOG ~ IF ELB=";" AND TYPE=0 THEN FALSE ELSE DJTOG AND <2>; 21158000
|
|
GO TO START; 21159000
|
|
END DRIVER BLOCK; 21160000
|
|
COMMENT DP HANDLES THE CREATION OF A NEW LANGUAGE FILE. 25000000
|
|
CHECKS ARE MADE THAT A COMPLETE FILE CAN BE OBTAINED BEFORE 25001000
|
|
INAUGURATING THE DUMP. NO DECLARATIONS, INCLUDING MACROS CAN BE 25002000
|
|
IN PROCESS, AND NO ERRORS CAN HAVE OCCURED; 25003000
|
|
DP: BEGIN LABEL L; L: 25004000
|
|
IF OUTC > 0 THEN OUTPUT; 25005000
|
|
IF MACROTOG OR MACT > 0 THEN ERROR(83); 25006000
|
|
IF DEC THEN ERROR(82); 25007000
|
|
IF SEQ>0 AND SVT.[46:1] THEN ERROR(109); 25007100
|
|
IF ERRCT = 0 THEN BEGIN 25008000
|
|
IF W~2 + (NEXTDICT+255).IR + (NXTUDICT+255).IR + (PT+255).IR 25009000
|
|
+ (DECP+255).IR + (CODEREC+27)DIV 28 + (NXTPTCHREC+27) 25010000
|
|
DIV 28 + (GLAT-GALFBAS+1) + REAL(BLVL>1) + 25011000
|
|
REAL(GLAT}GALFBAS) + REAL(GLIT}GINTBAS) + 25012000
|
|
REAL(GLOT}GPTRBAS) 25013000
|
|
> 50 THEN W ~ 50; 25014000
|
|
BEGIN 25015000
|
|
FILE NEWLANGUAGE DISK SERIAL [20:W](2,256,SAVE 780); 25016000
|
|
ARRAY GLOBSIZE[0:(GLAT-GALFBAS+4).D4]; 25017000
|
|
FORMAT 25018000
|
|
DP1("NEW LANGUAGE FILE DUMPED TO "A1,A6"/"A1,A6); 25019000
|
|
LABEL EOCODE; 25019500
|
|
FILEPARAMETERS(NEWLANGUAGE,DFN[*]); 25020000
|
|
F ~ DFN[1]; 25021000
|
|
IF MF~ DFN[0]=0 THEN 25022000
|
|
FILL NEWLANGUAGE WITH MF~"MCALGOL"; 25023000
|
|
WRITE(NEWLANGUAGE,*,DOLLARDICT,STREAMDICT,MACRODICT, 25024000
|
|
ALGOLDICT,NEXTDICT,LASTDICT,NXTUDICT,LSTUDICT, 25025000
|
|
BLVL,RCCNT,LANGUAGELEVEL,BECT,SEQ,PT,DECP~DECP.LIM, 25026000
|
|
GLAT,GLIT,GLOT,NXTPTCHX,NXTPTCHREC,NXTCODE); 25027000
|
|
WRITE(NEWLANGUAGE,250,DLIST[*]); 25028000
|
|
IF BLVL > 1 THEN BEGIN 25029000
|
|
MOVE(100,BLIST,DFN); 25030000
|
|
MOVE(128,STMTSTACK,DFN[100]); 25031000
|
|
DFN[228] ~ OUTERLIMIT; 25032000
|
|
DFN[229] ~ STMTSTKLVL; 25033000
|
|
DFN[230] ~ SSTK; 25034000
|
|
MOVE(8,SPACEMAP[8],DFN[231]); 25035000
|
|
WRITE(NEWLANGUAGE,256,DFN[*]); 25036000
|
|
END; 25037000
|
|
FOR I~0 STEP 256 UNTIL NEXTDICT-1 DO 25038000
|
|
WRITE(NEWLANGUAGE,256,DICT[I.IR,*]); 25039000
|
|
$ INCLUDE 25041001, IF ADVANCED; 25039999
|
|
FOR I~0 STEP 256 UNTIL NXTUDICT-1 DO 25040000
|
|
WRITE(NEWLANGUAGE,256,UDICT[I.IR,*]); 25041000
|
|
IF BOOLEAN(MSTORP).PDP1 THEN 25041900
|
|
WRITE(MSTOR[MSTORP.PDF1],256,MCODE[*]); 25041950
|
|
FOR I~0 STEP 256 UNTIL PT-1 DO BEGIN 25042000
|
|
READ(MSTOR[I.IR],256,MCODE[*]); 25043000
|
|
WRITE(NEWLANGUAGE,256,MCODE[*]); 25044000
|
|
END; 25045000
|
|
IF BOOLEAN(MSTORP).PDP2 THEN 25045900
|
|
WRITE(MSTOR[MSTORP.PDF2+150],256,MDECL[*]); 25045950
|
|
FOR I~0 STEP 256 UNTIL DECP-1 DO BEGIN 25046000
|
|
READ(MSTOR[I.IR+150],256,MDECL[*]); 25047000
|
|
WRITE(NEWLANGUAGE,256,MDECL[*]); 25048000
|
|
END; 25049000
|
|
IF GLAT } GALFBAS THEN BEGIN 25050000
|
|
A ~ GLAT - GALFBAS + 1; 25051000
|
|
FOR I~0 STEP 1 UNTIL A DO 25052000
|
|
IF INUSE(SPACEMAP[I.D32+8],I.M32) THEN 25053000
|
|
GLOBSIZE[I.D4] ~ * + GLOBAL[I.D4,I.M4|64].CTR; 25054000
|
|
WRITE(NEWLANGUAGE,A~(A+3).D4,GLOBSIZE[*]); 25055000
|
|
FOR I~0 STEP 1 UNTIL A DO 25056000
|
|
IF GLOBSIZE[I] ! 0 THEN 25057000
|
|
WRITE(NEWLANGUAGE,256,GLOBAL[I,*]); 25058000
|
|
END; 25059000
|
|
IF GLIT } GINTBAS THEN 25060000
|
|
WRITE(NEWLANGUAGE,GLIT-GINTBAS+1,GINT[*]); 25061000
|
|
IF GLOT } GPTRBAS THEN 25062000
|
|
WRITE(NEWLANGUAGE,GLOT-GPTRBAS+1,GPTR[*]); 25063000
|
|
REWIND(CODE); 25064000
|
|
OUTC~ 0; 25065000
|
|
FOR I~ 0 STEP 100 UNTIL SEQ-100 DO 25066000
|
|
BEGIN 25067000
|
|
READ(CODE,9,ACCM[*])[EOCODE]; 25068000
|
|
MOVE(9, ACCM, OA[OUTC]); 25069000
|
|
IF OUTC~ OUTC+9=252 THEN 25070000
|
|
BEGIN 25071000
|
|
WRITE(NEWLANGUAGE, 252, OA[*]); 25072000
|
|
OUTC~ 0 25073000
|
|
END; 25074000
|
|
END; 25075000
|
|
EOCODE: 25075900
|
|
IF OUTC>0 THEN 25076000
|
|
WRITE(NEWLANGUAGE, OUTC, OA[*]); 25077000
|
|
$ INCLUDE 25106001, IF INTERMEDIATE; 25077999
|
|
IF NXTPTCHX}0 THEN BEGIN 25078000
|
|
OUTC~0; 25079000
|
|
WRITE(NEWLANGUAGE,NXTPTCHX+2,PATCHSPACE[*]); 25080000
|
|
FOR T~0 STEP 2 UNTIL NXTPTCHX DO BEGIN 25081000
|
|
W~PATCHSPACE[T]; A~PATCHSPACE[T+1]; 25082000
|
|
BC ~ A.PUSED-1; 25083000
|
|
BW ~ W.PBASE; 25084000
|
|
FOR I~0 STEP 1 UNTIL BC DO BEGIN 25085000
|
|
READ(BACKPATCHES[BW+BC],9,POB[*]); 25086000
|
|
MOVE(9,POB,OA[OUTC]); 25087000
|
|
IF OUTC~OUTC+9=252 THEN BEGIN 25088000
|
|
WRITE(NEWLANGUAGE,252,OA[*]); 25089000
|
|
OUTC~0; 25090000
|
|
END; 25091000
|
|
END; 25092000
|
|
IF OUTC>0 THEN 25093000
|
|
WRITE(NEWLANGUAGE,OUTC,OA[*]); 25094000
|
|
END; 25095000
|
|
END; 25096000
|
|
IF NXTCODE ! 0 THEN BEGIN 25097000
|
|
FOR I~0 STEP 1 UNTIL NXTCODE.CROW DO BEGIN 25098000
|
|
READ(ISOCODE[I],120,DFN[*]); 25099000
|
|
MOVE(120,DFN,OA[I.[47:1]|120]); 25100000
|
|
IF BOOLEAN(I) THEN 25101000
|
|
WRITE(NEWLANGUAGE,240,OA[*]); 25102000
|
|
END; 25103000
|
|
IF BOOLEAN(I) THEN 25104000
|
|
WRITE(NEWLANGUAGE,120,OA[*]); 25105000
|
|
END; 25106000
|
|
LOCK(NEWLANGUAGE); 25107000
|
|
IF PRINT THEN BEGIN 25108000
|
|
WRITE(PRINTER[DBL]); 25109000
|
|
WRITE(PRINTER[DBL],DP1,MF.C1,MF,F.C1,F); 25110000
|
|
END; 25111000
|
|
GO TO ENDDD 25112000
|
|
END; 25113000
|
|
END ELSE 25114000
|
|
RCCNT ~ -1; 25115000
|
|
END; 25116000
|
|
COMMENT EOF IS REACHED BY READING BEYOND END OF FILE OR BY 26000000
|
|
TABLE FINDING AN "END.". IF ERRORS HAVE OCCURRED THEY ARE LISTED 26001000
|
|
IN ORDER. BACKPATCHES ARE LINKED IN IF USED. IF NO ERRORS OR A 26002000
|
|
SAVE (AND NOT A SYNTAX RUN), THE CODE FILE IS LOCKED & THE 26003000
|
|
CONTROL DECK (IF ANY) IS LISTED & ZIPPED; 26004000
|
|
EOF: BEGIN 26005000
|
|
% 26006000
|
|
FORMAT 26013000
|
|
EJ1("NUMBER OF ERRORS ="I4,X12"LAST CARD IN ERROR " 26014000
|
|
"HAS SEQUENCE #"), 26015000
|
|
EJ2("?END"), 26016000
|
|
EJ3("OUTPUT STRING LOCKED AS FILE:"A1,A6"/"A1,A6); 26017000
|
|
% 26018000
|
|
SEQ~ 99999899; 26019000
|
|
BLANK(ERB,0,14); 26020000
|
|
BW ~ BFRMAX-10; 26021000
|
|
BC~ 0; 26022000
|
|
IF BLVL>1 AND RCCNT}0 THEN 26023000
|
|
DO 26024000
|
|
ERROR(50) 26025000
|
|
UNTIL BLVL~ BLVL-1{1; 26026000
|
|
OUTPUT; 26027000
|
|
OUTPUT; 26028000
|
|
$ INCLUDE 26059001, IF INTERMEDIATE; 26028999
|
|
IF NXTPTCHX}0 AND NOT SVT.[46:1] THEN BEGIN 26029000
|
|
POB[0] ~ "LINK +0"&12[TOC0]; 26030000
|
|
WRITE(CODE,10,POB[*]); 26031000
|
|
CODEREC ~ CODEREC + 1; 26032000
|
|
FOR T~0 STEP 2 UNTIL NXTPTCHX DO BEGIN 26033000
|
|
W~PATCHSPACE[T]; F~PATCHSPACE[T+1]; 26034000
|
|
BC ~ F.PUSED-1; 26035000
|
|
BW ~ W.PBASE; 26036000
|
|
SEQ~ W.PSEQN; 26037000
|
|
PATCHSPACE[T] ~ CODEREC&BC[1:1:1]; 26038000
|
|
FOR I~0 STEP 1 UNTIL BC DO BEGIN 26039000
|
|
READ(BACKPATCHES[BW+I],9,POB[*]); 26040000
|
|
SEQN(SEQ+I,POB[9]); 26041000
|
|
WRITE(CODE,10,POB[*]); 26042000
|
|
CODEREC ~ CODEREC + 1; 26043000
|
|
END; 26044000
|
|
BLANK(POB,0,14); 26045000
|
|
POB[9] ~ 26045950
|
|
POB[0] ~ "LINK "&12[TOC0]; 26046000
|
|
MOVEDEC(F.PLOC,POB[1],0,3,5,4); 26047000
|
|
WRITE(CODE,10,POB[*]); 26048000
|
|
CODEREC ~ CODEREC + 1; 26049000
|
|
END; 26050000
|
|
FOR T~NXTPTCHX STEP -2 UNTIL 0 DO BEGIN 26051000
|
|
IF PATCHSPACE[T]}0 AND PATCHSPACE[T+1]}0 THEN BEGIN 26052000
|
|
BLANK(POB,0,9); 26053000
|
|
POB[9] ~ 26053950
|
|
POB[0] ~ "LINK "&12[1:43:5]; 26054000
|
|
MOVEDEC(PATCHSPACE[T],POB[1],0,3,5,4); 26055000
|
|
WRITE(CODE[PATCHSPACE[T+1].PCODE-1],10,POB[*]); 26056000
|
|
END; 26057000
|
|
END; 26058000
|
|
END LINK PATCHING; 26059000
|
|
IF WRITEIT THEN 26060000
|
|
WRITE(PRINTER[PAGE]); 26061000
|
|
IF IACCM~ERRCT>0 OR WARNING THEN 26062000
|
|
BEGIN 26063000
|
|
DEFINE ERRCT=IACCM#; 26064000
|
|
WRITE(ERB[*],EJ1,ERRCT); 26065000
|
|
CLOSE(ERRORS); 26065050
|
|
FILL ERRORS WITH "MCALGOL","ERRORS "; 26065100
|
|
MOVE(1, LINKS[1], ERB[9]); 26066000
|
|
WRITE(PRINTER[DBL], 15, ERB[*]); 26067000
|
|
FOR ERRCT~ 0 STEP 1 UNTIL 31 DO 26068000
|
|
IF REAL(ATOG~ERRMASK[ERRCT])!0 THEN 26069000
|
|
FOR T~0 STEP 1 UNTIL 31 DO 26070000
|
|
IF REAL(MASK(T) AND ATOG)!0 THEN BEGIN 26071000
|
|
% 26072000
|
|
ERRORLINK(32|IACCM+T); 26086000
|
|
END; 26087000
|
|
END; 26088000
|
|
IF (SVT OR ERRCT=0) AND NOT SVT.[46:1] THEN 26089000
|
|
IF CODEREC > 0 THEN BEGIN 26090000
|
|
IF PRINT THEN BEGIN 26090050
|
|
SEARCH(CODE,ERB[*]); 26090100
|
|
WRITE(PRINTER[DBL],EJ3,ERB[1].C1,ERB[1], 26090150
|
|
ERB[2].C1,ERB[2]); 26090200
|
|
END; 26090250
|
|
LOCK(CODE); 26091000
|
|
END; 26091500
|
|
IF CCC>0 AND ERRCT=0 AND NOT SVT.[46:1] THEN 26092000
|
|
BEGIN 26093000
|
|
WRITE(CC,EJ2); 26094000
|
|
IF CCLISTOG OR PRINT THEN BEGIN 26095000
|
|
LABEL ALL; ARRAY A[0:9]; 26096000
|
|
REWIND(CC); 26097000
|
|
WRITE(PRINTER[DBL],<"LISTING OF CONTROL DECK">); 26098000
|
|
WHILE TRUE DO BEGIN 26099000
|
|
READ(CC,10,A[*])[ALL]; 26100000
|
|
WRITE(PRINTER,10,A[*]); 26101000
|
|
END; 26102000
|
|
ALL: END; 26103000
|
|
ZIP WITH CC 26104000
|
|
END; 26105000
|
|
END; 26106000
|
|
ENDDD: IF WRITEIT THEN 26107000
|
|
TIMEIT(PRINTER); 26108000
|
|
IF NEWFILE AND ERRCT=0 THEN LOCK(NEWDISK); 26109000
|
|
IF ERRCT=0 THEN 26110000
|
|
ERRCT~-1; 27000000
|
|
IF INDEXING THEN BEGIN 27001000
|
|
REAL C,E,S,Q; 27002000
|
|
ARRAY Z[0:9],NAMES[0:12]; 27003000
|
|
BOOLEAN PROCEDURE INPUT(A); ARRAY A[0]; 27004000
|
|
BEGIN 27005000
|
|
LABEL WHEW,NORM,EXIT; 27006000
|
|
DEFINE APLACE = A[Q.WRD],Q.CHR #; 27007000
|
|
STREAM PROCEDURE SETUP(A,B,C,D,E,F,G); VALUE A,B,C,D,E,G; 27008000
|
|
BEGIN 27009000
|
|
DI~F; DI~DI+G; SI~LOC A; 27010000
|
|
DS~3 LIT "SZ:"; DS~5 DEC; F~DI; DI~DI-5; DS~4 FILL; DI~F; 27011000
|
|
DS~5 LIT " LMS:";DS~4 DEC; F~DI; DI~DI-4; DS~3 FILL; DI~F; 27012000
|
|
DS~6 LIT" LIMS:";DS~4 DEC; F~DI; DI~DI-4; DS~3 FILL; DI~F; 27013000
|
|
DS~5 LIT " LMP:";DS~4 DEC; F~DI; DI~DI-4; DS~3 FILL; DI~F; 27014000
|
|
DS~6 LIT" CONP:";DS~4 DEC; F~DI; DI~DI-4; DS~3 FILL; 27015000
|
|
END; 27016000
|
|
STREAM PROCEDURE MOV(NN,N,S,SS,D,DD); 27017000
|
|
VALUE NN, N, SS, DD; 27018000
|
|
BEGIN 27019000
|
|
SI~S; SI~SI+SS; DI~D; DI~DI+DD; 27020000
|
|
NN(DS~ 32 CHR;DS~ 32 CHR); 27021000
|
|
DS~ N CHR 27022000
|
|
END; 27023000
|
|
27024000
|
|
READ(INDEX,10,Z[*])[WHEW]; 27025000
|
|
BLANK(A,0,14); 27026000
|
|
MOV(0,S~Z[1].LSCTR,Z[1],3,A[0],0); % ID 27027000
|
|
Q ~ IF S > 12 THEN S+1 ELSE 13; 27028000
|
|
MOV(0,8,Z[9],0,APLACE); % SEQUENCE # 27029000
|
|
Q ~ Q + 9; 27030000
|
|
IF C~(E~Z[0]).CLASS = VMACRONAME THEN BEGIN 27031000
|
|
MOVEDEC(Z[8].MPT,APLACE,3,5,7); 27032000
|
|
Q ~ Q + 7; 27033000
|
|
IF S~E.SUB = LISTV THEN BEGIN 27034000
|
|
MOV(0,5,NAMES[0],0,APLACE); 27035000
|
|
Q ~ Q + 5; 27036000
|
|
END ELSE 27037000
|
|
IF S = EQVV THEN BEGIN 27038000
|
|
MOV(0,4,NAMES[1],0,APLACE); 27039000
|
|
Q ~ Q + 4; 27040000
|
|
END; 27041000
|
|
MOV(0,6,NAMES[1],4,APLACE); 27042000
|
|
IF Q { 60 THEN BEGIN Q ~ 63; 27043000
|
|
SETUP((S~Z[7]).MML,S.MLACT-27,S.MLICT-1,Z[8].MLOCT, 27044000
|
|
S.MPOOL,APLACE) END; 27045000
|
|
END ELSE 27046000
|
|
IF C = VSTRINGNAME THEN BEGIN % MSTRINGS & MPOINTERS 27047000
|
|
MOVEDEC((C~Z[8]).REF,APLACE,3,5,7); 27048000
|
|
Q ~ Q + 7; 27049000
|
|
IF C.REF } GALFBAS THEN BEGIN 27050000
|
|
MOV(0,7,NAMES[2],2,APLACE); 27051000
|
|
Q ~ Q + 7; 27052000
|
|
END ELSE BEGIN 27053000
|
|
MOV(0,6,NAMES[3],1,APLACE); 27054000
|
|
Q ~ Q + 6; 27055000
|
|
END; 27056000
|
|
IF BOOLEAN(S~E.SUB).[45:1] THEN BEGIN 27057000
|
|
MOV(0,20,NAMES[5],6,APLACE); 27058000
|
|
Q ~ Q + 20; 27059000
|
|
GO EXIT; 27060000
|
|
END ELSE 27061000
|
|
IF BOOLEAN(S) THEN BEGIN 27062000
|
|
MOV(0,8,NAMES[4],0,APLACE); 27063000
|
|
Q ~ Q + 8; 27064000
|
|
END ELSE BEGIN 27065000
|
|
MOV(0,6,NAMES[5],0,APLACE); 27066000
|
|
Q ~ Q + 6; 27067000
|
|
END; 27068000
|
|
IF BOOLEAN(S).[46:1] THEN BEGIN 27069000
|
|
MOV(0,9,NAMES[7],1,APLACE); 27070000
|
|
Q ~ Q + 9; 27071000
|
|
GO EXIT; 27072000
|
|
END; 27073000
|
|
MOV(0,8,NAMES[8],2,APLACE); 27074000
|
|
Q ~ Q + 8; 27075000
|
|
IF S~C.LIM = 0 THEN 27076000
|
|
MOV(0,3,NAMES[0],5,APLACE) 27077000
|
|
ELSE BEGIN 27078000
|
|
NORM: MOV(0,1,NAMES[0],5,APLACE); 27079000
|
|
Q ~ Q + 1; 27080000
|
|
MOVEDEC(S-REAL(E.SUB=0),APLACE,4,4,7); 27081000
|
|
Q ~ Q + 4; 27082000
|
|
MOV(0,1,NAMES[0],7,APLACE); 27083000
|
|
END; 27084000
|
|
END ELSE 27085000
|
|
IF C = VMFIELDID THEN BEGIN 27086000
|
|
Q ~ Q + 7; 27087000
|
|
MOV(0,7,NAMES[9],2,APLACE); 27088000
|
|
END ELSE BEGIN % PROCEDURES 27089000
|
|
Q ~ Q + 7; 27090000
|
|
MOV(0,10,NAMES[10],1,APLACE); 27091000
|
|
END; 27092000
|
|
IF FALSE THEN BEGIN 27093000
|
|
WHEW: INPUT ~ TRUE; 27094000
|
|
CLOSE(INDEX,PURGE) END; 27095000
|
|
EXIT: 27096000
|
|
END INPUT; 27097000
|
|
27098000
|
|
BOOLEAN PROCEDURE COMP(A,B); ARRAY A,B[0]; 27099000
|
|
BEGIN 27100000
|
|
BOOLEAN STREAM PROCEDURE CMP(A,B); BEGIN SI~A; DI~B; 27101000
|
|
IF 12 SC<DC THEN TALLY~1; CMP~TALLY END; 27102000
|
|
COMP ~ CMP(A[0],B[0]); 27103000
|
|
END; 27104000
|
|
PROCEDURE HIV(A); ARRAY A[0]; 27105000
|
|
FOR S~0 STEP 1 UNTIL 14 DO A[S] ~ REAL(<1414141414141414>); 27106000
|
|
PROCEDURE OUTPUT(LAST,A); VALUE LAST; 27107000
|
|
BOOLEAN LAST; ARRAY A[0]; 27108000
|
|
IF NOT LAST THEN 27109000
|
|
WRITE(PRINTER,15,A[*]); 27110000
|
|
27111000
|
|
FILL NAMES[*] WITH "LIST [*]","EQV MACR","O GLOBAL"," LOCAL ", 27112000
|
|
"INTEGER ","ALPHA DI","CTIONARY"," MPOINTE","R MSTRIN", 27113000
|
|
"G MFIELD"," PROCEDU","RE "; 27114000
|
|
REWIND(INDEX); 27115000
|
|
WRITE(PRINTER[PAGE]); 27116000
|
|
TIMEIT(PRINTER); 27117000
|
|
SORT(OUTPUT,INPUT,0,HIV,COMP,15,5000,16|INXR); 27118000
|
|
TIMEIT(PRINTER); 27119000
|
|
END END; 27120000
|
|
$ INCLUDE 27120190, IF COUNTING; 27120010
|
|
BEGIN 27120020
|
|
FORMAT CF1("SCANNERS A B S E:"4I10/ 27120030
|
|
"TABLE"I10" INDICT"I10/"PUT GET MOVER PUTTER:"4I10/ 27120040
|
|
"STACKING"2I10" STOR"I10" PSEUDO"I10/ 27120050
|
|
I5" RESERVES FOR"I5" RECORDS;"I5" USED"); 27120052
|
|
WRITE(PRINTER,CF1,ASCT,BSCT,SSCT,ESCT, 27120060
|
|
STEPCT,INDCT,PUTCT,GETCT,MOVCT,PTRCT, 27120070
|
|
STKCT,STKMX,MSTCT,BFRMAX-PSEU 27120080
|
|
$ INCLUDE 27120083, IF INTERMEDIATE; 27120081
|
|
,NXTPTCHX.D2,NXTPTCHREC,PTCHCT 27120082
|
|
); 27120088
|
|
END; 27120090
|
|
END. 27121000
|
|
27122000
|
|
27123000
|
|
27123100
|
|
% 99999999
|
|
99999999
|