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 - "%" 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],); 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],,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=