mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-13 15:17:03 +00:00
6917 lines
621 KiB
Plaintext
6917 lines
621 KiB
Plaintext
%#######################################################################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
|
|
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
|
|
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
|
|
<X22,"BURROUGHS B-5700 ESPOL COMPILER MARK ", 01830000
|
|
"XVI.0.00" 01831000
|
|
," ",A6,"DAY, ",O,", ",I2,":",A2,X1,A3, 01832000
|
|
////X45,A1,A6,"/",A1,A6,/X45,15("=")//>, 01832500
|
|
TIME(6),DATER(TIME(5)),12|REAL(Q:=H MOD 12=0)+Q, 01833000
|
|
Q:=MIN MOD 10+(MIN DIV 10)|64, 01834000
|
|
IF H}12 THEN "PM." ELSE "AM.", 01835000
|
|
N1.[6:6],N1,N2.[6:6],N2); 01835500
|
|
NOHEADING:=FALSE; 01836000
|
|
END OF DATIME; 01837000
|
|
COMMENT THIS SECTION CONTAINS ALL CODE PERTAINENT TO READING CARDS 02000000
|
|
AND SCANNING THEM; 02001000
|
|
COMMENT OCTIZE REFORMATS ACCUM FOR OCTAL CONSTANTS; 02001836
|
|
BOOLEAN STREAM PROCEDURE OCTIZE(S,D,SKP,CNT); VALUE SKP,CNT; 02001838
|
|
BEGIN 02001840
|
|
SI:=S; SI:=SI+4; DI:=D; SKP(DS:=3 RESET); % RIGHT JUSTIFY. 02001842
|
|
CNT(IF SC}"8" THEN TALLY:=1 ELSE IF SC<"0" THEN TALLY:=1; SKIP 3 SB;02001844
|
|
3(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB)); 02001846
|
|
SI:=D; IF SB THEN 02001848
|
|
BEGIN TALLY:=1; DI:=D; DS:=RESET END; % PREVENT FLAG BIT. 02001850
|
|
OCTIZE:=TALLY; % "1" = NON OCTAL CHARACTER OR FLAG BIT. 02001852
|
|
END OCTIZE; 02001854
|
|
COMMENT HEXIZE REFORMATS ACCUM FOR HEXADECIMAL CONSTANTS; 02001856
|
|
BOOLEAN STREAM PROCEDURE HEXIZE(S,D,SKP,CNT); VALUE SKP,CNT; 02001858
|
|
BEGIN LOCAL T1,T2,TEMP2,TEMP1; LABEL AGIN; 02001860
|
|
COMMENT LOCAL VARIABLES ARE LOCATED IN REVERSE ORDER FROM THE 02001862
|
|
WAY THEY ARE DECLARED IN STREAM PROCEDURES; 02001864
|
|
DI:=LOC TEMP1; CNT(DS:=LIT"1"); % IN CASE A CHAR=A,B,C,D,OR F. 02001866
|
|
SI:=S; SI:=SI+3; DI:=LOC TEMP1; % WE MAY OVERFLOW INTO TEMP2. 02001868
|
|
CNT(IF SC<"0" THEN IF SC}"A" THEN IF SC{"F" THEN % WORK HARD. 02001870
|
|
BEGIN 02001872
|
|
T1:=SI; T2:=DI; DI:=T1; SI:=T2; % FLIP, MAN. 02001874
|
|
DS:=3 RESET; SI:=T1; DI:=T2; % FLIP BACK. 02001876
|
|
DS:=1 ADD; DI:=DI-1; SKIP 2 DB; DS:=1 SET; SKIP 3 DB; 02001878
|
|
GO AGIN; 02001880
|
|
END; 02001882
|
|
IF SC<"0" THEN TALLY:=1; DS:=CHR; % < 0 = NON-HEX CHARACTER. 02001884
|
|
AGIN: 02001886
|
|
); 02001888
|
|
SI:=LOC TEMP1; DI:=D; SKP(DS:=4 RESET); % RIGHT ADJUST CONSTANT. 02001890
|
|
CNT(SKIP 2 SB; 02001892
|
|
4(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB));% FINAL CONVERT. 02001894
|
|
SI:=D; IF SB THEN 02001895
|
|
BEGIN TALLY:=1; DI:=D; DS:=RESET END; % PREVENT FLAG BIT. 02001896
|
|
HEXIZE:=TALLY; % "1" IF PROGRAMMER GOOFED. 02001897
|
|
END HEXIZE; 02001898
|
|
COMMENT PUTSEQNO PUTS THE SEQUENCE NUMBER OF THE CARD-IMAGE 02002000
|
|
CURRENTLY BEING SCANNED INTO THE INFO TABLE IN CASE 02003000
|
|
IT IS NEEDED FOR FUTURE REFERENCE; 02004000
|
|
STREAM PROCEDURE PUTSEQNO(INFO,LCR); VALUE LCR; 02005000
|
|
BEGIN DI:=INFO; SI:=LCR; DS:=WDS; END PUTSEQNO; 02006000
|
|
COMMENT TURNONSTOPLIGHT TURNS THE LIGHT "RED" ON THE "CORNER". 02007000
|
|
I.E., THE PURPOSE OF THIS ROUTINE IS TO INSERT A PER- 02008000
|
|
CENT SIGN IN COLUMN 73 AS AN END OF CARD SENTINEL FOR 02009000
|
|
THE SCANNER; 02010000
|
|
STREAM PROCEDURE TURNONSTOPLIGHT(RED,CORNER); VALUE RED,CORNER; 02011000
|
|
BEGIN DI:=CORNER; SI:=LOC CORNER; SI:=SI-1; DS:=CHR END; 02012000
|
|
COMMENT WRITNEW TRANSFERS THE CARD IMAGE TO THE NEWTAPE BUFFER 02014000
|
|
AND REPORTS IF THE CARD MIGHT BE CONTROL CARD; 02015000
|
|
BOOLEAN STREAM PROCEDURE WRITNEW(NEW,FCR); VALUE FCR; 02016000
|
|
BEGIN SI ~ FCR; IF SC ! "$" THEN TALLY ~ 1; 02017000
|
|
DI~NEW;DS~10 WDS; 02018000
|
|
WRITNEW ~ TALLY END WRITNEW; 02020000
|
|
COMMENT MKABS CONVERTS A DESCRIPTOR TO AN ABSOLUTE ADDRESS; 02021000
|
|
REAL STREAM PROCEDURE MKABS(A); 02022000
|
|
BEGIN D1 ~ A; MKABS ~ DI END MKABS; 02023000
|
|
REAL STREAM PROCEDURE CONV(ACCUM,SKP,N);VALUE SKP,N; 02041000
|
|
BEGIN 02042000
|
|
SI~ ACCUM; SI~SI+SKP;SI~SI+3;DI~LOC CONV;DS~N OCT 02043000
|
|
END; 02044000
|
|
STREAM PROCEDURE MOVECHARACTERS(N,SORCE,SSKIP,DEST,DSKIP); 02045000
|
|
VALUE N,SSKIP,DSKIP; 02046000
|
|
BEGIN 02047000
|
|
SI~SORCE ; DI~DEST; 02048000
|
|
SI~SI+SSKIP; DI~ DI+DSKIP ; 02049000
|
|
DS ~ N CHR ; 02050000
|
|
END ; 02051000
|
|
COMMENT MOVECHARACTERS MOVES N CHARACTERS FROM THE SSKIP-TH CHAR IN 02052000
|
|
"SORCE" TO THE DSKIP-TH CHAR IN "DEST". ; 02053000
|
|
STREAM PROCEDURE MOVE(W)"WORDS FROM"(A)"TO"(B); VALUE W; 02054000
|
|
BEGIN SI ~ A; DI ~ B; DS ~ W WDS END; 02055000
|
|
STREAM PROCEDURE RESIZE(FIEL); 02056000
|
|
BEGIN LOCAL T; 02057000
|
|
SI~FIEL; DI~LOC T; DS~WDS; 02058000
|
|
SI~T;DI~FIEL;DI~DI+1; SKIP 2 DB; DS~10 SET 02059000
|
|
END; 02060000
|
|
COMMENT EQUAL COMPARES COUNT CHARACTERS LOCATED AT A AND B FOR 02061000
|
|
EQUALITY. THIS ROUTINE IS USED IN THE LOOK-UP OF ALPHA 02061500
|
|
QUANTITIES IN THE DIRECTORY; 02062000
|
|
BOOLEAN STREAM PROCEDURE EQUAL(COUNT,A,B); VALUE COUNT; 02062500
|
|
BEGIN 02063000
|
|
TALLY:=1; SI:=A; DI:=B; 02063500
|
|
IF COUNT SC=DC THEN EQUAL:=TALLY 02064000
|
|
END EQUAL; 02064500
|
|
PROCEDURE READACARD; FORWARD; 02065000
|
|
PROCEDURE DOLLARCARD; FORWARD; 02065500
|
|
BOOLEAN PROCEDURE BOOLEXP; FORWARD; 02065600
|
|
PROCEDURE SCANNER; 02066000
|
|
BEGIN 02066500
|
|
COMMENT "SCAN" IS THE STREAM PROCEDURE WHICH DOES THE ACTUAL SCANNING. 02067000
|
|
IT IS DRIVEN BY A SMALL WORD MODE PROCEDURE CALLED "SCANNER", 02067500
|
|
WHICH CHECKS FOR A QUANTITY BEING BROKEN ACROSS A CARD. "SCAN" 02068000
|
|
IS CONTROLLED BY A VARIABLE CALLED "RESULT". "SCAN" ALSO 02068500
|
|
INFORMS THE WORLD OF ITS ACTION BY MEANS OF THE SAME VARIABLE, 02069000
|
|
HENCE THE VARIABLE "RESULT" IS PASSED BY BOTH NAME AND VALUE. 02069500
|
|
THE MEANING OF "RESULT" AS INPUT IS: 02070000
|
|
VALUE MEANING 02070500
|
|
===== ======================================== 02071000
|
|
0 INITIAL CODE - DEBLANK AND START TO FETCH THE 02071500
|
|
NEXT QUANTITY. 02072000
|
|
1 CONTINUE BUILDING AN IDENTIFIER (INTERRUPTED BY 02072500
|
|
END-OF-CARD BREAK). 02073000
|
|
2 LAST QUANTITY BUILT WAS SPECIAL CHARACTER. HENCE, 02073500
|
|
EXIT (INTERRUPTION BY END-OF-CARD BREAK IS NOT 02074000
|
|
IMPORTANT). 02074500
|
|
3 CONTINUE BUILDING A NUMBER (INTERRUPTED BY END-OF- 02075000
|
|
CARD BREAK). 02075500
|
|
4 LAST THING WAS AN ERROR (COUNT EXCEEDED 63). HENCE,02076000
|
|
EXIT (INTERRUPTION BY END-OF-CARD BREAK NOT 02076500
|
|
IMPORTANT). 02077000
|
|
5 GET NEXT CHARACTER AND EXIT. 02077500
|
|
6 SCAN A COMMENT. 02078000
|
|
7 DEBLANK ONLY. 02078500
|
|
THE MEANING OF "RESULT" AS OUTPUT IS: 02079000
|
|
VALUE MEANING 02079500
|
|
===== ======================================== 02080000
|
|
1 AN IDENTIFIER WAS BUILT. 02080500
|
|
2 A SPECIAL CHARACTER WAS OBTAINED. 02081000
|
|
3 A NUMBER (INTEGER) WAS BUILT. 02081500
|
|
"SCAN" PUTS ALL STUFF SCANNED (EXCEPT FOR COMMENTS AND 02082000
|
|
DISCARDED BLANKS) INTO "ACCUM" (CALLED "ACCUMULATOR" 02082500
|
|
FOR THE REST OF THIS DISCUSSION). 02083000
|
|
"COUNT" IS THE VARIABLE THAT GIVES THE NUMBER OF CHARACTERS 02083500
|
|
"SCAN" HAS PUT INTO THE "ACCUMULATOR". SINCE "SCAN" NEEDS 02084000
|
|
THE VALUE SO THAT IT CAN PUT MORE CHARACTERS INTO THE "ACCUM- 02084500
|
|
ULATOR" AND NEEDS TO UPDATE "COUNT" FOR THE OUTSIDE WORLD. 02085000
|
|
"COUNT" IS PASSED BY BOTH NAME AND VALUE. IT IS ALSO 02085500
|
|
CONVENIENT TO HAVE (63-COUNT). THIS IS CALLED "COMCOUNT". 02086000
|
|
"NCR" (NEXT CHARACTER TO BE SCANNED) IS ALSO PASSED BY 02086500
|
|
NAME AND VALUE SO THAT IT MAY BE UPDATED. 02087000
|
|
"ST1" AND "ST2" ARE TEMPORARY STORAGES WHICH ARE EXPLICITLY 02087500
|
|
PASSED TO "SCAN" IN ORDER TO OBTAIN THE MOST USEFULL STACK 02088000
|
|
ARRANGEMENT. 02088500
|
|
; 02089000
|
|
STREAM PROCEDURE SCAN(NCR,COUNTV,ACCUM,COMCOUNT,RESULT,RESULTV, 02089500
|
|
COUNT,ST2,NCRV,ST1); 02090000
|
|
VALUE COUNTV, COMCOUNT,RESULTV,ST2,NCRV,ST1; 02090500
|
|
BEGIN 02091000
|
|
LABEL DEBLANK,NUMBERS,IDBLDR,GNC,K,EXIT,FINIS,L,ERROR, 02091500
|
|
COMMENTS,COMMANTS; 02092000
|
|
DI:=RESULT; DI:=DI+7; SI:=NCRV; 02092500
|
|
COMMENT SETUP "DI" FOR A CHANGE IN "RESULT" AND "SI" FOR A LOOK AT 02093000
|
|
THE BUFFER; 02093500
|
|
CI:=CI+RESULTV; % SWITCH ON VALUE OF RESULT; 02094000
|
|
GO DEBLANK; % 0 IS INITIAL CODE. 02094500
|
|
GO IDBLDR; % 1 IS ID CODE. 02095000
|
|
GO FINIS; % 2 IS SPECIAL CHARACTER CODE. 02095500
|
|
GO NUMBERS; % 3 IS NUMBER CODE. 02096000
|
|
GO FINIS; % 4 IS ERROR CODE. 02096500
|
|
GO GNC; % 5 IS GET NEXT CHARACTER CODE. 02097000
|
|
GO COMMANTS; % 6 IS COMMENT CODE. 02097500
|
|
% 7 IS DEBLANK ONLY CODE. 02098000
|
|
IF SC=" " THEN 02098500
|
|
K: BEGIN SI:=SI+1; IF SC=" " THEN GO K END; 02099000
|
|
GO FINIS; 02099500
|
|
DEBLANK: 02100000
|
|
IF SC=" " THEN 02100500
|
|
L: BEGIN SI:=SI+1; IF SC=" " THEN GO L END; 02101000
|
|
COMMENT IF WE ARRIVE HERE WE HAVE A NON-BLANK CHARACTER; 02101500
|
|
NCRV:=SI; 02102000
|
|
IF SC } "0" THEN GO NUMBERS; 02102500
|
|
IF SC=ALPHA THEN GO IDBLDR; 02103000
|
|
COMMENT IF WE ARRIVE HERE WE HAVE A SPECIAL CHARACTER (OR GNC); 02103500
|
|
GNC: 02104000
|
|
DS:=LIT"2"; TALLY:=1; SI:=SI+1; GO EXIT; 02104500
|
|
COMMANTS: 02105000
|
|
IF SC!";" THEN 02105500
|
|
BEGIN 02106000
|
|
COMMENTS: 02106500
|
|
SI:=SI+1; 02107000
|
|
IF SC > "%" THEN GO COMMENTS; 02107500
|
|
IF SC < ";" THEN GO COMMENTS; 02108000
|
|
COMMENT CHARACTERS BETWEEN % AND SEMICOLON ARE HANDLED BY WORD- 02108500
|
|
MODE PART OF COMMENT ROUTINE; 02109000
|
|
END; 02109500
|
|
GO FINIS; 02110000
|
|
IDBLDR: 02110500
|
|
TALLY:=63; DS:=LIT "1"; 02111000
|
|
COMCOUNT(TALLY:=TALLY+1; 02111500
|
|
IF SC=ALPHA THEN SI:=SI+1 ELSE JUMP OUT TO EXIT); 02112000
|
|
TALLY:=TALLY+1; 02112500
|
|
IF SC=ALPHA THEN 02113000
|
|
BEGIN 02113500
|
|
ERROR: 02114000
|
|
DI:=DI-1; DS:=LIT "4"; GO EXIT; 02114500
|
|
END 02115000
|
|
ELSE GO EXIT; 02115500
|
|
COMMENT IF WE ARRIVE AT ERROR WE HAVE MORE THAN 63 CHARACTERS 02116000
|
|
IN AN IDENTIFIER OR NUMBER; 02116500
|
|
NUMBERS: 02117000
|
|
TALLY:=63; DS:=LIT "3"; 02117500
|
|
COMCOUNT(TALLY:=TALLY+1; 02118000
|
|
IF SC <"0"THEN JUMP OUT TO EXIT; SI:=SI+1); 02118500
|
|
GO ERROR; 02119000
|
|
EXIT: 02119500
|
|
ST1:=TALLY; % "ST1" CONTAINS NUMBER OF CHARACTERS WE ARE 02120000
|
|
% GOING TO MOVE INTO THE "ACCUMULATOR". 02120500
|
|
TALLY:=TALLY+COUNTV; ST2:=TALLY; 02121000
|
|
DI:=COUNT; SI:=LOC ST2; DS:=WDS; 02121500
|
|
COMMENT THIS CODE UPDATED "COUNT"; 02122000
|
|
DI:=ACCUM; SI:=SI-3; DS:=3 CHR; 02122500
|
|
COMMENT THIS CODE PLACES "COUNT" IN "ACCUM" AS WELL; 02123000
|
|
DI:=DI+COUNTV; % POSITION "DI" PAST CHARACTERS ALREADY 02123500
|
|
% IN THE "ACCUMULATOR", IF ANY. 02124000
|
|
SI:=NCRV; DS:=ST1 CHR; 02124500
|
|
COMMENT MOVE CHARACTERS INTO "ACCUM"; 02125000
|
|
FINIS: 02125500
|
|
DI:=NCR; ST1:=SI; SI:=LOC ST1; DS:=WDS; 02126000
|
|
COMMENT RESET "NCR" TO LOCATION OF NEXT CHARACTER TO BE SCANNED; 02126500
|
|
END OF SCAN; 02127000
|
|
LABEL L;% 02127500
|
|
L: 02128000
|
|
SCAN(NCR,COUNT,ACCUM[1],63-COUNT,RESULT, 02128500
|
|
RESULT,COUNT,0,NCR,0); 02129000
|
|
IF NCR=LCR THEN 02129500
|
|
BEGIN 02130000
|
|
READACARD; 02130500
|
|
GO TO L; % GO DIRECTLY TO L, DO NOT PASS GO, 02135500
|
|
% DO NOT COLLECT $200. 02136000
|
|
END; 02136500
|
|
END SCANNER; 02137000
|
|
DEFINE WRITELINE = IF SINGLTOG THEN WRITE(LINE,15,LIN[*]) 02181000
|
|
ELSE WRITE(LINE[DBL],15,LIN[*])#, 02181250
|
|
PRINTCARD = BEGIN 02182500
|
|
EDITLINE(LIN,FCR,L DIV 4,L,[46:2],MEDIUM,OMITTING); 02182750
|
|
IF NOHEADING THEN DATIME; WRITELINE; 02183000
|
|
END #; 02183250
|
|
STREAM PROCEDURE EDITLINE(LINE,NCR,R,L,SYMBOL,OMIT); 02183500
|
|
VALUE NCR,R,L,SYMBOL,OMIT; 02183750
|
|
BEGIN 02184000
|
|
DI := LINE; DS := 16 LIT " "; 02184250
|
|
SI := NCR; DS := 9 WDS; 02184500
|
|
DS := 8 LIT " "; 02184750
|
|
DS := WDS; % SEQUENCE NUMBER. 02185000
|
|
DS:=LIT" "; SI:=LOC SYMBOL; SI:=SI+6; 02185250
|
|
DS:=2 CHR; DS:=LIT" "; 02185500
|
|
SI~LOC R; DS~4 DEC; DS~LIT ":"; 02185750
|
|
SI~LOC L; DS~1 DEC; 02186000
|
|
DS~6 LIT " "; 02186250
|
|
OMIT(DI:=DI-12; DS:=8 LIT" OMIT"); 02186750
|
|
END EDITLINE; 02187000
|
|
COMMENT COMPARE COMPARES SEQUENCE NUMBERS OF TAPE AND CARD. IF 02187250
|
|
TAPE IS SMALLER THEN RESULT = 0 ELSE IF CARD IS SMALLER 02187500
|
|
RESULT = 1 ELSE RESULT = 2; 02187750
|
|
REAL STREAM PROCEDURE COMPARE(TAPE,CARD); VALUE TAPE,CARD; 02188000
|
|
BEGIN 02188250
|
|
SI := TAPE; DI := CARD; 02188500
|
|
IF 8 SC } DC THEN 02188750
|
|
BEGIN 02189000
|
|
SI := SI-8; DI := DI-8; TALLY := 1; 02189250
|
|
IF 8 SC = DC THEN TALLY := 2 02189500
|
|
END; 02189750
|
|
COMPARE := TALLY 02190000
|
|
END COMPARE; 02190250
|
|
PROCEDURE OUTPUTSOURCE; 02190500
|
|
BEGIN 02190750
|
|
LABEL LCARD,LTAPE,AWAY; 02191000
|
|
SWITCH SW:=LCARD,LCARD,LTAPE,AWAY,LCARD,LTAPE; 02191250
|
|
IF SEQTOG THEN % RESEQUENCING. 02191500
|
|
BEGIN 02191750
|
|
IF TOTALNO = -10 OR NEWBASE THEN 02192000
|
|
BEGIN 02192250
|
|
NEWBASE := FALSE; GTI1:= TOTALNO:=BASENUM 02192500
|
|
END 02192750
|
|
ELSE GTI1:= TOTALNO:= TOTALNO + ADDVALUE; 02193000
|
|
CHANGESEQ(GTI1,LCR); 02193250
|
|
END; 02193500
|
|
IF NEWTOG THEN 02193750
|
|
IF WRITNEW(LIN,FCR) THEN WRITE(NEWTAPE,10,LIN[*]); 02194000
|
|
IF OMITTING THEN IF NOT LISTATOG THEN GO AWAY; 02194250
|
|
GO SW[LASTUSED]; 02194500
|
|
LCARD: 02194750
|
|
IF LISTER OR LISTPTOG THEN PRINTCARD; 02195000
|
|
GO AWAY; 02195250
|
|
LTAPE: 02195500
|
|
IF LISTER THEN PRINTCARD; 02195750
|
|
% GO AWAY; 02196000
|
|
AWAY: 02196250
|
|
END OUTPUTSOURCE; 02196500
|
|
PROCEDURE READACARD; 02196750
|
|
COMMENT READACARD READS CARDS FROM EITHER THE CARD READER OR THE 02197000
|
|
TAPE MERGING AS REQUESTED AND CREATING A NEW TAPE AND 02197250
|
|
LISTING IF REQUESTED. READACARD ALSO INSERTS A PERCENT 02197500
|
|
SIGN AS AN END OF CARD SENTINEL IN COLUMN 73 AND SETS 02197750
|
|
FCR,NCR,LCR,TLCR, AND CLCR; 02198000
|
|
BEGIN 02198250
|
|
PROCEDURE READTAPE; 02198500
|
|
BEGIN 02201500
|
|
LABEL ENDREADTAPE, EOFT; 02201510
|
|
READ (TAPE, 10, TBUFF[*])[EOFT]; 02201750
|
|
LCR:=MKABS(TBUFF[9]); 02202000
|
|
GO TO ENDREADTAPE; 02202010
|
|
EOFT: 02202020
|
|
DEFINEARRAY[25]:="ND;END."& "E"[1:43:5]; 02202030
|
|
DEFINEARRAY[34]:="9999" & "9999"[1:25:23]; 02202040
|
|
TLCR:= MKABS(DEFINEARRAY[34]); 02202050
|
|
PUTSEQNO (DEFINEARRAY[33],TLCR-8); 02202060
|
|
TURNONSTOPLIGHT("%", TLCR-8); 02202070
|
|
ENDREADTAPE: 02202080
|
|
END READTAPE; 02202250
|
|
PROCEDURE SEQCOMPARE(TLCR,CLCR, LIB); VALUE LIB; BOOLEAN LIB; 02202500
|
|
REAL TLCR, CLCR ; 02202750
|
|
BEGIN 02203000
|
|
MEDIUM:="C "; % CARD READER. 02203250
|
|
IF GT1:=COMPARE(TLCR,CLCR)=0 THEN % TAPE HAS LOW SEQUENCE NUMB02203500
|
|
BEGIN 02203750
|
|
LCR:=TLCR; LASTUSED:=3; 02204000
|
|
MEDIUM:="T "; % TAPE INPUT. 02204250
|
|
END 02204500
|
|
ELSE BEGIN 02204750
|
|
IF GT1 ! 1 THEN % TAPE AND CARD HAVE SAME SEQ 02205000
|
|
BEGIN 02205250
|
|
MEDIUM:="P "; % CARD PATCHES TAPE. 02205500
|
|
READTAPE; 02208500
|
|
END; 02208750
|
|
LCR:=CLCR; 02209000
|
|
LASTUSED:=2; 02209250
|
|
END; 02209500
|
|
END OF SEQCOMPARE; 02209750
|
|
LABEL CARDONLY, CARDLAST, TAPELAST, EXIT, FIRSTTIME, 02210000
|
|
EOF, USETHESWITCH, 02210250
|
|
COMPAR, TESTVOID, XIT; 02210500
|
|
SWITCH USESWITCH:=CARDONLY,CARDLAST,TAPELAST,FIRSTTIME; 02210750
|
|
IF ERRORCOUNT}ERRMAX THEN ERR(611); % ERR LIMIT EXCEEDED - STOP. 02211500
|
|
USETHESWITCH: 02211750
|
|
DOLLAR2TOG:=FALSE; 02211800
|
|
GO TO USESWITCH[LASTUSED]; 02212000
|
|
MOVE(1,INFO[LASTUSED.LINKR,LASTUSED.LINKC], 02212250
|
|
DEFINEARRAY[DEFINEINDEX-2]); 02212500
|
|
LASTUSED := LASTUSED + 1; 02212750
|
|
NCR := LCR-1; 02213000
|
|
GO TO XIT; 02213250
|
|
FIRSTTIME: 02213500
|
|
READ(CARD,10,CBUFF[*]); 02213750
|
|
FCR:=NCR:=(LCR:=MKABS(CBUFF[9]))-9; 02214000
|
|
MEDIUM:="C "; 02214100
|
|
IF EXAMIN(FCR)!"$" AND LISTER THEN PRINTCARD; 02214200
|
|
PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02214250
|
|
TURNONSTOPLIGHT("%",LCR); 02214500
|
|
GO XIT; 02214750
|
|
COMMENT WE HAVE JUST INITIALIZED CARD INPUT; 02215000
|
|
CARDONLY: 02215250
|
|
READ(CARD,10,CBUFF[*]); 02215500
|
|
LCR := MKABS(CBUFF[9]); GO EXIT; 02215750
|
|
CARDLAST: 02216000
|
|
READ(CARD,10,CBUFF[*])[EOF]; 02216250
|
|
CLCR := MKABS(CBUFF[9]); 02216500
|
|
GO COMPAR; 02216750
|
|
EOF: 02217000
|
|
DEFINEARRAY[25]:="ND;END."&"E"[1:43:5]; 02217250
|
|
DEFINEARRAY[34]:="9999"&"9999"[1:25:23]; 02217500
|
|
CLCR:=MKABS(DEFINEARRAY[34]); 02217750
|
|
PUTSEQNO(DEFINEARRAY[33],CLCR-8); 02218000
|
|
TURNONSTOPLIGHT("%",CLCR-8); 02218250
|
|
% 02218400
|
|
GO COMPAR; 02218500
|
|
COMMENT THIS RELEASES THE PREVIOUS CARD FROM THE CARD READER AND 02218750
|
|
SETS UP CLCR; 02219000
|
|
TAPELAST: 02219250
|
|
READTAPE; 02219500
|
|
COMMENT THIS RELEASES THE PREVIOUS CARD FROM TAPE AND SETS UP TLCR; 02219750
|
|
COMPAR: 02224250
|
|
SEQCOMPARE(TLCR,CLCR,FALSE); 02224500
|
|
EXIT: 02225000
|
|
NCR := FCR:= LCR - 9; 02225250
|
|
COMMENT SETS UP NCR AND FCR; 02225500
|
|
IF EXAMIN(FCR)!"$" THEN % $-CARDS DON"T COUNT. 02225750
|
|
IF COMPARE(MKABS(INFO[LASTSEQROW,LASTSEQUENCE]),LCR)=1 THEN 02226000
|
|
BEGIN 02226250
|
|
FLAG(610); % SEQUENCE ERROR. 02226500
|
|
SEQUENCEERROR(LIN); 02226750
|
|
END; 02227000
|
|
CARDNUMBER:=CONV(INFO[LASTSEQROW,LASTSEQUENCE-1],5,8); 02228000
|
|
IF LASTUSED=3 THEN 02228050
|
|
BEGIN 02228075
|
|
IF VOIDTAPE THEN GO USETHESWITCH; 02228100
|
|
IF VOIDTCR!0 THEN 02228125
|
|
IF COMPARE(LCR,VOIDTCR)=0 THEN GO USETHESWITCH; 02228150
|
|
END; 02228175
|
|
IF EXAMIN(FCR)="$" THEN 02228250
|
|
BEGIN 02228500
|
|
IF LISTPTOG OR PRINTDOLLARTOG THEN PRINTCARD; 02228750
|
|
NCR:=NCR+32768; DOLLARCARD; 02229000
|
|
COMMENT DONT FORGET THAT NCR IS NOT WORD MODE, BUT CHAR. MODE POINTER; 02229250
|
|
GO USETHESWITCH; 02229500
|
|
END; 02229750
|
|
IF EXAMIN(FCR)=" " THEN 02230000
|
|
IF DOLLAR2TOG:=EXAMIN(FCR+32768)="$" THEN 02230100
|
|
BEGIN 02230250
|
|
OUTPUTSOURCE; 02230500
|
|
NCR:=NCR+65536; % SCAN PAST " $" (CHARACTER MODE). 02230750
|
|
DOLLARCARD; 02231000
|
|
END; 02231250
|
|
IF VOIDING THEN GO USETHESWITCH; 02231500
|
|
IF VOIDCR!0 THEN 02231750
|
|
IF COMPARE(LCR,VOIDCR)>0 THEN VOIDCR:=VOIDPLACE:=0 02232000
|
|
ELSE GO USETHESWITCH; 02232250
|
|
IF VOIDTAPE THEN GO TESTVOID; 02232500
|
|
IF VOIDCR!0 THEN 02233000
|
|
IF COMPARE(LCR,VOIDTCR)>0 THEN VOIDTCR:=VOIDPLACE:=0 ELSE 02233500
|
|
TESTVOID: IF LASTUSED=3 THEN GO USETHESWITCH; 02234000
|
|
CARDCOUNT:=CARDCOUNT+1; 02234500
|
|
IF DOLLAR2TOG THEN GO USETHESWITCH; 02234600
|
|
PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02234750
|
|
OUTPUTSOURCE; 02235000
|
|
IF OMITTING THEN GO USETHESWITCH; 02235250
|
|
% 02235500
|
|
TURNONSTOPLIGHT("%",LCR); 02235750
|
|
XIT: 02237750
|
|
END READACARD; 02238000
|
|
REAL PROCEDURE CONVERT; 02248000
|
|
BEGIN REAL T; INTEGER N; 02249000
|
|
TLO~0; THI~ 02250000
|
|
T~ CONV(ACCUM[1],TCOUNT,N~(COUNT-TCOUNT)MOD 8); 02251000
|
|
FOR N~ TCOUNT+N STEP 8 UNTIL COUNT- 1 DO 02252000
|
|
IF DPTOG THEN 02253000
|
|
BEGIN 02254000
|
|
DOUBLE(THI,TLO,100000000.0,0,|,CONV(ACCUM[1],N,8),0,+,~, 02255000
|
|
THI,TLO); 02256000
|
|
T~THI; 02257000
|
|
END ELSE 02258000
|
|
T~ T|100000000+ CONV(ACCUM[1],N,8); 02259000
|
|
CONVERT~T; 02260000
|
|
END; 02261000
|
|
REAL STREAM PROCEDURE FETCH(F); VALUE F; 02262000
|
|
BEGIN SI:=F; SI:=SI-8; DI:=LOC FETCH; DS:=WDS END FETCH; 02263000
|
|
PROCEDURE DUMPINFO; 02264000
|
|
BEGIN 02264050
|
|
ARRAY A[0:14]; INTEGER JEDEN,DWA; 02264100
|
|
STREAM PROCEDURE OCTALWORDS(S,D,N); VALUE N; 02264400
|
|
BEGIN 02264450
|
|
SI:=S; DI:=D; 02264500
|
|
N(2(8(DS:=3 RESET; 3(IF SB THEN DS:=1 SET ELSE 02264550
|
|
DS:=1 RESET; SKIP 1 SB)); DS:=1 LIT " ");DS:=2 LIT" "); 02264600
|
|
END OF OCTALWORDS; 02264650
|
|
STREAM PROCEDURE ALPHAWORDS(S,D,N); VALUE N; 02264700
|
|
BEGIN 02264750
|
|
SI:=S; DI:=D; 02264800
|
|
N(2(4(DS:=1 LIT" "; DS:=1 CHR); DS:=1 LIT" "); DS:=2 LIT" "); 02264850
|
|
END OF ALPHAWORDS; 02264900
|
|
IF NOHEADING THEN DATIME;WRITE(LINE[DBL],<//"ELBAT">); 02264950
|
|
FOR JEDEN:=0 STEP 6 UNTIL 71 DO 02265000
|
|
BEGIN 02265050
|
|
BLANKET(14,A); OCTALWORDS(ELBAT[JEDEN],A,6); 02265100
|
|
WRITE(LINE[DBL],15,A[*]); 02265150
|
|
END; 02265200
|
|
BLANKET(14,A); OCTALWORDS(ELBAT[72],A,4); 02265250
|
|
WRITE(LINE[DBL],15,A[*]); 02265300
|
|
FOR JEDEN:=0 STEP 1 UNTIL NEXTINFO DIV 256 DO 02265350
|
|
BEGIN 02265400
|
|
WRITE(LINE[DBL],<//"INFO[",I2,",*]">,JEDEN); 02265450
|
|
FOR DWA:=0 STEP 6 UNTIL 251 DO 02265500
|
|
BEGIN 02265550
|
|
BLANKET(14,A); ALPHAWORDS(INFO[JEDEN,DWA],A,6); 02265600
|
|
WRITE(LINE,15,A[*]); 02265650
|
|
BLANKET(14,A); OCTALWORDS(INFO[JEDEN,DWA],A,6); 02265700
|
|
WRITE(LINE[DBL],15,A[*]); 02265750
|
|
END; 02265800
|
|
BLANKET(14,A); ALPHAWORDS(INFO[JEDEN,252],A,4); 02265850
|
|
WRITE(LINE,15,A[*]); 02265900
|
|
BLANKET(14,A); OCTALWORDS(INFO[JEDEN,252],A,4); 02265950
|
|
WRITE(LINE[DBL],15,A[*]); 02266000
|
|
END; 02266050
|
|
END OF DUMPINFO; 02266100
|
|
DEFINE SKAN = BEGIN 02277000
|
|
COUNT:=RESULT:=ACCUM[1]:=0; 02278000
|
|
SCANNER; 02279000
|
|
Q:=ACCUM[1]; 02280000
|
|
END #; 02281000
|
|
COMMENT DOLLARCARD HANDLES THE COMPILER CONTROL CARDS. 02282000
|
|
ALL COMPILER- AND USER-DEFINED OPTIONS ARE KEPT 02283000
|
|
IN THE ARRAY "OPTIONS". 02284000
|
|
EACH OPTION HAS A TWO-WORD ENTRY: 02285000
|
|
02286000
|
|
WORD CONTAINS 02287000
|
|
---- -------- 02288000
|
|
1 ENTRY FROM ACCUM[1]: 00XZZZZ, WHERE 02289000
|
|
X IS THE SIZE OF THE ID AND 02290000
|
|
ZZZZZ IS THE FIRST FIVE CHARS OF THE ID. 02291000
|
|
2 PUSH-DOWN, 47-BIT STACK CONTAINING THE 02292000
|
|
HISTORY OF THE SETTINGS OF THIS OPTION. 02293000
|
|
02294000
|
|
IN "FINDOPTION", ALL COMPILER-DEFINED OPTIONS ARE USUALLY 02295000
|
|
LOCATED BASED UPON A UNIQUE NUMBER ASSIGNED TO EACH. 02296000
|
|
FOR ALL USER-DEFINED OPTIONS, A SEQUENTIAL TABLE SEARCH IS 02297000
|
|
INITIATED USING "USEROPINX" AS THE INITIAL INDEX INTO THE 02298000
|
|
"OPTIONS" ARRAY. IF THE NUMBER OF COMPILER-DEFINED OPTIONS 02299000
|
|
IS CHANGED, THEN "USEROPINX" MUST BE ACCORDINGLY CHANGED. 02300000
|
|
THE NUMBER OF USER DEFINED OPTIONS ALLOWED CAN BE 02301000
|
|
CHANGED BY CHANGING THE DEFINE "OPARSIZE". 02302000
|
|
THE VARIABLE "OPTIONWORD" CONTAINS THE CURRENT TRUE OR FALSE 02303000
|
|
SETTING OF ALL OF THE COMPILER-DEFINED OPTIONS, ONE BIT PER 02304000
|
|
OPTION. 02305000
|
|
; 02306000
|
|
BOOLEAN PROCEDURE FINDOPTION(BIT); VALUE BIT; INTEGER BIT; 02307000
|
|
BEGIN 02308000
|
|
LABEL FOUND; 02309000
|
|
REAL ID; 02310000
|
|
OPINX:=2|BIT-4; 02311000
|
|
WHILE ID:=OPTIONS[OPINX:=OPINX+2]!0 DO 02312000
|
|
IF Q=ID THEN GO FOUND; 02313000
|
|
OPTIONS[OPINX]:=Q; % NEW USER-DEFINED OPTION. 02314000
|
|
FOUND: 02315000
|
|
IF OPINX +1>OPARSIZE THEN FLAG(602) ELSE % TOO MANY USER OPTIONS 02316000
|
|
FINDOPTION:=BOOLEAN(OPTIONS[OPINX+1]); 02317000
|
|
END FINDOPTION; 02318000
|
|
PROCEDURE DOLLARCARD; 02319000
|
|
BEGIN 02320000
|
|
STREAM PROCEDURE RESTORESEQNUM(LCR,INFO); VALUE LCR; 02320200
|
|
BEGIN 02320400
|
|
DI:=LCR; SI:=INFO; DS:=WDS; 02320600
|
|
END; 02320800
|
|
PROCEDURE SWITCHIT(XBIT); VALUE XBIT; INTEGER XBIT; 02321000
|
|
BEGIN 02322000
|
|
BOOLEAN B,T; 02323000
|
|
INTEGER SAVEINX; 02324000
|
|
LABEL XMODE0,XMODE1,XMODE2,XMODE3,XMODE4,ALONG; 02325000
|
|
SWITCH SW:=XMODE0,XMODE1,XMODE2,XMODE3,XMODE4; 02326000
|
|
SETTING:=FINDOPTION(XBIT); SKAN; 02327000
|
|
GO SW[XMODE+1]; 02328000
|
|
XMODE0: % FIRST OPTION ON CARD, BUT NOT SET, RESET, OR POP. 02329000
|
|
OPTIONWORD:=BOOLEAN(0); 02330000
|
|
FOR SAVEINX:=1 STEP 2 UNTIL OPARSIZE DO OPTIONS[SAVEINX]:=0; 02331000
|
|
XMODE:=LASTUSED:=1; % CARD INPUT ONLY. 02332000
|
|
XMODE1: % NOT FIRST OPTION AND NOT BEING SET, RESET, OR POPPED. 02333000
|
|
OPTIONS[OPINX+1]:=REAL(TRUE); 02334000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & TRUE[XBIT:1]; 02335000
|
|
GO ALONG; 02336000
|
|
XMODE2: % RESET; 02337000
|
|
OPTIONS[OPINX+1]:=REAL(FALSE & SETTING[1:2:46]); 02338000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & FALSE[XBIT:1]; 02339000
|
|
GO ALONG; 02340000
|
|
XMODE3: % SET. 02341000
|
|
SAVEINX:=OPINX; % REMEMBER OPTION WE ARE SETTING. 02342000
|
|
B:=IF Q="1=0000" THEN BOOLEXP ELSE TRUE; 02343000
|
|
OPTIONS[SAVEINX+1]:=REAL(B & SETTING[1:46]); 02352000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & B [XBIT:1]; 02353000
|
|
GO ALONG; 02354000
|
|
XMODE4: % POP. 02355000
|
|
OPTIONS[OPINX+1]:=REAL(B:=SETTING.[1:46]); 02356000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & B [XBIT:1]; 02357000
|
|
ALONG: 02358000
|
|
END SWITCHIT; 02359000
|
|
LABEL EXIT,AGAIN,SKANAGAIN,LENGTH1,LENGTH2,LENGTH3,LENGTH4, 02360000
|
|
LENGTH5,LENGTH6,LENGTH7,LENGTH8,LENGTH9, 02361000
|
|
WHATISIT, 02362000
|
|
CARDOPTION,MERGEOPTION; 02363000
|
|
SWITCH OPTIONLENGTH:=LENGTH1,WHATISIT,LENGTH3,LENGTH4,LENGTH5, 02364000
|
|
LENGTH6,LENGTH7,WHATISIT,LENGTH9,WHATISIT; 02365000
|
|
INTEGER SRESULT,SCOUNT; 02365100
|
|
ALPHA VOIDRANGE; 02365200
|
|
DOLLARTOG:=TRUE; 02366000
|
|
MOVE(10,ACCUM[0],DEFINEARRAY[0]); % SAVE INFORMATION FOR 02366100
|
|
SCOUNT:=COUNT; SRESULT:=RESULT; % "TABLE" TO RESUME SCAN. 02366200
|
|
XMODE:=0; 02367000
|
|
PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02368000
|
|
TURNONSTOPLIGHT("%",LCR); 02369000
|
|
SKANAGAIN: 02370000
|
|
SKAN; 02371000
|
|
AGAIN: 02372000
|
|
GO OPTIONLENGTH[MIN(COUNT,10)]; 02373000
|
|
LENGTH1: 02374000
|
|
IF Q = "1%0000" THEN GO EXIT; 02375000
|
|
IF Q = "1$0000" THEN 02376000
|
|
BEGIN SWITCHIT(PRINTDOLLARBIT); GO AGAIN END; 02377000
|
|
IF Q = "1,0000" THEN GO SKANAGAIN; 02378000
|
|
GO WHATISIT; 02379000
|
|
LENGTH2: % NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 02380000
|
|
LENGTH3: 02381000
|
|
IF Q = "3SET00" THEN 02382000
|
|
BEGIN XMODE:=3; GO SKANAGAIN END; 02383000
|
|
IF Q = "3POP00" THEN 02384000
|
|
BEGIN XMODE:=4; GO SKANAGAIN END; 02385000
|
|
IF Q = "3NEW00" THEN 02386000
|
|
BEGIN 02387000
|
|
SWITCHIT(NEWBIT); 02388000
|
|
IF Q = "4TAPE0" THEN GO SKANAGAIN; 02389000
|
|
GO AGAIN; 02390000
|
|
END; 02391000
|
|
IF Q = "3SEQ00" THEN 02392000
|
|
BEGIN SWITCHIT(SEQBIT); GO AGAIN END; 02393000
|
|
IF Q = "3PRT00" THEN 02394000
|
|
BEGIN SWITCHIT(PRTBIT); GO AGAIN END; 02395000
|
|
IF Q = "3MCP00" THEN 02396000
|
|
BEGIN SWITCHIT(MCPBIT); GO AGAIN END; 02397000
|
|
GO WHATISIT; 02398000
|
|
LENGTH4: 02399000
|
|
IF Q = "4LIST0" THEN 02400000
|
|
BEGIN 02401000
|
|
SWITCHIT(LISTBIT); 02402000
|
|
GO AGAIN; 02404000
|
|
END; 02405000
|
|
IF Q = "4VOID0" THEN 02406000
|
|
BEGIN 02407000
|
|
IF XMODE=0 THEN 02408000
|
|
BEGIN 02409000
|
|
GETVOID(VOIDRANGE,NCR,LCR,INFO[LASTSEQROW,LASTSEQUENCE]); 02410000
|
|
IF VOIDCR=0 THEN VOIDCR:=MKABS(VOIDPLACE) ELSE 02410500
|
|
IF COMPARE(MKABS(VOIDRANGE),VOIDCR)!1 THEN GO TO EXIT; 02411000
|
|
MOVE(1,VOIDRANGE,VOIDPLACE); 02412000
|
|
GO EXIT; 02413000
|
|
END; 02414000
|
|
SWITCHIT(VOIDBIT); 02415000
|
|
GO AGAIN; 02418000
|
|
END; 02419000
|
|
IF Q = "4OMIT0" THEN 02420000
|
|
BEGIN IF NOT DOLLAR2TOG THEN BEGIN PRINTCARD; FLAG(605); END; 02421000
|
|
SWITCHIT(OMITBIT); GO AGAIN END; 02421100
|
|
IF Q = "4CARD0" THEN 02422000
|
|
BEGIN 02423000
|
|
Q:="4TAPE0"; % FAKE OUT SWITCHIT. 02424000
|
|
SWITCHIT(MERGEBIT); 02425000
|
|
IF XMODE!2 THEN MERGETOG:=NOT MERGETOG; 02425500
|
|
OPTIONS[2|MERGEBIT-1]:= % CARD IS 02426000
|
|
REAL(SETTING & (MERGETOG)[47:1]); % INVERSE OF MERGE. 02427000
|
|
IF MERGETOG THEN GO MERGEOPTION; 02428000
|
|
CARDOPTION: 02429000
|
|
LASTUSED:=1; 02430000
|
|
GO AGAIN; 02431000
|
|
END; 02432000
|
|
IF Q = "4TAPE0" THEN 02433000
|
|
BEGIN 02434000
|
|
SWITCHIT(MERGEBIT); 02435000
|
|
IF NOT MERGETOG THEN GO CARDOPTION; 02436000
|
|
MERGEOPTION: 02437000
|
|
LASTUSED:=2; % NEXT CARD IS READ FROM READER. 02438000
|
|
IF MAXTLCR=0 THEN 02439000
|
|
BEGIN 02440000
|
|
INTEGER STREAM PROCEDURE FEJ(F,T); VALUE T; 02441000
|
|
BEGIN 02442000
|
|
SI:=F; DI:=LOC T; DS:=WDS; 02443000
|
|
SI:=T; SI:=SI-16; DI:=LOC FEJ; DS:=WDS; 02444000
|
|
END FEJ; 02445000
|
|
STREAM PROCEDURE FIX(F,T); VALUE T; 02446000
|
|
BEGIN 02447000
|
|
SI:=F; SI:=SI-24; DI:=LOC T; DS:=WDS; 02448000
|
|
DI:=T; DI:=DI+47; SKIP 4 DB; DS:=2 RESET; 02449000
|
|
2(DI:=DI+48); DS:=8 LIT"00#01+0#"; 02450000
|
|
END FIX; 02451000
|
|
IF GT1:=FEJ(TAPE,0)=10 THEN 02452000
|
|
BEGIN 02453000
|
|
REWIND(TAPE); FIX(TAPE,0); 02454000
|
|
END; 02455000
|
|
MAXTLCR:=GT1+TLCR:=9+MKABS(TBUFF[0]); 02456000
|
|
READ(TAPE,10,TBUFF[*]); % INITIALIZE TAPE INPUT. 02457000
|
|
LASTUSED:=2; 02458000
|
|
END; 02459000
|
|
GO AGAIN; 02460000
|
|
END; 02461000
|
|
IF Q = "4PAGE0" THEN 02462000
|
|
BEGIN 02463000
|
|
IF LISTER THEN WRITE(LINE[PAGE]); 02464000
|
|
GO SKANAGAIN; 02465000
|
|
END; 02466000
|
|
IF Q = "4INFO0" THEN 02467000
|
|
BEGIN DUMPINFO; GO SKANAGAIN END; 02468000
|
|
IF Q = "4SEGS0" THEN 02469000
|
|
BEGIN SWITCHIT(SEGSBIT); GO AGAIN END; 02470000
|
|
IF Q = "4NEST0" THEN 02471000
|
|
BEGIN SWITCHIT(NESTBIT); GO AGAIN END; 02472000
|
|
IF Q = "4DECK0" THEN 02473000
|
|
BEGIN SWITCHIT(DECKBIT); GO AGAIN END; 02474000
|
|
GO WHATISIT; 02475000
|
|
LENGTH5: 02476000
|
|
IF Q = "5RESET" THEN 02477000
|
|
BEGIN XMODE:=2; GO SKANAGAIN END; 02478000
|
|
IF Q = "5LISTP" THEN 02479000
|
|
BEGIN SWITCHIT(LISTPBIT); GO AGAIN; END; 02480000
|
|
IF Q = "5VOIDT" THEN 02481000
|
|
BEGIN 02482000
|
|
IF XMODE=0 THEN 02483000
|
|
BEGIN 02484000
|
|
GETVOID(VOIDRANGE,NCR,LCR,INFO(LASTSEQROW,LASTSEQUENCE]); 02485000
|
|
IF VOIDTCR=0 THEN VOIDTCR:=MKABS(VOIDTPLACE) ELSE 02485500
|
|
IF COMPARE(MKABS(VOIDRANGE),VOIDTCR)!1 THEN GO TO EXIT; 02486000
|
|
MOVE(1,VOIDRANGE,VOIDTPLACE); 02487000
|
|
GO EXIT; 02488000
|
|
END; 02489000
|
|
SWITCHIT(VOIDTBIT); 02490000
|
|
GO AGAIN; 02493000
|
|
END; 02494000
|
|
IF Q = "5CHECK" THEN 02495000
|
|
BEGIN SWITCHIT(CHECKBIT); GO AGAIN END; 02496000
|
|
IF Q = "5LIMIT" THEN 02497000
|
|
BEGIN 02498000
|
|
SKAN; 02499000
|
|
IF RESULT!3 THEN % SHOULD BE NUMBER. 02500000
|
|
BEGIN FLAG(600); GO AGAIN END; 02501000
|
|
ERRMAX:=CONV(ACCUM[1],0,ACCUM[1].[12:6]); 02502000
|
|
GO SKANAGAIN; 02503000
|
|
END; 02504000
|
|
IF Q = "5PUNCH" THEN 02505000
|
|
BEGIN SWITCHIT(PUNCHBIT); GO AGAIN; END; 02506000
|
|
IF Q = "5PURGE" THEN 02507000
|
|
BEGIN SWITCHIT(PURGEBIT); GO AGAIN; END; 02508000
|
|
IF Q = "5LISTA" THEN 02509000
|
|
BEGIN 02510000
|
|
SWITCHIT(LISTABIT); 02511000
|
|
GO AGAIN; 02513000
|
|
END; 02514000
|
|
IF Q = "5STUFF" THEN 02515000
|
|
BEGIN SWITCHIT(STUFFBIT); GO AGAIN; END; 02516000
|
|
GO WHATISIT; 02517000
|
|
LENGTH6: 02518000
|
|
IF Q = "6SEQER" THEN 02519000
|
|
BEGIN SWITCHIT(SEQERRBIT); GO AGAIN END; 02520000
|
|
IF Q = "6SINGL" THEN 02521000
|
|
BEGIN SWITCHIT(SINGLBIT); GO AGAIN END; 02522000
|
|
IF Q = "6SEQXE" THEN 02523000
|
|
BEGIN 02524000
|
|
SEQXEQTOG:=XMODE!2 AND XMODE! 4 OR SEQXEQTOG;%NEVER RESET. 02525000
|
|
IF BUILDLINE.[45:1] THEN BUILDLINE:=TRUE; 02526000
|
|
GO SKANAGAIN; 02527000
|
|
END; 02528000
|
|
IF Q = "6DEBUG" THEN 02529000
|
|
BEGIN 02530000
|
|
SWITCHIT(DEBUGBIT); 02531000
|
|
IF DEBUGTOG THEN 02533000
|
|
IF WOP[0]=0 THEN 02534000
|
|
BEGIN 02535000
|
|
FILL WOP[*] WITH 02536000
|
|
"LITC"," ", 02537000
|
|
"OPDC","DESC", 02538000
|
|
11, "NOP ", 12, "PRT ", 13, "DEL ", 16, "ADD ", 18, "PRL ", 19, "LNG ",02539000
|
|
21, "GEQ ", 22, "BBC ", 24, "INX ", 35, "LOR ", 37, "GTR ", 38, "BFC ",02540000
|
|
39, "RTN ", 40, "COC ", 48, "SUB ", 64, "MUL ", 67, "LND ", 68, "STD ",02541000
|
|
69, "NEQ ", 71, "XIT ", 72, "MKS ",128, "DIV ",130, "COM ",131, "LQV ",02542000
|
|
132, "SND ",133, "XCH ",134, "CHS ",167, "RTS ",168, "CDC ",260, "LOD ",02543000
|
|
261, "DUP ",278, "LBC ",294,"LFC ",322,"ZP1 ",384, "IDV ",532, "ISD", 02544000
|
|
533, "LEQ ",534, "BBW ",548, "ISN ",549, "LSS ",550, "BFW ",581, "EQL ",02545000
|
|
582, "SSP ",790, "LBU ",806, "LFU ",896, "RDV ", 02546000
|
|
1003,"SCI ",1004,"SAN ",1019,"SCS ", 02547000
|
|
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 02548000
|
|
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1023; 02549000
|
|
FILL COP[*] WITH % CHARACTER MODE MNEMONICS 02550000
|
|
0," ",0,0, 02551000
|
|
0,"EXC ", 2,"BSD ", 3,"BSS ", 4,"RDA ", 5,"TRW ",6,"SED ", 7,"TDA ", 02552000
|
|
12,"SDA ",13,"SSA ",14,"SFD ",15,"SRD ",18,"SES ",20,"TEQ ",21, "TNE ",02553000
|
|
22,"TEG ",23,"TGR ",24,"SRS ",25,"SFS ",28,"TEL ",29,"TLS ",30,"TAN ", 02554000
|
|
31,"BIT ",32,"INC ",33,"STC ",34,"SEC ",35,"CRF ",36,"JNC ",37,"JFC ", 02555000
|
|
38,"JNS ",39,"JFW ",40,"RCA ",41,"ENS ",42,"BNS ",43,"RSA ",44,"SCA ", 02556000
|
|
45,"JRC ",46,"TSA ",47,"JRV ",48,"CEQ ",49,"CNE ",50,"CEG ",51,"CGR ", 02557000
|
|
52,"BIT ",53,"BIR ",54,"OCV ",55,"ICV ",56,"CEL ",57,"CLS ",58,"FSU ", 02558000
|
|
59,"FAD ",60,"TRP ",61,"TRN ",62,"TRZ ",63,"TRS ",64,0,64,0,64,0,64,0, 02559000
|
|
64,0,64,0,64,0,64,0; 02560000
|
|
END; 02563000
|
|
GO AGAIN; 02564000
|
|
END; 02565000
|
|
IF Q = "6FORMA" THEN 02566000
|
|
BEGIN SWITCHIT(FORMATBIT); GO AGAIN; END; 02567000
|
|
GO WHATISIT; 02568000
|
|
LENGTH7: 02569000
|
|
% IF Q = "7INCLU" THEN 02570000
|
|
% BEGIN DOLLARCARD:=STARTINCLUDING; GO EXIT; END; 02571000
|
|
% IF Q = "7INCLN" THEN 02572000
|
|
% BEGIN SWITCHIT(NEWINCLBIT); GO AGAIN; END; 02573000
|
|
LENGTH8: % NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 02574000
|
|
LENGTH9: 02575000
|
|
IF Q = "9INTRI" THEN 02576000
|
|
BEGIN 02576500
|
|
INTOG:=XMODE!2 AND XMODE! 4 OR INTOG; % NEVER RESET. 02577000
|
|
GO SKANAGAIN; 02577250
|
|
END; 02577500
|
|
WHATISIT: 02578000
|
|
IF RESULT=3 THEN 02579000
|
|
BEGIN 02580000
|
|
BASENUM:=CONV(ACCUM[1],0,ACCUM[1].[12:6]); 02581000
|
|
TOTALNO:=-10; 02582000
|
|
NEWBASE:=TRUE; 02583000
|
|
GO SKANAGAIN; 02584000
|
|
END; 02585000
|
|
IF RESULT=2 THEN 02586000
|
|
BEGIN 02587000
|
|
IF Q = "1+0000" THEN 02588000
|
|
BEGIN 02589000
|
|
SKAN; 02590000
|
|
IF RESULT=3 THEN 02591000
|
|
ADDVALUE:=CONV(ACCUM[1],0,ACCUM[1].[12:6]) 02592000
|
|
ELSE FLAG(600); % NUMBER EXPECTED. 02593000
|
|
END; 02594000
|
|
GO SKANAGAIN; 02595000
|
|
END; 02596000
|
|
COMMENT DID NOT RECOGNIZE OPTION; 02597000
|
|
IF RESULT!1 THEN % NOT AN IDENTIFIER. 02598000
|
|
BEGIN FLAG(601); GO SKANAGAIN END; 02599000
|
|
SWITCHIT(USEROPINX); % USEROPINX MEANS A USER-DEFINED OPTION. 02600000
|
|
GO AGAIN; 02601000
|
|
EXIT: 02602000
|
|
LISTER:=DEBUGTOG OR LISTOG OR LISTATOG; 02602500
|
|
MOVE(10,DEFINEARRAY[0],ACCUM[0]); % RESTORE INFORMATION FOR 02602600
|
|
COUNT:=SCOUNT; RESULT:=SRESULT; % "TABLE" TO RESUME SCAN. 02602700
|
|
RESTORESEQNUM(LCR,INFO[LASTSEQROW,LASTSEQUENCE]); % FOR VOID TESTS 02602800
|
|
DOLLARTOG:=FALSE; 02603000
|
|
END DOLLARCARD; 02604000
|
|
COMMENT TABLE IS THE ROUTINE THAT MOST CODE IN THE COMPILER 02605000
|
|
USES WHEN IT IS DESIRED TO SCAN ANOTHER LOGICAL QUANTITY. 02606000
|
|
THE RESULT RETURNED IS THE CLASS OF THE ITEM DESIRED. 02607000
|
|
TABLE MAINTAINS THE VARIABLES I AND NXTELBT AND THE ARRAY 02608000
|
|
ELBAT. ELBAT AND I ARE PRINCIPAL VARIABLES USED FOR 02609000
|
|
COMUNICATION BETWEEN TABLE AND THE OUTSIDE WORLD. NXTELBT 02610000
|
|
IS ALMOST EXCLUSIVELY USED BY TABLE, ALTHOUGH AN OCCASION- 02611000
|
|
AL OTHER USE IS MADE IN ORDER TO FORGET THAT SOMETHING WAS 02612000
|
|
SCANNED. (SEE, FOR EXAMPLE, COMPOUNDTAIL). FOR FURTHER 02613000
|
|
GENERAL DISCUSSION SEE THE DECLARATION OF THESE VARIABLES. 02614000
|
|
THE PARAMETER P IS THE ACTUAL INDEX OF THE QUANTITY 02615000
|
|
DESIRED (USUALLY I-1,I, OR I+1). 02616000
|
|
THE GENERAL PLAN OF TABLE IS THIS: 02617000
|
|
I) IF P < NXTELBAT GO ON TO III). 02618000
|
|
II) PROCESS ONE QUANTITY. 02619000
|
|
A) SCAN. 02620000
|
|
B) TEST FOR IDENTIFIER, NUMBER, OR SPECIAL CHARACTER. 02621000
|
|
1) IDENTIFIER - LOOKUP IN DIRECTORY AND PROCESS 02622000
|
|
IN SPECIAL MANNER IF COMMENT OR DEFINED ID. 02623000
|
|
2) NUMBER - PROCESS INTEGER PART, FRACTIONAL PART, 02624000
|
|
AND EXPONENT PART. 02625000
|
|
3) TEST IF SPECIAL CHARACTER REQUIRES SPECIAL 02626000
|
|
PROCESSING - OTHERWISE GET ELBAT WORD FROM 02627000
|
|
SPECIAL. 02628000
|
|
C) LOAD ELBAT AND INCREMENT NXTELBT. 02629000
|
|
D) IF ELBAT IS FULL ADJUST ELBAT, NXTELBT, I, AND P. 02630000
|
|
E) GO BACK TO I). 02631000
|
|
III) RETURN WITH CLASS OF ELBAT[P]. 02632000
|
|
FURTHER DETAILS ARE GIVEN IN BODY OF TABLE. 02633000
|
|
; 02634000
|
|
INTEGER PROCEDURE TABLE(P); VALUE P; INTEGER P; 02635000
|
|
BEGIN 02636000
|
|
LABEL PERCENT,SPECIALCHAR,COMPLETE,COLON,DOT,ATSIGN,QUOTE, 02637000
|
|
STRNGXT,MOVEIT,ARGH,FINISHNUMBER, 02638000
|
|
SCANAGAIN,FPART,EPART,IPART,IDENT,ROSE,COMPOST,DOLLAR,RTPAREN,02639000
|
|
CROSSHATCH,NUMBEREND; 02640000
|
|
SWITCH SPECIALSWITCH:=PERCENT,DOLLAR,DOT,ATSIGN,COLON,QUOTE, 02641000
|
|
RTPAREN,CROSSHATCH; 02642000
|
|
SWITCH RESULTSWITCH:=IDENT,SPECIALCHAR,IPART; 02643000
|
|
WHILE P } NXTELBT 02644000
|
|
DO BEGIN 02645000
|
|
SCANAGAIN: 02646000
|
|
COUNT:=RESULT:=ACCUM[1]:=0; SCANNER; 02647000
|
|
GO RESULTSWITCH[RESULT]; 02648000
|
|
ARGH: 02649000
|
|
Q:=ACCUM[1]; FLAG(141); GO SCANAGAIN; 02650000
|
|
SPECIALCHAR: 02651000
|
|
GT1:=ACCUM[1].[18:6] - 2; 02652000
|
|
ENDTOG:=GT1 = 57 AND ENDTOG; 02653000
|
|
COMMENT OBTAIN ACTUAL CHARACTER FROM ACCUM; 02654000
|
|
T:=SPECIAL[GT1>1[42:41:3]]; 02655000
|
|
COMMENT NOTICE COMPRESSION TECHNIQUE USED TO SHORTEN TABLE OF 02656000
|
|
ELBAT WORDS FOR SPECIAL CHARACTERS; 02657000
|
|
IF GT1:=T.INCR = 0 THEN GO COMPLETE; 02658000
|
|
GO SPECIALSWITCH[GT1]; 02659000
|
|
COMMENT INCR FIELD OF SPECIAL CHARACTER IS NON-ZERO FOR SPECIAL 02660000
|
|
CHARACTERS REQUIRING SPECIAL HANDLING. INCR IS SWITCHED 02661000
|
|
ON TO OBTAIN DISCRIMINATION; 02662000
|
|
COLON: RESULT:=7; SCANNER; COMMENT ELIMINATE BLANKS - CHECKING 02663000
|
|
FOR := IN PLACE OF ~ ; 02664000
|
|
IF EXAMIN (NCR) = "=" THEN 02665000
|
|
BEGIN RESULT:=0; SCANNER; T:=SPECIAL[13] END; 02666000
|
|
RESULT:=2; GO COMPLETE; 02667000
|
|
DOT: 02668000
|
|
IF EXAMIN(NCR)>9 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<MYCLASS DO BOOLCOMP(T); 02983000
|
|
B:= IF OPCLASS=ANDOP THEN (B AND T) 02983500
|
|
ELSE IF OPCLASS=OROP THEN (B OR T) 02984000
|
|
ELSE (B EQV T); 02984500
|
|
END BOOLCOMP; 02985000
|
|
% 02985500
|
|
COMMENT#################################################################02986000
|
|
FORWARD DECLARATIONS 02986500
|
|
#######################################################################;02987000
|
|
% 02987500
|
|
PROCEDURE AEXP; FORWARD; 03001000
|
|
PROCEDURE ARITHSEC; FORWARD; 03002000
|
|
PROCEDURE SIMPARITH; FORWARD; 03003000
|
|
PROCEDURE ARITHCOMP; FORWARD; 03004000
|
|
PROCEDURE PRIMARY; FORWARD; 03005000
|
|
DEFINE BEXP = AEXP#; 03006000
|
|
INTEGER PROCEDURE EXPRSS; FORWARD; 03007000
|
|
PROCEDURE POLISHER(EXPECT); VALUE EXPECT; REAL EXPECT; FORWARD; 03009000
|
|
PROCEDURE INLINE; FORWARD; 03010000
|
|
PROCEDURE SUBHAND(FROM); VALUE FROM; BOOLEAN FROM; FORWARD; 03011000
|
|
PROCEDURE IOSTMT; FORWARD; 03012000
|
|
INTEGER PROCEDURE IFEXP; FORWARD; 03013000
|
|
PROCEDURE PARSE; FORWARD; 03014000
|
|
PROCEDURE DOT; FORWARD; 03015000
|
|
PROCEDURE IFCLAUSE; FORWARD; 03018000
|
|
INTEGER PROCEDURE GET(SYLLABLE);VALUE SYLLABLE; REAL SYLLABLE; FORWARD; 03019000
|
|
INTEGER PROCEDURE GNAT(L); VALUE L; REAL L; FORWARD; 03020000
|
|
PROCEDURE PANA; FORWARD; 03021000
|
|
PROCEDURE IFSTMT; FORWARD; 03022000
|
|
PROCEDURE GOGEN(LABELBAT,BRANCHTYPE); 03023000
|
|
VALUE LABELBAT,BRANCHTYPE; 03024000
|
|
REAL LABELBAT,BRANCHTYPE; FORWARD; 03025000
|
|
BOOLEAN PROCEDURE SIMPGO; FORWARD; 03026000
|
|
PROCEDURE STMT; FORWARD; 03027000
|
|
PROCEDURE EMIT(SYLLABLE); VALUE SYLLABLE; REAL SYLLABLE; FORWARD; 03028000
|
|
PROCEDURE PROCSTMT(FROM); VALUE FROM; BOOLEAN FROM; FORWARD; 03029000
|
|
PROCEDURE STRMPROCSTMT; FORWARD; 03030000
|
|
PROCEDURE CONSTANTCLEAN; FORWARD; 03034000
|
|
PROCEDURE SCATTERELBAT; FORWARD; 03035000
|
|
PROCEDURE EMITB(BRANCH,FROM,TOWARDS); VALUE BRANCH,FROM,TOWARDS; 03036000
|
|
INTEGER BRANCH,FROM,TOWARDS; FORWARD; 03037000
|
|
PROCEDURE VARIABLE(FROM); INTEGER FROM; FORWARD; 03038000
|
|
PROCEDURE IMPFUN; FORWARD; 03039000
|
|
PROCEDURE RIGHT(L); VALUE L; INTEGER L; FORWARD; 03039500
|
|
PROCEDURE STREAMSTMT; FORWARD; 03040000
|
|
PROCEDURE SEGMENTSTART(B);VALUE B;BOOLEAN B;FORWARD; 03041000
|
|
PROCEDURE SEGMENT(SIZE,FR); VALUE SIZE,FR; INTEGER SIZE,FR; FORWARD; 03042000
|
|
03043000
|
|
03044000
|
|
03045000
|
|
INTEGER PROCEDURE BAE; FORWARD; 03046000
|
|
PROCEDURE PROGDESCBLDR(A,B,C,D);VALUE A,B,C,D; 03047000
|
|
INTEGER A,C,D; BOOLEAN B; FORWARD; 03047100
|
|
PROCEDURE BANA; FORWARD; 03048000
|
|
PROCEDURE EMITNUM(A); VALUE A; REAL A; FORWARD; 03049000
|
|
PROCEDURE EMITD(A,B,T); VALUE A,B,T; INTEGER A,B,T; FORWARD; 03050000
|
|
INTEGER PROCEDURE GETSPACE(S,L); VALUE S,L; 03051000
|
|
INTEGER L; BOOLEAN S; FORWARD; 03051001
|
|
PROCEDURE FORSTMT; FORWARD; 03052000
|
|
REAL PROCEDURE TAKE(INDEX); VALUE INDEX; INTEGER INDEX; FORWARD; 03053000
|
|
PROCEDURE E; FORWARD; 03054000
|
|
PROCEDURE ENTRY(TYPE); VALUE TYPE;REAL TYPE; FORWARD; 03055000
|
|
PROCEDURE PUTNBUMP(P1); VALUE P1; REAL P1; FORWARD; 03057000
|
|
PROCEDURE JUMPCHKNX; FORWARD; 03058000
|
|
PROCEDURE JUMPCHKX; FORWARD; 03059000
|
|
PROCEDURE DBLSTMT; FORWARD; 03060000
|
|
PROCEDURE BLOCK(S); VALUE S; BOOLEAN S; FORWARD; 03067000
|
|
PROCEDURE PURGE(STOPPER);VALUE STOPPER;REAL STOPPER;FORWARD; 03068000
|
|
PROCEDURE ENTER(TYPEV); 03069000
|
|
VALUE TYPEV; 03070000
|
|
REAL TYPEV;FORWARD; 03071000
|
|
03072000
|
|
03073000
|
|
03074000
|
|
03075000
|
|
COMMENT THIS SECTION CONTAINS THE EMITTERS. THEY ARE THE AGENTS WHICH 04000000
|
|
ACTUALLY PRODUCE CODE AND DEBUGING OUTPUT; 04001000
|
|
COMMENT EMITL EMITS A LIT CALL; 04002000
|
|
PROCEDURE EMITL(LITERAL); VALUE LITERAL; INTEGER LITERAL; 04003000
|
|
EMIT(0&LITERAL[36:38:10]); 04004000
|
|
COMMENT EMITO EMIT AN OPERATOR; 04005000
|
|
PROCEDURE EMITO(OPERATOR); VALUE OPERATOR; INTEGER OPERATOR; 04006000
|
|
EMIT(1&OPERATOR[36:38:10]); 04007000
|
|
COMMENT EMITC IS PRIMARILY FOR USE BY STRMSTMT TO EMIT CHARACTOR MODE 04008000
|
|
OPERATORS. HOWEVER IT ALSO HANDLES DIA, DIB, AND TRB; 04009000
|
|
PROCEDURE EMITC(REPEAT,OPERATOR); VALUE REPEAT,OPERATOR; 04010000
|
|
INTEGER REPEAT,OPERATOR; 04011000
|
|
BEGIN 04012000
|
|
IF REPEAT}64 THEN FLAG(268); 04013000
|
|
EMIT(OPERATOR&REPEAT[36:42:6]) END EMITC; 04014000
|
|
COMMENT EMITV EMITS AN OPERAND CALL. IF THE ADDRESS IS FOR THE SECOND 04015000
|
|
HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 04016000
|
|
PROCEDURE EMITV(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; 04017000
|
|
BEGIN IF ADDRESS > 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]<KEY THEN N ELSE - N 04239000
|
|
WHILE N~N DIV 2 } 1 DO 04240000
|
|
IF Q[ I ]=KEY THEN GO TO L ; 04241000
|
|
I ~0; COMMENT ARGUMENT NOT FOUND,SEARCH=Q[1] ; 04242000
|
|
L: SEARCH~Q[ I +1] ; 04243000
|
|
END SEARCH ; 04244000
|
|
COMMENT B2D CONVERTS THE FOUR LOW ORDER OCTAL DIGITS TO BCD 04245000
|
|
CODE ; 04246000
|
|
ALPHA PROCEDURE B2D(B); VALUE B; REAL B; 04247000
|
|
B2D~0&B[45:45:3]&B[39:42:3]&B[33:39:3]&B[27:36:3] ; 04248000
|
|
COMMENT PACK IS A STREAM PROCEDURE WHICH INSERTS THE SYLLABLE 04265000
|
|
INTO THE EDOC ARRAY. THE SPECIFIC ELEMENT OF EDOC 04266000
|
|
IS PRECISILY = EDOC[(L DIV 4) DIV 128,(< DIV 4)MOD 128] 04267000
|
|
SYLLABLE POSITION=(L MOD 4 ), WHERE L IS THE SYLLABLE 04268000
|
|
NUMBER RELATIVE TO THE BEGINNING OF THE SEGMENT; 04269000
|
|
STREAM PROCEDURE PACK(WORD,POSITION,SYLLABLE); 04270000
|
|
VALUE POSITION,SYLLABLE; 04271000
|
|
BEGIN 04272000
|
|
DI~WORD ; DI ~ DI+POSITION ; DI ~ DI+POSITION; 04273000
|
|
SI~LOC SYLLABLE ; SI~SI+6; 04274000
|
|
DS~2 CHR ; 04275000
|
|
END PACK ; 04276000
|
|
COMMENT DEBUG PRINTS OUT OBJECT CODE IF "DEBUGN" IS SET; 04277000
|
|
PROCEDURE DEBUG(S); VALUE S; REAL S; 04277500
|
|
BEGIN REAL T1; 04278000
|
|
IF SINGLTOG THEN 04278500
|
|
WRITE(LINE,BUG,B2D(L), 04279000
|
|
IF STREAMTOG THEN 04279500
|
|
SEARCH(COP,S.[42:6]) 04280000
|
|
ELSE IF T1:=S.[46:2]=1 THEN SEARCH(WOP,S.[36:10]) 04280500
|
|
ELSE WOP[T1] , IF STREAMTOG THEN 04281000
|
|
B2D(S.[36:6]) ELSE IF T1=1 THEN WOP[1] 04281500
|
|
ELSE B2D(S.[36:10]),B2D(S)) 04282000
|
|
ELSE WRITE(LINE,BUG,B2D(L), 04282500
|
|
IF STREAMTOG THEN 04283000
|
|
SEARCH(COP,S.[42:6]) 04283500
|
|
ELSE IF T1:=S.[46:2]=1 THEN SEARCH(WOP,S.[36:10]) 04284000
|
|
ELSE WOP[T1] , IF STREAMTOG THEN 04284500
|
|
B2D(S.[36:6]) ELSE IF T1=1 THEN WOP[1] 04285000
|
|
ELSE B2D(S.[36:10]),B2D(S)); 04285500
|
|
END DEBUG; 04286000
|
|
COMMENT EMIT PLACES SYLLABLES INTO EDOC, CALLS DEBUG FOR 04288000
|
|
DEBUGGING OUTPUT ON THE PRINTER, AND CHECKS FOR SEGMENTS 04289000
|
|
GREATER THAN 4093 SYLLABLES. ; 04290000
|
|
PROCEDURE EMIT ( S ) ; VALUE S; REAL S ; 04291000
|
|
BEGIN 04292000
|
|
IF L < 4088 THEN 04293000
|
|
BEGIN 04294000
|
|
LINKTOG ~ TRUE; 04295000
|
|
PACK(CODE(L DIV 4+1),L.[46:2],S); 04296000
|
|
IF DEBUGTOG THEN DEBUG(S); 04297000
|
|
L~L+1; 04298000
|
|
END ELSE 04299000
|
|
BEGIN ERROR(200); L~1; END; 04300000
|
|
COMMENT 200 EMIT - SEGMENT GREATER THAN 4093 SYLLABLES *; 04301000
|
|
END EMIT ; 04302000
|
|
COMMENT EMITD EMITS THE DIA,DIB,TRB SEQUENCE OF CODE. THE 04305000
|
|
PREVIOUS SETTING OF THE G-H AND K-V REGISTERS IS COMPARED 04306000
|
|
THE CURRENT . IF THE G-H,K-V OR BOTH ARE ALREADY SET THEN 04307000
|
|
THE APPROIATE SYLLABLE(S) ARE OMITTED 04308000
|
|
IF 0 BITS ARE TO BE TRANSFERED THEN NO SYLLABLES ARE 04309000
|
|
EMITTED ; 04310000
|
|
PROCEDURE EMITD(A,B,T); VALUE A,B,T ; INTEGER A,B,T; 04311000
|
|
BEGIN LABEL EXIT,NORMAL; 04311010
|
|
REAL Q; 04311020
|
|
IF T = 15 THEN 04311030
|
|
BEGIN 04311040
|
|
IF A = 33 THEN Q ~ 512 04311050
|
|
ELSE IF A ! 18 THEN GO TO NORMAL; 04311060
|
|
IF B = 18 THEN Q ~ Q+256 04311070
|
|
ELSE IF B ! 33 THEN GO TO NORMAL; 04311080
|
|
EMITO(Q+197); COMMENT -- THIS GETS OUT FIXED FIELD; 04311090
|
|
GO TO EXIT; 04311100
|
|
END; 04311110
|
|
NORMAL: 04311120
|
|
IF T! 0 THEN 04312000
|
|
BEGIN 04313000
|
|
04314000
|
|
EMIT(((DIALA~A) DIV 6)|512 + ( A~ A MOD 6)| 64 + DIA); 04315000
|
|
04316000
|
|
EMIT(((DIALB~B) DIV 6)|512 + ( B~ B MOD 6)| 64 + DIB); 04317000
|
|
EMIT(TRB+64|T); 04318000
|
|
04319000
|
|
04320000
|
|
04321000
|
|
END EMITD ; 04322000
|
|
EXIT: END; 04322100
|
|
PROCEDURE EMITI(E,A,B); VALUE E,A,B; REAL E,A,B; 04500000
|
|
BEGIN LABEL EXIT,IS; 04501000
|
|
INTEGER S,T1,T2; 04502000
|
|
PROCEDURE EMIT21(E,B); VALUE E,B; 04503000
|
|
REAL E; 04504000
|
|
BOOLEAN B; 04505000
|
|
BEGIN IF E = 0 THEN 04506000
|
|
BEGIN IF B THEN EMITO(XCH); END 04507000
|
|
ELSE BEGIN GT1 ~ E.ADDRESS; 04508000
|
|
IF E ~ E.CLASS { INTID THEN 04509000
|
|
EMITV(GT1) 04521000
|
|
ELSE IF E { INTARRAYID THEN 04522000
|
|
EMITPAIR(GT1,LOD) ELSE 04523000
|
|
EMITN(GT1) 04524000
|
|
END 04525000
|
|
END; 04526000
|
|
IF B = 0 THEN 04526100
|
|
BEGIN EMIT21(E,FALSE); GO TO EXIT END; 04526200
|
|
IF STACKCT ! 0 THEN GO TO IS; 04527000
|
|
IF B = 15 THEN 04528000
|
|
BEGIN IF A = 33 THEN 04529000
|
|
BEGIN EMIT21(E,FALSE); 04530000
|
|
EMIT(0); EMITO(INX); 04531000
|
|
GO TO EXIT; 04532000
|
|
END; 04533000
|
|
IF A = 18 THEN 04534000
|
|
BEGIN EMIT(0); 04535000
|
|
EMIT21(E,TRUE); 04536000
|
|
EMITO(197); 04537000
|
|
GO TO EXIT; 04538000
|
|
END; 04539000
|
|
GO TO IS; 04540000
|
|
END; 04541000
|
|
IF B { 10 AND A+B = 48 THEN 04542000
|
|
BEGIN EMIT21(E,FALSE); 04543000
|
|
EMITL(2*B-1); 04544000
|
|
EMITO(LND); 04545000
|
|
GO TO EXIT; 04546000
|
|
END; 04547000
|
|
IS: IF (S ~ (48-A-B) MOD 6)+B { 39 THEN 04548000
|
|
BEGIN EMIT21(E,FALSE); 04549000
|
|
EMIT(T2~(T1~A DIV 6)|512+(A MOD 6)|64+DIA); 04550000
|
|
EMIT(((A+B-1) DIV 6 -T1+1)|512+64|S+37); 04551000
|
|
GO TO EXIT; 04552000
|
|
END; 04553000
|
|
EMIT(0); 04554000
|
|
EMIT21(E,TRUE); 04555000
|
|
EMITD(A,48-B,B); 04556000
|
|
04557000
|
|
EXIT: END; 04558000
|
|
COMMENT THIS SECTION CONTAINS MISCELLANEOUS SERVICE ROUTINES; 05000000
|
|
COMMENT STEPI AND STEPIT ARE SHORT CALLS ON TABLE; 05001000
|
|
PROCEDURE STEPIT; ELCLASS ~ TABLE(I~I+1); 05002000
|
|
INTEGER PROCEDURE STEPI; STEPI~ELCLASS~TABLE(I~I+1); 05003000
|
|
COMMENT TAKE FETCHS A WORD FROM INFO; 05004000
|
|
REAL PROCEDURE TAKE(INDEX); VALUE INDEX; INTEGER INDEX; 05005000
|
|
TAKE ~ INFO[INDEX.LINKR,INDEX.LINKC]; 05006000
|
|
COMMENT PUT PLACES A WORD INTO INFO; 05007000
|
|
PROCEDURE PUT(WORD,INDEX); VALUE WORD,INDEX; REAL WORD,INDEX; 05008000
|
|
INFO[INDEX.LINKR,INDEX.LINKC] ~ WORD; 05009000
|
|
COMMENT FLAG FLAGS ERROR MESSAGES, COUNTS THEM AND SUPRESS FUTURE 05010000
|
|
ERROR MESSAGES UNTIL THE COMPILER THINKS IT HAS RECOVERED;05011000
|
|
PROCEDURE FLAG(ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; 05012000
|
|
BEGIN 05013000
|
|
COMMENT WRITERROR IS THE STREAM PROCEDURE WHICH ACTUALLY PRODUCES 05014000
|
|
THE ERROR MESSAGE ON THE PRINTER; 05015000
|
|
STREAM PROCEDURE WRITERROR(ERRNUM,ACCUM,LINE,COUNT,LSTSEQ); 05016000
|
|
VALUE ERRNUM,COUNT; 05017000
|
|
BEGIN 05018000
|
|
DI ~ LINE; 44(DS~2LIT" "); COMMENT CLEAR BUFFER; 05019000
|
|
SI ~LSTSEQ;SI ~ SI-8; DS ~WDS; 05020000
|
|
SI ~ LINE; DS ~ 2 WDS; 05021000
|
|
4(DS ~ 2 LIT "XX"); COMMENT SET RIGHT MARGIN FLAG; 05022000
|
|
SI ~ LSTSEQ; DI ~ LSTSEQ; DI ~ DI-8; DS ~ WDS; 05023000
|
|
DI ~ LINE; DI ~ DI+8; COMMENT INDENT MESSAGE; 05024000
|
|
DS ~ 13 LIT "ERROR NUMBER "; 05025000
|
|
SI ~ LOC ERRNUM; DS ~ 3 DEC; COMMENT CONVERT ERRNUM; 05026000
|
|
DS ~ 4 LIT " -- "; 05027000
|
|
SI ~ ACCUM; SI ~ SI+3; DS ~ COUNT CHR; 05028000
|
|
COMMENT PLACE ALPHA IN BUFFER; 05029000
|
|
DS ~ LIT "." 05030000
|
|
END WRITERROR; 05031000
|
|
IF ERRORTOG THEN % DO NOTHING IF WE SUPPRESS MSSGS. 05032000
|
|
BEGIN 05033000
|
|
SPECTOG := FALSE; 05034000
|
|
ERRORCOUNT := ERRORCOUNT+1; COMMENT COUNT ERRORS; 05035000
|
|
IF NOT LISTER THEN 05036000
|
|
BEGIN 05037000
|
|
EDITLINE(LIN,FCR,L DIV 4,L.[46:2],MEDIUM,0); 05038000
|
|
MOVE(1,INFO[LASTSEQROW,LASTSEQUENCE],LIN[12]); 05039500
|
|
IF NOHEADING THEN DATIME; WRITELINE; 05039600
|
|
END; 05041000
|
|
COMMENT PRINT CARDIMAGE IF WE ARE NOT LISTING; 05042000
|
|
ACCUM[1] ~ Q; COMMENT RESTORE ACCUMULATOR; 05043000
|
|
WRITERROR(ERRNUM,ACCUM[1],LIN[*],Q.[12:6], 05044000
|
|
INFO[LASTSEQROW,LASTSEQUENCE]); 05045000
|
|
IF NOT NOHEADING THEN WRITELINE ; 05046000
|
|
ERRORTOG ~ FALSE; COMMENT INHIBIT MESSAGES; 05047000
|
|
IF PUNCHTOG THEN 05048000
|
|
BEGIN REAL T1,T2,T3,T4; LABEL L,L1,EXIT; 05049000
|
|
STREAM PROCEDURE P1(L,P); VALUE P; 05050000
|
|
BEGIN DI ~ L; 15(DS~8LIT" "); 05051000
|
|
SI ~ LOC P; DI~L; SI~SI+5; SKIP 3 SB; 05052000
|
|
5 05053000
|
|
(DS~3 RESET;3(IF SB THEN DS~SET ELSE DS~RESET;SKIP 1 SB)); 05054000
|
|
SI~P; 05055000
|
|
DI~DI+2; 2(8 05056000
|
|
(DS~3 RESET;3(IF SB THEN DS~SET ELSE DS~RESET;SKIP 1 SB)); 05057000
|
|
DS~LIT" ") END; 05058000
|
|
STREAM PROCEDURE P2(L,P); VALUE P; 05059000
|
|
BEGIN DI~L; DI ~DI+26;DS~LIT"0"; 05060000
|
|
SI~P; SI~SI-2; SKIP 1SB; 05061000
|
|
3 05062000
|
|
(DS~3 RESET;3(IF SB THEN DS~SET ELSE DS~RESET;SKIP 1 SB)); 05063000
|
|
END; 05064000
|
|
REAL STREAM PROCEDURE ABS(A); VALUE A; 05065000
|
|
BEGIN DI ~ LOC ABS; SI ~A; DS~ WDS;DI~DI-8; DS~RESET END; 05066000
|
|
STREAM PROCEDURE BITEDUST(X,N,ID,LINE,COUNT); VALUE ID,N,COUNT; 05067000
|
|
BEGIN LOCAL T,F,M; 05068000
|
|
DI~LOC F; SI~LINE; DS~WDS;DI~F; 05069000
|
|
SI~LOC ID;SI+SI+2;DS~ 6CHR; 57(DS~2 LIT" "); 05070000
|
|
SI ~ LOC COUNT ;SI~SI+8 ; 05071000
|
|
DI ~LOC H ; DS ~WDS ; 05071100
|
|
DI ~ LOC LINE ; SI ~ H; 05071200
|
|
SI~LOC X;SKIP 2 SB; 05072000
|
|
IF SB THEN 05073000
|
|
BEGIN SI~X; T~SI; 05074000
|
|
N( 05075000
|
|
DI~LOC F; SI~LINE; DS~WDS;DI~F; 05076000
|
|
SI~ LOC COUNT; SI~SI+6; 05077000
|
|
4 05078000
|
|
(DS~3 RESET;3(IF SB THEN DS~SET ELSE DS~RESET;SKIP 1 SB)); 05079000
|
|
DS~2 LIT" "; SI~COUNT; SI~SI+48;COUNT~SI; 05080000
|
|
SI~T; 05081000
|
|
6(2(8 05082000
|
|
(DS~3 RESET;3(IF SB THEN DS~SET ELSE DS~RESET;SKIP 1 SB)); 05083000
|
|
DS~ LIT" "); DS~LIT" " ); 05084000
|
|
DI ~ LOC LINE ; SI ~ H; 05085000
|
|
SI~T;SI~SI+48;T~SI);END END; 05086000
|
|
BITEDUST(ERRORCOUNT, 63 ,"PRT ",LINE, 21); 05087000
|
|
FOR T1~ 0 STEP 1 UNTIL 31DO BITEDUST(INFO[ T1,*],43,"INFO ",LINE,0); 05088000
|
|
BITEDUST( ELBAT[*],13,"ELBAT ",LINE,0); 05089000
|
|
BITEDUST(STACKHEAD[*],21,"STHEAD",LINE,0); 05090000
|
|
T1~MKABS(ERRNUM)-1; T3~T1; 05091000
|
|
L: T2~ABS(T3); 05092000
|
|
IF T2.[33:15]=0 THEN BEGIN T3~T2.[18:15]; 05093000
|
|
IF T3=0 THEN GO TO EXIT ELSE GO TO L END ; 05094000
|
|
T4 ~ IF T2.[33:15] < 512 THEN 0 ELSE T2.[33:15]&T2[30:10:2]; 05095000
|
|
L1:P1(LIN[0],T1);IF T1=T3 THEN BEGIN IF T!0 THEN P2(LIN[0],T4); 05096000
|
|
T1~T1-1; 05097000
|
|
WRITELINE; 05097500
|
|
T3~T2.[18:15];GO TO L END; 05098000
|
|
T1:=T1-1; WRITELINE; 05099000
|
|
GO TO L1; 05099100
|
|
EXIT: END ; 05100000
|
|
END END FLAG; 05101000
|
|
LABEL ENDOFITALL; 05101100
|
|
COMMENT ERR,IS THE SAME AS FLAG EXCEPT THAT IT MAKES AN ATTEMPT TO 05102000
|
|
RECOVER FROM ERROR SITUATIONS BY SEARCHING FOR A 05103000
|
|
SEMICOLON, END, OR BEGIN; 05104000
|
|
PROCEDURE ERR(ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; 05105000
|
|
BEGIN FLAG(ERRNUM); 05106000
|
|
I ~ I-1; 05107000
|
|
IF ERRNUM = 200 THEN I:=I/0;% SEGMENT TOO LARGE 05107100
|
|
IF ERRNUM = 611 THEN I:=I/0;% ERRMAX EXCEEDED 05107200
|
|
DO IF STEPI = BEGINV THEN STMT UNTIL 05108000
|
|
ELCLASS = ENDV OR ELCLASS = SEMICOLON END ERR; 05109000
|
|
DEFINE ERROR = ERR#; COMMENT ERROR IS A SYNONM FOR ERR; 05110000
|
|
COMMENT CHECKER IS A SMALL PROCEDURE THAT CHECKS TO SEE THAT THE 05111000
|
|
UPLEVEL ADDRESSING CONVENTIONS ARE OBEYED; 05112000
|
|
PROCEDURE CHECKER(ELBATWORD); VALUE ELBATWORD; REAL ELBATWORD; 05113000
|
|
BEGIN 05114000
|
|
IF MODE } 2 THEN 05115000
|
|
IF GT1 ~ ELBATWORD.LVL } FRSTLEVEL THEN 05116000
|
|
IF GT1 < SUBLEVEL THEN 05117000
|
|
IF ELBATWORD.[9:2] ! 1 05118000
|
|
THEN BEGIN FLAG(101); ERRORTOG ~ TRUE END 05119000
|
|
END CHECKER; 05120000
|
|
COMMENT GIT IS USED TO OBTAIN THE INDEX TO ADDITIONAL INFORMATION 05121000
|
|
GIVEN THE LINK TO THE ELBAT WORD; 05122000
|
|
INTEGER PROCEDURE GIT(L); VALUE L; REAL L; 05123000
|
|
GIT ~ TAKE(L).INCR+L.LINK; 05124000
|
|
COMMENT GNAT IS USED TO OBTAIN THE PRT ADDRESS OF A GIVEN DESCRIPTOR. 05125000
|
|
IF THE ADDRESS HAS NOT BEEN ASSIGNED, THEN IT USES 05126000
|
|
GETSPACE TO OBTAIN THE PRT ADDRESS; 05127000
|
|
INTEGER PROCEDURE GNAT(L); VALUE L; REAL L; 05128000
|
|
BEGIN 05129000
|
|
REAL A; 05130000
|
|
IF GNAT ~(A~TAKE(L)).ADDRESS=0 05131000
|
|
THEN PUT(A&(GNAT:=GETSPACE(TRUE,L.LINK+1))[16:37:11],L) 05132000
|
|
END GNAT; 05133000
|
|
REAL PROCEDURE TAKEFRST; 05188000
|
|
TAKEFRST ~ TAKE(ELBAT[I].LINK+ELBAT[I].INCR); 05189000
|
|
COMMENT STUFFF DIALS THE F-REGISTER INTO THE F-REGISTER FIELD OF A 05196000
|
|
DESCRIPTOR. THE DESCRIPTOR REMAINS ON THE TOP OF THE 05197000
|
|
STACK; 05198000
|
|
PROCEDURE STUFFF(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; 05199000
|
|
BEGIN 05200000
|
|
EMITPAIR(ADDRESS,LOD); 05201000
|
|
EMITN(512); 05202000
|
|
EMITD(33,18,15) END STUFFF; 05203000
|
|
COMMENT LOCAL IS USED TO SEE WHETHER OR NOT A LABEL IS LOCAL TO OUR 05204000
|
|
PRESENT CODE; 05205000
|
|
BOOLEAN PROCEDURE LOCAL(ELBATWORD); 05206000
|
|
VALUE ELBATWORD; REAL ELBATWORD; 05207000
|
|
BEGIN IF ELBATWORD.LVL = LEVEL AND 05208000
|
|
NOT BOOLEAN(ELBATWORD.FORMAL) THEN 05209000
|
|
LOCAL ~ TRUE END LOCAL; 05210000
|
|
COMMENT PASSFORMAT COMPILES CODE THAT PASSES A FORMAT. TWO ITEMS ARE 05211000
|
|
PASSED - THE ARRAY REFERENCING FORMAT TABLE AND THE 05212000
|
|
STARTING INDEX. THE ROUTINE HANDLES SUPERFORMATS ALSO; 05213000
|
|
PROCEDURE PASSFORMAT; 05214000
|
|
BEGIN INTEGER ADRES; 05215000
|
|
CHECKER(ELBAT[I]); 05216000
|
|
ADRES ~ ELBAT[I].ADDRESS; 05217000
|
|
IF BOOLEAN(ELBAT[I].FORMAL) 05218000
|
|
THEN BEGIN EMITV(ADRES); ADRES ~ ADRES-1 END 05219000
|
|
ELSE BEGIN 05220000
|
|
IF TABLE(I) = SUPERFRMTID 05221000
|
|
THEN EMITL(TAKEFRST) ELSE EMITL(ELBAT[I].INCR)05222000
|
|
END; 05223000
|
|
IF TABLE(I) = SUPERFRMTID 05224000
|
|
THEN BEGIN BANA; I ~ I-1; 05225000
|
|
EMITO(SSP); EMITO(ADD); EMITV(ADRES) END; 05226000
|
|
EMITPAIR(ADRES,LOD) END PASSFORMAT; 05227000
|
|
COMMENT STREAMWORDS EITHER RESERVES OR UNRESERVES STREAM RESERVED 05228000
|
|
WORDS - IT COMPLEMENTS THEIR STATE; 05229000
|
|
PROCEDURE STREAMWORDS; 05230000
|
|
BEGIN GT1 ~ 0; 05231000
|
|
DO BEGIN 05232000
|
|
INFO[1,GT1].LINK~STACKHEAD[GT2~(T~INFO[1,GT1]).ADDRESS];05233000
|
|
STACKHEAD[GT2] ~ T.LINK; 05234000
|
|
GT1 ~ GT1+2; 05235000
|
|
END UNTIL BOOLEAN(T.FORMAL) END STREAMWORDS; 05236000
|
|
05237000
|
|
05238000
|
|
05239000
|
|
05240000
|
|
05241000
|
|
05242000
|
|
05243000
|
|
05244000
|
|
PROCEDURE PROGDESCBLDR(PRTADR,SAV,SIZE,TYPE); 05245000
|
|
VALUE PRTADR,SAV,SIZE,TYPE; 05246000
|
|
INTEGER PRTADR,SIZE,TYPE; BOOLEAN SAV; 05247000
|
|
BEGIN PRTADR~PRTADR.[38:10]; 05247500
|
|
IF SAV THEN BEGIN PRT[PRTADR] ~ ( IF TYPE = LDES 05248000
|
|
THEN SIZE ELSE CORADR) 05248500
|
|
&SIZE[8:28:10]&TYPE[1:43:5]&3[6:46:2]; 05249000
|
|
IF TYPE!LDES THEN CORADR~CORADR+SIZE; 05250000
|
|
END 05251000
|
|
ELSE BEGIN PRT[PRTADR]~0&DISKADR[18:33:15]&SIZE[8:38:10] 05252000
|
|
&TYPE[1:43:5]&1[6:46:2]; 05253000
|
|
DISKADR~(SIZE+29) DIV 30+DISKADR; 05254000
|
|
END; 05254500
|
|
END PROGDESCBLDR; 05255000
|
|
COMMENT DOTSYNTAX ANALYSES THE SYNTAX OF A PARTIAL WORD DESIGNATOR. 05267000
|
|
IT REPORTS IF AN ERROR IS FOUND. IT RETURNS WITH THE 05268000
|
|
LITERALS INVOLVED; 05269000
|
|
BOOLEAN PROCEDURE DOTSYNTAX(FIRST,SECOND); 05270000
|
|
INTEGER FIRST,SECOND; 05271000
|
|
BEGIN 05272000
|
|
LABEL EXIT; 05273000
|
|
IF STEPI = LFTBRKET THEN 05274000
|
|
IF STEPI = LITNO THEN 05275000
|
|
IF STEPI = COLON THEN 05276000
|
|
IF STEPI = LITNO THEN 05277000
|
|
IF STEPI = RTBRKET THEN 05278000
|
|
COMMENT IF TESTS ARE PASSED THEN SYNTAX IS CORRECT; 05279000
|
|
IF (FIRST ~ ELBAT[I-3].ADDRESS) | 05280000
|
|
(SECOND ~ ELBAT[I-1].ADDRESS)!0 THEN 05281000
|
|
IF FIRST + SECOND { 48 THEN 05282000
|
|
COMMENT IF TESTS ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 05283000
|
|
GO TO EXIT; 05284000
|
|
ERR(114); COMMENT ERROR IF SYNTAX OR RANGE FAILS; 05285000
|
|
DOTSYNTAX ~ TRUE; EXIT: END DOTSYNTAX; 05286000
|
|
05287000
|
|
05288000
|
|
05289000
|
|
05290000
|
|
05291000
|
|
05292000
|
|
05293000
|
|
05294000
|
|
05295000
|
|
05296000
|
|
BOOLEAN PROCEDURE RANGE(LOWER,UPPER); 05297000
|
|
VALUE LOWER,UPPER; 05298000
|
|
REAL LOWER,UPPER; 05299000
|
|
COMMENT RANGE TESTS THE CLASS OF THE ITEM IN ELBAT[I] TO SEE IF 05300000
|
|
IT IS GREATER THAN OR EQUAL TO LOWER OR LESS THAN OR EQUAL TO 05301000
|
|
UPPER AND SETS RANGE TO TRUE OR FALSE ACCORDINGLY. THE ITEMS 05302000
|
|
CLASS MUST BE IN ELCLASS; 05303000
|
|
RANGE~ELCLASS } LOWER AND ELCLASS { UPPER; 05304000
|
|
COMMENT GET OBTAINS A SYLLABLE FROM EDOC, THE ARRAY INTO WHICH CODE IS 05305000
|
|
EMITTED; 05306000
|
|
INTEGER PROCEDURE GET(L); VALUE L; REAL L; 05307000
|
|
BEGIN 05308000
|
|
INTEGER STREAM PROCEDURE GETSYL(W,S); VALUE S; 05309000
|
|
BEGIN DI ~ LOC GETSYL; DI ~ DI+6; 05310000
|
|
SI ~ W; SI ~ SI+S; SI ~ SI+S; DS ~ 2 CHR END; 05311000
|
|
GET~GETSYL(CODE( L DIV 4+1),L.[46:2]); END GET; 05312000
|
|
COMMENT CALL SWITCH PERFORMS THE FINAL MESS OF GETTING A PROPER DE- 05313000
|
|
SCRIPTOR TO THE TOP OF THE STACK; 05314000
|
|
PROCEDURE CALLSWITCH(H); VALUE H; REAL H; 05315000
|
|
BEGIN EMITV(GNAT(H)); EMITO(PRTE); EMITO(LOD) END CALLSWITCH; 05316000
|
|
05317000
|
|
05318000
|
|
05319000
|
|
05320000
|
|
05321000
|
|
05322000
|
|
05323000
|
|
05324000
|
|
05325000
|
|
PROCEDURE WRITEPRT(PORS,N,GS); VALUE PORS,N,GS; INTEGER PORS,N,GS; 05325010
|
|
BEGIN 05325020
|
|
LABEL EXIT; 05325030
|
|
STREAM PROCEDURE FILLIT(LIN,PORS,CELL,N,ID); 05325040
|
|
VALUE PORS,CELL,N; 05325050
|
|
BEGIN 05325060
|
|
LOCAL COUNT; 05325070
|
|
LABEL M0,M1,M2,M3,M4,M5,M6,M7,XIT; 05325080
|
|
SI:=LOC PORS; SI:=SI+3; DI:=LIN; % "PRT" OR "STACK". 05325090
|
|
IF SC="P" THEN 05325100
|
|
BEGIN DS:=3 CHR; DS:=LIT"("; END 05325110
|
|
ELSE BEGIN 05325120
|
|
DS:=5 CHR; DS:=LIT"("; SI:=LOC CELL; SI:=SI+5; 05325130
|
|
IF SC}"6" THEN DS:=2 LIT"F-" ELSE DS:=2 LIT"F+"; 05325140
|
|
COUNT:=DI; DI:=LOC CELL; DI:=DI+4; 05325150
|
|
DS:=11 RESET; DI:=COUNT; 05325160
|
|
END; 05325170
|
|
SI:=LOC CELL; SI:=SI+4; TALLY:=4; % LOCATION. 05325180
|
|
3(IF SC="0" THEN % DONT PRINT LEADING ZEROES. 05325190
|
|
BEGIN SI:=SI+1; TALLY:=TALLY+63 END ELSE JUMP OUT); 05325200
|
|
COUNT:=TALLY; DS:=COUNT CHR; TALLY:=0; COUNT:=TALLY; 05325210
|
|
DS:=4 LIT") = "; CELL:=DI; % SAVE OUR PLACE. 05325220
|
|
CI:=CI+N; 05325230
|
|
GO M0; 05325240
|
|
GO M1; 05325250
|
|
GO M2; 05325260
|
|
GO M3; 05325270
|
|
GO M4; 05325280
|
|
GO M5; 05325290
|
|
GO M6; 05325300
|
|
GO M7; 05325310
|
|
M0: SI:=ID; SI:=SI+2; DI:=LOC COUNT; 05325320
|
|
DI:=DI+7; DS:=CHR; DI:=CELL; DS:=COUNT CHR; 05325330
|
|
GO XIT; 05325340
|
|
M1: DI:=CELL; DS:=19 LIT"*TEMPORARY STORAGE*"; GO XIT; 05325350
|
|
M2: DI:=CELL; 05325360
|
|
DS:=36 LIT"*LIST, LABEL, OR SEGMENT DESCRIPTOR*"; GO XIT; 05325370
|
|
M3: DI:=CELL; DS:=27 LIT"*CASE STATEMENT DESCRIPTOR*"; GO XIT; 05325380
|
|
M4: DI:=CELL; DS:=19 LIT"*FORMAT DESCRIPTOR*"; GO XIT; 05325390
|
|
M5: DI:=CELL; DS:=24 LIT"*OUTER BLOCK DESCRIPTOR*"; GO XIT; 05325400
|
|
M6: DI:=CELL; DS:=20 LIT"*SEGMENT DESCRIPTOR*"; GO XIT; 05325410
|
|
M7: DI:=CELL; DS:=18 LIT"*LABEL DESCRIPTOR*"; 05325420
|
|
XIT: 05325430
|
|
END FILLIT; 05325440
|
|
BLANKET(14,LIN); 05325450
|
|
IF N=1 THEN FILLIT(LIN,PORS,GS,0,ACCUM[1]) 05325460
|
|
ELSE IF N>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<FZERO THEN NESTCTR~GS+1; 05375100
|
|
IF 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: (<ARIT. EXP.>); 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: [<ARITH. EXP.>]; 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
|
|
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
|
|
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 <BOOSTRPROCID 14285000
|
|
THEN FLAG(004); 14286000
|
|
IF NOT SPECTOG THEN 14287000
|
|
FUNCTOG~TRUE; 14288000
|
|
CHKSOB 14289000
|
|
END END 14290000
|
|
ELSE 14291000
|
|
IF G=SAVEV OR G=0 THEN TYPEV~PROCID 14292000
|
|
ELSE 14293000
|
|
IF TYPEV~REALSTRPROCID+G<BOOPROCID OR 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
|
|
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
|
|
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 <IDMAX AND ELCLASS!LOCLID THEN BEGIN 16482100
|
|
DECLARELABEL; GO TO L2; END; 16482200
|
|
IF ELCLASS = LITNO OR ELCLASS = LOCLID AND TABLE(I+1) 16482300
|
|
= LFTPAREN THEN GO TO L1; 16482400
|
|
IF ELCLASS = LOCLID THEN GO TO L7; 16482500
|
|
L: ERR( 250 ); GO TO FINI ; 16483000
|
|
L1: NESTS; GO TO EXIT; 16484000
|
|
L2: LABELS; GO TO START; 16485000
|
|
L3: IFS; GO TO FINI; 16486000
|
|
L4: GOTOS; GO TO EXIT; 16487000
|
|
L5: 16488000
|
|
L6: I~I+1 ; COMPOUNDTAIL; GO TO FINI; 16489000
|
|
L7: INDEXS; GO TO EXIT; 16490000
|
|
L8: DSS; GO TO EXIT; 16491000
|
|
L9: SKIPS; GO TO EXIT; 16492000
|
|
L10: JUMPS; GO TO EXIT; 16493000
|
|
EXIT: STEPIT; 16494000
|
|
FINI: END STREAMSTMT; 16495000
|
|
MOVE(1,I,CODE(0)); 16495100
|
|
TIME1 ~ TIME(1); PROGRAM; 16495200
|
|
ENDOFITALL:END MAIN BLOCK 16495210
|
|
END. 16495300
|