diff --git a/tools/xem/ESPOLXEM.alg_m b/tools/xem/ESPOLXEM.alg_m
index 213ddfc..a51a674 100644
--- a/tools/xem/ESPOLXEM.alg_m
+++ b/tools/xem/ESPOLXEM.alg_m
@@ -1,6926 +1,10853 @@
-%#######################################################################00001000
-% 00001010
-% B-5700 ESPOL COMPILER 00001020
-% MARK XVI.0.00 00001030
-% OCT 1, 1974 00001040
-% 00001050
-%#######################################################################00001060
-% 00001070
- COMMENT: * TITLE: B5500/B5700 MARK XVI SYSTEM RELEASE * 00001072
- * FILE ID: SYMBOL/ESPOL TAPE ID: SYMBOL1/FILE000 * 00001073
- * THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00001074
- * AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00001075
- * EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00001076
- * WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00001077
- * BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00001078
- * * 00001079
- * COPYRIGHT (C) 1971, 1972, 1974 * 00001080
- * BURROUGHS CORPORATION * 00001081
- * AA320206 AA393180 AA332366 *; 00001082
-COMMENT#################################################################00001110
- ERROR MESSAGES 00001120
-########################################################################00001130
-% 00001140
-ERROR NUMBER ROUTINE:ERROR MESSAGE 00002000
- 000 BLOCK: DECLARATION NOT FOLLOWED BY SEMICOLON. 00003000
- 001 BLOCK: IDENTIFIER DECLARED TWICE IN SAME BLOCK. 00004000
- 002 PROCEDUREDEC: SPECIFICATION PART CONTAINS 00005000
- IDENTIFIER NOT APPEARING IN 00006000
- FORMAL PARAMETER PART. 00007000
- 003 BLOCK: NON-IDENTIFIER APPEARS IN IDENTIFIER 00008000
- LIST OF DECLARATION. 00009000
- 004 PROCEDUREDEC: STREAM PROCEDURE DECLARATION 00010000
- PRECEDED BY ILLEGAL DECLARATOR. 00011000
- 005 PROCEDUREDEC: PROCEDURE DECLARATION PRECEDED 00012000
- BY ILLEGAL DECLARATOR. 00013000
- 006 PROCEDUREDEC: PROCEDURE IDENTIFIER USED BEFORE 00014000
- IN SAME BLOCK(NOT FORWARD). 00015000
- 007 PROCEDUREDEC: PROCEDURE IDENTIFIER NOT FOLLOWED 00016000
- BY ( OR SEMICOLON IN PROCEDURE 00017000
- DECLARATION. 00018000
- 008 PROCEDUREDEC: FORMAL PARAMETER LIST NOT FOLLOWED 00019000
- BY ). 00020000
- 009 PROCEDUREDEC: FORMAL PARAMETER PART NOT FOLLOWED 00021000
- BY SEMICOLON. 00022000
- 010 PROCEDUREDEC: VALUE PART CONTAINS IDENTIFIER 00023000
- WHICH DID NOT APPEAR IN FORMAL 00024000
- PARAPART. 00025000
- 011 PROCEDUREDEC: VALUE PART NOT ENDED BY SEMICOLON. 00026000
- 012 PROCEDUREDEC: MISSING OR ILLEGAL SPECIFICATION 00027000
- PART. 00028000
- 013 PROCEDUREDEC: OWN USED IS ARRAY SPECIFICATION. 00029000
- 014 PROCEDUREDEC: SAVE USED IN ARRAY SPECIFICATION. 00030000
- 015 BLOCK: DECLARATION PRECEDED BY ILLEGAL DECLARATOR. 00031000
- 016 ARRAYDEC: ARRAY ID IN DECLARATION NOT FOLLOWED 00032000
- BY [ . 00033000
- 017 ARRAYDEC: LOWER BOUND IN ARRAY DEC NOT 00034000
- FOLLOWED BY : . 00035000
- 018 ARRAYDEC: BOUND PAIR LIST NOT FOLLOWED BY ]. 00036000
- 019 ARRAYSPEC: ILLEGAL LOWER BOUND DESIGNATOR IN 00037000
- ARRAY SPECIFICATION. 00038000
- 020 BLOCK: OWN APPEARS IMMEDIATELY BEFORE 00039000
- IDENTIFIER(NO TYPE). 00040000
- 021 BLOCK: SAVE APPEARS IMMEDIATELY BEFORE 00041000
- IDENTIFIER(NO TYPE). 00042000
- 022 BLOCK: STREAM APPEARS IMMEDIATELY BEFORE 00043000
- IDENTIFIER(THE WORD PROCEDURE LEFT 00044000
- OUT). 00045000
- 023 BLOCK: DECLARATOR PRECEDED ILLEGALLY BY 00046000
- ANOTHER DECLARATOR. 00047000
- 024 PROCEDUREDEC: LABEL CANNOT BE PASSED TO FUNCTION. 00048000
- 025 BLOCK: DECLARATOR OR SPECIFIER ILLEGALLY 00049000
- PRECEDED BY OWN OR SAVE OR SOME 00050000
- OTHER DECLARATOR. 00051000
- 026 FILEDEC: MISSING ( IN FILE DEC. 00052000
- 027 FILEDEC: NO. OF BUFFERS IN FILE DEC MUST BE 00053000
- AN UNSIGNED INTEGER. 00054000
- 028 FILEDEC: ILLEGAL BUFFER PART OR SAVE FACTOR 00055000
- IN FILE DEC. 00056000
- 029 FILEDEC: MISSING ) IN FILE DEC. 00057000
- 030 PROCEDUREDEC: PROCEDURE TYPE AT ACTUAL DECLARATION 00058000
- TIME DIFFERENT THAN AT FORWARD DEC. 00059000
- 031 LISTDEC: MISSING ( IN LISTDEC. 00060000
- 032 FORMATDEC: MISSING ( IN FORMAT DEC. 00061000
- 033 SWITCHDEC: SWITCH DEC DOES NOT HAVE ~ OR 00062000
- FORWARD AFTER IDENTIFIER. 00063000
- 034 SWITCHFILEDEC:MISSING ~ AFTER FILED. 00064000
- 035 SWITCHFILEDEC:NON FILE ID APPEARING IN DECLARATION 00065000
- OF SWITCHFILE. 00066000
- 036 SUPERFORMATDEC:FORMAT ID NOT FOLLOWED BY ~ . 00067000
- 037 SUPERFORMATDEC:MISSING ( AT START OF FORMATPHRASE . 00068000
- 038 SUPERFORMATDEC:FORMAT SEGMENT >1022 WORDS. 00069000
- 040 SEGMENT: SAVE CODE EXCEEDS 4080 WHICH KERNEL CAN H/L 00069100
-050 ANYWHERE: OUT OF RANGE OF C RELATIVE ADDRESSING FOR CONSTANT 00069500
-051 BLOCK : ILLEGAL F RELATIVE ADDRESS EXP IN DECLARATION 00069510
-052 BLOCK: PROCEDURE WHOSE BODY NOT A BLOCK 00069520
-053 ARRAYDEC: CANT FIND RIGHT BRACKET IN SAVE ARRAY DEC 00069530
-054 ARRAYDEC: FILL PART OF SAVE ARRAY DEC LONGER THAN SIZE 00069540
-056 ARRAYDEC: ILLEGAL DIMENSION INDICATOR IN ARRAY DEC 00069560
-057 SEGMENTSTART:SAVE STORAGE NOT ALLOWED WITH INTRINSIC OPTION 00069570
- 098 IOSTMT: ILLEGAL SPECIFIER IN SCOPE STMT: MUST BE }15. 00069580
- 099 INLINE: EXTRA : IN STREAM HEAD. 00069590
- 100 ANYWHERE: UNDECLARED IDENTIFIER. 00070000
- 101 CHECKER: AN ATTEMPT HAS BEEN MADE TO ADDRESS AN 00071000
- IDENTIFIER WHICH IS LOCAL TO ONE PROCEDURE AND GLOBAL00072000
- TO ANOTHER. IF THE QUANTITY IS A PROCEDURE NAME OR 00073000
- AN OWN VARIABLE THIS RESTRICTION IS RELAXED. 00074000
- 102 AEXP: CONDITIONAL EXPRESSION IS NOT OF ARITHMETIC TYPEH 00075000
- 103 PRIMARY: PRIMARY MAY NOT BEGIN WITH A QUANTITY OF THIS 00076000
- TYPE. 00077000
- 104 ANYWHERE: MISSING RIGHT PARENTHESIS. 00078000
- 105 ANYWHERE: MISSING LEFT PARENTHESIS. 00079000
- 106 PRIMARY: PRIMARY MAY NOT START WITH DECLARATOR. 00080000
- 107 BEXP: THE EXPRESSION IS NOT OF BOOLEAN TYPE. 00081000
- 108 EXPRSS: A RELATION MAY NOT HAVE CONDITIONAL EXPRESSIONS 00082000
- AS THE ARITHMETIC EXPRESSIONS. 00083000
- 109 BOOSEC,SIMBOO, AND BOOCOMP: THE PRIMARY IS NOT BOOLEAN. 00084000
- 110 BOOCOMP: A NON-BOOLEAN OPERATOR OCCURS IN A BOOLEAN 00085000
- EXPRESSION. 00086000
- 111 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00087000
- TIONAL) MAY BEGIN WITH A QUANTITY OF THIS TYPE. 00088000
- 112 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00089000
- TIONAL) MAY BEGIN WITH A DECLARATOR. 00090000
- 113 PARSE: EITHER THE SYTAX OR THE RANGE OF THE LITERALS FOR 00091000
- A CONCATENATE OPERATOR IS INCORRECT. 00092000
- 114 DOTSYNTAX: EITHER THE SYNTAX OR THE RANGE OF THE LITERALS00093000
- FOR A PARTIAL WORD DESIGNATOR IS INCORRECT. 00094000
- 115 DEXP: THE EXPRESSION IS NOT OF DESIGNATIONAL TYPE. 00095000
- 116 IFCLAUSE: MISSING THEN. 00096000
- 117 BANA: MISSING LEFT BRAKET. 00097000
- 118 BANA: MISSING RIGHT BRAKET. 00098000
- 119 COMPOUNDTAIL: MISSING SEMICOLON OR END. 00099000
- 120 COMPOUNDTAIL: MISSING END. 00100000
- 121 ACTUALPARAPART: AN INDEXED FILE MAY BE PASSED BY NAME 00101000
- ONLY AND ONLY TO A STREAM PROCEDURE - THE STREAM 00102000
- PROCEDURE MAY NOT DO A RELEASE ON THIS TYPE PARA- 00103000
- METER. 00104000
- 122 ACTUALPARAPART: STREAM PROCEDURE MAY NOT HAVE AN 00105000
- EXPRESSION PASSED TO IT BY NAME. 00106000
- 123 ACTUALPARAPART: THE ACTUAL AND FORMAL PARAMETERS DO NOT 00107000
- AGREE AS TO TYPE. 00108000
- 124 ACTUALPARAPART: ACTUAL AND FORMAL ARRAYS DO NOT HAVE SAME00109000
- NUMBER OF DIMENSIONS. 00110000
- 125 ACTUALPARAPART: STREAM PROCEDURES MAY NOT BE PASSED AS A 00111000
- PARAMETER TO A PROCEDURE. 00112000
- 126 ACTUALPARAPART: NO ACTUAL PARAMETER MAY BEGIN WITH A 00113000
- QUANTITY OF THIS TYPE. 00114000
- 127 ACTUALPARAPART: THIS TYPE QUANTITY MAY NOT BE PASSED TO A00115000
- STREAM PROCEDURE. 00116000
- 128 ACTUALPARAPART: EITHER ACTUAL AND FORMAL PARAMETERS DO 00117000
- NOT AGREE AS TO NUMBER, OR EXTRA RIGHT PARENTHESIS. 00118000
- 129 ACTUALPARAPART: ILLEGAL PARAMETER DELIMITER. 00119000
- 130 RELSESTMT: NO FILE NAME. 00120000
- 131 DOSTMT: MISSING UNTIL. 00121000
- 132 WHILESTMT: MISSING DO. 00122000
- 133 LABELR: MISSING C OLON. 00123000
- 134 LABELR: THE LABEL WAS NOT DECLARED IN THIS BLOCK. 00124000
- 135 LABELR: THE LABEL HAS ALREADY OCCURED. 00125000
- 136 FORMATPHRASE: IMPROPER FORMAT EDITING PHRASE. 00126000
- 137 FORMATPHRASE: A FORMAT EDITING PHRASE DOES NOT HAVE AN 00127000
- INTEGER WHERE AN INTEGER IS REQUIRED. 00128000
- 138 FORMATPHRASE: THE WIDTH IS TOO SMALL IN E OR F EDITING 00129000
- PHRASE. 00130000
- 139 TABLE: DEFINE IS NESTED MORE THAN EIGHT DEEP. 00131000
- 140 NEXTENT: AN INTEGER IN A FORMAT IS GREATER THAN 1023. 00132000
- 141 SCANNER: INTEGER OR IDENTIFIER HAS MORE THAN 63 00133000
- CHARACTORS. 00134000
- 142 DEFINEGEN: A DEFINE CONTAINS MORE THAN 2047 CHARACTORS 00135000
- (BLANK SUPPRESSED). 00136000
- 143 COMPOUNDTAIL: EXTRA END. 00137000
- 144 STMT: NO STATEMENT MAY START WITH THIS TYPE IDENTIFIER. 00138000
- 145 STMT: NO STATEMENT MAY START WITH THIS TYPE QUANTITY. 00139000
- 146 STMT: NO STATEMENT MAY START WITH A DECLARATOR - MAY BE 00140000
- A MISSING END OF A PROCEDURE OR A MISPLACED 00141000
- DECLARATION. 00142000
- 147 SWITCHGEN: MORE THAN 256 EXPRESSIONS IN A SWITCH 00143000
- DECLARATION. 00144000
- 148 GETSPACE: MORE THAN 1023 PROGRAM REFERENCE TABLE CELLS 00145000
- ARE REQUIRED FOR THIS PROGRAM. 00146000
- 149 GETSPACE: MORE THAN 255 STACK CELLS ARE REQUIRED FOR THIS00147000
- PROCEDURE. 00148000
- 150 ACTUALPARAPART: CONSTANTS MAY NOT BE PASSED BY NAME TO 00149000
- STREAM PROCEDURES. 00150000
- 151 FORSTMT: IMPROPER FOR INDEX VARIABLE. 00151000
- 152 FORSTMT: MISSING LEFT ARROW FOLLOWING INDEX VARIABLE. 00152000
- 153 FORSTMT: MISSING UNTIL OR WHILE IN STEP ELEMENT. 00153000
- 154 FORSTMT: MISSING DO IN FOR CLAUSE. 00154000
- 155 IFEXP: MISSING ELSE 00155000
- 156 LISTELEMENT: A DESIGNATIONAL EXPRESSION MAY NOT BE A LIST00156000
- ELEMENT. 00157000
- 157 LISTELEMENT: A ROW DESIGNATOR MAY NOT BE A LIST ELEMENT. 00158000
- 158 LISTELEMENT: MISSING RIGHT BRAKET IN GROUP OF ELEMENTS 00159000
- 159 PROCSTMT: ILLEGAL USE OF PROCEDURE OR FUNCTION IDENTIFIER00160000
- 160 PURGE: DECLARED LABEL DOES NOT OCCUR. 00161000
- 161 PURGE: DECLARED FORWARD PROCEDURE DOES NOT OCCUR. 00162000
- 163 ZIPSTMT: MISSING COMMA IN ZIP STATEMENT 00163000
- 163 FORMATPHRASE: THE WIDTH OF A FIELD IS MORE THAN 63. 00164000
- 200 EMIT: SEGMENT TOO LARGE ( > 4093SYLLABLES). 00165000
- 201 SIMPLE VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT-MOST 00166000
- IN A LEFT PART LIST. 00167000
- 202 SIMPLE VARIABLE: MISSING . OR ~ . 00168000
- 203 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS IN A ROW 00169000
- DESIGNATOR. 00170000
- 204 SUBSCRIPTED VARIABLE: MISSING ] IN A ROW DESIGNATOR. 00171000
- 205 SUBSCRIPTED VARIABLE: A ROW DESIGNATOR APPEARS OUTSIDE OF 00172000
- AN ACTUAL PARAMETER LIST OR FILL STATEMENT. 00173000
- 206 SUBSCRIPTED VARIABLE: MISSING ]. 00174000
- 207 SUBSCRIPTED VARIABLE: MISSING [. 00175000
- 208 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS. 00176000
- 209 SUBSCRIPTED VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT- 00177000
- MOST IN A LEFT PART LIST. 00178000
- 210 SUBSCRIPTED VARIABLE: MISSING , OR ~ . 00179000
- 211 VARIABLE: PROCEDURE ID USED OUTSIDE OF SCOPE IN LEFT PART.00180000
- 250 STREAM STMT:ILLEGAL STREAM STATEMENT. 00181000
- 251 ANY STREAM STMT PROCEDURE: MISSING ~. 00182000
- 252 INDEX: MISSING + OR - . 00183000
- 253 INDEX: MISSING NUMBER OR STREAM VARIABLE. 00184000
- 254 EMITC: NUMBER>63 OR NUMBER OF LABELS+LOCALS+FORMALS>63. 00185000
- 255 DSS: MISSING STRING IN DS~ LIT STATEMENT. 00186000
- 256 RELEASES: MISSING PARENTHESIS OR FILE IDENTIFIER IS NOT 00187000
- A FORMAL PARAMETER. 00188000
- 257 GOTOS,LABELS,OR JUMPS: LABEL SPECIFIED IS NOT ON THE SAME 00189000
- NEST LEVEL AS A PRECEDING APPEARANCE OF THE 00190000
- LABEL. 00191000
- 258 LABELS: MISSING :. 00192000
- 259 LABELS: LABEL APPEARS MORE THAN ONCE. 00193000
- 260 GOTOS: MISSING LABEL IN A GO TO OR JUMP OUT TO STATEMENT. 00194000
- 261 JUMPS: MISSING OUT IN JUMP OUT STATEMENT. 00195000
- 262 NESTS: MISSING PARENTHESIS. 00196000
- 263 IFS:MISSING SC IN IF STATEMENT. 00197000
- 264 IFS: MISSING RELATIONAL IN IF STATEMENT. 00198000
- 265 IFS: MISSING ALPHA,DC OR STRING IN IF STATEMENT. 00199000
- 266 IFS: MISSING THEN INIF STATEMENT. 00200000
- 267 FREDFIX: THERE ARE GO TO STATEMENTS IN WHICH THE LABEL IS 00201000
- UNDEFINED. 00202000
- 268 EMITC: A REPEAT INDEX }64 WAS SPECIFIED OR TOO MANY 00203000
- FORMAL PARAMETERS,LOCALS AND LABELS. 00204000
- 269 TABLE: A CONSTANT IS SPECIFIED WHICH IS TOO LARGE 00205000
- OR TOO SMALL. 00206000
- 281 DBLSTMT: MISSING (. 00207000
- 282 DBLSTMT: TOO MANY OPERATORS. 00208000
- 283 DBLSTMT: TOO MANY OPERANDS. 00209000
- 284 DBLSTMT: MISSING , . 00210000
- 285 DBLSTMT: MISSING ) . 00211000
- 300 FILLSTMT: THE IDENTIFIER FOLLOWING "FILL" IS NOT 00212000
- AN ARRAY IDENTIFIER. 00213000
- 301 FILLSTMT: MISSING "WITH" IN FILL STATEMENT. 00214000
- 302 FILLSTMT: IMPROPER FILL ELEMENT. 00215000
- 303 FILLSTMT: NON-OCTAL CHARACTER IN OCTAL FILL. 00216000
- 304 FILLSTMT: IMPROPER ARRAY ROW DESIGNATOR IN FILL. 00217000
- 305 FILLSTMT: DATA IN FILL EXCEEDS 1023 WORDS. 00218000
- 306 FILLSTMT: ODD NUMBER OF PARENTHESES IN FILL. 00218110
- 400 MERRIMAC:MISSING FILE ID IN MONITOR DEC. 00219000
- 401 MERRIMAC:MISSING LEFT PARENTHESIS IN MONITOR DEC. 00220000
- 402 MERRIMAC:IMPROPER SUBSCRIPT FOR MONITOR LIST ELEMENT. 00221000
- 403 MERRIMAC:IMPROPER SUBSCRIPT EXPRESSION DELIMITER IN 00222000
- MONITOR LIST ELEMENT. 00223000
- 404 MERRIMAC:IMPROPER NUMBER OF SUBSCRIPTS IN MONITOR LIST 00224000
- ELEMENT. 00225000
- 405 MERRIMAC:LABEL OR SWITCH MONITORED AT IMPROPER LAVEL. 00226000
- 406 MERRIMAC:IMPROPER MONITOR LIST ELEMENT. 00227000
- 407 MERRIMAC:MISSING RIGHT PARENTHESIS IN MONITOR DECLARATION.00228000
- 408 MERRIMAC:IMPROPER MONITOR DECLARATION DELIMITER. 00229000
- 409 DMUP:MISSING FILE IDENTIFIER IN DUMP DECLARATION. 00230000
- 410 DMUP:MISSING LEFT PARENTHESIS IN DUMP DECLARATION. 00231000
- 411 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF00232000
- SUBSCRIPTS. 00233000
- 412 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF00234000
- SUBSCRIPTS. 00235000
- 413 DMUP:IMPROPER ARRAY DUMP LIST ELEMENT. 00236000
- 414 DMUP:ILLEGAL DUMP LIST ELEMENT. 00237000
- 415 DMUP:MORE THAN 100 LABELS APPEAR AS DUMP LIST ELEMENTS 00238000
- IN ONE DUMP DECLARATION. 00239000
- 416 DMUP:ILLEGAL DUMP LIST ELEMENT DELIMITER. 00240000
- 417 DMUP:MISSING DUMP LABEL IN DUMP DECLARATION. 00241000
- 418 DMUP:MISSING COLON IN DUMP DECLARATION. 00242000
- 419 DMUP:IMPROPER DUMP DECLARATION DELIMITER. 00243000
- 420 READSTMT:MISSING LEFT PARENTHESIS IN READ STATEMENT. 00244000
- 421 READSTMT:MISSING LEFT PARENTHESIS IN READ REVERSE 00245000
- STATEMENT. 00246000
- 422 READSTMT:MISSING FILE IN READ STATEMENT. 00247000
- 423 READSTMT:IMPROPER RELEASE INDICATOR. 00248000
- 424 READSTMT:IMPROPER FILE DELIMITER IN READ STATEMENT 00249000
- 425 READSTMT:IMPROPER FORMAT DELIMITER IN READ STATEMENT. 00250000
- 426 READSTMT:IMPROPER DELIMITER FOR SECOND PARAMETER IN READ 00251000
- STATEMENT. 00252000
- 427 READSTMT:IMPROPER ROW DESIGNATOR IN READ STATEMENT. 00253000
- 428 READSTMT:IMPROPER ROW DESIGNATOR DELIMITER IN READ 00254000
- STATEMENT. 00255000
- 429 READSTMT:MISSING ROW DESIGNATOR IN READ STATEMENT. 00256000
- 430 READSTMT:IMPROPER DELIMITER PRECEEDING THE LIST IN A READ 00257000
- STATEMENT. 00258000
- 431 HANDLETHETAILENDOFAREADORSPACESTATEMENT:IMPROPER END OF 00259000
- FILE LABEL IN READ OR SPACE STATEMENT. 00260000
- 432 HANDLETHETAILENDOFAREADORSPACESTATEMENT:IMPROPER PARITY 00261000
- LABEL IN READ OR SPACE STATEMENT. 00262000
- 433 HANDLETHETAILENDOFAREADORSPACESTATEMENT:MISSING RIGHT 00263000
- BRACKET IN READ OR SPACE STATEMENT. 00264000
- 434 SPACESTMT:MISSING LEFT PARENTHESIS IN SPACE STATEMENT. 00265000
- 435 SPACESTMT:IMPROPER FILE IDENTIFIER IN SPACE STATEMENT. 00266000
- 436 SPACESTMT:MISSING COMMA IN SPACE STATEMENT. 00267000
- 437 SPACESTMT:MISSING RIGHT PARENTHESIS IN SPACE STATEMENT. 00268000
- 438 WRITESTMT:MISSING LEFT PARENTHESIS IN A WRITE STATEMENT. 00269000
- 439 WRITESTMT:IMPROPER FILE IDENTIFIER IN A WRITE STATEMENT. 00270000
- 440 WRITESTMT:IMPROPER DELIMITER FOR FIRST PARAMETER IN A 00271000
- WRITE STATEMENT. 00272000
- 441 WRITESTMT:MISSING RIGHT BRACKET IN CARRIAGE CONTROL PART 00273000
- OF A WRITE STATEMENT. 00274000
- 442 WRITESTMT:ILLEGAL CARRIAGE CONTROL DELIMITER IN A WRITE 00275000
- STATEMENT. 00276000
- 443 WRITESTMT:IMPROPER SECOND PARAMETER DELIMITER IN WRITE 00277000
- STATEMENT. 00278000
- 444 WRITESTMT:IMPROPER ROW DESIGNATOR IN A WRITE STATEMENT. 00279000
- 445 WRITESTMT:MISSING RIGHT PARENTHESIS AFTER A ROW DESIGNATOR00280000
- IN A WRITE STATEMENT. 00281000
- 446 WRITESTMT:MISSING ROW DESIGNATOR IN A WRITE STATEMENT. 00282000
- 447 WRITESTMT:IMPROPER DELIMITER PRECEEDING A LIST IN A WRITE 00283000
- STATEMENT. 00284000
- 448 WRITESTMT:IMPROPER LIST DELIMITER IN A WRITE STATEMENT. 00285000
- 449 READSTMT:IMPROPER LIST DELIMITER IN A READ STATEMENT. 00286000
- 450 LOCKSTMT:MISSING LEFT PARENTHESIS IN A LOCK STATEMENT. 00287000
- 451 LOCKSTMT:IMPROPER FILE PART IN A LOCK STATEMENT. 00288000
- 452 LOCKSTMT:MISSING COMMA IN A LOCK STATEMENT. 00289000
- 453 LOCKSTMT:IMPROPER UNIT DISPOSITION PART IN A LOCK 00290000
- STATEMENT. 00291000
- 454 LOCKSTMT:MISSING RIGHT PARENTHESIS IN A LOCK STATEMENT. 00292000
- 455 CLOSESTMT:MISSING LEFT PARENTHESIS IN A CLOSE STATEMENT. 00293000
- 456 CLOSESTMT:IMPROPER FILE PART IN A CLOSE STATEMENT. 00294000
- 457 CLOSESTMT:MISSING COMMA IN A CLOSE STATEMENT. 00295000
- 458 CLOSESTMT:IMPROPER UNIT DISPOSITION PART IN A CLOSE 00296000
- STATEMENT. 00297000
- 459 CLOSESTMT:MISSING RIGHT PARENTHESIS IN A CLOSE STATEMENT. 00298000
- 460 RWNDSTMT:MISSING LEFT PARENTHESIS IN A REWIND STATEMENT. 00299000
- 461 RWNDSTMT:IMPROPER FILE PART IN A REWIND STATEMENT. 00300000
- 462 RWNDSTMT:MISSING RIGHT PARENTHESIS IN A REWIND STATEMENT. 00301000
- 463 BLOCK:A MONITOR DECLARATION APPEARS IN THE SPECIFICATION 00302000
- PART OF A PROCEDURE. 00303000
- 464 BLOCK:A DUMP DECLARATION APPEARS IN THE SPECIFICATION PART00304000
- OF A PROCEDURE. 00305000
- 465 INLINE: MISSING PARAMETER IDENTIFIER IN INLINE STREAM 00305001
- STATEMENT PARAMETER LIST. 00305002
-500 .ID: NEEDS DOUBLE PERIOD FOR PRTE IF PAST 512 00305100
- 520 TABLE: STRING LONGER THAN ONE WORD (48 BITS). 00305200
- 521 TABLE: STRING CONTAINS A NON-PERMISSIBLE CHARACTER. 00305300
- 600 DOLLARCARD: NUMBER EXPECTED. 00400000
- 601 DOLLARCARD: OPTION IDENTIFIER EXPECTED. 00401000
- 602 DOLLARCARD: TOO MANY USER-DEFINED OPTIONS. 00403000
- 603 DOLLARCARD: UNRECOGNIZED WORD OR CHARACTER. 00404000
- 604 DOLLARCARD: MISMATCHED PARENTHESES. 00405000
- 605 DOLLARCARD: $ IN CARD COLUMN 1 FOR OMIT CARD 00406000
- 610 READACARD: SEQUENCE ERROR. 00410000
- 611 READACARD: ERROR LIMIT HAS BEEN EXCEEDED. 00411000
- ; 00490000
-BEGIN COMMENT OUTERMOST BLOCK; 00500000
- INTEGER ERRORCOUNT; COMMENT NUMBER OF ERROR MSGS. MCP WILL TYPE 00501000
- SYNTX ERR AT EOJ IF THIS IS NON-ZERO. MUST BE @R+25; 00502000
- INTEGER SAVETIME; COMMENT SAVE-FACTOR FOR CODE FILE, GIVEN BY MCP. 00503000
- IF COMPILE & GO =0, FOR SYNTAX, =-1. MUST BE AT R+26;00504000
-INTEGER CARDNUMBER; % SEQ # OF CARD BEING PROCESSED. 00504100
-INTEGER CARDCOUNT; % NUMBER OF CARDS PROCESSED. 00504150
- BOOLEAN BUILDLINE; 00504700
- COMMENT RR1-RR11 ARE USED IN SOME PROCEDURES IN 00505000
- PLACE OF LOCALS TO SAVE STACK SPACE; 00506000
- REAL RR1,RR2,RR3,RR4,RR5,RR6,RR7,RR8,RR9,RR10,RR11; 00507000
- COMMENT SOME OF THE RRI ARE USED TO PASS FILE INFORMATION 00508000
- TO THE MAIN BLOCK; 00509000
- COMMENT EXAMIN RETURNS THE CHARACTER AT ABSOLUTE ADDRESS NCR; 00510000
-REAL STREAM PROCEDURE EXAMIN(NCR); VALUE NCR; 00511000
- BEGIN SI~NCR;DI~LOC EXAMIN;DI~DI+7; DS~CHR END; 00512000
-INTEGER STREAM PROCEDURE GETF(Q);VALUE Q; 00523000
- BEGIN SI~LOC GETF; SI~SI-7;DI~LOC Q;DI~DI+5; 00524000
- SKIP 3 DB; 9(IF SB THEN DS~SET ELSE DS~RESET; SKIP SB); 00525000
- DI~LOC Q;SI~Q;DS~WDS;SI~Q;GETF~SI 00526000
- END GETF; 00527000
-COMMENT START SETTING UP FILE PARAMETERS; 00528000
- IF EXAMIN(RR11~GETF(3)+"Y08") !12 THEN RR1~5 ELSE 00529000
- BEGIN RR1~2;RR2~150 END; 00530000
- IF EXAMIN(RR11+5) !12 THEN RR3~4 ELSE 00531000
- BEGIN RR3~2; RR4~150 END; 00532000
- IF EXAMIN(RR11+10)=12 THEN 00533000
- BEGIN RR5~2;RR6~10;RR7~150 END ELSE 00534000
- BEGIN RR5~1;RR6~56;RR7~10 END; 00535000
- IF EXAMIN(RR11+15)=12 THEN 00536000
- BEGIN RR8~10;RR9~150 END ELSE 00537000
- BEGIN RR8~56;RR9~10 END; 00538000
-BEGIN COMMENT MAIN BLOCK; 01000000
-INTEGER OPINX; % USED FOR INDEXING INTO OPTIONS ARRAY. 01000800
-BOOLEAN SETTING; % USED BY DOLLARCARD FOR AN OPTION"S SETTING 01000802
- INTEGER NEWINX, ADDVALUE, BASENUM, TOTALNO; 01000860
-DEFINE OPARSIZE = 200 #; 01000902
-ARRAY OPTIONS[0:OPARSIZE]; 01000904
-BOOLEAN OPTIONWORD; 01000910
-DEFINE CHECKBIT = 1#, 01000920
- DEBUGBIT = 2#, 01000930
- DECKBIT = 3#, 01000940
- FORMATBIT = 4#, 01000950
- INTBIT = 5#, 01000960
- LISTABIT = 6#, 01000970
- LISTBIT = 7#, 01000980
- LISTPBIT = 8#, 01000990
- MCPBIT = 9#, 01001000
- MERGEBIT = 10#, 01001010
- NESTBIT = 11#, 01001020
- NEWBIT = 12#, 01001030
- NEWINCLBIT = 13#, 01001040
- OMITBIT = 14#, 01001050
- PRINTDOLLARBIT = 15#, 01001060
- PRTBIT = 16#, 01001070
- PUNCHBIT = 17#, 01001080
- PURGEBIT = 18#, 01001090
- SEGSBIT = 19#, 01001100
- SEQBIT = 20#, 01001110
- SEQERRBIT = 21#, 01001120
- SINGLBIT = 22#, 01001130
- STUFFBIT = 23#, 01001140
- VOIDBIT = 24#, 01001150
- VOIDTBIT = 25#, 01001160
- USEROPINX = 26#; 01001170
-COMMENT IF A NEW COMPILER-DEFINED OPTION IS ADDED, CHANGE USEROPINX 01001180
- AND ADD OPTION IN DEFINES BELOW, IN DOLLARCARD, AND IN 01001190
- FILL STATEMENT IN INITIALIZATION OF COMPILER; 01001200
-DEFINE CHECKTOG = OPTIONWORD.[CHECKBIT:1] #, 01001210
- DEBUGTOG = OPTIONWORD.[DEBUGBIT:1] #, 01001220
- DECKTOG = OPTIONWORD.[DECKBIT:1] #, 01001230
- FORMATOG = OPTIONWORD.[FORMATBIT:1] #, 01001240
- INTOG = OPTIONWORD.[INTBIT:1] #, 01001250
- LISTATOG = OPTIONWORD.[LISTABIT:1] #, 01001260
- LISTOG = OPTIONWORD.[LISTBIT:1] #, 01001270
- LISTPTOG = OPTIONWORD.[LISTPBIT:1] #, 01001280
- MCPTOG = OPTIONWORD.[MCPBIT:1] #, 01001290
- MERGETOG = OPTIONWORD.[MERGEBIT:1] #, 01001300
- NESTOG = OPTIONWORD.[NESTBIT:1] #, 01001310
- NEWTOG = OPTIONWORD.[NEWBIT:1] #, 01001320
- NEWINCL = OPTIONWORD.[NEWINCLBIT:1] #, 01001330
- OMITTING = OPTIONWORD.[OMITBIT:1] #, 01001340
- PRINTDOLLARTOG = OPTIONWORD.[PRINTDOLLARBIT:1] #, 01001350
- PRTOG = OPTIONWORD.[PRTBIT:1] #, 01001360
- PUNCHTOG = OPTIONWORD.[PUNCHBIT:1] #, 01001370
- PURGETOG = OPTIONWORD.[PURGEBIT:1] #, 01001380
- SEGSTOG = OPTIONWORD.[SEGSBIT:1] #, 01001390
- SEQTOG = OPTIONWORD.[SEQBIT:1] #, 01001400
-COMMENT SEQTOG INDICATES RESEQUENCING IS TO BE DONE; 01001410
- SEQERRTOG = OPTIONWORD.[SEQERRBIT:1] #, 01001420
- SINGLTOG = OPTIONWORD.[SINGLBIT:1] #, 01001430
- STUFFTOG = OPTIONWORD.[STUFFBIT:1] #, 01001440
- VOIDING = OPTIONWORD.[VOIDBIT:1] #, 01001450
- VOIDTAPE = OPTIONWORD.[VOIDTBIT:1] #, 01001460
- DUMMY = #; 01001470
-BOOLEAN NOHEADING; % TRUE IF DATIME HAS NOT BEEN CALLED. 01001480
-BOOLEAN NEWBASE; % NEW BASENUM FOUND ON A NEW $-CARD. 01001490
-BOOLEAN LASTCRDPATCH; % NORMALLY FALSE, SET TO TRUE WHEN THE 01001500
- % LAST CARD FROM SYMBOLIC LIBRARY READ 01001510
- % IS PATCHED FROM THE CARD READER. 01001520
-INTEGER XMODE; % TELLS DOLLARCARD HOW TO SET OPTIONS. 01001530
-BOOLEAN DOLLARTOG; % TRUE IF SCANNING A DOLLAR CARD. 01001540
-INTEGER ERRMAX; % COMPILATION STOPS IF EXCEEDED. 01001550
-BOOLEAN SEQXEQTOG; % GIVE SEQ. NO. WHEN DS-ING OBJ. 01001560
-BOOLEAN LISTER; % LISTOG OR LISTATOG OR DEBUGTOG. 01001570
-ALPHA MEDIUM; % INPUT IS: T,C,P,CA,CB,CC. 01001580
-INTEGER MYCLASS; % USED IN DOLLARCARD EVALUATION. 01001590
-REAL BATMAN; % USED IN DOLLARCARD EVALUATION. 01001600
- ARRAY SPECIAL[0:31]; 01003000
- COMMENT THIS ARRAY HOLDS THE INTERNAL CODE FOR THE SPECIAL 01004000
- CHARACTORS: IT IS FILLED DURING INITIALIZATION; 01005000
- 01006000
-ARRAY INFO [0:127,0:255]; 01007000
- COMMENT INFO CONTAINS ALL THE INFORMATION ABOUT A GIVEN IDENTIFIER 01008000
- OR RESERVED WORD. THE FIRST WORD OF A GIVEN ENTRY IS 01009000
- THE INTERNAL CODE ( OR ELBAT WORD AS IT IS USUALLY 01010000
- CALLED). THE SECOND WORD CONTAINS THE FORWARD BIT (IN 01011000
- [1:1]) FOR PROCEDURES, THE LINK TO PREVIOUS ENTRY (IN 01012000
- [4:8]). THE NUMBER OF CHARACTORS IN THE ALPHA REPRESENTA- 01013000
- TION (IN [12:6]), AND THE FIRST 5 CHARACTERS OF ALPHA. 01014000
- SUCCEDING WORDS CONTAIN THE REMAINING CHARACTORS OF ALPHA,01015000
- FOLLOWED BY ANY ADDITIONAL INFORMATION. THE ELBAT WORD 01016000
- AND THE ALPHA FOR ANY QUANTITY ARE NOT SPLIT ACROSS A ROW 01017000
- OF INFO. FOR PURPOSES OF FINDING AN IDENTIFIER OR 01018000
- RESERVED WORD THE QUANTITIES ARE SCATTERED INTO 125 01019000
- DIFERENT LISTS OR STACKES. WHICH STACK CONTAINS A QUANTITY01020000
- IS GIVEN BY TAKING NAAAAA MOD 125 WHERE N IS THE NUMBER 01021000
- OF CHARACTORS AND AAAAA IS THE FIRST 5 CHARACTORS OF 01022000
- ALPHA, FILLED IN WITH ZEROS FROM THE RIGHT IF NEEDED. 01023000
- THIS NUMBER IS CALLED THE SCRAMBLE NUMBER OR INDEX. 01024000
- THE FIRST ROW OF INFO IS USED FOR OTHER PURPOSES. THE 01025000
- RESERVED WORDS OCCUPY THE SECOND ROW. IT IS FILLED DURING 01026000
- INITIALIZATION; 01027000
-COMMENT INFO FORMAT 01028000
- FOLLOWING IS A DESCRIPTION OF THE FORMAT OF ALL TYPES OF ENTRIES 01029000
- ENTERED IN INFO: 01030000
- THE FIRST WORD OF ALL ENTRIES IS THE ELBAT WORD. 01031000
- THE INCR FIELD ([27:8]) CONTAINS AN INCREMENT WHICH WHEN 01032000
- ADDED TO THE CURRENT INDEX INTO INFO YELDSAN INDEX TO ANY 01033000
- ADDITIONAL INFO (IF ANY) FOR THIS ENTRY. 01034000
- E.G. IF THE INDEX IS IX THEN INFO[(IX+INCR).LINKR,(IX+INCR). 01035000
- LINKC] WILL CONTAIN THE FIRST WORD OF ADDITIONAL INFO. 01036000
- THE LINK FIELD OF THE ELBAT WORD IN INFO IS DIFFERENT FROM 01037000
- THAT OF THE ENTRY IN ELBAT PUT IN BY TABLE.THE ENTRY IN ELBAT 01038000
- POINTS TO ITS OWN LOCATION (RELATIVE) IN INFO. 01039000
- THE LINK IN INFO POINTS TO THE PREVIOUS ENTRY E.G.,THE 01040000
- LINK FROM STACKHEAD WHICH THE CURRENT ENTRY REPLACED. 01041000
- FOR SIMPLICITY,I WILL CONSIDER INFO TO BE A ONE DIMENSIONAL 01042000
- ARRAY,SO THAT THE BREAKING UP OF THE LINKS INTO ROW AND COLUMN 01043000
- WILL NOT DETRACT FROM THE DISCUSSION. 01044000
- ASSUME THAT THREE IDENTIFIERS A,B,AND C "SCRAMBLE" INTO 01045000
- THE SAME STACKHEAD LOCATION IN THE ORDER OF APPEARANCE. 01046000
- FURTHER ASSUME THERE ARE NO OTHER ENTRIES CONNECTED TO 01047000
- THIS STACKHEAD INDEX. LET THIS STACKHEAD LOCATION BE 01048000
- S[L] 01049000
- NOW THE DECLARATION 01050000
- BEGIN REAL A,B,C IS ENCOUNTERED 01051000
- IF THE NEXT AVAILABLE INFO SPACE IS CALLED NEXTINFO 01052000
- THEN A IS ENTERED AS FOLLOWS:(ASSUME AN ELBAT WORD T HAS BEEN 01053000
- CONSTRUCTED FOR A) 01054000
- T.LINK~ S[L]. (WHICH IS ZERO AT FIRST). 01055000
- INFO[NEXTINFO]~T. S[L]~NEXTINFO. 01056000
- NEXTINFO~NEXTINFO+NUMBER OF WORDS IN THIS 01057000
- ENTRY. 01058000
- NOW S[L] POINTS TO THE ENTRY FOR A IN INFO AND THE ENTRY 01059000
- ITSELF CONTAINS THE STOP FLAG ZERO. 01060000
- B IS ENTERED SIMILARLY TO A. 01061000
- NOW S[L] POINTS TO THE ENTRY FOR B AND IT POINTS TO THE 01062000
- ENTRY FOR A. 01063000
- SIMILARLY,AFTER C IS ENTERED 01064000
- S[L] POINTS TO C,WHOSE ENTRY POINTS TO B WHOSE ENTRY 01065000
- POINTS TO A. 01066000
- THE SECOND WORD OF EACH ENTRY IN INFO IS MADE UP AS FOLLOWS: 01067000
- FWDPT =[1:1],THIS TELLS WHETHER A PROCEDURE WAS DECLARED 01068000
- FORWARD. IT IS RESET AT THE TIME OF ITS ACTUAL 01069000
- FULL DECLARATION. 01070000
- PURPT =[4:8] THIS GIVES A DECREMENT WHICH GIVES THE RELATIVE 01071000
- INDEX TO THE PREVIOUS INFO ENTRY WHEN SUBTRACTED 01072000
- FROM THE CURRENT ENTRY INDEX. 01073000
- [12:6] TELLS THE NUMBER OF CHARACTERS IN THE ENTRY.(<64) 01074000
- [18:30] CONTAINS THE FIRST FIVE ALPHA CHARACTERS OF THE ENTRY 01075000
- AND SUCCEEDING WORDS CONTAIN ALL OVERFLOW IF NEEDED. 01076000
- THESE WORDS CONTAIN 8 CHARACTERS EACH,LEFT JUSTIFIED. 01077000
- THUS,AN ENTRY FOR SYMBOL FOLLOWED BY AN ENTRY 01078000
- FOR X WOULD APPEAR AS FOLLOWS: 01079000
- INFO[I] = ELBATWRD (MADE FOR SYMBOL) 01080000
- I+1 = OP6SYMBO (P DEPENDS ON PREVIOUS ENTRY) 01081000
- I+2 = L 01082000
- I+3 = ELBATWRD (MADE FOR X) 01083000
- I+4 = 031X 01084000
- THIS SHOWS THAT INFO[I-P] WOULD POINT TO THE BEGINNING OF 01085000
- THE ENTRY BEFORE SYMBOL, AND 01086000
- INFO[I+3-3] POINTS TO THE ENTRY FOR SYMBOL. 01087000
- ALL ENTRIES OF IDNETIFIERS HAVE THE INFORMATION DESCRIBED ABOVE 01088000
- THAT IS,THE ELBAT WORD FOLLOWED BY THE WORD CONTAING THE FIRST 01089000
- FIVE CHARACTERS OF ALPHA,AND ANY ADDITIONAL WORDS OF ALPHA IF 01090000
- NECESSARY. 01091000
- THIS IS SUFFICIENT FOR ENTRIES OF THE FOLLOWING TYPES, 01092000
- REAL 01093000
- BOOLEAN 01094000
- INTEGER 01095000
- ALPHA 01096000
- FILE 01097000
- FORMAT 01098000
- LIST 01099000
- OTHER ENTRIES REQUIRE ADDITIONAL INFORMATION. 01100000
- ARRAYS: 01101000
- THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 01102000
- DIMENSIONS(IN THE LOW ORDER PART).[40:8] 01103000
- EACH SUCCEEDING WORD CONTAINS INFORMATION ABOUT EACH LOWER 01104000
- BOUND IN ORDER OF APPEARANCE,ONE WORD FOR EACH LOWER BOUND. 01105000
- THESE WORDS ARE MADE UP AS FOLLOWS: 01106000
- [23:12] =ADD OPERATOR SYLLABLE (0101) OR 01107000
- SUB OPERATOR SYLLABLE (0301) CORRESPONDING 01108000
- RESPECTIVELY TO WHETHER THE LOWER BOUND IS 01109000
- TO BE ADDED TO THE SUBSCRIPT IN INDEXING OR 01110000
- SUBTRACTED. 01111000
- [35:11] =11 BIT ADDRESS OF LOWER BOUND,IF THE LOWER BOUND 01112000
- REQUIRES A PRT OR STACK CELL,OTHERWISE THE BIT 01113000
- 35 IS IGNORED AND THE NEXT TEN BITS([36:10]) 01114000
- REPRESENT THE ACTUAL VALUE OF THE LOWER BOUND 01115000
- [46:2] =00 OR 10 DEPENDING ON WHETHER THE [35:11] VALUE 01116000
- IS A LITERAL OR OPERAND,RESPECTIVELY. 01117000
- PROCEDURES: 01118000
- THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 01119000
- PARAMETERS [40:8] 01120000
- IF A STREAM PROCEDURE THEN THIS WORD CONTAINS ALSO IN 01121000
- [13:11] ENDING PRT ADDRESS FOR LABELS, 01122000
- [ 7:6] NO OF LABELS REQUIRING PRT ADDRESSES, AND [1:6] NUMBER 01123000
- OF LOCALS. 01124000
- SUCCEEDING WORDS (ONE FOR EACH FORMAL PARAMETER,IN ORDER 01125000
- OF APPEARANCE IN FORMAL PARAPART) ARE 01126000
- ELBAT WORDS SPECIFYING TYPE OF EACH PARAMETER AND WHETHER 01127000
- VALUE OR NOT([10:1]). 01128000
- THE ADDRESS([16:11]) IS THE F- ADDRESS FOR EACH. 01129000
- IF THE PARAMETER IS AN ARRAY THEN THE INCR FIELD([27:8]) 01130000
- CONTAINS THE NUMBER OF DIMENSIONS,OTHERWISE INCR IS MEANINGLESS. 01131000
- LINK([35:13]) IS MEANINGLESS. 01132000
- IF A STREAM PROCEDURE THEN THE CLASS OF EACH PARAMETER IS 01133000
- THAT OF LOCAL ID OR FILE ID, DEPENDING ON WHETHER OR NOT A RELEASE01134000
- IS DONE IN THE STREAM PROCEDURE. 01135000
- LABELS: 01136000
- AT DECLARATION TIME THE ADDITIONAL INFO CONTAINS 0. THE SIGN 01137000
- BIT TELLS WHETHER OR NOT THE DEFINITION POINT HAS BEEN REACHED. 01138000
- IF SIGN = 0, THEN [36:12] CONTAINS AN ADDRESS IN CODEARRAY OF A 01139000
- LIST OF FORWARD REFERENCES TO THIS LABEL. THE END OF LIST FLAG IS01140000
- 0. IF SIGN =0, THEN [36:12] CONTAINS L FOR THIS LABEL. 01141000
- SWITCHES: 01142000
- THE FIELD [36:12] CONTAINS L FOR THE BEGINNING OF SWITCH DECLAR- 01143000
- ATION. [24:12] CONTAINS L FOR FIRST SIMPLE REFERENCE TO SWITCH. 01144000
- IF SWITCH IS NOT SIMPLE, IT IS MARKED FORMAL. HERE SIMPLE MEANS 01145000
- NO POSSIBILITY OF JUMPING OUT OF A BLOCK. ;01146000
- DEFINE MON =[ 1: 1]#, 01147000
- CLASS =[ 2: 7]#, 01148000
- FORMAL=[ 9: 1]#, 01149000
- VO =[10: 1]#, 01150000
- LVL =[11: 5]#, 01151000
- ADDRESS=[16:11]#, 01152000
- INCR =[27: 8]#, 01153000
- LINK =[35:13]#, 01154000
- LINKR =[35: 5]#, 01155000
- LINKC =[40: 8]#; 01156000
- COMMENT THESE DEFINES ARE USED TO PICK APART THE ELBAT WORD. 01157000
- MON IS THE BIT WHICH IS ON IF THE QUANTITY IS MONITORED. 01158000
- CLASS IS THE PRINCIPAL IDENTIFICATION OF A GIVEN 01159000
- QUANTITY. 01160000
- FORMAL IS THE BIT WHICH IS ON IF THE QUANTITY IS A FORMAL 01161000
- PARAMETER. 01162000
- VO IS THE VALUE-OWN BIT. IF FORMAL = 1 THEN THE BIT 01163000
- DISTINGUISHES VALUE PARAMETERS FROM OTHERS. IF 01164000
- FORMAL = 0 THEN THE BIT DISTINGUISHES OWN VARIABLES 01165000
- FROM OTHERS. 01166000
- LVL GIVES THE LEVEL AT WHICH A QUANTITY WAS DECLARED. 01167000
- ADDRESS GIVES THE STACK OR PRT ADDRESS. 01168000
- INCR GIVES A RELATIVE LINK TO ANY ADDITIONAL INFORMATION 01169000
- NEEDED, RELATIVE TO THE LOCATION IN INFO. 01170000
- LINK CONTAINS A LINK TO THE LOCATION IN INFO IF THE 01171000
- QUANTITY LIES IN ELBAT, OTHERWISE IT LINKS TO THE 01172000
- NEXT ITEM IN THE STACK. ZERO IS AN END FLAG. 01173000
- LINKR AND LINKC ARE SUBDIVISIONS OF LINK.; 01174000
- COMMENT CLASSES FOR ALL QUANTITIES - OCTAL CLASS IS IN COMMENT; 01175000
- COMMENT CLASSES FOR IDENTIFIERS; 01176000
- DEFINE UNKNOWNID =00#, COMMENT 000; 01177000
- STLABID =01#, COMMENT 001; 01178000
- LOCLID =02#, COMMENT 002; 01179000
- DEFINEDID =03#, COMMENT 003; 01180000
- LISTID =04#, COMMENT 004; 01181000
- FRMTID =05#, COMMENT 005; 01182000
- SUPERFRMTID =06#, COMMENT 006; 01183000
- REALSUBID =07#, COMMENT 007; 01184000
- SUBID =08#, COMMENT 010; 01185000
- SWITCHID =09#, COMMENT 011; 01186000
- PROCID =10#, COMMENT 012; 01187000
- INTRNSICPROCID =11#, COMMENT 013; 01188000
- STRPROCID =12#, COMMENT 014; 01189000
- BOOSTRPROCID =13#, COMMENT 015; 01190000
- REALSTRPROCID =14#, COMMENT 016; 01191000
- ALFASTRPROCID =15#, COMMENT 017; 01192000
- INTSTRPROCID =15#, COMMENT 017; 01193000
- BOOPROCID =17#, COMMENT 021; 01194000
- REALPROCID =18#, COMMENT 022; 01195000
- ALFAPROCID =19#, COMMENT 023; 01196000
- INTPROCID =19#, COMMENT 023; 01197000
- BOOID =21#, COMMENT 025; 01198000
- REALID =22#, COMMENT 026; 01199000
- ALFAID =23#, COMMENT 027; 01200000
- INTID =23#, COMMENT 027; 01201000
- BOOARRAYID =25#, COMMENT 031; 01202000
- REALARRAYID =26#, COMMENT 032; 01203000
- ALFAARRAYID =27#, COMMENT 033; 01204000
- INTARRAYID =27#, COMMENT 033; 01205000
- NAMEID =30#, COMMENT 036; 01205200
- INTNAMEID =31#, COMMENT 037; 01205400
- LABELID =32#, COMMENT 040; 01206000
- COMMENT CLASSES FOR PRIMARY BEGINNERS; 01207000
- TRUTHV =33#, COMMENT 041; 01208000
- NONLITNO =34#, COMMENT 042; 01209000
- LITNO =35#, COMMENT 043; 01210000
- STRNGCON =36#, COMMENT 044; 01211000
- LEFTPAREN =37#, COMMENT 045; 01212000
- POLISHV =38#, COMMENT 046; 01212100
- ASTRISK =39#, COMMENT 047; 01212200
- COMMENT CLASS FOR ALL DECLARATORS; 01213000
- DECLARATORS =40#, COMMENT 050; 01214000
- COMMENT CLASSES FOR STATEMENT BEGINNERS 01215000
- DOUBLEV =42#, COMMENT 052; 01222000
- FORV =43#, COMMENT 053; 01223000
- WHILEV =44#, COMMENT 054; 01224000
- DOV =45#, COMMENT 055; 01225000
- UNTILV =46#, COMMENT 056; 01226000
- ELSEV =47#, COMMENT 057; 01227000
- ENDV =48#, COMMENT 060; 01228000
- SEMICOLON =50#, COMMENT 062; 01230000
- IFV =51#, COMMENT 063; 01231000
- GOV =52#, COMMENT 064; 01232000
- IOCLASS =53#, COMMENT 065; 01233000
- BEGINV =54#, COMMENT 066; 01234000
- COMMENT CLASSES FOR STREAM RESERVED WORDS; 01235000
- SIV =55#, COMMENT 067; 01236000
- DIQ =56#, COMMENT 070; 01237000
- CIV =57#, COMMENT 071; 01238000
- TALLYV =58#, COMMENT 072; 01239000
- DSV =59#, COMMENT 073; 01240000
- SKIPV =60#, COMMENT 074; 01241000
- JUMPV =61#, COMMENT 075; 01242000
- DBV =62#, COMMENT 076; 01243000
- SBV =63#, COMMENT 077; 01244000
- TOGGLEV =64#, COMMENT 100; 01245000
- SCV =65#, COMMENT 101; 01246000
- LOCV =66#, COMMENT 102; 01247000
- DCV =67#, COMMENT 103; 01248000
- LOCALV =68#, COMMENT 104; 01249000
- LITV =69#, COMMENT 105; 01250000
- TRNSFER =70#, COMMENT 106; 01251000
- COMMENT CLASSES FOR VARIOUS MISCELLANEOUS QUANTITIES; 01252000
- COMMENTV =71#, COMMENT 107; 01253000
- FORWARDV =72#, COMMENT 110; 01254000
- STEPV =73#, COMMENT 111; 01255000
- THENV =74#, COMMENT 112; 01256000
- TOV =75#, COMMENT 113; 01257000
- VALUEV =76#, COMMENT 114; 01258000
- WITHV =77#, COMMENT 115; 01259000
- COLON =78#, COMMENT 116; 01260000
- COMMA =79#, COMMENT 117; 01261000
- CROSSHATCH =80#, COMMENT 120; 01262000
- LFTBRKET =81#, COMMENT 121; 01263000
- PERIOD =82#, COMMENT 122; 01264000
- RTBRKET =83#, COMMENT 123; 01265000
- RTPAREN =84#, COMMENT 124; 01266000
- AMPERSAND =85#, COMMENT 125; 01266500
- COMMENT CLASSES FOR OPERATORS; 01267000
- HEXOP =86#, COMMENT 126; 01268000
- BITOP =87#, COMMENT 127; 01269000
- ISOLATE =88#, COMMENT 130; 01270000
- OPERATOR =89#, COMMENT 131; 01271000
- NOTOP =90#, COMMENT 132; 01272000
- ASSIGNOP =91#, COMMENT 133; 01273000
- EQVOP =92#, COMMENT 134; 01274000
- OROP =93#, COMMENT 135; 01275000
- ANDOP =94#, COMMENT 136; 01276000
- RELOP =95#, COMMENT 137; 01277000
- ADDOP =96#, COMMENT 140; 01278000
- MULOP =97#, COMMENT 141; 01278500
-% STRING =99#, COMMENT 143; 01278600
- COMMENT SUBCLASSES FOR DECLARATORS (KEPT IN ADDRESS); 01279000
- OWNV =01#, COMMENT 01; 01280000
- SAVEV =02#, COMMENT 02; 01281000
- BOOV =03#, COMMENT 03; 01282000
- REALV =04#, COMMENT 04; 01283000
- ALFAV =05#, COMMENT 05; 01284000
- INTV =05#, COMMENT 05; 01285000
- LABELV =07#, COMMENT 07; 01286000
- DUMPV =08#, COMMENT 10; 01287000
- SUBV =09#, COMMENT 11; 01288000
- OUTV =10#, COMMENT 12; 01289000
- INV =11#, COMMENT 13; 01290000
- MONITORV =12#, COMMENT 14; 01291000
- SWITCHV =13#, COMMENT 15; 01292000
- PROCV =14#, COMMENT 16; 01293000
- ARRAYV =15#, COMMENT 17; 01294000
- NAMEV =16#, COMMENT 20; 01295000
- FILEV =17#, COMMENT 21; 01296000
- STREAMV =18#, COMMENT 22; 01297000
- DEFINEV =19#, COMMENT 23; 01298000
-DEFINE DDES = 8#, 01299000
- ADES = 28#, 01299010
- PDES = 29#, 01299020
- LDES = 30#, 01299030
- CHAR = 31#, 01299040
- FACTOP = ASTRISK#, 01299100
- OPERATORS = HEXOP#, 01299200
- FILEID = 0#, 01299300
- MAXINTRINSIC = 150#, % USED IN BUILDING INTABLE @ 09414120 01299400
- INTRINSICADR = (MAXINTRINSIC DIV 30)#; % RESERVES SEG FOR INTABLE01299500
- REAL TIME1; 01300000
- BOOLEAN ASTOG; 01300100
- BOOLEAN SAF; 01300200
- INTEGER SCRAM; 01301000
- COMMENT SCRAM CONTAINS THE SCRAMBLE INDEX FOR THE LAST IDENTIFIER 01302000
- OR RESERVED WORD SCANNED; 01303000
- ALPHA ARRAY ACCUM[0:10]; 01304000
- COMMENT ACCUM HOLDS THE ALPHA AND CHARACTER COUNT OF THE LAST 01305000
- SCANNED ITEM IN A FORM COMPATIBLE WITH ITS APPEARANCE 01306000
- IN INFO. THAT IS ACCUM[1] = 00NAAAAA, ACCUM[I] , I> 1, 01307000
- HAS ANY ADDITIONAL CHARACTERS. ACCUM[0] IS USED FOR 01308000
- THE ELBAT WORD BY THE ENTER ROUTINES; 01309000
-ARRAY STACKHEAD[0:125]; 01310000
- COMMENT STACKHEAD[N] CONTAINS AN INDEX INTO INFO GIVING THE TOP 01311000
- ITEM IN THE N-TH STACK; 01312000
- INTEGER COUNT; 01313000
- COMMENT COUNT CONTAINS THE NUMBER OF CHARACTORS OF THE LAST ITEM 01314000
- SCANNED; 01315000
- ALPHA Q; 01316000
- COMMENT Q CONTAINS ACCUM[1] FOR THE LAST IDENTIFIER OR RESERVED 01317000
- WORD SCANNED; 01318000
- ARRAY ELBAT[0:75]; INTEGER I, NXTELBT; 01319000
- COMMENT ELBAT IS AN ARRAY HOLDING ELBAT WORDS FOR RECENTLY SCANNED 01320000
- QUANTITIES. THE TABLE ROUTINE MAINTAINS THIS ARRAY. 01321000
- (ELBAT IS TABLE SPELLED BACKWARDS.) THE TABLE ROUTINE 01322000
- GUARANTIES THAT ELBAT ALWAYS CONTAINS THE ELBAT WORDS 01323000
- FOR THE LAST 10 QUANTITIES SCANNED. NXTELBT IS AN INDEX 01324000
- POINTING TO THE NEXT AVAILABLE WORD IN ELBAT. I IS AN 01325000
- INDEX USED BY THE REST OF THE COMPILER TO FETCH THINGS 01326000
- FROM ELBAT. I IS ALSO MAINTAINED BY THE TABLE ROUTINE; 01327000
- INTEGER ELCLASS; 01328000
- COMMENT ELCLASS USUALLY CONTAINS ELBAT[I].CLASS; 01329000
- INTEGER FCR, NCR, LCR,TLCR,CLCR; 01330000
- INTEGER MAXTLCR; 01331000
- COMMENT FCR CONTAINS ABSOLUTE ADDRESS OF THE FIRST CHARACTOR OF 01332000
- THE CARD IMAGE CURRENTLY BEING SCANNED, NCR THE ADDRESS 01333000
- OF THE NEXT CHARACTOR TO BE SCANNED, AND LCR THE LAST 01334000
- CHARACTOR (COLUMN 73). TLCR AND CLCR CONTAIN ADDRESS OF 01335000
- THE LAST CHARACTER IN THE TAPE AND CARD BUFFERS. MAXTLCR 01336000
- IS THE MAXIMUM OF TLCR WHEN THE INPUT IS BLOCKED; 01337000
- ARRAY TEN[-46:69]; 01340000
- 01341000
- DEFINE PRTBASE=129#,PRTOP=896#; COMMENT PAGE AND TOP OF PRT; 01342000
-ARRAY PRT[PRTBASE:PRTOP]; 01343000
-INTEGER DISKADR,CORADR; COMMENT GLOBALS FOR PROGDESCBLDR; 01344000
-INTEGER SGAVL;COMMENT NEXT AVAILABLE SEGMENT NUMBER; 01369000
-INTEGER SGNO;COMMENT THIS IS THE CURRENT SEGMENT NUMBER; 01370000
- ARRAY COP,WOP[0:127]; 01371000
- COMMENT THE EMIT ROUTINES PLACE EACH SYLLABLE INTO THE EDOC ARRAY 01372000
- AS SPECIFIED BY "L". 01373000
- IF THE DEBUGTOG IS TRUE COP AND WOP ARE FILLED WITH 01374000
- THE BCD FOR THE OPERATORS,OTHERWISE THEY ARE NOT USED; 01375000
- REAL LASTENTRY ; 01376000
- COMMENT LASTENTRY IS USED BY EMITNUM AND CONSTANTCLEAN. IT POINTS 01377000
- INTO INFO[0,*] AT THE NEXT AVAILABLE CELL FOR CONSTANTS; 01378000
- BOOLEAN MRCLEAN ; 01379000
- COMMENT NO CONSTANTCLEAN ACTION TAKES PLACE WHILE MRCLEAN IS 01380000
- FALSE. THIS FEATURE IS USED BY BLOCK BECAUSE OF THE 01381000
- POSSIBILITY THAT CONSTANTCLEAN WILL USE INFO[NEXTINFO] 01382000
- DURING AN ARRAY DECLARATION ; 01383000
- REAL GT1,GT2,GT3,GT4,GT5; 01384000
- INTEGER GTI1; 01384500
- COMMENT THESE VARIABLES ARE USED FOR TEMPORARY STORAGE; 01385000
- INTEGER RESULT; 01386000
- COMMENT THIS VARIABLE IS USED FOR A DUAL PURPOSE BY THE TABLE 01387000
- ROUTINE AND THE SCANNER. THE TABLE ROUTINE USES THIS 01388000
- VARIABLE TO SPECIFY SCANNER OPERATIONS AND THE SCANNER 01389000
- USES IT TO INFORM THE TABLE ROUTINE OF THE ACTION TAKEN; 01390000
- INTEGER LASTUSED; 01391000
- COMMENT LASTUSED IS A VARIABLE THAT CONTROLS THE ACTION OF 01392000
- READACARD, THE ROUTINE WHICH READS CARDS AND INITIALIZES 01393000
- OR PREPARES THE CARD FOR THE SCANNER. 01394000
- LASTUSED LAST CARD READ FROM 01394500
- -------- ------------------- 01394600
- 1 CARD READER ONLY, NO TAPE. 01395000
- 2 CARD READER, TAPE AND CARD MERGE. 01396000
- 3 TAPE, TAPE AND CARD MERGE. 01397000
- 4 INITIALIZATION ONLY, CARD ONLY. 01398000
- ; 01398300
- BOOLEAN LINKTOG; 01399000
- COMMENT LINKTOG IS FALSE IF THE LAST THING EMITTED IS A LINK, 01400000
- OTHERWISE IT IS TRUE; 01401000
- INTEGER LEVEL,FRSTLEVEL,SUBLEVEL,MODE; 01402000
- COMMENT THESE VARIABLES ARE MAINTAINED BY THE BLOCK ROUTINE TO KEEP 01403000
- TRACK OF LEVELS OF DEFINITION. LEVEL GIVES THE DEPTH OF 01404000
- NESTING IN DEFINITION, WHERE EACH BLOCK AND EACH PROCEDURE01405000
- GIVES RISE TO A NEW LEVEL. SUBLEVEL GIVES THE LEVEL OF 01406000
- THE PARAMETERS OF THE PROCEDURE CURRENTLY BEING COMPILED. 01407000
- FRSTLEVEL IS THE LEVEL OF THE PARAMETERS OF THE MOST 01408000
- GLOBAL OF THE PROCEDURES CURRENTLY BEING COMPILED. MODE 01409000
- IS THE CURRENT DEPTH OF THE PROCEDURE IN WHICH WE ARE 01410000
- NESTED (AT COMPILE TIME); 01411000
- BOOLEAN ERRORTOG; 01412000
- COMMENT ERRORTOG IS TRUE IF MESSAGES ARE CURRENTLY ACCEPTABLE TO THE01413000
- ERROR ROUTINES. ERRORCOUNT IS THE COUNT OF ERROR MSSGS; 01414000
-BOOLEAN ENDTOG; COMMENT ENDTOG TELLS THE TABLE TO ALLOW 01415000
- COMMENT TO BE PASSED BACK TO COMPOUNDTAIL; 01416000
- BOOLEAN STREAMTOG; 01417000
- COMMENT STREAMTOG IS TRUE IF WE ARE COMPILING STREAM STATEMENT. IT 01418000
- IS USED TO CONTROL COMPOUNDTAIL; 01419000
- DEFINE FS = 1#, FP = 2#, FL = 3#, FR=4#; 01420000
- COMMENT THESE DEFINES ARE USED WHEN CALLING THE VARIABLE ROUTINE. 01421000
- THEIR PURPOSES IS TO TELL VARIABLE WHO IS CALLING. 01422000
- THEIR MEANING IS: 01423000
- FS MEANS FROM STATEMENT, 01424000
- FP MEANS FROM PRIMARY, 01425000
- FL MEANS FROM LIST, 01426000
- FR MEANS FROM FOR; 01427000
- INTEGER L; 01428000
- COMMENT L IS THE LOCATION OF THE NEXT SYLLABLE TO BE EMITTED; 01429000
- DEFINE BLOCKCTR = 16#, JUNK = 17 #, XITR = 18 #, LSTRTN = 19#; 01430000
- DEFINE ATYPE =3#, BTYPE=ATYPE#,DTYPE=ATYPE#; 01452000
- BOOLEAN TB1; 01457000
- COMMENT TB1 IS A TEMPORARY BOOLEAN VARIABLE; 01458000
- INTEGER JUMPCTR; 01459000
- COMMENT JUMPCTR IS A VARIABLE USED FOR COMMUNICATION BETWEEN BLOCK 01460000
- AND GENGO. IT GIVES HIGHEST LEVEL TO WHICH A JUMP HAS 01461000
- BEEN MADE FROM WITHIN A THE PRESENTLY BEING COMPILED 01462000
- SEGMENT. THE BLOCK COMPILES CODE TO INCREMENT AND DECRE- 01463000
- MENT THE BLOCKCTR ON THE BASIS OF JUMPCTR AT COMPLETION 01464000
- OF COMPILATION OF A SEGMENT - I.E. THE BLOCKCTR IS TALLIED 01465000
- IF LEVEL = JUMPCTR; 01466000
- 01467000
- 01468000
- 01469000
- 01470000
-REAL STLB; 01471000
- COMMENT STLB IS USED BY VARIABLE AND ACTUALPARAPART TO COMMUNICATE 01472000
- THE LOWER BOUND INFORMATION FOR THE LAST DIMENSION OF THE 01473000
- ARRAY INVOLVED IN A ROW DESIGNATOR. THE FORMAT OF THE 01474000
- INFORMATION IS THAT OF INFO. STLB IS ALSO SOMETIMES USED 01475000
- FOR TEMPORARY STORAGE; 01476000
-DEFINE BUMPL = L~L+2#; 01477000
- COMMENT BUMPL IS USED MOSTLY TO PREPARE A FORWARD JUMP; 01478000
-DEFINE IDMAX = LABELID#; 01479000
- COMMENT IDMAX IS THE MAXIMUM CLASS NUMBER FOR IDENTIFIERS; 01480000
-INTEGER DEFINECTR,DEFINEINDEX; 01481000
- REAL JOINFO, COMMENT POINTS TO PSEUDO LABEL FOR JUMP OUTS; 01482000
- LPRT, COMMENT SHOWS LOCATION OF THE LAST LABEL IN THE PRT ; 01483000
- NESTLEVEL, COMMENT COUNTS NESTING FOR GO TO AND JUMP OUTS; 01484000
- JUMPLEVEL; COMMENT NUMBER OF LEVELS TO BE JUMPED OUT; 01485000
- COMMENT THE REALS ABOVE ARE FOR STREAM STATEMENT; 01486000
- ARRAY MACRO[0:35]; 01487000
- COMMENT MACRO IS FILLED WITH SYLLABLES FOR STREAM STATEMENT; 01488000
-REAL P, COMMENT CONTAINS NUMBER OF FORMALS FOR STREAM PROCS; 01489000
- Z; COMMENT CONTAINS 1ST WORD OF INFO FOR STREAM FUNCTIONS; 01490000
- ARRAY NEWTAPBUF[0:9]; 01490510
- SAVE ARRAY DEFINEARRAY[0:23]; 01491000
- COMMENT THESE VARIABLES ARE USED TO CONTROL ACTION OF THE DEFINE. 01492000
- DEFINECTR COUNTS DEPTH OF NESTING OF DEFINE-# PAIRS. 01493000
- THE CROSSHATCH PART OF THE TABLE ROUTINE USES DEFINECTR 01494000
- TO DETERMINE THE MEANING OF A CROSSHATCH. DEFINEINDEX IS 01495000
- THE NEXT AVAILABLE CELL IN THE DEFINEARRAY. THE DEFINE- 01496000
- ARRAY HOLDS THE ALPHA OF THE DEFINE BEING RECREATED AND 01497000
- THE PREVIOUS VALUES OF LASTUSED, LCR, AND NCR; 01498000
- INTEGER BEGINCTR; 01499000
- COMMENT BEGINCTR GIVES THE NUMBER OF UNMATCHED BEGINS. IT IS USED01500000
- FOR ERROR CONTROL ONLY; 01501000
- INTEGER DIALA,DIALB; 01502000
- COMMENT THESE VARIABLES GIVE THE LAST VALUE TO WHICH A AND B WERE 01503000
- DIALED. THIS GIVES SOME LOCAL OPTIMIZATION. EMITD 01504000
- WORRIES ABOUT THIS. OTHER ROUTINES CAUSE A LOSS OF MEMORY01505000
- BY SETTING DIALA AND DIALB TO ZERO; 01506000
-BOOLEAN RRB1; COMMENT RRB1---RRBN ARE BOOLEAN VARIABLES THAT SERVE THE 01522000
- SAME FUNCTION AS RR1---RRN FOR REAL VARIABLES. SEE 01523000
- COMMENT AT RR1; 01524000
- BOOLEAN RRB2; COMMENT SEE COMMENT AT RRB1 DECLARATION; 01525000
-DEFINE ARRAYMONFILE = [27:11]#; COMMENT ARRAYMONFILE IS THE DEFINE FOR 01526000
- THE ADDRESS OF THE FILE DESCRIPTOR IN 01527000
- THE FIRST WORD OF ADDITIONAL INFO; 01528000
-DEFINE SVARMONFILE = [37:11]#; COMMENT MONITORFILE IS THE DEFINE FOR 01529000
- THE ADDRESS OF THE FILE DESCRIPTOR IN 01530000
- INFO FOR MONITORED SIMPLE VARIABLES; 01531000
-DEFINE NODIMPART = [40:8]#; COMMENT THE FIRST ADDITIONAL WORD OF INFO 01532000
- FOR ARRAYS CONTAINS THE NUMBER OF DIMENSIONS01533000
- IN NODIMPART; 01534000
-DEFINE LABLMONFILE = [13:11]#; COMMENT LABLMONFILE DESIGNATES THE BIT 01535000
- POSITION IN THE FIRST WORD OF ADDITIONAL 01536000
- INFO THAT CONTAINS THE MONITOR FILE 01537000
- ADDRESS FOR LABELS; 01538000
-DEFINE SWITMONFILE = [13:11]#; COMMENT SWITMONFILE DESIGNATES THE BIT 01539000
- POSITION IN THE FIRST WORD OF ADDITIONAL 01540000
- INFO THAT CONTAINS THE MONITOR FILE 01541000
- ADDRESS FOR LABELS; 01542000
-DEFINE FUNCMONFILE = [27:11]#; COMMENT FUNCMONFILE DESIGNATES THE BIT 01543000
- POSITION IN THE FIRST WORD OF ADDITIONAL 01544000
- INFO THAT CONTAINS THE MONITOR FILE 01545000
- ADDRESS FOR LABELS; 01546000
-DEFINE DUMPEE = [2:11]#; COMMENT THE DUMPEE FIELD IN THE FIRST 01547000
- ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 01548000
- THE ADDRESS OF THE COUNTER THAT IS INCREMENTED 01549000
- EACH TIME THE LABEL IS PASSED IF THAT LABEL 01550000
- APPEARS IN A DUMP DECLARATION; 01551000
-DEFINE DUMPOR = [24:11]#; COMMENT THE DUMPOR FIELD IN THE FIRST 01552000
- ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 01553000
- THE ADDRESS OF THE ROUTINE THAT IS GENERATED 01554000
- FROM THE DUMP DECLARATION THAT IN TURN CALLS 01555000
- THE PRINTI ROUTINE; 01556000
-DEFINE SUBOP=48#; 01556500
- FILE OUT CODE DISK SERIAL[1:1](1,1023); 01556900
-FILE IN CARD(RR1,10,RR2); 01557000
-FILE OUT LINE DISK SERIAL[20:2400](RR3,15,RR4,SAVE 10); 01558000
- ARRAY LIN[0:20]; COMMENT PRINT OUTPUT BUILT IN LIN; 01559010
-INTEGER DA; 01559020
-SAVE FILE OUT NEWTAPE DISK SERIAL[20:2400](RR5,RR6,RR7,SAVE 1); 01560000
-FILE IN TAPE "OCRDIMG"(2,RR8,RR9); 01561000
-SAVE ARRAY CBUFF,TBUFF[0:9]; % INPUT BUFFERS. 01561056
-FILE OUT CODISK DISK SERIAL [20:600] (2,30,300); 01561300
-FILE OUT DISK DISK [1:2100] "MCP""DISK"(3,30,300,SAVE 99); 01561400
-DEFINE MCPTYPE = 63#, 01561410
- DCINTYPE = 62#, 01561420
- TSSINTYPE = 61#; 01561430
-COMMENT ESPOL CODE FILES ARE UNIQUELY TYPED IN THEIR FILE 01561440
- HEADERS. HEADER[4],[36:6] IS THE FIELD USED TO CONTAIN 01561450
- THE TYPE; 01561460
-FILE OUT DECK 0 (2,10); 01561500
-FILE STUFF DISK SERIAL[20:150](2,10,30,SAVE 15); 01561600
-ARRAY TWXA[0:16]; 01561700
- REAL C; 01562000
- COMMENT C CONTAINS ACTUAL VALUE OF LAST CONSTANT SCANNED; 01563000
- REAL T; 01564000
- COMMENT T IS A TEMPORARY CELL; 01565000
- INTEGER TCOUNT; 01566000
- REAL STACKCT; 01566010
- COMMENT TCOUNT IS A VARIABLE WHICH HOLDS A PREVIOUS VALUE OF COUNT 01567000
- FOR THE USE OF CONVERT; 01568000
- DEFINE LASTSEQUENCE = 145#, 01569000
- LASTSEQROW = 2#; 01570000
- 01571000
- 01572000
- 01573000
- 01574000
- 01575000
- 01576000
- 01577000
- 01578000
- 01579000
- 01580000
- 01581000
- 01582000
- 01583000
- REAL FOULED; 01583100
- 01584000
- BOOLEAN 01585000
- FUNCTOG, COMMENT TELLS WHETHER PROCEDURE BEING DECLARED IS A 01586000
- FUNCTION; 01587000
- P2, COMMENT GENERALY TELLS WHETHER OWN WAS SEEN; 01588000
- P3, COMMENT TELLS WHETHER SAVE WAS SEEN; 01589000
- VONF, COMMENT VALUE OR OWN FIELD OF ELBAT WORD; 01590000
- FORMALF, COMMENT FORMAL FIELD OF ELBAT WORD; 01591000
- PTOG, COMMENT TELLS THAT FORMAL PARAPART IS BEING PROCESSD;01592000
-SPECTOG, 01593000
- STOPENTRY, COMMENT THIS MAKES THE ENTRY PROCEDURE ENTER ONLY 01594000
- ONE ID AND THEN EIXT; 01595000
- AJUMP; COMMENT TELLS WHETHER A JUMP IS HANGING; 01596000
-BOOLEAN STOPDEFINE; 01597000
-INTEGER MAXSAVE; 01598000
- COMMENT THIS CONTAINS THE SIZE OF THE MAXIMUM SAVE ARRAY 01599000
- DECLARED. IT IS USED TO HELP DETERMINE STORAGE REQUIREMENTS 01600000
- FOR THE PROGRAM PARAMETER BLOCK FOR THE OBJECT PROGRAM; 01601000
- REAL 01602000
- KLASSF, COMMENT CLASS IN LOW ORDER 7 BITS; 01603000
- ADDRSF, COMMENT ADDRESS IN LOW ORDER 11 BITS; 01604000
- LEVELF, COMMENT LVL IN LOW ORDER 5 BITS; 01605000
- LINKF, COMMENT LINK IN LOW ORDER 13 BITS; 01606000
- INCRF, COMMENT INCR CN LOW ORDER 8 BITS; 01607000
- PROINFO, COMMENT CONTAINS ELBAT WORD FOR PROCEDURE BEING 01608000
- DECLARED; 01609000
- G, COMMENT GLOBAL TEMPORARY FOR BLOCK; 01610000
- TYPEV, COMMENT USED TO CARRY CLASS OF IDENTIFIER 01611000
- BEING DECLARED; 01612000
- PROADO, COMMENT CONTAINS ADDRESS OF PROCEDURE BEING 01613000
- DECLARED; 01614000
- MARK , COMMENT CONTAINS INDEX INTO INFO WHERE FIRST WORD 01615000
- OF ADDITIONAL INFO FOR A PROCEDURE ENTRY; 01616000
- PJ, COMMENT FORMAL PARAMETER COUNTER; 01617000
- J, COMMENT ARRAY COUNTER; 01618000
- LASTINFO, COMMENT INDEX TO LAST ENTRY IN INFO; 01619000
- NEXTINFO, COMMENT INDEX FOR NEXT ENTRYIN INFO; 01620000
- FIRSTX, COMMENT RELATIVE ADD OF FIRST EXECUTABLE CODE 01621000
- IN BLOCK,INITIALIZED TO 4095 EACH TIME; 01622000
- SAVEL; COMMENT SAVE LOCATION FOR FIXUPS IN BLOCK; 01623000
-INTEGER NCII; COMMENT THIS CONTAINS THE COUNT OF CONSTANTS 01624000
- ENTERED IN INFO AT ANY GIVEN TIME; 01625000
-PROCEDURE UNHOOK;FORWARD; 01626000
-PROCEDURE MAKEUPACCUM;FORWARD; 01627000
-DEFINE PURPT=[4:8]#,SECRET=2#; 01628000
- COMMENT THESE DEFINES GIVE THE NAMES OF THE WORD MODE OPERATORS. THE 01629000
- NUMBERS REFER TO THE APPROPRIATE SECTION OF THE PRODUCT SPECS. THE 01630000
- FULL NAME IS ALSO GIVEN; 01631000
-$ RESET NEATUP 01631990120809PK
- DEFINE 01632000
- ADD = 16#, COMMENT (0101) 7.4.2.1 ADD; 01633000
- BBC = 22#, COMMENT (0131) 7.4.5.4 BRANCH BACKWARD CONDITIONAL;01634000
- BBW = 534#, COMMENT (4131) 7.4.5.2 BRANCH BACKWARD; 01635000
- BFC = 38#, COMMENT (0231) 7.4.5.3 BRANCH FORWARD CONDITIONAL; 01636000
- BFW = 550#, COMMENT (4231) 7.4.5.1 BRANCH FORWARD; 01637000
- CDC = 168#, COMMENT (1241) 7.4.10.4 CONSTRUCT DESCRIPTOR CALL; 01638000
- CHS = 134#, COMMENT (1031) 7.4.7.11 CHANGE SIGN; 01639000
- COC = 40#, COMMENT (0241) 7.4.10.3 CONSTRUCT OPERAND CALL; 01640000
- COM = 130#, COMMENT (1011) 7.4.10.5 COMMUNICATION OPERATOR; 01641000
- DEL = 10#, COMMENT (0045) 7.4.9.3 DELETE; 01642000
- DUP = 261#, COMMENT (2025) 7.4.9.2 DUPLICATE; 01643000
- EQL = 581#, COMMENT (4425) 7.4.4.3 EQUAL; 01644000
- LBC = 278#, COMMENT(2131) 7.4.5.9 GO BACKWARD CONDITIONAL; 01645000
- LBU = 790#, COMMENT(6131) 7.4.5.7 GO BACKWARD (WORD); 01646000
- GEQ = 21#, COMMENT (0125) 7.4.4.2 GREATER THAN OR EQUAL TO; 01647000
- LFC = 294#, COMMENT(2231) 7.4.5.8 GO FORWARD CONDITIONAL; 01648000
- LFU = 806#, COMMENT(6231) 7.4.5.6 GO FORWARD (WORD); 01649000
- GTR = 37#, COMMENT (0225) 7.4.4.1 GREATER THAN; 01650000
- IDV = 384#, COMMENT (3001) 7.4.2.5 INTEGER DIVIDE; 01651000
- INX = 24#, COMMENT (0141) 7.4.10.2 INDEX; 01652000
- ISD = 532#, COMMENT (4121) 7.4.6.3 INTEGER STORE DESTRUCTIVE; 01653000
- ISN = 548#, COMMENT (4221) 7.4.6.4 INTEGER STORE NON-DESTRUCT; 01654000
- LEQ = 533#, COMMENT (4125) 7.4.4.4 LESS THAN OR EQUAL TO; 01655000
- LND = 67#, COMMENT (0415) 7.4.3.1 LOGICAL AND; 01656000
- LNG = 19#, COMMENT (0115) 7.4.3.4 LOGICAL NEGATE; 01657000
- LOD = 260#, COMMENT (2021) 7.4.10.1 LOAD OPERATOR; 01658000
- LOR = 35#, COMMENT (0215) 7.4.3.2 LOGICAL OR; 01659000
- LQV = 131#, COMMENT (1015) 7.4.3.3 LOGICAL EQUIVALENCE; 01660000
- LSS = 549#, COMMENT (4225) 7.4.4.5 LESS THAN; 01661000
- MKS = 72#, COMMENT (0441) 7.4.8.1 MARK STACK; 01662000
- MUL = 64#, COMMENT (0401) 7.4.2.3 MULTIPLY; 01663000
- NEQ = 69#, COMMENT (0425) 7.4.4.6 NOT EQUAL TO; 01664000
- NOP = 11#, COMMENT (0055) 7.4.7.1 NO OPERATION; 01665000
- PRL = 18#, COMMENT (0111) 7.4.10.6 PROGRAM RELEASE; 01666000
- PRTE= 12#, COMMENT (0061) 7.4.10.9 EXTEND PRT; 01667000
- RDV = 896#, COMMENT (7001) 7.4.2.6 REMAINDER DIVIDE; 01668000
- RTN = 39#, COMMENT (0235) 7.4.8.3 RETURN NORMAL; 01669000
- RTS = 167#, COMMENT (1235) 7.4.8.4 RETURN SPECIAL; 01670000
- SND = 132#, COMMENT (1021) 7.4.6.2 STORE NON-DESTRUCTIVE; 01671000
- SSP = 582#, COMMENT (4431) 7.4.7.10 SET SIGN PLUS; 01672000
- STD = 68#, COMMENT (0421) 7.4.6.1 STORE DESTRUCTIVE; 01673000
- SUB = 48#, COMMENT (0301) 7.4.2.2 SUBTRACT; 01674000
- XCH = 133#, COMMENT (1025) 7.4.9.1 EXCHANGE; 01675000
- XIT = 71#, COMMENT (0435) 7.4.8.2 EXIT; 01676000
- ZP1 = 322#, COMMENT (2411) 7.4.10.8 CONDITIONAL HALT; 01677000
- SCI =1003#, COMMENT (7655) SCAN OUT INITIALIZE; 01677050
- SAN =1004#, COMMENT (7661) SYSTEM ATTENTION NEEDED 01677100
- SCS =1019#, COMMENT (7755) SCAN OUT STOP; 01677150
- COMMENT THESE DEFINES ARE USED BY EMITD; 01678000
- DEFINE 01679000
- DIA = 45#, COMMENT (XX55) 7.4.7.1 DIAL A; 01680000
- DIB = 49#, COMMENT (XX61) 7.4.7.2 DIAL B; 01681000
- TRB = 53#; COMMENT (XX65) 7.4.7.3 TRANSFER BITS; 01682000
-$ SET NEATUP 01682100120809PK
-REAL MAXSTACK,STACKCTR; 01683000
-INTEGER MAXROW; 01684000
- COMMENT THIS CONTAINS THE MAXIMUM ROW SIZE OF ALL NON-SAVE 01685000
- ARRAYS DECLARED. ITS USE IS LIKE THAT OF MAXSAVE; 01686000
-INTEGER SEGSIZEMAX; COMMENT CONTAINS MAX SEGMENT SIZE; 01687000
-INTEGER F; 01688000
- REAL NLO,NHI,TLO,THI; 01689000
- BOOLEAN DPTOG; 01690000
- COMMENT THE ABOVE THINGS ARE TEMP STORAGE FOR DOUBLE NOS;01691000
-BOOLEAN DOLLAR2TOG; 01691500
-DEFINE FZERO=896#; 01692000
-REAL T1,T2,N,K,AKKUM; 01693000
-BOOLEAN STOPGSP; 01694000
-INTEGER BUP; 01695000
-BOOLEAN INLINETOG; 01695500
- COMMENT UNIQUE GLOBAL TEMP FOR BLOCK; 01696000
-ARRAY GTA1[0:10]; 01697000
- BOOLEAN ARRAY SPRT[0:31]; 01698000
- COMMENT SPRT IS TO BE CONSIDERED TO BE AN ARRAY OF 32 32 BIT 01699000
- FIELDS. THE 32 BITS ARE IN THE LOW ORDER PART OF EACH 01700000
- WORD. THE BIT IS ON IF AND ONLY IF THE CORRESPONDING 01701000
- PRT CELL HAS A PERMANENT ASSIGNMENT; 01702000
- INTEGER PRTI,PRTIMAX; 01703000
- COMMENT PRTIMAX GIVES NEXT PRT CELL AVAILABLE FOR PERMANENT ASSIGN-01704000
- MENT. PRTI GIVES NEXT PRT CELL POSSIBLY AVAILABLE FOR 01705000
- TEMPORARY ASSIGNMENT; 01706000
-DEFINE ALPHASIZE = [12:6]#; COMMENT ALPHASIZE IS THE DEFINE FOR THE BIT01707000
- POSITION IN THE SECOND WORD OF INFO WHICH 01708000
- CONTAINS THE LENGTH OF ALPHA; 01709000
-DEFINE EDOCINDEX = L.[36:3],L.[39:7]#; COMMENT EDOCINDEX IS THE WORD 01710000
- PORTION OF L SPLIT INTO A ROW AND01711000
- COLUMN INDEX FOR EDOC; 01712000
-DEFINE CPLUS1 = 769#; COMMENT SEE COMMENT AT CPLUS2 DEFINE; 01713000
-DEFINE CPLUS2 = 770#; COMMENT CPLUS1 AND CPLUS2 ARE EXPLICIT CONSTANTS 01714000
- USED IN THE GENERATION OF C-RELATIVE CODE; 01715000
- PROCEDURE FLAG(ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; FORWARD; 01716000
- ALPHA PROCEDURE B2D(B); VALUE B; REAL B; FORWARD; 01717000
- REAL PROCEDURE TAKE(W); VALUE W; INTEGER W; FORWARD; 01717700
- BOOLEAN MACROID; 01717800
- REAL PROCEDURE FIXDEFINEINFO(T); VALUE T; REAL T; FORWARD; 01717900
- PROCEDURE ERR (ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; FORWARD; 01718000
- INTEGER PROCEDURE GIT(L); VALUE L; REAL L; FORWARD; 01719000
- ARRAY CALLA[0:31,0:255]; 01720000
- DEFINE CALL[CALL1]=CALLA[(GT3~CALL1).LINKR,GT3.LINKC]#; 01721000
- REAL CALLX,CALLINFO,NESTCTR,NESTCUR; 01722000
- BOOLEAN NESTOG; 01723000
- ARRAY NESTPRT[PRTBASE:PRTOP]; 01724000
- ARRAY SORTPRT[0:PRTOP-PRTBASE]; 01725000
-COMMENT "BLANKET" BLANKS OUT N+1 WORDS IN "THERE"; 01737300
-STREAM PROCEDURE BLANKET(N,THERE); VALUE N; 01737350
- BEGIN 01737400
- DI:=THERE; DS:=8 LIT" "; SI:=THERE; DS:=N WDS; 01737450
- END BLANKET; 01737500
-STREAM PROCEDURE CHANGESEQ(VAL,OLDSEQ); VALUE OLDSEQ; 01741200
- BEGIN DI:=OLDSEQ; SI:=VAL; DS:=8 DEC END CHANGESEQ; 01741300
-STREAM PROCEDURE SEQUENCEERROR(L); 01742100
- BEGIN DI:=L; DS:=16 LIT"SEQUENCE ERROR "; END SEQUENCEERROR; 01742110
-STREAM PROCEDURE GETVOID(VP,NCR,LCR,SEQ); VALUE NCR,LCR; 01756000
- BEGIN 01757000
- LABEL L,EXIT; 01758000
- LOCAL N; 01759000
- SI:=NCR; DI:=VP; DS:=8 LIT "0"; 01761000
- 2(34(IF SC=" " THEN SI:=SI+1 ELSE JUMP OUT 2 TO L)); 01762000
- GO TO EXIT; % NO VOID RANGE GIVEN, RETURN ZERO. 01763000
-L: 01764000
- IF SC="%" THEN GO TO EXIT; % STILL NO RANGE. 01764500
- IF SC=""" THEN 01765000
- BEGIN 01766000
- SI:=SI+1; DI:=LCR; DS:=1 LIT"""; % STOPPER FOR SCAN 01767000
- NCR:=SI; % TEMP. STORAGE, SINCE NCR IS "LOCAL" TO GETVOID. 01768000
- 8(IF SC=""" THEN JUMP OUT ELSE 01769000
- BEGIN TALLY:=TALLY+1; SI:=SI+1 END); 01770000
- END 01771000
- ELSE BEGIN 01772000
- NCR:=SI; % TEMP. STORAGE, SINCE NCR IS "LOCAL" TO GETVOID. 01773000
- DI:=LCR; DS:=1 LIT" "; % STOPPER FOR SCAN 01774000
- 8(IF SC=" " THEN JUMP OUT ELSE 01775000
- BEGIN TALLY:=TALLY+1; SI:=SI+1 END); 01776000
- END; 01777000
- SI:=NCR; DI:=VP; DI:=DI+8; % RESTORE POINTERS. 01780000
- N:=TALLY; DI:=DI-N; DS:=N CHR; 01781000
-EXIT: 01782000
- END OF GETVOID; 01784000
-REAL VOIDCR,VOIDPLACE,VOIDTCR,VOIDTPLACE; 01785000
-FORMAT 01800000
- BUG(X24,4(A4,X2)); 01802000
-PROCEDURE DATIME; 01820000
- BEGIN 01821000
- INTEGER H,MIN,Q; ALPHA N1,N2; 01822000
- ALPHA STREAM PROCEDURE DATER(DATE); VALUE DATE; 01823000
- BEGIN 01824000
- DI:=LOC DATER; SI:=LOC DATE; SI:=SI+2; 01825000
- 2(DS:=2 CHR; DS:=LIT"/"); DS:=2 CHR; 01826000
- END OF DATER; 01827000
- H:=TIME1 DIV 216000; MIN:=(TIME1 DIV 3600) MOD 60; 01828000
- N1:=DISK.MFID; N2:=DISK.FID; 01828500
- WRITE(LINE, 01829000
- , 01832500
- TIME(6),DATER(TIME(5)),12|REAL(Q:=H MOD 12=0)+Q, 01833000
- Q:=MIN MOD 10+(MIN DIV 10)|64, 01834000
- IF H}12 THEN "PM." ELSE "AM.", 01835000
- N1.[6:6],N1,N2.[6:6],N2); 01835500
- NOHEADING:=FALSE; 01836000
- END OF DATIME; 01837000
- COMMENT THIS SECTION CONTAINS ALL CODE PERTAINENT TO READING CARDS 02000000
- AND SCANNING THEM; 02001000
-COMMENT OCTIZE REFORMATS ACCUM FOR OCTAL CONSTANTS; 02001836
-BOOLEAN STREAM PROCEDURE OCTIZE(S,D,SKP,CNT); VALUE SKP,CNT; 02001838
- BEGIN 02001840
- SI:=S; SI:=SI+4; DI:=D; SKP(DS:=3 RESET); % RIGHT JUSTIFY. 02001842
- CNT(IF SC}"8" THEN TALLY:=1 ELSE IF SC<"0" THEN TALLY:=1; SKIP 3 SB;02001844
- 3(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB)); 02001846
- SI:=D; IF SB THEN 02001848
- BEGIN TALLY:=1; DI:=D; DS:=RESET END; % PREVENT FLAG BIT. 02001850
- OCTIZE:=TALLY; % "1" = NON OCTAL CHARACTER OR FLAG BIT. 02001852
- END OCTIZE; 02001854
-COMMENT HEXIZE REFORMATS ACCUM FOR HEXADECIMAL CONSTANTS; 02001856
-BOOLEAN STREAM PROCEDURE HEXIZE(S,D,SKP,CNT); VALUE SKP,CNT; 02001858
- BEGIN LOCAL T1,T2,TEMP2,TEMP1; LABEL AGIN; 02001860
-COMMENT LOCAL VARIABLES ARE LOCATED IN REVERSE ORDER FROM THE 02001862
- WAY THEY ARE DECLARED IN STREAM PROCEDURES; 02001864
- DI:=LOC TEMP1; CNT(DS:=LIT"1"); % IN CASE A CHAR=A,B,C,D,OR F. 02001866
- SI:=S; SI:=SI+3; DI:=LOC TEMP1; % WE MAY OVERFLOW INTO TEMP2. 02001868
- CNT(IF SC<"0" THEN IF SC}"A" THEN IF SC{"F" THEN % WORK HARD. 02001870
- BEGIN 02001872
- T1:=SI; T2:=DI; DI:=T1; SI:=T2; % FLIP, MAN. 02001874
- DS:=3 RESET; SI:=T1; DI:=T2; % FLIP BACK. 02001876
- DS:=1 ADD; DI:=DI-1; SKIP 2 DB; DS:=1 SET; SKIP 3 DB; 02001878
- GO AGIN; 02001880
- END; 02001882
- IF SC<"0" THEN TALLY:=1; DS:=CHR; % < 0 = NON-HEX CHARACTER. 02001884
-AGIN: 02001886
- ); 02001888
- SI:=LOC TEMP1; DI:=D; SKP(DS:=4 RESET); % RIGHT ADJUST CONSTANT. 02001890
- CNT(SKIP 2 SB; 02001892
- 4(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB));% FINAL CONVERT. 02001894
- SI:=D; IF SB THEN 02001895
- BEGIN TALLY:=1; DI:=D; DS:=RESET END; % PREVENT FLAG BIT. 02001896
- HEXIZE:=TALLY; % "1" IF PROGRAMMER GOOFED. 02001897
- END HEXIZE; 02001898
-COMMENT PUTSEQNO PUTS THE SEQUENCE NUMBER OF THE CARD-IMAGE 02002000
- CURRENTLY BEING SCANNED INTO THE INFO TABLE IN CASE 02003000
- IT IS NEEDED FOR FUTURE REFERENCE; 02004000
-STREAM PROCEDURE PUTSEQNO(INFO,LCR); VALUE LCR; 02005000
- BEGIN DI:=INFO; SI:=LCR; DS:=WDS; END PUTSEQNO; 02006000
-COMMENT TURNONSTOPLIGHT TURNS THE LIGHT "RED" ON THE "CORNER". 02007000
- I.E., THE PURPOSE OF THIS ROUTINE IS TO INSERT A PER- 02008000
- CENT SIGN IN COLUMN 73 AS AN END OF CARD SENTINEL FOR 02009000
- THE SCANNER; 02010000
-STREAM PROCEDURE TURNONSTOPLIGHT(RED,CORNER); VALUE RED,CORNER; 02011000
- BEGIN DI:=CORNER; SI:=LOC CORNER; SI:=SI-1; DS:=CHR END; 02012000
- COMMENT WRITNEW TRANSFERS THE CARD IMAGE TO THE NEWTAPE BUFFER 02014000
- AND REPORTS IF THE CARD MIGHT BE CONTROL CARD; 02015000
- BOOLEAN STREAM PROCEDURE WRITNEW(NEW,FCR); VALUE FCR; 02016000
- BEGIN SI ~ FCR; IF SC ! "$" THEN TALLY ~ 1; 02017000
- DI~NEW;DS~10 WDS; 02018000
- WRITNEW ~ TALLY END WRITNEW; 02020000
- COMMENT MKABS CONVERTS A DESCRIPTOR TO AN ABSOLUTE ADDRESS; 02021000
- REAL STREAM PROCEDURE MKABS(A); 02022000
- BEGIN D1 ~ A; MKABS ~ DI END MKABS; 02023000
-REAL STREAM PROCEDURE CONV(ACCUM,SKP,N);VALUE SKP,N; 02041000
- BEGIN 02042000
- SI~ ACCUM; SI~SI+SKP;SI~SI+3;DI~LOC CONV;DS~N OCT 02043000
- END; 02044000
- STREAM PROCEDURE MOVECHARACTERS(N,SORCE,SSKIP,DEST,DSKIP); 02045000
- VALUE N,SSKIP,DSKIP; 02046000
- BEGIN 02047000
- SI~SORCE ; DI~DEST; 02048000
- SI~SI+SSKIP; DI~ DI+DSKIP ; 02049000
- DS ~ N CHR ; 02050000
- END ; 02051000
- COMMENT MOVECHARACTERS MOVES N CHARACTERS FROM THE SSKIP-TH CHAR IN 02052000
- "SORCE" TO THE DSKIP-TH CHAR IN "DEST". ; 02053000
- STREAM PROCEDURE MOVE(W)"WORDS FROM"(A)"TO"(B); VALUE W; 02054000
- BEGIN SI ~ A; DI ~ B; DS ~ W WDS END; 02055000
- STREAM PROCEDURE RESIZE(FIEL); 02056000
- BEGIN LOCAL T; 02057000
- SI~FIEL; DI~LOC T; DS~WDS; 02058000
- SI~T;DI~FIEL;DI~DI+1; SKIP 2 DB; DS~10 SET 02059000
- END; 02060000
-COMMENT EQUAL COMPARES COUNT CHARACTERS LOCATED AT A AND B FOR 02061000
- EQUALITY. THIS ROUTINE IS USED IN THE LOOK-UP OF ALPHA 02061500
- QUANTITIES IN THE DIRECTORY; 02062000
-BOOLEAN STREAM PROCEDURE EQUAL(COUNT,A,B); VALUE COUNT; 02062500
- BEGIN 02063000
- TALLY:=1; SI:=A; DI:=B; 02063500
- IF COUNT SC=DC THEN EQUAL:=TALLY 02064000
- END EQUAL; 02064500
-PROCEDURE READACARD; FORWARD; 02065000
-PROCEDURE DOLLARCARD; FORWARD; 02065500
-BOOLEAN PROCEDURE BOOLEXP; FORWARD; 02065600
-PROCEDURE SCANNER; 02066000
- BEGIN 02066500
-COMMENT "SCAN" IS THE STREAM PROCEDURE WHICH DOES THE ACTUAL SCANNING. 02067000
- IT IS DRIVEN BY A SMALL WORD MODE PROCEDURE CALLED "SCANNER", 02067500
- WHICH CHECKS FOR A QUANTITY BEING BROKEN ACROSS A CARD. "SCAN" 02068000
- IS CONTROLLED BY A VARIABLE CALLED "RESULT". "SCAN" ALSO 02068500
- INFORMS THE WORLD OF ITS ACTION BY MEANS OF THE SAME VARIABLE, 02069000
- HENCE THE VARIABLE "RESULT" IS PASSED BY BOTH NAME AND VALUE. 02069500
- THE MEANING OF "RESULT" AS INPUT IS: 02070000
- VALUE MEANING 02070500
- ===== ======================================== 02071000
- 0 INITIAL CODE - DEBLANK AND START TO FETCH THE 02071500
- NEXT QUANTITY. 02072000
- 1 CONTINUE BUILDING AN IDENTIFIER (INTERRUPTED BY 02072500
- END-OF-CARD BREAK). 02073000
- 2 LAST QUANTITY BUILT WAS SPECIAL CHARACTER. HENCE, 02073500
- EXIT (INTERRUPTION BY END-OF-CARD BREAK IS NOT 02074000
- IMPORTANT). 02074500
- 3 CONTINUE BUILDING A NUMBER (INTERRUPTED BY END-OF- 02075000
- CARD BREAK). 02075500
- 4 LAST THING WAS AN ERROR (COUNT EXCEEDED 63). HENCE,02076000
- EXIT (INTERRUPTION BY END-OF-CARD BREAK NOT 02076500
- IMPORTANT). 02077000
- 5 GET NEXT CHARACTER AND EXIT. 02077500
- 6 SCAN A COMMENT. 02078000
- 7 DEBLANK ONLY. 02078500
- THE MEANING OF "RESULT" AS OUTPUT IS: 02079000
- VALUE MEANING 02079500
- ===== ======================================== 02080000
- 1 AN IDENTIFIER WAS BUILT. 02080500
- 2 A SPECIAL CHARACTER WAS OBTAINED. 02081000
- 3 A NUMBER (INTEGER) WAS BUILT. 02081500
- "SCAN" PUTS ALL STUFF SCANNED (EXCEPT FOR COMMENTS AND 02082000
- DISCARDED BLANKS) INTO "ACCUM" (CALLED "ACCUMULATOR" 02082500
- FOR THE REST OF THIS DISCUSSION). 02083000
- "COUNT" IS THE VARIABLE THAT GIVES THE NUMBER OF CHARACTERS 02083500
- "SCAN" HAS PUT INTO THE "ACCUMULATOR". SINCE "SCAN" NEEDS 02084000
- THE VALUE SO THAT IT CAN PUT MORE CHARACTERS INTO THE "ACCUM- 02084500
- ULATOR" AND NEEDS TO UPDATE "COUNT" FOR THE OUTSIDE WORLD. 02085000
- "COUNT" IS PASSED BY BOTH NAME AND VALUE. IT IS ALSO 02085500
- CONVENIENT TO HAVE (63-COUNT). THIS IS CALLED "COMCOUNT". 02086000
- "NCR" (NEXT CHARACTER TO BE SCANNED) IS ALSO PASSED BY 02086500
- NAME AND VALUE SO THAT IT MAY BE UPDATED. 02087000
- "ST1" AND "ST2" ARE TEMPORARY STORAGES WHICH ARE EXPLICITLY 02087500
- PASSED TO "SCAN" IN ORDER TO OBTAIN THE MOST USEFULL STACK 02088000
- ARRANGEMENT. 02088500
- ; 02089000
- STREAM PROCEDURE SCAN(NCR,COUNTV,ACCUM,COMCOUNT,RESULT,RESULTV, 02089500
- COUNT,ST2,NCRV,ST1); 02090000
- VALUE COUNTV, COMCOUNT,RESULTV,ST2,NCRV,ST1; 02090500
- BEGIN 02091000
- LABEL DEBLANK,NUMBERS,IDBLDR,GNC,K,EXIT,FINIS,L,ERROR, 02091500
- COMMENTS,COMMANTS; 02092000
- DI:=RESULT; DI:=DI+7; SI:=NCRV; 02092500
-COMMENT SETUP "DI" FOR A CHANGE IN "RESULT" AND "SI" FOR A LOOK AT 02093000
- THE BUFFER; 02093500
- CI:=CI+RESULTV; % SWITCH ON VALUE OF RESULT; 02094000
- GO DEBLANK; % 0 IS INITIAL CODE. 02094500
- GO IDBLDR; % 1 IS ID CODE. 02095000
- GO FINIS; % 2 IS SPECIAL CHARACTER CODE. 02095500
- GO NUMBERS; % 3 IS NUMBER CODE. 02096000
- GO FINIS; % 4 IS ERROR CODE. 02096500
- GO GNC; % 5 IS GET NEXT CHARACTER CODE. 02097000
- GO COMMANTS; % 6 IS COMMENT CODE. 02097500
- % 7 IS DEBLANK ONLY CODE. 02098000
- IF SC=" " THEN 02098500
-K: BEGIN SI:=SI+1; IF SC=" " THEN GO K END; 02099000
- GO FINIS; 02099500
-DEBLANK: 02100000
- IF SC=" " THEN 02100500
-L: BEGIN SI:=SI+1; IF SC=" " THEN GO L END; 02101000
-COMMENT IF WE ARRIVE HERE WE HAVE A NON-BLANK CHARACTER; 02101500
- NCRV:=SI; 02102000
- IF SC } "0" THEN GO NUMBERS; 02102500
- IF SC=ALPHA THEN GO IDBLDR; 02103000
-COMMENT IF WE ARRIVE HERE WE HAVE A SPECIAL CHARACTER (OR GNC); 02103500
-GNC: 02104000
- DS:=LIT"2"; TALLY:=1; SI:=SI+1; GO EXIT; 02104500
-COMMANTS: 02105000
- IF SC!";" THEN 02105500
- BEGIN 02106000
-COMMENTS: 02106500
- SI:=SI+1; 02107000
- IF SC > "%" THEN GO COMMENTS; 02107500
- IF SC < ";" THEN GO COMMENTS; 02108000
-COMMENT CHARACTERS BETWEEN % AND SEMICOLON ARE HANDLED BY WORD- 02108500
- MODE PART OF COMMENT ROUTINE; 02109000
- END; 02109500
- GO FINIS; 02110000
-IDBLDR: 02110500
- TALLY:=63; DS:=LIT "1"; 02111000
- COMCOUNT(TALLY:=TALLY+1; 02111500
- IF SC=ALPHA THEN SI:=SI+1 ELSE JUMP OUT TO EXIT); 02112000
- TALLY:=TALLY+1; 02112500
- IF SC=ALPHA THEN 02113000
- BEGIN 02113500
-ERROR: 02114000
- DI:=DI-1; DS:=LIT "4"; GO EXIT; 02114500
- END 02115000
- ELSE GO EXIT; 02115500
-COMMENT IF WE ARRIVE AT ERROR WE HAVE MORE THAN 63 CHARACTERS 02116000
- IN AN IDENTIFIER OR NUMBER; 02116500
-NUMBERS: 02117000
- TALLY:=63; DS:=LIT "3"; 02117500
- COMCOUNT(TALLY:=TALLY+1; 02118000
- IF SC <"0"THEN JUMP OUT TO EXIT; SI:=SI+1); 02118500
- GO ERROR; 02119000
-EXIT: 02119500
- ST1:=TALLY; % "ST1" CONTAINS NUMBER OF CHARACTERS WE ARE 02120000
- % GOING TO MOVE INTO THE "ACCUMULATOR". 02120500
- TALLY:=TALLY+COUNTV; ST2:=TALLY; 02121000
- DI:=COUNT; SI:=LOC ST2; DS:=WDS; 02121500
-COMMENT THIS CODE UPDATED "COUNT"; 02122000
- DI:=ACCUM; SI:=SI-3; DS:=3 CHR; 02122500
-COMMENT THIS CODE PLACES "COUNT" IN "ACCUM" AS WELL; 02123000
- DI:=DI+COUNTV; % POSITION "DI" PAST CHARACTERS ALREADY 02123500
- % IN THE "ACCUMULATOR", IF ANY. 02124000
- SI:=NCRV; DS:=ST1 CHR; 02124500
-COMMENT MOVE CHARACTERS INTO "ACCUM"; 02125000
-FINIS: 02125500
- DI:=NCR; ST1:=SI; SI:=LOC ST1; DS:=WDS; 02126000
-COMMENT RESET "NCR" TO LOCATION OF NEXT CHARACTER TO BE SCANNED; 02126500
- END OF SCAN; 02127000
- LABEL L;% 02127500
-L: 02128000
- SCAN(NCR,COUNT,ACCUM[1],63-COUNT,RESULT, 02128500
- RESULT,COUNT,0,NCR,0); 02129000
- IF NCR=LCR THEN 02129500
- BEGIN 02130000
- READACARD; 02130500
- GO TO L; % GO DIRECTLY TO L, DO NOT PASS GO, 02135500
- % DO NOT COLLECT $200. 02136000
- END; 02136500
- END SCANNER; 02137000
-DEFINE WRITELINE = IF SINGLTOG THEN WRITE(LINE,15,LIN[*]) 02181000
- ELSE WRITE(LINE[DBL],15,LIN[*])#, 02181250
- PRINTCARD = BEGIN 02182500
- EDITLINE(LIN,FCR,L DIV 4,L,[46:2],MEDIUM,OMITTING); 02182750
- IF NOHEADING THEN DATIME; WRITELINE; 02183000
- END #; 02183250
-STREAM PROCEDURE EDITLINE(LINE,NCR,R,L,SYMBOL,OMIT); 02183500
- VALUE NCR,R,L,SYMBOL,OMIT; 02183750
- BEGIN 02184000
- DI := LINE; DS := 16 LIT " "; 02184250
- SI := NCR; DS := 9 WDS; 02184500
- DS := 8 LIT " "; 02184750
- DS := WDS; % SEQUENCE NUMBER. 02185000
- DS:=LIT" "; SI:=LOC SYMBOL; SI:=SI+6; 02185250
- DS:=2 CHR; DS:=LIT" "; 02185500
- SI~LOC R; DS~4 DEC; DS~LIT ":"; 02185750
- SI~LOC L; DS~1 DEC; 02186000
- DS~6 LIT " "; 02186250
- OMIT(DI:=DI-12; DS:=8 LIT" OMIT"); 02186750
- END EDITLINE; 02187000
-COMMENT COMPARE COMPARES SEQUENCE NUMBERS OF TAPE AND CARD. IF 02187250
- TAPE IS SMALLER THEN RESULT = 0 ELSE IF CARD IS SMALLER 02187500
- RESULT = 1 ELSE RESULT = 2; 02187750
-REAL STREAM PROCEDURE COMPARE(TAPE,CARD); VALUE TAPE,CARD; 02188000
- BEGIN 02188250
- SI := TAPE; DI := CARD; 02188500
- IF 8 SC } DC THEN 02188750
- BEGIN 02189000
- SI := SI-8; DI := DI-8; TALLY := 1; 02189250
- IF 8 SC = DC THEN TALLY := 2 02189500
- END; 02189750
- COMPARE := TALLY 02190000
- END COMPARE; 02190250
-PROCEDURE OUTPUTSOURCE; 02190500
- BEGIN 02190750
- LABEL LCARD,LTAPE,AWAY; 02191000
- SWITCH SW:=LCARD,LCARD,LTAPE,AWAY,LCARD,LTAPE; 02191250
- IF SEQTOG THEN % RESEQUENCING. 02191500
- BEGIN 02191750
- IF TOTALNO = -10 OR NEWBASE THEN 02192000
- BEGIN 02192250
- NEWBASE := FALSE; GTI1:= TOTALNO:=BASENUM 02192500
- END 02192750
- ELSE GTI1:= TOTALNO:= TOTALNO + ADDVALUE; 02193000
- CHANGESEQ(GTI1,LCR); 02193250
- END; 02193500
- IF NEWTOG THEN 02193750
- IF WRITNEW(LIN,FCR) THEN WRITE(NEWTAPE,10,LIN[*]); 02194000
- IF OMITTING THEN IF NOT LISTATOG THEN GO AWAY; 02194250
- GO SW[LASTUSED]; 02194500
-LCARD: 02194750
- IF LISTER OR LISTPTOG THEN PRINTCARD; 02195000
- GO AWAY; 02195250
-LTAPE: 02195500
- IF LISTER THEN PRINTCARD; 02195750
-% GO AWAY; 02196000
-AWAY: 02196250
- END OUTPUTSOURCE; 02196500
-PROCEDURE READACARD; 02196750
-COMMENT READACARD READS CARDS FROM EITHER THE CARD READER OR THE 02197000
- TAPE MERGING AS REQUESTED AND CREATING A NEW TAPE AND 02197250
- LISTING IF REQUESTED. READACARD ALSO INSERTS A PERCENT 02197500
- SIGN AS AN END OF CARD SENTINEL IN COLUMN 73 AND SETS 02197750
- FCR,NCR,LCR,TLCR, AND CLCR; 02198000
- BEGIN 02198250
- PROCEDURE READTAPE; 02198500
- BEGIN 02201500
-LABEL ENDREADTAPE, EOFT; 02201510
-READ (TAPE, 10, TBUFF[*])[EOFT]; 02201750
- LCR:=MKABS(TBUFF[9]); 02202000
-GO TO ENDREADTAPE; 02202010
-EOFT: 02202020
-DEFINEARRAY[25]:="ND;END."& "E"[1:43:5]; 02202030
-DEFINEARRAY[34]:="9999" & "9999"[1:25:23]; 02202040
-TLCR:= MKABS(DEFINEARRAY[34]); 02202050
-PUTSEQNO (DEFINEARRAY[33],TLCR-8); 02202060
-TURNONSTOPLIGHT("%", TLCR-8); 02202070
-ENDREADTAPE: 02202080
- END READTAPE; 02202250
- PROCEDURE SEQCOMPARE(TLCR,CLCR, LIB); VALUE LIB; BOOLEAN LIB; 02202500
- REAL TLCR, CLCR ; 02202750
- BEGIN 02203000
- MEDIUM:="C "; % CARD READER. 02203250
- IF GT1:=COMPARE(TLCR,CLCR)=0 THEN % TAPE HAS LOW SEQUENCE NUMB02203500
- BEGIN 02203750
- LCR:=TLCR; LASTUSED:=3; 02204000
- MEDIUM:="T "; % TAPE INPUT. 02204250
- END 02204500
- ELSE BEGIN 02204750
- IF GT1 ! 1 THEN % TAPE AND CARD HAVE SAME SEQ 02205000
- BEGIN 02205250
- MEDIUM:="P "; % CARD PATCHES TAPE. 02205500
- READTAPE; 02208500
- END; 02208750
- LCR:=CLCR; 02209000
- LASTUSED:=2; 02209250
- END; 02209500
- END OF SEQCOMPARE; 02209750
- LABEL CARDONLY, CARDLAST, TAPELAST, EXIT, FIRSTTIME, 02210000
- EOF, USETHESWITCH, 02210250
- COMPAR, TESTVOID, XIT; 02210500
- SWITCH USESWITCH:=CARDONLY,CARDLAST,TAPELAST,FIRSTTIME; 02210750
- IF ERRORCOUNT}ERRMAX THEN ERR(611); % ERR LIMIT EXCEEDED - STOP. 02211500
-USETHESWITCH: 02211750
- DOLLAR2TOG:=FALSE; 02211800
- GO TO USESWITCH[LASTUSED]; 02212000
- MOVE(1,INFO[LASTUSED.LINKR,LASTUSED.LINKC], 02212250
- DEFINEARRAY[DEFINEINDEX-2]); 02212500
- LASTUSED := LASTUSED + 1; 02212750
- NCR := LCR-1; 02213000
- GO TO XIT; 02213250
-FIRSTTIME: 02213500
- READ(CARD,10,CBUFF[*]); 02213750
- FCR:=NCR:=(LCR:=MKABS(CBUFF[9]))-9; 02214000
- MEDIUM:="C "; 02214100
- IF EXAMIN(FCR)!"$" AND LISTER THEN PRINTCARD; 02214200
- PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02214250
- TURNONSTOPLIGHT("%",LCR); 02214500
- GO XIT; 02214750
-COMMENT WE HAVE JUST INITIALIZED CARD INPUT; 02215000
-CARDONLY: 02215250
- READ(CARD,10,CBUFF[*]); 02215500
- LCR := MKABS(CBUFF[9]); GO EXIT; 02215750
-CARDLAST: 02216000
- READ(CARD,10,CBUFF[*])[EOF]; 02216250
- CLCR := MKABS(CBUFF[9]); 02216500
- GO COMPAR; 02216750
-EOF: 02217000
- DEFINEARRAY[25]:="ND;END."&"E"[1:43:5]; 02217250
- DEFINEARRAY[34]:="9999"&"9999"[1:25:23]; 02217500
- CLCR:=MKABS(DEFINEARRAY[34]); 02217750
- PUTSEQNO(DEFINEARRAY[33],CLCR-8); 02218000
- TURNONSTOPLIGHT("%",CLCR-8); 02218250
-% 02218400
- GO COMPAR; 02218500
-COMMENT THIS RELEASES THE PREVIOUS CARD FROM THE CARD READER AND 02218750
- SETS UP CLCR; 02219000
-TAPELAST: 02219250
- READTAPE; 02219500
-COMMENT THIS RELEASES THE PREVIOUS CARD FROM TAPE AND SETS UP TLCR; 02219750
-COMPAR: 02224250
- SEQCOMPARE(TLCR,CLCR,FALSE); 02224500
-EXIT: 02225000
- NCR := FCR:= LCR - 9; 02225250
-COMMENT SETS UP NCR AND FCR; 02225500
- IF EXAMIN(FCR)!"$" THEN % $-CARDS DON"T COUNT. 02225750
- IF COMPARE(MKABS(INFO[LASTSEQROW,LASTSEQUENCE]),LCR)=1 THEN 02226000
- BEGIN 02226250
- FLAG(610); % SEQUENCE ERROR. 02226500
- SEQUENCEERROR(LIN); 02226750
- END; 02227000
- CARDNUMBER:=CONV(INFO[LASTSEQROW,LASTSEQUENCE-1],5,8); 02228000
- IF LASTUSED=3 THEN 02228050
- BEGIN 02228075
- IF VOIDTAPE THEN GO USETHESWITCH; 02228100
- IF VOIDTCR!0 THEN 02228125
- IF COMPARE(LCR,VOIDTCR)=0 THEN GO USETHESWITCH; 02228150
- END; 02228175
- IF EXAMIN(FCR)="$" THEN 02228250
- BEGIN 02228500
- IF LISTPTOG OR PRINTDOLLARTOG THEN PRINTCARD; 02228750
- NCR:=NCR+32768; DOLLARCARD; 02229000
-COMMENT DONT FORGET THAT NCR IS NOT WORD MODE, BUT CHAR. MODE POINTER; 02229250
- GO USETHESWITCH; 02229500
- END; 02229750
- IF EXAMIN(FCR)=" " THEN 02230000
- IF DOLLAR2TOG:=EXAMIN(FCR+32768)="$" THEN 02230100
- BEGIN 02230250
- OUTPUTSOURCE; 02230500
- NCR:=NCR+65536; % SCAN PAST " $" (CHARACTER MODE). 02230750
- DOLLARCARD; 02231000
- END; 02231250
- IF VOIDING THEN GO USETHESWITCH; 02231500
- IF VOIDCR!0 THEN 02231750
- IF COMPARE(LCR,VOIDCR)>0 THEN VOIDCR:=VOIDPLACE:=0 02232000
- ELSE GO USETHESWITCH; 02232250
- IF VOIDTAPE THEN GO TESTVOID; 02232500
- IF VOIDCR!0 THEN 02233000
- IF COMPARE(LCR,VOIDTCR)>0 THEN VOIDTCR:=VOIDPLACE:=0 ELSE 02233500
-TESTVOID: IF LASTUSED=3 THEN GO USETHESWITCH; 02234000
- CARDCOUNT:=CARDCOUNT+1; 02234500
- IF DOLLAR2TOG THEN GO USETHESWITCH; 02234600
- PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02234750
- OUTPUTSOURCE; 02235000
- IF OMITTING THEN GO USETHESWITCH; 02235250
-% 02235500
- TURNONSTOPLIGHT("%",LCR); 02235750
-XIT: 02237750
- END READACARD; 02238000
-REAL PROCEDURE CONVERT; 02248000
- BEGIN REAL T; INTEGER N; 02249000
- TLO~0; THI~ 02250000
- T~ CONV(ACCUM[1],TCOUNT,N~(COUNT-TCOUNT)MOD 8); 02251000
- FOR N~ TCOUNT+N STEP 8 UNTIL COUNT- 1 DO 02252000
- IF DPTOG THEN 02253000
- BEGIN 02254000
- DOUBLE(THI,TLO,100000000.0,0,|,CONV(ACCUM[1],N,8),0,+,~, 02255000
- THI,TLO); 02256000
- T~THI; 02257000
- END ELSE 02258000
- T~ T|100000000+ CONV(ACCUM[1],N,8); 02259000
- CONVERT~T; 02260000
- END; 02261000
-REAL STREAM PROCEDURE FETCH(F); VALUE F; 02262000
- BEGIN SI:=F; SI:=SI-8; DI:=LOC FETCH; DS:=WDS END FETCH; 02263000
-PROCEDURE DUMPINFO; 02264000
- BEGIN 02264050
- ARRAY A[0:14]; INTEGER JEDEN,DWA; 02264100
- STREAM PROCEDURE OCTALWORDS(S,D,N); VALUE N; 02264400
- BEGIN 02264450
- SI:=S; DI:=D; 02264500
- N(2(8(DS:=3 RESET; 3(IF SB THEN DS:=1 SET ELSE 02264550
- DS:=1 RESET; SKIP 1 SB)); DS:=1 LIT " ");DS:=2 LIT" "); 02264600
- END OF OCTALWORDS; 02264650
- STREAM PROCEDURE ALPHAWORDS(S,D,N); VALUE N; 02264700
- BEGIN 02264750
- SI:=S; DI:=D; 02264800
- N(2(4(DS:=1 LIT" "; DS:=1 CHR); DS:=1 LIT" "); DS:=2 LIT" "); 02264850
- END OF ALPHAWORDS; 02264900
- IF NOHEADING THEN DATIME;WRITE(LINE[DBL],/"ELBAT">); 02264950
- FOR JEDEN:=0 STEP 6 UNTIL 71 DO 02265000
- BEGIN 02265050
- BLANKET(14,A); OCTALWORDS(ELBAT[JEDEN],A,6); 02265100
- WRITE(LINE[DBL],15,A[*]); 02265150
- END; 02265200
- BLANKET(14,A); OCTALWORDS(ELBAT[72],A,4); 02265250
- WRITE(LINE[DBL],15,A[*]); 02265300
- FOR JEDEN:=0 STEP 1 UNTIL NEXTINFO DIV 256 DO 02265350
- BEGIN 02265400
- WRITE(LINE[DBL],/"INFO[",I2,",*]">,JEDEN); 02265450
- FOR DWA:=0 STEP 6 UNTIL 251 DO 02265500
- BEGIN 02265550
- BLANKET(14,A); ALPHAWORDS(INFO[JEDEN,DWA],A,6); 02265600
- WRITE(LINE,15,A[*]); 02265650
- BLANKET(14,A); OCTALWORDS(INFO[JEDEN,DWA],A,6); 02265700
- WRITE(LINE[DBL],15,A[*]); 02265750
- END; 02265800
- BLANKET(14,A); ALPHAWORDS(INFO[JEDEN,252],A,4); 02265850
- WRITE(LINE,15,A[*]); 02265900
- BLANKET(14,A); OCTALWORDS(INFO[JEDEN,252],A,4); 02265950
- WRITE(LINE[DBL],15,A[*]); 02266000
- END; 02266050
- END OF DUMPINFO; 02266100
-DEFINE SKAN = BEGIN 02277000
- COUNT:=RESULT:=ACCUM[1]:=0; 02278000
- SCANNER; 02279000
- Q:=ACCUM[1]; 02280000
- END #; 02281000
-COMMENT DOLLARCARD HANDLES THE COMPILER CONTROL CARDS. 02282000
- ALL COMPILER- AND USER-DEFINED OPTIONS ARE KEPT 02283000
- IN THE ARRAY "OPTIONS". 02284000
- EACH OPTION HAS A TWO-WORD ENTRY: 02285000
- 02286000
- WORD CONTAINS 02287000
- ---- -------- 02288000
- 1 ENTRY FROM ACCUM[1]: 00XZZZZ, WHERE 02289000
- X IS THE SIZE OF THE ID AND 02290000
- ZZZZZ IS THE FIRST FIVE CHARS OF THE ID. 02291000
- 2 PUSH-DOWN, 47-BIT STACK CONTAINING THE 02292000
- HISTORY OF THE SETTINGS OF THIS OPTION. 02293000
- 02294000
- IN "FINDOPTION", ALL COMPILER-DEFINED OPTIONS ARE USUALLY 02295000
- LOCATED BASED UPON A UNIQUE NUMBER ASSIGNED TO EACH. 02296000
- FOR ALL USER-DEFINED OPTIONS, A SEQUENTIAL TABLE SEARCH IS 02297000
- INITIATED USING "USEROPINX" AS THE INITIAL INDEX INTO THE 02298000
- "OPTIONS" ARRAY. IF THE NUMBER OF COMPILER-DEFINED OPTIONS 02299000
- IS CHANGED, THEN "USEROPINX" MUST BE ACCORDINGLY CHANGED. 02300000
- THE NUMBER OF USER DEFINED OPTIONS ALLOWED CAN BE 02301000
- CHANGED BY CHANGING THE DEFINE "OPARSIZE". 02302000
- THE VARIABLE "OPTIONWORD" CONTAINS THE CURRENT TRUE OR FALSE 02303000
- SETTING OF ALL OF THE COMPILER-DEFINED OPTIONS, ONE BIT PER 02304000
- OPTION. 02305000
- ; 02306000
-BOOLEAN PROCEDURE FINDOPTION(BIT); VALUE BIT; INTEGER BIT; 02307000
- BEGIN 02308000
- LABEL FOUND; 02309000
- REAL ID; 02310000
- OPINX:=2|BIT-4; 02311000
- WHILE ID:=OPTIONS[OPINX:=OPINX+2]!0 DO 02312000
- IF Q=ID THEN GO FOUND; 02313000
- OPTIONS[OPINX]:=Q; % NEW USER-DEFINED OPTION. 02314000
-FOUND: 02315000
- IF OPINX +1>OPARSIZE THEN FLAG(602) ELSE % TOO MANY USER OPTIONS 02316000
- FINDOPTION:=BOOLEAN(OPTIONS[OPINX+1]); 02317000
- END FINDOPTION; 02318000
-PROCEDURE DOLLARCARD; 02319000
- BEGIN 02320000
- STREAM PROCEDURE RESTORESEQNUM(LCR,INFO); VALUE LCR; 02320200
- BEGIN 02320400
- DI:=LCR; SI:=INFO; DS:=WDS; 02320600
- END; 02320800
- PROCEDURE SWITCHIT(XBIT); VALUE XBIT; INTEGER XBIT; 02321000
- BEGIN 02322000
- BOOLEAN B,T; 02323000
- INTEGER SAVEINX; 02324000
- LABEL XMODE0,XMODE1,XMODE2,XMODE3,XMODE4,ALONG; 02325000
- SWITCH SW:=XMODE0,XMODE1,XMODE2,XMODE3,XMODE4; 02326000
- SETTING:=FINDOPTION(XBIT); SKAN; 02327000
- GO SW[XMODE+1]; 02328000
-XMODE0: % FIRST OPTION ON CARD, BUT NOT SET, RESET, OR POP. 02329000
- OPTIONWORD:=BOOLEAN(0); 02330000
- FOR SAVEINX:=1 STEP 2 UNTIL OPARSIZE DO OPTIONS[SAVEINX]:=0; 02331000
- XMODE:=LASTUSED:=1; % CARD INPUT ONLY. 02332000
-XMODE1: % NOT FIRST OPTION AND NOT BEING SET, RESET, OR POPPED. 02333000
- OPTIONS[OPINX+1]:=REAL(TRUE); 02334000
- IF XBIT9 OR ENDTOG THEN GO COMPLETE; 02680000
- NHI:=NLO:=0; 02681000
- C:=0; GO FPART; 02682000
-ATSIGN: 02683000
- RESULT:=0; SCANNER; % SCAN PAST "@". 02684000
- IF COUNT>17 THEN GO ARGH; % 16 CHARS, + "@". 02685000
- IF OCTIZE(ACCUM[1],C,17-COUNT,COUNT-1) THEN 02686000
- BEGIN Q:=ACCUM[1]; FLAG(521); GO SCANAGAIN END; 02686500
- GO NUMBEREND; 02687000
-COMMENT DOT AND ATSIGN ENTER NUMBER CONVERSION AT CORRECT SPOT; 02689000
-QUOTE: 02690000
- COUNT:=0; 02691000
- T:=IF STREAMTOG THEN 63 02692000
- ELSE IF REAL(STREAMTOG)>1 THEN 8 ELSE 7; 02692500
- DO BEGIN 02693000
- RESULT:=5; SCANNER; 02694000
- IF COUNT>T THEN 02695000
- BEGIN Q:=ACCUM[1]; FLAG(520); GO SCANAGAIN END; 02696000
- END UNTIL EXAMIN(NCR) = """; 02697000
- Q:=ACCUM[1]; RESULT:=5; SCANNER; COUNT:=COUNT-1; 02698000
- IF COUNT<0 THEN COUNT:=COUNT+64; 02699000
- ACCUM[1]:=Q; RESULT:=4; 02700000
-STRNGXT: T:=C:=0; 02701000
- IF COUNT < 8 THEN 02703000
-MOVEIT: 02704000
- MOVECHARACTERS(COUNT,ACCUM[1],3,C,8-COUNT); 02705000
- T.CLASS:=STRNGCON; 02705100
- GO COMPLETE; 02705200
-COMMENT CROSSHATCH HANDLES TWO SITUATIONS: 02707000
- THE CROSSHATCH AT END OF DEFINE DECLARATIONS AND 02708000
- THE CROSSHATCH AT END OF ALPHA REPRESENTING DEFINED IDS. 02709000
- THE TWO CASES ARE PROCESSED DIFFERENTLY. THE FIRST CASE 02710000
- MERELY PLACES THE CROSSHATCH IN ELBAT. THE SECOND CASE 02711000
- CAUSES AN EXIT FROM SCANNING THE ALPHA FOR THE DEFINED ID. 02712000
- FOR A FULL DISCUSSION SEE DEFINEGEN; 02713000
-CROSSHATCH: 02714000
- IF DEFINECTR!0 THEN GO COMPLETE; 02715000
- PUTSEQNO(GT1,LCR); 02716000
- TURNONSTOPLIGHT(0,LCR); 02717000
- IF DEFINEINDEX = 0 THEN GO ARGH; 02718000
- LCR:=(GT1:=DEFINEARRAY[DEFINEINDEX-1]) DIV 262144; 02719000
- NCR:=GT1 MOD 262144; 02720000
- GT2:=0&(T:=DEFINEARRAY[DEFINEINDEX:=DEFINEINDEX-3])[33:18:15]; 02721000
- LASTUSED:=T.[33:15]; 02722000
- FOR GT1:=1 STEP 1 UNTIL GT2 DO 02723000
- BEGIN 02723500
- STACKHEAD[(T:=TAKE(LASTINFO+1)).[12:36] MOD 125]:= 02724000
- TAKE(LASTINFO).LINK; 02725000
- LASTINFO:=(NEXTINFO:=LASTINFO)-T.PURPT; 02726000
- END; 02727000
- GO SCANAGAIN; 02728000
-DOLLAR: COMMENT THIS CODE HANDLES CONTROL CARDS; 02729000
- DOLLARCARD; 02730000
-PERCENT: IF NCR ! FCR THEN READACARD; 02731000
- GO SCANAGAIN; 02737000
-COMMENT MOST PERCENT SIGNS ACTING AS END OF CARD SENTINELS GET TO 02738000
- PERCENT. PERCENT READS THE NEXT CARD AND STARTS OVER. A 02739000
- SIDE EFFECT IS THAT ALL CHARACTERS ON A CARD ARE IGNORED 02740000
- AFTER A FREE PERCENT SIGN (ONE NOT IMBEDDED IN A STRING OR 02741000
- COMMENT); 02742000
-COMMENT MIGHT BE FUNNY COMMA - HANDLE HERE; 02743000
-RTPAREN: RESULT:=7; SCANNER; 02744000
- IF EXAMIN(NCR) = """ THEN 02745000
- BEGIN 02746000
- RESULT:=0; SCANNER; 02747000
- DO BEGIN 02748000
- RESULT:=5; SCANNER 02749000
- END UNTIL EXAMIN(NCR) = """; 02750000
- RESULT:=0; SCANNER; 02751000
- RESULT:=7; SCANNER; 02752000
- IF EXAMIN(NCR) ! "(" THEN GO ARGH; 02753000
- RESULT:=0; SCANNER; Q:=ACCUM[1]; 02754000
- T:=SPECIAL[24] 02755000
- END; 02756000
- RESULT:=2; GO COMPLETE; 02757000
-IPART: TCOUNT:=0; C:=CONVERT; 02758000
-% RESULT:=7; SCANNER; % DEBLANK. 02759000
-% IF DEFINECTR=0 THEN 02760000
-% IF (C=3 OR C=4) AND EXAMIN(NCR)=""" THEN %OCTAL OR HEX STRING.02761000
-% BEGIN INTEGER SIZ; 02762000
-% RESULT:=5; SCANNER; % SKIP QUOTE. 02763000
-% COUNT:=0; 02764000
-% DO BEGIN 02765000
-% RESULT:=5; SCANNER; 02766000
-% IF COUNT > SIZ:=48 DIV C THEN % > 1 WORD LONG. 02767000
-% BEGIN ERR(520); GO SCANAGAIN END; 02768000
-% END UNTIL EXAMIN(NCR)="""; 02769000
-% Q:=ACCUM[1]; RESULT:=5; SCANNER; COUNT:=COUNT-1; 02770000
-% IF C=3 THEN % OCTAL STRING. 02771000
-% IF OCTIZE(ACCUM[1],ACCUM[4],16-COUNT,COUNT) THEN 02772000
-% FLAG(521) % NON OCTAL CHARACTER IN STRING. 02773000
-% ELSE ELSE IF HEXIZE(ACCUM[1],ACCUM[4],12-COUNT,COUNT) THEN 02774000
-% FLAG(521); % NON CHARACTER IN HEX STRING. 02775000
-% IF COUNT < SIZ THEN 02776000
-% BEGIN 02777000
-% C:=ACCUM[4]; GO FINISHNUMBER; 02778000
-% END; 02779000
-% T.INCR:=COUNT:=8; T.CLASS:=STRING; 02780000
-% MOVECHARACTERS(8,ACCUM[4],0,ACCUM[1],3); 02781000
-% GO COMPLETE; 02782000
-% END OCTAL OR HEX STRING; 02783000
- IF DPTOG THEN 02784000
- BEGIN NHI:=THI; NLO:=TLO; END; 02785000
- IF EXAMIN(NCR)="." THEN 02786000
- BEGIN 02787000
- RESULT:=0; SCANNER; 02788000
- C:=1.0| C; 02789000
-FPART: TCOUNT:=COUNT; 02790000
- IF EXAMIN(NCR){9 THEN 02791000
- BEGIN 02792000
- RESULT:=0; SCANNER; 02793000
- IF DPTOG THEN 02794000
- BEGIN 02795000
- DOUBLE(CONVERT,TLO,TEN[(COUNT-TCOUNT)MOD 12], 02796000
- 0,/,:=,THI,TLO); 02797000
- FOR T:=12 STEP 12 UNTIL COUNT - TCOUNT DO 02798000
- DOUBLE(THI,TLO,TEN[12],0,/,:=,THI,TLO); 02799000
- DOUBLE(THI,TLO,NHI,NLO,+,:=,NHI,NLO); 02800000
- C:=NHI 02801000
- END 02802000
- ELSE C:=TEN[TCOUNT-COUNT]|CONVERT+C; 02803000
- END 02804000
- END; 02805000
- RESULT:=7; SCANNER; 02806000
- IF EXAMIN(NCR)="@" THEN 02807000
- BEGIN 02808000
- RESULT:=0; SCANNER; 02809000
-EPART: TCOUNT:=COUNT; 02810000
- C:=C|1.0; 02811000
- RESULT:=7; SCANNER; 02812000
- IF T:=EXAMIN(NCR)>9 THEN 02813000
- BEGIN 02815000
- RESULT:=0; SCANNER; 02816000
- TCOUNT:=COUNT; 02817000
- END; 02818000
- RESULT:=0; SCANNER; 02820000
- Q:=ACCUM[1]; 02822000
- IF GT1:=T:=(IF T="-"THEN -CONVERT ELSE CONVERT)<-46 OR 02823000
- T>69 THEN FLAG(269) 02824000
- ELSE BEGIN 02825000
- T:=TEN[T]; 02826000
- IF ABS(0&C[42:3:6]&C[1:2:1]+0&T[42:3:6]&T[1:2:1] 02827000
- + 12) >63 THEN FLAG(269) 02828000
- ELSE IF DPTOG THEN 02829000
- IF GT1<0 THEN 02830000
- BEGIN 02831000
- GT1:=-GT1; 02832000
- DOUBLE(NHI,NLO,TEN[GT1 MOD 12],0,/,:=,NHI,NLO); 02833000
- FOR GT2:=12 STEP 12 UNTIL GT1 DO 02834000
- DOUBLE(NHI,NLO,TEN[12],0,/,:=,NHI,NLO); 02835000
- END 02836000
- ELSE BEGIN 02837000
- DOUBLE(NHI,NLO,TEN[GT1 MOD 12],0,|,:=,NHI,NLO); 02838000
- FOR GT2:=12 STEP 12 UNTIL GT1 DO 02839000
- DOUBLE( NHI,NLO,TEN[12],0,|,:=,NHI,NLO); 02840000
- END 02841000
- ELSE C:=C|T; 02842000
- END; 02843000
- END; 02844000
-NUMBEREND: 02845000
- Q:=ACCUM[1]; RESULT:=3; 02846000
-FINISHNUMBER: 02847000
- T:=0; 02848000
- IF C.[1:37]=0 THEN 02849000
- BEGIN T.CLASS:=LITNO ; T.ADDRESS:=C END 02850000
- ELSE T.CLASS:=NONLITNO ; 02851000
- GO COMPLETE; 02852000
-COMMENT THE CODE BETWEEN IDENT AND COMPOST DOES A LOOKUP IN INFO. 02853000
- IF QUANTITY IS NOT FOUND THE ELBAT WORD EXPECTS TO BE 02854000
- ZERO. THE SCRAMBLE FOR APPROPRIATE STACK IS FIRST THING 02855000
- TO BE DONE. THEN THE LOOP BETWEEN COMPOST AND 02859000
- ROSE IS ENTERED. THE LAST THING DONE FOR ANY 02860000
- IDENTIFIER WHICH IS FOUND IS TO STUFF THE LOCATION 02861000
- OF THE ELBATWORD IN INFO INTO THE LINK FIELD. THIS 02862000
- ALLOWS REFERENCE BACK TO INFO FOR ADDITIONAL DATA, 02863000
- SHOULD THIS BE REQUIRED. ; 02864000
-IDENT: T:=STACKHEAD[SCRAM:=(Q:=ACCUM[1])MOD 125]; 02865000
-ROSE: GT1:=T.LINKR; 02875000
- IF(GT2:=T.LINKC)+GT1= 0 THEN 02876000
- BEGIN T:=0; GO COMPLETE END; 02877000
- IF T = INFO[GT1, GT2] THEN BEGIN 02877010
- T:=0; GO TO COMPLETE END; 02877020
- T:=INFO[GT1,GT2]; 02878000
- IF INFO[GT1,GT2+1]&0[1:1:11] ! Q THEN GO ROSE; 02879000
- IF COUNT { 5 THEN GO COMPOST ; 02880000
- IF NOT EQUAL(COUNT-5,ACCUM[2],INFO[GT1,GT2+2])THEN GO ROSE; 02881000
-COMPOST: T:=T>1[35:43:5]>2[40:40:8]; 02882000
-COMMENT CHECK HERE FOR COMMENTS AND DEFINED IDS; 02883000
- IF NOT ENDTOG THEN 02884000
- BEGIN 02885000
- IF GT1:=T.CLASS = COMMENTV THEN 02886000
- BEGIN 02887000
- WHILE EXAMIN(NCR) ! ";" DO 02888000
- BEGIN RESULT:=6; COUNT:=0; SCANNER END; 02889000
- RESULT:=0;SCANNER;GO SCANAGAIN 02890000
- END 02891000
- END; 02892000
- IF STOPDEFINE THEN GO COMPLETE; 02893000
- IF GT1 ! DEFINEDID THEN GO COMPLETE; 02894000
-COMMENT SETUP FOR DEFINED IDS - SEE DEFINEGEN FOR MORE DETAILS; 02895000
- IF T.ADDRESS!0 THEN T:=FIXDEFINEINFO(T); 02896000
- IF DEFINEINDEX = 24 THEN 02898000
- BEGIN FLAG(139);GO ARGH END; 02899000
- DEFINEARRAY[DEFINEINDEX]:=LASTUSED&T.ADDRESS [18:33:15]; 02900000
- LASTUSED:=GIT(T); 02901000
- DEFINEARRAY[DEFINEINDEX+2]:=262144|LCR+NCR; 02902000
- LCR:=(NCR:=MKABS(DEFINEARRAY[DEFINEINDEX+1]))+1; 02903000
- PUTSEQNO(GT4,LCR); 02904000
- TURNONSTOPLIGHT("%",LCR); DEFINEINDEX:=DEFINEINDEX+3; 02905000
- GO PERCENT; 02906000
-COMPLETE: 02909000
- ELBAT[NXTELBT]:=T; 02910000
- STOPDEFINE:=FALSE; COMMENT ALLOW DEFINES AGAIN; 02911000
- IF NXTELBT:=NXTELBT+1 > 74 THEN 02912000
- IF NOT MACROID THEN 02913000
- BEGIN 02914000
-COMMENT ELBAT IS FULL: ADJUST IT; 02915000
- MOVE(10,ELBAT[65],ELBAT); 02916000
- I:=I-65; P:=P-65; NXTELBT:=10; 02917000
- END 02918000
- END; 02919000
- IF TABLE:=ELBAT[P].CLASS = COMMENTV THEN 02920000
- BEGIN 02921000
-COMMENT SPECIAL HANDLING OF CONSTANTS FOR SAKE OF FOR STATEMENTS; 02922000
- C:=INFO[0,ELBAT[P].ADDRESS]; 02923000
- ELBAT[P].CLASS:=TABLE:=NONLITNO 02924000
- END; 02925000
- STOPDEFINE:=FALSE; COMMENT ALLOW DEFINE; 02926000
- END TABLE ; 02927000
- BOOLEAN PROCEDURE BOOLPRIM; FORWARD; 02955000
- PROCEDURE BOOLCOMP(B); BOOLEAN B; FORWARD; 02955500
- INTEGER PROCEDURE NEXT; 02956000
- BEGIN 02956500
- LABEL EXIT; 02957000
- INTEGER T; 02957500
- DEFINE ERROR = BEGIN FLAG(603); GO EXIT END#; 02958000
- SKAN; 02958500
- IF RESULT=3 THEN ERROR; % NUMBERS NOT ALLOWED. 02959000
- IF RESULT=2 THEN % SPECIAL CHARACTER. 02959500
- BEGIN 02960000
- T:=IF Q="1,0000" OR Q="1%0000" THEN 20 % FAKE OUT BOOLEXP.02960500
- ELSE ((T:=Q.[18:6]-2) & T[42:41:3]); 02961000
- IF T=11 OR T=19 OR T=20 THEN BATMAN:=SPECIAL[T] % (,),OR ;02961500
- ELSE FLAG(603); 02962000
- GO EXIT 02962500
- END SPECIAL CHARACTERS; 02963000
-COMMENT LOOK FOR BOOLEAN OPERATORS, THEN OPTIONS; 02963500
- T:= IF Q="3NOT00" THEN NOTOP 02964000
- ELSE IF Q="3AND00" THEN ANDOP 02964500
- ELSE IF Q="2OR000" THEN OROP 02965000
- ELSE IF Q="3EQV00" THEN EQVOP 02965500
- ELSE 0; 02966000
- IF T!0 THEN BATMAN.CLASS:=T 02966500
- ELSE BATMAN:=1 & BOOID[2:7] & REAL(FINDOPTION(1))[1:1]; % OPTION. 02967000
-EXIT: 02967500
- NEXT:=MYCLASS:=BATMAN.CLASS; 02968000
- END NEXT; 02968500
- BOOLEAN PROCEDURE BOOLEXP; 02969000
- BEGIN 02969500
- BOOLEAN B; 02970000
- B:=BOOLPRIM; 02970500
- WHILE MYCLASS}EQVOP AND MYCLASS{ANDOP DO BOOLCOMP(B); 02971000
- BOOLEXP:=B 02971500
- END BOOLEXP; 02972000
- BOOLEAN PROCEDURE BOOLPRIM; 02972500
- BEGIN 02973000
- BOOLEAN B,KNOT; 02973500
- DEFINE SKIPIT = MYCLASS:=NEXT #; 02974000
- IF KNOT:=(NEXT=NOTOP) THEN SKIPIT; 02974500
- IF MYCLASS=LEFTPAREN THEN 02975000
- BEGIN 02975500
- B:=BOOLEXP; 02976000
- IF MYCLASS!RTPAREN THEN FLAG(604); 02976500
- END 02977000
- ELSE IF MYCLASS!BOOID THEN FLAG(601) 02977500
- ELSE B:=BATMAN<0; 02978000
- IF KNOT THEN B:=NOT B; SKIPIT; 02978500
- BOOLPRIM:=B 02979000
- END BOOLPRIM; 02979500
- PROCEDURE BOOLCOMP(B); BOOLEAN B; 02980000
- BEGIN 02980500
- REAL OPCLASS; 02981000
- BOOLEAN T; 02981500
- OPCLASS:=MYCLASS; 02982000
- T:=BOOLPRIM; 02982500
- WHILE OPCLASS 1023 THEN EMITO(PRTE); 04018000
- EMIT(2 & ADDRESS [36:38:10]) END EMITV; 04019000
- COMMENT EMITN EMITS A DESCRIPTOR CALL. IF THE ADDRESS IS FOR THE 04020000
- SECOND HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 04021000
- PROCEDURE EMITN(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; 04022000
- BEGIN IF ADDRESS > 1023 THEN EMITO(PRTE); 04023000
- EMIT(3 & ADDRESS [36:38:10]) END EMITN; 04024000
- COMMENT EMITPAIR EMITS A LITC ADDRESS FOLLOWED BY OPERATOR. IF THE 04025000
- ADDRESS IS FOR THE SECOND HALF OF THE PRT, THEN IT ALSO 04026000
- EMITS PRTE; 04027000
- PROCEDURE EMITPAIR(ADDRESS,OPERATOR); 04028000
- VALUE ADDRESS,OPERATOR; 04029000
- INTEGER ADDRESS,OPERATOR; 04030000
- BEGIN 04031000
- EMITL(ADDRESS); 04032000
- IF ADDRESS > 1023 THEN EMITO(PRTE); 04033000
- EMITO(OPERATOR) END EMITPAIR; 04034000
- COMMENT ADJUST ADJUST L TO THE BEGINING OF A WORD AND FILLS IN THE 04080000
- INERVENING SPACE WITH NOPS. IT CHECKS STREAMTOG TO DECIDE 04081000
- WHICH SORT OF NOP TO USE; 04082000
- PROCEDURE ADJUST; 04083000
- BEGIN 04084000
- 04085000
-WHILE L.[46:2]!0 DO EMIT(45); 04086000
- END ADJUST; 04087000
- PROCEDURE EMITLNG; 04098000
- BEGIN LABEL E; 04099000
- IF NOT LINKTOG THEN GO TO E; 04100000
- COMMENT GO TO E IF LAST THING IS A LINK; 04101000
- IF GET(L) ! 0 THEN GO TO E; 04102000
- COMMENT EITHER LAST EXPRESSION WAS CONDITIONAL OR THERE IS NO 04103000
- LNG OR RELATIONAL OPERATOR; 04104000
- IF GT1 ~ GET(L-1) = 77 THEN L ~ L-1 04105000
- COMMENT LAST THING WAS AN LNG - SO CANCEL IT; 04106000
- ELSE IF GT1.[42:6]=21 AND GT1.[37:2]=0 THEN % AHA 04107000
- COMMENT LAST THING WAS A RELATIONAL; 04108000
- BEGIN L~L-1; EMITO(REAL(BOOLEAN(GT1.[36:10]) EQV 04109000
- BOOLEAN(IF GT1.[40:2] = 0 THEN 511 ELSE 463))) 04110000
- COMMENT NEGATE THE RELATIONAL; END ELSE 04111000
- E: EMITO(LNG) END EMITLNG; 04112000
- COMMENT EMITB EMITS A BRANCH OPERATOR AND ITS ASSOCIATED NUMBER; 04113000
- PROCEDURE EMITB(BRANCH,FROM,TOWARDS); 04114000
- VALUE BRANCH,FROM,TOWARDS; 04115000
- INTEGER BRANCH,FROM,TOWARDS; 04116000
- BEGIN 04117000
- INTEGER TL; 04118000
- TL ~ L; 04119000
- IF TOWARDS > FOULED THEN FOULED ~ TOWARDS; 04119500
- L ~ FROM-2; 04120000
- GT1 ~ TOWARDS-FROM; 04120100
- IF TOWARDS.[46:2] = 0 04120200
- THEN BEGIN 04120300
- BRANCH ~ BRANCH&1[39:47:1]; 04120400
- GT1 ~ TOWARDS DIV 4 - (FROM-1) DIV 4 END; 04120500
- EMITNUM(ABS(GT1)); 04121000
- EMITO(BRANCH&(REAL(GT1} 0)+1)[42:46:2]); 04122000
- 04123000
- L ~ TL 04124000
- END EMITB; 04125000
- COMMENT DEBUGWORD FORMATS TWO FIELDS FOR DEBUGGING OUTPUT IN 04126000
- OCTAL, NAMELY : 04127000
- 1. 4 CHARACTERS FOR THE L REGISTER. 04128000
- 2.16 CHARACTERS FOR THE WORD BEING EMITTED. ; 04129000
- STREAM PROCEDURE DEBUGWORD( SEQ,CODE,FEIL); VALUE SEQ,CODE ; 04130000
- BEGIN 04131000
- DI~FEIL; SI~ LOC SEQ; SI~ SI+4; DS ~ 4 CHR; 04132000
- DS ~ 2 LIT" "; 04133000
- SI ~ LOC CODE ; 04134000
- 16( DS ~ 3 RESET; 3( IF SB THEN DS~SET ELSE 04135000
- DS ~ RESET ; SKIP 1 SB)); 04136000
- 29(DS ~ 2 LIT" " ); 04137000
- END ; 04138000
- COMMENT EMITWORD PLACES THE PARAMETER,"WORD",INTO EDOC. IF 04139000
- DEBUGGING IS REQUIRED, "L" AND "WORD" ARE OUTPUT ON 04140000
- THE PRINTER FILE IN OCTAL FORMAT. ; 04141000
- PROCEDURE EMITWORD (WORD); VALUE WORD; REAL WORD; 04142000
- BEGIN 04143000
- ADJUST; 04144000
- IF L} 4088 THEN BEGIN ERR(200); L~0; END 04145000
- ELSE BEGIN 04146000
- MOVE(1,WORD, CODE(L DIV 4+1)); 04147000
- IF DEBUGTOG THEN 04148000
- BEGIN DEBUGWORD(B2D(L),WORD,LIN); 04149000
- WRITELINE END; 04150000
- FOULED ~ L ~ L+4; END 04151000
- END EMITWORD; 04152000
- COMMENT CONSTANTCLEAN IS CALLED AFTER AN UNCONDITIONAL BRANCH HAS 04153000
- BEEN EMITTED. IF ANY CONSTANTS HAVE BEEN ACCUMULATED BY 04154000
- EMITNUM IN INFO[0,*], CONSTANTCLEAN WILL FIX THE CHAIN 04155000
- OF C-RELATIVE OPDC S LEFT BY EMITNUM. IF C-RELATIVE 04156000
- ADDRESSING IS IMPOSSIBLE (I.E. THE ADDRESS 04157000
- IF GREATER THAN 127 WORDS) THEN THE CONSTANT ALONG WITH 04158000
- THE 1ST LINK OF THE OPDC CHAIN IS ENTERED IN INFO. 04159000
- AT PURGE TIME THE REMAINING OPDC S ARE EMITTED WITH 04160000
- F -RELATIVE ADDRESSING AND CODE EMITTED TO STORE THE 04161000
- CONSTANTS INTO THE PROPER F-RELATIVE CELLS. ; 04162000
- PROCEDURE CONSTANTCLEAN ; 04163000
- IF MRCLEAN THEN 04164000
- BEGIN 04165000
- INTEGER J,TEMPL,D,LINK; 04166000
- BOOLEAN CREL; 04167000
- LABEL ALLTHU ; 04168000
- 04169000
- FOR J ~ 1 STEP 2 UNTIL LASTENTRY DO 04170000
- BEGIN 04171000
- ADJUST; TEMPL~L; L~INFO[0,255-J+1]; 04172000
- CREL ~ FALSE; 04173000
- DO BEGIN 04174000
- IF D~(TEMPL-L+3)DIV 4}128 THEN 04175000
- IF MODE ! 0 THEN 04175500
- BEGIN FLAG(50); GO TO ALLTHU END; 04176000
- 04177000
- 04178000
- 04179000
- 04180000
- 04181000
- LINK~GET(L); 04182000
- CREL ~ TRUE; 04183000
- IF MODE ! 0 THEN EMITV(D+768) ELSE 04184000
- EMITV(REAL(TEMPL}2048)|1024+TEMPL DIV 4); 04184500
- END UNTIL L~ LINK = 4095 ; 04185000
- ALLTHU: L ~ TEMPL; 04186000
- IF CREL THEN EMITWORD( INFO[0,255-J ]); 04187000
- END; 04188000
- LASTENTRY ~ 0; 04189000
- END ; 04190000
- COMMENT EMITNUM HANDLES THE EMISSION OF CODE FOR CONSTANTS,BOTH 04191000
- EXPLICIT AND IMPLICIT. IN EVERY CASE,EMITNUM WILL 04192000
- PRODUCE CODE TO GET THE DESIRED CONSTANT ON TOP OF 04193000
- THE STACK. IF THE NUMBER IS A LITERAL A SIMPLE LITC 04194000
- SYLLABLE IS PRODUCED. HOWEVER,NON-LITERALS ARE KEPT 04195000
- IN THE ZERO-TH ROW OF INFO WITH THE SYLLABLE 04196000
- POSITION,L. THE FIRST EMITNUM ON A PARTICULAR 04197000
- CONSTANT CAUSES THE VALUES OF L AND THE CONSTANT 04198000
- TO BE STORED IN INFO[0,*] (NOTE:ITEMS ARE STORED 04199000
- IN REVERSE STARTING WITH INFO[0,255],ETC.). THEN 04200000
- ITS THE JOB OF CONSTANTCLEAN TO EMIT THE ACTUAL 04201000
- OPDC (SEE CONSTANTCLEAN PROCEDURE FOR DETAILS) ; 04202000
- PROCEDURE EMITNUM( C ); VALUE C; REAL C; 04203000
- BEGIN LABEL FINISHED,FOUND ; REAL N; 04204000
- IF C.[1:37]=0 THEN EMITL(C) 04205000
- ELSE 04206000
- BEGIN 04207000
- FOULED ~ L; 04207500
- FOR N ~ 1 STEP 2 UNTIL LASTENTRY DO 04208000
- IF INFO[0,255-N] = C THEN GO TO FOUND ; 04209000
- INFO[0,255 -LASTENTRY] ~ L; 04210000
- INFO[0,255 -LASTENTRY-1]~ C ; 04211000
- EMITN(1023); 04212000
- IF MODE=0 THEN EMITO(NOP); 04212100
- LINKTOG~FALSE; 04213000
- IF LASTENTRY ~ LASTENTRY+2 } 128 THEN 04214000
- BEGIN 04215000
- C ~ BUMPL; 04216000
- CONSTANTCLEAN; 04217000
- EMITB(BFW,C,L); 04218000
- END; 04219000
- GO TO FINISHED; 04220000
- FOUND: EMIT(INFO[0,255 -N+1]); 04221000
- LINKTOG~FALSE; 04222000
- INFO[0,255-N+1]~ L-1; 04223000
- IF MODE=0 THEN EMITO(NOP); 04223100
- END; 04224000
- FINISHED:END EMITNUM ; 04225000
- COMMENT SEARCH PERFORMS A BINARY SEARCH ON THE COP AND WOP 04226000
- ARRAYS, GIVEN THE OPERATOR BITS SEARCH YIELDS THE BCD 04227000
- MNEUMONIC FOR THAT OPERATOR. IF THE OPERATOR CANNOT 04228000
- BE FOUND SEARCH YIELDS BLANKS. 04229000
- NOTE: DIA,DIB,TRB ARE RETURNED AS BLANKS. ; 04230000
- ALPHA PROCEDURE SEARCH (Q,KEY); VALUE KEY; ARRAY Q[0]; REAL KEY ; 04231000
- BEGIN LABEL L; 04232000
- COMMENT GT1 AND GT2 ARE INITIALIZED ASSUMMING THAT Q IS ORDERED 04233000
- BY PAIRS (ARGUMENT,FUNCTION,ARGUMENT,FUNCTION,ETC.) 04234000
- AND THAT THE FIRST ARGUMENT IS IN Q[4]. FURTHERMORE 04235000
- THE LENGTH OF Q IS 128. ; 04236000
- INTEGER N,I ; 04237000
- N ~ 64 ; 04238000
- FOR I ~ 66 STEP IF Q[I]1 THEN FILLIT(LIN,PORS,GS,0,INFO[N.LINKR,N.LINKC]) 05325470
-ELSE FILLIT(LIN,PORS,GS,ABS(N),N); 05325480
- IF NOHEADING THEN DATIME; WRITELINE; 05325490
- END WRITEPRT; 05325500
- COMMENT GETSPACE MAKES ASSIGNMENTS TO VARIABLES AND DESCRIPTORS IN 05326000
- THE STACK AND PRT. PERMANENT TELLS WHETHER IT IS A 05327000
- PERMANENTLY ASSIGNED CELL (ALWAYS IN PRT) OR NOT. NON 05328000
- PERMANENT CELLS ARE EITHER IN STACK OR PRT ACCORDING TO 05329000
- MODE. CARE IS TAKEN TO REUSE NON PERMANENT PRT CELLS; 05330000
-INTEGER PROCEDURE GETSPACE(PERMANENT,L); VALUE PERMANENT,L; 05331000
- BOOLEAN PERMANENT; INTEGER L; 05333000
- BEGIN LABEL L1,L2,EXIT; 05334000
- STREAM PROCEDURE DOIT(C,A,I,S); VALUE C,A; 05334100
- BEGIN LOCAL N; 05334200
- DI~S; DS~8 LIT" "; SI~S; DS~9 WDS; 05334300
- SI~I; SI~SI+2; DI~LOC N; DI~DI+7; DS~CHR; 05334400
- DI~S; SI~LOC C; 2(DS~4 DEC); 05334500
- SI~I; SI~SI+3; DS~N CHR; 05334600
- END; 05334700
- BOOLEAN M,Q; 05343000
- INTEGER ROW,COL,GS; 05344000
-IF NOT(STREAMTOG AND (LEVEL>2))THEN 05344400
- IF STEPI=RELOP THEN 05344500
- BEGIN 05344510
- IF STEPI>IDMAX 05344520
- THEN 05344530
- BEGIN 05344540
- IF ELCLASS=ADOP 05344550
- THEN 05344560
- IF ELBAT[I].ADDRESS=SUBOP 05344570
- THEN GS~FZERO ELSE GS~512; 05344580
- ELSE 05344590
- BEGIN GS~0;I~I-1 END; 05344600
- IF STEPI!LITNO THEN FLAG(51); 05344610
- IF ELBAT[I].ADDRESS}512 THEN GS~1024; 05344615
- GS~GS+ELBAT[I].ADDRESS 05344620
- END 05344630
- ELSE 05344640
- BEGIN 05344650
- GS~ELBAT[I].ADDRESS; 05344660
- IF GS=0 THEN FLAG(51); 05344661
- IF GS}FZERO AND GS{1023 THEN GS~-GS; 05344662
- IF STEPI!ADOP THEN I~I-1 ELSE 05344670
- BEGIN 05344680
- STEPIT; 05344690
- GS~ELBAT[I].ADDRESS+ 05344700
- (IF ELBAT[I-1].ADDRESS=SUBOP 05344710
- THEN -GS ELSE +GS); 05344720
- END; 05344730
- GS~ABS(GS); 05344740
- END; Q~GS<512 OR GS>1023; 05344750
- GO TO EXIT 05344760
- END ELSE I~I-1; 05344770
- IF MODE = 0 OR PERMANENT 05345000
- THEN BEGIN 05346000
- IF PRTIMAX > 1023 THEN FLAG(148); 05347000
- IF ASTOG THEN FLAG(505); 05348000
- PRTI ~ 05349000
- PRTIMAX~(GS~PRTIMAX)+1; 05350000
- IF STUFFTOG THEN IF (M~(LEVEL=1 AND KLASSF>19)) OR 05350100
- (LEVEL}3 AND ELBAT[I].CLASS=LABELID) THEN BEGIN 05350120
- IF NOT M THEN 05350140
- DOIT(LABELID,GS,INFO[(ELBAT[I]).LINKR, 05350160
- (ELBAT[I].LINKC+1)],TWXA[0]) ELSE 05350180
- DOIT(KLASSF,GS,INFO[(LASTINFO+1).LINKR,(LASTINFO+1).LINKC]05350200
- ,TWXA[0]); WRITE(STUFF,10,TWXA[*]) END; END 05350300
- ELSE BEGIN 05369000
- IF STACKCTR > 767 THEN FLAG(149); 05370000
- STACKCTR ~ (GS ~ STACKCTR)+1; Q ~ FALSE; 05371000
- GO TO EXIT END; 05372000
- L2: IF GS } 512 THEN GS ~ GS+1024; 05373000
- Q ~ TRUE; 05374000
- EXIT: GETSPACE ~ GS; 05375000
- IF GS}NESTCTR AND GS 1023 THEN GS ~ GS-1024; 05376000
- IF PRTOG THEN WRITEPRT(IF Q THEN "PRT " ELSE "STACK",L,B2D(GS)); 05376100
- END GETSPACE; 05378000
- REAL PROCEDURE DEPTH(I); VALUE I; REAL I; 05400000
- BEGIN REAL J,K,T,S,M; 05401000
- IF T~NESTPRT[I]<0 THEN 05402000
- BEGIN DEPTH~CALL[T.[22:13]-1].[35:13]; 05402100
- IF NESTPRT[I].[2:1]=0 THEN NESTCUR~NESTCUR+1; 05402200
- NESTPRT[I].[2:1]~1; 05402300
- END 05402400
- ELSE IF T.[9:13]!0 THEN DEPTH~T.[9:13] 05403000
- ELSE BEGIN M~0; NESTPRT[I]~-T; 05404000
- J~T.[22:13]; K~CALL[J-1].[22:13]; 05405000
- FOR J~J STEP 1 UNTIL K DO 05406000
- IF S~DEPTH(CALL[J])>M THEN M~S; 05407000
- M~DEPTH~M+CALL[T.[22:13]-1].[35:13]; 05409000
- IF NESTCUR!0 THEN 05409100
- IF NESTPRT[I].[2:1]=0 THEN ELSE 05409200
- BEGIN T~T&M[9:35:13]; NESTCUR~NESTCUR-1 END 05409300
- ELSE T~T&M[9:35:13]; 05409400
- NESTPRT[I]~T; 05409500
- END; 05410000
- END; 05411000
- PROCEDURE NESTSORT(L,U); VALUE L,U; REAL L,U; FORWARD; 05411100
- PROCEDURE SORTNEST; 05412000
- BEGIN ARRAY A[0:14]; 05413000
- REAL I,J,K,T; 05414000
- REAL P,Q; 05414100
- STREAM PROCEDURE NESTFORM(I,N,L,A) VALUE I,N; 05415000
- BEGIN LOCAL S; 05416000
- DI~A; 15(DS~8 LIT " "); 05417000
- DI~LOC S; DI~DI+7; SI~L; SI~SI+10; DS~CHR; 05418000
- DI~A; DI~DI+I; A~DI; 05419000
- DI~DI+6; DS~ S CHR; 05420000
- DI~A; SI~LOC N; DS~4 DEC; 05421000
- DI~A; DS~3 FILL; 05422000
- END; 05423000
- FOR I~PRTBASE STEP 1 UNTIL PRTOP DO 05424000
- IF NESTPRT[I]!0 THEN 05425000
- BEGIN SORTPRT[Q]~I; Q~Q+1 END; 05425100
- NESTSORT(0,Q~Q-1); 05425200
- FOR P~0 STEP 1 UNTIL Q DO 05425300
- BEGIN I~SORTPRT[P]; T~NESTPRT[I]; 05425400
- NESTFORM(0,DEPTH(I),INFO[T.LINKR,T.LINKC],A); 05426000
- WRITE(LINE[DBL],15,A[*]); 05427000
- J~T.[22:13]; K~CALL[J-1].[22:13]; 05428000
- FOR J~J STEP 1 UNTIL K DO 05429000
- BEGIN I~CALL[J]; 05430000
- T~NESTPRT[I]; 05430500
- NESTFORM(32,DEPTH(I),INFO[T.LINKR,T.LINKC],A); 05431000
- WRITE(LINE,15,A[*]); 05432000
- END; 05433000
- WRITE(LINE[DBL]); 05434000
- END; 05435000
- END; 05436000
- PROCEDURE NESTSORT(L,U); VALUE L,U; REAL L,U; 05437000
- BEGIN REAL I,J,K,M; 05438000
- LABEL AGAIN,TOP,BOTTOM,EXIT; 05439000
- IF L!U THEN 05440000
- BEGIN M~ (U+L) DIV 2; 05441000
- NESTSORT(L,M); 05442000
- NESTSORT(M+1,U); 05443000
- I~K~L; J~M+1 05444000
- AGAIN: IF I>M THEN GO TO TOP; 05445000
- IF J>U THEN GO TO BOTTOM; 05446000
- GT1~NESTPRT[SORTPRT[I].[33:15]].LINK; 05447000
- GT2~NESTPRT[SORTPRT[J].[33:15]].LINK; 05448000
- IF INFO[GT1.LINKR,(GT1+1).LINKC].[18:30]{ 05449000
- INFO[GT2.LINKR,(GT2+1).LINKC].[18:30] THEN 05450000
- GO TO BOTTOM; 05451000
- TOP: SORTPRT[K].[18:15]~SORTPRT[J]; 05452000
- J~J+1; 05453000
- IF K~K+1{U THEN GO TO AGAIN ELSE GO TO EXIT; 05454000
- BOTTOM: SORTPRT[K].[18:15]~SORTPRT[I]; 05455000
- I~I+1; 05456000
- IF K~K+1{U THEN GO TO AGAIN ELSE GO TO EXIT; 05457000
- EXIT: FOR I~L STEP 1 UNTIL U DO 05458000
- SORTPRT[I]~SORTPRT[I].[18:15]; 05459000
- END; 05460000
- END; 05461000
- COMMENT ROUTINES IN THIS SECTION COMPILE CODE FOR ALL EXPRESSIONS;06000000
- COMMENT AEXP IS THE ARITHMETIC EXRESSION ROUTINE; 06001000
- PROCEDURE AEXP; 06002000
- BEGIN 06003000
- IF ELCLASS = IFV 06004000
- THEN BEGIN IF IFEXP ! ATYPE THEN ERR(102) END 06005000
- ELSE BEGIN ARITHSEC; SIMPARITH END 06006000
- END AEXP; 06007000
- COMMENT ARITHSEC COMPILES FIRST PRIMARY IN AN ARITHMETIC EXPRESSION. 06008000
- IN PARTICULAR IT HANDLES P, +P, -P, AND -P*Q WHERE P 06009000
- AND Q ARE PRIMARIES; 06010000
- PROCEDURE ARITHSEC; 06011000
- BEGIN 06012000
- IF ELCLASS = ADOP 06013000
- THEN BEGIN 06014000
- STEPIT; 06015000
- IF ELBAT[I-1].ADDRESS ! SUB THEN PRIMARY 06016000
- ELSE BEGIN 06017000
- PRIMARY; 06018000
- ENDTOG ~ LINKTOG; EMITO(CHS); 06021000
- LINKTOG ~ ENDTOG; ENDTOG ~ FALSE END END 06022000
- ELSE PRIMARY END ARITHSEC; 06023000
- COMMENT SIMPARITH COMPILES SIMPLE ARITHMETIC EXPRESSIONS ON THE 06024000
- ASSUMPTION THAT AN ARITHMETIC PRIMARY HAS ALREADY BEEN 06025000
- COMPILED. IT ALSO HANDLES THE CASE OF A CONCATENATE 06026000
- WHERE ACTUALPARAPART CAUSED THE VARIABLE ROUTINE TO 06027000
- COMPILE ONLY PART OF A PRIMARY. MOST OF THE WORK OF 06028000
- SIMPARITH IS DONE BY ARITHCOMP, AN ARTIFIAL ROUTINE 06029000
- WHICH DOES THE HIERARCHY ANALYSIS USING RECURSION. 06030000
- ARITHCOMP IS A SUBROUTINE ONLY TO GET THIS RECURSION; 06031000
- PROCEDURE SIMPARITH; 06032000
- BEGIN 06033000
- WHILE ELCLASS = AMPERSAND 06034000
- DO BEGIN STEPIT; PRIMARY; PARSE END; 06035000
- WHILE ELCLASS } EQVOP DO ARITHCOMP END; 06036000
- COMMENT ARITHCOMP IS THE GUTS OF THE ARITHMETIC EXPRESSION ROUTINE 06037000
- ANALYSIS. IT CALLS PRIMARY AT APPROPRIATE TIMES AND 06038000
- EMITS THE ARITHMETIC OPERATORS. THE HIERARCHY ANALYSIS 06039000
- IS OBTAINED BY RECURSION; 06040000
- PROCEDURE ARITHCOMP; 06041000
- BEGIN INTEGER OPERATOR, OPCLASS; 06042000
- DO BEGIN 06043000
- OPERATOR ~ 1 & ELBAT[I] [36:17:10]; 06044000
- COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 06045000
- ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [17:10] 06046000
- OF THE ELBAT WORD; 06047000
- OPCLASS ~ ELCLASS; 06048000
- STEPIT; PRIMARY; 06049000
- BEGIN 06051000
- WHILE OPCLASS < ELCLASS DO ARITHCOMP; 06052000
- COMMENT THE CLASSES ARE ARRANGED IN ORDER OF HIERARCHY; 06053000
- EMIT(OPERATOR); 06054000
- EMIT(0); L ~ L-1; 06054100
- STACKCT ~ 1; 06054150
- END; 06054200
- END UNTIL OPCLASS ! ELCLASS END ARITHCOMP; 06055000
- INTEGER PROCEDURE EXPRSS; BEGIN AEXP; EXPRSS ~ ATYPE END; 06057000
- PROCEDURE POLISHER(EXPECT); VALUE EXPECT; REAL EXPECT; 06060000
- BEGIN LABEL EXIT; 06061000
- LABEL EL; 06061900
- REAL COUNT,T1, T2; 06062000
- BOOLEAN S; 06063000
- REAL SSS; INTEGER Z; 06063500
- STREAM PROCEDURE WRITEOUT(C,N,L); VALUE C,N; 06064000
- BEGIN DI ~ L; DS ~ 2 LIT "S="; 06065000
- SI ~ LOC C; SI ~ SI+7; DS ~ CHR; 06066000
- SI ~ LOC N; DS ~ DEC; 06067000
- 58(DS~2LIT " "); 06067500
- END; 06068000
- SSS~ STACKCTR; 06068500
- IF STEPI ! LEFTPAREN THEN GO TO EXIT; 06069000
- DO BEGIN 06070000
- IF STEPI } OPERATORS THEN 06071000
- BEGIN T1 ~ (T2 ~ ELBAT[I]).ADDRESS; 06072000
- S ~ S OR COUNT - T2.[11:3] < 0; 06074000
- COUNT ~ T2.[14:2]+COUNT-2; 06075000
- IF ELCLASS } OPERATOR THEN 06076000
- BEGIN IF T1 ! 0 THEN EMITO(T1); 06077000
- ELSE BEGIN 06078000
- T1 ~ T2.LINK+2; 06079000
- T2 ~ T2.INCR+T1; 06080000
- FOR T1 ~ T1 STEP 1 UNTIL T2 DO 06081000
- EMIT(TAKE(T1)); 06082000
- END; 06083000
- END ELSE BEGIN T2 ~ ELCLASS; 06084000
- IF STEPI ! LITNO THEN 06085000
- BEGIN ERR(500); GO TO EXIT END; 06086000
- IF T2 = BITOP THEN EMIT(T1&C 06087000
- [36:42:6]) ELSE 06088000
- IF T2 =HEXOP THEN EMIT(T1& 06089000
- (T2~C DIV 6)[36:45:3]&(C-T2|6) 06090000
- [39:45:3]) ELSE 06091000
- IF T2 = ISOLATE THEN 06092000
- BEGIN T2 + C; 06093000
- IF STEPI ! LITNO 06094000
- THEN BEGIN ERR(500); 06095000
- GO TO EXIT END; 06096000
- 06097000
- 06098000
- 06099000
- EMIT(Z~((T2+C-1)DIV 6-C DIV 06099100
- 6+1)|512+(48-T2-C)MOD 6|64+ 06099200
- 37); 06100000
- END END; 06101000
- STEPIT; 06102000
- S ~ S OR COUNT < 0; 06103000
- END ELSE BEGIN 06104000
- IF ELCLASS = LABELID THEN 06104100
- BEGIN T1:=2; 06104200
- EL: GT4 ~ TAKE(T2~GIT(ELBAT[I])); 06104300
- PUT(L,T2); 06104400
- IF GT4 = 0 THEN GT4 ~ L; 06104500
- IF (GT4:=L-GT4)DIV 4 } 128 THEN 06104510
- BEGIN GT4:=0;FLAG(50);END; 06104520
- EMIT(GT4|4+T1); 06104600
- STEPIT; 06104700
- END ELSE 06104800
- IF ELCLASS ! PERIOD THEN AEXP ELSE BEGIN 06105000
- T2~0; 06106000
- IF STEPI=PERIOD THEN 06106100
- BEGIN T2~1; STEPIT END; 06106200
- IF ELCLASS>IDMAX THEN 06106300
- BEGIN ERR(500); GO TO EXIT END; 06107000
- IF ELCLASS = LABELID THEN 06107100
- BEGIN T1 ~ 0; GO TO EL END; 06107200
- IF T1 ~ ELBAT[I].ADDRESS = 0 THEN 06108000
- BEGIN ERR(100); GO TO EXIT END; 06109000
- EMITL(T1); 06110000
- IF T1>1023 THEN 06110100
- IF T2=0THEN FLAG(500) 06110200
- ELSE EMITO(PRTE); 06110300
- STEPIT; 06111000
- END; COUNT ~ COUNT+1; 06112000
- END; 06113000
- END UNTIL ELCLASS ! COMMA; 06114000
- IF ELCLASS ! RTPAREN THEN 06115000
- BEGIN ERR(104); GO TO EXIT END; 06116000
- STEPIT; 06117000
- IF FALSE THEN 06118000
- BEGIN COUNT ~ COUNT-EXPECT; 06119000
- WRITEOUT(IF COUNT < 0 THEN "-" ELSE 06120000
- IF COUNT = 0 THEN " " ELSE "+", 06121000
- ABS(COUNT),LIN[0]); 06122000
- WRITELINE; 06123000
- END; 06124000
- EXIT: STACKCTR ~ SSS; END; 06125000
- PROCEDURE PRIMARY; 06126000
- BEGIN LABEL 06127000
- L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, 06128000
- L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, 06129000
- L21, L22, L23, L24, L25, L26, L27, L28, L29, L30, 06130000
- L31, L32, L33, L34, L35, L36, L37, L38, L39; 06131000
- SWITCH S ~ 06132000
- L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, 06133000
- L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, 06134000
- L21, L22, L23, L24, L25, L26, L27, L28, L29, L30, 06135000
- L31, L32, L33, L34, L35, L36, L37, L38, L39; 06136000
- LABEL EXIT,RP,LDOT,LAMPER; 06137000
- GO TO S[ELCLASS]; 06138000
- IF ELCLASS = LFTBRKET THEN 06139000
- BEGIN STEPIT; VARIABLE(FL); 06140000
- IF ELCLASS ! RTBRKET THEN 06141000
- BEGIN ERR(118); GO TO EXIT END; 06142000
- STEPIT; 06143000
- GO TO LDOT; 06144000
- END; 06145000
- IF ELCLASS = NOTOP THEN 06146000
- BEGIN STEPIT; PRIMARY; 06147000
- EMITLNG; EMIT(0); L~L-1; 06148000
- GO TO EXIT; 06149000
- END; 06150000
- IF ELCLASS = UNKNOWNID THEN ERR(100); 06151000
- L1:L2:L3:L4:L5:L6:L8:L9:L10:L12:L13:L16:L17:L20,L21:L24:L25:L28:L29: 06152000
- L32: 06153000
- ERR(103); GO TO EXIT; 06154000
- L7: 06155000
- SUBHAND(FALSE); GO TO LDOT; 06156000
- L11: 06157000
- IMPFUN; STACKCT ~ STACKCT-1; GO TO LDOT; 06158000
- L14:L15: 06159000
- STRMPROCSTMT; GO TO LDOT; 06160000
- L18:L19: 06161000
- PROCSTMT(FALSE); GO TO LDOT; 06162000
- L22:L23:L26:L27:L30:L31: 06163000
- VARIABLE(FP); GO TO LAMPER; 06164000
- L33:L35: 06165000
- EMIT(0&ELBAT[I] [36:17:10]); STEPIT; GO TO LAMPER; 06166000
- L34:L36: 06167000
- EMITNUM(C); STEPIT; GO TO LAMPER; 06168000
- L38: 06169000
- POLISHER(1); GO TO LDOT; 06170000
- L39: 06171000
- STEPIT; PRIMARY; STACKCT ~ STACKCT-1; 06172000
- EMITO(LOD); GO TO LDOT; 06172500
- L37: 06173000
- STEPIT; AEXP; 06174000
- STACKCT ~ STACKCT-1; 06174500
- IF ELCLASS ! RTPAREN THEN 06175000
- BEGIN ERR(104); GO TO EXIT END; 06176000
- STEPIT; 06177000
- LDOT:DOT; 06178000
- LAMPER: 06179000
- STACKCT ~ STACKCT +1; 06179500
- WHILE ELCLASS = AMPERSAND DO 06180000
- BEGIN STEPIT; PRIMARY; PARSE END; 06181000
- EXIT: END PRIMARY; 06182000
- PROCEDURE IMPFUN; 06183000
- BEGIN REAL T1,T2; 06184000
- T1 ~ (T2 ~ ELBAT[I]).ADDRESS; 06185000
- PANA; 06186000
- IF T1 ! 0 THEN EMITO(T1); 06187000
- ELSE BEGIN 06188000
- T1 ~ T2.LINK+T2.INCR+1; 06189000
- T2 ~ T2.LINK+2; 06190000
- FOR T2 ~ T2 STEP 1 UNTIL T1 DO EMIT(TAKE(T2)); 06191000
- END; 06192000
- END; 06193000
- PROCEDURE SUBHAND(FROM); VALUE FROM; BOOLEAN FROM; 06194000
- BEGIN LABEL EXIT; 06195000
- REAL T1; 06196000
- T1 ~ TAKEFRST; 06197000
- IF ELCLASS ! SUBID AND FROM THEN 06198000
- BEGIN IF STEPI ! ASSIGNOP THEN 06199000
- BEGIN FLAG(503); GO TO EXIT END; 06200000
- STEPIT; 06201000
- AEXP; 06202000
- EMITO(XCH); 06203000
- GO TO EXIT; 06204000
- END; 06205000
- EMITL((L+6) DIV 4-(T1.[24:12]-1) DIV 4); 06206000
- EMITB(BBW,BUMPL,T1.[36:12]); 06207000
- STEPIT; 06208000
- ADJUST; 06208500
- EXIT: END SUBHAND; 06209000
- COMMENT IFEXP COMPILES CONDITIONAL EXPRESSIONS. IT REPORTS THE TYPE 06292000
- OF EXPRESSIONS AS EXPRSS REPORTS; 06293000
- INTEGER PROCEDURE IFEXP; 06294000
- BEGIN INTEGER TYPE,THENBRANCH,ELSEBRANCH; 06295000
- IFCLAUSE; 06296000
- STACKCT ~ 0; 06296500
- THENBRANCH ~ BUMPL; 06297000
- COMMENT SAVE L FOR LATER FIXUP; 06298000
- IFEXP ~ TYPE ~ EXPRSS; COMMENT COMPILE 1ST EXPRSS; 06299000
- STACKCT ~ 0; 06299500
- ELSEBRANCH ~ BUMPL; 06300000
- EMITB(BFC,THENBRANCH,L); 06301000
- IF ELCLASS ! ELSEV THEN ERR(155) ELSE BEGIN 06302000
- STEPIT; 06303000
- AEXP; STACKCT ~ 1; 06305000
- COMMENT THIS COMPILES PROPER TYPE SECOND EXPRSS; 06306000
- EMITB(BFW,ELSEBRANCH,L); 06307000
- EMIT(1); L ~ L-1; 06308000
- COMMENT THIS IS USED BY EMITLNG TO CLEANUP CODE. COMPARE WITH 06309000
- BOOSEC, BOOCOMP, AND RELATION; 06310000
- END END IFEXP; 06311000
- COMMENT PARSE COMPILES CODE FOR THE CONCATENATE; 06312000
- PROCEDURE PARSE; 06313000
- BEGIN INTEGER FIRST,SECOND,THIRD; 06314000
- LABEL EXIT; 06315000
- IF ELCLASS = LFTBRKET THEN 06316000
- IF STEPI = LITNO THEN 06317000
- IF STEPI = COLON THEN 06318000
- IF STEPI = LITNO THEN 06319000
- IF STEPI = COLON THEN 06320000
- IF STEPI = LITNO THEN 06321000
- IF STEPI = RTBRKET THEN 06322000
- COMMENT IF TEST ARE PASSED THEN SYNTAX IS CORRECT; 06323000
- IF (FIRST ~ ELBAT[I-5].ADDRESS) | 06324000
- (SECOND ~ ELBAT[I-3].ADDRESS) | 06325000
- (THIRD ~ ELBAT[I-1].ADDRESS) ! 0 THEN 06326000
- IF FIRST + THIRD { 48 THEN 06327000
- IF SECOND+ THIRD { 48 THEN 06328000
- COMMENT IF TEST ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 06329000
- BEGIN 06330000
- STEPIT; 06331000
- EMITD(SECOND,FIRST,THIRD); 06332000
- STACKCT ~ 1; 06332500
- GO TO EXIT END; 06333000
- ERR(113); COMMENT ERROR IF SYNTAX OR RANGE FAILS; 06334000
- EXIT: END PARSE; 06335000
- COMMENT DOT COMPILES CODE FOR PARTIAL WORD DESIGNATORS, EXCEPT FOR 06336000
- THOSE CASES HANDLED BY THE VARIABLE ROUTINE; 06337000
- PROCEDURE DOT; 06338000
- BEGIN INTEGER FIRST,SECOND; LABEL EXIT; 06339000
- IF ELCLASS = PERIOD THEN BEGIN 06340000
- IF DOTSYNTAX(FIRST,SECOND) THEN GO TO EXIT; 06341000
- 06342000
- 06343000
- EMITI(0,FIRST,SECOND); 06344000
- STEPIT; 06345000
- EXIT: END END DOT; 06346000
- PROCEDURE IFCLAUSE; 06409000
- BEGIN STEPIT; BEXP; 06410000
- IF ELCLASS ! THENV THEN ERR(116)ELSE STEPIT END IFCLAUS;06411000
- COMMENT PANA COMPILES THE CONSTRUCT: (); 06412000
- PROCEDURE PANA; 06413000
- BEGIN 06414000
- IF STEPI ! LEFTPAREN THEN ERR(105) 06415000
- ELSE BEGIN STEPIT; AEXP; IF ELCLASS ! RTPAREN THEN 06416000
- ERR(104) ELSE STEPIT END END PANA; 06417000
- COMMENT BANA COMPILES THE CONSTRUCT: []; 06418000
- PROCEDURE BANA; 06419000
- BEGIN 06420000
- IF STEPI ! LFTBRKET THEN ERR(117) 06421000
- ELSE BEGIN STEPIT; AEXP; IF ELCLASS ! RTBRKET THEN 06422000
- ERR(118) ELSE STEPIT END END BANA ; 06423000
- COMMENT THIS SECTION CONTAINS THE STATEMENT ROUTINES; 07000000
- COMMENT COMPOUNDTAIL COMPILES COMPOUNDTAILS. IT ALSO ELIMINATES 07001000
- COMMENTS FOLLOWING ENDS. AFTER ANY ERROR, ERROR MESSAGES 07002000
- ARE SUPPRESSED. COMPOUNDTAIL IS PARTIALLY RESPONSIBLE 07003000
- FOR RESTORING THE ABILITY TO WRITE ERROR MESSAGES. SOME 07004000
- CARE IS ALSO TAKEN TO PREVENT READING BEYOND THE "END."; 07005000
-PROCEDURE COMPOUNDTAIL; 07006000
- BEGIN LABEL ANOTHER; 07007000
- I ~ I-1; BEGINCTR ~ BEGINCTR+1; 07008000
- ANOTHER: ERRORTOG ~ TRUE; COMMENT ALLOW ERROR MESSAGES; 07009000
- STEPIT; 07010000
- IF STREAMTOG THEN STREAMSTMT ELSE STMT; 07011000
- IF ELCLASS = SEMICOLON THEN GO TO ANOTHER; 07012000
- IF ELCLASS ! ENDV 07013000
- THEN BEGIN 07014000
- ERR(119); GO TO ANOTHER END; 07015000
- ENDTOG~TRUE; 07016000
- DO STOPDEFINE~TRUE UNTIL 07017000
- STEPI{ENDV AND ELCLASS}UNTILV 07018000
- OR NOT ENDTOG; 07019000
- ENDTOG~FALSE; 07020000
- IF BEGINCTR ~ BEGINCTR-1 ! 0 EQV ELCLASS = PERIOD 07021000
- THEN BEGIN 07022000
- IF BEGINCTR = 0 THEN 07023000
- BEGIN FLAG(143); BEGINCTR ~ 1; GO ANOTHER END; 07024000
-FLAG (120); 07025000
-FCR:= (LCR:=MKABS(CBUFF[9]))-9; 07025010
- IF LISTER THEN PRINTCARD; 07025020
-FCR:= (LCR:=MKABS(TBUFF[9]))-9 END; 07025030
- IF ELCLASS = PERIOD THEN 07026000
- BEGIN 07027000
- GT5 ~ "ND;END."&"E"[1:43:5]; 07028000
- MOVE(1,GT5,CBUFF[0]); 07029000
- LASTUSED~4; 07030000
- ELBAT[I~I-2] ~SPECIAL[20]; 07031000
- ELCLASS ~ SEMICOLON END 07032000
- END COMPOUNDTAIL; 07033000
- REAL AXNUM; 07034000
- PROCEDURE ACTUALPARAPART(SBIT,INDEX); VALUE SBIT,INDEX; 07035000
- BOOLEAN SBIT; REAL INDEX; 07036000
- BEGIN LABEL EXIT,COMMON,ANOTHER,POL; 07037000
- REAL PCTR,SCLASS,ACLASS; 07038000
- STREAM PROCEDURE WRITEAX(LINE,ACCUM,N,SEQ); VALUE N; 07038100
- BEGIN DI ~ LINE; 15(DS ~ 8 LIT " "); 07038200
- DI ~ LINE; SI ~ SEQ; SI ~ SI-16; DS ~ WDS; 07038300
- DI ~ DI+4; DS ~ 20 LIT "ACCIDENTAL ENTRY AT "; 07038400
- SI ~ ACCUM; SI ~ SI+3; DS ~ N CHR; 07038500
- SI ~ SEQ; DI ~ SEQ; DI ~ DI-16; DS ~ WDS; 07038600
- END; 07038700
- BOOLEAN VBIT,IDBIT; 07039000
- PCTR ~ 1; 07040000
- ANOTHER: ACLASS ~ STEPI&0[47:47:1]; 07041000
- STACKCT ~ 0; 07041200
- GT1 ~ TAKE(INDEX+PCTR); 07042000
- VBIT ~ BOOLEAN(GT1.VO); 07043000
- SCLASS ~ GT1.CLASS&0[47:47:1]; 07044000
- IF VBIT THEN BEGIN AEXP; GO TO COMMON END; 07045000
- IF SBIT THEN SCLASS ~ NAMEID; 07046000
- IDBIT ~ BOOID < ACLASS AND ACLASS < LABELID; 07047000
- IF SCLASS = NAMEID THEN 07048000
- BEGIN 07049000
- IF IDBIT THEN VARIABLE(FL); 07050000
- ELSE 07051000
- POL: IF ELCLASS = POLISHV THEN POLISHER(1) 07052000
- ELSE ERR(IF ELCLASS=0 THEN 0 ELSE 123); 07053000
- GO TO COMMON; 07054000
- END; 07055000
- IF SCLASS = REALARRAYID THEN 07056000
- IF ACLASS = REALARRAYID THEN 07057000
- BEGIN VARIABLE(FL); GO TO COMMON END 07058000
- ELSE GO TO POL; 07059000
- IF SCLASS ! REALID THEN 07060000
- BEGIN FLAG(503); 07061000
- AEXP; 07062000
- ERRORTOG ~ TRUE; 07063000
- GO TO COMMON; 07064000
- END; 07065000
- GT1 ~ TABLE(I+1); 07066000
- IF GT1 = COMMA OR GT1 = RTPAREN THEN 07067000
- BEGIN IF IDBIT THEN 07068000
- BEGIN IF ACLASS = REALID AND 07069000
- BOOLEAN(ELBAT[I].FORMAL)THEN BEGIN 07070000
- CHECKER (ELBAT[I]); 07070500
- EMITPAIR(ELBAT[I],ADDRESS,LOD); 07071000
- STEPIT; END 07072000
- ELSE VARIABLE(FL); 07073000
- GO TO COMMON END; 07074000
- IF ELCLASS { STRNGCON AND ELCLASS > LABELID 07075000
- THEN BEGIN PRIMARY; GOTO COMMON END; 07076000
- END; 07077000
- EMITO(NOP); EMITO(NOP); 07078000
- SCLASS ~ L; 07079000
- ADJUST; 07080000
- ACLASS ~ L.[36:10]; 07081000
- IF IDBIT THEN 07082000
- BEGIN VARIABLE(FL); 07083000
- IF ELCLASS < AMPERSAND THEN GO TO COMMON; 07084000
- 07084500
- SIMPARITH; 07085000
- END ELSE AEXP; 07086000
- IF LISTER THEN 07086100
- BEGIN ACCUM[1] ~ Q; 07086200
- WRITEAX(LIN[0],ACCUM[1],Q.[12:6], 07086300
- INFO[LASTSEQROW,LASTSEQUENCE]); 07086400
- WRITELINE; 07086500
- END; 07086600
- AXNUM ~ AXNUM+1; 07086700
- EMITO(RTS); 07087000
- EMITB(BFW,SCLASS,L); 07088000
- EMITNUM(ACLASS); 07089000
- EMITPAIR(TAKE(PROINFO).ADDRESS,LOD); 07090000
- EMITO(INX); 07091000
- EMITN(512); 07092000
- EMITD(33,18,15); 07093000
- EMIT(0); 07093100
- EMITD(5,5,1); 07093200
- COMMON: PCTR ~ PCTR+1; 07094000
- IF ELCLASS = COMMA THEN GO TO ANOTHER; 07095000
- IF ELCLASS ! RTPAREN THEN 07096000
- BEGIN ERR(129); GO TO EXIT END; 07097000
- IF TAKE(INDEX).NODIMPART+1 ! PCTR THEN 07098000
- BEGIN ERR(128); GO TO EXIT END; 07099000
- STEPIT; 07100000
- STACKCT ~ 0; 07100500
- EXIT: END ACTUAL PARAPART; 07101000
- PROCEDURE PROCSTMT(FROM); VALUE FROM; BOOLEAN FROM; 07391000
- BEGIN 07392000
- REAL HOLE,ADDRESS; 07393000
- REAL J; LABEL OK; 07393100
- LABEL EXIT; 07394000
- SCATTERELBAT; 07395000
- HOLE~ ELBAT[I]; 07396000
- ADDRESS ~ ADDRSF; 07397000
- IF NESTOG THEN 07397100
- IF MODE!0 THEN 07397200
- IF TABLE(I+1)!ASSIGNOP THEN 07397210
- BEGIN FOR J~CALLINFO STEP 1 UNTIL CALLX DO 07397300
- IF CALL[J]=ADDRESS THEN GO TO OK; 07397400
- CALL[CALLX~CALLX+1]~ADDRESS; 07397500
- OK: END; 07397600
- CHECKER(HOLE); 07398000
- IF ELCLASS ! PROCID THEN 07399000
- IF NOT FORMALF THEN 07400000
- IF TABLE(I+1) = ASSIGNOP THEN 07401000
- BEGIN VARIABLE(2-REAL(FROM)); GO TO EXIT END; 07402000
- COMMENT CALL VARIABLE TO HANDLE THIS ASSIGNMENT OPERATION; 07403000
- IF ELCLASS ! PROCID EQV FROM 07404000
- THEN BEGIN ERR(159); GO TO EXIT END; 07405000
- COMMENT IT IS PROCEDURE IF AND ONLY WE COME FORM STMT; 07406000
- STEPIT; 07407000
- EMITO(MKS); 07408000
- IF ELCLASS = LEFTPAREN 07409000
- THEN ACTUALPARAPART(FALSE,GIT(HOLE)) 07410000
- ELSE IF FORMALF THEN L ~ L-1; 07411000
- ELSE IF TAKE(GIT(HOLE)).NODIMPART!0 THEN ERR(128); 07412000
- EMITV(ADDRESS); 07413000
- EXIT: END PROCSTMT; 07425000
- PROCEDURE STRMPROCSTMT; 07426000
- BEGIN REAL WHOLE,FIX,T1; 07427000
- 07428000
- 07429000
- WHOLE ~ ELBAT[I]; FIX ~ -1; 07430000
- IF ELCLASS ! STRPROCID THEN EMIT(0); 07431000
- IF WHOLE. LVL ! 1 THEN 07432000
- BEGIN FIX ~ L; L ~ L+1 END; 07433000
- EMITO(MKS); 07434000
- T1 ~ TAKEFRST.[1:6]; 07435000
- FOR GT1 ~ 1 STEP 1 UNTIL T1 DO EMIT(0); 07436000
- IF STEPI ! LEFTPAREN THEN ERR(128) 07437000
- ELSE BEGIN ACTUALPARAPART(TRUE,GIT(WHOLE)); 07438000
- IF FIX < 0 THEN EMITV(WHOLE.ADDRESS) 07439000
- ELSE BEGIN T1 ~ L; L ~ FIX; 07440000
- WHOLE ~ TAKE(GIT(WHOLE)); 07441000
- EMITNUM(T1+2-WHOLE.[16:12]); 07442000
- L ~ T1; 07443000
- EMITB(BBW,BUMPL,WHOLE.[28:12]); 07444000
- END; 07445000
- END END STRMPROCSTMT; 07446000
- INTEGER PROCEDURE BAE; 07458000
- BEGIN BAE ~ BUMPL; CONSTANTCLEAN; ADJUST END BAE; 07459000
- COMMENT RELSESTMT COMPILES THE RELEASE STATEMENT; 07460000
- COMMENT DOSTMT HANDLES THE DO STATEMENT; 07481000
- PROCEDURE DOSTMT; 07482000
- BEGIN INTEGER TL; 07483000
- FOULED ~ L; 07483500
- 07484000
- STEPIT; TL~L; STMT; IF ELCLASS ! UNTILV THEN ERR(131)07485000
- ELSE BEGIN 07486000
- STEPIT; BEXP; EMITB(BBC,BUMPL,TL) END 07487000
- END DOSTMT; 07488000
- COMMENT WHILESTMT COMPILES THE WHILE STATEMENT; 07489000
- PROCEDURE WHILESTMT; 07490000
- BEGIN INTEGER BACK,FRONT; 07491000
- FOULED ~ L; 07491500
- 07492000
- STEPIT; BACK ~ L; BEXP; FRONT ~ BUMPL; 07493000
- IF ELCLASS ! DOV THEN ERR(132) ELSE 07494000
- BEGIN STEPIT; STMT; EMITB(BBW,BUMPL,BACK); 07495000
- CONSTANTCLEAN; EMITB(BFC,FRONT,L) END END WHILESTMT; 07496000
- COMMENT GOSTMT COMPILES GO TO STATEMENTS. GOSTMT LOOKS AT THE 07497000
- EXPRESSION. IF IT IS SIMPLE ENOUGH WE GO DIRECTLY. 07498000
- OTHERWISE A CALL ON THE MCP IS GENERATED IN ORDER TO GET 07499000
- STORAGE RETURNED. SEE DEXP AND GENGO; 07500000
- PROCEDURE GOSTMT; 07501000
- BEGIN 07502000
- REAL ELBW; 07503000
- LABEL GOMCP,EXIT; 07504000
- IF STEPI = TOV THEN STEPIT; 07505000
- IF ELCLASS = LABELID THEN TB1 ~ TRUE 07506000
- ELSE IF ELCLASS = SWITCHID THEN TB1 ~ FALSE 07507000
- ELSE BEGIN IF ELCLASS = POLISHV THEN 07511000
- BEGIN POLISHER(1); EMITO(BFW) END 07512000
- ELSE ERR(501); 07513000
- GO TO EXIT 07514000
- END; 07515000
- IF NOT LOCAL(ELBAT[I]) THEN 07516000
- BEGIN 07516100
- IF TB1 THEN 07516200
- BEGIN EMITV(GNAT(ELBAT[I])); 07516300
- EMITO(BFW); 07516400
- STEPIT; 07516500
- GO TO EXIT END; 07516600
- BEGIN ERR(501); GO TO EXIT END; 07517000
- END; 07517500
- IF TB1 THEN BEGIN GOGEN(ELBAT[I],BFW); STEPIT; 07518000
- CONSTANTCLEAN; GO EXIT END 07519000
- ELSE BEGIN 07520000
- ELBW ~ ELBAT[I]; 07521000
- 07522000
- BANA; 07523000
- EMITO(DUP); 07524000
- EMITO(ADD); 07525000
- EMITO(BFW); 07526000
- GT3 ~ TAKE(GT4~GIT(ELBW))+GT4; 07527000
- FOR GT4 ~ GT4+1 STEP 1 UNTIL GT3 DO 07528000
- GOGEN(TAKE(GT4),BFW); 07529000
- END; 07530000
- EXIT: END GOSTMT; 07531000
- PROCEDURE GOGEN(LABELBAT,BRANCHTYPE); 07535000
- VALUE LABELBAT,BRANCHTYPE; 07536000
- REAL LABELBAT,BRANCHTYPE; 07537000
- BEGIN 07538000
- IF BOOLEAN(GT1~TAKE(GT2~GIT(LABELBAT))).[1:1] 07539000
- THEN EMITB(BRANCHTYPE,BUMPL,GT1.[36:12]) 07540000
- COMMENT LABELR SETS THE SIGN OF THE ADDITIONAL INFO FOR A LABEL 07541000
- NEGATIVE WHEN THE LABEL IS ENCOUNTERED. SO THIS MEANS 07542000
- THAT WE NOW KNOW WHERE TO GO; 07543000
- ELSE BEGIN EMIT(GT1); EMIT(BRANCHTYPE); 07544000
- PUT(GT1&L[36:36:12],GT2) END END GOGEN; 07545000
- COMMENT SIMPGO IS USED ONLY BY THE IF STMT ROUTINE. IT DETERMINES IF 07546000
- A STATEMENT IS A SIMPLE GO TO STATEMENT; 07547000
- BOOLEAN PROCEDURE SIMPGO; 07548000
- BEGIN LABEL EXIT; 07549000
- IF ELCLASS = GOV 07550000
- THEN BEGIN 07551000
- IF STEPI = TOV THEN STEPIT; 07552000
- IF ELCLASS = LABELID THEN 07553000
- IF LOCAL(ELBAT[I]) THEN 07554000
- BEGIN SIMPGO ~ TRUE; GO EXIT END; 07555000
- I ~ I-1; ELCLASS ~ GOV END; 07556000
- EXIT: END SIMPGO; 07557000
- COMMENT IFSTMT COMPILES IF STATEMENTS. SPECIAL CARE IS TAKEN TO 07558000
- OPTIMIZE CODE IN THE NEIGHBORHOOD OF THE JUMPS. TO SOME 07559000
- EXTENT SUPPERFULOUS BRANCHING IS AVOIDED; 07560000
- PROCEDURE IFSTMT; 07561000
- BEGIN REAL T1,T2; LABEL EXIT; 07562000
- IFCLAUSE; 07563000
- IF SIMPGO 07564000
- THEN BEGIN 07565000
- T1 ~ ELBAT[I]; 07566000
- IF STEPI = ELSEV 07567000
- THEN BEGIN 07568000
- STEPIT; 07569000
- IF SIMPGO 07570000
- THEN BEGIN 07571000
- GOGEN(ELBAT[I],BFC); GOGEN(T1,BFW); 07572000
- STEPIT; GO TO EXIT END ELSE BEGIN EMITLNG;GOGEN(T1,BFC); 07573000
- STMT ; GO TO EXIT END END ; 07574000
- EMITLNG; GOGEN(T1,BFC); 07575000
- GO EXIT END; 07576000
- T1 ~ BUMPL; STMT; 07577000
- IF ELCLASS ! ELSEV THEN 07578000
- BEGIN IF L-T1>1023 THEN ADJUST; EMITB(BFC,T1,L); 07579000
- GO EXIT END; 07579100
- STEPIT; 07580000
- IF SIMPGO 07581000
- THEN BEGIN 07582000
- T2 ~ L; L ~T1-2;GOGEN(ELBAT[I],BFC); L ~ T2; 07583000
- STEPIT; GO EXIT END; 07584000
- T2 ~ BUMPL; CONSTANTCLEAN; 07585000
- IF L-T1>1023 THEN ADJUST; EMITB(BFC,T1,L); STMT; 07585100
- IF L-T2>1023 THEN ADJUST; EMITB(BFW,T2,L); 07586000
- EXIT: END IFSTMT; 07587000
- COMMENT LABELR HANDLES LABELED STATEMENTS. IT PUTS L INTO THE 07588000
- ADDITIONAL INFO AND MAKES ITS SIGN NEGATIVE. IT COMPILES 07589000
- AT THE SAME TIME ALL THE PREVIOUS FORWARD REFERENCES SET 07590000
- UP FOR IT BY GOGEN. (THE ADDITIONAL INFO LINKS TO A LIST 07591000
- IN THE CODE ARRAY OF ALL FORWARD REFERENCES); 07592000
- PROCEDURE LABELR; 07593000
- BEGIN LABEL EXIT, ROUND; 07594000
-DEFINE ELBATWORD=RR9#,LINK=GT2#,INDEX=GT3#,ADDITIONAL 07595000
- =GT4#,NEXTLINK=GT5#; 07596000
- REAL OLDL; 07596500
- DO BEGIN OLDL ~ L; 07597000
- IF STEPI ! COLON THEN 07597500
- BEGIN ERR(133); GO TO EXIT END; 07598000
- IF NOT LOCAL(ELBATWORD ~ ELBAT[I-1]) 07599000
- THEN BEGIN FLAG(134); GO TO ROUND END; 07600000
- IF STEPI = COLON THEN 07600100
- BEGIN I ~ I-1; ADJUST END ELSE 07600200
- IF ELCLASS = LITNO THEN L ~ 4|C ELSE 07600300
- IF ELCLASS=ASTRISK THEN 07600400
- BEGIN IF MODE ! 0 OR ASTOG THEN 07600410
- FLAG(505); 07600420
- ASTOG ~ TRUE; 07600430
- L ~ 4|PRTI; 07600440
- END ELSE 07600450
- I ~ I-2; 07600500
- IF STEPI ! COLON THEN 07600600
- BEGIN ERR(133); GO TO EXIT END; 07600700
- IF L < OLDL THEN 07600800
- BEGIN FLAG(504); GO TO ROUND END; 07600900
- GT1 ~ TABLE(I+1); 07600950
- LINK ~ (ADDITIONAL ~ TAKE(INDEX ~ GIT(ELBATWORD))) 07601000
- .[36:12]; 07602000
- IF ADDITIONAL < 0 THEN 07603000
- BEGIN FLAG(135); GO TO ROUND END; 07604000
- FOULED ~ L; 07604010
- IF TABLE(I+1) = COLON THEN 07604020
- BEGIN 07604030
- IF LINK!0 THEN BEGIN OLDL ~ L; 07604040
- DO BEGIN NEXTLINK ~ GET(LINK); 07604050
- L ~ LINK; 07604060
- IF OLDL.[36:10]-L.[36:10]}128 07604067
- THEN FLAG(50) ELSE 07604068
- EMIT(OLDL-LINK&0[46:46:2]+ 07604070
- 0&NEXTLINK[46:46:2]+3072); 07604080
- L ~ L-1; 07604085
- END UNTIL LINK~LINK-NEXTLINK DIV 4=L; 07604090
- L ~ OLDL; END; STEPIT; 07604100
- DO IF STEPI { STRNGCON AND ELCLASS } 07604110
- NONLITNO THEN EMITWORD(C) 07604120
- ELSE BEGIN ERR(500); I ~ I-1 END 07604130
- UNTIL STEPI ! COMMA; 07604140
- I ~ I-1; 07604150
- END ELSE 07604160
- WHILE LINK ! 0 07605000
- DO BEGIN 07606000
- NEXTLINK ~ GET(LINK-2); 07607000
- IF L-LINK>1023 THEN ADJUST; 07607100
- EMITB(GET(LINK-1),LINK,L); 07608000
- LINK ~ NEXTLINK END; 07609000
- PUT(-ADDITIONAL&L[36:36:12],INDEX); 07610000
- ROUND: ERRORTOG ~ TRUE END UNTIL STEPI ! LABELID; 07645000
- EXIT: END LABELR; 07646000
-PROCEDURE FILLSTMT(SIZE); VALUE SIZE; INTEGER SIZE; 07647000
- BEGIN 07647500
-COMMENT "COCT" PERFORMS THE OCTAL CONVERT FOR THE FILL STATEMENT. 07648000
- IF THERE ARE ANY NON-OCTAL DIGITS, THIS PROCEDURE RETURNS 07648500
- A ZERO AND THEN THE 3 LOW-ORDER BITS OF THE BAD DIGIT ARE 07649000
- RESET AND IGNORED AND ERROR NUMBER 303 IS PRINTED. "COCT" 07649500
- ALLOWS FLAG BITS TO BE SET, WHEREAS "OCTIZE" DOES NOT. 07650000
- N NUMBER OF CHARACTERS TO BE CONVERTED. 07650500
- SKBIT NUMBER OF BITS TO SKIP BEFORE STARTING CONVERSION. 07651000
- THIS IS BECAUSE THE NO. OF CHARS. MAY BE LESS THAN 07651500
- 8 AND IT MUST BE RIGHT JUSTIFIED IN CD(CODEFILE). 07652000
- ACC ADDRESS OF THE ACCUM WHERE ALPHA INFO IS KEPT. 07652500
- ; 07653000
- REAL STREAM PROCEDURE COCT(N,SKBIT,ACC,CD);VALUE N,SKBIT; 07653500
- BEGIN 07654000
- SI:=ACC; SI:=SI+6; DI:=CD; DS:=8 LIT"00000000"; 07654500
- DI:=CD ; SKIP SKBIT DB;TALLY:=1; 07655000
- N(IF SC>"7"THEN TALLY:=0; SKIP 3 SB; 07655500
- 3(IF SB THEN DS:=1 SET ELSE SKIP 1 DB; SKIP 1 SB)); 07656000
- COCT:=TALLY 07656500
- END COCT; 07657000
- REAL T2; 07657500
- LABEL L1; 07658000
- STREAM PROCEDURE ZEERO(D); 07658500
- BEGIN 07659000
- DI:=D;DS:=8 LIT"00000000"; 07659500
- SI:=D;31(32(DS:=WDS)); DS:=30 WDS; 07660000
- END ZEERO; 07660500
- STREAMTOG:=BOOLEAN(2); 07661000
- SEGMENTSTART(TRUE); 07661500
- IF STEPI!ASSIGNOP THEN ZEERO(CODE(1)) 07662000
-ELSE BEGIN 07662500
- FOR T2:=1 STEP 1 UNTIL SIZE DO 07663000
- BEGIN 07663500
- IF STEPI>IDMAX THEN 07664000
- BEGIN 07664500
- IF ELCLASS!LITNO AND ELCLASS!NONLITNO THEN 07665000
- IF ELCLASS!STRNGCON THEN 07665500
- IF ELCLASS=ADOP AND 07666000
- (STEPI=NONLITNO OR ELCLASS=LITNO) THEN 07666500
- C:=C & ELBAT[I-1][1:21:1] 07667000
- ELSE BEGIN ERROR(302); GO TO L1 END; 07667500
- IF ELCLASS=STRNGCON AND COUNT=8 THEN 07668000
- MOVECHARACTERS(8,ACCUM[1],3,CODE(T2),0) 07668500
- ELSE MOVE(1,C,CODE(T2)) 07669000
- END 07669500
- ELSE IF COUNT{19 AND ACCUM[1].[18:18]="OCT" THEN 07670000
- BEGIN 07670500
- IF COCT(COUNT-3,48-(COUNT-3)|3,ACCUM[1], 07671000
- CODE(T2))=0 THEN FLAG(303) 07671500
- END 07672000
- ELSE BEGIN ERROR(302); GO TO L1 END; 07672500
- IF STEPI!COMMA THEN GO TO L1 07673000
- END; 07673500
- ERROR(54); 07674000
- END; 07674500
-L1: 07675000
- RIGHT(SIZE|4); 07675500
- STREAMTOG:=FALSE; 07676000
- SEGMENT(SIZE,0); 07676500
- PROGDESCBLDR(ADDRSF,TRUE,SIZE,DDES); 07677000
- END FILLSTMT; 07677500
- PROCEDURE STMT; 07711000
- BEGIN LABEL 07712000
- L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, 07713000
- L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, 07714000
- L21, L22, L23, L24, L25, L26, L27, L28, L29, L30, 07715000
- L31, L32, L33, L34, L35, L36, L37, L38, L39, L40, 07716000
- L41, L42, L43, L44, L45, L46, L47, L48, L49, L50, 07717000
- L51, L52, L53, L54; 07718000
- SWITCH S ~ 07719000
- L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, 07720000
- L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, 07721000
- L21, L22, L23, L24, L25, L26, L27, L28, L29, L30, 07722000
- L31, L32, L33, L34, L35, L36, L37, L38, L39, L40, 07723000
- L41, L42, L43, L44, L45, L46, L47, L48, L49, L50, 07724000
- L51, L52, L53, L54; 07725000
- LABEL AGAIN,EXIT; 07726000
- STACKCT ~ 0; 07726990
- AGAIN: GO TO S[ELCLASS]; 07727000
- IF ELCLASS = COLON THEN 07727010
- BEGIN STEPIT; GT1 ~ L; 07727020
- IF ELCLASS = COLON THEN 07727030
- BEGIN ADJUST; I ~ I-1 END 07727040
- ELSE IF ELCLASS = LITNO THEN L ~ 4|C 07727050
- ELSE I ~ I-1; 07727060
- IF L < GT1 OR STEPI ! COLON THEN 07727070
- BEGIN ERR(504); GO TO EXIT END; 07727080
- STEPIT; 07727090
- GO TO AGAIN; 07727100
- END; 07727110
- IF ELCLASS = 0 THEN FLAG(100); FLAG(145); 07728000
- L1:L2:L3:L4:L5:L6:L9:L11:L13:L14:L15:L16:L17:L20:L21:L25:L28:L29:L24: 07729000
-L33:L34:L35:L36:L37:L39: 07730000
- ERR(144); GO TO EXIT; 07731000
- L7:L8: 07732000
- SUBHAND(TRUE); GO TO EXIT; 07733000
- L10:L18:L19: 07734000
- PROCSTMT(TRUE); GO TO EXIT; 07735000
- L12: 07736000
- STRMPROCSTMT; GO TO EXIT; 07737000
- L22:L23:L26:L27:L30:L31: 07738000
- VARIABLE(FS); GO TO EXIT; 07739000
- L32: 07740000
- LABELR; GO TO AGAIN; 07741000
- L38: 07742000
- POLISHER(0); GO TO EXIT; 07743000
- L40: 07744000
- IF ELBAT[I].ADDRESS = STREAMV THEN 07745000
- BEGIN INLINE; GO TO EXIT END; 07746000
- FLAG(146); 07747000
- IF TABLE(I-2) = ENDV AND MODE > 0 THEN 07748000
- BEGIN I ~ I-2; ELCLASS ~ ENDV; GO TO EXIT END; 07749000
- I ~ I-1; ERRORTOG ~ TRUE; BLOCK(FALSE); 07750000
- ELCLASS ~ TABLE(I~I-1); GO TO EXIT; 07751000
- L42: 07752000
- DBLSTMT; GO TO EXIT; 07753000
- L43: 07754000
- FORSTMT; GO TO EXIT; 07755000
- L44: 07756000
- WHILESTMT; GO TO EXIT; 07757000
- L45: 07758000
- DOSTMT; GO TO EXIT; 07759000
- L51: 07760000
- IFSTMT; GO TO EXIT; 07761000
- L52: 07762000
- GOSTMT; GO TO EXIT; 07763000
- L53: 07764000
- IOSTMT; GO TO EXIT; 07765000
- L54: 07766000
- IF STEPI = DECLARATORS THEN 07767000
- BEGIN 07768000
- IF ELBAT[I].ADDRESS = STREAMV THEN IF STEPI = % 6 07768100
- LEFTPAREN THEN % 6 07768110
- BEGIN % 6 07768120
- ELCLASS~TABLE(I~I-1) ; 07768130
- COMPOUNDTAIL ; 07768140
- GO TO EXIT ; 07768160
- END ELSE I ~ I - 1; % 6 07768170
- I ~ I - 1; % 6 07768180
- BLOCK(FALSE); END ELSE COMPOUNDTAIL; 07768200
- L46:L47:L48:L50: 07769000
- L49:L41: 07770000
- EXIT: END STMT; 07771000
- 07991000
- PROCEDURE IOSTMT; 07993000
- IF STEPI ! LITNO OR (GT1~ELBAT[I].ADDRESS>15 THEN ERR(98)ELSE 07994000
- BEGIN EMIT(ELBAT[I-1].ADDRESS>1[41:47:1]>1[36:44:3]); 07995000
- STEPIT 07996000
- END SCOPE STATEMENT; 07997000
- PROCEDURE FORSTMT; 08008000
- BEGIN 08009000
- OWN REAL B,STMTSTART,REGO,RETURNSTORE,ADDRES,V,VRET, 08010000
- BRET; 08011000
- OWN BOOLEAN SIGNA,SIGNB,SIGNC, INT, 08012000
- CONSTANA,CONSTANB,CONSTANC; 08013000
- DEFINE SIMPLEB = SIGNC#, FORMALV = SIGNA#, 08014000
- SIMPLEV = CONSTANA#, A = V#, Q = REGO#, 08015000
- OPDC = TRUE#, DESC = FALSE#, K = BRET#; 08016000
- LABEL EXIT; 08017000
- COMMENT PLUG EMITS EITHER AN OPERAND CALL ON A VARIABLE OR A CALL ON A 08018000
- CONSTANT DEPENDING ON THE REQUIREMENTS; 08019000
- PROCEDURE PLUG(C,A); VALUE C,A; REAL A; BOOLEAN C; 08020000
- IF C THEN EMITNUM(A) ELSE EMITV(A,ADDRESS); 08021000
- COMMENT SIMPLE DETERMINES IF AN ARITHMETIC EXPRESSION IS + OR - A 08022000
- CONSTANT OR A SIMPLE VARIABLE. IT MAKES A THROUGH REPORT 08023000
- ON ITS ACTIVITY. IT ALSO MAKES PROVISION FOR THE RESCAN 08024000
- OF ELBAT (THIS IS THE ACTION WITH K - SEE CODE IN THE 08025000
- TABLE ROUTINE FOR FURTHER DETAILS); 08026000
- BOOLEAN PROCEDURE SIMPLE(B,A,S); BOOLEAN B,S; REAL A; 08027000
- BEGIN 08028000
- S ~ IF STEPI ! ADOP THEN FALSE ELSE ELBAT[I].ADDRESS 08029000
- = SUB; 08030000
- IF ELCLASS = ADOP THEN STEPIT; 08031000
- IF ELCLASS } NONLITNO AND ELCLASS { STRNGCON 08032000
- THEN BEGIN K ~ K+1; SIMPLE ~ TRUE; 08033000
- ELBAT[I] ~ 0&COMMENTV[2:41:7]&K[16:37:11]; 08034000
- INFO[0,K] ~ A ~ C; B ~ TRUE END 08035000
- ELSE BEGIN 08036000
- B ~ FALSE; A ~ ELBAT[I]; 08037000
- SIMPLE ~ REALID { ELCLASS AND ELCLASS { INTID END; 08038000
- STEPIT END SIMPLE; 08039000
- COMMENT TEST EMITS THE STEP-UNTIL ELEMENT TEST; 08040000
- PROCEDURE TEST; 08041000
- BEGIN 08042000
- IF NOT CONSTANB THEN 08043000
- BEGIN EMITO(SUB); IF SIMPLEB THEN EMITV(B.ADDRESS) 08044000
- ELSE BEGIN 08045000
- EMITL(2+L-BRET); 08046000
- EMITB(BBW,BUMPL,B); 08047000
- END; 08048000
- EMITO(MUL); EMIT(0) END; 08049000
- EMITO(IF SIGNB THEN GEQ ELSE LEQ); EMIT (0); L~L-1 08050000
- END TEST; 08051000
- BOOLEAN PROCEDURE SIMPI(ALL); VALUE ALL; REAL ALL; 08052000
- BEGIN 08053000
- CHECKER(VRET~ALL); 08054000
- ADDRES ~ ALL.ADDRESS; 08055000
- FORMALV ~ ALL.[9:2] = 2; 08056000
- IF T ~ ALL.CLASS > INTARRAYID OR T < BOOID OR 08057000
- GT1 ~ (T-BOOID) MOD 4 < 1 THEN 08058000
- ERR(REAL(T ! 0) | 51 + 100); 08059000
- INT ~ GT1 = 2; 08060000
- SIMPI ~ T { INTID END SIMPI; 08061000
- COMMENT STORE EMITS THE CODE FOR THE STORE INTO THE FOR INDEX; 08062000
- PROCEDURE STORE(S); VALUE S; BOOLEAN S; 08063000
- BEGIN 08064000
- IF FORMALV THEN BEGIN EMITO(XCH); S ~ FALSE END 08065000
- ELSE BEGIN 08066000
- EMITL(ADDRES); 08067000
- IF ADDRES > 1023 THEN EMITO(PRTE) END; 08068000
- T ~ (REAL(S)+1)|16; 08069000
- EMITO((IF INT THEN T+512 ELSE 4|T)+4) END STORE; 08070000
- COMMENT CALL EFFECTS A CALL ON THE INDEX; 08071000
- PROCEDURE CALL(S); VALUE S; BOOLEAN S; 08072000
- BEGIN 08073000
- IF SIMPLEV 08074000
- THEN IF S THEN EMITV(ADDRES) ELSE EMITN(ADDRES) 08075000
- ELSE BEGIN 08076000
- EMITL(2+L-VRET); 08077000
- EMITB(BBW,BUMPL,V); 08078000
- IF S THEN EMITO(LOD) END END CALL; 08079000
- PROCEDURE FORLIST(NUMLE); VALUE NUMLE; BOOLEAN NUMLE; 08080000
- BEGIN 08081000
- PROCEDURE FIX(STORE,BACK,FORWART,START); 08082000
- VALUE STORE,BACK,FORWART,START; 08083000
- REAL STORE,BACK,FORWART,START; 08084000
- BEGIN 08085000
- EMITB(GET(FORWART-1),FORWART,START); 08086000
- IF RETURNSTORE ! 0 08087000
- THEN BEGIN 08088000
- L ~ STORE; EMITNUM(B-BACK); 08089000
- EMITPAIR(RETURNSTORE,STD) END END FIX; 08090000
- INTEGER BACKFIX, FORWARDBRANCH, FOOT, STOREFIX; 08091000
- LABEL BRNCH,EXIT; 08092000
- STOREFIX ~ L; Q ~ REAL(MODE=0)+3; 08093000
- FOR K ~ 1 STEP 1 UNTIL Q DO EMITO(NOP); 08094000
- IF NUMLE 08095000
- THEN BEGIN 08096000
- BACKFIX ~ L; 08097000
- IF FORMALV THEN CALL(DESC) END 08098000
- ELSE BACKFIX ~ V + REAL(SIMPLEV)-1; 08099000
- 08100000
- AEXP; 08101000
- COMMENT PICK UP FIRST ARITHMETIC EXPRESSION; 08102000
- IF ELCLASS = STEPV 08103000
- THEN BEGIN 08104000
- COMMENT HERE WE HAVE A STEP ELEMENT; 08105000
- BACKFIX ~ BUMPL; 08106000
- COMMENT LEAVE ROOM FOR FORWARD JUMP; 08107000
- IF FORMALV THEN CALL(DESC); CALL(OPDC); 08108000
- COMMENT FETCH INDEX; 08109000
- IF I > 70 THEN BEGIN NXTELBT ~ 1; I ~ 0 END 08110000
- ELSE REGO ~ I; 08111000
- IF SIMPLEB ~ SIMPLE(CONSTANB,B,SIGNB) AND 08112000
- (ELCLASS = UNTILV OR ELCLASS = WHILEV) 08113000
- THEN BEGIN 08114000
- COMMENT WE HAVE A SIMPLE STEP FUNCTION; 08115000
- PLUG(CONSTANB ,B); 08116000
- END ELSE BEGIN 08117000
- COMMENT THE STEP FUNCTION IS NOT SIMPLE: WE CONSTRUCT A 08118000
- SUBROUTINE; 08119000
- I ~ IF I < 4 THEN 0 ELSE REGO; STEPIT; 08120000
- SIGNB ~ CONSTANB ~ FALSE; 08121000
- EMIT(0); B ~ L; 08122000
- AEXP; EMITO(XCH); 08123000
- BRET ~ L; 08124000
- EMITO(BFW) END; 08125000
- EMITO(REAL(SIGNB)|32+ADD); 08126000
- EMITB(BFW,BACKFIX,L); 08127000
- IF ELCLASS = UNTILV 08128000
- THEN BEGIN COMMENT STEP-UNTIL ELEMENT; 08129000
- STORE(TRUE); IF FORMALV THEN CALL(OPDC); 08130000
- STEPIT; AEXP; TEST END 08131000
- ELSE BEGIN COMMENT STEP-WHILE ELEMENT; 08132000
- IF ELCLASS ! WHILEV THEN 08133000
- BEGIN ERR(153); GO TO EXIT END; 08134000
- STEPIT; STORE(FALSE); BEXP END END 08135000
- ELSE BEGIN 08136000
- COMMENT WE DO NOT HAVE A STEP ELEMENT; 08137000
- STORE(FALSE); 08138000
- IF ELCLASS = WHILEV 08139000
- THEN BEGIN 08140000
- COMMENT WE HAVE A WHILE ELEMENT; 08141000
- STEPIT; BEXP END 08142000
- ELSE BEGIN 08143000
- COMMENT ONE EXPRESSION ELEMENT; 08144000
- IF ELCLASS ! COMMA THEN BEGIN 08145000
- EMITB(BFW,BUMPL,L+2); BACKFIX ~ L END 08146000
- ELSE BACKFIX ~ L + 2; 08147000
- L ~ L+1; EMIT(BFW); GO TO BRNCH END END; 08148000
- COMMENT THIS IS THE COMMON POINT; 08149000
- IF ELCLASS = COMMA THEN EMITLNG; L ~ L+1; 08150000
- EMIT(BFC); 08151000
- BRNCH: FORWARDBRANCH ~ L; DIALA ~ DIALB ~ 0; 08152000
- IF ELCLASS = COMMA 08153000
- THEN BEGIN 08154000
- STEPIT; 08155000
- FORLIST(TRUE); 08156000
- FIX(STOREFIX,BACKFIX,FORWARDBRANCH,STMTSTART) END 08157000
- ELSE BEGIN 08158000
- IF ELCLASS ! DOV 08159000
- THEN BEGIN ERR(154); REGO~L; GO EXIT END; 08160000
- STEPIT; 08161000
- IF NUMLE THEN FOOT := GETSPACE(FALSE,-1); % TEMP. 08162000
- STMT; 08163000
- 08164000
- IF NUMLE THEN BEGIN 08165000
- EMITV(RETURNSTORE ~ FOOT); EMITO(BBW) END 08166000
- ELSE BEGIN 08167000
- EMITB(BBW,BUMPL,BACKFIX); RETURNSTORE ~ 0 END; 08168000
- STMTSTART ~ FORWARDBRANCH; B ~ L; 08169000
- CONSTANTCLEAN; REGO ~ L; 08170000
- FIX(STOREFIX,BACKFIX,FORWARDBRANCH,L) END; 08171000
- EXIT: END FORLIST; 08172000
- REAL T1,T2,T3,T4; 08173000
- NXTELBT ~ 1; I ~ 0; 08174000
- STEPIT; 08175000
- IF SIMPI(VRET~ELBAT[I]) 08176000
- THEN BEGIN 08177000
- IF STEPI ! ASSIGNOP THEN BEGIN ERR(152); GO EXIT END;08178000
- T1 ~ L; IF FORMALV THEN EMITN(ADDRES); 08179000
- K ~ 0; 08180000
- IF SIMPLE(CONSTANA,A,SIGNA) THEN 08181000
- IF ELCLASS = STEPV THEN 08182000
- IF SIMPLE(CONSTANB,B,SIGNB) THEN 08183000
- IF ELCLASS = UNTILV THEN 08184000
- IF SIMPLE(CONSTANC,Q,SIGNC) THEN 08185000
- IF ELCLASS = DOV THEN 08186000
- BEGIN 08187000
- PLUG(CONSTANA,A); 08188000
- IF SIGNA THEN EMITO(CHS); 08189000
- RETURNSTORE ~ BUMPL; ADJUST; CONSTANTCLEAN; 08190000
- STMTSTART ~ L; 08191000
- STEPIT; 08192000
- T1 ~ ((((4096 | RETURNSTORE+STMTSTART)|2+ 08193000
- REAL(CONSTANB))|2+ 08194000
- REAL(CONSTANC))|2+ 08195000
- REAL(SIGNB))|2+ 08196000
- REAL(SIGNC); 08197000
- T2 ~ VRET; 08198000
- T3 ~ B; 08199000
- T4 ~ Q; 08200000
- STMT; 08201000
- SIGNC ~ BOOLEAN(T1.[47:1]); 08202000
- SIGNB ~ BOOLEAN(T1.[46:1]); 08203000
- CONSTANC ~ BOOLEAN(T1.[45:1]); 08204000
- CONSTANB ~ BOOLEAN(T1.[44:1]); 08205000
- STMTSTART ~ T1.[32:12]; 08206000
- RETURNSTORE ~ T1.[20:12]; 08207000
- VRET ~ T2; 08208000
- B ~ T3; 08209000
- Q ~ T4; 08210000
- SIMPLEV~ SIMPI(VRET); 08211000
- IF FORMALV THEN EMITN(ADDRES); EMITV(ADDRES); 08212000
- PLUG(CONSTANB,B); 08213000
- EMITO(IF SIGNB THEN SUB ELSE ADD); 08214000
- EMITB(BFW,RETURNSTORE,L); 08215000
- STORE(TRUE); 08216000
- IF FORMALV THEN CALL(OPDC); 08217000
- PLUG(CONSTANC,Q); 08218000
- IF SIGNC THEN EMITO(CHS); 08219000
- SIMPLEB ~ TRUE; TEST; EMITLNG; 08220000
- EMITB(BBC,BUMPL,STMTSTART); 08221000
- GO TO EXIT END; 08222000
- I ~ 2; K ~ 0; 08223000
- SIMPLEV ~ SIMPI(VRET); 08224000
- V ~ T1 END 08225000
- ELSE BEGIN 08226000
- EMIT(0); V ~ L; SIMPLEV ~ FALSE; FORMALV ~ TRUE; 08227000
- VARIABLE(FR); EMITO(XCH); VRET ~ L; EMITO(BFW); 08228000
- IF ELCLASS!ASSIGNOP THEN BEGIN ERR(152); GO EXIT END;08229000
- END; 08230000
- STEPIT; FORLIST(FALSE); L ~ REGO; 08231000
- EXIT: K ~ 0 END FORSTMT; 08232000
-REAL PROCEDURE REED; 08999000
- BEGIN 08999025
- LABEL EOF; INTEGER I,J,K; 08999050
- STREAM PROCEDURE MOVE(N,F,T); VALUE N,T; 08999075
- BEGIN SI:=F; DI:=T; DS:=N WDS END MOVE; 08999100
- J:=-1; 08999125
- READ(CODISK[NO])[EOF]; 08999150
- REED:=I:=FETCH(MKABS(CODISK(1))); 08999175
- K:=MKABS(CODE(0))-1); 08999200
- WHILE I-J>30 DO 08999225
- BEGIN 08999250
- MOVE(30,CODISK(0),K); K:=K+30; J:=J+30; 08999275
- READ(CODISK); 08999300
- END; 08999325
- MOVE(I-J,CODISK(0),K); 08999350
- READ(CODISK)[EOF]; 08999375
-EOF: 08999400
-END REED; 08999425
-PROCEDURE RIGHT(L); VALUE L; INTEGER L; 08999450
- BEGIN 08999475
- INTEGER I,J; 08999500
- I:=(L+7) DIV 4; 08999525
- MOVE(1,I,CODISK(0)); 08999550
- MOVE(29,CODE(0),CODISK(1)); 08999575
- WRITE(CODISK); 08999600
- J:=29; 08999625
- WHILE I-J>0 DO 08999650
- BEGIN 08999675
- MOVE(30,CODE(J),CODISK(0)); 08999700
- WRITE(CODISK); 08999725
- J:=J+30; 08999750
- END; 08999775
- END RIGHT; 08999800
- COMMENT THE PROGRAM ROUTINE DOES THE INITIALIZATION AND THE WRAPUP 09000000
- FOR THE REST OF THE COMPILER. THE MAIN PROGRAM OF THE COMPILER09001000
- IS SIMPLY A CALL ON THE PROGRAM ROUTINE; 09002000
- PROCEDURE PROGRAM; 09003000
- BEGIN 09004000
- STREAM PROCEDURE MDESC(WD,TOLOC);VALUE WD; 09005000
- BEGIN DI~LOC WD; DS~ SET;SI~ LOC WD; DI~TOLOC;DS~WDS END; 09006000
- DEFINE STARTINTRSC=426#; 09024000
- LABEL L1; 09025000
- LISTOG:=LISTER:=BOOLEAN(1-ERRORCOUNT.[46:1]); 09028000
-COMMENT LISTOG IS NOT SET BY DEFAULT ON TIMESHARING; 09028010
- NOHEADING := TRUE; 09028050
- ERRORCOUNT := 0; 09028900
- ERRMAX:=999; % MAY BE CHANGED IN DOLLARCARD. 09028910
- BASENUM:=10000; ADDVALUE:=1000; NEWBASE:=TRUE; 09028920
-COMMENT DEFAULT VALUES FOR "$SEQ" OPTION; 09028930
- LASTUSED := 4; % FOR INITIALIZATION. 09029000
- NEXTINFO ~ LASTINFO ~ LASTSEQROW|256+LASTSEQUENCE+1; 09033000
- PUTNBUMP(0); 09034000
- GT1 ~ -" "; 09034100
- MDESC(GT1,INFO[LASTSEQROW,LASTSEQUENCE]); 09034200
- BLANKET(0,INFO[LASTSEQROW,LASTSEQUENCE]); % FOR "$ CHECK".09034500
- READACARD; % INITIALIZATION OF NCR,FCR, AND LCR, AND 09035000
- % READS FIRST CARD INTO CARD BUFFER. 09036000
- LASTUSED := 1; % ASSUMES CARD ONLY UNTIL TOLD DIFFERENTLY.09037000
- NXTELBT ~ 1; 09038000
- PRTI~PRTIMAX~PRTBASE; 09039000
- MRCLEAN ~ TRUE; 09040000
-COMMENT START FILLING TABLES NEEDED TO COMPILE A PROGRAM; 09040100
- FILL TEN[*] WITH 09041000
- OCT1771110463422054, OCT1761332600326467, OCT1751621340414205, 09042000
- OCT1742165630517247, OCT1732623176643120, OCT1723370036413744, 09043000
- OCT1714266046116735, OCT1705343457542525, OCT1676634373473252, 09044000
- OCT1651040347241213, OCT1641250441111455, OCT1631522551333770, 09045000
- OCT1622047303622767, OCT1612461164567564, OCT1603175421725521, 09046000
- OCT1574034726313046, OCT1565044113775657, OCT1556255136775233, 09047000
- OCT1547730366574502, OCT1521171646433362, OCT1511430220142257, 09048000
- OCT1501736264172732, OCT1472325741231521, OCT1463013331500045, 09049000
- OCT1453616220020057, OCT1444561664024072, OCT1435716241031111, 09050000
- OCT1427301711237333, OCT1401116227350722, OCT1371341675243107, 09051000
- OCT1361632254513731, OCT1352200727636717, OCT1342641115606502, 09052000
- OCT1333411341150223, OCT1324313631402270, OCT1315376577702746, 09053000
- OCT1306676337663537, OCT1261045602764047, OCT1251257143561061, 09054000
- OCT1241532774515275, OCT1232061573640554, OCT1222476132610706, 09055000
- OCT1213215561353071, OCT1204061115645707, OCT1175075341217270, 09056000
- OCT1166314631463146, OCT1141000000000000, OCT1131200000000000, 09057000
- OCT1121440000000000, OCT1111750000000000, OCT1102342000000000, 09058000
- OCT1073032400000000, OCT1063641100000000, OCT1054611320000000, 09059000
- OCT1045753604000000, OCT1037346545000000, OCT1011124027620000, 09060000
- OCT0001351035564000, OCT0011643245121000, OCT0022214116345200,09061000
- OCT0032657142036440, OCT0043432772446150, OCT0054341571157602,09062000
- OCT0065432127413543, OCT0076740555316473, OCT0111053071060221,09063000
- OCT0121265707274266, OCT0131543271153343, OCT0142074147406234, 09064000
- OCT0152513201307703, OCT0163236041571663, OCT0174105452130240, 09065000
- OCT0205126764556310, OCT0216354561711772, OCT0231004771627437, 09066000
- OCT0241206170175347, OCT0251447626234641, OCT0261761573704011, 09067000
- OCT0272356132665013, OCT0303051561442216, OCT0313664115752661, 09068000
- OCT0324641141345435, OCT0336011371636745, OCT0347413670206536, 09069000
- OCT0361131664625027, OCT0371360241772234, OCT0401654312370703, 09070000
- OCT0412227375067064, OCT0422675274304701, OCT0433454553366062, 09071000
- OCT0444367706263476, OCT0455465667740415, OCT0467003245730521, 09072000
- OCT0501060411731665, OCT0511274514320242, OCT0521553637404312, 09073000
- OCT0532106607305375, OCT0542530351166674, OCT0553256443424453, 09074000
- OCT0564132154331566, OCT0575160607420123, OCT0606414751324150, 09075000
- OCT0621012014361120, OCT0631214417455344, OCT0641457523370635, 09076000
- OCT0651773450267005, OCT0662372362344606, OCT0673071057035747, 09077000
- OCT0703707272645341, OCT0714671151416632, OCT0726047403722400, 09078000
- OCT0737461304707100, OCT0751137556607072, OCT0761367512350710, 09079000
- OCT0771665435043072; 09080000
-COMMENT THIS IS THE FILL FOR THE SECOND ROW OF INFO: 09081000
- THE FIRST ITEMS ARE STREAM RESERVED WORDS, 09082000
- THEN ORDINARY RESERVED WORDS, 09083000
- THEN INTRINSIC FUNCTIONS; 09084000
- FILL INFO[1,*] WITH 09085000
- OCT0670000600000002, "2SI000", %256 09086000
- OCT0700001040000002, "2DI000", %258 09087000
- OCT0710001460000002, "2CI000", %260 09088000
- OCT0720001630000002, "5TALLY", %262 09089000
- OCT0730000530000002, "2DS000", %264 09090000
- OCT0740000150000002, "4SKIP0", %266 09091000
- OCT0750001620000002, "4JUMP0", %268 09092000
- OCT0760000740000002, "2DB000", %270 09093000
- OCT0770000500000002, "2SB000", %272 09094000
- OCT1010000730000002, "2SC000", %274 09095000
- OCT1020001160000002, "3LOC00", %276 09096000
- OCT1030001170000002, "2DC000", %278 09097000
- OCT1040001430000002, "5LOCAL", %280 09098000
- OCT1050000340000002, "3LIT00", %282 09099000
- OCT1060001036400002, "3SET00", %284 09100000
- OCT1060001066500002, "5RESET", %286 09101000
- OCT1060001020500002, "3WDS00", %288 09102000
- OCT1060001357700002, "3CHR00", %290 09103000
- OCT1060001057300002, "3ADD00", %292 09104000
- OCT1060001617200002, "3SUB00", %294 09105000
- OCT1060000727600002, "3ZON00", %296 09106000
- OCT1060000417500002, "3NUM00", %298 09107000
- OCT1060000766700002, "3OCT00", %300 09108000
- OCT1060000176600002, "3DEC00", %302 09109000
- OCT1004000260000003, "6TOGGL", "E0000000", %304 09110000
- OCT0130311060000002, "3ABS00", %307 09110001
- OCT1360441030000002, "3AND00", %309 09112000
- OCT0500000170000002, "5ARRAY", %311 09112100
- OCT0660000000000002, "5BEGIN", %313 09112200
- OCT0500000040000003, "7BOOLE", "AN000000", %315 09112300
- OCT1070000000000003, "7COMME", "NT000000", %318 09112400
- OCT0500000230000003, "6DEFIN", "E0000000", %321 09112500
- OCT1410446000000002, "3DIV00", %324 09112600
- OCT0550000000000002, "2DO000", %326 09112700
- OCT0520000000000003, "6DOUBL", "E0000000", %328 09112800
- OCT0570000000000002, "4ELSE0", %331 09112900
- OCT0600000000000002, "3END00", %333 09113000
- OCT1340442030000002, "3EQV00", %335 09113100
- OCT0410000000000002, "5FALSE", %337 09113200
- OCT0130310030000002, "4FLAG0", %339 09113300
- OCT0530000000000002, "3FOR00", %341 09113400
- OCT1100000000000003, "7FORWA", "RD ", %343 09113500
- OCT0640000000000002, "2GO000", %346 09113600
- OCT0130316060320002, "4HUNT0", %348 09113700
- OCT0630000000000002, "2IF000", %350 09113800
- OCT0500000040000002, "4REAL0", %352 09113900
- OCT0500000050000003, "7INTEG", "ER000000", %354 09114000
- OCT0500000070000002, "5LABEL", %357 09114100
- OCT0360002000020003, "6MEMOR", "Y ", %359 09114200
- OCT1410456000000002, "3MOD00", %362 09114300
- OCT0500000140000003, "7MONIT", "OR ", %364 09114400
- OCT0130301060000002, "4NABS0", %367 09114500
- OCT0500000200000002, "4NAME0", %369 09114600
- OCT0130304030000002, "5NFLAG", %371 09114700
- OCT1320300230000002, "3NOT00", %373 09114800
- OCT1350440430000002, "2OR000", %375 09114900
- OCT0500000020000002, "4SAVE0", %377 09115000
- OCT0500000010000002, "3OWN00", %379 09115100
- OCT0460000000000003, "6POLIS", "H ", %381 09115200
- OCT0500000160000003, "9PROCE", "DURE ", %384 09115300
- OCT0130300000160011, "4SIGN0", %387 09115400
- OCT2025, COMMENT DUP ; 09115500
- OCT0000, COMMENT LITC 0; 09115600
- OCT0425, COMMENT NEQ ; 09115700
- OCT1025, COMMENT XCH ; 09115800
- OCT0155, COMMENT DIA 1; 09115900
- OCT0161, COMMENT DIB 1; 09116000
- OCT0165, COMMENT TRB 1; 09116100
- OCT1110000000000002, "4STEP0", %396 09116200
- OCT0500000220000003, "6STREA", "M ", %398 09116300
- OCT0500000110000003, "#SUBRO", "UTINE ", %401 09116400
- OCT0500000150000003, "6SWITC", "H ", %404 09116500
- OCT1120000000000002, "4THEN0", %407 09116600
- OCT1130000000000002, "2TO000", %409 09116700
- OCT0410000010000002, "4TRUE0", %411 09116800
- OCT0560000000000002, "5UNTIL", %413 09116900
- OCT1140000000000002, "5VALUE", %415 09117000
- OCT0540000000000002, "5WHILE", %417 09117100
- OCT1310440200000002, "3ADD00", %419 09117200
- OCT1310240270000002, "3BRT00", %421 09117300
- OCT1310453050000002, "3CCX00", %423 09117400
- OCT1310442500000002, "3CDC00", %425 09117500
- OCT1310457050000002, "3CFX00", %427 09117600
- OCT1310302060000002, "3CHS00", %429 09117700
- OCT1310440500000002, "3COC00", %431 09117800
- OCT1310242020000002, "3COM00", %433 09117900
- OCT1310302060000002, "3CSB00", %435 09118000
- OCT1310240120000002, "3DEL00", %437 09118100
- OCT1260100550000002, "3DIA00", %439 09118200
- OCT1260100610000002, "3DIB00", %441 09118300
- OCT1310344050000002, "3DUP00", %443 09118400
- OCT1310451050000002, "3EQL00", %445 09118500
- OCT1310443050000002, "3FCX00", %447 09118600
- OCT1310447050000002, "3FFX00", %449 09118700
- OCT1310440250000002, "3GEQ00", %451 09118800
- OCT1310440450000002, "3GTR00", %453 09118900
- OCT1310104420000002, "3HLB00", %455 09119000
- OCT1310104420000002, "3HP200", %457 09119050
- OCT1310446000000002, "3IDV00", %459 09119100
- OCT1310251020000002, "3IIO00", %461 09119200
- OCT1310250220000002, "3INA00", %463 09119300
- OCT1310250420000002, "3INB00", %465 09119400
- OCT1310100420000002, "3INI00", %467 09119500
- OCT1400440300000002, "3INX00", %469 09119600
- OCT1310244220000002, "3IOR00", %471 09119700
- OCT1310250220000002, "3IP100", %473 09119800
- OCT1310250420000002, "3IP200", %475 09119900
- OCT1310145060000002, "3IPS00", %477 09120000
- OCT1310410240000002, "3ISD00", %479 09120100
- OCT1310450440000002, "3ISN00", %481 09120200
- OCT1310100420000002, "3ITI00", %483 09120300
- OCT1310450250000002, "3LEQ00", %485 09120400
- OCT1310505300000002, "3LLL00", %487 09120500
- OCT1310441030000002, "3LND00", %489 09120600
- OCT1310300230000002, "3LNG00", %491 09120700
- OCT1310304040000002, "3LOD00", %493 09120800
- OCT1310440430000002, "3LOR00", %495 09120900
- OCT1310442030000002, "3LQV00", %497 09121000
- OCT1310450450000002, "3LSS00", %499 09121100
- OCT1310101100000002, "3MKS00", %501 09121200
- OCT1310441000000002, "3MUL00", %503 09121300
- OCT1310441050000002, "3NEQ00", %505 09121400
- OCT1310100130000002, "3NOP00", %507 09121500
- OCT0650006550000002, "6SCOPO", "N......."; %509 09121600
- FILL INFO[2,*] WITH 09121650
- OCT131030000020004., "3RDF00", %512 09121700
- OCT0000, COMMENT LITC 0; 09121800
- OCT2141, COMMENT FXS ; 09121900
- OCT131030000020004., "3RDS00", %516 09122000
- OCT0004, COMMENT LITC 1; 09122100
- OCT2141, COMMENT FXS ; 09122200
- OCT1310456000000002, "3RDV00", %520 09122300
- OCT1310304030000002, "3RFB00", %522 09122400
- OCT1310240470000002, "3RND00", %524 09122500
- OCT1310145060000002, "3RRR00", %526 09122600
- OCT1310311060000002, "3RSB00", %528 09122700
- OCT1310242470000002, "3RSP00", %530 09122800
- OCT1310141020000002, "3RTM00", %532 09122900
- OCT1310240470000002, "3RTN00", %534 09123000
- OCT1310141020000002, "3RTR00", %536 09123100
- OCT1310242470000002, "3RTS00", %538 09123200
- OCT1310310030000002, "3SFB00", %540 09123300
- OCT1310442040000002, "3SND00", %542 09123400
- OCT1310301060000002, "3SSB00", %544 09123500
- OCT1310316060000002, "3SSF00", %546 09123600
- OCT1310301060000002, "3SSN00", %548 09123700
- OCT1310311060000002, "3SSP00", %550 09123800
- OCT1310401040000002, "3STD00", %552 09123900
- OCT1310240000020004, "3STF00", %554 09124000
- OCT0010, COMMENT LITC 2; 09124100
- OCT2141, COMMENT FXS ; 09124200
- OCT1310442040000002, "3STN00", %558 09124300
- OCT1310240000020004, "3STS00", %560 09124400
- OCT0014, COMMENT LITC 3; 09124500
- OCT2141, COMMENT FXS ; 09124600
- OCT1310440600000002, "3SUB00", %564 09124700
- OCT1310344060000002, "3TFB00", %566 09124800
- OCT1270440650000002, "3TFR00", %568 09124900
- OCT1310155060000002, "3TIO00", %570 09125000
- OCT1310344060000002, "3TOP00", %572 09125050
- OCT1270440650000002, "3TRB00", %574 09125100
- OCT1300300000000002, "3VFI00", %576 09125200
- OCT1310502050000002, "3XCH00", %578 09125300
- OCT1310101070000002, "3XIT00", %580 09125400
- OCT1310105020000002, "3ZIP00", %582 09125500
- OCT1310105020000002, "3ZP100", %584 09125600
- OCT1270500750000002, "3CFE00", %586 09125700
- OCT1270500750000002, "3FCE00", %588 09125800
- OCT1270500710000002, "3CFL00", %590 09125900
- OCT1270500710000002, "3FCL00", %592 09126000
- OCT1310440210000002, "3DLA00", %594 09126100
- OCT1310440210000002, "3ADL00", %596 09126200
- OCT1310440610000002, "3DLS00", %598 09126300
- OCT1310440610000002, "3SDL00", %600 09126400
- OCT1310441010000002, "3DLM00", %602 09126500
- OCT1310441010000002, "3MDL00", %604 09126600
- OCT1310442010000002, "3DLD00", %606 09126700
- OCT1310442010000002, "3DDL00", %608 09126800
- OCT0460000000000002, "1P0000", %610 09126900
- OCT0360002000020002, "1M0000", %612 09127000
- OCT1310240000020004, "3PRL00", %614 09127100
- OCT0111, COMMENT PRL; 09127200
- OCT0055, COMMENT NOP; 09127300
- OCT0650006610000003, "7SCOPO", "FF......", %618 09127400
- OCT0030000000040003, "2LB000", "[# ", %621 09127500
- OCT0030000000040003, "2RB000", "]# ", %624 09127600
- OCT0030000000040003, "3GTR00", "># ", %627 09127700
- OCT0030000000040003, "3GEQ00", "}# ", %630 09127800
- OCT0030000000040003, "3EQL00", "=# ", %633 09127900
- OCT0030000000040003, "3NEQ00", "!# ", %636 09128000
- OCT0030000000040003, "3LEQ00", "{# ", %639 09128100
- OCT0030000000040003, "3LSS00", "<# ", %642 09128200
- OCT0030000000040003, "5TIMES", "|# ", %645 09128300
- OCT1310117530000002, "3SCI00", %688 09128400
- OCT1310117540000002, "3SAN00", %650 09128500
- OCT1310157730000002, "3SCS00", %652 09128600
- 09128700
- 09128800
- 09128900
- 09129000
- 09129100
- 09129200
- 09129300
- 09129400
- 09129500
- 09129600
- 09129700
- 09129800
- 09129900
- 09130000
- 09130100
- 09130200
- 09130300
- 09130400
- 09130500
- 09130600
- 09130700
- 09130800
- 09130900
- 09131000
- 09131100
- 09131200
- 09131300
- 09131400
- 09131500
- 09131600
- 09131700
- 09131800
- 09131900
- 09132000
- 09132100
- 09132200
- 09132300
- 09132400
- 09132500
- 09132600
- 09132700
- 09132800
- 09132900
- 09133000
- 09133100
- 09133200
- 09133300
- 09133400
- 09133450
- 09133500
- 09133600
- 0; % END OF INFO FILL. 09133700
- FOR GT2~256 STEP GT1.LINK WHILE NOT BOOLEAN(GT1.FORMAL) DO 09133800
- PUT((GT1~TAKE(GT2))>2[35:35:13],GT2); 09133900
- FOR GT1~GT2 STEP GT2.LINK WHILE GT2.LINK!0 DO 09134000
- PUT((GT2~TAKE(GT1))&STACKHEAD[GT3~TAKE(GT1+1).[12:36] 09134100
- MOD 125][35:35:13],STACKHEAD[GT3]~GT1); 09134200
- COMMENT THIS IS THE FILL FOR THE SPECIAL CHARACTORS; 09197000
-$ RESET NEATUP 09197100120809PK
- FILL SPECIAL[*] WITH 09198000
- OCT1200000000200000, COMMENT #; OCT0000000000100000, COMMENT @; 09199000
- OCT0000000000000000, OCT1160000000120000, COMMENT :; 09200000
- OCT1370440450002763, COMMENT >; OCT1370440250002662, COMMENT }; 09201000
- OCT1400440200000000, COMMENT +; OCT0000000000000000, 09202000
- OCT1220000000060000, COMMENT .; OCT1210000000000000, COMMENT [; 09203000
- OCT1250000000000000, COMMENT &; OCT0450000000000000, COMMENT (; 09204000
- OCT1370450450003571, COMMENT <; OCT1330401040000000, COMMENT ~; 09205000
- OCT1410441000000000, COMMENT |; OCT0000000000000000, 09206000
- OCT0000000000040000, COMMENT $; OCT0470000000000000, COMMENT *; 09207000
- OCT1400440600000000, COMMENT -; OCT1240000000160000, COMMENT ); 09208000
- OCT0620000000000000, COMMENT .,; OCT1370450250003470, COMMENT {; 09209000
- OCT0000000000000000, OCT1410442000000000, COMMENT /; 09210000
- OCT1170000000000000, COMMENT ,; OCT0000000000020000, COMMENT %; 09211000
- OCT1370441050002561, COMMENT !; OCT1370451050002460, COMMENT =; 09212000
- OCT1230000000000000, COMMENT ]; OCT0000000000140000, COMMENT "; 09213000
- 0,0; 09214000
- FILL MACRO[*] WITH 09215000
- OCT0131, COMMENT SFS A 00 ; 09216000
- OCT0116, COMMENT SFD A 01 ; 09217000
- OCT0000, COMMENT SYNTAX ERROR02 ; 09218000
- OCT0140, COMMENT INC A 03 ; 09219000
- OCT0130, COMMENT SRS A 04 ; 09220000
- OCT0117, COMMENT SRD A 05 ; 09221000
- OCT0000, COMMENT SYNTAX ERROR06 ; 09222000
- OCT0000, COMMENT SYNTAX ERROR07 ; 09223000
- OCT00310143, COMMENT CRF A, SFS 008 ; 09224000
- OCT00160143, COMMENT CRF A, SFD 009 ; 09225000
- OCT00470143, COMMENT CRF A, JFW 0 10 ; 09226000
- OCT00400143, COMMENT CRF A, INC 011 ; 09227000
- OCT00300143, COMMENT CRF A, SRS 012 ; 09228000
- OCT00170143, COMMENT CRF A, SRD 013 ; 09229000
- OCT0000, COMMENT SYNTAX ERROR14 ; 09230000
- OCT0000, COMMENT SYNTAX ERROR15 ; 09231000
- OCT0153, COMMENT RSA A 16 ; 09232000
- OCT0104, COMMENT RDA A 17 ; 09233000
- OCT0150, COMMENT RCA A 18 ; 09234000
- OCT004201430042, COMMENT SEC 0, CRF A, SEC 0 19 ; 09235000
- OCT0122, COMMENT SES A 20 ; 09236000
- OCT0106, COMMENT SED A 21 ; 09237000
- OCT0000, COMMENT SYNTAX ERROR22 ; 09238000
- OCT0000, COMMENT SYNTAX ERROR23 ; 09239000
- OCT0056, COMMENT TSA 0 24 ; 09240000
- OCT0000, COMMENT SYNTAX ERROR25 ; 09241000
- OCT0000, COMMENT SYNTAX ERROR26 ; 09242000
- OCT0000, COMMENT SYNTAX ERROR27 ; 09243000
- OCT0000, COMMENT SYNTAX ERROR28 ; 09244000
- OCT0007, COMMENT TDA 0 29 ; 09245000
- OCT0000, COMMENT SYNTAX ERROR30 ; 09246000
- OCT0000, COMMENT SYNTAX ERROR31 ; 09247000
- OCT0115, COMMENT SSA A 32 ; 09248000
- OCT0114, COMMENT SDA A 33 ; 09249000
- OCT0154, COMMENT SCA A 34 ; 09250000
- OCT0141; COMMENT STC A 35 ; 09251000
-$ SET NEATUP 09251100120809PK
-FILL OPTIONS[*] WITH "5CHECK",0, % 0,1 09251208
- "6DEBUG",0, % 2,3 09251212
- "4DECK0",0, % 4,5 09251214
- "6FORMA",0, % 6,7 09251216
- "9INTRI",0, % 8,9 09251218
- "5LISTA",0, % 10,11 09251220
- "4LIST0",0, % 12,13 09251224
- "5LISTP",0, % 14,15 09251228
- "3MCP00",0, % 16,17 09251230
- "4TAPE0",0, % 18,19 09251232
- "4NEST0",0, % 20,21 09251234
- "3NEW00",0, % 22,23 09251236
- "7NEWIN",0, % 24,25 09251240
- "4OMIT0",0, % 26,27 09251244
- "1$0000",0, % 28,29 09251248
- "3PRT00",0, % 30,31 09251252
- "5PUNCH",0, % 32,33 09251256
- "5PURGE",0, % 34,35 09251260
- "4SEGS0",0, % 36,37 09251264
- "3SEQ00",0, % 38,39 09251268
- "6SEQER",0, % 40,41 09251272
- "6SINGL",0, % 42,43 09251276
- "5STUFF",0, % 44,45 09251378
- "4VOID0",0, % 46,47 09251380
- "5VOIDT",0, % 48,49 09251384
- 0; 09251388
- DO UNTIL STEPI = BEGINV; 09252000
- GT1 ~-" "; 09253000
- INTOG ~ INTOG AND TRUE; % 09253050
- DISKADR ~ IF INTOG THEN INTRINSICADR ELSE 2; 09253100
- MDESC(GT1,INFO[LASTSEQROW,LASTSEQUENCE]); 09253500
- MDESC(GT1,INFO[LASTSEQROW,LASTSEQUENCE-1]); 09254000
- MDESC(GT1,INFO[LASTSEQROW,LASTSEQUENCE-2]); 09255000
- STMT; 09275000
- LOCK(STUFF); 09281000
- CLOSE(CARD,RELEASE); 09281500
- IF LASTUSED ! 1 THEN CLOSE(TAPE,RELEASE); 09282000
- IF NEWTOG THEN LOCK(NEWTAPE,*); 09282500
- IF T~((L+3)DIV 4) + CORADR > 4080 THEN FLAG(040); 09282600
- IF NOT NOHEADING THEN % PRINT THESE THINGS IF ANY 09362000
- BEGIN % LISTING HAS BEEN DONE. 09363000
- STREAM PROCEDURE PAN(T,FIEL,NER,LSQ); VALUE NER,T; 09364000
- BEGIN DI ~ FIEL; 44(DS~2LIT" "); 09365000
- SI ~ LSQ; DS ~ WDS; SI ~FIEL; DS ~ 3 WDS; 09366000
- DI ~ FIEL; DS~ 28 LIT"NUMBER OF ERRORS DETECTED = "; 09367000
- SI ~ LOC NER; DS ~ 3 DEC; DS ~ 22 LIT ". COMPILATION TIME = "; 09368000
- SI ~ LOC T; DS ~ 4 DEC; DS + 9 LIT " SECONDS."; END; 09369000
-STREAM PROCEDURE PEN(FIL,PRTSIZ,BASE,CORE,DISK); 09370000
- VALUE PRTSIZ,BASE,CORE,DISK; 09371000
- BEGIN DI~FIL; DS ~ 9 LIT"PRT SIZE="; SI~LOC PRTSIZ; 09372000
- DS ~ 3 DEC; DS~14 LIT" BASE ADDRESS="; 09373000
- SI~LOC BASE; DS~4 DEC; DS~10 LIT" CORE REQ="; 09374000
- SI~LOC CORE; DS~4 DEC; DS~10 LIT" DISK REQ="; 09375000
- SI~LOC DISK; DS~5 DEC; DS~61 LIT " "; 09376000
- END PEN; 09377000
- STREAM PROCEDURE FINALAX(LINE,N,SEQ); VALUE N; 09378000
- BEGIN DS ~ LINE; 15(DS ~ 8 LIT " "); 09379000
- DI ~ LINE; DS ~ 31 LIT "NUMBER OF ACCIDENTAL ENTRIES = "; 09380000
- SI ~ LOC N; DS ~ 3 DEC; DI ~ DI+8; 09381000
- SI ~ SEQ; SI ~ SI-16; DS ~ 8 CHR; 09382000
- END; 09383000
- IF AXNUM !0 THEN 09384000
- BEGIN 09384050
- FINALAX(LIN[0],AXNUM,INFO[LASTSEQROW,LASTSEQUENCE]); 09384100
- WRITELINE; 09384500
- END; 09384600
- SCRAM := (TIME(1)-TIME1)/60; 09385000
- PAN(SCRAM,LIN[0],ERRORCOUNT,INFO[LASTSEQROW,LASTSEQUENCE-1]) 09386000
- ; 09386500
- WRITELINE 09387000
- PEN(LIN[0],PRTIMAX,T:=(L+3)DIV 4,T:=CORADR+T, 09388000
- ((T+29)DIV 30+DISKADR)|30); 09389000
- WRITELINE; 09389500
- LOCK(LINE,RELEASE); END; 09390000
-IF ERRORCOUNT ! 0 THEN I~0/0 ELSE 09391000
- BEGIN 09392000
- ARRAY SAVINFO[0:31,0:255], 09392300
- INFO[0:200,0:255]; % FOR LARGE MCP"S. 09392500
- INTEGER SAVNDX,NONSAVNDX,N; 09393000
- INTEGER Q,J,K,M; 09393010
- BOOLEAN TSSTOG; REAL T; 09393020
- REAL PROCEDURE PUSHER(GRINCH,GOT,XMAS); VALUE XMAS; REAL XMAS; 09393050
- ARRAY GOT[0]; ARRAY GRINCH [0,0]; 09393060
- BEGIN 09393070
- REAL WHO,WHAT; 09393080
- DEFINE LINKR = [32:8]#; 09393090
-% 09393100
- IF WHO:=XMAS.LINKC { 225 THEN 09393110
- BEGIN 09393120
- MOVE(30,GRINCH[XMAS.LINKR,WHO],GOT[0]); 09393130
- PUSHER:=XMAS + 30; 09393140
- END 09393150
- ELSE BEGIN 09393160
- MOVE(WHAT:=256-WHO,GRINCH[XMAS.LINKR,WHO],GOT[0]); 09393170
- XMAS:=XMAS + WHAT; 09393180
- MOVE(WHO:=30-WHAT, GRINCH[XMAS.LINKR,0], GOT[WHAT]); 09393190
- PUSHER:=XMAS + WHO; 09393200
- END; 09393220
- END PUSHER; 09393230
- PROCEDURE PUSHEE(GRINCH,N,B,Y); VALUE N,B,Y; REAL N,B,Y; 09393240
- ARRAY GRINCH[0,0]; 09393250
- BEGIN 09393260
- REAL I,J,X; 09393270
- DEFINE LINKR = [32:8]#; 09393280
- J:=Y; 09393290
- I:=B + N; 09393300
- WHILE B < I DO 09393310
- BEGIN 09393320
- IF Y:=B.LINKC { 225 THEN 09393330
- BEGIN 09393340
- MOVE(30,CODE(J),GRINCH[B.LINKR,Y]); 09393350
- J:=J + 30; 09393360
- B:=B + 30; 09393370
- END 09393380
- ELSE BEGIN 09393390
- MOVE(X:=256-Y,CODE(J),GRINCH[B.LINKR,Y]); 09393400
- B:=B + X; 09393410
- J:=J + X; 09393420
- MOVE(Y:=30-X,CODE(J),GRINCH[B.LINKR,0]); 09393430
- B:=B + Y; 09393440
- J:=J + Y; 09393450
- END; 09393460
- END; 09393470
- END PUSHEE; 09393480
-STREAM PROCEDURE FIXHDR(F,N); VALUE N; 09393700
- BEGIN SI~F; SI~SI-24; DS~LOC F; DS~WDS; 09393710
- SI~F; 14(SI~SI+8); DI~LOC F; DS~WDS; 09393720
- DI~F; DI~DI+38; SI~ LOC N; 09393730
- SI~SI+7; DS~CHR; 09393740
- END FIXHDR; 09393750
- LABEL EOF; 09394000
- IF NOT INTOG THEN 09394100
- BEGIN 09394200
- L~(L+3)DIV 4; COMMENT L~NUM. OF WORDS IN OUTER BLOCK;09395000
- FILL SAVINFO[0,*] WITH 09395100
- OCT7700000000000015, 09395200
- OCT0253010477527705, 09395300
- OCT0051000000000000, 09395400
- OCT0441070001000062; 09395500
- Q ~ -1; 09395700
- PUSHEE(SAVEINFO,L,4,5); 09396000
- SAVNDX:=L; 09397000
- END; 09397100
- REWIND(CODISK); 09398000
- DO BEGIN IF REED=0 THEN GO TO EOF; 09399000
- N~FETCH(MKABS(CODE(0)))-1; 09400000
- IF BOOLEAN(FETCH(MKABS(CODE(1)))) THEN 09401000
- BEGIN 09402000
- PUSHEE(SAVINFO,N,SAVNDX,1); 09402100
- SAVNDX:=SAVNDX +N; 09403000
- END ELSE BEGIN 09404000
- IF DECKTOG THEN 09405000
- STACKHEAD[Q~Q+1] ~ 1024|NONSAVNDX+N; 09405500
- PUSHEE(INFO,N,NONSAVNDX,1); 09406000
- NONSAVNDX:=((NONSAVNDX + N + 29)DIV 30)|30; 09407000
- END; 09408000
- END UNTIL FALSE; 09412000
- EOF: N~(SAVNDX+29) DIV 30; COMMENT NUMBER OF DISK SEGMENTS09413000
- OCCUPIED BY SAVE PROCEDURES AND ARRAYS; 09414000
- IF INTOG AND NOT DECKTOG THEN 09414010
- BEGIN % INTRINSIC FUNCTION OPTION 09414020
- FOR J:=USEROPINX STEP 2 UNTIL OPARSIZE DO % IS TIMESHARING SET 09414022
- IF OPTIONS[J] = "@TIMES" THEN 09414024
- BEGIN TSSTOG:=BOOLEAN(OPTIONS[J+1]); J:=OPARSIZE END; 09414026
- I ~ PRTBASE + 1; J ~ 0; 09414030
- DO IF GT1 ~ PRT[I] !0 THEN 09414040
- BEGIN 09414050
- J ~ J+1; 09414060
- SAVINFO[J.LINKR,J.LINKC] ~ 09414070
- 0>1[8:8:10] 09414080
- >1[33:18:15]; 09414090
- END UNTIL I:=I +1 } PRTIMAX; 09414100
- SAVINFO[0,0] ~ J; % # OF INTRINSICS 09414110
- SAVNDX ~ MAXINTRINSIC; 09414120
- END ELSE BEGIN 09414130
- I~PRTBASE; DO IF GT1~PRT[I]!0 THEN 09415000
- BEGIN IF GT1.[1:5]!LDES THEN 09415500
- BEGIN IF (GT1~GT1&(GT1.[33:15]+L)[33:33:15]).[6:2]!3 THEN 09416000
- GT1~GT1&(GT1.[18:15]+N)[18:33:15]; 09417000
- END; 09417500
- MDESC(GT1,SAVINFO[I.LINKR,I.LINKC]); 09418000
- END ELSE SAVINFO[I.LINKR,I.LINKC]:=0 UNTIL I:=I+1}PRTIMAX;09419000
- MDESC(0&1[2:47:1],SAVINFO[D,PRTBASE-1]); 09419100
- SAVNDX ~ 30 | N; 09420000
- END; 09420010
- I ~ 0; J ~ -1; 09420020
- 09420100
- IF NOT DECKTOG THEN 09421000
- BEGIN 09421500
- DO 09422000
- BEGIN 09423000
- I:=PUSHER(SAVINFO,ELBAT,I); 09424000
- J:=J + 1; 09425000
- WRITE(DISK,30,ELBAT[*]); 09425900
- END UNTIL I } SAVNDX; 09426000
- I:=0; 09427000
- WHILE I < NONSAVNDX DO 09427100
- BEGIN 09427200
- I:=PUSHER(INFO,ELBAT,I); 09427500
- J:=J + 1; 09428000
- WRITE(DISK,30,ELBAT[*]); 09429000
- END; 09430000
- N~IF INTOG THEN IF TSSTOG THEN 09430050
- TSSINTYPE ELSE DCINTYPE ELSE MCPTYPE; 09430060
- FIXHDR(DISK,N); 09430075
- LOCK(DISK,*); 09430100
- END ELSE 09431000
- BEGIN ELBAT[0]~0; I~16; 09432000
- DO BEGIN MOVE(8,SAVINFO[I.LINKR,I.LINKC],ELBAT[1]); 09433000
- ELBAT[9]~B2D(I+96)&1[11:47:1]&(I+96)[23:35:1]; 09434000
- WRITE(DECK,10,ELBAT[*]); 09435000
- END UNTIL I~I+8}SAVNDX; 09436000
- FILL ELBAT[*] WITH 0, 09437000
- OCT7500000000000012, 09438000
- OCT0004535530611765, 09439000
- OCT7006000404210435, 09440000
- OCT7700000000000015, 09441000
- OCT0253010477527705, 09442000
- OCT0051000004410046, 09443000
- OCT0441070001000062, 09444000
- OCT0040413100000000, 09445000
- OCT0001000000000101; 09446000
- WRITE(DECK,10,ELBAT[*]); 09447000
- ELBAT[0] ~0&REAL(DECKTOG)[1:19:17]; 09447010
- FOR I ~ 0 STEP 1 UNTIL Q DO 09447020
- BEGIN K ~ STACKHEAD[I].[23:15]; 09447030
- M ~ STACKHEAD[I].[38:10]; 09447040
- FOR J ~ 0 STEP 8 UNTIL M DO BEGIN 09447050
- MOVE(8,INFO[(J+K).LINKR,(J+K).LINKC], 09447060
- ELBAT [1]); 09447070
- ELBAT[9] ~ B2D(J)&"310"[1:31:17]; 09447080
- WRITE(DECK,10,ELBAT[*]) END; 09447090
- END; 09447100
- END END END PROGRAM; 09448000
- COMMENT THIS SECTION CONTAINS GENERATORS USED BY THE BLOCK ROUTINE; 10000000
- PROCEDURE DEFINEGEN(MACRO,J); VALUE MACRO,J; BOOLEAN MACRO; REAL J; 10228000
- BEGIN 10229000
- OWN INTEGER CHARCOUNT, REMCOUNT; 10230000
- COMMENT CHARCOUNT CONTAINS NUMBER OFCHARACTORS OF THE DEFINE THAT WE10231000
- HAVE PUT INTO INFO. REMCOUNT CONTAINS NUMBER OF CHARACT- 10232000
- ORS REMAINING IN THIS ROW OF INFO; 10233000
- PROCEDURE PUTOGETHER(CHAR); REAL CHAR; 10234000
- BEGIN 10235000
- STREAM PROCEDURE PACKINFO(INFO,ISKIP,COUNT,ASKIP,ACCUM); 10236000
- VALUE ISKIP,COUNT,ASKIP; 10237000
- BEGIN DI ~ INFO; DI ~ DI+ISKIP; 10238000
- SI ~ ACCUM;SI ~ SI+ASKIP; SI ~ SI+3; 10239000
- DS ~ COUNT CHR END PACKINFO; 10240000
- INTEGER COUNT,SKIPCOUNT; 10241000
- IF (COUNT ~ CHAR.[12:6]) + CHARCOUNT > 2047 10242000
- THEN BEGIN FLAG(142); TB1~ TRUE END 10243000
- ELSE BEGIN 10244000
- IF COUNT > REMCOUNT 10245000
- THEN BEGIN 10246000
- SKIPCOUNT ~ COUNT-(COUNT~REMCOUNT); 10247000
- REMCOUNT ~ 2047 END 10248000
- ELSE REMCOUNT ~ REMCOUNT-COUNT; 10249000
- GT1 ~ CHARCOUNT DIV 8 + NEXTINFO; 10250000
- PACKINFO(INFO[GT1.LINKR,GT1.LINKC],CHARCOUNT.[45:3], 10251000
- COUNT,0,CHAR); 10252000
- IF SKIPCOUNT ! 0 THEN 10253000
- PACKINFO(INFO[NEXTINFO.LINKR+1,0],0,SKIPCOUNT, 10254000
- COUNT,CHAR); 10255000
- CHARCOUNT ~ CHARCOUNT+SKIPCOUNT+COUNT END 10256000
- END PUTOGETHER; 10257000
- STREAM PROCEDURE SCAN(D,S,Q,N,J); VALUE J,N,Q; 10257100
- BEGIN DI~D;DI~DI+11;SI~S;SI~SI+3; 10257200
- IF N SC=DC THEN 10257300
- IF SC>"0" THEN 10257400
- BEGIN DI~LOC J; DI~DI+7; 10257500
- IF SC{DC THEN 10257600
- BEGIN J~SI;DI~J;SI~LOC Q;SI~SI+6;DS~CHR; 10257700
- DI~S;DI~DI+2;DS~CHR; 10257800
- END END END; 10257900
- INTEGER LASTRESULT; 10258000
- REAL K,N,ELCLASS; 10258100
- DEFINE I=NXTELBT#; 10258200
- LABEL FINAL,PACKIN; 10258300
- LABEL BACK,SKSC,EXIT; 10259000
- TB1~ FALSE; 10260000
- CHARCOUNT~(NEXTINFO-LASTINFO)|8; 10261000
- DEFINECTR ~ 1; LASTRESULT ~ 2; 10262000
- REMCOUNT ~ (256 - NEXTINFO MOD 256) | 8; 10263000
- NEXTINFO~LASTINFO; 10263100
- IF J!0 THEN N~TAKE(LASTINFO+1).[12:6]; 10263110
- K~0; 10263200
- BACK: STOPDEFINE~TRUE; 10263300
- ELCLASS~TABLE(NXTELBT); 10263400
- SKSC: NXTELBT~NXTELBT-1; 10263500
- IF MACRO THEN 10263600
- BEGIN IF ELCLASS=COMMA THEN 10263700
- IF K=0 THEN 10263800
- FINAL: BEGIN PUTOGETHER("1#0000"); GO TO EXIT END 10263900
- ELSE GO PACKIN; 10264000
- IF ELCLASS=LEFTPAREN OR ELCLASS=LFTBRKET THEN 10264100
- BEGIN K~K+1; GO TO PACKIN END; 10264200
- IF ELCLASS=RTPAREN OR ELCLASS=RTBRKET THEN 10264300
- IF K~K-1<0 THEN GO FINAL ELSE GO PACKIN; 10264400
- IF ELCLASS=SEMICOLON THEN 10264410
- BEGIN FLAG(142); GO TO FINAL END ELSE GO PACKIN 10264420
- END; 10264500
- IF J!0 THEN 10264600
- IF ACCUM[1].[12:6]-1=N THEN 10264700
- SCAN(INFO[LASTINFO. LINKR ,LASTINFO. LINKC], 10264800
- ACCUM[1],N+770,N,J); 10264900
- PACKIN: 10264910
- IF RESULT = 4 10265000
- THEN BEGIN 10266000
- COMMENT INSERT " MARKS - 2130706432 IS DECIMAL FOR 1"0000; 10267000
- PUTOGETHER(2130706432); 10268000
- PUTOGETHER(ACCUM[1]); 10269000
- PUTOGETHER(2130706432) END 10270000
- ELSE BEGIN 10271000
- IF BOOLEAN(RESULT) AND BOOLEAN(LASTRESULT) 10272000
- THEN PUTOGETHER("1 0000"); COMMENT INSERT BLANK; 10273000
- PUTOGETHER(ACCUM[1]) END; 10274000
- IF TB1 THEN GO TO EXIT; 10275000
- LASTRESULT ~ RESULT; 10276000
- IF MACRO THEN GO BACK; 10276500
- IF ELCLASS=DECLARATORS AND ELBAT[I].ADDRESS = DEFINEV10277000
- THEN BEGIN DEFINECTR ~ DEFINECTR+1; GO BACK END; 10278000
- IF ELCLASS ! CROSSHATCH THEN GO BACK; 10279000
- IF DEFINECTR ! 1 10280000
- THEN BEGIN STOPDEFINE ~ TRUE; 10281000
- IF ELCLASS~TABLE(I)!COMMA THEN 10282000
- DEFINECTR~DEFINECTR-1; GO SKSC END; 10283000
- EXIT: DEFINECTR~ 0; 10284000
- NEXTINFO ~(CHARCOUNT+7) DIV 8+NEXTINFO; 10285000
- END DEFINEGEN; 10286000
- PROCEDURE DBLSTMT; 12002000
- BEGIN 12003000
- REAL S,T; 12004000
- LABEL L1,L2,L3,EXIT; 12005000
- S~0; 12006000
- IF STEPI!LEFTPAREN THEN ERR(281) 12007000
- ELSE 12008000
- L1: BEGIN 12009000
- IF STEPI=COMMA THEN 12010000
- BEGIN 12011000
- DPTOG~TRUE; 12012000
- IF STEPI=ADOP THEN STEPIT; 12013000
- EMITNUM(NLO); 12014000
- EMITNUM(IF ELBAT[I-1].ADDRESS =SUB THEN -NHI ELSE NHI); 12015000
- DPTOG~FALSE; 12016000
- STEPIT; 12017000
- GO TO L2; 12018000
- END; 12019000
- IF TABLE(I+1)=COMMA THEN 12020000
- BEGIN 12021000
- IF ELCLASS=ADOP OR ELCLASS=MULOP THEN 12022000
- BEGIN 12023000
- EMITO(ELBAT[I].ADDRESS+1); 12024000
- IF S~S-1{0 THEN FLAG(282); STEPIT; 12025000
- GO TO L3; 12026000
- END; 12027000
- IF ELCLASS=ASSIGNOP THEN 12028000
- BEGIN 12029000
- IF S!1 THEN FLAG(283); S~0; STEPIT; 12030000
- DO 12031000
- BEGIN 12032000
- IF ELCLASS !COMMA THEN BEGIN ERR(284);GO EXIT END; 12033000
- STEPIT; 12034000
- IF ELCLASS{INTID AND ELCLASS}REALID THEN 12035000
- BEGIN EMITN(ELBAT[I].ADDRESS); STEPIT END 12036000
- ELSE VARIABLE(FL); 12037000
- EMITO(STD) END UNTIL S~S+1=2 ; 12038000
- IF ELCLASS!RTPAREN THEN ERR(285) ELSE STEPIT; 12039000
- GO TO EXIT; 12040000
- END; 12041000
- IF ELCLASS{INTID AND ELCLASS}BOOID THEN 12042000
- BEGIN 12043000
- CHECKER(T~ELBAT[I]); 12044000
- STEPIT;STEPIT; 12045000
- AEXP; 12046000
- EMITV(T.ADDRESS); 12047000
- GO TO L2; 12048000
- END; 12049000
- END ; 12050000
- AEXP; 12051000
- IF ELCLASS!COMMA THEN BEGIN ERR(284);GO EXIT 12052000
- END; 12053000
- STEPIT; AEXP; EMITO(XCH); 12054000
- L2: S~S+1; 12055000
- L3: IF ELCLASS!COMMA THEN BEGIN ERR(284);GO TO EXIT END; 12056000
- GO TO L1; 12057000
- EXIT:END 12058000
- END DBLSTMT; 12059000
- REAL PROCEDURE FIXDEFINEINFO(T); VALUE T; REAL T; 12101000
- BEGIN REAL K,S,P,J,EL; 12102000
- STREAM PROCEDURE SET(S,D,K,E); VALUE K,E; 12103000
- BEGIN SI~S;SI~SI+11;DI~D;DI~DI+3;DS~K CHR; 12104000
- SI~LOC E; SI~SI+6; DS~2 CHR; 12105000
- END; 12106000
- MACROID~TRUE; 12107000
- P~(FIXDEFINEINFO~T).ADDRESS; 12108000
- K~COUNT; 12109000
- S~SCRAM; 12110000
- STREAMTOG~TRUE & STREAMTOG[1:3:45] ; 12110100
- STOPDEFINE~TRUE; 12111000
- EL~TABLE(NXTELBT); 12112000
- NXTELBT~NXTELBT-1; 12113000
- IF EL!LEFTPAREN AND EL!LFTBRKET THEN 12114000
- FLAG(141); 12115000
- ELSE DO BEGIN J~J+1; 12116000
- SET(INFO[T.LINKR,T.LINKC],ACCUM[1],K,64|J+12); 12117000
- ACCUM[1].[12:6]~K+2; 12118000
- ACCUM[0]~0; 12119000
- ACCUM[0].CLASS~DEFINEDID; 12120000
- COUNT~K+2; 12121000
- SCRAM~ACCUM[1] MOD 125; 12122000
- E; 12123000
- DEFINEGEN(TRUE,0); 12124000
- END UNTIL EL~ELBAT[NXTELBT].CLASS!COMMA; 12125000
- IF EL!RTPAREN AND EL!RTBRKET OR J!P THEN FLAG(141); 12126000
- MACROID~FALSE; 12127000
- STREAMTOG~STREAMTOG.[1:45] ; 12127100
- END; 12128000
- PROCEDURE SCATTERELBAT; 13197000
- BEGIN 13198000
- REAL T; 13199000
- T ~ ELBAT[I]; 13200000
- KLASSF ~ T.CLASS; 13201000
- FORMALF ~ BOOLEAN(T.FORMAL); 13202000
- VONF ~ BOOLEAN(T.VO); 13203000
- LEVELF ~ T.LVL; 13204000
- ADDRSF ~ T.ADDRESS; 13205000
- INCRF ~ T.INCR; 13206000
- LINKF ~ T.LINK; 13207000
- END SCATTERELBAT; 13208000
-PROCEDURE CHKSOB; 13209000
- IF GTA1[J~J-1]!0 THEN FLAG(23); 13210000
-DEFINE 13211000
- ADDC=532480#, 13212000
- SUBC=1581056#, 13213000
- EMITSTORE=EMITPAIR#; 13214000
- PROCEDURE PURGE(STOPPER); 13215000
- VALUE STOPPER; 13216000
- REAL STOPPER; 13217000
- BEGIN 13218000
- INTEGER POINTER; 13219000
- LABEL RECOV; DEFINE ELCLASS = KLASSF#; 13220000
- REAL J,N,OCR,TL,ADD; 13221000
- POINTER~LASTINFO; 13222000
- WHILE POINTER } STOPPER 13223000
- DO 13224000
- BEGIN 13225000
- IF ELCLASS~(GT1~TAKE(POINTER)).CLASS=NONLITNO 13226000
- THEN BEGIN 13227000
- NCII~NCII-1; 13228000
- EMITNUM(TAKE(POINTER+1)); 13229000
- EMITSTORE(MAXSTACK,STD); 13230000
- MAXSTACK~(G~MAXSTACK)+1; 13231000
- J~L; L~GT1.LINK; 13232000
- DO 13233000
- BEGIN 13234000
- GT4~GET(L); 13235000
- EMITV(G) 13236000
- END 13237000
- UNTIL (L~GT4)=4095; 13238000
- L~J; 13239000
- POINTER~POINTER-GT1.INCR 13240000
- END 13241000
- ELSE 13242000
- BEGIN 13243000
- IF NOT BOOLEAN(GT1.FORMAL) 13244000
- THEN BEGIN 13245000
- IF ELCLASS = LABELID 13246000
- THEN BEGIN 13247000
- ADD ~ GT1.ADDRESS; 13248000
- IF NOT BOOLEAN(OCR~TAKE(GIT(POINTER))).[1:1] 13249000
- THEN IF OCR.[36:12] ! 0 OR ADD ! 0 13250000
- THEN BEGIN GT1 ~ 160; GO TO RECOV END; 13251000
- IF ADD ! 0 THEN 13252000
- PROGDESCBLDR(ADD,TRUE,OCR.[36:10],LDES) END 13252500
- ELSE IF FALSE 13253000
- THEN BEGIN 13254000
- IF TAKE(POINTER+1) < 0 13255000
- THEN BEGIN GT1 ~ 162; GO TO RECOV END; 13256000
- OCR ~(J ~ TAKE(GIT(POINTER))).[24:12]; 13257000
- N ~ GET( (J~J.[36:12])+4); TL ~ L; 13258000
- IF ADD ~ GT1.ADDRESS ! 0 13259000
- THEN BEGIN 13260000
- 13261000
- IF OCR ! 0 13262000
- THEN BEGIN L~OCR-2; CALLSWITCH(POINTER); EMITO(BFW);END; 13263000
- L~J+11; EMITL(15); EMITO(RTS); 13264000
- FOR J ~ 4 STEP 4 UNTIL N 13265000
- DO BEGIN 13266000
- EMITL(GNAT(GET(L)|4096+GET(L+1))); 13267000
- EMITO(RTS) END END 13268000
- ELSE BEGIN 13269000
- L ~ J+13; 13270000
- FOR J ~ 4 STEP 4 UNTIL N 13271000
- DO BEGIN 13272000
- GT1 ~ GET(L)|4096+GET(L+1); 13273000
- GOGEN(GT1,BFW) END;END; 13274000
- L ~ TL END 13277000
- ELSE IF ELCLASS } PROCID AND ELCLASS { INTPROCID 13278000
- THEN IF TAKE(POINTER+1) < 0 13279000
- THEN BEGIN GT1 ~ 161; 13280000
- RECOV: MOVE(9,INFO[POINTER.LINKR,POINTER.LINKC],ACCUM);13281000
- Q ~ ACCUM[1]; FLAG(GT1); ERRORTOG ~ TRUE END 13282000
- END; 13283000
- GT2~TAKE(POINTER+1); 13284000
- GT3~GT2.PURPT; 13285000
- STACKHEAD[(0>2[12:12:36])MOD 125]~TAKE(POINTER).LINK; 13286000
- POINTER~POINTER-GT3 13287000
- END 13288000
- END ; 13289000
- LASTINFO~POINTER; 13290000
- NEXTINFO~STOPPER 13291000
- END; 13292000
-PROCEDURE E; 13293000
-COMMENT 13294000
- E IS THE PROCEDURE WHICH PLACES AN ENTRY IN INFO AND 13295000
- HOOKS IT INTO STACKHEAD. THE PREVIOUS STACKHEAD LINK 13296000
- IS SAVED IN THE LINK OF THE ELBAT WORD IN THE NEW ENTRY 13297000
- E PREVENTS AN ENTRY FROM OVERFLOWING A ROW,STARTING AT THE 13298000
- BEGINNING OF THE NEXT ROW IF NECESSARY ;13299000
- BEGIN 13300000
- REAL WORDCOUNT,RINX; 13301000
- IF RINX~(NEXTINFO+WORDCOUNT~(COUNT+18)DIV 8 ).LINKR ! 13302000
- NEXTINFO.LINKR 13303000
-THEN BEGIN PUT(125&(RINX|256-NEXTINFO)[27:40:8],NEXTINFO); 13304000
- NEXTINFO~256|RINX END; 13305000
- IF SPECTOG THEN 13305100
- IF NOT MACROID THEN 13305200
- UNHOOK; 13305300
- 13306000
- ACCUM[0].INCR~WORDCOUNT; 13307000
- IF NOT INLINETOG OR MACROID THEN BEGIN 13307500
- ACCUM[0].LINK ~STACKHEAD[SCRAM];STACKHEAD[SCRAM]~NEXTINFO; 13308000
- END; 13308500
- ACCUM[1].PURPT~NEXTINFO-LASTINFO; 13309000
-MOVE(WORDCOUNT,ACCUM,INFO[NEXTINFO.LINKR,NEXTINFO.LINKC]); 13310000
- LASTINFO~NEXTINFO; 13311000
- NEXTINFO~NEXTINFO+WORDCOUNT 13312000
- END; 13313000
-PROCEDURE ENTRY(TYPE); 13314000
- VALUE TYPE; 13315000
- REAL TYPE; 13316000
-COMMENT 13317000
- ENTRY ASSUMES THAT I IS POINTING AT AN IDENTIFIER WHICH 13318000
- IS BEING DECLARED AND MAKES UP THE ELBAT ENTRY FOR IT 13319000
- ACCORD TO TYPE .IF THE ENTRY IS AN ARRAY AND NOT 13320000
- A SPECIFICATION THEN A DESCRIPTOR IS PLACED IN THE STACK 13321000
- FOR THE UPCOMING COMMUNICATE TO GET STORAGE FOR THE ARRAY(S) ;13322000
- BEGIN 13323000
- J~0;I~I-1; 13324000
- DO 13325000
- BEGIN 13326000
- STOPDEFINE ~TRUE; STEPIT; SCATTERELBAT; 13327000
- IF FORMALF~SPECTOG 13328000
- THEN 13329000
- BEGIN 13330000
- IF ELCLASS!SECRET 13331000
- THEN FLAG(002); 13332000
- BUP~BUP+1 13333000
-; KLASSF~TYPE;MAKEUPACCUM; E;J~J+1; 13333500
- END 13334000
- ELSE 13335000
- BEGIN 13336000
- IF ELCLASS>IDMAX 13337000
- THEN IF ELCLASS= POLISHV THEN ELCLASS~TYPE ELSE FLAG(3); 13338000
- IF LEVELF=LEVEL 13339000
- THEN FLAG(001); 13340000
- VONF~P2; 13341000
- FORMALF~PTOG; 13341100
- KLASSF~TYPE; MAKEUPACCUM;E; J~J+1; 13342000
- IF ((FORMALF~PTOG) OR(STREAMTOG AND NOT STOPGSP)) AND NOT P2 13343000
- THEN ADDRSF~PJ~PJ+1 13344000
- ELSE IF STOPGSP 13345000
- THEN ADDRSF~0 13346000
- ELSE ADDRSF:=GETSPACE(P2,LASTINFO+1); 13347000
- PUT(TAKE(LASTINFO)& ADDRSF[16:37:11],LASTINFO); 13348000
- END END 13349000
- 13350000
- UNTIL STEPI!COMMA OR STOPENTRY; GTA1[0]~J 13351000
- END; 13352000
- PROCEDURE UNHOOK; 13353000
-COMMENT 13354000
- UNHOOK ASSUMES THAT THE WORD IN ELBAT[I] POINTS TO A PSUEDO ENTRY 13355000
- FOR APARAMETER.ITS JOB IS TO UNHOOK THAT FALSE ENTRY SO THAT 13356000
- E WILL WORK AS NORMAL. ;13357000
- BEGIN 13358000
- REAL LINKT,A,LINKP; 13359000
- LABEL L; 13360000
- LINKT~STACKHEAD[SCRAM] ; LINKP~ELBAT[I].LINK; 13361000
- IF LINKT=LINKP THEN STACKHEAD[SCRAM]~TAKE(LINKT).LINK 13362000
- ELSE 13363000
- L: IF A~TAKE(LINKT).LINK=LINKP 13364000
- THEN PUT((TAKE(LINKT))&(TAKE(A))[35:35:13],LINKT) 13365000
- ELSE BEGIN LINKT~A; GO TO L END; 13366000
- END; 13367000
-PROCEDURE MAKEUPACCUM; 13368000
- BEGIN 13369000
- IF PTOG 13370000
- THEN GT1~LEVELF ELSE GT1~LEVEL; 13371000
- ACCUM[0]~ ABS(ELBAT[I] & KLASSF[2:41:7] & REAL(FORMALF)[9:47:1] 13372000
- & REAL(VONF)[10:47:1] & GT1[11:43:5] &ADDRSF[16:37:11]13373000
- ) 13374000
- END; 13375000
-PROCEDURE ARRAE; 13376000
- BEGIN 13377000
- INTEGER SAVEINFO; 13378000
- LABEL BETA1; 13379000
- TYPEV~REALARRAYID; 13380000
- IF T1~GTA1[J~J-1]=0 THEN J~J+1; 13381000
- ELSE 13382000
- IF T1=OWNV THEN 13383000
- BEGIN 13384000
- P2~TRUE;IF SPECTOG THEN 13385000
- FLAG(13) 13386000
- END 13387000
- ELSE 13388000
- TYPEV~REALARRAYID+T1-REALV; 13389000
- BETA1: ENTER(TYPEV); 13390000
- IF ELCLASS!LFTBRKET THEN FLAG(16); 13391000
- IF STEPI=LITNO THEN 13392000
- BEGIN 13393000
- SAVEINFO~ELBAT[I].ADDRESS; 13394000
- IF STEPI!RTBRKET THEN FLAG(53); 13395000
- FILLSTMT(SAVEINFO); 13396000
-SAVEINFO~1; 13397000
- END 13398000
- ELSE 13399000
- BEGIN IF ELCLASS!ASTRISK THEN FLAG(56); 13400000
- SAVEINFO~1; 13401000
- WHILE STEPI!RTBRKET DO 13402000
- BEGIN IF ELCLASS!COMMA AND 13403000
- STEPI!ASTRISK THEN FLAG(56); 13404000
- SAVEINFO~SAVEINFO+1 13405000
- END;STEPIT; 13406000
- 13407000
-END; PUT(TAKE(LASTINFO)&SAVEINFO[27:40:8],LASTINFO); 13408000
-J ~ 1 ; GTA1[0] ~ 0 ; 13408500
-IF ELCLASS=COMMA THEN BEGIN STEPIT;GO TO BETA1 END 13409000
- END ARRAE; 13410000
- PROCEDURE PUTNBUMP(X); 13589000
- VALUE X; 13590000
- REAL X; 13591000
- BEGIN 13592000
- INFO[NEXTINFO.LINKR,NEXTINFO.LINKC]~X; 13593000
- NEXTINFO~NEXTINFO+1 13594000
- END ; 13595000
- PROCEDURE JUMPCHKX; 13596000
-COMMENT THIS PROCEDURE IS CALLED AT THE START OF ANY EXECUTABLE CODE 13597000
- WHICH THE BLOCK MIGHT EMIT.IT DETERMINES WHETHER ANY JUMPS 13598000
- ARROUND NONEXECUTABLE CODE MAY BE WAITING AND WHETHER IT 13599000
- IS THE FIRST EXECUTABLE CODE; 13600000
-IF NOT SPECTOG THEN 13601000
-BEGIN 13602000
- IF AJUMP 13603000
- THEN 13604000
- BEGIN ADJUST; 13605000
- EMITB(BFW,SAVEL,L) 13606000
- END ELSE 13607000
- IF FIRSTX=4095 13608000
- THEN 13609000
- BEGIN 13610000
- ADJUST; 13611000
- FIRSTX~L; 13612000
- END; 13613000
- AJUMP~FALSE 13614000
-END; 13615000
- PROCEDURE JUMPCHKNX; 13616000
-COMMENT JUMPCHKNX DETERMINES WHETHER ANY EXECUTABLE CODE HAS BEEN 13617000
- EMITTED AND IF SO WHETHER IT WAS JUST PREVIOUS TO THE 13618000
- NON EXECUTABLE ABOUT TO BE EMITTED.IF BOTH THEN L IS BUMPED 13619000
- AND SAVED FOR A LATER BRANCH; 13620000
-IF NOT SPECTOG THEN 13621000
-BEGIN 13622000
- IF FIRSTX!4095 13623000
- THEN 13624000
- BEGIN 13625000
- IF NOT AJUMP 13626000
- THEN 13627000
- SAVEL~BUMPL; 13628000
- AJUMP~TRUE 13629000
- END;ADJUST 13630000
-END; 13631000
-PROCEDURE SEGMENTSTART(SAVECODE);VALUE SAVECODE;BOOLEAN SAVECODE; 13632000
- BEGIN 13632100
- STREAM PROCEDURE PRINT(SAVECODE,ADR,FIEL); VALUE SAVECODE,ADR; 13633000
- BEGIN 13634000
- LABEL L1; 13635000
- DI:=FIEL; DS:=8 LIT" "; 13636000
- SI:=FIEL; DS:=9 WDS; DI:=DI-3; 13637000
- SAVECODE(DS:=38 LIT "START OF SAVE SEGMENT; BASE ADDRESS = "; 13638000
- JUMP OUT TO L1); 13639000
- DS:=38 LIT " START OF REL SEGMENT; DISK ADDRESS = "; 13640000
-L1: 13641000
- SI:=LOC ADR; DS:=5 DEC; 13642000
- END PRINT; 13643000
- MOVE(1,SAVECODE,CODE(0)); 13651000
- IF SAVECODE AND INTOG AND NOT DECKTOG THEN FLAG(57); 13651100
- IF LISTER OR SEGSTOG THEN 13652000
- BEGIN 13652500
- PRINT(SAVECODE,IF SAVECODE THEN CORADR ELSE DISKADR,LIN[*]); 13653000
- IF NOHEADING THEN DATIME; WRITELINE; 13653500
- END; 13654000
- END SEGMENTSTART; 13655000
-PROCEDURE SEGMENT(SIZE,FR); VALUE SIZE,FR; INTEGER SIZE,FR; 13657000
- BEGIN 13660000
- STREAM PROCEDURE PRINT(SIZE,FIEL); VALUE SIZE; 13661000
- BEGIN 13663000
- DI:=FIEL; DS:=8 LIT" "; 13665000
- SI:=FIEL; DS:=14 WDS; 13667000
- DI:=DI-16; DS:=6 LIT"SIZE= "; 13668000
- SI:=LOC SIZE; DS:=4 DEC; DS:=6 LIT" WORDS" 13670000
- END PRINT; 13673000
- STREAM PROCEDURE DOIT(C,A,I,S,F,W); VALUE C,A,F,W; 13673100
- BEGIN LOCAL N; 13673150
- DI:=S; DS:=8 LIT" "; SI:=S; DS:=9 WDS; 13673200
- DI:=DI-8; SI:=LOC W; DS:=4 DEC; 13673250
- SI:=I; SI:=SI+10;DI:=LOC N; DI:=DI+7; DS:=CHR; 13673300
- DI:=S; SI:=LOC F; SI:=SI+7; DS:=CHR; SI:=LOC C; 13673350
- DS:=3 DEC; DS:=4 DEC;SI:=I; SI:=SI+11;DS:=N CHR; 13673400
- END DOIT; 13673450
- IF LISTER OR SEGSTOG THEN 13674000
- BEGIN 13674500
- PRINT(SIZE,LIN[*]); 13675000
- IF NOHEADING THEN DATIME; WRITELINE; 13676000
- END; 13677000
- IF STUFFTOG THEN IF FR>0 THEN IF LEVEL>1 THEN 13677100
- BEGIN 13677150
- KLASSF:=TAKE(PROINFO).CLASS; 13677200
- IF FR > 1024 THEN FR~FR-1024; 13677250
- DOIT(KLASSF,FR,INFO[PROINFO.LINKR,PROINFO.LINKC], 13677300
- TWXA[0],SAF,SIZE); 13677400
- WRITE(STUFF,10,TWXA[*]); 13677500
- END; 13677600
- IF SIZE>SEGSIZEMAX THEN SEGSIZEMAX:=SIZE; 13678000
- END SEGMENT; 13681000
- STREAM PROCEDURE MOVECODE(EDOC,TEDOC); 13683000
- BEGIN LOCAL T1,T2,T3; 13684000
- SI~EDOC;T1~SI; 13685000
- SI~TEDOC;T2~SI; 13686000
- SI~LOC EDOC; 13687000
- SI~SI+3; 13688000
- DI~LOC T3; 13689000
- DI~DI+5; 13690000
- SKIP 3 DB; 13691000
- 15(IF SB THEN DS~ 1 SET ELSE DS~1 RESET;SKIP 1 SB); 13692000
- SI~ LOC EDOC; 13693000
- DI~ LOC T2; 13694000
- DS~ 5 CHR; 13695000
- 3(IF SB THEN DS~1 SET ELSE DS~1 RESET;SKIP 1 SB); 13696000
- DI~T3; 13697000
- SI~LOC T2; 13698000
- DS~WDS; 13699000
- DI~LOC T3; 13700000
- DI~DI+5; 13701000
- SKIP 3 DB; 13702000
- SI~LOC EDOC; 13703000
- SI~SI+3; 13704000
- 15(IF SB THEN DS~1 SET ELSE DS~ 1 RESET;SKIP 1 SB); 13705000
- SI~ LOC TEDOC; 13706000
- DI~ LOC T1; 13707000
- DS~ 5 CHR; 13708000
- 3(IF SB THEN DS~1 SET ELSE DS~1 RESET;SKIP 1 SB); 13709000
- DI~T3; 13710000
- SI~LOC T1; 13711000
- DS~WDS; 13712000
- END; 13713000
- PROCEDURE ENTER(TYPE); 13714000
- VALUE TYPE; 13715000
- REAL TYPE; 13716000
- BEGIN 13717000
- G~GTA1[J~J-1]; 13718000
- IF NOT SPECTOG 13719000
- THEN 13720000
- BEGIN 13721000
- IF NOT P2 13722000
- THEN IF P2~(G=OWNV) 13723000
- THEN G~GTA1[J~J-1]; 13724000
- IF NOT P3 13725000
- THEN IF P3~(G=SAVEV) 13726000
- THEN G~GTA1[J~J-1] 13727000
- END; 13728000
- IF G!0 THEN FLAG(25) ELSE ENTRY(TYPE) 13729000
- END; 13730000
-PROCEDURE HTTEOAP(GOTSTORAGE,RELAD,STOPPER,PRTAD); 13731000
- VALUE GOTSTORAGE,RELAD,STOPPER,PRTAD; 13732000
- BOOLEAN GOTSTORAGE; 13733000
- REAL RELAD,STOPPER,PRTAD; 13734000
- BEGIN 13735000
- IF FUNCTOG 13736000
- THEN 13737000
- BEGIN 13738000
- EMITV(513); 13739000
- EMITO(RTN) 13740000
- END 13741000
- ELSE 13742000
- EMITO(XIT); 13743000
- CONSTANTCLEAN; 13744000
- PURGE(STOPPER); 13745000
- MOVE(1,CODE(0),Z); PROGDESCBLDR(PRTAD,BOOLEAN(Z),(L+3)DIV 4,PDES); 13746000
- END HTTEOAP; 13747000
-PROCEDURE INLINE; 13748000
- BEGIN 13749000
- INTEGER SN,LN,P,LS,J; BOOLEAN MKST; 13750000
- BOOLEAN FLIPFLOP; 13750500
- INTEGER PN; 13750600
- LABEL L1,L2,L3; 13751000
- PN~1 ; 13751100
- FLIPFLOP~INLINETOG~TRUE;P~0;MKST~FALSE;LS~L;EMITO(NOP); 13752000
- IF STEPI!LEFTPAREN THEN FLAG(59); 13753000
- IF TABLE(I+1)=COLON THEN BEGIN STEPIT;GO TO L2 END ; 13753100
-L1: IF STEPI>IDMAX THEN BEGIN FLAG(465); GO TO L2 END ; 13754000
- ACCUM[0]~0&P[16:37:11]&LOCLID[2:41:7]&SCRAM[35:35:13]; 13755000
- E;IF FLIPFLOP THEN BEGIN FLIPFLOP~FALSE;LN~SN~LASTINFO END; 13755500
- IF STEPI=COMMA OR ELCLASS=COLON OR ELCLASS=RTPAREN 13756000
- THEN BEGIN I~I-2;STEPIT END 13757000
- ELSE IF ELCLASS!ASSIGNOP THEN FLAG(60) ELSE STEPIT; 13758000
- AEXP; 13759000
- L2: IF ELCLASS=COLON THEN 13760000
- BEGIN IF MKST THEN FLAG(99); MKST~TRUE; EMITO(MKS); P~P+2; 13761000
- IF TABLE(I+1)!RTPAREN THEN GO TO L1; STEPIT 13761100
- ;PN~2; 13761110
- END ELSE P~P+1; 13761200
- IF ELCLASS=COMMA THEN GO TO L1; 13762000
- IF ELCLASS!RTPAREN THEN FLAG(61); 13763000
- IF NOT MKST THEN 13764000
- BEGIN J~L;L~LS;EMITO(MKS);L~J END; 13765000
- IF STEPI ! SEMICOLON THEN FLAG(62); 13766000
- EMITO(584); 13766100
- 13766200
- 13766300
- 13766400
- 13766500
- L3:ELBAT[I]~TAKE(SN);SCATTERELBAT;ADDRSF~P-ADDRSF; 13767000
- PUT(ELBAT[I]&ADDRSF[16:37:11]&STACKHEAD[LINKF][33:33:15],SN); 13768000
- STACKHEAD[LINKF]~SN; SN~SN+INCRF; 13769000
- IF ADDRSF!PN THEN GO TO L3 ; 13770000
- INLINETOG~ FALSE; 13770500
- PN~NEXTINFO; 13770600
- STREAMTOG~TRUE;STREAMWORDS;IF STEPI!BEGINV THEN STREAMSTMT 13771000
- ELSE BEGIN STEPIT;COMPOUNDTAIL END; 13772000
- STREAMTOG~FALSE;PURGE(PN);STREAMWORDS;PURGE(LN);EMITL(16); 13773000
- 13773500
-END INLINE; 13774000
- COMMENT THIS SECTION CONTAINS THE BLOCK ROUTINE ; 14000000
-PROCEDURE BLOCK(SOP); 14001000
- VALUE SOP; 14002000
- BOOLEAN SOP; 14003000
-COMMENT SOP IS TRUE IF THE BLOCK WAS CALLED BY ITSELF THROUGH THE 14004000
- PROCEDURE DECLARATION-OTHERWISE IT WAS CALLED BY STATEMENT. 14005000
- THE BLOCK ROUTINE IS RESPONSIBLE FOR HANDLING THE BLOCK 14006000
- STRUCTURE OF AN ALGOL PROGRAM-SEGMENTING EACH BLOCK,HANDLING 14007000
- ALL DECLARATIONS,DOING NECESSARY BOOKKEEPING REGARDING EACH 14008000
- BLOCK, AND SUPPLYING THE SCANNER WITH ALL NECESSARY INFORMATION 14009000
- ABOUT DECLARED IDENTIFIERS. 14010000
- IT ALSO WRITES EACH SEGMENT ONTO THE PCT; 14011000
-BEGIN 14012000
- LABEL OWNERR,SAVERR,BOOLEANDEC,REALDEC,ALPHADEC,INTEGERDEC, 14013000
- LABELDEC,DUMPDEC,SUBDEC,OUTDEC,INDEC,MONITORDEC, 14014000
- SWITCHDEC,PROCEDUREDEC,ARRAYDEC,NAMEDEC,FILEDEC, 14015000
- GOTSCHK, 14016000
- STREAMERR,DEFINEDEC,CALLSTATEMENT,HF,START; 14017000
- SWITCH DECLSW ~ OWNERR,SAVERR,BOOLEANDEC,REALDEC,INTEGERDEC,ALPHADEC, 14018000
- LABELDEC,DUMPDEC,SUBDEC,OUTDEC,INDEC,MONITORDEC, 14019000
- SWITCHDEC,PROCEDUREDEC,ARRAYDEC,NAMEDEC,FILEDEC, 14020000
- STREAMERR,DEFINEDEC; 14021000
-DEFINE NLOCS=10#,LOCBEGIN=PRTI#, 14022000
- LBP=[36:12]#, 14023000
- SPACEITDOWN = BEGIN WRITE(LINE[DBL]); WRITE(LINE[DBL]) END#; 14023100
- 14024000
-BOOLEAN GOTSTORAGE; 14025000
- INTEGER PINFOO,BLKAD; 14026000
- COMMENT LOCAL TO BLOCK TO SAVE WHERE A PROCEDURE IS EMTERED 14027000
- IN INFO; 14028000
-REAL MAXSTACKO,LASTINFOT,RELAD,LO,TSUBLEVEL,STACKCTRO; 14029000
-INTEGER SGNOO,LOLD,SAVELO,PRTIO,NINFOO; 14030000
- INTEGER NCIIO; 14031000
- INTEGER PROAD ; 14032000
- INTEGER FIRSTXO; 14033000
-BOOLEAN FUNCTOGO,AJUMPO; 14034000
- BEGINCTR~BEGINCTR+1; 14035000
- IF SOP 14036000
- THEN BEGIN BLKAD~PROADD; 14037000
- IF LASTENTRY ! 0 14038000
- THEN BEGIN GT1~BUMPL; 14039000
- CONSTANTCLEAN; 14040000
- EMITB(BFW,GT1,L) 14041000
- END 14042000
- END 14043000
- ELSE BEGIN BLKAD:=GETSPACE(TRUE,-6); % SEG. DESCR. 14044000
- 14045000
- 14046000
- 14047000
- END; 14048000
- 14049000
- 14050000
- FIRSTXO~FIRSTX; 14051000
- FIRSTX~0; 14052000
- LEVEL~LEVEL+1; 14053000
- LOLD~L;FUNCTOGO~FUNCTOG;AJUMPO~AJUMP;PRTIO~PRTI;SGNOO~SGNO; 14054000
- SAVELO~SAVEL;AJUMP~FALSE; L~0;NINFOO~NEXTINFO; 14055000
- NCIIO~NCII; 14056000
- NCII~0; 14057000
- STACKCTRO~STACKCTR; 14058000
- 14059000
- 14061000
- ELBAT[I].CLASS~SEMICOLON; 14062000
-START: IF TABLE(I)!SEMICOLON 14063000
- THEN 14064000
- BEGIN 14065000
- FLAG(0); 14066000
- I~I-1 14067000
- END; 14068000
- GTA1[0]~J~0; 14069000
- IF SPECTOG 14070000
- THEN 14071000
- BEGIN 14072000
- IF BUP=PJ 14073000
- THEN 14074000
- BEGIN 14075000
- BEGIN LABEL GETLP; 14076000
- IF STREAMTOG THEN F~0 ELSE 14077000
- F~FZERO; 14078000
- BUP~LASTINFO; 14079000
- DO 14080000
- BEGIN 14081000
- IF NOT STREAMTOG THEN 14082000
- BUP~LASTINFO; 14083000
- GETLP: G~TAKE(BUP); 14084000
- IF K~G.ADDRESS!PJ 14085000
- THEN 14086000
- BEGIN 14087000
- IF BUP ! BUP:=BUP- TAKE(BUP + 1).PURPT THEN 14088000
- GO TO GETLP 14089000
- END; 14090000
- TYPEV~G.CLASS; 14091000
- G.ADDRESS~F~F+1; 14115000
- PUT(G,BUP); G.INCR~GT1; 14116000
- PUT(G,MARK+PJ) 14117000
- ;BUP~BUP-TAKE(BUP+1).PURPT 14118000
- END 14119000
- UNTIL PJ~PJ-1=0 14120000
- END; 14121000
- SPECTOG~FALSE; 14122000
- GO TO HF 14123000
- END 14124000
- END; 14125000
- STACKCT ~ 0; 14125500
- WHILE STEPI=DECLARATORS 14126000
- DO 14127000
- BEGIN 14128000
- GTA1[J~J+1]~ELBAT[I].ADDRESS; 14129000
- STOPDEFINE~ERRORTOG~TRUE; 14130000
- END; 14131000
-IF J =0 THEN GO TO CALLSTATEMENT; 14132000
- P2~P3~FALSE; 14133000
- GO TO DECLSW[GTA1[J]]; 14134000
-OWNERR:FLAG(20);J~J+1;GO TO REALDEC; 14135000
-SAVERR:FLAG(21);J~J+1;GO TO REALDEC; 14136000
-STREAMERR: IF ELCLASS = LEFTPAREN THEN % 6 14137000
- BEGIN % 6 14137100
- I ~ I - 1; % 6 14137200
- GO TO CALLSTATEMENT; % 6 14137300
- END; % 6 14137400
- FLAG(22); % 6 14137500
- J ~ J + 1; % 6 14137600
- GO TO PROCEDUREDEC; % 6 14137700
-REALDEC:P3~TRUE;ENTER(REALID);GO TO START; 14138000
-ALPHADEC:P3~TRUE;ENTER(ALFAID);GO TO START; 14139000
-BOOLEANDEC:P3~TRUE;ENTER(BOOID);GO TO START; 14140000
-INTEGERDEC:P3~TRUE;ENTER(INTID);GO TO START; 14141000
- MONITORDEC:IF SPECTOG 14142000
- THEN BEGIN COMMENT ERROR 463 MEANS THAT A MONITOR 14143000
- DECLARATION APPEARS IN THE SPECIFICATION 14144000
- PART OF A PROCEDURE; 14145000
- FLAG(463); 14146000
- END; 14147000
- DO UNTIL FALSE; 14148000
- DUMPDEC:IF SPECTOG 14149000
- THEN BEGIN COMMENT ERROR 464 MEANS A DUMP DECLARATION 14150000
- APPEARS IN THE SPECIFICATION PART OF A 14151000
- PROCEDURE; 14152000
- FLAG(464); 14153000
- END; 14154000
- DO UNTIL FALSE; 14155000
-ARRAYDEC: ARRAE; GO TO START; 14156000
-FILEDEC: INDEX: OUTDEC: 14158000
-GOTSCHK:GOTSTORAGE~ NOT SPECTOG OR GOTSTORAGE;GO TO START; 14160000
-NAMEDEC: IF T1~GTA1[J~J-1]!ARRAYV THEN J~J+1; 14161000
- TYPEV~NAMEID; 14161010
- IF T1~GTA1[J~J-1]=0 THEN J~J+1 14161020
- ELSE 14161030
- IF T1=OWNV 14161040
- THEN 14161050
- BEGIN 14161060
- P2~TRUE; IF SPECTOG THEN 14161070
- FLAG(013); 14161080
- END 14161090
- ELSE 14161100
- 14161110
- TYPEV~NAMEID+T1-REALV; 14161120
- ENTER(TYPEV); GO TO START; 14162000
-SUBDEC: 14163000
- BEGIN REAL TYPEV,T; 14163500
- IF GTA1[J~J-1]=REALV THEN TYPEV~REALSUBID ELSE TYPEV~SUBID; 14164000
-STOPGSP~TRUE; 14164500
- JUMPCHKNX;ENTRY(TYPEV);IF ELCLASS!SEMICOLON THEN FLAG(57); 14165000
-STOPGSP~FALSE; 14165500
- STEPIT; 14166000
- T~NEXTINFO; 14166500
-PUTNBUMP(L); STMT; EMITO(LFU); IF TYPEV=REALSUBID THEN 14167000
- IF GET(L-2)!533 THEN FLAG(58);PUT(TAKE(T)&L[24:36:12],T); 14168000
-CONSTANTCLEAN; 14168500
- END; 14169000
- GO TO START; 14170000
- 14171000
- 14172000
- 14173000
- 14174000
- 14175000
- 14176000
- 14177000
- 14178000
- 14179000
- 14180000
- 14181000
- 14182000
- 14183000
- 14184000
- 14185000
- 14186000
-LABELDEC:IF SPECTOG AND FUNCTOG THEN FLAG(24); 14187000
- STOPENTRY~STOPGSP~TRUE; 14188000
- I~I-1; 14189000
- DO 14190000
- BEGIN 14191000
- STOPDEFINE~TRUE; 14192000
- STEPIT; 14193000
- ENTRY(LABELID); 14194000
- PUTNBUMP(0) 14195000
- END 14196000
- UNTIL ELCLASS!COMMA; 14197000
- STOPENTRY~STOPGSP~FALSE; 14198000
- GO TO START; 14199000
-SWITCHDEC: 14200000
- BEGIN 14201000
- LABEL START; 14202000
- INTEGER GT1,GT2,GT4,GT5; 14203000
- BOOLEAN TB1; 14204000
- STOPENTRY~NOT SPECTOG;STOPGSP~TRUE; 14205000
- SCATTERELBAT; GT1~0; TB1~FALSE; 14206000
- ENTRY(SWITCHID); 14207000
- GT2~NEXTINFO; PUTNBUMP(0); 14217000
- DO 14218000
- BEGIN 14219000
- IF STEPI!LABELID OR ELBAT[I].LVL!LEVEL THEN FLAG(63); 14220000
- PUTNBUMP(ELBAT[I]);GT1~GT1+1; 14221000
- END; 14222000
- COMMENT 14222500
- UNTIL STEPI!COMMA; 14223000
- 14223500
- PUT(GT1,GT2); 14224000
- STOPENTRY ~ STOPGSP ~ FALSE; 14251000
- END SWITCHDEC; 14252000
-GO TO START; 14253000
- DEFINEDEC: 14254000
- BEGIN LABEL START; 14254050
- REAL J,K; 14254100
- BOOLEAN STREAM PROCEDURE PARM(S,D,K,J); VALUE K,J; 14254200
- BEGIN SI~S;SI~SI+2; DI~D;DI~DI+2; 14254300
- IF K SC!DC THEN TALLY~1 14254400
- DI~LOC J;DI~DI+7; 14254500
- IF SC!DC THEN TALLY~1; 14254600
- PARM~TALLY; 14254700
- END; 14254800
- STOPENTRY~STOPGSP~TRUE;I~I-1; 14255000
- DO 14256000
- BEGIN 14257000
- STOPDEFINE~TRUE; 14258000
- STEPIT; MOVE(9,ACCUM[1],GTA1); 14259000
- K~COUNT+1; J~GTA1[0]; ENTRY(DEFINEDID); 14259010
- GTA1[0]~J+"100000"; J~0; 14259015
- IF ELCLASS=LEFTPAREN OR ELCLASS=LFTBRKET THEN 14259020
- BEGIN 14259030
- DO BEGIN STOPDEFINE~TRUE; 14259060
- STEPIT; 14259070
- IF (J~J+1)>9 OR PARM(ACCUM[1],GTA1,K,J) OR 14259080
- K>62 THEN BEGIN ERR(141); GO TO START END; 14259090
- STOPDEFINE~TRUE; 14259100
- END UNTIL STEPI!COMMA; 14259110
- IF ELCLASS!RTPAREN AND ELCLASS!RTBRKET THEN ERR(141); 14259120
- STOPDEFINE~TRUE; 14259130
- STEPIT; 14259140
- PUT(TAKE(LASTINFO)&J[16:37:11],LASTINFO); 14259150
- END; 14259160
- IF ELCLASS!RELOP 14260000
- THEN 14261000
- BEGIN 14262000
- FLAG(30); 14263000
- I~I-1; 14264000
- END; 14265000
- MACROID~TRUE; 14265900
- DEFINEGEN(FALSE,J); 14266000
- MACROID~FALSE; 14266100
- END 14267000
- UNTIL STEPI!COMMA; 14268000
- START: STOPENTRY~STOPGSP~FALSE; END; GO TO START; 14269000
-PROCEDUREDEC: 14270000
- BEGIN 14271000
- LABEL START,START1; 14272000
- LABEL START2; 14273000
- BOOLEAN FWDTOG; COMMENT THIS TOGGLE IS THE FORWARD DEC INDICATOR; 14274000
- IF NOT SPECTOG THEN FUNCTOG~FALSE; 14275000
- FWDTOG~FALSE ; 14276000
- MAXSTACKO~ MAXSTACK; 14277000
- IF G~GTA1[J~J-1]=STREAMV 14278000
- THEN 14279000
- BEGIN STREAMTOG~TRUE; 14280000
- IF G~GTA1[J~J-1]=0 THEN TYPEV~STRPROCID 14281000
- ELSE 14282000
- BEGIN 14283000
- IF TYPEV~PROCID +G>INTSTRPROCID OR 14284000
- TYPEV INTPROCID 14294000
- THEN FLAG(005) 14295000
- ELSE BEGIN FUNCTOG~TRUE;G~GTA1[J~J-1]; 14296000
- END; 14297000
- IF NOT STREAMTOG THEN SEGMENTSTART(G=SAVEV); 14298000
- SAF ~ G=SAVEV; 14299000
- 14300000
- 14301000
- 14302000
- MODE~MODE+1; 14303000
- LO~PROINFO; 14304000
- SCATTERELBAT; 14305000
-COMMENT CHECK TO SEE IF DECLARED FORWARD PREVIOUSLY ;14306000
- IF LEVELF=LEVEL 14307000
- THEN 14308000
- BEGIN 14309000
- IF G~TAKE(LINKF+1)}0 14310000
- THEN FLAG(006); 14311000
- FWDTOG~TRUE; 14312000
- PROAD~ADDRSF; 14313000
- PROINFO~ELBAT[I];MARK~LINKF+INCRF;STEPIT 14314000
- ;PUT(-G,LINKF+1); 14315000
- END 14316000
- ELSE 14317000
- BEGIN STOPENTRY~TRUE; P2~TRUE; 14318000
- STOPGSP~LEVEL>1 AND STREAMTOG; 14318500
- ENTRY(TYPEV); MARK~NEXTINFO;PUTNBUMP(0); 14319000
- STOPGSP~FALSE; 14319500
- PROINFO~TAKE(LASTINFO)& LASTINFO[35:35:13];PROAD~ADDRSF; 14320000
- P2~STOPENTRY~FALSE 14321000
- END; 14322000
- PJ~0; LEVEL~LEVEL+1; 14323000
- IF STREAMTOG THEN STREAMWORDS; 14324000
- IF ELCLASS=SEMICOLON THEN GO TO START1; 14325000
- IF ELCLASS!LEFTPAREN THEN FLAG(007); 14326000
-COMMENT: THE FOLLOWING 8 STATEMENTS FOOL THE SCANNER AND BLOCK,PUTTING 14327000
- FORMAL PARAMETER ENTRIES IN THE ZERO ROW OF INFO; 14328000
- RR1~NEXTINFO; 14329000
- LASTINFOT~LASTINFO; LASTINFO~NEXTINFO~1; 14330000
- PUTNBUMP(0); 14331000
- PTOG~TRUE; I~I+1; 14332000
- ENTRY(SECRET); 14333000
- IF FWDTOG THEN 14333100
- BEGIN 14333200
- IF GT1:=TAKE(MARK).[40:8] ! PJ THEN FLAG(48); % WRONG 14333300
- % NUMBER OF PARAMETERS. WE DON"T WANT TO CLOBBER INFO. 14333400
- END 14333500
-ELSE 14333600
- PUT(PJ,MARK); 14334000
- P~PJ; 14335000
- IF ELCLASS!RTPAREN 14336000
- THEN FLAG(008); 14337000
- IF STEPI!SEMICOLON 14338000
- THEN FLAG(009); 14339000
-COMMENT MARK PARAMETERS VALUE IF THERE IS A VALUE PART; 14340000
- IF STEPI=VALUEV 14341000
- THEN 14342000
- BEGIN 14343000
- DO 14344000
- IF STEPI!SECRET 14345000
- THEN FLAG(010) 14346000
- ELSE 14347000
- BEGIN 14348000
- IF G~ELBAT[I].ADDRESS=0 OR G>PJ 14349000
- THEN 14350000
- FLAG(010); 14351000
- G~TAKE(ELBAT[I]); 14352000
- PUT(G&1[10:47:1],ELBAT[I]) 14353000
- END 14354000
- UNTIL 14355000
- STEPI!COMMA; 14356000
- IF ELCLASS!SEMICOLON 14357000
- THEN FLAG(011) 14358000
- ELSE STEPIT 14359000
- END;I~I-1; 14360000
- IF STREAMTOG 14361000
- THEN 14362000
- BEGIN 14363000
- BUP~PJ; SPECTOG~TRUE;GO TO START1 14364000
- END 14365000
- ELSE 14366000
- BEGIN 14367000
- SPECTOG~TRUE; 14368000
- BUP~0; 14369000
- IF ELCLASS!DECLARATORS 14370000
- THEN FLAG(012) 14371000
- END; 14372000
-START:PTOG~FALSE;LASTINFO~LASTINFOT;NEXTINFO~IF FWDTOG THEN RR1 ELSE 14373000
- MARK+PJ+1; 14374000
-START1:PINFOO~NEXTINFO; 14375000
-START2: END; 14376000
- IF SPECTOG OR STREAMTOG 14377000
- THEN 14378000
- GO TO START; 14379000
-COMMENT IF SPECTOG IS ON THEN THE BLOCK WILL PROCESS THE SPECIFICATION 14380000
- PART SIMILARY TO DECLARATIONS WITH A FEW NECESSARY VARIATIONS; 14381000
-HF: 14382000
- BEGIN 14383000
- LABEL START,STOP; 14384000
- DEFINE TESTLEV = LEVEL>2 #; 14384100
- IF STREAMTOG 14385000
- THEN BEGIN 14386000
- IF TESTLEV THEN JUMPCHKNX ELSE SEGMENTSTART(TRUE);PJ~P; 14387000
- PTOG~FALSE; 14388000
- PUT(TAKE(GIT(PROINFO))&L[28:36:12],GIT(PROINFO)); 14388100
- IF TESTLEV THEN BEGIN EMITO(584); END; 14389000
- IF STEPI=BEGINV 14393000
- THEN 14394000
- BEGIN 14395000
- WHILE STEPI=DECLARATORS OR ELCLASS=LOCALV 14396000
- DO 14397000
- BEGIN 14398000
- IF ELBAT[I].ADDRESS=LABELV 14399000
- THEN 14400000
- BEGIN 14401000
- STOPDEFINE~STOPGSP~STOPENTRY~TRUE; 14402000
- DO BEGIN STOPDEFINE~TRUE;STEPIT;ENTRY(STLABID);PUTNBUMP(0) END UNTIL14403000
- ELCLASS!COMMA;STOPGSP~STOPENTRY~FALSE 14404000
- END 14405000
- ELSE 14406000
- BEGIN 14407000
- I~I+1; 14408000
- ENTRY(LOCLID) 14409000
- END 14410000
- END; 14411000
- IF FUNCTOG THEN 14411100
- PUT((Z~TAKE(PROINFO))&LOCLID[2:41:7] & 14411200
- (PJ+2+REAL(TESTLEV))[16:37:11],PROINFO); 14411300
- COMPOUNDTAIL 14412000
- END 14413000
- ELSE 14414000
- BEGIN 14415000
- IF FUNCTOG THEN 14415100
- PUT(( Z~TAKE(PROINFO))& LOCLID[2:41:7]& 14415200
- (PJ+2+REAL(TESTLEV))[16:37:11],PROINFO); 14415300
- STREAMSTMT; 14415400
- END; 14415500
- COMMENT THE FOLLOWING BLOCK CONSTITUTES THE STREAM PROCEDURE PURGE; 14416000
- BEGIN 14417000
- REAL NLOC,NLAB; 14418000
- DEFINE SES=18#,SED=6#,TRW=5#; 14419000
- DEFINE LOC=[36:12]#,LASTGT=[24:12]#; 14420000
- J~ LASTINFO; 14421000
- NLOC~NLAB~0; 14422000
- DO 14423000
- BEGIN 14424000
- IF(GT1~TAKE(J)).CLASS=LOCLID THEN 14425000
- BEGIN 14426000
- IF BOOLEAN(GT1.FORMAL) THEN 14427000
- BEGIN 14428000
- IF GT1<0 THEN 14429000
- PUT(TAKE(GT2~MARK+P-GT1.ADDRESS+1)&FILEID[2:41:7] 14430000
- ,GT2); 14431000
- END 14432000
- ELSE NLOC~NLOC+1; 14433000
- END 14434000
- ELSE 14435000
- BEGIN 14436000
- IF GT1.ADDRESS!0 THEN NLAB~NLAB+1; 14437000
- IF(GT3~TAKE(GIT(J))).LASTGT!0 AND GT3.LOC =0 THEN 14438000
- BEGIN 14439000
- MOVE(9,INFO[0,J],ACCUM[0]); 14440000
- Q~ACCUM[1]; 14441000
- FLAG(267); 14442000
- ERRORTOG~TRUE; 14443000
- END; 14444000
- END; 14445000
- G~(GT2+TAKE(J+1)).PURPT; 14446000
- IF GT1.[2:8] ! STLABID|2+1 THEN 14447000
- STACKHEAD[(0>2[12:12:36])MOD 125]~TAKE(J).LINK; 14448000
- END UNTIL J~J-G{1; 14449000
- 14450000
- IF TESTLEV THEN BEGIN EMITC(1,0); EMITO(BFW) END 14451000
- ELSE EMIT(0); 14451100
-PUT(TAKE(MARK)&NLOC[1:42:6]&L[16:36:12]&P[40:40:8],MARK); 14451200
- IF FUNCTOG THEN 14452000
- PUT(Z, PROINFO); 14457000
- STREAMWORDS; 14460000
- STREAMTOG~FALSE; 14461000
- IF NOT TESTLEV THEN BEGIN PROGDESCBLDR(PROAD,TRUE,(L+3)DIV 4,CHAR);14461100
- SEGMENT((L+3)DIV 4,PROINFO.ADDRESS); 14461200
- RIGHT(L); L~0; 14461300
- END; 14461400
- IF LISTER AND FORMATOG THEN SPACEITDOWN; 14461500
- END; 14462000
- LASTINFO~LASTINFOT;NEXTINFO~MARK+P+1; 14463000
- END 14464000
- ELSE 14465000
- BEGIN 14466000
- IF STEPI=FORWARDV 14467000
- THEN 14468000
- BEGIN 14469000
- PUT(-TAKE(G~PROINFO.LINK+1),G); 14470000
- PURGE(PINFOO); 14471000
- STEPIT 14472000
- END 14473000
- ELSE 14474000
- BEGIN 14475000
- PROADO~PROAD; 14476000
- TSUBLEVEL~SUBLEVEL;SUBLEVEL~LEVEL ;STACKCTRO~STACKCTR; 14477000
- IF MODE=1 THEN FRSTLEVEL~LEVEL;STACKCTR~513+REAL(FUNCTOG); 14478000
- IF ELCLASS = BEGINV THEN 14479000
- BEGIN 14481000
- CALLINFO~(CALLX~CALLX+1)+1; 14481100
- NEXTCTR~STACKCTR; 14481200
- BLOCK(TRUE); 14482000
- ; PURGE(PINFOO); 14483000
- IF NESTOG THEN 14483100
- BEGIN GT1~TAKE(PROINFO).ADDRESS; 14483200
- NESTPRT[GT1]~0&PROINFO[35:35:13]&CALLINFO[22:35:13]; 14483300
- CALL[CALLINFO-1]~(TAKE(GIT(PROINFO))+NESTCTR-511)& 14483400
- CALLX[22:35:13]; 14483500
- END; 14483600
- L~0; 14483700
- GO TO STOP END; 14484000
- BEGIN 14485000
- FLAG(052); 14486000
- RELAD~L ; 14487000
- STMT; 14488000
- HTTEOAP(FALSE,RELAD,PINFOO,PROAD); 14489000
- END; 14490000
- STOP: 14491000
- SUBLEVEL~TSUBLEVEL; 14492000
- STACKCTR~STACKCTRO; 14493000
- IF LISTER AND FORMATOG THEN SPACEITDOWN; 14493500
- END; 14494000
- END; 14495000
- PROINFO~LO; 14496000
- IF JUMPCTR=LEVEL 14497000
- THEN 14498000
- JUMPCTR~LEVEL-1; 14499000
- LEVEL~LEVEL-1; 14500000
- MODE~MODE-1; 14501000
- MAXSTACK~MAXSTACKO; 14502000
-START:END; 14503000
- GO TO START; 14504000
- CALLSTATEMENT: FOULED ~ L; 14505000
- JUMPCHKX;IF SOP THEN BEGIN Z~STACKCTR-513;WHILE Z~Z-1}0 14506000
- DO EMITL(0) END; 14506500
- IF SPECTOG THEN BEGIN 14507000
- FLAG(12);GO TO HF 14508000
- END; 14509000
- BEGINCTR ~ BEGINCTR-1; 14510000
- IF ERRORTOG 14511000
- THEN COMPOUNDTAIL 14512000
- ELSE 14513000
- BEGIN 14514000
- STMT; 14515000
- IF ELCLASS~TABLE(I+1)=DECLARATORS 14516000
- THEN 14517000
- BEGIN 14518000
- ELBAT[I].CLASS~SEMICOLON; 14519000
- BEGINCTR~BEGINCTR+1; 14520000
- GO TO START 14521000
- END 14522000
- ELSE 14523000
- COMPOUNDTAIL 14524000
- END; 14525000
- FUNCTOG~FUNCTOGO; 14599000
- IF SOP THEN HTTEOAP(FALSE,FIRSTX,NINFOO,BLKAD) 14600000
- ELSE BEGIN IF NESTOG THEN SORTNEST; PURGE(NINFOO); END; 14601000
- SEGMENT((L+3)DIV 4,PROADD); 14602000
- IF LEVEL>1 THEN RIGHT(L); 14603000
- IF LEVEL ~ LEVEL-1 = 0 THEN CONSTANTCLEAN; 14604000
- 14605000
- AJUMP~AJUMPO; 14606000
- 14607000
- FIRSTX~FIRSTXO; 14608000
- SAVEL~SAVELO; 14609000
- STACKCTR~STACKCTRO; 14610000
- 14611000
- 14612000
-END BLOCK; 14613000
- COMMENT THIS SECTION CONTAINS THE VARIABLE ROUTINE AND ITS SIDEKICKS; 15000000
- 15001000
- 15002000
- 15003000
- 15004000
- 15005000
- 15006000
- 15007000
- 15008000
- 15009000
- 15012000
- 15013000
- 15014000
- 15015000
- 15016000
- 15017000
- 15018000
- 15019000
- 15020000
- 15021000
- 15022000
- 15023000
- 15024000
- 15025000
- 15026000
- 15027000
- 15028000
- 15029000
- 15030000
- 15031000
- 15032000
- 15033000
- 15034000
- 15035000
- 15036000
- 15037000
- 15038000
- COMMENT THE FOLLOWING BLOCK HANDLES THE FOLLOWING CASES 15039000
- OF SIMPLE VARIABLES: 15040000
- 1. V ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 15041000
- 2. V ~ EXP ,ALL V EXCEPT FORMAL-NAME. 15042000
- 3. V.[S:L] ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 15043000
- 4. V.[S:L] ~ EXP ,ALL V EXCEPT FORMAL-NAME. 15044000
- 5. V.[S:L] ,ALL V. 15045000
- 6. V ,ALL V. 15046000
- CODE EMITED FOR THE ABOVE CASES IS AS FOLLOWS: 15047000
- 1. VN,EXP,M*,XCH,~. 15048000
- 2. EXP,M*,VL,~. 15049000
- 3. VN,DUP,COC,EXP,T,M*,XCH,~. 15050000
- 4. VV,EXP,T,M*,VL,~. 15051000
- 5. ZEROL,VV,T . 15052000
- 6. VV . 15053000
- WHERE VN = DESC V 15054000
- EXP= ARITH, OR BOOLEAN EXPRESSION,AS REQUIRED. 15055000
- M* = CALL ON MONITOR ROUTINE,IF REQUIRED. 15056000
- VL = LITC V 15057000
- VV = OPDC V 15058000
- ~ = STORE INSTRUCTION(ISD,ISN,SND OR STD). 15059000
- T = BIT TRANSFER CODE(DIA,DIB,TRB). 15060000
- ZEROL = LITC 0 15061000
- DUP,COC,XCH = THE INSTRUCTIONS DUP,COC,AND XCH. 15062000
- OF COURSE, EXP WILL CAUSE RECURSION,IN GENERAL,AND THUS 15063000
- THE PARAMETER P1 AND THE LOCALS CAN NOT BE HANDLED IN A 15064000
- GLOBAL FASHION. 15065000
- THE PARAMETER P1 IS USED TO TELL THE VARIABLE ROUTINE 15066000
- WHO CALLED IT. SOME OF THE CODE GENERATION AND SOME 15067000
- SYNTAX CHECKS DEPEND UPON A PARTICULAR VALUE OF P1 . 15068000
- ; 15069000
- PROCEDURE VARIABLE(P1); INTEGER P1; 15070000
- BEGIN 15071000
- REAL TALL, COMMENT ELBAT WORD FOR VARIABLE; 15072000
- T1 , COMMENT 1ST INTEGER OF PARTIAL WORD SYNTAX; 15073000
- T2 , COMMENT 2ND INTEGER OF PARTIAL WORD SYNTAX; 15074000
- J ; COMMENT SUBSCRIPT COUNTER ; 15075000
- LABEL EXIT,L1,LAST,NEXT,JAZZ,ITUP,LASS; 15076000
- DEFINE FORMALNAME=[9:2]=2#, LONGID=NAMEID#; 15076100
- BOOLEAN SPCLMON; 15076200
- TALL~ELBAT[I] ; 15077000
- IF ELCLASS { INTPROCID THEN 15078000
- BEGIN 15079000
- IF TALL.LINK !PROINFO.LINK THEN 15080000
- BEGIN ERR(211); GO TO EXIT END; 15081000
-COMMENT 211 VARIABLE-FUNCTION IDENTIFIER USED OUTSIDE OF ITS SCOPE*; 15082000
- TALL~TALL &(ELCLASS+4)[2:41:7] & 513[16:37:11]; 15083000
- END 15084000
- ELSE CHECKER(TALL); 15085000
- IF TALL.CLASS { INTID THEN 15086000
- BEGIN 15087000
- 15088000
- 15089000
- IF STEPI= ASSIGNOP THEN 15090000
- BEGIN STACKCT ~ 1; 15091000
- L1: IF TALL.FORMALNAME THEN 15092000
- BEGIN 15093000
- EMITN(TALL.ADDRESS); 15094000
- IF T1!0 THEN BEGIN EMITO(DUP);EMITO(COC) END; 15095000
- END 15096000
- ELSE IF T1!0 THEN EMITV(TALL.ADDRESS) 15097000
- ; STACKCT ~ REAL(T1!0); STEPIT; 15098000
- AEXP; 15099000
- EMITD(48-T2 ,T1 ,T2); 15100000
- 15101000
- STACKCT ~ 0; 15101500
- GT1 ~ IF TALL.CLASS =INTID THEN IF P1= FS 15102000
- THEN ISD ELSE ISN ELSE 15103000
- IF P1 = FS THEN STD ELSE SND ; 15104000
- IF TALL.FORMALNAME THEN 15105000
- BEGIN 15106000
- EMITO(XCH); IF TALL.ADDRESS>1023 THEN EMITO(PRTE); 15106100
- EMITO(GT1); 15106200
- END 15106300
- ELSE EMITPAIR(TALL.ADDRESS,GT1); 15107000
- END 15108000
- ELSE 15109000
- BEGIN 15110000
- IF P1=FL THEN BEGIN 15110100
- IF ELCLASS < AMPERSAND THEN EMITN(TALL.ADDRESS) 15110200
- ELSE EMITV(TALL.ADDRESS); 15110300
- GO TO EXIT END; 15110400
- IF ELCLASS= PERIOD THEN 15111000
- BEGIN IF DOTSYNTAX(T1,T2) THEN GO TO EXIT ; 15112000
- IF STEPI=ASSIGNOP THEN 15113000
- IF P1! FS THEN 15114000
- BEGIN ERR(201);GO TO EXIT END 15115000
- ELSE GO TO L1 15116000
- 15117000
- END ; 15118000
- IF P1! FP THEN BEGIN ERR(202); GO TO EXIT END; 15119000
-COMMENT 202 VARIABLE- A VARIABLE APPEARS WHICH IS NOT FOLLOWED * 15120000
- BY A LEFT ARROW OR PERIOD *;15121000
-COMMENT 201 VARIABLE- A PARTIAL WORD DESIGNATOR IS NOT THE * 15122000
- LEFT-MOST OF A LEFT PART LIST *;15123000
- EMITI(TALL,T1,T2); 15124000
- 15125000
- END ; 15126000
- END OF SIMPLE VARIABLES 15127000
- ELSE 15128000
- IF TALL.CLASS!LABELID THEN 15128100
- COMMENT THE FOLLOWING BLOCK HANDLES THESE CASES OF SUBSCRIPTED 15129000
- VARIABLES: 15130000
- 1. V[*] ,ROW DESIGNATOR FOR SINGLE-DIMENSION. 15131000
- 2. V[R,*] ,ROW DESIGNATOR FOR MULTI-DIMENSION. 15132000
- 3. V[R] ,ARRAY ELEMENT,NAME OR VALUE. 15133000
- 4. V[R].[S:L] ,PARTIAL WORD DESIGNATOR, VALUE. 15134000
- 5. V[R] ~ ,ASSIGNMENT TO ARRAY ELEMENT. 15135000
- 6. V[R].[S:L] ~ ,ASSIGNMENT TO PARTIAL WORD,LEFT-MOST. 15136000
- R IS A K-ORDER SUBSCRIPT LIST,I.E. R= R1,R2,...,RK. 15137000
- IN THE CASE OF NO MONITORING ON V, THE FOLLOWING CODE 15138000
- IS EMITTED FOR THE ABOVE CASES: 15139000
- 1. CASE #1 IS A SPECIAL CASE OF #2,NAMELY,SINGLE 15140000
- DIMENSION. THE CODE EMITTED IS: 15141000
- VL,LOD . 15142000
- EXECUTION: PLACES ARRAY DESCRIPTER IN REG A. 15143000
- 2. THIS CODE IS BASIC TO THE SUBSCRIPTION PROCESS.15144000
- EACH SUBSCRIPT GENERATES THE FOLLOWING SEQUENCE15145000
- OF CODE: 15146000
- AEXP,L*,IF FIRST SUBSCRIPT THEN VN ELSE CDC 15147000
- ,LOD. 15148000
- FOR A K-ORDER SUBSCRIPTION,K-1 SEQUENCE ARE 15149000
- PRODUCED. THE AEXP IN EACH SEQUENCE REFERS TO 15150000
- THE CODE PRODUCED BY THE ARITHMETIC EXPRESSION 15151000
- PROCEDURE FOR THE ACTUAL SUBSCRIPT EXPRESSIONS,15152000
- [* REFERS TO THE CODE PRODUCED FOR SUBTRACTING 15153000
- NON-ZERO LOWER BOUNDS FROM THE SUBSCRIPT 15154000
- EXPRESSION(L* YIELDS NO CODE FOR ZERO BOUNDS). 15155000
- EXECUTION: PLACES ARRAY ROW DESCRIPTOR IN REG A15156000
- . THE SPECIFIC ROW DEPENDS UPON THE 15157000
- VALUES OF THE K-1 SUBSCRIPTS. 15158000
- FOR THE REMAINING CASES, 15159000
- SEQUENCES OF CODE ARE EMITED AS IN CASE #2. 15160000
- HOWEVER,THE ACTUAL SEQUENCES ARE: 15161000
- ONE SEQUENCE ,(AEXP,L*),FOR THE 1ST SUBSCRIPT.15162000
- K-1 SEQUENCES,(IF FIRST SUBSCRIPT THEN VN 15163000
- ELSE CDC,LOD,AEXP,L*), FOR THE REMAINING 15164000
- SUBSCRIPTS,IF K>1. 15165000
- AT THIS POINT, CASES #3-6 ARE DIFFERENTIATED 15166000
- AND ADDITION CODE,PARTICULAR TO EACH CASE,IS 15167000
- EMITTED. 15168000
- 3. ADD THE SEQUENCE: 15169000
- IF FIRST SUBSCRIPT THEN VV ELSE COC. 15170000
- EXECUTION: THE ARRAY ELEMENT IS PUT IN REG A. 15171000
- 4. ADD THE SEQUENCE: 15172000
- IF FIRST SUBSCRIPT THEN VV ELSE COC,ZEROL. 15173000
- XCH,T. 15174000
- 5. ADD THE SEQUENCE: 15175000
- IF FIRST SUBSCRIPT THEN VN ELSE CDC,EXP, 15176000
- XCH,~. 15177000
- 6. ADD THE SEQUENCE: 15178000
- IF FIRST SUBSCRIPT THEN VN ELSE CDC,DUP,LOD, 15179000
- EXP,T, XCH,~. 15180000
- EXP,T,~,ZEROL,ETC. HAVE SAME MEANINGS AS DEFINED IN 15181000
- SIMPLE VARIABLE BLOCK. ; 15182000
- BEGIN 15183000
- 15184000
- 15184100
- 15184200
- 15184300
- 15184400
- IF STEPI ! LFTBRKET THEN 15233000
- BEGIN 15233002
- IF ELCLASS = PERIOD THEN 15233003
- BEGIN 15233004
- IF DOTSYNTAX(T1,T2) THEN GO TO EXIT; 15233005
- IF STEPI = ASSIGNOP THEN 15233006
- BEGIN 15233007
- IF P1!FS THEN BEGIN ERR(209); GO EXIT END; 15233008
- IF TALL.CLASS { INTARRAYID THEN 15233009
- BEGIN EMITPAIR(TALL.ADDRESS,LOD) END 15233010
- ELSE EMITN(TALL.ADDRESS); STACKCT ~ STACKCT+1; 15233011
- JAZZ: STEPIT; AEXP; 15233012
- EMITD(48-T2,T1,T2); 15233013
- EMITPAIR(TALL.ADDRESS, 15233014
- IF P1=FS THEN STD ELSE SND); 15233015
- STACKCT ~ 0; END 15233016
- ELSE BEGIN 15233017
- ITUP: EMITI(TALL,T1,T2); 15233018
- 15233019
- 15233020
- 15233021
- 15233022
- END; 15233023
- GO TO EXIT ; 15233024
- END; 15233025
- IF ELCLASS = ASSIGNOP THEN GO TO JAZZ ELSE GO TO ITUP ; 15233026
- END; 15233027
- J ~ 0; 15234000
- STACKCT ~ 0; 15234500
-COMMENT 207 VARIABLE-MISSING LEFT BRACKET ON SUBSCRIPTED VARIABLE *; 15235000
- NEXT: IF STEPI = FACTOP THEN 15253000
- BEGIN 15254000
- IF J+1! TALL.INCR THEN 15255000
- BEGIN ERR(203);GO EXIT END; 15256000
-COMMENT 203 VARIABLE- THE NUMBER OF SUBSCRIPTS USED IN A ROW * 15257000
- ROW DESIGNATER DOES NOT MATCH THE ARRAY * 15258000
- DECLARATION. *;15259000
- IF STEPI ! RTBRKET THEN 15260000
- BEGIN ERR(204);GO EXIT END; 15261000
-COMMENT 204 VARIABLE- COMPILER EXPECTS A ] IN A ROW DESIGNATER *;15262000
- 15263000
-COMMENT 205 VARIABLE- A ROW DESIGNATER APPEARS OUTSIDE OF A FILL * 15264000
- STATEMENT OR ACTUAL PARAMETER LIST. *;15265000
- IF J=0 THEN 15266000
- EMITPAIR(TALL.ADDRESS,LOD); 15267000
- STLB~0; 15273000
- STEPIT; 15274000
- GO TO EXIT; 15275000
- END OF ROW DESIGNATOR PORTION ; 15276000
- IF ELCLASS=LITNO AND ELBAT[I].ADDRESS=0 AND TABLE(I+1)=RTBRKET 15276010
- AND TALL.CLASS}NAMEID THEN 15276020
- BEGIN 15276030
- I~I+1; 15276040
- IF STEPI=ASSIGNOP THEN BEGIN 15276050
- LASS: IF T1!0 THEN EMITV(TALL.ADDRESS); 15276060
- STEPIT; AEXP; EMITD(48-T2,T1,T2); 15276070
- EMITN(TALL.ADDRESS); 15276080
- EMITO(IF TALL.CLASS!NAMEID THEN 15276090
- IF P1=FS THEN ISD ELSE ISN ELSE 15276100
- IF P1=FS THEN STD ELSE SND); 15276110
- STACKCT ~ 0; 15276115
- GO TO EXIT END 15276120
- ELSE 15276130
- IF ELCLASS = PERIOD THEN BEGIN 15276140
- IF DOTSYNTAX(T1,T2) THEN GO TO EXIT; 15276150
- IF STEPI = ASSIGNOP THEN IF P1=FS THEN GO TO LASS 15276160
- ELSE BEGIN ERR(209); GO EXIT END; 15276170
- END; 15276180
- IF P1=FS THEN BEGIN ERR(210); GO EXIT END; 15276190
- 15276200
- EMITI(IF P1=FL THEN TALL ELSE TALL&REALID[2:41:7],T1,T2); 15276210
- 15276220
- GO TO EXIT; 15276230
- END; 15276240
- AEXP; 15277000
- STACKCT ~ 1; 15278000
- J ~ J + 1; 15280000
- IF ELCLASS = COMMA THEN 15287000
- BEGIN 15288000
-COMMENT ***** MONITOR FUNCTION M4 GOES HERE ; 15289000
- IF J = 1 THEN EMITV(TALL.ADDRESS) ELSE EMITO(COC); 15290000
- 15291000
- GO TO NEXT; 15292000
- END OF SUBSCRIPT COMMA HANDLER ; 15293000
- IF ELCLASS ! RTBRKET THEN BEGIN ERR(206);GO EXIT END; 15294000
-COMMENT 206 VARIABLE- MISSING RIGHT BRACKET ON SUBSCRIPTED VARIABLE*; 15295000
- GT1~IF TALL.CLASS}NAMEID THEN 1 ELSE TALL.INCR; 15295100
- IF J!GT1 THEN 15296000
- BEGIN ERR(208);GO TO EXIT END; 15297000
-COMMENT 208 VARIABLE- NUMBER OF SUBSCRIPTS DOES NOT MATCH WITH * 15298000
- ARRAY DECLARATION. *;15299000
- IF STEPI = ASSIGNOP THEN 15300000
- BEGIN 15301000
- LAST: IF J=1 THEN EMITN(TALL.ADDRESS) ELSE EMITO(CDC); 15302000
- IF TALL.CLASS } LONGID THEN EMITO(INX); 15303000
- IF T1= 0 THEN 15304000
- BEGIN IF P1= FR THEN GO TO EXIT END 15305000
- ELSE BEGIN EMITO(DUP);EMITO(LOD)END; STEPIT; 15306000
- AEXP; 15307000
- EMITD(48-T2,T1,T2) ; 15308000
- EMITO(XCH); 15309000
- IF TALL.ADDRESS>1023 THEN EMITI(PRTE); 15310000
- EMITO(IF TALL.CLASS MOD 2 = INTARRAYID MOD 2 THEN 15333000
- IF P1 = FS THEN ISD ELSE ISN ELSE 15334000
- IF P1=FS THEN STD ELSE SND); 15335000
- STACKCT ~ 0; 15335500
- P1~0 ; 15336000
- GO TO EXIT ; 15337000
- END OF ASSIGNMENT STATEMENT SUBSCRIPTED VARIABLES; 15338000
- IF ELCLASS=PERIOD THEN 15339000
- BEGIN 15340000
- IF DOTSYNTAX(T1,T2) THEN GO TO EXIT; 15341000
- IF STEPI = ASSIGNOP THEN IF P1=FS THEN GO TO LAST 15342000
- ELSE BEGIN ERR(209); GO EXIT END; 15343000
- IF J!1 THEN EMITO(COC) ELSE IF TALL.CLASS } LONGID THEN 15344000
- BEGIN EMITN(TALL.ADDRESS);EMITO(INX);EMITO(LOD) END 15344100
- ELSE EMITV(TALL.ADDRESS); 15344200
- END 15345000
- ELSE 15346000
-COMMENT ***** MONITOR FUNCTION M10 GOES HERE ; 15347000
- BEGIN COMMENT MONITOR FUNCTION M10; 15348000
- SPCLMON~P1 = FP OR ELCLASS } AMPERSAND; 15349000
- IF J = 1 15350000
- THEN IF TALL.CLASS } LONGID THEN 15351000
- BEGIN 15351100
- EMITN(TALL.ADDRESS); EMITO(INX); 15351200
- IF SPCLMON THEN EMITO(LOD) ; 15351300
- END ELSE IF SPCLMON 15351400
- THEN EMITV(TALL.ADDRESS) 15352000
- ELSE EMITN(TALL.ADDRESS) 15353000
- ELSE EMITO(IF SPCLMON 15354000
- THEN COC 15355000
- ELSE CDC); 15356000
- IF P1 =FS THEN ERR(210); 15364000
- GO TO EXIT; 15365000
- END; 15366000
- IF P1=FS THEN BEGIN ERR(210); GO TO EXIT END ; 15367000
-COMMENT 210 VARIABLE-MISSING LEFT ARROW OR PERIOD. *;15368000
- STACKCT ~ 0; 15369000
- IF T1 ! 0 THEN BEGIN EMITI(0,T1,T2); P1 ~ 0 END; 15370000
- END OF SUBSCRIPTED VARIABLES 15376000
- ELSE 15376100
- BEGIN COMMENT LABELID; 15376200
- T1:=TAKE(T2:=GIT(TALL)); 15376300
- PUT(L,T2); 15376400
- IF T1=0 THEN T1:=L; 15376500
- IF (T1~L-T1) DIV 4 > 127 THEN BEGIN T1~0;FLAG(50);END; 15376600
- EMIT(T1|4+3); 15376700
- STEPIT; 15376800
- END OF LABELID; 15376900
- EXIT : END OF THE VARIABLE ROUTINE; 15377000
-COMMENT THIS SECTION GENERATES CODE FOR STREAM PROCEDURES; 16000000
-COMMENT DO LABEL DECS UPON APPEARANCE OF LABEL ; 16000050
-PROCEDURE DECLARELABEL ; 16000100
- BEGIN 16000200
- KLASSF ~ STLABID; 16000300
- VONF ~ FORMALF ~ FALSE; 16000400
- ADDRSF ~ 0; 16000500
- MAKEUPACCUM; E; PUTNBUMP(0); 16000600
- ELBAT[I] ~ ACCUM[0]& LASTINFO[35:35:13]; 16000700
- END; 16000800
- PROCEDURE STREAMSTMT ; 16001000
- BEGIN 16002000
- DEFINE LFTPAREN=LEFTPAREN#,LOC=[36:12]#,LASTGT=[24:12]#, 16003000
- LOCFLD=36:36:12#,LGTFLD=24:24:12#; 16004000
- DEFINE LEVEL=LVL#,ADDOP=ADOP#; 16005000
- DEFINE 16006000
-$ RESET NEATUP 16006100120809PK
- JFW = 39#, COMMENT 7.5.5.1 JUMP FORWARD UNCONDITIONAL ; 16007000
- RCA = 40#, COMMENT 7.5.7.6 RECALL CONTROL ADDRESS ; 16008000
- JRV = 47#, COMMENT 7.5.5.2 JUMP REVERSE UNCONDITIONAL ; 16009000
- CRF = 35#, COMMENT 7.5.10.6 CALL REPEAT FIELD ; 16010000
- BNS = 42#, COMMENT 7.5.5.5 BEGIN LOOP ; 16011000
- NOP = 1#, COMMENT ; 16012000
- ENS = 41#, COMMENT 7.5.5.6 END LOOP ; 16013000
- TAN = 30#, COMMENT 7.5.3.7 TEST FOR ALPHAMERIC ; 16014000
- BIT = 31#, COMMENT 7.5.3.8 TEST BIT ; 16015000
- JFC = 37#, COMMENT 7.5.5.3 JUMP FORWARD CONDITIONAL ; 16016000
- SED = 06#, COMMENT 7.5.7.8 SET DESTINATION ADDRESS ; 16017000
- RSA = 43#, COMMENT 7.5.7.4 RECALL SOURCE ADDRESS ; 16018000
- TRP = 60#, COMMENT 7.5.2.2 TRANSFER PROGRAM CHARACTERS ; 16019000
- BSS = 3#, COMMENT 7.5.6.6 SKIP SOURCE BIT ; 16020000
- BSD = 2#, COMMENT 7.5.6.5 SKIP DESTINATION BITS ; 16021000
- SEC = 34#, COMMENT 7.5.10.1 SET COUNT ; 16022000
- JNS = 38#; COMMENT 7.5.5.7 JUMP OUT LOOP ; 16023000
-$ SET NEATUP 16023050120809PK
-PROCEDURE ADJUST;; 16023100
- COMMENT FIXC EMITS BASICLY FORWARD JUMPS. HOWEVER IN THE CASE 16024000
- OF INSTRUCTIONS INTERPTED AS JUMPS BECAUSE OF A CRF ON 16025000
- A VALUE = 0 AND THE JUMP } 64 SYLLABLES A JFW 1 AND 16026000
- A RCA L (L IS STACK ADDRESS OF A PSEUDO LABEL WHICH 16027000
- MUST ALSO BE MANUFACTURED) IS EMITTED. ; 16028000
- PROCEDURE FIXC(S); VALUE S; REAL S; 16029000
- BEGIN 16030000
- REAL SAVL,D,F; 16031000
- IF D~ (SAVL~L) - (L~S)-1 { 63 THEN EMITC(D,GET(S)) 16032000
- ELSE FLAG(700); 16033000
- L~SAVL ; 16034000
- END FIXC ; 16057000
- COMMENT EMITJUMP IS CALLED BY GOTOS AND JUMPCHAIN. 16058000
- THIS ROUTINE WILL EMIT A JUMP IF THE DISTANCE IS { 63 16059000
- SYLLABLES ,OTHERWISE, IT GETS A PRT CELL AND STUFFS THE 16060000
- STACK ADDRESS INTO THE LABEL ENTRY IN INFO AND EMITS AN 16061000
- RCA ON THIS STACK CELL. AT EXECUTION TIME ACTUAL PARAPART 16062000
- INSURES US THAT THIS CELL WILL CONATIN A LABEL DESCRIPTOR 16063000
- POINTING TO OUR LABEL IN QUESTION. ; 16064000
- PROCEDURE EMITJUMP( E); VALUE E; REAL E; 16065000
- BEGIN 16066000
- REAL T,D; 16067000
- REAL ADDR; 16068000
- IF ABS( 16069000
- D~(T~TAKE(GIT(E)).LOC)-L-1)}64 THEN 16070000
- FLAG(700); 16071000
- ELSE EMITC(D,IF D <0 THEN JRV ELSE JFW); 16079000
- END EMIT JUMP; 16080000
- COMMENT WHEN JUMPCHAIN IS CALLED THERE IS A LINKEDLIST IN THE CODE16081000
- ARRAY WHERE JFWS MUST BE PLACED. THE 1ST LINK IS POINTED 16082000
- TO BY THE LOC FIELD OF EACH LABEL ENTRY IN INFO. THE LAST 16083000
- LINK IS = 4096. ; 16084000
- PROCEDURE JUMPCHAIN( E); VALUE E;REAL E; 16085000
- BEGIN 16086000
- REAL SAVL ,LINK; 16087000
- SAVL ~ L; 16088000
- L ~ TAKE(GIT(E)).LASTGT ; 16089000
- WHILE L! 4095 DO 16090000
- BEGIN 16091000
- LINK ~ GET(L); 16092000
- EMITJUMP( E); 16093000
- L ~ LINK 16094000
- END; 16095000
- L~SAVL; 16096000
- END JUMPCHAIN ; 16097000
- COMMENT NESTS COMPILES THE NEST STATEMENT. 16098000
- A VARIABLE NEST INDEX CAUSES THE CODE, 16099000
- CRF V, BNS 0 ,NOP,NOP, TO BE GENERATED INITIALLY. 16100000
- AT THE RIGHT PAREN THE BNS IS FIXED WITH THE LENGTH OF 16101000
- THE NEST (NUMBER OF SYLLABLES) IF THE LENGTH {63,OTHERWISE16102000
- IT IS FIXED WITH A 1 AND THE NOPS REPLACED WITH JFW 1, 16103000
- RCA P. THIS IS DONE BECAUSE THE VALUE OF V AT EXECUTION 16104000
- MAY = 0 AND THIS CODE CAUSES A JUMP AROUND THE NEST. 16105000
- JUMPOUT INFO IS REMEMBERED IN A RECURSIVE CELL AND 16106000
- NEST LEVEL INCREASED BY ONE. 16107000
- WHEN THE RIGHT PAREN IS REACHED,(IF THE STATEMENTS IN 16108000
- THE NEST COMPILED), JOINFO IS CHECKED FOR THE EXISTANCE 16109000
- OF JUMPOUT STATEMENTS IN THE NEST,IF SO,THE THE JUMPS 16110000
- ARE FIXED BY FAKING TOTOS INTO COMPILING THE REQUIRED 16111000
- JUMPS. 16112000
- FINALLY THE BNS IS FIXED,IF REQUIRED,AND NEST LEVEL 16113000
- AND JOINFO RESTORED TO THEIR ORIGINAL VALUES. ; 16114000
- PROCEDURE NESTS; 16115000
- BEGIN 16116000
- LABEL EXIT; 16117000
- REAL JOINT,BNSFIX; 16118000
- IF ELCLASS!LITNO THEN 16119000
- BEGIN 16120000
- EMITC(ELBAT[I].ADDRESS,CRF); BNSFIX~ L; 16121000
- EMIT(BNS); 16122000
- END 16123000
- ELSE EMITC(ELBAT[I].ADDRESS,BNS); 16124000
- IF STEPI ! LFTPAREN THEN BEGIN ERR(262); GO TO EXIT END; 16125000
- NESTLEVEL~NESTLEVEL + 1; 16126000
- JOINT ~ JOINFO; 16127000
- JOINFO ~ 0; 16128000
- DO BEGIN 16129000
- STEPIT; ERRORTOG ~ TRUE; STREAMSTMT 16130000
- END UNTIL ELCLASS ! SEMICOLON ; 16131000
- IF ELCLASS ! RTPAREN THEN BEGIN ERR(262);GO TO EXIT END; 16132000
- EMIT ( ENS); 16133000
- IF JOINFO ! 0 THEN 16134000
- BEGIN 16135000
- COMMENT PREPARE TO CALL JUMPCHAIN FORJUMPOUTS; 16136000
- ADJUST; 16137000
- PUT(TAKE(GIT(JOINFO))&L[LOCFLD],GIT(JOINFO)); 16138000
- JUMPCHAIN(TAKE(JOINFO)&JOINFO[35:35:13]); 16139000
- END; 16140000
- IF BNSFIX ! 0 THEN FIXC(BNSFIX); 16141000
- NESTLEVEL ~ NESTLEVEL-1; 16142000
- JOINFO ~ JOINT ; 16143000
- EXIT: END NESTS ; 16144000
- COMMENT LABELS HANDLES STREAM LABELS. 16145000
- ALL LABELS ARE ADJUSTED TO THE BEGINING OF THE NEXT 16146000
- WORD (IN THE PROGRAMSTREAM). 16147000
- IF A GO TO HAS NOT BEEN ENCOUNTERED BEFORE THE LABEL 16148000
- THEN THE NEST LEVEL FIELD IS ENTERED AND THE DEFINED BIT, 16149000
- [1:1], SET TO ONE. FOR DEFINED LABELS,IF WHERE A GO TO 16150000
- HAS APPEARED, A CHECK IS MADE THAT THE CURRENT NEST LEVEL 16151000
- MATCHES THE LEVEL OF THE LABEL. 16152000
- MULTIPLE OCCURANCES ARE ALSO CHECKED FOR AND FLAGGED. 16153000
- FINALLY,JUMPCHAIN IS CALLED TO FIX UP ANY FORWARD GO TOS 16154000
- AND GET A PRT LOCATION FOR ANY JUMPS }64 SYLLABLES. ; 16155000
-PROCEDURE LABELS; 16156000
- BEGIN 16157000
- REAL GT1; 16157100
- ADJUST; 16158000
- GT1 ~ ELBAT[I]; 16159000
- IF STEPI ! COLON THEN ERR(258) 16160000
- ELSE 16161000
- BEGIN 16162000
- IF TAKE(GT2~GIT(GT1)).LOC ! 0 THEN FLAG(259); 16163000
- IF GT1>0 THEN 16164000
- BEGIN 16165000
- PUT(-(TAKE(GT1)&NESTLEVEL[11:43:5]),GT1); 16166000
- PUT(-L,GT2) 16167000
- END 16168000
- ELSE 16169000
- BEGIN 16170000
- IF GT1.LEVEL!NESTLEVEL THEN FLAG(257); 16171000
- PUT((-L)&TAKE(GT2)[LGTFLD],GT2); 16172000
- JUMPCHAIN(GT1); 16173000
- END; 16174000
- END 16175000
- ; STEPIT; 16176000
- END LABELS ; 16177000
- COMMENT IFS COMPILES IF STATEMENTS. 16178000
- FIRST THE TEST IS COMPILED. NOTE THAT IN THE 16179000
- CONSTRUCTS "SC RELOP DC" AND "SC RELOP STRING" THAT 16180000
- THE SYLLABLE EMITTED IS FETCHED FROM ONE OF TWO FIELDS 16181000
- IN THE ELBAT WORD FOR THE RELATIONAL OPERATOR. OTHERWISE 16182000
- THE CODE IS EMITTED STRAIGHTAWAY. 16183000
- A TEST IS MADE TO SEE WHETHER THE STATEMENT AFTER THE 16184000
- "THEN" COULD POSSIBLY BE LONGER THAN 63 SYLLABLES,AND IF 16185000
- SO, Z NOPS ARE EMITTED FOR FIXC IN CASE A RCA WILL HAVE 16186000
- TO BE GENERATED. 16187000
- THIS PROCEDURE DOES NO OPTIMAZATION IN THE CASES 16188000
- IF THEN GO TO L,IF THEN STATEMENT ELSE GO TO L, OR 16189000
- IF THEN GO TO L1 ELSE GO TO L2 ; 16190000
- PROCEDURE IFS; BEGIN 16191000
- DEFINE COMPARECODE=[42:6]#,TESTCODE=[36:6]#; 16192000
- LABEL IFSB,IFTOG,IFSC,EXIT; 16193000
- SWITCH IFSW ~ IFSB,IFTOG,IFSC; 16194000
- REAL ADDR,FIX1,FIX2 ; 16195000
- ADDR~1 ; 16196000
- GO TO IFSW[STEPI -SBV+1] ; 16197000
- IF ELCLASS=LOCLID THEN 16198000
- BEGIN 16199000
- EMITC(ELBAT[I].ADDRESS,CRF); 16200000
- ADDR~0; 16201000
- END 16202000
- ELSE 16203000
- IF ELCLASS=LITNO THEN ADDR ~ ELBAT[I].ADDRESS 16204000
- ELSE BEGIN ERR(250); GO TO EXIT END; 16205000
- IF STEPI ! SCV THEN BEGIN ERR(263);GO TO EXIT END; 16206000
- IFSC: IF STEPI ! RELOP THEN BEGIN ERR(264);GO TO EXIT END; 16207000
- IF STEPI = DCV THEN EMITC( ADDR,ELBAT[I-1].COMPARECODE); 16208000
- ELSE 16209000
- IF ELCLASS = STRNGCON THEN 16210000
- EMITC(ACCUM[1].[18:6],ELBAT[I-1].TESTCODE) 16211000
- ELSE 16212000
- IF ELCLASS=LITNO THEN EMITC(C,ELBAT[I-1].TESTCODE) ELSE 16212500
- IF ELCLASS{IDMAX AND Q="5ALPHA" THEN EMITC(17,TAN) 16213000
- ELSE BEGIN ERR(265); GO TO EXIT END; 16214000
- GO TO IFTOG ; 16215000
- IFSB: EMITC(1,BIT); 16216000
- IFTOG: IF STEP ! THENV THEN BEGIN ERR(266); GO TO EXIT END; 16217000
- FIX1 ~ L; 16218000
- EMIT(JFC); 16219000
- IF STEPI!ELSEV THEN% 16220000
- STREAMSTMT; 16229000
- IF ELCLASS= ELSEV THEN 16230000
- BEGIN 16231000
- FIX2 ~ L; EMIT(JFW); 16232000
- FIXC(FIX1); 16233000
- STEPIT; 16234000
- STREAMSTMT; 16235000
- FIXC(FIX2); 16236000
- END 16237000
- ELSE FIXC(FIX1); 16238000
- EXIT:END IFS ; 16239000
- COMMENT GOTOS HANDLES GO TO AND THE LAST PART OF JUMP OUT TO 16240000
- STATEMENTS. 16241000
- IF THE LABEL HAS BEEN ENCOUNTERED THEN EMITJUMP IS CALLED 16242000
- AN PRODUCES A JRV OR RCA IN THE CASE OF JUMPS}64 SYLLABL 16243000
- ES. OTHERWISE, A LINK IS EMITTED POINTING ANY PREVIOUS 16244000
- GO TOS IN THE CASE OF FORWARD JUMPS. 16245000
- FINALLY, IF THE NEST LEVEL IS DEFINED THEN IT IS CHECKED 16246000
- AGAINST THE CURRENT LEVEL MINUS THE NUMBER OF LEVELS TO 16247000
- BE JUMPED OUT. OTHERWISE,NEST LEVEL IS DEFINED. ; 16248000
- PROCEDURE GOTOS; 16249000
- BEGIN 16250000
- LABEL EXIT; 16251000
- IF STEPI !TOV THEN I~I-1 ; 16252000
- IF STEPI ! STLABID THEN ELCLASS { IDMAX THEN 16253000
- DECLARELABEL ELSE BEGIN ERR(260); GO TO EXIT END; 16253100
- IF(GT2~TAKE(GIT(GT1~ELBAT[I]))).MON=1 16254000
- OR GT2.LOC!0 THEN EMITJUMP(GT1) 16255000
- ELSE 16256000
- BEGIN PUT(0&L[24:36:12],GIT(GT1)); 16257000
- IF GT1>0 THEN 16258000
- BEGIN 16259000
- PUT(-(TAKE(GT1)&(NESTLEVEL-JUMPLEVEL)[11:43:5]),GT1);16260000
- EMITN(1023); 16261000
- END 16262000
- ELSE 16263000
- BEGIN 16264000
- IF GT1.LEVEL ! NESTLEVEL-JUMPLEVEL THEN FLAG(257); 16265000
- EMIT(GT2.LASTGT); 16266000
- END; 16267000
- END; 16268000
- JUMPLEVEL~0 ; 16269000
- EXIT: END GOTOS ; 16270000
- COMMENT RELEASES COMPILES THE STREAM RELEASE STATEMENT. 16271000
- THE CODE GENERATED IS : 16272000
- SED FILE 16273000
- RSA 0. 16274000
- AT EXECUTION TIME THIS CAUSES AN INVALID ADDRESS WHICH IS 16275000
- INTERPETED BY THE MCP TO MEAN RELEASE THE FILE POINTED TO 16276000
- BY THE DESTINATION ADDRESS. 16277000
- THE MONITOR BIT IS SET IN INFO FOR THE LOCAL VARIABLE SO 16278000
- THAT ACUTAL PARAPART MAY BE INFORMED LATER THAT A FILE 16279000
- MUST BE PASSED FOR THIS FORMAL PARAMETER; 16280000
- 16281000
- 16282000
- 16283000
- 16284000
- 16285000
- 16286000
- 16287000
- 16288000
- 16289000
- COMMENT INDEXS COMPILE STATEMENTS BEGINING WITH SI,DI,CI,TALLY 16290000
- OR LOCALIDS . 16291000
- THREE CASES PRESENT THEMSELVES, 16292000
- LETING X BE EITHER OF SI,DI,CI OR TALLY, THEY ARE: 16293000
- CASE I LOCLID ~ X 16294000
- CASE II X ~ X ... 16295000
- CASE III X ~ EITHER LOC,LOCLID,SC OR DC. 16296000
- THE VARIABLE "INDEX" IS COMPUTED,DEPENDING UPON WHICH 16297000
- CASE EXISTS,SUCH THAT ARRAY ELEMENT "MACRO[INDEX]"CONTAINS16298000
- THE CODE TO BE EMITTED. 16299000
- EACH ELEMENT OF MACRO HAS 1-3 SYLLABLES ORDERED FROM 16300000
- RIGHT TO LEFT, UNUSED SYLLABLES MUST = 0. EACH MACRO 16301000
- MAY REQUIRE AT MOST ONE REPEAT PART. 16302000
- IN THIS PROCEDURE,INDEXS,THE VARIABLE "ADDR" CONTAINS THE 16303000
- PROPER REPEAT PART BY THE TIME THE LABEL "GENERATE" IS 16304000
- ENCOUNTERED. THE SYLLABLES ARE FETCHED FROM MACRO[TYPE] 16305000
- ONE AT A TIME AND IF THE REPEAT PART ! 0 THEN"ADDR" IS 16306000
- USED AS THE REPEAT PART,THUS BUILDING A SYLLABLE WITH 16307000
- THE PROPER ADDRESS AND OPERATOR . 16308000
- NOTE: IF MACRO[TYPE] = 0 THEN THIS SIGNIFIES A SYNTAX 16309000
- ERROR. ; 16310000
-PROCEDURE INDEXS; 16311000
- BEGIN 16312000
- LABEL EXIT,GENERATE,L,L1; 16313000
- INTEGER TCLASS,INDEX,ADDR,J; 16314000
- TCLASS ~ ELCLASS ; 16315000
- IF STEPI ! ASSIGNOP THEN BEGIN ERR(251); GO TO EXIT END; 16316000
- IF TCLASS = LOCLID THEN 16317000
- BEGIN 16318000
- IF SIV>STEPI OR ELCLASS>TALLYV THEN GO TO L; 16319000
- INDEX ~ 32 + ELCLASS-SIV; 16320000
- ADDR ~ ELBAT[I-2].ADDRESS; 16321000
- GO TO GENERATE; 16322000
- END; 16323000
- IF TCLASS = STEPI THEN 16324000
- BEGIN 16325000
- IF STEPI ! ADDOP OR STEPI! LITNO AND ELCLASS ! LOCLID THEN16326000
- GO TO L; 16327000
- INDEX ~ TCLASS-SIV 16328000
- +REAL(ELBAT[I-1].ADDRESS=SUB) | 4 16329000
- + REAL(ELCLASS =LOCLID) | 8; 16330000
- END 16331000
- ELSE 16332000
- BEGIN 16333000
- INDEX ~ TCLASS -SIV 16334000
- + ( IF ELCLASS = LOCLID THEN 16 ELSE 16335000
- IF ELCLASS = LOCV THEN 20 ELSE 16336000
- IF ELCLASS = SCV THEN 24 ELSE 16337000
- IF ELCLASS= DCV THEN 28 ELSE 25); 16338000
- IF ELCLASS = LOCV THEN 16339000
- IF STEPI ! LOCLID THEN GO TO L; 16340000
- IF ELCLASS = LITNO AND TCLASS = TALLYV THEN 16341000
- BEGIN EMITC(ELBAT[I].ADDRESS,SEC); GO TO EXIT END; 16342000
- END ; 16343000
- ADDR ~ ELBAT[I].ADDRESS; 16344000
- GENERATE: 16345000
- IF MACRO[INDEX]= 0 THEN 16346000
- L: BEGIN ERR(250);GO TO EXIT END; 16347000
- J ~ 8; TCLASS ~0 ; 16348000
- L1: MOVECHARACTERS(2,MACRO[INDEX],J~J-2,TCLASS,6 ); 16349000
- IF TCLASS!0 THEN 16350000
- BEGIN 16351000
- EMITC(IF TCLASS}64 THEN ADDR ELSE 0,TCLASS); 16352000
- GO TO L1 16353000
- END; 16354000
- EXIT:END INDEXS ; 16355000
- COMMENT DSS COMPILES DESTINATION STREAM STATEMENTS. 16356000
- DS~ LIT"STRING" IS HANDLED AS A SPECIAL CASE BECAUE THE 16357000
- STRING MUST BE SCANED FROM RIGHT TO LEFT,REPEATEDLY IF 16358000
- NECESSARY, AND EMITTED TO THE PROGRAM STREAM. IN 16359000
- ALL OTHER CASES,THE ELBAT WORD CONTAINS THE OPERATOR IN 16360000
- THE OPCODE FIELD ; 16361000
-PROCEDURE DSS; 16362000
- BEGIN 16363000
- INTEGER ADDR,J,K,L,T; 16364000
- LABEL EXIT,L1; 16365000
- DEFINE OPCODE=[27:6]#; 16366000
- IF STEPI ! ASSIGNOP THEN BEGIN ERR(251); GO TO EXIT END; 16367000
- IF STEPI = LOCLID THEN 16368000
- BEGIN 16369000
- EMITC(ELBAT[I].ADDRESS,CRF); 16370000
- ADDR~ 0; 16371000
- IF STEPI = LITV THEN GO TO L1 16372000
- END 16373000
- ELSE IF ELCLASS= LITNO THEN 16374000
- BEGIN 16375000
- ADDR ~ ELBAT[I].ADDRESS; STEPIT ; 16376000
- END 16377000
- ELSE ADDR ~ 1 ; 16378000
- IF Q = "4FILL0" THEN EMITC(ADDR,10) ELSE %E 16378500
- IF ELCLASS = TRNSFER THEN EMITC(ADDR,ELBAT[1].OPCODE) 16379000
- ELSE 16380000
- IF ELCLASS = LITV THEN 16381000
- BEGIN 16382000
- EMITC(ADDR,TRP); 16383000
- IF STEPI!STRNGCON THEN 16384000
- BEGIN ERR(255);GO TO EXIT END; 16384500
- IF ADDR MOD 2 ! 0 THEN 16385000
- BEGIN 16386000
- EMIT(ACCUM[1].[18:6]); J ~ 1; 16387000
- END ; 16388000
- FOR K ~J+2 STEP 2 UNTIL ADDR DO 16389000
- BEGIN 16390000
- FOR L ~6,7 DO 16391000
- MOVECHARACTERS(1,ACCUM[1],2+(IF J~J+1>COUNT THEN J~1 16392000
- ELSE J),T,L ); 16393000
- EMIT(T); 16394000
- END END 16395000
- ELSE 16396000
- L1: ERR(250); 16397000
- EXIT:END DSS ; 16398000
- COMMENT SKIPS COMPILES THE SKIP BIT STATEMENT. 16399000
- IF THE REPEAT INDEX IS A LOCALID THEN A CRF IS EMITTED. 16400000
- A BSS OR BSD IS THEN EMITTED FOR SKIP SOURCE BITS (SB) 16401000
- OR SKIP DESTINATION BITS (DB) RESPECTIVELY ; 16402000
-PROCEDURE SKIPS ; 16403000
- BEGIN 16404000
- REAL ADDR; 16405000
- IF STEPI = LOCLID THEN 16406000
- BEGIN 16407000
- EMITC(ELBAT[I].ADDRESS,CRF); ADDR~0; STEPIT; 16408000
- END 16409000
- ELSE IF ELCLASS = LITNO THEN 16410000
- BEGIN 16411000
- ADDR~ ELBAT[I].ADDRESS; STEPIT 16412000
- END 16413000
- ELSE ADDR ~ 1 ; 16414000
- IF ELCLASS =SBV THEN EMITC(ADDR,BSS) 16415000
- ELSE 16416000
- IF ELCLASS =DBV THEN EMITC(ADDR,BSD) 16417000
- ELSE ERR(250); 16418000
- END SKIPS ; 16419000
- COMMENT JUMPS COMPILES JUMP OUT AND JUMP OUT TO STATEMENTS. 16420000
- JUMP OUT TO STATEMENTS CAUSE JUMP LEVEL TO BE SET TO 16421000
- THE NUMBER OF LEVELS SPECIFIED. THEN THIS NUMBER OF 16422000
- JNS ARE EMITTED AND GOTOS IS CALLED TO COMPILE THE 16423000
- JUMP INSTRUCTION. 16424000
- SIMPLE JUMP OUTS ARE HANDLED BY EMITTING ONE JNS,ENTERING 16425000
- A PSEUDO STLABID IN INFO AND SETTING ELBAT[I] SUCH THAT 16426000
- THE GOTOS PROCEDURE WILL PERFORM THE ACTION OF SETTING 16427000
- UP THE LINKS FOR LATER FIX UPS. THE NEST STATEMENT CAUSES 16428000
- THESE FIX UPS(IF EMITTING OF JUMP INSTRUCTIONS) BY CALLING16429000
- GO TOS WHEN THE RIGHT PAREN IS ENCOUNTERED. ; 16430000
-PROCEDURE JUMPS; 16431000
- BEGIN 16432000
- JUMPLEVEL~1; 16433000
- IF STEPI!DECLARATORS THEN IF ACCUM[1]!"3OUT00" THEN 16434000
- FLAG(261); 16434100
- IF STEPI = LITNO THEN JUMPLEVEL~ ELBAT[I].ADDRESS 16435000
- ELSE BEGIN 16436000
- IF ELCLASS! TOV AND ELCLASS! STLABID THEN 16437000
- BEGIN 16438000
- COMMENT SIMPLE JUMP OUT STATEMENT; 16439000
- IF JOINFO = 0 THEN 16440000
- BEGIN 16441000
- JOINFO ~ NEXTINFO ; 16442000
- PUTNBUMP(STACKHEAD[0],LINK&(STLABID|2+1) 16443000
- [2:40:8]&2[27:40:8 ]); 16444000
- PUTNBUMP(0&(JOINFO-LASTINFO )[ 4:40:8]); 16445000
- PUTNBUMP (0); 16446000
- LASTINFO ~ JOINFO; 16447000
- END; 16448000
- ELBAT[I~ I-1]~ TAKE(JOINFO)&JOINFO[35:35:13]; 16449000
- END; I~I-1 ; 16450000
- END; 16451000
- FOR GT1~ 1 STEP 1 UNTIL JUMPLEVEL DO 16452000
- EMIT( JNS); 16453000
- GOTOS; 16454000
- END JUMPS; 16455000
- COMMENT STREAMSTMT ENVOKES THE APPROPRIATE PROCEDURE TO HANDLE 16456000
- THE VARIOUS AND SUNDRY STREAM PROCEDURE STATEMENTS. 16457000
- THE STATEMENTS ARE BROKEN DOWN AS FOLLOWS: 16458000
- IDENTIFIED BY PROCEDURE ENVOKED 16459000
- END GO TO FINI 16460000
- SEMICOLON GO TO FINI 16461000
- ) GO TO FINI 16462000
- IF IFS 16463000
- GO GOTOS 16464000
- RELEASE RELEASES 16465000
- BEGIN COMPOUNDTAIL 16466000
- SI,DI,CI,TALLY,LOCALID INDEXS 16467000
- DS DSS 16468000
- SKIP SKIPS 16469000
- JUMP JUMPS 16470000
- LABELID LABELS 16471000
- LITERAL NO.,LOCALID( NESTS 16472000
- UPON EXITING,STREAMSTMT ASSURES THAT "I" POINTS TO 16473000
- THE SEMICOLON ,END OR ) IN SYNTACICALLY CORRECT PROGRAMS; 16474000
- LABEL L,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,EXIT,FINI,START; 16475000
- SWITCH TYPE ~ FINI,L,FINI,L3,L4,L5,L6,L7,L7,L7,L7,L8,L9,L10; 16476000
- START: GO TO TYPE[ ELCLASS-ENDV+1]; 16477000
- IF ELCLASS= RTPAREN THEN GO TO FINI ; 16478000
- IF ELCLASS=STLABID THEN GO TO L2 ; 16481000
- 16482000
- IF ELCLASS 1022 WORDS. 00460000=00069000=
+ 040 SEGMENT: SAVE CODE EXCEEDS 4080 WHICH KERNEL CAN H/L 00465000=00069100=
+050 ANYWHERE: OUT OF RANGE OF C RELATIVE ADDRESSING FOR CONSTANT 00470000=00069500=
+051 BLOCK : ILLEGAL F RELATIVE ADDRESS EXP IN DECLARATION 00475000=00069510=
+052 BLOCK: PROCEDURE WHOSE BODY NOT A BLOCK 00480000=00069520=
+053 ARRAYDEC: CANT FIND RIGHT BRACKET IN SAVE ARRAY DEC 00485000=00069530=
+054 ARRAYDEC: FILL PART OF SAVE ARRAY DEC LONGER THAN SIZE 00490000=00069540=
+056 ARRAYDEC: ILLEGAL DIMENSION INDICATOR IN ARRAY DEC 00495000=00069560=
+057 SEGMENTSTART:SAVE STORAGE NOT ALLOWED WITH INTRINSIC OPTION 00500000=00069570=
+ 098 IOSTMT: ILLEGAL SPECIFIER IN SCOPE STMT: MUST BE }15. 00505000=00069580=
+ 099 INLINE: EXTRA : IN STREAM HEAD. 00510000=00069590=
+ 100 ANYWHERE: UNDECLARED IDENTIFIER. 00515000=00070000=
+ 101 CHECKER: AN ATTEMPT HAS BEEN MADE TO ADDRESS AN 00520000=00071000=
+ IDENTIFIER WHICH IS LOCAL TO ONE PROCEDURE AND GLOBAL00525000=00072000=
+ TO ANOTHER. IF THE QUANTITY IS A PROCEDURE NAME OR 00530000=00073000=
+ AN OWN VARIABLE THIS RESTRICTION IS RELAXED. 00535000=00074000=
+ 102 AEXP: CONDITIONAL EXPRESSION IS NOT OF ARITHMETIC TYPEH 00540000=00075000=
+ 103 PRIMARY: PRIMARY MAY NOT BEGIN WITH A QUANTITY OF THIS 00545000=00076000=
+ TYPE. 00550000=00077000=
+ 104 ANYWHERE: MISSING RIGHT PARENTHESIS. 00555000=00078000=
+ 105 ANYWHERE: MISSING LEFT PARENTHESIS. 00560000=00079000=
+ 106 PRIMARY: PRIMARY MAY NOT START WITH DECLARATOR. 00565000=00080000=
+ 107 BEXP: THE EXPRESSION IS NOT OF BOOLEAN TYPE. 00570000=00081000=
+ 108 EXPRSS: A RELATION MAY NOT HAVE CONDITIONAL EXPRESSIONS 00575000=00082000=
+ AS THE ARITHMETIC EXPRESSIONS. 00580000=00083000=
+ 109 BOOSEC,SIMBOO, AND BOOCOMP: THE PRIMARY IS NOT BOOLEAN. 00585000=00084000=
+ 110 BOOCOMP: A NON-BOOLEAN OPERATOR OCCURS IN A BOOLEAN 00590000=00085000=
+ EXPRESSION. 00595000=00086000=
+ 111 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00600000=00087000=
+ TIONAL) MAY BEGIN WITH A QUANTITY OF THIS TYPE. 00605000=00088000=
+ 112 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00610000=00089000=
+ TIONAL) MAY BEGIN WITH A DECLARATOR. 00615000=00090000=
+ 113 PARSE: EITHER THE SYTAX OR THE RANGE OF THE LITERALS FOR 00620000=00091000=
+ A CONCATENATE OPERATOR IS INCORRECT. 00625000=00092000=
+ 114 DOTSYNTAX: EITHER THE SYNTAX OR THE RANGE OF THE LITERALS00630000=00093000=
+ FOR A PARTIAL WORD DESIGNATOR IS INCORRECT. 00635000=00094000=
+ 115 DEXP: THE EXPRESSION IS NOT OF DESIGNATIONAL TYPE. 00640000=00095000=
+ 116 IFCLAUSE: MISSING THEN. 00645000=00096000=
+ 117 BANA: MISSING LEFT BRAKET. 00650000=00097000=
+ 118 BANA: MISSING RIGHT BRAKET. 00655000=00098000=
+ 119 COMPOUNDTAIL: MISSING SEMICOLON OR END. 00660000=00099000=
+ 120 COMPOUNDTAIL: MISSING END. 00665000=00100000=
+ 121 ACTUALPARAPART: AN INDEXED FILE MAY BE PASSED BY NAME 00670000=00101000=
+ ONLY AND ONLY TO A STREAM PROCEDURE - THE STREAM 00675000=00102000=
+ PROCEDURE MAY NOT DO A RELEASE ON THIS TYPE PARA- 00680000=00103000=
+ METER. 00685000=00104000=
+ 122 ACTUALPARAPART: STREAM PROCEDURE MAY NOT HAVE AN 00690000=00105000=
+ EXPRESSION PASSED TO IT BY NAME. 00695000=00106000=
+ 123 ACTUALPARAPART: THE ACTUAL AND FORMAL PARAMETERS DO NOT 00700000=00107000=
+ AGREE AS TO TYPE. 00705000=00108000=
+ 124 ACTUALPARAPART: ACTUAL AND FORMAL ARRAYS DO NOT HAVE SAME00710000=00109000=
+ NUMBER OF DIMENSIONS. 00715000=00110000=
+ 125 ACTUALPARAPART: STREAM PROCEDURES MAY NOT BE PASSED AS A 00720000=00111000=
+ PARAMETER TO A PROCEDURE. 00725000=00112000=
+ 126 ACTUALPARAPART: NO ACTUAL PARAMETER MAY BEGIN WITH A 00730000=00113000=
+ QUANTITY OF THIS TYPE. 00735000=00114000=
+ 127 ACTUALPARAPART: THIS TYPE QUANTITY MAY NOT BE PASSED TO A00740000=00115000=
+ STREAM PROCEDURE. 00745000=00116000=
+ 128 ACTUALPARAPART: EITHER ACTUAL AND FORMAL PARAMETERS DO 00750000=00117000=
+ NOT AGREE AS TO NUMBER, OR EXTRA RIGHT PARENTHESIS. 00755000=00118000=
+ 129 ACTUALPARAPART: ILLEGAL PARAMETER DELIMITER. 00760000=00119000=
+ 130 RELSESTMT: NO FILE NAME. 00765000=00120000=
+ 131 DOSTMT: MISSING UNTIL. 00770000=00121000=
+ 132 WHILESTMT: MISSING DO. 00775000=00122000=
+ 133 LABELR: MISSING C OLON. 00780000=00123000=
+ 134 LABELR: THE LABEL WAS NOT DECLARED IN THIS BLOCK. 00785000=00124000=
+ 135 LABELR: THE LABEL HAS ALREADY OCCURED. 00790000=00125000=
+ 136 FORMATPHRASE: IMPROPER FORMAT EDITING PHRASE. 00795000=00126000=
+ 137 FORMATPHRASE: A FORMAT EDITING PHRASE DOES NOT HAVE AN 00800000=00127000=
+ INTEGER WHERE AN INTEGER IS REQUIRED. 00805000=00128000=
+ 138 FORMATPHRASE: THE WIDTH IS TOO SMALL IN E OR F EDITING 00810000=00129000=
+ PHRASE. 00815000=00130000=
+ 139 TABLE: DEFINE IS NESTED MORE THAN EIGHT DEEP. 00820000=00131000=
+ 140 NEXTENT: AN INTEGER IN A FORMAT IS GREATER THAN 1023. 00825000=00132000=
+ 141 SCANNER: INTEGER OR IDENTIFIER HAS MORE THAN 63 00830000=00133000=
+ CHARACTORS. 00835000=00134000=
+ 142 DEFINEGEN: A DEFINE CONTAINS MORE THAN 2047 CHARACTORS 00840000=00135000=
+ (BLANK SUPPRESSED). 00845000=00136000=
+ 143 COMPOUNDTAIL: EXTRA END. 00850000=00137000=
+ 144 STMT: NO STATEMENT MAY START WITH THIS TYPE IDENTIFIER. 00855000=00138000=
+ 145 STMT: NO STATEMENT MAY START WITH THIS TYPE QUANTITY. 00860000=00139000=
+ 146 STMT: NO STATEMENT MAY START WITH A DECLARATOR - MAY BE 00865000=00140000=
+ A MISSING END OF A PROCEDURE OR A MISPLACED 00870000=00141000=
+ DECLARATION. 00875000=00142000=
+ 147 SWITCHGEN: MORE THAN 256 EXPRESSIONS IN A SWITCH 00880000=00143000=
+ DECLARATION. 00885000=00144000=
+ 148 GETSPACE: MORE THAN 1023 PROGRAM REFERENCE TABLE CELLS 00890000=00145000=
+ ARE REQUIRED FOR THIS PROGRAM. 00895000=00146000=
+ 149 GETSPACE: MORE THAN 255 STACK CELLS ARE REQUIRED FOR THIS00900000=00147000=
+ PROCEDURE. 00905000=00148000=
+ 150 ACTUALPARAPART: CONSTANTS MAY NOT BE PASSED BY NAME TO 00910000=00149000=
+ STREAM PROCEDURES. 00915000=00150000=
+ 151 FORSTMT: IMPROPER FOR INDEX VARIABLE. 00920000=00151000=
+ 152 FORSTMT: MISSING LEFT ARROW FOLLOWING INDEX VARIABLE. 00925000=00152000=
+ 153 FORSTMT: MISSING UNTIL OR WHILE IN STEP ELEMENT. 00930000=00153000=
+ 154 FORSTMT: MISSING DO IN FOR CLAUSE. 00935000=00154000=
+ 155 IFEXP: MISSING ELSE 00940000=00155000=
+ 156 LISTELEMENT: A DESIGNATIONAL EXPRESSION MAY NOT BE A LIST00945000=00156000=
+ ELEMENT. 00950000=00157000=
+ 157 LISTELEMENT: A ROW DESIGNATOR MAY NOT BE A LIST ELEMENT. 00955000=00158000=
+ 158 LISTELEMENT: MISSING RIGHT BRAKET IN GROUP OF ELEMENTS 00960000=00159000=
+ 159 PROCSTMT: ILLEGAL USE OF PROCEDURE OR FUNCTION IDENTIFIER00965000=00160000=
+ 160 PURGE: DECLARED LABEL DOES NOT OCCUR. 00970000=00161000=
+ 161 PURGE: DECLARED FORWARD PROCEDURE DOES NOT OCCUR. 00975000=00162000=
+ 163 ZIPSTMT: MISSING COMMA IN ZIP STATEMENT 00980000=00163000=
+ 163 FORMATPHRASE: THE WIDTH OF A FIELD IS MORE THAN 63. 00985000=00164000=
+ 200 EMIT: SEGMENT TOO LARGE ( > 4093SYLLABLES). 00990000=00165000=
+ 201 SIMPLE VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT-MOST 00995000=00166000=
+ IN A LEFT PART LIST. 01000000=00167000=
+ 202 SIMPLE VARIABLE: MISSING . OR ~ . 01005000=00168000=
+ 203 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS IN A ROW 01010000=00169000=
+ DESIGNATOR. 01015000=00170000=
+ 204 SUBSCRIPTED VARIABLE: MISSING ] IN A ROW DESIGNATOR. 01020000=00171000=
+ 205 SUBSCRIPTED VARIABLE: A ROW DESIGNATOR APPEARS OUTSIDE OF 01025000=00172000=
+ AN ACTUAL PARAMETER LIST OR FILL STATEMENT. 01030000=00173000=
+ 206 SUBSCRIPTED VARIABLE: MISSING ]. 01035000=00174000=
+ 207 SUBSCRIPTED VARIABLE: MISSING [. 01040000=00175000=
+ 208 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS. 01045000=00176000=
+ 209 SUBSCRIPTED VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT- 01050000=00177000=
+ MOST IN A LEFT PART LIST. 01055000=00178000=
+ 210 SUBSCRIPTED VARIABLE: MISSING , OR ~ . 01060000=00179000=
+ 211 VARIABLE: PROCEDURE ID USED OUTSIDE OF SCOPE IN LEFT PART.01065000=00180000=
+ 250 STREAM STMT:ILLEGAL STREAM STATEMENT. 01070000=00181000=
+ 251 ANY STREAM STMT PROCEDURE: MISSING ~. 01075000=00182000=
+ 252 INDEX: MISSING + OR - . 01080000=00183000=
+ 253 INDEX: MISSING NUMBER OR STREAM VARIABLE. 01085000=00184000=
+ 254 EMITC: NUMBER>63 OR NUMBER OF LABELS+LOCALS+FORMALS>63. 01090000=00185000=
+ 255 DSS: MISSING STRING IN DS~ LIT STATEMENT. 01095000=00186000=
+ 256 RELEASES: MISSING PARENTHESIS OR FILE IDENTIFIER IS NOT 01100000=00187000=
+ A FORMAL PARAMETER. 01105000=00188000=
+ 257 GOTOS,LABELS,OR JUMPS: LABEL SPECIFIED IS NOT ON THE SAME 01110000=00189000=
+ NEST LEVEL AS A PRECEDING APPEARANCE OF THE 01115000=00190000=
+ LABEL. 01120000=00191000=
+ 258 LABELS: MISSING :. 01125000=00192000=
+ 259 LABELS: LABEL APPEARS MORE THAN ONCE. 01130000=00193000=
+ 260 GOTOS: MISSING LABEL IN A GO TO OR JUMP OUT TO STATEMENT. 01135000=00194000=
+ 261 JUMPS: MISSING OUT IN JUMP OUT STATEMENT. 01140000=00195000=
+ 262 NESTS: MISSING PARENTHESIS. 01145000=00196000=
+ 263 IFS:MISSING SC IN IF STATEMENT. 01150000=00197000=
+ 264 IFS: MISSING RELATIONAL IN IF STATEMENT. 01155000=00198000=
+ 265 IFS: MISSING ALPHA,DC OR STRING IN IF STATEMENT. 01160000=00199000=
+ 266 IFS: MISSING THEN INIF STATEMENT. 01165000=00200000=
+ 267 FREDFIX: THERE ARE GO TO STATEMENTS IN WHICH THE LABEL IS 01170000=00201000=
+ UNDEFINED. 01175000=00202000=
+ 268 EMITC: A REPEAT INDEX }64 WAS SPECIFIED OR TOO MANY 01180000=00203000=
+ FORMAL PARAMETERS,LOCALS AND LABELS. 01185000=00204000=
+ 269 TABLE: A CONSTANT IS SPECIFIED WHICH IS TOO LARGE 01190000=00205000=
+ OR TOO SMALL. 01195000=00206000=
+ 281 DBLSTMT: MISSING (. 01200000=00207000=
+ 282 DBLSTMT: TOO MANY OPERATORS. 01205000=00208000=
+ 283 DBLSTMT: TOO MANY OPERANDS. 01210000=00209000=
+ 284 DBLSTMT: MISSING , . 01215000=00210000=
+ 285 DBLSTMT: MISSING ) . 01220000=00211000=
+ 300 FILLSTMT: THE IDENTIFIER FOLLOWING "FILL" IS NOT 01225000=00212000=
+ AN ARRAY IDENTIFIER. 01230000=00213000=
+ 301 FILLSTMT: MISSING "WITH" IN FILL STATEMENT. 01235000=00214000=
+ 302 FILLSTMT: IMPROPER FILL ELEMENT. 01240000=00215000=
+ 303 FILLSTMT: NON-OCTAL CHARACTER IN OCTAL FILL. 01245000=00216000=
+ 304 FILLSTMT: IMPROPER ARRAY ROW DESIGNATOR IN FILL. 01250000=00217000=
+ 305 FILLSTMT: DATA IN FILL EXCEEDS 1023 WORDS. 01255000=00218000=
+ 306 FILLSTMT: ODD NUMBER OF PARENTHESES IN FILL. 01260000=00218110=
+ 400 MERRIMAC:MISSING FILE ID IN MONITOR DEC. 01265000=00219000=
+ 401 MERRIMAC:MISSING LEFT PARENTHESIS IN MONITOR DEC. 01270000=00220000=
+ 402 MERRIMAC:IMPROPER SUBSCRIPT FOR MONITOR LIST ELEMENT. 01275000=00221000=
+ 403 MERRIMAC:IMPROPER SUBSCRIPT EXPRESSION DELIMITER IN 01280000=00222000=
+ MONITOR LIST ELEMENT. 01285000=00223000=
+ 404 MERRIMAC:IMPROPER NUMBER OF SUBSCRIPTS IN MONITOR LIST 01290000=00224000=
+ ELEMENT. 01295000=00225000=
+ 405 MERRIMAC:LABEL OR SWITCH MONITORED AT IMPROPER LAVEL. 01300000=00226000=
+ 406 MERRIMAC:IMPROPER MONITOR LIST ELEMENT. 01305000=00227000=
+ 407 MERRIMAC:MISSING RIGHT PARENTHESIS IN MONITOR DECLARATION.01310000=00228000=
+ 408 MERRIMAC:IMPROPER MONITOR DECLARATION DELIMITER. 01315000=00229000=
+ 409 DMUP:MISSING FILE IDENTIFIER IN DUMP DECLARATION. 01320000=00230000=
+ 410 DMUP:MISSING LEFT PARENTHESIS IN DUMP DECLARATION. 01325000=00231000=
+ 411 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF01330000=00232000=
+ SUBSCRIPTS. 01335000=00233000=
+ 412 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF01340000=00234000=
+ SUBSCRIPTS. 01345000=00235000=
+ 413 DMUP:IMPROPER ARRAY DUMP LIST ELEMENT. 01350000=00236000=
+ 414 DMUP:ILLEGAL DUMP LIST ELEMENT. 01355000=00237000=
+ 415 DMUP:MORE THAN 100 LABELS APPEAR AS DUMP LIST ELEMENTS 01360000=00238000=
+ IN ONE DUMP DECLARATION. 01365000=00239000=
+ 416 DMUP:ILLEGAL DUMP LIST ELEMENT DELIMITER. 01370000=00240000=
+ 417 DMUP:MISSING DUMP LABEL IN DUMP DECLARATION. 01375000=00241000=
+ 418 DMUP:MISSING COLON IN DUMP DECLARATION. 01380000=00242000=
+ 419 DMUP:IMPROPER DUMP DECLARATION DELIMITER. 01385000=00243000=
+ 420 READSTMT:MISSING LEFT PARENTHESIS IN READ STATEMENT. 01390000=00244000=
+ 421 READSTMT:MISSING LEFT PARENTHESIS IN READ REVERSE 01395000=00245000=
+ STATEMENT. 01400000=00246000=
+ 422 READSTMT:MISSING FILE IN READ STATEMENT. 01405000=00247000=
+ 423 READSTMT:IMPROPER RELEASE INDICATOR. 01410000=00248000=
+ 424 READSTMT:IMPROPER FILE DELIMITER IN READ STATEMENT 01415000=00249000=
+ 425 READSTMT:IMPROPER FORMAT DELIMITER IN READ STATEMENT. 01420000=00250000=
+ 426 READSTMT:IMPROPER DELIMITER FOR SECOND PARAMETER IN READ 01425000=00251000=
+ STATEMENT. 01430000=00252000=
+ 427 READSTMT:IMPROPER ROW DESIGNATOR IN READ STATEMENT. 01435000=00253000=
+ 428 READSTMT:IMPROPER ROW DESIGNATOR DELIMITER IN READ 01440000=00254000=
+ STATEMENT. 01445000=00255000=
+ 429 READSTMT:MISSING ROW DESIGNATOR IN READ STATEMENT. 01450000=00256000=
+ 430 READSTMT:IMPROPER DELIMITER PRECEEDING THE LIST IN A READ 01455000=00257000=
+ STATEMENT. 01460000=00258000=
+ 431 HANDLETHETAILENDOFAREADORSPACESTATEMENT:IMPROPER END OF 01465000=00259000=
+ FILE LABEL IN READ OR SPACE STATEMENT. 01470000=00260000=
+ 432 HANDLETHETAILENDOFAREADORSPACESTATEMENT:IMPROPER PARITY 01475000=00261000=
+ LABEL IN READ OR SPACE STATEMENT. 01480000=00262000=
+ 433 HANDLETHETAILENDOFAREADORSPACESTATEMENT:MISSING RIGHT 01485000=00263000=
+ BRACKET IN READ OR SPACE STATEMENT. 01490000=00264000=
+ 434 SPACESTMT:MISSING LEFT PARENTHESIS IN SPACE STATEMENT. 01495000=00265000=
+ 435 SPACESTMT:IMPROPER FILE IDENTIFIER IN SPACE STATEMENT. 01500000=00266000=
+ 436 SPACESTMT:MISSING COMMA IN SPACE STATEMENT. 01505000=00267000=
+ 437 SPACESTMT:MISSING RIGHT PARENTHESIS IN SPACE STATEMENT. 01510000=00268000=
+ 438 WRITESTMT:MISSING LEFT PARENTHESIS IN A WRITE STATEMENT. 01515000=00269000=
+ 439 WRITESTMT:IMPROPER FILE IDENTIFIER IN A WRITE STATEMENT. 01520000=00270000=
+ 440 WRITESTMT:IMPROPER DELIMITER FOR FIRST PARAMETER IN A 01525000=00271000=
+ WRITE STATEMENT. 01530000=00272000=
+ 441 WRITESTMT:MISSING RIGHT BRACKET IN CARRIAGE CONTROL PART 01535000=00273000=
+ OF A WRITE STATEMENT. 01540000=00274000=
+ 442 WRITESTMT:ILLEGAL CARRIAGE CONTROL DELIMITER IN A WRITE 01545000=00275000=
+ STATEMENT. 01550000=00276000=
+ 443 WRITESTMT:IMPROPER SECOND PARAMETER DELIMITER IN WRITE 01555000=00277000=
+ STATEMENT. 01560000=00278000=
+ 444 WRITESTMT:IMPROPER ROW DESIGNATOR IN A WRITE STATEMENT. 01565000=00279000=
+ 445 WRITESTMT:MISSING RIGHT PARENTHESIS AFTER A ROW DESIGNATOR01570000=00280000=
+ IN A WRITE STATEMENT. 01575000=00281000=
+ 446 WRITESTMT:MISSING ROW DESIGNATOR IN A WRITE STATEMENT. 01580000=00282000=
+ 447 WRITESTMT:IMPROPER DELIMITER PRECEEDING A LIST IN A WRITE 01585000=00283000=
+ STATEMENT. 01590000=00284000=
+ 448 WRITESTMT:IMPROPER LIST DELIMITER IN A WRITE STATEMENT. 01595000=00285000=
+ 449 READSTMT:IMPROPER LIST DELIMITER IN A READ STATEMENT. 01600000=00286000=
+ 450 LOCKSTMT:MISSING LEFT PARENTHESIS IN A LOCK STATEMENT. 01605000=00287000=
+ 451 LOCKSTMT:IMPROPER FILE PART IN A LOCK STATEMENT. 01610000=00288000=
+ 452 LOCKSTMT:MISSING COMMA IN A LOCK STATEMENT. 01615000=00289000=
+ 453 LOCKSTMT:IMPROPER UNIT DISPOSITION PART IN A LOCK 01620000=00290000=
+ STATEMENT. 01625000=00291000=
+ 454 LOCKSTMT:MISSING RIGHT PARENTHESIS IN A LOCK STATEMENT. 01630000=00292000=
+ 455 CLOSESTMT:MISSING LEFT PARENTHESIS IN A CLOSE STATEMENT. 01635000=00293000=
+ 456 CLOSESTMT:IMPROPER FILE PART IN A CLOSE STATEMENT. 01640000=00294000=
+ 457 CLOSESTMT:MISSING COMMA IN A CLOSE STATEMENT. 01645000=00295000=
+ 458 CLOSESTMT:IMPROPER UNIT DISPOSITION PART IN A CLOSE 01650000=00296000=
+ STATEMENT. 01655000=00297000=
+ 459 CLOSESTMT:MISSING RIGHT PARENTHESIS IN A CLOSE STATEMENT. 01660000=00298000=
+ 460 RWNDSTMT:MISSING LEFT PARENTHESIS IN A REWIND STATEMENT. 01665000=00299000=
+ 461 RWNDSTMT:IMPROPER FILE PART IN A REWIND STATEMENT. 01670000=00300000=
+ 462 RWNDSTMT:MISSING RIGHT PARENTHESIS IN A REWIND STATEMENT. 01675000=00301000=
+ 463 BLOCK:A MONITOR DECLARATION APPEARS IN THE SPECIFICATION 01680000=00302000=
+ PART OF A PROCEDURE. 01685000=00303000=
+ 464 BLOCK:A DUMP DECLARATION APPEARS IN THE SPECIFICATION PART01690000=00304000=
+ OF A PROCEDURE. 01695000=00305000=
+ 465 INLINE: MISSING PARAMETER IDENTIFIER IN INLINE STREAM 01700000=00305001=
+ STATEMENT PARAMETER LIST. 01705000=00305002=
+500 .ID: NEEDS DOUBLE PERIOD FOR PRTE IF PAST 512 01710000=00305100=
+ 520 TABLE: STRING LONGER THAN ONE WORD (48 BITS). 01715000=00305200=
+ 521 TABLE: STRING CONTAINS A NON-PERMISSIBLE CHARACTER. 01720000=00305300=
+ 600 DOLLARCARD: NUMBER EXPECTED. 01725000=00400000=
+ 601 DOLLARCARD: OPTION IDENTIFIER EXPECTED. 01730000=00401000=
+ 602 DOLLARCARD: TOO MANY USER-DEFINED OPTIONS. 01735000=00403000=
+ 603 DOLLARCARD: UNRECOGNIZED WORD OR CHARACTER. 01740000=00404000=
+ 604 DOLLARCARD: MISMATCHED PARENTHESES. 01745000=00405000=
+ 605 DOLLARCARD: $ IN CARD COLUMN 1 FOR OMIT CARD 01750000=00406000=
+ 610 READACARD: SEQUENCE ERROR. 01755000=00410000=
+ 611 READACARD: ERROR LIMIT HAS BEEN EXCEEDED. 01760000=00411000=
+ ; 01765000=00490000=
+BEGIN 01770000=00500000=
+ COMMENT OUTERMOST BLOCK; 01775000=00500000=
+INTEGER 01780000=00501000=
+ ERRORCOUNT; 01785000=00501000=
+ COMMENT NUMBER OF ERROR MSGS. MCP WILL TYPE 01790000=00501000=
+ SYNTX ERR AT EOJ IF THIS IS NON-ZERO. MUST BE @R+25; 01795000=00502000=
+INTEGER 01800000=00503000=
+ SAVETIME; 01805000=00503000=
+ COMMENT SAVE-FACTOR FOR CODE FILE, GIVEN BY MCP. 01810000=00503000=
+ IF COMPILE & GO =0, FOR SYNTAX, =-1. MUST BE AT R+26;01815000=00504000=
+INTEGER 01820000=00504100=
+ CARDNUMBER; % SEQ # OF CARD BEING PROCESSED. 01825000=00504100=
+INTEGER 01830000=00504150=
+ CARDCOUNT; % NUMBER OF CARDS PROCESSED. 01835000=00504150=
+BOOLEAN 01840000=00504700=
+ BUILDLINE; 01845000=00504700=
+ COMMENT RR1-RR11 ARE USED IN SOME PROCEDURES IN 01850000=00505000=
+ PLACE OF LOCALS TO SAVE STACK SPACE; 01855000=00506000=
+REAL 01860000=00507000=
+ RR1, 01865000=00507000=
+ RR2, 01870000=00507000=
+ RR3, 01875000=00507000=
+ RR4, 01880000=00507000=
+ RR5, 01885000=00507000=
+ RR6, 01890000=00507000=
+ RR7, 01895000=00507000=
+ RR8, 01900000=00507000=
+ RR9, 01905000=00507000=
+ RR10, 01910000=00507000=
+ RR11; 01915000=00507000=
+ COMMENT SOME OF THE RRI ARE USED TO PASS FILE INFORMATION 01920000=00508000=
+ TO THE MAIN BLOCK; 01925000=00509000=
+ 01930000=00510000=
+ COMMENT EXAMIN RETURNS THE CHARACTER AT ABSOLUTE ADDRESS NCR; 01935000=00510000=
+REAL 01940000=00511000=
+ STREAM PROCEDURE EXAMIN(NCR); 01945000=00511000=
+VALUE 01950000=00511000=
+ NCR; 01955000=00511000=
+ BEGIN 01960000=00512000=
+ SI:= NCR; 01965000=00512000=
+ DI:= LOC EXAMIN; 01970000=00512000=
+ DI:= DI+7; 01975000=00512000=
+ DS:= CHR 01980000=00512000=
+ END; 01985000=00512000=
+INTEGER 01990000=00523000=
+ STREAM PROCEDURE GETF(Q); 01995000=00523000=
+VALUE 02000000=00523000=
+ Q; 02005000=00523000=
+ BEGIN 02010000=00524000=
+ SI:= LOC GETF; 02015000=00524000=
+ SI:= SI-7; 02020000=00524000=
+ DI:= LOC Q; 02025000=00524000=
+ DI:= DI+5; 02030000=00524000=
+ SKIP 3 DB; 02035000=00525000=
+ (IF SB THEN DS:= SET ELSE DS:= RESET;SKIP SB); 02040000=00525000=
+ DI:= LOC Q; 02045000=00526000=
+ SI:= Q; 02050000=00526000=
+ DS:= WDS; 02055000=00526000=
+ SI:= Q; 02060000=00526000=
+ GETF:= SI 02065000=00527000=
+ END GETF; 02070000=00527000=
+ 02075000=00528000=
+COMMENT START SETTING UP FILE PARAMETERS; 02080000=00528000=
+IF EXAMIN(RR11:= GETF(3)+6"Y08") ^= 12 THEN 02085000=00529000=
+ RR1:= 5 02090000=00529000=
+ELSE 02095000=00529000=
+ BEGIN 02100000=00530000=
+ RR1:= 2; 02105000=00530000=
+ RR2:= 150 02110000=00530000=
+ END; 02115000=00530000=
+IF EXAMIN(RR11+5) ^= 12 THEN 02120000=00531000=
+ RR3:= 4 02125000=00531000=
+ELSE 02130000=00531000=
+ BEGIN 02135000=00532000=
+ RR3:= 2; 02140000=00532000=
+ RR4:= 150 02145000=00532000=
+ END; 02150000=00532000=
+IF EXAMIN(RR11+10) = 12 THEN 02155000=00533000=
+ BEGIN 02160000=00534000=
+ RR5:= 2; 02165000=00534000=
+ RR6:= 10; 02170000=00534000=
+ RR7:= 150 02175000=00534000=
+ END 02180000=00535000=
+ELSE 02185000=00535000=
+ BEGIN 02190000=00535000=
+ RR5:= 1; 02195000=00535000=
+ RR6:= 56; 02200000=00535000=
+ RR7:= 10 02205000=00535000=
+ END; 02210000=00535000=
+IF EXAMIN(RR11+15) = 12 THEN 02215000=00536000=
+ BEGIN 02220000=00537000=
+ RR8:= 10; 02225000=00537000=
+ RR9:= 150 02230000=00537000=
+ END 02235000=00538000=
+ELSE 02240000=00538000=
+ BEGIN 02245000=00538000=
+ RR8:= 56; 02250000=00538000=
+ RR9:= 10 02255000=00538000=
+ END; 02260000=00538000=
+ BEGIN 02265000=01000000=
+ COMMENT MAIN BLOCK; 02270000=01000000=
+ INTEGER 02275000=01000800=
+ OPINX; % USED FOR INDEXING INTO OPTIONS ARRAY. 02280000=01000800=
+ BOOLEAN 02285000=01000802=
+ SETTING; % USED BY DOLLARCARD FOR AN OPTION"S SETTING 02290000=01000802=
+ INTEGER 02295000=01000860=
+ NEWINX, 02300000=01000860=
+ ADDVALUE, 02305000=01000860=
+ BASENUM, 02310000=01000860=
+ TOTALNO; 02315000=01000860=
+ DEFINE 02320000=01000902=
+ OPARSIZE = 200 #; 02325000=01000902=
+ ARRAY 02330000=01000904=
+ OPTIONS[0:OPARSIZE]; 02335000=01000904=
+ BOOLEAN 02340000=01000910=
+ OPTIONWORD; 02345000=01000910=
+ DEFINE 02350000=01000920=
+ CHECKBIT = 1 #, 02355000=01000930=
+ DEBUGBIT = 2 #, 02360000=01000940=
+ DECKBIT = 3 #, 02365000=01000950=
+ FORMATBIT = 4 #, 02370000=01000960=
+ INTBIT = 5 #, 02375000=01000970=
+ LISTABIT = 6 #, 02380000=01000980=
+ LISTBIT = 7 #, 02385000=01000990=
+ LISTPBIT = 8 #, 02390000=01001000=
+ MCPBIT = 9 #, 02395000=01001010=
+ MERGEBIT = 10 #, 02400000=01001020=
+ NESTBIT = 11 #, 02405000=01001030=
+ NEWBIT = 12 #, 02410000=01001040=
+ NEWINCLBIT = 13 #, 02415000=01001050=
+ OMITBIT = 14 #, 02420000=01001060=
+ PRINTDOLLARBIT = 02425000=01001060=
+ 15 #, 02430000=01001070=
+ PRTBIT = 16 #, 02435000=01001080=
+ PUNCHBIT = 17 #, 02440000=01001090=
+ PURGEBIT = 18 #, 02445000=01001100=
+ SEGSBIT = 19 #, 02450000=01001110=
+ SEQBIT = 20 #, 02455000=01001120=
+ SEQERRBIT = 21 #, 02460000=01001130=
+ SINGLBIT = 22 #, 02465000=01001140=
+ STUFFBIT = 23 #, 02470000=01001150=
+ VOIDBIT = 24 #, 02475000=01001160=
+ VOIDTBIT = 25 #, 02480000=01001170=
+ USEROPINX = 26 #; 02485000=01001170=
+ 02490000=01001180=
+COMMENT IF A NEW COMPILER-DEFINED OPTION IS ADDED, CHANGE USEROPINX 02495000=01001180=
+ AND ADD OPTION IN DEFINES BELOW, IN DOLLARCARD, AND IN 02500000=01001190=
+ FILL STATEMENT IN INITIALIZATION OF COMPILER; 02505000=01001200=
+ DEFINE 02510000=01001210=
+ CHECKTOG = OPTIONWORD.[CHECKBIT:1] #, 02515000=01001220=
+ DEBUGTOG = OPTIONWORD.[DEBUGBIT:1] #, 02520000=01001230=
+ DECKTOG = OPTIONWORD.[DECKBIT:1] #, 02525000=01001240=
+ FORMATOG = OPTIONWORD.[FORMATBIT:1] #, 02530000=01001250=
+ INTOG = OPTIONWORD.[INTBIT:1] #, 02535000=01001260=
+ LISTATOG = OPTIONWORD.[LISTABIT:1] #, 02540000=01001270=
+ LISTOG = OPTIONWORD.[LISTBIT:1] #, 02545000=01001280=
+ LISTPTOG = OPTIONWORD.[LISTPBIT:1] #, 02550000=01001290=
+ MCPTOG = OPTIONWORD.[MCPBIT:1] #, 02555000=01001300=
+ MERGETOG = OPTIONWORD.[MERGEBIT:1] #, 02560000=01001310=
+ NESTOG = OPTIONWORD.[NESTBIT:1] #, 02565000=01001320=
+ NEWTOG = OPTIONWORD.[NEWBIT:1] #, 02570000=01001330=
+ NEWINCL = OPTIONWORD.[NEWINCLBIT:1] #, 02575000=01001340=
+ OMITTING = OPTIONWORD.[OMITBIT:1] #, 02580000=01001350=
+ PRINTDOLLARTOG = 02585000=01001350=
+ OPTIONWORD.[PRINTDOLLARBIT:1] #, 02590000=01001360=
+ PRTOG = OPTIONWORD.[PRTBIT:1] #, 02595000=01001370=
+ PUNCHTOG = OPTIONWORD.[PUNCHBIT:1] #, 02600000=01001380=
+ PURGETOG = OPTIONWORD.[PURGEBIT:1] #, 02605000=01001390=
+ SEGSTOG = OPTIONWORD.[SEGSBIT:1] #, 02610000=01001400=
+ SEQTOG = OPTIONWORD.[SEQBIT:1] #, 02615000=01001410=
+COMMENT SEQTOG INDICATES RESEQUENCING IS TO BE DONE; 02620000=01001410=
+ SEQERRTOG = OPTIONWORD.[SEQERRBIT:1] #, 02625000=01001430=
+ SINGLTOG = OPTIONWORD.[SINGLBIT:1] #, 02630000=01001440=
+ STUFFTOG = OPTIONWORD.[STUFFBIT:1] #, 02635000=01001450=
+ VOIDING = OPTIONWORD.[VOIDBIT:1] #, 02640000=01001460=
+ VOIDTAPE = OPTIONWORD.[VOIDTBIT:1] #, 02645000=01001470=
+ DUMMY = #; 02650000=01001470=
+ BOOLEAN 02655000=01001480=
+ NOHEADING; % TRUE IF DATIME HAS NOT BEEN CALLED. 02660000=01001480=
+ BOOLEAN 02665000=01001490=
+ NEWBASE; % NEW BASENUM FOUND ON A NEW $-CARD. 02670000=01001490=
+ BOOLEAN 02675000=01001500=
+ LASTCRDPATCH; % NORMALLY FALSE, SET TO TRUE WHEN THE 02680000=01001500=
+ % LAST CARD FROM SYMBOLIC LIBRARY READ 02685000=01001510=
+ % IS PATCHED FROM THE CARD READER. 02690000=01001520=
+ INTEGER 02695000=01001530=
+ XMODE; % TELLS DOLLARCARD HOW TO SET OPTIONS. 02700000=01001530=
+ BOOLEAN 02705000=01001540=
+ DOLLARTOG; % TRUE IF SCANNING A DOLLAR CARD. 02710000=01001540=
+ INTEGER 02715000=01001550=
+ ERRMAX; % COMPILATION STOPS IF EXCEEDED. 02720000=01001550=
+ BOOLEAN 02725000=01001560=
+ SEQXEQTOG; % GIVE SEQ. NO. WHEN DS-ING OBJ. 02730000=01001560=
+ BOOLEAN 02735000=01001570=
+ LISTER; % LISTOG OR LISTATOG OR DEBUGTOG. 02740000=01001570=
+ ALPHA 02745000=01001580=
+ MEDIUM; % INPUT IS: T,C,P,CA,CB,CC. 02750000=01001580=
+ INTEGER 02755000=01001590=
+ MYCLASS; % USED IN DOLLARCARD EVALUATION. 02760000=01001590=
+ REAL 02765000=01001600=
+ BATMAN; % USED IN DOLLARCARD EVALUATION. 02770000=01001600=
+ ARRAY 02775000=01003000=
+ SPECIAL[0:31]; 02780000=01003000=
+ COMMENT THIS ARRAY HOLDS THE INTERNAL CODE FOR THE SPECIAL 02785000=01004000=
+ CHARACTORS: IT IS FILLED DURING INITIALIZATION; 02790000=01005000=
+ ARRAY 02795000=01007000=
+ INFO[0:127, 0:255]; 02800000=01007000=
+ COMMENT INFO CONTAINS ALL THE INFORMATION ABOUT A GIVEN IDENTIFIER 02805000=01008000=
+ OR RESERVED WORD. THE FIRST WORD OF A GIVEN ENTRY IS 02810000=01009000=
+ THE INTERNAL CODE ( OR ELBAT WORD AS IT IS USUALLY 02815000=01010000=
+ CALLED). THE SECOND WORD CONTAINS THE FORWARD BIT (IN 02820000=01011000=
+ [1:1]) FOR PROCEDURES, THE LINK TO PREVIOUS ENTRY (IN 02825000=01012000=
+ [4:8]). THE NUMBER OF CHARACTORS IN THE ALPHA REPRESENTA- 02830000=01013000=
+ TION (IN [12:6]), AND THE FIRST 5 CHARACTERS OF ALPHA. 02835000=01014000=
+ SUCCEDING WORDS CONTAIN THE REMAINING CHARACTORS OF ALPHA,02840000=01015000=
+ FOLLOWED BY ANY ADDITIONAL INFORMATION. THE ELBAT WORD 02845000=01016000=
+ AND THE ALPHA FOR ANY QUANTITY ARE NOT SPLIT ACROSS A ROW 02850000=01017000=
+ OF INFO. FOR PURPOSES OF FINDING AN IDENTIFIER OR 02855000=01018000=
+ RESERVED WORD THE QUANTITIES ARE SCATTERED INTO 125 02860000=01019000=
+ DIFERENT LISTS OR STACKES. WHICH STACK CONTAINS A QUANTITY02865000=01020000=
+ IS GIVEN BY TAKING NAAAAA MOD 125 WHERE N IS THE NUMBER 02870000=01021000=
+ OF CHARACTORS AND AAAAA IS THE FIRST 5 CHARACTORS OF 02875000=01022000=
+ ALPHA, FILLED IN WITH ZEROS FROM THE RIGHT IF NEEDED. 02880000=01023000=
+ THIS NUMBER IS CALLED THE SCRAMBLE NUMBER OR INDEX. 02885000=01024000=
+ THE FIRST ROW OF INFO IS USED FOR OTHER PURPOSES. THE 02890000=01025000=
+ RESERVED WORDS OCCUPY THE SECOND ROW. IT IS FILLED DURING 02895000=01026000=
+ INITIALIZATION; 02900000=01027000=
+ 02905000=01028000=
+COMMENT INFO FORMAT 02910000=01028000=
+ FOLLOWING IS A DESCRIPTION OF THE FORMAT OF ALL TYPES OF ENTRIES 02915000=01029000=
+ ENTERED IN INFO: 02920000=01030000=
+ THE FIRST WORD OF ALL ENTRIES IS THE ELBAT WORD. 02925000=01031000=
+ THE INCR FIELD ([27:8]) CONTAINS AN INCREMENT WHICH WHEN 02930000=01032000=
+ ADDED TO THE CURRENT INDEX INTO INFO YELDSAN INDEX TO ANY 02935000=01033000=
+ ADDITIONAL INFO (IF ANY) FOR THIS ENTRY. 02940000=01034000=
+ E.G. IF THE INDEX IS IX THEN INFO[(IX+INCR).LINKR,(IX+INCR). 02945000=01035000=
+ LINKC] WILL CONTAIN THE FIRST WORD OF ADDITIONAL INFO. 02950000=01036000=
+ THE LINK FIELD OF THE ELBAT WORD IN INFO IS DIFFERENT FROM 02955000=01037000=
+ THAT OF THE ENTRY IN ELBAT PUT IN BY TABLE.THE ENTRY IN ELBAT 02960000=01038000=
+ POINTS TO ITS OWN LOCATION (RELATIVE) IN INFO. 02965000=01039000=
+ THE LINK IN INFO POINTS TO THE PREVIOUS ENTRY E.G.,THE 02970000=01040000=
+ LINK FROM STACKHEAD WHICH THE CURRENT ENTRY REPLACED. 02975000=01041000=
+ FOR SIMPLICITY,I WILL CONSIDER INFO TO BE A ONE DIMENSIONAL 02980000=01042000=
+ ARRAY,SO THAT THE BREAKING UP OF THE LINKS INTO ROW AND COLUMN 02985000=01043000=
+ WILL NOT DETRACT FROM THE DISCUSSION. 02990000=01044000=
+ ASSUME THAT THREE IDENTIFIERS A,B,AND C "SCRAMBLE" INTO 02995000=01045000=
+ THE SAME STACKHEAD LOCATION IN THE ORDER OF APPEARANCE. 03000000=01046000=
+ FURTHER ASSUME THERE ARE NO OTHER ENTRIES CONNECTED TO 03005000=01047000=
+ THIS STACKHEAD INDEX. LET THIS STACKHEAD LOCATION BE 03010000=01048000=
+ S[L] 03015000=01049000=
+ NOW THE DECLARATION 03020000=01050000=
+ BEGIN REAL A,B,C IS ENCOUNTERED 03025000=01051000=
+ IF THE NEXT AVAILABLE INFO SPACE IS CALLED NEXTINFO 03030000=01052000=
+ THEN A IS ENTERED AS FOLLOWS:(ASSUME AN ELBAT WORD T HAS BEEN 03035000=01053000=
+ CONSTRUCTED FOR A) 03040000=01054000=
+ T.LINK~ S[L]. (WHICH IS ZERO AT FIRST). 03045000=01055000=
+ INFO[NEXTINFO]~T. S[L]~NEXTINFO. 03050000=01056000=
+ NEXTINFO~NEXTINFO+NUMBER OF WORDS IN THIS 03055000=01057000=
+ ENTRY. 03060000=01058000=
+ NOW S[L] POINTS TO THE ENTRY FOR A IN INFO AND THE ENTRY 03065000=01059000=
+ ITSELF CONTAINS THE STOP FLAG ZERO. 03070000=01060000=
+ B IS ENTERED SIMILARLY TO A. 03075000=01061000=
+ NOW S[L] POINTS TO THE ENTRY FOR B AND IT POINTS TO THE 03080000=01062000=
+ ENTRY FOR A. 03085000=01063000=
+ SIMILARLY,AFTER C IS ENTERED 03090000=01064000=
+ S[L] POINTS TO C,WHOSE ENTRY POINTS TO B WHOSE ENTRY 03095000=01065000=
+ POINTS TO A. 03100000=01066000=
+ THE SECOND WORD OF EACH ENTRY IN INFO IS MADE UP AS FOLLOWS: 03105000=01067000=
+ FWDPT =[1:1],THIS TELLS WHETHER A PROCEDURE WAS DECLARED 03110000=01068000=
+ FORWARD. IT IS RESET AT THE TIME OF ITS ACTUAL 03115000=01069000=
+ FULL DECLARATION. 03120000=01070000=
+ PURPT =[4:8] THIS GIVES A DECREMENT WHICH GIVES THE RELATIVE 03125000=01071000=
+ INDEX TO THE PREVIOUS INFO ENTRY WHEN SUBTRACTED 03130000=01072000=
+ FROM THE CURRENT ENTRY INDEX. 03135000=01073000=
+ [12:6] TELLS THE NUMBER OF CHARACTERS IN THE ENTRY.(<64) 03140000=01074000=
+ [18:30] CONTAINS THE FIRST FIVE ALPHA CHARACTERS OF THE ENTRY 03145000=01075000=
+ AND SUCCEEDING WORDS CONTAIN ALL OVERFLOW IF NEEDED. 03150000=01076000=
+ THESE WORDS CONTAIN 8 CHARACTERS EACH,LEFT JUSTIFIED. 03155000=01077000=
+ THUS,AN ENTRY FOR SYMBOL FOLLOWED BY AN ENTRY 03160000=01078000=
+ FOR X WOULD APPEAR AS FOLLOWS: 03165000=01079000=
+ INFO[I] = ELBATWRD (MADE FOR SYMBOL) 03170000=01080000=
+ I+1 = OP6SYMBO (P DEPENDS ON PREVIOUS ENTRY) 03175000=01081000=
+ I+2 = L 03180000=01082000=
+ I+3 = ELBATWRD (MADE FOR X) 03185000=01083000=
+ I+4 = 031X 03190000=01084000=
+ THIS SHOWS THAT INFO[I-P] WOULD POINT TO THE BEGINNING OF 03195000=01085000=
+ THE ENTRY BEFORE SYMBOL, AND 03200000=01086000=
+ INFO[I+3-3] POINTS TO THE ENTRY FOR SYMBOL. 03205000=01087000=
+ ALL ENTRIES OF IDNETIFIERS HAVE THE INFORMATION DESCRIBED ABOVE 03210000=01088000=
+ THAT IS,THE ELBAT WORD FOLLOWED BY THE WORD CONTAING THE FIRST 03215000=01089000=
+ FIVE CHARACTERS OF ALPHA,AND ANY ADDITIONAL WORDS OF ALPHA IF 03220000=01090000=
+ NECESSARY. 03225000=01091000=
+ THIS IS SUFFICIENT FOR ENTRIES OF THE FOLLOWING TYPES, 03230000=01092000=
+ REAL 03235000=01093000=
+ BOOLEAN 03240000=01094000=
+ INTEGER 03245000=01095000=
+ ALPHA 03250000=01096000=
+ FILE 03255000=01097000=
+ FORMAT 03260000=01098000=
+ LIST 03265000=01099000=
+ OTHER ENTRIES REQUIRE ADDITIONAL INFORMATION. 03270000=01100000=
+ ARRAYS: 03275000=01101000=
+ THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 03280000=01102000=
+ DIMENSIONS(IN THE LOW ORDER PART).[40:8] 03285000=01103000=
+ EACH SUCCEEDING WORD CONTAINS INFORMATION ABOUT EACH LOWER 03290000=01104000=
+ BOUND IN ORDER OF APPEARANCE,ONE WORD FOR EACH LOWER BOUND. 03295000=01105000=
+ THESE WORDS ARE MADE UP AS FOLLOWS: 03300000=01106000=
+ [23:12] =ADD OPERATOR SYLLABLE (0101) OR 03305000=01107000=
+ SUB OPERATOR SYLLABLE (0301) CORRESPONDING 03310000=01108000=
+ RESPECTIVELY TO WHETHER THE LOWER BOUND IS 03315000=01109000=
+ TO BE ADDED TO THE SUBSCRIPT IN INDEXING OR 03320000=01110000=
+ SUBTRACTED. 03325000=01111000=
+ [35:11] =11 BIT ADDRESS OF LOWER BOUND,IF THE LOWER BOUND 03330000=01112000=
+ REQUIRES A PRT OR STACK CELL,OTHERWISE THE BIT 03335000=01113000=
+ 35 IS IGNORED AND THE NEXT TEN BITS([36:10]) 03340000=01114000=
+ REPRESENT THE ACTUAL VALUE OF THE LOWER BOUND 03345000=01115000=
+ [46:2] =00 OR 10 DEPENDING ON WHETHER THE [35:11] VALUE 03350000=01116000=
+ IS A LITERAL OR OPERAND,RESPECTIVELY. 03355000=01117000=
+ PROCEDURES: 03360000=01118000=
+ THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 03365000=01119000=
+ PARAMETERS [40:8] 03370000=01120000=
+ IF A STREAM PROCEDURE THEN THIS WORD CONTAINS ALSO IN 03375000=01121000=
+ [13:11] ENDING PRT ADDRESS FOR LABELS, 03380000=01122000=
+ [ 7:6] NO OF LABELS REQUIRING PRT ADDRESSES, AND [1:6] NUMBER 03385000=01123000=
+ OF LOCALS. 03390000=01124000=
+ SUCCEEDING WORDS (ONE FOR EACH FORMAL PARAMETER,IN ORDER 03395000=01125000=
+ OF APPEARANCE IN FORMAL PARAPART) ARE 03400000=01126000=
+ ELBAT WORDS SPECIFYING TYPE OF EACH PARAMETER AND WHETHER 03405000=01127000=
+ VALUE OR NOT([10:1]). 03410000=01128000=
+ THE ADDRESS([16:11]) IS THE F- ADDRESS FOR EACH. 03415000=01129000=
+ IF THE PARAMETER IS AN ARRAY THEN THE INCR FIELD([27:8]) 03420000=01130000=
+ CONTAINS THE NUMBER OF DIMENSIONS,OTHERWISE INCR IS MEANINGLESS. 03425000=01131000=
+ LINK([35:13]) IS MEANINGLESS. 03430000=01132000=
+ IF A STREAM PROCEDURE THEN THE CLASS OF EACH PARAMETER IS 03435000=01133000=
+ THAT OF LOCAL ID OR FILE ID, DEPENDING ON WHETHER OR NOT A RELEASE03440000=01134000=
+ IS DONE IN THE STREAM PROCEDURE. 03445000=01135000=
+ LABELS: 03450000=01136000=
+ AT DECLARATION TIME THE ADDITIONAL INFO CONTAINS 0. THE SIGN 03455000=01137000=
+ BIT TELLS WHETHER OR NOT THE DEFINITION POINT HAS BEEN REACHED. 03460000=01138000=
+ IF SIGN = 0, THEN [36:12] CONTAINS AN ADDRESS IN CODEARRAY OF A 03465000=01139000=
+ LIST OF FORWARD REFERENCES TO THIS LABEL. THE END OF LIST FLAG IS03470000=01140000=
+ 0. IF SIGN =0, THEN [36:12] CONTAINS L FOR THIS LABEL. 03475000=01141000=
+ SWITCHES: 03480000=01142000=
+ THE FIELD [36:12] CONTAINS L FOR THE BEGINNING OF SWITCH DECLAR- 03485000=01143000=
+ ATION. [24:12] CONTAINS L FOR FIRST SIMPLE REFERENCE TO SWITCH. 03490000=01144000=
+ IF SWITCH IS NOT SIMPLE, IT IS MARKED FORMAL. HERE SIMPLE MEANS 03495000=01145000=
+ NO POSSIBILITY OF JUMPING OUT OF A BLOCK. ;03500000=01146000=
+ DEFINE 03505000=01147000=
+ MON = [1:1] #, 03510000=01148000=
+ CLASS = [2:7] #, 03515000=01149000=
+ FORMAL = [9:1] #, 03520000=01150000=
+ VO = [10:1] #, 03525000=01151000=
+ LVL = [11:5] #, 03530000=01152000=
+ ADDRESS = [16:11] #, 03535000=01153000=
+ INCR = [27:8] #, 03540000=01154000=
+ LINK = [35:13] #, 03545000=01155000=
+ LINKR = [35:5] #, 03550000=01156000=
+ LINKC = [40:8] #; 03555000=01156000=
+ 03560000=01157000=
+ COMMENT THESE DEFINES ARE USED TO PICK APART THE ELBAT WORD. 03565000=01157000=
+ MON IS THE BIT WHICH IS ON IF THE QUANTITY IS MONITORED. 03570000=01158000=
+ CLASS IS THE PRINCIPAL IDENTIFICATION OF A GIVEN 03575000=01159000=
+ QUANTITY. 03580000=01160000=
+ FORMAL IS THE BIT WHICH IS ON IF THE QUANTITY IS A FORMAL 03585000=01161000=
+ PARAMETER. 03590000=01162000=
+ VO IS THE VALUE-OWN BIT. IF FORMAL = 1 THEN THE BIT 03595000=01163000=
+ DISTINGUISHES VALUE PARAMETERS FROM OTHERS. IF 03600000=01164000=
+ FORMAL = 0 THEN THE BIT DISTINGUISHES OWN VARIABLES 03605000=01165000=
+ FROM OTHERS. 03610000=01166000=
+ LVL GIVES THE LEVEL AT WHICH A QUANTITY WAS DECLARED. 03615000=01167000=
+ ADDRESS GIVES THE STACK OR PRT ADDRESS. 03620000=01168000=
+ INCR GIVES A RELATIVE LINK TO ANY ADDITIONAL INFORMATION 03625000=01169000=
+ NEEDED, RELATIVE TO THE LOCATION IN INFO. 03630000=01170000=
+ LINK CONTAINS A LINK TO THE LOCATION IN INFO IF THE 03635000=01171000=
+ QUANTITY LIES IN ELBAT, OTHERWISE IT LINKS TO THE 03640000=01172000=
+ NEXT ITEM IN THE STACK. ZERO IS AN END FLAG. 03645000=01173000=
+ LINKR AND LINKC ARE SUBDIVISIONS OF LINK.; 03650000=01174000=
+ 03655000=01175000=
+ COMMENT CLASSES FOR ALL QUANTITIES - OCTAL CLASS IS IN COMMENT; 03660000=01175000=
+ COMMENT CLASSES FOR IDENTIFIERS; 03665000=01176000=
+ DEFINE 03670000=01177000=
+ UNKNOWNID = 00 #, COMMENT 000; 03675000=01177000=
+ STLABID = 01 #, COMMENT 001; 03680000=01178000=
+ LOCLID = 02 #, COMMENT 002; 03685000=01179000=
+ DEFINEDID = 03 #, COMMENT 003; 03690000=01180000=
+ LISTID = 04 #, COMMENT 004; 03695000=01181000=
+ FRMTID = 05 #, COMMENT 005; 03700000=01182000=
+ SUPERFRMTID = 06 #, COMMENT 006; 03705000=01183000=
+ REALSUBID = 07 #, COMMENT 007; 03710000=01184000=
+ SUBID = 08 #, COMMENT 010; 03715000=01185000=
+ SWITCHID = 09 #, COMMENT 011; 03720000=01186000=
+ PROCID = 10 #, COMMENT 012; 03725000=01187000=
+ INTRNSICPROCID = 03730000=01188000=
+ 11 #, COMMENT 013; 03735000=01188000=
+ STRPROCID = 12 #, COMMENT 014; 03740000=01189000=
+ BOOSTRPROCID = 13 #, COMMENT 015; 03745000=01190000=
+ REALSTRPROCID = 14 #, COMMENT 016; 03750000=01191000=
+ ALFASTRPROCID = 15 #, COMMENT 017; 03755000=01192000=
+ INTSTRPROCID = 15 #, COMMENT 017; 03760000=01193000=
+ BOOPROCID = 17 #, COMMENT 021; 03765000=01194000=
+ REALPROCID = 18 #, COMMENT 022; 03770000=01195000=
+ ALFAPROCID = 19 #, COMMENT 023; 03775000=01196000=
+ INTPROCID = 19 #, COMMENT 023; 03780000=01197000=
+ BOOID = 21 #, COMMENT 025; 03785000=01198000=
+ REALID = 22 #, COMMENT 026; 03790000=01199000=
+ ALFAID = 23 #, COMMENT 027; 03795000=01200000=
+ INTID = 23 #, COMMENT 027; 03800000=01201000=
+ BOOARRAYID = 25 #, COMMENT 031; 03805000=01202000=
+ REALARRAYID = 26 #, COMMENT 032; 03810000=01203000=
+ ALFAARRAYID = 27 #, COMMENT 033; 03815000=01204000=
+ INTARRAYID = 27 #, COMMENT 033; 03820000=01205000=
+ NAMEID = 30 #, COMMENT 036; 03825000=01205200=
+ INTNAMEID = 31 #, COMMENT 037; 03830000=01205400=
+ LABELID = 32 #, COMMENT 040; 03835000=01206000=
+ 03840000=01207000=
+ COMMENT CLASSES FOR PRIMARY BEGINNERS; 03845000=01207000=
+ TRUTHV = 33 #, COMMENT 041; 03850000=01208000=
+ NONLITNO = 34 #, COMMENT 042; 03855000=01209000=
+ LITNO = 35 #, COMMENT 043; 03860000=01210000=
+ STRNGCON = 36 #, COMMENT 044; 03865000=01211000=
+ LEFTPAREN = 37 #, COMMENT 045; 03870000=01212000=
+ POLISHV = 38 #, COMMENT 046; 03875000=01212100=
+ ASTRISK = 39 #, COMMENT 047; 03880000=01212200=
+ 03885000=01213000=
+ COMMENT CLASS FOR ALL DECLARATORS; 03890000=01213000=
+ DECLARATORS = 40 #, COMMENT 050; 03895000=01214000=
+ 03900000=01215000=
+ COMMENT CLASSES FOR STATEMENT BEGINNERS 03905000=01215000=
+ DOUBLEV =42#, COMMENT 052; 03910000=01222000=
+ FORV = 43 #, COMMENT 053; 03915000=01223000=
+ WHILEV = 44 #, COMMENT 054; 03920000=01224000=
+ DOV = 45 #, COMMENT 055; 03925000=01225000=
+ UNTILV = 46 #, COMMENT 056; 03930000=01226000=
+ ELSEV = 47 #, COMMENT 057; 03935000=01227000=
+ ENDV = 48 #, COMMENT 060; 03940000=01228000=
+ SEMICOLON = 50 #, COMMENT 062; 03945000=01230000=
+ IFV = 51 #, COMMENT 063; 03950000=01231000=
+ GOV = 52 #, COMMENT 064; 03955000=01232000=
+ IOCLASS = 53 #, COMMENT 065; 03960000=01233000=
+ BEGINV = 54 #, COMMENT 066; 03965000=01234000=
+ 03970000=01235000=
+ COMMENT CLASSES FOR STREAM RESERVED WORDS; 03975000=01235000=
+ SIV = 55 #, COMMENT 067; 03980000=01236000=
+ DIQ = 56 #, COMMENT 070; 03985000=01237000=
+ CIV = 57 #, COMMENT 071; 03990000=01238000=
+ TALLYV = 58 #, COMMENT 072; 03995000=01239000=
+ DSV = 59 #, COMMENT 073; 04000000=01240000=
+ SKIPV = 60 #, COMMENT 074; 04005000=01241000=
+ JUMPV = 61 #, COMMENT 075; 04010000=01242000=
+ DBV = 62 #, COMMENT 076; 04015000=01243000=
+ SBV = 63 #, COMMENT 077; 04020000=01244000=
+ TOGGLEV = 64 #, COMMENT 100; 04025000=01245000=
+ SCV = 65 #, COMMENT 101; 04030000=01246000=
+ LOCV = 66 #, COMMENT 102; 04035000=01247000=
+ DCV = 67 #, COMMENT 103; 04040000=01248000=
+ LOCALV = 68 #, COMMENT 104; 04045000=01249000=
+ LITV = 69 #, COMMENT 105; 04050000=01250000=
+ TRNSFER = 70 #, COMMENT 106; 04055000=01251000=
+ 04060000=01252000=
+ COMMENT CLASSES FOR VARIOUS MISCELLANEOUS QUANTITIES; 04065000=01252000=
+ COMMENTV = 71 #, COMMENT 107; 04070000=01253000=
+ FORWARDV = 72 #, COMMENT 110; 04075000=01254000=
+ STEPV = 73 #, COMMENT 111; 04080000=01255000=
+ THENV = 74 #, COMMENT 112; 04085000=01256000=
+ TOV = 75 #, COMMENT 113; 04090000=01257000=
+ VALUEV = 76 #, COMMENT 114; 04095000=01258000=
+ WITHV = 77 #, COMMENT 115; 04100000=01259000=
+ COLON = 78 #, COMMENT 116; 04105000=01260000=
+ COMMA = 79 #, COMMENT 117; 04110000=01261000=
+ CROSSHATCH = 80 #, COMMENT 120; 04115000=01262000=
+ LFTBRKET = 81 #, COMMENT 121; 04120000=01263000=
+ PERIOD = 82 #, COMMENT 122; 04125000=01264000=
+ RTBRKET = 83 #, COMMENT 123; 04130000=01265000=
+ RTPAREN = 84 #, COMMENT 124; 04135000=01266000=
+ AMPERSAND = 85 #, COMMENT 125; 04140000=01266500=
+ 04145000=01267000=
+ COMMENT CLASSES FOR OPERATORS; 04150000=01267000=
+ HEXOP = 86 #, COMMENT 126; 04155000=01268000=
+ BITOP = 87 #, COMMENT 127; 04160000=01269000=
+ ISOLATE = 88 #, COMMENT 130; 04165000=01270000=
+ OPERATOR = 89 #, COMMENT 131; 04170000=01271000=
+ NOTOP = 90 #, COMMENT 132; 04175000=01272000=
+ ASSIGNOP = 91 #, COMMENT 133; 04180000=01273000=
+ EQVOP = 92 #, COMMENT 134; 04185000=01274000=
+ OROP = 93 #, COMMENT 135; 04190000=01275000=
+ ANDOP = 94 #, COMMENT 136; 04195000=01276000=
+ RELOP = 95 #, COMMENT 137; 04200000=01277000=
+ ADDOP = 96 #, COMMENT 140; 04205000=01278000=
+ MULOP = 97 #, COMMENT 141; 04210000=01278500=
+% STRING =99#, COMMENT 143; 04215000=01278600=
+ COMMENT SUBCLASSES FOR DECLARATORS (KEPT IN ADDRESS); 04220000=01279000=
+ OWNV = 01 #, COMMENT 01; 04225000=01280000=
+ SAVEV = 02 #, COMMENT 02; 04230000=01281000=
+ BOOV = 03 #, COMMENT 03; 04235000=01282000=
+ REALV = 04 #, COMMENT 04; 04240000=01283000=
+ ALFAV = 05 #, COMMENT 05; 04245000=01284000=
+ INTV = 05 #, COMMENT 05; 04250000=01285000=
+ LABELV = 07 #, COMMENT 07; 04255000=01286000=
+ DUMPV = 08 #, COMMENT 10; 04260000=01287000=
+ SUBV = 09 #, COMMENT 11; 04265000=01288000=
+ OUTV = 10 #, COMMENT 12; 04270000=01289000=
+ INV = 11 #, COMMENT 13; 04275000=01290000=
+ MONITORV = 12 #, COMMENT 14; 04280000=01291000=
+ SWITCHV = 13 #, COMMENT 15; 04285000=01292000=
+ PROCV = 14 #, COMMENT 16; 04290000=01293000=
+ ARRAYV = 15 #, COMMENT 17; 04295000=01294000=
+ NAMEV = 16 #, COMMENT 20; 04300000=01295000=
+ FILEV = 17 #, COMMENT 21; 04305000=01296000=
+ STREAMV = 18 #, COMMENT 22; 04310000=01297000=
+ DEFINEV = 19 #, COMMENT 23; 04315000=01298000=
+ DEFINEDDES = 8 #, 04320000=01299010=
+ ADES = 28 #, 04325000=01299020=
+ PDES = 29 #, 04330000=01299030=
+ LDES = 30 #, 04335000=01299040=
+ CHAR = 31 #, 04340000=01299100=
+ FACTOP = ASTRISK #, 04345000=01299200=
+ OPERATORS = HEXOP #, 04350000=01299300=
+ FILEID = 0 #, 04355000=01299400=
+ MAXINTRINSIC = 150 #, 04360000=01299400=
+ % USED IN BUILDING INTABLE @ 09414120 04365000=01299400=
+ INTRINSICADR = (MAXINTRINSIC DIV 30) #; % RESERVES SEG FOR INTABLE04370000=01299500=
+ REAL 04375000=01300000=
+ TIME1; 04380000=01300000=
+ BOOLEAN 04385000=01300100=
+ ASTOG; 04390000=01300100=
+ BOOLEAN 04395000=01300200=
+ SAF; 04400000=01300200=
+ INTEGER 04405000=01301000=
+ SCRAM; 04410000=01301000=
+ COMMENT SCRAM CONTAINS THE SCRAMBLE INDEX FOR THE LAST IDENTIFIER 04415000=01302000=
+ OR RESERVED WORD SCANNED; 04420000=01303000=
+ ALPHA ARRAY 04425000=01304000=
+ ACCUM[0:10]; 04430000=01304000=
+ COMMENT ACCUM HOLDS THE ALPHA AND CHARACTER COUNT OF THE LAST 04435000=01305000=
+ SCANNED ITEM IN A FORM COMPATIBLE WITH ITS APPEARANCE 04440000=01306000=
+ IN INFO. THAT IS ACCUM[1] = 00NAAAAA, ACCUM[I] , I> 1, 04445000=01307000=
+ HAS ANY ADDITIONAL CHARACTERS. ACCUM[0] IS USED FOR 04450000=01308000=
+ THE ELBAT WORD BY THE ENTER ROUTINES; 04455000=01309000=
+ ARRAY 04460000=01310000=
+ STACKHEAD[0:125]; 04465000=01310000=
+ COMMENT STACKHEAD[N] CONTAINS AN INDEX INTO INFO GIVING THE TOP 04470000=01311000=
+ ITEM IN THE N-TH STACK; 04475000=01312000=
+ INTEGER 04480000=01313000=
+ COUNT; 04485000=01313000=
+ COMMENT COUNT CONTAINS THE NUMBER OF CHARACTORS OF THE LAST ITEM 04490000=01314000=
+ SCANNED; 04495000=01315000=
+ ALPHA 04500000=01316000=
+ Q; 04505000=01316000=
+ COMMENT Q CONTAINS ACCUM[1] FOR THE LAST IDENTIFIER OR RESERVED 04510000=01317000=
+ WORD SCANNED; 04515000=01318000=
+ ARRAY 04520000=01319000=
+ ELBAT[0:75]; 04525000=01319000=
+ INTEGER 04530000=01319000=
+ I, 04535000=01319000=
+ NXTELBT; 04540000=01319000=
+ COMMENT ELBAT IS AN ARRAY HOLDING ELBAT WORDS FOR RECENTLY SCANNED 04545000=01320000=
+ QUANTITIES. THE TABLE ROUTINE MAINTAINS THIS ARRAY. 04550000=01321000=
+ (ELBAT IS TABLE SPELLED BACKWARDS.) THE TABLE ROUTINE 04555000=01322000=
+ GUARANTIES THAT ELBAT ALWAYS CONTAINS THE ELBAT WORDS 04560000=01323000=
+ FOR THE LAST 10 QUANTITIES SCANNED. NXTELBT IS AN INDEX 04565000=01324000=
+ POINTING TO THE NEXT AVAILABLE WORD IN ELBAT. I IS AN 04570000=01325000=
+ INDEX USED BY THE REST OF THE COMPILER TO FETCH THINGS 04575000=01326000=
+ FROM ELBAT. I IS ALSO MAINTAINED BY THE TABLE ROUTINE; 04580000=01327000=
+ INTEGER 04585000=01328000=
+ ELCLASS; 04590000=01328000=
+ COMMENT ELCLASS USUALLY CONTAINS ELBAT[I].CLASS; 04595000=01329000=
+ INTEGER 04600000=01330000=
+ FCR, 04605000=01330000=
+ NCR, 04610000=01330000=
+ LCR, 04615000=01330000=
+ TLCR, 04620000=01330000=
+ CLCR; 04625000=01330000=
+ INTEGER 04630000=01331000=
+ MAXTLCR; 04635000=01331000=
+ COMMENT FCR CONTAINS ABSOLUTE ADDRESS OF THE FIRST CHARACTOR OF 04640000=01332000=
+ THE CARD IMAGE CURRENTLY BEING SCANNED, NCR THE ADDRESS 04645000=01333000=
+ OF THE NEXT CHARACTOR TO BE SCANNED, AND LCR THE LAST 04650000=01334000=
+ CHARACTOR (COLUMN 73). TLCR AND CLCR CONTAIN ADDRESS OF 04655000=01335000=
+ THE LAST CHARACTER IN THE TAPE AND CARD BUFFERS. MAXTLCR 04660000=01336000=
+ IS THE MAXIMUM OF TLCR WHEN THE INPUT IS BLOCKED; 04665000=01337000=
+ ARRAY 04670000=01340000=
+ TEN[-46:69]; 04675000=01340000=
+ DEFINE 04680000=01342000=
+ PRTBASE = 129 #, 04685000=01342000=
+ PRTOP = 896 #; 04690000=01342000=
+ COMMENT PAGE AND TOP OF PRT; 04695000=01342000=
+ ARRAY 04700000=01343000=
+ PRT[PRTBASE:PRTOP]; 04705000=01343000=
+ INTEGER 04710000=01344000=
+ DISKADR, 04715000=01344000=
+ CORADR; 04720000=01344000=
+ COMMENT GLOBALS FOR PROGDESCBLDR; 04725000=01344000=
+ INTEGER 04730000=01369000=
+ SGAVL; 04735000=01369000=
+ COMMENT NEXT AVAILABLE SEGMENT NUMBER; 04740000=01369000=
+ INTEGER 04745000=01370000=
+ SGNO; 04750000=01370000=
+ COMMENT THIS IS THE CURRENT SEGMENT NUMBER; 04755000=01370000=
+ ARRAY 04760000=01371000=
+ COP, 04765000=01371000=
+ WOP[0:127]; 04770000=01371000=
+ COMMENT THE EMIT ROUTINES PLACE EACH SYLLABLE INTO THE EDOC ARRAY 04775000=01372000=
+ AS SPECIFIED BY "L". 04780000=01373000=
+ IF THE DEBUGTOG IS TRUE COP AND WOP ARE FILLED WITH 04785000=01374000=
+ THE BCD FOR THE OPERATORS,OTHERWISE THEY ARE NOT USED; 04790000=01375000=
+ REAL 04795000=01376000=
+ LASTENTRY; 04800000=01376000=
+ COMMENT LASTENTRY IS USED BY EMITNUM AND CONSTANTCLEAN. IT POINTS 04805000=01377000=
+ INTO INFO[0,*] AT THE NEXT AVAILABLE CELL FOR CONSTANTS; 04810000=01378000=
+ BOOLEAN 04815000=01379000=
+ MRCLEAN; 04820000=01379000=
+ COMMENT NO CONSTANTCLEAN ACTION TAKES PLACE WHILE MRCLEAN IS 04825000=01380000=
+ FALSE. THIS FEATURE IS USED BY BLOCK BECAUSE OF THE 04830000=01381000=
+ POSSIBILITY THAT CONSTANTCLEAN WILL USE INFO[NEXTINFO] 04835000=01382000=
+ DURING AN ARRAY DECLARATION ; 04840000=01383000=
+ REAL 04845000=01384000=
+ GT1, 04850000=01384000=
+ GT2, 04855000=01384000=
+ GT3, 04860000=01384000=
+ GT4, 04865000=01384000=
+ GT5; 04870000=01384000=
+ INTEGER 04875000=01384500=
+ GTI1; 04880000=01384500=
+ COMMENT THESE VARIABLES ARE USED FOR TEMPORARY STORAGE; 04885000=01385000=
+ INTEGER 04890000=01386000=
+ RESULT; 04895000=01386000=
+ COMMENT THIS VARIABLE IS USED FOR A DUAL PURPOSE BY THE TABLE 04900000=01387000=
+ ROUTINE AND THE SCANNER. THE TABLE ROUTINE USES THIS 04905000=01388000=
+ VARIABLE TO SPECIFY SCANNER OPERATIONS AND THE SCANNER 04910000=01389000=
+ USES IT TO INFORM THE TABLE ROUTINE OF THE ACTION TAKEN; 04915000=01390000=
+ INTEGER 04920000=01391000=
+ LASTUSED; 04925000=01391000=
+ COMMENT LASTUSED IS A VARIABLE THAT CONTROLS THE ACTION OF 04930000=01392000=
+ READACARD, THE ROUTINE WHICH READS CARDS AND INITIALIZES 04935000=01393000=
+ OR PREPARES THE CARD FOR THE SCANNER. 04940000=01394000=
+ LASTUSED LAST CARD READ FROM 04945000=01394500=
+ -------- ------------------- 04950000=01394600=
+ 1 CARD READER ONLY, NO TAPE. 04955000=01395000=
+ 2 CARD READER, TAPE AND CARD MERGE. 04960000=01396000=
+ 3 TAPE, TAPE AND CARD MERGE. 04965000=01397000=
+ 4 INITIALIZATION ONLY, CARD ONLY. 04970000=01398000=
+ ; 04975000=01398300=
+ BOOLEAN 04980000=01399000=
+ LINKTOG; 04985000=01399000=
+ COMMENT LINKTOG IS FALSE IF THE LAST THING EMITTED IS A LINK, 04990000=01400000=
+ OTHERWISE IT IS TRUE; 04995000=01401000=
+ INTEGER 05000000=01402000=
+ LEVEL, 05005000=01402000=
+ FRSTLEVEL, 05010000=01402000=
+ SUBLEVEL, 05015000=01402000=
+ MODE; 05020000=01402000=
+ COMMENT THESE VARIABLES ARE MAINTAINED BY THE BLOCK ROUTINE TO KEEP 05025000=01403000=
+ TRACK OF LEVELS OF DEFINITION. LEVEL GIVES THE DEPTH OF 05030000=01404000=
+ NESTING IN DEFINITION, WHERE EACH BLOCK AND EACH PROCEDURE05035000=01405000=
+ GIVES RISE TO A NEW LEVEL. SUBLEVEL GIVES THE LEVEL OF 05040000=01406000=
+ THE PARAMETERS OF THE PROCEDURE CURRENTLY BEING COMPILED. 05045000=01407000=
+ FRSTLEVEL IS THE LEVEL OF THE PARAMETERS OF THE MOST 05050000=01408000=
+ GLOBAL OF THE PROCEDURES CURRENTLY BEING COMPILED. MODE 05055000=01409000=
+ IS THE CURRENT DEPTH OF THE PROCEDURE IN WHICH WE ARE 05060000=01410000=
+ NESTED (AT COMPILE TIME); 05065000=01411000=
+ BOOLEAN 05070000=01412000=
+ ERRORTOG; 05075000=01412000=
+ COMMENT ERRORTOG IS TRUE IF MESSAGES ARE CURRENTLY ACCEPTABLE TO THE05080000=01413000=
+ ERROR ROUTINES. ERRORCOUNT IS THE COUNT OF ERROR MSSGS; 05085000=01414000=
+ BOOLEAN 05090000=01415000=
+ ENDTOG; 05095000=01415000=
+ COMMENT ENDTOG TELLS THE TABLE TO ALLOW 05100000=01415000=
+ COMMENT TO BE PASSED BACK TO COMPOUNDTAIL; 05105000=01416000=
+ BOOLEAN 05110000=01417000=
+ STREAMTOG; 05115000=01417000=
+ COMMENT STREAMTOG IS TRUE IF WE ARE COMPILING STREAM STATEMENT. IT 05120000=01418000=
+ IS USED TO CONTROL COMPOUNDTAIL; 05125000=01419000=
+ DEFINE 05130000=01420000=
+ FS = 1 #, 05135000=01420000=
+ FP = 2 #, 05140000=01420000=
+ FL = 3 #, 05145000=01420000=
+ FR = 4 #; 05150000=01420000=
+ COMMENT THESE DEFINES ARE USED WHEN CALLING THE VARIABLE ROUTINE. 05155000=01421000=
+ THEIR PURPOSES IS TO TELL VARIABLE WHO IS CALLING. 05160000=01422000=
+ THEIR MEANING IS: 05165000=01423000=
+ FS MEANS FROM STATEMENT, 05170000=01424000=
+ FP MEANS FROM PRIMARY, 05175000=01425000=
+ FL MEANS FROM LIST, 05180000=01426000=
+ FR MEANS FROM FOR; 05185000=01427000=
+ INTEGER 05190000=01428000=
+ L; 05195000=01428000=
+ COMMENT L IS THE LOCATION OF THE NEXT SYLLABLE TO BE EMITTED; 05200000=01429000=
+ DEFINE 05205000=01430000=
+ BLOCKCTR = 16 #, 05210000=01430000=
+ JUNK = 17 #, 05215000=01430000=
+ XITR = 18 #, 05220000=01430000=
+ LSTRTN = 19 #; 05225000=01430000=
+ DEFINE 05230000=01452000=
+ ATYPE = 3 #, 05235000=01452000=
+ BTYPE = ATYPE #, 05240000=01452000=
+ DTYPE = ATYPE #; 05245000=01452000=
+ BOOLEAN 05250000=01457000=
+ TB1; 05255000=01457000=
+ COMMENT TB1 IS A TEMPORARY BOOLEAN VARIABLE; 05260000=01458000=
+ INTEGER 05265000=01459000=
+ JUMPCTR; 05270000=01459000=
+ COMMENT JUMPCTR IS A VARIABLE USED FOR COMMUNICATION BETWEEN BLOCK 05275000=01460000=
+ AND GENGO. IT GIVES HIGHEST LEVEL TO WHICH A JUMP HAS 05280000=01461000=
+ BEEN MADE FROM WITHIN A THE PRESENTLY BEING COMPILED 05285000=01462000=
+ SEGMENT. THE BLOCK COMPILES CODE TO INCREMENT AND DECRE- 05290000=01463000=
+ MENT THE BLOCKCTR ON THE BASIS OF JUMPCTR AT COMPLETION 05295000=01464000=
+ OF COMPILATION OF A SEGMENT - I.E. THE BLOCKCTR IS TALLIED 05300000=01465000=
+ IF LEVEL = JUMPCTR; 05305000=01466000=
+ REAL 05310000=01471000=
+ STLB; 05315000=01471000=
+ COMMENT STLB IS USED BY VARIABLE AND ACTUALPARAPART TO COMMUNICATE 05320000=01472000=
+ THE LOWER BOUND INFORMATION FOR THE LAST DIMENSION OF THE 05325000=01473000=
+ ARRAY INVOLVED IN A ROW DESIGNATOR. THE FORMAT OF THE 05330000=01474000=
+ INFORMATION IS THAT OF INFO. STLB IS ALSO SOMETIMES USED 05335000=01475000=
+ FOR TEMPORARY STORAGE; 05340000=01476000=
+ DEFINE 05345000=01477000=
+ BUMPL = L:= L+2 #; 05350000=01477000=
+ COMMENT BUMPL IS USED MOSTLY TO PREPARE A FORWARD JUMP; 05355000=01478000=
+ DEFINE 05360000=01479000=
+ IDMAX = LABELID #; 05365000=01479000=
+ COMMENT IDMAX IS THE MAXIMUM CLASS NUMBER FOR IDENTIFIERS; 05370000=01480000=
+ INTEGER 05375000=01481000=
+ DEFINECTR, 05380000=01481000=
+ DEFINEINDEX; 05385000=01481000=
+ REAL 05390000=01482000=
+ JOINFO, COMMENT POINTS TO PSEUDO LABEL FOR JUMP OUTS; 05395000=01482000=
+ LPRT, COMMENT SHOWS LOCATION OF THE LAST LABEL IN THE PRT ; 05400000=01483000=
+ NESTLEVEL, COMMENT COUNTS NESTING FOR GO TO AND JUMP OUTS; 05405000=01484000=
+ JUMPLEVEL; 05410000=01485000=
+ COMMENT NUMBER OF LEVELS TO BE JUMPED OUT; 05415000=01485000=
+ 05420000=01486000=
+ COMMENT THE REALS ABOVE ARE FOR STREAM STATEMENT; 05425000=01486000=
+ ARRAY 05430000=01487000=
+ MACRO[0:35]; 05435000=01487000=
+ COMMENT MACRO IS FILLED WITH SYLLABLES FOR STREAM STATEMENT; 05440000=01488000=
+ REAL 05445000=01489000=
+ P, COMMENT CONTAINS NUMBER OF FORMALS FOR STREAM PROCS; 05450000=01489000=
+ Z; 05455000=01490000=
+ COMMENT CONTAINS 1ST WORD OF INFO FOR STREAM FUNCTIONS; 05460000=01490000=
+ ARRAY 05465000=01490510=
+ NEWTAPBUF[0:9]; 05470000=01490510=
+ SAVE ARRAY DEFINEARRAY[0:23]; 05475000=01491000=
+ COMMENT THESE VARIABLES ARE USED TO CONTROL ACTION OF THE DEFINE. 05480000=01492000=
+ DEFINECTR COUNTS DEPTH OF NESTING OF DEFINE-# PAIRS. 05485000=01493000=
+ THE CROSSHATCH PART OF THE TABLE ROUTINE USES DEFINECTR 05490000=01494000=
+ TO DETERMINE THE MEANING OF A CROSSHATCH. DEFINEINDEX IS 05495000=01495000=
+ THE NEXT AVAILABLE CELL IN THE DEFINEARRAY. THE DEFINE- 05500000=01496000=
+ ARRAY HOLDS THE ALPHA OF THE DEFINE BEING RECREATED AND 05505000=01497000=
+ THE PREVIOUS VALUES OF LASTUSED, LCR, AND NCR; 05510000=01498000=
+ INTEGER 05515000=01499000=
+ BEGINCTR; 05520000=01499000=
+ COMMENT BEGINCTR GIVES THE NUMBER OF UNMATCHED BEGINS. IT IS USED05525000=01500000=
+ FOR ERROR CONTROL ONLY; 05530000=01501000=
+ INTEGER 05535000=01502000=
+ DIALA, 05540000=01502000=
+ DIALB; 05545000=01502000=
+ COMMENT THESE VARIABLES GIVE THE LAST VALUE TO WHICH A AND B WERE 05550000=01503000=
+ DIALED. THIS GIVES SOME LOCAL OPTIMIZATION. EMITD 05555000=01504000=
+ WORRIES ABOUT THIS. OTHER ROUTINES CAUSE A LOSS OF MEMORY05560000=01505000=
+ BY SETTING DIALA AND DIALB TO ZERO; 05565000=01506000=
+ BOOLEAN 05570000=01522000=
+ RRB1; 05575000=01522000=
+ COMMENT RRB1---RRBN ARE BOOLEAN VARIABLES THAT SERVE THE 05580000=01522000=
+ SAME FUNCTION AS RR1---RRN FOR REAL VARIABLES. SEE 05585000=01523000=
+ COMMENT AT RR1; 05590000=01524000=
+ BOOLEAN 05595000=01525000=
+ RRB2; 05600000=01525000=
+ COMMENT SEE COMMENT AT RRB1 DECLARATION; 05605000=01525000=
+ DEFINE 05610000=01526000=
+ ARRAYMONFILE = [27:11] #; 05615000=01526000=
+ COMMENT ARRAYMONFILE IS THE DEFINE FOR 05620000=01526000=
+ THE ADDRESS OF THE FILE DESCRIPTOR IN 05625000=01527000=
+ THE FIRST WORD OF ADDITIONAL INFO; 05630000=01528000=
+ DEFINE 05635000=01529000=
+ SVARMONFILE = [37:11] #; 05640000=01529000=
+ COMMENT MONITORFILE IS THE DEFINE FOR 05645000=01529000=
+ THE ADDRESS OF THE FILE DESCRIPTOR IN 05650000=01530000=
+ INFO FOR MONITORED SIMPLE VARIABLES; 05655000=01531000=
+ DEFINE 05660000=01532000=
+ NODIMPART = [40:8] #; 05665000=01532000=
+ COMMENT THE FIRST ADDITIONAL WORD OF INFO 05670000=01532000=
+ FOR ARRAYS CONTAINS THE NUMBER OF DIMENSIONS05675000=01533000=
+ IN NODIMPART; 05680000=01534000=
+ DEFINE 05685000=01535000=
+ LABLMONFILE = [13:11] #; 05690000=01535000=
+ COMMENT LABLMONFILE DESIGNATES THE BIT 05695000=01535000=
+ POSITION IN THE FIRST WORD OF ADDITIONAL 05700000=01536000=
+ INFO THAT CONTAINS THE MONITOR FILE 05705000=01537000=
+ ADDRESS FOR LABELS; 05710000=01538000=
+ DEFINE 05715000=01539000=
+ SWITMONFILE = [13:11] #; 05720000=01539000=
+ COMMENT SWITMONFILE DESIGNATES THE BIT 05725000=01539000=
+ POSITION IN THE FIRST WORD OF ADDITIONAL 05730000=01540000=
+ INFO THAT CONTAINS THE MONITOR FILE 05735000=01541000=
+ ADDRESS FOR LABELS; 05740000=01542000=
+ DEFINE 05745000=01543000=
+ FUNCMONFILE = [27:11] #; 05750000=01543000=
+ COMMENT FUNCMONFILE DESIGNATES THE BIT 05755000=01543000=
+ POSITION IN THE FIRST WORD OF ADDITIONAL 05760000=01544000=
+ INFO THAT CONTAINS THE MONITOR FILE 05765000=01545000=
+ ADDRESS FOR LABELS; 05770000=01546000=
+ DEFINE 05775000=01547000=
+ DUMPEE = [2:11] #; 05780000=01547000=
+ COMMENT THE DUMPEE FIELD IN THE FIRST 05785000=01547000=
+ ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 05790000=01548000=
+ THE ADDRESS OF THE COUNTER THAT IS INCREMENTED 05795000=01549000=
+ EACH TIME THE LABEL IS PASSED IF THAT LABEL 05800000=01550000=
+ APPEARS IN A DUMP DECLARATION; 05805000=01551000=
+ DEFINE 05810000=01552000=
+ DUMPOR = [24:11] #; 05815000=01552000=
+ COMMENT THE DUMPOR FIELD IN THE FIRST 05820000=01552000=
+ ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 05825000=01553000=
+ THE ADDRESS OF THE ROUTINE THAT IS GENERATED 05830000=01554000=
+ FROM THE DUMP DECLARATION THAT IN TURN CALLS 05835000=01555000=
+ THE PRINTI ROUTINE; 05840000=01556000=
+ DEFINE 05845000=01556500=
+ SUBOP = 48 #; 05850000=01556500=
+ FILE 05855000=01556900=
+ OUT CODE DISK SERIAL[1:1](1, 1023); 05860000=01556900=
+ FILE 05865000=01557000=
+ IN CARD(RR1, 10, RR2); 05870000=01557000=
+ FILE 05875000=01558000=
+ OUT LINE DISK SERIAL[20:2400](RR3, 15, RR4, SAVE 10); 05880000=01558000=
+ ARRAY 05885000=01559010=
+ LIN[0:20]; 05890000=01559010=
+ COMMENT PRINT OUTPUT BUILT IN LIN; 05895000=01559010=
+ INTEGER 05900000=01559020=
+ DA; 05905000=01559020=
+ SAVE FILE OUT NEWTAPE DISK SERIAL[20:2400](RR5, RR6, RR7, SAVE 1); 05910000=01560000=
+ FILE 05915000=01561000=
+ IN TAPE 6"OCRDIMG"(2, RR8, RR9); 05920000=01561000=
+ SAVE ARRAY CBUFF, TBUFF[0:9]; % INPUT BUFFERS. 05925000=01561056=
+ FILE 05930000=01561300=
+ OUT CODISK DISK SERIAL[20:600](2, 30, 300); 05935000=01561300=
+ FILE 05940000=01561400=
+ OUT DISK DISK[1:2100]6"MCP"6"DISK"(3, 30, 300, SAVE 99); 05945000=01561400=
+ DEFINE 05950000=01561410=
+ MCPTYPE = 63 #, 05955000=01561420=
+ DCINTYPE = 62 #, 05960000=01561430=
+ TSSINTYPE = 61 #; 05965000=01561430=
+ 05970000=01561440=
+COMMENT ESPOL CODE FILES ARE UNIQUELY TYPED IN THEIR FILE 05975000=01561440=
+ HEADERS. HEADER[4],[36:6] IS THE FIELD USED TO CONTAIN 05980000=01561450=
+ THE TYPE; 05985000=01561460=
+ FILE 05990000=01561500=
+ OUT DECK 0(2, 10); 05995000=01561500=
+ FILE 06000000=01561600=
+ STUFF DISK SERIAL[20:150](2, 10, 30, SAVE 15); 06005000=01561600=
+ ARRAY 06010000=01561700=
+ TWXA[0:16]; 06015000=01561700=
+ REAL 06020000=01562000=
+ C; 06025000=01562000=
+ COMMENT C CONTAINS ACTUAL VALUE OF LAST CONSTANT SCANNED; 06030000=01563000=
+ REAL 06035000=01564000=
+ T; 06040000=01564000=
+ COMMENT T IS A TEMPORARY CELL; 06045000=01565000=
+ INTEGER 06050000=01566000=
+ TCOUNT; 06055000=01566000=
+ REAL 06060000=01566010=
+ STACKCT; 06065000=01566010=
+ COMMENT TCOUNT IS A VARIABLE WHICH HOLDS A PREVIOUS VALUE OF COUNT 06070000=01567000=
+ FOR THE USE OF CONVERT; 06075000=01568000=
+ DEFINE 06080000=01569000=
+ LASTSEQUENCE = 145 #, 06085000=01570000=
+ LASTSEQROW = 2 #; 06090000=01570000=
+ REAL 06095000=01583100=
+ FOULED; 06100000=01583100=
+ BOOLEAN 06105000=01586000=
+ FUNCTOG, COMMENT TELLS WHETHER PROCEDURE BEING DECLARED IS A 06110000=01586000=
+ FUNCTION; 06115000=01587000=
+ P2, COMMENT GENERALY TELLS WHETHER OWN WAS SEEN; 06120000=01588000=
+ P3, COMMENT TELLS WHETHER SAVE WAS SEEN; 06125000=01589000=
+ VONF, COMMENT VALUE OR OWN FIELD OF ELBAT WORD; 06130000=01590000=
+ FORMALF, COMMENT FORMAL FIELD OF ELBAT WORD; 06135000=01591000=
+ PTOG, COMMENT TELLS THAT FORMAL PARAPART IS BEING PROCESSD;06140000=01592000=
+ SPECTOG, 06145000=01594000=
+ STOPENTRY, COMMENT THIS MAKES THE ENTRY PROCEDURE ENTER ONLY 06150000=01594000=
+ ONE ID AND THEN EIXT; 06155000=01595000=
+ AJUMP; 06160000=01596000=
+ COMMENT TELLS WHETHER A JUMP IS HANGING; 06165000=01596000=
+ BOOLEAN 06170000=01597000=
+ STOPDEFINE; 06175000=01597000=
+ INTEGER 06180000=01598000=
+ MAXSAVE; 06185000=01598000=
+ COMMENT THIS CONTAINS THE SIZE OF THE MAXIMUM SAVE ARRAY 06190000=01599000=
+ DECLARED. IT IS USED TO HELP DETERMINE STORAGE REQUIREMENTS 06195000=01600000=
+ FOR THE PROGRAM PARAMETER BLOCK FOR THE OBJECT PROGRAM; 06200000=01601000=
+ REAL 06205000=01603000=
+ KLASSF, COMMENT CLASS IN LOW ORDER 7 BITS; 06210000=01603000=
+ ADDRSF, COMMENT ADDRESS IN LOW ORDER 11 BITS; 06215000=01604000=
+ LEVELF, COMMENT LVL IN LOW ORDER 5 BITS; 06220000=01605000=
+ LINKF, COMMENT LINK IN LOW ORDER 13 BITS; 06225000=01606000=
+ INCRF, COMMENT INCR CN LOW ORDER 8 BITS; 06230000=01607000=
+ PROINFO, COMMENT CONTAINS ELBAT WORD FOR PROCEDURE BEING 06235000=01608000=
+ DECLARED; 06240000=01609000=
+ G, COMMENT GLOBAL TEMPORARY FOR BLOCK; 06245000=01610000=
+ TYPEV, COMMENT USED TO CARRY CLASS OF IDENTIFIER 06250000=01611000=
+ BEING DECLARED; 06255000=01612000=
+ PROADO, COMMENT CONTAINS ADDRESS OF PROCEDURE BEING 06260000=01613000=
+ DECLARED; 06265000=01614000=
+ MARK, COMMENT CONTAINS INDEX INTO INFO WHERE FIRST WORD 06270000=01615000=
+ OF ADDITIONAL INFO FOR A PROCEDURE ENTRY; 06275000=01616000=
+ PJ, COMMENT FORMAL PARAMETER COUNTER; 06280000=01617000=
+ J, COMMENT ARRAY COUNTER; 06285000=01618000=
+ LASTINFO, COMMENT INDEX TO LAST ENTRY IN INFO; 06290000=01619000=
+ NEXTINFO, COMMENT INDEX FOR NEXT ENTRYIN INFO; 06295000=01620000=
+ FIRSTX, COMMENT RELATIVE ADD OF FIRST EXECUTABLE CODE 06300000=01621000=
+ IN BLOCK,INITIALIZED TO 4095 EACH TIME; 06305000=01622000=
+ SAVEL; 06310000=01623000=
+ COMMENT SAVE LOCATION FOR FIXUPS IN BLOCK; 06315000=01623000=
+ INTEGER 06320000=01624000=
+ NCII; 06325000=01624000=
+ COMMENT THIS CONTAINS THE COUNT OF CONSTANTS 06330000=01624000=
+ ENTERED IN INFO AT ANY GIVEN TIME; 06335000=01625000=
+ PROCEDURE UNHOOK; 06340000=01626000=
+ FORWARD; 06345000=01626000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%06350000=01626000=
+ PROCEDURE MAKEUPACCUM; 06355000=01627000=
+ FORWARD; 06360000=01627000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%06365000=01627000=
+ DEFINE 06370000=01628000=
+ PURPT = [4:8] #, 06375000=01628000=
+ SECRET = 2 #; 06380000=01628000=
+ 06385000=01629000=
+ COMMENT THESE DEFINES GIVE THE NAMES OF THE WORD MODE OPERATORS. THE 06390000=01629000=
+ NUMBERS REFER TO THE APPROPRIATE SECTION OF THE PRODUCT SPECS. THE 06395000=01630000=
+ FULL NAME IS ALSO GIVEN; 06400000=01631000=
+ DEFINE 06405000=01632000=
+ ADD = 16#, COMMENT (0101) 7.4.2.1 ADD; 06410000=01633000=
+ BBC = 22#, COMMENT (0131) 7.4.5.4 BRANCH BACKWARD CONDITIONAL;06415000=01634000=
+ BBW = 534#, COMMENT (4131) 7.4.5.2 BRANCH BACKWARD; 06420000=01635000=
+ BFC = 38#, COMMENT (0231) 7.4.5.3 BRANCH FORWARD CONDITIONAL; 06425000=01636000=
+ BFW = 550#, COMMENT (4231) 7.4.5.1 BRANCH FORWARD; 06430000=01637000=
+ CDC = 168#, COMMENT (1241) 7.4.10.4 CONSTRUCT DESCRIPTOR CALL; 06435000=01638000=
+ CHS = 134#, COMMENT (1031) 7.4.7.11 CHANGE SIGN; 06440000=01639000=
+ COC = 40#, COMMENT (0241) 7.4.10.3 CONSTRUCT OPERAND CALL; 06445000=01640000=
+ COM = 130#, COMMENT (1011) 7.4.10.5 COMMUNICATION OPERATOR; 06450000=01641000=
+ DEL = 10#, COMMENT (0045) 7.4.9.3 DELETE; 06455000=01642000=
+ DUP = 261#, COMMENT (2025) 7.4.9.2 DUPLICATE; 06460000=01643000=
+ EQL = 581#, COMMENT (4425) 7.4.4.3 EQUAL; 06465000=01644000=
+ LBC = 278#, COMMENT(2131) 7.4.5.9 GO BACKWARD CONDITIONAL; 06470000=01645000=
+ LBU = 790#, COMMENT(6131) 7.4.5.7 GO BACKWARD (WORD); 06475000=01646000=
+ GEQ = 21#, COMMENT (0125) 7.4.4.2 GREATER THAN OR EQUAL TO; 06480000=01647000=
+ LFC = 294#, COMMENT(2231) 7.4.5.8 GO FORWARD CONDITIONAL; 06485000=01648000=
+ LFU = 806#, COMMENT(6231) 7.4.5.6 GO FORWARD (WORD); 06490000=01649000=
+ GTR = 37#, COMMENT (0225) 7.4.4.1 GREATER THAN; 06495000=01650000=
+ IDV = 384#, COMMENT (3001) 7.4.2.5 INTEGER DIVIDE; 06500000=01651000=
+ INX = 24#, COMMENT (0141) 7.4.10.2 INDEX; 06505000=01652000=
+ ISD = 532#, COMMENT (4121) 7.4.6.3 INTEGER STORE DESTRUCTIVE; 06510000=01653000=
+ ISN = 548#, COMMENT (4221) 7.4.6.4 INTEGER STORE NON-DESTRUCT; 06515000=01654000=
+ LEQ = 533#, COMMENT (4125) 7.4.4.4 LESS THAN OR EQUAL TO; 06520000=01655000=
+ LND = 67#, COMMENT (0415) 7.4.3.1 LOGICAL AND; 06525000=01656000=
+ LNG = 19#, COMMENT (0115) 7.4.3.4 LOGICAL NEGATE; 06530000=01657000=
+ LOD = 260#, COMMENT (2021) 7.4.10.1 LOAD OPERATOR; 06535000=01658000=
+ LOR = 35#, COMMENT (0215) 7.4.3.2 LOGICAL OR; 06540000=01659000=
+ LQV = 131#, COMMENT (1015) 7.4.3.3 LOGICAL EQUIVALENCE; 06545000=01660000=
+ LSS = 549#, COMMENT (4225) 7.4.4.5 LESS THAN; 06550000=01661000=
+ MKS = 72#, COMMENT (0441) 7.4.8.1 MARK STACK; 06555000=01662000=
+ MUL = 64#, COMMENT (0401) 7.4.2.3 MULTIPLY; 06560000=01663000=
+ NEQ = 69#, COMMENT (0425) 7.4.4.6 NOT EQUAL TO; 06565000=01664000=
+ NOP = 11#, COMMENT (0055) 7.4.7.1 NO OPERATION; 06570000=01665000=
+ PRL = 18#, COMMENT (0111) 7.4.10.6 PROGRAM RELEASE; 06575000=01666000=
+ PRTE= 12#, COMMENT (0061) 7.4.10.9 EXTEND PRT; 06580000=01667000=
+ RDV = 896#, COMMENT (7001) 7.4.2.6 REMAINDER DIVIDE; 06585000=01668000=
+ RTN = 39#, COMMENT (0235) 7.4.8.3 RETURN NORMAL; 06590000=01669000=
+ RTS = 167#, COMMENT (1235) 7.4.8.4 RETURN SPECIAL; 06595000=01670000=
+ SND = 132#, COMMENT (1021) 7.4.6.2 STORE NON-DESTRUCTIVE; 06600000=01671000=
+ SSP = 582#, COMMENT (4431) 7.4.7.10 SET SIGN PLUS; 06605000=01672000=
+ STD = 68#, COMMENT (0421) 7.4.6.1 STORE DESTRUCTIVE; 06610000=01673000=
+ SUB = 48#, COMMENT (0301) 7.4.2.2 SUBTRACT; 06615000=01674000=
+ XCH = 133#, COMMENT (1025) 7.4.9.1 EXCHANGE; 06620000=01675000=
+ XIT = 71#, COMMENT (0435) 7.4.8.2 EXIT; 06625000=01676000=
+ ZP1 = 322#, COMMENT (2411) 7.4.10.8 CONDITIONAL HALT; 06630000=01677000=
+ SCI =1003#, COMMENT (7655) SCAN OUT INITIALIZE; 06635000=01677050=
+ SAN =1004#, COMMENT (7661) SYSTEM ATTENTION NEEDED 06640000=01677100=
+ SCS =1019#, COMMENT (7755) SCAN OUT STOP; 06645000=01677150=
+ COMMENT THESE DEFINES ARE USED BY EMITD; 06650000=01678000=
+ DEFINE 06655000=01679000=
+ DIA = 45#, COMMENT (XX55) 7.4.7.1 DIAL A; 06660000=01680000=
+ DIB = 49#, COMMENT (XX61) 7.4.7.2 DIAL B; 06665000=01681000=
+ TRB = 53#; COMMENT (XX65) 7.4.7.3 TRANSFER BITS; 06670000=01682000=
+ REAL 06675000=01683000=
+ MAXSTACK, 06680000=01683000=
+ STACKCTR; 06685000=01683000=
+ INTEGER 06690000=01684000=
+ MAXROW; 06695000=01684000=
+ COMMENT THIS CONTAINS THE MAXIMUM ROW SIZE OF ALL NON-SAVE 06700000=01685000=
+ ARRAYS DECLARED. ITS USE IS LIKE THAT OF MAXSAVE; 06705000=01686000=
+ INTEGER 06710000=01687000=
+ SEGSIZEMAX; 06715000=01687000=
+ COMMENT CONTAINS MAX SEGMENT SIZE; 06720000=01687000=
+ INTEGER 06725000=01688000=
+ F; 06730000=01688000=
+ REAL 06735000=01689000=
+ NLO, 06740000=01689000=
+ NHI, 06745000=01689000=
+ TLO, 06750000=01689000=
+ THI; 06755000=01689000=
+ BOOLEAN 06760000=01690000=
+ DPTOG; 06765000=01690000=
+ COMMENT THE ABOVE THINGS ARE TEMP STORAGE FOR DOUBLE NOS;06770000=01691000=
+ BOOLEAN 06775000=01691500=
+ DOLLAR2TOG; 06780000=01691500=
+ DEFINE 06785000=01692000=
+ FZERO = 896 #; 06790000=01692000=
+ REAL 06795000=01693000=
+ T1, 06800000=01693000=
+ T2, 06805000=01693000=
+ N, 06810000=01693000=
+ K, 06815000=01693000=
+ AKKUM; 06820000=01693000=
+ BOOLEAN 06825000=01694000=
+ STOPGSP; 06830000=01694000=
+ INTEGER 06835000=01695000=
+ BUP; 06840000=01695000=
+ BOOLEAN 06845000=01695500=
+ INLINETOG; 06850000=01695500=
+ COMMENT UNIQUE GLOBAL TEMP FOR BLOCK; 06855000=01696000=
+ ARRAY 06860000=01697000=
+ GTA1[0:10]; 06865000=01697000=
+ BOOLEAN ARRAY 06870000=01698000=
+ SPRT[0:31]; 06875000=01698000=
+ COMMENT SPRT IS TO BE CONSIDERED TO BE AN ARRAY OF 32 32 BIT 06880000=01699000=
+ FIELDS. THE 32 BITS ARE IN THE LOW ORDER PART OF EACH 06885000=01700000=
+ WORD. THE BIT IS ON IF AND ONLY IF THE CORRESPONDING 06890000=01701000=
+ PRT CELL HAS A PERMANENT ASSIGNMENT; 06895000=01702000=
+ INTEGER 06900000=01703000=
+ PRTI, 06905000=01703000=
+ PRTIMAX; 06910000=01703000=
+ COMMENT PRTIMAX GIVES NEXT PRT CELL AVAILABLE FOR PERMANENT ASSIGN-06915000=01704000=
+ MENT. PRTI GIVES NEXT PRT CELL POSSIBLY AVAILABLE FOR 06920000=01705000=
+ TEMPORARY ASSIGNMENT; 06925000=01706000=
+ DEFINE 06930000=01707000=
+ ALPHASIZE = [12:6] #; 06935000=01707000=
+ COMMENT ALPHASIZE IS THE DEFINE FOR THE BIT06940000=01707000=
+ POSITION IN THE SECOND WORD OF INFO WHICH 06945000=01708000=
+ CONTAINS THE LENGTH OF ALPHA; 06950000=01709000=
+ DEFINE 06955000=01710000=
+ EDOCINDEX = L.[36:3], L.[39:7] #; 06960000=01710000=
+ COMMENT EDOCINDEX IS THE WORD 06965000=01710000=
+ PORTION OF L SPLIT INTO A ROW AND06970000=01711000=
+ COLUMN INDEX FOR EDOC; 06975000=01712000=
+ DEFINE 06980000=01713000=
+ CPLUS1 = 769 #; 06985000=01713000=
+ COMMENT SEE COMMENT AT CPLUS2 DEFINE; 06990000=01713000=
+ DEFINE 06995000=01714000=
+ CPLUS2 = 770 #; 07000000=01714000=
+ COMMENT CPLUS1 AND CPLUS2 ARE EXPLICIT CONSTANTS 07005000=01714000=
+ USED IN THE GENERATION OF C-RELATIVE CODE; 07010000=01715000=
+ PROCEDURE FLAG(ERRNUM); 07015000=01716000=
+ VALUE 07020000=01716000=
+ ERRNUM; 07025000=01716000=
+ INTEGER 07030000=01716000=
+ ERRNUM; 07035000=01716000=
+ FORWARD; 07040000=01716000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07045000=01716000=
+ ALPHA PROCEDURE B2D(B); 07050000=01717000=
+ VALUE 07055000=01717000=
+ B; 07060000=01717000=
+ REAL 07065000=01717000=
+ B; 07070000=01717000=
+ FORWARD; 07075000=01717000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07080000=01717000=
+ REAL PROCEDURE TAKE(W); 07085000=01717700=
+ VALUE 07090000=01717700=
+ W; 07095000=01717700=
+ INTEGER 07100000=01717700=
+ W; 07105000=01717700=
+ FORWARD; 07110000=01717700=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07115000=01717700=
+ BOOLEAN 07120000=01717800=
+ MACROID; 07125000=01717800=
+ REAL PROCEDURE FIXDEFINEINFO(T); 07130000=01717900=
+ VALUE 07135000=01717900=
+ T; 07140000=01717900=
+ REAL 07145000=01717900=
+ T; 07150000=01717900=
+ FORWARD; 07155000=01717900=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07160000=01717900=
+ PROCEDURE ERR(ERRNUM); 07165000=01718000=
+ VALUE 07170000=01718000=
+ ERRNUM; 07175000=01718000=
+ INTEGER 07180000=01718000=
+ ERRNUM; 07185000=01718000=
+ FORWARD; 07190000=01718000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07195000=01718000=
+ INTEGER PROCEDURE GIT(L); 07200000=01719000=
+ VALUE 07205000=01719000=
+ L; 07210000=01719000=
+ REAL 07215000=01719000=
+ L; 07220000=01719000=
+ FORWARD; 07225000=01719000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07230000=01719000=
+ ARRAY 07235000=01720000=
+ CALLA[0:31, 0:255]; 07240000=01720000=
+ DEFINE 07245000=01721000=
+ CALL[CALL1] = CALLA[(GT3:= CALL1).LINKR, GT3.LINKC] #; 07250000=01721000=
+ REAL 07255000=01722000=
+ CALLX, 07260000=01722000=
+ CALLINFO, 07265000=01722000=
+ NESTCTR, 07270000=01722000=
+ NESTCUR; 07275000=01722000=
+ BOOLEAN 07280000=01723000=
+ NESTOG; 07285000=01723000=
+ ARRAY 07290000=01724000=
+ NESTPRT[PRTBASE:PRTOP]; 07295000=01724000=
+ ARRAY 07300000=01725000=
+ SORTPRT[0:PRTOP-PRTBASE]; 07305000=01725000=
+ 07310000=01737300=
+COMMENT "BLANKET" BLANKS OUT N+1 WORDS IN "THERE"; 07315000=01737300=
+ STREAM PROCEDURE BLANKET(N, THERE); 07320000=01737350=
+ VALUE 07325000=01737350=
+ N; 07330000=01737350=
+ BEGIN 07335000=01737400=
+ DI:= THERE; 07340000=01737450=
+ DS:= 8 LIT 6" "; 07345000=01737450=
+ SI:= THERE; 07350000=01737450=
+ DS:= N WDS; 07355000=01737450=
+ END BLANKET; 07360000=01737500=
+ STREAM PROCEDURE CHANGESEQ(VAL, OLDSEQ); 07365000=01741200=
+ VALUE 07370000=01741200=
+ OLDSEQ; 07375000=01741200=
+ BEGIN 07380000=01741300=
+ DI:= OLDSEQ; 07385000=01741300=
+ SI:= VAL; 07390000=01741300=
+ DS:= 8 DEC 07395000=01741300=
+ END CHANGESEQ; 07400000=01741300=
+ STREAM PROCEDURE SEQUENCEERROR(L); 07405000=01742100=
+ BEGIN 07410000=01742110=
+ DI:= L; 07415000=01742110=
+ DS:= 16 LIT 6"SEQUENCE ERROR "; 07420000=01742110=
+ END SEQUENCEERROR; 07425000=01742110=
+ STREAM PROCEDURE GETVOID(VP, NCR, LCR, SEQ); 07430000=01756000=
+ VALUE 07435000=01756000=
+ NCR, 07440000=01756000=
+ LCR; 07445000=01756000=
+ BEGIN 07450000=01757000=
+ LABEL 07455000=01758000=
+ L, 07460000=01758000=
+ EXIT; 07465000=01758000=
+ LOCAL N; 07470000=01759000=
+ SI:= NCR; 07475000=01761000=
+ DI:= VP; 07480000=01761000=
+ DS:= 8 LIT 6"0"; 07485000=01761000=
+ 2(34(IF SC = 6" " THEN SI:= SI+1 ELSE JUMP OUT 2 TO L)); 07490000=01762000=
+ GO TO EXIT; % NO VOID RANGE GIVEN, RETURN ZERO. 07495000=01763000=
+L: IF SC = 6"%" THEN 07500000=01764500=
+ GO TO EXIT; % STILL NO RANGE. 07505000=01764500=
+ IF SC = 6""" THEN 07510000=01765000=
+ BEGIN 07515000=01766000=
+ SI:= SI+1; 07520000=01767000=
+ DI:= LCR; 07525000=01767000=
+ DS:= 1 LIT 6"""; % STOPPER FOR SCAN 07530000=01767000=
+ NCR:= SI; % TEMP. STORAGE, SINCE NCR IS "LOCAL" TO GETVOID. 07535000=01768000=
+ 8 (IF SC = 6""" THEN JUMP OUT ELSE BEGIN TALLY:= TALLY+1;SI:= SI+ 07540000=01770000=
+ 1 07545000=01770000=
+ END); 07550000=01770000=
+ END 07555000=01772000=
+ ELSE 07560000=01772000=
+ BEGIN 07565000=01772000=
+ NCR:= SI; % TEMP. STORAGE, SINCE NCR IS "LOCAL" TO GETVOID. 07570000=01773000=
+ DI:= LCR; 07575000=01774000=
+ DS:= 1 LIT 6" "; % STOPPER FOR SCAN 07580000=01774000=
+ 8 (IF SC = 6" " THEN JUMP OUT ELSE BEGIN TALLY:= TALLY+1;SI:= SI+ 07585000=01776000=
+ 1 07590000=01776000=
+ END); 07595000=01776000=
+ END; 07600000=01777000=
+ SI:= NCR; 07605000=01780000=
+ DI:= VP; 07610000=01780000=
+ DI:= DI+8; % RESTORE POINTERS. 07615000=01780000=
+ N:= TALLY; 07620000=01781000=
+ DI:= DI-N; 07625000=01781000=
+ DS:= N CHR; 07630000=01781000=
+EXIT: 07635000=01784000=
+ END OF GETVOID; 07640000=01784000=
+ REAL 07645000=01785000=
+ VOIDCR, 07650000=01785000=
+ VOIDPLACE, 07655000=01785000=
+ VOIDTCR, 07660000=01785000=
+ VOIDTPLACE; 07665000=01785000=
+ FORMAT 07670000=01802000=
+ BUG(X24, 4(A4, X2)); 07675000=01802000=
+ PROCEDURE DATIME; 07680000=01820000=
+ BEGIN 07685000=01821000=
+ INTEGER 07690000=01822000=
+ H, 07695000=01822000=
+ MIN, 07700000=01822000=
+ Q; 07705000=01822000=
+ ALPHA 07710000=01822000=
+ N1, 07715000=01822000=
+ N2; 07720000=01822000=
+ ALPHA 07725000=01823000=
+ STREAM PROCEDURE DATER(DATE); 07730000=01823000=
+ VALUE 07735000=01823000=
+ DATE; 07740000=01823000=
+ BEGIN 07745000=01824000=
+ DI:= LOC DATER; 07750000=01825000=
+ SI:= LOC DATE; 07755000=01825000=
+ SI:= SI+2; 07760000=01825000=
+ (DS:= 2 CHR;DS:= LIT 6"/"); 07765000=01826000=
+ DS:= 2 CHR; 07770000=01826000=
+ END OF DATER; 07775000=01827000=
+ H:= TIME1 DIV 216000; 07780000=01828000=
+ MIN:= (TIME1 DIV 3600) MOD 60; 07785000=01828000=
+ N1:= DISK.MFID; 07790000=01828500=
+ N2:= DISK.FID; 07795000=01828500=
+ WRITE(LINE, < X22, 6"BURROUGHS B-5700 ESPOL COMPILER MARK ", 07800000=01835500=
+ 6"XVI.0.00", 6" ", A6, 6"DAY, ", O, 6", ", I2, 6":", A2, 07805000=01835500=
+ X1, A3, ////X45, A1, A6, 6"/", A1, A6, /X45, 15(6"=")//>, 07810000=01835500=
+ TIME(6), DATER(TIME(5)), 12*REAL(Q:= H MOD 12 = 0)+Q, 07815000=01835500=
+ Q:= MIN MOD 10+(MIN DIV 10)*64, IIF H >= 12 THEN 6"PM." ELSE 07820000=01835500=
+ 6"AM.", N1.[6:6], N1, N2.[6:6], N2); 07825000=01835500=
+ NOHEADING:= FALSE; 07830000=01836000=
+ END OF DATIME; 07835000=01837000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07840000=01837000=
+ 07845000=02000000=
+ COMMENT THIS SECTION CONTAINS ALL CODE PERTAINENT TO READING CARDS 07850000=02000000=
+ AND SCANNING THEM; 07855000=02001000=
+ 07860000=02001836=
+COMMENT OCTIZE REFORMATS ACCUM FOR OCTAL CONSTANTS; 07865000=02001836=
+ BOOLEAN 07870000=02001838=
+ STREAM PROCEDURE OCTIZE(S, D, SKP, CNT); 07875000=02001838=
+ VALUE 07880000=02001838=
+ SKP, 07885000=02001838=
+ CNT; 07890000=02001838=
+ BEGIN 07895000=02001840=
+ SI:= S; 07900000=02001842=
+ SI:= SI+4; 07905000=02001842=
+ DI:= D; 07910000=02001842=
+ SKP(DS:= 3 RESET); % RIGHT JUSTIFY. 07915000=02001842=
+ CNT(IF SC >= 6"8" THEN TALLY:= 1 ELSE IF SC < 6"0" THEN TALLY:= 1; 07920000=02001846=
+ SKIP 3 SB;3(IF SB THEN DS:= SET ELSE DS:= RESET;SKIP SB)); 07925000=02001846=
+ SI:= D; 07930000=02001848=
+ IF SB THEN 07935000=02001848=
+ BEGIN 07940000=02001850=
+ TALLY:= 1; 07945000=02001850=
+ DI:= D; 07950000=02001850=
+ DS:= RESET 07955000=02001850=
+ END; % PREVENT FLAG BIT. 07960000=02001850=
+ OCTIZE:= TALLY;% "1" = NON OCTAL CHARACTER OR FLAG BIT. 07965000=02001852=
+ END OCTIZE; 07970000=02001854=
+ 07975000=02001856=
+COMMENT HEXIZE REFORMATS ACCUM FOR HEXADECIMAL CONSTANTS; 07980000=02001856=
+ BOOLEAN 07985000=02001858=
+ STREAM PROCEDURE HEXIZE(S, D, SKP, CNT); 07990000=02001858=
+ VALUE 07995000=02001858=
+ SKP, 08000000=02001858=
+ CNT; 08005000=02001858=
+ BEGIN 08010000=02001860=
+ LOCAL T1, T2, TEMP2, TEMP1; 08015000=02001860=
+ LABEL 08020000=02001860=
+ AGIN; 08025000=02001860=
+ 08030000=02001862=
+COMMENT LOCAL VARIABLES ARE LOCATED IN REVERSE ORDER FROM THE 08035000=02001862=
+ WAY THEY ARE DECLARED IN STREAM PROCEDURES; 08040000=02001864=
+ DI:= LOC TEMP1; 08045000=02001866=
+ CNT(DS:= LIT 6"1"); % IN CASE A CHAR=A,B,C,D,OR F. 08050000=02001866=
+ SI:= S; 08055000=02001868=
+ SI:= SI+3; 08060000=02001868=
+ DI:= LOC TEMP1; % WE MAY OVERFLOW INTO TEMP2. 08065000=02001868=
+ CNT(IF SC < 6"0" THEN IF SC >= 6"A" THEN IF SC <= 6"F" THEN 08070000=02001870=
+ % WORK HARD. 08075000=02001870=
+ BEGINT1:= SI;T2:= DI;DI:= T1;SI:= T2; % FLIP, MAN. 08080000=02001874=
+ DS:= 3 RESET;SI:= T1;DI:= T2; % FLIP BACK. 08085000=02001876=
+ DS:= 1 ADD;DI:= DI-1;SKIP 2 DB;DS:= 1 SET;SKIP 3 DB;GO AGIN; 08090000=02001882=
+ END; 08095000=02001882=
+ IF SC < 6"0" THEN 08100000=02001884=
+ TALLY:= 1; 08105000=02001884=
+ DS:= CHR; % < 0 = NON-HEX CHARACTER. 08110000=02001884=
+AGIN: 08115000=02001888=
+ ); 08120000=02001888=
+ SI:= LOC TEMP1; 08125000=02001890=
+ DI:= D; 08130000=02001890=
+ SKP(DS:= 4 RESET); % RIGHT ADJUST CONSTANT. 08135000=02001890=
+ CNT(SKIP 2 SB;4(IF SB THEN DS:= SET ELSE DS:= RESET;SKIP SB)); 08140000=02001894=
+ % FINAL CONVERT. 08145000=02001894=
+ SI:= D; 08150000=02001895=
+ IF SB THEN 08155000=02001895=
+ BEGIN 08160000=02001896=
+ TALLY:= 1; 08165000=02001896=
+ DI:= D; 08170000=02001896=
+ DS:= RESET 08175000=02001896=
+ END; % PREVENT FLAG BIT. 08180000=02001896=
+ HEXIZE:= TALLY;% "1" IF PROGRAMMER GOOFED. 08185000=02001897=
+ END HEXIZE; 08190000=02001898=
+ 08195000=02002000=
+COMMENT PUTSEQNO PUTS THE SEQUENCE NUMBER OF THE CARD-IMAGE 08200000=02002000=
+ CURRENTLY BEING SCANNED INTO THE INFO TABLE IN CASE 08205000=02003000=
+ IT IS NEEDED FOR FUTURE REFERENCE; 08210000=02004000=
+ STREAM PROCEDURE PUTSEQNO(INFO, LCR); 08215000=02005000=
+ VALUE 08220000=02005000=
+ LCR; 08225000=02005000=
+ BEGIN 08230000=02006000=
+ DI:= INFO; 08235000=02006000=
+ SI:= LCR; 08240000=02006000=
+ DS:= WDS; 08245000=02006000=
+ END PUTSEQNO; 08250000=02006000=
+ 08255000=02007000=
+COMMENT TURNONSTOPLIGHT TURNS THE LIGHT "RED" ON THE "CORNER". 08260000=02007000=
+ I.E., THE PURPOSE OF THIS ROUTINE IS TO INSERT A PER- 08265000=02008000=
+ CENT SIGN IN COLUMN 73 AS AN END OF CARD SENTINEL FOR 08270000=02009000=
+ THE SCANNER; 08275000=02010000=
+ STREAM PROCEDURE TURNONSTOPLIGHT(RED, CORNER); 08280000=02011000=
+ VALUE 08285000=02011000=
+ RED, 08290000=02011000=
+ CORNER; 08295000=02011000=
+ BEGIN 08300000=02012000=
+ DI:= CORNER; 08305000=02012000=
+ SI:= LOC CORNER; 08310000=02012000=
+ SI:= SI-1; 08315000=02012000=
+ DS:= CHR 08320000=02012000=
+ END; 08325000=02012000=
+ COMMENT WRITNEW TRANSFERS THE CARD IMAGE TO THE NEWTAPE BUFFER 08330000=02014000=
+ AND REPORTS IF THE CARD MIGHT BE CONTROL CARD; 08335000=02015000=
+ BOOLEAN 08340000=02016000=
+ STREAM PROCEDURE WRITNEW(NEW, FCR); 08345000=02016000=
+ VALUE 08350000=02016000=
+ FCR; 08355000=02016000=
+ BEGIN 08360000=02017000=
+ SI:= FCR; 08365000=02017000=
+ IF SC ^= 6"$" THEN 08370000=02017000=
+ TALLY:= 1; 08375000=02017000=
+ DI:= NEW; 08380000=02018000=
+ DS:= 10 WDS; 08385000=02018000=
+ WRITNEW:= TALLY 08390000=02020000=
+ END WRITNEW; 08395000=02020000=
+ COMMENT MKABS CONVERTS A DESCRIPTOR TO AN ABSOLUTE ADDRESS; 08400000=02021000=
+ REAL 08405000=02022000=
+ STREAM PROCEDURE MKABS(A); 08410000=02022000=
+ BEGIN 08415000=02023000=
+ D1:= A; 08420000=02023000=
+ MKABS:= DI 08425000=02023000=
+ END MKABS; 08430000=02023000=
+ REAL 08435000=02041000=
+ STREAM PROCEDURE CONV(ACCUM, SKP, N); 08440000=02041000=
+ VALUE 08445000=02041000=
+ SKP, 08450000=02041000=
+ N; 08455000=02041000=
+ BEGIN 08460000=02042000=
+ SI:= ACCUM; 08465000=02043000=
+ SI:= SI+SKP; 08470000=02043000=
+ SI:= SI+3; 08475000=02043000=
+ DI:= LOC CONV; 08480000=02043000=
+ DS:= N OCT 08485000=02044000=
+ END; 08490000=02044000=
+ STREAM PROCEDURE MOVECHARACTERS(N, SORCE, SSKIP, DEST, DSKIP); 08495000=02045000=
+ VALUE 08500000=02046000=
+ N, 08505000=02046000=
+ SSKIP, 08510000=02046000=
+ DSKIP; 08515000=02046000=
+ BEGIN 08520000=02047000=
+ SI:= SORCE; 08525000=02048000=
+ DI:= DEST; 08530000=02048000=
+ SI:= SI+SSKIP; 08535000=02049000=
+ DI:= DI+DSKIP; 08540000=02049000=
+ DS:= N CHR; 08545000=02050000=
+ END; 08550000=02051000=
+ 08555000=02052000=
+ COMMENT MOVECHARACTERS MOVES N CHARACTERS FROM THE SSKIP-TH CHAR IN 08560000=02052000=
+ "SORCE" TO THE DSKIP-TH CHAR IN "DEST". ; 08565000=02053000=
+ STREAM PROCEDURE MOVE(W)6"WORDS FROM"(A)6"TO"(B); 08570000=02054000=
+ VALUE 08575000=02054000=
+ W; 08580000=02054000=
+ BEGIN 08585000=02055000=
+ SI:= A; 08590000=02055000=
+ DI:= B; 08595000=02055000=
+ DS:= W WDS 08600000=02055000=
+ END; 08605000=02055000=
+ STREAM PROCEDURE RESIZE(FIEL); 08610000=02056000=
+ BEGIN 08615000=02057000=
+ LOCAL T; 08620000=02057000=
+ SI:= FIEL; 08625000=02058000=
+ DI:= LOC T; 08630000=02058000=
+ DS:= WDS; 08635000=02058000=
+ SI:= T; 08640000=02059000=
+ DI:= FIEL; 08645000=02059000=
+ DI:= DI+1; 08650000=02059000=
+ SKIP 2 DB; 08655000=02059000=
+ DS:= 10 SET 08660000=02060000=
+ END; 08665000=02060000=
+ 08670000=02061000=
+COMMENT EQUAL COMPARES COUNT CHARACTERS LOCATED AT A AND B FOR 08675000=02061000=
+ EQUALITY. THIS ROUTINE IS USED IN THE LOOK-UP OF ALPHA 08680000=02061500=
+ QUANTITIES IN THE DIRECTORY; 08685000=02062000=
+ BOOLEAN 08690000=02062500=
+ STREAM PROCEDURE EQUAL(COUNT, A, B); 08695000=02062500=
+ VALUE 08700000=02062500=
+ COUNT; 08705000=02062500=
+ BEGIN 08710000=02063000=
+ TALLY:= 1; 08715000=02063500=
+ SI:= A; 08720000=02063500=
+ DI:= B; 08725000=02063500=
+ IF COUNT SC = DC THEN 08730000=02064000=
+ EQUAL:= TALLY 08735000=02064500=
+ END EQUAL; 08740000=02064500=
+ PROCEDURE READACARD; 08745000=02065000=
+ FORWARD; 08750000=02065000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08755000=02065000=
+ PROCEDURE DOLLARCARD; 08760000=02065500=
+ FORWARD; 08765000=02065500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08770000=02065500=
+ BOOLEAN PROCEDURE BOOLEXP; 08775000=02065600=
+ FORWARD; 08780000=02065600=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08785000=02065600=
+ PROCEDURE SCANNER; 08790000=02066000=
+ BEGIN 08795000=02066500=
+ 08800000=02067000=
+COMMENT "SCAN" IS THE STREAM PROCEDURE WHICH DOES THE ACTUAL SCANNING. 08805000=02067000=
+ IT IS DRIVEN BY A SMALL WORD MODE PROCEDURE CALLED "SCANNER", 08810000=02067500=
+ WHICH CHECKS FOR A QUANTITY BEING BROKEN ACROSS A CARD. "SCAN" 08815000=02068000=
+ IS CONTROLLED BY A VARIABLE CALLED "RESULT". "SCAN" ALSO 08820000=02068500=
+ INFORMS THE WORLD OF ITS ACTION BY MEANS OF THE SAME VARIABLE, 08825000=02069000=
+ HENCE THE VARIABLE "RESULT" IS PASSED BY BOTH NAME AND VALUE. 08830000=02069500=
+ THE MEANING OF "RESULT" AS INPUT IS: 08835000=02070000=
+ VALUE MEANING 08840000=02070500=
+ ===== ======================================== 08845000=02071000=
+ 0 INITIAL CODE - DEBLANK AND START TO FETCH THE 08850000=02071500=
+ NEXT QUANTITY. 08855000=02072000=
+ 1 CONTINUE BUILDING AN IDENTIFIER (INTERRUPTED BY 08860000=02072500=
+ END-OF-CARD BREAK). 08865000=02073000=
+ 2 LAST QUANTITY BUILT WAS SPECIAL CHARACTER. HENCE, 08870000=02073500=
+ EXIT (INTERRUPTION BY END-OF-CARD BREAK IS NOT 08875000=02074000=
+ IMPORTANT). 08880000=02074500=
+ 3 CONTINUE BUILDING A NUMBER (INTERRUPTED BY END-OF- 08885000=02075000=
+ CARD BREAK). 08890000=02075500=
+ 4 LAST THING WAS AN ERROR (COUNT EXCEEDED 63). HENCE,08895000=02076000=
+ EXIT (INTERRUPTION BY END-OF-CARD BREAK NOT 08900000=02076500=
+ IMPORTANT). 08905000=02077000=
+ 5 GET NEXT CHARACTER AND EXIT. 08910000=02077500=
+ 6 SCAN A COMMENT. 08915000=02078000=
+ 7 DEBLANK ONLY. 08920000=02078500=
+ THE MEANING OF "RESULT" AS OUTPUT IS: 08925000=02079000=
+ VALUE MEANING 08930000=02079500=
+ ===== ======================================== 08935000=02080000=
+ 1 AN IDENTIFIER WAS BUILT. 08940000=02080500=
+ 2 A SPECIAL CHARACTER WAS OBTAINED. 08945000=02081000=
+ 3 A NUMBER (INTEGER) WAS BUILT. 08950000=02081500=
+ "SCAN" PUTS ALL STUFF SCANNED (EXCEPT FOR COMMENTS AND 08955000=02082000=
+ DISCARDED BLANKS) INTO "ACCUM" (CALLED "ACCUMULATOR" 08960000=02082500=
+ FOR THE REST OF THIS DISCUSSION). 08965000=02083000=
+ "COUNT" IS THE VARIABLE THAT GIVES THE NUMBER OF CHARACTERS 08970000=02083500=
+ "SCAN" HAS PUT INTO THE "ACCUMULATOR". SINCE "SCAN" NEEDS 08975000=02084000=
+ THE VALUE SO THAT IT CAN PUT MORE CHARACTERS INTO THE "ACCUM- 08980000=02084500=
+ ULATOR" AND NEEDS TO UPDATE "COUNT" FOR THE OUTSIDE WORLD. 08985000=02085000=
+ "COUNT" IS PASSED BY BOTH NAME AND VALUE. IT IS ALSO 08990000=02085500=
+ CONVENIENT TO HAVE (63-COUNT). THIS IS CALLED "COMCOUNT". 08995000=02086000=
+ "NCR" (NEXT CHARACTER TO BE SCANNED) IS ALSO PASSED BY 09000000=02086500=
+ NAME AND VALUE SO THAT IT MAY BE UPDATED. 09005000=02087000=
+ "ST1" AND "ST2" ARE TEMPORARY STORAGES WHICH ARE EXPLICITLY 09010000=02087500=
+ PASSED TO "SCAN" IN ORDER TO OBTAIN THE MOST USEFULL STACK 09015000=02088000=
+ ARRANGEMENT. 09020000=02088500=
+ ; 09025000=02089000=
+ STREAM PROCEDURE SCAN(NCR, COUNTV, ACCUM, COMCOUNT, RESULT, 09030000=02090000=
+ RESULTV, COUNT, ST2, NCRV, ST1); 09035000=02090000=
+ VALUE 09040000=02090500=
+ COUNTV, 09045000=02090500=
+ COMCOUNT, 09050000=02090500=
+ RESULTV, 09055000=02090500=
+ ST2, 09060000=02090500=
+ NCRV, 09065000=02090500=
+ ST1; 09070000=02090500=
+ BEGIN 09075000=02091000=
+ LABEL 09080000=02091500=
+ DEBLANK, 09085000=02091500=
+ NUMBERS, 09090000=02091500=
+ IDBLDR, 09095000=02091500=
+ GNC, 09100000=02091500=
+ K, 09105000=02091500=
+ EXIT, 09110000=02091500=
+ FINIS, 09115000=02091500=
+ L, 09120000=02091500=
+ ERROR, 09125000=02092000=
+ COMMENTS, 09130000=02092000=
+ COMMANTS; 09135000=02092000=
+ DI:= RESULT; 09140000=02092500=
+ DI:= DI+7; 09145000=02092500=
+ SI:= NCRV; 09150000=02092500=
+ 09155000=02093000=
+COMMENT SETUP "DI" FOR A CHANGE IN "RESULT" AND "SI" FOR A LOOK AT 09160000=02093000=
+ THE BUFFER; 09165000=02093500=
+ CI:= CI+RESULTV; % SWITCH ON VALUE OF RESULT; 09170000=02094000=
+ GO DEBLANK; % 0 IS INITIAL CODE. 09175000=02094500=
+ GO IDBLDR; % 1 IS ID CODE. 09180000=02095000=
+ GO FINIS; % 2 IS SPECIAL CHARACTER CODE. 09185000=02095500=
+ GO NUMBERS; % 3 IS NUMBER CODE. 09190000=02096000=
+ GO FINIS; % 4 IS ERROR CODE. 09195000=02096500=
+ GO GNC; % 5 IS GET NEXT CHARACTER CODE. 09200000=02097000=
+ GO COMMANTS; % 6 IS COMMENT CODE. 09205000=02097500=
+ % 7 IS DEBLANK ONLY CODE. 09210000=02098000=
+ IF SC = 6" " THEN 09215000=02098500=
+ K: 09220000=02099000=
+ BEGIN 09225000=02099000=
+ SI:= SI+1; 09230000=02099000=
+ IF SC = 6" " THEN 09235000=02099000=
+ GO K 09240000=02099000=
+ END; 09245000=02099000=
+ GO FINIS; 09250000=02099500=
+ DEBLANK: 09255000=02100500=
+ IF SC = 6" " THEN 09260000=02100500=
+ L: 09265000=02101000=
+ BEGIN 09270000=02101000=
+ SI:= SI+1; 09275000=02101000=
+ IF SC = 6" " THEN 09280000=02101000=
+ GO L 09285000=02101000=
+ END; 09290000=02101000=
+ 09295000=02101500=
+COMMENT IF WE ARRIVE HERE WE HAVE A NON-BLANK CHARACTER; 09300000=02101500=
+ NCRV:= SI; 09305000=02102000=
+ IF SC >= 6"0" THEN 09310000=02102500=
+ GO NUMBERS; 09315000=02102500=
+ IF SC = ALPHA THEN 09320000=02103000=
+ GO IDBLDR; 09325000=02103000=
+ 09330000=02103500=
+COMMENT IF WE ARRIVE HERE WE HAVE A SPECIAL CHARACTER (OR GNC); 09335000=02103500=
+ GNC: 09340000=02104500=
+ DS:= LIT 6"2"; 09345000=02104500=
+ TALLY:= 1; 09350000=02104500=
+ SI:= SI+1; 09355000=02104500=
+ GO EXIT; 09360000=02104500=
+ COMMANTS: 09365000=02105500=
+ IF SC ^= 6";" THEN 09370000=02105500=
+ BEGIN 09375000=02106000=
+ COMMENTS: 09380000=02107000=
+ SI:= SI+1; 09385000=02107000=
+ IF SC > 6"%" THEN 09390000=02107500=
+ GO COMMENTS; 09395000=02107500=
+ IF SC < 6";" THEN 09400000=02108000=
+ GO COMMENTS; 09405000=02108000=
+ 09410000=02108500=
+COMMENT CHARACTERS BETWEEN % AND SEMICOLON ARE HANDLED BY WORD- 09415000=02108500=
+ MODE PART OF COMMENT ROUTINE; 09420000=02109000=
+ END; 09425000=02109500=
+ GO FINIS; 09430000=02110000=
+ IDBLDR: 09435000=02111000=
+ TALLY:= 63; 09440000=02111000=
+ DS:= LIT 6"1"; 09445000=02111000=
+ COMCOUNT(TALLY:= TALLY+1;IF SC = ALPHA THEN SI:= SI+1 ELSE JUMP 09450000=02112000=
+ OUT TO EXIT); 09455000=02112000=
+ TALLY:= TALLY+1; 09460000=02112500=
+ IF SC = ALPHA THEN 09465000=02113000=
+ BEGIN 09470000=02113500=
+ ERROR: 09475000=02114500=
+ DI:= DI-1; 09480000=02114500=
+ DS:= LIT 6"4"; 09485000=02114500=
+ GO EXIT; 09490000=02114500=
+ END 09495000=02115500=
+ ELSE 09500000=02115500=
+ GO EXIT; 09505000=02115500=
+ 09510000=02116000=
+COMMENT IF WE ARRIVE AT ERROR WE HAVE MORE THAN 63 CHARACTERS 09515000=02116000=
+ IN AN IDENTIFIER OR NUMBER; 09520000=02116500=
+ NUMBERS: 09525000=02117500=
+ TALLY:= 63; 09530000=02117500=
+ DS:= LIT 6"3"; 09535000=02117500=
+ COMCOUNT 09540000=02118500=
+ (TALLY:= TALLY+1;IF SC < 6"0" THEN JUMP OUT TO EXIT;SI:= SI+1); 09545000=02118500=
+ GO ERROR; 09550000=02119000=
+ EXIT: 09555000=02120000=
+ ST1:= TALLY; % "ST1" CONTAINS NUMBER OF CHARACTERS WE ARE 09560000=02120000=
+ % GOING TO MOVE INTO THE "ACCUMULATOR". 09565000=02120500=
+ TALLY:= TALLY+COUNTV; 09570000=02121000=
+ ST2:= TALLY; 09575000=02121000=
+ DI:= COUNT; 09580000=02121500=
+ SI:= LOC ST2; 09585000=02121500=
+ DS:= WDS; 09590000=02121500=
+ 09595000=02122000=
+COMMENT THIS CODE UPDATED "COUNT"; 09600000=02122000=
+ DI:= ACCUM; 09605000=02122500=
+ SI:= SI-3; 09610000=02122500=
+ DS:= 3 CHR; 09615000=02122500=
+ 09620000=02123000=
+COMMENT THIS CODE PLACES "COUNT" IN "ACCUM" AS WELL; 09625000=02123000=
+ DI:= DI+COUNTV; % POSITION "DI" PAST CHARACTERS ALREADY 09630000=02123500=
+ % IN THE "ACCUMULATOR", IF ANY. 09635000=02124000=
+ SI:= NCRV; 09640000=02124500=
+ DS:= ST1 CHR; 09645000=02124500=
+ 09650000=02125000=
+COMMENT MOVE CHARACTERS INTO "ACCUM"; 09655000=02125000=
+ FINIS: 09660000=02126000=
+ DI:= NCR; 09665000=02126000=
+ ST1:= SI; 09670000=02126000=
+ SI:= LOC ST1; 09675000=02126000=
+ DS:= WDS; 09680000=02126000=
+ 09685000=02126500=
+COMMENT RESET "NCR" TO LOCATION OF NEXT CHARACTER TO BE SCANNED; 09690000=02126500=
+ END OF SCAN; 09695000=02127000=
+ LABEL 09700000=02127500=
+ L; % 09705000=02127500=
+L: SCAN(NCR, COUNT, ACCUM[1], 63-COUNT, RESULT, RESULT, COUNT, 0 09710000=02129000=
+ , NCR, 0); 09715000=02129000=
+ IF NCR = LCR THEN 09720000=02129500=
+ BEGIN 09725000=02130000=
+ READACARD; 09730000=02130500=
+ GO TO L; % GO DIRECTLY TO L, DO NOT PASS GO, 09735000=02135500=
+ % DO NOT COLLECT $200. 09740000=02136000=
+ END; 09745000=02136500=
+ END SCANNER; 09750000=02137000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09755000=02137000=
+ DEFINE 09760000=02181000=
+ WRITELINE = IF SINGLTOG THEN 09765000=02181000=
+ WRITE(LINE, 15, LIN[**]) 09770000=02181250=
+ ELSE 09775000=02181250=
+ WRITE(LINE[DBL], 15, LIN[**]) #, 09780000=02182500=
+ PRINTCARD = BEGIN 09785000=02182500=
+ EDITLINE 09790000=02182750=
+ (LIN, FCR, L DIV 4, L, [46:2], MEDIUM, OMITTING)09795000=02182750=
+ ; 09800000=02182750=
+ IF NOHEADING THEN 09805000=02183000=
+ DATIME; 09810000=02183000=
+ WRITELINE; 09815000=02183000=
+ END #; 09820000=02183250=
+ STREAM PROCEDURE EDITLINE(LINE, NCR, R, L, SYMBOL, OMIT); 09825000=02183500=
+ VALUE 09830000=02183750=
+ NCR, 09835000=02183750=
+ R, 09840000=02183750=
+ L, 09845000=02183750=
+ SYMBOL, 09850000=02183750=
+ OMIT; 09855000=02183750=
+ BEGIN 09860000=02184000=
+ DI:= LINE; 09865000=02184250=
+ DS:= 16 LIT 6" "; 09870000=02184250=
+ SI:= NCR; 09875000=02184500=
+ DS:= 9 WDS; 09880000=02184500=
+ DS:= 8 LIT 6" "; 09885000=02184750=
+ DS:= WDS; % SEQUENCE NUMBER. 09890000=02185000=
+ DS:= LIT 6" "; 09895000=02185250=
+ SI:= LOC SYMBOL; 09900000=02185250=
+ SI:= SI+6; 09905000=02185250=
+ DS:= 2 CHR; 09910000=02185500=
+ DS:= LIT 6" "; 09915000=02185500=
+ SI:= LOC R; 09920000=02185750=
+ DS:= 4 DEC; 09925000=02185750=
+ DS:= LIT 6":"; 09930000=02185750=
+ SI:= LOC L; 09935000=02186000=
+ DS:= 1 DEC; 09940000=02186000=
+ DS:= 6 LIT 6" "; 09945000=02186250=
+ OMIT(DI:= DI-12;DS:= 8 LIT 6" OMIT"); 09950000=02186750=
+ END EDITLINE; 09955000=02187000=
+ 09960000=02187250=
+COMMENT COMPARE COMPARES SEQUENCE NUMBERS OF TAPE AND CARD. IF 09965000=02187250=
+ TAPE IS SMALLER THEN RESULT = 0 ELSE IF CARD IS SMALLER 09970000=02187500=
+ RESULT = 1 ELSE RESULT = 2; 09975000=02187750=
+ REAL 09980000=02188000=
+ STREAM PROCEDURE COMPARE(TAPE, CARD); 09985000=02188000=
+ VALUE 09990000=02188000=
+ TAPE, 09995000=02188000=
+ CARD; 10000000=02188000=
+ BEGIN 10005000=02188250=
+ SI:= TAPE; 10010000=02188500=
+ DI:= CARD; 10015000=02188500=
+ IF 8 SC >= DC THEN 10020000=02188750=
+ BEGIN 10025000=02189000=
+ SI:= SI-8; 10030000=02189250=
+ DI:= DI-8; 10035000=02189250=
+ TALLY:= 1; 10040000=02189250=
+ IF 8 SC = DC THEN 10045000=02189500=
+ TALLY:= 2 10050000=02189750=
+ END; 10055000=02189750=
+ COMPARE:= TALLY 10060000=02190250=
+ END COMPARE; 10065000=02190250=
+ PROCEDURE OUTPUTSOURCE; 10070000=02190500=
+ BEGIN 10075000=02190750=
+ LABEL 10080000=02191000=
+ LCARD, 10085000=02191000=
+ LTAPE, 10090000=02191000=
+ AWAY; 10095000=02191000=
+ SWITCH 10100000=02191250=
+ SW:= LCARD, 10105000=02191250=
+ LCARD, 10110000=02191250=
+ LTAPE, 10115000=02191250=
+ AWAY, 10120000=02191250=
+ LCARD, 10125000=02191250=
+ LTAPE; 10130000=02191250=
+ IF SEQTOG THEN % RESEQUENCING. 10135000=02191500=
+ BEGIN 10140000=02191750=
+ IF TOTALNO = -10 OR NEWBASE THEN 10145000=02192000=
+ BEGIN 10150000=02192250=
+ NEWBASE:= FALSE; 10155000=02192500=
+ GTI1:= TOTALNO:= BASENUM 10160000=02192750=
+ END 10165000=02193000=
+ ELSE 10170000=02193000=
+ GTI1:= TOTALNO:= TOTALNO+ADDVALUE; 10175000=02193000=
+ CHANGESEQ(GTI1, LCR); 10180000=02193250=
+ END; 10185000=02193500=
+ IF NEWTOG THEN 10190000=02193750=
+ IF WRITNEW(LIN, FCR) THEN 10195000=02194000=
+ WRITE(NEWTAPE, 10, LIN[**]); 10200000=02194000=
+ IF OMITTING THEN 10205000=02194250=
+ IF NOT LISTATOG THEN 10210000=02194250=
+ GO AWAY; 10215000=02194250=
+ GO SW[LASTUSED]; 10220000=02194500=
+LCARD: 10225000=02195000=
+ IF LISTER OR LISTPTOG THEN 10230000=02195000=
+ PRINTCARD; 10235000=02195000=
+ GO AWAY; 10240000=02195250=
+LTAPE: 10245000=02195750=
+ IF LISTER THEN 10250000=02195750=
+ PRINTCARD; 10255000=02195750=
+% GO AWAY; 10260000=02196000=
+AWAY: 10265000=02196500=
+ END OUTPUTSOURCE; 10270000=02196500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10275000=02196500=
+ PROCEDURE READACARD; 10280000=02196750=
+ 10285000=02197000=
+COMMENT READACARD READS CARDS FROM EITHER THE CARD READER OR THE 10290000=02197000=
+ TAPE MERGING AS REQUESTED AND CREATING A NEW TAPE AND 10295000=02197250=
+ LISTING IF REQUESTED. READACARD ALSO INSERTS A PERCENT 10300000=02197500=
+ SIGN AS AN END OF CARD SENTINEL IN COLUMN 73 AND SETS 10305000=02197750=
+ FCR,NCR,LCR,TLCR, AND CLCR; 10310000=02198000=
+ BEGIN 10315000=02198250=
+ PROCEDURE READTAPE; 10320000=02198500=
+ BEGIN 10325000=02201500=
+ LABEL 10330000=02201510=
+ ENDREADTAPE, 10335000=02201510=
+ EOFT; 10340000=02201510=
+ READ(TAPE, 10, TBUFF[**])[EOFT]; 10345000=02201750=
+ LCR:= MKABS(TBUFF[9]); 10350000=02202000=
+ GO TO ENDREADTAPE; 10355000=02202010=
+ EOFT: 10360000=02202030=
+ DEFINEARRAY[25]:= 6"ND;END."&6"E"[1:43:5]; 10365000=02202030=
+ DEFINEARRAY[34]:= 6"9999"&6"9999"[1:25:23]; 10370000=02202040=
+ TLCR:= MKABS(DEFINEARRAY[34]); 10375000=02202050=
+ PUTSEQNO(DEFINEARRAY[33], TLCR-8); 10380000=02202060=
+ TURNONSTOPLIGHT(6"%", TLCR-8); 10385000=02202070=
+ ENDREADTAPE: 10390000=02202250=
+ END READTAPE; 10395000=02202250=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10400000=02202250=
+ PROCEDURE SEQCOMPARE(TLCR, CLCR, LIB); 10405000=02202500=
+ VALUE 10410000=02202500=
+ LIB; 10415000=02202500=
+ BOOLEAN 10420000=02202500=
+ LIB; 10425000=02202500=
+ REAL 10430000=02202750=
+ TLCR, 10435000=02202750=
+ CLCR; 10440000=02202750=
+ BEGIN 10445000=02203000=
+ MEDIUM:= 6"C "; % CARD READER. 10450000=02203250=
+ IF GT1:= COMPARE(TLCR, CLCR) = 0 THEN% TAPE HAS LOW SEQUENCE NUMB10455000=02203500=
+ BEGIN 10460000=02203750=
+ LCR:= TLCR; 10465000=02204000=
+ LASTUSED:= 3; 10470000=02204000=
+ MEDIUM:= 6"T "; % TAPE INPUT. 10475000=02204250=
+ END 10480000=02204750=
+ ELSE 10485000=02204750=
+ BEGIN 10490000=02204750=
+ IF GT1 ^= 1 THEN % TAPE AND CARD HAVE SAME SEQ 10495000=02205000=
+ BEGIN 10500000=02205250=
+ MEDIUM:= 6"P "; % CARD PATCHES TAPE. 10505000=02205500=
+ READTAPE; 10510000=02208500=
+ END; 10515000=02208750=
+ LCR:= CLCR; 10520000=02209000=
+ LASTUSED:= 2; 10525000=02209250=
+ END; 10530000=02209500=
+ END OF SEQCOMPARE; 10535000=02209750=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10540000=02209750=
+ LABEL 10545000=02210000=
+ CARDONLY, 10550000=02210000=
+ CARDLAST, 10555000=02210000=
+ TAPELAST, 10560000=02210000=
+ EXIT, 10565000=02210000=
+ FIRSTTIME, 10570000=02210250=
+ EOF, 10575000=02210250=
+ USETHESWITCH, 10580000=02210500=
+ COMPAR, 10585000=02210500=
+ TESTVOID, 10590000=02210500=
+ XIT; 10595000=02210500=
+ SWITCH 10600000=02210750=
+ USESWITCH:= CARDONLY, 10605000=02210750=
+ CARDLAST, 10610000=02210750=
+ TAPELAST, 10615000=02210750=
+ FIRSTTIME; 10620000=02210750=
+ IF ERRORCOUNT >= ERRMAX THEN 10625000=02211500=
+ ERR(611); % ERR LIMIT EXCEEDED - STOP. 10630000=02211500=
+USETHESWITCH: 10635000=02211800=
+ DOLLAR2TOG:= FALSE; 10640000=02211800=
+ GO TO USESWITCH[LASTUSED]; 10645000=02212000=
+ MOVE(1, INFO[LASTUSED.LINKR, LASTUSED.LINKC], 10650000=02212500=
+ DEFINEARRAY[DEFINEINDEX-2]); 10655000=02212500=
+ LASTUSED:= LASTUSED+1; 10660000=02212750=
+ NCR:= LCR-1; 10665000=02213000=
+ GO TO XIT; 10670000=02213250=
+FIRSTTIME: 10675000=02213750=
+ READ(CARD, 10, CBUFF[**]); 10680000=02213750=
+ FCR:= NCR:= (LCR:= MKABS(CBUFF[9]))-9; 10685000=02214000=
+ MEDIUM:= 6"C "; 10690000=02214100=
+ IF EXAMIN(FCR) ^= 6"$" AND LISTER THEN 10695000=02214200=
+ PRINTCARD; 10700000=02214200=
+ PUTSEQNO(INFO[LASTSEQROW, LASTSEQUENCE], LCR); 10705000=02214250=
+ TURNONSTOPLIGHT(6"%", LCR); 10710000=02214500=
+ GO XIT; 10715000=02214750=
+ 10720000=02215000=
+COMMENT WE HAVE JUST INITIALIZED CARD INPUT; 10725000=02215000=
+CARDONLY: 10730000=02215500=
+ READ(CARD, 10, CBUFF[**]); 10735000=02215500=
+ LCR:= MKABS(CBUFF[9]); 10740000=02215750=
+ GO EXIT; 10745000=02215750=
+CARDLAST: 10750000=02216250=
+ READ(CARD, 10, CBUFF[**])[EOF]; 10755000=02216250=
+ CLCR:= MKABS(CBUFF[9]); 10760000=02216500=
+ GO COMPAR; 10765000=02216750=
+EOF: 10770000=02217250=
+ DEFINEARRAY[25]:= 6"ND;END."&6"E"[1:43:5]; 10775000=02217250=
+ DEFINEARRAY[34]:= 6"9999"&6"9999"[1:25:23]; 10780000=02217500=
+ CLCR:= MKABS(DEFINEARRAY[34]); 10785000=02217750=
+ PUTSEQNO(DEFINEARRAY[33], CLCR-8); 10790000=02218000=
+ TURNONSTOPLIGHT(6"%", CLCR-8); 10795000=02218250=
+% 10800000=02218400=
+ GO COMPAR; 10805000=02218500=
+ 10810000=02218750=
+COMMENT THIS RELEASES THE PREVIOUS CARD FROM THE CARD READER AND 10815000=02218750=
+ SETS UP CLCR; 10820000=02219000=
+TAPELAST: 10825000=02219500=
+ READTAPE; 10830000=02219500=
+ 10835000=02219750=
+COMMENT THIS RELEASES THE PREVIOUS CARD FROM TAPE AND SETS UP TLCR; 10840000=02219750=
+COMPAR: 10845000=02224500=
+ SEQCOMPARE(TLCR, CLCR, FALSE); 10850000=02224500=
+EXIT: 10855000=02225250=
+ NCR:= FCR:= LCR-9; 10860000=02225250=
+ 10865000=02225500=
+COMMENT SETS UP NCR AND FCR; 10870000=02225500=
+ IF EXAMIN(FCR) ^= 6"$" THEN % $-CARDS DON"T COUNT. 10875000=02225750=
+ IF COMPARE(MKABS(INFO[LASTSEQROW, LASTSEQUENCE]), LCR) = 1 THEN 10880000=02226000=
+ BEGIN 10885000=02226250=
+ FLAG(610); % SEQUENCE ERROR. 10890000=02226500=
+ SEQUENCEERROR(LIN); 10895000=02226750=
+ END; 10900000=02227000=
+ CARDNUMBER:= CONV(INFO[LASTSEQROW, LASTSEQUENCE-1], 5, 8); 10905000=02228000=
+ IF LASTUSED = 3 THEN 10910000=02228050=
+ BEGIN 10915000=02228075=
+ IF VOIDTAPE THEN 10920000=02228100=
+ GO USETHESWITCH; 10925000=02228100=
+ IF VOIDTCR ^= 0 THEN 10930000=02228125=
+ IF COMPARE(LCR, VOIDTCR) = 0 THEN 10935000=02228150=
+ GO USETHESWITCH; 10940000=02228150=
+ END; 10945000=02228175=
+ IF EXAMIN(FCR) = 6"$" THEN 10950000=02228250=
+ BEGIN 10955000=02228500=
+ IF LISTPTOG OR PRINTDOLLARTOG THEN 10960000=02228750=
+ PRINTCARD; 10965000=02228750=
+ NCR:= NCR+32768; 10970000=02229000=
+ DOLLARCARD; 10975000=02229000=
+ 10980000=02229250=
+COMMENT DONT FORGET THAT NCR IS NOT WORD MODE, BUT CHAR. MODE POINTER; 10985000=02229250=
+ GO USETHESWITCH; 10990000=02229500=
+ END; 10995000=02229750=
+ IF EXAMIN(FCR) = 6" " THEN 11000000=02230000=
+ IF DOLLAR2TOG:= EXAMIN(FCR+32768) = 6"$" THEN 11005000=02230100=
+ BEGIN 11010000=02230250=
+ OUTPUTSOURCE; 11015000=02230500=
+ NCR:= NCR+65536; % SCAN PAST " $" (CHARACTER MODE). 11020000=02230750=
+ DOLLARCARD; 11025000=02231000=
+ END; 11030000=02231250=
+ IF VOIDING THEN 11035000=02231500=
+ GO USETHESWITCH; 11040000=02231500=
+ IF VOIDCR ^= 0 THEN 11045000=02231750=
+ IF COMPARE(LCR, VOIDCR) > 0 THEN 11050000=02232000=
+ VOIDCR:= VOIDPLACE:= 0 11055000=02232250=
+ ELSE 11060000=02232250=
+ GO USETHESWITCH; 11065000=02232250=
+ IF VOIDTAPE THEN 11070000=02232500=
+ GO TESTVOID; 11075000=02232500=
+ IF VOIDCR ^= 0 THEN 11080000=02233000=
+ IF COMPARE(LCR, VOIDTCR) > 0 THEN 11085000=02233500=
+ VOIDTCR:= VOIDPLACE:= 0 11090000=02233500=
+ ELSE 11095000=02233500=
+ TESTVOID: 11100000=02234000=
+ IF LASTUSED = 3 THEN 11105000=02234000=
+ GO USETHESWITCH; 11110000=02234000=
+ CARDCOUNT:= CARDCOUNT+1; 11115000=02234500=
+ IF DOLLAR2TOG THEN 11120000=02234600=
+ GO USETHESWITCH; 11125000=02234600=
+ PUTSEQNO(INFO[LASTSEQROW, LASTSEQUENCE], LCR); 11130000=02234750=
+ OUTPUTSOURCE; 11135000=02235000=
+ IF OMITTING THEN 11140000=02235250=
+ GO USETHESWITCH; 11145000=02235250=
+% 11150000=02235500=
+ TURNONSTOPLIGHT(6"%", LCR); 11155000=02235750=
+XIT: 11160000=02238000=
+ END READACARD; 11165000=02238000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11170000=02238000=
+ REAL PROCEDURE CONVERT; 11175000=02248000=
+ BEGIN 11180000=02249000=
+ REAL 11185000=02249000=
+ T; 11190000=02249000=
+ INTEGER 11195000=02249000=
+ N; 11200000=02249000=
+ TLO:= 0; 11205000=02250000=
+ THI:= T:= CONV(ACCUM[1], TCOUNT, N:= (COUNT-TCOUNT) MOD 8); 11210000=02251000=
+ FOR N:= TCOUNT+N STEP 8 UNTIL COUNT-1 DO 11215000=02252000=
+ IF DPTOG THEN 11220000=02253000=
+ BEGIN 11225000=02254000=
+ DOUBLE(THI, TLO, 100000000.0, 0, *, CONV(ACCUM[1], N, 8), 0, 11230000=02256000=
+ +, := , THI, TLO); 11235000=02256000=
+ T:= THI; 11240000=02257000=
+ END 11245000=02259000=
+ ELSE 11250000=02259000=
+ T:= T*100000000+CONV(ACCUM[1], N, 8); 11255000=02259000=
+ CONVERT:= T; 11260000=02260000=
+ END; 11265000=02261000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11270000=02261000=
+ REAL 11275000=02262000=
+ STREAM PROCEDURE FETCH(F); 11280000=02262000=
+ VALUE 11285000=02262000=
+ F; 11290000=02262000=
+ BEGIN 11295000=02263000=
+ SI:= F; 11300000=02263000=
+ SI:= SI-8; 11305000=02263000=
+ DI:= LOC FETCH; 11310000=02263000=
+ DS:= WDS 11315000=02263000=
+ END FETCH; 11320000=02263000=
+ PROCEDURE DUMPINFO; 11325000=02264000=
+ BEGIN 11330000=02264050=
+ ARRAY 11335000=02264100=
+ A[0:14]; 11340000=02264100=
+ INTEGER 11345000=02264100=
+ JEDEN, 11350000=02264100=
+ DWA; 11355000=02264100=
+ STREAM PROCEDURE OCTALWORDS(S, D, N); 11360000=02264400=
+ VALUE 11365000=02264400=
+ N; 11370000=02264400=
+ BEGIN 11375000=02264450=
+ SI:= S; 11380000=02264500=
+ DI:= D; 11385000=02264500=
+ N(2(8(DS:= 3 RESET;3 11390000=02264600=
+ (IF SB THEN DS:= 1 SET ELSE DS:= 1 RESET;SKIP 1 SB));DS:= 1 LIT 11395000=02264600=
+ 6" ");DS:= 2 LIT 6" "); 11400000=02264600=
+ END OF OCTALWORDS; 11405000=02264650=
+ STREAM PROCEDURE ALPHAWORDS(S, D, N); 11410000=02264700=
+ VALUE 11415000=02264700=
+ N; 11420000=02264700=
+ BEGIN 11425000=02264750=
+ SI:= S; 11430000=02264800=
+ DI:= D; 11435000=02264800=
+ N(2(4(DS:= 1 LIT 6" ";DS:= 1 CHR);DS:= 1 LIT 6" ");DS:= 2 LIT 6" "11440000=02264850=
+ ); 11445000=02264850=
+ END OF ALPHAWORDS; 11450000=02264900=
+ IF NOHEADING THEN 11455000=02264950=
+ DATIME; 11460000=02264950=
+ WRITE(LINE[DBL], < //6"ELBAT">); 11465000=02264950=
+ FOR JEDEN:= 0 STEP 6 UNTIL 71 DO 11470000=02265000=
+ BEGIN 11475000=02265050=
+ BLANKET(14, A); 11480000=02265100=
+ OCTALWORDS(ELBAT[JEDEN], A, 6); 11485000=02265100=
+ WRITE(LINE[DBL], 15, A[**]); 11490000=02265150=
+ END; 11495000=02265200=
+ BLANKET(14, A); 11500000=02265250=
+ OCTALWORDS(ELBAT[72], A, 4); 11505000=02265250=
+ WRITE(LINE[DBL], 15, A[**]); 11510000=02265300=
+ FOR JEDEN:= 0 STEP 1 UNTIL NEXTINFO DIV 256 DO 11515000=02265350=
+ BEGIN 11520000=02265400=
+ WRITE(LINE[DBL], < //6"INFO[", I2, 6",*]">, JEDEN); 11525000=02265450=
+ FOR DWA:= 0 STEP 6 UNTIL 251 DO 11530000=02265500=
+ BEGIN 11535000=02265550=
+ BLANKET(14, A); 11540000=02265600=
+ ALPHAWORDS(INFO[JEDEN, DWA], A, 6); 11545000=02265600=
+ WRITE(LINE, 15, A[**]); 11550000=02265650=
+ BLANKET(14, A); 11555000=02265700=
+ OCTALWORDS(INFO[JEDEN, DWA], A, 6); 11560000=02265700=
+ WRITE(LINE[DBL], 15, A[**]); 11565000=02265750=
+ END; 11570000=02265800=
+ BLANKET(14, A); 11575000=02265850=
+ ALPHAWORDS(INFO[JEDEN, 252], A, 4); 11580000=02265850=
+ WRITE(LINE, 15, A[**]); 11585000=02265900=
+ BLANKET(14, A); 11590000=02265950=
+ OCTALWORDS(INFO[JEDEN, 252], A, 4); 11595000=02265950=
+ WRITE(LINE[DBL], 15, A[**]); 11600000=02266000=
+ END; 11605000=02266050=
+ END OF DUMPINFO; 11610000=02266100=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11615000=02266100=
+ DEFINE 11620000=02277000=
+ SKAN = BEGIN 11625000=02277000=
+ COUNT:= RESULT:= ACCUM[1]:= 0; 11630000=02278000=
+ SCANNER; 11635000=02279000=
+ Q:= ACCUM[1]; 11640000=02280000=
+ END #; 11645000=02281000=
+ 11650000=02282000=
+COMMENT DOLLARCARD HANDLES THE COMPILER CONTROL CARDS. 11655000=02282000=
+ ALL COMPILER- AND USER-DEFINED OPTIONS ARE KEPT 11660000=02283000=
+ IN THE ARRAY "OPTIONS". 11665000=02284000=
+ EACH OPTION HAS A TWO-WORD ENTRY: 11670000=02285000=
+ 11675000=02286000=
+ WORD CONTAINS 11680000=02287000=
+ ---- -------- 11685000=02288000=
+ 1 ENTRY FROM ACCUM[1]: 00XZZZZ, WHERE 11690000=02289000=
+ X IS THE SIZE OF THE ID AND 11695000=02290000=
+ ZZZZZ IS THE FIRST FIVE CHARS OF THE ID. 11700000=02291000=
+ 2 PUSH-DOWN, 47-BIT STACK CONTAINING THE 11705000=02292000=
+ HISTORY OF THE SETTINGS OF THIS OPTION. 11710000=02293000=
+ 11715000=02294000=
+ IN "FINDOPTION", ALL COMPILER-DEFINED OPTIONS ARE USUALLY 11720000=02295000=
+ LOCATED BASED UPON A UNIQUE NUMBER ASSIGNED TO EACH. 11725000=02296000=
+ FOR ALL USER-DEFINED OPTIONS, A SEQUENTIAL TABLE SEARCH IS 11730000=02297000=
+ INITIATED USING "USEROPINX" AS THE INITIAL INDEX INTO THE 11735000=02298000=
+ "OPTIONS" ARRAY. IF THE NUMBER OF COMPILER-DEFINED OPTIONS 11740000=02299000=
+ IS CHANGED, THEN "USEROPINX" MUST BE ACCORDINGLY CHANGED. 11745000=02300000=
+ THE NUMBER OF USER DEFINED OPTIONS ALLOWED CAN BE 11750000=02301000=
+ CHANGED BY CHANGING THE DEFINE "OPARSIZE". 11755000=02302000=
+ THE VARIABLE "OPTIONWORD" CONTAINS THE CURRENT TRUE OR FALSE 11760000=02303000=
+ SETTING OF ALL OF THE COMPILER-DEFINED OPTIONS, ONE BIT PER 11765000=02304000=
+ OPTION. 11770000=02305000=
+ ; 11775000=02306000=
+ BOOLEAN PROCEDURE FINDOPTION(BIT); 11780000=02307000=
+ VALUE 11785000=02307000=
+ BIT; 11790000=02307000=
+ INTEGER 11795000=02307000=
+ BIT; 11800000=02307000=
+ BEGIN 11805000=02308000=
+ LABEL 11810000=02309000=
+ FOUND; 11815000=02309000=
+ REAL 11820000=02310000=
+ ID; 11825000=02310000=
+ OPINX:= 2*BIT-4; 11830000=02311000=
+ WHILE ID:= OPTIONS[OPINX:= OPINX+2] ^= 0 DO 11835000=02312000=
+ IF Q = ID THEN 11840000=02313000=
+ GO FOUND; 11845000=02313000=
+ OPTIONS[OPINX]:= Q;% NEW USER-DEFINED OPTION. 11850000=02314000=
+FOUND: 11855000=02316000=
+ IF OPINX+1 > OPARSIZE THEN 11860000=02316000=
+ FLAG(602) 11865000=02316000=
+ ELSE % TOO MANY USER OPTIONS 11870000=02316000=
+ FINDOPTION:= BOOLEAN(OPTIONS[OPINX+1]); 11875000=02317000=
+ END FINDOPTION; 11880000=02318000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11885000=02318000=
+ PROCEDURE DOLLARCARD; 11890000=02319000=
+ BEGIN 11895000=02320000=
+ STREAM PROCEDURE RESTORESEQNUM(LCR, INFO); 11900000=02320200=
+ VALUE 11905000=02320200=
+ LCR; 11910000=02320200=
+ BEGIN 11915000=02320400=
+ DI:= LCR; 11920000=02320600=
+ SI:= INFO; 11925000=02320600=
+ DS:= WDS; 11930000=02320600=
+ END; 11935000=02320800=
+ PROCEDURE SWITCHIT(XBIT); 11940000=02321000=
+ VALUE 11945000=02321000=
+ XBIT; 11950000=02321000=
+ INTEGER 11955000=02321000=
+ XBIT; 11960000=02321000=
+ BEGIN 11965000=02322000=
+ BOOLEAN 11970000=02323000=
+ B, 11975000=02323000=
+ T; 11980000=02323000=
+ INTEGER 11985000=02324000=
+ SAVEINX; 11990000=02324000=
+ LABEL 11995000=02325000=
+ XMODE0, 12000000=02325000=
+ XMODE1, 12005000=02325000=
+ XMODE2, 12010000=02325000=
+ XMODE3, 12015000=02325000=
+ XMODE4, 12020000=02325000=
+ ALONG; 12025000=02325000=
+ SWITCH 12030000=02326000=
+ SW:= XMODE0, 12035000=02326000=
+ XMODE1, 12040000=02326000=
+ XMODE2, 12045000=02326000=
+ XMODE3, 12050000=02326000=
+ XMODE4; 12055000=02326000=
+ SETTING:= FINDOPTION(XBIT); 12060000=02327000=
+ SKAN; 12065000=02327000=
+ GO SW[XMODE+1]; 12070000=02328000=
+ XMODE0: 12075000=02329000=
+ % FIRST OPTION ON CARD, BUT NOT SET, RESET, OR POP. 12080000=02329000=
+ OPTIONWORD:= BOOLEAN(0); 12085000=02330000=
+ FOR SAVEINX:= 1 STEP 2 UNTIL OPARSIZE DO 12090000=02331000=
+ OPTIONS[SAVEINX]:= 0; 12095000=02331000=
+ XMODE:= LASTUSED:= 1; % CARD INPUT ONLY. 12100000=02332000=
+ XMODE1: 12105000=02333000=
+ % NOT FIRST OPTION AND NOT BEING SET, RESET, OR POPPED. 12110000=02333000=
+ OPTIONS[OPINX+1]:= REAL(TRUE); 12115000=02334000=
+ IF XBIT < USEROPINX THEN 12120000=02335000=
+ OPTIONWORD:= OPTIONWORD & TRUE[XBIT:1]; 12125000=02335000=
+ GO ALONG; 12130000=02336000=
+ XMODE2: 12135000=02337000=
+ % RESET; 12140000=02337000=
+ OPTIONS[OPINX+1]:= REAL(FALSE & SETTING[1:2:46]); 12145000=02338000=
+ IF XBIT < USEROPINX THEN 12150000=02339000=
+ OPTIONWORD:= OPTIONWORD & FALSE[XBIT:1]; 12155000=02339000=
+ GO ALONG; 12160000=02340000=
+ XMODE3: 12165000=02341000=
+ % SET. 12170000=02341000=
+ SAVEINX:= OPINX; % REMEMBER OPTION WE ARE SETTING. 12175000=02342000=
+ B:= 12180000=02343000=
+ IF Q = 6"1=0000" THEN 12185000=02343000=
+ BOOLEXP 12190000=02343000=
+ ELSE 12195000=02343000=
+ TRUE; 12200000=02343000=
+ OPTIONS[SAVEINX+1]:= REAL(B & SETTING[1:46]); 12205000=02352000=
+ IF XBIT < USEROPINX THEN 12210000=02353000=
+ OPTIONWORD:= OPTIONWORD & B[XBIT:1]; 12215000=02353000=
+ GO ALONG; 12220000=02354000=
+ XMODE4: 12225000=02355000=
+ % POP. 12230000=02355000=
+ OPTIONS[OPINX+1]:= REAL(B:= SETTING.[1:46]); 12235000=02356000=
+ IF XBIT < USEROPINX THEN 12240000=02357000=
+ OPTIONWORD:= OPTIONWORD & B[XBIT:1]; 12245000=02357000=
+ ALONG: 12250000=02359000=
+ END SWITCHIT; 12255000=02359000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12260000=02359000=
+ LABEL 12265000=02360000=
+ EXIT, 12270000=02360000=
+ AGAIN, 12275000=02360000=
+ SKANAGAIN, 12280000=02360000=
+ LENGTH1, 12285000=02360000=
+ LENGTH2, 12290000=02360000=
+ LENGTH3, 12295000=02360000=
+ LENGTH4, 12300000=02361000=
+ LENGTH5, 12305000=02361000=
+ LENGTH6, 12310000=02361000=
+ LENGTH7, 12315000=02361000=
+ LENGTH8, 12320000=02361000=
+ LENGTH9, 12325000=02362000=
+ WHATISIT, 12330000=02363000=
+ CARDOPTION, 12335000=02363000=
+ MERGEOPTION; 12340000=02363000=
+ SWITCH 12345000=02364000=
+ OPTIONLENGTH:= LENGTH1, 12350000=02364000=
+ WHATISIT, 12355000=02364000=
+ LENGTH3, 12360000=02364000=
+ LENGTH4, 12365000=02364000=
+ LENGTH5, 12370000=02365000=
+ LENGTH6, 12375000=02365000=
+ LENGTH7, 12380000=02365000=
+ WHATISIT, 12385000=02365000=
+ LENGTH9, 12390000=02365000=
+ WHATISIT; 12395000=02365000=
+ INTEGER 12400000=02365100=
+ SRESULT, 12405000=02365100=
+ SCOUNT; 12410000=02365100=
+ ALPHA 12415000=02365200=
+ VOIDRANGE; 12420000=02365200=
+ DOLLARTOG:= TRUE; 12425000=02366000=
+ MOVE(10, ACCUM[0], DEFINEARRAY[0]); % SAVE INFORMATION FOR 12430000=02366100=
+ SCOUNT:= COUNT; 12435000=02366200=
+ SRESULT:= RESULT; % "TABLE" TO RESUME SCAN. 12440000=02366200=
+ XMODE:= 0; 12445000=02367000=
+ PUTSEQNO(INFO[LASTSEQROW, LASTSEQUENCE], LCR); 12450000=02368000=
+ TURNONSTOPLIGHT(6"%", LCR); 12455000=02369000=
+SKANAGAIN: 12460000=02371000=
+ SKAN; 12465000=02371000=
+AGAIN: 12470000=02373000=
+ GO OPTIONLENGTH[MIN(COUNT, 10)]; 12475000=02373000=
+LENGTH1: 12480000=02375000=
+ IF Q = 6"1%0000" THEN 12485000=02375000=
+ GO EXIT; 12490000=02375000=
+ IF Q = 6"1$0000" THEN 12495000=02376000=
+ BEGIN 12500000=02377000=
+ SWITCHIT(PRINTDOLLARBIT); 12505000=02377000=
+ GO AGAIN 12510000=02377000=
+ END; 12515000=02377000=
+ IF Q = 6"1,0000" THEN 12520000=02378000=
+ GO SKANAGAIN; 12525000=02378000=
+ GO WHATISIT; 12530000=02379000=
+LENGTH2: 12535000=02380000=
+ % NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 12540000=02380000=
+LENGTH3: 12545000=02382000=
+ IF Q = 6"3SET00" THEN 12550000=02382000=
+ BEGIN 12555000=02383000=
+ XMODE:= 3; 12560000=02383000=
+ GO SKANAGAIN 12565000=02383000=
+ END; 12570000=02383000=
+ IF Q = 6"3POP00" THEN 12575000=02384000=
+ BEGIN 12580000=02385000=
+ XMODE:= 4; 12585000=02385000=
+ GO SKANAGAIN 12590000=02385000=
+ END; 12595000=02385000=
+ IF Q = 6"3NEW00" THEN 12600000=02386000=
+ BEGIN 12605000=02387000=
+ SWITCHIT(NEWBIT); 12610000=02388000=
+ IF Q = 6"4TAPE0" THEN 12615000=02389000=
+ GO SKANAGAIN; 12620000=02389000=
+ GO AGAIN; 12625000=02390000=
+ END; 12630000=02391000=
+ IF Q = 6"3SEQ00" THEN 12635000=02392000=
+ BEGIN 12640000=02393000=
+ SWITCHIT(SEQBIT); 12645000=02393000=
+ GO AGAIN 12650000=02393000=
+ END; 12655000=02393000=
+ IF Q = 6"3PRT00" THEN 12660000=02394000=
+ BEGIN 12665000=02395000=
+ SWITCHIT(PRTBIT); 12670000=02395000=
+ GO AGAIN 12675000=02395000=
+ END; 12680000=02395000=
+ IF Q = 6"3MCP00" THEN 12685000=02396000=
+ BEGIN 12690000=02397000=
+ SWITCHIT(MCPBIT); 12695000=02397000=
+ GO AGAIN 12700000=02397000=
+ END; 12705000=02397000=
+ GO WHATISIT; 12710000=02398000=
+LENGTH4: 12715000=02400000=
+ IF Q = 6"4LIST0" THEN 12720000=02400000=
+ BEGIN 12725000=02401000=
+ SWITCHIT(LISTBIT); 12730000=02402000=
+ GO AGAIN; 12735000=02404000=
+ END; 12740000=02405000=
+ IF Q = 6"4VOID0" THEN 12745000=02406000=
+ BEGIN 12750000=02407000=
+ IF XMODE = 0 THEN 12755000=02408000=
+ BEGIN 12760000=02409000=
+ GETVOID(VOIDRANGE, NCR, LCR, INFO[LASTSEQROW, LASTSEQUENCE])12765000=02410000=
+ ; 12770000=02410000=
+ IF VOIDCR = 0 THEN 12775000=02410500=
+ VOIDCR:= MKABS(VOIDPLACE) 12780000=02410500=
+ ELSE 12785000=02410500=
+ IF COMPARE(MKABS(VOIDRANGE), VOIDCR) ^= 1 THEN 12790000=02411000=
+ GO TO EXIT; 12795000=02411000=
+ MOVE(1, VOIDRANGE, VOIDPLACE); 12800000=02412000=
+ GO EXIT; 12805000=02413000=
+ END; 12810000=02414000=
+ SWITCHIT(VOIDBIT); 12815000=02415000=
+ GO AGAIN; 12820000=02418000=
+ END; 12825000=02419000=
+ IF Q = 6"4OMIT0" THEN 12830000=02420000=
+ BEGIN 12835000=02421000=
+ IF NOT DOLLAR2TOG THEN 12840000=02421000=
+ BEGIN 12845000=02421000=
+ PRINTCARD; 12850000=02421000=
+ FLAG(605); 12855000=02421000=
+ END; 12860000=02421000=
+ SWITCHIT(OMITBIT); 12865000=02421100=
+ GO AGAIN 12870000=02421100=
+ END; 12875000=02421100=
+ IF Q = 6"4CARD0" THEN 12880000=02422000=
+ BEGIN 12885000=02423000=
+ Q:= 6"4TAPE0"; % FAKE OUT SWITCHIT. 12890000=02424000=
+ SWITCHIT(MERGEBIT); 12895000=02425000=
+ IF XMODE ^= 2 THEN 12900000=02425500=
+ MERGETOG:= NOT MERGETOG; 12905000=02425500=
+ OPTIONS[2*MERGEBIT-1]:= % CARD IS 12910000=02426000=
+REAL(SETTING & (MERGETOG)[47:1]); % INVERSE OF MERGE. 12915000=02427000=
+ IF MERGETOG THEN 12920000=02428000=
+ GO MERGEOPTION; 12925000=02428000=
+ CARDOPTION: 12930000=02430000=
+ LASTUSED:= 1; 12935000=02430000=
+ GO AGAIN; 12940000=02431000=
+ END; 12945000=02432000=
+ IF Q = 6"4TAPE0" THEN 12950000=02433000=
+ BEGIN 12955000=02434000=
+ SWITCHIT(MERGEBIT); 12960000=02435000=
+ IF NOT MERGETOG THEN 12965000=02436000=
+ GO CARDOPTION; 12970000=02436000=
+ MERGEOPTION: 12975000=02438000=
+ LASTUSED:= 2; % NEXT CARD IS READ FROM READER. 12980000=02438000=
+ IF MAXTLCR = 0 THEN 12985000=02439000=
+ BEGIN 12990000=02440000=
+ INTEGER 12995000=02441000=
+ STREAM PROCEDURE FEJ(F, T); 13000000=02441000=
+ VALUE 13005000=02441000=
+ T; 13010000=02441000=
+ BEGIN 13015000=02442000=
+ SI:= F; 13020000=02443000=
+ DI:= LOC T; 13025000=02443000=
+ DS:= WDS; 13030000=02443000=
+ SI:= T; 13035000=02444000=
+ SI:= SI-16; 13040000=02444000=
+ DI:= LOC FEJ; 13045000=02444000=
+ DS:= WDS; 13050000=02444000=
+ END FEJ; 13055000=02445000=
+ STREAM PROCEDURE FIX(F, T); 13060000=02446000=
+ VALUE 13065000=02446000=
+ T; 13070000=02446000=
+ BEGIN 13075000=02447000=
+ SI:= F; 13080000=02448000=
+ SI:= SI-24; 13085000=02448000=
+ DI:= LOC T; 13090000=02448000=
+ DS:= WDS; 13095000=02448000=
+ DI:= T; 13100000=02449000=
+ DI:= DI+47; 13105000=02449000=
+ SKIP 4 DB; 13110000=02449000=
+ DS:= 2 RESET; 13115000=02449000=
+ 2(DI:= DI+48); 13120000=02450000=
+ DS:= 8 LIT 6"00#01+0#"; 13125000=02450000=
+ END FIX; 13130000=02451000=
+ IF GT1:= FEJ(TAPE, 0) = 10 THEN 13135000=02452000=
+ BEGIN 13140000=02453000=
+ REWIND(TAPE); 13145000=02454000=
+ FIX(TAPE, 0); 13150000=02454000=
+ END; 13155000=02455000=
+ MAXTLCR:= GT1+TLCR:= 9+MKABS(TBUFF[0]); 13160000=02456000=
+ READ(TAPE, 10, TBUFF[**]); % INITIALIZE TAPE INPUT. 13165000=02457000=
+ LASTUSED:= 2; 13170000=02458000=
+ END; 13175000=02459000=
+ GO AGAIN; 13180000=02460000=
+ END; 13185000=02461000=
+ IF Q = 6"4PAGE0" THEN 13190000=02462000=
+ BEGIN 13195000=02463000=
+ IF LISTER THEN 13200000=02464000=
+ WRITE(LINE[PAGE]); 13205000=02464000=
+ GO SKANAGAIN; 13210000=02465000=
+ END; 13215000=02466000=
+ IF Q = 6"4INFO0" THEN 13220000=02467000=
+ BEGIN 13225000=02468000=
+ DUMPINFO; 13230000=02468000=
+ GO SKANAGAIN 13235000=02468000=
+ END; 13240000=02468000=
+ IF Q = 6"4SEGS0" THEN 13245000=02469000=
+ BEGIN 13250000=02470000=
+ SWITCHIT(SEGSBIT); 13255000=02470000=
+ GO AGAIN 13260000=02470000=
+ END; 13265000=02470000=
+ IF Q = 6"4NEST0" THEN 13270000=02471000=
+ BEGIN 13275000=02472000=
+ SWITCHIT(NESTBIT); 13280000=02472000=
+ GO AGAIN 13285000=02472000=
+ END; 13290000=02472000=
+ IF Q = 6"4DECK0" THEN 13295000=02473000=
+ BEGIN 13300000=02474000=
+ SWITCHIT(DECKBIT); 13305000=02474000=
+ GO AGAIN 13310000=02474000=
+ END; 13315000=02474000=
+ GO WHATISIT; 13320000=02475000=
+LENGTH5: 13325000=02477000=
+ IF Q = 6"5RESET" THEN 13330000=02477000=
+ BEGIN 13335000=02478000=
+ XMODE:= 2; 13340000=02478000=
+ GO SKANAGAIN 13345000=02478000=
+ END; 13350000=02478000=
+ IF Q = 6"5LISTP" THEN 13355000=02479000=
+ BEGIN 13360000=02480000=
+ SWITCHIT(LISTPBIT); 13365000=02480000=
+ GO AGAIN; 13370000=02480000=
+ END; 13375000=02480000=
+ IF Q = 6"5VOIDT" THEN 13380000=02481000=
+ BEGIN 13385000=02482000=
+ IF XMODE = 0 THEN 13390000=02483000=
+ BEGIN 13395000=02484000=
+ GETVOID(VOIDRANGE, NCR, LCR, INFO(LASTSEQROW, LASTSEQUENCE])13400000=02489000=
+ ;IF VOIDTCR = 0 THEN VOIDTCR:= MKABS(VOIDTPLACE) ELSE IF 13405000=02489000=
+ COMPARE(MKABS(VOIDRANGE), VOIDTCR) ^= 1 THEN GO TO EXIT; 13410000=02489000=
+ MOVE(1, VOIDRANGE, VOIDTPLACE);GO EXIT; 13415000=02489000=
+ END; 13420000=02489000=
+ SWITCHIT(VOIDTBIT); 13425000=02490000=
+ GO AGAIN; 13430000=02493000=
+ END; 13435000=02494000=
+ IF Q = 6"5CHECK" THEN 13440000=02495000=
+ BEGIN 13445000=02496000=
+ SWITCHIT(CHECKBIT); 13450000=02496000=
+ GO AGAIN 13455000=02496000=
+ END; 13460000=02496000=
+ IF Q = 6"5LIMIT" THEN 13465000=02497000=
+ BEGIN 13470000=02498000=
+ SKAN; 13475000=02499000=
+ IF RESULT ^= 3 THEN % SHOULD BE NUMBER. 13480000=02500000=
+ BEGIN 13485000=02501000=
+ FLAG(600); 13490000=02501000=
+ GO AGAIN 13495000=02501000=
+ END; 13500000=02501000=
+ ERRMAX:= CONV(ACCUM[1], 0, ACCUM[1].[12:6]); 13505000=02502000=
+ GO SKANAGAIN; 13510000=02503000=
+ END; 13515000=02504000=
+ IF Q = 6"5PUNCH" THEN 13520000=02505000=
+ BEGIN 13525000=02506000=
+ SWITCHIT(PUNCHBIT); 13530000=02506000=
+ GO AGAIN; 13535000=02506000=
+ END; 13540000=02506000=
+ IF Q = 6"5PURGE" THEN 13545000=02507000=
+ BEGIN 13550000=02508000=
+ SWITCHIT(PURGEBIT); 13555000=02508000=
+ GO AGAIN; 13560000=02508000=
+ END; 13565000=02508000=
+ IF Q = 6"5LISTA" THEN 13570000=02509000=
+ BEGIN 13575000=02510000=
+ SWITCHIT(LISTABIT); 13580000=02511000=
+ GO AGAIN; 13585000=02513000=
+ END; 13590000=02514000=
+ IF Q = 6"5STUFF" THEN 13595000=02515000=
+ BEGIN 13600000=02516000=
+ SWITCHIT(STUFFBIT); 13605000=02516000=
+ GO AGAIN; 13610000=02516000=
+ END; 13615000=02516000=
+ GO WHATISIT; 13620000=02517000=
+LENGTH6: 13625000=02519000=
+ IF Q = 6"6SEQER" THEN 13630000=02519000=
+ BEGIN 13635000=02520000=
+ SWITCHIT(SEQERRBIT); 13640000=02520000=
+ GO AGAIN 13645000=02520000=
+ END; 13650000=02520000=
+ IF Q = 6"6SINGL" THEN 13655000=02521000=
+ BEGIN 13660000=02522000=
+ SWITCHIT(SINGLBIT); 13665000=02522000=
+ GO AGAIN 13670000=02522000=
+ END; 13675000=02522000=
+ IF Q = 6"6SEQXE" THEN 13680000=02523000=
+ BEGIN 13685000=02524000=
+ SEQXEQTOG:= XMODE ^= 2 AND XMODE ^= 4 OR SEQXEQTOG; %NEVER RESET. 13690000=02525000=
+ IF BUILDLINE.[45:1] THEN 13695000=02526000=
+ BUILDLINE:= TRUE; 13700000=02526000=
+ GO SKANAGAIN; 13705000=02527000=
+ END; 13710000=02528000=
+ IF Q = 6"6DEBUG" THEN 13715000=02529000=
+ BEGIN 13720000=02530000=
+ SWITCHIT(DEBUGBIT); 13725000=02531000=
+ IF DEBUGTOG THEN 13730000=02533000=
+ IF WOP[0] = 0 THEN 13735000=02534000=
+ BEGIN 13740000=02535000=
+ FILL WOP[**] WITH 13745000=02536100=
+ "LITC"," ", 13750000=02537000=
+ "OPDC","DESC", 13755000=02538000=
+ 11, "NOP ", 12, "PRT ", 13, "DEL ", 16, "ADD ", 18, "PRL ", 19, "LNG ",13760000=02539000=
+ 21, "GEQ ", 22, "BBC ", 24, "INX ", 35, "LOR ", 37, "GTR ", 38, "BFC ",13765000=02540000=
+ 39, "RTN ", 40, "COC ", 48, "SUB ", 64, "MUL ", 67, "LND ", 68, "STD ",13770000=02541000=
+ 69, "NEQ ", 71, "XIT ", 72, "MKS ",128, "DIV ",130, "COM ",131, "LQV ",13775000=02542000=
+132, "SND ",133, "XCH ",134, "CHS ",167, "RTS ",168, "CDC ",260, "LOD ",13780000=02543000=
+261, "DUP ",278, "LBC ",294,"LFC ",322,"ZP1 ",384, "IDV ",532, "ISD", 13785000=02544000=
+533, "LEQ ",534, "BBW ",548, "ISN ",549, "LSS ",550, "BFW ",581, "EQL ",13790000=02545000=
+582, "SSP ",790, "LBU ",806, "LFU ",896, "RDV ", 13795000=02546000=
+1003,"SCI ",1004,"SAN ",1019,"SCS ", 13800000=02547000=
+ 1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 13805000=02548000=
+ 1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1023; 13810000=02549000=
+FILL COP[**] WITH % CHARACTER MODE MNEMONICS 13815000=02550000=
+ 0," ",0,0, 13820000=02551000=
+ 0,"EXC ", 2,"BSD ", 3,"BSS ", 4,"RDA ", 5,"TRW ",6,"SED ", 7,"TDA ", 13825000=02552000=
+ 12,"SDA ",13,"SSA ",14,"SFD ",15,"SRD ",18,"SES ",20,"TEQ ",21, "TNE ",13830000=02553000=
+ 22,"TEG ",23,"TGR ",24,"SRS ",25,"SFS ",28,"TEL ",29,"TLS ",30,"TAN ", 13835000=02554000=
+ 31,"BIT ",32,"INC ",33,"STC ",34,"SEC ",35,"CRF ",36,"JNC ",37,"JFC ", 13840000=02555000=
+ 38,"JNS ",39,"JFW ",40,"RCA ",41,"ENS ",42,"BNS ",43,"RSA ",44,"SCA ", 13845000=02556000=
+ 45,"JRC ",46,"TSA ",47,"JRV ",48,"CEQ ",49,"CNE ",50,"CEG ",51,"CGR ", 13850000=02557000=
+52,"BIT ",53,"BIR ",54,"OCV ",55,"ICV ",56,"CEL ",57,"CLS ",58,"FSU ", 13855000=02558000=
+ 59,"FAD ",60,"TRP ",61,"TRN ",62,"TRZ ",63,"TRS ",64,0,64,0,64,0,64,0, 13860000=02559000=
+ 64,0,64,0,64,0,64,0; 13865000=02560000=
+ END; 13870000=02563000=
+ GO AGAIN; 13875000=02564000=
+ END; 13880000=02565000=
+ IF Q = 6"6FORMA" THEN 13885000=02566000=
+ BEGIN 13890000=02567000=
+ SWITCHIT(FORMATBIT); 13895000=02567000=
+ GO AGAIN; 13900000=02567000=
+ END; 13905000=02567000=
+ GO WHATISIT; 13910000=02568000=
+LENGTH7: 13915000=02570000=
+% IF Q = "7INCLU" THEN 13920000=02570000=
+% BEGIN DOLLARCARD:=STARTINCLUDING; GO EXIT; END; 13925000=02571000=
+% IF Q = "7INCLN" THEN 13930000=02572000=
+% BEGIN SWITCHIT(NEWINCLBIT); GO AGAIN; END; 13935000=02573000=
+LENGTH8: 13940000=02574000=
+ % NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 13945000=02574000=
+LENGTH9: 13950000=02576000=
+ IF Q = 6"9INTRI" THEN 13955000=02576000=
+ BEGIN 13960000=02576500=
+ INTOG:= XMODE ^= 2 AND XMODE ^= 4 OR INTOG; % NEVER RESET. 13965000=02577000=
+ GO SKANAGAIN; 13970000=02577250=
+ END; 13975000=02577500=
+WHATISIT: 13980000=02579000=
+ IF RESULT = 3 THEN 13985000=02579000=
+ BEGIN 13990000=02580000=
+ BASENUM:= CONV(ACCUM[1], 0, ACCUM[1].[12:6]); 13995000=02581000=
+ TOTALNO:= -10; 14000000=02582000=
+ NEWBASE:= TRUE; 14005000=02583000=
+ GO SKANAGAIN; 14010000=02584000=
+ END; 14015000=02585000=
+ IF RESULT = 2 THEN 14020000=02586000=
+ BEGIN 14025000=02587000=
+ IF Q = 6"1+0000" THEN 14030000=02588000=
+ BEGIN 14035000=02589000=
+ SKAN; 14040000=02590000=
+ IF RESULT = 3 THEN 14045000=02591000=
+ ADDVALUE:= CONV(ACCUM[1], 0, ACCUM[1].[12:6]) 14050000=02593000=
+ ELSE 14055000=02593000=
+ FLAG(600); % NUMBER EXPECTED. 14060000=02593000=
+ END; 14065000=02594000=
+ GO SKANAGAIN; 14070000=02595000=
+ END; 14075000=02596000=
+ 14080000=02597000=
+COMMENT DID NOT RECOGNIZE OPTION; 14085000=02597000=
+ IF RESULT ^= 1 THEN % NOT AN IDENTIFIER. 14090000=02598000=
+ BEGIN 14095000=02599000=
+ FLAG(601); 14100000=02599000=
+ GO SKANAGAIN 14105000=02599000=
+ END; 14110000=02599000=
+ SWITCHIT(USEROPINX); % USEROPINX MEANS A USER-DEFINED OPTION. 14115000=02600000=
+ GO AGAIN; 14120000=02601000=
+EXIT: 14125000=02602500=
+ LISTER:= DEBUGTOG OR LISTOG OR LISTATOG; 14130000=02602500=
+ MOVE(10, DEFINEARRAY[0], ACCUM[0]); % RESTORE INFORMATION FOR 14135000=02602600=
+ COUNT:= SCOUNT; 14140000=02602700=
+ RESULT:= SRESULT; % "TABLE" TO RESUME SCAN. 14145000=02602700=
+ RESTORESEQNUM(LCR, INFO[LASTSEQROW, LASTSEQUENCE]); 14150000=02602800=
+ % FOR VOID TESTS 14155000=02602800=
+ DOLLARTOG:= FALSE; 14160000=02603000=
+ END DOLLARCARD; 14165000=02604000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14170000=02604000=
+ 14175000=02605000=
+COMMENT TABLE IS THE ROUTINE THAT MOST CODE IN THE COMPILER 14180000=02605000=
+ USES WHEN IT IS DESIRED TO SCAN ANOTHER LOGICAL QUANTITY. 14185000=02606000=
+ THE RESULT RETURNED IS THE CLASS OF THE ITEM DESIRED. 14190000=02607000=
+ TABLE MAINTAINS THE VARIABLES I AND NXTELBT AND THE ARRAY 14195000=02608000=
+ ELBAT. ELBAT AND I ARE PRINCIPAL VARIABLES USED FOR 14200000=02609000=
+ COMUNICATION BETWEEN TABLE AND THE OUTSIDE WORLD. NXTELBT 14205000=02610000=
+ IS ALMOST EXCLUSIVELY USED BY TABLE, ALTHOUGH AN OCCASION- 14210000=02611000=
+ AL OTHER USE IS MADE IN ORDER TO FORGET THAT SOMETHING WAS 14215000=02612000=
+ SCANNED. (SEE, FOR EXAMPLE, COMPOUNDTAIL). FOR FURTHER 14220000=02613000=
+ GENERAL DISCUSSION SEE THE DECLARATION OF THESE VARIABLES. 14225000=02614000=
+ THE PARAMETER P IS THE ACTUAL INDEX OF THE QUANTITY 14230000=02615000=
+ DESIRED (USUALLY I-1,I, OR I+1). 14235000=02616000=
+ THE GENERAL PLAN OF TABLE IS THIS: 14240000=02617000=
+ I) IF P < NXTELBAT GO ON TO III). 14245000=02618000=
+ II) PROCESS ONE QUANTITY. 14250000=02619000=
+ A) SCAN. 14255000=02620000=
+ B) TEST FOR IDENTIFIER, NUMBER, OR SPECIAL CHARACTER. 14260000=02621000=
+ 1) IDENTIFIER - LOOKUP IN DIRECTORY AND PROCESS 14265000=02622000=
+ IN SPECIAL MANNER IF COMMENT OR DEFINED ID. 14270000=02623000=
+ 2) NUMBER - PROCESS INTEGER PART, FRACTIONAL PART, 14275000=02624000=
+ AND EXPONENT PART. 14280000=02625000=
+ 3) TEST IF SPECIAL CHARACTER REQUIRES SPECIAL 14285000=02626000=
+ PROCESSING - OTHERWISE GET ELBAT WORD FROM 14290000=02627000=
+ SPECIAL. 14295000=02628000=
+ C) LOAD ELBAT AND INCREMENT NXTELBT. 14300000=02629000=
+ D) IF ELBAT IS FULL ADJUST ELBAT, NXTELBT, I, AND P. 14305000=02630000=
+ E) GO BACK TO I). 14310000=02631000=
+ III) RETURN WITH CLASS OF ELBAT[P]. 14315000=02632000=
+ FURTHER DETAILS ARE GIVEN IN BODY OF TABLE. 14320000=02633000=
+ ; 14325000=02634000=
+ INTEGER PROCEDURE TABLE(P); 14330000=02635000=
+ VALUE 14335000=02635000=
+ P; 14340000=02635000=
+ INTEGER 14345000=02635000=
+ P; 14350000=02635000=
+ BEGIN 14355000=02636000=
+ LABEL 14360000=02637000=
+ PERCENT, 14365000=02637000=
+ SPECIALCHAR, 14370000=02637000=
+ COMPLETE, 14375000=02637000=
+ COLON, 14380000=02637000=
+ DOT, 14385000=02637000=
+ ATSIGN, 14390000=02637000=
+ QUOTE, 14395000=02638000=
+ STRNGXT, 14400000=02638000=
+ MOVEIT, 14405000=02638000=
+ ARGH, 14410000=02638000=
+ FINISHNUMBER, 14415000=02639000=
+ SCANAGAIN, 14420000=02639000=
+ FPART, 14425000=02639000=
+ EPART, 14430000=02639000=
+ IPART, 14435000=02639000=
+ IDENT, 14440000=02639000=
+ ROSE, 14445000=02639000=
+ COMPOST, 14450000=02639000=
+ DOLLAR, 14455000=02639000=
+ RTPAREN, 14460000=02640000=
+ CROSSHATCH, 14465000=02640000=
+ NUMBEREND; 14470000=02640000=
+ SWITCH 14475000=02641000=
+ SPECIALSWITCH:= PERCENT, 14480000=02641000=
+ DOLLAR, 14485000=02641000=
+ DOT, 14490000=02641000=
+ ATSIGN, 14495000=02641000=
+ COLON, 14500000=02641000=
+ QUOTE, 14505000=02642000=
+ RTPAREN, 14510000=02642000=
+ CROSSHATCH; 14515000=02642000=
+ SWITCH 14520000=02643000=
+ RESULTSWITCH:= IDENT, 14525000=02643000=
+ SPECIALCHAR, 14530000=02643000=
+ IPART; 14535000=02643000=
+ WHILE P >= NXTELBT DO 14540000=02645000=
+ BEGIN 14545000=02645000=
+ SCANAGAIN: 14550000=02647000=
+ COUNT:= RESULT:= ACCUM[1]:= 0; 14555000=02647000=
+ SCANNER; 14560000=02647000=
+ GO RESULTSWITCH[RESULT]; 14565000=02648000=
+ ARGH: 14570000=02650000=
+ Q:= ACCUM[1]; 14575000=02650000=
+ FLAG(141); 14580000=02650000=
+ GO SCANAGAIN; 14585000=02650000=
+ SPECIALCHAR: 14590000=02652000=
+ GT1:= ACCUM[1].[18:6]-2; 14595000=02652000=
+ ENDTOG:= GT1 = 57 AND ENDTOG; 14600000=02653000=
+ 14605000=02654000=
+COMMENT OBTAIN ACTUAL CHARACTER FROM ACCUM; 14610000=02654000=
+ T:= SPECIAL[GT1 & GT1[42:41:3]]; 14615000=02655000=
+ 14620000=02656000=
+COMMENT NOTICE COMPRESSION TECHNIQUE USED TO SHORTEN TABLE OF 14625000=02656000=
+ ELBAT WORDS FOR SPECIAL CHARACTERS; 14630000=02657000=
+ IF GT1:= T.INCR = 0 THEN 14635000=02658000=
+ GO COMPLETE; 14640000=02658000=
+ GO SPECIALSWITCH[GT1]; 14645000=02659000=
+ 14650000=02660000=
+COMMENT INCR FIELD OF SPECIAL CHARACTER IS NON-ZERO FOR SPECIAL 14655000=02660000=
+ CHARACTERS REQUIRING SPECIAL HANDLING. INCR IS SWITCHED 14660000=02661000=
+ ON TO OBTAIN DISCRIMINATION; 14665000=02662000=
+ COLON: 14670000=02663000=
+ RESULT:= 7; 14675000=02663000=
+ SCANNER; 14680000=02663000=
+ COMMENT ELIMINATE BLANKS - CHECKING 14685000=02663000=
+ FOR := IN PLACE OF ~ ; 14690000=02664000=
+ IF EXAMIN(NCR) = 6"=" THEN 14695000=02665000=
+ BEGIN 14700000=02666000=
+ RESULT:= 0; 14705000=02666000=
+ SCANNER; 14710000=02666000=
+ T:= SPECIAL[13] 14715000=02666000=
+ END; 14720000=02666000=
+ RESULT:= 2; 14725000=02667000=
+ GO COMPLETE; 14730000=02667000=
+ DOT: 14735000=02680000=
+ IF EXAMIN(NCR) > 9 OR ENDTOG THEN 14740000=02680000=
+ GO COMPLETE; 14745000=02680000=
+ NHI:= NLO:= 0; 14750000=02681000=
+ C:= 0; 14755000=02682000=
+ GO FPART; 14760000=02682000=
+ ATSIGN: 14765000=02684000=
+ RESULT:= 0; 14770000=02684000=
+ SCANNER; % SCAN PAST "@". 14775000=02684000=
+ IF COUNT > 17 THEN 14780000=02685000=
+ GO ARGH; % 16 CHARS, + "@". 14785000=02685000=
+ IF OCTIZE(ACCUM[1], C, 17-COUNT, COUNT-1) THEN 14790000=02686000=
+ BEGIN 14795000=02686500=
+ Q:= ACCUM[1]; 14800000=02686500=
+ FLAG(521); 14805000=02686500=
+ GO SCANAGAIN 14810000=02686500=
+ END; 14815000=02686500=
+ GO NUMBEREND; 14820000=02687000=
+ 14825000=02689000=
+COMMENT DOT AND ATSIGN ENTER NUMBER CONVERSION AT CORRECT SPOT; 14830000=02689000=
+ QUOTE: 14835000=02691000=
+ COUNT:= 0; 14840000=02691000=
+ T:= 14845000=02692000=
+ IF STREAMTOG THEN 14850000=02692000=
+ 63 14855000=02692500=
+ ELSE 14860000=02692500=
+ IF REAL(STREAMTOG) > 1 THEN 14865000=02692500=
+ 8 14870000=02692500=
+ ELSE 14875000=02692500=
+ 7; 14880000=02692500=
+ DO BEGIN 14885000=02693000=
+ RESULT:= 5; 14890000=02694000=
+ SCANNER; 14895000=02694000=
+ IF COUNT > T THEN 14900000=02695000=
+ BEGIN 14905000=02696000=
+ Q:= ACCUM[1]; 14910000=02696000=
+ FLAG(520); 14915000=02696000=
+ GO SCANAGAIN 14920000=02696000=
+ END; 14925000=02696000=
+ END 14930000=02697000=
+ UNTIL EXAMIN(NCR) = 6"""; 14935000=02697000=
+ Q:= ACCUM[1]; 14940000=02698000=
+ RESULT:= 5; 14945000=02698000=
+ SCANNER; 14950000=02698000=
+ COUNT:= COUNT-1; 14955000=02698000=
+ IF COUNT < 0 THEN 14960000=02699000=
+ COUNT:= COUNT+64; 14965000=02699000=
+ ACCUM[1]:= Q; 14970000=02700000=
+ RESULT:= 4; 14975000=02700000=
+ STRNGXT: 14980000=02701000=
+ T:= C:= 0; 14985000=02701000=
+ IF COUNT < 8 THEN 14990000=02703000=
+ MOVEIT: 14995000=02705000=
+ MOVECHARACTERS(COUNT, ACCUM[1], 3, C, 8-COUNT); 15000000=02705000=
+ T.CLASS:= STRNGCON; 15005000=02705100=
+ GO COMPLETE; 15010000=02705200=
+ 15015000=02707000=
+COMMENT CROSSHATCH HANDLES TWO SITUATIONS: 15020000=02707000=
+ THE CROSSHATCH AT END OF DEFINE DECLARATIONS AND 15025000=02708000=
+ THE CROSSHATCH AT END OF ALPHA REPRESENTING DEFINED IDS. 15030000=02709000=
+ THE TWO CASES ARE PROCESSED DIFFERENTLY. THE FIRST CASE 15035000=02710000=
+ MERELY PLACES THE CROSSHATCH IN ELBAT. THE SECOND CASE 15040000=02711000=
+ CAUSES AN EXIT FROM SCANNING THE ALPHA FOR THE DEFINED ID. 15045000=02712000=
+ FOR A FULL DISCUSSION SEE DEFINEGEN; 15050000=02713000=
+ CROSSHATCH: 15055000=02715000=
+ IF DEFINECTR ^= 0 THEN 15060000=02715000=
+ GO COMPLETE; 15065000=02715000=
+ PUTSEQNO(GT1, LCR); 15070000=02716000=
+ TURNONSTOPLIGHT(0, LCR); 15075000=02717000=
+ IF DEFINEINDEX = 0 THEN 15080000=02718000=
+ GO ARGH; 15085000=02718000=
+ LCR:= (GT1:= DEFINEARRAY[DEFINEINDEX-1]) DIV 262144; 15090000=02719000=
+ NCR:= GT1 MOD 262144; 15095000=02720000=
+ GT2:= 0 & (T:= DEFINEARRAY[DEFINEINDEX:= DEFINEINDEX-3])[33:18:15]15100000=02721000=
+ ; 15105000=02721000=
+ LASTUSED:= T.[33:15]; 15110000=02722000=
+ FOR GT1:= 1 STEP 1 UNTIL GT2 DO 15115000=02723000=
+ BEGIN 15120000=02723500=
+ STACKHEAD[(T:= TAKE(LASTINFO+1)).[12:36] MOD 125]:= 15125000=02725000=
+ TAKE(LASTINFO).LINK; 15130000=02725000=
+ LASTINFO:= (NEXTINFO:= LASTINFO)-T.PURPT; 15135000=02726000=
+ END; 15140000=02727000=
+ GO SCANAGAIN; 15145000=02728000=
+ DOLLAR: 15150000=02729000=
+ COMMENT THIS CODE HANDLES CONTROL CARDS; 15155000=02729000=
+ 15160000=02730000=
+ DOLLARCARD; 15165000=02730000=
+ PERCENT: 15170000=02731000=
+ IF NCR ^= FCR THEN 15175000=02731000=
+ READACARD; 15180000=02731000=
+ GO SCANAGAIN; 15185000=02737000=
+ 15190000=02738000=
+COMMENT MOST PERCENT SIGNS ACTING AS END OF CARD SENTINELS GET TO 15195000=02738000=
+ PERCENT. PERCENT READS THE NEXT CARD AND STARTS OVER. A 15200000=02739000=
+ SIDE EFFECT IS THAT ALL CHARACTERS ON A CARD ARE IGNORED 15205000=02740000=
+ AFTER A FREE PERCENT SIGN (ONE NOT IMBEDDED IN A STRING OR 15210000=02741000=
+ COMMENT); 15215000=02742000=
+ 15220000=02743000=
+COMMENT MIGHT BE FUNNY COMMA - HANDLE HERE; 15225000=02743000=
+ RTPAREN: 15230000=02744000=
+ RESULT:= 7; 15235000=02744000=
+ SCANNER; 15240000=02744000=
+ IF EXAMIN(NCR) = 6""" THEN 15245000=02745000=
+ BEGIN 15250000=02746000=
+ RESULT:= 0; 15255000=02747000=
+ SCANNER; 15260000=02747000=
+ DO BEGIN 15265000=02748000=
+ RESULT:= 5; 15270000=02749000=
+ SCANNER 15275000=02750000=
+ END 15280000=02750000=
+ UNTIL EXAMIN(NCR) = 6"""; 15285000=02750000=
+ RESULT:= 0; 15290000=02751000=
+ SCANNER; 15295000=02751000=
+ RESULT:= 7; 15300000=02752000=
+ SCANNER; 15305000=02752000=
+ IF EXAMIN(NCR) ^= 6"(" THEN 15310000=02753000=
+ GO ARGH; 15315000=02753000=
+ RESULT:= 0; 15320000=02754000=
+ SCANNER; 15325000=02754000=
+ Q:= ACCUM[1]; 15330000=02754000=
+ T:= SPECIAL[24] 15335000=02756000=
+ END; 15340000=02756000=
+ RESULT:= 2; 15345000=02757000=
+ GO COMPLETE; 15350000=02757000=
+ IPART: 15355000=02758000=
+ TCOUNT:= 0; 15360000=02758000=
+ C:= CONVERT; 15365000=02758000=
+% RESULT:=7; SCANNER; % DEBLANK. 15370000=02759000=
+% IF DEFINECTR=0 THEN 15375000=02760000=
+% IF (C=3 OR C=4) AND EXAMIN(NCR)=""" THEN %OCTAL OR HEX STRING.15380000=02761000=
+% BEGIN INTEGER SIZ; 15385000=02762000=
+% RESULT:=5; SCANNER; % SKIP QUOTE. 15390000=02763000=
+% COUNT:=0; 15395000=02764000=
+% DO BEGIN 15400000=02765000=
+% RESULT:=5; SCANNER; 15405000=02766000=
+% IF COUNT > SIZ:=48 DIV C THEN % > 1 WORD LONG. 15410000=02767000=
+% BEGIN ERR(520); GO SCANAGAIN END; 15415000=02768000=
+% END UNTIL EXAMIN(NCR)="""; 15420000=02769000=
+% Q:=ACCUM[1]; RESULT:=5; SCANNER; COUNT:=COUNT-1; 15425000=02770000=
+% IF C=3 THEN % OCTAL STRING. 15430000=02771000=
+% IF OCTIZE(ACCUM[1],ACCUM[4],16-COUNT,COUNT) THEN 15435000=02772000=
+% FLAG(521) % NON OCTAL CHARACTER IN STRING. 15440000=02773000=
+% ELSE ELSE IF HEXIZE(ACCUM[1],ACCUM[4],12-COUNT,COUNT) THEN 15445000=02774000=
+% FLAG(521); % NON CHARACTER IN HEX STRING. 15450000=02775000=
+% IF COUNT < SIZ THEN 15455000=02776000=
+% BEGIN 15460000=02777000=
+% C:=ACCUM[4]; GO FINISHNUMBER; 15465000=02778000=
+% END; 15470000=02779000=
+% T.INCR:=COUNT:=8; T.CLASS:=STRING; 15475000=02780000=
+% MOVECHARACTERS(8,ACCUM[4],0,ACCUM[1],3); 15480000=02781000=
+% GO COMPLETE; 15485000=02782000=
+% END OCTAL OR HEX STRING; 15490000=02783000=
+ IF DPTOG THEN 15495000=02784000=
+ BEGIN 15500000=02785000=
+ NHI:= THI; 15505000=02785000=
+ NLO:= TLO; 15510000=02785000=
+ END; 15515000=02785000=
+ IF EXAMIN(NCR) = 6"." THEN 15520000=02786000=
+ BEGIN 15525000=02787000=
+ RESULT:= 0; 15530000=02788000=
+ SCANNER; 15535000=02788000=
+ C:= 1.0*C; 15540000=02789000=
+ FPART: 15545000=02790000=
+ TCOUNT:= COUNT; 15550000=02790000=
+ IF EXAMIN(NCR) <= 9 THEN 15555000=02791000=
+ BEGIN 15560000=02792000=
+ RESULT:= 0; 15565000=02793000=
+ SCANNER; 15570000=02793000=
+ IF DPTOG THEN 15575000=02794000=
+ BEGIN 15580000=02795000=
+ DOUBLE(CONVERT, TLO, TEN[(COUNT-TCOUNT) MOD 12], 0, /, 15585000=02797000=
+ := , THI, TLO); 15590000=02797000=
+ FOR T:= 12 STEP 12 UNTIL COUNT-TCOUNT DO 15595000=02798000=
+ DOUBLE(THI, TLO, TEN[12], 0, /, := , THI, TLO); 15600000=02799000=
+ DOUBLE(THI, TLO, NHI, NLO, +, := , NHI, NLO); 15605000=02800000=
+ C:= NHI 15610000=02802000=
+ END 15615000=02803000=
+ ELSE 15620000=02803000=
+ C:= TEN[TCOUNT-COUNT]*CONVERT+C; 15625000=02803000=
+ END 15630000=02805000=
+ END; 15635000=02805000=
+ RESULT:= 7; 15640000=02806000=
+ SCANNER; 15645000=02806000=
+ IF EXAMIN(NCR) = 6"@" THEN 15650000=02807000=
+ BEGIN 15655000=02808000=
+ RESULT:= 0; 15660000=02809000=
+ SCANNER; 15665000=02809000=
+ EPART: 15670000=02810000=
+ TCOUNT:= COUNT; 15675000=02810000=
+ C:= C*1.0; 15680000=02811000=
+ RESULT:= 7; 15685000=02812000=
+ SCANNER; 15690000=02812000=
+ IF T:= EXAMIN(NCR) > 9 THEN 15695000=02813000=
+ BEGIN 15700000=02815000=
+ RESULT:= 0; 15705000=02816000=
+ SCANNER; 15710000=02816000=
+ TCOUNT:= COUNT; 15715000=02817000=
+ END; 15720000=02818000=
+ RESULT:= 0; 15725000=02820000=
+ SCANNER; 15730000=02820000=
+ Q:= ACCUM[1]; 15735000=02822000=
+ IF GT1:= T:= (IF T = 6"-" THEN-CONVERT ELSE CONVERT) < -46 OR T 15740000=02824000=
+ > 69 15745000=02824000=
+ THEN 15750000=02824000=
+ FLAG(269) 15755000=02825000=
+ ELSE 15760000=02825000=
+ BEGIN 15765000=02825000=
+ T:= TEN[T]; 15770000=02826000=
+ IF ABS(0 & C[42:3:6] & C[1:2:1]+0 & T[42:3:6] & T[1:2:1]+12) 15775000=02828000=
+ > 63 15780000=02828000=
+ THEN 15785000=02828000=
+ FLAG(269) 15790000=02829000=
+ ELSE 15795000=02829000=
+ IF DPTOG THEN 15800000=02829000=
+ IF GT1 < 0 THEN 15805000=02830000=
+ BEGIN 15810000=02831000=
+ GT1:= -GT1; 15815000=02832000=
+ DOUBLE 15820000=02833000=
+ (NHI, NLO, TEN[GT1 MOD 12], 0, /, := , NHI, NLO); 15825000=02833000=
+ FOR GT2:= 12 STEP 12 UNTIL GT1 DO 15830000=02834000=
+ DOUBLE(NHI, NLO, TEN[12], 0, /, := , NHI, NLO); 15835000=02835000=
+ END 15840000=02837000=
+ ELSE 15845000=02837000=
+ BEGIN 15850000=02837000=
+ DOUBLE 15855000=02838000=
+ (NHI, NLO, TEN[GT1 MOD 12], 0, *, := , NHI, NLO); 15860000=02838000=
+ FOR GT2:= 12 STEP 12 UNTIL GT1 DO 15865000=02839000=
+ DOUBLE(NHI, NLO, TEN[12], 0, *, := , NHI, NLO); 15870000=02840000=
+ END 15875000=02842000=
+ ELSE 15880000=02842000=
+ C:= C*T; 15885000=02842000=
+ END; 15890000=02843000=
+ END; 15895000=02844000=
+ NUMBEREND: 15900000=02846000=
+ Q:= ACCUM[1]; 15905000=02846000=
+ RESULT:= 3; 15910000=02846000=
+ FINISHNUMBER: 15915000=02848000=
+ T:= 0; 15920000=02848000=
+ IF C.[1:37] = 0 THEN 15925000=02849000=
+ BEGIN 15930000=02850000=
+ T.CLASS:= LITNO; 15935000=02850000=
+ T.ADDRESS:= C 15940000=02850000=
+ END 15945000=02851000=
+ ELSE 15950000=02851000=
+ T.CLASS:= NONLITNO; 15955000=02851000=
+ GO COMPLETE; 15960000=02852000=
+ 15965000=02853000=
+COMMENT THE CODE BETWEEN IDENT AND COMPOST DOES A LOOKUP IN INFO. 15970000=02853000=
+ IF QUANTITY IS NOT FOUND THE ELBAT WORD EXPECTS TO BE 15975000=02854000=
+ ZERO. THE SCRAMBLE FOR APPROPRIATE STACK IS FIRST THING 15980000=02855000=
+ TO BE DONE. THEN THE LOOP BETWEEN COMPOST AND 15985000=02859000=
+ ROSE IS ENTERED. THE LAST THING DONE FOR ANY 15990000=02860000=
+ IDENTIFIER WHICH IS FOUND IS TO STUFF THE LOCATION 15995000=02861000=
+ OF THE ELBATWORD IN INFO INTO THE LINK FIELD. THIS 16000000=02862000=
+ ALLOWS REFERENCE BACK TO INFO FOR ADDITIONAL DATA, 16005000=02863000=
+ SHOULD THIS BE REQUIRED. ; 16010000=02864000=
+ IDENT: 16015000=02865000=
+ T:= STACKHEAD[SCRAM:= (Q:= ACCUM[1]) MOD 125]; 16020000=02865000=
+ ROSE: 16025000=02875000=
+ GT1:= T.LINKR; 16030000=02875000=
+ IF (GT2:= T.LINKC)+GT1 = 0 THEN 16035000=02876000=
+ BEGIN 16040000=02877000=
+ T:= 0; 16045000=02877000=
+ GO COMPLETE 16050000=02877000=
+ END; 16055000=02877000=
+ IF T = INFO[GT1, GT2] THEN 16060000=02877010=
+ BEGIN 16065000=02877010=
+ T:= 0; 16070000=02877020=
+ GO TO COMPLETE 16075000=02877020=
+ END; 16080000=02877020=
+ T:= INFO[GT1, GT2]; 16085000=02878000=
+ IF INFO[GT1, GT2+1] & 0[1:1:11] ^= Q THEN 16090000=02879000=
+ GO ROSE; 16095000=02879000=
+ IF COUNT <= 5 THEN 16100000=02880000=
+ GO COMPOST; 16105000=02880000=
+ IF NOT EQUAL(COUNT-5, ACCUM[2], INFO[GT1, GT2+2]) THEN 16110000=02881000=
+ GO ROSE; 16115000=02881000=
+ COMPOST: 16120000=02882000=
+ T:= T & GT1[35:43:5] & GT2[40:40:8]; 16125000=02882000=
+ 16130000=02883000=
+COMMENT CHECK HERE FOR COMMENTS AND DEFINED IDS; 16135000=02883000=
+ IF NOT ENDTOG THEN 16140000=02884000=
+ BEGIN 16145000=02885000=
+ IF GT1:= T.CLASS = COMMENTV THEN 16150000=02886000=
+ BEGIN 16155000=02887000=
+ WHILE EXAMIN(NCR) ^= 6";" DO 16160000=02888000=
+ BEGIN 16165000=02889000=
+ RESULT:= 6; 16170000=02889000=
+ COUNT:= 0; 16175000=02889000=
+ SCANNER 16180000=02889000=
+ END; 16185000=02889000=
+ RESULT:= 0; 16190000=02890000=
+ SCANNER; 16195000=02890000=
+ GO SCANAGAIN 16200000=02891000=
+ END 16205000=02892000=
+ END; 16210000=02892000=
+ IF STOPDEFINE THEN 16215000=02893000=
+ GO COMPLETE; 16220000=02893000=
+ IF GT1 ^= DEFINEDID THEN 16225000=02894000=
+ GO COMPLETE; 16230000=02894000=
+ 16235000=02895000=
+COMMENT SETUP FOR DEFINED IDS - SEE DEFINEGEN FOR MORE DETAILS; 16240000=02895000=
+ IF T.ADDRESS ^= 0 THEN 16245000=02896000=
+ T:= FIXDEFINEINFO(T); 16250000=02896000=
+ IF DEFINEINDEX = 24 THEN 16255000=02898000=
+ BEGIN 16260000=02899000=
+ FLAG(139); 16265000=02899000=
+ GO ARGH 16270000=02899000=
+ END; 16275000=02899000=
+ DEFINEARRAY[DEFINEINDEX]:= LASTUSED & T.ADDRESS[18:33:15]; 16280000=02900000=
+ LASTUSED:= GIT(T); 16285000=02901000=
+ DEFINEARRAY[DEFINEINDEX+2]:= 262144*LCR+NCR; 16290000=02902000=
+ LCR:= (NCR:= MKABS(DEFINEARRAY[DEFINEINDEX+1]))+1; 16295000=02903000=
+ PUTSEQNO(GT4, LCR); 16300000=02904000=
+ TURNONSTOPLIGHT(6"%", LCR); 16305000=02905000=
+ DEFINEINDEX:= DEFINEINDEX+3; 16310000=02905000=
+ GO PERCENT; 16315000=02906000=
+ COMPLETE: 16320000=02910000=
+ ELBAT[NXTELBT]:= T; 16325000=02910000=
+ STOPDEFINE:= FALSE; 16330000=02911000=
+ COMMENT ALLOW DEFINES AGAIN; 16335000=02911000=
+ IF NXTELBT:= NXTELBT+1 > 74 THEN 16340000=02912000=
+ IF NOT MACROID THEN 16345000=02913000=
+ BEGIN 16350000=02914000=
+ 16355000=02915000=
+COMMENT ELBAT IS FULL: ADJUST IT; 16360000=02915000=
+ MOVE(10, ELBAT[65], ELBAT); 16365000=02916000=
+ I:= I-65; 16370000=02917000=
+ P:= P-65; 16375000=02917000=
+ NXTELBT:= 10; 16380000=02917000=
+ END 16385000=02919000=
+ END; 16390000=02919000=
+ IF TABLE:= ELBAT[P].CLASS = COMMENTV THEN 16395000=02920000=
+ BEGIN 16400000=02921000=
+ 16405000=02922000=
+COMMENT SPECIAL HANDLING OF CONSTANTS FOR SAKE OF FOR STATEMENTS; 16410000=02922000=
+ C:= INFO[0, ELBAT[P].ADDRESS]; 16415000=02923000=
+ ELBAT[P].CLASS:= TABLE:= NONLITNO 16420000=02925000=
+ END; 16425000=02925000=
+ STOPDEFINE:= FALSE; 16430000=02926000=
+ COMMENT ALLOW DEFINE; 16435000=02926000=
+ END TABLE; 16440000=02927000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16445000=02927000=
+ BOOLEAN PROCEDURE BOOLPRIM; 16450000=02955000=
+ FORWARD; 16455000=02955000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16460000=02955000=
+ PROCEDURE BOOLCOMP(B); 16465000=02955500=
+ BOOLEAN 16470000=02955500=
+ B; 16475000=02955500=
+ FORWARD; 16480000=02955500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16485000=02955500=
+ INTEGER PROCEDURE NEXT; 16490000=02956000=
+ BEGIN 16495000=02956500=
+ LABEL 16500000=02957000=
+ EXIT; 16505000=02957000=
+ INTEGER 16510000=02957500=
+ T; 16515000=02957500=
+ DEFINE 16520000=02958000=
+ ERROR = BEGIN 16525000=02958000=
+ FLAG(603); 16530000=02958000=
+ GO EXIT 16535000=02958000=
+ END #; 16540000=02958000=
+ SKAN; 16545000=02958500=
+ IF RESULT = 3 THEN 16550000=02959000=
+ ERROR; % NUMBERS NOT ALLOWED. 16555000=02959000=
+ IF RESULT = 2 THEN % SPECIAL CHARACTER. 16560000=02959500=
+ BEGIN 16565000=02960000=
+ T:= 16570000=02960500=
+ IF Q = 6"1,0000" OR Q = 6"1%0000" THEN 16575000=02960500=
+ 20 % FAKE OUT BOOLEXP.16580000=02960500=
+ ELSE 16585000=02961000=
+ ((T:= Q.[18:6]-2) & T[42:41:3]); 16590000=02961000=
+ IF T = 11 OR T = 19 OR T = 20 THEN 16595000=02961500=
+ BATMAN:= SPECIAL[T] % (,),OR ;16600000=02961500=
+ ELSE 16605000=02962000=
+ FLAG(603); 16610000=02962000=
+ GO EXIT 16615000=02963000=
+ END SPECIAL CHARACTERS; 16620000=02963000=
+ 16625000=02963500=
+COMMENT LOOK FOR BOOLEAN OPERATORS, THEN OPTIONS; 16630000=02963500=
+ T:= 16635000=02964000=
+ IF Q = 6"3NOT00" THEN 16640000=02964000=
+ NOTOP 16645000=02964500=
+ ELSE 16650000=02964500=
+ IF Q = 6"3AND00" THEN 16655000=02964500=
+ ANDOP 16660000=02965000=
+ ELSE 16665000=02965000=
+ IF Q = 6"2OR000" THEN 16670000=02965000=
+ OROP 16675000=02965500=
+ ELSE 16680000=02965500=
+ IF Q = 6"3EQV00" THEN 16685000=02965500=
+ EQVOP 16690000=02966000=
+ ELSE 16695000=02966000=
+ 0; 16700000=02966000=
+ IF T ^= 0 THEN 16705000=02966500=
+ BATMAN.CLASS:= T 16710000=02967000=
+ ELSE 16715000=02967000=
+ BATMAN:= 1 & BOOID[2:7] & REAL(FINDOPTION(1))[1:1]; % OPTION. 16720000=02967000=
+EXIT: 16725000=02968000=
+ NEXT:= MYCLASS:= BATMAN.CLASS; 16730000=02968000=
+ END NEXT; 16735000=02968500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16740000=02968500=
+ BOOLEAN PROCEDURE BOOLEXP; 16745000=02969000=
+ BEGIN 16750000=02969500=
+ BOOLEAN 16755000=02970000=
+ B; 16760000=02970000=
+ B:= BOOLPRIM; 16765000=02970500=
+ WHILE MYCLASS >= EQVOP AND MYCLASS <= ANDOP DO 16770000=02971000=
+ BOOLCOMP(B); 16775000=02971000=
+ BOOLEXP:= B 16780000=02972000=
+ END BOOLEXP; 16785000=02972000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16790000=02972000=
+ BOOLEAN PROCEDURE BOOLPRIM; 16795000=02972500=
+ BEGIN 16800000=02973000=
+ BOOLEAN 16805000=02973500=
+ B, 16810000=02973500=
+ KNOT; 16815000=02973500=
+ DEFINE 16820000=02974000=
+ SKIPIT = MYCLASS:= NEXT #; 16825000=02974000=
+ IF KNOT:= (NEXT = NOTOP) THEN 16830000=02974500=
+ SKIPIT; 16835000=02974500=
+ IF MYCLASS = LEFTPAREN THEN 16840000=02975000=
+ BEGIN 16845000=02975500=
+ B:= BOOLEXP; 16850000=02976000=
+ IF MYCLASS ^= RTPAREN THEN 16855000=02976500=
+ FLAG(604); 16860000=02976500=
+ END 16865000=02977500=
+ ELSE 16870000=02977500=
+ IF MYCLASS ^= BOOID THEN 16875000=02977500=
+ FLAG(601) 16880000=02978000=
+ ELSE 16885000=02978000=
+ B:= BATMAN < 0; 16890000=02978000=
+ IF KNOT THEN 16895000=02978500=
+ B:= NOT B; 16900000=02978500=
+ SKIPIT; 16905000=02978500=
+ BOOLPRIM:= B 16910000=02979500=
+ END BOOLPRIM; 16915000=02979500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16920000=02979500=
+ PROCEDURE BOOLCOMP(B); 16925000=02980000=
+ BOOLEAN 16930000=02980000=
+ B; 16935000=02980000=
+ BEGIN 16940000=02980500=
+ REAL 16945000=02981000=
+ OPCLASS; 16950000=02981000=
+ BOOLEAN 16955000=02981500=
+ T; 16960000=02981500=
+ OPCLASS:= MYCLASS; 16965000=02982000=
+ T:= BOOLPRIM; 16970000=02982500=
+ WHILE OPCLASS < MYCLASS DO 16975000=02983000=
+ BOOLCOMP(T); 16980000=02983000=
+ B:= 16985000=02983500=
+ IF OPCLASS = ANDOP THEN 16990000=02983500=
+ (B AND T) 16995000=02984000=
+ ELSE 17000000=02984000=
+ IF OPCLASS = OROP THEN 17005000=02984000=
+ (B OR T) 17010000=02984500=
+ ELSE 17015000=02984500=
+ (B EQV T); 17020000=02984500=
+ END BOOLCOMP; 17025000=02985000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17030000=02985000=
+% 17035000=02985500=
+ 17040000=02986000=
+COMMENT#################################################################17045000=02986000=
+ FORWARD DECLARATIONS 17050000=02986500=
+#######################################################################;17055000=02987000=
+% 17060000=02987500=
+ PROCEDURE AEXP; 17065000=03001000=
+ FORWARD; 17070000=03001000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17075000=03001000=
+ PROCEDURE ARITHSEC; 17080000=03002000=
+ FORWARD; 17085000=03002000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17090000=03002000=
+ PROCEDURE SIMPARITH; 17095000=03003000=
+ FORWARD; 17100000=03003000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17105000=03003000=
+ PROCEDURE ARITHCOMP; 17110000=03004000=
+ FORWARD; 17115000=03004000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17120000=03004000=
+ PROCEDURE PRIMARY; 17125000=03005000=
+ FORWARD; 17130000=03005000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17135000=03005000=
+ DEFINE 17140000=03006000=
+ BEXP = AEXP #; 17145000=03006000=
+ INTEGER PROCEDURE EXPRSS; 17150000=03007000=
+ FORWARD; 17155000=03007000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17160000=03007000=
+ PROCEDURE POLISHER(EXPECT); 17165000=03009000=
+ VALUE 17170000=03009000=
+ EXPECT; 17175000=03009000=
+ REAL 17180000=03009000=
+ EXPECT; 17185000=03009000=
+ FORWARD; 17190000=03009000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17195000=03009000=
+ PROCEDURE INLINE; 17200000=03010000=
+ FORWARD; 17205000=03010000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17210000=03010000=
+ PROCEDURE SUBHAND(FROM); 17215000=03011000=
+ VALUE 17220000=03011000=
+ FROM; 17225000=03011000=
+ BOOLEAN 17230000=03011000=
+ FROM; 17235000=03011000=
+ FORWARD; 17240000=03011000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17245000=03011000=
+ PROCEDURE IOSTMT; 17250000=03012000=
+ FORWARD; 17255000=03012000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17260000=03012000=
+ INTEGER PROCEDURE IFEXP; 17265000=03013000=
+ FORWARD; 17270000=03013000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17275000=03013000=
+ PROCEDURE PARSE; 17280000=03014000=
+ FORWARD; 17285000=03014000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17290000=03014000=
+ PROCEDURE DOT; 17295000=03015000=
+ FORWARD; 17300000=03015000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17305000=03015000=
+ PROCEDURE IFCLAUSE; 17310000=03018000=
+ FORWARD; 17315000=03018000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17320000=03018000=
+ INTEGER PROCEDURE GET(SYLLABLE); 17325000=03019000=
+ VALUE 17330000=03019000=
+ SYLLABLE; 17335000=03019000=
+ REAL 17340000=03019000=
+ SYLLABLE; 17345000=03019000=
+ FORWARD; 17350000=03019000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17355000=03019000=
+ INTEGER PROCEDURE GNAT(L); 17360000=03020000=
+ VALUE 17365000=03020000=
+ L; 17370000=03020000=
+ REAL 17375000=03020000=
+ L; 17380000=03020000=
+ FORWARD; 17385000=03020000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17390000=03020000=
+ PROCEDURE PANA; 17395000=03021000=
+ FORWARD; 17400000=03021000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17405000=03021000=
+ PROCEDURE IFSTMT; 17410000=03022000=
+ FORWARD; 17415000=03022000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17420000=03022000=
+ PROCEDURE GOGEN(LABELBAT, BRANCHTYPE); 17425000=03023000=
+ VALUE 17430000=03024000=
+ LABELBAT, 17435000=03024000=
+ BRANCHTYPE; 17440000=03024000=
+ REAL 17445000=03025000=
+ LABELBAT, 17450000=03025000=
+ BRANCHTYPE; 17455000=03025000=
+ FORWARD; 17460000=03025000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17465000=03025000=
+ BOOLEAN PROCEDURE SIMPGO; 17470000=03026000=
+ FORWARD; 17475000=03026000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17480000=03026000=
+ PROCEDURE STMT; 17485000=03027000=
+ FORWARD; 17490000=03027000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17495000=03027000=
+ PROCEDURE EMIT(SYLLABLE); 17500000=03028000=
+ VALUE 17505000=03028000=
+ SYLLABLE; 17510000=03028000=
+ REAL 17515000=03028000=
+ SYLLABLE; 17520000=03028000=
+ FORWARD; 17525000=03028000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17530000=03028000=
+ PROCEDURE PROCSTMT(FROM); 17535000=03029000=
+ VALUE 17540000=03029000=
+ FROM; 17545000=03029000=
+ BOOLEAN 17550000=03029000=
+ FROM; 17555000=03029000=
+ FORWARD; 17560000=03029000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17565000=03029000=
+ PROCEDURE STRMPROCSTMT; 17570000=03030000=
+ FORWARD; 17575000=03030000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17580000=03030000=
+ PROCEDURE CONSTANTCLEAN; 17585000=03034000=
+ FORWARD; 17590000=03034000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17595000=03034000=
+ PROCEDURE SCATTERELBAT; 17600000=03035000=
+ FORWARD; 17605000=03035000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17610000=03035000=
+ PROCEDURE EMITB(BRANCH, FROM, TOWARDS); 17615000=03036000=
+ VALUE 17620000=03036000=
+ BRANCH, 17625000=03036000=
+ FROM, 17630000=03036000=
+ TOWARDS; 17635000=03036000=
+ INTEGER 17640000=03037000=
+ BRANCH, 17645000=03037000=
+ FROM, 17650000=03037000=
+ TOWARDS; 17655000=03037000=
+ FORWARD; 17660000=03037000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17665000=03037000=
+ PROCEDURE VARIABLE(FROM); 17670000=03038000=
+ INTEGER 17675000=03038000=
+ FROM; 17680000=03038000=
+ FORWARD; 17685000=03038000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17690000=03038000=
+ PROCEDURE IMPFUN; 17695000=03039000=
+ FORWARD; 17700000=03039000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17705000=03039000=
+ PROCEDURE RIGHT(L); 17710000=03039500=
+ VALUE 17715000=03039500=
+ L; 17720000=03039500=
+ INTEGER 17725000=03039500=
+ L; 17730000=03039500=
+ FORWARD; 17735000=03039500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17740000=03039500=
+ PROCEDURE STREAMSTMT; 17745000=03040000=
+ FORWARD; 17750000=03040000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17755000=03040000=
+ PROCEDURE SEGMENTSTART(B); 17760000=03041000=
+ VALUE 17765000=03041000=
+ B; 17770000=03041000=
+ BOOLEAN 17775000=03041000=
+ B; 17780000=03041000=
+ FORWARD; 17785000=03041000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17790000=03041000=
+ PROCEDURE SEGMENT(SIZE, FR); 17795000=03042000=
+ VALUE 17800000=03042000=
+ SIZE, 17805000=03042000=
+ FR; 17810000=03042000=
+ INTEGER 17815000=03042000=
+ SIZE, 17820000=03042000=
+ FR; 17825000=03042000=
+ FORWARD; 17830000=03042000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17835000=03042000=
+ INTEGER PROCEDURE BAE; 17840000=03046000=
+ FORWARD; 17845000=03046000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17850000=03046000=
+ PROCEDURE PROGDESCBLDR(A, B, C, D); 17855000=03047000=
+ VALUE 17860000=03047000=
+ A, 17865000=03047000=
+ B, 17870000=03047000=
+ C, 17875000=03047000=
+ D; 17880000=03047000=
+ INTEGER 17885000=03047100=
+ A, 17890000=03047100=
+ C, 17895000=03047100=
+ D; 17900000=03047100=
+ BOOLEAN 17905000=03047100=
+ B; 17910000=03047100=
+ FORWARD; 17915000=03047100=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17920000=03047100=
+ PROCEDURE BANA; 17925000=03048000=
+ FORWARD; 17930000=03048000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17935000=03048000=
+ PROCEDURE EMITNUM(A); 17940000=03049000=
+ VALUE 17945000=03049000=
+ A; 17950000=03049000=
+ REAL 17955000=03049000=
+ A; 17960000=03049000=
+ FORWARD; 17965000=03049000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17970000=03049000=
+ PROCEDURE EMITD(A, B, T); 17975000=03050000=
+ VALUE 17980000=03050000=
+ A, 17985000=03050000=
+ B, 17990000=03050000=
+ T; 17995000=03050000=
+ INTEGER 18000000=03050000=
+ A, 18005000=03050000=
+ B, 18010000=03050000=
+ T; 18015000=03050000=
+ FORWARD; 18020000=03050000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18025000=03050000=
+ INTEGER PROCEDURE GETSPACE(S, L); 18030000=03051000=
+ VALUE 18035000=03051000=
+ S, 18040000=03051000=
+ L; 18045000=03051000=
+ INTEGER 18050000=03051001=
+ L; 18055000=03051001=
+ BOOLEAN 18060000=03051001=
+ S; 18065000=03051001=
+ FORWARD; 18070000=03051001=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18075000=03051001=
+ PROCEDURE FORSTMT; 18080000=03052000=
+ FORWARD; 18085000=03052000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18090000=03052000=
+ REAL PROCEDURE TAKE(INDEX); 18095000=03053000=
+ VALUE 18100000=03053000=
+ INDEX; 18105000=03053000=
+ INTEGER 18110000=03053000=
+ INDEX; 18115000=03053000=
+ FORWARD; 18120000=03053000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18125000=03053000=
+ PROCEDURE E; 18130000=03054000=
+ FORWARD; 18135000=03054000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18140000=03054000=
+ PROCEDURE ENTRY(TYPE); 18145000=03055000=
+ VALUE 18150000=03055000=
+ TYPE; 18155000=03055000=
+ REAL 18160000=03055000=
+ TYPE; 18165000=03055000=
+ FORWARD; 18170000=03055000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18175000=03055000=
+ PROCEDURE PUTNBUMP(P1); 18180000=03057000=
+ VALUE 18185000=03057000=
+ P1; 18190000=03057000=
+ REAL 18195000=03057000=
+ P1; 18200000=03057000=
+ FORWARD; 18205000=03057000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18210000=03057000=
+ PROCEDURE JUMPCHKNX; 18215000=03058000=
+ FORWARD; 18220000=03058000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18225000=03058000=
+ PROCEDURE JUMPCHKX; 18230000=03059000=
+ FORWARD; 18235000=03059000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18240000=03059000=
+ PROCEDURE DBLSTMT; 18245000=03060000=
+ FORWARD; 18250000=03060000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18255000=03060000=
+ PROCEDURE BLOCK(S); 18260000=03067000=
+ VALUE 18265000=03067000=
+ S; 18270000=03067000=
+ BOOLEAN 18275000=03067000=
+ S; 18280000=03067000=
+ FORWARD; 18285000=03067000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18290000=03067000=
+ PROCEDURE PURGE(STOPPER); 18295000=03068000=
+ VALUE 18300000=03068000=
+ STOPPER; 18305000=03068000=
+ REAL 18310000=03068000=
+ STOPPER; 18315000=03068000=
+ FORWARD; 18320000=03068000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18325000=03068000=
+ PROCEDURE ENTER(TYPEV); 18330000=03069000=
+ VALUE 18335000=03070000=
+ TYPEV; 18340000=03070000=
+ REAL 18345000=03071000=
+ TYPEV; 18350000=03071000=
+ FORWARD; 18355000=03071000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18360000=03071000=
+ 18365000=04000000=
+ COMMENT THIS SECTION CONTAINS THE EMITTERS. THEY ARE THE AGENTS WHICH 18370000=04000000=
+ ACTUALLY PRODUCE CODE AND DEBUGING OUTPUT; 18375000=04001000=
+ 18380000=04002000=
+ COMMENT EMITL EMITS A LIT CALL; 18385000=04002000=
+ PROCEDURE EMITL(LITERAL); 18390000=04003000=
+ VALUE 18395000=04003000=
+ LITERAL; 18400000=04003000=
+ INTEGER 18405000=04003000=
+ LITERAL; 18410000=04003000=
+ EMIT(0 & LITERAL[36:38:10]); 18415000=04004000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18420000=04004000=
+ 18425000=04005000=
+ COMMENT EMITO EMIT AN OPERATOR; 18430000=04005000=
+ PROCEDURE EMITO(OPERATOR); 18435000=04006000=
+ VALUE 18440000=04006000=
+ OPERATOR; 18445000=04006000=
+ INTEGER 18450000=04006000=
+ OPERATOR; 18455000=04006000=
+ EMIT(1 & OPERATOR[36:38:10]); 18460000=04007000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18465000=04007000=
+ 18470000=04008000=
+ COMMENT EMITC IS PRIMARILY FOR USE BY STRMSTMT TO EMIT CHARACTOR MODE 18475000=04008000=
+ OPERATORS. HOWEVER IT ALSO HANDLES DIA, DIB, AND TRB; 18480000=04009000=
+ PROCEDURE EMITC(REPEAT, OPERATOR); 18485000=04010000=
+ VALUE 18490000=04010000=
+ REPEAT, 18495000=04010000=
+ OPERATOR; 18500000=04010000=
+ INTEGER 18505000=04011000=
+ REPEAT, 18510000=04011000=
+ OPERATOR; 18515000=04011000=
+ BEGIN 18520000=04012000=
+ IF REPEAT >= 64 THEN 18525000=04013000=
+ FLAG(268); 18530000=04013000=
+ EMIT(OPERATOR & REPEAT[36:42:6]) 18535000=04014000=
+ END EMITC; 18540000=04014000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18545000=04014000=
+ 18550000=04015000=
+ COMMENT EMITV EMITS AN OPERAND CALL. IF THE ADDRESS IS FOR THE SECOND 18555000=04015000=
+ HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 18560000=04016000=
+ PROCEDURE EMITV(ADDRESS); 18565000=04017000=
+ VALUE 18570000=04017000=
+ ADDRESS; 18575000=04017000=
+ INTEGER 18580000=04017000=
+ ADDRESS; 18585000=04017000=
+ BEGIN 18590000=04018000=
+ IF ADDRESS > 1023 THEN 18595000=04018000=
+ EMITO(PRTE); 18600000=04018000=
+ EMIT(2 & ADDRESS[36:38:10]) 18605000=04019000=
+ END EMITV; 18610000=04019000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18615000=04019000=
+ 18620000=04020000=
+ COMMENT EMITN EMITS A DESCRIPTOR CALL. IF THE ADDRESS IS FOR THE 18625000=04020000=
+ SECOND HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 18630000=04021000=
+ PROCEDURE EMITN(ADDRESS); 18635000=04022000=
+ VALUE 18640000=04022000=
+ ADDRESS; 18645000=04022000=
+ INTEGER 18650000=04022000=
+ ADDRESS; 18655000=04022000=
+ BEGIN 18660000=04023000=
+ IF ADDRESS > 1023 THEN 18665000=04023000=
+ EMITO(PRTE); 18670000=04023000=
+ EMIT(3 & ADDRESS[36:38:10]) 18675000=04024000=
+ END EMITN; 18680000=04024000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18685000=04024000=
+ 18690000=04025000=
+ COMMENT EMITPAIR EMITS A LITC ADDRESS FOLLOWED BY OPERATOR. IF THE 18695000=04025000=
+ ADDRESS IS FOR THE SECOND HALF OF THE PRT, THEN IT ALSO 18700000=04026000=
+ EMITS PRTE; 18705000=04027000=
+ PROCEDURE EMITPAIR(ADDRESS, OPERATOR); 18710000=04028000=
+ VALUE 18715000=04029000=
+ ADDRESS, 18720000=04029000=
+ OPERATOR; 18725000=04029000=
+ INTEGER 18730000=04030000=
+ ADDRESS, 18735000=04030000=
+ OPERATOR; 18740000=04030000=
+ BEGIN 18745000=04031000=
+ EMITL(ADDRESS); 18750000=04032000=
+ IF ADDRESS > 1023 THEN 18755000=04033000=
+ EMITO(PRTE); 18760000=04033000=
+ EMITO(OPERATOR) 18765000=04034000=
+ END EMITPAIR; 18770000=04034000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18775000=04034000=
+ 18780000=04080000=
+ COMMENT ADJUST ADJUST L TO THE BEGINING OF A WORD AND FILLS IN THE 18785000=04080000=
+ INERVENING SPACE WITH NOPS. IT CHECKS STREAMTOG TO DECIDE 18790000=04081000=
+ WHICH SORT OF NOP TO USE; 18795000=04082000=
+ PROCEDURE ADJUST; 18800000=04083000=
+ BEGIN 18805000=04084000=
+ WHILE L.[46:2] ^= 0 DO 18810000=04086000=
+ EMIT(45); 18815000=04086000=
+ END ADJUST; 18820000=04087000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18825000=04087000=
+ PROCEDURE EMITLNG; 18830000=04098000=
+ BEGIN 18835000=04099000=
+ LABEL 18840000=04099000=
+ E; 18845000=04099000=
+ IF NOT LINKTOG THEN 18850000=04100000=
+ GO TO E; 18855000=04100000=
+ COMMENT GO TO E IF LAST THING IS A LINK; 18860000=04101000=
+ IF GET(L) ^= 0 THEN 18865000=04102000=
+ GO TO E; 18870000=04102000=
+ COMMENT EITHER LAST EXPRESSION WAS CONDITIONAL OR THERE IS NO 18875000=04103000=
+ LNG OR RELATIONAL OPERATOR; 18880000=04104000=
+ IF GT1:= GET(L-1) = 77 THEN 18885000=04105000=
+ L:= L-1 18890000=04106000=
+ COMMENT LAST THING WAS AN LNG - SO CANCEL IT; 18895000=04106000=
+ ELSE 18900000=04107000=
+ IF GT1.[42:6] = 21 AND GT1.[37:2] = 0 THEN % AHA 18905000=04107000=
+ COMMENT LAST THING WAS A RELATIONAL; 18910000=04108000=
+ BEGIN 18915000=04109000=
+ L:= L-1; 18920000=04109000=
+ EMITO(REAL(BOOLEAN(GT1.[36:10]) EQV 18925000=04111000=
+ BOOLEAN(IF GT1.[40:2] = 0 THEN 511 ELSE 463))) 18930000=04111000=
+ COMMENT NEGATE THE RELATIONAL; 18935000=04111000=
+ END 18940000=04112000=
+ ELSE 18945000=04112000=
+ E: EMITO(LNG) 18950000=04112000=
+ END EMITLNG; 18955000=04112000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18960000=04112000=
+ COMMENT EMITB EMITS A BRANCH OPERATOR AND ITS ASSOCIATED NUMBER; 18965000=04113000=
+ PROCEDURE EMITB(BRANCH, FROM, TOWARDS); 18970000=04114000=
+ VALUE 18975000=04115000=
+ BRANCH, 18980000=04115000=
+ FROM, 18985000=04115000=
+ TOWARDS; 18990000=04115000=
+ INTEGER 18995000=04116000=
+ BRANCH, 19000000=04116000=
+ FROM, 19005000=04116000=
+ TOWARDS; 19010000=04116000=
+ BEGIN 19015000=04117000=
+ INTEGER 19020000=04118000=
+ TL; 19025000=04118000=
+ TL:= L; 19030000=04119000=
+ IF TOWARDS > FOULED THEN 19035000=04119500=
+ FOULED:= TOWARDS; 19040000=04119500=
+ L:= FROM-2; 19045000=04120000=
+ GT1:= TOWARDS-FROM; 19050000=04120100=
+ IF TOWARDS.[46:2] = 0 THEN 19055000=04120300=
+ BEGIN 19060000=04120300=
+ BRANCH:= BRANCH & 1[39:47:1]; 19065000=04120400=
+ GT1:= TOWARDS DIV 4-(FROM-1) DIV 4 19070000=04120500=
+ END; 19075000=04120500=
+ EMITNUM(ABS(GT1)); 19080000=04121000=
+ EMITO(BRANCH & (REAL(GT1 >= 0)+1)[42:46:2]); 19085000=04122000=
+ L:= TL 19090000=04125000=
+ END EMITB; 19095000=04125000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19100000=04125000=
+ COMMENT DEBUGWORD FORMATS TWO FIELDS FOR DEBUGGING OUTPUT IN 19105000=04126000=
+ OCTAL, NAMELY : 19110000=04127000=
+ 1. 4 CHARACTERS FOR THE L REGISTER. 19115000=04128000=
+ 2.16 CHARACTERS FOR THE WORD BEING EMITTED. ; 19120000=04129000=
+ STREAM PROCEDURE DEBUGWORD(SEQ, CODE, FEIL); 19125000=04130000=
+ VALUE 19130000=04130000=
+ SEQ, 19135000=04130000=
+ CODE; 19140000=04130000=
+ BEGIN 19145000=04131000=
+ DI:= FEIL; 19150000=04132000=
+ SI:= LOC SEQ; 19155000=04132000=
+ SI:= SI+4; 19160000=04132000=
+ DS:= 4 CHR; 19165000=04132000=
+ DS:= 2 LIT 6" "; 19170000=04133000=
+ SI:= LOC CODE; 19175000=04134000=
+ (DS:= 3 RESET;3(IF SB THEN DS:= SET ELSE DS:= RESET;SKIP 1 SB)); 19180000=04136000=
+ 29(DS:= 2 LIT 6" "); 19185000=04137000=
+ END; 19190000=04138000=
+ COMMENT EMITWORD PLACES THE PARAMETER,"WORD",INTO EDOC. IF 19195000=04139000=
+ DEBUGGING IS REQUIRED, "L" AND "WORD" ARE OUTPUT ON 19200000=04140000=
+ THE PRINTER FILE IN OCTAL FORMAT. ; 19205000=04141000=
+ PROCEDURE EMITWORD(WORD); 19210000=04142000=
+ VALUE 19215000=04142000=
+ WORD; 19220000=04142000=
+ REAL 19225000=04142000=
+ WORD; 19230000=04142000=
+ BEGIN 19235000=04143000=
+ ADJUST; 19240000=04144000=
+ IF L >= 4088 THEN 19245000=04145000=
+ BEGIN 19250000=04145000=
+ ERR(200); 19255000=04145000=
+ L:= 0; 19260000=04145000=
+ END 19265000=04146000=
+ ELSE 19270000=04146000=
+ BEGIN 19275000=04146000=
+ MOVE(1, WORD, CODE(L DIV 4+1)); 19280000=04147000=
+ IF DEBUGTOG THEN 19285000=04148000=
+ BEGIN 19290000=04149000=
+ DEBUGWORD(B2D(L), WORD, LIN); 19295000=04149000=
+ WRITELINE 19300000=04150000=
+ END; 19305000=04150000=
+ FOULED:= L:= L+4; 19310000=04151000=
+ END 19315000=04152000=
+ END EMITWORD; 19320000=04152000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19325000=04152000=
+ COMMENT CONSTANTCLEAN IS CALLED AFTER AN UNCONDITIONAL BRANCH HAS 19330000=04153000=
+ BEEN EMITTED. IF ANY CONSTANTS HAVE BEEN ACCUMULATED BY 19335000=04154000=
+ EMITNUM IN INFO[0,*], CONSTANTCLEAN WILL FIX THE CHAIN 19340000=04155000=
+ OF C-RELATIVE OPDC S LEFT BY EMITNUM. IF C-RELATIVE 19345000=04156000=
+ ADDRESSING IS IMPOSSIBLE (I.E. THE ADDRESS 19350000=04157000=
+ IF GREATER THAN 127 WORDS) THEN THE CONSTANT ALONG WITH 19355000=04158000=
+ THE 1ST LINK OF THE OPDC CHAIN IS ENTERED IN INFO. 19360000=04159000=
+ AT PURGE TIME THE REMAINING OPDC S ARE EMITTED WITH 19365000=04160000=
+ F -RELATIVE ADDRESSING AND CODE EMITTED TO STORE THE 19370000=04161000=
+ CONSTANTS INTO THE PROPER F-RELATIVE CELLS. ; 19375000=04162000=
+ PROCEDURE CONSTANTCLEAN; 19380000=04163000=
+ IF MRCLEAN THEN 19385000=04164000=
+ BEGIN 19390000=04165000=
+ INTEGER 19395000=04166000=
+ J, 19400000=04166000=
+ TEMPL, 19405000=04166000=
+ D, 19410000=04166000=
+ LINK; 19415000=04166000=
+ BOOLEAN 19420000=04167000=
+ CREL; 19425000=04167000=
+ LABEL 19430000=04168000=
+ ALLTHU; 19435000=04168000=
+ FOR J:= 1 STEP 2 UNTIL LASTENTRY DO 19440000=04170000=
+ BEGIN 19445000=04171000=
+ ADJUST; 19450000=04172000=
+ TEMPL:= L; 19455000=04172000=
+ L:= INFO[0, 255-J+1]; 19460000=04172000=
+ CREL:= FALSE; 19465000=04173000=
+ DO BEGIN 19470000=04174000=
+ IF D:= (TEMPL-L+3) DIV 4 >= 128 THEN 19475000=04175000=
+ IF MODE ^= 0 THEN 19480000=04175500=
+ BEGIN 19485000=04176000=
+ FLAG(50); 19490000=04176000=
+ GO TO ALLTHU 19495000=04176000=
+ END; 19500000=04176000=
+ LINK:= GET(L); 19505000=04182000=
+ CREL:= TRUE; 19510000=04183000=
+ IF MODE ^= 0 THEN 19515000=04184000=
+ EMITV(D+768) 19520000=04184000=
+ ELSE 19525000=04184000=
+ EMITV(REAL(TEMPL >= 2048)*1024+TEMPL DIV 4); 19530000=04184500=
+ END 19535000=04185000=
+ UNTIL L:= LINK = 4095; 19540000=04185000=
+ ALLTHU: 19545000=04186000=
+ L:= TEMPL; 19550000=04186000=
+ IF CREL THEN 19555000=04187000=
+ EMITWORD(INFO[0, 255-J]); 19560000=04187000=
+ END; 19565000=04188000=
+ LASTENTRY:= 0; 19570000=04189000=
+ END; 19575000=04190000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19580000=04190000=
+ COMMENT EMITNUM HANDLES THE EMISSION OF CODE FOR CONSTANTS,BOTH 19585000=04191000=
+ EXPLICIT AND IMPLICIT. IN EVERY CASE,EMITNUM WILL 19590000=04192000=
+ PRODUCE CODE TO GET THE DESIRED CONSTANT ON TOP OF 19595000=04193000=
+ THE STACK. IF THE NUMBER IS A LITERAL A SIMPLE LITC 19600000=04194000=
+ SYLLABLE IS PRODUCED. HOWEVER,NON-LITERALS ARE KEPT 19605000=04195000=
+ IN THE ZERO-TH ROW OF INFO WITH THE SYLLABLE 19610000=04196000=
+ POSITION,L. THE FIRST EMITNUM ON A PARTICULAR 19615000=04197000=
+ CONSTANT CAUSES THE VALUES OF L AND THE CONSTANT 19620000=04198000=
+ TO BE STORED IN INFO[0,*] (NOTE:ITEMS ARE STORED 19625000=04199000=
+ IN REVERSE STARTING WITH INFO[0,255],ETC.). THEN 19630000=04200000=
+ ITS THE JOB OF CONSTANTCLEAN TO EMIT THE ACTUAL 19635000=04201000=
+ OPDC (SEE CONSTANTCLEAN PROCEDURE FOR DETAILS) ; 19640000=04202000=
+ PROCEDURE EMITNUM(C); 19645000=04203000=
+ VALUE 19650000=04203000=
+ C; 19655000=04203000=
+ REAL 19660000=04203000=
+ C; 19665000=04203000=
+ BEGIN 19670000=04204000=
+ LABEL 19675000=04204000=
+ FINISHED, 19680000=04204000=
+ FOUND; 19685000=04204000=
+ REAL 19690000=04204000=
+ N; 19695000=04204000=
+ IF C.[1:37] = 0 THEN 19700000=04205000=
+ EMITL(C) 19705000=04206000=
+ ELSE 19710000=04206000=
+ BEGIN 19715000=04207000=
+ FOULED:= L; 19720000=04207500=
+ FOR N:= 1 STEP 2 UNTIL LASTENTRY DO 19725000=04208000=
+ IF INFO[0, 255-N] = C THEN 19730000=04209000=
+ GO TO FOUND; 19735000=04209000=
+ INFO[0, 255-LASTENTRY]:= L; 19740000=04210000=
+ INFO[0, 255-LASTENTRY-1]:= C; 19745000=04211000=
+ EMITN(1023); 19750000=04212000=
+ IF MODE = 0 THEN 19755000=04212100=
+ EMITO(NOP); 19760000=04212100=
+ LINKTOG:= FALSE; 19765000=04213000=
+ IF LASTENTRY:= LASTENTRY+2 >= 128 THEN 19770000=04214000=
+ BEGIN 19775000=04215000=
+ C:= BUMPL; 19780000=04216000=
+ CONSTANTCLEAN; 19785000=04217000=
+ EMITB(BFW, C, L); 19790000=04218000=
+ END; 19795000=04219000=
+ GO TO FINISHED; 19800000=04220000=
+ FOUND: 19805000=04221000=
+ EMIT(INFO[0, 255-N+1]); 19810000=04221000=
+ LINKTOG:= FALSE; 19815000=04222000=
+ INFO[0, 255-N+1]:= L-1; 19820000=04223000=
+ IF MODE = 0 THEN 19825000=04223100=
+ EMITO(NOP); 19830000=04223100=
+ END; 19835000=04224000=
+FINISHED: 19840000=04225000=
+ END EMITNUM; 19845000=04225000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19850000=04225000=
+ COMMENT SEARCH PERFORMS A BINARY SEARCH ON THE COP AND WOP 19855000=04226000=
+ ARRAYS, GIVEN THE OPERATOR BITS SEARCH YIELDS THE BCD 19860000=04227000=
+ MNEUMONIC FOR THAT OPERATOR. IF THE OPERATOR CANNOT 19865000=04228000=
+ BE FOUND SEARCH YIELDS BLANKS. 19870000=04229000=
+ NOTE: DIA,DIB,TRB ARE RETURNED AS BLANKS. ; 19875000=04230000=
+ ALPHA PROCEDURE SEARCH(Q, KEY); 19880000=04231000=
+ VALUE 19885000=04231000=
+ KEY; 19890000=04231000=
+ ARRAY 19895000=04231000=
+ Q[0]; 19900000=04231000=
+ REAL 19905000=04231000=
+ KEY; 19910000=04231000=
+ BEGIN 19915000=04232000=
+ LABEL 19920000=04232000=
+ L; 19925000=04232000=
+ COMMENT GT1 AND GT2 ARE INITIALIZED ASSUMMING THAT Q IS ORDERED 19930000=04233000=
+ BY PAIRS (ARGUMENT,FUNCTION,ARGUMENT,FUNCTION,ETC.) 19935000=04234000=
+ AND THAT THE FIRST ARGUMENT IS IN Q[4]. FURTHERMORE 19940000=04235000=
+ THE LENGTH OF Q IS 128. ; 19945000=04236000=
+ INTEGER 19950000=04237000=
+ N, 19955000=04237000=
+ I; 19960000=04237000=
+ N:= 64; 19965000=04238000=
+ FOR I:= 66 STEP IF Q[I] < KEY THEN 19970000=04239000=
+ N 19975000=04239000=
+ ELSE 19980000=04239000=
+ -N WHILE N:= N DIV 2 >= 1 19985000=04240000=
+ DO 19990000=04240000=
+ IF Q[I] = KEY THEN 19995000=04241000=
+ GO TO L; 20000000=04241000=
+ I:= 0; 20005000=04242000=
+ COMMENT ARGUMENT NOT FOUND,SEARCH=Q[1] ; 20010000=04242000=
+L: SEARCH:= Q[I+1]; 20015000=04243000=
+ END SEARCH; 20020000=04244000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20025000=04244000=
+ COMMENT B2D CONVERTS THE FOUR LOW ORDER OCTAL DIGITS TO BCD 20030000=04245000=
+ CODE ; 20035000=04246000=
+ ALPHA PROCEDURE B2D(B); 20040000=04247000=
+ VALUE 20045000=04247000=
+ B; 20050000=04247000=
+ REAL 20055000=04247000=
+ B; 20060000=04247000=
+ B2D:= 0 & B[45:45:3] & B[39:42:3] & B[33:39:3] & B[27:36:3]; 20065000=04248000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20070000=04248000=
+ COMMENT PACK IS A STREAM PROCEDURE WHICH INSERTS THE SYLLABLE 20075000=04265000=
+ INTO THE EDOC ARRAY. THE SPECIFIC ELEMENT OF EDOC 20080000=04266000=
+ IS PRECISILY = EDOC[(L DIV 4) DIV 128,(< DIV 4)MOD 128] 20085000=04267000=
+ SYLLABLE POSITION=(L MOD 4 ), WHERE L IS THE SYLLABLE 20090000=04268000=
+ NUMBER RELATIVE TO THE BEGINNING OF THE SEGMENT; 20095000=04269000=
+ STREAM PROCEDURE PACK(WORD, POSITION, SYLLABLE); 20100000=04270000=
+ VALUE 20105000=04271000=
+ POSITION, 20110000=04271000=
+ SYLLABLE; 20115000=04271000=
+ BEGIN 20120000=04272000=
+ DI:= WORD; 20125000=04273000=
+ DI:= DI+POSITION; 20130000=04273000=
+ DI:= DI+POSITION; 20135000=04273000=
+ SI:= LOC SYLLABLE; 20140000=04274000=
+ SI:= SI+6; 20145000=04274000=
+ DS:= 2 CHR; 20150000=04275000=
+ END PACK; 20155000=04276000=
+ 20160000=04277000=
+COMMENT DEBUG PRINTS OUT OBJECT CODE IF "DEBUGN" IS SET; 20165000=04277000=
+ PROCEDURE DEBUG(S); 20170000=04277500=
+ VALUE 20175000=04277500=
+ S; 20180000=04277500=
+ REAL 20185000=04277500=
+ S; 20190000=04277500=
+ BEGIN 20195000=04278000=
+ REAL 20200000=04278000=
+ T1; 20205000=04278000=
+ IF SINGLTOG THEN 20210000=04278500=
+ WRITE(LINE, BUG, B2D(L), IF STREAMTOG THEN 20215000=04282500=
+ SEARCH(COP, S.[42:6]) ELSE IF T1:= S.[46:2] = 1 THEN 20220000=04282500=
+ SEARCH(WOP, S.[36:10]) ELSE WOP[T1], IF STREAMTOG THEN 20225000=04282500=
+ B2D(S.[36:6]) ELSE IF T1 = 1 THEN WOP[1] ELSE B2D(S.[36:10]), 20230000=04282500=
+ B2D(S)) 20235000=04282500=
+ ELSE 20240000=04282500=
+ WRITE(LINE, BUG, B2D(L), IF STREAMTOG THEN 20245000=04285500=
+ SEARCH(COP, S.[42:6]) ELSE IF T1:= S.[46:2] = 1 THEN 20250000=04285500=
+ SEARCH(WOP, S.[36:10]) ELSE WOP[T1], IF STREAMTOG THEN 20255000=04285500=
+ B2D(S.[36:6]) ELSE IF T1 = 1 THEN WOP[1] ELSE B2D(S.[36:10]), 20260000=04285500=
+ B2D(S)); 20265000=04285500=
+ END DEBUG; 20270000=04286000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20275000=04286000=
+ COMMENT EMIT PLACES SYLLABLES INTO EDOC, CALLS DEBUG FOR 20280000=04288000=
+ DEBUGGING OUTPUT ON THE PRINTER, AND CHECKS FOR SEGMENTS 20285000=04289000=
+ GREATER THAN 4093 SYLLABLES. ; 20290000=04290000=
+ PROCEDURE EMIT(S); 20295000=04291000=
+ VALUE 20300000=04291000=
+ S; 20305000=04291000=
+ REAL 20310000=04291000=
+ S; 20315000=04291000=
+ BEGIN 20320000=04292000=
+ IF L < 4088 THEN 20325000=04293000=
+ BEGIN 20330000=04294000=
+ LINKTOG:= TRUE; 20335000=04295000=
+ PACK(CODE(L DIV 4+1), L.[46:2], S); 20340000=04296000=
+ IF DEBUGTOG THEN 20345000=04297000=
+ DEBUG(S); 20350000=04297000=
+ L:= L+1; 20355000=04298000=
+ END 20360000=04300000=
+ ELSE 20365000=04300000=
+ BEGIN 20370000=04300000=
+ ERROR(200); 20375000=04300000=
+ L:= 1; 20380000=04300000=
+ END; 20385000=04300000=
+ COMMENT 200 EMIT - SEGMENT GREATER THAN 4093 SYLLABLES *; 20390000=04301000=
+ END EMIT; 20395000=04302000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20400000=04302000=
+ COMMENT EMITD EMITS THE DIA,DIB,TRB SEQUENCE OF CODE. THE 20405000=04305000=
+ PREVIOUS SETTING OF THE G-H AND K-V REGISTERS IS COMPARED 20410000=04306000=
+ THE CURRENT . IF THE G-H,K-V OR BOTH ARE ALREADY SET THEN 20415000=04307000=
+ THE APPROIATE SYLLABLE(S) ARE OMITTED 20420000=04308000=
+ IF 0 BITS ARE TO BE TRANSFERED THEN NO SYLLABLES ARE 20425000=04309000=
+ EMITTED ; 20430000=04310000=
+ PROCEDURE EMITD(A, B, T); 20435000=04311000=
+ VALUE 20440000=04311000=
+ A, 20445000=04311000=
+ B, 20450000=04311000=
+ T; 20455000=04311000=
+ INTEGER 20460000=04311000=
+ A, 20465000=04311000=
+ B, 20470000=04311000=
+ T; 20475000=04311000=
+ BEGIN 20480000=04311010=
+ LABEL 20485000=04311010=
+ EXIT, 20490000=04311010=
+ NORMAL; 20495000=04311010=
+ REAL 20500000=04311020=
+ Q; 20505000=04311020=
+ IF T = 15 THEN 20510000=04311030=
+ BEGIN 20515000=04311040=
+ IF A = 33 THEN 20520000=04311050=
+ Q:= 512 20525000=04311060=
+ ELSE 20530000=04311060=
+ IF A ^= 18 THEN 20535000=04311060=
+ GO TO NORMAL; 20540000=04311060=
+ IF B = 18 THEN 20545000=04311070=
+ Q:= Q+256 20550000=04311080=
+ ELSE 20555000=04311080=
+ IF B ^= 33 THEN 20560000=04311080=
+ GO TO NORMAL; 20565000=04311080=
+ EMITO(Q+197); 20570000=04311090=
+ COMMENT -- THIS GETS OUT FIXED FIELD; 20575000=04311090=
+ GO TO EXIT; 20580000=04311100=
+ END; 20585000=04311110=
+NORMAL: 20590000=04312000=
+ IF T ^= 0 THEN 20595000=04312000=
+ BEGIN 20600000=04313000=
+ EMIT(((DIALA:= A) DIV 6)*512+(A:= A MOD 6)*64+DIA); 20605000=04315000=
+ EMIT(((DIALB:= B) DIV 6)*512+(B:= B MOD 6)*64+DIB); 20610000=04317000=
+ EMIT(TRB+64*T); 20615000=04318000=
+ END EMITD; 20620000=04322000=
+EXIT: 20625000=04322100=
+ END; 20630000=04322100=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20635000=04322100=
+ PROCEDURE EMITI(E, A, B); 20640000=04500000=
+ VALUE 20645000=04500000=
+ E, 20650000=04500000=
+ A, 20655000=04500000=
+ B; 20660000=04500000=
+ REAL 20665000=04500000=
+ E, 20670000=04500000=
+ A, 20675000=04500000=
+ B; 20680000=04500000=
+ BEGIN 20685000=04501000=
+ LABEL 20690000=04501000=
+ EXIT, 20695000=04501000=
+ IS; 20700000=04501000=
+ INTEGER 20705000=04502000=
+ S, 20710000=04502000=
+ T1, 20715000=04502000=
+ T2; 20720000=04502000=
+ PROCEDURE EMIT21(E, B); 20725000=04503000=
+ VALUE 20730000=04503000=
+ E, 20735000=04503000=
+ B; 20740000=04503000=
+ REAL 20745000=04504000=
+ E; 20750000=04504000=
+ BOOLEAN 20755000=04505000=
+ B; 20760000=04505000=
+ BEGIN 20765000=04506000=
+ IF E = 0 THEN 20770000=04506000=
+ BEGIN 20775000=04507000=
+ IF B THEN 20780000=04507000=
+ EMITO(XCH); 20785000=04507000=
+ END 20790000=04508000=
+ ELSE 20795000=04508000=
+ BEGIN 20800000=04508000=
+ GT1:= E.ADDRESS; 20805000=04508000=
+ IF E:= E.CLASS <= INTID THEN 20810000=04509000=
+ EMITV(GT1) 20815000=04522000=
+ ELSE 20820000=04522000=
+ IF E <= INTARRAYID THEN 20825000=04522000=
+ EMITPAIR(GT1, LOD) 20830000=04523000=
+ ELSE 20835000=04523000=
+ EMITN(GT1) 20840000=04525000=
+ END 20845000=04526000=
+ END; 20850000=04526000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20855000=04526000=
+ IF B = 0 THEN 20860000=04526100=
+ BEGIN 20865000=04526200=
+ EMIT21(E, FALSE); 20870000=04526200=
+ GO TO EXIT 20875000=04526200=
+ END; 20880000=04526200=
+ IF STACKCT ^= 0 THEN 20885000=04527000=
+ GO TO IS; 20890000=04527000=
+ IF B = 15 THEN 20895000=04528000=
+ BEGIN 20900000=04529000=
+ IF A = 33 THEN 20905000=04529000=
+ BEGIN 20910000=04530000=
+ EMIT21(E, FALSE); 20915000=04530000=
+ EMIT(0); 20920000=04531000=
+ EMITO(INX); 20925000=04531000=
+ GO TO EXIT; 20930000=04532000=
+ END; 20935000=04533000=
+ IF A = 18 THEN 20940000=04534000=
+ BEGIN 20945000=04535000=
+ EMIT(0); 20950000=04535000=
+ EMIT21(E, TRUE); 20955000=04536000=
+ EMITO(197); 20960000=04537000=
+ GO TO EXIT; 20965000=04538000=
+ END; 20970000=04539000=
+ GO TO IS; 20975000=04540000=
+ END; 20980000=04541000=
+ IF B <= 10 AND A+B = 48 THEN 20985000=04542000=
+ BEGIN 20990000=04543000=
+ EMIT21(E, FALSE); 20995000=04543000=
+ EMITL(2**B-1); 21000000=04544000=
+ EMITO(LND); 21005000=04545000=
+ GO TO EXIT; 21010000=04546000=
+ END; 21015000=04547000=
+IS: IF(S:= (48-A-B) MOD 6)+B <= 39 THEN 21020000=04548000=
+ BEGIN 21025000=04549000=
+ EMIT21(E, FALSE); 21030000=04549000=
+ EMIT(T2:= (T1:= A DIV 6)*512+(A MOD 6)*64+DIA); 21035000=04550000=
+ EMIT(((A+B-1) DIV 6-T1+1)*512+64*S+37); 21040000=04551000=
+ GO TO EXIT; 21045000=04552000=
+ END; 21050000=04553000=
+ EMIT(0); 21055000=04554000=
+ EMIT21(E, TRUE); 21060000=04555000=
+ EMITD(A, 48-B, B); 21065000=04556000=
+EXIT: 21070000=04558000=
+ END; 21075000=04558000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21080000=04558000=
+ 21085000=05000000=
+ COMMENT THIS SECTION CONTAINS MISCELLANEOUS SERVICE ROUTINES; 21090000=05000000=
+ 21095000=05001000=
+ COMMENT STEPI AND STEPIT ARE SHORT CALLS ON TABLE; 21100000=05001000=
+ PROCEDURE STEPIT; 21105000=05002000=
+ ELCLASS:= TABLE(I:= I+1); 21110000=05002000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21115000=05002000=
+ INTEGER PROCEDURE STEPI; 21120000=05003000=
+ STEPI:= ELCLASS:= TABLE(I:= I+1); 21125000=05003000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21130000=05003000=
+ 21135000=05004000=
+ COMMENT TAKE FETCHS A WORD FROM INFO; 21140000=05004000=
+ REAL PROCEDURE TAKE(INDEX); 21145000=05005000=
+ VALUE 21150000=05005000=
+ INDEX; 21155000=05005000=
+ INTEGER 21160000=05005000=
+ INDEX; 21165000=05005000=
+ TAKE:= INFO[INDEX.LINKR, INDEX.LINKC]; 21170000=05006000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21175000=05006000=
+ 21180000=05007000=
+ COMMENT PUT PLACES A WORD INTO INFO; 21185000=05007000=
+ PROCEDURE PUT(WORD, INDEX); 21190000=05008000=
+ VALUE 21195000=05008000=
+ WORD, 21200000=05008000=
+ INDEX; 21205000=05008000=
+ REAL 21210000=05008000=
+ WORD, 21215000=05008000=
+ INDEX; 21220000=05008000=
+ INFO[INDEX.LINKR, INDEX.LINKC]:= WORD; 21225000=05009000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21230000=05009000=
+ 21235000=05010000=
+ COMMENT FLAG FLAGS ERROR MESSAGES, COUNTS THEM AND SUPRESS FUTURE 21240000=05010000=
+ ERROR MESSAGES UNTIL THE COMPILER THINKS IT HAS RECOVERED;21245000=05011000=
+ PROCEDURE FLAG(ERRNUM); 21250000=05012000=
+ VALUE 21255000=05012000=
+ ERRNUM; 21260000=05012000=
+ INTEGER 21265000=05012000=
+ ERRNUM; 21270000=05012000=
+ BEGIN 21275000=05013000=
+ COMMENT WRITERROR IS THE STREAM PROCEDURE WHICH ACTUALLY PRODUCES 21280000=05014000=
+ THE ERROR MESSAGE ON THE PRINTER; 21285000=05015000=
+ STREAM PROCEDURE WRITERROR(ERRNUM, ACCUM, LINE, COUNT, LSTSEQ); 21290000=05016000=
+ VALUE 21295000=05017000=
+ ERRNUM, 21300000=05017000=
+ COUNT; 21305000=05017000=
+ BEGIN 21310000=05018000=
+ DI:= LINE; 21315000=05019000=
+ 44(DS:= 2 LIT 6" "); 21320000=05019000=
+ COMMENT CLEAR BUFFER; 21325000=05019000=
+ SI:= LSTSEQ; 21330000=05020000=
+ SI:= SI-8; 21335000=05020000=
+ DS:= WDS; 21340000=05020000=
+ SI:= LINE; 21345000=05021000=
+ DS:= 2 WDS; 21350000=05021000=
+ 4(DS:= 2 LIT 6"XX"); 21355000=05022000=
+ COMMENT SET RIGHT MARGIN FLAG; 21360000=05022000=
+ SI:= LSTSEQ; 21365000=05023000=
+ DI:= LSTSEQ; 21370000=05023000=
+ DI:= DI-8; 21375000=05023000=
+ DS:= WDS; 21380000=05023000=
+ DI:= LINE; 21385000=05024000=
+ DI:= DI+8; 21390000=05024000=
+ COMMENT INDENT MESSAGE; 21395000=05024000=
+ DS:= 13 LIT 6"ERROR NUMBER "; 21400000=05025000=
+ SI:= LOC ERRNUM; 21405000=05026000=
+ DS:= 3 DEC; 21410000=05026000=
+ COMMENT CONVERT ERRNUM; 21415000=05026000=
+ DS:= 4 LIT 6" -- "; 21420000=05027000=
+ SI:= ACCUM; 21425000=05028000=
+ SI:= SI+3; 21430000=05028000=
+ DS:= COUNT CHR; 21435000=05028000=
+ COMMENT PLACE ALPHA IN BUFFER; 21440000=05029000=
+ DS:= LIT 6"." 21445000=05031000=
+ END WRITERROR; 21450000=05031000=
+ IF ERRORTOG THEN % DO NOTHING IF WE SUPPRESS MSSGS. 21455000=05032000=
+ BEGIN 21460000=05033000=
+ SPECTOG:= FALSE; 21465000=05034000=
+ ERRORCOUNT:= ERRORCOUNT+1; 21470000=05035000=
+ COMMENT COUNT ERRORS; 21475000=05035000=
+ IF NOT LISTER THEN 21480000=05036000=
+ BEGIN 21485000=05037000=
+ EDITLINE(LIN, FCR, L DIV 4, L.[46:2], MEDIUM, 0); 21490000=05038000=
+ MOVE(1, INFO[LASTSEQROW, LASTSEQUENCE], LIN[12]); 21495000=05039500=
+ IF NOHEADING THEN 21500000=05039600=
+ DATIME; 21505000=05039600=
+ WRITELINE; 21510000=05039600=
+ END; 21515000=05041000=
+ COMMENT PRINT CARDIMAGE IF WE ARE NOT LISTING; 21520000=05042000=
+ ACCUM[1]:= Q; 21525000=05043000=
+ COMMENT RESTORE ACCUMULATOR; 21530000=05043000=
+ WRITERROR(ERRNUM, ACCUM[1], LIN[**], Q.[12:6], 21535000=05045000=
+ INFO[LASTSEQROW, LASTSEQUENCE]); 21540000=05045000=
+ IF NOT NOHEADING THEN 21545000=05046000=
+ WRITELINE; 21550000=05046000=
+ ERRORTOG:= FALSE; 21555000=05047000=
+ COMMENT INHIBIT MESSAGES; 21560000=05047000=
+ IF PUNCHTOG THEN 21565000=05048000=
+ BEGIN 21570000=05049000=
+ REAL 21575000=05049000=
+ T1, 21580000=05049000=
+ T2, 21585000=05049000=
+ T3, 21590000=05049000=
+ T4; 21595000=05049000=
+ LABEL 21600000=05049000=
+ L, 21605000=05049000=
+ L1, 21610000=05049000=
+ EXIT; 21615000=05049000=
+ STREAM PROCEDURE P1(L, P); 21620000=05050000=
+ VALUE 21625000=05050000=
+ P; 21630000=05050000=
+ BEGIN 21635000=05051000=
+ DI:= L; 21640000=05051000=
+ 15(DS:= 8 LIT 6" "); 21645000=05051000=
+ SI:= LOC P; 21650000=05052000=
+ DI:= L; 21655000=05052000=
+ SI:= SI+5; 21660000=05052000=
+ SKIP 3 SB; 21665000=05052000=
+ (DS:= 3 RESET;3(IF SB THEN DS:= SET ELSE DS:= RESET;SKIP 1 SB)21670000=05054000=
+ ); 21675000=05054000=
+ SI:= P; 21680000=05055000=
+ DI:= DI+2; 21685000=05056000=
+ (8(DS:= 3 RESET;3 21690000=05058000=
+ (IF SB THEN DS:= SET ELSE DS:= RESET;SKIP 1 SB));DS:= LIT 21695000=05058000=
+ 6" ") 21700000=05058000=
+ END; 21705000=05058000=
+ STREAM PROCEDURE P2(L, P); 21710000=05059000=
+ VALUE 21715000=05059000=
+ P; 21720000=05059000=
+ BEGIN 21725000=05060000=
+ DI:= L; 21730000=05060000=
+ DI:= DI+26; 21735000=05060000=
+ DS:= LIT 6"0"; 21740000=05060000=
+ SI:= P; 21745000=05061000=
+ SI:= SI-2; 21750000=05061000=
+ SKIP 1 SB; 21755000=05061000=
+ (DS:= 3 RESET;3(IF SB THEN DS:= SET ELSE DS:= RESET;SKIP 1 SB)21760000=05063000=
+ ); 21765000=05063000=
+ END; 21770000=05064000=
+ REAL 21775000=05065000=
+ STREAM PROCEDURE ABS(A); 21780000=05065000=
+ VALUE 21785000=05065000=
+ A; 21790000=05065000=
+ BEGIN 21795000=05066000=
+ DI:= LOC ABS; 21800000=05066000=
+ SI:= A; 21805000=05066000=
+ DS:= WDS; 21810000=05066000=
+ DI:= DI-8; 21815000=05066000=
+ DS:= RESET 21820000=05066000=
+ END; 21825000=05066000=
+ STREAM PROCEDURE BITEDUST(X, N, ID, LINE, COUNT); 21830000=05067000=
+ VALUE 21835000=05067000=
+ ID, 21840000=05067000=
+ N, 21845000=05067000=
+ COUNT; 21850000=05067000=
+ BEGIN 21855000=05068000=
+ LOCAL T, F, M; 21860000=05068000=
+ DI:= LOC F; 21865000=05069000=
+ SI:= LINE; 21870000=05069000=
+ DS:= WDS; 21875000=05069000=
+ DI:= F; 21880000=05069000=
+ SI:= LOC ID; 21885000=05070000=
+ SI+SI+2; 21890000=05070000=
+ DS:= 6 CHR; 21895000=05070000=
+ 57(DS:= 2 LIT 6" "); 21900000=05070000=
+ SI:= LOC COUNT; 21905000=05071000=
+ SI:= SI+8; 21910000=05071000=
+ DI:= LOC H; 21915000=05071100=
+ DS:= WDS; 21920000=05071100=
+ DI:= LOC LINE; 21925000=05071200=
+ SI:= H; 21930000=05071200=
+ SI:= LOC X; 21935000=05072000=
+ SKIP 2 SB; 21940000=05072000=
+ IF SB THEN 21945000=05073000=
+ BEGIN 21950000=05074000=
+ SI:= X; 21955000=05074000=
+ T:= SI; 21960000=05074000=
+ N(DI:= LOC F;SI:= LINE;DS:= WDS;DI:= F;SI:= LOC COUNT;SI:= 21965000=05086000=
+ SI+6;4(DS:= 3 RESET;3 21970000=05086000=
+ (IF SB THEN DS:= SET ELSE DS:= RESET;SKIP 1 SB));DS:= 2 21975000=05086000=
+ LIT 6" ";SI:= COUNT;SI:= SI+48;COUNT:= SI;SI:= T;6(2(8(DS 21980000=05086000=
+ := 3 RESET;3 21985000=05086000=
+ (IF SB THEN DS:= SET ELSE DS:= RESET;SKIP 1 SB));DS:= LIT 21990000=05086000=
+ 6" ");DS:= LIT 6" ");DI:= LOC LINE;SI:= H;SI:= T;SI:= SI+ 21995000=05086000=
+ 48;T:= SI); 22000000=05086000=
+ END 22005000=05086000=
+ END; 22010000=05086000=
+ BITEDUST(ERRORCOUNT, 63, "PRT ", LINE, 21); 22015000=05087000=
+ FOR T1:= 0 STEP 1 UNTIL 31 DO 22020000=05088000=
+ BITEDUST(INFO[T1, **], 43, "INFO ", LINE, 0); 22025000=05088000=
+ BITEDUST(ELBAT[**], 13, "ELBAT ", LINE, 0); 22030000=05089000=
+ BITEDUST(STACKHEAD[**], 21, "STHEAD", LINE, 0); 22035000=05090000=
+ T1:= MKABS(ERRNUM)-1; 22040000=05091000=
+ T3:= T1; 22045000=05091000=
+ L: T2:= ABS(T3); 22050000=05092000=
+ IF T2.[33:15] = 0 THEN 22055000=05093000=
+ BEGIN 22060000=05093000=
+ T3:= T2.[18:15]; 22065000=05093000=
+ IF T3 = 0 THEN 22070000=05094000=
+ GO TO EXIT 22075000=05094000=
+ ELSE 22080000=05094000=
+ GO TO L 22085000=05094000=
+ END; 22090000=05094000=
+ T4:= 22095000=05095000=
+ IF T2.[33:15] < 512 THEN 22100000=05095000=
+ 0 22105000=05095000=
+ ELSE 22110000=05095000=
+ T2.[33:15] & T2[30:10:2]; 22115000=05095000=
+ L1: P1(LIN[0], T1); 22120000=05096000=
+ IF T1 = T3 THEN 22125000=05096000=
+ BEGIN 22130000=05096000=
+ IF T ^= 0 THEN 22135000=05096000=
+ P2(LIN[0], T4); 22140000=05096000=
+ T1:= T1-1; 22145000=05097000=
+ WRITELINE; 22150000=05097500=
+ T3:= T2.[18:15]; 22155000=05098000=
+ GO TO L 22160000=05098000=
+ END; 22165000=05098000=
+ T1:= T1-1; 22170000=05099000=
+ WRITELINE; 22175000=05099000=
+ GO TO L1; 22180000=05099100=
+ EXIT: 22185000=05100000=
+ END; 22190000=05100000=
+ END 22195000=05101000=
+ END FLAG; 22200000=05101000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22205000=05101000=
+ LABEL 22210000=05101100=
+ ENDOFITALL; 22215000=05101100=
+ 22220000=05102000=
+ COMMENT ERR,IS THE SAME AS FLAG EXCEPT THAT IT MAKES AN ATTEMPT TO 22225000=05102000=
+ RECOVER FROM ERROR SITUATIONS BY SEARCHING FOR A 22230000=05103000=
+ SEMICOLON, END, OR BEGIN; 22235000=05104000=
+ PROCEDURE ERR(ERRNUM); 22240000=05105000=
+ VALUE 22245000=05105000=
+ ERRNUM; 22250000=05105000=
+ INTEGER 22255000=05105000=
+ ERRNUM; 22260000=05105000=
+ BEGIN 22265000=05106000=
+ FLAG(ERRNUM); 22270000=05106000=
+ I:= I-1; 22275000=05107000=
+ IF ERRNUM = 200 THEN 22280000=05107100=
+ I:= I/0; % SEGMENT TOO LARGE 22285000=05107100=
+ IF ERRNUM = 611 THEN 22290000=05107200=
+ I:= I/0; % ERRMAX EXCEEDED 22295000=05107200=
+ DO 22300000=05108000=
+ IF STEPI = BEGINV THEN 22305000=05108000=
+ STMT 22310000=05109000=
+ UNTIL ELCLASS = ENDV OR ELCLASS = SEMICOLON 22315000=05109000=
+ END ERR; 22320000=05109000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22325000=05109000=
+ DEFINE 22330000=05110000=
+ ERROR = ERR #; 22335000=05110000=
+ COMMENT ERROR IS A SYNONM FOR ERR; 22340000=05110000=
+ 22345000=05111000=
+ COMMENT CHECKER IS A SMALL PROCEDURE THAT CHECKS TO SEE THAT THE 22350000=05111000=
+ UPLEVEL ADDRESSING CONVENTIONS ARE OBEYED; 22355000=05112000=
+ PROCEDURE CHECKER(ELBATWORD); 22360000=05113000=
+ VALUE 22365000=05113000=
+ ELBATWORD; 22370000=05113000=
+ REAL 22375000=05113000=
+ ELBATWORD; 22380000=05113000=
+ BEGIN 22385000=05114000=
+ IF MODE >= 2 THEN 22390000=05115000=
+ IF GT1:= ELBATWORD.LVL >= FRSTLEVEL THEN 22395000=05116000=
+ IF GT1 < SUBLEVEL THEN 22400000=05117000=
+ IF ELBATWORD.[9:2] ^= 1 THEN 22405000=05119000=
+ BEGIN 22410000=05119000=
+ FLAG(101); 22415000=05119000=
+ ERRORTOG:= TRUE 22420000=05119000=
+ END 22425000=05120000=
+ END CHECKER; 22430000=05120000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22435000=05120000=
+ COMMENT GIT IS USED TO OBTAIN THE INDEX TO ADDITIONAL INFORMATION 22440000=05121000=
+ GIVEN THE LINK TO THE ELBAT WORD; 22445000=05122000=
+ INTEGER PROCEDURE GIT(L); 22450000=05123000=
+ VALUE 22455000=05123000=
+ L; 22460000=05123000=
+ REAL 22465000=05123000=
+ L; 22470000=05123000=
+ GIT:= TAKE(L).INCR+L.LINK; 22475000=05124000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22480000=05124000=
+ 22485000=05125000=
+ COMMENT GNAT IS USED TO OBTAIN THE PRT ADDRESS OF A GIVEN DESCRIPTOR. 22490000=05125000=
+ IF THE ADDRESS HAS NOT BEEN ASSIGNED, THEN IT USES 22495000=05126000=
+ GETSPACE TO OBTAIN THE PRT ADDRESS; 22500000=05127000=
+ INTEGER PROCEDURE GNAT(L); 22505000=05128000=
+ VALUE 22510000=05128000=
+ L; 22515000=05128000=
+ REAL 22520000=05128000=
+ L; 22525000=05128000=
+ BEGIN 22530000=05129000=
+ REAL 22535000=05130000=
+ A; 22540000=05130000=
+ IF GNAT:= (A:= TAKE(L)).ADDRESS = 0 THEN 22545000=05132000=
+ PUT(A & (GNAT:= GETSPACE(TRUE, L.LINK+1))[16:37:11], L) 22550000=05133000=
+ END GNAT; 22555000=05133000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22560000=05133000=
+ REAL PROCEDURE TAKEFRST; 22565000=05188000=
+ TAKEFRST:= TAKE(ELBAT[I].LINK+ELBAT[I].INCR); 22570000=05189000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22575000=05189000=
+ 22580000=05196000=
+ COMMENT STUFFF DIALS THE F-REGISTER INTO THE F-REGISTER FIELD OF A 22585000=05196000=
+ DESCRIPTOR. THE DESCRIPTOR REMAINS ON THE TOP OF THE 22590000=05197000=
+ STACK; 22595000=05198000=
+ PROCEDURE STUFFF(ADDRESS); 22600000=05199000=
+ VALUE 22605000=05199000=
+ ADDRESS; 22610000=05199000=
+ INTEGER 22615000=05199000=
+ ADDRESS; 22620000=05199000=
+ BEGIN 22625000=05200000=
+ EMITPAIR(ADDRESS, LOD); 22630000=05201000=
+ EMITN(512); 22635000=05202000=
+ EMITD(33, 18, 15) 22640000=05203000=
+ END STUFFF; 22645000=05203000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22650000=05203000=
+ 22655000=05204000=
+ COMMENT LOCAL IS USED TO SEE WHETHER OR NOT A LABEL IS LOCAL TO OUR 22660000=05204000=
+ PRESENT CODE; 22665000=05205000=
+ BOOLEAN PROCEDURE LOCAL(ELBATWORD); 22670000=05206000=
+ VALUE 22675000=05207000=
+ ELBATWORD; 22680000=05207000=
+ REAL 22685000=05207000=
+ ELBATWORD; 22690000=05207000=
+ BEGIN 22695000=05208000=
+ IF ELBATWORD.LVL = LEVEL AND NOT BOOLEAN(ELBATWORD.FORMAL) THEN 22700000=05209000=
+ LOCAL:= TRUE 22705000=05210000=
+ END LOCAL; 22710000=05210000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22715000=05210000=
+ 22720000=05211000=
+ COMMENT PASSFORMAT COMPILES CODE THAT PASSES A FORMAT. TWO ITEMS ARE 22725000=05211000=
+ PASSED - THE ARRAY REFERENCING FORMAT TABLE AND THE 22730000=05212000=
+ STARTING INDEX. THE ROUTINE HANDLES SUPERFORMATS ALSO; 22735000=05213000=
+ PROCEDURE PASSFORMAT; 22740000=05214000=
+ BEGIN 22745000=05215000=
+ INTEGER 22750000=05215000=
+ ADRES; 22755000=05215000=
+ CHECKER(ELBAT[I]); 22760000=05216000=
+ ADRES:= ELBAT[I].ADDRESS; 22765000=05217000=
+ IF BOOLEAN(ELBAT[I].FORMAL) THEN 22770000=05219000=
+ BEGIN 22775000=05219000=
+ EMITV(ADRES); 22780000=05219000=
+ ADRES:= ADRES-1 22785000=05219000=
+ END 22790000=05220000=
+ ELSE 22795000=05220000=
+ BEGIN 22800000=05220000=
+ IF TABLE(I) = SUPERFRMTID THEN 22805000=05222000=
+ EMITL(TAKEFRST) 22810000=05222000=
+ ELSE 22815000=05222000=
+ EMITL(ELBAT[I].INCR) 22820000=05223000=
+ END; 22825000=05223000=
+ IF TABLE(I) = SUPERFRMTID THEN 22830000=05225000=
+ BEGIN 22835000=05225000=
+ BANA; 22840000=05225000=
+ I:= I-1; 22845000=05225000=
+ EMITO(SSP); 22850000=05226000=
+ EMITO(ADD); 22855000=05226000=
+ EMITV(ADRES) 22860000=05226000=
+ END; 22865000=05226000=
+ EMITPAIR(ADRES, LOD) 22870000=05227000=
+ END PASSFORMAT; 22875000=05227000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22880000=05227000=
+ 22885000=05228000=
+ COMMENT STREAMWORDS EITHER RESERVES OR UNRESERVES STREAM RESERVED 22890000=05228000=
+ WORDS - IT COMPLEMENTS THEIR STATE; 22895000=05229000=
+ PROCEDURE STREAMWORDS; 22900000=05230000=
+ BEGIN 22905000=05231000=
+ GT1:= 0; 22910000=05231000=
+ DO BEGIN 22915000=05232000=
+ INFO[1, GT1].LINK:= 22920000=05233000=
+ STACKHEAD[GT2:= (T:= INFO[1, GT1]).ADDRESS]; 22925000=05233000=
+ STACKHEAD[GT2]:= T.LINK; 22930000=05234000=
+ GT1:= GT1+2; 22935000=05235000=
+ END 22940000=05236000=
+ UNTIL BOOLEAN(T.FORMAL) 22945000=05236000=
+ END STREAMWORDS; 22950000=05236000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22955000=05236000=
+ PROCEDURE PROGDESCBLDR(PRTADR, SAV, SIZE, TYPE); 22960000=05245000=
+ VALUE 22965000=05246000=
+ PRTADR, 22970000=05246000=
+ SAV, 22975000=05246000=
+ SIZE, 22980000=05246000=
+ TYPE; 22985000=05246000=
+ INTEGER 22990000=05247000=
+ PRTADR, 22995000=05247000=
+ SIZE, 23000000=05247000=
+ TYPE; 23005000=05247000=
+ BOOLEAN 23010000=05247000=
+ SAV; 23015000=05247000=
+ BEGIN 23020000=05247500=
+ PRTADR:= PRTADR.[38:10]; 23025000=05247500=
+ IF SAV THEN 23030000=05248000=
+ BEGIN 23035000=05248000=
+ PRT[PRTADR]:= (IF TYPE = LDES THEN SIZE ELSE CORADR) & 23040000=05249000=
+ SIZE[8:28:10] & TYPE[1:43:5] & 3[6:46:2]; 23045000=05249000=
+ IF TYPE ^= LDES THEN 23050000=05250000=
+ CORADR:= CORADR+SIZE; 23055000=05250000=
+ END 23060000=05252000=
+ ELSE 23065000=05252000=
+ BEGIN 23070000=05252000=
+ PRT[PRTADR]:= 0 & DISKADR[18:33:15] & SIZE[8:38:10] & TYPE[1:43:5]23075000=05253000=
+ & 1[6:46:2]; 23080000=05253000=
+ DISKADR:= (SIZE+29) DIV 30+DISKADR; 23085000=05254000=
+ END; 23090000=05254500=
+ END PROGDESCBLDR; 23095000=05255000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23100000=05255000=
+ 23105000=05267000=
+ COMMENT DOTSYNTAX ANALYSES THE SYNTAX OF A PARTIAL WORD DESIGNATOR. 23110000=05267000=
+ IT REPORTS IF AN ERROR IS FOUND. IT RETURNS WITH THE 23115000=05268000=
+ LITERALS INVOLVED; 23120000=05269000=
+ BOOLEAN PROCEDURE DOTSYNTAX(FIRST, SECOND); 23125000=05270000=
+ INTEGER 23130000=05271000=
+ FIRST, 23135000=05271000=
+ SECOND; 23140000=05271000=
+ BEGIN 23145000=05272000=
+ LABEL 23150000=05273000=
+ EXIT; 23155000=05273000=
+ IF STEPI = LFTBRKET THEN 23160000=05274000=
+ IF STEPI = LITNO THEN 23165000=05275000=
+ IF STEPI = COLON THEN 23170000=05276000=
+ IF STEPI = LITNO THEN 23175000=05277000=
+ IF STEPI = RTBRKET THEN 23180000=05278000=
+ COMMENT IF TESTS ARE PASSED THEN SYNTAX IS CORRECT; 23185000=05279000=
+ IF(FIRST:= ELBAT[I-3].ADDRESS)* 23190000=05281000=
+ (SECOND:= ELBAT[I-1].ADDRESS) ^= 0 23195000=05281000=
+ THEN 23200000=05281000=
+ IF FIRST+SECOND <= 48 THEN 23205000=05282000=
+ COMMENT IF TESTS ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 23210000=05283000=
+ GO TO EXIT; 23215000=05284000=
+ ERR(114); 23220000=05285000=
+ COMMENT ERROR IF SYNTAX OR RANGE FAILS; 23225000=05285000=
+ DOTSYNTAX:= TRUE; 23230000=05286000=
+EXIT: 23235000=05286000=
+ END DOTSYNTAX; 23240000=05286000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23245000=05286000=
+ BOOLEAN PROCEDURE RANGE(LOWER, UPPER); 23250000=05297000=
+ VALUE 23255000=05298000=
+ LOWER, 23260000=05298000=
+ UPPER; 23265000=05298000=
+ REAL 23270000=05299000=
+ LOWER, 23275000=05299000=
+ UPPER; 23280000=05299000=
+ COMMENT RANGE TESTS THE CLASS OF THE ITEM IN ELBAT[I] TO SEE IF 23285000=05300000=
+ IT IS GREATER THAN OR EQUAL TO LOWER OR LESS THAN OR EQUAL TO 23290000=05301000=
+ UPPER AND SETS RANGE TO TRUE OR FALSE ACCORDINGLY. THE ITEMS 23295000=05302000=
+ CLASS MUST BE IN ELCLASS; 23300000=05303000=
+ RANGE:= ELCLASS >= LOWER AND ELCLASS <= UPPER; 23305000=05304000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23310000=05304000=
+ 23315000=05305000=
+ COMMENT GET OBTAINS A SYLLABLE FROM EDOC, THE ARRAY INTO WHICH CODE IS 23320000=05305000=
+ EMITTED; 23325000=05306000=
+ INTEGER PROCEDURE GET(L); 23330000=05307000=
+ VALUE 23335000=05307000=
+ L; 23340000=05307000=
+ REAL 23345000=05307000=
+ L; 23350000=05307000=
+ BEGIN 23355000=05308000=
+ INTEGER 23360000=05309000=
+ STREAM PROCEDURE GETSYL(W, S); 23365000=05309000=
+ VALUE 23370000=05309000=
+ S; 23375000=05309000=
+ BEGIN 23380000=05310000=
+ DI:= LOC GETSYL; 23385000=05310000=
+ DI:= DI+6; 23390000=05310000=
+ SI:= W; 23395000=05311000=
+ SI:= SI+S; 23400000=05311000=
+ SI:= SI+S; 23405000=05311000=
+ DS:= 2 CHR 23410000=05311000=
+ END; 23415000=05311000=
+ GET:= GETSYL(CODE(L DIV 4+1), L.[46:2]); 23420000=05312000=
+ END GET; 23425000=05312000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23430000=05312000=
+ 23435000=05313000=
+ COMMENT CALL SWITCH PERFORMS THE FINAL MESS OF GETTING A PROPER DE- 23440000=05313000=
+ SCRIPTOR TO THE TOP OF THE STACK; 23445000=05314000=
+ PROCEDURE CALLSWITCH(H); 23450000=05315000=
+ VALUE 23455000=05315000=
+ H; 23460000=05315000=
+ REAL 23465000=05315000=
+ H; 23470000=05315000=
+ BEGIN 23475000=05316000=
+ EMITV(GNAT(H)); 23480000=05316000=
+ EMITO(PRTE); 23485000=05316000=
+ EMITO(LOD) 23490000=05316000=
+ END CALLSWITCH; 23495000=05316000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23500000=05316000=
+ PROCEDURE WRITEPRT(PORS, N, GS); 23505000=05325010=
+ VALUE 23510000=05325010=
+ PORS, 23515000=05325010=
+ N, 23520000=05325010=
+ GS; 23525000=05325010=
+ INTEGER 23530000=05325010=
+ PORS, 23535000=05325010=
+ N, 23540000=05325010=
+ GS; 23545000=05325010=
+ BEGIN 23550000=05325020=
+ LABEL 23555000=05325030=
+ EXIT; 23560000=05325030=
+ STREAM PROCEDURE FILLIT(LIN, PORS, CELL, N, ID); 23565000=05325040=
+ VALUE 23570000=05325050=
+ PORS, 23575000=05325050=
+ CELL, 23580000=05325050=
+ N; 23585000=05325050=
+ BEGIN 23590000=05325060=
+ LOCAL COUNT; 23595000=05325070=
+ LABEL 23600000=05325080=
+ M0, 23605000=05325080=
+ M1, 23610000=05325080=
+ M2, 23615000=05325080=
+ M3, 23620000=05325080=
+ M4, 23625000=05325080=
+ M5, 23630000=05325080=
+ M6, 23635000=05325080=
+ M7, 23640000=05325080=
+ XIT; 23645000=05325080=
+ SI:= LOC PORS; 23650000=05325090=
+ SI:= SI+3; 23655000=05325090=
+ DI:= LIN; % "PRT" OR "STACK". 23660000=05325090=
+ IF SC = 6"P" THEN 23665000=05325100=
+ BEGIN 23670000=05325110=
+ DS:= 3 CHR; 23675000=05325110=
+ DS:= LIT 6"("; 23680000=05325110=
+ END 23685000=05325120=
+ ELSE 23690000=05325120=
+ BEGIN 23695000=05325120=
+ DS:= 5 CHR; 23700000=05325130=
+ DS:= LIT 6"("; 23705000=05325130=
+ SI:= LOC CELL; 23710000=05325130=
+ SI:= SI+5; 23715000=05325130=
+ IF SC >= 6"6" THEN 23720000=05325140=
+ DS:= 2 LIT 6"F-" 23725000=05325140=
+ ELSE 23730000=05325140=
+ DS:= 2 LIT 6"F+"; 23735000=05325140=
+ COUNT:= DI; 23740000=05325150=
+ DI:= LOC CELL; 23745000=05325150=
+ DI:= DI+4; 23750000=05325150=
+ DS:= 11 RESET; 23755000=05325160=
+ DI:= COUNT; 23760000=05325160=
+ END; 23765000=05325170=
+ SI:= LOC CELL; 23770000=05325180=
+ SI:= SI+4; 23775000=05325180=
+ TALLY:= 4; % LOCATION. 23780000=05325180=
+ 3(IF SC = 6"0" THEN % DONT PRINT LEADING ZEROES. 23785000=05325190=
+ BEGINSI:= SI+1;TALLY:= TALLY+63 23790000=05325200=
+ ENDELSE 23795000=05325200=
+ JUMP OUT); 23800000=05325200=
+ COUNT:= TALLY; 23805000=05325210=
+ DS:= COUNT CHR; 23810000=05325210=
+ TALLY:= 0; 23815000=05325210=
+ COUNT:= TALLY; 23820000=05325210=
+ DS:= 4 LIT 6") = "; 23825000=05325220=
+ CELL:= DI; % SAVE OUR PLACE. 23830000=05325220=
+ CI:= CI+N; 23835000=05325230=
+ GO M0; 23840000=05325240=
+ GO M1; 23845000=05325250=
+ GO M2; 23850000=05325260=
+ GO M3; 23855000=05325270=
+ GO M4; 23860000=05325280=
+ GO M5; 23865000=05325290=
+ GO M6; 23870000=05325300=
+ GO M7; 23875000=05325310=
+ M0: SI:= ID; 23880000=05325320=
+ SI:= SI+2; 23885000=05325320=
+ DI:= LOC COUNT; 23890000=05325320=
+ DI:= DI+7; 23895000=05325330=
+ DS:= CHR; 23900000=05325330=
+ DI:= CELL; 23905000=05325330=
+ DS:= COUNT CHR; 23910000=05325330=
+ GO XIT; 23915000=05325340=
+ M1: DI:= CELL; 23920000=05325350=
+ DS:= 19 LIT 6"*TEMPORARY STORAGE*"; 23925000=05325350=
+ GO XIT; 23930000=05325350=
+ M2: DI:= CELL; 23935000=05325360=
+ DS:= 36 LIT 6"*LIST, LABEL, OR SEGMENT DESCRIPTOR*"; 23940000=05325370=
+ GO XIT; 23945000=05325370=
+ M3: DI:= CELL; 23950000=05325380=
+ DS:= 27 LIT 6"*CASE STATEMENT DESCRIPTOR*"; 23955000=05325380=
+ GO XIT; 23960000=05325380=
+ M4: DI:= CELL; 23965000=05325390=
+ DS:= 19 LIT 6"*FORMAT DESCRIPTOR*"; 23970000=05325390=
+ GO XIT; 23975000=05325390=
+ M5: DI:= CELL; 23980000=05325400=
+ DS:= 24 LIT 6"*OUTER BLOCK DESCRIPTOR*"; 23985000=05325400=
+ GO XIT; 23990000=05325400=
+ M6: DI:= CELL; 23995000=05325410=
+ DS:= 20 LIT 6"*SEGMENT DESCRIPTOR*"; 24000000=05325410=
+ GO XIT; 24005000=05325410=
+ M7: DI:= CELL; 24010000=05325420=
+ DS:= 18 LIT 6"*LABEL DESCRIPTOR*"; 24015000=05325420=
+ XIT: 24020000=05325440=
+ END FILLIT; 24025000=05325440=
+ ELSEBLANKET(14, LIN); 24030000=05325450=
+ IF N = 1 THEN 24035000=05325460=
+ FILLIT(LIN, PORS, GS, 0, ACCUM[1]) 24040000=05325470=
+ ELSE 24045000=05325470=
+ IF N > 1 THEN 24050000=05325470=
+ FILLIT(LIN, PORS, GS, 0, INFO[N.LINKR, N.LINKC]) 24055000=05325480=
+ ELSE 24060000=05325480=
+ FILLIT(LIN, PORS, GS, ABS(N), N); 24065000=05325480=
+ IF NOHEADING THEN 24070000=05325490=
+ DATIME; 24075000=05325490=
+ WRITELINE; 24080000=05325490=
+ END WRITEPRT; 24085000=05325500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24090000=05325500=
+ 24095000=05326000=
+ COMMENT GETSPACE MAKES ASSIGNMENTS TO VARIABLES AND DESCRIPTORS IN 24100000=05326000=
+ THE STACK AND PRT. PERMANENT TELLS WHETHER IT IS A 24105000=05327000=
+ PERMANENTLY ASSIGNED CELL (ALWAYS IN PRT) OR NOT. NON 24110000=05328000=
+ PERMANENT CELLS ARE EITHER IN STACK OR PRT ACCORDING TO 24115000=05329000=
+ MODE. CARE IS TAKEN TO REUSE NON PERMANENT PRT CELLS; 24120000=05330000=
+ INTEGER PROCEDURE GETSPACE(PERMANENT, L); 24125000=05331000=
+ VALUE 24130000=05331000=
+ PERMANENT, 24135000=05331000=
+ L; 24140000=05331000=
+ BOOLEAN 24145000=05333000=
+ PERMANENT; 24150000=05333000=
+ INTEGER 24155000=05333000=
+ L; 24160000=05333000=
+ BEGIN 24165000=05334000=
+ LABEL 24170000=05334000=
+ L1, 24175000=05334000=
+ L2, 24180000=05334000=
+ EXIT; 24185000=05334000=
+ STREAM PROCEDURE DOIT(C, A, I, S); 24190000=05334100=
+ VALUE 24195000=05334100=
+ C, 24200000=05334100=
+ A; 24205000=05334100=
+ BEGIN 24210000=05334200=
+ LOCAL N; 24215000=05334200=
+ DI:= S; 24220000=05334300=
+ DS:= 8 LIT 6" "; 24225000=05334300=
+ SI:= S; 24230000=05334300=
+ DS:= 9 WDS; 24235000=05334300=
+ SI:= I; 24240000=05334400=
+ SI:= SI+2; 24245000=05334400=
+ DI:= LOC N; 24250000=05334400=
+ DI:= DI+7; 24255000=05334400=
+ DS:= CHR; 24260000=05334400=
+ DI:= S; 24265000=05334500=
+ SI:= LOC C; 24270000=05334500=
+ 2(DS:= 4 DEC); 24275000=05334500=
+ SI:= I; 24280000=05334600=
+ SI:= SI+3; 24285000=05334600=
+ DS:= N CHR; 24290000=05334600=
+ END; 24295000=05334700=
+ BOOLEAN 24300000=05343000=
+ M, 24305000=05343000=
+ Q; 24310000=05343000=
+ INTEGER 24315000=05344000=
+ ROW, 24320000=05344000=
+ COL, 24325000=05344000=
+ GS; 24330000=05344000=
+ IF NOT (STREAMTOG AND(LEVEL > 2)) THEN 24335000=05344400=
+ IF STEPI = RELOP THEN 24340000=05344500=
+ BEGIN 24345000=05344510=
+ IF STEPI > IDMAX THEN 24350000=05344530=
+ BEGIN 24355000=05344540=
+ IF ELCLASS = ADOP THEN 24360000=05344560=
+ IF ELBAT[I].ADDRESS = SUBOP THEN 24365000=05344580=
+ GS:= FZERO 24370000=05344580=
+ ELSE 24375000=05344580=
+ GS:= 512; 24380000=05344580=
+ BEGIN 24385000=05344600=
+ GS:= 0; 24390000=05344600=
+ I:= I-1 24395000=05344600=
+ END; 24400000=05344600=
+ IF STEPI ^= LITNO THEN 24405000=05344610=
+ FLAG(51); 24410000=05344610=
+ IF ELBAT[I].ADDRESS >= 512 THEN 24415000=05344615=
+ GS:= 1024; 24420000=05344615=
+ GS:= GS+ELBAT[I].ADDRESS 24425000=05344630=
+ END 24430000=05344650=
+ ELSE 24435000=05344650=
+ BEGIN 24440000=05344650=
+ GS:= ELBAT[I].ADDRESS; 24445000=05344660=
+ IF GS = 0 THEN 24450000=05344661=
+ FLAG(51); 24455000=05344661=
+ IF GS >= FZERO AND GS <= 1023 THEN 24460000=05344662=
+ GS:= -GS; 24465000=05344662=
+ IF STEPI ^= ADOP THEN 24470000=05344670=
+ I:= I-1 24475000=05344670=
+ ELSE 24480000=05344670=
+ BEGIN 24485000=05344680=
+ STEPIT; 24490000=05344690=
+ GS:= ELBAT[I].ADDRESS+ 24495000=05344720=
+ (IF ELBAT[I-1].ADDRESS = SUBOP THEN-GS ELSE+GS); 24500000=05344720=
+ END; 24505000=05344730=
+ GS:= ABS(GS); 24510000=05344740=
+ END; 24515000=05344750=
+ Q:= GS < 512 OR GS > 1023; 24520000=05344750=
+ GO TO EXIT 24525000=05344770=
+ END 24530000=05344770=
+ ELSE 24535000=05344770=
+ I:= I-1; 24540000=05344770=
+ IF MODE = 0 OR PERMANENT THEN 24545000=05346000=
+ BEGIN 24550000=05346000=
+ IF PRTIMAX > 1023 THEN 24555000=05347000=
+ FLAG(148); 24560000=05347000=
+ IF ASTOG THEN 24565000=05348000=
+ FLAG(505); 24570000=05348000=
+ PRTI:= PRTIMAX:= (GS:= PRTIMAX)+1; 24575000=05350000=
+ IF STUFFTOG THEN 24580000=05350100=
+ IF(M:= (LEVEL = 1 AND KLASSF > 19)) OR 24585000=05350120=
+ (LEVEL >= 3 AND ELBAT[I].CLASS = LABELID) 24590000=05350120=
+ THEN 24595000=05350120=
+ BEGIN 24600000=05350120=
+ IF NOT M THEN 24605000=05350140=
+ DOIT(LABELID, GS, 24610000=05350180=
+ INFO[(ELBAT[I]).LINKR, (ELBAT[I].LINKC+1)], TWXA[0]) 24615000=05350180=
+ ELSE 24620000=05350180=
+ DOIT(KLASSF, GS, 24625000=05350300=
+ INFO[(LASTINFO+1).LINKR, (LASTINFO+1).LINKC], TWXA[0]); 24630000=05350300=
+ WRITE(STUFF, 10, TWXA[**]) 24635000=05350300=
+ END; 24640000=05350300=
+ END 24645000=05369000=
+ ELSE 24650000=05369000=
+ BEGIN 24655000=05369000=
+ IF STACKCTR > 767 THEN 24660000=05370000=
+ FLAG(149); 24665000=05370000=
+ STACKCTR:= (GS:= STACKCTR)+1; 24670000=05371000=
+ Q:= FALSE; 24675000=05371000=
+ GO TO EXIT 24680000=05372000=
+ END; 24685000=05372000=
+L2: IF GS >= 512 THEN 24690000=05373000=
+ GS:= GS+1024; 24695000=05373000=
+ Q:= TRUE; 24700000=05374000=
+EXIT: 24705000=05375000=
+ GETSPACE:= GS; 24710000=05375000=
+ IF GS >= NESTCTR AND GS < FZERO THEN 24715000=05375100=
+ NESTCTR:= GS+1; 24720000=05375100=
+ IF GS > 1023 THEN 24725000=05376000=
+ GS:= GS-1024; 24730000=05376000=
+ IF PRTOG THEN 24735000=05376100=
+ WRITEPRT(IF Q THEN 6"PRT " ELSE 6"STACK", L, B2D(GS)); 24740000=05376100=
+ END GETSPACE; 24745000=05378000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24750000=05378000=
+ REAL PROCEDURE DEPTH(I); 24755000=05400000=
+ VALUE 24760000=05400000=
+ I; 24765000=05400000=
+ REAL 24770000=05400000=
+ I; 24775000=05400000=
+ BEGIN 24780000=05401000=
+ REAL 24785000=05401000=
+ J, 24790000=05401000=
+ K, 24795000=05401000=
+ T, 24800000=05401000=
+ S, 24805000=05401000=
+ M; 24810000=05401000=
+ IF T:= NESTPRT[I] < 0 THEN 24815000=05402000=
+ BEGIN 24820000=05402100=
+ DEPTH:= CALL[T.[22:13]-1].[35:13]; 24825000=05402100=
+ IF NESTPRT[I].[2:1] = 0 THEN 24830000=05402200=
+ NESTCUR:= NESTCUR+1; 24835000=05402200=
+ NESTPRT[I].[2:1]:= 1; 24840000=05402300=
+ END 24845000=05403000=
+ ELSE 24850000=05403000=
+ IF T.[9:13] ^= 0 THEN 24855000=05403000=
+ DEPTH:= T.[9:13] 24860000=05404000=
+ ELSE 24865000=05404000=
+ BEGIN 24870000=05404000=
+ M:= 0; 24875000=05404000=
+ NESTPRT[I]:= -T; 24880000=05404000=
+ J:= T.[22:13]; 24885000=05405000=
+ K:= CALL[J-1].[22:13]; 24890000=05405000=
+ FOR J:= J STEP 1 UNTIL K DO 24895000=05406000=
+ IF S:= DEPTH(CALL[J]) > M THEN 24900000=05407000=
+ M:= S; 24905000=05407000=
+ M:= DEPTH:= M+CALL[T.[22:13]-1].[35:13]; 24910000=05409000=
+ IF NESTCUR ^= 0 THEN 24915000=05409100=
+ IF NESTPRT[I].[2:1] = 0 THEN 24920000=05409200=
+ ELSE 24925000=05409300=
+ BEGIN 24930000=05409300=
+ T:= T & M[9:35:13]; 24935000=05409300=
+ NESTCUR:= NESTCUR-1 24940000=05409300=
+ END 24945000=05409400=
+ ELSE 24950000=05409400=
+ T:= T & M[9:35:13]; 24955000=05409400=
+ NESTPRT[I]:= T; 24960000=05409500=
+ END; 24965000=05410000=
+ END; 24970000=05411000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24975000=05411000=
+ PROCEDURE NESTSORT(L, U); 24980000=05411100=
+ VALUE 24985000=05411100=
+ L, 24990000=05411100=
+ U; 24995000=05411100=
+ REAL 25000000=05411100=
+ L, 25005000=05411100=
+ U; 25010000=05411100=
+ FORWARD; 25015000=05411100=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25020000=05411100=
+ PROCEDURE SORTNEST; 25025000=05412000=
+ BEGIN 25030000=05413000=
+ ARRAY 25035000=05413000=
+ A[0:14]; 25040000=05413000=
+ REAL 25045000=05414000=
+ I, 25050000=05414000=
+ J, 25055000=05414000=
+ K, 25060000=05414000=
+ T; 25065000=05414000=
+ REAL 25070000=05414100=
+ P, 25075000=05414100=
+ Q; 25080000=05414100=
+ STREAM PROCEDURE NESTFORM(I, N, L, A) VALUE I, N; 25085000=05415000=
+ BEGIN 25090000=05416000=
+ LOCAL S; 25095000=05416000=
+ DI:= A; 25100000=05417000=
+ 15(DS:= 8 LIT 6" "); 25105000=05417000=
+ DI:= LOC S; 25110000=05418000=
+ DI:= DI+7; 25115000=05418000=
+ SI:= L; 25120000=05418000=
+ SI:= SI+10; 25125000=05418000=
+ DS:= CHR; 25130000=05418000=
+ DI:= A; 25135000=05419000=
+ DI:= DI+I; 25140000=05419000=
+ A:= DI; 25145000=05419000=
+ DI:= DI+6; 25150000=05420000=
+ DS:= S CHR; 25155000=05420000=
+ DI:= A; 25160000=05421000=
+ SI:= LOC N; 25165000=05421000=
+ DS:= 4 DEC; 25170000=05421000=
+ DI:= A; 25175000=05422000=
+ DS:= 3 FILL; 25180000=05422000=
+ END; 25185000=05423000=
+ FOR I:= PRTBASE STEP 1 UNTIL PRTOP DO 25190000=05424000=
+ IF NESTPRT[I] ^= 0 THEN 25195000=05425000=
+ BEGIN 25200000=05425100=
+ SORTPRT[Q]:= I; 25205000=05425100=
+ Q:= Q+1 25210000=05425100=
+ END; 25215000=05425100=
+ NESTSORT(0, Q:= Q-1); 25220000=05425200=
+ FOR P:= 0 STEP 1 UNTIL Q DO 25225000=05425300=
+ BEGIN 25230000=05425400=
+ I:= SORTPRT[P]; 25235000=05425400=
+ T:= NESTPRT[I]; 25240000=05425400=
+ NESTFORM(0, DEPTH(I), INFO[T.LINKR, T.LINKC], A); 25245000=05426000=
+ WRITE(LINE[DBL], 15, A[**]); 25250000=05427000=
+ J:= T.[22:13]; 25255000=05428000=
+ K:= CALL[J-1].[22:13]; 25260000=05428000=
+ FOR J:= J STEP 1 UNTIL K DO 25265000=05429000=
+ BEGIN 25270000=05430000=
+ I:= CALL[J]; 25275000=05430000=
+ T:= NESTPRT[I]; 25280000=05430500=
+ NESTFORM(32, DEPTH(I), INFO[T.LINKR, T.LINKC], A); 25285000=05431000=
+ WRITE(LINE, 15, A[**]); 25290000=05432000=
+ END; 25295000=05433000=
+ WRITE(LINE[DBL]); 25300000=05434000=
+ END; 25305000=05435000=
+ END; 25310000=05436000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25315000=05436000=
+ PROCEDURE NESTSORT(L, U); 25320000=05437000=
+ VALUE 25325000=05437000=
+ L, 25330000=05437000=
+ U; 25335000=05437000=
+ REAL 25340000=05437000=
+ L, 25345000=05437000=
+ U; 25350000=05437000=
+ BEGIN 25355000=05438000=
+ REAL 25360000=05438000=
+ I, 25365000=05438000=
+ J, 25370000=05438000=
+ K, 25375000=05438000=
+ M; 25380000=05438000=
+ LABEL 25385000=05439000=
+ AGAIN, 25390000=05439000=
+ TOP, 25395000=05439000=
+ BOTTOM, 25400000=05439000=
+ EXIT; 25405000=05439000=
+ IF L ^= U THEN 25410000=05440000=
+ BEGIN 25415000=05441000=
+ M:= (U+L) DIV 2; 25420000=05441000=
+ NESTSORT(L, M); 25425000=05442000=
+ NESTSORT(M+1, U); 25430000=05443000=
+ I:= K:= L; 25435000=05444000=
+ J:= M+1 AGAIN: 25440000=05445000=
+ IF I > M THEN 25445000=05445000=
+ GO TO TOP; 25450000=05445000=
+ IF J > U THEN 25455000=05446000=
+ GO TO BOTTOM; 25460000=05446000=
+ GT1:= NESTPRT[SORTPRT[I].[33:15]].LINK; 25465000=05447000=
+ GT2:= NESTPRT[SORTPRT[J].[33:15]].LINK; 25470000=05448000=
+ IF INFO[GT1.LINKR, (GT1+1).LINKC].[18:30] <= 25475000=05450000=
+ INFO[GT2.LINKR, (GT2+1).LINKC].[18:30] 25480000=05450000=
+ THEN 25485000=05450000=
+ GO TO BOTTOM; 25490000=05451000=
+ TOP: 25495000=05452000=
+ SORTPRT[K].[18:15]:= SORTPRT[J]; 25500000=05452000=
+ J:= J+1; 25505000=05453000=
+ IF K:= K+1 <= U THEN 25510000=05454000=
+ GO TO AGAIN 25515000=05454000=
+ ELSE 25520000=05454000=
+ GO TO EXIT; 25525000=05454000=
+ BOTTOM: 25530000=05455000=
+ SORTPRT[K].[18:15]:= SORTPRT[I]; 25535000=05455000=
+ I:= I+1; 25540000=05456000=
+ IF K:= K+1 <= U THEN 25545000=05457000=
+ GO TO AGAIN 25550000=05457000=
+ ELSE 25555000=05457000=
+ GO TO EXIT; 25560000=05457000=
+ EXIT: 25565000=05458000=
+ FOR I:= L STEP 1 UNTIL U DO 25570000=05458000=
+ SORTPRT[I]:= SORTPRT[I].[18:15]; 25575000=05459000=
+ END; 25580000=05460000=
+ END; 25585000=05461000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25590000=05461000=
+ 25595000=06000000=
+ COMMENT ROUTINES IN THIS SECTION COMPILE CODE FOR ALL EXPRESSIONS;25600000=06000000=
+ 25605000=06001000=
+ COMMENT AEXP IS THE ARITHMETIC EXRESSION ROUTINE; 25610000=06001000=
+ PROCEDURE AEXP; 25615000=06002000=
+ BEGIN 25620000=06003000=
+ IF ELCLASS = IFV THEN 25625000=06005000=
+ BEGIN 25630000=06005000=
+ IF IFEXP ^= ATYPE THEN 25635000=06005000=
+ ERR(102) 25640000=06006000=
+ END 25645000=06006000=
+ ELSE 25650000=06006000=
+ BEGIN 25655000=06006000=
+ ARITHSEC; 25660000=06006000=
+ SIMPARITH 25665000=06006000=
+ END 25670000=06007000=
+ END AEXP; 25675000=06007000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25680000=06007000=
+ 25685000=06008000=
+ COMMENT ARITHSEC COMPILES FIRST PRIMARY IN AN ARITHMETIC EXPRESSION. 25690000=06008000=
+ IN PARTICULAR IT HANDLES P, +P, -P, AND -P*Q WHERE P 25695000=06009000=
+ AND Q ARE PRIMARIES; 25700000=06010000=
+ PROCEDURE ARITHSEC; 25705000=06011000=
+ BEGIN 25710000=06012000=
+ IF ELCLASS = ADOP THEN 25715000=06014000=
+ BEGIN 25720000=06014000=
+ STEPIT; 25725000=06015000=
+ IF ELBAT[I-1].ADDRESS ^= SUB THEN 25730000=06016000=
+ PRIMARY 25735000=06017000=
+ ELSE 25740000=06017000=
+ BEGIN 25745000=06017000=
+ PRIMARY; 25750000=06018000=
+ ENDTOG:= LINKTOG; 25755000=06021000=
+ EMITO(CHS); 25760000=06021000=
+ LINKTOG:= ENDTOG; 25765000=06022000=
+ ENDTOG:= FALSE 25770000=06022000=
+ END 25775000=06023000=
+ END 25780000=06023000=
+ ELSE 25785000=06023000=
+ PRIMARY 25790000=06023000=
+ END ARITHSEC; 25795000=06023000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25800000=06023000=
+ 25805000=06024000=
+ COMMENT SIMPARITH COMPILES SIMPLE ARITHMETIC EXPRESSIONS ON THE 25810000=06024000=
+ ASSUMPTION THAT AN ARITHMETIC PRIMARY HAS ALREADY BEEN 25815000=06025000=
+ COMPILED. IT ALSO HANDLES THE CASE OF A CONCATENATE 25820000=06026000=
+ WHERE ACTUALPARAPART CAUSED THE VARIABLE ROUTINE TO 25825000=06027000=
+ COMPILE ONLY PART OF A PRIMARY. MOST OF THE WORK OF 25830000=06028000=
+ SIMPARITH IS DONE BY ARITHCOMP, AN ARTIFIAL ROUTINE 25835000=06029000=
+ WHICH DOES THE HIERARCHY ANALYSIS USING RECURSION. 25840000=06030000=
+ ARITHCOMP IS A SUBROUTINE ONLY TO GET THIS RECURSION; 25845000=06031000=
+ PROCEDURE SIMPARITH; 25850000=06032000=
+ BEGIN 25855000=06033000=
+ WHILE ELCLASS = AMPERSAND DO 25860000=06035000=
+ BEGIN 25865000=06035000=
+ STEPIT; 25870000=06035000=
+ PRIMARY; 25875000=06035000=
+ PARSE 25880000=06035000=
+ END; 25885000=06035000=
+ WHILE ELCLASS >= EQVOP DO 25890000=06036000=
+ ARITHCOMP 25895000=06036000=
+ END; 25900000=06036000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25905000=06036000=
+ 25910000=06037000=
+ COMMENT ARITHCOMP IS THE GUTS OF THE ARITHMETIC EXPRESSION ROUTINE 25915000=06037000=
+ ANALYSIS. IT CALLS PRIMARY AT APPROPRIATE TIMES AND 25920000=06038000=
+ EMITS THE ARITHMETIC OPERATORS. THE HIERARCHY ANALYSIS 25925000=06039000=
+ IS OBTAINED BY RECURSION; 25930000=06040000=
+ PROCEDURE ARITHCOMP; 25935000=06041000=
+ BEGIN 25940000=06042000=
+ INTEGER 25945000=06042000=
+ OPERATOR, 25950000=06042000=
+ OPCLASS; 25955000=06042000=
+ DO BEGIN 25960000=06043000=
+ OPERATOR:= 1 & ELBAT[I][36:17:10]; 25965000=06044000=
+ COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 25970000=06045000=
+ ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [17:10] 25975000=06046000=
+ OF THE ELBAT WORD; 25980000=06047000=
+ OPCLASS:= ELCLASS; 25985000=06048000=
+ STEPIT; 25990000=06049000=
+ PRIMARY; 25995000=06049000=
+ BEGIN 26000000=06051000=
+ WHILE OPCLASS < ELCLASS DO 26005000=06052000=
+ ARITHCOMP; 26010000=06052000=
+ COMMENT THE CLASSES ARE ARRANGED IN ORDER OF HIERARCHY; 26015000=06053000=
+ EMIT(OPERATOR); 26020000=06054000=
+ EMIT(0); 26025000=06054100=
+ L:= L-1; 26030000=06054100=
+ STACKCT:= 1; 26035000=06054150=
+ END; 26040000=06054200=
+ END 26045000=06055000=
+ UNTIL OPCLASS ^= ELCLASS 26050000=06055000=
+ END ARITHCOMP; 26055000=06055000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26060000=06055000=
+ INTEGER PROCEDURE EXPRSS; 26065000=06057000=
+ BEGIN 26070000=06057000=
+ AEXP; 26075000=06057000=
+ EXPRSS:= ATYPE 26080000=06057000=
+ END; 26085000=06057000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26090000=06057000=
+ PROCEDURE POLISHER(EXPECT); 26095000=06060000=
+ VALUE 26100000=06060000=
+ EXPECT; 26105000=06060000=
+ REAL 26110000=06060000=
+ EXPECT; 26115000=06060000=
+ BEGIN 26120000=06061000=
+ LABEL 26125000=06061000=
+ EXIT; 26130000=06061000=
+ LABEL 26135000=06061900=
+ EL; 26140000=06061900=
+ REAL 26145000=06062000=
+ COUNT, 26150000=06062000=
+ T1, 26155000=06062000=
+ T2; 26160000=06062000=
+ BOOLEAN 26165000=06063000=
+ S; 26170000=06063000=
+ REAL 26175000=06063500=
+ SSS; 26180000=06063500=
+ INTEGER 26185000=06063500=
+ Z; 26190000=06063500=
+ STREAM PROCEDURE WRITEOUT(C, N, L); 26195000=06064000=
+ VALUE 26200000=06064000=
+ C, 26205000=06064000=
+ N; 26210000=06064000=
+ BEGIN 26215000=06065000=
+ DI:= L; 26220000=06065000=
+ DS:= 2 LIT 6"S="; 26225000=06065000=
+ SI:= LOC C; 26230000=06066000=
+ SI:= SI+7; 26235000=06066000=
+ DS:= CHR; 26240000=06066000=
+ SI:= LOC N; 26245000=06067000=
+ DS:= DEC; 26250000=06067000=
+ 58(DS:= 2 LIT 6" "); 26255000=06067500=
+ END; 26260000=06068000=
+ SSS:= STACKCTR; 26265000=06068500=
+ IF STEPI ^= LEFTPAREN THEN 26270000=06069000=
+ GO TO EXIT; 26275000=06069000=
+ DO BEGIN 26280000=06070000=
+ IF STEPI >= OPERATORS THEN 26285000=06071000=
+ BEGIN 26290000=06072000=
+ T1:= (T2:= ELBAT[I]).ADDRESS; 26295000=06072000=
+ S:= S OR COUNT-T2.[11:3] < 0; 26300000=06074000=
+ COUNT:= T2.[14:2]+COUNT-2; 26305000=06075000=
+ IF ELCLASS >= OPERATOR THEN 26310000=06076000=
+ BEGIN 26315000=06077000=
+ IF T1 ^= 0 THEN 26320000=06077000=
+ EMITO(T1); 26325000=06077000=
+ BEGIN 26330000=06078000=
+ T1:= T2.LINK+2; 26335000=06079000=
+ T2:= T2.INCR+T1; 26340000=06080000=
+ FOR T1:= T1 STEP 1 UNTIL T2 DO 26345000=06081000=
+ EMIT(TAKE(T1)); 26350000=06082000=
+ END; 26355000=06083000=
+ END 26360000=06084000=
+ ELSE 26365000=06084000=
+ BEGIN 26370000=06084000=
+ T2:= ELCLASS; 26375000=06084000=
+ IF STEPI ^= LITNO THEN 26380000=06085000=
+ BEGIN 26385000=06086000=
+ ERR(500); 26390000=06086000=
+ GO TO EXIT 26395000=06086000=
+ END; 26400000=06086000=
+ IF T2 = BITOP THEN 26405000=06087000=
+ EMIT(T1 & C[36:42:6]) 26410000=06088000=
+ ELSE 26415000=06088000=
+ IF T2 = HEXOP THEN 26420000=06089000=
+ EMIT(T1 & (T2:= C DIV 6)[36:45:3] & (C-T2*6)[39:45:3]) 26425000=06091000=
+ ELSE 26430000=06091000=
+ IF T2 = ISOLATE THEN 26435000=06092000=
+ BEGIN 26440000=06093000=
+ T2+C; 26445000=06093000=
+ IF STEPI ^= LITNO THEN 26450000=06095000=
+ BEGIN 26455000=06095000=
+ ERR(500); 26460000=06095000=
+ GO TO EXIT 26465000=06096000=
+ END; 26470000=06096000=
+ EMIT(Z:= ((T2+C-1) DIV 6-C DIV 6+1)*512+(48-T2-C) 26475000=06100000=
+ MOD 6*64+37); 26480000=06100000=
+ END 26485000=06101000=
+ END; 26490000=06101000=
+ STEPIT; 26495000=06102000=
+ S:= S OR COUNT < 0; 26500000=06103000=
+ END 26505000=06104000=
+ ELSE 26510000=06104000=
+ BEGIN 26515000=06104000=
+ IF ELCLASS = LABELID THEN 26520000=06104100=
+ BEGIN 26525000=06104200=
+ T1:= 2; 26530000=06104200=
+ EL: GT4:= TAKE(T2:= GIT(ELBAT[I])); 26535000=06104300=
+ PUT(L, T2); 26540000=06104400=
+ IF GT4 = 0 THEN 26545000=06104500=
+ GT4:= L; 26550000=06104500=
+ IF(GT4:= L-GT4) DIV 4 >= 128 THEN 26555000=06104510=
+ BEGIN 26560000=06104520=
+ GT4:= 0; 26565000=06104520=
+ FLAG(50); 26570000=06104520=
+ END; 26575000=06104520=
+ EMIT(GT4*4+T1); 26580000=06104600=
+ STEPIT; 26585000=06104700=
+ END 26590000=06105000=
+ ELSE 26595000=06105000=
+ IF ELCLASS ^= PERIOD THEN 26600000=06105000=
+ AEXP 26605000=06105000=
+ ELSE 26610000=06105000=
+ BEGIN 26615000=06105000=
+ T2:= 0; 26620000=06106000=
+ IF STEPI = PERIOD THEN 26625000=06106100=
+ BEGIN 26630000=06106200=
+ T2:= 1; 26635000=06106200=
+ STEPIT 26640000=06106200=
+ END; 26645000=06106200=
+ IF ELCLASS > IDMAX THEN 26650000=06106300=
+ BEGIN 26655000=06107000=
+ ERR(500); 26660000=06107000=
+ GO TO EXIT 26665000=06107000=
+ END; 26670000=06107000=
+ IF ELCLASS = LABELID THEN 26675000=06107100=
+ BEGIN 26680000=06107200=
+ T1:= 0; 26685000=06107200=
+ GO TO EL 26690000=06107200=
+ END; 26695000=06107200=
+ IF T1:= ELBAT[I].ADDRESS = 0 THEN 26700000=06108000=
+ BEGIN 26705000=06109000=
+ ERR(100); 26710000=06109000=
+ GO TO EXIT 26715000=06109000=
+ END; 26720000=06109000=
+ EMITL(T1); 26725000=06110000=
+ IF T1 > 1023 THEN 26730000=06110100=
+ IF T2 = 0 THEN 26735000=06110200=
+ FLAG(500) 26740000=06110300=
+ ELSE 26745000=06110300=
+ EMITO(PRTE); 26750000=06110300=
+ STEPIT; 26755000=06111000=
+ END; 26760000=06112000=
+ COUNT:= COUNT+1; 26765000=06112000=
+ END; 26770000=06113000=
+ END 26775000=06114000=
+ UNTIL ELCLASS ^= COMMA; 26780000=06114000=
+ IF ELCLASS ^= RTPAREN THEN 26785000=06115000=
+ BEGIN 26790000=06116000=
+ ERR(104); 26795000=06116000=
+ GO TO EXIT 26800000=06116000=
+ END; 26805000=06116000=
+ STEPIT; 26810000=06117000=
+ IF FALSE THEN 26815000=06118000=
+ BEGIN 26820000=06119000=
+ COUNT:= COUNT-EXPECT; 26825000=06119000=
+ WRITEOUT(IF COUNT < 0 THEN 6"-" ELSE IF COUNT = 0 THEN 6" " ELSE 26830000=06122000=
+ 6"+", ABS(COUNT), LIN[0]); 26835000=06122000=
+ WRITELINE; 26840000=06123000=
+ END; 26845000=06124000=
+EXIT: 26850000=06125000=
+ STACKCTR:= SSS; 26855000=06125000=
+ END; 26860000=06125000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26865000=06125000=
+ PROCEDURE PRIMARY; 26870000=06126000=
+ BEGIN 26875000=06127000=
+ LABEL 26880000=06128000=
+ L1, 26885000=06128000=
+ L2, 26890000=06128000=
+ L3, 26895000=06128000=
+ L4, 26900000=06128000=
+ L5, 26905000=06128000=
+ L6, 26910000=06128000=
+ L7, 26915000=06128000=
+ L8, 26920000=06128000=
+ L9, 26925000=06128000=
+ L10, 26930000=06129000=
+ L11, 26935000=06129000=
+ L12, 26940000=06129000=
+ L13, 26945000=06129000=
+ L14, 26950000=06129000=
+ L15, 26955000=06129000=
+ L16, 26960000=06129000=
+ L17, 26965000=06129000=
+ L18, 26970000=06129000=
+ L19, 26975000=06129000=
+ L20, 26980000=06130000=
+ L21, 26985000=06130000=
+ L22, 26990000=06130000=
+ L23, 26995000=06130000=
+ L24, 27000000=06130000=
+ L25, 27005000=06130000=
+ L26, 27010000=06130000=
+ L27, 27015000=06130000=
+ L28, 27020000=06130000=
+ L29, 27025000=06130000=
+ L30, 27030000=06131000=
+ L31, 27035000=06131000=
+ L32, 27040000=06131000=
+ L33, 27045000=06131000=
+ L34, 27050000=06131000=
+ L35, 27055000=06131000=
+ L36, 27060000=06131000=
+ L37, 27065000=06131000=
+ L38, 27070000=06131000=
+ L39; 27075000=06131000=
+ SWITCH 27080000=06132000=
+ S:= L1, 27085000=06133000=
+ L2, 27090000=06133000=
+ L3, 27095000=06133000=
+ L4, 27100000=06133000=
+ L5, 27105000=06133000=
+ L6, 27110000=06133000=
+ L7, 27115000=06133000=
+ L8, 27120000=06133000=
+ L9, 27125000=06133000=
+ L10, 27130000=06134000=
+ L11, 27135000=06134000=
+ L12, 27140000=06134000=
+ L13, 27145000=06134000=
+ L14, 27150000=06134000=
+ L15, 27155000=06134000=
+ L16, 27160000=06134000=
+ L17, 27165000=06134000=
+ L18, 27170000=06134000=
+ L19, 27175000=06134000=
+ L20, 27180000=06135000=
+ L21, 27185000=06135000=
+ L22, 27190000=06135000=
+ L23, 27195000=06135000=
+ L24, 27200000=06135000=
+ L25, 27205000=06135000=
+ L26, 27210000=06135000=
+ L27, 27215000=06135000=
+ L28, 27220000=06135000=
+ L29, 27225000=06135000=
+ L30, 27230000=06136000=
+ L31, 27235000=06136000=
+ L32, 27240000=06136000=
+ L33, 27245000=06136000=
+ L34, 27250000=06136000=
+ L35, 27255000=06136000=
+ L36, 27260000=06136000=
+ L37, 27265000=06136000=
+ L38, 27270000=06136000=
+ L39; 27275000=06136000=
+ LABEL 27280000=06137000=
+ EXIT, 27285000=06137000=
+ RP, 27290000=06137000=
+ LDOT, 27295000=06137000=
+ LAMPER; 27300000=06137000=
+ GO TO S[ELCLASS]; 27305000=06138000=
+ IF ELCLASS = LFTBRKET THEN 27310000=06139000=
+ BEGIN 27315000=06140000=
+ STEPIT; 27320000=06140000=
+ VARIABLE(FL); 27325000=06140000=
+ IF ELCLASS ^= RTBRKET THEN 27330000=06141000=
+ BEGIN 27335000=06142000=
+ ERR(118); 27340000=06142000=
+ GO TO EXIT 27345000=06142000=
+ END; 27350000=06142000=
+ STEPIT; 27355000=06143000=
+ GO TO LDOT; 27360000=06144000=
+ END; 27365000=06145000=
+ IF ELCLASS = NOTOP THEN 27370000=06146000=
+ BEGIN 27375000=06147000=
+ STEPIT; 27380000=06147000=
+ PRIMARY; 27385000=06147000=
+ EMITLNG; 27390000=06148000=
+ EMIT(0); 27395000=06148000=
+ L:= L-1; 27400000=06148000=
+ GO TO EXIT; 27405000=06149000=
+ END; 27410000=06150000=
+ IF ELCLASS = UNKNOWNID THEN 27415000=06151000=
+ ERR(100); 27420000=06151000=
+L1: 27425000=06152000=
+L2: 27430000=06152000=
+L3: 27435000=06152000=
+L4: 27440000=06152000=
+L5: 27445000=06152000=
+L6: 27450000=06152000=
+L8: 27455000=06152000=
+L9: 27460000=06152000=
+L10: 27465000=06152000=
+L12: 27470000=06152000=
+L13: 27475000=06152000=
+L16: 27480000=06152000=
+L17: 27485000=06152000=
+ L20, L21:L24:L25:L28:L29:L32:ERR(103); 27490000=06154000=
+ GO TO EXIT; 27495000=06154000=
+L7: SUBHAND(FALSE); 27500000=06156000=
+ GO TO LDOT; 27505000=06156000=
+L11: 27510000=06158000=
+ IMPFUN; 27515000=06158000=
+ STACKCT:= STACKCT-1; 27520000=06158000=
+ GO TO LDOT; 27525000=06158000=
+L14: 27530000=06159000=
+L15: 27535000=06160000=
+ STRMPROCSTMT; 27540000=06160000=
+ GO TO LDOT; 27545000=06160000=
+L18: 27550000=06161000=
+L19: 27555000=06162000=
+ PROCSTMT(FALSE); 27560000=06162000=
+ GO TO LDOT; 27565000=06162000=
+L22: 27570000=06163000=
+L23: 27575000=06163000=
+L26: 27580000=06163000=
+L27: 27585000=06163000=
+L30: 27590000=06163000=
+L31: 27595000=06164000=
+ VARIABLE(FP); 27600000=06164000=
+ GO TO LAMPER; 27605000=06164000=
+L33: 27610000=06165000=
+L35: 27615000=06166000=
+ EMIT(0 & ELBAT[I][36:17:10]); 27620000=06166000=
+ STEPIT; 27625000=06166000=
+ GO TO LAMPER; 27630000=06166000=
+L34: 27635000=06167000=
+L36: 27640000=06168000=
+ EMITNUM(C); 27645000=06168000=
+ STEPIT; 27650000=06168000=
+ GO TO LAMPER; 27655000=06168000=
+L38: 27660000=06170000=
+ POLISHER(1); 27665000=06170000=
+ GO TO LDOT; 27670000=06170000=
+L39: 27675000=06172000=
+ STEPIT; 27680000=06172000=
+ PRIMARY; 27685000=06172000=
+ STACKCT:= STACKCT-1; 27690000=06172000=
+ EMITO(LOD); 27695000=06172500=
+ GO TO LDOT; 27700000=06172500=
+L37: 27705000=06174000=
+ STEPIT; 27710000=06174000=
+ AEXP; 27715000=06174000=
+ STACKCT:= STACKCT-1; 27720000=06174500=
+ IF ELCLASS ^= RTPAREN THEN 27725000=06175000=
+ BEGIN 27730000=06176000=
+ ERR(104); 27735000=06176000=
+ GO TO EXIT 27740000=06176000=
+ END; 27745000=06176000=
+ STEPIT; 27750000=06177000=
+LDOT: 27755000=06178000=
+ DOT; 27760000=06178000=
+LAMPER: 27765000=06179500=
+ STACKCT:= STACKCT+1; 27770000=06179500=
+ WHILE ELCLASS = AMPERSAND DO 27775000=06180000=
+ BEGIN 27780000=06181000=
+ STEPIT; 27785000=06181000=
+ PRIMARY; 27790000=06181000=
+ PARSE 27795000=06181000=
+ END; 27800000=06181000=
+EXIT: 27805000=06182000=
+ END PRIMARY; 27810000=06182000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27815000=06182000=
+ PROCEDURE IMPFUN; 27820000=06183000=
+ BEGIN 27825000=06184000=
+ REAL 27830000=06184000=
+ T1, 27835000=06184000=
+ T2; 27840000=06184000=
+ T1:= (T2:= ELBAT[I]).ADDRESS; 27845000=06185000=
+ PANA; 27850000=06186000=
+ IF T1 ^= 0 THEN 27855000=06187000=
+ EMITO(T1); 27860000=06187000=
+ ELSE 27865000=06188000=
+ BEGIN 27870000=06188000=
+ T1:= T2.LINK+T2.INCR+1; 27875000=06189000=
+ T2:= T2.LINK+2; 27880000=06190000=
+ FOR T2:= T2 STEP 1 UNTIL T1 DO 27885000=06191000=
+ EMIT(TAKE(T2)); 27890000=06191000=
+ END; 27895000=06192000=
+ END; 27900000=06193000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27905000=06193000=
+ PROCEDURE SUBHAND(FROM); 27910000=06194000=
+ VALUE 27915000=06194000=
+ FROM; 27920000=06194000=
+ BOOLEAN 27925000=06194000=
+ FROM; 27930000=06194000=
+ BEGIN 27935000=06195000=
+ LABEL 27940000=06195000=
+ EXIT; 27945000=06195000=
+ REAL 27950000=06196000=
+ T1; 27955000=06196000=
+ T1:= TAKEFRST; 27960000=06197000=
+ IF ELCLASS ^= SUBID AND FROM THEN 27965000=06198000=
+ BEGIN 27970000=06199000=
+ IF STEPI ^= ASSIGNOP THEN 27975000=06199000=
+ BEGIN 27980000=06200000=
+ FLAG(503); 27985000=06200000=
+ GO TO EXIT 27990000=06200000=
+ END; 27995000=06200000=
+ STEPIT; 28000000=06201000=
+ AEXP; 28005000=06202000=
+ EMITO(XCH); 28010000=06203000=
+ GO TO EXIT; 28015000=06204000=
+ END; 28020000=06205000=
+ EMITL((L+6) DIV 4-(T1.[24:12]-1) DIV 4); 28025000=06206000=
+ EMITB(BBW, BUMPL, T1.[36:12]); 28030000=06207000=
+ STEPIT; 28035000=06208000=
+ ADJUST; 28040000=06208500=
+EXIT: 28045000=06209000=
+ END SUBHAND; 28050000=06209000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28055000=06209000=
+ 28060000=06292000=
+ COMMENT IFEXP COMPILES CONDITIONAL EXPRESSIONS. IT REPORTS THE TYPE 28065000=06292000=
+ OF EXPRESSIONS AS EXPRSS REPORTS; 28070000=06293000=
+ INTEGER PROCEDURE IFEXP; 28075000=06294000=
+ BEGIN 28080000=06295000=
+ INTEGER 28085000=06295000=
+ TYPE, 28090000=06295000=
+ THENBRANCH, 28095000=06295000=
+ ELSEBRANCH; 28100000=06295000=
+ IFCLAUSE; 28105000=06296000=
+ STACKCT:= 0; 28110000=06296500=
+ THENBRANCH:= BUMPL; 28115000=06297000=
+ COMMENT SAVE L FOR LATER FIXUP; 28120000=06298000=
+ IFEXP:= TYPE:= EXPRSS; 28125000=06299000=
+ COMMENT COMPILE 1ST EXPRSS; 28130000=06299000=
+ STACKCT:= 0; 28135000=06299500=
+ ELSEBRANCH:= BUMPL; 28140000=06300000=
+ EMITB(BFC, THENBRANCH, L); 28145000=06301000=
+ IF ELCLASS ^= ELSEV THEN 28150000=06302000=
+ ERR(155) 28155000=06302000=
+ ELSE 28160000=06302000=
+ BEGIN 28165000=06302000=
+ STEPIT; 28170000=06303000=
+ AEXP; 28175000=06305000=
+ STACKCT:= 1; 28180000=06305000=
+ COMMENT THIS COMPILES PROPER TYPE SECOND EXPRSS; 28185000=06306000=
+ EMITB(BFW, ELSEBRANCH, L); 28190000=06307000=
+ EMIT(1); 28195000=06308000=
+ L:= L-1; 28200000=06308000=
+ COMMENT THIS IS USED BY EMITLNG TO CLEANUP CODE. COMPARE WITH 28205000=06309000=
+ BOOSEC, BOOCOMP, AND RELATION; 28210000=06310000=
+ END 28215000=06311000=
+ END IFEXP; 28220000=06311000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28225000=06311000=
+ 28230000=06312000=
+ COMMENT PARSE COMPILES CODE FOR THE CONCATENATE; 28235000=06312000=
+ PROCEDURE PARSE; 28240000=06313000=
+ BEGIN 28245000=06314000=
+ INTEGER 28250000=06314000=
+ FIRST, 28255000=06314000=
+ SECOND, 28260000=06314000=
+ THIRD; 28265000=06314000=
+ LABEL 28270000=06315000=
+ EXIT; 28275000=06315000=
+ IF ELCLASS = LFTBRKET THEN 28280000=06316000=
+ IF STEPI = LITNO THEN 28285000=06317000=
+ IF STEPI = COLON THEN 28290000=06318000=
+ IF STEPI = LITNO THEN 28295000=06319000=
+ IF STEPI = COLON THEN 28300000=06320000=
+ IF STEPI = LITNO THEN 28305000=06321000=
+ IF STEPI = RTBRKET THEN 28310000=06322000=
+ COMMENT IF TEST ARE PASSED THEN SYNTAX IS CORRECT; 28315000=06323000=
+ IF(FIRST:= ELBAT[I-5].ADDRESS)* 28320000=06325000=
+ (SECOND:= ELBAT[I-3].ADDRESS)* 28325000=06326000=
+ (THIRD:= ELBAT[I-1].ADDRESS) ^= 0 28330000=06326000=
+ THEN 28335000=06326000=
+ IF FIRST+THIRD <= 48 THEN 28340000=06327000=
+ IF SECOND+THIRD <= 48 THEN 28345000=06328000=
+ COMMENT IF TEST ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 28350000=06329000=
+ BEGIN 28355000=06330000=
+ STEPIT; 28360000=06331000=
+ EMITD(SECOND, FIRST, THIRD); 28365000=06332000=
+ STACKCT:= 1; 28370000=06332500=
+ GO TO EXIT 28375000=06333000=
+ END; 28380000=06333000=
+ ERR(113); 28385000=06334000=
+ COMMENT ERROR IF SYNTAX OR RANGE FAILS; 28390000=06334000=
+EXIT: 28395000=06335000=
+ END PARSE; 28400000=06335000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28405000=06335000=
+ 28410000=06336000=
+ COMMENT DOT COMPILES CODE FOR PARTIAL WORD DESIGNATORS, EXCEPT FOR 28415000=06336000=
+ THOSE CASES HANDLED BY THE VARIABLE ROUTINE; 28420000=06337000=
+ PROCEDURE DOT; 28425000=06338000=
+ BEGIN 28430000=06339000=
+ INTEGER 28435000=06339000=
+ FIRST, 28440000=06339000=
+ SECOND; 28445000=06339000=
+ LABEL 28450000=06339000=
+ EXIT; 28455000=06339000=
+ IF ELCLASS = PERIOD THEN 28460000=06340000=
+ BEGIN 28465000=06340000=
+ IF DOTSYNTAX(FIRST, SECOND) THEN 28470000=06341000=
+ GO TO EXIT; 28475000=06341000=
+ EMITI(0, FIRST, SECOND); 28480000=06344000=
+ STEPIT; 28485000=06345000=
+ EXIT: 28490000=06346000=
+ END 28495000=06346000=
+ END DOT; 28500000=06346000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28505000=06346000=
+ PROCEDURE IFCLAUSE; 28510000=06409000=
+ BEGIN 28515000=06410000=
+ STEPIT; 28520000=06410000=
+ BEXP; 28525000=06410000=
+ IF ELCLASS ^= THENV THEN 28530000=06411000=
+ ERR(116) 28535000=06411000=
+ ELSE 28540000=06411000=
+ STEPIT 28545000=06411000=
+ END IFCLAUS; 28550000=06411000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28555000=06411000=
+ 28560000=06412000=
+ COMMENT PANA COMPILES THE CONSTRUCT: (); 28565000=06412000=
+ PROCEDURE PANA; 28570000=06413000=
+ BEGIN 28575000=06414000=
+ IF STEPI ^= LEFTPAREN THEN 28580000=06415000=
+ ERR(105) 28585000=06416000=
+ ELSE 28590000=06416000=
+ BEGIN 28595000=06416000=
+ STEPIT; 28600000=06416000=
+ AEXP; 28605000=06416000=
+ IF ELCLASS ^= RTPAREN THEN 28610000=06416000=
+ ERR(104) 28615000=06417000=
+ ELSE 28620000=06417000=
+ STEPIT 28625000=06417000=
+ END 28630000=06417000=
+ END PANA; 28635000=06417000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28640000=06417000=
+ 28645000=06418000=
+ COMMENT BANA COMPILES THE CONSTRUCT: []; 28650000=06418000=
+ PROCEDURE BANA; 28655000=06419000=
+ BEGIN 28660000=06420000=
+ IF STEPI ^= LFTBRKET THEN 28665000=06421000=
+ ERR(117) 28670000=06422000=
+ ELSE 28675000=06422000=
+ BEGIN 28680000=06422000=
+ STEPIT; 28685000=06422000=
+ AEXP; 28690000=06422000=
+ IF ELCLASS ^= RTBRKET THEN 28695000=06422000=
+ ERR(118) 28700000=06423000=
+ ELSE 28705000=06423000=
+ STEPIT 28710000=06423000=
+ END 28715000=06423000=
+ END BANA; 28720000=06423000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28725000=06423000=
+ 28730000=07000000=
+ COMMENT THIS SECTION CONTAINS THE STATEMENT ROUTINES; 28735000=07000000=
+ 28740000=07001000=
+ COMMENT COMPOUNDTAIL COMPILES COMPOUNDTAILS. IT ALSO ELIMINATES 28745000=07001000=
+ COMMENTS FOLLOWING ENDS. AFTER ANY ERROR, ERROR MESSAGES 28750000=07002000=
+ ARE SUPPRESSED. COMPOUNDTAIL IS PARTIALLY RESPONSIBLE 28755000=07003000=
+ FOR RESTORING THE ABILITY TO WRITE ERROR MESSAGES. SOME 28760000=07004000=
+ CARE IS ALSO TAKEN TO PREVENT READING BEYOND THE "END."; 28765000=07005000=
+ PROCEDURE COMPOUNDTAIL; 28770000=07006000=
+ BEGIN 28775000=07007000=
+ LABEL 28780000=07007000=
+ ANOTHER; 28785000=07007000=
+ I:= I-1; 28790000=07008000=
+ BEGINCTR:= BEGINCTR+1; 28795000=07008000=
+ANOTHER: 28800000=07009000=
+ ERRORTOG:= TRUE; 28805000=07009000=
+ COMMENT ALLOW ERROR MESSAGES; 28810000=07009000=
+ STEPIT; 28815000=07010000=
+ IF STREAMTOG THEN 28820000=07011000=
+ STREAMSTMT 28825000=07011000=
+ ELSE 28830000=07011000=
+ STMT; 28835000=07011000=
+ IF ELCLASS = SEMICOLON THEN 28840000=07012000=
+ GO TO ANOTHER; 28845000=07012000=
+ IF ELCLASS ^= ENDV THEN 28850000=07014000=
+ BEGIN 28855000=07014000=
+ ERR(119); 28860000=07015000=
+ GO TO ANOTHER 28865000=07015000=
+ END; 28870000=07015000=
+ ENDTOG:= TRUE; 28875000=07016000=
+ DO 28880000=07017000=
+ STOPDEFINE:= TRUE 28885000=07018000=
+ UNTIL STEPI <= ENDV AND ELCLASS >= UNTILV OR NOT ENDTOG; 28890000=07019000=
+ ENDTOG:= FALSE; 28895000=07020000=
+ IF BEGINCTR:= BEGINCTR-1 ^= 0 EQV ELCLASS = PERIOD THEN 28900000=07022000=
+ BEGIN 28905000=07022000=
+ IF BEGINCTR = 0 THEN 28910000=07023000=
+ BEGIN 28915000=07024000=
+ FLAG(143); 28920000=07024000=
+ BEGINCTR:= 1; 28925000=07024000=
+ GO ANOTHER 28930000=07024000=
+ END; 28935000=07024000=
+ FLAG(120); 28940000=07025000=
+ FCR:= (LCR:= MKABS(CBUFF[9]))-9; 28945000=07025010=
+ IF LISTER THEN 28950000=07025020=
+ PRINTCARD; 28955000=07025020=
+ FCR:= (LCR:= MKABS(TBUFF[9]))-9 28960000=07025030=
+ END; 28965000=07025030=
+ IF ELCLASS = PERIOD THEN 28970000=07026000=
+ BEGIN 28975000=07027000=
+ GT5:= 6"ND;END."&6"E"[1:43:5]; 28980000=07028000=
+ MOVE(1, GT5, CBUFF[0]); 28985000=07029000=
+ LASTUSED:= 4; 28990000=07030000=
+ ELBAT[I:= I-2]:= SPECIAL[20]; 28995000=07031000=
+ ELCLASS:= SEMICOLON 29000000=07032000=
+ END 29005000=07033000=
+ END COMPOUNDTAIL; 29010000=07033000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29015000=07033000=
+ REAL 29020000=07034000=
+ AXNUM; 29025000=07034000=
+ PROCEDURE ACTUALPARAPART(SBIT, INDEX); 29030000=07035000=
+ VALUE 29035000=07035000=
+ SBIT, 29040000=07035000=
+ INDEX; 29045000=07035000=
+ BOOLEAN 29050000=07036000=
+ SBIT; 29055000=07036000=
+ REAL 29060000=07036000=
+ INDEX; 29065000=07036000=
+ BEGIN 29070000=07037000=
+ LABEL 29075000=07037000=
+ EXIT, 29080000=07037000=
+ COMMON, 29085000=07037000=
+ ANOTHER, 29090000=07037000=
+ POL; 29095000=07037000=
+ REAL 29100000=07038000=
+ PCTR, 29105000=07038000=
+ SCLASS, 29110000=07038000=
+ ACLASS; 29115000=07038000=
+ STREAM PROCEDURE WRITEAX(LINE, ACCUM, N, SEQ); 29120000=07038100=
+ VALUE 29125000=07038100=
+ N; 29130000=07038100=
+ BEGIN 29135000=07038200=
+ DI:= LINE; 29140000=07038200=
+ 15(DS:= 8 LIT 6" "); 29145000=07038200=
+ DI:= LINE; 29150000=07038300=
+ SI:= SEQ; 29155000=07038300=
+ SI:= SI-16; 29160000=07038300=
+ DS:= WDS; 29165000=07038300=
+ DI:= DI+4; 29170000=07038400=
+ DS:= 20 LIT 6"ACCIDENTAL ENTRY AT "; 29175000=07038400=
+ SI:= ACCUM; 29180000=07038500=
+ SI:= SI+3; 29185000=07038500=
+ DS:= N CHR; 29190000=07038500=
+ SI:= SEQ; 29195000=07038600=
+ DI:= SEQ; 29200000=07038600=
+ DI:= DI-16; 29205000=07038600=
+ DS:= WDS; 29210000=07038600=
+ END; 29215000=07038700=
+ BOOLEAN 29220000=07039000=
+ VBIT, 29225000=07039000=
+ IDBIT; 29230000=07039000=
+ PCTR:= 1; 29235000=07040000=
+ANOTHER: 29240000=07041000=
+ ACLASS:= STEPI & 0[47:47:1]; 29245000=07041000=
+ STACKCT:= 0; 29250000=07041200=
+ GT1:= TAKE(INDEX+PCTR); 29255000=07042000=
+ VBIT:= BOOLEAN(GT1.VO); 29260000=07043000=
+ SCLASS:= GT1.CLASS & 0[47:47:1]; 29265000=07044000=
+ IF VBIT THEN 29270000=07045000=
+ BEGIN 29275000=07045000=
+ AEXP; 29280000=07045000=
+ GO TO COMMON 29285000=07045000=
+ END; 29290000=07045000=
+ IF SBIT THEN 29295000=07046000=
+ SCLASS:= NAMEID; 29300000=07046000=
+ IDBIT:= BOOID < ACLASS AND ACLASS < LABELID; 29305000=07047000=
+ IF SCLASS = NAMEID THEN 29310000=07048000=
+ BEGIN 29315000=07049000=
+ IF IDBIT THEN 29320000=07050000=
+ VARIABLE(FL); 29325000=07050000=
+ POL: 29330000=07052000=
+ IF ELCLASS = POLISHV THEN 29335000=07052000=
+ POLISHER(1) 29340000=07053000=
+ ELSE 29345000=07053000=
+ ERR(IF ELCLASS = 0 THEN 0 ELSE 123); 29350000=07053000=
+ GO TO COMMON; 29355000=07054000=
+ END; 29360000=07055000=
+ IF SCLASS = REALARRAYID THEN 29365000=07056000=
+ IF ACLASS = REALARRAYID THEN 29370000=07057000=
+ BEGIN 29375000=07058000=
+ VARIABLE(FL); 29380000=07058000=
+ GO TO COMMON 29385000=07058000=
+ END 29390000=07059000=
+ ELSE 29395000=07059000=
+ GO TO POL; 29400000=07059000=
+ IF SCLASS ^= REALID THEN 29405000=07060000=
+ BEGIN 29410000=07061000=
+ FLAG(503); 29415000=07061000=
+ AEXP; 29420000=07062000=
+ ERRORTOG:= TRUE; 29425000=07063000=
+ GO TO COMMON; 29430000=07064000=
+ END; 29435000=07065000=
+ GT1:= TABLE(I+1); 29440000=07066000=
+ IF GT1 = COMMA OR GT1 = RTPAREN THEN 29445000=07067000=
+ BEGIN 29450000=07068000=
+ IF IDBIT THEN 29455000=07068000=
+ BEGIN 29460000=07069000=
+ IF ACLASS = REALID AND BOOLEAN(ELBAT[I].FORMAL) THEN 29465000=07070000=
+ BEGIN 29470000=07070000=
+ CHECKER(ELBAT[I]); 29475000=07070500=
+ EMITPAIR(ELBAT[I], ADDRESS, LOD); 29480000=07071000=
+ STEPIT; 29485000=07072000=
+ END 29490000=07073000=
+ ELSE 29495000=07073000=
+ VARIABLE(FL); 29500000=07073000=
+ GO TO COMMON 29505000=07074000=
+ END; 29510000=07074000=
+ IF ELCLASS <= STRNGCON AND ELCLASS > LABELID THEN 29515000=07076000=
+ BEGIN 29520000=07076000=
+ PRIMARY; 29525000=07076000=
+ GOTO COMMON 29530000=07076000=
+ END; 29535000=07076000=
+ END; 29540000=07077000=
+ EMITO(NOP); 29545000=07078000=
+ EMITO(NOP); 29550000=07078000=
+ SCLASS:= L; 29555000=07079000=
+ ADJUST; 29560000=07080000=
+ ACLASS:= L.[36:10]; 29565000=07081000=
+ IF IDBIT THEN 29570000=07082000=
+ BEGIN 29575000=07083000=
+ VARIABLE(FL); 29580000=07083000=
+ IF ELCLASS < AMPERSAND THEN 29585000=07084000=
+ GO TO COMMON; 29590000=07084000=
+ SIMPARITH; 29595000=07085000=
+ END 29600000=07086000=
+ ELSE 29605000=07086000=
+ AEXP; 29610000=07086000=
+ IF LISTER THEN 29615000=07086100=
+ BEGIN 29620000=07086200=
+ ACCUM[1]:= Q; 29625000=07086200=
+ WRITEAX 29630000=07086400=
+ (LIN[0], ACCUM[1], Q.[12:6], INFO[LASTSEQROW, LASTSEQUENCE])29635000=07086400=
+ ; 29640000=07086400=
+ WRITELINE; 29645000=07086500=
+ END; 29650000=07086600=
+ AXNUM:= AXNUM+1; 29655000=07086700=
+ EMITO(RTS); 29660000=07087000=
+ EMITB(BFW, SCLASS, L); 29665000=07088000=
+ EMITNUM(ACLASS); 29670000=07089000=
+ EMITPAIR(TAKE(PROINFO).ADDRESS, LOD); 29675000=07090000=
+ EMITO(INX); 29680000=07091000=
+ EMITN(512); 29685000=07092000=
+ EMITD(33, 18, 15); 29690000=07093000=
+ EMIT(0); 29695000=07093100=
+ EMITD(5, 5, 1); 29700000=07093200=
+COMMON: 29705000=07094000=
+ PCTR:= PCTR+1; 29710000=07094000=
+ IF ELCLASS = COMMA THEN 29715000=07095000=
+ GO TO ANOTHER; 29720000=07095000=
+ IF ELCLASS ^= RTPAREN THEN 29725000=07096000=
+ BEGIN 29730000=07097000=
+ ERR(129); 29735000=07097000=
+ GO TO EXIT 29740000=07097000=
+ END; 29745000=07097000=
+ IF TAKE(INDEX).NODIMPART+1 ^= PCTR THEN 29750000=07098000=
+ BEGIN 29755000=07099000=
+ ERR(128); 29760000=07099000=
+ GO TO EXIT 29765000=07099000=
+ END; 29770000=07099000=
+ STEPIT; 29775000=07100000=
+ STACKCT:= 0; 29780000=07100500=
+EXIT: 29785000=07101000=
+ END ACTUAL PARAPART; 29790000=07101000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29795000=07101000=
+ PROCEDURE PROCSTMT(FROM); 29800000=07391000=
+ VALUE 29805000=07391000=
+ FROM; 29810000=07391000=
+ BOOLEAN 29815000=07391000=
+ FROM; 29820000=07391000=
+ BEGIN 29825000=07392000=
+ REAL 29830000=07393000=
+ HOLE, 29835000=07393000=
+ ADDRESS; 29840000=07393000=
+ REAL 29845000=07393100=
+ J; 29850000=07393100=
+ LABEL 29855000=07393100=
+ OK; 29860000=07393100=
+ LABEL 29865000=07394000=
+ EXIT; 29870000=07394000=
+ SCATTERELBAT; 29875000=07395000=
+ HOLE:= ELBAT[I]; 29880000=07396000=
+ ADDRESS:= ADDRSF; 29885000=07397000=
+ IF NESTOG THEN 29890000=07397100=
+ IF MODE ^= 0 THEN 29895000=07397200=
+ IF TABLE(I+1) ^= ASSIGNOP THEN 29900000=07397210=
+ BEGIN 29905000=07397300=
+ FOR J:= CALLINFO STEP 1 UNTIL CALLX DO 29910000=07397300=
+ IF CALL[J] = ADDRESS THEN 29915000=07397400=
+ GO TO OK; 29920000=07397400=
+ CALL[CALLX:= CALLX+1]:= ADDRESS; 29925000=07397500=
+ OK: 29930000=07397600=
+ END; 29935000=07397600=
+ CHECKER(HOLE); 29940000=07398000=
+ IF ELCLASS ^= PROCID THEN 29945000=07399000=
+ IF NOT FORMALF THEN 29950000=07400000=
+ IF TABLE(I+1) = ASSIGNOP THEN 29955000=07401000=
+ BEGIN 29960000=07402000=
+ VARIABLE(2-REAL(FROM)); 29965000=07402000=
+ GO TO EXIT 29970000=07402000=
+ END; 29975000=07402000=
+ COMMENT CALL VARIABLE TO HANDLE THIS ASSIGNMENT OPERATION; 29980000=07403000=
+ IF ELCLASS ^= PROCID EQV FROM THEN 29985000=07405000=
+ BEGIN 29990000=07405000=
+ ERR(159); 29995000=07405000=
+ GO TO EXIT 30000000=07405000=
+ END; 30005000=07405000=
+ COMMENT IT IS PROCEDURE IF AND ONLY WE COME FORM STMT; 30010000=07406000=
+ STEPIT; 30015000=07407000=
+ EMITO(MKS); 30020000=07408000=
+ IF ELCLASS = LEFTPAREN THEN 30025000=07410000=
+ ACTUALPARAPART(FALSE, GIT(HOLE)) 30030000=07411000=
+ ELSE 30035000=07411000=
+ IF FORMALF THEN 30040000=07411000=
+ L:= L-1; 30045000=07411000=
+ ELSE 30050000=07412000=
+ IF TAKE(GIT(HOLE)).NODIMPART ^= 0 THEN 30055000=07412000=
+ ERR(128); 30060000=07412000=
+ EMITV(ADDRESS); 30065000=07413000=
+EXIT: 30070000=07425000=
+ END PROCSTMT; 30075000=07425000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30080000=07425000=
+ PROCEDURE STRMPROCSTMT; 30085000=07426000=
+ BEGIN 30090000=07427000=
+ REAL 30095000=07427000=
+ WHOLE, 30100000=07427000=
+ FIX, 30105000=07427000=
+ T1; 30110000=07427000=
+ WHOLE:= ELBAT[I]; 30115000=07430000=
+ FIX:= -1; 30120000=07430000=
+ IF ELCLASS ^= STRPROCID THEN 30125000=07431000=
+ EMIT(0); 30130000=07431000=
+ IF WHOLE.LVL ^= 1 THEN 30135000=07432000=
+ BEGIN 30140000=07433000=
+ FIX:= L; 30145000=07433000=
+ L:= L+1 30150000=07433000=
+ END; 30155000=07433000=
+ EMITO(MKS); 30160000=07434000=
+ T1:= TAKEFRST.[1:6]; 30165000=07435000=
+ FOR GT1:= 1 STEP 1 UNTIL T1 DO 30170000=07436000=
+ EMIT(0); 30175000=07436000=
+ IF STEPI ^= LEFTPAREN THEN 30180000=07437000=
+ ERR(128) 30185000=07438000=
+ ELSE 30190000=07438000=
+ BEGIN 30195000=07438000=
+ ACTUALPARAPART(TRUE, GIT(WHOLE)); 30200000=07438000=
+ IF FIX < 0 THEN 30205000=07439000=
+ EMITV(WHOLE.ADDRESS) 30210000=07440000=
+ ELSE 30215000=07440000=
+ BEGIN 30220000=07440000=
+ T1:= L; 30225000=07440000=
+ L:= FIX; 30230000=07440000=
+ WHOLE:= TAKE(GIT(WHOLE)); 30235000=07441000=
+ EMITNUM(T1+2-WHOLE.[16:12]); 30240000=07442000=
+ L:= T1; 30245000=07443000=
+ EMITB(BBW, BUMPL, WHOLE.[28:12]); 30250000=07444000=
+ END; 30255000=07445000=
+ END 30260000=07446000=
+ END STRMPROCSTMT; 30265000=07446000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30270000=07446000=
+ INTEGER PROCEDURE BAE; 30275000=07458000=
+ BEGIN 30280000=07459000=
+ BAE:= BUMPL; 30285000=07459000=
+ CONSTANTCLEAN; 30290000=07459000=
+ ADJUST 30295000=07459000=
+ END BAE; 30300000=07459000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30305000=07459000=
+ 30310000=07460000=
+ COMMENT RELSESTMT COMPILES THE RELEASE STATEMENT; 30315000=07460000=
+ 30320000=07481000=
+ COMMENT DOSTMT HANDLES THE DO STATEMENT; 30325000=07481000=
+ PROCEDURE DOSTMT; 30330000=07482000=
+ BEGIN 30335000=07483000=
+ INTEGER 30340000=07483000=
+ TL; 30345000=07483000=
+ FOULED:= L; 30350000=07483500=
+ STEPIT; 30355000=07485000=
+ TL:= L; 30360000=07485000=
+ STMT; 30365000=07485000=
+ IF ELCLASS ^= UNTILV THEN 30370000=07485000=
+ ERR(131) 30375000=07486000=
+ ELSE 30380000=07486000=
+ BEGIN 30385000=07486000=
+ STEPIT; 30390000=07487000=
+ BEXP; 30395000=07487000=
+ EMITB(BBC, BUMPL, TL) 30400000=07487000=
+ END 30405000=07488000=
+ END DOSTMT; 30410000=07488000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30415000=07488000=
+ 30420000=07489000=
+ COMMENT WHILESTMT COMPILES THE WHILE STATEMENT; 30425000=07489000=
+ PROCEDURE WHILESTMT; 30430000=07490000=
+ BEGIN 30435000=07491000=
+ INTEGER 30440000=07491000=
+ BACK, 30445000=07491000=
+ FRONT; 30450000=07491000=
+ FOULED:= L; 30455000=07491500=
+ STEPIT; 30460000=07493000=
+ BACK:= L; 30465000=07493000=
+ BEXP; 30470000=07493000=
+ FRONT:= BUMPL; 30475000=07493000=
+ IF ELCLASS ^= DOV THEN 30480000=07494000=
+ ERR(132) 30485000=07494000=
+ ELSE 30490000=07494000=
+ BEGIN 30495000=07495000=
+ STEPIT; 30500000=07495000=
+ STMT; 30505000=07495000=
+ EMITB(BBW, BUMPL, BACK); 30510000=07495000=
+ CONSTANTCLEAN; 30515000=07496000=
+ EMITB(BFC, FRONT, L) 30520000=07496000=
+ END 30525000=07496000=
+ END WHILESTMT; 30530000=07496000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30535000=07496000=
+ 30540000=07497000=
+ COMMENT GOSTMT COMPILES GO TO STATEMENTS. GOSTMT LOOKS AT THE 30545000=07497000=
+ EXPRESSION. IF IT IS SIMPLE ENOUGH WE GO DIRECTLY. 30550000=07498000=
+ OTHERWISE A CALL ON THE MCP IS GENERATED IN ORDER TO GET 30555000=07499000=
+ STORAGE RETURNED. SEE DEXP AND GENGO; 30560000=07500000=
+ PROCEDURE GOSTMT; 30565000=07501000=
+ BEGIN 30570000=07502000=
+ REAL 30575000=07503000=
+ ELBW; 30580000=07503000=
+ LABEL 30585000=07504000=
+ GOMCP, 30590000=07504000=
+ EXIT; 30595000=07504000=
+ IF STEPI = TOV THEN 30600000=07505000=
+ STEPIT; 30605000=07505000=
+ IF ELCLASS = LABELID THEN 30610000=07506000=
+ TB1:= TRUE 30615000=07507000=
+ ELSE 30620000=07507000=
+ IF ELCLASS = SWITCHID THEN 30625000=07507000=
+ TB1:= FALSE 30630000=07511000=
+ ELSE 30635000=07511000=
+ BEGIN 30640000=07511000=
+ IF ELCLASS = POLISHV THEN 30645000=07511000=
+ BEGIN 30650000=07512000=
+ POLISHER(1); 30655000=07512000=
+ EMITO(BFW) 30660000=07512000=
+ END 30665000=07513000=
+ ELSE 30670000=07513000=
+ ERR(501); 30675000=07513000=
+ GO TO EXIT 30680000=07515000=
+ END; 30685000=07515000=
+ IF NOT LOCAL(ELBAT[I]) THEN 30690000=07516000=
+ BEGIN 30695000=07516100=
+ IF TB1 THEN 30700000=07516200=
+ BEGIN 30705000=07516300=
+ EMITV(GNAT(ELBAT[I])); 30710000=07516300=
+ EMITO(BFW); 30715000=07516400=
+ STEPIT; 30720000=07516500=
+ GO TO EXIT 30725000=07516600=
+ END; 30730000=07516600=
+ BEGIN 30735000=07517000=
+ ERR(501); 30740000=07517000=
+ GO TO EXIT 30745000=07517000=
+ END; 30750000=07517000=
+ END; 30755000=07517500=
+ IF TB1 THEN 30760000=07518000=
+ BEGIN 30765000=07518000=
+ GOGEN(ELBAT[I], BFW); 30770000=07518000=
+ STEPIT; 30775000=07518000=
+ CONSTANTCLEAN; 30780000=07519000=
+ GO EXIT 30785000=07519000=
+ END 30790000=07520000=
+ ELSE 30795000=07520000=
+ BEGIN 30800000=07520000=
+ ELBW:= ELBAT[I]; 30805000=07521000=
+ BANA; 30810000=07523000=
+ EMITO(DUP); 30815000=07524000=
+ EMITO(ADD); 30820000=07525000=
+ EMITO(BFW); 30825000=07526000=
+ GT3:= TAKE(GT4:= GIT(ELBW))+GT4; 30830000=07527000=
+ FOR GT4:= GT4+1 STEP 1 UNTIL GT3 DO 30835000=07528000=
+ GOGEN(TAKE(GT4), BFW); 30840000=07529000=
+ END; 30845000=07530000=
+EXIT: 30850000=07531000=
+ END GOSTMT; 30855000=07531000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30860000=07531000=
+ PROCEDURE GOGEN(LABELBAT, BRANCHTYPE); 30865000=07535000=
+ VALUE 30870000=07536000=
+ LABELBAT, 30875000=07536000=
+ BRANCHTYPE; 30880000=07536000=
+ REAL 30885000=07537000=
+ LABELBAT, 30890000=07537000=
+ BRANCHTYPE; 30895000=07537000=
+ BEGIN 30900000=07538000=
+ IF BOOLEAN(GT1:= TAKE(GT2:= GIT(LABELBAT))).[1:1] THEN 30905000=07540000=
+ EMITB(BRANCHTYPE, BUMPL, GT1.[36:12]) 30910000=07541000=
+ COMMENT LABELR SETS THE SIGN OF THE ADDITIONAL INFO FOR A LABEL 30915000=07541000=
+ NEGATIVE WHEN THE LABEL IS ENCOUNTERED. SO THIS MEANS 30920000=07542000=
+ THAT WE NOW KNOW WHERE TO GO; 30925000=07543000=
+ ELSE 30930000=07544000=
+ BEGIN 30935000=07544000=
+ EMIT(GT1); 30940000=07544000=
+ EMIT(BRANCHTYPE); 30945000=07544000=
+ PUT(GT1 & L[36:36:12], GT2) 30950000=07545000=
+ END 30955000=07545000=
+ END GOGEN; 30960000=07545000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30965000=07545000=
+ 30970000=07546000=
+ COMMENT SIMPGO IS USED ONLY BY THE IF STMT ROUTINE. IT DETERMINES IF 30975000=07546000=
+ A STATEMENT IS A SIMPLE GO TO STATEMENT; 30980000=07547000=
+ BOOLEAN PROCEDURE SIMPGO; 30985000=07548000=
+ BEGIN 30990000=07549000=
+ LABEL 30995000=07549000=
+ EXIT; 31000000=07549000=
+ IF ELCLASS = GOV THEN 31005000=07551000=
+ BEGIN 31010000=07551000=
+ IF STEPI = TOV THEN 31015000=07552000=
+ STEPIT; 31020000=07552000=
+ IF ELCLASS = LABELID THEN 31025000=07553000=
+ IF LOCAL(ELBAT[I]) THEN 31030000=07554000=
+ BEGIN 31035000=07555000=
+ SIMPGO:= TRUE; 31040000=07555000=
+ GO EXIT 31045000=07555000=
+ END; 31050000=07555000=
+ I:= I-1; 31055000=07556000=
+ ELCLASS:= GOV 31060000=07556000=
+ END; 31065000=07556000=
+EXIT: 31070000=07557000=
+ END SIMPGO; 31075000=07557000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31080000=07557000=
+ 31085000=07558000=
+ COMMENT IFSTMT COMPILES IF STATEMENTS. SPECIAL CARE IS TAKEN TO 31090000=07558000=
+ OPTIMIZE CODE IN THE NEIGHBORHOOD OF THE JUMPS. TO SOME 31095000=07559000=
+ EXTENT SUPPERFULOUS BRANCHING IS AVOIDED; 31100000=07560000=
+ PROCEDURE IFSTMT; 31105000=07561000=
+ BEGIN 31110000=07562000=
+ REAL 31115000=07562000=
+ T1, 31120000=07562000=
+ T2; 31125000=07562000=
+ LABEL 31130000=07562000=
+ EXIT; 31135000=07562000=
+ IFCLAUSE; 31140000=07563000=
+ IF SIMPGO THEN 31145000=07565000=
+ BEGIN 31150000=07565000=
+ T1:= ELBAT[I]; 31155000=07566000=
+ IF STEPI = ELSEV THEN 31160000=07568000=
+ BEGIN 31165000=07568000=
+ STEPIT; 31170000=07569000=
+ IF SIMPGO THEN 31175000=07571000=
+ BEGIN 31180000=07571000=
+ GOGEN(ELBAT[I], BFC); 31185000=07572000=
+ GOGEN(T1, BFW); 31190000=07572000=
+ STEPIT; 31195000=07573000=
+ GO TO EXIT 31200000=07573000=
+ END 31205000=07573000=
+ ELSE 31210000=07573000=
+ BEGIN 31215000=07573000=
+ EMITLNG; 31220000=07573000=
+ GOGEN(T1, BFC); 31225000=07573000=
+ STMT; 31230000=07574000=
+ GO TO EXIT 31235000=07574000=
+ END 31240000=07574000=
+ END; 31245000=07574000=
+ EMITLNG; 31250000=07575000=
+ GOGEN(T1, BFC); 31255000=07575000=
+ GO EXIT 31260000=07576000=
+ END; 31265000=07576000=
+ T1:= BUMPL; 31270000=07577000=
+ STMT; 31275000=07577000=
+ IF ELCLASS ^= ELSEV THEN 31280000=07578000=
+ BEGIN 31285000=07579000=
+ IF L-T1 > 1023 THEN 31290000=07579000=
+ ADJUST; 31295000=07579000=
+ EMITB(BFC, T1, L); 31300000=07579000=
+ GO EXIT 31305000=07579100=
+ END; 31310000=07579100=
+ STEPIT; 31315000=07580000=
+ IF SIMPGO THEN 31320000=07582000=
+ BEGIN 31325000=07582000=
+ T2:= L; 31330000=07583000=
+ L:= T1-2; 31335000=07583000=
+ GOGEN(ELBAT[I], BFC); 31340000=07583000=
+ L:= T2; 31345000=07583000=
+ STEPIT; 31350000=07584000=
+ GO EXIT 31355000=07584000=
+ END; 31360000=07584000=
+ T2:= BUMPL; 31365000=07585000=
+ CONSTANTCLEAN; 31370000=07585000=
+ IF L-T1 > 1023 THEN 31375000=07585100=
+ ADJUST; 31380000=07585100=
+ EMITB(BFC, T1, L); 31385000=07585100=
+ STMT; 31390000=07585100=
+ IF L-T2 > 1023 THEN 31395000=07586000=
+ ADJUST; 31400000=07586000=
+ EMITB(BFW, T2, L); 31405000=07586000=
+EXIT: 31410000=07587000=
+ END IFSTMT; 31415000=07587000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31420000=07587000=
+ 31425000=07588000=
+ COMMENT LABELR HANDLES LABELED STATEMENTS. IT PUTS L INTO THE 31430000=07588000=
+ ADDITIONAL INFO AND MAKES ITS SIGN NEGATIVE. IT COMPILES 31435000=07589000=
+ AT THE SAME TIME ALL THE PREVIOUS FORWARD REFERENCES SET 31440000=07590000=
+ UP FOR IT BY GOGEN. (THE ADDITIONAL INFO LINKS TO A LIST 31445000=07591000=
+ IN THE CODE ARRAY OF ALL FORWARD REFERENCES); 31450000=07592000=
+ PROCEDURE LABELR; 31455000=07593000=
+ BEGIN 31460000=07594000=
+ LABEL 31465000=07594000=
+ EXIT, 31470000=07594000=
+ ROUND; 31475000=07594000=
+ DEFINE 31480000=07595000=
+ ELBATWORD = RR9 #, 31485000=07595000=
+ LINK = GT2 #, 31490000=07595000=
+ INDEX = GT3 #, 31495000=07595000=
+ ADDITIONAL = GT4 #, 31500000=07596000=
+ NEXTLINK = GT5 #; 31505000=07596000=
+ REAL 31510000=07596500=
+ OLDL; 31515000=07596500=
+ DO BEGIN 31520000=07597000=
+ OLDL:= L; 31525000=07597000=
+ IF STEPI ^= COLON THEN 31530000=07597500=
+ BEGIN 31535000=07598000=
+ ERR(133); 31540000=07598000=
+ GO TO EXIT 31545000=07598000=
+ END; 31550000=07598000=
+ IF NOT LOCAL(ELBATWORD:= ELBAT[I-1]) THEN 31555000=07600000=
+ BEGIN 31560000=07600000=
+ FLAG(134); 31565000=07600000=
+ GO TO ROUND 31570000=07600000=
+ END; 31575000=07600000=
+ IF STEPI = COLON THEN 31580000=07600100=
+ BEGIN 31585000=07600200=
+ I:= I-1; 31590000=07600200=
+ ADJUST 31595000=07600200=
+ END 31600000=07600300=
+ ELSE 31605000=07600300=
+ IF ELCLASS = LITNO THEN 31610000=07600300=
+ L:= 4*C 31615000=07600300=
+ ELSE 31620000=07600300=
+ IF ELCLASS = ASTRISK THEN 31625000=07600400=
+ BEGIN 31630000=07600410=
+ IF MODE ^= 0 OR ASTOG THEN 31635000=07600410=
+ FLAG(505); 31640000=07600420=
+ ASTOG:= TRUE; 31645000=07600430=
+ L:= 4*PRTI; 31650000=07600440=
+ END 31655000=07600500=
+ ELSE 31660000=07600500=
+ I:= I-2; 31665000=07600500=
+ IF STEPI ^= COLON THEN 31670000=07600600=
+ BEGIN 31675000=07600700=
+ ERR(133); 31680000=07600700=
+ GO TO EXIT 31685000=07600700=
+ END; 31690000=07600700=
+ IF L < OLDL THEN 31695000=07600800=
+ BEGIN 31700000=07600900=
+ FLAG(504); 31705000=07600900=
+ GO TO ROUND 31710000=07600900=
+ END; 31715000=07600900=
+ GT1:= TABLE(I+1); 31720000=07600950=
+ LINK:= (ADDITIONAL:= TAKE(INDEX:= GIT(ELBATWORD))).[36:12]; 31725000=07602000=
+ IF ADDITIONAL < 0 THEN 31730000=07603000=
+ BEGIN 31735000=07604000=
+ FLAG(135); 31740000=07604000=
+ GO TO ROUND 31745000=07604000=
+ END; 31750000=07604000=
+ FOULED:= L; 31755000=07604010=
+ IF TABLE(I+1) = COLON THEN 31760000=07604020=
+ BEGIN 31765000=07604030=
+ IF LINK ^= 0 THEN 31770000=07604040=
+ BEGIN 31775000=07604040=
+ OLDL:= L; 31780000=07604040=
+ DO BEGIN 31785000=07604050=
+ NEXTLINK:= GET(LINK); 31790000=07604050=
+ L:= LINK; 31795000=07604060=
+ IF OLDL.[36:10]-L.[36:10] >= 128 THEN 31800000=07604068=
+ FLAG(50) 31805000=07604068=
+ ELSE 31810000=07604068=
+ EMIT(OLDL-LINK & 0[46:46:2]+0 & NEXTLINK[46:46:2]+ 31815000=07604080=
+ 3072); 31820000=07604080=
+ L:= L-1; 31825000=07604085=
+ END 31830000=07604090=
+ UNTIL LINK:= LINK-NEXTLINK DIV 4 = L; 31835000=07604090=
+ L:= OLDL; 31840000=07604100=
+ END; 31845000=07604100=
+ STEPIT; 31850000=07604100=
+ DO 31855000=07604110=
+ IF STEPI <= STRNGCON AND ELCLASS >= NONLITNO THEN 31860000=07604120=
+ EMITWORD(C) 31865000=07604130=
+ ELSE 31870000=07604130=
+ BEGIN 31875000=07604130=
+ ERR(500); 31880000=07604130=
+ I:= I-1 31885000=07604130=
+ END 31890000=07604140=
+ UNTIL STEPI ^= COMMA; 31895000=07604140=
+ I:= I-1; 31900000=07604150=
+ END 31905000=07605000=
+ ELSE 31910000=07605000=
+ WHILE LINK ^= 0 DO 31915000=07606000=
+ BEGIN 31920000=07606000=
+ NEXTLINK:= GET(LINK-2); 31925000=07607000=
+ IF L-LINK > 1023 THEN 31930000=07607100=
+ ADJUST; 31935000=07607100=
+ EMITB(GET(LINK-1), LINK, L); 31940000=07608000=
+ LINK:= NEXTLINK 31945000=07609000=
+ END; 31950000=07609000=
+ PUT(-ADDITIONAL & L[36:36:12], INDEX); 31955000=07610000=
+ ROUND: 31960000=07645000=
+ ERRORTOG:= TRUE 31965000=07645000=
+ END 31970000=07645000=
+ UNTIL STEPI ^= LABELID; 31975000=07645000=
+EXIT: 31980000=07646000=
+ END LABELR; 31985000=07646000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31990000=07646000=
+ PROCEDURE FILLSTMT(SIZE); 31995000=07647000=
+ VALUE 32000000=07647000=
+ SIZE; 32005000=07647000=
+ INTEGER 32010000=07647000=
+ SIZE; 32015000=07647000=
+ BEGIN 32020000=07647500=
+ 32025000=07648000=
+COMMENT "COCT" PERFORMS THE OCTAL CONVERT FOR THE FILL STATEMENT. 32030000=07648000=
+ IF THERE ARE ANY NON-OCTAL DIGITS, THIS PROCEDURE RETURNS 32035000=07648500=
+ A ZERO AND THEN THE 3 LOW-ORDER BITS OF THE BAD DIGIT ARE 32040000=07649000=
+ RESET AND IGNORED AND ERROR NUMBER 303 IS PRINTED. "COCT" 32045000=07649500=
+ ALLOWS FLAG BITS TO BE SET, WHEREAS "OCTIZE" DOES NOT. 32050000=07650000=
+ N NUMBER OF CHARACTERS TO BE CONVERTED. 32055000=07650500=
+ SKBIT NUMBER OF BITS TO SKIP BEFORE STARTING CONVERSION. 32060000=07651000=
+ THIS IS BECAUSE THE NO. OF CHARS. MAY BE LESS THAN 32065000=07651500=
+ 8 AND IT MUST BE RIGHT JUSTIFIED IN CD(CODEFILE). 32070000=07652000=
+ ACC ADDRESS OF THE ACCUM WHERE ALPHA INFO IS KEPT. 32075000=07652500=
+ ; 32080000=07653000=
+ REAL 32085000=07653500=
+ STREAM PROCEDURE COCT(N, SKBIT, ACC, CD); 32090000=07653500=
+ VALUE 32095000=07653500=
+ N, 32100000=07653500=
+ SKBIT; 32105000=07653500=
+ BEGIN 32110000=07654000=
+ SI:= ACC; 32115000=07654500=
+ SI:= SI+6; 32120000=07654500=
+ DI:= CD; 32125000=07654500=
+ DS:= 8 LIT 6"00000000"; 32130000=07654500=
+ DI:= CD; 32135000=07655000=
+ SKIP SKBIT DB; 32140000=07655000=
+ TALLY:= 1; 32145000=07655000=
+ N(IF SC > 6"7" THEN TALLY:= 0;SKIP 3 SB;3 32150000=07656000=
+ (IF SB THEN DS:= 1 SET ELSE SKIP 1 DB;SKIP 1 SB)); 32155000=07656000=
+ COCT:= TALLY 32160000=07657000=
+ END COCT; 32165000=07657000=
+ REAL 32170000=07657500=
+ T2; 32175000=07657500=
+ LABEL 32180000=07658000=
+ L1; 32185000=07658000=
+ STREAM PROCEDURE ZEERO(D); 32190000=07658500=
+ BEGIN 32195000=07659000=
+ DI:= D; 32200000=07659500=
+ DS:= 8 LIT 6"00000000"; 32205000=07659500=
+ SI:= D; 32210000=07660000=
+ 31(32(DS:= WDS)); 32215000=07660000=
+ DS:= 30 WDS; 32220000=07660000=
+ END ZEERO; 32225000=07660500=
+ STREAMTOG:= BOOLEAN(2); 32230000=07661000=
+ SEGMENTSTART(TRUE); 32235000=07661500=
+ IF STEPI ^= ASSIGNOP THEN 32240000=07662000=
+ ZEERO(CODE(1)) 32245000=07662500=
+ ELSE 32250000=07662500=
+ BEGIN 32255000=07662500=
+ FOR T2:= 1 STEP 1 UNTIL SIZE DO 32260000=07663000=
+ BEGIN 32265000=07663500=
+ IF STEPI > IDMAX THEN 32270000=07664000=
+ BEGIN 32275000=07664500=
+ IF ELCLASS ^= LITNO AND ELCLASS ^= NONLITNO THEN 32280000=07665000=
+ IF ELCLASS ^= STRNGCON THEN 32285000=07665500=
+ IF ELCLASS = ADOP AND(STEPI = NONLITNO OR ELCLASS = LITNO)32290000=07666500=
+ THEN 32295000=07666500=
+ C:= C & ELBAT[I-1][1:21:1] 32300000=07667500=
+ ELSE 32305000=07667500=
+ BEGIN 32310000=07667500=
+ ERROR(302); 32315000=07667500=
+ GO TO L1 32320000=07667500=
+ END; 32325000=07667500=
+ IF ELCLASS = STRNGCON AND COUNT = 8 THEN 32330000=07668000=
+ MOVECHARACTERS(8, ACCUM[1], 3, CODE(T2), 0) 32335000=07669000=
+ ELSE 32340000=07669000=
+ MOVE(1, C, CODE(T2)) 32345000=07669500=
+ END 32350000=07670000=
+ ELSE 32355000=07670000=
+ IF COUNT <= 19 AND ACCUM[1].[18:18] = 6"OCT" THEN 32360000=07670000=
+ BEGIN 32365000=07670500=
+ IF COCT(COUNT-3, 48-(COUNT-3)*3, ACCUM[1], CODE(T2)) = 0 32370000=07671500=
+ THEN 32375000=07671500=
+ FLAG(303) 32380000=07672500=
+ END 32385000=07672500=
+ ELSE 32390000=07672500=
+ BEGIN 32395000=07672500=
+ ERROR(302); 32400000=07672500=
+ GO TO L1 32405000=07672500=
+ END; 32410000=07672500=
+ IF STEPI ^= COMMA THEN 32415000=07673000=
+ GO TO L1 32420000=07673500=
+ END; 32425000=07673500=
+ ERROR(54); 32430000=07674000=
+ END; 32435000=07674500=
+L1: RIGHT(SIZE*4); 32440000=07675500=
+ STREAMTOG:= FALSE; 32445000=07676000=
+ SEGMENT(SIZE, 0); 32450000=07676500=
+ PROGDESCBLDR(ADDRSF, TRUE, SIZE, DDES); 32455000=07677000=
+ END FILLSTMT; 32460000=07677500=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32465000=07677500=
+ PROCEDURE STMT; 32470000=07711000=
+ BEGIN 32475000=07712000=
+ LABEL 32480000=07713000=
+ L1, 32485000=07713000=
+ L2, 32490000=07713000=
+ L3, 32495000=07713000=
+ L4, 32500000=07713000=
+ L5, 32505000=07713000=
+ L6, 32510000=07713000=
+ L7, 32515000=07713000=
+ L8, 32520000=07713000=
+ L9, 32525000=07713000=
+ L10, 32530000=07714000=
+ L11, 32535000=07714000=
+ L12, 32540000=07714000=
+ L13, 32545000=07714000=
+ L14, 32550000=07714000=
+ L15, 32555000=07714000=
+ L16, 32560000=07714000=
+ L17, 32565000=07714000=
+ L18, 32570000=07714000=
+ L19, 32575000=07714000=
+ L20, 32580000=07715000=
+ L21, 32585000=07715000=
+ L22, 32590000=07715000=
+ L23, 32595000=07715000=
+ L24, 32600000=07715000=
+ L25, 32605000=07715000=
+ L26, 32610000=07715000=
+ L27, 32615000=07715000=
+ L28, 32620000=07715000=
+ L29, 32625000=07715000=
+ L30, 32630000=07716000=
+ L31, 32635000=07716000=
+ L32, 32640000=07716000=
+ L33, 32645000=07716000=
+ L34, 32650000=07716000=
+ L35, 32655000=07716000=
+ L36, 32660000=07716000=
+ L37, 32665000=07716000=
+ L38, 32670000=07716000=
+ L39, 32675000=07716000=
+ L40, 32680000=07717000=
+ L41, 32685000=07717000=
+ L42, 32690000=07717000=
+ L43, 32695000=07717000=
+ L44, 32700000=07717000=
+ L45, 32705000=07717000=
+ L46, 32710000=07717000=
+ L47, 32715000=07717000=
+ L48, 32720000=07717000=
+ L49, 32725000=07717000=
+ L50, 32730000=07718000=
+ L51, 32735000=07718000=
+ L52, 32740000=07718000=
+ L53, 32745000=07718000=
+ L54; 32750000=07718000=
+ SWITCH 32755000=07719000=
+ S:= L1, 32760000=07720000=
+ L2, 32765000=07720000=
+ L3, 32770000=07720000=
+ L4, 32775000=07720000=
+ L5, 32780000=07720000=
+ L6, 32785000=07720000=
+ L7, 32790000=07720000=
+ L8, 32795000=07720000=
+ L9, 32800000=07720000=
+ L10, 32805000=07721000=
+ L11, 32810000=07721000=
+ L12, 32815000=07721000=
+ L13, 32820000=07721000=
+ L14, 32825000=07721000=
+ L15, 32830000=07721000=
+ L16, 32835000=07721000=
+ L17, 32840000=07721000=
+ L18, 32845000=07721000=
+ L19, 32850000=07721000=
+ L20, 32855000=07722000=
+ L21, 32860000=07722000=
+ L22, 32865000=07722000=
+ L23, 32870000=07722000=
+ L24, 32875000=07722000=
+ L25, 32880000=07722000=
+ L26, 32885000=07722000=
+ L27, 32890000=07722000=
+ L28, 32895000=07722000=
+ L29, 32900000=07722000=
+ L30, 32905000=07723000=
+ L31, 32910000=07723000=
+ L32, 32915000=07723000=
+ L33, 32920000=07723000=
+ L34, 32925000=07723000=
+ L35, 32930000=07723000=
+ L36, 32935000=07723000=
+ L37, 32940000=07723000=
+ L38, 32945000=07723000=
+ L39, 32950000=07723000=
+ L40, 32955000=07724000=
+ L41, 32960000=07724000=
+ L42, 32965000=07724000=
+ L43, 32970000=07724000=
+ L44, 32975000=07724000=
+ L45, 32980000=07724000=
+ L46, 32985000=07724000=
+ L47, 32990000=07724000=
+ L48, 32995000=07724000=
+ L49, 33000000=07724000=
+ L50, 33005000=07725000=
+ L51, 33010000=07725000=
+ L52, 33015000=07725000=
+ L53, 33020000=07725000=
+ L54; 33025000=07725000=
+ LABEL 33030000=07726000=
+ AGAIN, 33035000=07726000=
+ EXIT; 33040000=07726000=
+ STACKCT:= 0; 33045000=07726990=
+AGAIN: 33050000=07727000=
+ GO TO S[ELCLASS]; 33055000=07727000=
+ IF ELCLASS = COLON THEN 33060000=07727010=
+ BEGIN 33065000=07727020=
+ STEPIT; 33070000=07727020=
+ GT1:= L; 33075000=07727020=
+ IF ELCLASS = COLON THEN 33080000=07727030=
+ BEGIN 33085000=07727040=
+ ADJUST; 33090000=07727040=
+ I:= I-1 33095000=07727040=
+ END 33100000=07727050=
+ ELSE 33105000=07727050=
+ IF ELCLASS = LITNO THEN 33110000=07727050=
+ L:= 4*C 33115000=07727060=
+ ELSE 33120000=07727060=
+ I:= I-1; 33125000=07727060=
+ IF L < GT1 OR STEPI ^= COLON THEN 33130000=07727070=
+ BEGIN 33135000=07727080=
+ ERR(504); 33140000=07727080=
+ GO TO EXIT 33145000=07727080=
+ END; 33150000=07727080=
+ STEPIT; 33155000=07727090=
+ GO TO AGAIN; 33160000=07727100=
+ END; 33165000=07727110=
+ IF ELCLASS = 0 THEN 33170000=07728000=
+ FLAG(100); 33175000=07728000=
+ FLAG(145); 33180000=07728000=
+L1: 33185000=07729000=
+L2: 33190000=07729000=
+L3: 33195000=07729000=
+L4: 33200000=07729000=
+L5: 33205000=07729000=
+L6: 33210000=07729000=
+L9: 33215000=07729000=
+L11: 33220000=07729000=
+L13: 33225000=07729000=
+L14: 33230000=07729000=
+L15: 33235000=07729000=
+L16: 33240000=07729000=
+L17: 33245000=07729000=
+L20: 33250000=07729000=
+L21: 33255000=07729000=
+L25: 33260000=07729000=
+L28: 33265000=07729000=
+L29: 33270000=07729000=
+L24: 33275000=07730000=
+L33: 33280000=07730000=
+L34: 33285000=07730000=
+L35: 33290000=07730000=
+L36: 33295000=07730000=
+L37: 33300000=07730000=
+L39: 33305000=07731000=
+ ERR(144); 33310000=07731000=
+ GO TO EXIT; 33315000=07731000=
+L7: 33320000=07732000=
+L8: SUBHAND(TRUE); 33325000=07733000=
+ GO TO EXIT; 33330000=07733000=
+L10: 33335000=07734000=
+L18: 33340000=07734000=
+L19: 33345000=07735000=
+ PROCSTMT(TRUE); 33350000=07735000=
+ GO TO EXIT; 33355000=07735000=
+L12: 33360000=07737000=
+ STRMPROCSTMT; 33365000=07737000=
+ GO TO EXIT; 33370000=07737000=
+L22: 33375000=07738000=
+L23: 33380000=07738000=
+L26: 33385000=07738000=
+L27: 33390000=07738000=
+L30: 33395000=07738000=
+L31: 33400000=07739000=
+ VARIABLE(FS); 33405000=07739000=
+ GO TO EXIT; 33410000=07739000=
+L32: 33415000=07741000=
+ LABELR; 33420000=07741000=
+ GO TO AGAIN; 33425000=07741000=
+L38: 33430000=07743000=
+ POLISHER(0); 33435000=07743000=
+ GO TO EXIT; 33440000=07743000=
+L40: 33445000=07745000=
+ IF ELBAT[I].ADDRESS = STREAMV THEN 33450000=07745000=
+ BEGIN 33455000=07746000=
+ INLINE; 33460000=07746000=
+ GO TO EXIT 33465000=07746000=
+ END; 33470000=07746000=
+ FLAG(146); 33475000=07747000=
+ IF TABLE(I-2) = ENDV AND MODE > 0 THEN 33480000=07748000=
+ BEGIN 33485000=07749000=
+ I:= I-2; 33490000=07749000=
+ ELCLASS:= ENDV; 33495000=07749000=
+ GO TO EXIT 33500000=07749000=
+ END; 33505000=07749000=
+ I:= I-1; 33510000=07750000=
+ ERRORTOG:= TRUE; 33515000=07750000=
+ BLOCK(FALSE); 33520000=07750000=
+ ELCLASS:= TABLE(I:= I-1); 33525000=07751000=
+ GO TO EXIT; 33530000=07751000=
+L42: 33535000=07753000=
+ DBLSTMT; 33540000=07753000=
+ GO TO EXIT; 33545000=07753000=
+L43: 33550000=07755000=
+ FORSTMT; 33555000=07755000=
+ GO TO EXIT; 33560000=07755000=
+L44: 33565000=07757000=
+ WHILESTMT; 33570000=07757000=
+ GO TO EXIT; 33575000=07757000=
+L45: 33580000=07759000=
+ DOSTMT; 33585000=07759000=
+ GO TO EXIT; 33590000=07759000=
+L51: 33595000=07761000=
+ IFSTMT; 33600000=07761000=
+ GO TO EXIT; 33605000=07761000=
+L52: 33610000=07763000=
+ GOSTMT; 33615000=07763000=
+ GO TO EXIT; 33620000=07763000=
+L53: 33625000=07765000=
+ IOSTMT; 33630000=07765000=
+ GO TO EXIT; 33635000=07765000=
+L54: 33640000=07767000=
+ IF STEPI = DECLARATORS THEN 33645000=07767000=
+ BEGIN 33650000=07768000=
+ IF ELBAT[I].ADDRESS = STREAMV THEN 33655000=07768100=
+ IF STEPI = % 6 33660000=07768100=
+LEFTPAREN 33665000=07768110=
+ THEN % 6 33670000=07768110=
+ BEGIN % 6 33675000=07768120=
+ ELCLASS:= TABLE(I:= I-1); 33680000=07768130=
+ COMPOUNDTAIL; 33685000=07768140=
+ GO TO EXIT; 33690000=07768160=
+ END 33695000=07768170=
+ ELSE 33700000=07768170=
+ I:= I-1; % 6 33705000=07768170=
+ I:= I-1; % 6 33710000=07768180=
+ BLOCK(FALSE); 33715000=07768200=
+ END 33720000=07768200=
+ ELSE 33725000=07768200=
+ COMPOUNDTAIL; 33730000=07768200=
+L46: 33735000=07769000=
+L47: 33740000=07769000=
+L48: 33745000=07769000=
+L50: 33750000=07770000=
+L49: 33755000=07770000=
+L41: 33760000=07771000=
+EXIT: 33765000=07771000=
+ END STMT; 33770000=07771000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33775000=07771000=
+ PROCEDURE IOSTMT; 33780000=07993000=
+ IF(GT1:= ELBAT[I].ADDRESS > 15 THEN ERR(98) 33785000=07994000=
+ ELSE 33790000=07994000=
+ BEGIN 33795000=07995000=
+ EMIT(ELBAT[I-1].ADDRESS & GT1[41:47:1] & GT1[36:44:3]); 33800000=07995000=
+ STEPIT 33805000=07997000=
+ END SCOPE STATEMENT; 33810000=07997000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33815000=07997000=
+ PROCEDURE FORSTMT; 33820000=08008000=
+ BEGIN 33825000=08009000=
+ OWN REAL 33830000=08010000=
+ B, 33835000=08010000=
+ STMTSTART, 33840000=08010000=
+ REGO, 33845000=08010000=
+ RETURNSTORE, 33850000=08010000=
+ ADDRES, 33855000=08010000=
+ V, 33860000=08010000=
+ VRET, 33865000=08011000=
+ BRET; 33870000=08011000=
+ OWN BOOLEAN 33875000=08012000=
+ SIGNA, 33880000=08012000=
+ SIGNB, 33885000=08012000=
+ SIGNC, 33890000=08012000=
+ INT, 33895000=08013000=
+ CONSTANA, 33900000=08013000=
+ CONSTANB, 33905000=08013000=
+ CONSTANC; 33910000=08013000=
+ DEFINE 33915000=08014000=
+ SIMPLEB = SIGNC #, 33920000=08014000=
+ FORMALV = SIGNA #, 33925000=08015000=
+ SIMPLEV = CONSTANA #, 33930000=08015000=
+ A = V #, 33935000=08015000=
+ Q = REGO #, 33940000=08016000=
+ OPDC = TRUE #, 33945000=08016000=
+ DESC = FALSE #, 33950000=08016000=
+ K = BRET #; 33955000=08016000=
+ LABEL 33960000=08017000=
+ EXIT; 33965000=08017000=
+ 33970000=08018000=
+ COMMENT PLUG EMITS EITHER AN OPERAND CALL ON A VARIABLE OR A CALL ON A 33975000=08018000=
+ CONSTANT DEPENDING ON THE REQUIREMENTS; 33980000=08019000=
+ PROCEDURE PLUG(C, A); 33985000=08020000=
+ VALUE 33990000=08020000=
+ C, 33995000=08020000=
+ A; 34000000=08020000=
+ REAL 34005000=08020000=
+ A; 34010000=08020000=
+ BOOLEAN 34015000=08020000=
+ C; 34020000=08020000=
+ IF C THEN 34025000=08021000=
+ EMITNUM(A) 34030000=08021000=
+ ELSE 34035000=08021000=
+ EMITV(A, ADDRESS); 34040000=08021000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34045000=08021000=
+ 34050000=08022000=
+ COMMENT SIMPLE DETERMINES IF AN ARITHMETIC EXPRESSION IS + OR - A 34055000=08022000=
+ CONSTANT OR A SIMPLE VARIABLE. IT MAKES A THROUGH REPORT 34060000=08023000=
+ ON ITS ACTIVITY. IT ALSO MAKES PROVISION FOR THE RESCAN 34065000=08024000=
+ OF ELBAT (THIS IS THE ACTION WITH K - SEE CODE IN THE 34070000=08025000=
+ TABLE ROUTINE FOR FURTHER DETAILS); 34075000=08026000=
+ BOOLEAN PROCEDURE SIMPLE(B, A, S); 34080000=08027000=
+ BOOLEAN 34085000=08027000=
+ B, 34090000=08027000=
+ S; 34095000=08027000=
+ REAL 34100000=08027000=
+ A; 34105000=08027000=
+ BEGIN 34110000=08028000=
+ S:= 34115000=08029000=
+ IF STEPI ^= ADOP THEN 34120000=08029000=
+ FALSE 34125000=08029000=
+ ELSE 34130000=08029000=
+ ELBAT[I].ADDRESS = SUB; 34135000=08030000=
+ IF ELCLASS = ADOP THEN 34140000=08031000=
+ STEPIT; 34145000=08031000=
+ IF ELCLASS >= NONLITNO AND ELCLASS <= STRNGCON THEN 34150000=08033000=
+ BEGIN 34155000=08033000=
+ K:= K+1; 34160000=08033000=
+ SIMPLE:= TRUE; 34165000=08033000=
+ ELBAT[I]:= 0 & COMMENTV[2:41:7] & K[16:37:11]; 34170000=08034000=
+ INFO[0, K]:= A:= C; 34175000=08035000=
+ B:= TRUE 34180000=08035000=
+ END 34185000=08036000=
+ ELSE 34190000=08036000=
+ BEGIN 34195000=08036000=
+ B:= FALSE; 34200000=08037000=
+ A:= ELBAT[I]; 34205000=08037000=
+ SIMPLE:= REALID <= ELCLASS AND ELCLASS <= INTID 34210000=08038000=
+ END; 34215000=08038000=
+ STEPIT 34220000=08039000=
+ END SIMPLE; 34225000=08039000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34230000=08039000=
+ 34235000=08040000=
+ COMMENT TEST EMITS THE STEP-UNTIL ELEMENT TEST; 34240000=08040000=
+ PROCEDURE TEST; 34245000=08041000=
+ BEGIN 34250000=08042000=
+ IF NOT CONSTANB THEN 34255000=08043000=
+ BEGIN 34260000=08044000=
+ EMITO(SUB); 34265000=08044000=
+ IF SIMPLEB THEN 34270000=08044000=
+ EMITV(B.ADDRESS) 34275000=08045000=
+ ELSE 34280000=08045000=
+ BEGIN 34285000=08045000=
+ EMITL(2+L-BRET); 34290000=08046000=
+ EMITB(BBW, BUMPL, B); 34295000=08047000=
+ END; 34300000=08048000=
+ EMITO(MUL); 34305000=08049000=
+ EMIT(0) 34310000=08049000=
+ END; 34315000=08049000=
+ EMITO(IF SIGNB THEN GEQ ELSE LEQ); 34320000=08050000=
+ EMIT(0); 34325000=08050000=
+ L:= L-1 34330000=08051000=
+ END TEST; 34335000=08051000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34340000=08051000=
+ BOOLEAN PROCEDURE SIMPI(ALL); 34345000=08052000=
+ VALUE 34350000=08052000=
+ ALL; 34355000=08052000=
+ REAL 34360000=08052000=
+ ALL; 34365000=08052000=
+ BEGIN 34370000=08053000=
+ CHECKER(VRET:= ALL); 34375000=08054000=
+ ADDRES:= ALL.ADDRESS; 34380000=08055000=
+ FORMALV:= ALL.[9:2] = 2; 34385000=08056000=
+ IF T:= ALL.CLASS > INTARRAYID OR T < BOOID OR GT1:= (T-BOOID) MOD 34390000=08058000=
+ 4 < 1 34395000=08058000=
+ THEN 34400000=08058000=
+ ERR(REAL(T ^= 0)*51+100); 34405000=08059000=
+ INT:= GT1 = 2; 34410000=08060000=
+ SIMPI:= T <= INTID 34415000=08061000=
+ END SIMPI; 34420000=08061000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34425000=08061000=
+ 34430000=08062000=
+ COMMENT STORE EMITS THE CODE FOR THE STORE INTO THE FOR INDEX; 34435000=08062000=
+ PROCEDURE STORE(S); 34440000=08063000=
+ VALUE 34445000=08063000=
+ S; 34450000=08063000=
+ BOOLEAN 34455000=08063000=
+ S; 34460000=08063000=
+ BEGIN 34465000=08064000=
+ IF FORMALV THEN 34470000=08065000=
+ BEGIN 34475000=08065000=
+ EMITO(XCH); 34480000=08065000=
+ S:= FALSE 34485000=08065000=
+ END 34490000=08066000=
+ ELSE 34495000=08066000=
+ BEGIN 34500000=08066000=
+ EMITL(ADDRES); 34505000=08067000=
+ IF ADDRES > 1023 THEN 34510000=08068000=
+ EMITO(PRTE) 34515000=08068000=
+ END; 34520000=08068000=
+ T:= (REAL(S)+1)*16; 34525000=08069000=
+ EMITO((IF INT THEN T+512 ELSE 4*T)+4) 34530000=08070000=
+ END STORE; 34535000=08070000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34540000=08070000=
+ 34545000=08071000=
+ COMMENT CALL EFFECTS A CALL ON THE INDEX; 34550000=08071000=
+ PROCEDURE CALL(S); 34555000=08072000=
+ VALUE 34560000=08072000=
+ S; 34565000=08072000=
+ BOOLEAN 34570000=08072000=
+ S; 34575000=08072000=
+ BEGIN 34580000=08073000=
+ IF SIMPLEV THEN 34585000=08075000=
+ IF S THEN 34590000=08075000=
+ EMITV(ADDRES) 34595000=08075000=
+ ELSE 34600000=08075000=
+ EMITN(ADDRES) 34605000=08076000=
+ ELSE 34610000=08076000=
+ BEGIN 34615000=08076000=
+ EMITL(2+L-VRET); 34620000=08077000=
+ EMITB(BBW, BUMPL, V); 34625000=08078000=
+ IF S THEN 34630000=08079000=
+ EMITO(LOD) 34635000=08079000=
+ END 34640000=08079000=
+ END CALL; 34645000=08079000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34650000=08079000=
+ PROCEDURE FORLIST(NUMLE); 34655000=08080000=
+ VALUE 34660000=08080000=
+ NUMLE; 34665000=08080000=
+ BOOLEAN 34670000=08080000=
+ NUMLE; 34675000=08080000=
+ BEGIN 34680000=08081000=
+ PROCEDURE FIX(STORE, BACK, FORWART, START); 34685000=08082000=
+ VALUE 34690000=08083000=
+ STORE, 34695000=08083000=
+ BACK, 34700000=08083000=
+ FORWART, 34705000=08083000=
+ START; 34710000=08083000=
+ REAL 34715000=08084000=
+ STORE, 34720000=08084000=
+ BACK, 34725000=08084000=
+ FORWART, 34730000=08084000=
+ START; 34735000=08084000=
+ BEGIN 34740000=08085000=
+ EMITB(GET(FORWART-1), FORWART, START); 34745000=08086000=
+ IF RETURNSTORE ^= 0 THEN 34750000=08088000=
+ BEGIN 34755000=08088000=
+ L:= STORE; 34760000=08089000=
+ EMITNUM(B-BACK); 34765000=08089000=
+ EMITPAIR(RETURNSTORE, STD) 34770000=08090000=
+ END 34775000=08090000=
+ END FIX; 34780000=08090000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34785000=08090000=
+ INTEGER 34790000=08091000=
+ BACKFIX, 34795000=08091000=
+ FORWARDBRANCH, 34800000=08091000=
+ FOOT, 34805000=08091000=
+ STOREFIX; 34810000=08091000=
+ LABEL 34815000=08092000=
+ BRNCH, 34820000=08092000=
+ EXIT; 34825000=08092000=
+ STOREFIX:= L; 34830000=08093000=
+ Q:= REAL(MODE = 0)+3; 34835000=08093000=
+ FOR K:= 1 STEP 1 UNTIL Q DO 34840000=08094000=
+ EMITO(NOP); 34845000=08094000=
+ IF NUMLE THEN 34850000=08096000=
+ BEGIN 34855000=08096000=
+ BACKFIX:= L; 34860000=08097000=
+ IF FORMALV THEN 34865000=08098000=
+ CALL(DESC) 34870000=08099000=
+ END 34875000=08099000=
+ ELSE 34880000=08099000=
+ BACKFIX:= V+REAL(SIMPLEV)-1; 34885000=08099000=
+ AEXP; 34890000=08101000=
+ COMMENT PICK UP FIRST ARITHMETIC EXPRESSION; 34895000=08102000=
+ IF ELCLASS = STEPV THEN 34900000=08104000=
+ BEGIN 34905000=08104000=
+ COMMENT HERE WE HAVE A STEP ELEMENT; 34910000=08105000=
+ BACKFIX:= BUMPL; 34915000=08106000=
+ COMMENT LEAVE ROOM FOR FORWARD JUMP; 34920000=08107000=
+ IF FORMALV THEN 34925000=08108000=
+ CALL(DESC); 34930000=08108000=
+ CALL(OPDC); 34935000=08108000=
+ COMMENT FETCH INDEX; 34940000=08109000=
+ IF I > 70 THEN 34945000=08110000=
+ BEGIN 34950000=08110000=
+ NXTELBT:= 1; 34955000=08110000=
+ I:= 0 34960000=08110000=
+ END 34965000=08111000=
+ ELSE 34970000=08111000=
+ REGO:= I; 34975000=08111000=
+ IF SIMPLEB:= SIMPLE(CONSTANB, B, SIGNB) AND 34980000=08114000=
+ (ELCLASS = UNTILV OR ELCLASS = WHILEV) 34985000=08114000=
+ THEN 34990000=08114000=
+ BEGIN 34995000=08114000=
+ COMMENT WE HAVE A SIMPLE STEP FUNCTION; 35000000=08115000=
+ PLUG(CONSTANB, B); 35005000=08116000=
+ END 35010000=08117000=
+ ELSE 35015000=08117000=
+ BEGIN 35020000=08117000=
+ COMMENT THE STEP FUNCTION IS NOT SIMPLE: WE CONSTRUCT A 35025000=08118000=
+ SUBROUTINE; 35030000=08119000=
+ I:= 35035000=08120000=
+ IF I < 4 THEN 35040000=08120000=
+ 0 35045000=08120000=
+ ELSE 35050000=08120000=
+ REGO; 35055000=08120000=
+ STEPIT; 35060000=08120000=
+ SIGNB:= CONSTANB:= FALSE; 35065000=08121000=
+ EMIT(0); 35070000=08122000=
+ B:= L; 35075000=08122000=
+ AEXP; 35080000=08123000=
+ EMITO(XCH); 35085000=08123000=
+ BRET:= L; 35090000=08124000=
+ EMITO(BFW) 35095000=08125000=
+ END; 35100000=08125000=
+ EMITO(REAL(SIGNB)*32+ADD); 35105000=08126000=
+ EMITB(BFW, BACKFIX, L); 35110000=08127000=
+ IF ELCLASS = UNTILV THEN 35115000=08129000=
+ BEGIN 35120000=08129000=
+ COMMENT STEP-UNTIL ELEMENT; 35125000=08129000=
+ STORE(TRUE); 35130000=08130000=
+ IF FORMALV THEN 35135000=08130000=
+ CALL(OPDC); 35140000=08130000=
+ STEPIT; 35145000=08131000=
+ AEXP; 35150000=08131000=
+ TEST 35155000=08131000=
+ END 35160000=08132000=
+ ELSE 35165000=08132000=
+ BEGIN 35170000=08132000=
+ COMMENT STEP-WHILE ELEMENT; 35175000=08132000=
+ IF ELCLASS ^= WHILEV THEN 35180000=08133000=
+ BEGIN 35185000=08134000=
+ ERR(153); 35190000=08134000=
+ GO TO EXIT 35195000=08134000=
+ END; 35200000=08134000=
+ STEPIT; 35205000=08135000=
+ STORE(FALSE); 35210000=08135000=
+ BEXP 35215000=08135000=
+ END 35220000=08136000=
+ END 35225000=08136000=
+ ELSE 35230000=08136000=
+ BEGIN 35235000=08136000=
+ COMMENT WE DO NOT HAVE A STEP ELEMENT; 35240000=08137000=
+ STORE(FALSE); 35245000=08138000=
+ IF ELCLASS = WHILEV THEN 35250000=08140000=
+ BEGIN 35255000=08140000=
+ COMMENT WE HAVE A WHILE ELEMENT; 35260000=08141000=
+ STEPIT; 35265000=08142000=
+ BEXP 35270000=08142000=
+ END 35275000=08143000=
+ ELSE 35280000=08143000=
+ BEGIN 35285000=08143000=
+ COMMENT ONE EXPRESSION ELEMENT; 35290000=08144000=
+ IF ELCLASS ^= COMMA THEN 35295000=08145000=
+ BEGIN 35300000=08145000=
+ EMITB(BFW, BUMPL, L+2); 35305000=08146000=
+ BACKFIX:= L 35310000=08146000=
+ END 35315000=08147000=
+ ELSE 35320000=08147000=
+ BACKFIX:= L+2; 35325000=08147000=
+ L:= L+1; 35330000=08148000=
+ EMIT(BFW); 35335000=08148000=
+ GO TO BRNCH 35340000=08148000=
+ END 35345000=08148000=
+ END; 35350000=08148000=
+ COMMENT THIS IS THE COMMON POINT; 35355000=08149000=
+ IF ELCLASS = COMMA THEN 35360000=08150000=
+ EMITLNG; 35365000=08150000=
+ L:= L+1; 35370000=08150000=
+ EMIT(BFC); 35375000=08151000=
+ BRNCH: 35380000=08152000=
+ FORWARDBRANCH:= L; 35385000=08152000=
+ DIALA:= DIALB:= 0; 35390000=08152000=
+ IF ELCLASS = COMMA THEN 35395000=08154000=
+ BEGIN 35400000=08154000=
+ STEPIT; 35405000=08155000=
+ FORLIST(TRUE); 35410000=08156000=
+ FIX(STOREFIX, BACKFIX, FORWARDBRANCH, STMTSTART) 35415000=08157000=
+ END 35420000=08158000=
+ ELSE 35425000=08158000=
+ BEGIN 35430000=08158000=
+ IF ELCLASS ^= DOV THEN 35435000=08160000=
+ BEGIN 35440000=08160000=
+ ERR(154); 35445000=08160000=
+ REGO:= L; 35450000=08160000=
+ GO EXIT 35455000=08160000=
+ END; 35460000=08160000=
+ STEPIT; 35465000=08161000=
+ IF NUMLE THEN 35470000=08162000=
+ FOOT:= GETSPACE(FALSE, -1); % TEMP. 35475000=08162000=
+ STMT; 35480000=08163000=
+ IF NUMLE THEN 35485000=08165000=
+ BEGIN 35490000=08165000=
+ EMITV(RETURNSTORE:= FOOT); 35495000=08166000=
+ EMITO(BBW) 35500000=08166000=
+ END 35505000=08167000=
+ ELSE 35510000=08167000=
+ BEGIN 35515000=08167000=
+ EMITB(BBW, BUMPL, BACKFIX); 35520000=08168000=
+ RETURNSTORE:= 0 35525000=08168000=
+ END; 35530000=08168000=
+ STMTSTART:= FORWARDBRANCH; 35535000=08169000=
+ B:= L; 35540000=08169000=
+ CONSTANTCLEAN; 35545000=08170000=
+ REGO:= L; 35550000=08170000=
+ FIX(STOREFIX, BACKFIX, FORWARDBRANCH, L) 35555000=08171000=
+ END; 35560000=08171000=
+ EXIT: 35565000=08172000=
+ END FORLIST; 35570000=08172000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%35575000=08172000=
+ REAL 35580000=08173000=
+ T1, 35585000=08173000=
+ T2, 35590000=08173000=
+ T3, 35595000=08173000=
+ T4; 35600000=08173000=
+ NXTELBT:= 1; 35605000=08174000=
+ I:= 0; 35610000=08174000=
+ STEPIT; 35615000=08175000=
+ IF SIMPI(VRET:= ELBAT[I]) THEN 35620000=08177000=
+ BEGIN 35625000=08177000=
+ IF STEPI ^= ASSIGNOP THEN 35630000=08178000=
+ BEGIN 35635000=08178000=
+ ERR(152); 35640000=08178000=
+ GO EXIT 35645000=08178000=
+ END; 35650000=08178000=
+ T1:= L; 35655000=08179000=
+ IF FORMALV THEN 35660000=08179000=
+ EMITN(ADDRES); 35665000=08179000=
+ K:= 0; 35670000=08180000=
+ IF SIMPLE(CONSTANA, A, SIGNA) THEN 35675000=08181000=
+ IF ELCLASS = STEPV THEN 35680000=08182000=
+ IF SIMPLE(CONSTANB, B, SIGNB) THEN 35685000=08183000=
+ IF ELCLASS = UNTILV THEN 35690000=08184000=
+ IF SIMPLE(CONSTANC, Q, SIGNC) THEN 35695000=08185000=
+ IF ELCLASS = DOV THEN 35700000=08186000=
+ BEGIN 35705000=08187000=
+ PLUG(CONSTANA, A); 35710000=08188000=
+ IF SIGNA THEN 35715000=08189000=
+ EMITO(CHS); 35720000=08189000=
+ RETURNSTORE:= BUMPL; 35725000=08190000=
+ ADJUST; 35730000=08190000=
+ CONSTANTCLEAN; 35735000=08190000=
+ STMTSTART:= L; 35740000=08191000=
+ STEPIT; 35745000=08192000=
+ T1:= ((((4096*RETURNSTORE+STMTSTART)*2+REAL(CONSTANB))35750000=08196000=
+ *2+REAL(CONSTANC))*2+REAL(SIGNB))*2+REAL(SIGNC); 35755000=08197000=
+ T2:= VRET; 35760000=08198000=
+ T3:= B; 35765000=08199000=
+ T4:= Q; 35770000=08200000=
+ STMT; 35775000=08201000=
+ SIGNC:= BOOLEAN(T1.[47:1]); 35780000=08202000=
+ SIGNB:= BOOLEAN(T1.[46:1]); 35785000=08203000=
+ CONSTANC:= BOOLEAN(T1.[45:1]); 35790000=08204000=
+ CONSTANB:= BOOLEAN(T1.[44:1]); 35795000=08205000=
+ STMTSTART:= T1.[32:12]; 35800000=08206000=
+ RETURNSTORE:= T1.[20:12]; 35805000=08207000=
+ VRET:= T2; 35810000=08208000=
+ B:= T3; 35815000=08209000=
+ Q:= T4; 35820000=08210000=
+ SIMPLEV:= SIMPI(VRET); 35825000=08211000=
+ IF FORMALV THEN 35830000=08212000=
+ EMITN(ADDRES); 35835000=08212000=
+ EMITV(ADDRES); 35840000=08212000=
+ PLUG(CONSTANB, B); 35845000=08213000=
+ EMITO(IF SIGNB THEN SUB ELSE ADD); 35850000=08214000=
+ EMITB(BFW, RETURNSTORE, L); 35855000=08215000=
+ STORE(TRUE); 35860000=08216000=
+ IF FORMALV THEN 35865000=08217000=
+ CALL(OPDC); 35870000=08217000=
+ PLUG(CONSTANC, Q); 35875000=08218000=
+ IF SIGNC THEN 35880000=08219000=
+ EMITO(CHS); 35885000=08219000=
+ SIMPLEB:= TRUE; 35890000=08220000=
+ TEST; 35895000=08220000=
+ EMITLNG; 35900000=08220000=
+ EMITB(BBC, BUMPL, STMTSTART); 35905000=08221000=
+ GO TO EXIT 35910000=08222000=
+ END; 35915000=08222000=
+ I:= 2; 35920000=08223000=
+ K:= 0; 35925000=08223000=
+ SIMPLEV:= SIMPI(VRET); 35930000=08224000=
+ V:= T1 35935000=08225000=
+ END 35940000=08226000=
+ ELSE 35945000=08226000=
+ BEGIN 35950000=08226000=
+ EMIT(0); 35955000=08227000=
+ V:= L; 35960000=08227000=
+ SIMPLEV:= FALSE; 35965000=08227000=
+ FORMALV:= TRUE; 35970000=08227000=
+ VARIABLE(FR); 35975000=08228000=
+ EMITO(XCH); 35980000=08228000=
+ VRET:= L; 35985000=08228000=
+ EMITO(BFW); 35990000=08228000=
+ IF ELCLASS ^= ASSIGNOP THEN 35995000=08229000=
+ BEGIN 36000000=08229000=
+ ERR(152); 36005000=08229000=
+ GO EXIT 36010000=08229000=
+ END; 36015000=08229000=
+ END; 36020000=08230000=
+ STEPIT; 36025000=08231000=
+ FORLIST(FALSE); 36030000=08231000=
+ L:= REGO; 36035000=08231000=
+EXIT: 36040000=08232000=
+ K:= 0 36045000=08232000=
+ END FORSTMT; 36050000=08232000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36055000=08232000=
+ REAL PROCEDURE REED; 36060000=08999000=
+ BEGIN 36065000=08999025=
+ LABEL 36070000=08999050=
+ EOF; 36075000=08999050=
+ INTEGER 36080000=08999050=
+ I, 36085000=08999050=
+ J, 36090000=08999050=
+ K; 36095000=08999050=
+ STREAM PROCEDURE MOVE(N, F, T); 36100000=08999075=
+ VALUE 36105000=08999075=
+ N, 36110000=08999075=
+ T; 36115000=08999075=
+ BEGIN 36120000=08999100=
+ SI:= F; 36125000=08999100=
+ DI:= T; 36130000=08999100=
+ DS:= N WDS 36135000=08999100=
+ END MOVE; 36140000=08999100=
+ J:= -1; 36145000=08999125=
+ READ(CODISK[NO])[EOF]; 36150000=08999150=
+ REED:= I:= FETCH(MKABS(CODISK(1))); 36155000=08999175=
+ K:= MKABS(CODE(0))-1); 36160000=08999200=
+ WHILE I-J > 30 DO 36165000=08999225=
+ BEGIN 36170000=08999250=
+ MOVE(30, CODISK(0), K); 36175000=08999275=
+ K:= K+30; 36180000=08999275=
+ J:= J+30; 36185000=08999275=
+ READ(CODISK); 36190000=08999300=
+ END; 36195000=08999325=
+ MOVE(I-J, CODISK(0), K); 36200000=08999350=
+ READ(CODISK)[EOF]; 36205000=08999375=
+EOF: 36210000=08999425=
+ END REED; 36215000=08999425=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36220000=08999425=
+ PROCEDURE RIGHT(L); 36225000=08999450=
+ VALUE 36230000=08999450=
+ L; 36235000=08999450=
+ INTEGER 36240000=08999450=
+ L; 36245000=08999450=
+ BEGIN 36250000=08999475=
+ INTEGER 36255000=08999500=
+ I, 36260000=08999500=
+ J; 36265000=08999500=
+ I:= (L+7) DIV 4; 36270000=08999525=
+ MOVE(1, I, CODISK(0)); 36275000=08999550=
+ MOVE(29, CODE(0), CODISK(1)); 36280000=08999575=
+ WRITE(CODISK); 36285000=08999600=
+ J:= 29; 36290000=08999625=
+ WHILE I-J > 0 DO 36295000=08999650=
+ BEGIN 36300000=08999675=
+ MOVE(30, CODE(J), CODISK(0)); 36305000=08999700=
+ WRITE(CODISK); 36310000=08999725=
+ J:= J+30; 36315000=08999750=
+ END; 36320000=08999775=
+ END RIGHT; 36325000=08999800=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36330000=08999800=
+ 36335000=09000000=
+ COMMENT THE PROGRAM ROUTINE DOES THE INITIALIZATION AND THE WRAPUP 36340000=09000000=
+ FOR THE REST OF THE COMPILER. THE MAIN PROGRAM OF THE COMPILER36345000=09001000=
+ IS SIMPLY A CALL ON THE PROGRAM ROUTINE; 36350000=09002000=
+ PROCEDURE PROGRAM; 36355000=09003000=
+ BEGIN 36360000=09004000=
+ STREAM PROCEDURE MDESC(WD, TOLOC); 36365000=09005000=
+ VALUE 36370000=09005000=
+ WD; 36375000=09005000=
+ BEGIN 36380000=09006000=
+ DI:= LOC WD; 36385000=09006000=
+ DS:= SET; 36390000=09006000=
+ SI:= LOC WD; 36395000=09006000=
+ DI:= TOLOC; 36400000=09006000=
+ DS:= WDS 36405000=09006000=
+ END; 36410000=09006000=
+ DEFINE 36415000=09024000=
+ STARTINTRSC = 426 #; 36420000=09024000=
+ LABEL 36425000=09025000=
+ L1; 36430000=09025000=
+ LISTOG:= LISTER:= BOOLEAN(1-ERRORCOUNT.[46:1]); 36435000=09028000=
+ 36440000=09028010=
+COMMENT LISTOG IS NOT SET BY DEFAULT ON TIMESHARING; 36445000=09028010=
+ NOHEADING:= TRUE; 36450000=09028050=
+ ERRORCOUNT:= 0; 36455000=09028900=
+ ERRMAX:= 999; % MAY BE CHANGED IN DOLLARCARD. 36460000=09028910=
+ BASENUM:= 10000; 36465000=09028920=
+ ADDVALUE:= 1000; 36470000=09028920=
+ NEWBASE:= TRUE; 36475000=09028920=
+ 36480000=09028930=
+COMMENT DEFAULT VALUES FOR "$SEQ" OPTION; 36485000=09028930=
+ LASTUSED:= 4; % FOR INITIALIZATION. 36490000=09029000=
+ NEXTINFO:= LASTINFO:= LASTSEQROW*256+LASTSEQUENCE+1; 36495000=09033000=
+ PUTNBUMP(0); 36500000=09034000=
+ GT1:= -6" "; 36505000=09034100=
+ MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE]); 36510000=09034200=
+ BLANKET(0, INFO[LASTSEQROW, LASTSEQUENCE]); % FOR "$ CHECK".36515000=09034500=
+ READACARD; % INITIALIZATION OF NCR,FCR, AND LCR, AND 36520000=09035000=
+ % READS FIRST CARD INTO CARD BUFFER. 36525000=09036000=
+ LASTUSED:= 1; % ASSUMES CARD ONLY UNTIL TOLD DIFFERENTLY.36530000=09037000=
+ NXTELBT:= 1; 36535000=09038000=
+ PRTI:= PRTIMAX:= PRTBASE; 36540000=09039000=
+ MRCLEAN:= TRUE; 36545000=09040000=
+ 36550000=09040100=
+COMMENT START FILLING TABLES NEEDED TO COMPILE A PROGRAM; 36555000=09040100=
+ FILL TEN[**] WITH 3"1771110463422054", 3"1761332600326467", 36560000=09042000=
+ 3"1751621340414205", 3"1742165630517247", 3"1732623176643120", 36565000=09043000=
+ 3"1723370036413744", 3"1714266046116735", 3"1705343457542525", 36570000=09044000=
+ 3"1676634373473252", 3"1651040347241213", 3"1641250441111455", 36575000=09045000=
+ 3"1631522551333770", 3"1622047303622767", 3"1612461164567564", 36580000=09046000=
+ 3"1603175421725521", 3"1574034726313046", 3"1565044113775657", 36585000=09047000=
+ 3"1556255136775233", 3"1547730366574502", 3"1521171646433362", 36590000=09048000=
+ 3"1511430220142257", 3"1501736264172732", 3"1472325741231521", 36595000=09049000=
+ 3"1463013331500045", 3"1453616220020057", 3"1444561664024072", 36600000=09050000=
+ 3"1435716241031111", 3"1427301711237333", 3"1401116227350722", 36605000=09051000=
+ 3"1371341675243107", 3"1361632254513731", 3"1352200727636717", 36610000=09052000=
+ 3"1342641115606502", 3"1333411341150223", 3"1324313631402270", 36615000=09053000=
+ 3"1315376577702746", 3"1306676337663537", 3"1261045602764047", 36620000=09054000=
+ 3"1251257143561061", 3"1241532774515275", 3"1232061573640554", 36625000=09055000=
+ 3"1222476132610706", 3"1213215561353071", 3"1204061115645707", 36630000=09056000=
+ 3"1175075341217270", 3"1166314631463146", 3"1141000000000000", 36635000=09057000=
+ 3"1131200000000000", 3"1121440000000000", 3"1111750000000000", 36640000=09058000=
+ 3"1102342000000000", 3"1073032400000000", 3"1063641100000000", 36645000=09059000=
+ 3"1054611320000000", 3"1045753604000000", 3"1037346545000000", 36650000=09060000=
+ 3"1011124027620000", 3"0001351035564000", 3"0011643245121000", 36655000=09061000=
+ 3"0022214116345200", 3"0032657142036440", 3"0043432772446150", 36660000=09062000=
+ 3"0054341571157602", 3"0065432127413543", 3"0076740555316473", 36665000=09063000=
+ 3"0111053071060221", 3"0121265707274266", 3"0131543271153343", 36670000=09064000=
+ 3"0142074147406234", 3"0152513201307703", 3"0163236041571663", 36675000=09065000=
+ 3"0174105452130240", 3"0205126764556310", 3"0216354561711772", 36680000=09066000=
+ 3"0231004771627437", 3"0241206170175347", 3"0251447626234641", 36685000=09067000=
+ 3"0261761573704011", 3"0272356132665013", 3"0303051561442216", 36690000=09068000=
+ 3"0313664115752661", 3"0324641141345435", 3"0336011371636745", 36695000=09069000=
+ 3"0347413670206536", 3"0361131664625027", 3"0371360241772234", 36700000=09070000=
+ 3"0401654312370703", 3"0412227375067064", 3"0422675274304701", 36705000=09071000=
+ 3"0433454553366062", 3"0444367706263476", 3"0455465667740415", 36710000=09072000=
+ 3"0467003245730521", 3"0501060411731665", 3"0511274514320242", 36715000=09073000=
+ 3"0521553637404312", 3"0532106607305375", 3"0542530351166674", 36720000=09074000=
+ 3"0553256443424453", 3"0564132154331566", 3"0575160607420123", 36725000=09075000=
+ 3"0606414751324150", 3"0621012014361120", 3"0631214417455344", 36730000=09076000=
+ 3"0641457523370635", 3"0651773450267005", 3"0662372362344606", 36735000=09077000=
+ 3"0673071057035747", 3"0703707272645341", 3"0714671151416632", 36740000=09078000=
+ 3"0726047403722400", 3"0737461304707100", 3"0751137556607072", 36745000=09079000=
+ 3"0761367512350710", 3"0771665435043072"; 36750000=09080000=
+ 36755000=09081000=
+COMMENT THIS IS THE FILL FOR THE SECOND ROW OF INFO: 36760000=09081000=
+ THE FIRST ITEMS ARE STREAM RESERVED WORDS, 36765000=09082000=
+ THEN ORDINARY RESERVED WORDS, 36770000=09083000=
+ THEN INTRINSIC FUNCTIONS; 36775000=09084000=
+ FILL INFO[1, **] WITH 3"0670000600000002", 6"2SI000", %256 36780000=09086000=
+3"0700001040000002", 6"2DI000", %258 36785000=09087000=
+3"0710001460000002", 6"2CI000", %260 36790000=09088000=
+3"0720001630000002", 6"5TALLY", %262 36795000=09089000=
+3"0730000530000002", 6"2DS000", %264 36800000=09090000=
+3"0740000150000002", 6"4SKIP0", %266 36805000=09091000=
+3"0750001620000002", 6"4JUMP0", %268 36810000=09092000=
+3"0760000740000002", 6"2DB000", %270 36815000=09093000=
+3"0770000500000002", 6"2SB000", %272 36820000=09094000=
+3"1010000730000002", 6"2SC000", %274 36825000=09095000=
+3"1020001160000002", 6"3LOC00", %276 36830000=09096000=
+3"1030001170000002", 6"2DC000", %278 36835000=09097000=
+3"1040001430000002", 6"5LOCAL", %280 36840000=09098000=
+3"1050000340000002", 6"3LIT00", %282 36845000=09099000=
+3"1060001036400002", 6"3SET00", %284 36850000=09100000=
+3"1060001066500002", 6"5RESET", %286 36855000=09101000=
+3"1060001020500002", 6"3WDS00", %288 36860000=09102000=
+3"1060001357700002", 6"3CHR00", %290 36865000=09103000=
+3"1060001057300002", 6"3ADD00", %292 36870000=09104000=
+3"1060001617200002", 6"3SUB00", %294 36875000=09105000=
+3"1060000727600002", 6"3ZON00", %296 36880000=09106000=
+3"1060000417500002", 6"3NUM00", %298 36885000=09107000=
+3"1060000766700002", 6"3OCT00", %300 36890000=09108000=
+3"1060000176600002", 6"3DEC00", %302 36895000=09109000=
+3"1004000260000003", 6"6TOGGL", 6"E0000000", %304 36900000=09110000=
+3"0130311060000002", 6"3ABS00", %307 36905000=09110001=
+3"1360441030000002", 6"3AND00", %309 36910000=09112000=
+3"0500000170000002", 6"5ARRAY", %311 36915000=09112100=
+3"0660000000000002", 6"5BEGIN", %313 36920000=09112200=
+3"0500000040000003", 6"7BOOLE", 6"AN000000", %315 36925000=09112300=
+3"1070000000000003", 6"7COMME", 6"NT000000", %318 36930000=09112400=
+3"0500000230000003", 6"6DEFIN", 6"E0000000", %321 36935000=09112500=
+3"1410446000000002", 6"3DIV00", %324 36940000=09112600=
+3"0550000000000002", 6"2DO000", %326 36945000=09112700=
+3"0520000000000003", 6"6DOUBL", 6"E0000000", %328 36950000=09112800=
+3"0570000000000002", 6"4ELSE0", %331 36955000=09112900=
+3"0600000000000002", 6"3END00", %333 36960000=09113000=
+3"1340442030000002", 6"3EQV00", %335 36965000=09113100=
+3"0410000000000002", 6"5FALSE", %337 36970000=09113200=
+3"0130310030000002", 6"4FLAG0", %339 36975000=09113300=
+3"0530000000000002", 6"3FOR00", %341 36980000=09113400=
+3"1100000000000003", 6"7FORWA", 6"RD ", %343 36985000=09113500=
+3"0640000000000002", 6"2GO000", %346 36990000=09113600=
+3"0130316060320002", 6"4HUNT0", %348 36995000=09113700=
+3"0630000000000002", 6"2IF000", %350 37000000=09113800=
+3"0500000040000002", 6"4REAL0", %352 37005000=09113900=
+3"0500000050000003", 6"7INTEG", 6"ER000000", %354 37010000=09114000=
+3"0500000070000002", 6"5LABEL", %357 37015000=09114100=
+3"0360002000020003", 6"6MEMOR", 6"Y ", %359 37020000=09114200=
+3"1410456000000002", 6"3MOD00", %362 37025000=09114300=
+3"0500000140000003", 6"7MONIT", 6"OR ", %364 37030000=09114400=
+3"0130301060000002", 6"4NABS0", %367 37035000=09114500=
+3"0500000200000002", 6"4NAME0", %369 37040000=09114600=
+3"0130304030000002", 6"5NFLAG", %371 37045000=09114700=
+3"1320300230000002", 6"3NOT00", %373 37050000=09114800=
+3"1350440430000002", 6"2OR000", %375 37055000=09114900=
+3"0500000020000002", 6"4SAVE0", %377 37060000=09115000=
+3"0500000010000002", 6"3OWN00", %379 37065000=09115100=
+3"0460000000000003", 6"6POLIS", 6"H ", %381 37070000=09115200=
+3"0500000160000003", 6"9PROCE", 6"DURE ", %384 37075000=09115300=
+3"0130300000160011", 6"4SIGN0", %387 37080000=09115400=
+3"2025", COMMENT DUP ; 37085000=09115500=
+ 3"0000", 37090000=09115600=
+ COMMENT LITC 0; 37095000=09115600=
+ 3"0425", 37100000=09115700=
+ COMMENT NEQ ; 37105000=09115700=
+ 3"1025", 37110000=09115800=
+ COMMENT XCH ; 37115000=09115800=
+ 3"0155", 37120000=09115900=
+ COMMENT DIA 1; 37125000=09115900=
+ 3"0161", 37130000=09116000=
+ COMMENT DIB 1; 37135000=09116000=
+ 3"0165", 37140000=09116100=
+ COMMENT TRB 1; 37145000=09116100=
+ 3"1110000000000002", 6"4STEP0", %396 37150000=09116200=
+3"0500000220000003", 6"6STREA", 6"M ", %398 37155000=09116300=
+3"0500000110000003", 6"#SUBRO", 6"UTINE ", %401 37160000=09116400=
+3"0500000150000003", 6"6SWITC", 6"H ", %404 37165000=09116500=
+3"1120000000000002", 6"4THEN0", %407 37170000=09116600=
+3"1130000000000002", 6"2TO000", %409 37175000=09116700=
+3"0410000010000002", 6"4TRUE0", %411 37180000=09116800=
+3"0560000000000002", 6"5UNTIL", %413 37185000=09116900=
+3"1140000000000002", 6"5VALUE", %415 37190000=09117000=
+3"0540000000000002", 6"5WHILE", %417 37195000=09117100=
+3"1310440200000002", 6"3ADD00", %419 37200000=09117200=
+3"1310240270000002", 6"3BRT00", %421 37205000=09117300=
+3"1310453050000002", 6"3CCX00", %423 37210000=09117400=
+3"1310442500000002", 6"3CDC00", %425 37215000=09117500=
+3"1310457050000002", 6"3CFX00", %427 37220000=09117600=
+3"1310302060000002", 6"3CHS00", %429 37225000=09117700=
+3"1310440500000002", 6"3COC00", %431 37230000=09117800=
+3"1310242020000002", 6"3COM00", %433 37235000=09117900=
+3"1310302060000002", 6"3CSB00", %435 37240000=09118000=
+3"1310240120000002", 6"3DEL00", %437 37245000=09118100=
+3"1260100550000002", 6"3DIA00", %439 37250000=09118200=
+3"1260100610000002", 6"3DIB00", %441 37255000=09118300=
+3"1310344050000002", 6"3DUP00", %443 37260000=09118400=
+3"1310451050000002", 6"3EQL00", %445 37265000=09118500=
+3"1310443050000002", 6"3FCX00", %447 37270000=09118600=
+3"1310447050000002", 6"3FFX00", %449 37275000=09118700=
+3"1310440250000002", 6"3GEQ00", %451 37280000=09118800=
+3"1310440450000002", 6"3GTR00", %453 37285000=09118900=
+3"1310104420000002", 6"3HLB00", %455 37290000=09119000=
+3"1310104420000002", 6"3HP200", %457 37295000=09119050=
+3"1310446000000002", 6"3IDV00", %459 37300000=09119100=
+3"1310251020000002", 6"3IIO00", %461 37305000=09119200=
+3"1310250220000002", 6"3INA00", %463 37310000=09119300=
+3"1310250420000002", 6"3INB00", %465 37315000=09119400=
+3"1310100420000002", 6"3INI00", %467 37320000=09119500=
+3"1400440300000002", 6"3INX00", %469 37325000=09119600=
+3"1310244220000002", 6"3IOR00", %471 37330000=09119700=
+3"1310250220000002", 6"3IP100", %473 37335000=09119800=
+3"1310250420000002", 6"3IP200", %475 37340000=09119900=
+3"1310145060000002", 6"3IPS00", %477 37345000=09120000=
+3"1310410240000002", 6"3ISD00", %479 37350000=09120100=
+3"1310450440000002", 6"3ISN00", %481 37355000=09120200=
+3"1310100420000002", 6"3ITI00", %483 37360000=09120300=
+3"1310450250000002", 6"3LEQ00", %485 37365000=09120400=
+3"1310505300000002", 6"3LLL00", %487 37370000=09120500=
+3"1310441030000002", 6"3LND00", %489 37375000=09120600=
+3"1310300230000002", 6"3LNG00", %491 37380000=09120700=
+3"1310304040000002", 6"3LOD00", %493 37385000=09120800=
+3"1310440430000002", 6"3LOR00", %495 37390000=09120900=
+3"1310442030000002", 6"3LQV00", %497 37395000=09121000=
+3"1310450450000002", 6"3LSS00", %499 37400000=09121100=
+3"1310101100000002", 6"3MKS00", %501 37405000=09121200=
+3"1310441000000002", 6"3MUL00", %503 37410000=09121300=
+3"1310441050000002", 6"3NEQ00", %505 37415000=09121400=
+3"1310100130000002", 6"3NOP00", %507 37420000=09121500=
+3"0650006550000002", 6"6SCOPO", 6"N......."; %509 37425000=09121600=
+ FILL INFO[2, **] WITH 3"131030000020004"., 6"3RDF00", %512 37430000=09121700=
+3"0000", COMMENT LITC 0; 37435000=09121800=
+ 3"2141", 37440000=09121900=
+ COMMENT FXS ; 37445000=09121900=
+ 3"131030000020004"., 6"3RDS00", %516 37450000=09122000=
+3"0004", COMMENT LITC 1; 37455000=09122100=
+ 3"2141", 37460000=09122200=
+ COMMENT FXS ; 37465000=09122200=
+ 3"1310456000000002", 6"3RDV00", %520 37470000=09122300=
+3"1310304030000002", 6"3RFB00", %522 37475000=09122400=
+3"1310240470000002", 6"3RND00", %524 37480000=09122500=
+3"1310145060000002", 6"3RRR00", %526 37485000=09122600=
+3"1310311060000002", 6"3RSB00", %528 37490000=09122700=
+3"1310242470000002", 6"3RSP00", %530 37495000=09122800=
+3"1310141020000002", 6"3RTM00", %532 37500000=09122900=
+3"1310240470000002", 6"3RTN00", %534 37505000=09123000=
+3"1310141020000002", 6"3RTR00", %536 37510000=09123100=
+3"1310242470000002", 6"3RTS00", %538 37515000=09123200=
+3"1310310030000002", 6"3SFB00", %540 37520000=09123300=
+3"1310442040000002", 6"3SND00", %542 37525000=09123400=
+3"1310301060000002", 6"3SSB00", %544 37530000=09123500=
+3"1310316060000002", 6"3SSF00", %546 37535000=09123600=
+3"1310301060000002", 6"3SSN00", %548 37540000=09123700=
+3"1310311060000002", 6"3SSP00", %550 37545000=09123800=
+3"1310401040000002", 6"3STD00", %552 37550000=09123900=
+3"1310240000020004", 6"3STF00", %554 37555000=09124000=
+3"0010", COMMENT LITC 2; 37560000=09124100=
+ 3"2141", 37565000=09124200=
+ COMMENT FXS ; 37570000=09124200=
+ 3"1310442040000002", 6"3STN00", %558 37575000=09124300=
+3"1310240000020004", 6"3STS00", %560 37580000=09124400=
+3"0014", COMMENT LITC 3; 37585000=09124500=
+ 3"2141", 37590000=09124600=
+ COMMENT FXS ; 37595000=09124600=
+ 3"1310440600000002", 6"3SUB00", %564 37600000=09124700=
+3"1310344060000002", 6"3TFB00", %566 37605000=09124800=
+3"1270440650000002", 6"3TFR00", %568 37610000=09124900=
+3"1310155060000002", 6"3TIO00", %570 37615000=09125000=
+3"1310344060000002", 6"3TOP00", %572 37620000=09125050=
+3"1270440650000002", 6"3TRB00", %574 37625000=09125100=
+3"1300300000000002", 6"3VFI00", %576 37630000=09125200=
+3"1310502050000002", 6"3XCH00", %578 37635000=09125300=
+3"1310101070000002", 6"3XIT00", %580 37640000=09125400=
+3"1310105020000002", 6"3ZIP00", %582 37645000=09125500=
+3"1310105020000002", 6"3ZP100", %584 37650000=09125600=
+3"1270500750000002", 6"3CFE00", %586 37655000=09125700=
+3"1270500750000002", 6"3FCE00", %588 37660000=09125800=
+3"1270500710000002", 6"3CFL00", %590 37665000=09125900=
+3"1270500710000002", 6"3FCL00", %592 37670000=09126000=
+3"1310440210000002", 6"3DLA00", %594 37675000=09126100=
+3"1310440210000002", 6"3ADL00", %596 37680000=09126200=
+3"1310440610000002", 6"3DLS00", %598 37685000=09126300=
+3"1310440610000002", 6"3SDL00", %600 37690000=09126400=
+3"1310441010000002", 6"3DLM00", %602 37695000=09126500=
+3"1310441010000002", 6"3MDL00", %604 37700000=09126600=
+3"1310442010000002", 6"3DLD00", %606 37705000=09126700=
+3"1310442010000002", 6"3DDL00", %608 37710000=09126800=
+3"0460000000000002", 6"1P0000", %610 37715000=09126900=
+3"0360002000020002", 6"1M0000", %612 37720000=09127000=
+3"1310240000020004", 6"3PRL00", %614 37725000=09127100=
+3"0111", COMMENT PRL; 37730000=09127200=
+ 3"0055", 37735000=09127300=
+ COMMENT NOP; 37740000=09127300=
+ 3"0650006610000003", 6"7SCOPO", 6"FF......", 37745000=09127400=
+ %618 37750000=09127400=
+3"0030000000040003", 6"2LB000", 6"[# ", %621 37755000=09127500=
+3"0030000000040003", 6"2RB000", 6"]# ", %624 37760000=09127600=
+3"0030000000040003", 6"3GTR00", 6"># ", %627 37765000=09127700=
+3"0030000000040003", 6"3GEQ00", 6"}# ", %630 37770000=09127800=
+3"0030000000040003", 6"3EQL00", 6"=# ", %633 37775000=09127900=
+3"0030000000040003", 6"3NEQ00", 6"!# ", %636 37780000=09128000=
+3"0030000000040003", 6"3LEQ00", 6"{# ", %639 37785000=09128100=
+3"0030000000040003", 6"3LSS00", 6"<# ", %642 37790000=09128200=
+3"0030000000040003", 6"5TIMES", 6"|# ", %645 37795000=09128300=
+3"1310117530000002", 6"3SCI00", %688 37800000=09128400=
+3"1310117540000002", 6"3SAN00", %650 37805000=09128500=
+3"1310157730000002", 6"3SCS00", %652 37810000=09128600=
+0; % END OF INFO FILL. 37815000=09133700=
+ FOR GT2:= 256 STEP GT1.LINK WHILE NOT BOOLEAN(GT1.FORMAL) DO 37820000=09133800=
+ PUT((GT1:= TAKE(GT2)) & GT2[35:35:13], GT2); 37825000=09133900=
+ FOR GT1:= GT2 STEP GT2.LINK WHILE GT2.LINK ^= 0 DO 37830000=09134000=
+ PUT((GT2:= TAKE(GT1)) & 37835000=09134200=
+ STACKHEAD[GT3:= TAKE(GT1+1).[12:36] MOD 125][35:35:13], 37840000=09134200=
+ STACKHEAD[GT3]:= GT1); 37845000=09134200=
+ 37850000=09197000=
+ COMMENT THIS IS THE FILL FOR THE SPECIAL CHARACTORS; 37855000=09197000=
+ FILL SPECIAL[*] WITH 37860000=09198000=
+ OCT1200000000200000, COMMENT #; OCT0000000000100000, COMMENT @; 37865000=09199000=
+ OCT0000000000000000, OCT1160000000120000, COMMENT :; 37870000=09200000=
+ OCT1370440450002763, COMMENT >; OCT1370440250002662, COMMENT }; 37875000=09201000=
+ OCT1400440200000000, COMMENT +; OCT0000000000000000, 37880000=09202000=
+ OCT1220000000060000, COMMENT .; OCT1210000000000000, COMMENT [; 37885000=09203000=
+ OCT1250000000000000, COMMENT &; OCT0450000000000000, COMMENT (; 37890000=09204000=
+ OCT1370450450003571, COMMENT <; OCT1330401040000000, COMMENT ~; 37895000=09205000=
+ OCT1410441000000000, COMMENT |; OCT0000000000000000, 37900000=09206000=
+ OCT0000000000040000, COMMENT $; OCT0470000000000000, COMMENT *; 37905000=09207000=
+ OCT1400440600000000, COMMENT -; OCT1240000000160000, COMMENT ); 37910000=09208000=
+ OCT0620000000000000, COMMENT .,; OCT1370450250003470, COMMENT {; 37915000=09209000=
+ OCT0000000000000000, OCT1410442000000000, COMMENT /; 37920000=09210000=
+ OCT1170000000000000, COMMENT ,; OCT0000000000020000, COMMENT %; 37925000=09211000=
+ OCT1370441050002561, COMMENT !; OCT1370451050002460, COMMENT =; 37930000=09212000=
+ OCT1230000000000000, COMMENT ]; OCT0000000000140000, COMMENT "; 37935000=09213000=
+ 0,0; 37940000=09214000=
+ FILL MACRO[*] WITH 37945000=09215000=
+ OCT0131, COMMENT SFS A 00 ; 37950000=09216000=
+ OCT0116, COMMENT SFD A 01 ; 37955000=09217000=
+ OCT0000, COMMENT SYNTAX ERROR02 ; 37960000=09218000=
+ OCT0140, COMMENT INC A 03 ; 37965000=09219000=
+ OCT0130, COMMENT SRS A 04 ; 37970000=09220000=
+ OCT0117, COMMENT SRD A 05 ; 37975000=09221000=
+ OCT0000, COMMENT SYNTAX ERROR06 ; 37980000=09222000=
+ OCT0000, COMMENT SYNTAX ERROR07 ; 37985000=09223000=
+ OCT00310143, COMMENT CRF A, SFS 008 ; 37990000=09224000=
+ OCT00160143, COMMENT CRF A, SFD 009 ; 37995000=09225000=
+ OCT00470143, COMMENT CRF A, JFW 0 10 ; 38000000=09226000=
+ OCT00400143, COMMENT CRF A, INC 011 ; 38005000=09227000=
+ OCT00300143, COMMENT CRF A, SRS 012 ; 38010000=09228000=
+ OCT00170143, COMMENT CRF A, SRD 013 ; 38015000=09229000=
+ OCT0000, COMMENT SYNTAX ERROR14 ; 38020000=09230000=
+ OCT0000, COMMENT SYNTAX ERROR15 ; 38025000=09231000=
+ OCT0153, COMMENT RSA A 16 ; 38030000=09232000=
+ OCT0104, COMMENT RDA A 17 ; 38035000=09233000=
+ OCT0150, COMMENT RCA A 18 ; 38040000=09234000=
+ OCT004201430042, COMMENT SEC 0, CRF A, SEC 0 19 ; 38045000=09235000=
+ OCT0122, COMMENT SES A 20 ; 38050000=09236000=
+ OCT0106, COMMENT SED A 21 ; 38055000=09237000=
+ OCT0000, COMMENT SYNTAX ERROR22 ; 38060000=09238000=
+ OCT0000, COMMENT SYNTAX ERROR23 ; 38065000=09239000=
+ OCT0056, COMMENT TSA 0 24 ; 38070000=09240000=
+ OCT0000, COMMENT SYNTAX ERROR25 ; 38075000=09241000=
+ OCT0000, COMMENT SYNTAX ERROR26 ; 38080000=09242000=
+ OCT0000, COMMENT SYNTAX ERROR27 ; 38085000=09243000=
+ OCT0000, COMMENT SYNTAX ERROR28 ; 38090000=09244000=
+ OCT0007, COMMENT TDA 0 29 ; 38095000=09245000=
+ OCT0000, COMMENT SYNTAX ERROR30 ; 38100000=09246000=
+ OCT0000, COMMENT SYNTAX ERROR31 ; 38105000=09247000=
+ OCT0115, COMMENT SSA A 32 ; 38110000=09248000=
+ OCT0114, COMMENT SDA A 33 ; 38115000=09249000=
+ OCT0154, COMMENT SCA A 34 ; 38120000=09250000=
+ OCT0141; COMMENT STC A 35 ; 38125000=09251000=
+ FILL OPTIONS[**] WITH 6"5CHECK", 0, % 0,1 38130000=09251208=
+6"6DEBUG", 0, % 2,3 38135000=09251212=
+6"4DECK0", 0, % 4,5 38140000=09251214=
+6"6FORMA", 0, % 6,7 38145000=09251216=
+6"9INTRI", 0, % 8,9 38150000=09251218=
+6"5LISTA", 0, % 10,11 38155000=09251220=
+6"4LIST0", 0, % 12,13 38160000=09251224=
+6"5LISTP", 0, % 14,15 38165000=09251228=
+6"3MCP00", 0, % 16,17 38170000=09251230=
+6"4TAPE0", 0, % 18,19 38175000=09251232=
+6"4NEST0", 0, % 20,21 38180000=09251234=
+6"3NEW00", 0, % 22,23 38185000=09251236=
+6"7NEWIN", 0, % 24,25 38190000=09251240=
+6"4OMIT0", 0, % 26,27 38195000=09251244=
+6"1$0000", 0, % 28,29 38200000=09251248=
+6"3PRT00", 0, % 30,31 38205000=09251252=
+6"5PUNCH", 0, % 32,33 38210000=09251256=
+6"5PURGE", 0, % 34,35 38215000=09251260=
+6"4SEGS0", 0, % 36,37 38220000=09251264=
+6"3SEQ00", 0, % 38,39 38225000=09251268=
+6"6SEQER", 0, % 40,41 38230000=09251272=
+6"6SINGL", 0, % 42,43 38235000=09251276=
+6"5STUFF", 0, % 44,45 38240000=09251378=
+6"4VOID0", 0, % 46,47 38245000=09251380=
+6"5VOIDT", 0, % 48,49 38250000=09251384=
+0; 38255000=09251388=
+ DO 38260000=09252000=
+ UNTIL STEPI = BEGINV; 38265000=09252000=
+ GT1:= -6" "; 38270000=09253000=
+ INTOG:= INTOG AND TRUE; % 38275000=09253050=
+ DISKADR:= 38280000=09253100=
+ IF INTOG THEN 38285000=09253100=
+ INTRINSICADR 38290000=09253100=
+ ELSE 38295000=09253100=
+ 2; 38300000=09253100=
+ MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE]); 38305000=09253500=
+ MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE-1]); 38310000=09254000=
+ MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE-2]); 38315000=09255000=
+ STMT; 38320000=09275000=
+ LOCK(STUFF); 38325000=09281000=
+ CLOSE(CARD, RELEASE); 38330000=09281500=
+ IF LASTUSED ^= 1 THEN 38335000=09282000=
+ CLOSE(TAPE, RELEASE); 38340000=09282000=
+ IF NEWTOG THEN 38345000=09282500=
+ LOCK(NEWTAPE, **); 38350000=09282500=
+ IF T:= ((L+3) DIV 4)+CORADR > 4080 THEN 38355000=09282600=
+ FLAG(040); 38360000=09282600=
+ IF NOT NOHEADING THEN % PRINT THESE THINGS IF ANY 38365000=09362000=
+ BEGIN % LISTING HAS BEEN DONE. 38370000=09363000=
+ STREAM PROCEDURE PAN(T, FIEL, NER, LSQ); 38375000=09364000=
+ VALUE 38380000=09364000=
+ NER, 38385000=09364000=
+ T; 38390000=09364000=
+ BEGIN 38395000=09365000=
+ DI:= FIEL; 38400000=09365000=
+ 44(DS:= 2 LIT 6" "); 38405000=09365000=
+ SI:= LSQ; 38410000=09366000=
+ DS:= WDS; 38415000=09366000=
+ SI:= FIEL; 38420000=09366000=
+ DS:= 3 WDS; 38425000=09366000=
+ DI:= FIEL; 38430000=09367000=
+ DS:= 28 LIT 6"NUMBER OF ERRORS DETECTED = "; 38435000=09367000=
+ SI:= LOC NER; 38440000=09368000=
+ DS:= 3 DEC; 38445000=09368000=
+ DS:= 22 LIT 6". COMPILATION TIME = "; 38450000=09368000=
+ SI:= LOC T; 38455000=09369000=
+ DS:= 4 DEC; 38460000=09369000=
+ DS+9 LIT 6" SECONDS."; 38465000=09369000=
+ END; 38470000=09369000=
+ STREAM PROCEDURE PEN(FIL, PRTSIZ, BASE, CORE, DISK); 38475000=09370000=
+ VALUE 38480000=09371000=
+ PRTSIZ, 38485000=09371000=
+ BASE, 38490000=09371000=
+ CORE, 38495000=09371000=
+ DISK; 38500000=09371000=
+ BEGIN 38505000=09372000=
+ DI:= FIL; 38510000=09372000=
+ DS:= 9 LIT 6"PRT SIZE="; 38515000=09372000=
+ SI:= LOC PRTSIZ; 38520000=09372000=
+ DS:= 3 DEC; 38525000=09373000=
+ DS:= 14 LIT 6" BASE ADDRESS="; 38530000=09373000=
+ SI:= LOC BASE; 38535000=09374000=
+ DS:= 4 DEC; 38540000=09374000=
+ DS:= 10 LIT 6" CORE REQ="; 38545000=09374000=
+ SI:= LOC CORE; 38550000=09375000=
+ DS:= 4 DEC; 38555000=09375000=
+ DS:= 10 LIT 6" DISK REQ="; 38560000=09375000=
+ SI:= LOC DISK; 38565000=09376000=
+ DS:= 5 DEC; 38570000=09376000=
+ DS:= 61 LIT 6" "; 38575000=09376000=
+ END PEN; 38580000=09377000=
+ STREAM PROCEDURE FINALAX(LINE, N, SEQ); 38585000=09378000=
+ VALUE 38590000=09378000=
+ N; 38595000=09378000=
+ BEGIN 38600000=09379000=
+ DS:= LINE; 38605000=09379000=
+ 15(DS:= 8 LIT 6" "); 38610000=09379000=
+ DI:= LINE; 38615000=09380000=
+ DS:= 31 LIT 6"NUMBER OF ACCIDENTAL ENTRIES = "; 38620000=09380000=
+ SI:= LOC N; 38625000=09381000=
+ DS:= 3 DEC; 38630000=09381000=
+ DI:= DI+8; 38635000=09381000=
+ SI:= SEQ; 38640000=09382000=
+ SI:= SI-16; 38645000=09382000=
+ DS:= 8 CHR; 38650000=09382000=
+ END; 38655000=09383000=
+ IF AXNUM ^= 0 THEN 38660000=09384000=
+ BEGIN 38665000=09384050=
+ FINALAX(LIN[0], AXNUM, INFO[LASTSEQROW, LASTSEQUENCE]); 38670000=09384100=
+ WRITELINE; 38675000=09384500=
+ END; 38680000=09384600=
+ SCRAM:= (TIME(1)-TIME1)/60; 38685000=09385000=
+ PAN(SCRAM, LIN[0], ERRORCOUNT, 38690000=09386500=
+ INFO[LASTSEQROW, LASTSEQUENCE-1]); 38695000=09386500=
+ WRITELINE PEN(LIN[0], PRTIMAX, T:= (L+3) DIV 4, T:= CORADR+T, 38700000=09389000=
+ ((T+29) DIV 30+DISKADR)*30); 38705000=09389000=
+ WRITELINE; 38710000=09389500=
+ LOCK(LINE, RELEASE); 38715000=09390000=
+ END; 38720000=09390000=
+ IF ERRORCOUNT ^= 0 THEN 38725000=09391000=
+ I:= 0/0 38730000=09391000=
+ ELSE 38735000=09391000=
+ BEGIN 38740000=09392000=
+ ARRAY 38745000=09392300=
+ SAVINFO[0:31, 0:255], 38750000=09392500=
+ INFO[0:200, 0:255]; % FOR LARGE MCP"S. 38755000=09392500=
+ INTEGER 38760000=09393000=
+ SAVNDX, 38765000=09393000=
+ NONSAVNDX, 38770000=09393000=
+ N; 38775000=09393000=
+ INTEGER 38780000=09393010=
+ Q, 38785000=09393010=
+ J, 38790000=09393010=
+ K, 38795000=09393010=
+ M; 38800000=09393010=
+ BOOLEAN 38805000=09393020=
+ TSSTOG; 38810000=09393020=
+ REAL 38815000=09393020=
+ T; 38820000=09393020=
+ REAL PROCEDURE PUSHER(GRINCH, GOT, XMAS); 38825000=09393050=
+ VALUE 38830000=09393050=
+ XMAS; 38835000=09393050=
+ REAL 38840000=09393050=
+ XMAS; 38845000=09393050=
+ ARRAY 38850000=09393060=
+ GOT[0]; 38855000=09393060=
+ ARRAY 38860000=09393060=
+ GRINCH[0, 0]; 38865000=09393060=
+ BEGIN 38870000=09393070=
+ REAL 38875000=09393080=
+ WHO, 38880000=09393080=
+ WHAT; 38885000=09393080=
+ DEFINE 38890000=09393090=
+ LINKR = [32:8] #; 38895000=09393090=
+% 38900000=09393100=
+ IF WHO:= XMAS.LINKC <= 225 THEN 38905000=09393110=
+ BEGIN 38910000=09393120=
+ MOVE(30, GRINCH[XMAS.LINKR, WHO], GOT[0]); 38915000=09393130=
+ PUSHER:= XMAS+30; 38920000=09393140=
+ END 38925000=09393160=
+ ELSE 38930000=09393160=
+ BEGIN 38935000=09393160=
+ MOVE(WHAT:= 256-WHO, GRINCH[XMAS.LINKR, WHO], GOT[0]); 38940000=09393170=
+ XMAS:= XMAS+WHAT; 38945000=09393180=
+ MOVE(WHO:= 30-WHAT, GRINCH[XMAS.LINKR, 0], GOT[WHAT]); 38950000=09393190=
+ PUSHER:= XMAS+WHO; 38955000=09393200=
+ END; 38960000=09393220=
+ END PUSHER; 38965000=09393230=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38970000=09393230=
+ PROCEDURE PUSHEE(GRINCH, N, B, Y); 38975000=09393240=
+ VALUE 38980000=09393240=
+ N, 38985000=09393240=
+ B, 38990000=09393240=
+ Y; 38995000=09393240=
+ REAL 39000000=09393240=
+ N, 39005000=09393240=
+ B, 39010000=09393240=
+ Y; 39015000=09393240=
+ ARRAY 39020000=09393250=
+ GRINCH[0, 0]; 39025000=09393250=
+ BEGIN 39030000=09393260=
+ REAL 39035000=09393270=
+ I, 39040000=09393270=
+ J, 39045000=09393270=
+ X; 39050000=09393270=
+ DEFINE 39055000=09393280=
+ LINKR = [32:8] #; 39060000=09393280=
+ J:= Y; 39065000=09393290=
+ I:= B+N; 39070000=09393300=
+ WHILE B < I DO 39075000=09393310=
+ BEGIN 39080000=09393320=
+ IF Y:= B.LINKC <= 225 THEN 39085000=09393330=
+ BEGIN 39090000=09393340=
+ MOVE(30, CODE(J), GRINCH[B.LINKR, Y]); 39095000=09393350=
+ J:= J+30; 39100000=09393360=
+ B:= B+30; 39105000=09393370=
+ END 39110000=09393390=
+ ELSE 39115000=09393390=
+ BEGIN 39120000=09393390=
+ MOVE(X:= 256-Y, CODE(J), GRINCH[B.LINKR, Y]); 39125000=09393400=
+ B:= B+X; 39130000=09393410=
+ J:= J+X; 39135000=09393420=
+ MOVE(Y:= 30-X, CODE(J), GRINCH[B.LINKR, 0]); 39140000=09393430=
+ B:= B+Y; 39145000=09393440=
+ J:= J+Y; 39150000=09393450=
+ END; 39155000=09393460=
+ END; 39160000=09393470=
+ END PUSHEE; 39165000=09393480=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39170000=09393480=
+ STREAM PROCEDURE FIXHDR(F, N); 39175000=09393700=
+ VALUE 39180000=09393700=
+ N; 39185000=09393700=
+ BEGIN 39190000=09393710=
+ SI:= F; 39195000=09393710=
+ SI:= SI-24; 39200000=09393710=
+ DS:= LOC F; 39205000=09393710=
+ DS:= WDS; 39210000=09393710=
+ SI:= F; 39215000=09393720=
+ 14(SI:= SI+8); 39220000=09393720=
+ DI:= LOC F; 39225000=09393720=
+ DS:= WDS; 39230000=09393720=
+ DI:= F; 39235000=09393730=
+ DI:= DI+38; 39240000=09393730=
+ SI:= LOC N; 39245000=09393730=
+ SI:= SI+7; 39250000=09393740=
+ DS:= CHR; 39255000=09393740=
+ END FIXHDR; 39260000=09393750=
+ LABEL 39265000=09394000=
+ EOF; 39270000=09394000=
+ IF NOT INTOG THEN 39275000=09394100=
+ BEGIN 39280000=09394200=
+ L:= (L+3) DIV 4; 39285000=09395000=
+ COMMENT L~NUM. OF WORDS IN OUTER BLOCK;39290000=09395000=
+ FILL SAVINFO[0, **] WITH 3"7700000000000015", 39295000=09395300=
+ 3"0253010477527705", 3"0051000000000000", 39300000=09395500=
+ 3"0441070001000062"; 39305000=09395500=
+ Q:= -1; 39310000=09395700=
+ PUSHEE(SAVEINFO, L, 4, 5); 39315000=09396000=
+ SAVNDX:= L; 39320000=09397000=
+ END; 39325000=09397100=
+ REWIND(CODISK); 39330000=09398000=
+ DO BEGIN 39335000=09399000=
+ IF REED = 0 THEN 39340000=09399000=
+ GO TO EOF; 39345000=09399000=
+ N:= FETCH(MKABS(CODE(0)))-1; 39350000=09400000=
+ IF BOOLEAN(FETCH(MKABS(CODE(1)))) THEN 39355000=09401000=
+ BEGIN 39360000=09402000=
+ PUSHEE(SAVINFO, N, SAVNDX, 1); 39365000=09402100=
+ SAVNDX:= SAVNDX+N; 39370000=09403000=
+ END 39375000=09404000=
+ ELSE 39380000=09404000=
+ BEGIN 39385000=09404000=
+ IF DECKTOG THEN 39390000=09405000=
+ STACKHEAD[Q:= Q+1]:= 1024*NONSAVNDX+N; 39395000=09405500=
+ PUSHEE(INFO, N, NONSAVNDX, 1); 39400000=09406000=
+ NONSAVNDX:= ((NONSAVNDX+N+29) DIV 30)*30; 39405000=09407000=
+ END; 39410000=09408000=
+ END 39415000=09412000=
+ UNTIL FALSE; 39420000=09412000=
+ EOF: 39425000=09413000=
+ N:= (SAVNDX+29) DIV 30; 39430000=09413000=
+ COMMENT NUMBER OF DISK SEGMENTS39435000=09413000=
+ OCCUPIED BY SAVE PROCEDURES AND ARRAYS; 39440000=09414000=
+ IF INTOG AND NOT DECKTOG THEN 39445000=09414010=
+ BEGIN% INTRINSIC FUNCTION OPTION 39450000=09414020=
+ FOR J:= USEROPINX STEP 2 UNTIL OPARSIZE DO % IS TIMESHARING SET 39455000=09414022=
+ IF OPTIONS[J] = 6"@TIMES" THEN 39460000=09414024=
+ BEGIN 39465000=09414026=
+ TSSTOG:= BOOLEAN(OPTIONS[J+1]); 39470000=09414026=
+ J:= OPARSIZE 39475000=09414026=
+ END; 39480000=09414026=
+ I:= PRTBASE+1; 39485000=09414030=
+ J:= 0; 39490000=09414030=
+ DO 39495000=09414040=
+ IF GT1:= PRT[I] ^= 0 THEN 39500000=09414040=
+ BEGIN 39505000=09414050=
+ J:= J+1; 39510000=09414060=
+ SAVINFO[J.LINKR, J.LINKC]:= 0 & GT1[8:8:10] & GT1[33:18:15]39515000=09414090=
+ ; 39520000=09414090=
+ END 39525000=09414100=
+ UNTIL I:= I+1 >= PRTIMAX; 39530000=09414100=
+ SAVINFO[0, 0]:= J; % # OF INTRINSICS 39535000=09414110=
+ SAVNDX:= MAXINTRINSIC; 39540000=09414120=
+ END 39545000=09414130=
+ ELSE 39550000=09414130=
+ BEGIN 39555000=09414130=
+ I:= PRTBASE; 39560000=09415000=
+ DO 39565000=09415000=
+ IF GT1:= PRT[I] ^= 0 THEN 39570000=09415000=
+ BEGIN 39575000=09415500=
+ IF GT1.[1:5] ^= LDES THEN 39580000=09415500=
+ BEGIN 39585000=09416000=
+ IF(GT1:= GT1 & (GT1.[33:15]+L)[33:33:15]).[6:2] ^= 3 THEN 39590000=09416000=
+ GT1:= GT1 & (GT1.[18:15]+N)[18:33:15]; 39595000=09417000=
+ END; 39600000=09417500=
+ MDESC(GT1, SAVINFO[I.LINKR, I.LINKC]); 39605000=09418000=
+ END 39610000=09419000=
+ ELSE 39615000=09419000=
+ SAVINFO[I.LINKR, I.LINKC]:= 0 39620000=09419000=
+ UNTIL I:= I+1 >= PRTIMAX; 39625000=09419000=
+ MDESC(0 & 1[2:47:1], SAVINFO[D, PRTBASE-1]); 39630000=09419100=
+ SAVNDX:= 30*N; 39635000=09420000=
+ END; 39640000=09420010=
+ I:= 0; 39645000=09420020=
+ J:= -1; 39650000=09420020=
+ IF NOT DECKTOG THEN 39655000=09421000=
+ BEGIN 39660000=09421500=
+ DO BEGIN 39665000=09423000=
+ I:= PUSHER(SAVINFO, ELBAT, I); 39670000=09424000=
+ J:= J+1; 39675000=09425000=
+ WRITE(DISK, 30, ELBAT[**]); 39680000=09425900=
+ END 39685000=09426000=
+ UNTIL I >= SAVNDX; 39690000=09426000=
+ I:= 0; 39695000=09427000=
+ WHILE I < NONSAVNDX DO 39700000=09427100=
+ BEGIN 39705000=09427200=
+ I:= PUSHER(INFO, ELBAT, I); 39710000=09427500=
+ J:= J+1; 39715000=09428000=
+ WRITE(DISK, 30, ELBAT[**]); 39720000=09429000=
+ END; 39725000=09430000=
+ N:= 39730000=09430050=
+ IF INTOG THEN 39735000=09430050=
+ IF TSSTOG THEN 39740000=09430050=
+ TSSINTYPE 39745000=09430060=
+ ELSE 39750000=09430060=
+ DCINTYPE 39755000=09430060=
+ ELSE 39760000=09430060=
+ MCPTYPE; 39765000=09430060=
+ FIXHDR(DISK, N); 39770000=09430075=
+ LOCK(DISK, **); 39775000=09430100=
+ END 39780000=09432000=
+ ELSE 39785000=09432000=
+ BEGIN 39790000=09432000=
+ ELBAT[0]:= 0; 39795000=09432000=
+ I:= 16; 39800000=09432000=
+ DO BEGIN 39805000=09433000=
+ MOVE(8, SAVINFO[I.LINKR, I.LINKC], ELBAT[1]); 39810000=09433000=
+ ELBAT[9]:= B2D(I+96) & 1[11:47:1] & (I+96)[23:35:1]; 39815000=09434000=
+ WRITE(DECK, 10, ELBAT[**]); 39820000=09435000=
+ END 39825000=09436000=
+ UNTIL I:= I+8 >= SAVNDX; 39830000=09436000=
+ FILL ELBAT[**] WITH 0, 3"7500000000000012", 39835000=09439000=
+ 3"0004535530611765", 3"7006000404210435", 39840000=09441000=
+ 3"7700000000000015", 3"0253010477527705", 39845000=09443000=
+ 3"0051000004410046", 3"0441070001000062", 39850000=09445000=
+ 3"0040413100000000", 3"0001000000000101"; 39855000=09446000=
+ WRITE(DECK, 10, ELBAT[**]); 39860000=09447000=
+ ELBAT[0]:= 0 & REAL(DECKTOG)[1:19:17]; 39865000=09447010=
+ FOR I:= 0 STEP 1 UNTIL Q DO 39870000=09447020=
+ BEGIN 39875000=09447030=
+ K:= STACKHEAD[I].[23:15]; 39880000=09447030=
+ M:= STACKHEAD[I].[38:10]; 39885000=09447040=
+ FOR J:= 0 STEP 8 UNTIL M DO 39890000=09447050=
+ BEGIN 39895000=09447050=
+ MOVE(8, INFO[(J+K).LINKR, (J+K).LINKC], ELBAT[1]); 39900000=09447070=
+ ELBAT[9]:= B2D(J) & 6"310"[1:31:17]; 39905000=09447080=
+ WRITE(DECK, 10, ELBAT[**]) 39910000=09447090=
+ END; 39915000=09447090=
+ END; 39920000=09447100=
+ END 39925000=09448000=
+ END 39930000=09448000=
+ END PROGRAM; 39935000=09448000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39940000=09448000=
+ 39945000=10000000=
+ COMMENT THIS SECTION CONTAINS GENERATORS USED BY THE BLOCK ROUTINE; 39950000=10000000=
+ PROCEDURE DEFINEGEN(MACRO, J); 39955000=10228000=
+ VALUE 39960000=10228000=
+ MACRO, 39965000=10228000=
+ J; 39970000=10228000=
+ BOOLEAN 39975000=10228000=
+ MACRO; 39980000=10228000=
+ REAL 39985000=10228000=
+ J; 39990000=10228000=
+ BEGIN 39995000=10229000=
+ OWN INTEGER 40000000=10230000=
+ CHARCOUNT, 40005000=10230000=
+ REMCOUNT; 40010000=10230000=
+ COMMENT CHARCOUNT CONTAINS NUMBER OFCHARACTORS OF THE DEFINE THAT WE40015000=10231000=
+ HAVE PUT INTO INFO. REMCOUNT CONTAINS NUMBER OF CHARACT- 40020000=10232000=
+ ORS REMAINING IN THIS ROW OF INFO; 40025000=10233000=
+ PROCEDURE PUTOGETHER(CHAR); 40030000=10234000=
+ REAL 40035000=10234000=
+ CHAR; 40040000=10234000=
+ BEGIN 40045000=10235000=
+ STREAM PROCEDURE PACKINFO(INFO, ISKIP, COUNT, ASKIP, ACCUM); 40050000=10236000=
+ VALUE 40055000=10237000=
+ ISKIP, 40060000=10237000=
+ COUNT, 40065000=10237000=
+ ASKIP; 40070000=10237000=
+ BEGIN 40075000=10238000=
+ DI:= INFO; 40080000=10238000=
+ DI:= DI+ISKIP; 40085000=10238000=
+ SI:= ACCUM; 40090000=10239000=
+ SI:= SI+ASKIP; 40095000=10239000=
+ SI:= SI+3; 40100000=10239000=
+ DS:= COUNT CHR 40105000=10240000=
+ END PACKINFO; 40110000=10240000=
+ INTEGER 40115000=10241000=
+ COUNT, 40120000=10241000=
+ SKIPCOUNT; 40125000=10241000=
+ IF(COUNT:= CHAR.[12:6])+CHARCOUNT > 2047 THEN 40130000=10243000=
+ BEGIN 40135000=10243000=
+ FLAG(142); 40140000=10243000=
+ TB1:= TRUE 40145000=10243000=
+ END 40150000=10244000=
+ ELSE 40155000=10244000=
+ BEGIN 40160000=10244000=
+ IF COUNT > REMCOUNT THEN 40165000=10246000=
+ BEGIN 40170000=10246000=
+ SKIPCOUNT:= COUNT-(COUNT:= REMCOUNT); 40175000=10247000=
+ REMCOUNT:= 2047 40180000=10248000=
+ END 40185000=10249000=
+ ELSE 40190000=10249000=
+ REMCOUNT:= REMCOUNT-COUNT; 40195000=10249000=
+ GT1:= CHARCOUNT DIV 8+NEXTINFO; 40200000=10250000=
+ PACKINFO(INFO[GT1.LINKR, GT1.LINKC], CHARCOUNT.[45:3], 40205000=10252000=
+ COUNT, 00, CHAR); 40210000=10252000=
+ IF SKIPCOUNT ^= 0 THEN 40215000=10253000=
+ PACKINFO 40220000=10255000=
+ (INFO[NEXTINFO.LINKR+1, 0], 0, SKIPCOUNT, COUNT, CHAR); 40225000=10255000=
+ CHARCOUNT:= CHARCOUNT+SKIPCOUNT+COUNT 40230000=10256000=
+ END 40235000=10257000=
+ END PUTOGETHER; 40240000=10257000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40245000=10257000=
+ STREAM PROCEDURE SCAN(D, S, Q, N, J); 40250000=10257100=
+ VALUE 40255000=10257100=
+ J, 40260000=10257100=
+ N, 40265000=10257100=
+ Q; 40270000=10257100=
+ BEGIN 40275000=10257200=
+ DI:= D; 40280000=10257200=
+ DI:= DI+11; 40285000=10257200=
+ SI:= S; 40290000=10257200=
+ SI:= SI+3; 40295000=10257200=
+ IF N SC = DC THEN 40300000=10257300=
+ IF SC > 6"0" THEN 40305000=10257400=
+ BEGIN 40310000=10257500=
+ DI:= LOC J; 40315000=10257500=
+ DI:= DI+7; 40320000=10257500=
+ IF SC <= DC THEN 40325000=10257600=
+ BEGIN 40330000=10257700=
+ J:= SI; 40335000=10257700=
+ DI:= J; 40340000=10257700=
+ SI:= LOC Q; 40345000=10257700=
+ SI:= SI+6; 40350000=10257700=
+ DS:= CHR; 40355000=10257700=
+ DI:= S; 40360000=10257800=
+ DI:= DI+2; 40365000=10257800=
+ DS:= CHR; 40370000=10257800=
+ END 40375000=10257900=
+ END 40380000=10257900=
+ END; 40385000=10257900=
+ INTEGER 40390000=10258000=
+ LASTRESULT; 40395000=10258000=
+ REAL 40400000=10258100=
+ K, 40405000=10258100=
+ N, 40410000=10258100=
+ ELCLASS; 40415000=10258100=
+ DEFINE 40420000=10258200=
+ I = NXTELBT #; 40425000=10258200=
+ LABEL 40430000=10258300=
+ FINAL, 40435000=10258300=
+ PACKIN; 40440000=10258300=
+ LABEL 40445000=10259000=
+ BACK, 40450000=10259000=
+ SKSC, 40455000=10259000=
+ EXIT; 40460000=10259000=
+ TB1:= FALSE; 40465000=10260000=
+ CHARCOUNT:= (NEXTINFO-LASTINFO)*8; 40470000=10261000=
+ DEFINECTR:= 1; 40475000=10262000=
+ LASTRESULT:= 2; 40480000=10262000=
+ REMCOUNT:= (256-NEXTINFO MOD 256)*8; 40485000=10263000=
+ NEXTINFO:= LASTINFO; 40490000=10263100=
+ IF J ^= 0 THEN 40495000=10263110=
+ N:= TAKE(LASTINFO+1).[12:6]; 40500000=10263110=
+ K:= 0; 40505000=10263200=
+BACK: 40510000=10263300=
+ STOPDEFINE:= TRUE; 40515000=10263300=
+ ELCLASS:= TABLE(NXTELBT); 40520000=10263400=
+SKSC: 40525000=10263500=
+ NXTELBT:= NXTELBT-1; 40530000=10263500=
+ IF MACRO THEN 40535000=10263600=
+ BEGIN 40540000=10263700=
+ IF ELCLASS = COMMA THEN 40545000=10263700=
+ IF K = 0 THEN 40550000=10263800=
+ FINAL: 40555000=10263900=
+ BEGIN 40560000=10263900=
+ PUTOGETHER(6"1#0000"); 40565000=10263900=
+ GO TO EXIT 40570000=10263900=
+ END 40575000=10264000=
+ ELSE 40580000=10264000=
+ GO PACKIN; 40585000=10264000=
+ IF ELCLASS = LEFTPAREN OR ELCLASS = LFTBRKET THEN 40590000=10264100=
+ BEGIN 40595000=10264200=
+ K:= K+1; 40600000=10264200=
+ GO TO PACKIN 40605000=10264200=
+ END; 40610000=10264200=
+ IF ELCLASS = RTPAREN OR ELCLASS = RTBRKET THEN 40615000=10264300=
+ IF K:= K-1 < 0 THEN 40620000=10264400=
+ GO FINAL 40625000=10264400=
+ ELSE 40630000=10264400=
+ GO PACKIN; 40635000=10264400=
+ IF ELCLASS = SEMICOLON THEN 40640000=10264410=
+ BEGIN 40645000=10264420=
+ FLAG(142); 40650000=10264420=
+ GO TO FINAL 40655000=10264420=
+ END 40660000=10264420=
+ ELSE 40665000=10264420=
+ GO PACKIN 40670000=10264500=
+ END; 40675000=10264500=
+ IF J ^= 0 THEN 40680000=10264600=
+ IF ACCUM[1].[12:6]-1 = N THEN 40685000=10264700=
+ SCAN(INFO[LASTINFO.LINKR, LASTINFO.LINKC], ACCUM[1], N+770, 40690000=10264900=
+ N, J); 40695000=10264900=
+PACKIN: 40700000=10265000=
+ IF RESULT = 4 THEN 40705000=10266000=
+ BEGIN 40710000=10266000=
+ COMMENT INSERT " MARKS - 2130706432 IS DECIMAL FOR 1"0000; 40715000=10267000=
+ PUTOGETHER(2130706432); 40720000=10268000=
+ PUTOGETHER(ACCUM[1]); 40725000=10269000=
+ PUTOGETHER(2130706432) 40730000=10270000=
+ END 40735000=10271000=
+ ELSE 40740000=10271000=
+ BEGIN 40745000=10271000=
+ IF BOOLEAN(RESULT) AND BOOLEAN(LASTRESULT) THEN 40750000=10273000=
+ PUTOGETHER(6"1 0000"); 40755000=10273000=
+ COMMENT INSERT BLANK; 40760000=10273000=
+ PUTOGETHER(ACCUM[1]) 40765000=10274000=
+ END; 40770000=10274000=
+ IF TB1 THEN 40775000=10275000=
+ GO TO EXIT; 40780000=10275000=
+ LASTRESULT:= RESULT; 40785000=10276000=
+ IF MACRO THEN 40790000=10276500=
+ GO BACK; 40795000=10276500=
+ IF ELCLASS = DECLARATORS AND ELBAT[I].ADDRESS = DEFINEV THEN 40800000=10278000=
+ BEGIN 40805000=10278000=
+ DEFINECTR:= DEFINECTR+1; 40810000=10278000=
+ GO BACK 40815000=10278000=
+ END; 40820000=10278000=
+ IF ELCLASS ^= CROSSHATCH THEN 40825000=10279000=
+ GO BACK; 40830000=10279000=
+ IF DEFINECTR ^= 1 THEN 40835000=10281000=
+ BEGIN 40840000=10281000=
+ STOPDEFINE:= TRUE; 40845000=10281000=
+ IF ELCLASS:= TABLE(I) ^= COMMA THEN 40850000=10282000=
+ DEFINECTR:= DEFINECTR-1; 40855000=10283000=
+ GO SKSC 40860000=10283000=
+ END; 40865000=10283000=
+EXIT: 40870000=10284000=
+ DEFINECTR:= 0; 40875000=10284000=
+ NEXTINFO:= (CHARCOUNT+7) DIV 8+NEXTINFO; 40880000=10285000=
+ END DEFINEGEN; 40885000=10286000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40890000=10286000=
+ PROCEDURE DBLSTMT; 40895000=12002000=
+ BEGIN 40900000=12003000=
+ REAL 40905000=12004000=
+ S, 40910000=12004000=
+ T; 40915000=12004000=
+ LABEL 40920000=12005000=
+ L1, 40925000=12005000=
+ L2, 40930000=12005000=
+ L3, 40935000=12005000=
+ EXIT; 40940000=12005000=
+ S:= 0; 40945000=12006000=
+ IF STEPI ^= LEFTPAREN THEN 40950000=12007000=
+ ERR(281) 40955000=12008000=
+ ELSE 40960000=12008000=
+ L1: 40965000=12009000=
+ BEGIN 40970000=12009000=
+ IF STEPI = COMMA THEN 40975000=12010000=
+ BEGIN 40980000=12011000=
+ DPTOG:= TRUE; 40985000=12012000=
+ IF STEPI = ADOP THEN 40990000=12013000=
+ STEPIT; 40995000=12013000=
+ EMITNUM(NLO); 41000000=12014000=
+ EMITNUM(IF ELBAT[I-1].ADDRESS = SUB THEN-NHI ELSE NHI); 41005000=12015000=
+ DPTOG:= FALSE; 41010000=12016000=
+ STEPIT; 41015000=12017000=
+ GO TO L2; 41020000=12018000=
+ END; 41025000=12019000=
+ IF TABLE(I+1) = COMMA THEN 41030000=12020000=
+ BEGIN 41035000=12021000=
+ IF ELCLASS = ADOP OR ELCLASS = MULOP THEN 41040000=12022000=
+ BEGIN 41045000=12023000=
+ EMITO(ELBAT[I].ADDRESS+1); 41050000=12024000=
+ IF S:= S-1 <= 0 THEN 41055000=12025000=
+ FLAG(282); 41060000=12025000=
+ STEPIT; 41065000=12025000=
+ GO TO L3; 41070000=12026000=
+ END; 41075000=12027000=
+ IF ELCLASS = ASSIGNOP THEN 41080000=12028000=
+ BEGIN 41085000=12029000=
+ IF S ^= 1 THEN 41090000=12030000=
+ FLAG(283); 41095000=12030000=
+ S:= 0; 41100000=12030000=
+ STEPIT; 41105000=12030000=
+ DO BEGIN 41110000=12032000=
+ IF ELCLASS ^= COMMA THEN 41115000=12033000=
+ BEGIN 41120000=12033000=
+ ERR(284); 41125000=12033000=
+ GO EXIT 41130000=12033000=
+ END; 41135000=12033000=
+ STEPIT; 41140000=12034000=
+ IF ELCLASS <= INTID AND ELCLASS >= REALID THEN 41145000=12035000=
+ BEGIN 41150000=12036000=
+ EMITN(ELBAT[I].ADDRESS); 41155000=12036000=
+ STEPIT 41160000=12036000=
+ END 41165000=12037000=
+ ELSE 41170000=12037000=
+ VARIABLE(FL); 41175000=12037000=
+ EMITO(STD) 41180000=12038000=
+ END 41185000=12038000=
+ UNTIL S:= S+1 = 2; 41190000=12038000=
+ IF ELCLASS ^= RTPAREN THEN 41195000=12039000=
+ ERR(285) 41200000=12039000=
+ ELSE 41205000=12039000=
+ STEPIT; 41210000=12039000=
+ GO TO EXIT; 41215000=12040000=
+ END; 41220000=12041000=
+ IF ELCLASS <= INTID AND ELCLASS >= BOOID THEN 41225000=12042000=
+ BEGIN 41230000=12043000=
+ CHECKER(T:= ELBAT[I]); 41235000=12044000=
+ STEPIT; 41240000=12045000=
+ STEPIT; 41245000=12045000=
+ AEXP; 41250000=12046000=
+ EMITV(T.ADDRESS); 41255000=12047000=
+ GO TO L2; 41260000=12048000=
+ END; 41265000=12049000=
+ END; 41270000=12050000=
+ AEXP; 41275000=12051000=
+ IF ELCLASS ^= COMMA THEN 41280000=12052000=
+ BEGIN 41285000=12052000=
+ ERR(284); 41290000=12052000=
+ GO EXIT 41295000=12053000=
+ END; 41300000=12053000=
+ STEPIT; 41305000=12054000=
+ AEXP; 41310000=12054000=
+ EMITO(XCH); 41315000=12054000=
+ L2: S:= S+1; 41320000=12055000=
+ L3: IF ELCLASS ^= COMMA THEN 41325000=12056000=
+ BEGIN 41330000=12056000=
+ ERR(284); 41335000=12056000=
+ GO TO EXIT 41340000=12056000=
+ END; 41345000=12056000=
+ GO TO L1; 41350000=12057000=
+ EXIT: 41355000=12058000=
+ END 41360000=12059000=
+ END DBLSTMT; 41365000=12059000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41370000=12059000=
+ REAL PROCEDURE FIXDEFINEINFO(T); 41375000=12101000=
+ VALUE 41380000=12101000=
+ T; 41385000=12101000=
+ REAL 41390000=12101000=
+ T; 41395000=12101000=
+ BEGIN 41400000=12102000=
+ REAL 41405000=12102000=
+ K, 41410000=12102000=
+ S, 41415000=12102000=
+ P, 41420000=12102000=
+ J, 41425000=12102000=
+ EL; 41430000=12102000=
+ STREAM PROCEDURE SET(S, D, K, E); 41435000=12103000=
+ VALUE 41440000=12103000=
+ K, 41445000=12103000=
+ E; 41450000=12103000=
+ BEGIN 41455000=12104000=
+ SI:= S; 41460000=12104000=
+ SI:= SI+11; 41465000=12104000=
+ DI:= D; 41470000=12104000=
+ DI:= DI+3; 41475000=12104000=
+ DS:= K CHR; 41480000=12104000=
+ SI:= LOC E; 41485000=12105000=
+ SI:= SI+6; 41490000=12105000=
+ DS:= 2 CHR; 41495000=12105000=
+ END; 41500000=12106000=
+ MACROID:= TRUE; 41505000=12107000=
+ P:= (FIXDEFINEINFO:= T).ADDRESS; 41510000=12108000=
+ K:= COUNT; 41515000=12109000=
+ S:= SCRAM; 41520000=12110000=
+ STREAMTOG:= TRUE & STREAMTOG[1:3:45]; 41525000=12110100=
+ STOPDEFINE:= TRUE; 41530000=12111000=
+ EL:= TABLE(NXTELBT); 41535000=12112000=
+ NXTELBT:= NXTELBT-1; 41540000=12113000=
+ IF EL ^= LEFTPAREN AND EL ^= LFTBRKET THEN 41545000=12114000=
+ FLAG(141); 41550000=12115000=
+ ELSE 41555000=12116000=
+ DO BEGIN 41560000=12116000=
+ J:= J+1; 41565000=12116000=
+ SET(INFO[T.LINKR, T.LINKC], ACCUM[1], K, 64*J+12); 41570000=12117000=
+ ACCUM[1].[12:6]:= K+2; 41575000=12118000=
+ ACCUM[0]:= 0; 41580000=12119000=
+ ACCUM[0].CLASS:= DEFINEDID; 41585000=12120000=
+ COUNT:= K+2; 41590000=12121000=
+ SCRAM:= ACCUM[1] MOD 125; 41595000=12122000=
+ E; 41600000=12123000=
+ DEFINEGEN(TRUE, 0); 41605000=12124000=
+ END 41610000=12125000=
+ UNTIL EL:= ELBAT[NXTELBT].CLASS ^= COMMA; 41615000=12125000=
+ IF EL ^= RTPAREN AND EL ^= RTBRKET OR J ^= P THEN 41620000=12126000=
+ FLAG(141); 41625000=12126000=
+ MACROID:= FALSE; 41630000=12127000=
+ STREAMTOG:= STREAMTOG.[1:45]; 41635000=12127100=
+ END; 41640000=12128000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41645000=12128000=
+ PROCEDURE SCATTERELBAT; 41650000=13197000=
+ BEGIN 41655000=13198000=
+ REAL 41660000=13199000=
+ T; 41665000=13199000=
+ T:= ELBAT[I]; 41670000=13200000=
+ KLASSF:= T.CLASS; 41675000=13201000=
+ FORMALF:= BOOLEAN(T.FORMAL); 41680000=13202000=
+ VONF:= BOOLEAN(T.VO); 41685000=13203000=
+ LEVELF:= T.LVL; 41690000=13204000=
+ ADDRSF:= T.ADDRESS; 41695000=13205000=
+ INCRF:= T.INCR; 41700000=13206000=
+ LINKF:= T.LINK; 41705000=13207000=
+ END SCATTERELBAT; 41710000=13208000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41715000=13208000=
+ PROCEDURE CHKSOB; 41720000=13209000=
+ IF GTA1[J:= J-1] ^= 0 THEN 41725000=13210000=
+ FLAG(23); 41730000=13210000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41735000=13210000=
+ DEFINE 41740000=13212000=
+ ADDC = 532480 #, 41745000=13213000=
+ SUBC = 1581056 #, 41750000=13214000=
+ EMITSTORE = EMITPAIR #; 41755000=13214000=
+ PROCEDURE PURGE(STOPPER); 41760000=13215000=
+ VALUE 41765000=13216000=
+ STOPPER; 41770000=13216000=
+ REAL 41775000=13217000=
+ STOPPER; 41780000=13217000=
+ BEGIN 41785000=13218000=
+ INTEGER 41790000=13219000=
+ POINTER; 41795000=13219000=
+ LABEL 41800000=13220000=
+ RECOV; 41805000=13220000=
+ DEFINE 41810000=13220000=
+ ELCLASS = KLASSF #; 41815000=13220000=
+ REAL 41820000=13221000=
+ J, 41825000=13221000=
+ N, 41830000=13221000=
+ OCR, 41835000=13221000=
+ TL, 41840000=13221000=
+ ADD; 41845000=13221000=
+ POINTER:= LASTINFO; 41850000=13222000=
+ WHILE POINTER >= STOPPER DO 41855000=13224000=
+ BEGIN 41860000=13225000=
+ IF ELCLASS:= (GT1:= TAKE(POINTER)).CLASS = NONLITNO THEN 41865000=13227000=
+ BEGIN 41870000=13227000=
+ NCII:= NCII-1; 41875000=13228000=
+ EMITNUM(TAKE(POINTER+1)); 41880000=13229000=
+ EMITSTORE(MAXSTACK, STD); 41885000=13230000=
+ MAXSTACK:= (G:= MAXSTACK)+1; 41890000=13231000=
+ J:= L; 41895000=13232000=
+ L:= GT1.LINK; 41900000=13232000=
+ DO BEGIN 41905000=13234000=
+ GT4:= GET(L); 41910000=13235000=
+ EMITV(G) 41915000=13237000=
+ END 41920000=13238000=
+ UNTIL (L:= GT4) = 4095; 41925000=13238000=
+ L:= J; 41930000=13239000=
+ POINTER:= POINTER-GT1.INCR 41935000=13241000=
+ END 41940000=13243000=
+ ELSE 41945000=13243000=
+ BEGIN 41950000=13243000=
+ IF NOT BOOLEAN(GT1.FORMAL) THEN 41955000=13245000=
+ BEGIN 41960000=13245000=
+ IF ELCLASS = LABELID THEN 41965000=13247000=
+ BEGIN 41970000=13247000=
+ ADD:= GT1.ADDRESS; 41975000=13248000=
+ IF NOT BOOLEAN(OCR:= TAKE(GIT(POINTER))).[1:1] THEN 41980000=13250000=
+ IF OCR.[36:12] ^= 0 OR ADD ^= 0 THEN 41985000=13251000=
+ BEGIN 41990000=13251000=
+ GT1:= 160; 41995000=13251000=
+ GO TO RECOV 42000000=13251000=
+ END; 42005000=13251000=
+ IF ADD ^= 0 THEN 42010000=13252000=
+ PROGDESCBLDR(ADD, TRUE, OCR.[36:10], LDES) 42015000=13253000=
+ END 42020000=13253000=
+ ELSE 42025000=13253000=
+ IF FALSE THEN 42030000=13254000=
+ BEGIN 42035000=13254000=
+ IF TAKE(POINTER+1) < 0 THEN 42040000=13256000=
+ BEGIN 42045000=13256000=
+ GT1:= 162; 42050000=13256000=
+ GO TO RECOV 42055000=13256000=
+ END; 42060000=13256000=
+ OCR:= (J:= TAKE(GIT(POINTER))).[24:12]; 42065000=13257000=
+ N:= GET((J:= J.[36:12])+4); 42070000=13258000=
+ TL:= L; 42075000=13258000=
+ IF ADD:= GT1.ADDRESS ^= 0 THEN 42080000=13260000=
+ BEGIN 42085000=13260000=
+ IF OCR ^= 0 THEN 42090000=13263000=
+ BEGIN 42095000=13263000=
+ L:= OCR-2; 42100000=13263000=
+ CALLSWITCH(POINTER); 42105000=13263000=
+ EMITO(BFW); 42110000=13263000=
+ END; 42115000=13263000=
+ L:= J+11; 42120000=13264000=
+ EMITL(15); 42125000=13264000=
+ EMITO(RTS); 42130000=13264000=
+ FOR J:= 4 STEP 4 UNTIL N DO 42135000=13266000=
+ BEGIN 42140000=13266000=
+ EMITL(GNAT(GET(L)*4096+GET(L+1))); 42145000=13267000=
+ EMITO(RTS) 42150000=13268000=
+ END 42155000=13269000=
+ END 42160000=13269000=
+ ELSE 42165000=13269000=
+ BEGIN 42170000=13269000=
+ L:= J+13; 42175000=13270000=
+ FOR J:= 4 STEP 4 UNTIL N DO 42180000=13272000=
+ BEGIN 42185000=13272000=
+ GT1:= GET(L)*4096+GET(L+1); 42190000=13273000=
+ GOGEN(GT1, BFW) 42195000=13274000=
+ END; 42200000=13274000=
+ END; 42205000=13274000=
+ L:= TL 42210000=13277000=
+ END 42215000=13278000=
+ ELSE 42220000=13278000=
+ IF ELCLASS >= PROCID AND ELCLASS <= INTPROCID THEN 42225000=13279000=
+ IF TAKE(POINTER+1) < 0 THEN 42230000=13280000=
+ BEGIN 42235000=13280000=
+ GT1:= 161; 42240000=13280000=
+ RECOV: 42245000=13281000=
+ MOVE(9, INFO[POINTER.LINKR, POINTER.LINKC], ACCUM);42250000=13281000=
+ Q:= ACCUM[1]; 42255000=13282000=
+ FLAG(GT1); 42260000=13282000=
+ ERRORTOG:= TRUE 42265000=13282000=
+ END 42270000=13283000=
+ END; 42275000=13283000=
+ GT2:= TAKE(POINTER+1); 42280000=13284000=
+ GT3:= GT2.PURPT; 42285000=13285000=
+ STACKHEAD[(0 & GT2[12:12:36]) MOD 125]:= TAKE(POINTER).LINK; 42290000=13286000=
+ POINTER:= POINTER-GT3 42295000=13288000=
+ END 42300000=13289000=
+ END; 42305000=13289000=
+ LASTINFO:= POINTER; 42310000=13290000=
+ NEXTINFO:= STOPPER 42315000=13292000=
+ END; 42320000=13292000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42325000=13292000=
+ PROCEDURE E; 42330000=13293000=
+ 42335000=13294000=
+COMMENT 42340000=13294000=
+ E IS THE PROCEDURE WHICH PLACES AN ENTRY IN INFO AND 42345000=13295000=
+ HOOKS IT INTO STACKHEAD. THE PREVIOUS STACKHEAD LINK 42350000=13296000=
+ IS SAVED IN THE LINK OF THE ELBAT WORD IN THE NEW ENTRY 42355000=13297000=
+ E PREVENTS AN ENTRY FROM OVERFLOWING A ROW,STARTING AT THE 42360000=13298000=
+ BEGINNING OF THE NEXT ROW IF NECESSARY ;42365000=13299000=
+ BEGIN 42370000=13300000=
+ REAL 42375000=13301000=
+ WORDCOUNT, 42380000=13301000=
+ RINX; 42385000=13301000=
+ IF RINX:= (NEXTINFO+WORDCOUNT:= (COUNT+18) DIV 8).LINKR ^= NEXTINFO.42390000=13303000=
+ LINKR 42395000=13304000=
+ THEN 42400000=13304000=
+ BEGIN 42405000=13304000=
+ PUT(125 & (RINX*256-NEXTINFO)[27:40:8], NEXTINFO); 42410000=13304000=
+ NEXTINFO:= 256*RINX 42415000=13305000=
+ END; 42420000=13305000=
+ IF SPECTOG THEN 42425000=13305100=
+ IF NOT MACROID THEN 42430000=13305200=
+ UNHOOK; 42435000=13305300=
+ ACCUM[0].INCR:= WORDCOUNT; 42440000=13307000=
+ IF NOT INLINETOG OR MACROID THEN 42445000=13307500=
+ BEGIN 42450000=13307500=
+ ACCUM[0].LINK:= STACKHEAD[SCRAM]; 42455000=13308000=
+ STACKHEAD[SCRAM]:= NEXTINFO; 42460000=13308000=
+ END; 42465000=13308500=
+ ACCUM[1].PURPT:= NEXTINFO-LASTINFO; 42470000=13309000=
+ MOVE(WORDCOUNT, ACCUM, INFO[NEXTINFO.LINKR, NEXTINFO.LINKC]); 42475000=13310000=
+ LASTINFO:= NEXTINFO; 42480000=13311000=
+ NEXTINFO:= NEXTINFO+WORDCOUNT 42485000=13313000=
+ END; 42490000=13313000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42495000=13313000=
+ PROCEDURE ENTRY(TYPE); 42500000=13314000=
+ VALUE 42505000=13315000=
+ TYPE; 42510000=13315000=
+ REAL 42515000=13316000=
+ TYPE; 42520000=13316000=
+ 42525000=13317000=
+COMMENT 42530000=13317000=
+ ENTRY ASSUMES THAT I IS POINTING AT AN IDENTIFIER WHICH 42535000=13318000=
+ IS BEING DECLARED AND MAKES UP THE ELBAT ENTRY FOR IT 42540000=13319000=
+ ACCORD TO TYPE .IF THE ENTRY IS AN ARRAY AND NOT 42545000=13320000=
+ A SPECIFICATION THEN A DESCRIPTOR IS PLACED IN THE STACK 42550000=13321000=
+ FOR THE UPCOMING COMMUNICATE TO GET STORAGE FOR THE ARRAY(S) ;42555000=13322000=
+ BEGIN 42560000=13323000=
+ J:= 0; 42565000=13324000=
+ I:= I-1; 42570000=13324000=
+ DO BEGIN 42575000=13326000=
+ STOPDEFINE:= TRUE; 42580000=13327000=
+ STEPIT; 42585000=13327000=
+ SCATTERELBAT; 42590000=13327000=
+ IF FORMALF:= SPECTOG THEN 42595000=13329000=
+ BEGIN 42600000=13330000=
+ IF ELCLASS ^= SECRET THEN 42605000=13332000=
+ FLAG(002); 42610000=13332000=
+ BUP:= BUP+1; 42615000=13333500=
+ KLASSF:= TYPE; 42620000=13333500=
+ MAKEUPACCUM; 42625000=13333500=
+ E; 42630000=13333500=
+ J:= J+1; 42635000=13333500=
+ END 42640000=13336000=
+ ELSE 42645000=13336000=
+ BEGIN 42650000=13336000=
+ IF ELCLASS > IDMAX THEN 42655000=13338000=
+ IF ELCLASS = POLISHV THEN 42660000=13338000=
+ ELCLASS:= TYPE 42665000=13338000=
+ ELSE 42670000=13338000=
+ FLAG(3); 42675000=13338000=
+ IF LEVELF = LEVEL THEN 42680000=13340000=
+ FLAG(001); 42685000=13340000=
+ VONF:= P2; 42690000=13341000=
+ FORMALF:= PTOG; 42695000=13341100=
+ KLASSF:= TYPE; 42700000=13342000=
+ MAKEUPACCUM; 42705000=13342000=
+ E; 42710000=13342000=
+ J:= J+1; 42715000=13342000=
+ IF((FORMALF:= PTOG) OR (STREAMTOG AND NOT STOPGSP)) AND NOT 42720000=13343000=
+ P2 42725000=13344000=
+ THEN 42730000=13344000=
+ ADDRSF:= PJ:= PJ+1 42735000=13345000=
+ ELSE 42740000=13345000=
+ IF STOPGSP THEN 42745000=13346000=
+ ADDRSF:= 0 42750000=13347000=
+ ELSE 42755000=13347000=
+ ADDRSF:= GETSPACE(P2, LASTINFO+1); 42760000=13347000=
+ PUT(TAKE(LASTINFO) & ADDRSF[16:37:11], LASTINFO); 42765000=13348000=
+ END 42770000=13351000=
+ END 42775000=13351000=
+ UNTIL STEPI ^= COMMA OR STOPENTRY; 42780000=13351000=
+ GTA1[0]:= J 42785000=13352000=
+ END; 42790000=13352000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42795000=13352000=
+ PROCEDURE UNHOOK; 42800000=13353000=
+ 42805000=13354000=
+COMMENT 42810000=13354000=
+ UNHOOK ASSUMES THAT THE WORD IN ELBAT[I] POINTS TO A PSUEDO ENTRY 42815000=13355000=
+ FOR APARAMETER.ITS JOB IS TO UNHOOK THAT FALSE ENTRY SO THAT 42820000=13356000=
+ E WILL WORK AS NORMAL. ;42825000=13357000=
+ BEGIN 42830000=13358000=
+ REAL 42835000=13359000=
+ LINKT, 42840000=13359000=
+ A, 42845000=13359000=
+ LINKP; 42850000=13359000=
+ LABEL 42855000=13360000=
+ L; 42860000=13360000=
+ LINKT:= STACKHEAD[SCRAM]; 42865000=13361000=
+ LINKP:= ELBAT[I].LINK; 42870000=13361000=
+ IF LINKT = LINKP THEN 42875000=13362000=
+ STACKHEAD[SCRAM]:= TAKE(LINKT).LINK 42880000=13363000=
+ ELSE 42885000=13363000=
+ L: IF A:= TAKE(LINKT).LINK = LINKP THEN 42890000=13365000=
+ PUT((TAKE(LINKT)) & (TAKE(A))[35:35:13], LINKT) 42895000=13366000=
+ ELSE 42900000=13366000=
+ BEGIN 42905000=13366000=
+ LINKT:= A; 42910000=13366000=
+ GO TO L 42915000=13366000=
+ END; 42920000=13366000=
+ END; 42925000=13367000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42930000=13367000=
+ PROCEDURE MAKEUPACCUM; 42935000=13368000=
+ BEGIN 42940000=13369000=
+ IF PTOG THEN 42945000=13371000=
+ GT1:= LEVELF 42950000=13371000=
+ ELSE 42955000=13371000=
+ GT1:= LEVEL; 42960000=13371000=
+ ACCUM[0]:= ABS(ELBAT[I] & KLASSF[2:41:7] & REAL(FORMALF)[9:47:1] & 42965000=13375000=
+ REAL(VONF)[10:47:1] & GT1[11:43:5] & ADDRSF[16:37:11]) 42970000=13375000=
+ END; 42975000=13375000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42980000=13375000=
+ PROCEDURE ARRAE; 42985000=13376000=
+ BEGIN 42990000=13377000=
+ INTEGER 42995000=13378000=
+ SAVEINFO; 43000000=13378000=
+ LABEL 43005000=13379000=
+ BETA1; 43010000=13379000=
+ TYPEV:= REALARRAYID; 43015000=13380000=
+ IF T1:= GTA1[J:= J-1] = 0 THEN 43020000=13381000=
+ J:= J+1; 43025000=13381000=
+ ELSE 43030000=13383000=
+ IF T1 = OWNV THEN 43035000=13383000=
+ BEGIN 43040000=13384000=
+ P2:= TRUE; 43045000=13385000=
+ IF SPECTOG THEN 43050000=13385000=
+ FLAG(13) 43055000=13388000=
+ END 43060000=13389000=
+ ELSE 43065000=13389000=
+ TYPEV:= REALARRAYID+T1-REALV; 43070000=13389000=
+BETA1: 43075000=13390000=
+ ENTER(TYPEV); 43080000=13390000=
+ IF ELCLASS ^= LFTBRKET THEN 43085000=13391000=
+ FLAG(16); 43090000=13391000=
+ IF STEPI = LITNO THEN 43095000=13392000=
+ BEGIN 43100000=13393000=
+ SAVEINFO:= ELBAT[I].ADDRESS; 43105000=13394000=
+ IF STEPI ^= RTBRKET THEN 43110000=13395000=
+ FLAG(53); 43115000=13395000=
+ FILLSTMT(SAVEINFO); 43120000=13396000=
+ SAVEINFO:= 1; 43125000=13397000=
+ END 43130000=13400000=
+ ELSE 43135000=13400000=
+ BEGIN 43140000=13400000=
+ IF ELCLASS ^= ASTRISK THEN 43145000=13400000=
+ FLAG(56); 43150000=13400000=
+ SAVEINFO:= 1; 43155000=13401000=
+ WHILE STEPI ^= RTBRKET DO 43160000=13402000=
+ BEGIN 43165000=13403000=
+ IF ELCLASS ^= COMMA AND STEPI ^= ASTRISK THEN 43170000=13404000=
+ FLAG(56); 43175000=13404000=
+ SAVEINFO:= SAVEINFO+1 43180000=13406000=
+ END; 43185000=13406000=
+ STEPIT; 43190000=13406000=
+ END; 43195000=13408000=
+ PUT(TAKE(LASTINFO) & SAVEINFO[27:40:8], LASTINFO); 43200000=13408000=
+ J:= 1; 43205000=13408500=
+ GTA1[0]:= 0; 43210000=13408500=
+ IF ELCLASS = COMMA THEN 43215000=13409000=
+ BEGIN 43220000=13409000=
+ STEPIT; 43225000=13409000=
+ GO TO BETA1 43230000=13409000=
+ END 43235000=13410000=
+ END ARRAE; 43240000=13410000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43245000=13410000=
+ PROCEDURE PUTNBUMP(X); 43250000=13589000=
+ VALUE 43255000=13590000=
+ X; 43260000=13590000=
+ REAL 43265000=13591000=
+ X; 43270000=13591000=
+ BEGIN 43275000=13592000=
+ INFO[NEXTINFO.LINKR, NEXTINFO.LINKC]:= X; 43280000=13593000=
+ NEXTINFO:= NEXTINFO+1 43285000=13595000=
+ END; 43290000=13595000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43295000=13595000=
+ PROCEDURE JUMPCHKX; 43300000=13596000=
+ 43305000=13597000=
+COMMENT THIS PROCEDURE IS CALLED AT THE START OF ANY EXECUTABLE CODE 43310000=13597000=
+ WHICH THE BLOCK MIGHT EMIT.IT DETERMINES WHETHER ANY JUMPS 43315000=13598000=
+ ARROUND NONEXECUTABLE CODE MAY BE WAITING AND WHETHER IT 43320000=13599000=
+ IS THE FIRST EXECUTABLE CODE; 43325000=13600000=
+ IF NOT SPECTOG THEN 43330000=13601000=
+ BEGIN 43335000=13602000=
+ IF AJUMP THEN 43340000=13604000=
+ BEGIN 43345000=13605000=
+ ADJUST; 43350000=13605000=
+ EMITB(BFW, SAVEL, L) 43355000=13607000=
+ END 43360000=13608000=
+ ELSE 43365000=13608000=
+ IF FIRSTX = 4095 THEN 43370000=13609000=
+ BEGIN 43375000=13610000=
+ ADJUST; 43380000=13611000=
+ FIRSTX:= L; 43385000=13612000=
+ END; 43390000=13613000=
+ AJUMP:= FALSE 43395000=13615000=
+ END; 43400000=13615000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43405000=13615000=
+ PROCEDURE JUMPCHKNX; 43410000=13616000=
+ 43415000=13617000=
+COMMENT JUMPCHKNX DETERMINES WHETHER ANY EXECUTABLE CODE HAS BEEN 43420000=13617000=
+ EMITTED AND IF SO WHETHER IT WAS JUST PREVIOUS TO THE 43425000=13618000=
+ NON EXECUTABLE ABOUT TO BE EMITTED.IF BOTH THEN L IS BUMPED 43430000=13619000=
+ AND SAVED FOR A LATER BRANCH; 43435000=13620000=
+ IF NOT SPECTOG THEN 43440000=13621000=
+ BEGIN 43445000=13622000=
+ IF FIRSTX ^= 4095 THEN 43450000=13624000=
+ BEGIN 43455000=13625000=
+ IF NOT AJUMP THEN 43460000=13627000=
+ SAVEL:= BUMPL; 43465000=13628000=
+ AJUMP:= TRUE 43470000=13630000=
+ END; 43475000=13630000=
+ ADJUST 43480000=13631000=
+ END; 43485000=13631000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43490000=13631000=
+ PROCEDURE SEGMENTSTART(SAVECODE); 43495000=13632000=
+ VALUE 43500000=13632000=
+ SAVECODE; 43505000=13632000=
+ BOOLEAN 43510000=13632000=
+ SAVECODE; 43515000=13632000=
+ BEGIN 43520000=13632100=
+ STREAM PROCEDURE PRINT(SAVECODE, ADR, FIEL); 43525000=13633000=
+ VALUE 43530000=13633000=
+ SAVECODE, 43535000=13633000=
+ ADR; 43540000=13633000=
+ BEGIN 43545000=13634000=
+ LABEL 43550000=13635000=
+ L1; 43555000=13635000=
+ DI:= FIEL; 43560000=13636000=
+ DS:= 8 LIT 6" "; 43565000=13636000=
+ SI:= FIEL; 43570000=13637000=
+ DS:= 9 WDS; 43575000=13637000=
+ DI:= DI-3; 43580000=13637000=
+ SAVECODE(DS:= 38 LIT 6"START OF SAVE SEGMENT; BASE ADDRESS = "; 43585000=13639000=
+ JUMP OUT TO L1); 43590000=13639000=
+ DS:= 38 LIT 6" START OF REL SEGMENT; DISK ADDRESS = "; 43595000=13640000=
+ L1: SI:= LOC ADR; 43600000=13642000=
+ DS:= 5 DEC; 43605000=13642000=
+ END PRINT; 43610000=13643000=
+ MOVE(1, SAVECODE, CODE(0)); 43615000=13651000=
+ IF SAVECODE AND INTOG AND NOT DECKTOG THEN 43620000=13651100=
+ FLAG(57); 43625000=13651100=
+ IF LISTER OR SEGSTOG THEN 43630000=13652000=
+ BEGIN 43635000=13652500=
+ PRINT(SAVECODE, IF SAVECODE THEN CORADR ELSE DISKADR, LIN[**]); 43640000=13653000=
+ IF NOHEADING THEN 43645000=13653500=
+ DATIME; 43650000=13653500=
+ WRITELINE; 43655000=13653500=
+ END; 43660000=13654000=
+ END SEGMENTSTART; 43665000=13655000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43670000=13655000=
+ PROCEDURE SEGMENT(SIZE, FR); 43675000=13657000=
+ VALUE 43680000=13657000=
+ SIZE, 43685000=13657000=
+ FR; 43690000=13657000=
+ INTEGER 43695000=13657000=
+ SIZE, 43700000=13657000=
+ FR; 43705000=13657000=
+ BEGIN 43710000=13660000=
+ STREAM PROCEDURE PRINT(SIZE, FIEL); 43715000=13661000=
+ VALUE 43720000=13661000=
+ SIZE; 43725000=13661000=
+ BEGIN 43730000=13663000=
+ DI:= FIEL; 43735000=13665000=
+ DS:= 8 LIT 6" "; 43740000=13665000=
+ SI:= FIEL; 43745000=13667000=
+ DS:= 14 WDS; 43750000=13667000=
+ DI:= DI-16; 43755000=13668000=
+ DS:= 6 LIT 6"SIZE= "; 43760000=13668000=
+ SI:= LOC SIZE; 43765000=13670000=
+ DS:= 4 DEC; 43770000=13670000=
+ DS:= 6 LIT 6" WORDS" 43775000=13673000=
+ END PRINT; 43780000=13673000=
+ STREAM PROCEDURE DOIT(C, A, I, S, F, W); 43785000=13673100=
+ VALUE 43790000=13673100=
+ C, 43795000=13673100=
+ A, 43800000=13673100=
+ F, 43805000=13673100=
+ W; 43810000=13673100=
+ BEGIN 43815000=13673150=
+ LOCAL N; 43820000=13673150=
+ DI:= S; 43825000=13673200=
+ DS:= 8 LIT 6" "; 43830000=13673200=
+ SI:= S; 43835000=13673200=
+ DS:= 9 WDS; 43840000=13673200=
+ DI:= DI-8; 43845000=13673250=
+ SI:= LOC W; 43850000=13673250=
+ DS:= 4 DEC; 43855000=13673250=
+ SI:= I; 43860000=13673300=
+ SI:= SI+10; 43865000=13673300=
+ DI:= LOC N; 43870000=13673300=
+ DI:= DI+7; 43875000=13673300=
+ DS:= CHR; 43880000=13673300=
+ DI:= S; 43885000=13673350=
+ SI:= LOC F; 43890000=13673350=
+ SI:= SI+7; 43895000=13673350=
+ DS:= CHR; 43900000=13673350=
+ SI:= LOC C; 43905000=13673350=
+ DS:= 3 DEC; 43910000=13673400=
+ DS:= 4 DEC; 43915000=13673400=
+ SI:= I; 43920000=13673400=
+ SI:= SI+11; 43925000=13673400=
+ DS:= N CHR; 43930000=13673400=
+ END DOIT; 43935000=13673450=
+ IF LISTER OR SEGSTOG THEN 43940000=13674000=
+ BEGIN 43945000=13674500=
+ PRINT(SIZE, LIN[**]); 43950000=13675000=
+ IF NOHEADING THEN 43955000=13676000=
+ DATIME; 43960000=13676000=
+ WRITELINE; 43965000=13676000=
+ END; 43970000=13677000=
+ IF STUFFTOG THEN 43975000=13677100=
+ IF FR > 0 THEN 43980000=13677100=
+ IF LEVEL > 1 THEN 43985000=13677100=
+ BEGIN 43990000=13677150=
+ KLASSF:= TAKE(PROINFO).CLASS; 43995000=13677200=
+ IF FR > 1024 THEN 44000000=13677250=
+ FR:= FR-1024; 44005000=13677250=
+ DOIT(KLASSF, FR, INFO[PROINFO.LINKR, PROINFO.LINKC], 44010000=13677400=
+ TWXA[0], SAF, SIZE); 44015000=13677400=
+ WRITE(STUFF, 10, TWXA[**]); 44020000=13677500=
+ END; 44025000=13677600=
+ IF SIZE > SEGSIZEMAX THEN 44030000=13678000=
+ SEGSIZEMAX:= SIZE; 44035000=13678000=
+ END SEGMENT; 44040000=13681000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44045000=13681000=
+ STREAM PROCEDURE MOVECODE(EDOC, TEDOC); 44050000=13683000=
+ BEGIN 44055000=13684000=
+ LOCAL T1, T2, T3; 44060000=13684000=
+ SI:= EDOC; 44065000=13685000=
+ T1:= SI; 44070000=13685000=
+ SI:= TEDOC; 44075000=13686000=
+ T2:= SI; 44080000=13686000=
+ SI:= LOC EDOC; 44085000=13687000=
+ SI:= SI+3; 44090000=13688000=
+ DI:= LOC T3; 44095000=13689000=
+ DI:= DI+5; 44100000=13690000=
+ SKIP 3 DB; 44105000=13691000=
+ (IF SB THEN DS:= 1 SET ELSE DS:= 1 RESET;SKIP 1 SB); 44110000=13692000=
+ SI:= LOC EDOC; 44115000=13693000=
+ DI:= LOC T2; 44120000=13694000=
+ DS:= 5 CHR; 44125000=13695000=
+ (IF SB THEN DS:= 1 SET ELSE DS:= 1 RESET;SKIP 1 SB); 44130000=13696000=
+ DI:= T3; 44135000=13697000=
+ SI:= LOC T2; 44140000=13698000=
+ DS:= WDS; 44145000=13699000=
+ DI:= LOC T3; 44150000=13700000=
+ DI:= DI+5; 44155000=13701000=
+ SKIP 3 DB; 44160000=13702000=
+ SI:= LOC EDOC; 44165000=13703000=
+ SI:= SI+3; 44170000=13704000=
+ (IF SB THEN DS:= 1 SET ELSE DS:= 1 RESET;SKIP 1 SB); 44175000=13705000=
+ SI:= LOC TEDOC; 44180000=13706000=
+ DI:= LOC T1; 44185000=13707000=
+ DS:= 5 CHR; 44190000=13708000=
+ (IF SB THEN DS:= 1 SET ELSE DS:= 1 RESET;SKIP 1 SB); 44195000=13709000=
+ DI:= T3; 44200000=13710000=
+ SI:= LOC T1; 44205000=13711000=
+ DS:= WDS; 44210000=13712000=
+ END; 44215000=13713000=
+ PROCEDURE ENTER(TYPE); 44220000=13714000=
+ VALUE 44225000=13715000=
+ TYPE; 44230000=13715000=
+ REAL 44235000=13716000=
+ TYPE; 44240000=13716000=
+ BEGIN 44245000=13717000=
+ G:= GTA1[J:= J-1]; 44250000=13718000=
+ IF NOT SPECTOG THEN 44255000=13720000=
+ BEGIN 44260000=13721000=
+ IF NOT P2 THEN 44265000=13723000=
+ IF P2:= (G = OWNV) THEN 44270000=13724000=
+ G:= GTA1[J:= J-1]; 44275000=13724000=
+ IF NOT P3 THEN 44280000=13726000=
+ IF P3:= (G = SAVEV) THEN 44285000=13727000=
+ G:= GTA1[J:= J-1] 44290000=13728000=
+ END; 44295000=13728000=
+ IF G ^= 0 THEN 44300000=13729000=
+ FLAG(25) 44305000=13729000=
+ ELSE 44310000=13729000=
+ ENTRY(TYPE) 44315000=13730000=
+ END; 44320000=13730000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44325000=13730000=
+ PROCEDURE HTTEOAP(GOTSTORAGE, RELAD, STOPPER, PRTAD); 44330000=13731000=
+ VALUE 44335000=13732000=
+ GOTSTORAGE, 44340000=13732000=
+ RELAD, 44345000=13732000=
+ STOPPER, 44350000=13732000=
+ PRTAD; 44355000=13732000=
+ BOOLEAN 44360000=13733000=
+ GOTSTORAGE; 44365000=13733000=
+ REAL 44370000=13734000=
+ RELAD, 44375000=13734000=
+ STOPPER, 44380000=13734000=
+ PRTAD; 44385000=13734000=
+ BEGIN 44390000=13735000=
+ IF FUNCTOG THEN 44395000=13737000=
+ BEGIN 44400000=13738000=
+ EMITV(513); 44405000=13739000=
+ EMITO(RTN) 44410000=13741000=
+ END 44415000=13743000=
+ ELSE 44420000=13743000=
+ EMITO(XIT); 44425000=13743000=
+ CONSTANTCLEAN; 44430000=13744000=
+ PURGE(STOPPER); 44435000=13745000=
+ MOVE(1, CODE(0), Z); 44440000=13746000=
+ PROGDESCBLDR(PRTAD, BOOLEAN(Z), (L+3) DIV 4, PDES); 44445000=13746000=
+ END HTTEOAP; 44450000=13747000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44455000=13747000=
+ PROCEDURE INLINE; 44460000=13748000=
+ BEGIN 44465000=13749000=
+ INTEGER 44470000=13750000=
+ SN, 44475000=13750000=
+ LN, 44480000=13750000=
+ P, 44485000=13750000=
+ LS, 44490000=13750000=
+ J; 44495000=13750000=
+ BOOLEAN 44500000=13750000=
+ MKST; 44505000=13750000=
+ BOOLEAN 44510000=13750500=
+ FLIPFLOP; 44515000=13750500=
+ INTEGER 44520000=13750600=
+ PN; 44525000=13750600=
+ LABEL 44530000=13751000=
+ L1, 44535000=13751000=
+ L2, 44540000=13751000=
+ L3; 44545000=13751000=
+ PN:= 1; 44550000=13751100=
+ FLIPFLOP:= INLINETOG:= TRUE; 44555000=13752000=
+ P:= 0; 44560000=13752000=
+ MKST:= FALSE; 44565000=13752000=
+ LS:= L; 44570000=13752000=
+ EMITO(NOP); 44575000=13752000=
+ IF STEPI ^= LEFTPAREN THEN 44580000=13753000=
+ FLAG(59); 44585000=13753000=
+ IF TABLE(I+1) = COLON THEN 44590000=13753100=
+ BEGIN 44595000=13753100=
+ STEPIT; 44600000=13753100=
+ GO TO L2 44605000=13753100=
+ END; 44610000=13753100=
+L1: IF STEPI > IDMAX THEN 44615000=13754000=
+ BEGIN 44620000=13754000=
+ FLAG(465); 44625000=13754000=
+ GO TO L2 44630000=13754000=
+ END; 44635000=13754000=
+ ACCUM[0]:= 0 & P[16:37:11] & LOCLID[2:41:7] & SCRAM[35:35:13]; 44640000=13755000=
+ E; 44645000=13755500=
+ IF FLIPFLOP THEN 44650000=13755500=
+ BEGIN 44655000=13755500=
+ FLIPFLOP:= FALSE; 44660000=13755500=
+ LN:= SN:= LASTINFO 44665000=13755500=
+ END; 44670000=13755500=
+ IF STEPI = COMMA OR ELCLASS = COLON OR ELCLASS = RTPAREN THEN 44675000=13757000=
+ BEGIN 44680000=13757000=
+ I:= I-2; 44685000=13757000=
+ STEPIT 44690000=13757000=
+ END 44695000=13758000=
+ ELSE 44700000=13758000=
+ IF ELCLASS ^= ASSIGNOP THEN 44705000=13758000=
+ FLAG(60) 44710000=13758000=
+ ELSE 44715000=13758000=
+ STEPIT; 44720000=13758000=
+ AEXP; 44725000=13759000=
+L2: IF ELCLASS = COLON THEN 44730000=13760000=
+ BEGIN 44735000=13761000=
+ IF MKST THEN 44740000=13761000=
+ FLAG(99); 44745000=13761000=
+ MKST:= TRUE; 44750000=13761000=
+ EMITO(MKS); 44755000=13761000=
+ P:= P+2; 44760000=13761000=
+ IF TABLE(I+1) ^= RTPAREN THEN 44765000=13761100=
+ GO TO L1; 44770000=13761100=
+ STEPIT; 44775000=13761110=
+ PN:= 2; 44780000=13761110=
+ END 44785000=13761200=
+ ELSE 44790000=13761200=
+ P:= P+1; 44795000=13761200=
+ IF ELCLASS = COMMA THEN 44800000=13762000=
+ GO TO L1; 44805000=13762000=
+ IF ELCLASS ^= RTPAREN THEN 44810000=13763000=
+ FLAG(61); 44815000=13763000=
+ IF NOT MKST THEN 44820000=13764000=
+ BEGIN 44825000=13765000=
+ J:= L; 44830000=13765000=
+ L:= LS; 44835000=13765000=
+ EMITO(MKS); 44840000=13765000=
+ L:= J 44845000=13765000=
+ END; 44850000=13765000=
+ IF STEPI ^= SEMICOLON THEN 44855000=13766000=
+ FLAG(62); 44860000=13766000=
+ EMITO(584); 44865000=13766100=
+L3: ELBAT[I]:= TAKE(SN); 44870000=13767000=
+ SCATTERELBAT; 44875000=13767000=
+ ADDRSF:= P-ADDRSF; 44880000=13767000=
+ PUT(ELBAT[I] & ADDRSF[16:37:11] & STACKHEAD[LINKF][33:33:15], SN); 44885000=13768000=
+ STACKHEAD[LINKF]:= SN; 44890000=13769000=
+ SN:= SN+INCRF; 44895000=13769000=
+ IF ADDRSF ^= PN THEN 44900000=13770000=
+ GO TO L3; 44905000=13770000=
+ INLINETOG:= FALSE; 44910000=13770500=
+ PN:= NEXTINFO; 44915000=13770600=
+ STREAMTOG:= TRUE; 44920000=13771000=
+ STREAMWORDS; 44925000=13771000=
+ IF STEPI ^= BEGINV THEN 44930000=13771000=
+ STREAMSTMT 44935000=13772000=
+ ELSE 44940000=13772000=
+ BEGIN 44945000=13772000=
+ STEPIT; 44950000=13772000=
+ COMPOUNDTAIL 44955000=13772000=
+ END; 44960000=13772000=
+ STREAMTOG:= FALSE; 44965000=13773000=
+ PURGE(PN); 44970000=13773000=
+ STREAMWORDS; 44975000=13773000=
+ PURGE(LN); 44980000=13773000=
+ EMITL(16); 44985000=13773000=
+ END INLINE; 44990000=13774000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44995000=13774000=
+ 45000000=14000000=
+ COMMENT THIS SECTION CONTAINS THE BLOCK ROUTINE ; 45005000=14000000=
+ PROCEDURE BLOCK(SOP); 45010000=14001000=
+ VALUE 45015000=14002000=
+ SOP; 45020000=14002000=
+ BOOLEAN 45025000=14003000=
+ SOP; 45030000=14003000=
+ 45035000=14004000=
+COMMENT SOP IS TRUE IF THE BLOCK WAS CALLED BY ITSELF THROUGH THE 45040000=14004000=
+ PROCEDURE DECLARATION-OTHERWISE IT WAS CALLED BY STATEMENT. 45045000=14005000=
+ THE BLOCK ROUTINE IS RESPONSIBLE FOR HANDLING THE BLOCK 45050000=14006000=
+ STRUCTURE OF AN ALGOL PROGRAM-SEGMENTING EACH BLOCK,HANDLING 45055000=14007000=
+ ALL DECLARATIONS,DOING NECESSARY BOOKKEEPING REGARDING EACH 45060000=14008000=
+ BLOCK, AND SUPPLYING THE SCANNER WITH ALL NECESSARY INFORMATION 45065000=14009000=
+ ABOUT DECLARED IDENTIFIERS. 45070000=14010000=
+ IT ALSO WRITES EACH SEGMENT ONTO THE PCT; 45075000=14011000=
+ BEGIN 45080000=14012000=
+ LABEL 45085000=14013000=
+ OWNERR, 45090000=14013000=
+ SAVERR, 45095000=14013000=
+ BOOLEANDEC, 45100000=14013000=
+ REALDEC, 45105000=14013000=
+ ALPHADEC, 45110000=14013000=
+ INTEGERDEC, 45115000=14014000=
+ LABELDEC, 45120000=14014000=
+ DUMPDEC, 45125000=14014000=
+ SUBDEC, 45130000=14014000=
+ OUTDEC, 45135000=14014000=
+ INDEC, 45140000=14014000=
+ MONITORDEC, 45145000=14015000=
+ SWITCHDEC, 45150000=14015000=
+ PROCEDUREDEC, 45155000=14015000=
+ ARRAYDEC, 45160000=14015000=
+ NAMEDEC, 45165000=14015000=
+ FILEDEC, 45170000=14016000=
+ GOTSCHK, 45175000=14017000=
+ STREAMERR, 45180000=14017000=
+ DEFINEDEC, 45185000=14017000=
+ CALLSTATEMENT, 45190000=14017000=
+ HF, 45195000=14017000=
+ START; 45200000=14017000=
+ SWITCH 45205000=14018000=
+ DECLSW:= OWNERR, 45210000=14018000=
+ SAVERR, 45215000=14018000=
+ BOOLEANDEC, 45220000=14018000=
+ REALDEC, 45225000=14018000=
+ INTEGERDEC, 45230000=14018000=
+ ALPHADEC, 45235000=14019000=
+ LABELDEC, 45240000=14019000=
+ DUMPDEC, 45245000=14019000=
+ SUBDEC, 45250000=14019000=
+ OUTDEC, 45255000=14019000=
+ INDEC, 45260000=14019000=
+ MONITORDEC, 45265000=14020000=
+ SWITCHDEC, 45270000=14020000=
+ PROCEDUREDEC, 45275000=14020000=
+ ARRAYDEC, 45280000=14020000=
+ NAMEDEC, 45285000=14020000=
+ FILEDEC, 45290000=14021000=
+ STREAMERR, 45295000=14021000=
+ DEFINEDEC; 45300000=14021000=
+ DEFINE 45305000=14022000=
+ NLOCS = 10 #, 45310000=14022000=
+ LOCBEGIN = PRTI #, 45315000=14023000=
+ LBP = [36:12] #, 45320000=14023100=
+ SPACEITDOWN = BEGIN 45325000=14023100=
+ WRITE(LINE[DBL]); 45330000=14023100=
+ WRITE(LINE[DBL]) 45335000=14023100=
+ END #; 45340000=14023100=
+ BOOLEAN 45345000=14025000=
+ GOTSTORAGE; 45350000=14025000=
+ INTEGER 45355000=14026000=
+ PINFOO, 45360000=14026000=
+ BLKAD; 45365000=14026000=
+ COMMENT LOCAL TO BLOCK TO SAVE WHERE A PROCEDURE IS EMTERED 45370000=14027000=
+ IN INFO; 45375000=14028000=
+ REAL 45380000=14029000=
+ MAXSTACKO, 45385000=14029000=
+ LASTINFOT, 45390000=14029000=
+ RELAD, 45395000=14029000=
+ LO, 45400000=14029000=
+ TSUBLEVEL, 45405000=14029000=
+ STACKCTRO; 45410000=14029000=
+ INTEGER 45415000=14030000=
+ SGNOO, 45420000=14030000=
+ LOLD, 45425000=14030000=
+ SAVELO, 45430000=14030000=
+ PRTIO, 45435000=14030000=
+ NINFOO; 45440000=14030000=
+ INTEGER 45445000=14031000=
+ NCIIO; 45450000=14031000=
+ INTEGER 45455000=14032000=
+ PROAD; 45460000=14032000=
+ INTEGER 45465000=14033000=
+ FIRSTXO; 45470000=14033000=
+ BOOLEAN 45475000=14034000=
+ FUNCTOGO, 45480000=14034000=
+ AJUMPO; 45485000=14034000=
+ BEGINCTR:= BEGINCTR+1; 45490000=14035000=
+ IF SOP THEN 45495000=14037000=
+ BEGIN 45500000=14037000=
+ BLKAD:= PROADD; 45505000=14037000=
+ IF LASTENTRY ^= 0 THEN 45510000=14039000=
+ BEGIN 45515000=14039000=
+ GT1:= BUMPL; 45520000=14039000=
+ CONSTANTCLEAN; 45525000=14040000=
+ EMITB(BFW, GT1, L) 45530000=14042000=
+ END 45535000=14044000=
+ END 45540000=14044000=
+ ELSE 45545000=14044000=
+ BEGIN 45550000=14044000=
+ BLKAD:= GETSPACE(TRUE, -6); % SEG. DESCR. 45555000=14044000=
+ END; 45560000=14048000=
+ FIRSTXO:= FIRSTX; 45565000=14051000=
+ FIRSTX:= 0; 45570000=14052000=
+ LEVEL:= LEVEL+1; 45575000=14053000=
+ LOLD:= L; 45580000=14054000=
+ FUNCTOGO:= FUNCTOG; 45585000=14054000=
+ AJUMPO:= AJUMP; 45590000=14054000=
+ PRTIO:= PRTI; 45595000=14054000=
+ SGNOO:= SGNO; 45600000=14054000=
+ SAVELO:= SAVEL; 45605000=14055000=
+ AJUMP:= FALSE; 45610000=14055000=
+ L:= 0; 45615000=14055000=
+ NINFOO:= NEXTINFO; 45620000=14055000=
+ NCIIO:= NCII; 45625000=14056000=
+ NCII:= 0; 45630000=14057000=
+ STACKCTRO:= STACKCTR; 45635000=14058000=
+ ELBAT[I].CLASS:= SEMICOLON; 45640000=14062000=
+START: 45645000=14063000=
+ IF TABLE(I) ^= SEMICOLON THEN 45650000=14064000=
+ BEGIN 45655000=14065000=
+ FLAG(0); 45660000=14066000=
+ I:= I-1 45665000=14068000=
+ END; 45670000=14068000=
+ GTA1[0]:= J:= 0; 45675000=14069000=
+ IF SPECTOG THEN 45680000=14071000=
+ BEGIN 45685000=14072000=
+ IF BUP = PJ THEN 45690000=14074000=
+ BEGIN 45695000=14075000=
+ BEGIN 45700000=14076000=
+ LABEL 45705000=14076000=
+ GETLP; 45710000=14076000=
+ IF STREAMTOG THEN 45715000=14077000=
+ F:= 0 45720000=14077000=
+ ELSE 45725000=14077000=
+ F:= FZERO; 45730000=14078000=
+ BUP:= LASTINFO; 45735000=14079000=
+ DO BEGIN 45740000=14081000=
+ IF NOT STREAMTOG THEN 45745000=14082000=
+ BUP:= LASTINFO; 45750000=14083000=
+ GETLP: 45755000=14084000=
+ G:= TAKE(BUP); 45760000=14084000=
+ IF K:= G.ADDRESS ^= PJ THEN 45765000=14086000=
+ BEGIN 45770000=14087000=
+ IF BUP ^= BUP:= BUP-TAKE(BUP+1).PURPT THEN 45775000=14088000=
+ GO TO GETLP 45780000=14090000=
+ END; 45785000=14090000=
+ TYPEV:= G.CLASS; 45790000=14091000=
+ G.ADDRESS:= F:= F+1; 45795000=14115000=
+ PUT(G, BUP); 45800000=14116000=
+ G.INCR:= GT1; 45805000=14116000=
+ PUT(G, MARK+PJ); 45810000=14118000=
+ BUP:= BUP-TAKE(BUP+1).PURPT 45815000=14119000=
+ END 45820000=14120000=
+ UNTIL PJ:= PJ-1 = 0 45825000=14121000=
+ END; 45830000=14121000=
+ SPECTOG:= FALSE; 45835000=14122000=
+ GO TO HF 45840000=14124000=
+ END 45845000=14125000=
+ END; 45850000=14125000=
+ STACKCT:= 0; 45855000=14125500=
+ WHILE STEPI = DECLARATORS DO 45860000=14127000=
+ BEGIN 45865000=14128000=
+ GTA1[J:= J+1]:= ELBAT[I].ADDRESS; 45870000=14129000=
+ STOPDEFINE:= ERRORTOG:= TRUE; 45875000=14130000=
+ END; 45880000=14131000=
+ IF J = 0 THEN 45885000=14132000=
+ GO TO CALLSTATEMENT; 45890000=14132000=
+ P2:= P3:= FALSE; 45895000=14133000=
+ GO TO DECLSW[GTA1[J]]; 45900000=14134000=
+OWNERR: 45905000=14135000=
+ FLAG(20); 45910000=14135000=
+ J:= J+1; 45915000=14135000=
+ GO TO REALDEC; 45920000=14135000=
+SAVERR: 45925000=14136000=
+ FLAG(21); 45930000=14136000=
+ J:= J+1; 45935000=14136000=
+ GO TO REALDEC; 45940000=14136000=
+STREAMERR: 45945000=14137000=
+ IF ELCLASS = LEFTPAREN THEN % 6 45950000=14137000=
+ BEGIN % 6 45955000=14137100=
+ I:= I-1; % 6 45960000=14137200=
+ GO TO CALLSTATEMENT; % 6 45965000=14137300=
+ END; % 6 45970000=14137400=
+ FLAG(22); % 6 45975000=14137500=
+ J:= J+1; % 6 45980000=14137600=
+ GO TO PROCEDUREDEC; % 6 45985000=14137700=
+REALDEC: 45990000=14138000=
+ P3:= TRUE; 45995000=14138000=
+ ENTER(REALID); 46000000=14138000=
+ GO TO START; 46005000=14138000=
+ALPHADEC: 46010000=14139000=
+ P3:= TRUE; 46015000=14139000=
+ ENTER(ALFAID); 46020000=14139000=
+ GO TO START; 46025000=14139000=
+BOOLEANDEC: 46030000=14140000=
+ P3:= TRUE; 46035000=14140000=
+ ENTER(BOOID); 46040000=14140000=
+ GO TO START; 46045000=14140000=
+INTEGERDEC: 46050000=14141000=
+ P3:= TRUE; 46055000=14141000=
+ ENTER(INTID); 46060000=14141000=
+ GO TO START; 46065000=14141000=
+MONITORDEC: 46070000=14142000=
+ IF SPECTOG THEN 46075000=14143000=
+ BEGIN 46080000=14143000=
+ COMMENT ERROR 463 MEANS THAT A MONITOR 46085000=14143000=
+ DECLARATION APPEARS IN THE SPECIFICATION 46090000=14144000=
+ PART OF A PROCEDURE; 46095000=14145000=
+ FLAG(463); 46100000=14146000=
+ END; 46105000=14147000=
+ DO 46110000=14148000=
+ UNTIL FALSE; 46115000=14148000=
+DUMPDEC: 46120000=14149000=
+ IF SPECTOG THEN 46125000=14150000=
+ BEGIN 46130000=14150000=
+ COMMENT ERROR 464 MEANS A DUMP DECLARATION 46135000=14150000=
+ APPEARS IN THE SPECIFICATION PART OF A 46140000=14151000=
+ PROCEDURE; 46145000=14152000=
+ FLAG(464); 46150000=14153000=
+ END; 46155000=14154000=
+ DO 46160000=14155000=
+ UNTIL FALSE; 46165000=14155000=
+ARRAYDEC: 46170000=14156000=
+ ARRAE; 46175000=14156000=
+ GO TO START; 46180000=14156000=
+FILEDEC: 46185000=14158000=
+INDEX: 46190000=14158000=
+OUTDEC: 46195000=14160000=
+GOTSCHK: 46200000=14160000=
+ GOTSTORAGE:= NOT SPECTOG OR GOTSTORAGE; 46205000=14160000=
+ GO TO START; 46210000=14160000=
+NAMEDEC: 46215000=14161000=
+ IF T1:= GTA1[J:= J-1] ^= ARRAYV THEN 46220000=14161000=
+ J:= J+1; 46225000=14161000=
+ TYPEV:= NAMEID; 46230000=14161010=
+ IF T1:= GTA1[J:= J-1] = 0 THEN 46235000=14161020=
+ J:= J+1 46240000=14161030=
+ ELSE 46245000=14161030=
+ IF T1 = OWNV THEN 46250000=14161050=
+ BEGIN 46255000=14161060=
+ P2:= TRUE; 46260000=14161070=
+ IF SPECTOG THEN 46265000=14161070=
+ FLAG(013); 46270000=14161080=
+ END 46275000=14161120=
+ ELSE 46280000=14161120=
+ TYPEV:= NAMEID+T1-REALV; 46285000=14161120=
+ ENTER(TYPEV); 46290000=14162000=
+ GO TO START; 46295000=14162000=
+SUBDEC: 46300000=14163500=
+ BEGIN 46305000=14163500=
+ REAL 46310000=14163500=
+ TYPEV, 46315000=14163500=
+ T; 46320000=14163500=
+ IF GTA1[J:= J-1] = REALV THEN 46325000=14164000=
+ TYPEV:= REALSUBID 46330000=14164000=
+ ELSE 46335000=14164000=
+ TYPEV:= SUBID; 46340000=14164000=
+ STOPGSP:= TRUE; 46345000=14164500=
+ JUMPCHKNX; 46350000=14165000=
+ ENTRY(TYPEV); 46355000=14165000=
+ IF ELCLASS ^= SEMICOLON THEN 46360000=14165000=
+ FLAG(57); 46365000=14165000=
+ STOPGSP:= FALSE; 46370000=14165500=
+ STEPIT; 46375000=14166000=
+ T:= NEXTINFO; 46380000=14166500=
+ PUTNBUMP(L); 46385000=14167000=
+ STMT; 46390000=14167000=
+ EMITO(LFU); 46395000=14167000=
+ IF TYPEV = REALSUBID THEN 46400000=14167000=
+ IF GET(L-2) ^= 533 THEN 46405000=14168000=
+ FLAG(58); 46410000=14168000=
+ PUT(TAKE(T) & L[24:36:12], T); 46415000=14168000=
+ CONSTANTCLEAN; 46420000=14168500=
+ END; 46425000=14169000=
+ GO TO START; 46430000=14170000=
+LABELDEC: 46435000=14187000=
+ IF SPECTOG AND FUNCTOG THEN 46440000=14187000=
+ FLAG(24); 46445000=14187000=
+ STOPENTRY:= STOPGSP:= TRUE; 46450000=14188000=
+ I:= I-1; 46455000=14189000=
+ DO BEGIN 46460000=14191000=
+ STOPDEFINE:= TRUE; 46465000=14192000=
+ STEPIT; 46470000=14193000=
+ ENTRY(LABELID); 46475000=14194000=
+ PUTNBUMP(0) 46480000=14196000=
+ END 46485000=14197000=
+ UNTIL ELCLASS ^= COMMA; 46490000=14197000=
+ STOPENTRY:= STOPGSP:= FALSE; 46495000=14198000=
+ GO TO START; 46500000=14199000=
+SWITCHDEC: 46505000=14201000=
+ BEGIN 46510000=14201000=
+ LABEL 46515000=14202000=
+ START; 46520000=14202000=
+ INTEGER 46525000=14203000=
+ GT1, 46530000=14203000=
+ GT2, 46535000=14203000=
+ GT4, 46540000=14203000=
+ GT5; 46545000=14203000=
+ BOOLEAN 46550000=14204000=
+ TB1; 46555000=14204000=
+ STOPENTRY:= NOT SPECTOG; 46560000=14205000=
+ STOPGSP:= TRUE; 46565000=14205000=
+ SCATTERELBAT; 46570000=14206000=
+ GT1:= 0; 46575000=14206000=
+ TB1:= FALSE; 46580000=14206000=
+ ENTRY(SWITCHID); 46585000=14207000=
+ GT2:= NEXTINFO; 46590000=14217000=
+ PUTNBUMP(0); 46595000=14217000=
+ DO BEGIN 46600000=14219000=
+ IF STEPI ^= LABELID OR ELBAT[I].LVL ^= LEVEL THEN 46605000=14220000=
+ FLAG(63); 46610000=14220000=
+ PUTNBUMP(ELBAT[I]); 46615000=14221000=
+ GT1:= GT1+1; 46620000=14221000=
+ END; 46625000=14222000=
+ ; COMMENT 46630000=14222500=
+ UNTIL STEPI!COMMA; 46635000=14223000=
+PUT(GT1, GT2); 46640000=14224000=
+ STOPENTRY:= STOPGSP:= FALSE; 46645000=14251000=
+ END SWITCHDEC; 46650000=14252000=
+ GO TO START; 46655000=14253000=
+DEFINEDEC: 46660000=14254050=
+ BEGIN 46665000=14254050=
+ LABEL 46670000=14254050=
+ START; 46675000=14254050=
+ REAL 46680000=14254100=
+ J, 46685000=14254100=
+ K; 46690000=14254100=
+ BOOLEAN 46695000=14254200=
+ STREAM PROCEDURE PARM(S, D, K, J); 46700000=14254200=
+ VALUE 46705000=14254200=
+ K, 46710000=14254200=
+ J; 46715000=14254200=
+ BEGIN 46720000=14254300=
+ SI:= S; 46725000=14254300=
+ SI:= SI+2; 46730000=14254300=
+ DI:= D; 46735000=14254300=
+ DI:= DI+2; 46740000=14254300=
+ IF K SC ^= DC THEN 46745000=14254400=
+ TALLY:= 1 DI:= LOC J; 46750000=14254500=
+ DI:= DI+7; 46755000=14254500=
+ IF SC ^= DC THEN 46760000=14254600=
+ TALLY:= 1; 46765000=14254600=
+ PARM:= TALLY; 46770000=14254700=
+ END; 46775000=14254800=
+ STOPENTRY:= STOPGSP:= TRUE; 46780000=14255000=
+ I:= I-1; 46785000=14255000=
+ DO BEGIN 46790000=14257000=
+ STOPDEFINE:= TRUE; 46795000=14258000=
+ STEPIT; 46800000=14259000=
+ MOVE(9, ACCUM[1], GTA1); 46805000=14259000=
+ K:= COUNT+1; 46810000=14259010=
+ J:= GTA1[0]; 46815000=14259010=
+ ENTRY(DEFINEDID); 46820000=14259010=
+ GTA1[0]:= J+6"100000"; 46825000=14259015=
+ J:= 0; 46830000=14259015=
+ IF ELCLASS = LEFTPAREN OR ELCLASS = LFTBRKET THEN 46835000=14259020=
+ BEGIN 46840000=14259030=
+ DO BEGIN 46845000=14259060=
+ STOPDEFINE:= TRUE; 46850000=14259060=
+ STEPIT; 46855000=14259070=
+ IF(J:= J+1) > 9 OR PARM(ACCUM[1], GTA1, K, J) OR K 46860000=14259090=
+ > 62 46865000=14259090=
+ THEN 46870000=14259090=
+ BEGIN 46875000=14259090=
+ ERR(141); 46880000=14259090=
+ GO TO START 46885000=14259090=
+ END; 46890000=14259090=
+ STOPDEFINE:= TRUE; 46895000=14259100=
+ END 46900000=14259110=
+ UNTIL STEPI ^= COMMA; 46905000=14259110=
+ IF ELCLASS ^= RTPAREN AND ELCLASS ^= RTBRKET THEN 46910000=14259120=
+ ERR(141); 46915000=14259120=
+ STOPDEFINE:= TRUE; 46920000=14259130=
+ STEPIT; 46925000=14259140=
+ PUT(TAKE(LASTINFO) & J[16:37:11], LASTINFO); 46930000=14259150=
+ END; 46935000=14259160=
+ IF ELCLASS ^= RELOP THEN 46940000=14261000=
+ BEGIN 46945000=14262000=
+ FLAG(30); 46950000=14263000=
+ I:= I-1; 46955000=14264000=
+ END; 46960000=14265000=
+ MACROID:= TRUE; 46965000=14265900=
+ DEFINEGEN(FALSE, J); 46970000=14266000=
+ MACROID:= FALSE; 46975000=14266100=
+ END 46980000=14268000=
+ UNTIL STEPI ^= COMMA; 46985000=14268000=
+ START: 46990000=14269000=
+ STOPENTRY:= STOPGSP:= FALSE; 46995000=14269000=
+ END; 47000000=14269000=
+ GO TO START; 47005000=14269000=
+PROCEDUREDEC: 47010000=14271000=
+ BEGIN 47015000=14271000=
+ LABEL 47020000=14272000=
+ START, 47025000=14272000=
+ START1; 47030000=14272000=
+ LABEL 47035000=14273000=
+ START2; 47040000=14273000=
+ BOOLEAN 47045000=14274000=
+ FWDTOG; 47050000=14274000=
+ COMMENT THIS TOGGLE IS THE FORWARD DEC INDICATOR; 47055000=14274000=
+ IF NOT SPECTOG THEN 47060000=14275000=
+ FUNCTOG:= FALSE; 47065000=14275000=
+ FWDTOG:= FALSE; 47070000=14276000=
+ MAXSTACKO:= MAXSTACK; 47075000=14277000=
+ IF G:= GTA1[J:= J-1] = STREAMV THEN 47080000=14279000=
+ BEGIN 47085000=14280000=
+ STREAMTOG:= TRUE; 47090000=14280000=
+ IF G:= GTA1[J:= J-1] = 0 THEN 47095000=14281000=
+ TYPEV:= STRPROCID 47100000=14282000=
+ ELSE 47105000=14282000=
+ BEGIN 47110000=14283000=
+ IF TYPEV:= PROCID+G > INTSTRPROCID OR TYPEV < BOOSTRPROCID 47115000=14286000=
+ THEN 47120000=14286000=
+ FLAG(004); 47125000=14286000=
+ IF NOT SPECTOG THEN 47130000=14287000=
+ FUNCTOG:= TRUE; 47135000=14288000=
+ CHKSOB 47140000=14290000=
+ END 47145000=14291000=
+ END 47150000=14292000=
+ ELSE 47155000=14292000=
+ IF G = SAVEV OR G = 0 THEN 47160000=14292000=
+ TYPEV:= PROCID 47165000=14293000=
+ ELSE 47170000=14293000=
+ IF TYPEV:= REALSTRPROCID+G < BOOPROCID OR TYPEV > INTPROCID 47175000=14295000=
+ THEN 47180000=14295000=
+ FLAG(005) 47185000=14296000=
+ ELSE 47190000=14296000=
+ BEGIN 47195000=14296000=
+ FUNCTOG:= TRUE; 47200000=14296000=
+ G:= GTA1[J:= J-1]; 47205000=14296000=
+ END; 47210000=14297000=
+ IF NOT STREAMTOG THEN 47215000=14298000=
+ SEGMENTSTART(G = SAVEV); 47220000=14298000=
+ SAF:= G = SAVEV; 47225000=14299000=
+ MODE:= MODE+1; 47230000=14303000=
+ LO:= PROINFO; 47235000=14304000=
+ SCATTERELBAT; 47240000=14305000=
+ 47245000=14306000=
+COMMENT CHECK TO SEE IF DECLARED FORWARD PREVIOUSLY ;47250000=14306000=
+ IF LEVELF = LEVEL THEN 47255000=14308000=
+ BEGIN 47260000=14309000=
+ IF G:= TAKE(LINKF+1) >= 0 THEN 47265000=14311000=
+ FLAG(006); 47270000=14311000=
+ FWDTOG:= TRUE; 47275000=14312000=
+ PROAD:= ADDRSF; 47280000=14313000=
+ PROINFO:= ELBAT[I]; 47285000=14314000=
+ MARK:= LINKF+INCRF; 47290000=14314000=
+ STEPIT; 47295000=14315000=
+ PUT(-G, LINKF+1); 47300000=14315000=
+ END 47305000=14318000=
+ ELSE 47310000=14318000=
+ BEGIN 47315000=14318000=
+ STOPENTRY:= TRUE; 47320000=14318000=
+ P2:= TRUE; 47325000=14318000=
+ STOPGSP:= LEVEL > 1 AND STREAMTOG; 47330000=14318500=
+ ENTRY(TYPEV); 47335000=14319000=
+ MARK:= NEXTINFO; 47340000=14319000=
+ PUTNBUMP(0); 47345000=14319000=
+ STOPGSP:= FALSE; 47350000=14319500=
+ PROINFO:= TAKE(LASTINFO) & LASTINFO[35:35:13]; 47355000=14320000=
+ PROAD:= ADDRSF; 47360000=14320000=
+ P2:= STOPENTRY:= FALSE 47365000=14322000=
+ END; 47370000=14322000=
+ PJ:= 0; 47375000=14323000=
+ LEVEL:= LEVEL+1; 47380000=14323000=
+ IF STREAMTOG THEN 47385000=14324000=
+ STREAMWORDS; 47390000=14324000=
+ IF ELCLASS = SEMICOLON THEN 47395000=14325000=
+ GO TO START1; 47400000=14325000=
+ IF ELCLASS ^= LEFTPAREN THEN 47405000=14326000=
+ FLAG(007); 47410000=14326000=
+ 47415000=14327000=
+COMMENT: THE FOLLOWING 8 STATEMENTS FOOL THE SCANNER AND BLOCK,PUTTING 47420000=14327000=
+ FORMAL PARAMETER ENTRIES IN THE ZERO ROW OF INFO; 47425000=14328000=
+ RR1:= NEXTINFO; 47430000=14329000=
+ LASTINFOT:= LASTINFO; 47435000=14330000=
+ LASTINFO:= NEXTINFO:= 1; 47440000=14330000=
+ PUTNBUMP(0); 47445000=14331000=
+ PTOG:= TRUE; 47450000=14332000=
+ I:= I+1; 47455000=14332000=
+ ENTRY(SECRET); 47460000=14333000=
+ IF FWDTOG THEN 47465000=14333100=
+ BEGIN 47470000=14333200=
+ IF GT1:= TAKE(MARK).[40:8] ^= PJ THEN 47475000=14333300=
+ FLAG(48); % WRONG 47480000=14333300=
+ % NUMBER OF PARAMETERS. WE DON"T WANT TO CLOBBER INFO. 47485000=14333400=
+ END 47490000=14334000=
+ ELSE 47495000=14334000=
+ PUT(PJ, MARK); 47500000=14334000=
+ P:= PJ; 47505000=14335000=
+ IF ELCLASS ^= RTPAREN THEN 47510000=14337000=
+ FLAG(008); 47515000=14337000=
+ IF STEPI ^= SEMICOLON THEN 47520000=14339000=
+ FLAG(009); 47525000=14339000=
+ 47530000=14340000=
+COMMENT MARK PARAMETERS VALUE IF THERE IS A VALUE PART; 47535000=14340000=
+ IF STEPI = VALUEV THEN 47540000=14342000=
+ BEGIN 47545000=14343000=
+ DO 47550000=14345000=
+ IF STEPI ^= SECRET THEN 47555000=14346000=
+ FLAG(010) 47560000=14347000=
+ ELSE 47565000=14347000=
+ BEGIN 47570000=14348000=
+ IF G:= ELBAT[I].ADDRESS = 0 OR G > PJ THEN 47575000=14350000=
+ FLAG(010); 47580000=14351000=
+ G:= TAKE(ELBAT[I]); 47585000=14352000=
+ PUT(G & 1[10:47:1], ELBAT[I]) 47590000=14354000=
+ END 47595000=14356000=
+ UNTIL STEPI ^= COMMA; 47600000=14356000=
+ IF ELCLASS ^= SEMICOLON THEN 47605000=14358000=
+ FLAG(011) 47610000=14359000=
+ ELSE 47615000=14359000=
+ STEPIT 47620000=14360000=
+ END; 47625000=14360000=
+ I:= I-1; 47630000=14360000=
+ IF STREAMTOG THEN 47635000=14362000=
+ BEGIN 47640000=14363000=
+ BUP:= PJ; 47645000=14364000=
+ SPECTOG:= TRUE; 47650000=14364000=
+ GO TO START1 47655000=14365000=
+ END 47660000=14367000=
+ ELSE 47665000=14367000=
+ BEGIN 47670000=14367000=
+ SPECTOG:= TRUE; 47675000=14368000=
+ BUP:= 0; 47680000=14369000=
+ IF ELCLASS ^= DECLARATORS THEN 47685000=14371000=
+ FLAG(012) 47690000=14372000=
+ END; 47695000=14372000=
+ START: 47700000=14373000=
+ PTOG:= FALSE; 47705000=14373000=
+ LASTINFO:= LASTINFOT; 47710000=14373000=
+ NEXTINFO:= 47715000=14373000=
+ IF FWDTOG THEN 47720000=14373000=
+ RR1 47725000=14373000=
+ ELSE 47730000=14373000=
+ MARK+PJ+1; 47735000=14374000=
+ START1: 47740000=14375000=
+ PINFOO:= NEXTINFO; 47745000=14375000=
+ START2: 47750000=14376000=
+ END; 47755000=14376000=
+ IF SPECTOG OR STREAMTOG THEN 47760000=14378000=
+ GO TO START; 47765000=14379000=
+ 47770000=14380000=
+COMMENT IF SPECTOG IS ON THEN THE BLOCK WILL PROCESS THE SPECIFICATION 47775000=14380000=
+ PART SIMILARY TO DECLARATIONS WITH A FEW NECESSARY VARIATIONS; 47780000=14381000=
+HF: BEGIN 47785000=14383000=
+ LABEL 47790000=14384000=
+ START, 47795000=14384000=
+ STOP; 47800000=14384000=
+ DEFINE 47805000=14384100=
+ TESTLEV = LEVEL > 2 #; 47810000=14384100=
+ IF STREAMTOG THEN 47815000=14386000=
+ BEGIN 47820000=14386000=
+ IF TESTLEV THEN 47825000=14387000=
+ JUMPCHKNX 47830000=14387000=
+ ELSE 47835000=14387000=
+ SEGMENTSTART(TRUE); 47840000=14387000=
+ PJ:= P; 47845000=14387000=
+ PTOG:= FALSE; 47850000=14388000=
+ PUT(TAKE(GIT(PROINFO)) & L[28:36:12], GIT(PROINFO)); 47855000=14388100=
+ IF TESTLEV THEN 47860000=14389000=
+ BEGIN 47865000=14389000=
+ EMITO(584); 47870000=14389000=
+ END; 47875000=14389000=
+ IF STEPI = BEGINV THEN 47880000=14394000=
+ BEGIN 47885000=14395000=
+ WHILE STEPI = DECLARATORS OR ELCLASS = LOCALV DO 47890000=14397000=
+ BEGIN 47895000=14398000=
+ IF ELBAT[I].ADDRESS = LABELV THEN 47900000=14400000=
+ BEGIN 47905000=14401000=
+ STOPDEFINE:= STOPGSP:= STOPENTRY:= TRUE; 47910000=14402000=
+ DO BEGIN 47915000=14403000=
+ STOPDEFINE:= TRUE; 47920000=14403000=
+ STEPIT; 47925000=14403000=
+ ENTRY(STLABID); 47930000=14403000=
+ PUTNBUMP(0) 47935000=14403000=
+ END 47940000=14404000=
+ UNTIL ELCLASS ^= COMMA; 47945000=14404000=
+ STOPGSP:= STOPENTRY:= FALSE 47950000=14405000=
+ END 47955000=14407000=
+ ELSE 47960000=14407000=
+ BEGIN 47965000=14407000=
+ I:= I+1; 47970000=14408000=
+ ENTRY(LOCLID) 47975000=14410000=
+ END 47980000=14411000=
+ END; 47985000=14411000=
+ IF FUNCTOG THEN 47990000=14411100=
+ PUT((Z:= TAKE(PROINFO)) & LOCLID[2:41:7] & 47995000=14411300=
+ (PJ+2+REAL(TESTLEV))[16:37:11], PROINFO); 48000000=14411300=
+ COMPOUNDTAIL 48005000=14413000=
+ END 48010000=14415000=
+ ELSE 48015000=14415000=
+ BEGIN 48020000=14415000=
+ IF FUNCTOG THEN 48025000=14415100=
+ PUT((Z:= TAKE(PROINFO)) & LOCLID[2:41:7] & 48030000=14415300=
+ (PJ+2+REAL(TESTLEV))[16:37:11], PROINFO); 48035000=14415300=
+ STREAMSTMT; 48040000=14415400=
+ END; 48045000=14415500=
+ COMMENT THE FOLLOWING BLOCK CONSTITUTES THE STREAM PROCEDURE PURGE; 48050000=14416000=
+ BEGIN 48055000=14417000=
+ REAL 48060000=14418000=
+ NLOC, 48065000=14418000=
+ NLAB; 48070000=14418000=
+ DEFINE 48075000=14419000=
+ SES = 18 #, 48080000=14419000=
+ SED = 6 #, 48085000=14419000=
+ TRW = 5 #; 48090000=14419000=
+ DEFINE 48095000=14420000=
+ LOC = [36:12] #, 48100000=14420000=
+ LASTGT = [24:12] #; 48105000=14420000=
+ J:= LASTINFO; 48110000=14421000=
+ NLOC:= NLAB:= 0; 48115000=14422000=
+ DO BEGIN 48120000=14424000=
+ IF (GT1:= TAKE(J)).CLASS = LOCLID THEN 48125000=14425000=
+ BEGIN 48130000=14426000=
+ IF BOOLEAN(GT1.FORMAL) THEN 48135000=14427000=
+ BEGIN 48140000=14428000=
+ IF GT1 < 0 THEN 48145000=14429000=
+ PUT(TAKE(GT2:= MARK+P-GT1.ADDRESS+1) & 48150000=14431000=
+ FILEID[2:41:7], GT2); 48155000=14431000=
+ END 48160000=14433000=
+ ELSE 48165000=14433000=
+ NLOC:= NLOC+1; 48170000=14433000=
+ END 48175000=14436000=
+ ELSE 48180000=14436000=
+ BEGIN 48185000=14436000=
+ IF GT1.ADDRESS ^= 0 THEN 48190000=14437000=
+ NLAB:= NLAB+1; 48195000=14437000=
+ IF (GT3:= TAKE(GIT(J))).LASTGT ^= 0 AND GT3.LOC = 0 48200000=14438000=
+ THEN 48205000=14438000=
+ BEGIN 48210000=14439000=
+ MOVE(9, INFO[0, J], ACCUM[0]); 48215000=14440000=
+ Q:= ACCUM[1]; 48220000=14441000=
+ FLAG(267); 48225000=14442000=
+ ERRORTOG:= TRUE; 48230000=14443000=
+ END; 48235000=14444000=
+ END; 48240000=14445000=
+ G:= (GT2+TAKE(J+1)).PURPT; 48245000=14446000=
+ IF GT1.[2:8] ^= STLABID*2+1 THEN 48250000=14447000=
+ STACKHEAD[(0 & GT2[12:12:36]) MOD 125]:= TAKE(J).LINK; 48255000=14448000=
+ END 48260000=14449000=
+ UNTIL J:= J-G <= 1; 48265000=14449000=
+ IF TESTLEV THEN 48270000=14451000=
+ BEGIN 48275000=14451000=
+ EMITC(1, 0); 48280000=14451000=
+ EMITO(BFW) 48285000=14451000=
+ END 48290000=14451100=
+ ELSE 48295000=14451100=
+ EMIT(0); 48300000=14451100=
+ PUT(TAKE(MARK) & NLOC[1:42:6] & L[16:36:12] & P[40:40:8], 48305000=14451200=
+ MARK); 48310000=14451200=
+ IF FUNCTOG THEN 48315000=14452000=
+ PUT(Z, PROINFO); 48320000=14457000=
+ STREAMWORDS; 48325000=14460000=
+ STREAMTOG:= FALSE; 48330000=14461000=
+ IF NOT TESTLEV THEN 48335000=14461100=
+ BEGIN 48340000=14461100=
+ PROGDESCBLDR(PROAD, TRUE, (L+3) DIV 4, CHAR); 48345000=14461100=
+ SEGMENT((L+3) DIV 4, PROINFO.ADDRESS); 48350000=14461200=
+ RIGHT(L); 48355000=14461300=
+ L:= 0; 48360000=14461300=
+ END; 48365000=14461400=
+ IF LISTER AND FORMATOG THEN 48370000=14461500=
+ SPACEITDOWN; 48375000=14461500=
+ END; 48380000=14462000=
+ LASTINFO:= LASTINFOT; 48385000=14463000=
+ NEXTINFO:= MARK+P+1; 48390000=14463000=
+ END 48395000=14466000=
+ ELSE 48400000=14466000=
+ BEGIN 48405000=14466000=
+ IF STEPI = FORWARDV THEN 48410000=14468000=
+ BEGIN 48415000=14469000=
+ PUT(-TAKE(G:= PROINFO.LINK+1), G); 48420000=14470000=
+ PURGE(PINFOO); 48425000=14471000=
+ STEPIT 48430000=14473000=
+ END 48435000=14475000=
+ ELSE 48440000=14475000=
+ BEGIN 48445000=14475000=
+ PROADO:= PROAD; 48450000=14476000=
+ TSUBLEVEL:= SUBLEVEL; 48455000=14477000=
+ SUBLEVEL:= LEVEL; 48460000=14477000=
+ STACKCTRO:= STACKCTR; 48465000=14477000=
+ IF MODE = 1 THEN 48470000=14478000=
+ FRSTLEVEL:= LEVEL; 48475000=14478000=
+ STACKCTR:= 513+REAL(FUNCTOG); 48480000=14478000=
+ IF ELCLASS = BEGINV THEN 48485000=14479000=
+ BEGIN 48490000=14481000=
+ CALLINFO:= (CALLX:= CALLX+1)+1; 48495000=14481100=
+ NEXTCTR:= STACKCTR; 48500000=14481200=
+ BLOCK(TRUE); 48505000=14482000=
+ ; 48510000=14483000=
+ PURGE(PINFOO); 48515000=14483000=
+ IF NESTOG THEN 48520000=14483100=
+ BEGIN 48525000=14483200=
+ GT1:= TAKE(PROINFO).ADDRESS; 48530000=14483200=
+ NESTPRT[GT1]:= 0 & PROINFO[35:35:13] & CALLINFO[22:35:13];48535000=14483300=
+ CALL[CALLINFO-1]:= (TAKE(GIT(PROINFO))+NESTCTR-511) & 48540000=14483500=
+ CALLX[22:35:13]; 48545000=14483500=
+ END; 48550000=14483600=
+ L:= 0; 48555000=14483700=
+ GO TO STOP 48560000=14484000=
+ END; 48565000=14484000=
+ BEGIN 48570000=14485000=
+ FLAG(052); 48575000=14486000=
+ RELAD:= L; 48580000=14487000=
+ STMT; 48585000=14488000=
+ HTTEOAP(FALSE, RELAD, PINFOO, PROAD); 48590000=14489000=
+ END; 48595000=14490000=
+ STOP: 48600000=14492000=
+ SUBLEVEL:= TSUBLEVEL; 48605000=14492000=
+ STACKCTR:= STACKCTRO; 48610000=14493000=
+ IF LISTER AND FORMATOG THEN 48615000=14493500=
+ SPACEITDOWN; 48620000=14493500=
+ END; 48625000=14494000=
+ END; 48630000=14495000=
+ PROINFO:= LO; 48635000=14496000=
+ IF JUMPCTR = LEVEL THEN 48640000=14498000=
+ JUMPCTR:= LEVEL-1; 48645000=14499000=
+ LEVEL:= LEVEL-1; 48650000=14500000=
+ MODE:= MODE-1; 48655000=14501000=
+ MAXSTACK:= MAXSTACKO; 48660000=14502000=
+ START: 48665000=14503000=
+ END; 48670000=14503000=
+ GO TO START; 48675000=14504000=
+CALLSTATEMENT: 48680000=14505000=
+ FOULED:= L; 48685000=14505000=
+ JUMPCHKX; 48690000=14506000=
+ IF SOP THEN 48695000=14506000=
+ BEGIN 48700000=14506000=
+ Z:= STACKCTR-513; 48705000=14506000=
+ WHILE Z:= Z-1 >= 0 DO 48710000=14506500=
+ EMITL(0) 48715000=14506500=
+ END; 48720000=14506500=
+ IF SPECTOG THEN 48725000=14507000=
+ BEGIN 48730000=14507000=
+ FLAG(12); 48735000=14508000=
+ GO TO HF 48740000=14509000=
+ END; 48745000=14509000=
+ BEGINCTR:= BEGINCTR-1; 48750000=14510000=
+ IF ERRORTOG THEN 48755000=14512000=
+ COMPOUNDTAIL 48760000=14513000=
+ ELSE 48765000=14513000=
+ BEGIN 48770000=14514000=
+ STMT; 48775000=14515000=
+ IF ELCLASS:= TABLE(I+1) = DECLARATORS THEN 48780000=14517000=
+ BEGIN 48785000=14518000=
+ ELBAT[I].CLASS:= SEMICOLON; 48790000=14519000=
+ BEGINCTR:= BEGINCTR+1; 48795000=14520000=
+ GO TO START 48800000=14522000=
+ END 48805000=14524000=
+ ELSE 48810000=14524000=
+ COMPOUNDTAIL 48815000=14525000=
+ END; 48820000=14525000=
+ FUNCTOG:= FUNCTOGO; 48825000=14599000=
+ IF SOP THEN 48830000=14600000=
+ HTTEOAP(FALSE, FIRSTX, NINFOO, BLKAD) 48835000=14601000=
+ ELSE 48840000=14601000=
+ BEGIN 48845000=14601000=
+ IF NESTOG THEN 48850000=14601000=
+ SORTNEST; 48855000=14601000=
+ PURGE(NINFOO); 48860000=14601000=
+ END; 48865000=14601000=
+ SEGMENT((L+3) DIV 4, PROADD); 48870000=14602000=
+ IF LEVEL > 1 THEN 48875000=14603000=
+ RIGHT(L); 48880000=14603000=
+ IF LEVEL:= LEVEL-1 = 0 THEN 48885000=14604000=
+ CONSTANTCLEAN; 48890000=14604000=
+ AJUMP:= AJUMPO; 48895000=14606000=
+ FIRSTX:= FIRSTXO; 48900000=14608000=
+ SAVEL:= SAVELO; 48905000=14609000=
+ STACKCTR:= STACKCTRO; 48910000=14610000=
+ END BLOCK; 48915000=14613000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%48920000=14613000=
+ 48925000=15000000=
+ COMMENT THIS SECTION CONTAINS THE VARIABLE ROUTINE AND ITS SIDEKICKS; 48930000=15000000=
+ COMMENT THE FOLLOWING BLOCK HANDLES THE FOLLOWING CASES 48935000=15039000=
+ OF SIMPLE VARIABLES: 48940000=15040000=
+ 1. V ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 48945000=15041000=
+ 2. V ~ EXP ,ALL V EXCEPT FORMAL-NAME. 48950000=15042000=
+ 3. V.[S:L] ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 48955000=15043000=
+ 4. V.[S:L] ~ EXP ,ALL V EXCEPT FORMAL-NAME. 48960000=15044000=
+ 5. V.[S:L] ,ALL V. 48965000=15045000=
+ 6. V ,ALL V. 48970000=15046000=
+ CODE EMITED FOR THE ABOVE CASES IS AS FOLLOWS: 48975000=15047000=
+ 1. VN,EXP,M*,XCH,~. 48980000=15048000=
+ 2. EXP,M*,VL,~. 48985000=15049000=
+ 3. VN,DUP,COC,EXP,T,M*,XCH,~. 48990000=15050000=
+ 4. VV,EXP,T,M*,VL,~. 48995000=15051000=
+ 5. ZEROL,VV,T . 49000000=15052000=
+ 6. VV . 49005000=15053000=
+ WHERE VN = DESC V 49010000=15054000=
+ EXP= ARITH, OR BOOLEAN EXPRESSION,AS REQUIRED. 49015000=15055000=
+ M* = CALL ON MONITOR ROUTINE,IF REQUIRED. 49020000=15056000=
+ VL = LITC V 49025000=15057000=
+ VV = OPDC V 49030000=15058000=
+ ~ = STORE INSTRUCTION(ISD,ISN,SND OR STD). 49035000=15059000=
+ T = BIT TRANSFER CODE(DIA,DIB,TRB). 49040000=15060000=
+ ZEROL = LITC 0 49045000=15061000=
+ DUP,COC,XCH = THE INSTRUCTIONS DUP,COC,AND XCH. 49050000=15062000=
+ OF COURSE, EXP WILL CAUSE RECURSION,IN GENERAL,AND THUS 49055000=15063000=
+ THE PARAMETER P1 AND THE LOCALS CAN NOT BE HANDLED IN A 49060000=15064000=
+ GLOBAL FASHION. 49065000=15065000=
+ THE PARAMETER P1 IS USED TO TELL THE VARIABLE ROUTINE 49070000=15066000=
+ WHO CALLED IT. SOME OF THE CODE GENERATION AND SOME 49075000=15067000=
+ SYNTAX CHECKS DEPEND UPON A PARTICULAR VALUE OF P1 . 49080000=15068000=
+ ; 49085000=15069000=
+ PROCEDURE VARIABLE(P1); 49090000=15070000=
+ INTEGER 49095000=15070000=
+ P1; 49100000=15070000=
+ BEGIN 49105000=15071000=
+ REAL 49110000=15072000=
+ TALL, COMMENT ELBAT WORD FOR VARIABLE; 49115000=15072000=
+ T1, COMMENT 1ST INTEGER OF PARTIAL WORD SYNTAX; 49120000=15073000=
+ T2, COMMENT 2ND INTEGER OF PARTIAL WORD SYNTAX; 49125000=15074000=
+ J; 49130000=15075000=
+ COMMENT SUBSCRIPT COUNTER ; 49135000=15075000=
+ LABEL 49140000=15076000=
+ EXIT, 49145000=15076000=
+ L1, 49150000=15076000=
+ LAST, 49155000=15076000=
+ NEXT, 49160000=15076000=
+ JAZZ, 49165000=15076000=
+ ITUP, 49170000=15076000=
+ LASS; 49175000=15076000=
+ DEFINE 49180000=15076100=
+ FORMALNAME = [9:2] = 2 #, 49185000=15076100=
+ LONGID = NAMEID #; 49190000=15076100=
+ BOOLEAN 49195000=15076200=
+ SPCLMON; 49200000=15076200=
+ TALL:= ELBAT[I]; 49205000=15077000=
+ IF ELCLASS <= INTPROCID THEN 49210000=15078000=
+ BEGIN 49215000=15079000=
+ IF TALL.LINK ^= PROINFO.LINK THEN 49220000=15080000=
+ BEGIN 49225000=15081000=
+ ERR(211); 49230000=15081000=
+ GO TO EXIT 49235000=15081000=
+ END; 49240000=15081000=
+ 49245000=15082000=
+COMMENT 211 VARIABLE-FUNCTION IDENTIFIER USED OUTSIDE OF ITS SCOPE*; 49250000=15082000=
+ TALL:= TALL & (ELCLASS+4)[2:41:7] & 513[16:37:11]; 49255000=15083000=
+ END 49260000=15085000=
+ ELSE 49265000=15085000=
+ CHECKER(TALL); 49270000=15085000=
+ IF TALL.CLASS <= INTID THEN 49275000=15086000=
+ BEGIN 49280000=15087000=
+ IF STEPI = ASSIGNOP THEN 49285000=15090000=
+ BEGIN 49290000=15091000=
+ STACKCT:= 1; 49295000=15091000=
+ L1: IF TALL.FORMALNAME THEN 49300000=15092000=
+ BEGIN 49305000=15093000=
+ EMITN(TALL.ADDRESS); 49310000=15094000=
+ IF T1 ^= 0 THEN 49315000=15095000=
+ BEGIN 49320000=15095000=
+ EMITO(DUP); 49325000=15095000=
+ EMITO(COC) 49330000=15095000=
+ END; 49335000=15095000=
+ END 49340000=15097000=
+ ELSE 49345000=15097000=
+ IF T1 ^= 0 THEN 49350000=15097000=
+ EMITV(TALL.ADDRESS); 49355000=15098000=
+ STACKCT:= REAL(T1 ^= 0); 49360000=15098000=
+ STEPIT; 49365000=15098000=
+ AEXP; 49370000=15099000=
+ EMITD(48-T2, T1, T2); 49375000=15100000=
+ STACKCT:= 0; 49380000=15101500=
+ GT1:= 49385000=15102000=
+ IF TALL.CLASS = INTID THEN 49390000=15102000=
+ IF P1 = FS THEN 49395000=15103000=
+ ISD 49400000=15103000=
+ ELSE 49405000=15103000=
+ ISN 49410000=15103000=
+ ELSE 49415000=15103000=
+ IF P1 = FS THEN 49420000=15104000=
+ STD 49425000=15104000=
+ ELSE 49430000=15104000=
+ SND; 49435000=15104000=
+ IF TALL.FORMALNAME THEN 49440000=15105000=
+ BEGIN 49445000=15106000=
+ EMITO(XCH); 49450000=15106100=
+ IF TALL.ADDRESS > 1023 THEN 49455000=15106100=
+ EMITO(PRTE); 49460000=15106100=
+ EMITO(GT1); 49465000=15106200=
+ END 49470000=15107000=
+ ELSE 49475000=15107000=
+ EMITPAIR(TALL.ADDRESS, GT1); 49480000=15107000=
+ END 49485000=15110000=
+ ELSE 49490000=15110000=
+ BEGIN 49495000=15110000=
+ IF P1 = FL THEN 49500000=15110100=
+ BEGIN 49505000=15110100=
+ IF ELCLASS < AMPERSAND THEN 49510000=15110200=
+ EMITN(TALL.ADDRESS) 49515000=15110300=
+ ELSE 49520000=15110300=
+ EMITV(TALL.ADDRESS); 49525000=15110300=
+ GO TO EXIT 49530000=15110400=
+ END; 49535000=15110400=
+ IF ELCLASS = PERIOD THEN 49540000=15111000=
+ BEGIN 49545000=15112000=
+ IF DOTSYNTAX(T1, T2) THEN 49550000=15112000=
+ GO TO EXIT; 49555000=15112000=
+ IF STEPI = ASSIGNOP THEN 49560000=15113000=
+ IF P1 ^= FS THEN 49565000=15114000=
+ BEGIN 49570000=15115000=
+ ERR(201); 49575000=15115000=
+ GO TO EXIT 49580000=15115000=
+ END 49585000=15116000=
+ ELSE 49590000=15116000=
+ GO TO L1 49595000=15118000=
+ END; 49600000=15118000=
+ IF P1 ^= FP THEN 49605000=15119000=
+ BEGIN 49610000=15119000=
+ ERR(202); 49615000=15119000=
+ GO TO EXIT 49620000=15119000=
+ END; 49625000=15119000=
+ 49630000=15120000=
+COMMENT 202 VARIABLE- A VARIABLE APPEARS WHICH IS NOT FOLLOWED * 49635000=15120000=
+ BY A LEFT ARROW OR PERIOD *;49640000=15121000=
+ 49645000=15122000=
+COMMENT 201 VARIABLE- A PARTIAL WORD DESIGNATOR IS NOT THE * 49650000=15122000=
+ LEFT-MOST OF A LEFT PART LIST *;49655000=15123000=
+ EMITI(TALL, T1, T2); 49660000=15124000=
+ END; 49665000=15126000=
+ END OF SIMPLE VARIABLES 49670000=15128100=
+ ELSE 49675000=15128100=
+ IF TALL.CLASS ^= LABELID THEN 49680000=15128100=
+ COMMENT THE FOLLOWING BLOCK HANDLES THESE CASES OF SUBSCRIPTED 49685000=15129000=
+ VARIABLES: 49690000=15130000=
+ 1. V[*] ,ROW DESIGNATOR FOR SINGLE-DIMENSION. 49695000=15131000=
+ 2. V[R,*] ,ROW DESIGNATOR FOR MULTI-DIMENSION. 49700000=15132000=
+ 3. V[R] ,ARRAY ELEMENT,NAME OR VALUE. 49705000=15133000=
+ 4. V[R].[S:L] ,PARTIAL WORD DESIGNATOR, VALUE. 49710000=15134000=
+ 5. V[R] ~ ,ASSIGNMENT TO ARRAY ELEMENT. 49715000=15135000=
+ 6. V[R].[S:L] ~ ,ASSIGNMENT TO PARTIAL WORD,LEFT-MOST. 49720000=15136000=
+ R IS A K-ORDER SUBSCRIPT LIST,I.E. R= R1,R2,...,RK. 49725000=15137000=
+ IN THE CASE OF NO MONITORING ON V, THE FOLLOWING CODE 49730000=15138000=
+ IS EMITTED FOR THE ABOVE CASES: 49735000=15139000=
+ 1. CASE #1 IS A SPECIAL CASE OF #2,NAMELY,SINGLE 49740000=15140000=
+ DIMENSION. THE CODE EMITTED IS: 49745000=15141000=
+ VL,LOD . 49750000=15142000=
+ EXECUTION: PLACES ARRAY DESCRIPTER IN REG A. 49755000=15143000=
+ 2. THIS CODE IS BASIC TO THE SUBSCRIPTION PROCESS.49760000=15144000=
+ EACH SUBSCRIPT GENERATES THE FOLLOWING SEQUENCE49765000=15145000=
+ OF CODE: 49770000=15146000=
+ AEXP,L*,IF FIRST SUBSCRIPT THEN VN ELSE CDC 49775000=15147000=
+ ,LOD. 49780000=15148000=
+ FOR A K-ORDER SUBSCRIPTION,K-1 SEQUENCE ARE 49785000=15149000=
+ PRODUCED. THE AEXP IN EACH SEQUENCE REFERS TO 49790000=15150000=
+ THE CODE PRODUCED BY THE ARITHMETIC EXPRESSION 49795000=15151000=
+ PROCEDURE FOR THE ACTUAL SUBSCRIPT EXPRESSIONS,49800000=15152000=
+ [* REFERS TO THE CODE PRODUCED FOR SUBTRACTING 49805000=15153000=
+ NON-ZERO LOWER BOUNDS FROM THE SUBSCRIPT 49810000=15154000=
+ EXPRESSION(L* YIELDS NO CODE FOR ZERO BOUNDS). 49815000=15155000=
+ EXECUTION: PLACES ARRAY ROW DESCRIPTOR IN REG A49820000=15156000=
+ . THE SPECIFIC ROW DEPENDS UPON THE 49825000=15157000=
+ VALUES OF THE K-1 SUBSCRIPTS. 49830000=15158000=
+ FOR THE REMAINING CASES, 49835000=15159000=
+ SEQUENCES OF CODE ARE EMITED AS IN CASE #2. 49840000=15160000=
+ HOWEVER,THE ACTUAL SEQUENCES ARE: 49845000=15161000=
+ ONE SEQUENCE ,(AEXP,L*),FOR THE 1ST SUBSCRIPT.49850000=15162000=
+ K-1 SEQUENCES,(IF FIRST SUBSCRIPT THEN VN 49855000=15163000=
+ ELSE CDC,LOD,AEXP,L*), FOR THE REMAINING 49860000=15164000=
+ SUBSCRIPTS,IF K>1. 49865000=15165000=
+ AT THIS POINT, CASES #3-6 ARE DIFFERENTIATED 49870000=15166000=
+ AND ADDITION CODE,PARTICULAR TO EACH CASE,IS 49875000=15167000=
+ EMITTED. 49880000=15168000=
+ 3. ADD THE SEQUENCE: 49885000=15169000=
+ IF FIRST SUBSCRIPT THEN VV ELSE COC. 49890000=15170000=
+ EXECUTION: THE ARRAY ELEMENT IS PUT IN REG A. 49895000=15171000=
+ 4. ADD THE SEQUENCE: 49900000=15172000=
+ IF FIRST SUBSCRIPT THEN VV ELSE COC,ZEROL. 49905000=15173000=
+ XCH,T. 49910000=15174000=
+ 5. ADD THE SEQUENCE: 49915000=15175000=
+ IF FIRST SUBSCRIPT THEN VN ELSE CDC,EXP, 49920000=15176000=
+ XCH,~. 49925000=15177000=
+ 6. ADD THE SEQUENCE: 49930000=15178000=
+ IF FIRST SUBSCRIPT THEN VN ELSE CDC,DUP,LOD, 49935000=15179000=
+ EXP,T, XCH,~. 49940000=15180000=
+ EXP,T,~,ZEROL,ETC. HAVE SAME MEANINGS AS DEFINED IN 49945000=15181000=
+ SIMPLE VARIABLE BLOCK. ; 49950000=15182000=
+ BEGIN 49955000=15183000=
+ IF STEPI ^= LFTBRKET THEN 49960000=15233000=
+ BEGIN 49965000=15233002=
+ IF ELCLASS = PERIOD THEN 49970000=15233003=
+ BEGIN 49975000=15233004=
+ IF DOTSYNTAX(T1, T2) THEN 49980000=15233005=
+ GO TO EXIT; 49985000=15233005=
+ IF STEPI = ASSIGNOP THEN 49990000=15233006=
+ BEGIN 49995000=15233007=
+ IF P1 ^= FS THEN 50000000=15233008=
+ BEGIN 50005000=15233008=
+ ERR(209); 50010000=15233008=
+ GO EXIT 50015000=15233008=
+ END; 50020000=15233008=
+ IF TALL.CLASS <= INTARRAYID THEN 50025000=15233009=
+ BEGIN 50030000=15233010=
+ EMITPAIR(TALL.ADDRESS, LOD) 50035000=15233010=
+ END 50040000=15233011=
+ ELSE 50045000=15233011=
+ EMITN(TALL.ADDRESS); 50050000=15233011=
+ STACKCT:= STACKCT+1; 50055000=15233011=
+ JAZZ: 50060000=15233012=
+ STEPIT; 50065000=15233012=
+ AEXP; 50070000=15233012=
+ EMITD(48-T2, T1, T2); 50075000=15233013=
+ EMITPAIR(TALL.ADDRESS, IF P1 = FS THEN STD ELSE SND); 50080000=15233015=
+ STACKCT:= 0; 50085000=15233016=
+ END 50090000=15233017=
+ ELSE 50095000=15233017=
+ BEGIN 50100000=15233017=
+ ITUP: 50105000=15233018=
+ EMITI(TALL, T1, T2); 50110000=15233018=
+ END; 50115000=15233023=
+ GO TO EXIT; 50120000=15233024=
+ END; 50125000=15233025=
+ IF ELCLASS = ASSIGNOP THEN 50130000=15233026=
+ GO TO JAZZ 50135000=15233026=
+ ELSE 50140000=15233026=
+ GO TO ITUP; 50145000=15233026=
+ END; 50150000=15233027=
+ J:= 0; 50155000=15234000=
+ STACKCT:= 0; 50160000=15234500=
+ 50165000=15235000=
+COMMENT 207 VARIABLE-MISSING LEFT BRACKET ON SUBSCRIPTED VARIABLE *; 50170000=15235000=
+ NEXT: 50175000=15253000=
+ IF STEPI = FACTOP THEN 50180000=15253000=
+ BEGIN 50185000=15254000=
+ IF J+1 ^= TALL.INCR THEN 50190000=15255000=
+ BEGIN 50195000=15256000=
+ ERR(203); 50200000=15256000=
+ GO EXIT 50205000=15256000=
+ END; 50210000=15256000=
+ 50215000=15257000=
+COMMENT 203 VARIABLE- THE NUMBER OF SUBSCRIPTS USED IN A ROW * 50220000=15257000=
+ ROW DESIGNATER DOES NOT MATCH THE ARRAY * 50225000=15258000=
+ DECLARATION. *;50230000=15259000=
+ IF STEPI ^= RTBRKET THEN 50235000=15260000=
+ BEGIN 50240000=15261000=
+ ERR(204); 50245000=15261000=
+ GO EXIT 50250000=15261000=
+ END; 50255000=15261000=
+ 50260000=15262000=
+COMMENT 204 VARIABLE- COMPILER EXPECTS A ] IN A ROW DESIGNATER *;50265000=15262000=
+ 50270000=15264000=
+COMMENT 205 VARIABLE- A ROW DESIGNATER APPEARS OUTSIDE OF A FILL * 50275000=15264000=
+ STATEMENT OR ACTUAL PARAMETER LIST. *;50280000=15265000=
+ IF J = 0 THEN 50285000=15266000=
+ EMITPAIR(TALL.ADDRESS, LOD); 50290000=15267000=
+ STLB:= 0; 50295000=15273000=
+ STEPIT; 50300000=15274000=
+ GO TO EXIT; 50305000=15275000=
+ END OF ROW DESIGNATOR PORTION; 50310000=15276000=
+ IF ELCLASS = LITNO AND ELBAT[I].ADDRESS = 0 AND TABLE(I+1) = 50315000=15276010=
+ RTBRKET AND TALL.CLASS >= NAMEID 50320000=15276020=
+ THEN 50325000=15276020=
+ BEGIN 50330000=15276030=
+ I:= I+1; 50335000=15276040=
+ IF STEPI = ASSIGNOP THEN 50340000=15276050=
+ BEGIN 50345000=15276050=
+ LASS: 50350000=15276060=
+ IF T1 ^= 0 THEN 50355000=15276060=
+ EMITV(TALL.ADDRESS); 50360000=15276060=
+ STEPIT; 50365000=15276070=
+ AEXP; 50370000=15276070=
+ EMITD(48-T2, T1, T2); 50375000=15276070=
+ EMITN(TALL.ADDRESS); 50380000=15276080=
+ EMITO(IF TALL.CLASS ^= NAMEID THEN IF P1 = FS THEN ISD ELSE 50385000=15276110=
+ ISN ELSE IF P1 = FS THEN STD ELSE SND); 50390000=15276110=
+ STACKCT:= 0; 50395000=15276115=
+ GO TO EXIT 50400000=15276120=
+ END 50405000=15276140=
+ ELSE 50410000=15276140=
+ IF ELCLASS = PERIOD THEN 50415000=15276140=
+ BEGIN 50420000=15276140=
+ IF DOTSYNTAX(T1, T2) THEN 50425000=15276150=
+ GO TO EXIT; 50430000=15276150=
+ IF STEPI = ASSIGNOP THEN 50435000=15276160=
+ IF P1 = FS THEN 50440000=15276160=
+ GO TO LASS 50445000=15276170=
+ ELSE 50450000=15276170=
+ BEGIN 50455000=15276170=
+ ERR(209); 50460000=15276170=
+ GO EXIT 50465000=15276170=
+ END; 50470000=15276170=
+ END; 50475000=15276180=
+ IF P1 = FS THEN 50480000=15276190=
+ BEGIN 50485000=15276190=
+ ERR(210); 50490000=15276190=
+ GO EXIT 50495000=15276190=
+ END; 50500000=15276190=
+ EMITI 50505000=15276210=
+ (IF P1 = FL THEN TALL ELSE TALL & REALID[2:41:7], T1, T2);50510000=15276210=
+ GO TO EXIT; 50515000=15276230=
+ END; 50520000=15276240=
+ AEXP; 50525000=15277000=
+ STACKCT:= 1; 50530000=15278000=
+ J:= J+1; 50535000=15280000=
+ IF ELCLASS = COMMA THEN 50540000=15287000=
+ BEGIN 50545000=15288000=
+ 50550000=15289000=
+COMMENT ***** MONITOR FUNCTION M4 GOES HERE ; 50555000=15289000=
+ IF J = 1 THEN 50560000=15290000=
+ EMITV(TALL.ADDRESS) 50565000=15290000=
+ ELSE 50570000=15290000=
+ EMITO(COC); 50575000=15290000=
+ GO TO NEXT; 50580000=15292000=
+ END OF SUBSCRIPT COMMA HANDLER; 50585000=15293000=
+ IF ELCLASS ^= RTBRKET THEN 50590000=15294000=
+ BEGIN 50595000=15294000=
+ ERR(206); 50600000=15294000=
+ GO EXIT 50605000=15294000=
+ END; 50610000=15294000=
+ 50615000=15295000=
+COMMENT 206 VARIABLE- MISSING RIGHT BRACKET ON SUBSCRIPTED VARIABLE*; 50620000=15295000=
+ GT1:= 50625000=15295100=
+ IF TALL.CLASS >= NAMEID THEN 50630000=15295100=
+ 1 50635000=15295100=
+ ELSE 50640000=15295100=
+ TALL.INCR; 50645000=15295100=
+ IF J ^= GT1 THEN 50650000=15296000=
+ BEGIN 50655000=15297000=
+ ERR(208); 50660000=15297000=
+ GO TO EXIT 50665000=15297000=
+ END; 50670000=15297000=
+ 50675000=15298000=
+COMMENT 208 VARIABLE- NUMBER OF SUBSCRIPTS DOES NOT MATCH WITH * 50680000=15298000=
+ ARRAY DECLARATION. *;50685000=15299000=
+ IF STEPI = ASSIGNOP THEN 50690000=15300000=
+ BEGIN 50695000=15301000=
+ LAST: 50700000=15302000=
+ IF J = 1 THEN 50705000=15302000=
+ EMITN(TALL.ADDRESS) 50710000=15302000=
+ ELSE 50715000=15302000=
+ EMITO(CDC); 50720000=15302000=
+ IF TALL.CLASS >= LONGID THEN 50725000=15303000=
+ EMITO(INX); 50730000=15303000=
+ IF T1 = 0 THEN 50735000=15304000=
+ BEGIN 50740000=15305000=
+ IF P1 = FR THEN 50745000=15305000=
+ GO TO EXIT 50750000=15306000=
+ END 50755000=15306000=
+ ELSE 50760000=15306000=
+ BEGIN 50765000=15306000=
+ EMITO(DUP); 50770000=15306000=
+ EMITO(LOD) 50775000=15306000=
+ END; 50780000=15306000=
+ STEPIT; 50785000=15306000=
+ AEXP; 50790000=15307000=
+ EMITD(48-T2, T1, T2); 50795000=15308000=
+ EMITO(XCH); 50800000=15309000=
+ IF TALL.ADDRESS > 1023 THEN 50805000=15310000=
+ EMITI(PRTE); 50810000=15310000=
+ EMITO(IF TALL.CLASS MOD 2 = INTARRAYID MOD 2 THEN IF P1 = FS 50815000=15335000=
+ THEN ISD ELSE ISN ELSE IF P1 = FS THEN STD ELSE SND); 50820000=15335000=
+ STACKCT:= 0; 50825000=15335500=
+ P1:= 0; 50830000=15336000=
+ GO TO EXIT; 50835000=15337000=
+ END OF ASSIGNMENT STATEMENT SUBSCRIPTED VARIABLES; 50840000=15338000=
+ IF ELCLASS = PERIOD THEN 50845000=15339000=
+ BEGIN 50850000=15340000=
+ IF DOTSYNTAX(T1, T2) THEN 50855000=15341000=
+ GO TO EXIT; 50860000=15341000=
+ IF STEPI = ASSIGNOP THEN 50865000=15342000=
+ IF P1 = FS THEN 50870000=15342000=
+ GO TO LAST 50875000=15343000=
+ ELSE 50880000=15343000=
+ BEGIN 50885000=15343000=
+ ERR(209); 50890000=15343000=
+ GO EXIT 50895000=15343000=
+ END; 50900000=15343000=
+ IF J ^= 1 THEN 50905000=15344000=
+ EMITO(COC) 50910000=15344000=
+ ELSE 50915000=15344000=
+ IF TALL.CLASS >= LONGID THEN 50920000=15344000=
+ BEGIN 50925000=15344100=
+ EMITN(TALL.ADDRESS); 50930000=15344100=
+ EMITO(INX); 50935000=15344100=
+ EMITO(LOD) 50940000=15344100=
+ END 50945000=15344200=
+ ELSE 50950000=15344200=
+ EMITV(TALL.ADDRESS); 50955000=15344200=
+ END 50960000=15347000=
+ ELSE 50965000=15347000=
+ 50970000=15347000=
+COMMENT ***** MONITOR FUNCTION M10 GOES HERE ; 50975000=15347000=
+ BEGIN 50980000=15348000=
+ COMMENT MONITOR FUNCTION M10; 50985000=15348000=
+ SPCLMON:= P1 = FP OR ELCLASS >= AMPERSAND; 50990000=15349000=
+ IF J = 1 THEN 50995000=15351000=
+ IF TALL.CLASS >= LONGID THEN 51000000=15351000=
+ BEGIN 51005000=15351100=
+ EMITN(TALL.ADDRESS); 51010000=15351200=
+ EMITO(INX); 51015000=15351200=
+ IF SPCLMON THEN 51020000=15351300=
+ EMITO(LOD); 51025000=15351300=
+ END 51030000=15351400=
+ ELSE 51035000=15351400=
+ IF SPCLMON THEN 51040000=15352000=
+ EMITV(TALL.ADDRESS) 51045000=15353000=
+ ELSE 51050000=15353000=
+ EMITN(TALL.ADDRESS) 51055000=15354000=
+ ELSE 51060000=15354000=
+ EMITO(IF SPCLMON THEN COC ELSE CDC); 51065000=15356000=
+ IF P1 = FS THEN 51070000=15364000=
+ ERR(210); 51075000=15364000=
+ GO TO EXIT; 51080000=15365000=
+ END; 51085000=15366000=
+ IF P1 = FS THEN 51090000=15367000=
+ BEGIN 51095000=15367000=
+ ERR(210); 51100000=15367000=
+ GO TO EXIT 51105000=15367000=
+ END; 51110000=15367000=
+ 51115000=15368000=
+COMMENT 210 VARIABLE-MISSING LEFT ARROW OR PERIOD. *;51120000=15368000=
+ STACKCT:= 0; 51125000=15369000=
+ IF T1 ^= 0 THEN 51130000=15370000=
+ BEGIN 51135000=15370000=
+ EMITI(0, T1, T2); 51140000=15370000=
+ P1:= 0 51145000=15370000=
+ END; 51150000=15370000=
+ END OF SUBSCRIPTED VARIABLES 51155000=15376200=
+ ELSE 51160000=15376200=
+ BEGIN 51165000=15376200=
+ COMMENT LABELID; 51170000=15376200=
+ T1:= TAKE(T2:= GIT(TALL)); 51175000=15376300=
+ PUT(L, T2); 51180000=15376400=
+ IF T1 = 0 THEN 51185000=15376500=
+ T1:= L; 51190000=15376500=
+ IF(T1:= L-T1) DIV 4 > 127 THEN 51195000=15376600=
+ BEGIN 51200000=15376600=
+ T1:= 0; 51205000=15376600=
+ FLAG(50); 51210000=15376600=
+ END; 51215000=15376600=
+ EMIT(T1*4+3); 51220000=15376700=
+ STEPIT; 51225000=15376800=
+ END OF LABELID; 51230000=15376900=
+EXIT: 51235000=15377000=
+ END OF THE VARIABLE ROUTINE; 51240000=15377000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51245000=15377000=
+ 51250000=16000000=
+COMMENT THIS SECTION GENERATES CODE FOR STREAM PROCEDURES; 51255000=16000000=
+ 51260000=16000050=
+COMMENT DO LABEL DECS UPON APPEARANCE OF LABEL ; 51265000=16000050=
+ PROCEDURE DECLARELABEL; 51270000=16000100=
+ BEGIN 51275000=16000200=
+ KLASSF:= STLABID; 51280000=16000300=
+ VONF:= FORMALF:= FALSE; 51285000=16000400=
+ ADDRSF:= 0; 51290000=16000500=
+ MAKEUPACCUM; 51295000=16000600=
+ E; 51300000=16000600=
+ PUTNBUMP(0); 51305000=16000600=
+ ELBAT[I]:= ACCUM[0] & LASTINFO[35:35:13]; 51310000=16000700=
+ END; 51315000=16000800=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51320000=16000800=
+ PROCEDURE STREAMSTMT; 51325000=16001000=
+ BEGIN 51330000=16002000=
+ DEFINE 51335000=16003000=
+ LFTPAREN = LEFTPAREN #, 51340000=16003000=
+ LOC = [36:12] #, 51345000=16003000=
+ LASTGT = [24:12] #, 51350000=16004000=
+ LOCFLD = 36:36:12 #, 51355000=16004000=
+ LGTFLD = 24:24:12 #; 51360000=16004000=
+ DEFINE 51365000=16005000=
+ LEVEL = LVL #, 51370000=16005000=
+ ADDOP = ADOP #; 51375000=16005000=
+ DEFINE 51380000=16006100=
+ JFW = 39#, COMMENT 7.5.5.1 JUMP FORWARD UNCONDITIONAL ; 51385000=16007000=
+ RCA = 40#, COMMENT 7.5.7.6 RECALL CONTROL ADDRESS ; 51390000=16008000=
+ JRV = 47#, COMMENT 7.5.5.2 JUMP REVERSE UNCONDITIONAL ; 51395000=16009000=
+ CRF = 35#, COMMENT 7.5.10.6 CALL REPEAT FIELD ; 51400000=16010000=
+ BNS = 42#, COMMENT 7.5.5.5 BEGIN LOOP ; 51405000=16011000=
+ NOP = 1#, COMMENT ; 51410000=16012000=
+ ENS = 41#, COMMENT 7.5.5.6 END LOOP ; 51415000=16013000=
+ TAN = 30#, COMMENT 7.5.3.7 TEST FOR ALPHAMERIC ; 51420000=16014000=
+ BIT = 31#, COMMENT 7.5.3.8 TEST BIT ; 51425000=16015000=
+ JFC = 37#, COMMENT 7.5.5.3 JUMP FORWARD CONDITIONAL ; 51430000=16016000=
+ SED = 06#, COMMENT 7.5.7.8 SET DESTINATION ADDRESS ; 51435000=16017000=
+ RSA = 43#, COMMENT 7.5.7.4 RECALL SOURCE ADDRESS ; 51440000=16018000=
+ TRP = 60#, COMMENT 7.5.2.2 TRANSFER PROGRAM CHARACTERS ; 51445000=16019000=
+ BSS = 3#, COMMENT 7.5.6.6 SKIP SOURCE BIT ; 51450000=16020000=
+ BSD = 2#, COMMENT 7.5.6.5 SKIP DESTINATION BITS ; 51455000=16021000=
+ SEC = 34#, COMMENT 7.5.10.1 SET COUNT ; 51460000=16022000=
+ JNS = 38#; COMMENT 7.5.5.7 JUMP OUT LOOP ; 51465000=16023000=
+ PROCEDUREADJUST;; 51470000=16024000=
+ COMMENT FIXC EMITS BASICLY FORWARD JUMPS. HOWEVER IN THE CASE 51475000=16024000=
+ OF INSTRUCTIONS INTERPTED AS JUMPS BECAUSE OF A CRF ON 51480000=16025000=
+ A VALUE = 0 AND THE JUMP } 64 SYLLABLES A JFW 1 AND 51485000=16026000=
+ A RCA L (L IS STACK ADDRESS OF A PSEUDO LABEL WHICH 51490000=16027000=
+ MUST ALSO BE MANUFACTURED) IS EMITTED. ; 51495000=16028000=
+ PROCEDUREFIXC(S);VALUES;REALS;BEGINREALSAVL, D, F;IFD:= 51500000=16032000=
+ (SAVL:= L)-(L:= S)-1 <= 63THENEMITC(D, GET(S))ELSEFLAG(700);L:= 51505000=16034000=
+ SAVL;ENDFIXC; 51510000=16058000=
+ COMMENT EMITJUMP IS CALLED BY GOTOS AND JUMPCHAIN. 51515000=16058000=
+ THIS ROUTINE WILL EMIT A JUMP IF THE DISTANCE IS { 63 51520000=16059000=
+ SYLLABLES ,OTHERWISE, IT GETS A PRT CELL AND STUFFS THE 51525000=16060000=
+ STACK ADDRESS INTO THE LABEL ENTRY IN INFO AND EMITS AN 51530000=16061000=
+ RCA ON THIS STACK CELL. AT EXECUTION TIME ACTUAL PARAPART 51535000=16062000=
+ INSURES US THAT THIS CELL WILL CONATIN A LABEL DESCRIPTOR 51540000=16063000=
+ POINTING TO OUR LABEL IN QUESTION. ; 51545000=16064000=
+ PROCEDUREEMITJUMP(E);VALUEE;REALE;BEGINREALT, D;REALADDR;IFABS 51550000=16070000=
+ (D:= (T:= TAKE(GIT(E)).LOC)-L-1) >= 64THENFLAG(700);ELSEEMITC 51555000=16079000=
+ (D, IFD < 0THENJRVELSEJFW);ENDEMITJUMP; 51560000=16081000=
+ COMMENT WHEN JUMPCHAIN IS CALLED THERE IS A LINKEDLIST IN THE CODE51565000=16081000=
+ ARRAY WHERE JFWS MUST BE PLACED. THE 1ST LINK IS POINTED 51570000=16082000=
+ TO BY THE LOC FIELD OF EACH LABEL ENTRY IN INFO. THE LAST 51575000=16083000=
+ LINK IS = 4096. ; 51580000=16084000=
+ PROCEDUREJUMPCHAIN(E);VALUEE;REALE;BEGINREALSAVL, LINK;SAVL:= L;51585000=16089000=
+ L:= TAKE(GIT(E)).LASTGT;WHILEL ^= 4095DOBEGINLINK:= GET(L); 51590000=16093000=
+ EMITJUMP(E);L:= LINKEND;L:= SAVL;ENDJUMPCHAIN; 51595000=16098000=
+ COMMENT NESTS COMPILES THE NEST STATEMENT. 51600000=16098000=
+ A VARIABLE NEST INDEX CAUSES THE CODE, 51605000=16099000=
+ CRF V, BNS 0 ,NOP,NOP, TO BE GENERATED INITIALLY. 51610000=16100000=
+ AT THE RIGHT PAREN THE BNS IS FIXED WITH THE LENGTH OF 51615000=16101000=
+ THE NEST (NUMBER OF SYLLABLES) IF THE LENGTH {63,OTHERWISE51620000=16102000=
+ IT IS FIXED WITH A 1 AND THE NOPS REPLACED WITH JFW 1, 51625000=16103000=
+ RCA P. THIS IS DONE BECAUSE THE VALUE OF V AT EXECUTION 51630000=16104000=
+ MAY = 0 AND THIS CODE CAUSES A JUMP AROUND THE NEST. 51635000=16105000=
+ JUMPOUT INFO IS REMEMBERED IN A RECURSIVE CELL AND 51640000=16106000=
+ NEST LEVEL INCREASED BY ONE. 51645000=16107000=
+ WHEN THE RIGHT PAREN IS REACHED,(IF THE STATEMENTS IN 51650000=16108000=
+ THE NEST COMPILED), JOINFO IS CHECKED FOR THE EXISTANCE 51655000=16109000=
+ OF JUMPOUT STATEMENTS IN THE NEST,IF SO,THE THE JUMPS 51660000=16110000=
+ ARE FIXED BY FAKING TOTOS INTO COMPILING THE REQUIRED 51665000=16111000=
+ JUMPS. 51670000=16112000=
+ FINALLY THE BNS IS FIXED,IF REQUIRED,AND NEST LEVEL 51675000=16113000=
+ AND JOINFO RESTORED TO THEIR ORIGINAL VALUES. ; 51680000=16114000=
+ PROCEDURENESTS;BEGINLABELEXIT;REALJOINT, BNSFIX;IFELCLASS ^= 51685000=16119000=
+ LITNOTHENBEGINEMITC(ELBAT[I].ADDRESS, CRF);BNSFIX:= L;EMIT(BNS);51690000=16123000=
+ ENDELSEEMITC(ELBAT[I].ADDRESS, BNS);IFSTEPI ^= LFTPARENTHENBEGIN51695000=16125000=
+ ERR(262);GOTOEXITEND;NESTLEVEL:= NESTLEVEL+1;JOINT:= JOINFO; 51700000=16128000=
+ JOINFO:= 0;DOBEGINSTEPIT;ERRORTOG:= TRUE;STREAMSTMTENDUNTIL 51705000=16131000=
+ ELCLASS ^= SEMICOLON;IFELCLASS ^= RTPARENTHENBEGINERR(262);GOTO 51710000=16132000=
+ EXITEND;EMIT(ENS);IFJOINFO ^= 0THENBEGIN 51715000=16136000=
+ COMMENT PREPARE TO CALL JUMPCHAIN FORJUMPOUTS; 51720000=16136000=
+ ADJUST;PUT(TAKE(GIT(JOINFO)) & L[LOCFLD], GIT(JOINFO));JUMPCHAIN51725000=16139000=
+ (TAKE(JOINFO) & JOINFO[35:35:13]);END;IFBNSFIX ^= 0THENFIXC 51730000=16141000=
+ (BNSFIX);NESTLEVEL:= NESTLEVEL-1;JOINFO:= JOINT;EXIT:ENDNESTS; 51735000=16145000=
+ COMMENT LABELS HANDLES STREAM LABELS. 51740000=16145000=
+ ALL LABELS ARE ADJUSTED TO THE BEGINING OF THE NEXT 51745000=16146000=
+ WORD (IN THE PROGRAMSTREAM). 51750000=16147000=
+ IF A GO TO HAS NOT BEEN ENCOUNTERED BEFORE THE LABEL 51755000=16148000=
+ THEN THE NEST LEVEL FIELD IS ENTERED AND THE DEFINED BIT, 51760000=16149000=
+ [1:1], SET TO ONE. FOR DEFINED LABELS,IF WHERE A GO TO 51765000=16150000=
+ HAS APPEARED, A CHECK IS MADE THAT THE CURRENT NEST LEVEL 51770000=16151000=
+ MATCHES THE LEVEL OF THE LABEL. 51775000=16152000=
+ MULTIPLE OCCURANCES ARE ALSO CHECKED FOR AND FLAGGED. 51780000=16153000=
+ FINALLY,JUMPCHAIN IS CALLED TO FIX UP ANY FORWARD GO TOS 51785000=16154000=
+ AND GET A PRT LOCATION FOR ANY JUMPS }64 SYLLABLES. ; 51790000=16155000=
+ PROCEDURELABELS;BEGINREALGT1;ADJUST;GT1:= ELBAT[I];IFSTEPI ^= 51795000=16160000=
+ COLONTHENERR(258)ELSEBEGINIFTAKE(GT2:= GIT(GT1)).LOC ^= 0THEN 51800000=16163000=
+ FLAG(259);IFGT1 > 0THENBEGINPUT 51805000=16166000=
+ (-(TAKE(GT1) & NESTLEVEL[11:43:5]), GT1);PUT(-L, GT2)ENDELSE 51810000=16170000=
+ BEGINIFGT1.LEVEL ^= NESTLEVELTHENFLAG(257);PUT 51815000=16172000=
+ ((-L) & TAKE(GT2)[LGTFLD], GT2);JUMPCHAIN(GT1);END;END;STEPIT; 51820000=16177000=
+ ENDLABELS; 51825000=16178000=
+ COMMENT IFS COMPILES IF STATEMENTS. 51830000=16178000=
+ FIRST THE TEST IS COMPILED. NOTE THAT IN THE 51835000=16179000=
+ CONSTRUCTS "SC RELOP DC" AND "SC RELOP STRING" THAT 51840000=16180000=
+ THE SYLLABLE EMITTED IS FETCHED FROM ONE OF TWO FIELDS 51845000=16181000=
+ IN THE ELBAT WORD FOR THE RELATIONAL OPERATOR. OTHERWISE 51850000=16182000=
+ THE CODE IS EMITTED STRAIGHTAWAY. 51855000=16183000=
+ A TEST IS MADE TO SEE WHETHER THE STATEMENT AFTER THE 51860000=16184000=
+ "THEN" COULD POSSIBLY BE LONGER THAN 63 SYLLABLES,AND IF 51865000=16185000=
+ SO, Z NOPS ARE EMITTED FOR FIXC IN CASE A RCA WILL HAVE 51870000=16186000=
+ TO BE GENERATED. 51875000=16187000=
+ THIS PROCEDURE DOES NO OPTIMAZATION IN THE CASES 51880000=16188000=
+ IF THEN GO TO L,IF THEN STATEMENT ELSE GO TO L, OR 51885000=16189000=
+ IF THEN GO TO L1 ELSE GO TO L2 ; 51890000=16190000=
+ PROCEDUREIFS;BEGINDEFINECOMPARECODE = 51895000=16192000=
+ [42:6] #, 51900000=16192000=
+ TESTCODE = [36:6] #; 51905000=16192000=
+ LABEL 51910000=16193000=
+ IFSB, 51915000=16193000=
+ IFTOG, 51920000=16193000=
+ IFSC, 51925000=16193000=
+ EXIT; 51930000=16193000=
+ SWITCH 51935000=16194000=
+ IFSW:= IFSB, 51940000=16194000=
+ IFTOG, 51945000=16194000=
+ IFSC; 51950000=16194000=
+ REAL 51955000=16195000=
+ ADDR, 51960000=16195000=
+ FIX1, 51965000=16195000=
+ FIX2; 51970000=16195000=
+ ADDR:= 1; 51975000=16196000=
+ GO TO IFSW[STEPI-SBV+1]; 51980000=16197000=
+ IF ELCLASS = LOCLID THEN 51985000=16198000=
+ BEGIN 51990000=16199000=
+ EMITC(ELBAT[I].ADDRESS, CRF); 51995000=16200000=
+ ADDR:= 0; 52000000=16201000=
+ END 52005000=16204000=
+ ELSE 52010000=16204000=
+ IF ELCLASS = LITNO THEN 52015000=16204000=
+ ADDR:= ELBAT[I].ADDRESS 52020000=16205000=
+ ELSE 52025000=16205000=
+ BEGIN 52030000=16205000=
+ ERR(250); 52035000=16205000=
+ GO TO EXIT 52040000=16205000=
+ END; 52045000=16205000=
+ IF STEPI ^= SCV THEN 52050000=16206000=
+ BEGIN 52055000=16206000=
+ ERR(263); 52060000=16206000=
+ GO TO EXIT 52065000=16206000=
+ END; 52070000=16206000=
+IFSC: 52075000=16207000=
+ IF STEPI ^= RELOP THEN 52080000=16207000=
+ BEGIN 52085000=16207000=
+ ERR(264); 52090000=16207000=
+ GO TO EXIT 52095000=16207000=
+ END; 52100000=16207000=
+ IF STEPI = DCV THEN 52105000=16208000=
+ EMITC(ADDR, ELBAT[I-1].COMPARECODE); 52110000=16208000=
+ ELSE 52115000=16210000=
+ IF ELCLASS = STRNGCON THEN 52120000=16210000=
+ EMITC(ACCUM[1].[18:6], ELBAT[I-1].TESTCODE) 52125000=16212000=
+ ELSE 52130000=16212000=
+ IF ELCLASS = LITNO THEN 52135000=16212500=
+ EMITC(C, ELBAT[I-1].TESTCODE) 52140000=16212500=
+ ELSE 52145000=16212500=
+ IF ELCLASS <= IDMAX AND Q = 6"5ALPHA" THEN 52150000=16213000=
+ EMITC(17, TAN) 52155000=16214000=
+ ELSE 52160000=16214000=
+ BEGIN 52165000=16214000=
+ ERR(265); 52170000=16214000=
+ GO TO EXIT 52175000=16214000=
+ END; 52180000=16214000=
+ GO TO IFTOG; 52185000=16215000=
+IFSB: 52190000=16216000=
+ EMITC(1, BIT); 52195000=16216000=
+IFTOG: 52200000=16217000=
+ IF STEP ^= THENV THEN 52205000=16217000=
+ BEGIN 52210000=16217000=
+ ERR(266); 52215000=16217000=
+ GO TO EXIT 52220000=16217000=
+ END; 52225000=16217000=
+ FIX1:= L; 52230000=16218000=
+ EMIT(JFC); 52235000=16219000=
+ IF STEPI ^= ELSEV THEN % 52240000=16220000=
+ STREAMSTMT; 52245000=16229000=
+ IF ELCLASS = ELSEV THEN 52250000=16230000=
+ BEGIN 52255000=16231000=
+ FIX2:= L; 52260000=16232000=
+ EMIT(JFW); 52265000=16232000=
+ FIXC(FIX1); 52270000=16233000=
+ STEPIT; 52275000=16234000=
+ STREAMSTMT; 52280000=16235000=
+ FIXC(FIX2); 52285000=16236000=
+ END 52290000=16238000=
+ ELSE 52295000=16238000=
+ FIXC(FIX1); 52300000=16238000=
+EXIT: 52305000=16239000=
+ END IFS; 52310000=16239000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%52315000=16239000=
+ COMMENT GOTOS HANDLES GO TO AND THE LAST PART OF JUMP OUT TO 52320000=16240000=
+ STATEMENTS. 52325000=16241000=
+ IF THE LABEL HAS BEEN ENCOUNTERED THEN EMITJUMP IS CALLED 52330000=16242000=
+ AN PRODUCES A JRV OR RCA IN THE CASE OF JUMPS}64 SYLLABL 52335000=16243000=
+ ES. OTHERWISE, A LINK IS EMITTED POINTING ANY PREVIOUS 52340000=16244000=
+ GO TOS IN THE CASE OF FORWARD JUMPS. 52345000=16245000=
+ FINALLY, IF THE NEST LEVEL IS DEFINED THEN IT IS CHECKED 52350000=16246000=
+ AGAINST THE CURRENT LEVEL MINUS THE NUMBER OF LEVELS TO 52355000=16247000=
+ BE JUMPED OUT. OTHERWISE,NEST LEVEL IS DEFINED. ; 52360000=16248000=
+ PROCEDURE GOTOS; 52365000=16249000=
+ BEGIN 52370000=16250000=
+ LABEL 52375000=16251000=
+ EXIT; 52380000=16251000=
+ IF STEPI ^= TOV THEN 52385000=16252000=
+ I:= I-1; 52390000=16252000=
+ IF STEPI ^= STLABID THEN 52395000=16253000=
+ ELCLASS <= IDMAX 52400000=16253000=
+ DECLARELABEL ELSE 52405000=16253100=
+ BEGIN 52410000=16253100=
+ ERR(260); 52415000=16253100=
+ GO TO EXIT 52420000=16253100=
+ END; 52425000=16253100=
+ IF (GT2:= TAKE(GIT(GT1:= ELBAT[I]))).MON = 1 OR GT2.LOC ^= 0 THEN 52430000=16255000=
+ EMITJUMP(GT1) 52435000=16256000=
+ ELSE 52440000=16256000=
+ BEGIN 52445000=16257000=
+ PUT(0 & L[24:36:12], GIT(GT1)); 52450000=16257000=
+ IF GT1 > 0 THEN 52455000=16258000=
+ BEGIN 52460000=16259000=
+ PUT(-(TAKE(GT1) & (NESTLEVEL-JUMPLEVEL)[11:43:5]), GT1); 52465000=16260000=
+ EMITN(1023); 52470000=16261000=
+ END 52475000=16264000=
+ ELSE 52480000=16264000=
+ BEGIN 52485000=16264000=
+ IF GT1.LEVEL ^= NESTLEVEL-JUMPLEVEL THEN 52490000=16265000=
+ FLAG(257); 52495000=16265000=
+ EMIT(GT2.LASTGT); 52500000=16266000=
+ END; 52505000=16267000=
+ END; 52510000=16268000=
+ JUMPLEVEL:= 0; 52515000=16269000=
+EXIT: 52520000=16270000=
+ END GOTOS; 52525000=16270000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%52530000=16270000=
+ COMMENT RELEASES COMPILES THE STREAM RELEASE STATEMENT. 52535000=16271000=
+ THE CODE GENERATED IS : 52540000=16272000=
+ SED FILE 52545000=16273000=
+ RSA 0. 52550000=16274000=
+ AT EXECUTION TIME THIS CAUSES AN INVALID ADDRESS WHICH IS 52555000=16275000=
+ INTERPETED BY THE MCP TO MEAN RELEASE THE FILE POINTED TO 52560000=16276000=
+ BY THE DESTINATION ADDRESS. 52565000=16277000=
+ THE MONITOR BIT IS SET IN INFO FOR THE LOCAL VARIABLE SO 52570000=16278000=
+ THAT ACUTAL PARAPART MAY BE INFORMED LATER THAT A FILE 52575000=16279000=
+ MUST BE PASSED FOR THIS FORMAL PARAMETER; 52580000=16280000=
+ COMMENT INDEXS COMPILE STATEMENTS BEGINING WITH SI,DI,CI,TALLY 52585000=16290000=
+ OR LOCALIDS . 52590000=16291000=
+ THREE CASES PRESENT THEMSELVES, 52595000=16292000=
+ LETING X BE EITHER OF SI,DI,CI OR TALLY, THEY ARE: 52600000=16293000=
+ CASE I LOCLID ~ X 52605000=16294000=
+ CASE II X ~ X ... 52610000=16295000=
+ CASE III X ~ EITHER LOC,LOCLID,SC OR DC. 52615000=16296000=
+ THE VARIABLE "INDEX" IS COMPUTED,DEPENDING UPON WHICH 52620000=16297000=
+ CASE EXISTS,SUCH THAT ARRAY ELEMENT "MACRO[INDEX]"CONTAINS52625000=16298000=
+ THE CODE TO BE EMITTED. 52630000=16299000=
+ EACH ELEMENT OF MACRO HAS 1-3 SYLLABLES ORDERED FROM 52635000=16300000=
+ RIGHT TO LEFT, UNUSED SYLLABLES MUST = 0. EACH MACRO 52640000=16301000=
+ MAY REQUIRE AT MOST ONE REPEAT PART. 52645000=16302000=
+ IN THIS PROCEDURE,INDEXS,THE VARIABLE "ADDR" CONTAINS THE 52650000=16303000=
+ PROPER REPEAT PART BY THE TIME THE LABEL "GENERATE" IS 52655000=16304000=
+ ENCOUNTERED. THE SYLLABLES ARE FETCHED FROM MACRO[TYPE] 52660000=16305000=
+ ONE AT A TIME AND IF THE REPEAT PART ! 0 THEN"ADDR" IS 52665000=16306000=
+ USED AS THE REPEAT PART,THUS BUILDING A SYLLABLE WITH 52670000=16307000=
+ THE PROPER ADDRESS AND OPERATOR . 52675000=16308000=
+ NOTE: IF MACRO[TYPE] = 0 THEN THIS SIGNIFIES A SYNTAX 52680000=16309000=
+ ERROR. ; 52685000=16310000=
+ PROCEDURE INDEXS; 52690000=16311000=
+ BEGIN 52695000=16312000=
+ LABEL 52700000=16313000=
+ EXIT, 52705000=16313000=
+ GENERATE, 52710000=16313000=
+ L, 52715000=16313000=
+ L1; 52720000=16313000=
+ INTEGER 52725000=16314000=
+ TCLASS, 52730000=16314000=
+ INDEX, 52735000=16314000=
+ ADDR, 52740000=16314000=
+ J; 52745000=16314000=
+ TCLASS:= ELCLASS; 52750000=16315000=
+ IF STEPI ^= ASSIGNOP THEN 52755000=16316000=
+ BEGIN 52760000=16316000=
+ ERR(251); 52765000=16316000=
+ GO TO EXIT 52770000=16316000=
+ END; 52775000=16316000=
+ IF TCLASS = LOCLID THEN 52780000=16317000=
+ BEGIN 52785000=16318000=
+ IF SIV > STEPI OR ELCLASS > TALLYV THEN 52790000=16319000=
+ GO TO L; 52795000=16319000=
+ INDEX:= 32+ELCLASS-SIV; 52800000=16320000=
+ ADDR:= ELBAT[I-2].ADDRESS; 52805000=16321000=
+ GO TO GENERATE; 52810000=16322000=
+ END; 52815000=16323000=
+ IF TCLASS = STEPI THEN 52820000=16324000=
+ BEGIN 52825000=16325000=
+ IF STEPI ^= ADDOP OR STEPI ^= LITNO AND ELCLASS ^= LOCLID THEN 52830000=16327000=
+ GO TO L; 52835000=16327000=
+ INDEX:= TCLASS-SIV+REAL(ELBAT[I-1].ADDRESS = SUB)*4+ 52840000=16330000=
+ REAL(ELCLASS = LOCLID)*8; 52845000=16330000=
+ END 52850000=16333000=
+ ELSE 52855000=16333000=
+ BEGIN 52860000=16333000=
+ INDEX:= TCLASS-SIV+(IF ELCLASS = LOCLID THEN 16 ELSE IF ELCLASS = 52865000=16338000=
+ LOCV THEN 20 ELSE IF ELCLASS = SCV THEN 24 ELSE IF ELCLASS = 52870000=16338000=
+ DCV THEN 28 ELSE 25); 52875000=16338000=
+ IF ELCLASS = LOCV THEN 52880000=16339000=
+ IF STEPI ^= LOCLID THEN 52885000=16340000=
+ GO TO L; 52890000=16340000=
+ IF ELCLASS = LITNO AND TCLASS = TALLYV THEN 52895000=16341000=
+ BEGIN 52900000=16342000=
+ EMITC(ELBAT[I].ADDRESS, SEC); 52905000=16342000=
+ GO TO EXIT 52910000=16342000=
+ END; 52915000=16342000=
+ END; 52920000=16343000=
+ ADDR:= ELBAT[I].ADDRESS; 52925000=16344000=
+GENERATE: 52930000=16346000=
+ IF MACRO[INDEX] = 0 THEN 52935000=16346000=
+ L: 52940000=16347000=
+ BEGIN 52945000=16347000=
+ ERR(250); 52950000=16347000=
+ GO TO EXIT 52955000=16347000=
+ END; 52960000=16347000=
+ J:= 8; 52965000=16348000=
+ TCLASS:= 0; 52970000=16348000=
+L1: MOVECHARACTERS(2, MACRO[INDEX], J:= J-2, TCLASS, 6); 52975000=16349000=
+ IF TCLASS ^= 0 THEN 52980000=16350000=
+ BEGIN 52985000=16351000=
+ EMITC(IF TCLASS >= 64 THEN ADDR ELSE 0, TCLASS); 52990000=16352000=
+ GO TO L1 52995000=16354000=
+ END; 53000000=16354000=
+EXIT: 53005000=16355000=
+ END INDEXS; 53010000=16355000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53015000=16355000=
+ COMMENT DSS COMPILES DESTINATION STREAM STATEMENTS. 53020000=16356000=
+ DS~ LIT"STRING" IS HANDLED AS A SPECIAL CASE BECAUE THE 53025000=16357000=
+ STRING MUST BE SCANED FROM RIGHT TO LEFT,REPEATEDLY IF 53030000=16358000=
+ NECESSARY, AND EMITTED TO THE PROGRAM STREAM. IN 53035000=16359000=
+ ALL OTHER CASES,THE ELBAT WORD CONTAINS THE OPERATOR IN 53040000=16360000=
+ THE OPCODE FIELD ; 53045000=16361000=
+ PROCEDURE DSS; 53050000=16362000=
+ BEGIN 53055000=16363000=
+ INTEGER 53060000=16364000=
+ ADDR, 53065000=16364000=
+ J, 53070000=16364000=
+ K, 53075000=16364000=
+ L, 53080000=16364000=
+ T; 53085000=16364000=
+ LABEL 53090000=16365000=
+ EXIT, 53095000=16365000=
+ L1; 53100000=16365000=
+ DEFINE 53105000=16366000=
+ OPCODE = [27:6] #; 53110000=16366000=
+ IF STEPI ^= ASSIGNOP THEN 53115000=16367000=
+ BEGIN 53120000=16367000=
+ ERR(251); 53125000=16367000=
+ GO TO EXIT 53130000=16367000=
+ END; 53135000=16367000=
+ IF STEPI = LOCLID THEN 53140000=16368000=
+ BEGIN 53145000=16369000=
+ EMITC(ELBAT[I].ADDRESS, CRF); 53150000=16370000=
+ ADDR:= 0; 53155000=16371000=
+ IF STEPI = LITV THEN 53160000=16372000=
+ GO TO L1 53165000=16374000=
+ END 53170000=16374000=
+ ELSE 53175000=16374000=
+ IF ELCLASS = LITNO THEN 53180000=16374000=
+ BEGIN 53185000=16375000=
+ ADDR:= ELBAT[I].ADDRESS; 53190000=16376000=
+ STEPIT; 53195000=16376000=
+ END 53200000=16378000=
+ ELSE 53205000=16378000=
+ ADDR:= 1; 53210000=16378000=
+ IF Q = 6"4FILL0" THEN 53215000=16378500=
+ EMITC(ADDR, 10) 53220000=16378500=
+ ELSE %E 53225000=16378500=
+ IF ELCLASS = TRNSFER THEN 53230000=16379000=
+ EMITC(ADDR, ELBAT[1].OPCODE) 53235000=16380000=
+ ELSE 53240000=16380000=
+ IF ELCLASS = LITV THEN 53245000=16381000=
+ BEGIN 53250000=16382000=
+ EMITC(ADDR, TRP); 53255000=16383000=
+ IF STEPI ^= STRNGCON THEN 53260000=16384000=
+ BEGIN 53265000=16384500=
+ ERR(255); 53270000=16384500=
+ GO TO EXIT 53275000=16384500=
+ END; 53280000=16384500=
+ IF ADDR MOD 2 ^= 0 THEN 53285000=16385000=
+ BEGIN 53290000=16386000=
+ EMIT(ACCUM[1].[18:6]); 53295000=16387000=
+ J:= 1; 53300000=16387000=
+ END; 53305000=16388000=
+ FOR K:= J+2 STEP 2 UNTIL ADDR DO 53310000=16389000=
+ BEGIN 53315000=16390000=
+ FOR L:= 6, 7 DO 53320000=16391000=
+ MOVECHARACTERS(1, ACCUM[1], 53325000=16393000=
+ 2+(IF J:= J+1 > COUNT THEN J:= 1 ELSE J), T, L); 53330000=16393000=
+ EMIT(T); 53335000=16394000=
+ END 53340000=16396000=
+ END 53345000=16397000=
+ ELSE 53350000=16397000=
+ L1: ERR(250); 53355000=16397000=
+EXIT: 53360000=16398000=
+ END DSS; 53365000=16398000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53370000=16398000=
+ COMMENT SKIPS COMPILES THE SKIP BIT STATEMENT. 53375000=16399000=
+ IF THE REPEAT INDEX IS A LOCALID THEN A CRF IS EMITTED. 53380000=16400000=
+ A BSS OR BSD IS THEN EMITTED FOR SKIP SOURCE BITS (SB) 53385000=16401000=
+ OR SKIP DESTINATION BITS (DB) RESPECTIVELY ; 53390000=16402000=
+ PROCEDURE SKIPS; 53395000=16403000=
+ BEGIN 53400000=16404000=
+ REAL 53405000=16405000=
+ ADDR; 53410000=16405000=
+ IF STEPI = LOCLID THEN 53415000=16406000=
+ BEGIN 53420000=16407000=
+ EMITC(ELBAT[I].ADDRESS, CRF); 53425000=16408000=
+ ADDR:= 0; 53430000=16408000=
+ STEPIT; 53435000=16408000=
+ END 53440000=16410000=
+ ELSE 53445000=16410000=
+ IF ELCLASS = LITNO THEN 53450000=16410000=
+ BEGIN 53455000=16411000=
+ ADDR:= ELBAT[I].ADDRESS; 53460000=16412000=
+ STEPIT 53465000=16413000=
+ END 53470000=16414000=
+ ELSE 53475000=16414000=
+ ADDR:= 1; 53480000=16414000=
+ IF ELCLASS = SBV THEN 53485000=16415000=
+ EMITC(ADDR, BSS) 53490000=16416000=
+ ELSE 53495000=16416000=
+ IF ELCLASS = DBV THEN 53500000=16417000=
+ EMITC(ADDR, BSD) 53505000=16418000=
+ ELSE 53510000=16418000=
+ ERR(250); 53515000=16418000=
+ END SKIPS; 53520000=16419000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53525000=16419000=
+ COMMENT JUMPS COMPILES JUMP OUT AND JUMP OUT TO STATEMENTS. 53530000=16420000=
+ JUMP OUT TO STATEMENTS CAUSE JUMP LEVEL TO BE SET TO 53535000=16421000=
+ THE NUMBER OF LEVELS SPECIFIED. THEN THIS NUMBER OF 53540000=16422000=
+ JNS ARE EMITTED AND GOTOS IS CALLED TO COMPILE THE 53545000=16423000=
+ JUMP INSTRUCTION. 53550000=16424000=
+ SIMPLE JUMP OUTS ARE HANDLED BY EMITTING ONE JNS,ENTERING 53555000=16425000=
+ A PSEUDO STLABID IN INFO AND SETTING ELBAT[I] SUCH THAT 53560000=16426000=
+ THE GOTOS PROCEDURE WILL PERFORM THE ACTION OF SETTING 53565000=16427000=
+ UP THE LINKS FOR LATER FIX UPS. THE NEST STATEMENT CAUSES 53570000=16428000=
+ THESE FIX UPS(IF EMITTING OF JUMP INSTRUCTIONS) BY CALLING53575000=16429000=
+ GO TOS WHEN THE RIGHT PAREN IS ENCOUNTERED. ; 53580000=16430000=
+ PROCEDURE JUMPS; 53585000=16431000=
+ BEGIN 53590000=16432000=
+ JUMPLEVEL:= 1; 53595000=16433000=
+ IF STEPI ^= DECLARATORS THEN 53600000=16434000=
+ IF ACCUM[1] ^= 6"3OUT00" THEN 53605000=16434000=
+ FLAG(261); 53610000=16434100=
+ IF STEPI = LITNO THEN 53615000=16435000=
+ JUMPLEVEL:= ELBAT[I].ADDRESS 53620000=16436000=
+ ELSE 53625000=16436000=
+ BEGIN 53630000=16436000=
+ IF ELCLASS ^= TOV AND ELCLASS ^= STLABID THEN 53635000=16437000=
+ BEGIN 53640000=16438000=
+ COMMENT SIMPLE JUMP OUT STATEMENT; 53645000=16439000=
+ IF JOINFO = 0 THEN 53650000=16440000=
+ BEGIN 53655000=16441000=
+ JOINFO:= NEXTINFO; 53660000=16442000=
+ PUTNBUMP 53665000=16444000=
+ (STACKHEAD[0], LINK & (STLABID*2+1)[2:40:8] & 2[27:40:8]); 53670000=16444000=
+ PUTNBUMP(0 & (JOINFO-LASTINFO)[4:40:8]); 53675000=16445000=
+ PUTNBUMP(0); 53680000=16446000=
+ LASTINFO:= JOINFO; 53685000=16447000=
+ END; 53690000=16448000=
+ ELBAT[I:= I-1]:= TAKE(JOINFO) & JOINFO[35:35:13]; 53695000=16449000=
+ END; 53700000=16450000=
+ I:= I-1; 53705000=16450000=
+ END; 53710000=16451000=
+ FOR GT1:= 1 STEP 1 UNTIL JUMPLEVEL DO 53715000=16452000=
+ EMIT(JNS); 53720000=16453000=
+ GOTOS; 53725000=16454000=
+ END JUMPS; 53730000=16455000=
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53735000=16455000=
+ COMMENT STREAMSTMT ENVOKES THE APPROPRIATE PROCEDURE TO HANDLE 53740000=16456000=
+ THE VARIOUS AND SUNDRY STREAM PROCEDURE STATEMENTS. 53745000=16457000=
+ THE STATEMENTS ARE BROKEN DOWN AS FOLLOWS: 53750000=16458000=
+ IDENTIFIED BY PROCEDURE ENVOKED 53755000=16459000=
+ END GO TO FINI 53760000=16460000=
+ SEMICOLON GO TO FINI 53765000=16461000=
+ ) GO TO FINI 53770000=16462000=
+ IF IFS 53775000=16463000=
+ GO GOTOS 53780000=16464000=
+ RELEASE RELEASES 53785000=16465000=
+ BEGIN COMPOUNDTAIL 53790000=16466000=
+ SI,DI,CI,TALLY,LOCALID INDEXS 53795000=16467000=
+ DS DSS 53800000=16468000=
+ SKIP SKIPS 53805000=16469000=
+ JUMP JUMPS 53810000=16470000=
+ LABELID LABELS 53815000=16471000=
+ LITERAL NO.,LOCALID( NESTS 53820000=16472000=
+ UPON EXITING,STREAMSTMT ASSURES THAT "I" POINTS TO 53825000=16473000=
+ THE SEMICOLON ,END OR ) IN SYNTACICALLY CORRECT PROGRAMS; 53830000=16474000=
+ LABEL 53835000=16475000=
+ L, 53840000=16475000=
+ L1, 53845000=16475000=
+ L2, 53850000=16475000=
+ L3, 53855000=16475000=
+ L4, 53860000=16475000=
+ L5, 53865000=16475000=
+ L6, 53870000=16475000=
+ L7, 53875000=16475000=
+ L8, 53880000=16475000=
+ L9, 53885000=16475000=
+ L10, 53890000=16475000=
+ EXIT, 53895000=16475000=
+ FINI, 53900000=16475000=
+ START; 53905000=16475000=
+ SWITCH 53910000=16476000=
+ TYPE:= FINI, 53915000=16476000=
+ L, 53920000=16476000=
+ FINI, 53925000=16476000=
+ L3, 53930000=16476000=
+ L4, 53935000=16476000=
+ L5, 53940000=16476000=
+ L6, 53945000=16476000=
+ L7, 53950000=16476000=
+ L7, 53955000=16476000=
+ L7, 53960000=16476000=
+ L7, 53965000=16476000=
+ L8, 53970000=16476000=
+ L9, 53975000=16476000=
+ L10; 53980000=16476000=
+START: 53985000=16477000=
+ GO TO TYPE[ELCLASS-ENDV+1]; 53990000=16477000=
+ IF ELCLASS = RTPAREN THEN 53995000=16478000=
+ GO TO FINI; 54000000=16478000=
+ IF ELCLASS = STLABID THEN 54005000=16481000=
+ GO TO L2; 54010000=16481000=
+ IF ELCLASS < IDMAX AND ELCLASS ^= LOCLID THEN 54015000=16482100=
+ BEGIN 54020000=16482100=
+ DECLARELABEL; 54025000=16482200=
+ GO TO L2; 54030000=16482200=
+ END; 54035000=16482200=
+ IF ELCLASS = LITNO OR ELCLASS = LOCLID AND TABLE(I+1) = LFTPAREN THEN 54040000=16482400=
+ GO TO L1; 54045000=16482400=
+ IF ELCLASS = LOCLID THEN 54050000=16482500=
+ GO TO L7; 54055000=16482500=
+L: 54060000=16483000=
+ ERR(250); 54065000=16483000=
+ GO TO FINI; 54070000=16483000=
+L1: 54075000=16484000=
+ NESTS; 54080000=16484000=
+ GO TO EXIT; 54085000=16484000=
+L2: 54090000=16485000=
+ LABELS; 54095000=16485000=
+ GO TO START; 54100000=16485000=
+L3: 54105000=16486000=
+ IFS; 54110000=16486000=
+ GO TO FINI; 54115000=16486000=
+L4: 54120000=16487000=
+ GOTOS; 54125000=16487000=
+ GO TO EXIT; 54130000=16487000=
+L5: 54135000=16489000=
+L6: 54140000=16489000=
+ I:= I+1; 54145000=16489000=
+ COMPOUNDTAIL; 54150000=16489000=
+ GO TO FINI; 54155000=16489000=
+L7: 54160000=16490000=
+ INDEXS; 54165000=16490000=
+ GO TO EXIT; 54170000=16490000=
+L8: 54175000=16491000=
+ DSS; 54180000=16491000=
+ GO TO EXIT; 54185000=16491000=
+L9: 54190000=16492000=
+ SKIPS; 54195000=16492000=
+ GO TO EXIT; 54200000=16492000=
+L10: 54205000=16493000=
+ JUMPS; 54210000=16493000=
+ GO TO EXIT; 54215000=16493000=
+EXIT: 54220000=16494000=
+ STEPIT; 54225000=16494000=
+FINI: 54230000=16495000=
+ END STREAMSTMT; 54235000=16495000=
+MOVE(1, I, CODE(0)); 54240000=16495100=
+TIME1:= TIME(1); 54245000=16495200=
+PROGRAM; 54250000=16495200=
+ENDOFITALL: 54255000=16495210=
+END MAIN BLOCK 54260000=16495300=
+. 54265000=16495300=