1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-01-21 17:54:42 +00:00

12084 lines
1.1 MiB

%#######################################################################00005000=00001000=
% 00010000=00001010=
% B-5700 ESPOL COMPILER 00015000=00001020=
% MARK XVI.0.00 00020000=00001030=
% OCT 1, 1974 00025000=00001040=
% 00030000=00001050=
%#######################################################################00035000=00001060=
% 00040000=00001070=
COMMENT: * TITLE: B5500/B5700 MARK XVI SYSTEM RELEASE * 00045000=00001072=
* FILE ID: SYMBOL/ESPOL TAPE ID: SYMBOL1/FILE000 * 00050000=00001073=
* THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00055000=00001074=
* AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00060000=00001075=
* EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00065000=00001076=
* WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00070000=00001077=
* BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00075000=00001078=
* * 00080000=00001079=
* COPYRIGHT (C) 1971, 1972, 1974 * 00085000=00001080=
* BURROUGHS CORPORATION * 00090000=00001081=
* AA320206 AA393180 AA332366 *; 00095000=00001082=
00100000=00001110=
COMMENT#################################################################00105000=00001110=
ERROR MESSAGES 00110000=00001120=
########################################################################00115000=00001130=
% 00120000=00001140=
ERROR NUMBER ROUTINE:ERROR MESSAGE 00125000=00002000=
000 BLOCK: DECLARATION NOT FOLLOWED BY SEMICOLON. 00130000=00003000=
001 BLOCK: IDENTIFIER DECLARED TWICE IN SAME BLOCK. 00135000=00004000=
002 PROCEDUREDEC: SPECIFICATION PART CONTAINS 00140000=00005000=
IDENTIFIER NOT APPEARING IN 00145000=00006000=
FORMAL PARAMETER PART. 00150000=00007000=
003 BLOCK: NON-IDENTIFIER APPEARS IN IDENTIFIER 00155000=00008000=
LIST OF DECLARATION. 00160000=00009000=
004 PROCEDUREDEC: STREAM PROCEDURE DECLARATION 00165000=00010000=
PRECEDED BY ILLEGAL DECLARATOR. 00170000=00011000=
005 PROCEDUREDEC: PROCEDURE DECLARATION PRECEDED 00175000=00012000=
BY ILLEGAL DECLARATOR. 00180000=00013000=
006 PROCEDUREDEC: PROCEDURE IDENTIFIER USED BEFORE 00185000=00014000=
IN SAME BLOCK(NOT FORWARD). 00190000=00015000=
007 PROCEDUREDEC: PROCEDURE IDENTIFIER NOT FOLLOWED 00195000=00016000=
BY ( OR SEMICOLON IN PROCEDURE 00200000=00017000=
DECLARATION. 00205000=00018000=
008 PROCEDUREDEC: FORMAL PARAMETER LIST NOT FOLLOWED 00210000=00019000=
BY ). 00215000=00020000=
009 PROCEDUREDEC: FORMAL PARAMETER PART NOT FOLLOWED 00220000=00021000=
BY SEMICOLON. 00225000=00022000=
010 PROCEDUREDEC: VALUE PART CONTAINS IDENTIFIER 00230000=00023000=
WHICH DID NOT APPEAR IN FORMAL 00235000=00024000=
PARAPART. 00240000=00025000=
011 PROCEDUREDEC: VALUE PART NOT ENDED BY SEMICOLON. 00245000=00026000=
012 PROCEDUREDEC: MISSING OR ILLEGAL SPECIFICATION 00250000=00027000=
PART. 00255000=00028000=
013 PROCEDUREDEC: OWN USED IS ARRAY SPECIFICATION. 00260000=00029000=
014 PROCEDUREDEC: SAVE USED IN ARRAY SPECIFICATION. 00265000=00030000=
015 BLOCK: DECLARATION PRECEDED BY ILLEGAL DECLARATOR. 00270000=00031000=
016 ARRAYDEC: ARRAY ID IN DECLARATION NOT FOLLOWED 00275000=00032000=
BY [ . 00280000=00033000=
017 ARRAYDEC: LOWER BOUND IN ARRAY DEC NOT 00285000=00034000=
FOLLOWED BY : . 00290000=00035000=
018 ARRAYDEC: BOUND PAIR LIST NOT FOLLOWED BY ]. 00295000=00036000=
019 ARRAYSPEC: ILLEGAL LOWER BOUND DESIGNATOR IN 00300000=00037000=
ARRAY SPECIFICATION. 00305000=00038000=
020 BLOCK: OWN APPEARS IMMEDIATELY BEFORE 00310000=00039000=
IDENTIFIER(NO TYPE). 00315000=00040000=
021 BLOCK: SAVE APPEARS IMMEDIATELY BEFORE 00320000=00041000=
IDENTIFIER(NO TYPE). 00325000=00042000=
022 BLOCK: STREAM APPEARS IMMEDIATELY BEFORE 00330000=00043000=
IDENTIFIER(THE WORD PROCEDURE LEFT 00335000=00044000=
OUT). 00340000=00045000=
023 BLOCK: DECLARATOR PRECEDED ILLEGALLY BY 00345000=00046000=
ANOTHER DECLARATOR. 00350000=00047000=
024 PROCEDUREDEC: LABEL CANNOT BE PASSED TO FUNCTION. 00355000=00048000=
025 BLOCK: DECLARATOR OR SPECIFIER ILLEGALLY 00360000=00049000=
PRECEDED BY OWN OR SAVE OR SOME 00365000=00050000=
OTHER DECLARATOR. 00370000=00051000=
026 FILEDEC: MISSING ( IN FILE DEC. 00375000=00052000=
027 FILEDEC: NO. OF BUFFERS IN FILE DEC MUST BE 00380000=00053000=
AN UNSIGNED INTEGER. 00385000=00054000=
028 FILEDEC: ILLEGAL BUFFER PART OR SAVE FACTOR 00390000=00055000=
IN FILE DEC. 00395000=00056000=
029 FILEDEC: MISSING ) IN FILE DEC. 00400000=00057000=
030 PROCEDUREDEC: PROCEDURE TYPE AT ACTUAL DECLARATION 00405000=00058000=
TIME DIFFERENT THAN AT FORWARD DEC. 00410000=00059000=
031 LISTDEC: MISSING ( IN LISTDEC. 00415000=00060000=
032 FORMATDEC: MISSING ( IN FORMAT DEC. 00420000=00061000=
033 SWITCHDEC: SWITCH DEC DOES NOT HAVE ~ OR 00425000=00062000=
FORWARD AFTER IDENTIFIER. 00430000=00063000=
034 SWITCHFILEDEC:MISSING ~ AFTER FILED. 00435000=00064000=
035 SWITCHFILEDEC:NON FILE ID APPEARING IN DECLARATION 00440000=00065000=
OF SWITCHFILE. 00445000=00066000=
036 SUPERFORMATDEC:FORMAT ID NOT FOLLOWED BY ~ . 00450000=00067000=
037 SUPERFORMATDEC:MISSING ( AT START OF FORMATPHRASE . 00455000=00068000=
038 SUPERFORMATDEC:FORMAT SEGMENT >1022 WORDS. 00460000=00069000=
040 SEGMENT: SAVE CODE EXCEEDS 4080 WHICH KERNEL CAN H/L 00465000=00069100=
050 ANYWHERE: OUT OF RANGE OF C RELATIVE ADDRESSING FOR CONSTANT 00470000=00069500=
051 BLOCK : ILLEGAL F RELATIVE ADDRESS EXP IN DECLARATION 00475000=00069510=
052 BLOCK: PROCEDURE WHOSE BODY NOT A BLOCK 00480000=00069520=
053 ARRAYDEC: CANT FIND RIGHT BRACKET IN SAVE ARRAY DEC 00485000=00069530=
054 ARRAYDEC: FILL PART OF SAVE ARRAY DEC LONGER THAN SIZE 00490000=00069540=
056 ARRAYDEC: ILLEGAL DIMENSION INDICATOR IN ARRAY DEC 00495000=00069560=
057 SEGMENTSTART:SAVE STORAGE NOT ALLOWED WITH INTRINSIC OPTION 00500000=00069570=
098 IOSTMT: ILLEGAL SPECIFIER IN SCOPE STMT: MUST BE >=15. 00505000=00069580=
099 INLINE: EXTRA : IN STREAM HEAD. 00510000=00069590=
100 ANYWHERE: UNDECLARED IDENTIFIER. 00515000=00070000=
101 CHECKER: AN ATTEMPT HAS BEEN MADE TO ADDRESS AN 00520000=00071000=
IDENTIFIER WHICH IS LOCAL TO ONE PROCEDURE AND GLOBAL00525000=00072000=
TO ANOTHER. IF THE QUANTITY IS A PROCEDURE NAME OR 00530000=00073000=
AN OWN VARIABLE THIS RESTRICTION IS RELAXED. 00535000=00074000=
102 AEXP: CONDITIONAL EXPRESSION IS NOT OF ARITHMETIC TYPEH 00540000=00075000=
103 PRIMARY: PRIMARY MAY NOT BEGIN WITH A QUANTITY OF THIS 00545000=00076000=
TYPE. 00550000=00077000=
104 ANYWHERE: MISSING RIGHT PARENTHESIS. 00555000=00078000=
105 ANYWHERE: MISSING LEFT PARENTHESIS. 00560000=00079000=
106 PRIMARY: PRIMARY MAY NOT START WITH DECLARATOR. 00565000=00080000=
107 BEXP: THE EXPRESSION IS NOT OF BOOLEAN TYPE. 00570000=00081000=
108 EXPRSS: A RELATION MAY NOT HAVE CONDITIONAL EXPRESSIONS 00575000=00082000=
AS THE ARITHMETIC EXPRESSIONS. 00580000=00083000=
109 BOOSEC,SIMBOO, AND BOOCOMP: THE PRIMARY IS NOT BOOLEAN. 00585000=00084000=
110 BOOCOMP: A NON-BOOLEAN OPERATOR OCCURS IN A BOOLEAN 00590000=00085000=
EXPRESSION. 00595000=00086000=
111 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00600000=00087000=
TIONAL) MAY BEGIN WITH A QUANTITY OF THIS TYPE. 00605000=00088000=
112 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00610000=00089000=
TIONAL) MAY BEGIN WITH A DECLARATOR. 00615000=00090000=
113 PARSE: EITHER THE SYTAX OR THE RANGE OF THE LITERALS FOR 00620000=00091000=
A CONCATENATE OPERATOR IS INCORRECT. 00625000=00092000=
114 DOTSYNTAX: EITHER THE SYNTAX OR THE RANGE OF THE LITERALS00630000=00093000=
FOR A PARTIAL WORD DESIGNATOR IS INCORRECT. 00635000=00094000=
115 DEXP: THE EXPRESSION IS NOT OF DESIGNATIONAL TYPE. 00640000=00095000=
116 IFCLAUSE: MISSING THEN. 00645000=00096000=
117 BANA: MISSING LEFT BRAKET. 00650000=00097000=
118 BANA: MISSING RIGHT BRAKET. 00655000=00098000=
119 COMPOUNDTAIL: MISSING SEMICOLON OR END. 00660000=00099000=
120 COMPOUNDTAIL: MISSING END. 00665000=00100000=
121 ACTUALPARAPART: AN INDEXED FILE MAY BE PASSED BY NAME 00670000=00101000=
ONLY AND ONLY TO A STREAM PROCEDURE - THE STREAM 00675000=00102000=
PROCEDURE MAY NOT DO A RELEASE ON THIS TYPE PARA- 00680000=00103000=
METER. 00685000=00104000=
122 ACTUALPARAPART: STREAM PROCEDURE MAY NOT HAVE AN 00690000=00105000=
EXPRESSION PASSED TO IT BY NAME. 00695000=00106000=
123 ACTUALPARAPART: THE ACTUAL AND FORMAL PARAMETERS DO NOT 00700000=00107000=
AGREE AS TO TYPE. 00705000=00108000=
124 ACTUALPARAPART: ACTUAL AND FORMAL ARRAYS DO NOT HAVE SAME00710000=00109000=
NUMBER OF DIMENSIONS. 00715000=00110000=
125 ACTUALPARAPART: STREAM PROCEDURES MAY NOT BE PASSED AS A 00720000=00111000=
PARAMETER TO A PROCEDURE. 00725000=00112000=
126 ACTUALPARAPART: NO ACTUAL PARAMETER MAY BEGIN WITH A 00730000=00113000=
QUANTITY OF THIS TYPE. 00735000=00114000=
127 ACTUALPARAPART: THIS TYPE QUANTITY MAY NOT BE PASSED TO A00740000=00115000=
STREAM PROCEDURE. 00745000=00116000=
128 ACTUALPARAPART: EITHER ACTUAL AND FORMAL PARAMETERS DO 00750000=00117000=
NOT AGREE AS TO NUMBER, OR EXTRA RIGHT PARENTHESIS. 00755000=00118000=
129 ACTUALPARAPART: ILLEGAL PARAMETER DELIMITER. 00760000=00119000=
130 RELSESTMT: NO FILE NAME. 00765000=00120000=
131 DOSTMT: MISSING UNTIL. 00770000=00121000=
132 WHILESTMT: MISSING DO. 00775000=00122000=
133 LABELR: MISSING C OLON. 00780000=00123000=
134 LABELR: THE LABEL WAS NOT DECLARED IN THIS BLOCK. 00785000=00124000=
135 LABELR: THE LABEL HAS ALREADY OCCURED. 00790000=00125000=
136 FORMATPHRASE: IMPROPER FORMAT EDITING PHRASE. 00795000=00126000=
137 FORMATPHRASE: A FORMAT EDITING PHRASE DOES NOT HAVE AN 00800000=00127000=
INTEGER WHERE AN INTEGER IS REQUIRED. 00805000=00128000=
138 FORMATPHRASE: THE WIDTH IS TOO SMALL IN E OR F EDITING 00810000=00129000=
PHRASE. 00815000=00130000=
139 TABLE: DEFINE IS NESTED MORE THAN EIGHT DEEP. 00820000=00131000=
140 NEXTENT: AN INTEGER IN A FORMAT IS GREATER THAN 1023. 00825000=00132000=
141 SCANNER: INTEGER OR IDENTIFIER HAS MORE THAN 63 00830000=00133000=
CHARACTORS. 00835000=00134000=
142 DEFINEGEN: A DEFINE CONTAINS MORE THAN 2047 CHARACTORS 00840000=00135000=
(BLANK SUPPRESSED). 00845000=00136000=
143 COMPOUNDTAIL: EXTRA END. 00850000=00137000=
144 STMT: NO STATEMENT MAY START WITH THIS TYPE IDENTIFIER. 00855000=00138000=
145 STMT: NO STATEMENT MAY START WITH THIS TYPE QUANTITY. 00860000=00139000=
146 STMT: NO STATEMENT MAY START WITH A DECLARATOR - MAY BE 00865000=00140000=
A MISSING END OF A PROCEDURE OR A MISPLACED 00870000=00141000=
DECLARATION. 00875000=00142000=
147 SWITCHGEN: MORE THAN 256 EXPRESSIONS IN A SWITCH 00880000=00143000=
DECLARATION. 00885000=00144000=
148 GETSPACE: MORE THAN 1023 PROGRAM REFERENCE TABLE CELLS 00890000=00145000=
ARE REQUIRED FOR THIS PROGRAM. 00895000=00146000=
149 GETSPACE: MORE THAN 255 STACK CELLS ARE REQUIRED FOR THIS00900000=00147000=
PROCEDURE. 00905000=00148000=
150 ACTUALPARAPART: CONSTANTS MAY NOT BE PASSED BY NAME TO 00910000=00149000=
STREAM PROCEDURES. 00915000=00150000=
151 FORSTMT: IMPROPER FOR INDEX VARIABLE. 00920000=00151000=
152 FORSTMT: MISSING LEFT ARROW FOLLOWING INDEX VARIABLE. 00925000=00152000=
153 FORSTMT: MISSING UNTIL OR WHILE IN STEP ELEMENT. 00930000=00153000=
154 FORSTMT: MISSING DO IN FOR CLAUSE. 00935000=00154000=
155 IFEXP: MISSING ELSE 00940000=00155000=
156 LISTELEMENT: A DESIGNATIONAL EXPRESSION MAY NOT BE A LIST00945000=00156000=
ELEMENT. 00950000=00157000=
157 LISTELEMENT: A ROW DESIGNATOR MAY NOT BE A LIST ELEMENT. 00955000=00158000=
158 LISTELEMENT: MISSING RIGHT BRAKET IN GROUP OF ELEMENTS 00960000=00159000=
159 PROCSTMT: ILLEGAL USE OF PROCEDURE OR FUNCTION IDENTIFIER00965000=00160000=
160 PURGE: DECLARED LABEL DOES NOT OCCUR. 00970000=00161000=
161 PURGE: DECLARED FORWARD PROCEDURE DOES NOT OCCUR. 00975000=00162000=
163 ZIPSTMT: MISSING COMMA IN ZIP STATEMENT 00980000=00163000=
163 FORMATPHRASE: THE WIDTH OF A FIELD IS MORE THAN 63. 00985000=00164000=
200 EMIT: SEGMENT TOO LARGE ( > 4093SYLLABLES). 00990000=00165000=
201 SIMPLE VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT-MOST 00995000=00166000=
IN A LEFT PART LIST. 01000000=00167000=
202 SIMPLE VARIABLE: MISSING . OR ~ . 01005000=00168000=
203 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS IN A ROW 01010000=00169000=
DESIGNATOR. 01015000=00170000=
204 SUBSCRIPTED VARIABLE: MISSING ] IN A ROW DESIGNATOR. 01020000=00171000=
205 SUBSCRIPTED VARIABLE: A ROW DESIGNATOR APPEARS OUTSIDE OF 01025000=00172000=
AN ACTUAL PARAMETER LIST OR FILL STATEMENT. 01030000=00173000=
206 SUBSCRIPTED VARIABLE: MISSING ]. 01035000=00174000=
207 SUBSCRIPTED VARIABLE: MISSING [. 01040000=00175000=
208 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS. 01045000=00176000=
209 SUBSCRIPTED VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT- 01050000=00177000=
MOST IN A LEFT PART LIST. 01055000=00178000=
210 SUBSCRIPTED VARIABLE: MISSING , OR ~ . 01060000=00179000=
211 VARIABLE: PROCEDURE ID USED OUTSIDE OF SCOPE IN LEFT PART.01065000=00180000=
250 STREAM STMT:ILLEGAL STREAM STATEMENT. 01070000=00181000=
251 ANY STREAM STMT PROCEDURE: MISSING ~. 01075000=00182000=
252 INDEX: MISSING + OR - . 01080000=00183000=
253 INDEX: MISSING NUMBER OR STREAM VARIABLE. 01085000=00184000=
254 EMITC: NUMBER>63 OR NUMBER OF LABELS+LOCALS+FORMALS>63. 01090000=00185000=
255 DSS: MISSING STRING IN DS~ LIT STATEMENT. 01095000=00186000=
256 RELEASES: MISSING PARENTHESIS OR FILE IDENTIFIER IS NOT 01100000=00187000=
A FORMAL PARAMETER. 01105000=00188000=
257 GOTOS,LABELS,OR JUMPS: LABEL SPECIFIED IS NOT ON THE SAME 01110000=00189000=
NEST LEVEL AS A PRECEDING APPEARANCE OF THE 01115000=00190000=
LABEL. 01120000=00191000=
258 LABELS: MISSING :. 01125000=00192000=
259 LABELS: LABEL APPEARS MORE THAN ONCE. 01130000=00193000=
260 GOTOS: MISSING LABEL IN A GO TO OR JUMP OUT TO STATEMENT. 01135000=00194000=
261 JUMPS: MISSING OUT IN JUMP OUT STATEMENT. 01140000=00195000=
262 NESTS: MISSING PARENTHESIS. 01145000=00196000=
263 IFS:MISSING SC IN IF STATEMENT. 01150000=00197000=
264 IFS: MISSING RELATIONAL IN IF STATEMENT. 01155000=00198000=
265 IFS: MISSING ALPHA,DC OR STRING IN IF STATEMENT. 01160000=00199000=
266 IFS: MISSING THEN INIF STATEMENT. 01165000=00200000=
267 FREDFIX: THERE ARE GO TO STATEMENTS IN WHICH THE LABEL IS 01170000=00201000=
UNDEFINED. 01175000=00202000=
268 EMITC: A REPEAT INDEX >=64 WAS SPECIFIED OR TOO MANY 01180000=00203000=
FORMAL PARAMETERS,LOCALS AND LABELS. 01185000=00204000=
269 TABLE: A CONSTANT IS SPECIFIED WHICH IS TOO LARGE 01190000=00205000=
OR TOO SMALL. 01195000=00206000=
281 DBLSTMT: MISSING (. 01200000=00207000=
282 DBLSTMT: TOO MANY OPERATORS. 01205000=00208000=
283 DBLSTMT: TOO MANY OPERANDS. 01210000=00209000=
284 DBLSTMT: MISSING , . 01215000=00210000=
285 DBLSTMT: MISSING ) . 01220000=00211000=
300 FILLSTMT: THE IDENTIFIER FOLLOWING "FILL" IS NOT 01225000=00212000=
AN ARRAY IDENTIFIER. 01230000=00213000=
301 FILLSTMT: MISSING "WITH" IN FILL STATEMENT. 01235000=00214000=
302 FILLSTMT: IMPROPER FILL ELEMENT. 01240000=00215000=
303 FILLSTMT: NON-OCTAL CHARACTER IN OCTAL FILL. 01245000=00216000=
304 FILLSTMT: IMPROPER ARRAY ROW DESIGNATOR IN FILL. 01250000=00217000=
305 FILLSTMT: DATA IN FILL EXCEEDS 1023 WORDS. 01255000=00218000=
306 FILLSTMT: ODD NUMBER OF PARENTHESES IN FILL. 01260000=00218110=
400 MERRIMAC:MISSING FILE ID IN MONITOR DEC. 01265000=00219000=
401 MERRIMAC:MISSING LEFT PARENTHESIS IN MONITOR DEC. 01270000=00220000=
402 MERRIMAC:IMPROPER SUBSCRIPT FOR MONITOR LIST ELEMENT. 01275000=00221000=
403 MERRIMAC:IMPROPER SUBSCRIPT EXPRESSION DELIMITER IN 01280000=00222000=
MONITOR LIST ELEMENT. 01285000=00223000=
404 MERRIMAC:IMPROPER NUMBER OF SUBSCRIPTS IN MONITOR LIST 01290000=00224000=
ELEMENT. 01295000=00225000=
405 MERRIMAC:LABEL OR SWITCH MONITORED AT IMPROPER LAVEL. 01300000=00226000=
406 MERRIMAC:IMPROPER MONITOR LIST ELEMENT. 01305000=00227000=
407 MERRIMAC:MISSING RIGHT PARENTHESIS IN MONITOR DECLARATION.01310000=00228000=
408 MERRIMAC:IMPROPER MONITOR DECLARATION DELIMITER. 01315000=00229000=
409 DMUP:MISSING FILE IDENTIFIER IN DUMP DECLARATION. 01320000=00230000=
410 DMUP:MISSING LEFT PARENTHESIS IN DUMP DECLARATION. 01325000=00231000=
411 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF01330000=00232000=
SUBSCRIPTS. 01335000=00233000=
412 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF01340000=00234000=
SUBSCRIPTS. 01345000=00235000=
413 DMUP:IMPROPER ARRAY DUMP LIST ELEMENT. 01350000=00236000=
414 DMUP:ILLEGAL DUMP LIST ELEMENT. 01355000=00237000=
415 DMUP:MORE THAN 100 LABELS APPEAR AS DUMP LIST ELEMENTS 01360000=00238000=
IN ONE DUMP DECLARATION. 01365000=00239000=
416 DMUP:ILLEGAL DUMP LIST ELEMENT DELIMITER. 01370000=00240000=
417 DMUP:MISSING DUMP LABEL IN DUMP DECLARATION. 01375000=00241000=
418 DMUP:MISSING COLON IN DUMP DECLARATION. 01380000=00242000=
419 DMUP:IMPROPER DUMP DECLARATION DELIMITER. 01385000=00243000=
420 READSTMT:MISSING LEFT PARENTHESIS IN READ STATEMENT. 01390000=00244000=
421 READSTMT:MISSING LEFT PARENTHESIS IN READ REVERSE 01395000=00245000=
STATEMENT. 01400000=00246000=
422 READSTMT:MISSING FILE IN READ STATEMENT. 01405000=00247000=
423 READSTMT:IMPROPER RELEASE INDICATOR. 01410000=00248000=
424 READSTMT:IMPROPER FILE DELIMITER IN READ STATEMENT 01415000=00249000=
425 READSTMT:IMPROPER FORMAT DELIMITER IN READ STATEMENT. 01420000=00250000=
426 READSTMT:IMPROPER DELIMITER FOR SECOND PARAMETER IN READ 01425000=00251000=
STATEMENT. 01430000=00252000=
427 READSTMT:IMPROPER ROW DESIGNATOR IN READ STATEMENT. 01435000=00253000=
428 READSTMT:IMPROPER ROW DESIGNATOR DELIMITER IN READ 01440000=00254000=
STATEMENT. 01445000=00255000=
429 READSTMT:MISSING ROW DESIGNATOR IN READ STATEMENT. 01450000=00256000=
430 READSTMT:IMPROPER DELIMITER PRECEEDING THE LIST IN A READ 01455000=00257000=
STATEMENT. 01460000=00258000=
431 HANDLETHETAILENDOFAREADORSPACESTATEMENT:IMPROPER END OF 01465000=00259000=
FILE LABEL IN READ OR SPACE STATEMENT. 01470000=00260000=
432 HANDLETHETAILENDOFAREADORSPACESTATEMENT:IMPROPER PARITY 01475000=00261000=
LABEL IN READ OR SPACE STATEMENT. 01480000=00262000=
433 HANDLETHETAILENDOFAREADORSPACESTATEMENT:MISSING RIGHT 01485000=00263000=
BRACKET IN READ OR SPACE STATEMENT. 01490000=00264000=
434 SPACESTMT:MISSING LEFT PARENTHESIS IN SPACE STATEMENT. 01495000=00265000=
435 SPACESTMT:IMPROPER FILE IDENTIFIER IN SPACE STATEMENT. 01500000=00266000=
436 SPACESTMT:MISSING COMMA IN SPACE STATEMENT. 01505000=00267000=
437 SPACESTMT:MISSING RIGHT PARENTHESIS IN SPACE STATEMENT. 01510000=00268000=
438 WRITESTMT:MISSING LEFT PARENTHESIS IN A WRITE STATEMENT. 01515000=00269000=
439 WRITESTMT:IMPROPER FILE IDENTIFIER IN A WRITE STATEMENT. 01520000=00270000=
440 WRITESTMT:IMPROPER DELIMITER FOR FIRST PARAMETER IN A 01525000=00271000=
WRITE STATEMENT. 01530000=00272000=
441 WRITESTMT:MISSING RIGHT BRACKET IN CARRIAGE CONTROL PART 01535000=00273000=
OF A WRITE STATEMENT. 01540000=00274000=
442 WRITESTMT:ILLEGAL CARRIAGE CONTROL DELIMITER IN A WRITE 01545000=00275000=
STATEMENT. 01550000=00276000=
443 WRITESTMT:IMPROPER SECOND PARAMETER DELIMITER IN WRITE 01555000=00277000=
STATEMENT. 01560000=00278000=
444 WRITESTMT:IMPROPER ROW DESIGNATOR IN A WRITE STATEMENT. 01565000=00279000=
445 WRITESTMT:MISSING RIGHT PARENTHESIS AFTER A ROW DESIGNATOR01570000=00280000=
IN A WRITE STATEMENT. 01575000=00281000=
446 WRITESTMT:MISSING ROW DESIGNATOR IN A WRITE STATEMENT. 01580000=00282000=
447 WRITESTMT:IMPROPER DELIMITER PRECEEDING A LIST IN A WRITE 01585000=00283000=
STATEMENT. 01590000=00284000=
448 WRITESTMT:IMPROPER LIST DELIMITER IN A WRITE STATEMENT. 01595000=00285000=
449 READSTMT:IMPROPER LIST DELIMITER IN A READ STATEMENT. 01600000=00286000=
450 LOCKSTMT:MISSING LEFT PARENTHESIS IN A LOCK STATEMENT. 01605000=00287000=
451 LOCKSTMT:IMPROPER FILE PART IN A LOCK STATEMENT. 01610000=00288000=
452 LOCKSTMT:MISSING COMMA IN A LOCK STATEMENT. 01615000=00289000=
453 LOCKSTMT:IMPROPER UNIT DISPOSITION PART IN A LOCK 01620000=00290000=
STATEMENT. 01625000=00291000=
454 LOCKSTMT:MISSING RIGHT PARENTHESIS IN A LOCK STATEMENT. 01630000=00292000=
455 CLOSESTMT:MISSING LEFT PARENTHESIS IN A CLOSE STATEMENT. 01635000=00293000=
456 CLOSESTMT:IMPROPER FILE PART IN A CLOSE STATEMENT. 01640000=00294000=
457 CLOSESTMT:MISSING COMMA IN A CLOSE STATEMENT. 01645000=00295000=
458 CLOSESTMT:IMPROPER UNIT DISPOSITION PART IN A CLOSE 01650000=00296000=
STATEMENT. 01655000=00297000=
459 CLOSESTMT:MISSING RIGHT PARENTHESIS IN A CLOSE STATEMENT. 01660000=00298000=
460 RWNDSTMT:MISSING LEFT PARENTHESIS IN A REWIND STATEMENT. 01665000=00299000=
461 RWNDSTMT:IMPROPER FILE PART IN A REWIND STATEMENT. 01670000=00300000=
462 RWNDSTMT:MISSING RIGHT PARENTHESIS IN A REWIND STATEMENT. 01675000=00301000=
463 BLOCK:A MONITOR DECLARATION APPEARS IN THE SPECIFICATION 01680000=00302000=
PART OF A PROCEDURE. 01685000=00303000=
464 BLOCK:A DUMP DECLARATION APPEARS IN THE SPECIFICATION PART01690000=00304000=
OF A PROCEDURE. 01695000=00305000=
465 INLINE: MISSING PARAMETER IDENTIFIER IN INLINE STREAM 01700000=00305001=
STATEMENT PARAMETER LIST. 01705000=00305002=
500 .ID: NEEDS DOUBLE PERIOD FOR PRTE IF PAST 512 01710000=00305100=
520 TABLE: STRING LONGER THAN ONE WORD (48 BITS). 01715000=00305200=
521 TABLE: STRING CONTAINS A NON-PERMISSIBLE CHARACTER. 01720000=00305300=
600 DOLLARCARD: NUMBER EXPECTED. 01725000=00400000=
601 DOLLARCARD: OPTION IDENTIFIER EXPECTED. 01730000=00401000=
602 DOLLARCARD: TOO MANY USER-DEFINED OPTIONS. 01735000=00403000=
603 DOLLARCARD: UNRECOGNIZED WORD OR CHARACTER. 01740000=00404000=
604 DOLLARCARD: MISMATCHED PARENTHESES. 01745000=00405000=
605 DOLLARCARD: $ IN CARD COLUMN 1 FOR OMIT CARD 01750000=00406000=
610 READACARD: SEQUENCE ERROR. 01755000=00410000=
611 READACARD: ERROR LIMIT HAS BEEN EXCEEDED. 01760000=00411000=
; 01765000=00490000=
BEGIN 01770000=00500000=
COMMENT OUTERMOST BLOCK; 01775000=00500000=
INTEGER 01780000=00501000=
ERRORCOUNT; COMMENT NUMBER OF ERROR MSGS. MCP WILL TYPE 01790000=00501000=
SYNTX ERR AT EOJ IF THIS IS NON-ZERO. MUST BE @R+25; 01795000=00502000=
INTEGER 01800000=00503000=
SAVETIME; COMMENT SAVE-FACTOR FOR CODE FILE, GIVEN BY MCP. 01810000=00503000=
IF COMPILE & GO =0, FOR SYNTAX, =-1. MUST BE AT R+26;01815000=00504000=
INTEGER 01820000=00504100=
CARDNUMBER; % SEQ # OF CARD BEING PROCESSED. 01825000=00504100=
INTEGER 01830000=00504150=
CARDCOUNT; % NUMBER OF CARDS PROCESSED. 01835000=00504150=
BOOLEAN 01840000=00504700=
BUILDLINE; 01845000=00504700=
COMMENT RR1-RR11 ARE USED IN SOME PROCEDURES IN 01850000=00505000=
PLACE OF LOCALS TO SAVE STACK SPACE; 01855000=00506000=
REAL 01860000=00507000=
RR1, 01865000=00507000=
RR2, 01870000=00507000=
RR3, 01875000=00507000=
RR4, 01880000=00507000=
RR5, 01885000=00507000=
RR6, 01890000=00507000=
RR7, 01895000=00507000=
RR8, 01900000=00507000=
RR9, 01905000=00507000=
RR10, 01910000=00507000=
RR11; 01915000=00507000=
02000000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02000100
%% STREAM PROCEDURE EMULATION & BIC TRANSLATION MODULE %%02000200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02000300
02000400
DEFINE 02000500
WOFF = [14:15] #, % STREAM INDEX WORD OFFSET 02000600
COFF = [17:3] #, % STREAM INDEX CHAR OFFSET 02000700
STREAMLOCALS = ARRAY REFERENCE MBASE, SBASE[0] #; 02000800
02015000
REAL 02015100
AREG, % STREAM SOURCE WORD BUFFER 02015200
YREG, % STREAM SOURCE CHAR BUFFER 02015300
MREG, % STREAM SOURCE WORD INDEX 02015400
GREG, % STREAM SOURCE CHAR INDEX 02015500
HREG, % STREAM SOURCE BIT INDEX 02015600
BREG, % STREAM DEST WORD 02015700
ZREG, % STREAM DEST CHAR BUFFER 02015800
NREG, % STREAM DEST ALIGNMENT INDEX 02015900
SREG, % STREAM DEST WORD INDEX 02016000
KREG, % STREAM DEST CHAR INDEX 02016100
VREG, % STREAM DEST BIT INDEX 02016200
TALLY; % STREAM TALLY REGISTER 02016300
02017000
BOOLEAN 02017100
TFFF; % TRUE/FALSE FLIP-FLOP 02017200
02018000
ARRAY 02018100
STREAMTEMPS[0:15], % STREAM TEMP SOURCE 02018200
STREAMTEMPD[0:15], % STREAM TEMP DESTINATION 02018300
EBCDICBUFF[0:21]; % EBCDIC I/O BUFFER 02018400
02030000
VALUE ARRAY 02030100
BICCOLLATE ( % INDEX BY INTERNAL CODE TO GET COLLATION VALUE 02030200
3"65", % 00 0 DIGIT-ZERO 02030300
3"66", % 01 1 02030310
3"67", % 02 2 02030320
3"70", % 03 3 02030330
3"71", % 04 4 02030340
3"72", % 05 5 02030350
3"73", % 06 6 02030360
3"74", % 07 7 02030370
3"75", % 10 8 02030380
3"76", % 11 9 02030390
3"23", % 12 # 02030400
3"24", % 13 @ 02030410
3"77", % 14 ? 02030420
3"25", % 15 : 02030430
3"26", % 16 > 02030440
3"27", % 17 } GEQ 02030450
3"30", % 20 + 02030460
3"31", % 21 A 02030470
3"32", % 22 B 02030480
3"33", % 23 C 02030490
3"34", % 24 D 02030500
3"35", % 25 E 02030510
3"36", % 26 F 02030520
3"37", % 27 G 02030530
3"40", % 30 H 02030540
3"41", % 31 I 02030550
3"01", % 32 . 02030560
3"02", % 33 [ 02030570
3"06", % 34 & 02030580
3"03", % 35 ( 02030590
3"04", % 36 < 02030600
3"05", % 37 ~ LEFT-ARROW 02030610
3"42", % 40 | TIMES 02030620
3"43", % 41 J 02030630
3"44", % 42 K 02030640
3"45", % 43 L 02030650
3"46", % 44 M 02030660
3"47", % 45 N 02030670
3"50", % 46 O LETTER-O 02030680
3"51", % 47 P 02030690
3"52", % 50 Q 02030700
3"53", % 51 R 02030710
3"07", % 52 $ 02030720
3"10", % 53 * 02030730
3"14", % 54 - 02030740
3"11", % 55 ) 02030750
3"12", % 56 ; 02030760
3"13", % 57 { LEQ 02030770
3"00", % 60 BLANK 02030780
3"15", % 61 / 02030790
3"55", % 62 S 02030800
3"56", % 63 T 02030810
3"57", % 64 U 02030820
3"60", % 65 V 02030830
3"61", % 66 W 02030840
3"62", % 67 X 02030850
3"63", % 70 Y 02030860
3"64", % 71 Z 02030870
3"16", % 72 , 02030880
3"17", % 73 % 02030890
3"54", % 74 ! NEQ 02030900
3"20", % 75 = 02030910
3"21", % 76 ] 02030920
3"22"); % 77 " 02030930
02040000
TRUTHSET 02040100
BICALPHA( % STREAM PROCEDURE "SC IN ALPHA" CHARACTER SET 02040200
48"11" OR % 21 A 02043000
48"12" OR % 22 B 02043010
48"13" OR % 23 C 02043020
48"14" OR % 24 D 02043030
48"15" OR % 25 E 02043040
48"16" OR % 26 F 02043050
48"17" OR % 27 G 02043060
48"18" OR % 30 H 02043070
48"19" OR % 31 I 02043080
48"21" OR % 41 J 02043090
48"22" OR % 42 K 02043100
48"23" OR % 43 L 02043110
48"24" OR % 44 M 02043120
48"25" OR % 45 N 02043130
48"26" OR % 46 O LETTER-O 02043140
48"27" OR % 47 P 02043150
48"28" OR % 50 Q 02043160
48"29" OR % 51 R 02043170
48"32" OR % 62 S 02043180
48"33" OR % 63 T 02043190
48"34" OR % 64 U 02043200
48"35" OR % 65 V 02043210
48"36" OR % 66 W 02043220
48"37" OR % 67 X 02043230
48"38" OR % 70 Y 02043240
48"39" OR % 71 Z 02043250
48"00" OR % 00 0 DIGIT-ZERO 02043260
48"01" OR % 01 1 02043270
48"02" OR % 02 2 02043280
48"03" OR % 03 3 02043290
48"04" OR % 04 4 02043300
48"05" OR % 05 5 02043310
48"06" OR % 06 6 02043320
48"07" OR % 07 7 02043330
48"08" OR % 10 8 02043340
48"09" OR % 11 9 02043350
48"0C"); % 14 ? 02043360
02045000
TRANSLATETABLE 02045100
BICTOEBCDIC ( % 02045200
EBCDIC TO 48"FF", 02045300
48"00" TO "0", % DIGIT-ZERO 02045310
48"01" TO "1", 02045320
48"02" TO "2", 02045330
48"03" TO "3", 02045340
48"04" TO "4", 02045350
48"05" TO "5", 02045360
48"06" TO "6", 02045370
48"07" TO "7", 02045380
48"08" TO "8", 02045390
48"09" TO "9", 02045400
48"0A" TO "#", 02045410
48"0B" TO "@", 02045420
48"0C" TO "?", 02045430
48"0D" TO ":", 02045440
48"0E" TO ">", 02045450
48"0F" TO "}", % GEQ 02045460
48"10" TO "+", 02045470
48"11" TO "A", 02045480
48"12" TO "B", 02045490
48"13" TO "C", 02045500
48"14" TO "D", 02045510
48"15" TO "E", 02045520
48"16" TO "F", 02045530
48"17" TO "G", 02045540
48"18" TO "H", 02045550
48"19" TO "I", 02045560
48"1A" TO ".", 02045570
48"1B" TO "[", 02045580
48"1C" TO "&", 02045590
48"1D" TO "(", 02045600
48"1E" TO "<", 02045610
48"1F" TO "~", % LEFT-ARROW 02045620
48"20" TO "|", % TIMES 02045630
48"21" TO "J", 02045640
48"22" TO "K", 02045650
48"23" TO "L", 02045660
48"24" TO "M", 02045670
48"25" TO "N", 02045680
48"26" TO "O", % LETTER-O 02045690
48"27" TO "P", 02045700
48"28" TO "Q", 02045710
48"29" TO "R", 02045720
48"2A" TO "$", 02045730
48"2B" TO "*", 02045740
48"2C" TO "-", 02045750
48"2D" TO ")", 02045760
48"2E" TO ";", 02045770
48"2F" TO "{", % LEQ 02045780
48"30" TO " ", % BLANK 02045790
48"31" TO "/", 02045800
48"32" TO "S", 02045810
48"33" TO "T", 02045820
48"34" TO "U", 02045830
48"35" TO "V", 02045840
48"36" TO "W", 02045850
48"37" TO "X", 02045860
48"38" TO "Y", 02045870
48"39" TO "Z", 02045880
48"3A" TO ",", 02045890
48"3B" TO "%", 02045900
48"3C" TO "!", % NEQ 02045910
48"3D" TO "=", 02045920
48"3E" TO "]", 02045930
48"3F" TO """), % QUOTE 02045940
EBCDICTOBIC ( 02046000
EBCDIC TO 48"0C", % 6"?" 02046100
"0" TO 48"00", % DIGIT-ZERO 02046200
"1" TO 48"01", 02046210
"2" TO 48"02", 02046220
"3" TO 48"03", 02046230
"4" TO 48"04", 02046240
"5" TO 48"05", 02046250
"6" TO 48"06", 02046260
"7" TO 48"07", 02046270
"8" TO 48"08", 02046280
"9" TO 48"09", 02046290
"#" TO 48"0A", 02046300
"@" TO 48"0B", 02046310
"?" TO 48"0C", 02046320
":" TO 48"0D", 02046330
">" TO 48"0E", 02046340
"}" TO 48"0F", % GEQ 02046350
"+" TO 48"10", 02046360
"A" TO 48"11", 02046370
"B" TO 48"12", 02046380
"C" TO 48"13", 02046390
"D" TO 48"14", 02046400
"E" TO 48"15", 02046410
"F" TO 48"16", 02046420
"G" TO 48"17", 02046430
"H" TO 48"18", 02046440
"I" TO 48"19", 02046450
"." TO 48"1A", 02046460
"[" TO 48"1B", 02046470
"&" TO 48"1C", 02046480
"(" TO 48"1D", 02046490
"<" TO 48"1E", 02046500
"~" TO 48"1F", % LEFT-ARROW 02046510
"|" TO 48"20", % TIMES 02046520
"J" TO 48"21", 02046530
"K" TO 48"22", 02046540
"L" TO 48"23", 02046550
"M" TO 48"24", 02046560
"N" TO 48"25", 02046570
"O" TO 48"26", % LETTER-O 02046580
"P" TO 48"27", 02046590
"Q" TO 48"28", 02046600
"R" TO 48"29", 02046610
"$" TO 48"2A", 02046620
"*" TO 48"2B", 02046630
"-" TO 48"2C", 02046640
")" TO 48"2D", 02046650
";" TO 48"2E", 02046660
"{" TO 48"2F", % LEQ 02046670
" " TO 48"30", % BLANK 02046680
"/" TO 48"31", 02046690
"S" TO 48"32", 02046700
"T" TO 48"33", 02046710
"U" TO 48"34", 02046720
"V" TO 48"35", 02046730
"W" TO 48"36", 02046740
"X" TO 48"37", 02046750
"Y" TO 48"38", 02046760
"Z" TO 48"39", 02046770
"," TO 48"3A", 02046780
"%" TO 48"3B", 02046790
"!" TO 48"3C", % NEQ 02046800
"=" TO 48"3D", 02046810
"]" TO 48"3E", 02046820
""" TO 48"3F"); % QUOTE 02046830
02050000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02050100
DEFINE STREAMSETSI(A, X) = 02050200
BEGIN COMMENT 02050300
SETS THE SOURCE INDEX REGISTERS TO AN ARRAY. EMULATES RSA. 02050400
; 02050500
MBASE:= A; 02050600
MREG:= (X).WOFF; 02050700
GREG:= (X).COFF; 02050800
HREG:= 0; 02050900
END STREAMSETSI #; 02051000
02051100
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02051200
DEFINE STREAMSETLOCSI(WD) = 02051300
BEGIN COMMENT 02051400
SETS THE SOURCE INDEX REGISTERS TO A SCALAR, WHICH IS STORED 02051500
AND OPERATED ON IN STREAMTEMPS[*]. EMULATES RSA. 02051600
; 02051700
STREAMTEMPS[0]:= (WD); 02051800
MBASE:= STREAMTEMPS; 02051900
MREG:= GREG:= HREG:= 0; 02052000
END STREAMSETLOCSI #; 02052100
02052200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02052300
DEFINE STREAMGETSI = 02052400
COMMENT 02052500
STREAMGETSI CONSTRUCTS A BINARY WORD FROM THE SOURCE INDEX 02052600
REGISTERS. EMULATES SSA (SORT OF). 02052700
; 02052800
(0 & (MREG)WOFF & (GREG)COFF) #; 02052900
02053000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02053100
DEFINE STREAMGETSC = 02053200
COMMENT 02053300
STREAMGETSC RETURNS THE CURRENT SOURCE CHARACTER. MOSTLY USED 02053400
INTERNAL TO THE STREAM EMULATION PROCEDURES. 02053500
; 02053600
(MBASE[MREG].[47-GREG*6:6]) #; 02053700
02053800
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02053900
DEFINE STREAMTESTSB = 02054000
COMMENT 02054100
TESTS THE BIT AT THE CURRENT SOURCE INDEX AND RETURNS TRUE 02054200
IF IT IS SET. DOES NOT ADVANCE THE SOURCE INDEX. EMULATES BIT. 02054300
; 02054400
(TFFF:= BOOLEAN(MBASE[MREG].[47-GREG*6-HREG:1])) #; 02054500
02054600
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02054700
DEFINE STREAMADJUSTSICHAR = 02054800
BEGIN COMMENT 02054900
ADJUSTS THE SOURCE INDEX FORWARD TO THE NEXT CHARACTER BOUNDARY, 02055000
IF NECESSARY. USED INTERALLY BY THE EMULATION PROCEDURES. 02055100
; 02055200
IF HREG > 0 THEN 02055300
BEGIN 02055400
HREG:= 0; 02055500
IF GREG < 7 THEN 02055600
GREG:= *+1 02055700
ELSE 02055800
BEGIN 02055900
GREG:= 0; 02056000
MREG:= *+1; 02056100
END; 02056200
END; 02056300
END STREAMADJUSTSICHAR #; 02056400
02056500
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02056600
DEFINE STREAMADJUSTSIWORD = 02056700
BEGIN COMMENT 02056800
ADJUSTS THE SOURCE INDEX FORWARD TO THE NEXT WORD BOUNDARY, 02056900
IF NECESSARY. USED INTERNALLY BY THE EMULATION PROCEDURES. 02057000
; 02057100
IF GREG > 0 OR HREG > 0 THEN 02057200
BEGIN 02057300
GREG:= HREG:= 0; 02057400
MREG:= *+1; 02057500
END; 02057600
END STREAMADJUSTSIWORD #; 02057700
02060000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02060100
DEFINE STREAMSETDI(A, X) = 02060200
BEGIN COMMENT 02060300
SETS THE DESTINATION INDEX REGISTERS TO AN ARRAY. EMULATES RDA. 02060400
; 02060500
SBASE:= A; 02060600
SREG:= (X).WOFF; 02060700
KREG:= (X).COFF; 02060800
VREG:= 0; 02060900
END STREAMSETDI #; 02061000
02061100
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02061200
DEFINE STREAMSETLOCDI(WD) = 02061300
BEGIN COMMENT 02061400
SETS THE DESTINATION INDEX REGISTERS TO A SCALAR, WHICH IS STORED 02061500
AND OPERATED ON IN STREAMTEMPD[*]. EMULATES RDA. 02061600
; 02061700
STREAMTEMPD[0]:= (WD); 02061800
SBASE:= STREAMTEMPD; 02061900
SREG:= KREG:= VREG:= 0; 02062000
END STREAMSETLOCDI #; 02062100
02062200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02062300
DEFINE STREAMGETDI = 02062400
COMMENT 02062500
STREAMGETSI CONSTRUCTS A BINARY WORD FROM THE DESTINATION INDEX 02062600
REGISTERS. EMULATES SDA (SORT OF). 02062700
; 02062800
(0 & (SREG)WOFF & (KREG)COFF) #; 02062900
02063000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02063100
DEFINE STREAMGETDC = 02063200
COMMENT 02063300
STREAMGETSC RETURNS THE CURRENT DESTINATION CHARACTER. MOSTLY 02063400
USED INTERNAL TO THE STREAM EMULATION PROCEDURES. 02063500
; 02063600
(SBASE[SREG].[47-KREG*6:6]) #; 02063700
02063800
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02063900
DEFINE STREAMADJUSTDICHAR = 02064000
BEGIN COMMENT 02064100
ADJUSTS THE DESTINATION INDEX FORWARD TO THE NEXT CHARACTER 02064200
BOUNDARY, IF NECESSARY. USED INTERALLY BY THE EMULATION 02064300
PROCEDURES. 02064400
; 02064500
IF VREG > 0 THEN 02064600
BEGIN 02064700
VREG:= 0; 02064800
IF KREG < 7 THEN 02064900
KREG:= *+1 02065000
ELSE 02065100
BEGIN 02065200
KREG:= 0; 02065300
SREG:= *+1; 02065400
END; 02065500
END; 02065600
END STREAMADJUSTDICHAR #; 02065700
02065800
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02065900
DEFINE STREAMADJUSTDIWORD = 02066000
BEGIN COMMENT 02066100
ADJUSTS THE DESTINATON INDEX FORWARD TO THE NEXT WORD BOUNDARY, 02066200
IF NECESSARY. USED INTERNALLY BY THE EMULATION PROCEDURES. 02066300
; 02066400
IF KREG > 0 OR VREG > 0 THEN 02066500
BEGIN 02066600
KREG:= VREG:= 0; 02066700
SREG:= *+1; 02066800
END; 02066900
END STREAMADJUSTDIWORD #; 02067000
02070000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02070100
DEFINE STREAMSETTALLY(V) = 02070200
BEGIN COMMENT 02070300
SETS THE TALLY REGISTER TO THE LOW-ORDER 6 BITS OF "V". 02070400
EMULATES SEC. 02070500
; 02070600
TALLY:= (V).[5:6]; 02070700
END #; 02070800
02070900
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02071000
DEFINE STREAMINCTALLY(V) = 02071100
BEGIN COMMENT 02071200
INCREMENTS THE TALLY REGISTER BY THE LOW-ORDER 6 BITS OF "V", 02071300
TRUNCATING THE RESULT TO 6 BITS (WHICH IS ALL THE TALLY HOLDS). 02071400
EMULATES INC. 02071500
; 02071600
STREAMSETTALLY(TALLY+(V).[5:6]); 02071700
END #; 02071800
02071900
$ BEGINSEGMENT 02072000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02072100
PROCEDURE STREAMSKIPSI(CHARS); 02072200
VALUE CHARS; 02072300
REAL CHARS; 02072400
BEGIN COMMENT 02072500
INCREMENTS THE SOURCE INDEX FORWARD OR BACKWARD BY THE 02072600
SPECIFIED NUMBER OF CHARACTERS. EMULATES SFS/SRS, BUT IS NOT 02072700
LIMITED TO A COUNT OF 63. 02072800
; 02072900
REAL 02073000
X; 02073100
02073200
STREAMADJUSTSICHAR; 02073300
X:= (GREG.[2:3] & (MREG)[17:15]) + CHARS; 02073400
MREG:= X.[17:15]; 02073500
GREG:= X.[2:3]; 02073600
END STREAMSKIPSI; 02073700
02073800
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02073900
PROCEDURE STREAMSKIPDI(CHARS); 02074000
VALUE CHARS; 02074100
REAL CHARS; 02074200
BEGIN COMMENT 02074300
INCREMENTS THE DESTINATION INDEX FORWARD OR BACKWARD BY THE 02074400
SPECIFIED NUMBER OF CHARACTERS. EMULATES SFD/SRD, BUT IS NOT 02074500
LIMITED TO A COUNT OF 63. 02074600
; 02074700
REAL 02074800
X; 02074900
02075000
STREAMADJUSTDICHAR; 02075100
X:= (KREG.[2:3] & (SREG)[17:15]) + CHARS; 02075200
SREG:= X.[17:15]; 02075300
KREG:= X.[2:3]; 02075400
END STREAMSKIPDI; 02075500
02075600
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02075700
DEFINE STREAMLOADDIFROMDC = 02075800
STREAMLOADDIFROMDCQQ(SBASE) #; 02075900
PROCEDURE STREAMLOADDIFROMDCQQ(SBASE); 02076000
ARRAY SBASE[0]; 02076100
BEGIN COMMENT 02076200
LOADS THE VALUE OF THE DESTINATION INDEX FROM THE CURRENT 02076300
LOCATION OF THE DESTINATION INDEX. EMULATES TDA (SORT OF). 02076400
; 02076500
STREAMADJUSTDICHAR; 02076600
VREG:= STREAMGETDC; 02076700
STREAMSKIPDI(+1); 02076800
VREG:= STREAMGETDC & (VREG)[11:6]; 02076900
STREAMSKIPDI(+1); 02077000
VREG:= STREAMGETDC & (VREG)[17:6]; 02077100
KREG:= VREG.COFF; 02077200
SREG:= VREG.WOFF; 02077300
VREG:= 0; 02077400
END STREAMLOADDIFROMDC; 02077500
02100000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02100100
DEFINE STREAMTRANSFERCHR(N) = 02100200
STREAMTRANSFERCHRQQ(MBASE, SBASE, N) #; 02100300
PROCEDURE STREAMTRANSFERCHRQQ(MBASE, SBASE, N); 02100400
VALUE N; 02100500
ARRAY MBASE, SBASE[0]; 02100600
REAL N; 02100700
BEGIN COMMENT 02100800
TRANSFERS "N" 6-BIT CHARACTERS FROM SOURCE TO DESTINATION. 02100900
EMULATES TRS, BUT IS NOT LIMITED TO A COUNT OF 63. 02101000
; 02101100
REAL 02101200
NC; % CHARS LEFT TO TRANSFER 02101300
02101400
STREAMADJUSTSICHAR; 02101500
AREG:= MBASE[MREG]; 02101600
STREAMADJUSTDICHAR; 02101700
BREG:= SBASE[SREG]; 02101800
NC:= N; 02101900
WHILE NC > 0 DO 02102000
BEGIN 02102100
BREG:= * & AREG[47-KREG*6 : 47-GREG*6 : 6]; 02102200
NC:= *-1; 02102300
IF GREG < 7 THEN 02102400
GREG:= *+1 02102500
ELSE 02102600
BEGIN 02102700
GREG:= 0; 02102800
MREG:= *+1; 02102900
IF NC > 0 THEN 02103000
AREG:= MBASE[MREG]; 02103100
END; 02103200
02103300
IF KREG < 7 THEN 02103400
KREG:= *+1 02103500
ELSE 02103600
BEGIN 02103700
SBASE[SREG]:= BREG; 02103800
KREG:= 0; 02103900
SREG:= *+1; 02104000
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 02104100
IF NC > 0 THEN 02104200
BREG:= SBASE[SREG]; 02104300
END; 02104400
END WHILE; 02104500
02104600
IF KREG > 0 THEN 02104700
SBASE[SREG]:= BREG; 02104800
END STREAMTRANSFERCHR; 02104900
02105000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02105100
DEFINE STREAMTRANSFERWDS(N) = 02105200
STREAMTRANSFERWDSQQ(MBASE, SBASE, N) #; 02105300
PROCEDURE STREAMTRANSFERWDSQQ(MBASE, SBASE, N); 02105400
VALUE N; 02105500
ARRAY MBASE, SBASE[0]; 02105600
REAL N; 02105700
BEGIN COMMENT 02105800
TRANSFERS "N" 48-BIT WORDS FROM SOURCE TO DESTINATION. 02105900
EMULATES TRW, BUT IS NOT LIMITED TO A COUNT OF 63. 02106000
; 02106100
STREAMADJUSTSIWORD; 02106200
STREAMADJUSTDIWORD; 02106300
IF N = 1 THEN 02106400
SBASE[SREG]:= MBASE[MREG] 02106500
ELSE 02106600
REPLACE POINTER(SBASE[SREG],0) BY 02106700
POINTER(MBASE[MREG],0) FOR N WORDS; 02106800
02106900
SREG:= *+N; 02107000
MREG:= *+N; 02107100
END STREAMTRANSFERWDS; 02107200
02107300
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02107400
DEFINE STREAMSMEARLIT(N, CHAR) = 02107500
STREAMSMEARLITQQ(SBASE, N, CHAR) #; 02107600
PROCEDURE STREAMSMEARLITQQ(SBASE, N, CHAR); 02107700
VALUE N, CHAR; 02107800
ARRAY SBASE[0]; 02107900
REAL N, CHAR; 02108000
BEGIN COMMENT 02108100
REPETITIVELY TRANSFERS THE 6-BIT CHARACTER "CHAR" TO THE 02108200
DESTINATION "N" TIMES. USED WHERE TRP MIGHT BE EXECUTED, BUT 02108300
FOR THE SPECIAL CASE OF A 1-CHARACTER PATTERN. THIS ROUTINE IS 02108400
FUNCTIONALLY EQUIVALENT TO STREAMTRANSFERLIT(1, CHAR) WHEN N=1. 02108500
; 02108600
REAL 02108700
NC; % CHARS LEFT TO SMEAR 02108800
02108900
STREAMADJUSTDICHAR; 02109000
BREG:= SBASE[SREG]; 02109100
NC:= N; 02109200
WHILE NC > 0 DO 02109300
BEGIN 02109400
BREG:= * & CHAR[47-KREG*6 : 5 : 6]; 02109500
NC:= *-1; 02109600
IF KREG < 7 THEN 02109700
KREG:= *+1 02109800
ELSE 02109900
BEGIN 02110000
SBASE[SREG]:= BREG; 02110100
KREG:= 0; 02110200
SREG:= *+1; 02110300
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 02110400
IF NC > 0 THEN 02110500
BREG:= SBASE[SREG]; 02110600
END; 02110700
END WHILE; 02110800
02110900
IF KREG > 0 THEN 02111000
SBASE[SREG]:= BREG; 02111100
END STREAMSMEARLIT; 02111200
02111300
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02111400
DEFINE STREAMTRANSFERLIT(N, S) = 02111500
STREAMTRANSFERLITQQ(SBASE, N, S) #; 02111600
PROCEDURE STREAMTRANSFERLITQQ(SBASE, N, S); 02111700
VALUE N, S; 02111800
ARRAY SBASE[0]; 02111900
REAL N, S; % N MUST BE <= 8, S IS RIGHT-JUSTIFIED IN ITS WORD 02112000
BEGIN COMMENT 02112100
TRANSFERS A LITERAL STRING OF 6-BIT CHARACTERS IN "S" TO THE 02112200
DESTINATION. "N" IS THE NUMBER OF CHARACTERS TO TRANSFER, WHICH 02112300
IS LIMITED TO 8. "S" IS CONSIDERED TO BE IN THE "N" LOW-ORDER 02112400
CHARACTERS OF THE "S" WORD. SORT OF EMULATES TRP, EXCEPT THE 02112500
SOURCE ISN'T REALLY IN THE PROGRAM STRING AND IS LIMITED TO 02112600
A 48-BIT SOURCE STRING. CALL MULTIPLE TIMES FOR LONGER STRINGS. 02112700
; 02112800
REAL 02112900
NC; 02113000
02113100
STREAMADJUSTDICHAR; 02113200
BREG:= SBASE[SREG]; 02113300
NC:= N; 02113400
WHILE NC > 0 DO 02113500
BEGIN 02113600
BREG:= * & (S)[47-KREG*6 : NC*6-1 : 6]; 02113700
NC:= *-1; 02113800
IF KREG < 7 THEN 02113900
KREG:= *+1 02114000
ELSE 02114100
BEGIN 02114200
SBASE[SREG]:= BREG; 02114300
KREG:= 0; 02114400
SREG:= *+1; 02114500
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 02114600
IF NC > 0 THEN 02114700
BREG:= SBASE[SREG]; 02114800
END; 02114900
END WHILE; 02115000
02115100
IF KREG > 0 THEN 02115200
SBASE[SREG]:= BREG; 02115300
END STREAMTRANSFERLIT; 02115400
02115500
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02115600
DEFINE STREAMTRANSFERDEC(N) = 02115700
STREAMTRANSFERDECQQ(MBASE, SBASE, N) #; 02115800
PROCEDURE STREAMTRANSFERDECQQ(MBASE, SBASE, N); 02115900
VALUE N; 02116000
ARRAY MBASE, SBASE[0]; 02116100
REAL N; 02116200
BEGIN COMMENT 02116300
CONVERTS THE WORD AT THE SOURCE INDEX TO "N" DECIMAL DIGITS AND 02116400
TRANSFERS THEM TO THE DESTINATION AS 6-BIT CHARACTER CODES. 02116500
EMULATES OCV. LIMITED TO 8-DIGIT CONVERSION. 02116600
; 02116700
REAL 02116800
DIGITS; 02116900
02117000
STREAMADJUSTSIWORD; 02117100
STREAMADJUSTDICHAR; 02117200
IF N = 0 THEN 02117300
TFFF:= TRUE 02117400
ELSE 02117500
BEGIN 02117600
IF N > 8 THEN 02117700
N:= 8; 02117800
02117900
AREG:= MBASE[MREG]; 02118000
IF AREG = 0 THEN 02118100
AREG:= 0 % WIPE OUT ANY SIGN BIT 02118200
ELSE 02118300
DIGITS:= SCALERIGHTF(AREG.[38:39], 12); 02118400
02118500
MREG:= *+1; 02118600
TFFF:= (DIGITS.[47:(12-N)*4] = 0); % TRUE => NO DECIMAL OVERFLOW 02118700
WHILE N > 1 DO 02118800
BEGIN 02118900
STREAMSMEARLIT(1, DIGITS.[N*4-1:4]); 02119000
N:= *-1; 02119100
END WHILE; 02119200
02119300
STREAMSMEARLIT(1, DIGITS.[3:4] & (AREG)[5:46:1]); % SET THE SIGN 02119400
END; 02119500
END STREAMTRANSFERDEC; 02119600
02119700
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02119800
DEFINE STREAMTRANSFEROCT(N) = 02119900
STREAMTRANSFEROCTQQ(MBASE, SBASE, N) #; 02120000
PROCEDURE STREAMTRANSFEROCTQQ(MBASE, SBASE, N); 02120100
VALUE N; 02120200
ARRAY MBASE, SBASE[0]; 02120300
REAL N; 02120400
BEGIN COMMENT 02120500
CONVERTS "N" 6-BIT CHARACTERS FROM THE SOURCE TO A BINARY VALUE 02120600
AND STORES THE RESULT AT THE DESTINATION WORD. EMULATES ICV. 02120700
LIMITED TO 8-DIGIT CONVERSION. 02120800
; 02120900
REAL 02121000
VAL; 02121100
02121200
STREAMADJUSTDIWORD; 02121300
STREAMADJUSTSICHAR; 02121400
AREG:= MBASE[MREG]; 02121500
IF N > 8 THEN 02121600
N:= 8; 02121700
02121800
WHILE N > 0 DO 02121900
BEGIN 02122000
VAL:= VAL*10 + AREG.[45-GREG*6:4]; 02122100
N:= *-1; 02122200
IF N = 0 THEN 02122300
IF AREG.[47-GREG*6:2] = 2 THEN % SIGN IS NEGATIVE 02122400
IF VAL ^= 0 THEN 02122500
VAL:= -VAL; 02122600
02122700
IF GREG < 7 THEN 02122800
GREG:= *+1 02122900
ELSE 02123000
BEGIN 02123100
GREG:= 0; 02123200
MREG:= *+1; 02123300
IF N > 0 THEN 02123400
AREG:= MBASE[MREG]; 02123500
END; 02123600
END WHILE; 02123700
02123800
SBASE[SREG]:= VAL; 02123900
SREG:= *+1; 02124000
END STREAMTRANSFEROCT; 02124100
02124200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02124300
DEFINE STREAMTRANSFERFILL(N) = 02124400
STREAMTRANSFERFILLQQ(SBASE, N) #; 02124500
PROCEDURE STREAMTRANSFERFILLQQ(SBASE, N); 02124600
VALUE N; 02124700
ARRAY SBASE[0]; 02124800
REAL N; 02124900
BEGIN COMMENT 02125000
PERFORMS LEADING-ZERO SUPPRESSION STARTING AT THE DESTINATION 02125100
INDEX LOCATION. LEAVES THE DESTINATION INDEX POINTING TO THE 02125200
FIRST NON-SUPPRESSED CHARACTER. EMULATES TBN. 02125300
; 02125400
REAL 02125500
NC; % CHARS LEFT TO EXAMINE 02125600
02125700
STREAMADJUSTDICHAR; 02125800
TFFF:= TRUE; 02125900
BREG:= SBASE[SREG]; 02126000
NC:= N; 02126100
WHILE NC > 0 DO 02126200
BEGIN 02126300
IF BICCOLLATE[STREAMGETDC] <= BICCOLLATE[6"0"] THEN 02126400
BEGIN 02126500
BREG:= * & (6" ")[47-KREG*6 : 5 : 6]; 02126600
NC:= *-1; 02126700
IF KREG < 7 THEN 02126800
KREG:= *+1 02126900
ELSE 02127000
BEGIN 02127100
SBASE[SREG]:= BREG; 02127200
KREG:= 0; 02127300
SREG:= *+1; 02127400
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 02127500
IF NC > 0 THEN 02127600
BREG:= SBASE[SREG]; 02127700
END; 02127800
END 02127900
ELSE 02128000
BEGIN 02128100
NC:= 0; 02128200
TFFF:= FALSE; 02128300
IF KREG > 0 THEN 02128400
SBASE[SREG]:= BREG; 02128500
END; 02128600
END WHILE; 02128700
END STREAMTRANSFERFILL; 02128800
02130000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02130100
PROCEDURE STREAMSKIPSB(N); 02130200
VALUE N; 02130300
REAL N; 02130400
BEGIN COMMENT 02130500
INCREMENTS THE SOURCE INDEX FORWARD BY "N" BITS. 02130600
EMULATES BSS. 02130700
; 02130800
THRU N DO 02130900
BEGIN 02131000
IF HREG < 5 THEN 02131100
HREG:= *+1 02131200
ELSE 02131300
BEGIN 02131400
HREG:= 0; 02131500
IF GREG < 7 THEN 02131600
GREG:= *+1 02131700
ELSE 02131800
BEGIN 02131900
GREG:= 0; 02132000
MREG:= *+1; 02132100
END; 02132200
END; 02132300
END THRU; 02132400
END STREAMSKIPSB; 02132500
02132600
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02132700
PROCEDURE STREAMSKIPDB(N); 02132800
VALUE N; 02132900
REAL N; 02133000
BEGIN COMMENT 02133100
INCREMENTS THE DESTINATION INDEX FORWARD BY "N" BITS. 02133200
EMULATES BSD. 02133300
; 02133400
THRU N DO 02133500
BEGIN 02133600
IF VREG < 5 THEN 02133700
VREG:= *+1 02133800
ELSE 02133900
BEGIN 02134000
VREG:= 0; 02134100
IF KREG < 7 THEN 02134200
KREG:= *+1 02134300
ELSE 02134400
BEGIN 02134500
KREG:= 0; 02134600
SREG:= *+1; 02134700
END; 02134800
END; 02134900
END THRU; 02135000
END STREAMSKIPDB; 02135100
02135200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02135300
DEFINE STREAMSETDB(N, TRUTH) = 02135400
STREAMSETDBQQ(SBASE, N, TRUTH) #; 02135500
PROCEDURE STREAMSETDBQQ(SBASE, N, TRUTH); 02135600
VALUE N, TRUTH; 02135700
ARRAY SBASE[0]; 02135800
REAL N; 02135900
REAL TRUTH; 02136000
BEGIN COMMENT 02136100
SETS OR RESETS "N" DESTINATION BITS, DEPENDING ON "TRUTH". 02136200
EMULATES BIR/BIS. 02136300
; 02136400
REAL 02136500
NC; 02136600
02136700
BREG:= SBASE[SREG]; 02136800
NC:= N; 02136900
WHILE NC > 0 DO 02137000
BEGIN 02137100
BREG:= * & (TRUTH)[47-KREG*6-VREG:1]; 02137200
NC:= *-1; 02137300
IF VREG < 5 THEN 02137400
VREG:= *+1 02137500
ELSE 02137600
BEGIN 02137700
VREG:= 0; 02137800
IF KREG < 7 THEN 02137900
KREG:= *+1 02138000
ELSE 02138100
BEGIN 02138200
SBASE[SREG]:= BREG; 02138300
KREG:= 0; 02138400
SREG:= *+1; 02138500
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 02138600
IF NC > 0 THEN 02138700
BREG:= SBASE[SREG]; 02138800
END; 02138900
END; 02139000
END WHILE; 02139100
02139200
IF VREG > 0 OR KREG > 0 THEN 02139300
SBASE[SREG]:= BREG; 02139400
END STREAMSETDB; 02139500
02150000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02150100
DEFINE STREAMCOMPARELSS(N) = 02150200
STREAMCOMPARELSSQQ(MBASE, SBASE, N) #; 02150300
BOOLEAN PROCEDURE STREAMCOMPARELSSQQ(MBASE, SBASE, N); 02150400
VALUE N; 02150500
ARRAY MBASE, SBASE[0]; 02150600
REAL N; 02150700
BEGIN COMMENT 02150800
COMPARES "N" CHARACTERS BETWEEN SOURCE AND DESTINATION FOR A 02150900
LESS-THAN CONDITION. ADVANCES BOTH INDEXES BY "N". 02151000
EMULATES CLS. 02151100
; 02151200
STREAMADJUSTSICHAR; 02151300
STREAMADJUSTDICHAR; 02151400
TFFF:= FALSE; 02151500
WHILE N > 0 DO 02151600
BEGIN 02151700
IF STREAMGETSC = STREAMGETDC THEN 02151800
BEGIN 02151900
STREAMSKIPSI(+1); 02152000
STREAMSKIPDI(+1); 02152100
N:= *-1; 02152200
END 02152300
ELSE 02152400
BEGIN 02152500
IF BICCOLLATE[STREAMGETSC] < BICCOLLATE[STREAMGETDC] THEN 02152600
TFFF:= TRUE; 02152700
02152800
STREAMSKIPSI(+N); 02152900
STREAMSKIPDI(+N); 02153000
N:= 0; 02153100
END; 02153200
END WHILE; 02153300
02153400
STREAMCOMPARELSSQQ:= TFFF; 02153500
END STREAMCOMPARELSS; 02153600
02160000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02160100
DEFINE STREAMCOMPAREEQL(N) = 02160200
STREAMCOMPAREEQLQQ(MBASE, SBASE, N) #; 02160300
BOOLEAN PROCEDURE STREAMCOMPAREEQLQQ(MBASE, SBASE, N); 02160400
VALUE N; 02160500
ARRAY MBASE, SBASE[0]; 02160600
REAL N; 02160700
BEGIN COMMENT 02160800
COMPARES "N" CHARACTERS BETWEEN SOURCE AND DESTINATION FOR AN 02160900
EQUAL CONDITION. ADVANCES BOTH INDEXES BY "N". 02161000
EMULATES CEQ. 02161100
; 02161200
STREAMADJUSTSICHAR; 02161300
STREAMADJUSTDICHAR; 02161400
TFFF:= TRUE; 02161500
WHILE N > 0 DO 02161600
BEGIN 02161700
IF STREAMGETSC = STREAMGETDC THEN % COLLATING SEQ IS IMMATERIAL 02161800
BEGIN 02161900
STREAMSKIPSI(+1); 02162000
STREAMSKIPDI(+1); 02162100
N:= *-1; 02162200
END 02162300
ELSE 02162400
BEGIN 02162500
TFFF:= FALSE; 02162600
STREAMSKIPSI(+N); 02162700
STREAMSKIPDI(+N); 02162800
N:= 0; 02162900
END; 02163000
END WHILE; 02163100
02163200
STREAMCOMPAREEQLQQ:= TFFF; 02163300
END STREAMCOMPAREEQL; 02163400
02175000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02175100
DEFINE STREAMCOMPAREGEQ(N) = 02175200
STREAMCOMPAREGEQQQ(MBASE, SBASE, N) #; 02175300
BOOLEAN PROCEDURE STREAMCOMPAREGEQQQ(MBASE, SBASE, N); 02175400
VALUE N; 02175500
ARRAY MBASE, SBASE[0]; 02175600
REAL N; 02175700
BEGIN COMMENT 02175800
COMPARES "N" CHARACTERS BETWEEN SOURCE AND DESTINATION FOR A 02175900
GREATER-THAN-OR-EQUAL CONDITION. ADVANCES BOTH INDEXES BY "N". 02176000
EMULATES CEG. 02176100
; 02176200
STREAMADJUSTSICHAR; 02176300
STREAMADJUSTDICHAR; 02176400
TFFF:= TRUE; 02176500
WHILE N > 0 DO 02176600
BEGIN 02176700
IF STREAMGETSC = STREAMGETDC THEN 02176800
BEGIN 02176900
STREAMSKIPSI(+1); 02177000
STREAMSKIPDI(+1); 02177100
N:= *-1; 02177200
END 02177300
ELSE 02177400
BEGIN 02177500
IF BICCOLLATE[STREAMGETSC] < BICCOLLATE[STREAMGETDC] THEN 02177600
TFFF:= FALSE; 02177700
02177800
STREAMSKIPSI(+N); 02177900
STREAMSKIPDI(+N); 02178000
N:= 0; 02178100
END; 02178200
END WHILE; 02178300
02178400
STREAMCOMPAREGEQQQ:= TFFF; 02178500
END STREAMCOMPAREGEQ; 02178600
02180000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02180100
DEFINE STREAMSCLSS(CHR) = 02180200
STREAMSCLSSQQ(MBASE, CHR) #; 02180300
BOOLEAN PROCEDURE STREAMSCLSSQQ(MBASE, CHR); 02180400
VALUE CHR; 02180500
ARRAY MBASE[0]; 02180600
REAL CHR; 02180700
BEGIN COMMENT 02180800
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 02180900
LESS-THAN CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 02181000
EMULATES TLS. 02181100
; 02181200
STREAMADJUSTSICHAR; 02181300
STREAMSCLSSQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] < BICCOLLATE[CHR]); 02181400
END STREAMSCLSS; 02181500
02181600
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02181700
DEFINE STREAMSCLEQ(CHR) = 02181800
STREAMSCLEQQQ(MBASE, CHR) #; 02181900
BOOLEAN PROCEDURE STREAMSCLEQQQ(MBASE, CHR); 02182000
VALUE CHR; 02182100
ARRAY MBASE[0]; 02182200
REAL CHR; 02182300
BEGIN COMMENT 02182400
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 02182500
LESS-THAN CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 02182600
EMULATES TLS. 02182700
; 02182800
STREAMADJUSTSICHAR; 02182900
STREAMSCLEQQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] < BICCOLLATE[CHR]); 02183000
END STREAMSCLEQ; 02183100
02183200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02183300
DEFINE STREAMSCEQL(CHR) = 02183400
STREAMSCEQLQQ(MBASE, CHR) #; 02183500
BOOLEAN PROCEDURE STREAMSCEQLQQ(MBASE, CHR); 02183600
VALUE CHR; 02183700
ARRAY MBASE[0]; 02183800
REAL CHR; 02183900
BEGIN COMMENT 02184000
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR AN 02184100
EQUAL CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 02184200
EMULATES TEQ. 02184300
; 02184400
STREAMADJUSTSICHAR; 02184500
STREAMSCEQLQQ:= TFFF:= (STREAMGETSC=CHR); % COLLATING SEQ IMMATERIAL 02184600
END STREAMSCEQL; 02184700
02184800
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02184900
DEFINE STREAMSCNEQ(CHR) = 02185000
STREAMSCNEQQQ(MBASE, CHR) #; 02185100
BOOLEAN PROCEDURE STREAMSCNEQQQ(MBASE, CHR); 02185200
VALUE CHR; 02185300
ARRAY MBASE[0]; 02185400
REAL CHR; 02185500
BEGIN COMMENT 02185600
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 02185700
NOT-EQUAL CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 02185800
EMULATES TNE. 02185900
; 02186000
STREAMADJUSTSICHAR; 02186100
STREAMSCNEQQQ:= TFFF:= (STREAMGETSC^=CHR); % COLLATING SEQ IMMATERIAL 02186200
END STREAMSCNEQ; 02186300
02186400
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02186500
DEFINE STREAMSCGEQ(CHR) = 02186600
STREAMSCGEQQQ(MBASE, CHR) #; 02186700
BOOLEAN PROCEDURE STREAMSCGEQQQ(MBASE, CHR); 02186800
VALUE CHR; 02186900
ARRAY MBASE[0]; 02187000
REAL CHR; 02187100
BEGIN COMMENT 02187200
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 02187300
GREATER-THAN-OR-EQUAL CONDITION. DOES NOT ADVANCE THE SOURCE 02187400
INDEX. EMULATES TEG. 02187500
; 02187600
STREAMADJUSTSICHAR; 02187700
STREAMSCGEQQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] >= BICCOLLATE[CHR]); 02187800
END STREAMSCGEQ; 02187900
02188000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02188100
DEFINE STREAMSCGTR(CHR) = 02188200
STREAMSCGTRQQ(MBASE, CHR) #; 02188300
BOOLEAN PROCEDURE STREAMSCGTRQQ(MBASE, CHR); 02188400
VALUE CHR; 02188500
ARRAY MBASE[0]; 02188600
REAL CHR; 02188700
BEGIN COMMENT 02188800
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 02188900
GREATER-THAN CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 02189000
EMULATES TGR. 02189100
; 02189200
STREAMADJUSTSICHAR; 02189300
STREAMSCGTRQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] > BICCOLLATE[CHR]); 02189400
END STREAMSCGTR; 02189500
02190000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02190100
DEFINE STREAMSCALPHA = 02190200
STREAMSCALPHAQQ(MBASE) #; 02190300
BOOLEAN PROCEDURE STREAMSCALPHAQQ(MBASE); 02190400
ARRAY MBASE[0]; 02190500
BEGIN COMMENT 02190600
TESTS THE CURRENT SOURCE CHARACTER FOR MEMBERSHIP IN THE "ALPHA" 02190700
SET (0-9, A-Z, AND ODDLY, "?"). DOES NOT ADVANCE THE SOURCE INDEX.02190800
EMULATES TAN. 02190900
; 02191000
STREAMADJUSTSICHAR; 02191100
STREAMSCALPHAQQ:= TFFF:= (STREAMGETSC IN BICALPHA); 02191200
END STREAMSCALPHA; 02191300
$ ENDSEGMENT 02199900
02200000
$ BEGINSEGMENT 02200100
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02200200
PROCEDURE PACKEBCDICTOBIC(S, SX, D, DX, N); 02200300
VALUE SX, DX, N; 02200400
ARRAY S, D[0]; 02200500
REAL SX, DX, N; 02200600
BEGIN COMMENT 02200700
PACKS 8-BIT EBCDIC CHARACTERS TO 6-BIT BIC CHARACTERS FROM 02200800
ARRAY S TO ARRAY D. SX IS THE 8-BIT CHARACTER OFFSET INTO S AND 02200900
DX IS THE 6-BIT CHARACTER OFFSET INTO D. N IS THE NUMBER OF 02201000
CHARACTERS TO PACK. PACKING PROCEEDS IN A FORWARD DIRECTION SO 02201100
THAT SOURCE AND DESTINATION CAN REFER TO THE SAME LOCATION. 02201200
THE SOURCE DATA IS UNCONDITIONALLY OVERWRITTEN WITH 8-BIT BIC. 02201300
; 02201400
REAL 02201500
NC, % NR CHARS LEFT TO PACK 02201600
SA, % SOURCE ACCUMULATOR WORD, 02201700
SB, % SOURCE BIT NBR 02201800
SW, % SOURCE WORD INDEX 02201900
DA, % DESTINATION ACCUMULATOR WORD 02202000
DB, % DESTINATION BIT NBR 02202100
DW; % DESTINATION WORD INDEX 02202200
02202300
SW:= SX DIV 6; 02202400
SB:= 45-(SX MOD 6)*8; 02202500
DW:= DX DIV 8; 02202600
DB:= 47-(DX MOD 8)*6; 02202700
REPLACE POINTER(S[SX],8) BY POINTER(S[SX],8) FOR N WITH EBCDICTOBIC; 02202800
SA:= S[SW]; 02202900
DA:= D[DW]; 02203000
NC:= N; 02203100
WHILE NC > 0 DO 02203200
BEGIN 02203300
DA:= * & (SA)[DB:SB:6]; 02203400
NC:= *-1; 02203500
IF NC > 0 THEN 02203600
BEGIN 02203700
IF SB > 7 THEN 02203800
SB:= *-8 02203900
ELSE 02204000
BEGIN 02204100
SB:= 45; 02204200
SA:= S[SW:= *+1]; 02204300
END; 02204400
02204500
IF DB > 5 THEN 02204600
DB:= *-6 02204700
ELSE 02204800
BEGIN 02204900
D[DW]:= DA; 02205000
DB:= 47; 02205100
DA:= D[DW:= *+1]; 02205200
END; 02205300
END; 02205400
END WHILE; 02205500
02205600
D[DW]:= DA; 02205700
END PACKEBCDICTOBIC; 02205800
02205900
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02206000
PROCEDURE UNPACKBICTOEBCDIC(S, SX, D, DX, N); 02206100
VALUE SX, DX, N; 02206200
ARRAY S, D[0]; 02206300
REAL SX, DX, N; 02206400
BEGIN COMMENT 02206500
UNPACKS 6-BIT BIC CHARACTERS TO 8-BIT EBCDIC CHARACTERS FROM 02206600
ARRAY S TO ARRAY D. SX IS THE 6-BIT CHARACTER OFFSET INTO S AND 02206700
DX IS THE 8-BIT CHARACTER OFFSET INTO D. N IS THE NUMBER OF 02206800
CHARACTERS TO UNPACK. UNPACKING PROCEEDS IN A REVERSE DIRECTION 02206900
SO THAT SOURCE AND DESTINATION CAN REFER TO THE SAME LOCATION. 02207000
; 02207100
REAL 02207200
NC, % NR CHARS LEFT TO UNPACK 02207300
SA, % SOURCE ACCUMULATOR WORD, 02207400
SB, % SOURCE BIT NBR 02207500
SW, % SOURCE WORD INDEX 02207600
DA, % DESTINATION ACCUMULATOR WORD 02207700
DB, % DESTINATION BIT NBR 02207800
DW; % DESTINATION WORD INDEX 02207900
02208000
SW:= (SX+N-1) DIV 8; 02208100
SB:= 47-((SX+N-1) MOD 8)*6; 02208200
DW:= (DX+N-1) DIV 6; 02208300
DB:= 47-((DX+N-1) MOD 6)*8; 02208400
SA:= S[SW]; 02208500
DA:= D[DW]; 02208600
NC:= N; 02208700
WHILE NC > 0 DO 02208800
BEGIN 02208900
DA:= * & (SA.[SB:6])[DB:8]; 02209000
NC:= *-1; 02209100
IF NC > 0 THEN 02209200
BEGIN 02209300
IF SB < 47 THEN 02209400
SB:= *+6 02209500
ELSE 02209600
BEGIN 02209700
SB:= 5; 02209800
SA:= S[SW:= *-1]; 02209900
END; 02210000
02210100
IF DB < 47 THEN 02210200
DB:= *+8 02210300
ELSE 02210400
BEGIN 02210500
D[DW]:= DA; 02210600
DB:= 7; 02210700
DA:= D[DW:= *-1]; 02210800
END; 02210900
END; 02211000
END WHILE; 02211100
02211200
D[DW]:= DA; 02211300
REPLACE POINTER(D[DX],8) BY POINTER(D[DX],8) FOR N WITH BICTOEBCDIC; 02211400
END UNPACKBICTOEBCDIC; 02211500
02220000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02220100
REAL PROCEDURE BIC2EBC(B); 02220200
VALUE B; 02220300
REAL B; 02220400
BEGIN COMMENT 02220500
CONVERTS THE LOW-ORDER SIX 6-BIT BIC CHARACTERS IN W TO THEIR 02220600
8-BIT EBCDIC EQUIVALENTS AND RETURNS THE RESULTING WORD. 02220700
; 02220800
02220900
EBCDICBUFF[0]:= B.[5:6] & (B)[13:11:6] & (B)[21:17:6] & (B)[29:23:6] 02221000
& (B)[37:29:6] & (B)[45:35:6]; 02221100
REPLACE POINTER(EBCDICBUFF,8) BY 02221200
POINTER(EBCDICBUFF,8) FOR 6 WITH BICTOEBCDIC; 02221300
BIC2EBC:= EBCDICBUFF[0]; 02221400
END BIC2EBC; 02221500
$ ENDSEGMENT 02221600
02265000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02265100
%% END STREAM PROCEDURE EMULATION MODULE %%02265200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02265300
02267000=00510000=
COMMENT EXAMIN RETURNS THE CHARACTER AT ABSOLUTE ADDRESS NCR; 02267100=00510000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02267200=00511000=
REAL PROCEDURE EXAMIN(A, NCR); 02267300=00511000=
VALUE 02267400=00511000=
NCR; 02267500=00511000=
REAL 02267600
NCR; 02267700
ARRAY 02267800
A[0]; 02267900
BEGIN 02268000=00512000=
STREAMLOCALS; 02268100
STREAMSETSI(A, NCR); 02268200=00512000=
EXAMIN:= STREAMGETSC; 02268300=00512000=
END; 02268400=00512000=
02270000=00528000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02270100
%% INNER BLOCK OF COMPILER %%02270200
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%02270300
BEGIN 02270400=01000000=
COMMENT MAIN BLOCK; 02270500=01000000=
INTEGER 02275000=01000800=
OPINX; % USED FOR INDEXING INTO OPTIONS ARRAY. 02280000=01000800=
BOOLEAN 02285000=01000802=
SETTING; % USED BY DOLLARCARD FOR AN OPTION"S SETTING 02290000=01000802=
INTEGER 02295000=01000860=
NEWINX, 02300000=01000860=
ADDVALUE, 02305000=01000860=
BASENUM, 02310000=01000860=
TOTALNO; 02315000=01000860=
DEFINE 02320000=01000902=
OPARSIZE = 200 #; 02325000=01000902=
ARRAY 02330000=01000904=
OPTIONS[0:OPARSIZE]; 02335000=01000904=
BOOLEAN 02340000=01000910=
OPTIONWORD; 02345000=01000910=
DEFINE 02350000=01000920=
CHECKBIT = 1 #, 02355000=01000930=
DEBUGBIT = 2 #, 02360000=01000940=
DECKBIT = 3 #, 02365000=01000950=
FORMATBIT = 4 #, 02370000=01000960=
INTBIT = 5 #, 02375000=01000970=
LISTABIT = 6 #, 02380000=01000980=
LISTBIT = 7 #, 02385000=01000990=
LISTPBIT = 8 #, 02390000=01001000=
MCPBIT = 9 #, 02395000=01001010=
MERGEBIT = 10 #, 02400000=01001020=
NESTBIT = 11 #, 02405000=01001030=
NEWBIT = 12 #, 02410000=01001040=
NEWINCLBIT = 13 #, 02415000=01001050=
OMITBIT = 14 #, 02420000=01001060=
PRINTDOLLARBIT = 02425000=01001060=
15 #, 02430000=01001070=
PRTBIT = 16 #, 02435000=01001080=
PUNCHBIT = 17 #, 02440000=01001090=
PURGEBIT = 18 #, 02445000=01001100=
SEGSBIT = 19 #, 02450000=01001110=
SEQBIT = 20 #, 02455000=01001120=
SEQERRBIT = 21 #, 02460000=01001130=
SINGLBIT = 22 #, 02465000=01001140=
STUFFBIT = 23 #, 02470000=01001150=
VOIDBIT = 24 #, 02475000=01001160=
VOIDTBIT = 25 #, 02480000=01001170=
USEROPINX = 26 #; 02485000=01001170=
02490000=01001180=
COMMENT IF A NEW COMPILER-DEFINED OPTION IS ADDED, CHANGE USEROPINX 02495000=01001180=
AND ADD OPTION IN DEFINES BELOW, IN DOLLARCARD, AND IN 02500000=01001190=
FILL STATEMENT IN INITIALIZATION OF COMPILER; 02505000=01001200=
DEFINE 02510000=01001210=
CHECKTOG = OPTIONWORD.[CHECKBIT:1] #, 02515000=01001220=
DEBUGTOG = OPTIONWORD.[DEBUGBIT:1] #, 02520000=01001230=
DECKTOG = OPTIONWORD.[DECKBIT:1] #, 02525000=01001240=
FORMATOG = OPTIONWORD.[FORMATBIT:1] #, 02530000=01001250=
INTOG = OPTIONWORD.[INTBIT:1] #, 02535000=01001260=
LISTATOG = OPTIONWORD.[LISTABIT:1] #, 02540000=01001270=
LISTOG = OPTIONWORD.[LISTBIT:1] #, 02545000=01001280=
LISTPTOG = OPTIONWORD.[LISTPBIT:1] #, 02550000=01001290=
MCPTOG = OPTIONWORD.[MCPBIT:1] #, 02555000=01001300=
MERGETOG = OPTIONWORD.[MERGEBIT:1] #, 02560000=01001310=
NESTOG = OPTIONWORD.[NESTBIT:1] #, 02565000=01001320=
NEWTOG = OPTIONWORD.[NEWBIT:1] #, 02570000=01001330=
NEWINCL = OPTIONWORD.[NEWINCLBIT:1] #, 02575000=01001340=
OMITTING = OPTIONWORD.[OMITBIT:1] #, 02580000=01001350=
PRINTDOLLARTOG = 02585000=01001350=
OPTIONWORD.[PRINTDOLLARBIT:1] #, 02590000=01001360=
PRTOG = OPTIONWORD.[PRTBIT:1] #, 02595000=01001370=
PUNCHTOG = OPTIONWORD.[PUNCHBIT:1] #, 02600000=01001380=
PURGETOG = OPTIONWORD.[PURGEBIT:1] #, 02605000=01001390=
SEGSTOG = OPTIONWORD.[SEGSBIT:1] #, 02610000=01001400=
SEQTOG = OPTIONWORD.[SEQBIT:1] #, 02615000=01001410=
COMMENT SEQTOG INDICATES RESEQUENCING IS TO BE DONE; 02620000=01001410=
SEQERRTOG = OPTIONWORD.[SEQERRBIT:1] #, 02625000=01001430=
SINGLTOG = OPTIONWORD.[SINGLBIT:1] #, 02630000=01001440=
STUFFTOG = OPTIONWORD.[STUFFBIT:1] #, 02635000=01001450=
VOIDING = OPTIONWORD.[VOIDBIT:1] #, 02640000=01001460=
VOIDTAPE = OPTIONWORD.[VOIDTBIT:1] #, 02645000=01001470=
DUMMY = #; 02650000=01001470=
BOOLEAN 02655000=01001480=
NOHEADING; % TRUE IF DATIME HAS NOT BEEN CALLED. 02660000=01001480=
BOOLEAN 02665000=01001490=
NEWBASE; % NEW BASENUM FOUND ON A NEW $-CARD. 02670000=01001490=
INTEGER 02695000=01001530=
XMODE; % TELLS DOLLARCARD HOW TO SET OPTIONS. 02700000=01001530=
BOOLEAN 02705000=01001540=
DOLLARTOG; % TRUE IF SCANNING A DOLLAR CARD. 02710000=01001540=
INTEGER 02715000=01001550=
ERRMAX; % COMPILATION STOPS IF EXCEEDED. 02720000=01001550=
BOOLEAN 02725000=01001560=
SEQXEQTOG; % GIVE SEQ. NO. WHEN DS-ING OBJ. 02730000=01001560=
BOOLEAN 02735000=01001570=
LISTER; % LISTOG OR LISTATOG OR DEBUGTOG. 02740000=01001570=
ALPHA 02745000=01001580=
MEDIUM; % INPUT IS: T,C,P,CA,CB,CC. 02750000=01001580=
INTEGER 02755000=01001590=
MYCLASS; % USED IN DOLLARCARD EVALUATION. 02760000=01001590=
REAL 02765000=01001600=
BATMAN; % USED IN DOLLARCARD EVALUATION. 02770000=01001600=
ARRAY 02775000=01003000=
SPECIAL[0:31]; 02780000=01003000=
COMMENT THIS ARRAY HOLDS THE INTERNAL CODE FOR THE SPECIAL 02785000=01004000=
CHARACTORS: IT IS FILLED DURING INITIALIZATION; 02790000=01005000=
ARRAY 02795000=01007000=
INFO[0:127, 0:255]; 02800000=01007000=
COMMENT INFO CONTAINS ALL THE INFORMATION ABOUT A GIVEN IDENTIFIER 02805000=01008000=
OR RESERVED WORD. THE FIRST WORD OF A GIVEN ENTRY IS 02810000=01009000=
THE INTERNAL CODE ( OR ELBAT WORD AS IT IS USUALLY 02815000=01010000=
CALLED). THE SECOND WORD CONTAINS THE FORWARD BIT (IN 02820000=01011000=
[46:1]) FOR PROCEDURES, THE LINK TO PREVIOUS ENTRY (IN 02825000=01012000=
[43:8]). THE NUMBER OF CHARACTORS IN THE ALPHA REPRESENTA-02830000=01013000=
TION (IN [35:6]), AND THE FIRST 5 CHARACTERS OF ALPHA. 02835000=01014000=
SUCCEDING WORDS CONTAIN THE REMAINING CHARACTORS OF ALPHA,02840000=01015000=
FOLLOWED BY ANY ADDITIONAL INFORMATION. THE ELBAT WORD 02845000=01016000=
AND THE ALPHA FOR ANY QUANTITY ARE NOT SPLIT ACROSS A ROW 02850000=01017000=
OF INFO. FOR PURPOSES OF FINDING AN IDENTIFIER OR 02855000=01018000=
RESERVED WORD THE QUANTITIES ARE SCATTERED INTO 125 02860000=01019000=
DIFERENT LISTS OR STACKES. WHICH STACK CONTAINS A QUANTITY02865000=01020000=
IS GIVEN BY TAKING NAAAAA MOD 125 WHERE N IS THE NUMBER 02870000=01021000=
OF CHARACTORS AND AAAAA IS THE FIRST 5 CHARACTORS OF 02875000=01022000=
ALPHA, FILLED IN WITH ZEROS FROM THE RIGHT IF NEEDED. 02880000=01023000=
THIS NUMBER IS CALLED THE SCRAMBLE NUMBER OR INDEX. 02885000=01024000=
THE FIRST ROW OF INFO IS USED FOR OTHER PURPOSES. THE 02890000=01025000=
RESERVED WORDS OCCUPY THE SECOND ROW. IT IS FILLED DURING 02895000=01026000=
INITIALIZATION; 02900000=01027000=
02905000=01028000=
COMMENT INFO FORMAT 02910000=01028000=
FOLLOWING IS A DESCRIPTION OF THE FORMAT OF ALL TYPES OF ENTRIES 02915000=01029000=
ENTERED IN INFO: 02920000=01030000=
THE FIRST WORD OF ALL ENTRIES IS THE ELBAT WORD. 02925000=01031000=
THE INCR FIELD ([20:8]) CONTAINS AN INCREMENT WHICH WHEN 02930000=01032000=
ADDED TO THE CURRENT INDEX INTO INFO YELDSAN INDEX TO ANY 02935000=01033000=
ADDITIONAL INFO (IF ANY) FOR THIS ENTRY. 02940000=01034000=
E.G. IF THE INDEX IS IX THEN INFO[(IX+INCR).LINKR,(IX+INCR). 02945000=01035000=
LINKC] WILL CONTAIN THE FIRST WORD OF ADDITIONAL INFO. 02950000=01036000=
THE LINK FIELD OF THE ELBAT WORD IN INFO IS DIFFERENT FROM 02955000=01037000=
THAT OF THE ENTRY IN ELBAT PUT IN BY TABLE.THE ENTRY IN ELBAT 02960000=01038000=
POINTS TO ITS OWN LOCATION (RELATIVE) IN INFO. 02965000=01039000=
THE LINK IN INFO POINTS TO THE PREVIOUS ENTRY E.G.,THE 02970000=01040000=
LINK FROM STACKHEAD WHICH THE CURRENT ENTRY REPLACED. 02975000=01041000=
FOR SIMPLICITY,I WILL CONSIDER INFO TO BE A ONE DIMENSIONAL 02980000=01042000=
ARRAY,SO THAT THE BREAKING UP OF THE LINKS INTO ROW AND COLUMN 02985000=01043000=
WILL NOT DETRACT FROM THE DISCUSSION. 02990000=01044000=
ASSUME THAT THREE IDENTIFIERS A,B,AND C "SCRAMBLE" INTO 02995000=01045000=
THE SAME STACKHEAD LOCATION IN THE ORDER OF APPEARANCE. 03000000=01046000=
FURTHER ASSUME THERE ARE NO OTHER ENTRIES CONNECTED TO 03005000=01047000=
THIS STACKHEAD INDEX. LET THIS STACKHEAD LOCATION BE 03010000=01048000=
S[L] 03015000=01049000=
NOW THE DECLARATION 03020000=01050000=
BEGIN REAL A,B,C IS ENCOUNTERED 03025000=01051000=
IF THE NEXT AVAILABLE INFO SPACE IS CALLED NEXTINFO 03030000=01052000=
THEN A IS ENTERED AS FOLLOWS:(ASSUME AN ELBAT WORD T HAS BEEN 03035000=01053000=
CONSTRUCTED FOR A) 03040000=01054000=
T.LINK:= S[L]. (WHICH IS ZERO AT FIRST). 03045000=01055000=
INFO[NEXTINFO]:=T. S[L]:=NEXTINFO. 03050000=01056000=
NEXTINFO:=NEXTINFO+NUMBER OF WORDS IN THIS 03055000=01057000=
ENTRY. 03060000=01058000=
NOW S[L] POINTS TO THE ENTRY FOR A IN INFO AND THE ENTRY 03065000=01059000=
ITSELF CONTAINS THE STOP FLAG ZERO. 03070000=01060000=
B IS ENTERED SIMILARLY TO A. 03075000=01061000=
NOW S[L] POINTS TO THE ENTRY FOR B AND IT POINTS TO THE 03080000=01062000=
ENTRY FOR A. 03085000=01063000=
SIMILARLY,AFTER C IS ENTERED 03090000=01064000=
S[L] POINTS TO C,WHOSE ENTRY POINTS TO B WHOSE ENTRY 03095000=01065000=
POINTS TO A. 03100000=01066000=
THE SECOND WORD OF EACH ENTRY IN INFO IS MADE UP AS FOLLOWS: 03105000=01067000=
FWDPT =[46:1],THIS TELLS WHETHER A PROCEDURE WAS DECLARED 03110000=01068000=
FORWARD. IT IS RESET AT THE TIME OF ITS ACTUAL 03115000=01069000=
FULL DECLARATION. 03120000=01070000=
PURPT =[43:8] THIS GIVES A DECREMENT WHICH GIVES THE RELATIVE 03125000=01071000=
INDEX TO THE PREVIOUS INFO ENTRY WHEN SUBTRACTED 03130000=01072000=
FROM THE CURRENT ENTRY INDEX. 03135000=01073000=
[35:6] TELLS THE NUMBER OF CHARACTERS IN THE ENTRY.(<64) 03140000=01074000=
[29:30] CONTAINS THE FIRST FIVE ALPHA CHARACTERS OF THE ENTRY 03145000=01075000=
AND SUCCEEDING WORDS CONTAIN ALL OVERFLOW IF NEEDED. 03150000=01076000=
THESE WORDS CONTAIN 8 CHARACTERS EACH,LEFT JUSTIFIED. 03155000=01077000=
THUS,AN ENTRY FOR SYMBOL FOLLOWED BY AN ENTRY 03160000=01078000=
FOR X WOULD APPEAR AS FOLLOWS: 03165000=01079000=
INFO[I] = ELBATWRD (MADE FOR SYMBOL) 03170000=01080000=
I+1 = OP6SYMBO (P DEPENDS ON PREVIOUS ENTRY) 03175000=01081000=
I+2 = L 03180000=01082000=
I+3 = ELBATWRD (MADE FOR X) 03185000=01083000=
I+4 = 031X 03190000=01084000=
THIS SHOWS THAT INFO[I-P] WOULD POINT TO THE BEGINNING OF 03195000=01085000=
THE ENTRY BEFORE SYMBOL, AND 03200000=01086000=
INFO[I+3-3] POINTS TO THE ENTRY FOR SYMBOL. 03205000=01087000=
ALL ENTRIES OF IDNETIFIERS HAVE THE INFORMATION DESCRIBED ABOVE 03210000=01088000=
THAT IS,THE ELBAT WORD FOLLOWED BY THE WORD CONTAING THE FIRST 03215000=01089000=
FIVE CHARACTERS OF ALPHA,AND ANY ADDITIONAL WORDS OF ALPHA IF 03220000=01090000=
NECESSARY. 03225000=01091000=
THIS IS SUFFICIENT FOR ENTRIES OF THE FOLLOWING TYPES, 03230000=01092000=
REAL 03235000=01093000=
BOOLEAN 03240000=01094000=
INTEGER 03245000=01095000=
ALPHA 03250000=01096000=
FILE 03255000=01097000=
FORMAT 03260000=01098000=
LIST 03265000=01099000=
OTHER ENTRIES REQUIRE ADDITIONAL INFORMATION. 03270000=01100000=
ARRAYS: 03275000=01101000=
THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 03280000=01102000=
DIMENSIONS(IN THE LOW ORDER PART).[7:8] 03285000=01103000=
EACH SUCCEEDING WORD CONTAINS INFORMATION ABOUT EACH LOWER 03290000=01104000=
BOUND IN ORDER OF APPEARANCE,ONE WORD FOR EACH LOWER BOUND. 03295000=01105000=
THESE WORDS ARE MADE UP AS FOLLOWS: 03300000=01106000=
[24:12] =ADD OPERATOR SYLLABLE (0101) OR 03305000=01107000=
SUB OPERATOR SYLLABLE (0301) CORRESPONDING 03310000=01108000=
RESPECTIVELY TO WHETHER THE LOWER BOUND IS 03315000=01109000=
TO BE ADDED TO THE SUBSCRIPT IN INDEXING OR 03320000=01110000=
SUBTRACTED. 03325000=01111000=
[12:11] =11 BIT ADDRESS OF LOWER BOUND,IF THE LOWER BOUND 03330000=01112000=
REQUIRES A PRT OR STACK CELL,OTHERWISE THE BIT 03335000=01113000=
35 IS IGNORED AND THE NEXT TEN BITS([11:10]) 03340000=01114000=
REPRESENT THE ACTUAL VALUE OF THE LOWER BOUND 03345000=01115000=
[1:2] =00 OR 10 DEPENDING ON WHETHER THE [12:11] VALUE 03350000=01116000=
IS A LITERAL OR OPERAND,RESPECTIVELY. 03355000=01117000=
PROCEDURES: 03360000=01118000=
THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 03365000=01119000=
PARAMETERS [7:8] 03370000=01120000=
IF A STREAM PROCEDURE THEN THIS WORD CONTAINS ALSO IN 03375000=01121000=
[34:11] ENDING PRT ADDRESS FOR LABELS, 03380000=01122000=
[40:6] NO OF LABELS REQUIRING PRT ADDRESSES, AND [46:6] NUMBER 03385000=01123000=
OF LOCALS. 03390000=01124000=
SUCCEEDING WORDS (ONE FOR EACH FORMAL PARAMETER,IN ORDER 03395000=01125000=
OF APPEARANCE IN FORMAL PARAPART) ARE 03400000=01126000=
ELBAT WORDS SPECIFYING TYPE OF EACH PARAMETER AND WHETHER 03405000=01127000=
VALUE OR NOT([37:1]). 03410000=01128000=
THE ADDRESS([31:11]) IS THE F- ADDRESS FOR EACH. 03415000=01129000=
IF THE PARAMETER IS AN ARRAY THEN THE INCR FIELD([20:8]) 03420000=01130000=
CONTAINS THE NUMBER OF DIMENSIONS,OTHERWISE INCR IS MEANINGLESS. 03425000=01131000=
LINK([12:13]) IS MEANINGLESS. 03430000=01132000=
IF A STREAM PROCEDURE THEN THE CLASS OF EACH PARAMETER IS 03435000=01133000=
THAT OF LOCAL ID OR FILE ID, DEPENDING ON WHETHER OR NOT A RELEASE03440000=01134000=
IS DONE IN THE STREAM PROCEDURE. 03445000=01135000=
LABELS: 03450000=01136000=
AT DECLARATION TIME THE ADDITIONAL INFO CONTAINS 0. THE SIGN 03455000=01137000=
BIT TELLS WHETHER OR NOT THE DEFINITION POINT HAS BEEN REACHED. 03460000=01138000=
IF SIGN = 0, THEN [11:12] CONTAINS AN ADDRESS IN CODEARRAY OF A 03465000=01139000=
LIST OF FORWARD REFERENCES TO THIS LABEL. THE END OF LIST FLAG IS03470000=01140000=
0. IF SIGN =0, THEN [11:12] CONTAINS L FOR THIS LABEL. 03475000=01141000=
SWITCHES: 03480000=01142000=
THE FIELD [11:12] CONTAINS L FOR THE BEGINNING OF SWITCH DECLAR- 03485000=01143000=
ATION. [23:12] CONTAINS L FOR FIRST SIMPLE REFERENCE TO SWITCH. 03490000=01144000=
IF SWITCH IS NOT SIMPLE, IT IS MARKED FORMAL. HERE SIMPLE MEANS 03495000=01145000=
NO POSSIBILITY OF JUMPING OUT OF A BLOCK. ;03500000=01146000=
DEFINE 03505000=01147000=
MON = [46:1] #, 03510000=01148000=
CLASS = [45:7] #, 03515000=01149000=
FORMAL = [38:1] #, 03520000=01150000=
VO = [37:1] #, 03525000=01151000=
LVL = [36:5] #, 03530000=01152000=
ADDRESS = [31:11] #, 03535000=01153000=
INCR = [20:8] #, 03540000=01154000=
LINK = [12:13] #, 03545000=01155000=
LINKR = [12:5] #, 03550000=01156000=
LINKC = [7:8] #; 03555000=01156000=
03560000=01157000=
COMMENT THESE DEFINES ARE USED TO PICK APART THE ELBAT WORD. 03565000=01157000=
MON IS THE BIT WHICH IS ON IF THE QUANTITY IS MONITORED. 03570000=01158000=
CLASS IS THE PRINCIPAL IDENTIFICATION OF A GIVEN 03575000=01159000=
QUANTITY. 03580000=01160000=
FORMAL IS THE BIT WHICH IS ON IF THE QUANTITY IS A FORMAL 03585000=01161000=
PARAMETER. 03590000=01162000=
VO IS THE VALUE-OWN BIT. IF FORMAL = 1 THEN THE BIT 03595000=01163000=
DISTINGUISHES VALUE PARAMETERS FROM OTHERS. IF 03600000=01164000=
FORMAL = 0 THEN THE BIT DISTINGUISHES OWN VARIABLES 03605000=01165000=
FROM OTHERS. 03610000=01166000=
LVL GIVES THE LEVEL AT WHICH A QUANTITY WAS DECLARED. 03615000=01167000=
ADDRESS GIVES THE STACK OR PRT ADDRESS. 03620000=01168000=
INCR GIVES A RELATIVE LINK TO ANY ADDITIONAL INFORMATION 03625000=01169000=
NEEDED, RELATIVE TO THE LOCATION IN INFO. 03630000=01170000=
LINK CONTAINS A LINK TO THE LOCATION IN INFO IF THE 03635000=01171000=
QUANTITY LIES IN ELBAT, OTHERWISE IT LINKS TO THE 03640000=01172000=
NEXT ITEM IN THE STACK. ZERO IS AN END FLAG. 03645000=01173000=
LINKR AND LINKC ARE SUBDIVISIONS OF LINK.; 03650000=01174000=
03655000=01175000=
COMMENT CLASSES FOR ALL QUANTITIES - OCTAL CLASS IS IN COMMENT; 03660000=01175000=
COMMENT CLASSES FOR IDENTIFIERS; 03665000=01176000=
DEFINE 03670000=01177000=
UNKNOWNID = 00 #, COMMENT 000; 03675000=01177000=
STLABID = 01 #, COMMENT 001; 03680000=01178000=
LOCLID = 02 #, COMMENT 002; 03685000=01179000=
DEFINEDID = 03 #, COMMENT 003; 03690000=01180000=
LISTID = 04 #, COMMENT 004; 03695000=01181000=
FRMTID = 05 #, COMMENT 005; 03700000=01182000=
SUPERFRMTID = 06 #, COMMENT 006; 03705000=01183000=
REALSUBID = 07 #, COMMENT 007; 03710000=01184000=
SUBID = 08 #, COMMENT 010; 03715000=01185000=
SWITCHID = 09 #, COMMENT 011; 03720000=01186000=
PROCID = 10 #, COMMENT 012; 03725000=01187000=
INTRNSICPROCID = 03730000=01188000=
11 #, COMMENT 013; 03735000=01188000=
STRPROCID = 12 #, COMMENT 014; 03740000=01189000=
BOOSTRPROCID = 13 #, COMMENT 015; 03745000=01190000=
REALSTRPROCID = 14 #, COMMENT 016; 03750000=01191000=
ALFASTRPROCID = 15 #, COMMENT 017; 03755000=01192000=
INTSTRPROCID = 15 #, COMMENT 017; 03760000=01193000=
BOOPROCID = 17 #, COMMENT 021; 03765000=01194000=
REALPROCID = 18 #, COMMENT 022; 03770000=01195000=
ALFAPROCID = 19 #, COMMENT 023; 03775000=01196000=
INTPROCID = 19 #, COMMENT 023; 03780000=01197000=
BOOID = 21 #, COMMENT 025; 03785000=01198000=
REALID = 22 #, COMMENT 026; 03790000=01199000=
ALFAID = 23 #, COMMENT 027; 03795000=01200000=
INTID = 23 #, COMMENT 027; 03800000=01201000=
BOOARRAYID = 25 #, COMMENT 031; 03805000=01202000=
REALARRAYID = 26 #, COMMENT 032; 03810000=01203000=
ALFAARRAYID = 27 #, COMMENT 033; 03815000=01204000=
INTARRAYID = 27 #, COMMENT 033; 03820000=01205000=
NAMEID = 30 #, COMMENT 036; 03825000=01205200=
INTNAMEID = 31 #, COMMENT 037; 03830000=01205400=
LABELID = 32 #, COMMENT 040; 03835000=01206000=
03840000=01207000=
COMMENT CLASSES FOR PRIMARY BEGINNERS; 03845000=01207000=
TRUTHV = 33 #, COMMENT 041; 03850000=01208000=
NONLITNO = 34 #, COMMENT 042; 03855000=01209000=
LITNO = 35 #, COMMENT 043; 03860000=01210000=
STRNGCON = 36 #, COMMENT 044; 03865000=01211000=
LEFTPAREN = 37 #, COMMENT 045; 03870000=01212000=
POLISHV = 38 #, COMMENT 046; 03875000=01212100=
ASTRISK = 39 #, COMMENT 047; 03880000=01212200=
03885000=01213000=
COMMENT CLASS FOR ALL DECLARATORS; 03890000=01213000=
DECLARATORS = 40 #, COMMENT 050; 03895000=01214000=
03900000=01215000=
COMMENT CLASSES FOR STATEMENT BEGINNERS 03905000=01215000=
DOUBLEV =42#, COMMENT 052; 03910000=01222000=
FORV = 43 #, COMMENT 053; 03915000=01223000=
WHILEV = 44 #, COMMENT 054; 03920000=01224000=
DOV = 45 #, COMMENT 055; 03925000=01225000=
UNTILV = 46 #, COMMENT 056; 03930000=01226000=
ELSEV = 47 #, COMMENT 057; 03935000=01227000=
ENDV = 48 #, COMMENT 060; 03940000=01228000=
SEMICOLON = 50 #, COMMENT 062; 03945000=01230000=
IFV = 51 #, COMMENT 063; 03950000=01231000=
GOV = 52 #, COMMENT 064; 03955000=01232000=
IOCLASS = 53 #, COMMENT 065; 03960000=01233000=
BEGINV = 54 #, COMMENT 066; 03965000=01234000=
03970000=01235000=
COMMENT CLASSES FOR STREAM RESERVED WORDS; 03975000=01235000=
SIV = 55 #, COMMENT 067; 03980000=01236000=
DIQ = 56 #, COMMENT 070; 03985000=01237000=
CIV = 57 #, COMMENT 071; 03990000=01238000=
TALLYV = 58 #, COMMENT 072; 03995000=01239000=
DSV = 59 #, COMMENT 073; 04000000=01240000=
SKIPV = 60 #, COMMENT 074; 04005000=01241000=
JUMPV = 61 #, COMMENT 075; 04010000=01242000=
DBV = 62 #, COMMENT 076; 04015000=01243000=
SBV = 63 #, COMMENT 077; 04020000=01244000=
TOGGLEV = 64 #, COMMENT 100; 04025000=01245000=
SCV = 65 #, COMMENT 101; 04030000=01246000=
LOCV = 66 #, COMMENT 102; 04035000=01247000=
DCV = 67 #, COMMENT 103; 04040000=01248000=
LOCALV = 68 #, COMMENT 104; 04045000=01249000=
LITV = 69 #, COMMENT 105; 04050000=01250000=
TRNSFER = 70 #, COMMENT 106; 04055000=01251000=
04060000=01252000=
COMMENT CLASSES FOR VARIOUS MISCELLANEOUS QUANTITIES; 04065000=01252000=
COMMENTV = 71 #, COMMENT 107; 04070000=01253000=
FORWARDV = 72 #, COMMENT 110; 04075000=01254000=
STEPV = 73 #, COMMENT 111; 04080000=01255000=
THENV = 74 #, COMMENT 112; 04085000=01256000=
TOV = 75 #, COMMENT 113; 04090000=01257000=
VALUEV = 76 #, COMMENT 114; 04095000=01258000=
WITHV = 77 #, COMMENT 115; 04100000=01259000=
COLON = 78 #, COMMENT 116; 04105000=01260000=
COMMA = 79 #, COMMENT 117; 04110000=01261000=
CROSSHATCH = 80 #, COMMENT 120; 04115000=01262000=
LFTBRKET = 81 #, COMMENT 121; 04120000=01263000=
PERIOD = 82 #, COMMENT 122; 04125000=01264000=
RTBRKET = 83 #, COMMENT 123; 04130000=01265000=
RTPAREN = 84 #, COMMENT 124; 04135000=01266000=
AMPERSAND = 85 #, COMMENT 125; 04140000=01266500=
04145000=01267000=
COMMENT CLASSES FOR OPERATORS; 04150000=01267000=
HEXOP = 86 #, COMMENT 126; 04155000=01268000=
BITOP = 87 #, COMMENT 127; 04160000=01269000=
ISOLATE = 88 #, COMMENT 130; 04165000=01270000=
OPERATOR = 89 #, COMMENT 131; 04170000=01271000=
NOTOP = 90 #, COMMENT 132; 04175000=01272000=
ASSIGNOP = 91 #, COMMENT 133; 04180000=01273000=
EQVOP = 92 #, COMMENT 134; 04185000=01274000=
OROP = 93 #, COMMENT 135; 04190000=01275000=
ANDOP = 94 #, COMMENT 136; 04195000=01276000=
RELOP = 95 #, COMMENT 137; 04200000=01277000=
ADDOP = 96 #, COMMENT 140; 04205000=01278000=
MULOP = 97 #, COMMENT 141; 04210000=01278500=
% STRING =99#, COMMENT 143; 04215000=01278600=
COMMENT SUBCLASSES FOR DECLARATORS (KEPT IN ADDRESS); 04220000=01279000=
OWNV = 01 #, COMMENT 01; 04225000=01280000=
SAVEV = 02 #, COMMENT 02; 04230000=01281000=
BOOV = 03 #, COMMENT 03; 04235000=01282000=
REALV = 04 #, COMMENT 04; 04240000=01283000=
ALFAV = 05 #, COMMENT 05; 04245000=01284000=
INTV = 05 #, COMMENT 05; 04250000=01285000=
LABELV = 07 #, COMMENT 07; 04255000=01286000=
DUMPV = 08 #, COMMENT 10; 04260000=01287000=
SUBV = 09 #, COMMENT 11; 04265000=01288000=
OUTV = 10 #, COMMENT 12; 04270000=01289000=
INV = 11 #, COMMENT 13; 04275000=01290000=
MONITORV = 12 #, COMMENT 14; 04280000=01291000=
SWITCHV = 13 #, COMMENT 15; 04285000=01292000=
PROCV = 14 #, COMMENT 16; 04290000=01293000=
ARRAYV = 15 #, COMMENT 17; 04295000=01294000=
NAMEV = 16 #, COMMENT 20; 04300000=01295000=
FILEV = 17 #, COMMENT 21; 04305000=01296000=
STREAMV = 18 #, COMMENT 22; 04310000=01297000=
DEFINEV = 19 #, COMMENT 23; 04315000=01298000=
DEFINEDDES = 8 #, 04320000=01299010=
ADES = 28 #, 04325000=01299020=
PDES = 29 #, 04330000=01299030=
LDES = 30 #, 04335000=01299040=
CHAR = 31 #, 04340000=01299100=
FACTOP = ASTRISK #, 04345000=01299200=
OPERATORS = HEXOP #, 04350000=01299300=
FILEID = 0 #, 04355000=01299400=
MAXINTRINSIC = 150 #, 04360000=01299400=
% USED IN BUILDING INTABLE @ 09414120 04365000=01299400=
INTRINSICADR = (MAXINTRINSIC DIV 30) #; % RESERVES SEG FOR INTABLE04370000=01299500=
REAL 04375000=01300000=
TIME1; 04380000=01300000=
BOOLEAN 04385000=01300100=
ASTOG; 04390000=01300100=
BOOLEAN 04395000=01300200=
SAF; 04400000=01300200=
INTEGER 04405000=01301000=
SCRAM; 04410000=01301000=
COMMENT SCRAM CONTAINS THE SCRAMBLE INDEX FOR THE LAST IDENTIFIER 04415000=01302000=
OR RESERVED WORD SCANNED; 04420000=01303000=
ALPHA ARRAY 04425000=01304000=
ACCUM[0:10]; 04430000=01304000=
COMMENT ACCUM HOLDS THE ALPHA AND CHARACTER COUNT OF THE LAST 04435000=01305000=
SCANNED ITEM IN A FORM COMPATIBLE WITH ITS APPEARANCE 04440000=01306000=
IN INFO. THAT IS ACCUM[1] = 00NAAAAA, ACCUM[I] , I> 1, 04445000=01307000=
HAS ANY ADDITIONAL CHARACTERS. ACCUM[0] IS USED FOR 04450000=01308000=
THE ELBAT WORD BY THE ENTER ROUTINES; 04455000=01309000=
ARRAY 04460000=01310000=
STACKHEAD[0:125]; 04465000=01310000=
COMMENT STACKHEAD[N] CONTAINS AN INDEX INTO INFO GIVING THE TOP 04470000=01311000=
ITEM IN THE N-TH STACK; 04475000=01312000=
INTEGER 04480000=01313000=
COUNT; 04485000=01313000=
COMMENT COUNT CONTAINS THE NUMBER OF CHARACTORS OF THE LAST ITEM 04490000=01314000=
SCANNED; 04495000=01315000=
ALPHA 04500000=01316000=
Q; 04505000=01316000=
COMMENT Q CONTAINS ACCUM[1] FOR THE LAST IDENTIFIER OR RESERVED 04510000=01317000=
WORD SCANNED; 04515000=01318000=
ARRAY 04520000=01319000=
ELBAT[0:75]; 04525000=01319000=
INTEGER 04530000=01319000=
I, 04535000=01319000=
NXTELBT; 04540000=01319000=
COMMENT ELBAT IS AN ARRAY HOLDING ELBAT WORDS FOR RECENTLY SCANNED 04545000=01320000=
QUANTITIES. THE TABLE ROUTINE MAINTAINS THIS ARRAY. 04550000=01321000=
(ELBAT IS TABLE SPELLED BACKWARDS.) THE TABLE ROUTINE 04555000=01322000=
GUARANTIES THAT ELBAT ALWAYS CONTAINS THE ELBAT WORDS 04560000=01323000=
FOR THE LAST 10 QUANTITIES SCANNED. NXTELBT IS AN INDEX 04565000=01324000=
POINTING TO THE NEXT AVAILABLE WORD IN ELBAT. I IS AN 04570000=01325000=
INDEX USED BY THE REST OF THE COMPILER TO FETCH THINGS 04575000=01326000=
FROM ELBAT. I IS ALSO MAINTAINED BY THE TABLE ROUTINE; 04580000=01327000=
INTEGER 04585000=01328000=
ELCLASS; 04590000=01328000=
COMMENT ELCLASS USUALLY CONTAINS ELBAT[I].CLASS; 04595000=01329000=
INTEGER 04600000=01330000=
FCR, 04605000=01330000=
NCR, 04610000=01330000=
LCR, 04615000=01330000=
CLCR; 04625000=01330000=
ARRAY REFERENCE 04630000
SBUFF[0]; % CURRENT SOURCE INPUT BUFFER 04635100
COMMENT FCR CONTAINS ABSOLUTE ADDRESS OF THE FIRST CHARACTOR OF 04640000=01332000=
THE CARD IMAGE CURRENTLY BEING SCANNED, NCR THE ADDRESS 04645000=01333000=
OF THE NEXT CHARACTOR TO BE SCANNED, AND LCR THE LAST 04650000=01334000=
CHARACTOR (COLUMN 73). CLCR CONTAIN ADDRESS OF 04655000=01335000=
THE LAST CHARACTER IN THE CARD BUFFERS; 04660000=01336000=
ARRAY 04670000=01340000=
TEN[-46:69]; 04675000=01340000=
DEFINE 04680000=01342000=
PRTBASE = 129 #, 04685000=01342000=
PRTOP = 896 #; COMMENT PAGE AND TOP OF PRT; 04690000=01342000=
ARRAY 04700000=01343000=
PRT[PRTBASE:PRTOP]; 04705000=01343000=
INTEGER 04710000=01344000=
DISKADR, 04715000=01344000=
CORADR; COMMENT GLOBALS FOR PROGDESCBLDR; 04720000=01344000=
INTEGER 04730000=01369000=
SGAVL; COMMENT NEXT AVAILABLE SEGMENT NUMBER; 04735000=01369000=
INTEGER 04745000=01370000=
SGNO; COMMENT THIS IS THE CURRENT SEGMENT NUMBER; 04750000=01370000=
ARRAY 04760000=01371000=
COP, 04765000=01371000=
WOP[0:127]; 04770000=01371000=
COMMENT THE EMIT ROUTINES PLACE EACH SYLLABLE INTO THE EDOC ARRAY 04775000=01372000=
AS SPECIFIED BY "L". 04780000=01373000=
IF THE DEBUGTOG IS TRUE COP AND WOP ARE FILLED WITH 04785000=01374000=
THE BCD FOR THE OPERATORS,OTHERWISE THEY ARE NOT USED; 04790000=01375000=
REAL 04795000=01376000=
LASTENTRY; 04800000=01376000=
COMMENT LASTENTRY IS USED BY EMITNUM AND CONSTANTCLEAN. IT POINTS 04805000=01377000=
INTO INFO[0,*] AT THE NEXT AVAILABLE CELL FOR CONSTANTS; 04810000=01378000=
BOOLEAN 04815000=01379000=
MRCLEAN; 04820000=01379000=
COMMENT NO CONSTANTCLEAN ACTION TAKES PLACE WHILE MRCLEAN IS 04825000=01380000=
FALSE. THIS FEATURE IS USED BY BLOCK BECAUSE OF THE 04830000=01381000=
POSSIBILITY THAT CONSTANTCLEAN WILL USE INFO[NEXTINFO] 04835000=01382000=
DURING AN ARRAY DECLARATION ; 04840000=01383000=
REAL 04845000=01384000=
GT1, 04850000=01384000=
GT2, 04855000=01384000=
GT3, 04860000=01384000=
GT4, 04865000=01384000=
GT5; 04870000=01384000=
INTEGER 04875000=01384500=
GTI1; 04880000=01384500=
COMMENT THESE VARIABLES ARE USED FOR TEMPORARY STORAGE; 04885000=01385000=
INTEGER 04890000=01386000=
RESULT; 04895000=01386000=
COMMENT THIS VARIABLE IS USED FOR A DUAL PURPOSE BY THE TABLE 04900000=01387000=
ROUTINE AND THE SCANNER. THE TABLE ROUTINE USES THIS 04905000=01388000=
VARIABLE TO SPECIFY SCANNER OPERATIONS AND THE SCANNER 04910000=01389000=
USES IT TO INFORM THE TABLE ROUTINE OF THE ACTION TAKEN; 04915000=01390000=
INTEGER 04920000=01391000=
LASTUSED; 04925000=01391000=
COMMENT LASTUSED IS A VARIABLE THAT CONTROLS THE ACTION OF 04930000=01392000=
READACARD, THE ROUTINE WHICH READS CARDS AND INITIALIZES 04935000=01393000=
OR PREPARES THE CARD FOR THE SCANNER. 04940000=01394000=
LASTUSED LAST CARD READ FROM 04945000=01394500=
-------- ------------------- 04950000=01394600=
1 CARD READER ONLY, NO TAPE. 04955000=01395000=
2 CARD READER, TAPE AND CARD MERGE. 04960000=01396000=
3 TAPE, TAPE AND CARD MERGE. 04965000=01397000=
4 INITIALIZATION ONLY, CARD ONLY. 04970000=01398000=
; 04975000=01398300=
BOOLEAN 04980000=01399000=
LINKTOG; 04985000=01399000=
COMMENT LINKTOG IS FALSE IF THE LAST THING EMITTED IS A LINK, 04990000=01400000=
OTHERWISE IT IS TRUE; 04995000=01401000=
INTEGER 05000000=01402000=
LEVEL, 05005000=01402000=
FRSTLEVEL, 05010000=01402000=
SUBLEVEL, 05015000=01402000=
MODE; 05020000=01402000=
COMMENT THESE VARIABLES ARE MAINTAINED BY THE BLOCK ROUTINE TO KEEP 05025000=01403000=
TRACK OF LEVELS OF DEFINITION. LEVEL GIVES THE DEPTH OF 05030000=01404000=
NESTING IN DEFINITION, WHERE EACH BLOCK AND EACH PROCEDURE05035000=01405000=
GIVES RISE TO A NEW LEVEL. SUBLEVEL GIVES THE LEVEL OF 05040000=01406000=
THE PARAMETERS OF THE PROCEDURE CURRENTLY BEING COMPILED. 05045000=01407000=
FRSTLEVEL IS THE LEVEL OF THE PARAMETERS OF THE MOST 05050000=01408000=
GLOBAL OF THE PROCEDURES CURRENTLY BEING COMPILED. MODE 05055000=01409000=
IS THE CURRENT DEPTH OF THE PROCEDURE IN WHICH WE ARE 05060000=01410000=
NESTED (AT COMPILE TIME); 05065000=01411000=
BOOLEAN 05070000=01412000=
ERRORTOG; 05075000=01412000=
COMMENT ERRORTOG IS TRUE IF MESSAGES ARE CURRENTLY ACCEPTABLE TO THE05080000=01413000=
ERROR ROUTINES. ERRORCOUNT IS THE COUNT OF ERROR MSSGS; 05085000=01414000=
BOOLEAN 05090000=01415000=
ENDTOG; COMMENT ENDTOG TELLS THE TABLE TO ALLOW 05095000=01415000=
COMMENT TO BE PASSED BACK TO COMPOUNDTAIL; 05105000=01416000=
BOOLEAN 05110000=01417000=
STREAMTOG; 05115000=01417000=
COMMENT STREAMTOG IS TRUE IF WE ARE COMPILING STREAM STATEMENT. IT 05120000=01418000=
IS USED TO CONTROL COMPOUNDTAIL; 05125000=01419000=
DEFINE 05130000=01420000=
FS = 1 #, 05135000=01420000=
FP = 2 #, 05140000=01420000=
FL = 3 #, 05145000=01420000=
FR = 4 #; 05150000=01420000=
COMMENT THESE DEFINES ARE USED WHEN CALLING THE VARIABLE ROUTINE. 05155000=01421000=
THEIR PURPOSES IS TO TELL VARIABLE WHO IS CALLING. 05160000=01422000=
THEIR MEANING IS: 05165000=01423000=
FS MEANS FROM STATEMENT, 05170000=01424000=
FP MEANS FROM PRIMARY, 05175000=01425000=
FL MEANS FROM LIST, 05180000=01426000=
FR MEANS FROM FOR; 05185000=01427000=
INTEGER 05190000=01428000=
L; 05195000=01428000=
COMMENT L IS THE LOCATION OF THE NEXT SYLLABLE TO BE EMITTED; 05200000=01429000=
DEFINE 05205000=01430000=
BLOCKCTR = 16 #, 05210000=01430000=
JUNK = 17 #, 05215000=01430000=
XITR = 18 #, 05220000=01430000=
LSTRTN = 19 #; 05225000=01430000=
DEFINE 05230000=01452000=
ATYPE = 3 #, 05235000=01452000=
BTYPE = ATYPE #, 05240000=01452000=
DTYPE = ATYPE #; 05245000=01452000=
BOOLEAN 05250000=01457000=
TB1; 05255000=01457000=
COMMENT TB1 IS A TEMPORARY BOOLEAN VARIABLE; 05260000=01458000=
INTEGER 05265000=01459000=
JUMPCTR; 05270000=01459000=
COMMENT JUMPCTR IS A VARIABLE USED FOR COMMUNICATION BETWEEN BLOCK 05275000=01460000=
AND GENGO. IT GIVES HIGHEST LEVEL TO WHICH A JUMP HAS 05280000=01461000=
BEEN MADE FROM WITHIN A THE PRESENTLY BEING COMPILED 05285000=01462000=
SEGMENT. THE BLOCK COMPILES CODE TO INCREMENT AND DECRE- 05290000=01463000=
MENT THE BLOCKCTR ON THE BASIS OF JUMPCTR AT COMPLETION 05295000=01464000=
OF COMPILATION OF A SEGMENT - I.E. THE BLOCKCTR IS TALLIED 05300000=01465000=
IF LEVEL = JUMPCTR; 05305000=01466000=
REAL 05310000=01471000=
STLB; 05315000=01471000=
COMMENT STLB IS USED BY VARIABLE AND ACTUALPARAPART TO COMMUNICATE 05320000=01472000=
THE LOWER BOUND INFORMATION FOR THE LAST DIMENSION OF THE 05325000=01473000=
ARRAY INVOLVED IN A ROW DESIGNATOR. THE FORMAT OF THE 05330000=01474000=
INFORMATION IS THAT OF INFO. STLB IS ALSO SOMETIMES USED 05335000=01475000=
FOR TEMPORARY STORAGE; 05340000=01476000=
DEFINE 05345000=01477000=
BUMPL = L:= L+2 #; 05350000=01477000=
COMMENT BUMPL IS USED MOSTLY TO PREPARE A FORWARD JUMP; 05355000=01478000=
DEFINE 05360000=01479000=
IDMAX = LABELID #; 05365000=01479000=
COMMENT IDMAX IS THE MAXIMUM CLASS NUMBER FOR IDENTIFIERS; 05370000=01480000=
INTEGER 05375000=01481000=
DEFINECTR, 05380000=01481000=
DEFINEINDEX; 05385000=01481000=
REAL 05390000=01482000=
JOINFO, COMMENT POINTS TO PSEUDO LABEL FOR JUMP OUTS; 05395000=01482000=
LPRT, COMMENT SHOWS LOCATION OF THE LAST LABEL IN THE PRT ; 05400000=01483000=
NESTLEVEL, COMMENT COUNTS NESTING FOR GO TO AND JUMP OUTS; 05405000=01484000=
JUMPLEVEL; COMMENT NUMBER OF LEVELS TO BE JUMPED OUT; 05410000=01485000=
05420000=01486000=
COMMENT THE REALS ABOVE ARE FOR STREAM STATEMENT; 05425000=01486000=
ARRAY 05430000=01487000=
MACRO[0:35]; 05435000=01487000=
COMMENT MACRO IS FILLED WITH SYLLABLES FOR STREAM STATEMENT; 05440000=01488000=
REAL 05445000=01489000=
P, COMMENT CONTAINS NUMBER OF FORMALS FOR STREAM PROCS; 05450000=01489000=
Z; COMMENT CONTAINS 1ST WORD OF INFO FOR STREAM FUNCTIONS; 05455000=01490000=
ARRAY 05465000=01490510=
DEFINEARRAY[0:23]; % >>>>> can 0:23 be right ?? SB 0:34 ?? <<<<< 05475000=01491000=
COMMENT THESE VARIABLES ARE USED TO CONTROL ACTION OF THE DEFINE. 05480000=01492000=
DEFINECTR COUNTS DEPTH OF NESTING OF DEFINE-# PAIRS. 05485000=01493000=
THE CROSSHATCH PART OF THE TABLE ROUTINE USES DEFINECTR 05490000=01494000=
TO DETERMINE THE MEANING OF A CROSSHATCH. DEFINEINDEX IS 05495000=01495000=
THE NEXT AVAILABLE CELL IN THE DEFINEARRAY. THE DEFINE- 05500000=01496000=
ARRAY HOLDS THE ALPHA OF THE DEFINE BEING RECREATED AND 05505000=01497000=
THE PREVIOUS VALUES OF LASTUSED, LCR, AND NCR; 05510000=01498000=
INTEGER 05515000=01499000=
BEGINCTR; 05520000=01499000=
COMMENT BEGINCTR GIVES THE NUMBER OF UNMATCHED BEGINS. IT IS USED05525000=01500000=
FOR ERROR CONTROL ONLY; 05530000=01501000=
INTEGER 05535000=01502000=
DIALA, 05540000=01502000=
DIALB; 05545000=01502000=
COMMENT THESE VARIABLES GIVE THE LAST VALUE TO WHICH A AND B WERE 05550000=01503000=
DIALED. THIS GIVES SOME LOCAL OPTIMIZATION. EMITD 05555000=01504000=
WORRIES ABOUT THIS. OTHER ROUTINES CAUSE A LOSS OF MEMORY05560000=01505000=
BY SETTING DIALA AND DIALB TO ZERO; 05565000=01506000=
BOOLEAN 05570000=01522000=
RRB1; COMMENT RRB1---RRBN ARE BOOLEAN VARIABLES THAT SERVE THE 05575000=01522000=
SAME FUNCTION AS RR1---RRN FOR REAL VARIABLES. SEE 05585000=01523000=
COMMENT AT RR1; 05590000=01524000=
BOOLEAN 05595000=01525000=
RRB2; COMMENT SEE COMMENT AT RRB1 DECLARATION; 05600000=01525000=
DEFINE 05610000=01526000=
ARRAYMONFILE = [20:11] #; COMMENT ARRAYMONFILE IS THE DEFINE FOR 05615000=01526000=
THE ADDRESS OF THE FILE DESCRIPTOR IN 05625000=01527000=
THE FIRST WORD OF ADDITIONAL INFO; 05630000=01528000=
DEFINE 05635000=01529000=
SVARMONFILE = [10:11] #; COMMENT MONITORFILE IS THE DEFINE FOR 05640000=01529000=
THE ADDRESS OF THE FILE DESCRIPTOR IN 05650000=01530000=
INFO FOR MONITORED SIMPLE VARIABLES; 05655000=01531000=
DEFINE 05660000=01532000=
NODIMPART = [7:8] #;COMMENT THE FIRST ADDITIONAL WORD OF INFO 05665000=01532000=
FOR ARRAYS CONTAINS THE NUMBER OF DIMENSIONS05675000=01533000=
IN NODIMPART; 05680000=01534000=
DEFINE 05685000=01535000=
LABLMONFILE = [34:11] #; COMMENT LABLMONFILE DESIGNATES THE BIT 05690000=01535000=
POSITION IN THE FIRST WORD OF ADDITIONAL 05700000=01536000=
INFO THAT CONTAINS THE MONITOR FILE 05705000=01537000=
ADDRESS FOR LABELS; 05710000=01538000=
DEFINE 05715000=01539000=
SWITMONFILE = [34:11] #; COMMENT SWITMONFILE DESIGNATES THE BIT 05720000=01539000=
POSITION IN THE FIRST WORD OF ADDITIONAL 05730000=01540000=
INFO THAT CONTAINS THE MONITOR FILE 05735000=01541000=
ADDRESS FOR LABELS; 05740000=01542000=
DEFINE 05745000=01543000=
FUNCMONFILE = [20:11] #; COMMENT FUNCMONFILE DESIGNATES THE BIT 05750000=01543000=
POSITION IN THE FIRST WORD OF ADDITIONAL 05760000=01544000=
INFO THAT CONTAINS THE MONITOR FILE 05765000=01545000=
ADDRESS FOR LABELS; 05770000=01546000=
DEFINE 05775000=01547000=
DUMPEE = [45:11] #; 05780000=01547000=
COMMENT THE DUMPEE FIELD IN THE FIRST 05785000=01547000=
ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 05790000=01548000=
THE ADDRESS OF THE COUNTER THAT IS INCREMENTED 05795000=01549000=
EACH TIME THE LABEL IS PASSED IF THAT LABEL 05800000=01550000=
APPEARS IN A DUMP DECLARATION; 05805000=01551000=
DEFINE 05810000=01552000=
DUMPOR = [23:11] #; 05815000=01552000=
COMMENT THE DUMPOR FIELD IN THE FIRST 05820000=01552000=
ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 05825000=01553000=
THE ADDRESS OF THE ROUTINE THAT IS GENERATED 05830000=01554000=
FROM THE DUMP DECLARATION THAT IN TURN CALLS 05835000=01555000=
THE PRINTI ROUTINE; 05840000=01556000=
DEFINE 05845000=01556500=
SUBOP = 48 #; 05850000=01556500=
ARRAY 05855000=01556900=
CODEBUFF[0:1023]; % CODE BUFFER (WAS A FILE) 05860000=01556900=
FILE 05865000=01557000=
CARD(KIND=DISK, DEPENDENTSPECS, FILEUSE=IN); 05870000=01557000=
FILE 05875000=01558000=
LINE(KIND=PRINTER, MAXRECSIZE=20, FRAMESIZE=48, FILEUSE=OUT); 05880000=01558000=
ARRAY 05885000=01559010=
LIN[0:20]; COMMENT PRINT OUTPUT BUILT IN LIN; 05890000=01559010=
INTEGER 05900000=01559020=
DA; 05905000=01559020=
INTEGER 05910000
CARDRECSIZE, % FRAMESIZE UNITS 05910100
CODELENGTH; % LENGTH OF DATA IN CODE[*] 05910500
ARRAY 05911000=01561056=
CBUFF[0:9]; % INPUT BUFFER. 05912000
FILE 05930000=01561300=
CODISK(KIND=DISK, MAXRECSIZE=30, BLOCKSIZE=300, FRAMESIZE=48, 05935000=01561300=
AREAS=20, AREASIZE=600); 05936000
FILE 05940000=01561400=
DISK(KIND=DISK, MAXRECSIZE=30, BLOCKSIZE=300, FRAMESIZE=48, 05945000=01561400=
AREAS=1, AREASIZE=2100, PROTECTION=SAVE, TITLE="MCP/DISK."); 05946000=01561400=
DEFINE 05950000=01561410=
MCPTYPE = 63 #, 05955000=01561420=
DCINTYPE = 62 #, 05960000=01561430=
TSSINTYPE = 61 #; 05965000=01561430=
05970000=01561440=
COMMENT ESPOL CODE FILES ARE UNIQUELY TYPED IN THEIR FILE 05975000=01561440=
HEADERS. HEADER[4].[11:6] IS THE FIELD USED TO CONTAIN 05980000=01561450=
THE TYPE; 05985000=01561460=
FILE 05990000=01561500=
DECK(KIND=DISK, MAXRECSIZE=10, BLOCKSIZE=300, FRAMESIZE=48, 05995000=01561500=
AREAS=20, AREASIZE=990, PROTECTION=SAVE); 05995100
FILE 06000000=01561600=
STUFF(KIND=DISK, MAXRECSIZE=10, BLOCKSIZE=30, FRAMESIZE=48, 06005000=01561600=
AREAS=20, AREASIZE=150, PROTECTION=SAVE); 06006000
ARRAY 06010000=01561700=
TWXA[0:16]; 06015000=01561700=
REAL 06020000=01562000=
C; 06025000=01562000=
COMMENT C CONTAINS ACTUAL VALUE OF LAST CONSTANT SCANNED; 06030000=01563000=
REAL 06035000=01564000=
T; 06040000=01564000=
COMMENT T IS A TEMPORARY CELL; 06045000=01565000=
INTEGER 06050000=01566000=
TCOUNT; 06055000=01566000=
REAL 06060000=01566010=
STACKCT; 06065000=01566010=
COMMENT TCOUNT IS A VARIABLE WHICH HOLDS A PREVIOUS VALUE OF COUNT 06070000=01567000=
FOR THE USE OF CONVERT; 06075000=01568000=
DEFINE 06080000=01569000=
LASTSEQUENCE = 145 #, 06085000=01570000=
LASTSEQROW = 2 #; 06090000=01570000=
REAL 06095000=01583100=
FOULED; 06100000=01583100=
BOOLEAN 06105000=01586000=
FUNCTOG, COMMENT TELLS WHETHER PROCEDURE BEING DECLARED IS A 06110000=01586000=
FUNCTION; 06115000=01587000=
P2, COMMENT GENERALY TELLS WHETHER OWN WAS SEEN; 06120000=01588000=
P3, COMMENT TELLS WHETHER SAVE WAS SEEN; 06125000=01589000=
VONF, COMMENT VALUE OR OWN FIELD OF ELBAT WORD; 06130000=01590000=
FORMALF, COMMENT FORMAL FIELD OF ELBAT WORD; 06135000=01591000=
PTOG, COMMENT TELLS THAT FORMAL PARAPART IS BEING PROCESSD;06140000=01592000=
SPECTOG, 06145000=01594000=
STOPENTRY, COMMENT THIS MAKES THE ENTRY PROCEDURE ENTER ONLY 06150000=01594000=
ONE ID AND THEN EIXT; 06155000=01595000=
AJUMP; COMMENT TELLS WHETHER A JUMP IS HANGING; 06160000=01596000=
BOOLEAN 06170000=01597000=
STOPDEFINE; 06175000=01597000=
INTEGER 06180000=01598000=
MAXSAVE; 06185000=01598000=
COMMENT THIS CONTAINS THE SIZE OF THE MAXIMUM SAVE ARRAY 06190000=01599000=
DECLARED. IT IS USED TO HELP DETERMINE STORAGE REQUIREMENTS 06195000=01600000=
FOR THE PROGRAM PARAMETER BLOCK FOR THE OBJECT PROGRAM; 06200000=01601000=
REAL 06205000=01603000=
KLASSF, COMMENT CLASS IN LOW ORDER 7 BITS; 06210000=01603000=
ADDRSF, COMMENT ADDRESS IN LOW ORDER 11 BITS; 06215000=01604000=
LEVELF, COMMENT LVL IN LOW ORDER 5 BITS; 06220000=01605000=
LINKF, COMMENT LINK IN LOW ORDER 13 BITS; 06225000=01606000=
INCRF, COMMENT INCR CN LOW ORDER 8 BITS; 06230000=01607000=
PROINFO, COMMENT CONTAINS ELBAT WORD FOR PROCEDURE BEING 06235000=01608000=
DECLARED; 06240000=01609000=
G, COMMENT GLOBAL TEMPORARY FOR BLOCK; 06245000=01610000=
TYPEV, COMMENT USED TO CARRY CLASS OF IDENTIFIER 06250000=01611000=
BEING DECLARED; 06255000=01612000=
PROADO, COMMENT CONTAINS ADDRESS OF PROCEDURE BEING 06260000=01613000=
DECLARED; 06265000=01614000=
MARK, COMMENT CONTAINS INDEX INTO INFO WHERE FIRST WORD 06270000=01615000=
OF ADDITIONAL INFO FOR A PROCEDURE ENTRY; 06275000=01616000=
PJ, COMMENT FORMAL PARAMETER COUNTER; 06280000=01617000=
J, COMMENT ARRAY COUNTER; 06285000=01618000=
LASTINFO, COMMENT INDEX TO LAST ENTRY IN INFO; 06290000=01619000=
NEXTINFO, COMMENT INDEX FOR NEXT ENTRYIN INFO; 06295000=01620000=
FIRSTX, COMMENT RELATIVE ADD OF FIRST EXECUTABLE CODE 06300000=01621000=
IN BLOCK,INITIALIZED TO 4095 EACH TIME; 06305000=01622000=
SAVEL; COMMENT SAVE LOCATION FOR FIXUPS IN BLOCK; 06310000=01623000=
INTEGER 06320000=01624000=
NCII; COMMENT THIS CONTAINS THE COUNT OF CONSTANTS 06325000=01624000=
ENTERED IN INFO AT ANY GIVEN TIME; 06335000=01625000=
PROCEDURE UNHOOK; 06340000=01626000=
FORWARD; 06345000=01626000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%06350000=01626000=
PROCEDURE MAKEUPACCUM; 06355000=01627000=
FORWARD; 06360000=01627000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%06365000=01627000=
DEFINE 06370000=01628000=
PURPT = [43:8] #, 06375000=01628000=
SECRET = 2 #; 06380000=01628000=
06385000=01629000=
COMMENT THESE DEFINES GIVE THE NAMES OF THE WORD MODE OPERATORS. THE 06390000=01629000=
NUMBERS REFER TO THE APPROPRIATE SECTION OF THE PRODUCT SPECS. THE 06395000=01630000=
FULL NAME IS ALSO GIVEN; 06400000=01631000=
DEFINE 06405000=01632000=
ADD = 16#, COMMENT (0101) 7.4.2.1 ADD; 06410000=01633000=
BBC = 22#, COMMENT (0131) 7.4.5.4 BRANCH BACKWARD CONDITIONAL;06415000=01634000=
BBW = 534#, COMMENT (4131) 7.4.5.2 BRANCH BACKWARD; 06420000=01635000=
BFC = 38#, COMMENT (0231) 7.4.5.3 BRANCH FORWARD CONDITIONAL; 06425000=01636000=
BFW = 550#, COMMENT (4231) 7.4.5.1 BRANCH FORWARD; 06430000=01637000=
CDC = 168#, COMMENT (1241) 7.4.10.4 CONSTRUCT DESCRIPTOR CALL; 06435000=01638000=
CHS = 134#, COMMENT (1031) 7.4.7.11 CHANGE SIGN; 06440000=01639000=
COC = 40#, COMMENT (0241) 7.4.10.3 CONSTRUCT OPERAND CALL; 06445000=01640000=
COM = 130#, COMMENT (1011) 7.4.10.5 COMMUNICATION OPERATOR; 06450000=01641000=
DEL = 10#, COMMENT (0045) 7.4.9.3 DELETE; 06455000=01642000=
DUP = 261#, COMMENT (2025) 7.4.9.2 DUPLICATE; 06460000=01643000=
EQL = 581#, COMMENT (4425) 7.4.4.3 EQUAL; 06465000=01644000=
LBC = 278#, COMMENT(2131) 7.4.5.9 GO BACKWARD CONDITIONAL; 06470000=01645000=
LBU = 790#, COMMENT(6131) 7.4.5.7 GO BACKWARD (WORD); 06475000=01646000=
GEQ = 21#, COMMENT (0125) 7.4.4.2 GREATER THAN OR EQUAL TO; 06480000=01647000=
LFC = 294#, COMMENT(2231) 7.4.5.8 GO FORWARD CONDITIONAL; 06485000=01648000=
LFU = 806#, COMMENT(6231) 7.4.5.6 GO FORWARD (WORD); 06490000=01649000=
GTR = 37#, COMMENT (0225) 7.4.4.1 GREATER THAN; 06495000=01650000=
IDV = 384#, COMMENT (3001) 7.4.2.5 INTEGER DIVIDE; 06500000=01651000=
INX = 24#, COMMENT (0141) 7.4.10.2 INDEX; 06505000=01652000=
ISD = 532#, COMMENT (4121) 7.4.6.3 INTEGER STORE DESTRUCTIVE; 06510000=01653000=
ISN = 548#, COMMENT (4221) 7.4.6.4 INTEGER STORE NON-DESTRUCT; 06515000=01654000=
LEQ = 533#, COMMENT (4125) 7.4.4.4 LESS THAN OR EQUAL TO; 06520000=01655000=
LND = 67#, COMMENT (0415) 7.4.3.1 LOGICAL AND; 06525000=01656000=
LNG = 19#, COMMENT (0115) 7.4.3.4 LOGICAL NEGATE; 06530000=01657000=
LOD = 260#, COMMENT (2021) 7.4.10.1 LOAD OPERATOR; 06535000=01658000=
LOR = 35#, COMMENT (0215) 7.4.3.2 LOGICAL OR; 06540000=01659000=
LQV = 131#, COMMENT (1015) 7.4.3.3 LOGICAL EQUIVALENCE; 06545000=01660000=
LSS = 549#, COMMENT (4225) 7.4.4.5 LESS THAN; 06550000=01661000=
MKS = 72#, COMMENT (0441) 7.4.8.1 MARK STACK; 06555000=01662000=
MUL = 64#, COMMENT (0401) 7.4.2.3 MULTIPLY; 06560000=01663000=
NEQ = 69#, COMMENT (0425) 7.4.4.6 NOT EQUAL TO; 06565000=01664000=
NOP = 11#, COMMENT (0055) 7.4.7.1 NO OPERATION; 06570000=01665000=
PRL = 18#, COMMENT (0111) 7.4.10.6 PROGRAM RELEASE; 06575000=01666000=
PRTE= 12#, COMMENT (0061) 7.4.10.9 EXTEND PRT; 06580000=01667000=
RDV = 896#, COMMENT (7001) 7.4.2.6 REMAINDER DIVIDE; 06585000=01668000=
RTN = 39#, COMMENT (0235) 7.4.8.3 RETURN NORMAL; 06590000=01669000=
RTS = 167#, COMMENT (1235) 7.4.8.4 RETURN SPECIAL; 06595000=01670000=
SND = 132#, COMMENT (1021) 7.4.6.2 STORE NON-DESTRUCTIVE; 06600000=01671000=
SSP = 582#, COMMENT (4431) 7.4.7.10 SET SIGN PLUS; 06605000=01672000=
STD = 68#, COMMENT (0421) 7.4.6.1 STORE DESTRUCTIVE; 06610000=01673000=
SUB = 48#, COMMENT (0301) 7.4.2.2 SUBTRACT; 06615000=01674000=
XCH = 133#, COMMENT (1025) 7.4.9.1 EXCHANGE; 06620000=01675000=
XIT = 71#, COMMENT (0435) 7.4.8.2 EXIT; 06625000=01676000=
ZP1 = 322#, COMMENT (2411) 7.4.10.8 CONDITIONAL HALT; 06630000=01677000=
SCI =1003#, COMMENT (7655) SCAN OUT INITIALIZE; 06635000=01677050=
SAN =1004#, COMMENT (7661) SYSTEM ATTENTION NEEDED 06640000=01677100=
SCS =1019#, COMMENT (7755) SCAN OUT STOP; 06645000=01677150=
COMMENT THESE DEFINES ARE USED BY EMITD; 06650000=01678000=
DEFINE 06655000=01679000=
DIA = 45#, COMMENT (XX55) 7.4.7.1 DIAL A; 06660000=01680000=
DIB = 49#, COMMENT (XX61) 7.4.7.2 DIAL B; 06665000=01681000=
TRB = 53#; COMMENT (XX65) 7.4.7.3 TRANSFER BITS; 06670000=01682000=
REAL 06675000=01683000=
MAXSTACK, 06680000=01683000=
STACKCTR; 06685000=01683000=
INTEGER 06690000=01684000=
MAXROW;COMMENT THIS CONTAINS THE MAXIMUM ROW SIZE OF ALL NON-SAVE 06695000=01684000=
ARRAYS DECLARED. ITS USE IS LIKE THAT OF MAXSAVE; 06705000=01686000=
INTEGER 06710000=01687000=
SEGSIZEMAX; COMMENT CONTAINS MAX SEGMENT SIZE; 06715000=01687000=
INTEGER 06725000=01688000=
F; 06730000=01688000=
REAL 06735000=01689000=
NLO, 06740000=01689000=
NHI, 06745000=01689000=
TLO, 06750000=01689000=
THI; 06755000=01689000=
BOOLEAN 06760000=01690000=
DPTOG; COMMENT THE ABOVE THINGS ARE TEMP STORAGE FOR DOUBLE NOS;06765000=01690000=
BOOLEAN 06775000=01691500=
DOLLAR2TOG; 06780000=01691500=
DEFINE 06785000=01692000=
FZERO = 896 #; 06790000=01692000=
REAL 06795000=01693000=
T1, 06800000=01693000=
T2, 06805000=01693000=
N, 06810000=01693000=
K, 06815000=01693000=
AKKUM; 06820000=01693000=
BOOLEAN 06825000=01694000=
STOPGSP; 06830000=01694000=
INTEGER 06835000=01695000=
BUP; 06840000=01695000=
BOOLEAN 06845000=01695500=
INLINETOG; 06850000=01695500=
COMMENT UNIQUE GLOBAL TEMP FOR BLOCK; 06855000=01696000=
ARRAY 06860000=01697000=
GTA1[0:10]; 06865000=01697000=
BOOLEAN ARRAY 06870000=01698000=
SPRT[0:31]; 06875000=01698000=
COMMENT SPRT IS TO BE CONSIDERED TO BE AN ARRAY OF 32 32 BIT 06880000=01699000=
FIELDS. THE 32 BITS ARE IN THE LOW ORDER PART OF EACH 06885000=01700000=
WORD. THE BIT IS ON IF AND ONLY IF THE CORRESPONDING 06890000=01701000=
PRT CELL HAS A PERMANENT ASSIGNMENT; 06895000=01702000=
INTEGER 06900000=01703000=
PRTI, 06905000=01703000=
PRTIMAX; 06910000=01703000=
COMMENT PRTIMAX GIVES NEXT PRT CELL AVAILABLE FOR PERMANENT ASSIGN-06915000=01704000=
MENT. PRTI GIVES NEXT PRT CELL POSSIBLY AVAILABLE FOR 06920000=01705000=
TEMPORARY ASSIGNMENT; 06925000=01706000=
DEFINE 06930000=01707000=
ALPHASIZE = [35:6] #; 06935000=01707000=
COMMENT ALPHASIZE IS THE DEFINE FOR THE BIT06940000=01707000=
POSITION IN THE SECOND WORD OF INFO WHICH 06945000=01708000=
CONTAINS THE LENGTH OF ALPHA; 06950000=01709000=
DEFINE 06955000=01710000=
EDOCINDEX = L.[11:3], L.[8:7] #; 06960000=01710000=
COMMENT EDOCINDEX IS THE WORD 06965000=01710000=
PORTION OF L SPLIT INTO A ROW AND06970000=01711000=
COLUMN INDEX FOR EDOC; 06975000=01712000=
DEFINE 06980000=01713000=
CPLUS1 = 769 #; 06985000=01713000=
COMMENT SEE COMMENT AT CPLUS2 DEFINE; 06990000=01713000=
DEFINE 06995000=01714000=
CPLUS2 = 770 #; 07000000=01714000=
COMMENT CPLUS1 AND CPLUS2 ARE EXPLICIT CONSTANTS 07005000=01714000=
USED IN THE GENERATION OF C-RELATIVE CODE; 07010000=01715000=
PROCEDURE FLAG(ERRNUM); 07015000=01716000=
VALUE 07020000=01716000=
ERRNUM; 07025000=01716000=
INTEGER 07030000=01716000=
ERRNUM; 07035000=01716000=
FORWARD; 07040000=01716000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07045000=01716000=
ALPHA PROCEDURE B2D(B); 07050000=01717000=
VALUE 07055000=01717000=
B; 07060000=01717000=
REAL 07065000=01717000=
B; 07070000=01717000=
FORWARD; 07075000=01717000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07080000=01717000=
REAL PROCEDURE TAKE(W); 07085000=01717700=
VALUE 07090000=01717700=
W; 07095000=01717700=
INTEGER 07100000=01717700=
W; 07105000=01717700=
FORWARD; 07110000=01717700=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07115000=01717700=
BOOLEAN 07120000=01717800=
MACROID; 07125000=01717800=
REAL PROCEDURE FIXDEFINEINFO(T); 07130000=01717900=
VALUE 07135000=01717900=
T; 07140000=01717900=
REAL 07145000=01717900=
T; 07150000=01717900=
FORWARD; 07155000=01717900=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07160000=01717900=
PROCEDURE ERR(ERRNUM); 07165000=01718000=
VALUE 07170000=01718000=
ERRNUM; 07175000=01718000=
INTEGER 07180000=01718000=
ERRNUM; 07185000=01718000=
FORWARD; 07190000=01718000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07195000=01718000=
INTEGER PROCEDURE GIT(L); 07200000=01719000=
VALUE 07205000=01719000=
L; 07210000=01719000=
REAL 07215000=01719000=
L; 07220000=01719000=
FORWARD; 07225000=01719000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07230000=01719000=
ARRAY 07235000=01720000=
CALLA[0:31, 0:255]; 07240000=01720000=
DEFINE 07245000=01721000=
CALL[CALL1] = CALLA[(GT3:= CALL1).LINKR, GT3.LINKC] #; 07250000=01721000=
REAL 07255000=01722000=
CALLX, 07260000=01722000=
CALLINFO, 07265000=01722000=
NESTCTR, 07270000=01722000=
NESTCUR; 07275000=01722000=
BOOLEAN 07280000=01723000=
NESTOG; 07285000=01723000=
ARRAY 07290000=01724000=
NESTPRT[PRTBASE:PRTOP]; 07295000=01724000=
ARRAY 07300000=01725000=
SORTPRT[0:PRTOP-PRTBASE]; 07305000=01725000=
07310000=01737300=
COMMENT "BLANKET" BLANKS OUT N+1 WORDS IN "THERE"; 07315000=01737300=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07316000
DEFINE BLANKET(N, THERE) = 07320000=01737350=
BEGIN 07325000
REPLACE POINTER(THERE,0) BY 6" " FOR (N)+1 WORDS; 07330000
END BLANKET #; 07360000=01737500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07362000
PROCEDURE CHANGESEQ(VAL, BUFF, OLDSEQ); 07365000=01741200=
VALUE 07366000=01741200=
VAL, OLDSEQ; 07368000=01741200=
ARRAY 07370000
BUFF[0]; 07372000
REAL 07374000
VAL, OLDSEQ; 07376000
BEGIN 07378000=01741300=
STREAMLOCALS; 07380000
STREAMSETDI(BUFF, OLDSEQ); 07382000=01741400=
STREAMSETLOCSI(VAL); 07384000=01741400=
STREAMTRANSFERDEC(8); 07386000=01741500=
END CHANGESEQ; 07400000=01741300=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07402000
DEFINE SEQUENCEERROR(L) = 07405000=01742100=
BEGIN 07410000=01742110=
REPLACE POINTER(L,8) BY 07415000=01742110=
6"SEQUENCE", 6" ERROR "; 07420000=01742110=
END SEQUENCEERROR #; 07425000=01742110=
FORMAT 07670000=01802000=
BUG(X24, 4(A4, X2)); 07675000=01802000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07676000
PROCEDURE DATIME; 07680000=01820000=
BEGIN 07685000=01821000=
INTEGER 07690000=01822000=
H, 07695000=01822000=
MN, 07700000=01822000=
Q; 07705000=01822000=
REAL 07710000=01822000=
N1, 07715000=01822000=
N2; 07720000=01822000=
POINTER 07725000
P; 07730000
H:= TIME1 DIV 216000; 07780000=01828000=
MN:= (TIME1 DIV 3600) MOD 60; 07785000=01828000=
REPLACE P:POINTER(EBCDICBUFF,8) BY DISK.TITLE; 07790000=01828500=
N2:= MIN(OFFSET(P)-1, 118); 07795000=01828500=
WRITE(LINE, 07800000=01835500=
<X18, 6"BURROUGHS B-5700 ESPOLXEM COMPILER MARK ", 07802000
"XVI.0.00" 07805000=01835500=
," ",A6,"DAY, ",I4,"-",A2,"-",A2,", ",I2,":",A2,X1,A3, 07806000=01832000=
////X*,A*,/X*,*("=")//>, 07808000
CASE (N1:= TIME(7)).[5:6] OF (" SUN", " MON", 07810000=01834000=
" TUES", "WEDNES", " THURS", " FRI", " SATUR"), 07812000
N1.[47:12], (N1:= TIME(15)).[47:16], N1.[31:16], 07814000
12*REAL(Q:=H MOD 12=0)+Q, 07816000
"00" & (MN MOD 10)[3:4] & (MN DIV 10)[11:4], 07818000=01834000=
IF H >= 12 THEN "PM." ELSE "AM.", 07820000=01835000=
(120-N2) DIV 2, N2, POINTER(EBCDICBUFF,8), 07825000=01835550=
(120-N2) DIV 2, N2); 07826000
NOHEADING:= FALSE; 07830000=01836000=
END OF DATIME; 07835000=01837000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07840000=01837000=
07845000=02000000=
COMMENT THIS SECTION CONTAINS ALL CODE PERTAINENT TO READING CARDS 07850000=02000000=
AND SCANNING THEM; 07855000=02001000=
07860000=02001836=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07862000
COMMENT OCTIZE REFORMATS ACCUM FOR OCTAL CONSTANTS; 07865000=02001836=
BOOLEAN PROCEDURE OCTIZE(S, SX, D, DX, SKP, CNT); 07870000=02001838=
VALUE 07872000=02001838=
SX, DX, SKP, CNT; 07874000=02001838=
ARRAY 07876000
S, D[0]; 07878000
REAL 07880000
SX, DX, SKP, CNT; 07882000
BEGIN 07884000=02001840=
STREAMLOCALS; 07886000
TALLY:= 0; 07888000
STREAMSETSI(S, SX); 07890000=02001842=
STREAMSKIPSI(+3); 07892000=02001842=
STREAMSETDI(D, DX); 07894000=02001842=
THRU SKP DO 07896000=02001842=
STREAMSETDB(3, 0); % RIGHT JUSTIFY. 07898000
07900000
THRU CNT DO 07902000=02001846=
BEGIN 07904000
IF STREAMSCGEQ(6"8") THEN 07906000
TALLY:= 1 07908000
ELSE 07910000
IF STREAMSCLSS(6"0") THEN 07912000
TALLY:= 1; 07914000
07916000
STREAMSKIPSB(3); 07918000=02001846=
THRU 3 DO 07920000
BEGIN 07922000
IF STREAMTESTSB THEN 07924000
STREAMSETDB(1, 1) 07926000
ELSE 07928000
STREAMSETDB(1, 0); 07930000
07932000
STREAMSKIPSB(1); 07934000
END; 07936000
END THRU; 07938000
07940000=02001850=
OCTIZE:= BOOLEAN(TALLY); % "1" = NON OCTAL CHARACTER. 07942000=02001852=
END OCTIZE; 07970000=02001854=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07976000
COMMENT HEXIZE REFORMATS ACCUM FOR HEXADECIMAL CONSTANTS; 07980000=02001856=
BOOLEAN PROCEDURE HEXIZE(S, SX, D, DX, SKP, CNT); 07985000=02001858=
VALUE 07990000=02001858=
SX, DX, SKP, CNT; 07992000=02001858=
ARRAY 07994000=02001858=
S, D[0]; 07996000
REAL 07998000
SX, DX, SKP, CNT; 08000000
BEGIN 08002000=02001860=
STREAMLOCALS; 08004000
REAL 08006000=02001860=
T1, 08008000
T2, 08010000
TEMP2, 08012000
TEMP1; 08014000
LABEL 08016000=02001860=
AGIN; 08018000=02001860=
COMMENT LOCAL VARIABLES ARE LOCATED IN REVERSE ORDER FROM THE 08035000=02001862=
WAY THEY ARE DECLARED IN STREAM PROCEDURES; 08040000=02001864=
TALLY:= 0; 08042000
STREAMSETDI(STREAMTEMPD, 0); 08044000=02001866=
THRU CNT DO 08046000=02001866=
STREAMSMEARLIT(1, 6"1"); % IN CASE A CHAR=A,B,C,D,OR F. 08048000
08050000
STREAMSETSI(S, SX); 08052000=02001868=
STREAMSKIPSI(+3); 08054000=02001868=
STREAMSETDI(STREAMTEMPD, 0); 08056000=02001868=
THRU CNT DO 08058000=02001870=
BEGIN 08060000
IF STREAMSCLSS(6"0") THEN 08062000
IF STREAMSCGEQ(6"A") THEN 08064000
IF STREAMSCLEQ(6"F") THEN 08066000
BEGIN % WORK HARD. 08068000=02001870=
T1:= STREAMGETSI; 08070000=02001874=
T2:= STREAMGETDI; 08072000
STREAMSETDI(S, T1); 08074000
STREAMSETSI(STREAMTEMPD, T2); % FLIP, MAN. 08076000
STREAMSETDB(3, 0); 08078000=02001876=
STREAMSETSI(S, T1); 08080000
STREAMSETDI(STREAMTEMPD, T2); % FLIP BACK. 08082000
STREAMSMEARLIT(1, STREAMGETSC+STREAMGETDC); % DS:= 1 ADD ?? 08084000=02001882=
STREAMSKIPDI(-1); 08086000
STREAMSKIPDB(2); 08088000
STREAMSETDB(1, 1); 08090000
STREAMSKIPDB(3); 08092000
GO AGIN; 08094000
END; 08096000=02001882=
08098000
IF STREAMSCLSS(6"0") THEN 08100000=02001884=
TALLY:= 1; 08102000=02001884=
08104000
STREAMTRANSFERCHR(1); % < 0 = NON-HEX CHARACTER.08106000=02001884=
AGIN: 08108000=02001888=
END THRU; 08110000=02001888=
08112000
STREAMSETSI(STREAMTEMPD, 0); 08114000=02001890=
STREAMSETDI(D, DX); 08116000=02001890=
THRU SKP DO 08118000=02001890=
STREAMSETDB(4, 0); % RIGHT ADJUST CONSTANT. 08120000
08122000
THRU CNT DO 08124000=02001894=
BEGIN 08126000
STREAMSKIPSB(2); 08128000
THRU 4 DO 08130000
BEGIN 08132000
IF STREAMTESTSB THEN 08134000
STREAMSETDB(1, 1) 08136000
ELSE 08138000
STREAMSETDB(1, 0); 08140000
08142000
STREAMSKIPDB(1); 08144000
END; 08146000
END; 08148000
% FINAL CONVERT. 08150000=02001894=
HEXIZE:= BOOLEAN(TALLY); % "1" IF PROGRAMMER GOOFED. 08152000=02001896=
END HEXIZE; 08190000=02001898=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08196000
COMMENT PUTSEQNO PUTS THE SEQUENCE NUMBER OF THE CARD-IMAGE 08200000=02002000=
CURRENTLY BEING SCANNED INTO THE INFO TABLE IN CASE 08205000=02003000=
IT IS NEEDED FOR FUTURE REFERENCE; 08210000=02004000=
PROCEDURE PUTSEQNO(INFO, IX, BUFF, LCR); 08215000=02005000=
VALUE 08216000=02005000=
IX, LCR; 08218000=02005000=
ARRAY 08220000
INFO, BUFF[0]; 08222000
REAL 08224000
IX, LCR; 08226000
BEGIN 08228000=02006000=
STREAMLOCALS; 08230000
STREAMSETDI(INFO, IX); 08232000=02006000=
STREAMSETSI(BUFF, LCR); 08234000=02006000=
STREAMTRANSFERWDS(1); 08236000=02006000=
END PUTSEQNO; 08250000=02006000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08256000
COMMENT TURNONSTOPLIGHT TURNS THE LIGHT "RED" ON THE "CORNER". 08260000=02007000=
I.E., THE PURPOSE OF THIS ROUTINE IS TO INSERT A PER- 08265000=02008000=
CENT SIGN IN COLUMN 73 AS AN END OF CARD SENTINEL FOR 08270000=02009000=
THE SCANNER; 08275000=02010000=
PROCEDURE TURNONSTOPLIGHT(RED, BUFF, CORNER); 08280000=02011000=
VALUE 08282000=02011000=
RED, CORNER; 08284000=02011000=
ARRAY 08286000
BUFF[0]; 08288000
REAL 08290000
RED, CORNER; 08292000
BEGIN 08294000=02012000=
STREAMLOCALS; 08296000
STREAMSETDI(BUFF, CORNER); 08298000=02012000=
STREAMSETLOCSI(RED); 08300000=02012000=
STREAMSKIPSI(+7); 08302000=02012000=
STREAMTRANSFERCHR(1); 08304000=02012000=
END; 08325000=02012000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08432000
REAL PROCEDURE CONV(ACCUM, AX, SKP, N); 08435000=02041000=
VALUE 08436000=02001831=
AX, SKP, N; 08438000=02001831=
ARRAY 08440000
ACCUM[0]; 08442000
REAL 08444000
AX, SKP, N; 08446000
BEGIN 08448000=02001832=
STREAMLOCALS; 08450000
STREAMSETSI(ACCUM, AX); 08452000=02001833=
STREAMSKIPSI(+SKP); 08454000=02001833=
STREAMSKIPSI(+3); 08456000=02001833=
STREAMSETDI(STREAMTEMPD, 0); 08458000=02001833=
STREAMTRANSFEROCT(N); 08460000=02001834=
CONV:= STREAMTEMPD[0]; 08462000
END; 08490000=02044000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08492000
PROCEDURE MOVECHARACTERS(N, SORCE, SX, SK, DEST, DX, DK); 08494000=02045000=
VALUE 08496000=02046000=
N, SX, SK, DX, DK; 08498000=02046000=
REAL 08500000
N, SX, SK, DX, DK; 08502000
ARRAY 08504000
SORCE, DEST[0]; 08506000
BEGIN 08508000=02047000=
STREAMLOCALS; 08510000
STREAMSETDI(DEST, DX); 08512000=02048000=
STREAMSETSI(SORCE, SX); 08514000=02049000=
STREAMSKIPSI(+SK); 08516000=02049000=
STREAMSKIPDI(+DK); 08518000=02049000=
STREAMTRANSFERCHR(N); 08520000=02049000=
END; 08550000=02051000=
08555000=02052000=
COMMENT MOVECHARACTERS MOVES N CHARACTERS FROM THE SSKIP-TH CHAR IN 08560000=02052000=
"SORCE" TO THE DSKIP-TH CHAR IN "DEST". ; 08565000=02053000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08566000
PROCEDURE MOVE(W)"WORDS FROM"(A, AX)"TO"(B, BX); 08570000=02054000=
VALUE 08575000=02054000=
W, AX, BX; 08580000=02054000=
ARRAY 08585000=02055000=
A, B[0]; 08586000
REAL 08588000
W, AX, BX; 08590000
BEGIN 08592000=02055000=
REPLACE POINTER(B[BX],0) BY POINTER(A[AX],0) FOR (W) WORDS; 08594000=02055000=
END; 08605000=02055000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08672000
COMMENT EQUAL COMPARES COUNT CHARACTERS LOCATED AT A AND B FOR 08675000=02061000=
EQUALITY. THIS ROUTINE IS USED IN THE LOOK-UP OF ALPHA 08680000=02061500=
QUANTITIES IN THE DIRECTORY; 08685000=02062000=
BOOLEAN PROCEDURE EQUAL(COUNT, A, AX, B, BX); 08690000=02062500=
VALUE 08692000=02062500=
COUNT, AX, BX; 08694000=02062500=
REAL 08696000
COUNT, AX, BX; 08698000
ARRAY 08700000
A, B[0]; 08702000
BEGIN 08704000=02063000=
STREAMLOCALS; 08706000
STREAMSETSI(A, AX); 08708000=02063500=
STREAMSETDI(B, BX); 08710000=02063500=
EQUAL:= STREAMCOMPAREEQL(COUNT); 08712000=02064000=
END EQUAL; 08740000=02064500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08742000
PROCEDURE READACARD; 08745000=02065000=
FORWARD; 08750000=02065000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08755000=02065000=
PROCEDURE DOLLARCARD; 08760000=02065500=
FORWARD; 08765000=02065500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08770000=02065500=
BOOLEAN PROCEDURE BOOLEXP; 08775000=02065600=
FORWARD; 08780000=02065600=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08785000=02065600=
PROCEDURE SCANNER; 08790000=02066000=
BEGIN 08795000=02066500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08800000=02067000=
COMMENT "SCNN" IS THE STREAM PROCEDURE WHICH DOES THE ACTUAL SCANNING. 08805000=02067000=
IT IS DRIVEN BY A SMALL WORD MODE PROCEDURE CALLED "SCANNER", 08810000=02067500=
WHICH CHECKS FOR A QUANTITY BEING BROKEN ACROSS A CARD. "SCNN" 08815000=02068000=
IS CONTROLLED BY A VARIABLE CALLED "RESULT". "SCNN" ALSO 08820000=02068500=
INFORMS THE WORLD OF ITS ACTION BY MEANS OF THE SAME VARIABLE, 08825000=02069000=
HENCE THE VARIABLE "RESULT" IS PASSED BY BOTH NAME AND VALUE. 08830000=02069500=
THE MEANING OF "RESULT" AS INPUT IS: 08835000=02070000=
VALUE MEANING 08840000=02070500=
===== ======================================== 08845000=02071000=
0 INITIAL CODE - DEBLANK AND START TO FETCH THE 08850000=02071500=
NEXT QUANTITY. 08855000=02072000=
1 CONTINUE BUILDING AN IDENTIFIER (INTERRUPTED BY 08860000=02072500=
END-OF-CARD BREAK). 08865000=02073000=
2 LAST QUANTITY BUILT WAS SPECIAL CHARACTER. HENCE, 08870000=02073500=
EXIT (INTERRUPTION BY END-OF-CARD BREAK IS NOT 08875000=02074000=
IMPORTANT). 08880000=02074500=
3 CONTINUE BUILDING A NUMBER (INTERRUPTED BY END-OF- 08885000=02075000=
CARD BREAK). 08890000=02075500=
4 LAST THING WAS AN ERROR (COUNT EXCEEDED 63). HENCE,08895000=02076000=
EXIT (INTERRUPTION BY END-OF-CARD BREAK NOT 08900000=02076500=
IMPORTANT). 08905000=02077000=
5 GET NEXT CHARACTER AND EXIT. 08910000=02077500=
6 SCAN A COMMENT. 08915000=02078000=
7 DEBLANK ONLY. 08920000=02078500=
THE MEANING OF "RESULT" AS OUTPUT IS: 08925000=02079000=
VALUE MEANING 08930000=02079500=
===== ======================================== 08935000=02080000=
1 AN IDENTIFIER WAS BUILT. 08940000=02080500=
2 A SPECIAL CHARACTER WAS OBTAINED. 08945000=02081000=
3 A NUMBER (INTEGER) WAS BUILT. 08950000=02081500=
"SCNN" PUTS ALL STUFF SCANNED (EXCEPT FOR COMMENTS AND 08955000=02082000=
DISCARDED BLANKS) INTO "ACCUM" (CALLED "ACCUMULATOR" 08960000=02082500=
FOR THE REST OF THIS DISCUSSION). 08965000=02083000=
"COUNT" IS THE VARIABLE THAT GIVES THE NUMBER OF CHARACTERS 08970000=02083500=
"SCNN" HAS PUT INTO THE "ACCUMULATOR". SINCE "SCNN" NEEDS 08975000=02084000=
THE VALUE SO THAT IT CAN PUT MORE CHARACTERS INTO THE "ACCUM- 08980000=02084500=
ULATOR" AND NEEDS TO UPDATE "COUNT" FOR THE OUTSIDE WORLD. 08985000=02085000=
"COUNT" IS PASSED BY BOTH NAME AND VALUE. IT IS ALSO 08990000=02085500=
CONVENIENT TO HAVE (63-COUNT). THIS IS CALLED "COMCOUNT". 08995000=02086000=
"NCR" (NEXT CHARACTER TO BE SCANNED) IS ALSO PASSED BY 09000000=02086500=
NAME AND VALUE SO THAT IT MAY BE UPDATED. 09005000=02087000=
"ST1" AND "ST2" ARE TEMPORARY STORAGES WHICH ARE EXPLICITLY 09010000=02087500=
PASSED TO "SCNN" IN ORDER TO OBTAIN THE MOST USEFULL STACK 09015000=02088000=
ARRANGEMENT. 09020000=02088500=
; 09025000=02089000=
PROCEDURE SCNN(SBUFF, NCR, COUNTV, ACCUM, AX, COMCOUNT, 09030000=02090000=
RESULT, RESULTV, COUNT, ST2, NCRV, ST1); 09035000=02090000=
VALUE 09040000=02090500=
COUNTV, AX, COMCOUNT, RESULTV, ST2, NCRV, ST1; 09045000=02090500=
ARRAY 09050000
SBUFF, ACCUM[0]; 09055000
REAL 09060000
NCR, COUNTV, AX, COMCOUNT, RESULT, RESULTV, COUNT, ST2, NCRV, ST1;09065000
BEGIN 09075000=02091000=
STREAMLOCALS; 09076000
LABEL 09080000=02091500=
DEBLANK, 09085000=02091500=
DEBLANKONLY, 09086000
NUMBERS, 09090000=02091500=
IDBLDR, 09095000=02091500=
GNC, 09100000=02091500=
K, 09105000=02091500=
EXIT, 09110000=02091500=
FINIS, 09115000=02091500=
L, 09120000=02091500=
ERROR, 09125000=02092000=
COMMENTS, 09130000=02092000=
COMMANTS; 09135000=02092000=
TALLY:= 0; 09140000
STREAMSETSI(SBUFF, NCRV); 09145000=02092500=
COMMENT SETUP "DI" FOR A CHANGE IN "RESULT" AND "SI" FOR A LOOK AT 09160000=02093000=
THE BUFFER; 09165000=02093500=
GO TO CASE RESULTV OF ( % SWITCH ON VALUE OF RESULT; 09166000=02094000=
DEBLANK, % 0 IS INITIAL CODE. 09168000=02094500=
IDBLDR, % 1 IS ID CODE. 09170000=02095000=
FINIS, % 2 IS SPECIAL CHARACTER CODE. 09172000=02095500=
NUMBERS, % 3 IS NUMBER CODE. 09174000=02096000=
FINIS, % 4 IS ERROR CODE. 09176000=02096500=
GNC, % 5 IS GET NEXT CHARACTER CODE. 09178000=02097000=
COMMANTS, % 6 IS COMMENT CODE. 09180000=02097500=
DEBLANKONLY);% 7 IS DEBLANK ONLY CODE. 09182000=02098000=
DEBLANKONLY: 09184000
IF STREAMSCEQL(6" ") THEN 09186000=02098500=
K: 09220000=02099000=
BEGIN 09225000=02099000=
STREAMSKIPSI(+1); 09230000=02101000=
IF STREAMSCEQL(6" ") THEN 09235000=02101000=
GO K 09240000=02099000=
END; 09245000=02099000=
GO FINIS; 09250000=02099500=
DEBLANK: 09255000=02100500=
IF STREAMSCEQL(6" ") THEN 09260000=02100500=
L: 09265000=02101000=
BEGIN 09270000=02101000=
STREAMSKIPSI(+1); 09275000=02101000=
IF STREAMSCEQL(6" ") THEN 09280000=02101000=
GO L 09285000=02101000=
END; 09290000=02101000=
09295000=02101500=
COMMENT IF WE ARRIVE HERE WE HAVE A NON-BLANK CHARACTER; 09300000=02101500=
NCRV:= STREAMGETSI; 09305000=02102000=
IF STREAMSCGEQ(6"0") THEN 09310000=02102500=
GO NUMBERS; 09315000=02102500=
IF STREAMSCALPHA THEN 09320000=02103000=
GO IDBLDR; 09325000=02103000=
09330000=02103500=
COMMENT IF WE ARRIVE HERE WE HAVE A SPECIAL CHARACTER (OR GNC); 09335000=02103500=
GNC: 09340000=02104500=
RESULT:= 6"2"; 09345000=02104500=
TALLY:= 1; 09350000=02104500=
STREAMSKIPSI(+1); 09355000=02104500=
GO EXIT; 09360000=02104500=
COMMANTS: 09365000=02105500=
IF STREAMSCNEQ(6";") THEN 09370000=02105500=
BEGIN 09375000=02106000=
COMMENTS: 09380000=02107000=
STREAMSKIPSI(+1); 09385000=02107000=
IF STREAMSCGTR(6"%") THEN 09390000=02107500=
GO COMMENTS; 09395000=02107500=
IF STREAMSCLSS(6";") THEN 09400000=02108000=
GO COMMENTS; 09405000=02108000=
09410000=02108500=
COMMENT CHARACTERS BETWEEN % AND SEMICOLON ARE HANDLED BY WORD- 09415000=02108500=
MODE PART OF COMMENT ROUTINE; 09420000=02109000=
END; 09425000=02109500=
GO FINIS; 09430000=02110000=
IDBLDR: 09435000=02111000=
TALLY:= 63; 09440000=02111000=
RESULT:= 6"1"; 09442000=02111000=
THRU COMCOUNT DO 09444000=02112000=
BEGIN 09446000
STREAMINCTALLY(+1); 09448000
IF STREAMSCALPHA THEN 09450000
STREAMSKIPSI(+1) 09452000
ELSE 09454000
GO EXIT 09456000=02112000=
END; 09458000
STREAMINCTALLY(+1); 09460000=02112500=
IF STREAMSCALPHA THEN 09462000=02113000=
BEGIN 09470000=02113500=
ERROR: 09475000=02114500=
RESULT:= 6"4"; 09485000=02114500=
GO EXIT; 09490000=02114500=
END 09495000=02115500=
ELSE 09500000=02115500=
GO EXIT; 09505000=02115500=
COMMENT IF WE ARRIVE AT ERROR WE HAVE MORE THAN 63 CHARACTERS 09515000=02116000=
IN AN IDENTIFIER OR NUMBER; 09520000=02116500=
NUMBERS: 09525000=02117500=
TALLY:= 63; 09530000=02117500=
RESULT:= 6"3"; 09535000=02117500=
THRU COMCOUNT DO 09536000=02118500=
BEGIN 09538000=02118500=
STREAMINCTALLY(+1); 09540000
IF STREAMSCLSS(6"0") THEN 09542000
GO EXIT; 09544000
STREAMSKIPSI(+1) 09546000
END; 09548000
GO ERROR; 09550000=02119000=
EXIT: 09555000=02120000=
ST1:= TALLY; % "ST1" CONTAINS NUMBER OF CHARACTERS WE ARE 09560000=02120000=
% GOING TO MOVE INTO THE "ACCUMULATOR". 09565000=02120500=
STREAMINCTALLY(COUNTV); 09570000=02121000=
ST2:= TALLY; 09575000=02121000=
COUNT:= ST2; 09580000=02121500=
COMMENT THIS CODE UPDATED "COUNT"; 09600000=02122000=
STREAMSETDI(ACCUM, AX); 09605000=02122500=
STREAMSETLOCSI(ST2); 09610000=02122500=
STREAMSKIPSI(+5); 09615000=02122500=
STREAMTRANSFERCHR(3); 09620000=02122500=
COMMENT THIS CODE PLACES "COUNT" IN "ACCUM" AS WELL; 09625000=02123000=
STREAMSKIPDI(+COUNTV); % POSITION "DI" PAST CHARACTERS ALREADY 09630000=02123500=
% IN THE "ACCUMULATOR", IF ANY. 09635000=02124000=
STREAMSETSI(SBUFF, NCRV); 09640000=02124500=
STREAMTRANSFERCHR(ST1); 09645000=02124500=
COMMENT MOVE CHARACTERS INTO "ACCUM"; 09655000=02125000=
FINIS: 09660000=02126000=
NCR:= STREAMGETSI; 09665000=02126000=
COMMENT RESET "NCR" TO LOCATION OF NEXT CHARACTER TO BE SCANNED; 09690000=02126500=
END OF SCNN; 09695000=02127000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09696000
LABEL 09700000=02127500=
L; % 09705000=02127500=
L: SCNN(SBUFF, NCR, COUNT, ACCUM, 1, 63-COUNT, RESULT, RESULT, COUNT, 09710000=02129000=
0, NCR, 0); 09715000=02129000=
IF NCR = LCR THEN 09720000=02129500=
BEGIN 09725000=02130000=
READACARD; 09730000=02130500=
GO TO L; % GO DIRECTLY TO L, DO NOT PASS GO, 09735000=02135500=
% DO NOT COLLECT $200. 09740000=02136000=
END; 09745000=02136500=
END SCANNER; 09750000=02137000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09755000=02137000=
DEFINE 09760000=02181000=
WRITELINE = BEGIN 09762000=02181000=
UNPACKBICTOEBCDIC(LIN, 0, EBCDICBUFF, 0, 15*8); 09764000
IF SINGLTOG THEN 09766000
WRITE(LINE, 20, EBCDICBUFF[*]) 09768000=02181250=
ELSE 09770000=02181250=
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]) 09772000=02181500=
END #, 09774000
PRINTCARD = BEGIN 09785000=02182500=
EDITLINE(LIN, SBUFF, FCR, L DIV 4, 09790000=02182750=
L.[1:2], MEDIUM, OMITTING); 09792000
IF NOHEADING THEN 09805000=02183000=
DATIME; 09810000=02183000=
WRITELINE; 09815000=02183000=
END #; 09820000=02183250=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09822000
PROCEDURE EDITLINE(LINE, SBUFF, NCR, R, L, SYMBOL, OMIT); 09825000=02183500=
VALUE 09830000=02183750=
NCR, R, L, SYMBOL, OMIT; 09832000=02183750=
ARRAY 09834000
LINE[0], SBUFF[0]; 09836000
REAL 09838000
NCR, R, L, SYMBOL; 09840000
BOOLEAN 09842000
OMIT; 09855000
BEGIN 09860000=02184000=
STREAMLOCALS; 09862000
STREAMSETDI(LINE, 0); 09865000=02184250=
STREAMSMEARLIT(16, 6" "); 09870000=02184250=
STREAMSETSI(SBUFF, NCR); 09875000=02184500=
STREAMTRANSFERWDS(9); 09880000=02184500=
STREAMSMEARLIT(8, 6" "); 09885000=02184750=
STREAMTRANSFERWDS(1); % SEQUENCE NUMBER. 09890000=02185000=
STREAMSMEARLIT(1, 6" "); 09895000=02185250=
STREAMSETLOCSI(SYMBOL); 09900000=02185250=
STREAMSKIPSI(+6); 09905000=02185250=
STREAMTRANSFERCHR(2); 09910000=02185500=
STREAMSMEARLIT(1, 6" "); 09915000=02185500=
STREAMSETLOCSI(R); 09920000=02185750=
STREAMTRANSFERDEC(4); 09925000=02185750=
STREAMSMEARLIT(1, 6":"); 09930000=02185750=
STREAMSETLOCSI(L); 09935000=02186000=
STREAMTRANSFERDEC(1); 09940000=02186000=
STREAMSMEARLIT(1, 6" "); 09945000=02186250=
THRU REAL(OMIT) DO 09950000=02186750=
BEGIN 09951000
STREAMSKIPDI(-12); 09952000
STREAMTRANSFERLIT(8, 6" OMIT"); 09953000
END; 09954000
END EDITLINE; 09955000=02187000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09962000
COMMENT COMPARE COMPARES SEQUENCE NUMBERS OF TAPE AND CARD. IF 09965000=02187250=
TAPE IS SMALLER THEN RESULT = 0 ELSE IF CARD IS SMALLER 09970000=02187500=
RESULT = 1 ELSE RESULT = 2; 09975000=02187750=
REAL PROCEDURE COMPARE(TAPE, TX, CARD, CX); 09980000=02188000=
VALUE 09982000=02188000=
TX, CX; 09984000=02188000=
ARRAY 09986000
TAPE, CARD[0]; 09988000
REAL 09990000
TX, CX; 09992000
BEGIN 10005000=02188250=
STREAMLOCALS; 10006000
TALLY:= 0; 10008000
STREAMSETSI(TAPE, TX); 10010000=02188500=
STREAMSETDI(CARD, CX); 10015000=02188500=
IF STREAMCOMPAREGEQ(8) THEN 10020000=02188750=
BEGIN 10025000=02189000=
STREAMSKIPSI(-8); 10030000=02189250=
STREAMSKIPDI(-8); 10035000=02189250=
TALLY:= 1; 10040000=02189250=
IF STREAMCOMPAREEQL(8) THEN 10045000=02189500=
TALLY:= 2 10050000=02189750=
END; 10055000=02189750=
COMPARE:= TALLY 10060000=02190250=
END COMPARE; 10065000=02190250=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10066000
PROCEDURE OUTPUTSOURCE; 10070000=02190500=
BEGIN 10075000=02190750=
LABEL 10080000=02191000=
LCARD, 10085000=02191000=
LTAPE, 10090000=02191000=
AWAY; 10095000=02191000=
SWITCH 10100000=02191250=
SW:= LCARD, 10105000=02191250=
LCARD, 10110000=02191250=
LTAPE, 10115000=02191250=
AWAY, 10120000=02191250=
LCARD, 10125000=02191250=
LTAPE; 10130000=02191250=
IF SEQTOG THEN % RESEQUENCING. 10135000=02191500=
BEGIN 10140000=02191750=
IF TOTALNO = -10 OR NEWBASE THEN 10145000=02192000=
BEGIN 10150000=02192250=
NEWBASE:= FALSE; 10155000=02192500=
GTI1:= TOTALNO:= BASENUM 10160000=02192750=
END 10165000=02193000=
ELSE 10170000=02193000=
GTI1:= TOTALNO:= TOTALNO+ADDVALUE; 10175000=02193000=
CHANGESEQ(GTI1, SBUFF, LCR); 10180000=02193250=
END; 10185000=02193500=
IF OMITTING THEN 10205000=02194250=
IF NOT LISTATOG THEN 10210000=02194250=
GO AWAY; 10215000=02194250=
GO SW[LASTUSED]; 10220000=02194500=
LCARD: 10225000=02195000=
IF LISTER OR LISTPTOG THEN 10230000=02195000=
PRINTCARD; 10235000=02195000=
GO AWAY; 10240000=02195250=
LTAPE: 10245000=02195750=
IF LISTER THEN 10250000=02195750=
PRINTCARD; 10255000=02195750=
% GO AWAY; 10260000=02196000=
AWAY: 10265000=02196500=
END OUTPUTSOURCE; 10270000=02196500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10275000=02196500=
PROCEDURE READACARD; 10280000=02196750=
COMMENT READACARD READS CARDS FROM EITHER THE CARD READER OR THE 10290000=02197000=
TAPE MERGING AS REQUESTED AND CREATING A NEW TAPE AND 10295000=02197250=
LISTING IF REQUESTED. READACARD ALSO INSERTS A PERCENT 10300000=02197500=
SIGN AS AN END OF CARD SENTINEL IN COLUMN 73 AND SETS 10305000=02197750=
FCR,NCR,LCR,TLCR, AND CLCR; 10310000=02198000=
BEGIN 10315000=02198250=
LABEL 10545000=02210000=
CARDONLY, 10550000=02210000=
CARDLAST, 10555000=02210000=
TAPELAST, 10560000=02210000=
EXIT, 10565000=02210000=
FIRSTTIME, 10570000=02210250=
EOF, 10575000=02210250=
USETHESWITCH, 10580000=02210500=
COMPAR, 10585000=02210500=
XIT; 10595000=02210500=
SWITCH 10600000=02210750=
USESWITCH:= CARDONLY, 10605000=02210750=
CARDLAST, 10610000=02210750=
TAPELAST, 10615000=02210750=
FIRSTTIME; 10620000=02210750=
IF ERRORCOUNT >= ERRMAX THEN 10625000=02211500=
ERR(611); % ERR LIMIT EXCEEDED - STOP. 10630000=02211500=
USETHESWITCH: 10635000=02211800=
DOLLAR2TOG:= FALSE; 10640000=02211800=
GO TO USESWITCH[LASTUSED]; 10645000=02212000=
MOVE(1, INFO[LASTUSED.LINKR,*], LASTUSED.LINKC, 10650000=02212500=
DEFINEARRAY, DEFINEINDEX-2); 10655000=02212500=
LASTUSED:= LASTUSED+1; 10660000=02212750=
NCR:= LCR-1; 10665000=02213000=
GO TO XIT; 10670000=02213250=
FIRSTTIME: 10675000=02213750=
READ(CARD, CARDRECSIZE, EBCDICBUFF[*]); 10680000=02213750=
PACKEBCDICTOBIC(EBCDICBUFF, 0, CBUFF, 0, 10*8); 10682000
FCR:= NCR:= (LCR:= 9)-9; 10685000=02214000=
SBUFF:= CBUFF; 10686000
MEDIUM:= 6"C "; 10690000=02214100=
IF EXAMIN(SBUFF, FCR) ^= 6"$" AND LISTER THEN 10695000=02214200=
PRINTCARD; 10700000=02214200=
PUTSEQNO(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR); 10705000=02214250=
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 10710000=02214500=
GO XIT; 10715000=02214750=
10720000=02215000=
COMMENT WE HAVE JUST INITIALIZED CARD INPUT; 10725000=02215000=
CARDONLY: 10730000=02215500=
READ(CARD, CARDRECSIZE, EBCDICBUFF[*]); 10735000=02215500=
PACKEBCDICTOBIC(EBCDICBUFF, 0, CBUFF, 0, 10*8); 10736000
LCR:= 9; 10740000=02215750=
SBUFF:= CBUFF; 10742000
GO EXIT; 10745000=02215750=
CARDLAST: 10750000=02216250=
READ(CARD, CARDRECSIZE, EBCDICBUFF[*])[EOF]; 10755000=02216250=
PACKEBCDICTOBIC(EBCDICBUFF, 0, CBUFF, 0, 10*8); 10756000
CLCR:= 9; 10760000=02216500=
SBUFF:= CBUFF; 10762000
GO COMPAR; 10765000=02216750=
EOF: 10770000=02217250=
DEFINEARRAY[25]:= 6"ND;END."&6"E"[46:4:5]; 10775000=02217250=
DEFINEARRAY[34]:= 6"9999"&6"9999"[46:22:23]; 10780000=02217500=
CLCR:= 34; 10785000=02217750=
SBUFF:= DEFINEARRAY; 10786000
PUTSEQNO(DEFINEARRAY, 33, SBUFF, CLCR-8); 10790000=02218000=
TURNONSTOPLIGHT(6"%", DEFINEARRAY, CLCR-8); 10795000=02218250=
% 10800000=02218400=
GO COMPAR; 10805000=02218500=
COMMENT THIS RELEASES THE PREVIOUS CARD FROM THE CARD READER AND 10815000=02218750=
SETS UP CLCR; 10820000=02219000=
TAPELAST: 10825000=02219500=
MYSELF.STATUS:= VALUE(TERMINATED); 10830000=02219500=
GO TO COMPAR; 10835000=02219750=
COMMENT THIS RELEASES THE PREVIOUS CARD FROM TAPE AND SETS UP TLCR; 10840000=02219750=
COMPAR: 10845000=02224500=
; 10850000=02224500=
EXIT: 10855000=02225250=
NCR:= FCR:= LCR-9; COMMENT SETS UP NCR AND FCR; 10860000=02225250=
IF EXAMIN(SBUFF, FCR) ^= 6"$" THEN % $-CARDS DON"T COUNT. 10875000=02225750=
IF COMPARE(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR) = 1 THEN 10880000=02226000=
BEGIN 10885000=02226250=
FLAG(610); % SEQUENCE ERROR. 10890000=02226500=
SEQUENCEERROR(LIN); 10895000=02226750=
END; 10900000=02227000=
CARDNUMBER:= CONV(INFO[LASTSEQROW,*], LASTSEQUENCE-1, 5, 8); 10905000=02228000=
IF EXAMIN(SBUFF, FCR) = 6"$" THEN 10950000=02228250=
BEGIN 10955000=02228500=
IF LISTPTOG OR PRINTDOLLARTOG THEN 10960000=02228750=
PRINTCARD; 10965000=02228750=
NCR:= NCR+32768; % INC BY ONE CHAR 10970000=02229000=
DOLLARCARD; 10975000=02229000=
10980000=02229250=
COMMENT DONT FORGET THAT NCR IS NOT WORD MODE, BUT CHAR. MODE POINTER; 10985000=02229250=
GO USETHESWITCH; 10990000=02229500=
END; 10995000=02229750=
IF EXAMIN(SBUFF, FCR) = 6" " THEN 11000000=02230000=
IF DOLLAR2TOG:= EXAMIN(SBUFF, FCR+32768) = 6"$" THEN 11005000=02230100=
BEGIN 11010000=02230250=
OUTPUTSOURCE; 11015000=02230500=
NCR:= NCR+65536; % SCAN PAST " $" (CHARACTER MODE). 11020000=02230750=
DOLLARCARD; 11025000=02231000=
END; 11030000=02231250=
CARDCOUNT:= CARDCOUNT+1; 11115000=02234500=
IF DOLLAR2TOG THEN 11120000=02234600=
GO USETHESWITCH; 11125000=02234600=
PUTSEQNO(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR); 11130000=02234750=
OUTPUTSOURCE; 11135000=02235000=
IF OMITTING THEN 11140000=02235250=
GO USETHESWITCH; 11145000=02235250=
% 11150000=02235500=
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 11155000=02235750=
XIT: 11160000=02238000=
END READACARD; 11165000=02238000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11170000=02238000=
REAL PROCEDURE CONVERT; 11175000=02248000=
BEGIN 11180000=02249000=
REAL 11185000=02249000=
T; 11190000=02249000=
INTEGER 11195000=02249000=
N; 11200000=02249000=
TLO:= 0; 11205000=02250000=
THI:= T:= CONV(ACCUM, 1, TCOUNT, N:= (COUNT-TCOUNT) MOD 8); 11210000=02251000=
FOR N:= TCOUNT+N STEP 8 UNTIL COUNT-1 DO 11215000=02252000=
IF DPTOG THEN 11220000=02253000=
BEGIN 11225000=02254000=
THI:= FIRSTWORD( 11230000=02256000=
DOUBLE(THI, TLO)*100000000.0 + CONV(ACCUM, 1, N, 8), TLO); 11235000=02256000=
T:= THI; 11240000=02257000=
END 11245000=02259000=
ELSE 11250000=02259000=
T:= T*100000000+CONV(ACCUM, 1, N, 8); 11255000=02259000=
CONVERT:= T; 11260000=02260000=
END; 11265000=02261000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11322000
PROCEDURE DUMPINFO; 11325000=02264000=
BEGIN 11330000=02264050=
ARRAY 11335000=02264100=
A[0:14]; 11340000=02264100=
INTEGER 11345000=02264100=
JEDEN, 11350000=02264100=
DWA; 11355000=02264100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11356000
PROCEDURE OCTALWORDS(S, SX, D, DX, N); 11360000=02264400=
VALUE 11362000=02264400=
SX, DX, N; 11364000=02264400=
ARRAY 11366000
S, D[0]; 11368000
REAL 11370000
SX, DX, N; 11372000
BEGIN 11375000=02264450=
STREAMLOCALS; 11376000
STREAMSETSI(S, SX); 11377000=02264500=
STREAMSETDI(D, DX); 11378000=02264500=
THRU N DO 11379000=02264600=
BEGIN 11380000
THRU 2 DO 11381000
BEGIN 11382000
THRU 8 DO 11383000
BEGIN 11384000
STREAMSETDB(3, 0); 11385000
THRU 3 DO 11386000
BEGIN 11387000=02264600=
IF STREAMTESTSB THEN 11388000
STREAMSETDB(1, 1) 11389000
ELSE 11390000
STREAMSETDB(1, 0); 11391000
11392000
STREAMSKIPSB(1); 11393000
END; 11394000
END; 11395000
11396000
STREAMSMEARLIT(1, 6" "); 11397000
END; 11398000
11399000
STREAMSMEARLIT(2, 6" "); 11400000
END; 11401000
END OF OCTALWORDS; 11405000=02264650=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11406000
PROCEDURE ALPHAWORDS(S, SX, D, DX, N); 11410000=02264700=
VALUE 11412000=02264700=
SX, DX, N; 11414000=02264700=
ARRAY 11416000
S, D[0]; 11418000
REAL 11420000
SX, DX, N; 11422000
BEGIN 11425000=02264750=
STREAMLOCALS; 11426000
STREAMSETSI(S, SX); 11427000=02264800=
STREAMSETDI(D, DX); 11428000=02264800=
THRU N DO 11429000=02264850=
BEGIN 11430000
THRU 2 DO 11431000
BEGIN 11432000
THRU 4 DO 11433000
BEGIN 11434000
STREAMSMEARLIT(1, 6" "); 11435000
STREAMTRANSFERCHR(1) 11436000
END; 11437000
11438000
STREAMSMEARLIT(1, 6" ") 11439000
END; 11440000
11441000
STREAMSMEARLIT(2, 6" ") 11442000
END; 11443000=02264850=
END OF ALPHAWORDS; 11450000=02264900=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11452000
IF NOHEADING THEN 11455000=02264950=
DATIME; 11460000=02264950=
WRITE(LINE[SPACE 2], < //"ELBAT">); 11465000=02264950=
FOR JEDEN:= 0 STEP 6 UNTIL 71 DO 11470000=02265000=
BEGIN 11475000=02265050=
BLANKET(14, A); 11480000=02265100=
OCTALWORDS(ELBAT, JEDEN, A, 0, 6); 11485000=02265100=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 11486000
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 11490000=02265150=
END; 11495000=02265200=
BLANKET(14, A); 11500000=02265250=
OCTALWORDS(ELBAT, 72, A, 0, 4); 11505000=02265250=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 11506000
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 11510000=02265300=
FOR JEDEN:= 0 STEP 1 UNTIL NEXTINFO DIV 256 DO 11515000=02265350=
BEGIN 11520000=02265400=
WRITE(LINE[SPACE 2], < //"INFO[", I2, ",*]">, JEDEN); 11525000=02265450=
FOR DWA:= 0 STEP 6 UNTIL 251 DO 11530000=02265500=
BEGIN 11535000=02265550=
BLANKET(14, A); 11540000=02265600=
ALPHAWORDS(INFO[JEDEN,*], DWA, A, 0, 6); 11545000=02265600=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 11546000
WRITE(LINE, 20, EBCDICBUFF[*]); 11550000=02265650=
BLANKET(14, A); 11555000=02265700=
OCTALWORDS(INFO[JEDEN,*], DWA, A, 0, 6); 11560000=02265700=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 11562000
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 11565000=02265750=
END; 11570000=02265800=
BLANKET(14, A); 11575000=02265850=
ALPHAWORDS(INFO[JEDEN,*], 252, A, 0, 4); 11580000=02265850=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 11582000
WRITE(LINE, 20, EBCDICBUFF[*]); 11585000=02265900=
BLANKET(14, A); 11590000=02265950=
OCTALWORDS(INFO[JEDEN, *], 252, A, 0, 4); 11595000=02265950=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 11596000
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 11600000=02266000=
END; 11605000=02266050=
END OF DUMPINFO; 11610000=02266100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11615000=02266100=
DEFINE 11620000=02277000=
SKAN = BEGIN 11625000=02277000=
COUNT:= RESULT:= ACCUM[1]:= 0; 11630000=02278000=
SCANNER; 11635000=02279000=
Q:= ACCUM[1]; 11640000=02280000=
END #; 11645000=02281000=
11650000=02282000=
COMMENT DOLLARCARD HANDLES THE COMPILER CONTROL CARDS. 11655000=02282000=
ALL COMPILER- AND USER-DEFINED OPTIONS ARE KEPT 11660000=02283000=
IN THE ARRAY "OPTIONS". 11665000=02284000=
EACH OPTION HAS A TWO-WORD ENTRY: 11670000=02285000=
11675000=02286000=
WORD CONTAINS 11680000=02287000=
---- -------- 11685000=02288000=
1 ENTRY FROM ACCUM[1]: 00XZZZZ, WHERE 11690000=02289000=
X IS THE SIZE OF THE ID AND 11695000=02290000=
ZZZZZ IS THE FIRST FIVE CHARS OF THE ID. 11700000=02291000=
2 PUSH-DOWN, 47-BIT STACK CONTAINING THE 11705000=02292000=
HISTORY OF THE SETTINGS OF THIS OPTION. 11710000=02293000=
11715000=02294000=
IN "FINDOPTION", ALL COMPILER-DEFINED OPTIONS ARE USUALLY 11720000=02295000=
LOCATED BASED UPON A UNIQUE NUMBER ASSIGNED TO EACH. 11725000=02296000=
FOR ALL USER-DEFINED OPTIONS, A SEQUENTIAL TABLE SEARCH IS 11730000=02297000=
INITIATED USING "USEROPINX" AS THE INITIAL INDEX INTO THE 11735000=02298000=
"OPTIONS" ARRAY. IF THE NUMBER OF COMPILER-DEFINED OPTIONS 11740000=02299000=
IS CHANGED, THEN "USEROPINX" MUST BE ACCORDINGLY CHANGED. 11745000=02300000=
THE NUMBER OF USER DEFINED OPTIONS ALLOWED CAN BE 11750000=02301000=
CHANGED BY CHANGING THE DEFINE "OPARSIZE". 11755000=02302000=
THE VARIABLE "OPTIONWORD" CONTAINS THE CURRENT TRUE OR FALSE 11760000=02303000=
SETTING OF ALL OF THE COMPILER-DEFINED OPTIONS, ONE BIT PER 11765000=02304000=
OPTION. 11770000=02305000=
; 11775000=02306000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11776000
BOOLEAN PROCEDURE FINDOPTION(BIT); 11780000=02307000=
VALUE 11785000=02307000=
BIT; 11790000=02307000=
INTEGER 11795000=02307000=
BIT; 11800000=02307000=
BEGIN 11805000=02308000=
LABEL 11810000=02309000=
FOUND; 11815000=02309000=
REAL 11820000=02310000=
ID; 11825000=02310000=
OPINX:= 2*BIT-4; 11830000=02311000=
WHILE ID:= OPTIONS[OPINX:= OPINX+2] ^= 0 DO 11835000=02312000=
IF Q = ID THEN 11840000=02313000=
GO FOUND; 11845000=02313000=
OPTIONS[OPINX]:= Q;% NEW USER-DEFINED OPTION. 11850000=02314000=
FOUND: 11855000=02316000=
IF OPINX+1 > OPARSIZE THEN 11860000=02316000=
FLAG(602) 11865000=02316000=
ELSE % TOO MANY USER OPTIONS 11870000=02316000=
FINDOPTION:= BOOLEAN(OPTIONS[OPINX+1]); 11875000=02317000=
END FINDOPTION; 11880000=02318000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11885000=02318000=
PROCEDURE DOLLARCARD; 11890000=02319000=
BEGIN 11895000=02320000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11896000
PROCEDURE RESTORESEQNUM(A, LCR, INFO, IX); 11900000=02320200=
VALUE 11905000=02320200=
LCR, IX; 11910000=02320200=
ARRAY 11911000
A, INFO[0]; 11912000
REAL 11913000
LCR, IX; 11914000
BEGIN 11915000=02320400=
STREAMLOCALS; 11916000
STREAMSETDI(A, LCR); 11920000=02320600=
STREAMSETSI(INFO, IX); 11925000=02320600=
STREAMTRANSFERWDS(1); 11930000=02320600=
END; 11935000=02320800=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11936000
PROCEDURE SWITCHIT(XBIT); 11940000=02321000=
VALUE 11945000=02321000=
XBIT; 11950000=02321000=
INTEGER 11955000=02321000=
XBIT; 11960000=02321000=
BEGIN 11965000=02322000=
BOOLEAN 11970000=02323000=
B, 11975000=02323000=
T; 11980000=02323000=
INTEGER 11985000=02324000=
SAVEINX; 11990000=02324000=
LABEL 11995000=02325000=
XMODE0, 12000000=02325000=
XMODE1, 12005000=02325000=
XMODE2, 12010000=02325000=
XMODE3, 12015000=02325000=
XMODE4, 12020000=02325000=
ALONG; 12025000=02325000=
SWITCH 12030000=02326000=
SW:= XMODE0, 12035000=02326000=
XMODE1, 12040000=02326000=
XMODE2, 12045000=02326000=
XMODE3, 12050000=02326000=
XMODE4; 12055000=02326000=
SETTING:= FINDOPTION(XBIT); 12060000=02327000=
SKAN; 12065000=02327000=
GO SW[XMODE+1]; 12070000=02328000=
XMODE0: 12075000=02329000=
% FIRST OPTION ON CARD, BUT NOT SET, RESET, OR POP. 12080000=02329000=
OPTIONWORD:= BOOLEAN(0); 12085000=02330000=
FOR SAVEINX:= 1 STEP 2 UNTIL OPARSIZE DO 12090000=02331000=
OPTIONS[SAVEINX]:= 0; 12095000=02331000=
XMODE:= LASTUSED:= 1; % CARD INPUT ONLY. 12100000=02332000=
XMODE1: 12105000=02333000=
% NOT FIRST OPTION AND NOT BEING SET, RESET, OR POPPED. 12110000=02333000=
OPTIONS[OPINX+1]:= REAL(TRUE); 12115000=02334000=
IF XBIT < USEROPINX THEN 12120000=02335000=
OPTIONWORD:= OPTIONWORD & TRUE[XBIT:1]; 12125000=02335000=
GO ALONG; 12130000=02336000=
XMODE2: 12135000=02337000=
% RESET; 12140000=02337000=
OPTIONS[OPINX+1]:= REAL(FALSE & SETTING[46:45:46]); 12145000=02338000=
IF XBIT < USEROPINX THEN 12150000=02339000=
OPTIONWORD:= OPTIONWORD & FALSE[XBIT:1]; 12155000=02339000=
GO ALONG; 12160000=02340000=
XMODE3: 12165000=02341000=
% SET. 12170000=02341000=
SAVEINX:= OPINX; % REMEMBER OPTION WE ARE SETTING. 12175000=02342000=
B:= 12180000=02343000=
IF Q = 6"1=0000" THEN 12185000=02343000=
BOOLEXP 12190000=02343000=
ELSE 12195000=02343000=
TRUE; 12200000=02343000=
OPTIONS[SAVEINX+1]:= REAL(B & SETTING[46:46]); 12205000=02352000=
IF XBIT < USEROPINX THEN 12210000=02353000=
OPTIONWORD:= OPTIONWORD & B[XBIT:1]; 12215000=02353000=
GO ALONG; 12220000=02354000=
XMODE4: 12225000=02355000=
% POP. 12230000=02355000=
OPTIONS[OPINX+1]:= REAL(B:= SETTING.[46:46]); 12235000=02356000=
IF XBIT < USEROPINX THEN 12240000=02357000=
OPTIONWORD:= OPTIONWORD & B[XBIT:1]; 12245000=02357000=
ALONG: 12250000=02359000=
END SWITCHIT; 12255000=02359000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12260000=02359000=
LABEL 12265000=02360000=
EXIT, 12270000=02360000=
AGAIN, 12275000=02360000=
SKANAGAIN, 12280000=02360000=
LENGTH1, 12285000=02360000=
LENGTH2, 12290000=02360000=
LENGTH3, 12295000=02360000=
LENGTH4, 12300000=02361000=
LENGTH5, 12305000=02361000=
LENGTH6, 12310000=02361000=
LENGTH7, 12315000=02361000=
LENGTH8, 12320000=02361000=
LENGTH9, 12325000=02362000=
WHATISIT, 12330000=02363000=
CARDOPTION, 12335000=02363000=
MERGEOPTION; 12340000=02363000=
SWITCH 12345000=02364000=
OPTIONLENGTH:= LENGTH1, 12350000=02364000=
WHATISIT, 12355000=02364000=
LENGTH3, 12360000=02364000=
LENGTH4, 12365000=02364000=
LENGTH5, 12370000=02365000=
LENGTH6, 12375000=02365000=
LENGTH7, 12380000=02365000=
WHATISIT, 12385000=02365000=
LENGTH9, 12390000=02365000=
WHATISIT; 12395000=02365000=
INTEGER 12400000=02365100=
SRESULT, 12405000=02365100=
SCOUNT; 12410000=02365100=
DOLLARTOG:= TRUE; 12425000=02366000=
MOVE(10, ACCUM, 0, DEFINEARRAY, 0); % SAVE INFORMATION FOR 12430000=02366100=
SCOUNT:= COUNT; 12435000=02366200=
SRESULT:= RESULT; % "TABLE" TO RESUME SCAN. 12440000=02366200=
XMODE:= 0; 12445000=02367000=
PUTSEQNO(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR); 12450000=02368000=
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 12455000=02369000=
SKANAGAIN: 12460000=02371000=
SKAN; 12465000=02371000=
AGAIN: 12470000=02373000=
GO OPTIONLENGTH[MIN(COUNT, 10)]; 12475000=02373000=
LENGTH1: 12480000=02375000=
IF Q = 6"1%0000" THEN 12485000=02375000=
GO EXIT; 12490000=02375000=
IF Q = 6"1$0000" THEN 12495000=02376000=
BEGIN 12500000=02377000=
SWITCHIT(PRINTDOLLARBIT); 12505000=02377000=
GO AGAIN 12510000=02377000=
END; 12515000=02377000=
IF Q = 6"1,0000" THEN 12520000=02378000=
GO SKANAGAIN; 12525000=02378000=
GO WHATISIT; 12530000=02379000=
LENGTH2: 12535000=02380000=
% NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 12540000=02380000=
LENGTH3: 12545000=02382000=
IF Q = 6"3SET00" THEN 12550000=02382000=
BEGIN 12555000=02383000=
XMODE:= 3; 12560000=02383000=
GO SKANAGAIN 12565000=02383000=
END; 12570000=02383000=
IF Q = 6"3POP00" THEN 12575000=02384000=
BEGIN 12580000=02385000=
XMODE:= 4; 12585000=02385000=
GO SKANAGAIN 12590000=02385000=
END; 12595000=02385000=
IF Q = 6"3NEW00" THEN 12600000=02386000=
BEGIN 12605000=02387000=
FLAG(601); % NEWTAPE IS DISABLED. 12610000=02388000=
GO AGAIN; 12625000=02390000=
END; 12630000=02391000=
IF Q = 6"3SEQ00" THEN 12635000=02392000=
BEGIN 12640000=02393000=
SWITCHIT(SEQBIT); 12645000=02393000=
GO AGAIN 12650000=02393000=
END; 12655000=02393000=
IF Q = 6"3PRT00" THEN 12660000=02394000=
BEGIN 12665000=02395000=
SWITCHIT(PRTBIT); 12670000=02395000=
GO AGAIN 12675000=02395000=
END; 12680000=02395000=
IF Q = 6"3MCP00" THEN 12685000=02396000=
BEGIN 12690000=02397000=
SWITCHIT(MCPBIT); 12695000=02397000=
GO AGAIN 12700000=02397000=
END; 12705000=02397000=
GO WHATISIT; 12710000=02398000=
LENGTH4: 12715000=02400000=
IF Q = 6"4LIST0" THEN 12720000=02400000=
BEGIN 12725000=02401000=
SWITCHIT(LISTBIT); 12730000=02402000=
GO AGAIN; 12735000=02404000=
END; 12740000=02405000=
IF Q = 6"4VOID0" THEN 12745000=02406000=
BEGIN 12750000=02407000=
FLAG(601); % VOID IS DISABLED. 12755000=02408000=
GO AGAIN; 12820000=02418000=
END; 12825000=02419000=
IF Q = 6"4OMIT0" THEN 12830000=02420000=
BEGIN 12835000=02421000=
IF NOT DOLLAR2TOG THEN 12840000=02421000=
BEGIN 12845000=02421000=
PRINTCARD; 12850000=02421000=
FLAG(605); 12855000=02421000=
END; 12860000=02421000=
SWITCHIT(OMITBIT); 12865000=02421100=
GO AGAIN 12870000=02421100=
END; 12875000=02421100=
IF Q = 6"4CARD0" THEN 12880000=02422000=
BEGIN 12885000=02423000=
FLAG(601); % MERGE MODE IS DISABLED. 12890000=02424000=
CARDOPTION: 12930000=02430000=
LASTUSED:= 1; 12935000=02430000=
GO AGAIN; 12940000=02431000=
END; 12945000=02432000=
IF Q = 6"4TAPE0" THEN 12950000=02433000=
BEGIN 12955000=02434000=
FLAG(601); % MERGE MODE IS DISABLED. 12960000=02435000=
IF NOT MERGETOG THEN 12965000=02436000=
GO CARDOPTION; 12970000=02436000=
MERGEOPTION: 12975000=02438000=
LASTUSED:= 2; % NEXT CARD IS READ FROM READER. 12980000=02438000=
GO AGAIN; 13180000=02460000=
END; 13185000=02461000=
IF Q = 6"4PAGE0" THEN 13190000=02462000=
BEGIN 13195000=02463000=
IF LISTER THEN 13200000=02464000=
WRITE(LINE[SKIP 1]); 13205000=02464000=
GO SKANAGAIN; 13210000=02465000=
END; 13215000=02466000=
IF Q = 6"4INFO0" THEN 13220000=02467000=
BEGIN 13225000=02468000=
DUMPINFO; 13230000=02468000=
GO SKANAGAIN 13235000=02468000=
END; 13240000=02468000=
IF Q = 6"4SEGS0" THEN 13245000=02469000=
BEGIN 13250000=02470000=
SWITCHIT(SEGSBIT); 13255000=02470000=
GO AGAIN 13260000=02470000=
END; 13265000=02470000=
IF Q = 6"4NEST0" THEN 13270000=02471000=
BEGIN 13275000=02472000=
SWITCHIT(NESTBIT); 13280000=02472000=
GO AGAIN 13285000=02472000=
END; 13290000=02472000=
IF Q = 6"4DECK0" THEN 13295000=02473000=
BEGIN 13300000=02474000=
SWITCHIT(DECKBIT); 13305000=02474000=
GO AGAIN 13310000=02474000=
END; 13315000=02474000=
GO WHATISIT; 13320000=02475000=
LENGTH5: 13325000=02477000=
IF Q = 6"5RESET" THEN 13330000=02477000=
BEGIN 13335000=02478000=
XMODE:= 2; 13340000=02478000=
GO SKANAGAIN 13345000=02478000=
END; 13350000=02478000=
IF Q = 6"5LISTP" THEN 13355000=02479000=
BEGIN 13360000=02480000=
SWITCHIT(LISTPBIT); 13365000=02480000=
GO AGAIN; 13370000=02480000=
END; 13375000=02480000=
IF Q = 6"5VOIDT" THEN 13380000=02481000=
BEGIN 13385000=02482000=
FLAG(601); % VOIDT IS DISABLED. 13390000=02483000=
GO AGAIN; 13430000=02493000=
END; 13435000=02494000=
IF Q = 6"5CHECK" THEN 13440000=02495000=
BEGIN 13445000=02496000=
SWITCHIT(CHECKBIT); 13450000=02496000=
GO AGAIN 13455000=02496000=
END; 13460000=02496000=
IF Q = 6"5LIMIT" THEN 13465000=02497000=
BEGIN 13470000=02498000=
SKAN; 13475000=02499000=
IF RESULT ^= 3 THEN % SHOULD BE NUMBER. 13480000=02500000=
BEGIN 13485000=02501000=
FLAG(600); 13490000=02501000=
GO AGAIN 13495000=02501000=
END; 13500000=02501000=
ERRMAX:= CONV(ACCUM, 1, 0, ACCUM[1].[35:6]); 13505000=02502000=
GO SKANAGAIN; 13510000=02503000=
END; 13515000=02504000=
IF Q = 6"5PUNCH" THEN 13520000=02505000=
BEGIN 13525000=02506000=
FLAG(601); % PUNCH IS DISABLED. 13530000=02506000=
GO AGAIN; 13535000=02506000=
END; 13540000=02506000=
IF Q = 6"5PURGE" THEN 13545000=02507000=
BEGIN 13550000=02508000=
SWITCHIT(PURGEBIT); 13555000=02508000=
GO AGAIN; 13560000=02508000=
END; 13565000=02508000=
IF Q = 6"5LISTA" THEN 13570000=02509000=
BEGIN 13575000=02510000=
SWITCHIT(LISTABIT); 13580000=02511000=
GO AGAIN; 13585000=02513000=
END; 13590000=02514000=
IF Q = 6"5STUFF" THEN 13595000=02515000=
BEGIN 13600000=02516000=
SWITCHIT(STUFFBIT); 13605000=02516000=
GO AGAIN; 13610000=02516000=
END; 13615000=02516000=
GO WHATISIT; 13620000=02517000=
LENGTH6: 13625000=02519000=
IF Q = 6"6SEQER" THEN 13630000=02519000=
BEGIN 13635000=02520000=
SWITCHIT(SEQERRBIT); 13640000=02520000=
GO AGAIN 13645000=02520000=
END; 13650000=02520000=
IF Q = 6"6SINGL" THEN 13655000=02521000=
BEGIN 13660000=02522000=
SWITCHIT(SINGLBIT); 13665000=02522000=
GO AGAIN 13670000=02522000=
END; 13675000=02522000=
IF Q = 6"6SEQXE" THEN 13680000=02523000=
BEGIN 13685000=02524000=
SEQXEQTOG:= XMODE ^= 2 AND XMODE ^= 4 OR SEQXEQTOG; %NEVER RESET. 13690000=02525000=
IF BUILDLINE.[2:1] THEN 13695000=02526000=
BUILDLINE:= TRUE; 13700000=02526000=
GO SKANAGAIN; 13705000=02527000=
END; 13710000=02528000=
IF Q = 6"6DEBUG" THEN 13715000=02529000=
BEGIN 13720000=02530000=
SWITCHIT(DEBUGBIT); 13725000=02531000=
IF DEBUGTOG THEN 13730000=02533000=
IF WOP[0] = 0 THEN 13735000=02534000=
BEGIN 13740000=02535000=
FILL WOP[*] WITH "LITC", 6" ", "OPDC", 6"DESC", 13745000=02536100=
11,6"NOP ", 12,6"PRT ", 13,6"DEL ", 16,6"ADD ", 18,6"PRL ", 19,6"LNG ",13760000=02539000=
21,6"GEQ ", 22,6"BBC ", 24,6"INX ", 35,6"LOR ", 37,6"GTR ", 38,6"BFC ",13765000=02540000=
39,6"RTN ", 40,6"COC ", 48,6"SUB ", 64,6"MUL ", 67,6"LND ", 68,6"STD ",13770000=02541000=
69,6"NEQ ", 71,6"XIT ", 72,6"MKS ",128,6"DIV ",130,6"COM ",131,6"LQV ",13775000=02542000=
132,6"SND ",133,6"XCH ",134,6"CHS ",167,6"RTS ",168,6"CDC ",260,6"LOD ",13780000=02543000=
261,6"DUP ",278,6"LBC ",294,6"LFC ",322,6"ZP1 ",384,6"IDV ",532,6"ISD ",13785000=02544000=
533,6"LEQ ",534,6"BBW ",548,6"ISN ",549,6"LSS ",550,6"BFW ",581,6"EQL ",13790000=02545000=
582,6"SSP ",790,6"LBU ",806,6"LFU ",896,6"RDV ", 13795000=02546000=
1003,6"SCI ",1004,6"SAN ",1019,6"SCS ", 13800000=02547000=
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 13805000=02548000=
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1023; 13810000=02549000=
FILL COP[*] WITH % CHARACTER MODE MNEMONICS 13815000=02550000=
0,6" ",0,0, 13820000=02551000=
0,6"EXC ", 2,6"BSD ", 3,6"BSS ", 4,6"RDA ", 5,6"TRW ", 6,6"SED ", 13825000=02552000=
7,6"TDA ",12,6"SDA ",13,6"SSA ",14,6"SFD ",15,6"SRD ",18,6"SES ", 13830000=02553000=
20,6"TEQ ",21,6"TNE ",22,6"TEG ",23,6"TGR ",24,6"SRS ",25,6"SFS ", 13835000=02554000=
28,6"TEL ",29,6"TLS ",30,6"TAN ",31,6"BIT ",32,6"INC ",33,6"STC ", 13840000=02555000=
34,6"SEC ",35,6"CRF ",36,6"JNC ",37,6"JFC ",38,6"JNS ",39,6"JFW ", 13845000=02556000=
40,6"RCA ",41,6"ENS ",42,6"BNS ",43,6"RSA ",44,6"SCA ",45,6"JRC ", 13850000=02557000=
46,6"TSA ",47,6"JRV ",48,6"CEQ ",49,6"CNE ",50,6"CEG ",51,6"CGR ", 13855000=02558000=
52,6"BIT ",53,6"BIR ",54,6"OCV ",55,6"ICV ",56,6"CEL ",57,6"CLS ", 13856000
58,6"FSU ",59,6"FAD ",60,6"TRP ",61,6"TRN ",62,6"TRZ ",63,6"TRS ", 13860000=02559000=
64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0; 13865000=02560000=
END; 13870000=02563000=
GO AGAIN; 13875000=02564000=
END; 13880000=02565000=
IF Q = 6"6FORMA" THEN 13885000=02566000=
BEGIN 13890000=02567000=
SWITCHIT(FORMATBIT); 13895000=02567000=
GO AGAIN; 13900000=02567000=
END; 13905000=02567000=
GO WHATISIT; 13910000=02568000=
LENGTH7: 13915000=02570000=
% IF Q = 6"7INCLU" THEN 13920000=02570000=
% BEGIN DOLLARCARD:=STARTINCLUDING; GO EXIT; END; 13925000=02571000=
% IF Q = 6"7INCLN" THEN 13930000=02572000=
% BEGIN SWITCHIT(NEWINCLBIT); GO AGAIN; END; 13935000=02573000=
LENGTH8: 13940000=02574000=
% NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 13945000=02574000=
LENGTH9: 13950000=02576000=
IF Q = 6"9INTRI" THEN 13955000=02576000=
BEGIN 13960000=02576500=
INTOG:= XMODE ^= 2 AND XMODE ^= 4 OR INTOG; % NEVER RESET. 13965000=02577000=
GO SKANAGAIN; 13970000=02577250=
END; 13975000=02577500=
WHATISIT: 13980000=02579000=
IF RESULT = 3 THEN 13985000=02579000=
BEGIN 13990000=02580000=
BASENUM:= CONV(ACCUM, 1, 0, ACCUM[1].[35:6]); 13995000=02581000=
TOTALNO:= -10; 14000000=02582000=
NEWBASE:= TRUE; 14005000=02583000=
GO SKANAGAIN; 14010000=02584000=
END; 14015000=02585000=
IF RESULT = 2 THEN 14020000=02586000=
BEGIN 14025000=02587000=
IF Q = 6"1+0000" THEN 14030000=02588000=
BEGIN 14035000=02589000=
SKAN; 14040000=02590000=
IF RESULT = 3 THEN 14045000=02591000=
ADDVALUE:= CONV(ACCUM, 1, 0, ACCUM[1].[35:6]) 14050000=02593000=
ELSE 14055000=02593000=
FLAG(600); % NUMBER EXPECTED. 14060000=02593000=
END; 14065000=02594000=
GO SKANAGAIN; 14070000=02595000=
END; 14075000=02596000=
14080000=02597000=
COMMENT DID NOT RECOGNIZE OPTION; 14085000=02597000=
IF RESULT ^= 1 THEN % NOT AN IDENTIFIER. 14090000=02598000=
BEGIN 14095000=02599000=
FLAG(601); 14100000=02599000=
GO SKANAGAIN 14105000=02599000=
END; 14110000=02599000=
SWITCHIT(USEROPINX); % USEROPINX MEANS A USER-DEFINED OPTION. 14115000=02600000=
GO AGAIN; 14120000=02601000=
EXIT: 14125000=02602500=
LISTER:= DEBUGTOG OR LISTOG OR LISTATOG; 14130000=02602500=
MOVE(10, DEFINEARRAY, 0, ACCUM, 0); % RESTORE INFORMATION FOR 14135000=02602600=
COUNT:= SCOUNT; 14140000=02602700=
RESULT:= SRESULT; % "TABLE" TO RESUME SCAN. 14145000=02602700=
RESTORESEQNUM(SBUFF, LCR, INFO[LASTSEQROW,*], LASTSEQUENCE); 14150000=02602800=
% FOR VOID TESTS 14155000=02602800=
DOLLARTOG:= FALSE; 14160000=02603000=
END DOLLARCARD; 14165000=02604000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14170000=02604000=
14175000=02605000=
COMMENT TABLE IS THE ROUTINE THAT MOST CODE IN THE COMPILER 14180000=02605000=
USES WHEN IT IS DESIRED TO SCAN ANOTHER LOGICAL QUANTITY. 14185000=02606000=
THE RESULT RETURNED IS THE CLASS OF THE ITEM DESIRED. 14190000=02607000=
TABLE MAINTAINS THE VARIABLES I AND NXTELBT AND THE ARRAY 14195000=02608000=
ELBAT. ELBAT AND I ARE PRINCIPAL VARIABLES USED FOR 14200000=02609000=
COMUNICATION BETWEEN TABLE AND THE OUTSIDE WORLD. NXTELBT 14205000=02610000=
IS ALMOST EXCLUSIVELY USED BY TABLE, ALTHOUGH AN OCCASION- 14210000=02611000=
AL OTHER USE IS MADE IN ORDER TO FORGET THAT SOMETHING WAS 14215000=02612000=
SCANNED. (SEE, FOR EXAMPLE, COMPOUNDTAIL). FOR FURTHER 14220000=02613000=
GENERAL DISCUSSION SEE THE DECLARATION OF THESE VARIABLES. 14225000=02614000=
THE PARAMETER P IS THE ACTUAL INDEX OF THE QUANTITY 14230000=02615000=
DESIRED (USUALLY I-1,I, OR I+1). 14235000=02616000=
THE GENERAL PLAN OF TABLE IS THIS: 14240000=02617000=
I) IF P < NXTELBAT GO ON TO III). 14245000=02618000=
II) PROCESS ONE QUANTITY. 14250000=02619000=
A) SCAN. 14255000=02620000=
B) TEST FOR IDENTIFIER, NUMBER, OR SPECIAL CHARACTER. 14260000=02621000=
1) IDENTIFIER - LOOKUP IN DIRECTORY AND PROCESS 14265000=02622000=
IN SPECIAL MANNER IF COMMENT OR DEFINED ID. 14270000=02623000=
2) NUMBER - PROCESS INTEGER PART, FRACTIONAL PART, 14275000=02624000=
AND EXPONENT PART. 14280000=02625000=
3) TEST IF SPECIAL CHARACTER REQUIRES SPECIAL 14285000=02626000=
PROCESSING - OTHERWISE GET ELBAT WORD FROM 14290000=02627000=
SPECIAL. 14295000=02628000=
C) LOAD ELBAT AND INCREMENT NXTELBT. 14300000=02629000=
D) IF ELBAT IS FULL ADJUST ELBAT, NXTELBT, I, AND P. 14305000=02630000=
E) GO BACK TO I). 14310000=02631000=
III) RETURN WITH CLASS OF ELBAT[P]. 14315000=02632000=
FURTHER DETAILS ARE GIVEN IN BODY OF TABLE. 14320000=02633000=
; 14325000=02634000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14326000
INTEGER PROCEDURE TABLE(P); 14330000=02635000=
VALUE 14335000=02635000=
P; 14340000=02635000=
INTEGER 14345000=02635000=
P; 14350000=02635000=
BEGIN 14355000=02636000=
LABEL 14360000=02637000=
PERCENT, 14365000=02637000=
SPECIALCHAR, 14370000=02637000=
COMPLETE, 14375000=02637000=
COLON, 14380000=02637000=
DOT, 14385000=02637000=
ATSIGN, 14390000=02637000=
QUOTE, 14395000=02638000=
STRNGXT, 14400000=02638000=
MOVEIT, 14405000=02638000=
ARGH, 14410000=02638000=
FINISHNUMBER, 14415000=02639000=
SCANAGAIN, 14420000=02639000=
FPART, 14425000=02639000=
EPART, 14430000=02639000=
IPART, 14435000=02639000=
IDENT, 14440000=02639000=
ROSE, 14445000=02639000=
COMPOST, 14450000=02639000=
DOLLAR, 14455000=02639000=
RTPAREN, 14460000=02640000=
CROSSHATCH, 14465000=02640000=
NUMBEREND; 14470000=02640000=
SWITCH 14475000=02641000=
SPECIALSWITCH:= PERCENT, 14480000=02641000=
DOLLAR, 14485000=02641000=
DOT, 14490000=02641000=
ATSIGN, 14495000=02641000=
COLON, 14500000=02641000=
QUOTE, 14505000=02642000=
RTPAREN, 14510000=02642000=
CROSSHATCH; 14515000=02642000=
SWITCH 14520000=02643000=
RESULTSWITCH:= IDENT, 14525000=02643000=
SPECIALCHAR, 14530000=02643000=
IPART; 14535000=02643000=
WHILE P >= NXTELBT DO 14540000=02645000=
BEGIN 14545000=02645000=
SCANAGAIN: 14550000=02647000=
COUNT:= RESULT:= ACCUM[1]:= 0; 14555000=02647000=
SCANNER; 14560000=02647000=
GO RESULTSWITCH[RESULT]; 14565000=02648000=
ARGH: 14570000=02650000=
Q:= ACCUM[1]; 14575000=02650000=
FLAG(141); 14580000=02650000=
GO SCANAGAIN; 14585000=02650000=
SPECIALCHAR: 14590000=02652000=
GT1:= ACCUM[1].[29:6]-2; 14595000=02652000=
ENDTOG:= GT1 = 57 AND ENDTOG; % 57+2 = "%" 14600000=02653000=
COMMENT OBTAIN ACTUAL CHARACTER FROM ACCUM; 14610000=02654000=
T:= SPECIAL[GT1 & GT1[5:6:3]]; 14615000=02655000=
COMMENT NOTICE COMPRESSION TECHNIQUE USED TO SHORTEN TABLE OF 14625000=02656000=
ELBAT WORDS FOR SPECIAL CHARACTERS; 14630000=02657000=
IF GT1:= T.INCR = 0 THEN 14635000=02658000=
GO COMPLETE; 14640000=02658000=
GO SPECIALSWITCH[GT1]; 14645000=02659000=
COMMENT INCR FIELD OF SPECIAL CHARACTER IS NON-ZERO FOR SPECIAL 14655000=02660000=
CHARACTERS REQUIRING SPECIAL HANDLING. INCR IS SWITCHED 14660000=02661000=
ON TO OBTAIN DISCRIMINATION; 14665000=02662000=
COLON: 14670000=02663000=
RESULT:= 7; 14675000=02663000=
SCANNER; COMMENT ELIMINATE BLANKS - CHECKING 14680000=02663000=
FOR := IN PLACE OF ~ ; 14690000=02664000=
IF EXAMIN(SBUFF, NCR) = 6"=" THEN 14695000=02665000=
BEGIN 14700000=02666000=
RESULT:= 0; 14705000=02666000=
SCANNER; 14710000=02666000=
T:= SPECIAL[13] 14715000=02666000=
END; 14720000=02666000=
RESULT:= 2; 14725000=02667000=
GO COMPLETE; 14730000=02667000=
DOT: 14735000=02680000=
IF EXAMIN(SBUFF, NCR) > 9 OR ENDTOG THEN 14740000=02680000=
GO COMPLETE; 14745000=02680000=
NHI:= NLO:= 0; 14750000=02681000=
C:= 0; 14755000=02682000=
GO FPART; 14760000=02682000=
ATSIGN: 14765000=02684000=
RESULT:= 0; 14770000=02684000=
SCANNER; % SCAN PAST "@". 14775000=02684000=
IF COUNT > 17 THEN 14780000=02685000=
GO ARGH; % 16 CHARS, + "@". 14785000=02685000=
IF OCTIZE(ACCUM, 1, C, 17-COUNT, COUNT-1) THEN 14790000=02686000=
BEGIN 14795000=02686500=
Q:= ACCUM[1]; 14800000=02686500=
FLAG(521); 14805000=02686500=
GO SCANAGAIN 14810000=02686500=
END; 14815000=02686500=
GO NUMBEREND; 14820000=02687000=
14825000=02689000=
COMMENT DOT AND ATSIGN ENTER NUMBER CONVERSION AT CORRECT SPOT; 14830000=02689000=
QUOTE: 14835000=02691000=
COUNT:= 0; 14840000=02691000=
T:= 14845000=02692000=
IF STREAMTOG THEN 14850000=02692000=
63 14855000=02692500=
ELSE 14860000=02692500=
IF REAL(STREAMTOG) > 1 THEN 14865000=02692500=
8 14870000=02692500=
ELSE 14875000=02692500=
7; 14880000=02692500=
DO BEGIN 14885000=02693000=
RESULT:= 5; 14890000=02694000=
SCANNER; 14895000=02694000=
IF COUNT > T THEN 14900000=02695000=
BEGIN 14905000=02696000=
Q:= ACCUM[1]; 14910000=02696000=
FLAG(520); 14915000=02696000=
GO SCANAGAIN 14920000=02696000=
END; 14925000=02696000=
END 14930000=02697000=
UNTIL EXAMIN(SBUFF, NCR) = 6"""; 14935000=02697000=
Q:= ACCUM[1]; 14940000=02698000=
RESULT:= 5; 14945000=02698000=
SCANNER; 14950000=02698000=
COUNT:= COUNT-1; 14955000=02698000=
IF COUNT < 0 THEN 14960000=02699000=
COUNT:= COUNT+64; 14965000=02699000=
ACCUM[1]:= Q; 14970000=02700000=
RESULT:= 4; 14975000=02700000=
STRNGXT: 14980000=02701000=
T:= C:= 0; 14985000=02701000=
IF COUNT < 8 THEN 14990000=02703000=
MOVEIT: 14995000=02705000=
BEGIN 14995500
EBCDICBUFF[0]:= C; 14996000
MOVECHARACTERS(COUNT, ACCUM, 1, 3, EBCDICBUFF, 0, 8-COUNT); 15000000=02705000=
C:= EBCDICBUFF[0]; 15002000
END; 15004000
T.CLASS:= STRNGCON; 15005000=02705100=
GO COMPLETE; 15010000=02705200=
15015000=02707000=
COMMENT CROSSHATCH HANDLES TWO SITUATIONS: 15020000=02707000=
THE CROSSHATCH AT END OF DEFINE DECLARATIONS AND 15025000=02708000=
THE CROSSHATCH AT END OF ALPHA REPRESENTING DEFINED IDS. 15030000=02709000=
THE TWO CASES ARE PROCESSED DIFFERENTLY. THE FIRST CASE 15035000=02710000=
MERELY PLACES THE CROSSHATCH IN ELBAT. THE SECOND CASE 15040000=02711000=
CAUSES AN EXIT FROM SCANNING THE ALPHA FOR THE DEFINED ID. 15045000=02712000=
FOR A FULL DISCUSSION SEE DEFINEGEN; 15050000=02713000=
CROSSHATCH: 15055000=02715000=
IF DEFINECTR ^= 0 THEN 15060000=02715000=
GO COMPLETE; 15065000=02715000=
PUTSEQNO(EBCDICBUFF, 0, SBUFF, LCR); 15070000=02716000=
GT1:= EBCDICBUFF[0]; % COMPENSATE FOR SCALAR PARAM 15072000
TURNONSTOPLIGHT(0, SBUFF, LCR); 15075000=02717000=
IF DEFINEINDEX = 0 THEN 15080000=02718000=
GO ARGH; 15085000=02718000=
LCR:= (GT1:= DEFINEARRAY[DEFINEINDEX-1]) DIV 262144; 15090000=02719000=
NCR:= GT1 MOD 262144; 15095000=02720000=
GT2:= 0 & (T:= DEFINEARRAY[DEFINEINDEX:= DEFINEINDEX-3])[14:29:15]15100000=02721000=
; 15105000=02721000=
LASTUSED:= T.[14:15]; 15110000=02722000=
FOR GT1:= 1 STEP 1 UNTIL GT2 DO 15115000=02723000=
BEGIN 15120000=02723500=
STACKHEAD[(T:= TAKE(LASTINFO+1)).[35:36] MOD 125]:= 15125000=02725000=
TAKE(LASTINFO).LINK; 15130000=02725000=
LASTINFO:= (NEXTINFO:= LASTINFO)-T.PURPT; 15135000=02726000=
END; 15140000=02727000=
GO SCANAGAIN; 15145000=02728000=
DOLLAR: 15150000=02729000=
COMMENT THIS CODE HANDLES CONTROL CARDS; 15155000=02729000=
15160000=02730000=
DOLLARCARD; 15165000=02730000=
PERCENT: 15170000=02731000=
IF NCR ^= FCR THEN 15175000=02731000=
READACARD; 15180000=02731000=
GO SCANAGAIN; 15185000=02737000=
15190000=02738000=
COMMENT MOST PERCENT SIGNS ACTING AS END OF CARD SENTINELS GET TO 15195000=02738000=
PERCENT. PERCENT READS THE NEXT CARD AND STARTS OVER. A 15200000=02739000=
SIDE EFFECT IS THAT ALL CHARACTERS ON A CARD ARE IGNORED 15205000=02740000=
AFTER A FREE PERCENT SIGN (ONE NOT IMBEDDED IN A STRING OR 15210000=02741000=
COMMENT); 15215000=02742000=
15220000=02743000=
COMMENT MIGHT BE FUNNY COMMA - HANDLE HERE; 15225000=02743000=
RTPAREN: 15230000=02744000=
RESULT:= 7; 15235000=02744000=
SCANNER; 15240000=02744000=
IF EXAMIN(SBUFF, NCR) = 6""" THEN 15245000=02745000=
BEGIN 15250000=02746000=
RESULT:= 0; 15255000=02747000=
SCANNER; 15260000=02747000=
DO BEGIN 15265000=02748000=
RESULT:= 5; 15270000=02749000=
SCANNER 15275000=02750000=
END 15280000=02750000=
UNTIL EXAMIN(SBUFF, NCR) = 6"""; 15285000=02750000=
RESULT:= 0; 15290000=02751000=
SCANNER; 15295000=02751000=
RESULT:= 7; 15300000=02752000=
SCANNER; 15305000=02752000=
IF EXAMIN(SBUFF, NCR) ^= 6"(" THEN 15310000=02753000=
GO ARGH; 15315000=02753000=
RESULT:= 0; 15320000=02754000=
SCANNER; 15325000=02754000=
Q:= ACCUM[1]; 15330000=02754000=
T:= SPECIAL[24] 15335000=02756000=
END; 15340000=02756000=
RESULT:= 2; 15345000=02757000=
GO COMPLETE; 15350000=02757000=
IPART: 15355000=02758000=
TCOUNT:= 0; 15360000=02758000=
C:= CONVERT; 15365000=02758000=
% RESULT:=7; SCANNER; % DEBLANK. 15370000=02759000=
% IF DEFINECTR=0 THEN 15375000=02760000=
% IF (C=3 OR C=4) AND EXAMIN(NCR)=""" THEN %OCTAL OR HEX STRING.15380000=02761000=
% BEGIN INTEGER SIZ; 15385000=02762000=
% RESULT:=5; SCANNER; % SKIP QUOTE. 15390000=02763000=
% COUNT:=0; 15395000=02764000=
% DO BEGIN 15400000=02765000=
% RESULT:=5; SCANNER; 15405000=02766000=
% IF COUNT > SIZ:=48 DIV C THEN % > 1 WORD LONG. 15410000=02767000=
% BEGIN ERR(520); GO SCANAGAIN END; 15415000=02768000=
% END UNTIL EXAMIN(NCR)="""; 15420000=02769000=
% Q:=ACCUM[1]; RESULT:=5; SCANNER; COUNT:=COUNT-1; 15425000=02770000=
% IF C=3 THEN % OCTAL STRING. 15430000=02771000=
% IF OCTIZE(ACCUM[1],ACCUM[4],16-COUNT,COUNT) THEN 15435000=02772000=
% FLAG(521) % NON OCTAL CHARACTER IN STRING. 15440000=02773000=
% ELSE ELSE IF HEXIZE(ACCUM[1],ACCUM[4],12-COUNT,COUNT) THEN 15445000=02774000=
% FLAG(521); % NON CHARACTER IN HEX STRING. 15450000=02775000=
% IF COUNT < SIZ THEN 15455000=02776000=
% BEGIN 15460000=02777000=
% C:=ACCUM[4]; GO FINISHNUMBER; 15465000=02778000=
% END; 15470000=02779000=
% T.INCR:=COUNT:=8; T.CLASS:=STRING; 15475000=02780000=
% MOVECHARACTERS(8,ACCUM[4],0,ACCUM[1],3); 15480000=02781000=
% GO COMPLETE; 15485000=02782000=
% END OCTAL OR HEX STRING; 15490000=02783000=
IF DPTOG THEN 15495000=02784000=
BEGIN 15500000=02785000=
NHI:= THI; 15505000=02785000=
NLO:= TLO; 15510000=02785000=
END; 15515000=02785000=
IF EXAMIN(SBUFF, NCR) = 6"." THEN 15520000=02786000=
BEGIN 15525000=02787000=
RESULT:= 0; 15530000=02788000=
SCANNER; 15535000=02788000=
C:= 1.0*C; 15540000=02789000=
FPART: 15545000=02790000=
TCOUNT:= COUNT; 15550000=02790000=
IF EXAMIN(SBUFF, NCR) <= 9 THEN 15555000=02791000=
BEGIN 15560000=02792000=
RESULT:= 0; 15565000=02793000=
SCANNER; 15570000=02793000=
IF DPTOG THEN 15575000=02794000=
BEGIN 15580000=02795000=
THI:= FIRSTWORD( 15585000=02797000=
DOUBLE(CONVERT, TLO)/TEN[(COUNT-TCOUNT) MOD 12], TLO); 15590000=02797000=
FOR T:= 12 STEP 12 UNTIL COUNT-TCOUNT DO 15595000=02798000=
THI:= FIRSTWORD(DOUBLE(THI, TLO)/TEN[12], TLO); 15600000=02799000=
NHI:= FIRSTWORD(DOUBLE(THI, TLO) + DOUBLE(NHI, NLO), NLO); 15605000=02800000=
C:= NHI 15610000=02802000=
END 15615000=02803000=
ELSE 15620000=02803000=
C:= TEN[TCOUNT-COUNT]*CONVERT+C; 15625000=02803000=
END 15630000=02805000=
END; 15635000=02805000=
RESULT:= 7; 15640000=02806000=
SCANNER; 15645000=02806000=
IF EXAMIN(SBUFF, NCR) = 6"@" THEN 15650000=02807000=
BEGIN 15655000=02808000=
RESULT:= 0; 15660000=02809000=
SCANNER; 15665000=02809000=
EPART: 15670000=02810000=
TCOUNT:= COUNT; 15675000=02810000=
C:= C*1.0; 15680000=02811000=
RESULT:= 7; 15685000=02812000=
SCANNER; 15690000=02812000=
IF T:= EXAMIN(SBUFF, NCR) > 9 THEN 15695000=02813000=
BEGIN 15700000=02815000=
RESULT:= 0; 15705000=02816000=
SCANNER; 15710000=02816000=
TCOUNT:= COUNT; 15715000=02817000=
END; 15720000=02818000=
RESULT:= 0; 15725000=02820000=
SCANNER; 15730000=02820000=
Q:= ACCUM[1]; 15735000=02822000=
IF GT1:= T:= (IF T = 6"-" THEN-CONVERT ELSE CONVERT) < -46 OR T 15740000=02824000=
> 69 15745000=02824000=
THEN 15750000=02824000=
FLAG(269) 15755000=02825000=
ELSE 15760000=02825000=
BEGIN 15765000=02825000=
T:= TEN[T]; 15770000=02826000=
IF ABS(0 & C[5:44:6] & C[46:45:1]+0 & T[5:44:6] 15775000=02828000=
& T[46:45:1]+12) > 63 15780000=02828000=
THEN 15785000=02828000=
FLAG(269) 15790000=02829000=
ELSE 15795000=02829000=
IF DPTOG THEN 15800000=02829000=
IF GT1 < 0 THEN 15805000=02830000=
BEGIN 15810000=02831000=
GT1:= -GT1; 15815000=02832000=
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)/TEN[GT1 MOD 12], NLO); 15820000=02833000=
FOR GT2:= 12 STEP 12 UNTIL GT1 DO 15830000=02834000=
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)/TEN[12], NLO); 15835000=02835000=
END 15840000=02837000=
ELSE 15845000=02837000=
BEGIN 15850000=02837000=
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)*TEN[GT1 MOD 12], NLO); 15855000=02838000=
FOR GT2:= 12 STEP 12 UNTIL GT1 DO 15865000=02839000=
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)*TEN[12], NLO); 15870000=02840000=
END 15875000=02842000=
ELSE 15880000=02842000=
C:= C*T; 15885000=02842000=
END; 15890000=02843000=
END; 15895000=02844000=
NUMBEREND: 15900000=02846000=
Q:= ACCUM[1]; 15905000=02846000=
RESULT:= 3; 15910000=02846000=
FINISHNUMBER: 15915000=02848000=
T:= 0; 15920000=02848000=
IF C.[46:37] = 0 THEN 15925000=02849000=
BEGIN 15930000=02850000=
T.CLASS:= LITNO; 15935000=02850000=
T.ADDRESS:= C 15940000=02850000=
END 15945000=02851000=
ELSE 15950000=02851000=
T.CLASS:= NONLITNO; 15955000=02851000=
GO COMPLETE; 15960000=02852000=
15965000=02853000=
COMMENT THE CODE BETWEEN IDENT AND COMPOST DOES A LOOKUP IN INFO. 15970000=02853000=
IF QUANTITY IS NOT FOUND THE ELBAT WORD EXPECTS TO BE 15975000=02854000=
ZERO. THE SCRAMBLE FOR APPROPRIATE STACK IS FIRST THING 15980000=02855000=
TO BE DONE. THEN THE LOOP BETWEEN COMPOST AND 15985000=02859000=
ROSE IS ENTERED. THE LAST THING DONE FOR ANY 15990000=02860000=
IDENTIFIER WHICH IS FOUND IS TO STUFF THE LOCATION 15995000=02861000=
OF THE ELBATWORD IN INFO INTO THE LINK FIELD. THIS 16000000=02862000=
ALLOWS REFERENCE BACK TO INFO FOR ADDITIONAL DATA, 16005000=02863000=
SHOULD THIS BE REQUIRED. ; 16010000=02864000=
IDENT: 16015000=02865000=
T:= STACKHEAD[SCRAM:= (Q:= ACCUM[1]) MOD 125]; 16020000=02865000=
ROSE: 16025000=02875000=
GT1:= T.LINKR; 16030000=02875000=
IF (GT2:= T.LINKC)+GT1 = 0 THEN 16035000=02876000=
BEGIN 16040000=02877000=
T:= 0; 16045000=02877000=
GO COMPLETE 16050000=02877000=
END; 16055000=02877000=
IF T = INFO[GT1, GT2] THEN 16060000=02877010=
BEGIN 16065000=02877010=
T:= 0; 16070000=02877020=
GO TO COMPLETE 16075000=02877020=
END; 16080000=02877020=
T:= INFO[GT1, GT2]; 16085000=02878000=
IF INFO[GT1, GT2+1] & 0[46:46:11] ^= Q THEN 16090000=02879000=
GO ROSE; 16095000=02879000=
IF COUNT <= 5 THEN 16100000=02880000=
GO COMPOST; 16105000=02880000=
IF NOT EQUAL(COUNT-5, ACCUM, 2, INFO[GT1,*], GT2+2) THEN 16110000=02881000=
GO ROSE; 16115000=02881000=
COMPOST: 16120000=02882000=
T:= T & GT1[12:4:5] & GT2[7:7:8]; 16125000=02882000=
16130000=02883000=
COMMENT CHECK HERE FOR COMMENTS AND DEFINED IDS; 16135000=02883000=
IF NOT ENDTOG THEN 16140000=02884000=
BEGIN 16145000=02885000=
IF GT1:= T.CLASS = COMMENTV THEN 16150000=02886000=
BEGIN 16155000=02887000=
WHILE EXAMIN(SBUFF, NCR) ^= 6";" DO 16160000=02888000=
BEGIN 16165000=02889000=
RESULT:= 6; 16170000=02889000=
COUNT:= 0; 16175000=02889000=
SCANNER 16180000=02889000=
END; 16185000=02889000=
RESULT:= 0; 16190000=02890000=
SCANNER; 16195000=02890000=
GO SCANAGAIN 16200000=02891000=
END 16205000=02892000=
END; 16210000=02892000=
IF STOPDEFINE THEN 16215000=02893000=
GO COMPLETE; 16220000=02893000=
IF GT1 ^= DEFINEDID THEN 16225000=02894000=
GO COMPLETE; 16230000=02894000=
16235000=02895000=
COMMENT SETUP FOR DEFINED IDS - SEE DEFINEGEN FOR MORE DETAILS; 16240000=02895000=
IF T.ADDRESS ^= 0 THEN 16245000=02896000=
T:= FIXDEFINEINFO(T); 16250000=02896000=
IF DEFINEINDEX = 24 THEN 16255000=02898000=
BEGIN 16260000=02899000=
FLAG(139); 16265000=02899000=
GO ARGH 16270000=02899000=
END; 16275000=02899000=
DEFINEARRAY[DEFINEINDEX]:= LASTUSED & T.ADDRESS[29:14:15]; 16280000=02900000=
LASTUSED:= GIT(T); 16285000=02901000=
DEFINEARRAY[DEFINEINDEX+2]:= 262144*LCR+NCR; 16290000=02902000=
LCR:= (NCR:= DEFINEINDEX+1)+1; 16295000=02903000=
SBUFF:= DEFINEARRAY; % SWITCH SOURCE TO DEFINEARRAY 16296000
PUTSEQNO(EBCDICBUFF, 0, SBUFF, LCR); 16300000=02904000=
GT4:= EBCDICBUFF[0]; % COMPENSATE FOR SCALAR PARAM 16302000
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 16305000=02905000=
DEFINEINDEX:= DEFINEINDEX+3; 16310000=02905000=
GO PERCENT; 16315000=02906000=
COMPLETE: 16320000=02910000=
ELBAT[NXTELBT]:= T; 16325000=02910000=
STOPDEFINE:= FALSE; COMMENT ALLOW DEFINES AGAIN; 16330000=02911000=
IF NXTELBT:= NXTELBT+1 > 74 THEN 16340000=02912000=
IF NOT MACROID THEN 16345000=02913000=
BEGIN 16350000=02914000=
16355000=02915000=
COMMENT ELBAT IS FULL: ADJUST IT; 16360000=02915000=
MOVE(10, ELBAT, 65, ELBAT, 0); 16365000=02916000=
I:= I-65; 16370000=02917000=
P:= P-65; 16375000=02917000=
NXTELBT:= 10; 16380000=02917000=
END 16385000=02919000=
END; 16390000=02919000=
IF TABLE:= ELBAT[P].CLASS = COMMENTV THEN 16395000=02920000=
BEGIN 16400000=02921000=
16405000=02922000=
COMMENT SPECIAL HANDLING OF CONSTANTS FOR SAKE OF FOR STATEMENTS; 16410000=02922000=
C:= INFO[0, ELBAT[P].ADDRESS]; 16415000=02923000=
ELBAT[P].CLASS:= TABLE:= NONLITNO 16420000=02925000=
END; 16425000=02925000=
STOPDEFINE:= FALSE; COMMENT ALLOW DEFINE; 16430000=02926000=
END TABLE; 16440000=02927000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16445000=02927000=
BOOLEAN PROCEDURE BOOLPRIM; 16450000=02955000=
FORWARD; 16455000=02955000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16460000=02955000=
PROCEDURE BOOLCOMP(B); 16465000=02955500=
BOOLEAN 16470000=02955500=
B; 16475000=02955500=
FORWARD; 16480000=02955500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16485000=02955500=
INTEGER PROCEDURE NEXT; 16490000=02956000=
BEGIN 16495000=02956500=
LABEL 16500000=02957000=
EXIT; 16505000=02957000=
INTEGER 16510000=02957500=
T; 16515000=02957500=
DEFINE 16520000=02958000=
ERROR = BEGIN 16525000=02958000=
FLAG(603); 16530000=02958000=
GO EXIT 16535000=02958000=
END #; 16540000=02958000=
SKAN; 16545000=02958500=
IF RESULT = 3 THEN 16550000=02959000=
ERROR; % NUMBERS NOT ALLOWED. 16555000=02959000=
IF RESULT = 2 THEN % SPECIAL CHARACTER. 16560000=02959500=
BEGIN 16565000=02960000=
T:= 16570000=02960500=
IF Q = 6"1,0000" OR Q = 6"1%0000" THEN 16575000=02960500=
20 % FAKE OUT BOOLEXP.16580000=02960500=
ELSE 16585000=02961000=
((T:= Q.[29:6]-2) & T[5:6:3]); 16590000=02961000=
IF T = 11 OR T = 19 OR T = 20 THEN 16595000=02961500=
BATMAN:= SPECIAL[T] % (,),OR ;16600000=02961500=
ELSE 16605000=02962000=
FLAG(603); 16610000=02962000=
GO EXIT 16615000=02963000=
END SPECIAL CHARACTERS; 16620000=02963000=
16625000=02963500=
COMMENT LOOK FOR BOOLEAN OPERATORS, THEN OPTIONS; 16630000=02963500=
T:= 16635000=02964000=
IF Q = 6"3NOT00" THEN 16640000=02964000=
NOTOP 16645000=02964500=
ELSE 16650000=02964500=
IF Q = 6"3AND00" THEN 16655000=02964500=
ANDOP 16660000=02965000=
ELSE 16665000=02965000=
IF Q = 6"2OR000" THEN 16670000=02965000=
OROP 16675000=02965500=
ELSE 16680000=02965500=
IF Q = 6"3EQV00" THEN 16685000=02965500=
EQVOP 16690000=02966000=
ELSE 16695000=02966000=
0; 16700000=02966000=
IF T ^= 0 THEN 16705000=02966500=
BATMAN.CLASS:= T 16710000=02967000=
ELSE 16715000=02967000=
BATMAN:= 1 & BOOID[45:7] & REAL(FINDOPTION(1))[46:1]; % OPTION. 16720000=02967000=
EXIT: 16725000=02968000=
NEXT:= MYCLASS:= BATMAN.CLASS; 16730000=02968000=
END NEXT; 16735000=02968500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16740000=02968500=
BOOLEAN PROCEDURE BOOLEXP; 16745000=02969000=
BEGIN 16750000=02969500=
BOOLEAN 16755000=02970000=
B; 16760000=02970000=
B:= BOOLPRIM; 16765000=02970500=
WHILE MYCLASS >= EQVOP AND MYCLASS <= ANDOP DO 16770000=02971000=
BOOLCOMP(B); 16775000=02971000=
BOOLEXP:= B 16780000=02972000=
END BOOLEXP; 16785000=02972000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16790000=02972000=
BOOLEAN PROCEDURE BOOLPRIM; 16795000=02972500=
BEGIN 16800000=02973000=
BOOLEAN 16805000=02973500=
B, 16810000=02973500=
KNOT; 16815000=02973500=
DEFINE 16820000=02974000=
SKIPIT = MYCLASS:= NEXT #; 16825000=02974000=
IF KNOT:= (NEXT = NOTOP) THEN 16830000=02974500=
SKIPIT; 16835000=02974500=
IF MYCLASS = LEFTPAREN THEN 16840000=02975000=
BEGIN 16845000=02975500=
B:= BOOLEXP; 16850000=02976000=
IF MYCLASS ^= RTPAREN THEN 16855000=02976500=
FLAG(604); 16860000=02976500=
END 16865000=02977500=
ELSE 16870000=02977500=
IF MYCLASS ^= BOOID THEN 16875000=02977500=
FLAG(601) 16880000=02978000=
ELSE 16885000=02978000=
B:= BATMAN < 0; 16890000=02978000=
IF KNOT THEN 16895000=02978500=
B:= NOT B; 16900000=02978500=
SKIPIT; 16905000=02978500=
BOOLPRIM:= B 16910000=02979500=
END BOOLPRIM; 16915000=02979500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16920000=02979500=
PROCEDURE BOOLCOMP(B); 16925000=02980000=
BOOLEAN 16930000=02980000=
B; 16935000=02980000=
BEGIN 16940000=02980500=
REAL 16945000=02981000=
OPCLASS; 16950000=02981000=
BOOLEAN 16955000=02981500=
T; 16960000=02981500=
OPCLASS:= MYCLASS; 16965000=02982000=
T:= BOOLPRIM; 16970000=02982500=
WHILE OPCLASS < MYCLASS DO 16975000=02983000=
BOOLCOMP(T); 16980000=02983000=
B:= 16985000=02983500=
IF OPCLASS = ANDOP THEN 16990000=02983500=
(B AND T) 16995000=02984000=
ELSE 17000000=02984000=
IF OPCLASS = OROP THEN 17005000=02984000=
(B OR T) 17010000=02984500=
ELSE 17015000=02984500=
(B EQV T); 17020000=02984500=
END BOOLCOMP; 17025000=02985000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17030000=02985000=
% 17035000=02985500=
17040000=02986000=
COMMENT#################################################################17045000=02986000=
FORWARD DECLARATIONS 17050000=02986500=
#######################################################################;17055000=02987000=
% 17060000=02987500=
PROCEDURE AEXP; 17065000=03001000=
FORWARD; 17070000=03001000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17075000=03001000=
PROCEDURE ARITHSEC; 17080000=03002000=
FORWARD; 17085000=03002000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17090000=03002000=
PROCEDURE SIMPARITH; 17095000=03003000=
FORWARD; 17100000=03003000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17105000=03003000=
PROCEDURE ARITHCOMP; 17110000=03004000=
FORWARD; 17115000=03004000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17120000=03004000=
PROCEDURE PRIMARY; 17125000=03005000=
FORWARD; 17130000=03005000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17135000=03005000=
DEFINE 17140000=03006000=
BEXP = AEXP #; 17145000=03006000=
INTEGER PROCEDURE EXPRSS; 17150000=03007000=
FORWARD; 17155000=03007000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17160000=03007000=
PROCEDURE POLISHER(EXPECT); 17165000=03009000=
VALUE 17170000=03009000=
EXPECT; 17175000=03009000=
REAL 17180000=03009000=
EXPECT; 17185000=03009000=
FORWARD; 17190000=03009000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17195000=03009000=
PROCEDURE INLINE; 17200000=03010000=
FORWARD; 17205000=03010000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17210000=03010000=
PROCEDURE SUBHAND(FROM); 17215000=03011000=
VALUE 17220000=03011000=
FROM; 17225000=03011000=
BOOLEAN 17230000=03011000=
FROM; 17235000=03011000=
FORWARD; 17240000=03011000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17245000=03011000=
PROCEDURE IOSTMT; 17250000=03012000=
FORWARD; 17255000=03012000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17260000=03012000=
INTEGER PROCEDURE IFEXP; 17265000=03013000=
FORWARD; 17270000=03013000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17275000=03013000=
PROCEDURE PARSE; 17280000=03014000=
FORWARD; 17285000=03014000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17290000=03014000=
PROCEDURE DOT; 17295000=03015000=
FORWARD; 17300000=03015000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17305000=03015000=
PROCEDURE IFCLAUSE; 17310000=03018000=
FORWARD; 17315000=03018000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17320000=03018000=
INTEGER PROCEDURE GET(SYLLABLE); 17325000=03019000=
VALUE 17330000=03019000=
SYLLABLE; 17335000=03019000=
REAL 17340000=03019000=
SYLLABLE; 17345000=03019000=
FORWARD; 17350000=03019000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17355000=03019000=
INTEGER PROCEDURE GNAT(L); 17360000=03020000=
VALUE 17365000=03020000=
L; 17370000=03020000=
REAL 17375000=03020000=
L; 17380000=03020000=
FORWARD; 17385000=03020000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17390000=03020000=
PROCEDURE PANA; 17395000=03021000=
FORWARD; 17400000=03021000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17405000=03021000=
PROCEDURE IFSTMT; 17410000=03022000=
FORWARD; 17415000=03022000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17420000=03022000=
PROCEDURE GOGEN(LABELBAT, BRANCHTYPE); 17425000=03023000=
VALUE 17430000=03024000=
LABELBAT, 17435000=03024000=
BRANCHTYPE; 17440000=03024000=
REAL 17445000=03025000=
LABELBAT, 17450000=03025000=
BRANCHTYPE; 17455000=03025000=
FORWARD; 17460000=03025000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17465000=03025000=
BOOLEAN PROCEDURE SIMPGO; 17470000=03026000=
FORWARD; 17475000=03026000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17480000=03026000=
PROCEDURE STMT; 17485000=03027000=
FORWARD; 17490000=03027000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17495000=03027000=
PROCEDURE EMIT(SYLLABLE); 17500000=03028000=
VALUE 17505000=03028000=
SYLLABLE; 17510000=03028000=
REAL 17515000=03028000=
SYLLABLE; 17520000=03028000=
FORWARD; 17525000=03028000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17530000=03028000=
PROCEDURE PROCSTMT(FROM); 17535000=03029000=
VALUE 17540000=03029000=
FROM; 17545000=03029000=
BOOLEAN 17550000=03029000=
FROM; 17555000=03029000=
FORWARD; 17560000=03029000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17565000=03029000=
PROCEDURE STRMPROCSTMT; 17570000=03030000=
FORWARD; 17575000=03030000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17580000=03030000=
PROCEDURE CONSTANTCLEAN; 17585000=03034000=
FORWARD; 17590000=03034000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17595000=03034000=
PROCEDURE SCATTERELBAT; 17600000=03035000=
FORWARD; 17605000=03035000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17610000=03035000=
PROCEDURE EMITB(BRANCH, FROM, TOWARDS); 17615000=03036000=
VALUE 17620000=03036000=
BRANCH, 17625000=03036000=
FROM, 17630000=03036000=
TOWARDS; 17635000=03036000=
REAL 17640000=03037000=
BRANCH, 17645000=03037000=
FROM, 17650000=03037000=
TOWARDS; 17655000=03037000=
FORWARD; 17660000=03037000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17665000=03037000=
PROCEDURE VARIABLE(FROM); 17670000=03038000=
INTEGER 17675000=03038000=
FROM; 17680000=03038000=
FORWARD; 17685000=03038000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17690000=03038000=
PROCEDURE IMPFUN; 17695000=03039000=
FORWARD; 17700000=03039000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17705000=03039000=
PROCEDURE RIGHT(L); 17710000=03039500=
VALUE 17715000=03039500=
L; 17720000=03039500=
INTEGER 17725000=03039500=
L; 17730000=03039500=
FORWARD; 17735000=03039500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17740000=03039500=
PROCEDURE STREAMSTMT; 17745000=03040000=
FORWARD; 17750000=03040000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17755000=03040000=
PROCEDURE SEGMENTSTART(B); 17760000=03041000=
VALUE 17765000=03041000=
B; 17770000=03041000=
BOOLEAN 17775000=03041000=
B; 17780000=03041000=
FORWARD; 17785000=03041000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17790000=03041000=
PROCEDURE SEGMENT(SIZE, FR); 17795000=03042000=
VALUE 17800000=03042000=
SIZE, 17805000=03042000=
FR; 17810000=03042000=
INTEGER 17815000=03042000=
SIZE, 17820000=03042000=
FR; 17825000=03042000=
FORWARD; 17830000=03042000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17835000=03042000=
INTEGER PROCEDURE BAE; 17840000=03046000=
FORWARD; 17845000=03046000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17850000=03046000=
PROCEDURE PROGDESCBLDR(A, B, C, D); 17855000=03047000=
VALUE 17860000=03047000=
A, 17865000=03047000=
B, 17870000=03047000=
C, 17875000=03047000=
D; 17880000=03047000=
INTEGER 17885000=03047100=
A, 17890000=03047100=
C, 17895000=03047100=
D; 17900000=03047100=
BOOLEAN 17905000=03047100=
B; 17910000=03047100=
FORWARD; 17915000=03047100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17920000=03047100=
PROCEDURE BANA; 17925000=03048000=
FORWARD; 17930000=03048000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17935000=03048000=
PROCEDURE EMITNUM(A); 17940000=03049000=
VALUE 17945000=03049000=
A; 17950000=03049000=
REAL 17955000=03049000=
A; 17960000=03049000=
FORWARD; 17965000=03049000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17970000=03049000=
PROCEDURE EMITD(A, B, T); 17975000=03050000=
VALUE 17980000=03050000=
A, 17985000=03050000=
B, 17990000=03050000=
T; 17995000=03050000=
INTEGER 18000000=03050000=
A, 18005000=03050000=
B, 18010000=03050000=
T; 18015000=03050000=
FORWARD; 18020000=03050000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18025000=03050000=
INTEGER PROCEDURE GETSPACE(S, L); 18030000=03051000=
VALUE 18035000=03051000=
S, 18040000=03051000=
L; 18045000=03051000=
INTEGER 18050000=03051001=
L; 18055000=03051001=
BOOLEAN 18060000=03051001=
S; 18065000=03051001=
FORWARD; 18070000=03051001=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18075000=03051001=
PROCEDURE FORSTMT; 18080000=03052000=
FORWARD; 18085000=03052000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18090000=03052000=
REAL PROCEDURE TAKE(INDEX); 18095000=03053000=
VALUE 18100000=03053000=
INDEX; 18105000=03053000=
INTEGER 18110000=03053000=
INDEX; 18115000=03053000=
FORWARD; 18120000=03053000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18125000=03053000=
PROCEDURE E; 18130000=03054000=
FORWARD; 18135000=03054000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18140000=03054000=
PROCEDURE ENTRY(TYPE); 18145000=03055000=
VALUE 18150000=03055000=
TYPE; 18155000=03055000=
REAL 18160000=03055000=
TYPE; 18165000=03055000=
FORWARD; 18170000=03055000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18175000=03055000=
PROCEDURE PUTNBUMP(P1); 18180000=03057000=
VALUE 18185000=03057000=
P1; 18190000=03057000=
REAL 18195000=03057000=
P1; 18200000=03057000=
FORWARD; 18205000=03057000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18210000=03057000=
PROCEDURE JUMPCHKNX; 18215000=03058000=
FORWARD; 18220000=03058000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18225000=03058000=
PROCEDURE JUMPCHKX; 18230000=03059000=
FORWARD; 18235000=03059000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18240000=03059000=
PROCEDURE DBLSTMT; 18245000=03060000=
FORWARD; 18250000=03060000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18255000=03060000=
PROCEDURE BLOCK(S); 18260000=03067000=
VALUE 18265000=03067000=
S; 18270000=03067000=
BOOLEAN 18275000=03067000=
S; 18280000=03067000=
FORWARD; 18285000=03067000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18290000=03067000=
PROCEDURE PURGE(STOPPER); 18295000=03068000=
VALUE 18300000=03068000=
STOPPER; 18305000=03068000=
REAL 18310000=03068000=
STOPPER; 18315000=03068000=
FORWARD; 18320000=03068000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18325000=03068000=
PROCEDURE ENTER(TYPEV); 18330000=03069000=
VALUE 18335000=03070000=
TYPEV; 18340000=03070000=
REAL 18345000=03071000=
TYPEV; 18350000=03071000=
FORWARD; 18355000=03071000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18360000=03071000=
18365000=04000000=
COMMENT THIS SECTION CONTAINS THE EMITTERS. THEY ARE THE AGENTS WHICH 18370000=04000000=
ACTUALLY PRODUCE CODE AND DEBUGING OUTPUT; 18375000=04001000=
18380000=04002000=
COMMENT EMITL EMITS A LIT CALL; 18385000=04002000=
PROCEDURE EMITL(LITERAL); 18390000=04003000=
VALUE 18395000=04003000=
LITERAL; 18400000=04003000=
REAL 18405000=04003000=
LITERAL; 18410000=04003000=
EMIT(0 & LITERAL[11:9:10]); 18415000=04004000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18420000=04004000=
18425000=04005000=
COMMENT EMITO EMIT AN OPERATOR; 18430000=04005000=
PROCEDURE EMITO(OPERATOR); 18435000=04006000=
VALUE 18440000=04006000=
OPERATOR; 18445000=04006000=
REAL 18450000=04006000=
OPERATOR; 18455000=04006000=
EMIT(1 & OPERATOR[11:9:10]); 18460000=04007000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18465000=04007000=
18470000=04008000=
COMMENT EMITC IS PRIMARILY FOR USE BY STRMSTMT TO EMIT CHARACTOR MODE 18475000=04008000=
OPERATORS. HOWEVER IT ALSO HANDLES DIA, DIB, AND TRB; 18480000=04009000=
PROCEDURE EMITC(REPEAT, OPERATOR); 18485000=04010000=
VALUE 18490000=04010000=
REPEAT, 18495000=04010000=
OPERATOR; 18500000=04010000=
REAL 18505000=04011000=
REPEAT, 18510000=04011000=
OPERATOR; 18515000=04011000=
BEGIN 18520000=04012000=
IF REPEAT >= 64 THEN 18525000=04013000=
FLAG(268); 18530000=04013000=
EMIT(OPERATOR & REPEAT[11:5:6]) 18535000=04014000=
END EMITC; 18540000=04014000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18545000=04014000=
18550000=04015000=
COMMENT EMITV EMITS AN OPERAND CALL. IF THE ADDRESS IS FOR THE SECOND 18555000=04015000=
HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 18560000=04016000=
PROCEDURE EMITV(ADDRESS); 18565000=04017000=
VALUE 18570000=04017000=
ADDRESS; 18575000=04017000=
REAL 18580000=04017000=
ADDRESS; 18585000=04017000=
BEGIN 18590000=04018000=
IF ADDRESS > 1023 THEN 18595000=04018000=
EMITO(PRTE); 18600000=04018000=
EMIT(2 & ADDRESS[11:9:10]) 18605000=04019000=
END EMITV; 18610000=04019000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18615000=04019000=
18620000=04020000=
COMMENT EMITN EMITS A DESCRIPTOR CALL. IF THE ADDRESS IS FOR THE 18625000=04020000=
SECOND HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 18630000=04021000=
PROCEDURE EMITN(ADDRESS); 18635000=04022000=
VALUE 18640000=04022000=
ADDRESS; 18645000=04022000=
REAL 18650000=04022000=
ADDRESS; 18655000=04022000=
BEGIN 18660000=04023000=
IF ADDRESS > 1023 THEN 18665000=04023000=
EMITO(PRTE); 18670000=04023000=
EMIT(3 & ADDRESS[11:9:10]) 18675000=04024000=
END EMITN; 18680000=04024000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18685000=04024000=
18690000=04025000=
COMMENT EMITPAIR EMITS A LITC ADDRESS FOLLOWED BY OPERATOR. IF THE 18695000=04025000=
ADDRESS IS FOR THE SECOND HALF OF THE PRT, THEN IT ALSO 18700000=04026000=
EMITS PRTE; 18705000=04027000=
PROCEDURE EMITPAIR(ADDRESS, OPERATOR); 18710000=04028000=
VALUE 18715000=04029000=
ADDRESS, 18720000=04029000=
OPERATOR; 18725000=04029000=
REAL 18730000=04030000=
ADDRESS, 18735000=04030000=
OPERATOR; 18740000=04030000=
BEGIN 18745000=04031000=
EMITL(ADDRESS); 18750000=04032000=
IF ADDRESS > 1023 THEN 18755000=04033000=
EMITO(PRTE); 18760000=04033000=
EMITO(OPERATOR) 18765000=04034000=
END EMITPAIR; 18770000=04034000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18775000=04034000=
18780000=04080000=
COMMENT ADJUST ADJUST L TO THE BEGINING OF A WORD AND FILLS IN THE 18785000=04080000=
INERVENING SPACE WITH NOPS. IT CHECKS STREAMTOG TO DECIDE 18790000=04081000=
WHICH SORT OF NOP TO USE; 18795000=04082000=
PROCEDURE ADJUST; 18800000=04083000=
BEGIN 18805000=04084000=
WHILE L.[1:2] ^= 0 DO 18810000=04086000=
EMIT(45); 18815000=04086000=
END ADJUST; 18820000=04087000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18825000=04087000=
PROCEDURE EMITLNG; 18830000=04098000=
BEGIN 18835000=04099000=
LABEL 18840000=04099000=
E; 18845000=04099000=
IF NOT LINKTOG THEN 18850000=04100000=
GO TO E; 18855000=04100000=
COMMENT GO TO E IF LAST THING IS A LINK; 18860000=04101000=
IF GET(L) ^= 0 THEN 18865000=04102000=
GO TO E; 18870000=04102000=
COMMENT EITHER LAST EXPRESSION WAS CONDITIONAL OR THERE IS NO 18875000=04103000=
LNG OR RELATIONAL OPERATOR; 18880000=04104000=
IF GT1:= GET(L-1) = 77 THEN 18885000=04105000=
L:= L-1 18890000=04106000=
COMMENT LAST THING WAS AN LNG - SO CANCEL IT; 18895000=04106000=
ELSE 18900000=04107000=
IF GT1.[5:6] = 21 AND GT1.[10:2] = 0 THEN % AHA 18905000=04107000=
COMMENT LAST THING WAS A RELATIONAL; 18910000=04108000=
BEGIN 18915000=04109000=
L:= L-1; 18920000=04109000=
EMITO(REAL(BOOLEAN(GT1.[11:10]) EQV 18925000=04111000=
BOOLEAN(IF GT1.[7:2] = 0 THEN 511 ELSE 463))) 18930000=04111000=
COMMENT NEGATE THE RELATIONAL; 18935000=04111000=
END 18940000=04112000=
ELSE 18945000=04112000=
E: EMITO(LNG) 18950000=04112000=
END EMITLNG; 18955000=04112000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%18960000=04112000=
COMMENT EMITB EMITS A BRANCH OPERATOR AND ITS ASSOCIATED NUMBER; 18965000=04113000=
PROCEDURE EMITB(BRANCH, FROM, TOWARDS); 18970000=04114000=
VALUE 18975000=04115000=
BRANCH, 18980000=04115000=
FROM, 18985000=04115000=
TOWARDS; 18990000=04115000=
REAL 18995000=04116000=
BRANCH, 19000000=04116000=
FROM, 19005000=04116000=
TOWARDS; 19010000=04116000=
BEGIN 19015000=04117000=
INTEGER 19020000=04118000=
TL; 19025000=04118000=
TL:= L; 19030000=04119000=
IF TOWARDS > FOULED THEN 19035000=04119500=
FOULED:= TOWARDS; 19040000=04119500=
L:= FROM-2; 19045000=04120000=
GT1:= TOWARDS-FROM; 19050000=04120100=
IF TOWARDS.[1:2] = 0 THEN 19055000=04120300=
BEGIN 19060000=04120300=
BRANCH:= BRANCH & 1[8:0:1]; 19065000=04120400=
GT1:= TOWARDS DIV 4-(FROM-1) DIV 4 19070000=04120500=
END; 19075000=04120500=
EMITNUM(ABS(GT1)); 19080000=04121000=
EMITO(BRANCH & (REAL(GT1 >= 0)+1)[5:1:2]); 19085000=04122000=
L:= TL 19090000=04125000=
END EMITB; 19095000=04125000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19100000=04125000=
COMMENT DEBUGWORD FORMATS TWO FIELDS FOR DEBUGGING OUTPUT IN 19105000=04126000=
OCTAL, NAMELY : 19110000=04127000=
1. 4 CHARACTERS FOR THE L REGISTER. 19115000=04128000=
2.16 CHARACTERS FOR THE WORD BEING EMITTED. ; 19120000=04129000=
PROCEDURE DEBUGWORD(SEQ, CODE, FEIL); 19121000=04130000=
VALUE 19122000=04130000=
SEQ, CODE; 19124000=04130000=
REAL 19126000
SEQ, CODE; 19128000
ARRAY 19130000
FEIL[0]; 19132000
BEGIN 19145000=04131000=
STREAMLOCALS; 19146000
STREAMSETDI(FEIL, 0); 19148000=04132000=
STREAMSETLOCSI(SEQ); 19150000=04132000=
STREAMSKIPSI(+4); 19152000=04132000=
STREAMTRANSFERCHR(4); 19154000=04132000=
STREAMTRANSFERLIT(2, 6" "); 19156000=04133000=
STREAMSETLOCSI(CODE); 19158000=04134000=
THRU 16 DO 19180000=04136000=
BEGIN 19180200
STREAMSETDB(3, 0); 19180400
THRU 3 DO 19180600
BEGIN 19180800
IF STREAMTESTSB THEN 19181000
STREAMSETDB(1, 1) 19181200
ELSE 19181400
STREAMSETDB(1, 0); 19181600
19181800
STREAMSKIPSB(1); 19182000
END 19182200
END; 19182400
19182600
THRU 29 DO 19185000=04137000=
BEGIN 19186000
STREAMSMEARLIT(2, 6" ") 19187000
END; 19188000
END; 19190000=04138000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19192000
COMMENT EMITWORD PLACES THE PARAMETER,"WORD",INTO EDOC. IF 19195000=04139000=
DEBUGGING IS REQUIRED, "L" AND "WORD" ARE OUTPUT ON 19200000=04140000=
THE PRINTER FILE IN OCTAL FORMAT. ; 19205000=04141000=
PROCEDURE EMITWORD(WORD); 19210000=04142000=
VALUE 19215000=04142000=
WORD; 19220000=04142000=
REAL 19225000=04142000=
WORD; 19230000=04142000=
BEGIN 19235000=04143000=
ADJUST; 19240000=04144000=
IF L >= 4088 THEN 19245000=04145000=
BEGIN 19250000=04145000=
ERR(200); 19255000=04145000=
L:= 0; 19260000=04145000=
END 19265000=04146000=
ELSE 19270000=04146000=
BEGIN 19275000=04146000=
CODE[L DIV 4+1]:= WORD; 19280000=04147000=
IF DEBUGTOG THEN 19285000=04148000=
BEGIN 19290000=04149000=
DEBUGWORD(B2D(L), WORD, LIN); 19295000=04149000=
WRITELINE 19300000=04150000=
END; 19305000=04150000=
FOULED:= L:= L+4; 19310000=04151000=
END 19315000=04152000=
END EMITWORD; 19320000=04152000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19325000=04152000=
COMMENT CONSTANTCLEAN IS CALLED AFTER AN UNCONDITIONAL BRANCH HAS 19330000=04153000=
BEEN EMITTED. IF ANY CONSTANTS HAVE BEEN ACCUMULATED BY 19335000=04154000=
EMITNUM IN INFO[0,*], CONSTANTCLEAN WILL FIX THE CHAIN 19340000=04155000=
OF C-RELATIVE OPDC S LEFT BY EMITNUM. IF C-RELATIVE 19345000=04156000=
ADDRESSING IS IMPOSSIBLE (I.E. THE ADDRESS 19350000=04157000=
IF GREATER THAN 127 WORDS) THEN THE CONSTANT ALONG WITH 19355000=04158000=
THE 1ST LINK OF THE OPDC CHAIN IS ENTERED IN INFO. 19360000=04159000=
AT PURGE TIME THE REMAINING OPDC S ARE EMITTED WITH 19365000=04160000=
F -RELATIVE ADDRESSING AND CODE EMITTED TO STORE THE 19370000=04161000=
CONSTANTS INTO THE PROPER F-RELATIVE CELLS. ; 19375000=04162000=
PROCEDURE CONSTANTCLEAN; 19380000=04163000=
IF MRCLEAN THEN 19385000=04164000=
BEGIN 19390000=04165000=
INTEGER 19395000=04166000=
J, 19400000=04166000=
TEMPL, 19405000=04166000=
D, 19410000=04166000=
LINK; 19415000=04166000=
BOOLEAN 19420000=04167000=
CREL; 19425000=04167000=
LABEL 19430000=04168000=
ALLTHU; 19435000=04168000=
FOR J:= 1 STEP 2 UNTIL LASTENTRY DO 19440000=04170000=
BEGIN 19445000=04171000=
ADJUST; 19450000=04172000=
TEMPL:= L; 19455000=04172000=
L:= INFO[0, 255-J+1]; 19460000=04172000=
CREL:= FALSE; 19465000=04173000=
DO BEGIN 19470000=04174000=
IF D:= (TEMPL-L+3) DIV 4 >= 128 THEN 19475000=04175000=
IF MODE ^= 0 THEN 19480000=04175500=
BEGIN 19485000=04176000=
FLAG(50); 19490000=04176000=
GO TO ALLTHU 19495000=04176000=
END; 19500000=04176000=
LINK:= GET(L); 19505000=04182000=
CREL:= TRUE; 19510000=04183000=
IF MODE ^= 0 THEN 19515000=04184000=
EMITV(D+768) 19520000=04184000=
ELSE 19525000=04184000=
EMITV(REAL(TEMPL >= 2048)*1024+TEMPL DIV 4); 19530000=04184500=
END 19535000=04185000=
UNTIL L:= LINK = 4095; 19540000=04185000=
ALLTHU: 19545000=04186000=
L:= TEMPL; 19550000=04186000=
IF CREL THEN 19555000=04187000=
EMITWORD(INFO[0, 255-J]); 19560000=04187000=
END; 19565000=04188000=
LASTENTRY:= 0; 19570000=04189000=
END; 19575000=04190000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19580000=04190000=
COMMENT EMITNUM HANDLES THE EMISSION OF CODE FOR CONSTANTS,BOTH 19585000=04191000=
EXPLICIT AND IMPLICIT. IN EVERY CASE,EMITNUM WILL 19590000=04192000=
PRODUCE CODE TO GET THE DESIRED CONSTANT ON TOP OF 19595000=04193000=
THE STACK. IF THE NUMBER IS A LITERAL A SIMPLE LITC 19600000=04194000=
SYLLABLE IS PRODUCED. HOWEVER,NON-LITERALS ARE KEPT 19605000=04195000=
IN THE ZERO-TH ROW OF INFO WITH THE SYLLABLE 19610000=04196000=
POSITION,L. THE FIRST EMITNUM ON A PARTICULAR 19615000=04197000=
CONSTANT CAUSES THE VALUES OF L AND THE CONSTANT 19620000=04198000=
TO BE STORED IN INFO[0,*] (NOTE:ITEMS ARE STORED 19625000=04199000=
IN REVERSE STARTING WITH INFO[0,255],ETC.). THEN 19630000=04200000=
ITS THE JOB OF CONSTANTCLEAN TO EMIT THE ACTUAL 19635000=04201000=
OPDC (SEE CONSTANTCLEAN PROCEDURE FOR DETAILS) ; 19640000=04202000=
PROCEDURE EMITNUM(C); 19645000=04203000=
VALUE 19650000=04203000=
C; 19655000=04203000=
REAL 19660000=04203000=
C; 19665000=04203000=
BEGIN 19670000=04204000=
LABEL 19675000=04204000=
FINISHED, 19680000=04204000=
FOUND; 19685000=04204000=
REAL 19690000=04204000=
N; 19695000=04204000=
IF C.[46:37] = 0 THEN 19700000=04205000=
EMITL(C) 19705000=04206000=
ELSE 19710000=04206000=
BEGIN 19715000=04207000=
FOULED:= L; 19720000=04207500=
FOR N:= 1 STEP 2 UNTIL LASTENTRY DO 19725000=04208000=
IF INFO[0, 255-N] = C THEN 19730000=04209000=
GO TO FOUND; 19735000=04209000=
INFO[0, 255-LASTENTRY]:= L; 19740000=04210000=
INFO[0, 255-LASTENTRY-1]:= C; 19745000=04211000=
EMITN(1023); 19750000=04212000=
IF MODE = 0 THEN 19755000=04212100=
EMITO(NOP); 19760000=04212100=
LINKTOG:= FALSE; 19765000=04213000=
IF LASTENTRY:= LASTENTRY+2 >= 128 THEN 19770000=04214000=
BEGIN 19775000=04215000=
C:= BUMPL; 19780000=04216000=
CONSTANTCLEAN; 19785000=04217000=
EMITB(BFW, C, L); 19790000=04218000=
END; 19795000=04219000=
GO TO FINISHED; 19800000=04220000=
FOUND: 19805000=04221000=
EMIT(INFO[0, 255-N+1]); 19810000=04221000=
LINKTOG:= FALSE; 19815000=04222000=
INFO[0, 255-N+1]:= L-1; 19820000=04223000=
IF MODE = 0 THEN 19825000=04223100=
EMITO(NOP); 19830000=04223100=
END; 19835000=04224000=
FINISHED: 19840000=04225000=
END EMITNUM; 19845000=04225000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19850000=04225000=
COMMENT SEARCH PERFORMS A BINARY SEARCH ON THE COP AND WOP 19855000=04226000=
ARRAYS, GIVEN THE OPERATOR BITS SEARCH YIELDS THE BCD 19860000=04227000=
MNEUMONIC FOR THAT OPERATOR. IF THE OPERATOR CANNOT 19865000=04228000=
BE FOUND SEARCH YIELDS BLANKS. 19870000=04229000=
NOTE: DIA,DIB,TRB ARE RETURNED AS BLANKS. ; 19875000=04230000=
ALPHA PROCEDURE SEARCH(Q, KEY); 19880000=04231000=
VALUE 19885000=04231000=
KEY; 19890000=04231000=
ARRAY 19895000=04231000=
Q[0]; 19900000=04231000=
REAL 19905000=04231000=
KEY; 19910000=04231000=
BEGIN 19915000=04232000=
LABEL 19920000=04232000=
L; 19925000=04232000=
COMMENT GT1 AND GT2 ARE INITIALIZED ASSUMMING THAT Q IS ORDERED 19930000=04233000=
BY PAIRS (ARGUMENT,FUNCTION,ARGUMENT,FUNCTION,ETC.) 19935000=04234000=
AND THAT THE FIRST ARGUMENT IS IN Q[4]. FURTHERMORE 19940000=04235000=
THE LENGTH OF Q IS 128. ; 19945000=04236000=
INTEGER 19950000=04237000=
N, 19955000=04237000=
I; 19960000=04237000=
N:= 64; 19965000=04238000=
FOR I:= 66 STEP IF Q[I] < KEY THEN 19970000=04239000=
N 19975000=04239000=
ELSE 19980000=04239000=
-N WHILE N:= N DIV 2 >= 1 19985000=04240000=
DO 19990000=04240000=
IF Q[I] = KEY THEN 19995000=04241000=
GO TO L; 20000000=04241000=
I:= 0; COMMENT ARGUMENT NOT FOUND,SEARCH=Q[1] ; 20005000=04242000=
L: SEARCH:= Q[I+1]; 20015000=04243000=
END SEARCH; 20020000=04244000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20025000=04244000=
COMMENT B2D CONVERTS THE FOUR LOW ORDER OCTAL DIGITS TO BCD 20030000=04245000=
CODE ; 20035000=04246000=
ALPHA PROCEDURE B2D(B); 20040000=04247000=
VALUE 20045000=04247000=
B; 20050000=04247000=
REAL 20055000=04247000=
B; 20060000=04247000=
B2D:= 0 & B[2:2:3] & B[8:5:3] & B[14:8:3] & B[20:11:3]; 20065000=04248000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20070000=04248000=
COMMENT PACK IS A STREAM PROCEDURE WHICH INSERTS THE SYLLABLE 20075000=04265000=
INTO THE EDOC ARRAY. THE SPECIFIC ELEMENT OF EDOC 20080000=04266000=
IS PRECISILY = EDOC[(L DIV 4) DIV 128,(< DIV 4)MOD 128] 20085000=04267000=
SYLLABLE POSITION=(L MOD 4 ), WHERE L IS THE SYLLABLE 20090000=04268000=
NUMBER RELATIVE TO THE BEGINNING OF THE SEGMENT; 20095000=04269000=
DEFINE PACK(WORD, WX, POSITION, SYLLABLE) = 20100000=04270000=
BEGIN 20120000=04272000=
WORD[(WX)]:= * & (SYLLABLE)[47-(POSITION)*12:12]; 20125000=04273000=
END PACK #; 20155000=04276000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20160000=04277000=
COMMENT DEBUG PRINTS OUT OBJECT CODE IF "DEBUGN" IS SET; 20165000=04277000=
PROCEDURE DEBUG(S); 20170000=04277500=
VALUE 20175000=04277500=
S; 20180000=04277500=
REAL 20185000=04277500=
S; 20190000=04277500=
BEGIN 20195000=04278000=
REAL 20200000=04278000=
T1; 20205000=04278000=
IF SINGLTOG THEN 20210000=04278500=
WRITE(LINE, BUG, BIC2EBC(B2D(L)), 20215000=04282500=
BIC2EBC(IF STREAMTOG THEN SEARCH(COP, S.[5:6]) 20220000=04282500=
ELSE IF T1:= S.[1:2] = 1 THEN SEARCH(WOP, S.[11:10]) 20222000
ELSE WOP[T1]), 20225000=04282500=
BIC2EBC(IF STREAMTOG THEN B2D(S.[11:6]) 20230000=04282500=
ELSE IF T1 = 1 THEN WOP[1] ELSE B2D(S.[11:10])), 20235000=04282500=
BIC2EBC(B2D(S))) 20236000
ELSE 20240000=04282500=
WRITE(LINE, BUG, BIC2EBC(B2D(L)), 20245000=04285500=
BIC2EBC(IF STREAMTOG THEN SEARCH(COP, S.[5:6]) 20250000=04285500=
ELSE IF T1:= S.[1:2] = 1 THEN SEARCH(WOP, S.[11:10]) 20255000=04285500=
ELSE WOP[T1]), 20260000=04285500=
BIC2EBC(IF STREAMTOG THEN B2D(S.[11:6]) 20262000
ELSE IF T1 = 1 THEN WOP[1] ELSE B2D(S.[11:10])), 20264000
BIC2EBC(B2D(S))); 20265000=04285500=
END DEBUG; 20270000=04286000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20275000=04286000=
COMMENT EMIT PLACES SYLLABLES INTO EDOC, CALLS DEBUG FOR 20280000=04288000=
DEBUGGING OUTPUT ON THE PRINTER, AND CHECKS FOR SEGMENTS 20285000=04289000=
GREATER THAN 4093 SYLLABLES. ; 20290000=04290000=
PROCEDURE EMIT(S); 20295000=04291000=
VALUE 20300000=04291000=
S; 20305000=04291000=
REAL 20310000=04291000=
S; 20315000=04291000=
BEGIN 20320000=04292000=
IF L < 4088 THEN 20325000=04293000=
BEGIN 20330000=04294000=
LINKTOG:= TRUE; 20335000=04295000=
PACK(CODE, L DIV 4+1, L.[1:2], S); 20340000=04296000=
IF DEBUGTOG THEN 20345000=04297000=
DEBUG(S); 20350000=04297000=
L:= L+1; 20355000=04298000=
END 20360000=04300000=
ELSE 20365000=04300000=
BEGIN 20370000=04300000=
ERROR(200); 20375000=04300000=
L:= 1; 20380000=04300000=
END; 20385000=04300000=
COMMENT 200 EMIT - SEGMENT GREATER THAN 4093 SYLLABLES *; 20390000=04301000=
END EMIT; 20395000=04302000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20400000=04302000=
COMMENT EMITD EMITS THE DIA,DIB,TRB SEQUENCE OF CODE. THE 20405000=04305000=
PREVIOUS SETTING OF THE G-H AND K-V REGISTERS IS COMPARED 20410000=04306000=
THE CURRENT . IF THE G-H,K-V OR BOTH ARE ALREADY SET THEN 20415000=04307000=
THE APPROIATE SYLLABLE(S) ARE OMITTED 20420000=04308000=
IF 0 BITS ARE TO BE TRANSFERED THEN NO SYLLABLES ARE 20425000=04309000=
EMITTED ; 20430000=04310000=
PROCEDURE EMITD(A, B, T); 20435000=04311000=
VALUE 20440000=04311000=
A, 20445000=04311000=
B, 20450000=04311000=
T; 20455000=04311000=
INTEGER 20460000=04311000=
A, 20465000=04311000=
B, 20470000=04311000=
T; 20475000=04311000=
BEGIN 20480000=04311010=
LABEL 20485000=04311010=
EXIT, 20490000=04311010=
NORMAL; 20495000=04311010=
REAL 20500000=04311020=
Q; 20505000=04311020=
IF T = 15 THEN 20510000=04311030=
BEGIN 20515000=04311040=
IF A = 33 THEN 20520000=04311050=
Q:= 512 20525000=04311060=
ELSE 20530000=04311060=
IF A ^= 18 THEN 20535000=04311060=
GO TO NORMAL; 20540000=04311060=
IF B = 18 THEN 20545000=04311070=
Q:= Q+256 20550000=04311080=
ELSE 20555000=04311080=
IF B ^= 33 THEN 20560000=04311080=
GO TO NORMAL; 20565000=04311080=
EMITO(Q+197); COMMENT -- THIS GETS OUT FIXED FIELD; 20570000=04311090=
GO TO EXIT; 20580000=04311100=
END; 20585000=04311110=
NORMAL: 20590000=04312000=
IF T ^= 0 THEN 20595000=04312000=
BEGIN 20600000=04313000=
EMIT(((DIALA:= A) DIV 6)*512+(A:= A MOD 6)*64+DIA); 20605000=04315000=
EMIT(((DIALB:= B) DIV 6)*512+(B:= B MOD 6)*64+DIB); 20610000=04317000=
EMIT(TRB+64*T); 20615000=04318000=
END EMITD; 20620000=04322000=
EXIT: 20625000=04322100=
END; 20630000=04322100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20635000=04322100=
PROCEDURE EMITI(E, A, B); 20640000=04500000=
VALUE 20645000=04500000=
E, 20650000=04500000=
A, 20655000=04500000=
B; 20660000=04500000=
REAL 20665000=04500000=
E, 20670000=04500000=
A, 20675000=04500000=
B; 20680000=04500000=
BEGIN 20685000=04501000=
LABEL 20690000=04501000=
EXIT, 20695000=04501000=
IZ; 20700000=04501000=
INTEGER 20705000=04502000=
S, 20710000=04502000=
T1, 20715000=04502000=
T2; 20720000=04502000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20722000
PROCEDURE EMIT21(E, B); 20725000=04503000=
VALUE 20730000=04503000=
E, 20735000=04503000=
B; 20740000=04503000=
REAL 20745000=04504000=
E; 20750000=04504000=
BOOLEAN 20755000=04505000=
B; 20760000=04505000=
BEGIN 20765000=04506000=
IF E = 0 THEN 20770000=04506000=
BEGIN 20775000=04507000=
IF B THEN 20780000=04507000=
EMITO(XCH); 20785000=04507000=
END 20790000=04508000=
ELSE 20795000=04508000=
BEGIN 20800000=04508000=
GT1:= E.ADDRESS; 20805000=04508000=
IF E:= E.CLASS <= INTID THEN 20810000=04509000=
EMITV(GT1) 20815000=04522000=
ELSE 20820000=04522000=
IF E <= INTARRAYID THEN 20825000=04522000=
EMITPAIR(GT1, LOD) 20830000=04523000=
ELSE 20835000=04523000=
EMITN(GT1) 20840000=04525000=
END 20845000=04526000=
END; 20850000=04526000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20855000=04526000=
IF B = 0 THEN 20860000=04526100=
BEGIN 20865000=04526200=
EMIT21(E, FALSE); 20870000=04526200=
GO TO EXIT 20875000=04526200=
END; 20880000=04526200=
IF STACKCT ^= 0 THEN 20885000=04527000=
GO TO IZ; 20890000=04527000=
IF B = 15 THEN 20895000=04528000=
BEGIN 20900000=04529000=
IF A = 33 THEN 20905000=04529000=
BEGIN 20910000=04530000=
EMIT21(E, FALSE); 20915000=04530000=
EMIT(0); 20920000=04531000=
EMITO(INX); 20925000=04531000=
GO TO EXIT; 20930000=04532000=
END; 20935000=04533000=
IF A = 18 THEN 20940000=04534000=
BEGIN 20945000=04535000=
EMIT(0); 20950000=04535000=
EMIT21(E, TRUE); 20955000=04536000=
EMITO(197); 20960000=04537000=
GO TO EXIT; 20965000=04538000=
END; 20970000=04539000=
GO TO IZ; 20975000=04540000=
END; 20980000=04541000=
IF B <= 10 AND A+B = 48 THEN 20985000=04542000=
BEGIN 20990000=04543000=
EMIT21(E, FALSE); 20995000=04543000=
EMITL(2**B-1); 21000000=04544000=
EMITO(LND); 21005000=04545000=
GO TO EXIT; 21010000=04546000=
END; 21015000=04547000=
IZ: IF(S:= (48-A-B) MOD 6)+B <= 39 THEN 21020000=04548000=
BEGIN 21025000=04549000=
EMIT21(E, FALSE); 21030000=04549000=
EMIT(T2:= (T1:= A DIV 6)*512+(A MOD 6)*64+DIA); 21035000=04550000=
EMIT(((A+B-1) DIV 6-T1+1)*512+64*S+37); 21040000=04551000=
GO TO EXIT; 21045000=04552000=
END; 21050000=04553000=
EMIT(0); 21055000=04554000=
EMIT21(E, TRUE); 21060000=04555000=
EMITD(A, 48-B, B); 21065000=04556000=
EXIT: 21070000=04558000=
END; 21075000=04558000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21080000=04558000=
21085000=05000000=
COMMENT THIS SECTION CONTAINS MISCELLANEOUS SERVICE ROUTINES; 21090000=05000000=
21095000=05001000=
COMMENT STEPI AND STEPIT ARE SHORT CALLS ON TABLE; 21100000=05001000=
PROCEDURE STEPIT; 21105000=05002000=
ELCLASS:= TABLE(I:= I+1); 21110000=05002000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21115000=05002000=
INTEGER PROCEDURE STEPI; 21120000=05003000=
STEPI:= ELCLASS:= TABLE(I:= I+1); 21125000=05003000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21130000=05003000=
21135000=05004000=
COMMENT TAKE FETCHS A WORD FROM INFO; 21140000=05004000=
REAL PROCEDURE TAKE(INDEX); 21145000=05005000=
VALUE 21150000=05005000=
INDEX; 21155000=05005000=
INTEGER 21160000=05005000=
INDEX; 21165000=05005000=
TAKE:= INFO[INDEX.LINKR, INDEX.LINKC]; 21170000=05006000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21175000=05006000=
21180000=05007000=
COMMENT PUT PLACES A WORD INTO INFO; 21185000=05007000=
PROCEDURE PUT(WORD, INDEX); 21190000=05008000=
VALUE 21195000=05008000=
WORD, 21200000=05008000=
INDEX; 21205000=05008000=
REAL 21210000=05008000=
WORD, 21215000=05008000=
INDEX; 21220000=05008000=
INFO[INDEX.LINKR, INDEX.LINKC]:= WORD; 21225000=05009000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21230000=05009000=
21235000=05010000=
COMMENT FLAG FLAGS ERROR MESSAGES, COUNTS THEM AND SUPRESS FUTURE 21240000=05010000=
ERROR MESSAGES UNTIL THE COMPILER THINKS IT HAS RECOVERED;21245000=05011000=
PROCEDURE FLAG(ERRNUM); 21250000=05012000=
VALUE 21255000=05012000=
ERRNUM; 21260000=05012000=
REAL % B5500 DIDN'T INTEGERIZE PARAM ON CALL? 21265000=05012000=
ERRNUM; 21270000=05012000=
BEGIN 21275000=05013000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21276000
COMMENT WRITERROR IS THE STREAM PROCEDURE WHICH ACTUALLY PRODUCES 21280000=05014000=
THE ERROR MESSAGE ON THE PRINTER; 21285000=05015000=
PROCEDURE WRITERROR( 21290000=05016000=
ERRNUM, ACCUM, AX, LINE, COUNT, LSTSEQ, QX); 21292000=05016000=
VALUE 21294000=05017000=
ERRNUM, AX, COUNT, QX; 21296000=05017000=
REAL 21298000
ERRNUM, AX, COUNT, QX; 21300000
ARRAY 21302000
ACCUM, LINE, LSTSEQ[0]; 21304000
BEGIN 21310000=05018000=
STREAMLOCALS; 21312000
STREAMSETDI(LINE, 0); 21315000=05019000=
STREAMSMEARLIT(44*2, 6" "); COMMENT CLEAR BUFFER; 21320000=05019000=
STREAMSETSI(LSTSEQ, QX); 21330000=05020000=
STREAMSKIPSI(-8); 21335000=05020000=
STREAMTRANSFERWDS(1); 21340000=05020000=
STREAMSETSILINE, 0); 21345000=05021000=
STREAMTRANSFERWDS(2); 21350000=05021000=
STREAMSMEARLIT(4*2, 6"X"); COMMENT SET RIGHT MARGIN FLAG; 21355000=05022000=
STREAMSETSI(LSTSEQ, QX); 21365000=05023000=
STREAMSETDI(LSTSEQ, QX); 21370000=05023000=
STREAMSKIPDI(-8); 21375000=05023000=
STREAMTRANSFERWDS(1); 21380000=05023000=
STREAMSETDI(LINE, 0); 21385000=05024000=
STREAMSKIPDI(+8); COMMENT INDENT MESSAGE; 21390000=05024000=
STREAMTRANSFERLIT(6, 6"ERROR "); 21400000=05025000=
STREAMTRANSFERLIT(6, 6"NUMBER "); 21402000
STREAMSETLOCSI(ERRNUM); 21405000=05026000=
STREAMTRANSFERDEC(3); COMMENT CONVERT ERRNUM; 21410000=05026000=
STREAMTRANSFERLIT(4, 6" -- "); 21420000=05027000=
STREAMSETSI(ACCUM, AX); 21425000=05028000=
STREAMSKIPSI(+3); 21430000=05028000=
STREAMTRANSFERCHR(COUNT); 21435000=05028000=
COMMENT PLACE ALPHA IN BUFFER; 21440000=05029000=
STREAMSMEARLIT(1, 6".") 21445000=05031000=
END WRITERROR; 21450000=05031000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%21452000
IF ERRORTOG THEN % DO NOTHING IF WE SUPPRESS MSSGS. 21455000=05032000=
BEGIN 21460000=05033000=
SPECTOG:= FALSE; 21465000=05034000=
ERRORCOUNT:= ERRORCOUNT+1; COMMENT COUNT ERRORS; 21470000=05035000=
IF NOT LISTER THEN 21480000=05036000=
BEGIN 21485000=05037000=
EDITLINE(LIN, SBUFF, FCR, L DIV 4, L.[1:2], MEDIUM, 0); 21490000=05038000=
MOVE(1, INFO[LASTSEQROW,*], LASTSEQUENCE, LIN, 12); 21495000=05039500=
IF NOHEADING THEN 21500000=05039600=
DATIME; 21505000=05039600=
WRITELINE; 21510000=05039600=
END; 21515000=05041000=
COMMENT PRINT CARDIMAGE IF WE ARE NOT LISTING; 21520000=05042000=
ACCUM[1]:= Q; COMMENT RESTORE ACCUMULATOR; 21525000=05043000=
WRITERROR(ERRNUM, ACCUM, 1, LIN[*], Q.[35:6], 21535000=05045000=
INFO[LASTSEQROW,*], LASTSEQUENCE); 21540000=05045000=
IF NOT NOHEADING THEN 21545000=05046000=
WRITELINE; 21550000=05046000=
ERRORTOG:= FALSE; COMMENT INHIBIT MESSAGES; 21555000=05047000=
END 22195000=05101000=
END FLAG; 22200000=05101000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22205000=05101000=
LABEL 22210000=05101100=
ENDOFITALL; 22215000=05101100=
22220000=05102000=
COMMENT ERR,IS THE SAME AS FLAG EXCEPT THAT IT MAKES AN ATTEMPT TO 22225000=05102000=
RECOVER FROM ERROR SITUATIONS BY SEARCHING FOR A 22230000=05103000=
SEMICOLON, END, OR BEGIN; 22235000=05104000=
PROCEDURE ERR(ERRNUM); 22240000=05105000=
VALUE 22245000=05105000=
ERRNUM; 22250000=05105000=
INTEGER 22255000=05105000=
ERRNUM; 22260000=05105000=
BEGIN 22265000=05106000=
FLAG(ERRNUM); 22270000=05106000=
I:= I-1; 22275000=05107000=
IF ERRNUM = 200 THEN 22280000=05107100=
MYSELF.STATUS:= VALUE(TERMINATED); % SEGMENT TOO LARGE 22285000=05107100=
IF ERRNUM = 611 THEN 22290000=05107200=
MYSELF.STATUS:= VALUE(TERMINATED); % ERRMAX EXCEEDED 22295000=05107200=
DO 22300000=05108000=
IF STEPI = BEGINV THEN 22305000=05108000=
STMT 22310000=05109000=
UNTIL ELCLASS = ENDV OR ELCLASS = SEMICOLON 22315000=05109000=
END ERR; 22320000=05109000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22325000=05109000=
DEFINE 22330000=05110000=
ERROR = ERR #; 22335000=05110000=
COMMENT ERROR IS A SYNONM FOR ERR; 22340000=05110000=
22345000=05111000=
COMMENT CHECKER IS A SMALL PROCEDURE THAT CHECKS TO SEE THAT THE 22350000=05111000=
UPLEVEL ADDRESSING CONVENTIONS ARE OBEYED; 22355000=05112000=
PROCEDURE CHECKER(ELBATWORD); 22360000=05113000=
VALUE 22365000=05113000=
ELBATWORD; 22370000=05113000=
REAL 22375000=05113000=
ELBATWORD; 22380000=05113000=
BEGIN 22385000=05114000=
IF MODE >= 2 THEN 22390000=05115000=
IF GT1:= ELBATWORD.LVL >= FRSTLEVEL THEN 22395000=05116000=
IF GT1 < SUBLEVEL THEN 22400000=05117000=
IF ELBATWORD.[38:2] ^= 1 THEN 22405000=05119000=
BEGIN 22410000=05119000=
FLAG(101); 22415000=05119000=
ERRORTOG:= TRUE 22420000=05119000=
END 22425000=05120000=
END CHECKER; 22430000=05120000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22435000=05120000=
COMMENT GIT IS USED TO OBTAIN THE INDEX TO ADDITIONAL INFORMATION 22440000=05121000=
GIVEN THE LINK TO THE ELBAT WORD; 22445000=05122000=
INTEGER PROCEDURE GIT(L); 22450000=05123000=
VALUE 22455000=05123000=
L; 22460000=05123000=
REAL 22465000=05123000=
L; 22470000=05123000=
GIT:= TAKE(L).INCR+L.LINK; 22475000=05124000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22480000=05124000=
22485000=05125000=
COMMENT GNAT IS USED TO OBTAIN THE PRT ADDRESS OF A GIVEN DESCRIPTOR. 22490000=05125000=
IF THE ADDRESS HAS NOT BEEN ASSIGNED, THEN IT USES 22495000=05126000=
GETSPACE TO OBTAIN THE PRT ADDRESS; 22500000=05127000=
INTEGER PROCEDURE GNAT(L); 22505000=05128000=
VALUE 22510000=05128000=
L; 22515000=05128000=
REAL 22520000=05128000=
L; 22525000=05128000=
BEGIN 22530000=05129000=
REAL 22535000=05130000=
A; 22540000=05130000=
IF GNAT:= (A:= TAKE(L)).ADDRESS = 0 THEN 22545000=05132000=
PUT(A & (GNAT:= GETSPACE(TRUE, L.LINK+1))[31:10:11], L) 22550000=05133000=
END GNAT; 22555000=05133000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22560000=05133000=
REAL PROCEDURE TAKEFRST; 22565000=05188000=
TAKEFRST:= TAKE(ELBAT[I].LINK+ELBAT[I].INCR); 22570000=05189000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22575000=05189000=
22580000=05196000=
COMMENT STUFFF DIALS THE F-REGISTER INTO THE F-REGISTER FIELD OF A 22585000=05196000=
DESCRIPTOR. THE DESCRIPTOR REMAINS ON THE TOP OF THE 22590000=05197000=
STACK; 22595000=05198000=
PROCEDURE STUFFF(ADDRESS); 22600000=05199000=
VALUE 22605000=05199000=
ADDRESS; 22610000=05199000=
INTEGER 22615000=05199000=
ADDRESS; 22620000=05199000=
BEGIN 22625000=05200000=
EMITPAIR(ADDRESS, LOD); 22630000=05201000=
EMITN(512); 22635000=05202000=
EMITD(33, 18, 15) 22640000=05203000=
END STUFFF; 22645000=05203000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22650000=05203000=
22655000=05204000=
COMMENT LOCAL IS USED TO SEE WHETHER OR NOT A LABEL IS LOCAL TO OUR 22660000=05204000=
PRESENT CODE; 22665000=05205000=
BOOLEAN PROCEDURE LOCAL(ELBATWORD); 22670000=05206000=
VALUE 22675000=05207000=
ELBATWORD; 22680000=05207000=
REAL 22685000=05207000=
ELBATWORD; 22690000=05207000=
BEGIN 22695000=05208000=
IF ELBATWORD.LVL = LEVEL AND NOT BOOLEAN(ELBATWORD.FORMAL) THEN 22700000=05209000=
LOCAL:= TRUE 22705000=05210000=
END LOCAL; 22710000=05210000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22715000=05210000=
22720000=05211000=
COMMENT PASSFORMAT COMPILES CODE THAT PASSES A FORMAT. TWO ITEMS ARE 22725000=05211000=
PASSED - THE ARRAY REFERENCING FORMAT TABLE AND THE 22730000=05212000=
STARTING INDEX. THE ROUTINE HANDLES SUPERFORMATS ALSO; 22735000=05213000=
PROCEDURE PASSFORMAT; 22740000=05214000=
BEGIN 22745000=05215000=
INTEGER 22750000=05215000=
ADRES; 22755000=05215000=
CHECKER(ELBAT[I]); 22760000=05216000=
ADRES:= ELBAT[I].ADDRESS; 22765000=05217000=
IF BOOLEAN(ELBAT[I].FORMAL) THEN 22770000=05219000=
BEGIN 22775000=05219000=
EMITV(ADRES); 22780000=05219000=
ADRES:= ADRES-1 22785000=05219000=
END 22790000=05220000=
ELSE 22795000=05220000=
BEGIN 22800000=05220000=
IF TABLE(I) = SUPERFRMTID THEN 22805000=05222000=
EMITL(TAKEFRST) 22810000=05222000=
ELSE 22815000=05222000=
EMITL(ELBAT[I].INCR) 22820000=05223000=
END; 22825000=05223000=
IF TABLE(I) = SUPERFRMTID THEN 22830000=05225000=
BEGIN 22835000=05225000=
BANA; 22840000=05225000=
I:= I-1; 22845000=05225000=
EMITO(SSP); 22850000=05226000=
EMITO(ADD); 22855000=05226000=
EMITV(ADRES) 22860000=05226000=
END; 22865000=05226000=
EMITPAIR(ADRES, LOD) 22870000=05227000=
END PASSFORMAT; 22875000=05227000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22880000=05227000=
22885000=05228000=
COMMENT STREAMWORDS EITHER RESERVES OR UNRESERVES STREAM RESERVED 22890000=05228000=
WORDS - IT COMPLEMENTS THEIR STATE; 22895000=05229000=
PROCEDURE STREAMWORDS; 22900000=05230000=
BEGIN 22905000=05231000=
GT1:= 0; 22910000=05231000=
DO BEGIN 22915000=05232000=
INFO[1, GT1].LINK:= 22920000=05233000=
STACKHEAD[GT2:= (T:= INFO[1, GT1]).ADDRESS]; 22925000=05233000=
STACKHEAD[GT2]:= T.LINK; 22930000=05234000=
GT1:= GT1+2; 22935000=05235000=
END 22940000=05236000=
UNTIL BOOLEAN(T.FORMAL) 22945000=05236000=
END STREAMWORDS; 22950000=05236000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22955000=05236000=
PROCEDURE PROGDESCBLDR(PRTADR, SAV, SIZE, TYPE); 22960000=05245000=
VALUE 22965000=05246000=
PRTADR, 22970000=05246000=
SAV, 22975000=05246000=
SIZE, 22980000=05246000=
TYPE; 22985000=05246000=
INTEGER 22990000=05247000=
PRTADR, 22995000=05247000=
SIZE, 23000000=05247000=
TYPE; 23005000=05247000=
BOOLEAN 23010000=05247000=
SAV; 23015000=05247000=
BEGIN 23020000=05247500=
PRTADR:= PRTADR.[9:10]; 23025000=05247500=
IF SAV THEN 23030000=05248000=
BEGIN 23035000=05248000=
PRT[PRTADR]:= (IF TYPE = LDES THEN SIZE ELSE CORADR) & 23040000=05249000=
SIZE[39:19:10] & TYPE[46:4:5] & 3[41:1:2]; 23045000=05249000=
IF TYPE ^= LDES THEN 23050000=05250000=
CORADR:= CORADR+SIZE; 23055000=05250000=
END 23060000=05252000=
ELSE 23065000=05252000=
BEGIN 23070000=05252000=
PRT[PRTADR]:= 0 & DISKADR[29:14:15] & SIZE[39:9:10] & 23075000=05253000=
TYPE[46:4:5] 23075100
& 1[41:1:2]; 23080000=05253000=
DISKADR:= (SIZE+29) DIV 30+DISKADR; 23085000=05254000=
END; 23090000=05254500=
END PROGDESCBLDR; 23095000=05255000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23100000=05255000=
23105000=05267000=
COMMENT DOTSYNTAX ANALYSES THE SYNTAX OF A PARTIAL WORD DESIGNATOR. 23110000=05267000=
IT REPORTS IF AN ERROR IS FOUND. IT RETURNS WITH THE 23115000=05268000=
LITERALS INVOLVED; 23120000=05269000=
BOOLEAN PROCEDURE DOTSYNTAX(FIRST, SECOND); 23125000=05270000=
INTEGER 23130000=05271000=
FIRST, 23135000=05271000=
SECOND; 23140000=05271000=
BEGIN 23145000=05272000=
LABEL 23150000=05273000=
EXIT; 23155000=05273000=
IF STEPI = LFTBRKET THEN 23160000=05274000=
IF STEPI = LITNO THEN 23165000=05275000=
IF STEPI = COLON THEN 23170000=05276000=
IF STEPI = LITNO THEN 23175000=05277000=
IF STEPI = RTBRKET THEN 23180000=05278000=
COMMENT IF TESTS ARE PASSED THEN SYNTAX IS CORRECT; 23185000=05279000=
IF(FIRST:= ELBAT[I-3].ADDRESS)* 23190000=05281000=
(SECOND:= ELBAT[I-1].ADDRESS) ^= 0 23195000=05281000=
THEN 23200000=05281000=
IF FIRST+SECOND <= 48 THEN 23205000=05282000=
COMMENT IF TESTS ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 23210000=05283000=
GO TO EXIT; 23215000=05284000=
ERR(114); COMMENT ERROR IF SYNTAX OR RANGE FAILS; 23220000=05285000=
DOTSYNTAX:= TRUE; 23230000=05286000=
EXIT: 23235000=05286000=
END DOTSYNTAX; 23240000=05286000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23245000=05286000=
BOOLEAN PROCEDURE RANGE(LOWER, UPPER); 23250000=05297000=
VALUE 23255000=05298000=
LOWER, 23260000=05298000=
UPPER; 23265000=05298000=
REAL 23270000=05299000=
LOWER, 23275000=05299000=
UPPER; 23280000=05299000=
COMMENT RANGE TESTS THE CLASS OF THE ITEM IN ELBAT[I] TO SEE IF 23285000=05300000=
IT IS GREATER THAN OR EQUAL TO LOWER OR LESS THAN OR EQUAL TO 23290000=05301000=
UPPER AND SETS RANGE TO TRUE OR FALSE ACCORDINGLY. THE ITEMS 23295000=05302000=
CLASS MUST BE IN ELCLASS; 23300000=05303000=
RANGE:= ELCLASS >= LOWER AND ELCLASS <= UPPER; 23305000=05304000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23310000=05304000=
23315000=05305000=
COMMENT GET OBTAINS A SYLLABLE FROM EDOC, THE ARRAY INTO WHICH CODE IS 23320000=05305000=
EMITTED; 23325000=05306000=
INTEGER PROCEDURE GET(L); 23330000=05307000=
VALUE 23335000=05307000=
L; 23340000=05307000=
REAL 23345000=05307000=
L; 23350000=05307000=
BEGIN 23355000=05308000=
GET:= CODE[L DIV 4+1].[47-(L.[1:2])*12:12]; 23420000=05312000=
END GET; 23425000=05312000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23430000=05312000=
23435000=05313000=
COMMENT CALL SWITCH PERFORMS THE FINAL MESS OF GETTING A PROPER DE- 23440000=05313000=
SCRIPTOR TO THE TOP OF THE STACK; 23445000=05314000=
PROCEDURE CALLSWITCH(H); 23450000=05315000=
VALUE 23455000=05315000=
H; 23460000=05315000=
REAL 23465000=05315000=
H; 23470000=05315000=
BEGIN 23475000=05316000=
EMITV(GNAT(H)); 23480000=05316000=
EMITO(PRTE); 23485000=05316000=
EMITO(LOD) 23490000=05316000=
END CALLSWITCH; 23495000=05316000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23500000=05316000=
PROCEDURE WRITEPRT(PORS, N, GS); 23505000=05325010=
VALUE 23510000=05325010=
PORS, 23515000=05325010=
N, 23520000=05325010=
GS; 23525000=05325010=
INTEGER 23530000=05325010=
PORS, 23535000=05325010=
N, 23540000=05325010=
GS; 23545000=05325010=
BEGIN 23550000=05325020=
LABEL 23555000=05325030=
EXIT; 23560000=05325030=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23562000
PROCEDURE FILLIT(LIN, PORS, CELL, N, ID, IDX); 23565000=05325040=
VALUE 23566000=05325050=
PORS, CELL, N, IDX; 23568000=05325050=
ARRAY 23570000
LIN, ID[0]; 23572000
REAL PORS, CELL, N, IDX; 23574000
BEGIN 23590000=05325060=
STREAMLOCALS; 23592000
REAL 23595000=05325070=
COUNT; 23596000
LABEL 23600000=05325080=
M0, 23605000=05325080=
M1, 23610000=05325080=
M2, 23615000=05325080=
M3, 23620000=05325080=
M4, 23625000=05325080=
M5, 23630000=05325080=
M6, 23635000=05325080=
M7, 23640000=05325080=
XIT, 23645000=05325080=
JUMPOUT; 23646000
23648000
STREAMSETLOCSI(PORS); 23650000=05325090=
STREAMSKIPSI(+3); 23655000=05325090=
STREAMSETDI(LIN, 0); % "PRT" OR "STACK". 23660000=05325090=
IF STREAMSCEQL(6"P") THEN 23665000=05325100=
BEGIN 23670000=05325110=
STREAMTRANSFERCHR(3); 23675000=05325110=
STREAMSMEARLIT(1, 6"("); 23680000=05325110=
END 23685000=05325120=
ELSE 23690000=05325120=
BEGIN 23695000=05325120=
STREAMTRANSFERCHR(5); 23700000=05325130=
STREAMSMEARLIT(1, 6"("); 23705000=05325130=
STREAMSETLOCSI(CELL); 23710000=05325130=
STREAMSKIPSI(+5); 23715000=05325130=
IF STREAMSCGEQ(6"6") THEN 23720000=05325140=
STREAMTRANSFERLIT(2, 6"F-") 23725000=05325140=
ELSE 23730000=05325140=
STREAMTRANSFERLIT(2, 6"F+"); 23735000=05325140=
23736000
COUNT:= STREAMGETDI; 23740000=05325150=
STREAMSETLOCDI(CELL); 23745000=05325150=
STREAMSKIPDI(+4); 23750000=05325150=
STREAMSETDB(11, 0); 23755000=05325160=
CELL:= STREAMTEMPD[0]; 23756000
STREAMSETDI(LIN, COUNT); 23760000=05325160=
END; 23765000=05325170=
23766000
STREAMSETLOCSI(CELL); 23770000=05325180=
STREAMSKIPSI(+4); 23775000=05325180=
TALLY:= 4; % LOCATION. 23780000=05325180=
THRU 3 DO 23785000=05325190=
BEGIN 23786000
IF STREAMSCEQL(6"0") THEN % DONT PRINT LEADING ZEROES. 23788000
BEGIN 23790000=05325200=
STREAMSKIPSI(+1); 23792000
STREAMINCTALLY(+63); % DECREMENT TALLY 23794000
END 23795000=05325200=
ELSE 23796000
GO JUMPOUT 23797000=05325200=
END; 23798000
23800000
JUMPOUT: 23802000
COUNT:= TALLY; 23805000=05325210=
STREAMTRANSFERCHR(COUNT); 23810000=05325210=
TALLY:= 0; 23815000=05325210=
COUNT:= TALLY; 23820000=05325210=
STREAMTRANSFERLIT(4, 6") = "); 23825000=05325220=
CELL:= STREAMGETDI; % SAVE OUR PLACE. 23830000=05325220=
GO TO CASE N OF ( 23835000=05325230=
M0, 23840000=05325240=
M1, 23845000=05325250=
M2, 23850000=05325260=
M3, 23855000=05325270=
M4, 23860000=05325280=
M5, 23865000=05325290=
M6, 23870000=05325300=
M7); 23875000=05325310=
M0: STREAMSETSI(ID, IDX); 23880000=05325320=
STREAMSKIPSI(+2); 23885000=05325320=
STREAMSETLOCDI(COUNT); 23890000=05325320=
STREAMSKIPDI(+7); 23895000=05325330=
STREAMTRANSFERCHR(1); 23900000=05325330=
COUNT:= STREAMTEMPD[0]; 23902000
STREAMSETDI(LIN, CELL); 23905000=05325330=
STREAMTRANSFERCHR(COUNT); 23910000=05325330=
GO XIT; 23915000=05325340=
M1: STREAMSETDI(LIN, CELL); 23920000=05325330=
STREAMTRANSFERLIT(8, 6"*TEMPORA"); 23925000=05325350=
STREAMTRANSFERLIT(8, 6"RY STORA"); 23926000
STREAMTRANSFERLIT(3, 6"GE*"); 23928000
GO XIT; 23930000=05325350=
M2: STREAMSETDI(LIN, CELL); 23935000=05325360=
STREAMTRANSFERLIT(8, 6"*LIST, L"); 23940000=05325370=
STREAMTRANSFERLIT(8, 6"ABEL, OR"); 23941000
STREAMTRANSFERLIT(8, 6" SEGMENT"); 23942000
STREAMTRANSFERLIT(8, 6" DESCRIP"); 23943000
STREAMTRANSFERLIT(4, 6"TOR*"); 23944000
GO XIT; 23945000=05325370=
M3: STREAMSETDI(LIN, CELL); 23950000=05325380=
STREAMTRANSFERLIT(8, 6"*CASE ST"); 23955000=05325380=
STREAMTRANSFERLIT(8, 6"ATEMENT "); 23956000
STREAMTRANSFERLIT(8, 6"DESCRIPT"); 23957000
STREAMTRANSFERLIT(3, 6"OR*"); 23958000
GO XIT; 23960000=05325380=
M4: STREAMSETDI(LIN, CELL); 23965000=05325390=
STREAMTRANSFERLIT(8, 6"*FORMAT "); 23970000=05325390=
STREAMTRANSFERLIT(8, 6"DESCRIPT"); 23972000
STREAMTRANSFERLIT(3, 6"OR*"); 23974000
GO XIT; 23975000=05325390=
M5: STREAMSETDI(LIN, CELL); 23980000=05325400=
STREAMTRANSFERLIT(8, 6"*OUTER B"); 23985000=05325400=
STREAMTRANSFERLIT(8, 6"LOCK DES"); 23986000
STREAMTRANSFERLIT(8, 6"CRIPTOR*"); 23988000
GO XIT; 23990000=05325400=
M6: STREAMSETDI(LIN, CELL); 23995000=05325410=
STREAMTRANSFERLIT(8, 6"*SEGMENT"); 24000000=05325410=
STREAMTRANSFERLIT(8, 6" DESCRIP"); 24002000
STREAMTRANSFERLIT(4, 6"TOR*"); 24004000
GO XIT; 24005000=05325410=
M7: STREAMSETDI(LIN, CELL); 24010000=05325420=
STREAMTRANSFERLIT(8, 6"*LABEL D"); 24015000=05325420=
STREAMTRANSFERLIT(8, 6"ESCRIPTO"); 24016000
STREAMTRANSFERLIT(2, 6"R*"); 24018000
XIT: 24020000=05325440=
END FILLIT; 24025000=05325440=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24026000
BLANKET(14, LIN); 24030000=05325450=
IF N = 1 THEN 24035000=05325460=
FILLIT(LIN, PORS, GS, 0, ACCUM, 1) 24040000=05325470=
ELSE 24045000=05325470=
IF N > 1 THEN 24050000=05325470=
FILLIT(LIN, PORS, GS, 0, INFO[N.LINKR,*], N.LINKC) 24055000=05325480=
ELSE 24060000=05325480=
FILLIT(LIN, PORS, GS, ABS(N), EBCDICBUFF, -1); % ID NOT USED 24065000=05325480=
IF NOHEADING THEN 24070000=05325490=
DATIME; 24075000=05325490=
WRITELINE; 24080000=05325490=
END WRITEPRT; 24085000=05325500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24090000=05325500=
24095000=05326000=
COMMENT GETSPACE MAKES ASSIGNMENTS TO VARIABLES AND DESCRIPTORS IN 24100000=05326000=
THE STACK AND PRT. PERMANENT TELLS WHETHER IT IS A 24105000=05327000=
PERMANENTLY ASSIGNED CELL (ALWAYS IN PRT) OR NOT. NON 24110000=05328000=
PERMANENT CELLS ARE EITHER IN STACK OR PRT ACCORDING TO 24115000=05329000=
MODE. CARE IS TAKEN TO REUSE NON PERMANENT PRT CELLS; 24120000=05330000=
INTEGER PROCEDURE GETSPACE(PERMANENT, L); 24125000=05331000=
VALUE 24130000=05331000=
PERMANENT, 24135000=05331000=
L; 24140000=05331000=
BOOLEAN 24145000=05333000=
PERMANENT; 24150000=05333000=
INTEGER 24155000=05333000=
L; 24160000=05333000=
BEGIN 24165000=05334000=
LABEL 24170000=05334000=
L1, 24175000=05334000=
L2, 24180000=05334000=
EXIT; 24185000=05334000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24186000
PROCEDURE DOIT(C, A, I, IX, S); 24190000=05334100=
VALUE 24195000=05334100=
C, A, IX; 24200000=05334100=
REAL 24201000
C, A, IX; 24202000
ARRAY 24203000
I, S[0]; 24205000=05334100=
BEGIN 24210000=05334200=
STREAMLOCALS; 24212000
REAL 24215000=05334200=
N; 24216000
24218000
STREAMSETDI(S, 0); 24220000=05334300=
STREAMSMEARLIT(8, 6" "); 24225000=05334300=
STREAMSETSI(S, 0); 24230000=05334300=
STREAMTRANSFERWDS(9); 24235000=05334300=
STREAMSETSI(I, IX); 24240000=05334400=
STREAMSKIPSI(+2); 24245000=05334400=
STREAMSETLOCDI(N); 24250000=05334400=
STREAMSKIPDI(+7); 24255000=05334400=
STREAMTRANSFERCHR(1); 24260000=05334400=
N:= STREAMTEMPD[0]; 24262000
STREAMSETDI(S, 0); 24265000=05334500=
STREAMSETLOCSI(C); 24270000=05334500=
THRU 2 DO 24275000=05334500=
STREAMTRANSFERDEC(4); 24276000
24278000
STREAMSETSI(I, IX); 24280000=05334600=
STREAMSKIPSI(+3); 24285000=05334600=
STREAMTRANSFERCHR(N); 24290000=05334600=
END; 24295000=05334700=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24296000
BOOLEAN 24300000=05343000=
M, 24305000=05343000=
Q; 24310000=05343000=
INTEGER 24315000=05344000=
ROW, 24320000=05344000=
COL, 24325000=05344000=
GS; 24330000=05344000=
IF NOT (STREAMTOG AND(LEVEL > 2)) THEN 24335000=05344400=
IF STEPI = RELOP THEN 24340000=05344500=
BEGIN 24345000=05344510=
IF STEPI > IDMAX THEN 24350000=05344530=
BEGIN 24355000=05344540=
IF ELCLASS = ADOP THEN 24360000=05344560=
IF ELBAT[I].ADDRESS = SUBOP THEN 24365000=05344580=
GS:= FZERO 24370000=05344580=
ELSE 24375000=05344580=
GS:= 512; 24380000=05344580=
BEGIN 24385000=05344600=
GS:= 0; 24390000=05344600=
I:= I-1 24395000=05344600=
END; 24400000=05344600=
IF STEPI ^= LITNO THEN 24405000=05344610=
FLAG(51); 24410000=05344610=
IF ELBAT[I].ADDRESS >= 512 THEN 24415000=05344615=
GS:= 1024; 24420000=05344615=
GS:= GS+ELBAT[I].ADDRESS 24425000=05344630=
END 24430000=05344650=
ELSE 24435000=05344650=
BEGIN 24440000=05344650=
GS:= ELBAT[I].ADDRESS; 24445000=05344660=
IF GS = 0 THEN 24450000=05344661=
FLAG(51); 24455000=05344661=
IF GS >= FZERO AND GS <= 1023 THEN 24460000=05344662=
GS:= -GS; 24465000=05344662=
IF STEPI ^= ADOP THEN 24470000=05344670=
I:= I-1 24475000=05344670=
ELSE 24480000=05344670=
BEGIN 24485000=05344680=
STEPIT; 24490000=05344690=
GS:= ELBAT[I].ADDRESS+ 24495000=05344720=
(IF ELBAT[I-1].ADDRESS = SUBOP THEN-GS ELSE+GS); 24500000=05344720=
END; 24505000=05344730=
GS:= ABS(GS); 24510000=05344740=
END; 24515000=05344750=
Q:= GS < 512 OR GS > 1023; 24520000=05344750=
GO TO EXIT 24525000=05344770=
END 24530000=05344770=
ELSE 24535000=05344770=
I:= I-1; 24540000=05344770=
IF MODE = 0 OR PERMANENT THEN 24545000=05346000=
BEGIN 24550000=05346000=
IF PRTIMAX > 1023 THEN 24555000=05347000=
FLAG(148); 24560000=05347000=
IF ASTOG THEN 24565000=05348000=
FLAG(505); 24570000=05348000=
PRTI:= PRTIMAX:= (GS:= PRTIMAX)+1; 24575000=05350000=
IF STUFFTOG THEN 24580000=05350100=
IF(M:= (LEVEL = 1 AND KLASSF > 19)) OR 24585000=05350120=
(LEVEL >= 3 AND ELBAT[I].CLASS = LABELID) 24590000=05350120=
THEN 24595000=05350120=
BEGIN 24600000=05350120=
IF NOT M THEN 24605000=05350140=
DOIT(LABELID, GS, 24610000=05350180=
INFO[(ELBAT[I]).LINKR,*], (ELBAT[I].LINKC+1), TWXA[*]) 24615000=05350180=
ELSE 24620000=05350180=
DOIT(KLASSF, GS, 24625000=05350300=
INFO[(LASTINFO+1).LINKR,*], (LASTINFO+1).LINKC, TWXA[*]); 24630000=05350300=
WRITE(STUFF, 10, TWXA[*]) 24635000=05350300=
END; 24640000=05350300=
END 24645000=05369000=
ELSE 24650000=05369000=
BEGIN 24655000=05369000=
IF STACKCTR > 767 THEN 24660000=05370000=
FLAG(149); 24665000=05370000=
STACKCTR:= (GS:= STACKCTR)+1; 24670000=05371000=
Q:= FALSE; 24675000=05371000=
GO TO EXIT 24680000=05372000=
END; 24685000=05372000=
L2: IF GS >= 512 THEN 24690000=05373000=
GS:= GS+1024; 24695000=05373000=
Q:= TRUE; 24700000=05374000=
EXIT: 24705000=05375000=
GETSPACE:= GS; 24710000=05375000=
IF GS >= NESTCTR AND GS < FZERO THEN 24715000=05375100=
NESTCTR:= GS+1; 24720000=05375100=
IF GS > 1023 THEN 24725000=05376000=
GS:= GS-1024; 24730000=05376000=
IF PRTOG THEN 24735000=05376100=
WRITEPRT(IF Q THEN 6"PRT " ELSE 6"STACK", L, B2D(GS)); 24740000=05376100=
END GETSPACE; 24745000=05378000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24750000=05378000=
REAL PROCEDURE DEPTH(I); 24755000=05400000=
VALUE 24760000=05400000=
I; 24765000=05400000=
REAL 24770000=05400000=
I; 24775000=05400000=
BEGIN 24780000=05401000=
REAL 24785000=05401000=
J, 24790000=05401000=
K, 24795000=05401000=
T, 24800000=05401000=
S, 24805000=05401000=
M; 24810000=05401000=
IF T:= NESTPRT[I] < 0 THEN 24815000=05402000=
BEGIN 24820000=05402100=
DEPTH:= CALL[T.[25:13]-1].[12:13]; 24825000=05402100=
IF NESTPRT[I].[45:1] = 0 THEN 24830000=05402200=
NESTCUR:= NESTCUR+1; 24835000=05402200=
NESTPRT[I].[45:1]:= 1; 24840000=05402300=
END 24845000=05403000=
ELSE 24850000=05403000=
IF T.[38:13] ^= 0 THEN 24855000=05403000=
DEPTH:= T.[38:13] 24860000=05404000=
ELSE 24865000=05404000=
BEGIN 24870000=05404000=
M:= 0; 24875000=05404000=
NESTPRT[I]:= -T; 24880000=05404000=
J:= T.[25:13]; 24885000=05405000=
K:= CALL[J-1].[25:13]; 24890000=05405000=
FOR J:= J STEP 1 UNTIL K DO 24895000=05406000=
IF S:= DEPTH(CALL[J]) > M THEN 24900000=05407000=
M:= S; 24905000=05407000=
M:= DEPTH:= M+CALL[T.[25:13]-1].[12:13]; 24910000=05409000=
IF NESTCUR ^= 0 THEN 24915000=05409100=
IF NESTPRT[I].[45:1] = 0 THEN 24920000=05409200=
ELSE 24925000=05409300=
BEGIN 24930000=05409300=
T:= T & M[38:12:13]; 24935000=05409300=
NESTCUR:= NESTCUR-1 24940000=05409300=
END 24945000=05409400=
ELSE 24950000=05409400=
T:= T & M[38:12:13]; 24955000=05409400=
NESTPRT[I]:= T; 24960000=05409500=
END; 24965000=05410000=
END; 24970000=05411000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24975000=05411000=
PROCEDURE NESTSORT(L, U); 24980000=05411100=
VALUE 24985000=05411100=
L, 24990000=05411100=
U; 24995000=05411100=
REAL 25000000=05411100=
L, 25005000=05411100=
U; 25010000=05411100=
FORWARD; 25015000=05411100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25020000=05411100=
PROCEDURE SORTNEST; 25025000=05412000=
BEGIN 25030000=05413000=
ARRAY 25035000=05413000=
A[0:14]; 25040000=05413000=
REAL 25045000=05414000=
I, 25050000=05414000=
J, 25055000=05414000=
K, 25060000=05414000=
T; 25065000=05414000=
REAL 25070000=05414100=
P, 25075000=05414100=
Q; 25080000=05414100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25082000
PROCEDURE NESTFORM(I, N, L, LX, A); 25085000=05415000=
VALUE 25085500
I, N, LX; 25086000
REAL 25086500
I, N, LX; 25087000
ARRAY 25087500
L, A[0]; 25088000
BEGIN 25090000=05416000=
STREAMLOCALS; 25092000
REAL 25095000=05416000=
S, 25096000
TEMP; 25097000
25098000
STREAMSETDI(A, 0); 25100000=05417000=
STREAMSMEARLIT(15*8, 6" "); 25105000=05417000=
STREAMSETLOCDI(S); 25110000=05418000=
STREAMSKIPDI(+7); 25115000=05418000=
STREAMSETSI(L, LX); 25120000=05418000=
STREAMSKIPSI(+10); 25125000=05418000=
STREAMTRANSFERCHR(1); 25130000=05418000=
S:= STREAMTEMPD[0]; 25132000
STREAMSETDI(A, 0); 25135000=05419000=
STREAMSKIPDI(+I); 25140000=05419000=
TEMP:= STREAMGETDI; 25145000=05419000=
STREAMSKIPDI(+6); 25150000=05420000=
STREAMTRANSFERCHR(S); 25155000=05420000=
STREAMSETDI(A, TEMP); 25160000=05421000=
STREAMSETLOCSI(N); 25165000=05421000=
STREAMTRANSFERDEC(4); 25170000=05421000=
STREAMSETDI(A, TEMP); 25175000=05422000=
STREAMTRANSFERFILL(3); 25180000=05422000=
END; 25185000=05423000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25186000
FOR I:= PRTBASE STEP 1 UNTIL PRTOP DO 25190000=05424000=
IF NESTPRT[I] ^= 0 THEN 25195000=05425000=
BEGIN 25200000=05425100=
SORTPRT[Q]:= I; 25205000=05425100=
Q:= Q+1 25210000=05425100=
END; 25215000=05425100=
NESTSORT(0, Q:= Q-1); 25220000=05425200=
FOR P:= 0 STEP 1 UNTIL Q DO 25225000=05425300=
BEGIN 25230000=05425400=
I:= SORTPRT[P]; 25235000=05425400=
T:= NESTPRT[I]; 25240000=05425400=
NESTFORM(0, DEPTH(I), INFO[T.LINKR,*], T.LINKC, A); 25245000=05426000=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 25245100
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 25250000=05427000=
J:= T.[25:13]; 25255000=05428000=
K:= CALL[J-1].[25:13]; 25260000=05428000=
FOR J:= J STEP 1 UNTIL K DO 25265000=05429000=
BEGIN 25270000=05430000=
I:= CALL[J]; 25275000=05430000=
T:= NESTPRT[I]; 25280000=05430500=
NESTFORM(32, DEPTH(I), INFO[T.LINKR,*], T.LINKC, A); 25285000=05431000=
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 25285100
WRITE(LINE, 20, EBCDICBUFF[*]); 25290000=05432000=
END; 25295000=05433000=
WRITE(LINE[SPACE 2]); 25300000=05434000=
END; 25305000=05435000=
END; 25310000=05436000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25315000=05436000=
PROCEDURE NESTSORT(L, U); 25320000=05437000=
VALUE 25325000=05437000=
L, 25330000=05437000=
U; 25335000=05437000=
REAL 25340000=05437000=
L, 25345000=05437000=
U; 25350000=05437000=
BEGIN 25355000=05438000=
REAL 25360000=05438000=
I, 25365000=05438000=
J, 25370000=05438000=
K, 25375000=05438000=
M; 25380000=05438000=
LABEL 25385000=05439000=
AGAIN, 25390000=05439000=
TOP, 25395000=05439000=
BOTTOM, 25400000=05439000=
EXIT; 25405000=05439000=
IF L ^= U THEN 25410000=05440000=
BEGIN 25415000=05441000=
M:= (U+L) DIV 2; 25420000=05441000=
NESTSORT(L, M); 25425000=05442000=
NESTSORT(M+1, U); 25430000=05443000=
I:= K:= L; 25435000=05444000=
J:= M+1 AGAIN: 25440000=05445000=
IF I > M THEN 25445000=05445000=
GO TO TOP; 25450000=05445000=
IF J > U THEN 25455000=05446000=
GO TO BOTTOM; 25460000=05446000=
GT1:= NESTPRT[SORTPRT[I].[14:15]].LINK; 25465000=05447000=
GT2:= NESTPRT[SORTPRT[J].[14:15]].LINK; 25470000=05448000=
IF INFO[GT1.LINKR, (GT1+1).LINKC].[29:30] <= 25475000=05450000=
INFO[GT2.LINKR, (GT2+1).LINKC].[29:30] 25480000=05450000=
THEN 25485000=05450000=
GO TO BOTTOM; 25490000=05451000=
TOP: 25495000=05452000=
SORTPRT[K].[29:15]:= SORTPRT[J]; 25500000=05452000=
J:= J+1; 25505000=05453000=
IF K:= K+1 <= U THEN 25510000=05454000=
GO TO AGAIN 25515000=05454000=
ELSE 25520000=05454000=
GO TO EXIT; 25525000=05454000=
BOTTOM: 25530000=05455000=
SORTPRT[K].[29:15]:= SORTPRT[I]; 25535000=05455000=
I:= I+1; 25540000=05456000=
IF K:= K+1 <= U THEN 25545000=05457000=
GO TO AGAIN 25550000=05457000=
ELSE 25555000=05457000=
GO TO EXIT; 25560000=05457000=
EXIT: 25565000=05458000=
FOR I:= L STEP 1 UNTIL U DO 25570000=05458000=
SORTPRT[I]:= SORTPRT[I].[29:15]; 25575000=05459000=
END; 25580000=05460000=
END; 25585000=05461000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25590000=05461000=
25595000=06000000=
COMMENT ROUTINES IN THIS SECTION COMPILE CODE FOR ALL EXPRESSIONS;25600000=06000000=
25605000=06001000=
COMMENT AEXP IS THE ARITHMETIC EXRESSION ROUTINE; 25610000=06001000=
PROCEDURE AEXP; 25615000=06002000=
BEGIN 25620000=06003000=
IF ELCLASS = IFV THEN 25625000=06005000=
BEGIN 25630000=06005000=
IF IFEXP ^= ATYPE THEN 25635000=06005000=
ERR(102) 25640000=06006000=
END 25645000=06006000=
ELSE 25650000=06006000=
BEGIN 25655000=06006000=
ARITHSEC; 25660000=06006000=
SIMPARITH 25665000=06006000=
END 25670000=06007000=
END AEXP; 25675000=06007000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25680000=06007000=
25685000=06008000=
COMMENT ARITHSEC COMPILES FIRST PRIMARY IN AN ARITHMETIC EXPRESSION. 25690000=06008000=
IN PARTICULAR IT HANDLES P, +P, -P, AND -P*Q WHERE P 25695000=06009000=
AND Q ARE PRIMARIES; 25700000=06010000=
PROCEDURE ARITHSEC; 25705000=06011000=
BEGIN 25710000=06012000=
IF ELCLASS = ADOP THEN 25715000=06014000=
BEGIN 25720000=06014000=
STEPIT; 25725000=06015000=
IF ELBAT[I-1].ADDRESS ^= SUB THEN 25730000=06016000=
PRIMARY 25735000=06017000=
ELSE 25740000=06017000=
BEGIN 25745000=06017000=
PRIMARY; 25750000=06018000=
ENDTOG:= LINKTOG; 25755000=06021000=
EMITO(CHS); 25760000=06021000=
LINKTOG:= ENDTOG; 25765000=06022000=
ENDTOG:= FALSE 25770000=06022000=
END 25775000=06023000=
END 25780000=06023000=
ELSE 25785000=06023000=
PRIMARY 25790000=06023000=
END ARITHSEC; 25795000=06023000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25800000=06023000=
25805000=06024000=
COMMENT SIMPARITH COMPILES SIMPLE ARITHMETIC EXPRESSIONS ON THE 25810000=06024000=
ASSUMPTION THAT AN ARITHMETIC PRIMARY HAS ALREADY BEEN 25815000=06025000=
COMPILED. IT ALSO HANDLES THE CASE OF A CONCATENATE 25820000=06026000=
WHERE ACTUALPARAPART CAUSED THE VARIABLE ROUTINE TO 25825000=06027000=
COMPILE ONLY PART OF A PRIMARY. MOST OF THE WORK OF 25830000=06028000=
SIMPARITH IS DONE BY ARITHCOMP, AN ARTIFIAL ROUTINE 25835000=06029000=
WHICH DOES THE HIERARCHY ANALYSIS USING RECURSION. 25840000=06030000=
ARITHCOMP IS A SUBROUTINE ONLY TO GET THIS RECURSION; 25845000=06031000=
PROCEDURE SIMPARITH; 25850000=06032000=
BEGIN 25855000=06033000=
WHILE ELCLASS = AMPERSAND DO 25860000=06035000=
BEGIN 25865000=06035000=
STEPIT; 25870000=06035000=
PRIMARY; 25875000=06035000=
PARSE 25880000=06035000=
END; 25885000=06035000=
WHILE ELCLASS >= EQVOP DO 25890000=06036000=
ARITHCOMP 25895000=06036000=
END; 25900000=06036000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25905000=06036000=
25910000=06037000=
COMMENT ARITHCOMP IS THE GUTS OF THE ARITHMETIC EXPRESSION ROUTINE 25915000=06037000=
ANALYSIS. IT CALLS PRIMARY AT APPROPRIATE TIMES AND 25920000=06038000=
EMITS THE ARITHMETIC OPERATORS. THE HIERARCHY ANALYSIS 25925000=06039000=
IS OBTAINED BY RECURSION; 25930000=06040000=
PROCEDURE ARITHCOMP; 25935000=06041000=
BEGIN 25940000=06042000=
INTEGER 25945000=06042000=
OPERATOR, 25950000=06042000=
OPCLASS; 25955000=06042000=
DO BEGIN 25960000=06043000=
OPERATOR:= 1 & ELBAT[I][11:30:10]; 25965000=06044000=
COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 25970000=06045000=
ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [30:10] 25975000=06046000=
OF THE ELBAT WORD; 25980000=06047000=
OPCLASS:= ELCLASS; 25985000=06048000=
STEPIT; 25990000=06049000=
PRIMARY; 25995000=06049000=
BEGIN 26000000=06051000=
WHILE OPCLASS < ELCLASS DO 26005000=06052000=
ARITHCOMP; 26010000=06052000=
COMMENT THE CLASSES ARE ARRANGED IN ORDER OF HIERARCHY; 26015000=06053000=
EMIT(OPERATOR); 26020000=06054000=
EMIT(0); 26025000=06054100=
L:= L-1; 26030000=06054100=
STACKCT:= 1; 26035000=06054150=
END; 26040000=06054200=
END 26045000=06055000=
UNTIL OPCLASS ^= ELCLASS 26050000=06055000=
END ARITHCOMP; 26055000=06055000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26060000=06055000=
INTEGER PROCEDURE EXPRSS; 26065000=06057000=
BEGIN 26070000=06057000=
AEXP; 26075000=06057000=
EXPRSS:= ATYPE 26080000=06057000=
END; 26085000=06057000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26090000=06057000=
PROCEDURE POLISHER(EXPECT); 26095000=06060000=
VALUE 26100000=06060000=
EXPECT; 26105000=06060000=
REAL 26110000=06060000=
EXPECT; 26115000=06060000=
BEGIN 26120000=06061000=
LABEL 26125000=06061000=
EXIT; 26130000=06061000=
LABEL 26135000=06061900=
EL; 26140000=06061900=
REAL 26145000=06062000=
COUNT, 26150000=06062000=
T1, 26155000=06062000=
T2; 26160000=06062000=
BOOLEAN 26165000=06063000=
S; 26170000=06063000=
REAL 26175000=06063500=
SSS; 26180000=06063500=
INTEGER 26185000=06063500=
Z; 26190000=06063500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26192000
PROCEDURE WRITEOUT(C, N, L, LX); 26195000=06064000=
VALUE 26200000=06064000=
C, N, LX; 26205000=06064000=
REAL 26210000=06064000=
C, N, LX; 26211000
ARRAY 26212000
L[0]; 26213000
BEGIN 26215000=06065000=
STREAMLOCALS; 26216000
STREAMSETDI(L, LX); 26220000=06065000=
STREAMTRANSFERLIT(2, 6"S="); 26225000=06065000=
STREAMSETLOCSI(C); 26230000=06066000=
STREAMSKIPSI(+7); 26235000=06066000=
STREAMTRANSFERCHR(1); 26240000=06066000=
STREAMSETLOCSI(N); 26245000=06067000=
STREAMTRANSFERDEC(1); 26250000=06067000=
STREAMSMEARLIT(58*2, 6" "); 26255000=06067500=
END; 26260000=06068000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26262000
SSS:= STACKCTR; 26265000=06068500=
IF STEPI ^= LEFTPAREN THEN 26270000=06069000=
GO TO EXIT; 26275000=06069000=
DO BEGIN 26280000=06070000=
IF STEPI >= OPERATORS THEN 26285000=06071000=
BEGIN 26290000=06072000=
T1:= (T2:= ELBAT[I]).ADDRESS; 26295000=06072000=
S:= S OR COUNT-T2.[36:3] < 0; 26300000=06074000=
COUNT:= T2.[33:2]+COUNT-2; 26305000=06075000=
IF ELCLASS >= OPERATOR THEN 26310000=06076000=
BEGIN 26315000=06077000=
IF T1 ^= 0 THEN 26320000=06077000=
EMITO(T1); 26325000=06077000=
BEGIN 26330000=06078000=
T1:= T2.LINK+2; 26335000=06079000=
T2:= T2.INCR+T1; 26340000=06080000=
FOR T1:= T1 STEP 1 UNTIL T2 DO 26345000=06081000=
EMIT(TAKE(T1)); 26350000=06082000=
END; 26355000=06083000=
END 26360000=06084000=
ELSE 26365000=06084000=
BEGIN 26370000=06084000=
T2:= ELCLASS; 26375000=06084000=
IF STEPI ^= LITNO THEN 26380000=06085000=
BEGIN 26385000=06086000=
ERR(500); 26390000=06086000=
GO TO EXIT 26395000=06086000=
END; 26400000=06086000=
IF T2 = BITOP THEN 26405000=06087000=
EMIT(T1 & C[11:5:6]) 26410000=06088000=
ELSE 26415000=06088000=
IF T2 = HEXOP THEN 26420000=06089000=
EMIT(T1 & (T2:= C DIV 6)[11:2:3] & (C-T2*6)[8:2:3]) 26425000=06091000=
ELSE 26430000=06091000=
IF T2 = ISOLATE THEN 26435000=06092000=
BEGIN 26440000=06093000=
T2+C; 26445000=06093000=
IF STEPI ^= LITNO THEN 26450000=06095000=
BEGIN 26455000=06095000=
ERR(500); 26460000=06095000=
GO TO EXIT 26465000=06096000=
END; 26470000=06096000=
EMIT(Z:= ((T2+C-1) DIV 6-C DIV 6+1)*512+(48-T2-C) 26475000=06100000=
MOD 6*64+37); 26480000=06100000=
END 26485000=06101000=
END; 26490000=06101000=
STEPIT; 26495000=06102000=
S:= S OR COUNT < 0; 26500000=06103000=
END 26505000=06104000=
ELSE 26510000=06104000=
BEGIN 26515000=06104000=
IF ELCLASS = LABELID THEN 26520000=06104100=
BEGIN 26525000=06104200=
T1:= 2; 26530000=06104200=
EL: GT4:= TAKE(T2:= GIT(ELBAT[I])); 26535000=06104300=
PUT(L, T2); 26540000=06104400=
IF GT4 = 0 THEN 26545000=06104500=
GT4:= L; 26550000=06104500=
IF(GT4:= L-GT4) DIV 4 >= 128 THEN 26555000=06104510=
BEGIN 26560000=06104520=
GT4:= 0; 26565000=06104520=
FLAG(50); 26570000=06104520=
END; 26575000=06104520=
EMIT(GT4*4+T1); 26580000=06104600=
STEPIT; 26585000=06104700=
END 26590000=06105000=
ELSE 26595000=06105000=
IF ELCLASS ^= PERIOD THEN 26600000=06105000=
AEXP 26605000=06105000=
ELSE 26610000=06105000=
BEGIN 26615000=06105000=
T2:= 0; 26620000=06106000=
IF STEPI = PERIOD THEN 26625000=06106100=
BEGIN 26630000=06106200=
T2:= 1; 26635000=06106200=
STEPIT 26640000=06106200=
END; 26645000=06106200=
IF ELCLASS > IDMAX THEN 26650000=06106300=
BEGIN 26655000=06107000=
ERR(500); 26660000=06107000=
GO TO EXIT 26665000=06107000=
END; 26670000=06107000=
IF ELCLASS = LABELID THEN 26675000=06107100=
BEGIN 26680000=06107200=
T1:= 0; 26685000=06107200=
GO TO EL 26690000=06107200=
END; 26695000=06107200=
IF T1:= ELBAT[I].ADDRESS = 0 THEN 26700000=06108000=
BEGIN 26705000=06109000=
ERR(100); 26710000=06109000=
GO TO EXIT 26715000=06109000=
END; 26720000=06109000=
EMITL(T1); 26725000=06110000=
IF T1 > 1023 THEN 26730000=06110100=
IF T2 = 0 THEN 26735000=06110200=
FLAG(500) 26740000=06110300=
ELSE 26745000=06110300=
EMITO(PRTE); 26750000=06110300=
STEPIT; 26755000=06111000=
END; 26760000=06112000=
COUNT:= COUNT+1; 26765000=06112000=
END; 26770000=06113000=
END 26775000=06114000=
UNTIL ELCLASS ^= COMMA; 26780000=06114000=
IF ELCLASS ^= RTPAREN THEN 26785000=06115000=
BEGIN 26790000=06116000=
ERR(104); 26795000=06116000=
GO TO EXIT 26800000=06116000=
END; 26805000=06116000=
STEPIT; 26810000=06117000=
IF FALSE THEN 26815000=06118000=
BEGIN 26820000=06119000=
COUNT:= COUNT-EXPECT; 26825000=06119000=
WRITEOUT(IF COUNT < 0 THEN 6"-" ELSE IF COUNT = 0 THEN 6" " ELSE 26830000=06122000=
6"+", ABS(COUNT), LIN, 0); 26835000=06122000=
WRITELINE; 26840000=06123000=
END; 26845000=06124000=
EXIT: 26850000=06125000=
STACKCTR:= SSS; 26855000=06125000=
END; 26860000=06125000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26865000=06125000=
PROCEDURE PRIMARY; 26870000=06126000=
BEGIN 26875000=06127000=
LABEL 26880000=06128000=
L1, 26885000=06128000=
L2, 26890000=06128000=
L3, 26895000=06128000=
L4, 26900000=06128000=
L5, 26905000=06128000=
L6, 26910000=06128000=
L7, 26915000=06128000=
L8, 26920000=06128000=
L9, 26925000=06128000=
L10, 26930000=06129000=
L11, 26935000=06129000=
L12, 26940000=06129000=
L13, 26945000=06129000=
L14, 26950000=06129000=
L15, 26955000=06129000=
L16, 26960000=06129000=
L17, 26965000=06129000=
L18, 26970000=06129000=
L19, 26975000=06129000=
L20, 26980000=06130000=
L21, 26985000=06130000=
L22, 26990000=06130000=
L23, 26995000=06130000=
L24, 27000000=06130000=
L25, 27005000=06130000=
L26, 27010000=06130000=
L27, 27015000=06130000=
L28, 27020000=06130000=
L29, 27025000=06130000=
L30, 27030000=06131000=
L31, 27035000=06131000=
L32, 27040000=06131000=
L33, 27045000=06131000=
L34, 27050000=06131000=
L35, 27055000=06131000=
L36, 27060000=06131000=
L37, 27065000=06131000=
L38, 27070000=06131000=
L39; 27075000=06131000=
SWITCH 27080000=06132000=
S:= L1, 27085000=06133000=
L2, 27090000=06133000=
L3, 27095000=06133000=
L4, 27100000=06133000=
L5, 27105000=06133000=
L6, 27110000=06133000=
L7, 27115000=06133000=
L8, 27120000=06133000=
L9, 27125000=06133000=
L10, 27130000=06134000=
L11, 27135000=06134000=
L12, 27140000=06134000=
L13, 27145000=06134000=
L14, 27150000=06134000=
L15, 27155000=06134000=
L16, 27160000=06134000=
L17, 27165000=06134000=
L18, 27170000=06134000=
L19, 27175000=06134000=
L20, 27180000=06135000=
L21, 27185000=06135000=
L22, 27190000=06135000=
L23, 27195000=06135000=
L24, 27200000=06135000=
L25, 27205000=06135000=
L26, 27210000=06135000=
L27, 27215000=06135000=
L28, 27220000=06135000=
L29, 27225000=06135000=
L30, 27230000=06136000=
L31, 27235000=06136000=
L32, 27240000=06136000=
L33, 27245000=06136000=
L34, 27250000=06136000=
L35, 27255000=06136000=
L36, 27260000=06136000=
L37, 27265000=06136000=
L38, 27270000=06136000=
L39; 27275000=06136000=
LABEL 27280000=06137000=
EXIT, 27285000=06137000=
RP, 27290000=06137000=
LDOT, 27295000=06137000=
LAMPER; 27300000=06137000=
REAL 27302000
TVAR; % FOR VARIABLE() NAME PARAM 27304000
GO TO S[ELCLASS]; 27305000=06138000=
IF ELCLASS = LFTBRKET THEN 27310000=06139000=
BEGIN 27315000=06140000=
STEPIT; 27320000=06140000=
TVAR:= FL; 27322000
VARIABLE(TVAR); 27325000=06140000=
IF ELCLASS ^= RTBRKET THEN 27330000=06141000=
BEGIN 27335000=06142000=
ERR(118); 27340000=06142000=
GO TO EXIT 27345000=06142000=
END; 27350000=06142000=
STEPIT; 27355000=06143000=
GO TO LDOT; 27360000=06144000=
END; 27365000=06145000=
IF ELCLASS = NOTOP THEN 27370000=06146000=
BEGIN 27375000=06147000=
STEPIT; 27380000=06147000=
PRIMARY; 27385000=06147000=
EMITLNG; 27390000=06148000=
EMIT(0); 27395000=06148000=
L:= L-1; 27400000=06148000=
GO TO EXIT; 27405000=06149000=
END; 27410000=06150000=
IF ELCLASS = UNKNOWNID THEN 27415000=06151000=
ERR(100); 27420000=06151000=
L1: 27425000=06152000=
L2: 27430000=06152000=
L3: 27435000=06152000=
L4: 27440000=06152000=
L5: 27445000=06152000=
L6: 27450000=06152000=
L8: 27455000=06152000=
L9: 27460000=06152000=
L10: 27465000=06152000=
L12: 27470000=06152000=
L13: 27475000=06152000=
L16: 27480000=06152000=
L17: 27485000=06152000=
L20: 27490000=06154000=
L21: 27490500
L24: 27491000
L25: 27491500
L28: 27492000
L29: 27492500
L32: 27493000
ERR(103); 27493500
GO TO EXIT; 27495000=06154000=
L7: SUBHAND(FALSE); 27500000=06156000=
GO TO LDOT; 27505000=06156000=
L11: 27510000=06158000=
IMPFUN; 27515000=06158000=
STACKCT:= STACKCT-1; 27520000=06158000=
GO TO LDOT; 27525000=06158000=
L14: 27530000=06159000=
L15: 27535000=06160000=
STRMPROCSTMT; 27540000=06160000=
GO TO LDOT; 27545000=06160000=
L18: 27550000=06161000=
L19: 27555000=06162000=
PROCSTMT(FALSE); 27560000=06162000=
GO TO LDOT; 27565000=06162000=
L22: 27570000=06163000=
L23: 27575000=06163000=
L26: 27580000=06163000=
L27: 27585000=06163000=
L30: 27590000=06163000=
L31: 27595000=06164000=
TVAR:= FP; 27596000
VARIABLE(TVAR); 27600000=06164000=
GO TO LAMPER; 27605000=06164000=
L33: 27610000=06165000=
L35: 27615000=06166000=
EMIT(0 & ELBAT[I][11:30:10]); 27620000=06166000=
STEPIT; 27625000=06166000=
GO TO LAMPER; 27630000=06166000=
L34: 27635000=06167000=
L36: 27640000=06168000=
EMITNUM(C); 27645000=06168000=
STEPIT; 27650000=06168000=
GO TO LAMPER; 27655000=06168000=
L38: 27660000=06170000=
POLISHER(1); 27665000=06170000=
GO TO LDOT; 27670000=06170000=
L39: 27675000=06172000=
STEPIT; 27680000=06172000=
PRIMARY; 27685000=06172000=
STACKCT:= STACKCT-1; 27690000=06172000=
EMITO(LOD); 27695000=06172500=
GO TO LDOT; 27700000=06172500=
L37: 27705000=06174000=
STEPIT; 27710000=06174000=
AEXP; 27715000=06174000=
STACKCT:= STACKCT-1; 27720000=06174500=
IF ELCLASS ^= RTPAREN THEN 27725000=06175000=
BEGIN 27730000=06176000=
ERR(104); 27735000=06176000=
GO TO EXIT 27740000=06176000=
END; 27745000=06176000=
STEPIT; 27750000=06177000=
LDOT: 27755000=06178000=
DOT; 27760000=06178000=
LAMPER: 27765000=06179500=
STACKCT:= STACKCT+1; 27770000=06179500=
WHILE ELCLASS = AMPERSAND DO 27775000=06180000=
BEGIN 27780000=06181000=
STEPIT; 27785000=06181000=
PRIMARY; 27790000=06181000=
PARSE 27795000=06181000=
END; 27800000=06181000=
EXIT: 27805000=06182000=
END PRIMARY; 27810000=06182000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27815000=06182000=
PROCEDURE IMPFUN; 27820000=06183000=
BEGIN 27825000=06184000=
REAL 27830000=06184000=
T1, 27835000=06184000=
T2; 27840000=06184000=
T1:= (T2:= ELBAT[I]).ADDRESS; 27845000=06185000=
PANA; 27850000=06186000=
IF T1 ^= 0 THEN 27855000=06187000=
EMITO(T1); 27860000=06187000=
ELSE 27865000=06188000=
BEGIN 27870000=06188000=
T1:= T2.LINK+T2.INCR+1; 27875000=06189000=
T2:= T2.LINK+2; 27880000=06190000=
FOR T2:= T2 STEP 1 UNTIL T1 DO 27885000=06191000=
EMIT(TAKE(T2)); 27890000=06191000=
END; 27895000=06192000=
END; 27900000=06193000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27905000=06193000=
PROCEDURE SUBHAND(FROM); 27910000=06194000=
VALUE 27915000=06194000=
FROM; 27920000=06194000=
BOOLEAN 27925000=06194000=
FROM; 27930000=06194000=
BEGIN 27935000=06195000=
LABEL 27940000=06195000=
EXIT; 27945000=06195000=
REAL 27950000=06196000=
T1; 27955000=06196000=
T1:= TAKEFRST; 27960000=06197000=
IF ELCLASS ^= SUBID AND FROM THEN 27965000=06198000=
BEGIN 27970000=06199000=
IF STEPI ^= ASSIGNOP THEN 27975000=06199000=
BEGIN 27980000=06200000=
FLAG(503); 27985000=06200000=
GO TO EXIT 27990000=06200000=
END; 27995000=06200000=
STEPIT; 28000000=06201000=
AEXP; 28005000=06202000=
EMITO(XCH); 28010000=06203000=
GO TO EXIT; 28015000=06204000=
END; 28020000=06205000=
EMITL((L+6) DIV 4-(T1.[23:12]-1) DIV 4); 28025000=06206000=
EMITB(BBW, BUMPL, T1.[11:12]); 28030000=06207000=
STEPIT; 28035000=06208000=
ADJUST; 28040000=06208500=
EXIT: 28045000=06209000=
END SUBHAND; 28050000=06209000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28055000=06209000=
28060000=06292000=
COMMENT IFEXP COMPILES CONDITIONAL EXPRESSIONS. IT REPORTS THE TYPE 28065000=06292000=
OF EXPRESSIONS AS EXPRSS REPORTS; 28070000=06293000=
INTEGER PROCEDURE IFEXP; 28075000=06294000=
BEGIN 28080000=06295000=
INTEGER 28085000=06295000=
TYPE, 28090000=06295000=
THENBRANCH, 28095000=06295000=
ELSEBRANCH; 28100000=06295000=
IFCLAUSE; 28105000=06296000=
STACKCT:= 0; 28110000=06296500=
THENBRANCH:= BUMPL; 28115000=06297000=
COMMENT SAVE L FOR LATER FIXUP; 28120000=06298000=
IFEXP:= TYPE:= EXPRSS; COMMENT COMPILE 1ST EXPRSS; 28125000=06299000=
STACKCT:= 0; 28135000=06299500=
ELSEBRANCH:= BUMPL; 28140000=06300000=
EMITB(BFC, THENBRANCH, L); 28145000=06301000=
IF ELCLASS ^= ELSEV THEN 28150000=06302000=
ERR(155) 28155000=06302000=
ELSE 28160000=06302000=
BEGIN 28165000=06302000=
STEPIT; 28170000=06303000=
AEXP; 28175000=06305000=
STACKCT:= 1; COMMENT THIS COMPILES PROPER TYPE SECOND EXPRSS; 28180000=06305000=
EMITB(BFW, ELSEBRANCH, L); 28190000=06307000=
EMIT(1); 28195000=06308000=
L:= L-1; 28200000=06308000=
COMMENT THIS IS USED BY EMITLNG TO CLEANUP CODE. COMPARE WITH 28205000=06309000=
BOOSEC, BOOCOMP, AND RELATION; 28210000=06310000=
END 28215000=06311000=
END IFEXP; 28220000=06311000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28225000=06311000=
28230000=06312000=
COMMENT PARSE COMPILES CODE FOR THE CONCATENATE; 28235000=06312000=
PROCEDURE PARSE; 28240000=06313000=
BEGIN 28245000=06314000=
INTEGER 28250000=06314000=
FIRST, 28255000=06314000=
SECOND, 28260000=06314000=
THIRD; 28265000=06314000=
LABEL 28270000=06315000=
EXIT; 28275000=06315000=
IF ELCLASS = LFTBRKET THEN 28280000=06316000=
IF STEPI = LITNO THEN 28285000=06317000=
IF STEPI = COLON THEN 28290000=06318000=
IF STEPI = LITNO THEN 28295000=06319000=
IF STEPI = COLON THEN 28300000=06320000=
IF STEPI = LITNO THEN 28305000=06321000=
IF STEPI = RTBRKET THEN 28310000=06322000=
COMMENT IF TEST ARE PASSED THEN SYNTAX IS CORRECT; 28315000=06323000=
IF(FIRST:= ELBAT[I-5].ADDRESS)* 28320000=06325000=
(SECOND:= ELBAT[I-3].ADDRESS)* 28325000=06326000=
(THIRD:= ELBAT[I-1].ADDRESS) ^= 0 28330000=06326000=
THEN 28335000=06326000=
IF FIRST+THIRD <= 48 THEN 28340000=06327000=
IF SECOND+THIRD <= 48 THEN 28345000=06328000=
COMMENT IF TEST ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 28350000=06329000=
BEGIN 28355000=06330000=
STEPIT; 28360000=06331000=
EMITD(SECOND, FIRST, THIRD); 28365000=06332000=
STACKCT:= 1; 28370000=06332500=
GO TO EXIT 28375000=06333000=
END; 28380000=06333000=
ERR(113); COMMENT ERROR IF SYNTAX OR RANGE FAILS; 28385000=06334000=
EXIT: 28395000=06335000=
END PARSE; 28400000=06335000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28405000=06335000=
28410000=06336000=
COMMENT DOT COMPILES CODE FOR PARTIAL WORD DESIGNATORS, EXCEPT FOR 28415000=06336000=
THOSE CASES HANDLED BY THE VARIABLE ROUTINE; 28420000=06337000=
PROCEDURE DOT; 28425000=06338000=
BEGIN 28430000=06339000=
INTEGER 28435000=06339000=
FIRST, 28440000=06339000=
SECOND; 28445000=06339000=
LABEL 28450000=06339000=
EXIT; 28455000=06339000=
IF ELCLASS = PERIOD THEN 28460000=06340000=
BEGIN 28465000=06340000=
IF DOTSYNTAX(FIRST, SECOND) THEN 28470000=06341000=
GO TO EXIT; 28475000=06341000=
EMITI(0, FIRST, SECOND); 28480000=06344000=
STEPIT; 28485000=06345000=
EXIT: 28490000=06346000=
END 28495000=06346000=
END DOT; 28500000=06346000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28505000=06346000=
PROCEDURE IFCLAUSE; 28510000=06409000=
BEGIN 28515000=06410000=
STEPIT; 28520000=06410000=
BEXP; 28525000=06410000=
IF ELCLASS ^= THENV THEN 28530000=06411000=
ERR(116) 28535000=06411000=
ELSE 28540000=06411000=
STEPIT 28545000=06411000=
END IFCLAUS; 28550000=06411000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28555000=06411000=
28560000=06412000=
COMMENT PANA COMPILES THE CONSTRUCT: (<ARIT. EXP.>); 28565000=06412000=
PROCEDURE PANA; 28570000=06413000=
BEGIN 28575000=06414000=
IF STEPI ^= LEFTPAREN THEN 28580000=06415000=
ERR(105) 28585000=06416000=
ELSE 28590000=06416000=
BEGIN 28595000=06416000=
STEPIT; 28600000=06416000=
AEXP; 28605000=06416000=
IF ELCLASS ^= RTPAREN THEN 28610000=06416000=
ERR(104) 28615000=06417000=
ELSE 28620000=06417000=
STEPIT 28625000=06417000=
END 28630000=06417000=
END PANA; 28635000=06417000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28640000=06417000=
28645000=06418000=
COMMENT BANA COMPILES THE CONSTRUCT: [<ARITH. EXP.>]; 28650000=06418000=
PROCEDURE BANA; 28655000=06419000=
BEGIN 28660000=06420000=
IF STEPI ^= LFTBRKET THEN 28665000=06421000=
ERR(117) 28670000=06422000=
ELSE 28675000=06422000=
BEGIN 28680000=06422000=
STEPIT; 28685000=06422000=
AEXP; 28690000=06422000=
IF ELCLASS ^= RTBRKET THEN 28695000=06422000=
ERR(118) 28700000=06423000=
ELSE 28705000=06423000=
STEPIT 28710000=06423000=
END 28715000=06423000=
END BANA; 28720000=06423000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28725000=06423000=
28730000=07000000=
COMMENT THIS SECTION CONTAINS THE STATEMENT ROUTINES; 28735000=07000000=
28740000=07001000=
COMMENT COMPOUNDTAIL COMPILES COMPOUNDTAILS. IT ALSO ELIMINATES 28745000=07001000=
COMMENTS FOLLOWING ENDS. AFTER ANY ERROR, ERROR MESSAGES 28750000=07002000=
ARE SUPPRESSED. COMPOUNDTAIL IS PARTIALLY RESPONSIBLE 28755000=07003000=
FOR RESTORING THE ABILITY TO WRITE ERROR MESSAGES. SOME 28760000=07004000=
CARE IS ALSO TAKEN TO PREVENT READING BEYOND THE "END."; 28765000=07005000=
PROCEDURE COMPOUNDTAIL; 28770000=07006000=
BEGIN 28775000=07007000=
LABEL 28780000=07007000=
ANOTHER; 28785000=07007000=
I:= I-1; 28790000=07008000=
BEGINCTR:= BEGINCTR+1; 28795000=07008000=
ANOTHER: 28800000=07009000=
ERRORTOG:= TRUE; COMMENT ALLOW ERROR MESSAGES; 28805000=07009000=
STEPIT; 28815000=07010000=
IF STREAMTOG THEN 28820000=07011000=
STREAMSTMT 28825000=07011000=
ELSE 28830000=07011000=
STMT; 28835000=07011000=
IF ELCLASS = SEMICOLON THEN 28840000=07012000=
GO TO ANOTHER; 28845000=07012000=
IF ELCLASS ^= ENDV THEN 28850000=07014000=
BEGIN 28855000=07014000=
ERR(119); 28860000=07015000=
GO TO ANOTHER 28865000=07015000=
END; 28870000=07015000=
ENDTOG:= TRUE; 28875000=07016000=
DO 28880000=07017000=
STOPDEFINE:= TRUE 28885000=07018000=
UNTIL STEPI <= ENDV AND ELCLASS >= UNTILV OR NOT ENDTOG; 28890000=07019000=
ENDTOG:= FALSE; 28895000=07020000=
IF BEGINCTR:= BEGINCTR-1 ^= 0 EQV ELCLASS = PERIOD THEN 28900000=07022000=
BEGIN 28905000=07022000=
IF BEGINCTR = 0 THEN 28910000=07023000=
BEGIN 28915000=07024000=
FLAG(143); 28920000=07024000=
BEGINCTR:= 1; 28925000=07024000=
GO ANOTHER 28930000=07024000=
END; 28935000=07024000=
FLAG(120); 28940000=07025000=
FCR:= (LCR:= 9)-9; 28945000=07025010=
SBUFF:= CBUFF; 28946000
IF LISTER THEN 28950000=07025020=
PRINTCARD; 28955000=07025020=
END; 28965000=07025030=
IF ELCLASS = PERIOD THEN 28970000=07026000=
BEGIN 28975000=07027000=
GT5:= 6"ND;END."&6"E"[46:4:5]; 28980000=07028000=
CBUFF[0]:= GT5; 28985000=07029000=
LASTUSED:= 4; 28990000=07030000=
ELBAT[I:= I-2]:= SPECIAL[20]; 28995000=07031000=
ELCLASS:= SEMICOLON 29000000=07032000=
END 29005000=07033000=
END COMPOUNDTAIL; 29010000=07033000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29015000=07033000=
REAL 29020000=07034000=
AXNUM; 29025000=07034000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29026000
PROCEDURE ACTUALPARAPART(SBIT, INDEX); 29030000=07035000=
VALUE 29035000=07035000=
SBIT, 29040000=07035000=
INDEX; 29045000=07035000=
BOOLEAN 29050000=07036000=
SBIT; 29055000=07036000=
REAL 29060000=07036000=
INDEX; 29065000=07036000=
BEGIN 29070000=07037000=
LABEL 29075000=07037000=
EXIT, 29080000=07037000=
COMMON, 29085000=07037000=
ANOTHER, 29090000=07037000=
POL; 29095000=07037000=
REAL 29100000=07038000=
PCTR, 29105000=07038000=
SCLASS, 29110000=07038000=
ACLASS, 29115000=07038000=
TVAR; 29115500
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29116000
PROCEDURE WRITEAX(LINE, ACCUM, AX, N, SEQ, SX); 29120000=07038100=
VALUE 29125000=07038100=
AX, N, SX; 29130000=07038100=
ARRAY 29131000
LINE, ACCUM, SEQ[0]; 29132000
REAL 29133000
AX, N, SX; 29134000
BEGIN 29135000=07038200=
STREAMLOCALS; 29136000
STREAMSETDI(LINE, 0); 29140000=07038200=
STREAMSMEARLIT(15*8, 6" "); 29145000=07038200=
STREAMSETDI(LINE, 0); 29150000=07038300=
STREAMSETSI(SEQ, SX); 29155000=07038300=
STREAMSKIPSI(-16); 29160000=07038300=
STREAMTRANSFERWDS(1); 29165000=07038300=
STREAMSKIPDI(+4); 29170000=07038400=
STREAMTRANSFERLIT(8, 6"ACCIDENT"); 29175000=07038400=
STREAMTRANSFERLIT(8, 6"AL ENTRY"); 29176000
STREAMTRANSFERLIT(4, 6" AT "); 29178000
STREAMSETSI(ACCUM, AX); 29180000=07038500=
STREAMSKIPSI(+3); 29185000=07038500=
STREAMTRANSFERCHR(N); 29190000=07038500=
STREAMSETSI(SEQ, SX); 29195000=07038600=
STREAMSETDI(SEQ, SX); 29200000=07038600=
STREAMSKIPDI(-16); 29205000=07038600=
STREAMTRANSFERWDS(1); 29210000=07038600=
END; 29215000=07038700=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29216000
BOOLEAN 29220000=07039000=
VBIT, 29225000=07039000=
IDBIT; 29230000=07039000=
PCTR:= 1; 29235000=07040000=
ANOTHER: 29240000=07041000=
ACLASS:= STEPI & 0[0:0:1]; 29245000=07041000=
STACKCT:= 0; 29250000=07041200=
GT1:= TAKE(INDEX+PCTR); 29255000=07042000=
VBIT:= BOOLEAN(GT1.VO); 29260000=07043000=
SCLASS:= GT1.CLASS & 0[0:0:1]; 29265000=07044000=
IF VBIT THEN 29270000=07045000=
BEGIN 29275000=07045000=
AEXP; 29280000=07045000=
GO TO COMMON 29285000=07045000=
END; 29290000=07045000=
IF SBIT THEN 29295000=07046000=
SCLASS:= NAMEID; 29300000=07046000=
IDBIT:= BOOID < ACLASS AND ACLASS < LABELID; 29305000=07047000=
IF SCLASS = NAMEID THEN 29310000=07048000=
BEGIN 29315000=07049000=
IF IDBIT THEN 29320000=07050000=
BEGIN 29322000
TVAR:= FL; 29324000
VARIABLE(TVAR); 29325000=07050000=
END; 29326000
POL: 29330000=07052000=
IF ELCLASS = POLISHV THEN 29335000=07052000=
POLISHER(1) 29340000=07053000=
ELSE 29345000=07053000=
ERR(IF ELCLASS = 0 THEN 0 ELSE 123); 29350000=07053000=
GO TO COMMON; 29355000=07054000=
END; 29360000=07055000=
IF SCLASS = REALARRAYID THEN 29365000=07056000=
IF ACLASS = REALARRAYID THEN 29370000=07057000=
BEGIN 29375000=07058000=
TVAR:= FL; 29376000
VARIABLE(TVAR); 29380000=07058000=
GO TO COMMON 29385000=07058000=
END 29390000=07059000=
ELSE 29395000=07059000=
GO TO POL; 29400000=07059000=
IF SCLASS ^= REALID THEN 29405000=07060000=
BEGIN 29410000=07061000=
FLAG(503); 29415000=07061000=
AEXP; 29420000=07062000=
ERRORTOG:= TRUE; 29425000=07063000=
GO TO COMMON; 29430000=07064000=
END; 29435000=07065000=
GT1:= TABLE(I+1); 29440000=07066000=
IF GT1 = COMMA OR GT1 = RTPAREN THEN 29445000=07067000=
BEGIN 29450000=07068000=
IF IDBIT THEN 29455000=07068000=
BEGIN 29460000=07069000=
IF ACLASS = REALID AND BOOLEAN(ELBAT[I].FORMAL) THEN 29465000=07070000=
BEGIN 29470000=07070000=
CHECKER(ELBAT[I]); 29475000=07070500=
EMITPAIR(ELBAT[I], ADDRESS, LOD); 29480000=07071000=
STEPIT; 29485000=07072000=
END 29490000=07073000=
ELSE 29495000=07073000=
BEGIN 29496000
TVAR:= FL; 29498000
VARIABLE(TVAR); 29500000=07073000=
END; 29502000
GO TO COMMON 29505000=07074000=
END; 29510000=07074000=
IF ELCLASS <= STRNGCON AND ELCLASS > LABELID THEN 29515000=07076000=
BEGIN 29520000=07076000=
PRIMARY; 29525000=07076000=
GOTO COMMON 29530000=07076000=
END; 29535000=07076000=
END; 29540000=07077000=
EMITO(NOP); 29545000=07078000=
EMITO(NOP); 29550000=07078000=
SCLASS:= L; 29555000=07079000=
ADJUST; 29560000=07080000=
ACLASS:= L.[11:10]; 29565000=07081000=
IF IDBIT THEN 29570000=07082000=
BEGIN 29575000=07083000=
TVAR:= FL; 29576000
VARIABLE(TVAR); 29580000=07083000=
IF ELCLASS < AMPERSAND THEN 29585000=07084000=
GO TO COMMON; 29590000=07084000=
SIMPARITH; 29595000=07085000=
END 29600000=07086000=
ELSE 29605000=07086000=
AEXP; 29610000=07086000=
IF LISTER THEN 29615000=07086100=
BEGIN 29620000=07086200=
ACCUM[1]:= Q; 29625000=07086200=
WRITEAX 29630000=07086400=
(LIN, ACCUM, 1, Q.[35:6], INFO[LASTSEQROW,*], LASTSEQUENCE); 29635000=07086400=
WRITELINE; 29645000=07086500=
END; 29650000=07086600=
AXNUM:= AXNUM+1; 29655000=07086700=
EMITO(RTS); 29660000=07087000=
EMITB(BFW, SCLASS, L); 29665000=07088000=
EMITNUM(ACLASS); 29670000=07089000=
EMITPAIR(TAKE(PROINFO).ADDRESS, LOD); 29675000=07090000=
EMITO(INX); 29680000=07091000=
EMITN(512); 29685000=07092000=
EMITD(33, 18, 15); 29690000=07093000=
EMIT(0); 29695000=07093100=
EMITD(5, 5, 1); 29700000=07093200=
COMMON: 29705000=07094000=
PCTR:= PCTR+1; 29710000=07094000=
IF ELCLASS = COMMA THEN 29715000=07095000=
GO TO ANOTHER; 29720000=07095000=
IF ELCLASS ^= RTPAREN THEN 29725000=07096000=
BEGIN 29730000=07097000=
ERR(129); 29735000=07097000=
GO TO EXIT 29740000=07097000=
END; 29745000=07097000=
IF TAKE(INDEX).NODIMPART+1 ^= PCTR THEN 29750000=07098000=
BEGIN 29755000=07099000=
ERR(128); 29760000=07099000=
GO TO EXIT 29765000=07099000=
END; 29770000=07099000=
STEPIT; 29775000=07100000=
STACKCT:= 0; 29780000=07100500=
EXIT: 29785000=07101000=
END ACTUAL PARAPART; 29790000=07101000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29795000=07101000=
PROCEDURE PROCSTMT(FROM); 29800000=07391000=
VALUE 29805000=07391000=
FROM; 29810000=07391000=
BOOLEAN 29815000=07391000=
FROM; 29820000=07391000=
BEGIN 29825000=07392000=
REAL 29830000=07393000=
HOLE, 29835000=07393000=
ADDRESS, 29840000=07393000=
TVAR; 29842000
REAL 29845000=07393100=
J; 29850000=07393100=
LABEL 29855000=07393100=
OK; 29860000=07393100=
LABEL 29865000=07394000=
EXIT; 29870000=07394000=
SCATTERELBAT; 29875000=07395000=
HOLE:= ELBAT[I]; 29880000=07396000=
ADDRESS:= ADDRSF; 29885000=07397000=
IF NESTOG THEN 29890000=07397100=
IF MODE ^= 0 THEN 29895000=07397200=
IF TABLE(I+1) ^= ASSIGNOP THEN 29900000=07397210=
BEGIN 29905000=07397300=
FOR J:= CALLINFO STEP 1 UNTIL CALLX DO 29910000=07397300=
IF CALL[J] = ADDRESS THEN 29915000=07397400=
GO TO OK; 29920000=07397400=
CALL[CALLX:= CALLX+1]:= ADDRESS; 29925000=07397500=
OK: 29930000=07397600=
END; 29935000=07397600=
CHECKER(HOLE); 29940000=07398000=
IF ELCLASS ^= PROCID THEN 29945000=07399000=
IF NOT FORMALF THEN 29950000=07400000=
IF TABLE(I+1) = ASSIGNOP THEN 29955000=07401000=
BEGIN 29960000=07402000=
TVAR:= 2-REAL(FROM); 29962000
VARIABLE(TVAR); 29965000=07402000=
GO TO EXIT 29970000=07402000=
END; 29975000=07402000=
COMMENT CALL VARIABLE TO HANDLE THIS ASSIGNMENT OPERATION; 29980000=07403000=
IF ELCLASS ^= PROCID EQV FROM THEN 29985000=07405000=
BEGIN 29990000=07405000=
ERR(159); 29995000=07405000=
GO TO EXIT 30000000=07405000=
END; 30005000=07405000=
COMMENT IT IS PROCEDURE IF AND ONLY WE COME FORM STMT; 30010000=07406000=
STEPIT; 30015000=07407000=
EMITO(MKS); 30020000=07408000=
IF ELCLASS = LEFTPAREN THEN 30025000=07410000=
ACTUALPARAPART(FALSE, GIT(HOLE)) 30030000=07411000=
ELSE 30035000=07411000=
IF FORMALF THEN 30040000=07411000=
L:= L-1; 30045000=07411000=
ELSE 30050000=07412000=
IF TAKE(GIT(HOLE)).NODIMPART ^= 0 THEN 30055000=07412000=
ERR(128); 30060000=07412000=
EMITV(ADDRESS); 30065000=07413000=
EXIT: 30070000=07425000=
END PROCSTMT; 30075000=07425000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30080000=07425000=
PROCEDURE STRMPROCSTMT; 30085000=07426000=
BEGIN 30090000=07427000=
REAL 30095000=07427000=
WHOLE, 30100000=07427000=
FIX, 30105000=07427000=
T1; 30110000=07427000=
WHOLE:= ELBAT[I]; 30115000=07430000=
FIX:= -1; 30120000=07430000=
IF ELCLASS ^= STRPROCID THEN 30125000=07431000=
EMIT(0); 30130000=07431000=
IF WHOLE.LVL ^= 1 THEN 30135000=07432000=
BEGIN 30140000=07433000=
FIX:= L; 30145000=07433000=
L:= L+1 30150000=07433000=
END; 30155000=07433000=
EMITO(MKS); 30160000=07434000=
T1:= TAKEFRST.[46:6]; 30165000=07435000=
FOR GT1:= 1 STEP 1 UNTIL T1 DO 30170000=07436000=
EMIT(0); 30175000=07436000=
IF STEPI ^= LEFTPAREN THEN 30180000=07437000=
ERR(128) 30185000=07438000=
ELSE 30190000=07438000=
BEGIN 30195000=07438000=
ACTUALPARAPART(TRUE, GIT(WHOLE)); 30200000=07438000=
IF FIX < 0 THEN 30205000=07439000=
EMITV(WHOLE.ADDRESS) 30210000=07440000=
ELSE 30215000=07440000=
BEGIN 30220000=07440000=
T1:= L; 30225000=07440000=
L:= FIX; 30230000=07440000=
WHOLE:= TAKE(GIT(WHOLE)); 30235000=07441000=
EMITNUM(T1+2-WHOLE.[31:12]); 30240000=07442000=
L:= T1; 30245000=07443000=
EMITB(BBW, BUMPL, WHOLE.[19:12]); 30250000=07444000=
END; 30255000=07445000=
END 30260000=07446000=
END STRMPROCSTMT; 30265000=07446000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30270000=07446000=
INTEGER PROCEDURE BAE; 30275000=07458000=
BEGIN 30280000=07459000=
BAE:= BUMPL; 30285000=07459000=
CONSTANTCLEAN; 30290000=07459000=
ADJUST 30295000=07459000=
END BAE; 30300000=07459000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30305000=07459000=
30310000=07460000=
COMMENT RELSESTMT COMPILES THE RELEASE STATEMENT; 30315000=07460000=
30320000=07481000=
COMMENT DOSTMT HANDLES THE DO STATEMENT; 30325000=07481000=
PROCEDURE DOSTMT; 30330000=07482000=
BEGIN 30335000=07483000=
INTEGER 30340000=07483000=
TL; 30345000=07483000=
FOULED:= L; 30350000=07483500=
STEPIT; 30355000=07485000=
TL:= L; 30360000=07485000=
STMT; 30365000=07485000=
IF ELCLASS ^= UNTILV THEN 30370000=07485000=
ERR(131) 30375000=07486000=
ELSE 30380000=07486000=
BEGIN 30385000=07486000=
STEPIT; 30390000=07487000=
BEXP; 30395000=07487000=
EMITB(BBC, BUMPL, TL) 30400000=07487000=
END 30405000=07488000=
END DOSTMT; 30410000=07488000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30415000=07488000=
30420000=07489000=
COMMENT WHILESTMT COMPILES THE WHILE STATEMENT; 30425000=07489000=
PROCEDURE WHILESTMT; 30430000=07490000=
BEGIN 30435000=07491000=
INTEGER 30440000=07491000=
BACK, 30445000=07491000=
FRONT; 30450000=07491000=
FOULED:= L; 30455000=07491500=
STEPIT; 30460000=07493000=
BACK:= L; 30465000=07493000=
BEXP; 30470000=07493000=
FRONT:= BUMPL; 30475000=07493000=
IF ELCLASS ^= DOV THEN 30480000=07494000=
ERR(132) 30485000=07494000=
ELSE 30490000=07494000=
BEGIN 30495000=07495000=
STEPIT; 30500000=07495000=
STMT; 30505000=07495000=
EMITB(BBW, BUMPL, BACK); 30510000=07495000=
CONSTANTCLEAN; 30515000=07496000=
EMITB(BFC, FRONT, L) 30520000=07496000=
END 30525000=07496000=
END WHILESTMT; 30530000=07496000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30535000=07496000=
30540000=07497000=
COMMENT GOSTMT COMPILES GO TO STATEMENTS. GOSTMT LOOKS AT THE 30545000=07497000=
EXPRESSION. IF IT IS SIMPLE ENOUGH WE GO DIRECTLY. 30550000=07498000=
OTHERWISE A CALL ON THE MCP IS GENERATED IN ORDER TO GET 30555000=07499000=
STORAGE RETURNED. SEE DEXP AND GENGO; 30560000=07500000=
PROCEDURE GOSTMT; 30565000=07501000=
BEGIN 30570000=07502000=
REAL 30575000=07503000=
ELBW; 30580000=07503000=
LABEL 30585000=07504000=
GOMCP, 30590000=07504000=
EXIT; 30595000=07504000=
IF STEPI = TOV THEN 30600000=07505000=
STEPIT; 30605000=07505000=
IF ELCLASS = LABELID THEN 30610000=07506000=
TB1:= TRUE 30615000=07507000=
ELSE 30620000=07507000=
IF ELCLASS = SWITCHID THEN 30625000=07507000=
TB1:= FALSE 30630000=07511000=
ELSE 30635000=07511000=
BEGIN 30640000=07511000=
IF ELCLASS = POLISHV THEN 30645000=07511000=
BEGIN 30650000=07512000=
POLISHER(1); 30655000=07512000=
EMITO(BFW) 30660000=07512000=
END 30665000=07513000=
ELSE 30670000=07513000=
ERR(501); 30675000=07513000=
GO TO EXIT 30680000=07515000=
END; 30685000=07515000=
IF NOT LOCAL(ELBAT[I]) THEN 30690000=07516000=
BEGIN 30695000=07516100=
IF TB1 THEN 30700000=07516200=
BEGIN 30705000=07516300=
EMITV(GNAT(ELBAT[I])); 30710000=07516300=
EMITO(BFW); 30715000=07516400=
STEPIT; 30720000=07516500=
GO TO EXIT 30725000=07516600=
END; 30730000=07516600=
BEGIN 30735000=07517000=
ERR(501); 30740000=07517000=
GO TO EXIT 30745000=07517000=
END; 30750000=07517000=
END; 30755000=07517500=
IF TB1 THEN 30760000=07518000=
BEGIN 30765000=07518000=
GOGEN(ELBAT[I], BFW); 30770000=07518000=
STEPIT; 30775000=07518000=
CONSTANTCLEAN; 30780000=07519000=
GO EXIT 30785000=07519000=
END 30790000=07520000=
ELSE 30795000=07520000=
BEGIN 30800000=07520000=
ELBW:= ELBAT[I]; 30805000=07521000=
BANA; 30810000=07523000=
EMITO(DUP); 30815000=07524000=
EMITO(ADD); 30820000=07525000=
EMITO(BFW); 30825000=07526000=
GT3:= TAKE(GT4:= GIT(ELBW))+GT4; 30830000=07527000=
FOR GT4:= GT4+1 STEP 1 UNTIL GT3 DO 30835000=07528000=
GOGEN(TAKE(GT4), BFW); 30840000=07529000=
END; 30845000=07530000=
EXIT: 30850000=07531000=
END GOSTMT; 30855000=07531000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30860000=07531000=
PROCEDURE GOGEN(LABELBAT, BRANCHTYPE); 30865000=07535000=
VALUE 30870000=07536000=
LABELBAT, 30875000=07536000=
BRANCHTYPE; 30880000=07536000=
REAL 30885000=07537000=
LABELBAT, 30890000=07537000=
BRANCHTYPE; 30895000=07537000=
BEGIN 30900000=07538000=
IF BOOLEAN(GT1:= TAKE(GT2:= GIT(LABELBAT))).[46:1] THEN 30905000=07540000=
EMITB(BRANCHTYPE, BUMPL, GT1.[11:12]) 30910000=07541000=
COMMENT LABELR SETS THE SIGN OF THE ADDITIONAL INFO FOR A LABEL 30915000=07541000=
NEGATIVE WHEN THE LABEL IS ENCOUNTERED. SO THIS MEANS 30920000=07542000=
THAT WE NOW KNOW WHERE TO GO; 30925000=07543000=
ELSE 30930000=07544000=
BEGIN 30935000=07544000=
EMIT(GT1); 30940000=07544000=
EMIT(BRANCHTYPE); 30945000=07544000=
PUT(GT1 & L[11:11:12], GT2) 30950000=07545000=
END 30955000=07545000=
END GOGEN; 30960000=07545000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30965000=07545000=
30970000=07546000=
COMMENT SIMPGO IS USED ONLY BY THE IF STMT ROUTINE. IT DETERMINES IF 30975000=07546000=
A STATEMENT IS A SIMPLE GO TO STATEMENT; 30980000=07547000=
BOOLEAN PROCEDURE SIMPGO; 30985000=07548000=
BEGIN 30990000=07549000=
LABEL 30995000=07549000=
EXIT; 31000000=07549000=
IF ELCLASS = GOV THEN 31005000=07551000=
BEGIN 31010000=07551000=
IF STEPI = TOV THEN 31015000=07552000=
STEPIT; 31020000=07552000=
IF ELCLASS = LABELID THEN 31025000=07553000=
IF LOCAL(ELBAT[I]) THEN 31030000=07554000=
BEGIN 31035000=07555000=
SIMPGO:= TRUE; 31040000=07555000=
GO EXIT 31045000=07555000=
END; 31050000=07555000=
I:= I-1; 31055000=07556000=
ELCLASS:= GOV 31060000=07556000=
END; 31065000=07556000=
EXIT: 31070000=07557000=
END SIMPGO; 31075000=07557000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31080000=07557000=
31085000=07558000=
COMMENT IFSTMT COMPILES IF STATEMENTS. SPECIAL CARE IS TAKEN TO 31090000=07558000=
OPTIMIZE CODE IN THE NEIGHBORHOOD OF THE JUMPS. TO SOME 31095000=07559000=
EXTENT SUPPERFULOUS BRANCHING IS AVOIDED; 31100000=07560000=
PROCEDURE IFSTMT; 31105000=07561000=
BEGIN 31110000=07562000=
REAL 31115000=07562000=
T1, 31120000=07562000=
T2; 31125000=07562000=
LABEL 31130000=07562000=
EXIT; 31135000=07562000=
IFCLAUSE; 31140000=07563000=
IF SIMPGO THEN 31145000=07565000=
BEGIN 31150000=07565000=
T1:= ELBAT[I]; 31155000=07566000=
IF STEPI = ELSEV THEN 31160000=07568000=
BEGIN 31165000=07568000=
STEPIT; 31170000=07569000=
IF SIMPGO THEN 31175000=07571000=
BEGIN 31180000=07571000=
GOGEN(ELBAT[I], BFC); 31185000=07572000=
GOGEN(T1, BFW); 31190000=07572000=
STEPIT; 31195000=07573000=
GO TO EXIT 31200000=07573000=
END 31205000=07573000=
ELSE 31210000=07573000=
BEGIN 31215000=07573000=
EMITLNG; 31220000=07573000=
GOGEN(T1, BFC); 31225000=07573000=
STMT; 31230000=07574000=
GO TO EXIT 31235000=07574000=
END 31240000=07574000=
END; 31245000=07574000=
EMITLNG; 31250000=07575000=
GOGEN(T1, BFC); 31255000=07575000=
GO EXIT 31260000=07576000=
END; 31265000=07576000=
T1:= BUMPL; 31270000=07577000=
STMT; 31275000=07577000=
IF ELCLASS ^= ELSEV THEN 31280000=07578000=
BEGIN 31285000=07579000=
IF L-T1 > 1023 THEN 31290000=07579000=
ADJUST; 31295000=07579000=
EMITB(BFC, T1, L); 31300000=07579000=
GO EXIT 31305000=07579100=
END; 31310000=07579100=
STEPIT; 31315000=07580000=
IF SIMPGO THEN 31320000=07582000=
BEGIN 31325000=07582000=
T2:= L; 31330000=07583000=
L:= T1-2; 31335000=07583000=
GOGEN(ELBAT[I], BFC); 31340000=07583000=
L:= T2; 31345000=07583000=
STEPIT; 31350000=07584000=
GO EXIT 31355000=07584000=
END; 31360000=07584000=
T2:= BUMPL; 31365000=07585000=
CONSTANTCLEAN; 31370000=07585000=
IF L-T1 > 1023 THEN 31375000=07585100=
ADJUST; 31380000=07585100=
EMITB(BFC, T1, L); 31385000=07585100=
STMT; 31390000=07585100=
IF L-T2 > 1023 THEN 31395000=07586000=
ADJUST; 31400000=07586000=
EMITB(BFW, T2, L); 31405000=07586000=
EXIT: 31410000=07587000=
END IFSTMT; 31415000=07587000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31420000=07587000=
31425000=07588000=
COMMENT LABELR HANDLES LABELED STATEMENTS. IT PUTS L INTO THE 31430000=07588000=
ADDITIONAL INFO AND MAKES ITS SIGN NEGATIVE. IT COMPILES 31435000=07589000=
AT THE SAME TIME ALL THE PREVIOUS FORWARD REFERENCES SET 31440000=07590000=
UP FOR IT BY GOGEN. (THE ADDITIONAL INFO LINKS TO A LIST 31445000=07591000=
IN THE CODE ARRAY OF ALL FORWARD REFERENCES); 31450000=07592000=
PROCEDURE LABELR; 31455000=07593000=
BEGIN 31460000=07594000=
LABEL 31465000=07594000=
EXIT, 31470000=07594000=
ROUND; 31475000=07594000=
DEFINE 31480000=07595000=
ELBATWORD = RR9 #, 31485000=07595000=
LINK = GT2 #, 31490000=07595000=
INDEX = GT3 #, 31495000=07595000=
ADDITIONAL = GT4 #, 31500000=07596000=
NEXTLINK = GT5 #; 31505000=07596000=
REAL 31510000=07596500=
OLDL; 31515000=07596500=
DO BEGIN 31520000=07597000=
OLDL:= L; 31525000=07597000=
IF STEPI ^= COLON THEN 31530000=07597500=
BEGIN 31535000=07598000=
ERR(133); 31540000=07598000=
GO TO EXIT 31545000=07598000=
END; 31550000=07598000=
IF NOT LOCAL(ELBATWORD:= ELBAT[I-1]) THEN 31555000=07600000=
BEGIN 31560000=07600000=
FLAG(134); 31565000=07600000=
GO TO ROUND 31570000=07600000=
END; 31575000=07600000=
IF STEPI = COLON THEN 31580000=07600100=
BEGIN 31585000=07600200=
I:= I-1; 31590000=07600200=
ADJUST 31595000=07600200=
END 31600000=07600300=
ELSE 31605000=07600300=
IF ELCLASS = LITNO THEN 31610000=07600300=
L:= 4*C 31615000=07600300=
ELSE 31620000=07600300=
IF ELCLASS = ASTRISK THEN 31625000=07600400=
BEGIN 31630000=07600410=
IF MODE ^= 0 OR ASTOG THEN 31635000=07600410=
FLAG(505); 31640000=07600420=
ASTOG:= TRUE; 31645000=07600430=
L:= 4*PRTI; 31650000=07600440=
END 31655000=07600500=
ELSE 31660000=07600500=
I:= I-2; 31665000=07600500=
IF STEPI ^= COLON THEN 31670000=07600600=
BEGIN 31675000=07600700=
ERR(133); 31680000=07600700=
GO TO EXIT 31685000=07600700=
END; 31690000=07600700=
IF L < OLDL THEN 31695000=07600800=
BEGIN 31700000=07600900=
FLAG(504); 31705000=07600900=
GO TO ROUND 31710000=07600900=
END; 31715000=07600900=
GT1:= TABLE(I+1); 31720000=07600950=
LINK:= (ADDITIONAL:= TAKE(INDEX:= GIT(ELBATWORD))).[11:12]; 31725000=07602000=
IF ADDITIONAL < 0 THEN 31730000=07603000=
BEGIN 31735000=07604000=
FLAG(135); 31740000=07604000=
GO TO ROUND 31745000=07604000=
END; 31750000=07604000=
FOULED:= L; 31755000=07604010=
IF TABLE(I+1) = COLON THEN 31760000=07604020=
BEGIN 31765000=07604030=
IF LINK ^= 0 THEN 31770000=07604040=
BEGIN 31775000=07604040=
OLDL:= L; 31780000=07604040=
DO BEGIN 31785000=07604050=
NEXTLINK:= GET(LINK); 31790000=07604050=
L:= LINK; 31795000=07604060=
IF OLDL.[11:10]-L.[11:10] >= 128 THEN 31800000=07604068=
FLAG(50) 31805000=07604068=
ELSE 31810000=07604068=
EMIT(OLDL-LINK & 0[1:1:2]+0 & NEXTLINK[1:1:2]+3072);31815000=07604080=
L:= L-1; 31825000=07604085=
END 31830000=07604090=
UNTIL LINK:= LINK-NEXTLINK DIV 4 = L; 31835000=07604090=
L:= OLDL; 31840000=07604100=
END; 31845000=07604100=
STEPIT; 31850000=07604100=
DO 31855000=07604110=
IF STEPI <= STRNGCON AND ELCLASS >= NONLITNO THEN 31860000=07604120=
EMITWORD(C) 31865000=07604130=
ELSE 31870000=07604130=
BEGIN 31875000=07604130=
ERR(500); 31880000=07604130=
I:= I-1 31885000=07604130=
END 31890000=07604140=
UNTIL STEPI ^= COMMA; 31895000=07604140=
I:= I-1; 31900000=07604150=
END 31905000=07605000=
ELSE 31910000=07605000=
WHILE LINK ^= 0 DO 31915000=07606000=
BEGIN 31920000=07606000=
NEXTLINK:= GET(LINK-2); 31925000=07607000=
IF L-LINK > 1023 THEN 31930000=07607100=
ADJUST; 31935000=07607100=
EMITB(GET(LINK-1), LINK, L); 31940000=07608000=
LINK:= NEXTLINK 31945000=07609000=
END; 31950000=07609000=
PUT(-ADDITIONAL & L[11:11:12], INDEX); 31955000=07610000=
ROUND: 31960000=07645000=
ERRORTOG:= TRUE 31965000=07645000=
END 31970000=07645000=
UNTIL STEPI ^= LABELID; 31975000=07645000=
EXIT: 31980000=07646000=
END LABELR; 31985000=07646000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31990000=07646000=
PROCEDURE FILLSTMT(SIZE); 31995000=07647000=
VALUE 32000000=07647000=
SIZE; 32005000=07647000=
INTEGER 32010000=07647000=
SIZE; 32015000=07647000=
BEGIN 32020000=07647500=
32025000=07648000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32026000
COMMENT "COCT" PERFORMS THE OCTAL CONVERT FOR THE FILL STATEMENT. 32030000=07648000=
IF THERE ARE ANY NON-OCTAL DIGITS, THIS PROCEDURE RETURNS 32035000=07648500=
A ZERO AND THEN THE 3 LOW-ORDER BITS OF THE BAD DIGIT ARE 32040000=07649000=
RESET AND IGNORED AND ERROR NUMBER 303 IS PRINTED. "COCT" 32045000=07649500=
ALLOWS FLAG BITS TO BE SET, WHEREAS "OCTIZE" DOES NOT. 32050000=07650000=
N NUMBER OF CHARACTERS TO BE CONVERTED. 32055000=07650500=
SKBIT NUMBER OF BITS TO SKIP BEFORE STARTING CONVERSION. 32060000=07651000=
THIS IS BECAUSE THE NO. OF CHARS. MAY BE LESS THAN 32065000=07651500=
8 AND IT MUST BE RIGHT JUSTIFIED IN CD(CODEFILE). 32070000=07652000=
ACC ADDRESS OF THE ACCUM WHERE ALPHA INFO IS KEPT. 32075000=07652500=
; 32080000=07653000=
REAL PROCEDURE COCT(N, SKBIT, ACC, AX, CD, CX); 32085000=07653500=
VALUE 32095000=07653500=
N, SKBIT, AX, CX; 32100000=07653500=
REAL 32105000=07653500=
N, SKBIT, AX, CX; 32106000
ARRAY 32107000
ACC, CD[0]; 32108000
BEGIN 32110000=07654000=
STREAMLOCALS; 32112000
STREAMSETSI(ACC, AX); 32115000=07654500=
STREAMSKIPSI(+6); 32120000=07654500=
STREAMSETDI(CD, CX); 32125000=07654500=
STREAMTRANSFERLIT(8, 6"00000000"); 32130000=07654500=
STREAMSETDI(CD, CX); 32135000=07655000=
STREAMSKIPDB(SKBIT); 32140000=07655000=
TALLY:= 1; 32145000=07655000=
THRU N DO 32150000=07656000=
BEGIN 32151000
IF STREAMSCGTR(6"7") THEN 32152000
TALLY:= 0; 32153000
STREAMSKIPSB(3); 32154000
THRU 3 DO 32155000=07656000=
BEGIN 32155500
IF STREAMTESTSB THEN 32156000
STREAMSETDB(1) 32156500
ELSE 32157000
STREAMSKIPDB(1); 32157500
STREAMSKIPSB(1); 32158000
END; 32158500
END; 32159000
32159500
COCT:= TALLY 32160000=07657000=
END COCT; 32165000=07657000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32166000
REAL 32170000=07657500=
T2; 32175000=07657500=
LABEL 32180000=07658000=
L1; 32185000=07658000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32186000
DEFINE ZEERO(D, DX) = 32190000=07658500=
BEGIN 32195000=07659000=
REPLACE POINTER(D[DX],0) BY 6"00000000" FOR 31*32+30+1 WORDS; 32200000
END ZEERO #; 32225000=07660500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32226000
STREAMTOG:= BOOLEAN(2); 32230000=07661000=
SEGMENTSTART(TRUE); 32235000=07661500=
IF STEPI ^= ASSIGNOP THEN 32240000=07662000=
ZEERO(CODE, 1) 32245000=07662500=
ELSE 32250000=07662500=
BEGIN 32255000=07662500=
FOR T2:= 1 STEP 1 UNTIL SIZE DO 32260000=07663000=
BEGIN 32265000=07663500=
IF STEPI > IDMAX THEN 32270000=07664000=
BEGIN 32275000=07664500=
IF ELCLASS ^= LITNO AND ELCLASS ^= NONLITNO THEN 32280000=07665000=
IF ELCLASS ^= STRNGCON THEN 32285000=07665500=
IF ELCLASS = ADOP AND(STEPI = NONLITNO OR ELCLASS = LITNO)32290000=07666500=
THEN 32295000=07666500=
C:= C & ELBAT[I-1][46:26:1] 32300000=07667500=
ELSE 32305000=07667500=
BEGIN 32310000=07667500=
ERROR(302); 32315000=07667500=
GO TO L1 32320000=07667500=
END; 32325000=07667500=
IF ELCLASS = STRNGCON AND COUNT = 8 THEN 32330000=07668000=
MOVECHARACTERS(8, ACCUM, 1, 3, CODE, T2, 0) 32335000=07669000=
ELSE 32340000=07669000=
CODE[T2]:= C 32345000=07669500=
END 32350000=07670000=
ELSE 32355000=07670000=
IF COUNT <= 19 AND ACCUM[1].[29:18] = 6"OCT" THEN 32360000=07670000=
BEGIN 32365000=07670500=
IF COCT(COUNT-3, 48-(COUNT-3)*3, ACCUM, 1, CODE, T2) = 0 32370000=07671500=
THEN 32375000=07671500=
FLAG(303) 32380000=07672500=
END 32385000=07672500=
ELSE 32390000=07672500=
BEGIN 32395000=07672500=
ERROR(302); 32400000=07672500=
GO TO L1 32405000=07672500=
END; 32410000=07672500=
IF STEPI ^= COMMA THEN 32415000=07673000=
GO TO L1 32420000=07673500=
END; 32425000=07673500=
ERROR(54); 32430000=07674000=
END; 32435000=07674500=
L1: RIGHT(SIZE*4); 32440000=07675500=
STREAMTOG:= FALSE; 32445000=07676000=
SEGMENT(SIZE, 0); 32450000=07676500=
PROGDESCBLDR(ADDRSF, TRUE, SIZE, DDES); 32455000=07677000=
END FILLSTMT; 32460000=07677500=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32465000=07677500=
PROCEDURE STMT; 32470000=07711000=
BEGIN 32475000=07712000=
REAL 32476000
TVAR; 32478000
LABEL 32480000=07713000=
L1, 32485000=07713000=
L2, 32490000=07713000=
L3, 32495000=07713000=
L4, 32500000=07713000=
L5, 32505000=07713000=
L6, 32510000=07713000=
L7, 32515000=07713000=
L8, 32520000=07713000=
L9, 32525000=07713000=
L10, 32530000=07714000=
L11, 32535000=07714000=
L12, 32540000=07714000=
L13, 32545000=07714000=
L14, 32550000=07714000=
L15, 32555000=07714000=
L16, 32560000=07714000=
L17, 32565000=07714000=
L18, 32570000=07714000=
L19, 32575000=07714000=
L20, 32580000=07715000=
L21, 32585000=07715000=
L22, 32590000=07715000=
L23, 32595000=07715000=
L24, 32600000=07715000=
L25, 32605000=07715000=
L26, 32610000=07715000=
L27, 32615000=07715000=
L28, 32620000=07715000=
L29, 32625000=07715000=
L30, 32630000=07716000=
L31, 32635000=07716000=
L32, 32640000=07716000=
L33, 32645000=07716000=
L34, 32650000=07716000=
L35, 32655000=07716000=
L36, 32660000=07716000=
L37, 32665000=07716000=
L38, 32670000=07716000=
L39, 32675000=07716000=
L40, 32680000=07717000=
L41, 32685000=07717000=
L42, 32690000=07717000=
L43, 32695000=07717000=
L44, 32700000=07717000=
L45, 32705000=07717000=
L46, 32710000=07717000=
L47, 32715000=07717000=
L48, 32720000=07717000=
L49, 32725000=07717000=
L50, 32730000=07718000=
L51, 32735000=07718000=
L52, 32740000=07718000=
L53, 32745000=07718000=
L54; 32750000=07718000=
SWITCH 32755000=07719000=
S:= L1, 32760000=07720000=
L2, 32765000=07720000=
L3, 32770000=07720000=
L4, 32775000=07720000=
L5, 32780000=07720000=
L6, 32785000=07720000=
L7, 32790000=07720000=
L8, 32795000=07720000=
L9, 32800000=07720000=
L10, 32805000=07721000=
L11, 32810000=07721000=
L12, 32815000=07721000=
L13, 32820000=07721000=
L14, 32825000=07721000=
L15, 32830000=07721000=
L16, 32835000=07721000=
L17, 32840000=07721000=
L18, 32845000=07721000=
L19, 32850000=07721000=
L20, 32855000=07722000=
L21, 32860000=07722000=
L22, 32865000=07722000=
L23, 32870000=07722000=
L24, 32875000=07722000=
L25, 32880000=07722000=
L26, 32885000=07722000=
L27, 32890000=07722000=
L28, 32895000=07722000=
L29, 32900000=07722000=
L30, 32905000=07723000=
L31, 32910000=07723000=
L32, 32915000=07723000=
L33, 32920000=07723000=
L34, 32925000=07723000=
L35, 32930000=07723000=
L36, 32935000=07723000=
L37, 32940000=07723000=
L38, 32945000=07723000=
L39, 32950000=07723000=
L40, 32955000=07724000=
L41, 32960000=07724000=
L42, 32965000=07724000=
L43, 32970000=07724000=
L44, 32975000=07724000=
L45, 32980000=07724000=
L46, 32985000=07724000=
L47, 32990000=07724000=
L48, 32995000=07724000=
L49, 33000000=07724000=
L50, 33005000=07725000=
L51, 33010000=07725000=
L52, 33015000=07725000=
L53, 33020000=07725000=
L54; 33025000=07725000=
LABEL 33030000=07726000=
AGAIN, 33035000=07726000=
EXIT; 33040000=07726000=
STACKCT:= 0; 33045000=07726990=
AGAIN: 33050000=07727000=
GO TO S[ELCLASS]; 33055000=07727000=
IF ELCLASS = COLON THEN 33060000=07727010=
BEGIN 33065000=07727020=
STEPIT; 33070000=07727020=
GT1:= L; 33075000=07727020=
IF ELCLASS = COLON THEN 33080000=07727030=
BEGIN 33085000=07727040=
ADJUST; 33090000=07727040=
I:= I-1 33095000=07727040=
END 33100000=07727050=
ELSE 33105000=07727050=
IF ELCLASS = LITNO THEN 33110000=07727050=
L:= 4*C 33115000=07727060=
ELSE 33120000=07727060=
I:= I-1; 33125000=07727060=
IF L < GT1 OR STEPI ^= COLON THEN 33130000=07727070=
BEGIN 33135000=07727080=
ERR(504); 33140000=07727080=
GO TO EXIT 33145000=07727080=
END; 33150000=07727080=
STEPIT; 33155000=07727090=
GO TO AGAIN; 33160000=07727100=
END; 33165000=07727110=
IF ELCLASS = 0 THEN 33170000=07728000=
FLAG(100); 33175000=07728000=
FLAG(145); 33180000=07728000=
L1: 33185000=07729000=
L2: 33190000=07729000=
L3: 33195000=07729000=
L4: 33200000=07729000=
L5: 33205000=07729000=
L6: 33210000=07729000=
L9: 33215000=07729000=
L11: 33220000=07729000=
L13: 33225000=07729000=
L14: 33230000=07729000=
L15: 33235000=07729000=
L16: 33240000=07729000=
L17: 33245000=07729000=
L20: 33250000=07729000=
L21: 33255000=07729000=
L25: 33260000=07729000=
L28: 33265000=07729000=
L29: 33270000=07729000=
L24: 33275000=07730000=
L33: 33280000=07730000=
L34: 33285000=07730000=
L35: 33290000=07730000=
L36: 33295000=07730000=
L37: 33300000=07730000=
L39: 33305000=07731000=
ERR(144); 33310000=07731000=
GO TO EXIT; 33315000=07731000=
L7: 33320000=07732000=
L8: SUBHAND(TRUE); 33325000=07733000=
GO TO EXIT; 33330000=07733000=
L10: 33335000=07734000=
L18: 33340000=07734000=
L19: 33345000=07735000=
PROCSTMT(TRUE); 33350000=07735000=
GO TO EXIT; 33355000=07735000=
L12: 33360000=07737000=
STRMPROCSTMT; 33365000=07737000=
GO TO EXIT; 33370000=07737000=
L22: 33375000=07738000=
L23: 33380000=07738000=
L26: 33385000=07738000=
L27: 33390000=07738000=
L30: 33395000=07738000=
L31: 33400000=07739000=
TVAR:= FS; 33402000
VARIABLE(TVAR); 33405000=07739000=
GO TO EXIT; 33410000=07739000=
L32: 33415000=07741000=
LABELR; 33420000=07741000=
GO TO AGAIN; 33425000=07741000=
L38: 33430000=07743000=
POLISHER(0); 33435000=07743000=
GO TO EXIT; 33440000=07743000=
L40: 33445000=07745000=
IF ELBAT[I].ADDRESS = STREAMV THEN 33450000=07745000=
BEGIN 33455000=07746000=
INLINE; 33460000=07746000=
GO TO EXIT 33465000=07746000=
END; 33470000=07746000=
FLAG(146); 33475000=07747000=
IF TABLE(I-2) = ENDV AND MODE > 0 THEN 33480000=07748000=
BEGIN 33485000=07749000=
I:= I-2; 33490000=07749000=
ELCLASS:= ENDV; 33495000=07749000=
GO TO EXIT 33500000=07749000=
END; 33505000=07749000=
I:= I-1; 33510000=07750000=
ERRORTOG:= TRUE; 33515000=07750000=
BLOCK(FALSE); 33520000=07750000=
ELCLASS:= TABLE(I:= I-1); 33525000=07751000=
GO TO EXIT; 33530000=07751000=
L42: 33535000=07753000=
DBLSTMT; 33540000=07753000=
GO TO EXIT; 33545000=07753000=
L43: 33550000=07755000=
FORSTMT; 33555000=07755000=
GO TO EXIT; 33560000=07755000=
L44: 33565000=07757000=
WHILESTMT; 33570000=07757000=
GO TO EXIT; 33575000=07757000=
L45: 33580000=07759000=
DOSTMT; 33585000=07759000=
GO TO EXIT; 33590000=07759000=
L51: 33595000=07761000=
IFSTMT; 33600000=07761000=
GO TO EXIT; 33605000=07761000=
L52: 33610000=07763000=
GOSTMT; 33615000=07763000=
GO TO EXIT; 33620000=07763000=
L53: 33625000=07765000=
IOSTMT; 33630000=07765000=
GO TO EXIT; 33635000=07765000=
L54: 33640000=07767000=
IF STEPI = DECLARATORS THEN 33645000=07767000=
BEGIN 33650000=07768000=
IF ELBAT[I].ADDRESS = STREAMV THEN 33655000=07768100=
IF STEPI = LEFTPAREN THEN % 6 33660000=07768100=
BEGIN % 6 33675000=07768120=
ELCLASS:= TABLE(I:= I-1); 33680000=07768130=
COMPOUNDTAIL; 33685000=07768140=
GO TO EXIT; 33690000=07768160=
END 33695000=07768170=
ELSE 33700000=07768170=
I:= I-1; % 6 33705000=07768170=
I:= I-1; % 6 33710000=07768180=
BLOCK(FALSE); 33715000=07768200=
END 33720000=07768200=
ELSE 33725000=07768200=
COMPOUNDTAIL; 33730000=07768200=
L46: 33735000=07769000=
L47: 33740000=07769000=
L48: 33745000=07769000=
L50: 33750000=07770000=
L49: 33755000=07770000=
L41: 33760000=07771000=
EXIT: 33765000=07771000=
END STMT; 33770000=07771000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33775000=07771000=
PROCEDURE IOSTMT; 33780000=07993000=
IF(GT1:= ELBAT[I].ADDRESS > 15 THEN ERR(98) 33785000=07994000=
ELSE 33790000=07994000=
BEGIN 33795000=07995000=
EMIT(ELBAT[I-1].ADDRESS & GT1[6:0:1] & GT1[11:3:3]); 33800000=07995000=
STEPIT 33805000=07997000=
END SCOPE STATEMENT; 33810000=07997000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33815000=07997000=
PROCEDURE FORSTMT; 33820000=08008000=
BEGIN 33825000=08009000=
OWN REAL 33830000=08010000=
B, 33835000=08010000=
STMTSTART, 33840000=08010000=
REGO, 33845000=08010000=
RETURNSTORE, 33850000=08010000=
ADDRES, 33855000=08010000=
V, 33860000=08010000=
VRET, 33865000=08011000=
BRET; 33870000=08011000=
OWN BOOLEAN 33875000=08012000=
SIGNA, 33880000=08012000=
SIGNB, 33885000=08012000=
SIGNC, 33890000=08012000=
INT, 33895000=08013000=
CONSTANA, 33900000=08013000=
CONSTANB, 33905000=08013000=
CONSTANC; 33910000=08013000=
DEFINE 33915000=08014000=
SIMPLEB = SIGNC #, 33920000=08014000=
FORMALV = SIGNA #, 33925000=08015000=
SIMPLEV = CONSTANA #, 33930000=08015000=
A = V #, 33935000=08015000=
Q = REGO #, 33940000=08016000=
OPDC = TRUE #, 33945000=08016000=
DESC = FALSE #, 33950000=08016000=
K = BRET #; 33955000=08016000=
LABEL 33960000=08017000=
EXIT; 33965000=08017000=
33970000=08018000=
COMMENT PLUG EMITS EITHER AN OPERAND CALL ON A VARIABLE OR A CALL ON A 33975000=08018000=
CONSTANT DEPENDING ON THE REQUIREMENTS; 33980000=08019000=
PROCEDURE PLUG(C, A); 33985000=08020000=
VALUE 33990000=08020000=
C, 33995000=08020000=
A; 34000000=08020000=
REAL 34005000=08020000=
A; 34010000=08020000=
BOOLEAN 34015000=08020000=
C; 34020000=08020000=
IF C THEN 34025000=08021000=
EMITNUM(A) 34030000=08021000=
ELSE 34035000=08021000=
EMITV(A.ADDRESS); 34040000=08021000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34045000=08021000=
34050000=08022000=
COMMENT SIMPLE DETERMINES IF AN ARITHMETIC EXPRESSION IS + OR - A 34055000=08022000=
CONSTANT OR A SIMPLE VARIABLE. IT MAKES A THROUGH REPORT 34060000=08023000=
ON ITS ACTIVITY. IT ALSO MAKES PROVISION FOR THE RESCAN 34065000=08024000=
OF ELBAT (THIS IS THE ACTION WITH K - SEE CODE IN THE 34070000=08025000=
TABLE ROUTINE FOR FURTHER DETAILS); 34075000=08026000=
BOOLEAN PROCEDURE SIMPLE(B, A, S); 34080000=08027000=
BOOLEAN 34085000=08027000=
B, 34090000=08027000=
S; 34095000=08027000=
REAL 34100000=08027000=
A; 34105000=08027000=
BEGIN 34110000=08028000=
S:= 34115000=08029000=
IF STEPI ^= ADOP THEN 34120000=08029000=
FALSE 34125000=08029000=
ELSE 34130000=08029000=
ELBAT[I].ADDRESS = SUB; 34135000=08030000=
IF ELCLASS = ADOP THEN 34140000=08031000=
STEPIT; 34145000=08031000=
IF ELCLASS >= NONLITNO AND ELCLASS <= STRNGCON THEN 34150000=08033000=
BEGIN 34155000=08033000=
K:= K+1; 34160000=08033000=
SIMPLE:= TRUE; 34165000=08033000=
ELBAT[I]:= 0 & COMMENTV[45:6:7] & K[31:10:11]; 34170000=08034000=
INFO[0, K]:= A:= C; 34175000=08035000=
B:= TRUE 34180000=08035000=
END 34185000=08036000=
ELSE 34190000=08036000=
BEGIN 34195000=08036000=
B:= FALSE; 34200000=08037000=
A:= ELBAT[I]; 34205000=08037000=
SIMPLE:= REALID <= ELCLASS AND ELCLASS <= INTID 34210000=08038000=
END; 34215000=08038000=
STEPIT 34220000=08039000=
END SIMPLE; 34225000=08039000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34230000=08039000=
34235000=08040000=
COMMENT TEST EMITS THE STEP-UNTIL ELEMENT TEST; 34240000=08040000=
PROCEDURE TEST; 34245000=08041000=
BEGIN 34250000=08042000=
IF NOT CONSTANB THEN 34255000=08043000=
BEGIN 34260000=08044000=
EMITO(SUB); 34265000=08044000=
IF SIMPLEB THEN 34270000=08044000=
EMITV(B.ADDRESS) 34275000=08045000=
ELSE 34280000=08045000=
BEGIN 34285000=08045000=
EMITL(2+L-BRET); 34290000=08046000=
EMITB(BBW, BUMPL, B); 34295000=08047000=
END; 34300000=08048000=
EMITO(MUL); 34305000=08049000=
EMIT(0) 34310000=08049000=
END; 34315000=08049000=
EMITO(IF SIGNB THEN GEQ ELSE LEQ); 34320000=08050000=
EMIT(0); 34325000=08050000=
L:= L-1 34330000=08051000=
END TEST; 34335000=08051000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34340000=08051000=
BOOLEAN PROCEDURE SIMPI(ALL); 34345000=08052000=
VALUE 34350000=08052000=
ALL; 34355000=08052000=
REAL 34360000=08052000=
ALL; 34365000=08052000=
BEGIN 34370000=08053000=
CHECKER(VRET:= ALL); 34375000=08054000=
ADDRES:= ALL.ADDRESS; 34380000=08055000=
FORMALV:= ALL.[38:2] = 2; 34385000=08056000=
IF T:= ALL.CLASS > INTARRAYID OR T < BOOID OR GT1:= (T-BOOID) MOD 34390000=08058000=
4 < 1 34395000=08058000=
THEN 34400000=08058000=
ERR(REAL(T ^= 0)*51+100); 34405000=08059000=
INT:= GT1 = 2; 34410000=08060000=
SIMPI:= T <= INTID 34415000=08061000=
END SIMPI; 34420000=08061000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34425000=08061000=
34430000=08062000=
COMMENT STORE EMITS THE CODE FOR THE STORE INTO THE FOR INDEX; 34435000=08062000=
PROCEDURE STORE(S); 34440000=08063000=
VALUE 34445000=08063000=
S; 34450000=08063000=
BOOLEAN 34455000=08063000=
S; 34460000=08063000=
BEGIN 34465000=08064000=
IF FORMALV THEN 34470000=08065000=
BEGIN 34475000=08065000=
EMITO(XCH); 34480000=08065000=
S:= FALSE 34485000=08065000=
END 34490000=08066000=
ELSE 34495000=08066000=
BEGIN 34500000=08066000=
EMITL(ADDRES); 34505000=08067000=
IF ADDRES > 1023 THEN 34510000=08068000=
EMITO(PRTE) 34515000=08068000=
END; 34520000=08068000=
T:= (REAL(S)+1)*16; 34525000=08069000=
EMITO((IF INT THEN T+512 ELSE 4*T)+4) 34530000=08070000=
END STORE; 34535000=08070000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34540000=08070000=
34545000=08071000=
COMMENT CALL EFFECTS A CALL ON THE INDEX; 34550000=08071000=
PROCEDURE CALL(S); 34555000=08072000=
VALUE 34560000=08072000=
S; 34565000=08072000=
BOOLEAN 34570000=08072000=
S; 34575000=08072000=
BEGIN 34580000=08073000=
IF SIMPLEV THEN 34585000=08075000=
IF S THEN 34590000=08075000=
EMITV(ADDRES) 34595000=08075000=
ELSE 34600000=08075000=
EMITN(ADDRES) 34605000=08076000=
ELSE 34610000=08076000=
BEGIN 34615000=08076000=
EMITL(2+L-VRET); 34620000=08077000=
EMITB(BBW, BUMPL, V); 34625000=08078000=
IF S THEN 34630000=08079000=
EMITO(LOD) 34635000=08079000=
END 34640000=08079000=
END CALL; 34645000=08079000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34650000=08079000=
PROCEDURE FORLIST(NUMLE); 34655000=08080000=
VALUE 34660000=08080000=
NUMLE; 34665000=08080000=
BOOLEAN 34670000=08080000=
NUMLE; 34675000=08080000=
BEGIN 34680000=08081000=
PROCEDURE FIX(STORE, BACK, FORWART, START); 34685000=08082000=
VALUE 34690000=08083000=
STORE, 34695000=08083000=
BACK, 34700000=08083000=
FORWART, 34705000=08083000=
START; 34710000=08083000=
REAL 34715000=08084000=
STORE, 34720000=08084000=
BACK, 34725000=08084000=
FORWART, 34730000=08084000=
START; 34735000=08084000=
BEGIN 34740000=08085000=
EMITB(GET(FORWART-1), FORWART, START); 34745000=08086000=
IF RETURNSTORE ^= 0 THEN 34750000=08088000=
BEGIN 34755000=08088000=
L:= STORE; 34760000=08089000=
EMITNUM(B-BACK); 34765000=08089000=
EMITPAIR(RETURNSTORE, STD) 34770000=08090000=
END 34775000=08090000=
END FIX; 34780000=08090000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%34785000=08090000=
INTEGER 34790000=08091000=
BACKFIX, 34795000=08091000=
FORWARDBRANCH, 34800000=08091000=
FOOT, 34805000=08091000=
STOREFIX; 34810000=08091000=
LABEL 34815000=08092000=
BRNCH, 34820000=08092000=
EXIT; 34825000=08092000=
STOREFIX:= L; 34830000=08093000=
Q:= REAL(MODE = 0)+3; 34835000=08093000=
FOR K:= 1 STEP 1 UNTIL Q DO 34840000=08094000=
EMITO(NOP); 34845000=08094000=
IF NUMLE THEN 34850000=08096000=
BEGIN 34855000=08096000=
BACKFIX:= L; 34860000=08097000=
IF FORMALV THEN 34865000=08098000=
CALL(DESC) 34870000=08099000=
END 34875000=08099000=
ELSE 34880000=08099000=
BACKFIX:= V+REAL(SIMPLEV)-1; 34885000=08099000=
AEXP; 34890000=08101000=
COMMENT PICK UP FIRST ARITHMETIC EXPRESSION; 34895000=08102000=
IF ELCLASS = STEPV THEN 34900000=08104000=
BEGIN 34905000=08104000=
COMMENT HERE WE HAVE A STEP ELEMENT; 34910000=08105000=
BACKFIX:= BUMPL; 34915000=08106000=
COMMENT LEAVE ROOM FOR FORWARD JUMP; 34920000=08107000=
IF FORMALV THEN 34925000=08108000=
CALL(DESC); 34930000=08108000=
CALL(OPDC); 34935000=08108000=
COMMENT FETCH INDEX; 34940000=08109000=
IF I > 70 THEN 34945000=08110000=
BEGIN 34950000=08110000=
NXTELBT:= 1; 34955000=08110000=
I:= 0 34960000=08110000=
END 34965000=08111000=
ELSE 34970000=08111000=
REGO:= I; 34975000=08111000=
IF SIMPLEB:= SIMPLE(CONSTANB, B, SIGNB) AND 34980000=08114000=
(ELCLASS = UNTILV OR ELCLASS = WHILEV) 34985000=08114000=
THEN 34990000=08114000=
BEGIN 34995000=08114000=
COMMENT WE HAVE A SIMPLE STEP FUNCTION; 35000000=08115000=
PLUG(CONSTANB, B); 35005000=08116000=
END 35010000=08117000=
ELSE 35015000=08117000=
BEGIN 35020000=08117000=
COMMENT THE STEP FUNCTION IS NOT SIMPLE: WE CONSTRUCT A 35025000=08118000=
SUBROUTINE; 35030000=08119000=
I:= 35035000=08120000=
IF I < 4 THEN 35040000=08120000=
0 35045000=08120000=
ELSE 35050000=08120000=
REGO; 35055000=08120000=
STEPIT; 35060000=08120000=
SIGNB:= CONSTANB:= FALSE; 35065000=08121000=
EMIT(0); 35070000=08122000=
B:= L; 35075000=08122000=
AEXP; 35080000=08123000=
EMITO(XCH); 35085000=08123000=
BRET:= L; 35090000=08124000=
EMITO(BFW) 35095000=08125000=
END; 35100000=08125000=
EMITO(REAL(SIGNB)*32+ADD); 35105000=08126000=
EMITB(BFW, BACKFIX, L); 35110000=08127000=
IF ELCLASS = UNTILV THEN 35115000=08129000=
BEGIN COMMENT STEP-UNTIL ELEMENT; 35120000=08129000=
STORE(TRUE); 35130000=08130000=
IF FORMALV THEN 35135000=08130000=
CALL(OPDC); 35140000=08130000=
STEPIT; 35145000=08131000=
AEXP; 35150000=08131000=
TEST 35155000=08131000=
END 35160000=08132000=
ELSE 35165000=08132000=
BEGIN COMMENT STEP-WHILE ELEMENT; 35170000=08132000=
IF ELCLASS ^= WHILEV THEN 35180000=08133000=
BEGIN 35185000=08134000=
ERR(153); 35190000=08134000=
GO TO EXIT 35195000=08134000=
END; 35200000=08134000=
STEPIT; 35205000=08135000=
STORE(FALSE); 35210000=08135000=
BEXP 35215000=08135000=
END 35220000=08136000=
END 35225000=08136000=
ELSE 35230000=08136000=
BEGIN 35235000=08136000=
COMMENT WE DO NOT HAVE A STEP ELEMENT; 35240000=08137000=
STORE(FALSE); 35245000=08138000=
IF ELCLASS = WHILEV THEN 35250000=08140000=
BEGIN 35255000=08140000=
COMMENT WE HAVE A WHILE ELEMENT; 35260000=08141000=
STEPIT; 35265000=08142000=
BEXP 35270000=08142000=
END 35275000=08143000=
ELSE 35280000=08143000=
BEGIN 35285000=08143000=
COMMENT ONE EXPRESSION ELEMENT; 35290000=08144000=
IF ELCLASS ^= COMMA THEN 35295000=08145000=
BEGIN 35300000=08145000=
EMITB(BFW, BUMPL, L+2); 35305000=08146000=
BACKFIX:= L 35310000=08146000=
END 35315000=08147000=
ELSE 35320000=08147000=
BACKFIX:= L+2; 35325000=08147000=
L:= L+1; 35330000=08148000=
EMIT(BFW); 35335000=08148000=
GO TO BRNCH 35340000=08148000=
END 35345000=08148000=
END; 35350000=08148000=
COMMENT THIS IS THE COMMON POINT; 35355000=08149000=
IF ELCLASS = COMMA THEN 35360000=08150000=
EMITLNG; 35365000=08150000=
L:= L+1; 35370000=08150000=
EMIT(BFC); 35375000=08151000=
BRNCH: 35380000=08152000=
FORWARDBRANCH:= L; 35385000=08152000=
DIALA:= DIALB:= 0; 35390000=08152000=
IF ELCLASS = COMMA THEN 35395000=08154000=
BEGIN 35400000=08154000=
STEPIT; 35405000=08155000=
FORLIST(TRUE); 35410000=08156000=
FIX(STOREFIX, BACKFIX, FORWARDBRANCH, STMTSTART) 35415000=08157000=
END 35420000=08158000=
ELSE 35425000=08158000=
BEGIN 35430000=08158000=
IF ELCLASS ^= DOV THEN 35435000=08160000=
BEGIN 35440000=08160000=
ERR(154); 35445000=08160000=
REGO:= L; 35450000=08160000=
GO EXIT 35455000=08160000=
END; 35460000=08160000=
STEPIT; 35465000=08161000=
IF NUMLE THEN 35470000=08162000=
FOOT:= GETSPACE(FALSE, -1); % TEMP. 35475000=08162000=
STMT; 35480000=08163000=
IF NUMLE THEN 35485000=08165000=
BEGIN 35490000=08165000=
EMITV(RETURNSTORE:= FOOT); 35495000=08166000=
EMITO(BBW) 35500000=08166000=
END 35505000=08167000=
ELSE 35510000=08167000=
BEGIN 35515000=08167000=
EMITB(BBW, BUMPL, BACKFIX); 35520000=08168000=
RETURNSTORE:= 0 35525000=08168000=
END; 35530000=08168000=
STMTSTART:= FORWARDBRANCH; 35535000=08169000=
B:= L; 35540000=08169000=
CONSTANTCLEAN; 35545000=08170000=
REGO:= L; 35550000=08170000=
FIX(STOREFIX, BACKFIX, FORWARDBRANCH, L) 35555000=08171000=
END; 35560000=08171000=
EXIT: 35565000=08172000=
END FORLIST; 35570000=08172000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%35575000=08172000=
REAL 35580000=08173000=
T1, 35585000=08173000=
T2, 35590000=08173000=
T3, 35595000=08173000=
T4, 35600000=08173000=
TVAR; 35602000
NXTELBT:= 1; 35605000=08174000=
I:= 0; 35610000=08174000=
STEPIT; 35615000=08175000=
IF SIMPI(VRET:= ELBAT[I]) THEN 35620000=08177000=
BEGIN 35625000=08177000=
IF STEPI ^= ASSIGNOP THEN 35630000=08178000=
BEGIN 35635000=08178000=
ERR(152); 35640000=08178000=
GO EXIT 35645000=08178000=
END; 35650000=08178000=
T1:= L; 35655000=08179000=
IF FORMALV THEN 35660000=08179000=
EMITN(ADDRES); 35665000=08179000=
K:= 0; 35670000=08180000=
IF SIMPLE(CONSTANA, A, SIGNA) THEN 35675000=08181000=
IF ELCLASS = STEPV THEN 35680000=08182000=
IF SIMPLE(CONSTANB, B, SIGNB) THEN 35685000=08183000=
IF ELCLASS = UNTILV THEN 35690000=08184000=
IF SIMPLE(CONSTANC, Q, SIGNC) THEN 35695000=08185000=
IF ELCLASS = DOV THEN 35700000=08186000=
BEGIN 35705000=08187000=
PLUG(CONSTANA, A); 35710000=08188000=
IF SIGNA THEN 35715000=08189000=
EMITO(CHS); 35720000=08189000=
RETURNSTORE:= BUMPL; 35725000=08190000=
ADJUST; 35730000=08190000=
CONSTANTCLEAN; 35735000=08190000=
STMTSTART:= L; 35740000=08191000=
STEPIT; 35745000=08192000=
T1:= ((((4096*RETURNSTORE+STMTSTART)*2 + 35750000=08196000=
REAL(CONSTANB))*2 + 35752000
REAL(CONSTANC))*2 + 35755000=08197000=
REAL(SIGNB))*2 + 35756000
REAL(SIGNC); 35758000
T2:= VRET; 35760000=08198000=
T3:= B; 35765000=08199000=
T4:= Q; 35770000=08200000=
STMT; 35775000=08201000=
SIGNC:= BOOLEAN(T1.[0:1]); 35780000=08202000=
SIGNB:= BOOLEAN(T1.[1:1]); 35785000=08203000=
CONSTANC:= BOOLEAN(T1.[2:1]); 35790000=08204000=
CONSTANB:= BOOLEAN(T1.[3:1]); 35795000=08205000=
STMTSTART:= T1.[15:12]; 35800000=08206000=
RETURNSTORE:= T1.[27:12]; 35805000=08207000=
VRET:= T2; 35810000=08208000=
B:= T3; 35815000=08209000=
Q:= T4; 35820000=08210000=
SIMPLEV:= SIMPI(VRET); 35825000=08211000=
IF FORMALV THEN 35830000=08212000=
EMITN(ADDRES); 35835000=08212000=
EMITV(ADDRES); 35840000=08212000=
PLUG(CONSTANB, B); 35845000=08213000=
EMITO(IF SIGNB THEN SUB ELSE ADD); 35850000=08214000=
EMITB(BFW, RETURNSTORE, L); 35855000=08215000=
STORE(TRUE); 35860000=08216000=
IF FORMALV THEN 35865000=08217000=
CALL(OPDC); 35870000=08217000=
PLUG(CONSTANC, Q); 35875000=08218000=
IF SIGNC THEN 35880000=08219000=
EMITO(CHS); 35885000=08219000=
SIMPLEB:= TRUE; 35890000=08220000=
TEST; 35895000=08220000=
EMITLNG; 35900000=08220000=
EMITB(BBC, BUMPL, STMTSTART); 35905000=08221000=
GO TO EXIT 35910000=08222000=
END; 35915000=08222000=
I:= 2; 35920000=08223000=
K:= 0; 35925000=08223000=
SIMPLEV:= SIMPI(VRET); 35930000=08224000=
V:= T1 35935000=08225000=
END 35940000=08226000=
ELSE 35945000=08226000=
BEGIN 35950000=08226000=
EMIT(0); 35955000=08227000=
V:= L; 35960000=08227000=
SIMPLEV:= FALSE; 35965000=08227000=
FORMALV:= TRUE; 35970000=08227000=
TVAR:= FR; 35972000
VARIABLE(TVAR); 35975000=08228000=
EMITO(XCH); 35980000=08228000=
VRET:= L; 35985000=08228000=
EMITO(BFW); 35990000=08228000=
IF ELCLASS ^= ASSIGNOP THEN 35995000=08229000=
BEGIN 36000000=08229000=
ERR(152); 36005000=08229000=
GO EXIT 36010000=08229000=
END; 36015000=08229000=
END; 36020000=08230000=
STEPIT; 36025000=08231000=
FORLIST(FALSE); 36030000=08231000=
L:= REGO; 36035000=08231000=
EXIT: 36040000=08232000=
K:= 0 36045000=08232000=
END FORSTMT; 36050000=08232000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36055000=08232000=
REAL PROCEDURE REED; 36060000=08999000=
BEGIN 36065000=08999025=
LABEL 36070000=08999050=
EOF; 36075000=08999050=
INTEGER 36080000=08999050=
I, 36085000=08999050=
K; 36095000=08999050=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36142000
READ(CODISK, 30, CODE)[EOF]; 36150000=08999150=
REED:= I:= CODELENGTH:= CODE[0]; % CURRENT CODE BUFFER LENGTH 36155000=08999175=
REPLACE POINTER(CODE[0],0) BY POINTER(CODE[1],0) FOR (K:=29) WORDS; 36160000=08999200=
WHILE I-K > 30 DO 36165000=08999225=
BEGIN 36170000=08999250=
READ(CODISK, 30, CODE[K]); 36175000=08999275=
K:= K+30; 36180000=08999275=
END; 36195000=08999325=
READ(CODISK, I-K, CODE[K]); 36200000=08999350=
EOF: 36210000=08999425=
END REED; 36215000=08999425=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36220000=08999425=
PROCEDURE RIGHT(L); 36225000=08999450=
VALUE 36230000=08999450=
L; 36235000=08999450=
INTEGER 36240000=08999450=
L; 36245000=08999450=
BEGIN 36250000=08999475=
INTEGER 36255000=08999500=
I, 36260000=08999500=
J; 36265000=08999500=
I:= (L+7) DIV 4; 36270000=08999525=
EBCDICBUF[0]:= I; 36275000=08999550=
REPLACE POINTER(EBCDICBUFF[1],0) BY POINTER(CODE[0],0) 36280000=08999575=
FOR (J:=29) WORDS; 36280100
WRITE(CODISK, 30, EBCDICBUFF); 36285000=08999600=
WHILE I-J > 30 DO 36295000=08999650=
BEGIN 36300000=08999675=
WRITE(CODISK, 30, CODE[J]); 36305000=08999700=
J:= J+30; 36315000=08999750=
END; 36320000=08999775=
WRITE(CODISK, I-J, CODE[J]); 36320100
END RIGHT; 36325000=08999800=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36330000=08999800=
36335000=09000000=
COMMENT THE PROGRAM ROUTINE DOES THE INITIALIZATION AND THE WRAPUP 36340000=09000000=
FOR THE REST OF THE COMPILER. THE MAIN PROGRAM OF THE COMPILER36345000=09001000=
IS SIMPLY A CALL ON THE PROGRAM ROUTINE; 36350000=09002000=
PROCEDURE PROGRAM; 36355000=09003000=
BEGIN 36360000=09004000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36362000
DEFINE MDESC(WD, TOLOC) = 36365000=09005000=
BEGIN 36380000=09006000=
TOLOC:= (WD) & (1)[47:1]; 36385000=09006000=
END #; 36410000=09006000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36412000
DEFINE 36415000=09024000=
STARTINTRSC = 426 #; 36420000=09024000=
LABEL 36425000=09025000=
L1; 36430000=09025000=
LISTOG:= LISTER:= BOOLEAN(1-ERRORCOUNT.[1:1]); 36435000=09028000=
SINGLTOG:= TRUE; % DEFAULT TO SINGLE-SPACED LISTING 36436000
SAVETIME:= 30; % ON THE B5500, THE MCP WOULD SET THIS 36438000
36440000=09028010=
COMMENT LISTOG IS NOT SET BY DEFAULT ON TIMESHARING; 36445000=09028010=
NOHEADING:= TRUE; 36450000=09028050=
ERRORCOUNT:= 0; 36455000=09028900=
ERRMAX:= 999; % MAY BE CHANGED IN DOLLARCARD. 36460000=09028910=
BASENUM:= 10000; 36465000=09028920=
ADDVALUE:= 1000; 36470000=09028920=
NEWBASE:= TRUE; 36475000=09028920=
COMMENT DEFAULT VALUES FOR "$SEQ" OPTION; 36485000=09028930=
36486000
OPEN(CARD); 36487000
CARDRECSIZE:= CARD.MAXRECSIZE; 36488000
LASTUSED:= 4; % FOR INITIALIZATION. 36490000=09029000=
NEXTINFO:= LASTINFO:= LASTSEQROW*256+LASTSEQUENCE+1; 36495000=09033000=
PUTNBUMP(0); 36500000=09034000=
GT1:= -6" "; 36505000=09034100=
MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE]); 36510000=09034200=
BLANKET(0, INFO[LASTSEQROW, LASTSEQUENCE]); % FOR "$ CHECK". 36515000=09034500=
READACARD; % INITIALIZATION OF NCR,FCR, AND LCR, AND 36520000=09035000=
% READS FIRST CARD INTO CARD BUFFER. 36525000=09036000=
LASTUSED:= 1; % ASSUMES CARD ONLY UNTIL TOLD DIFFERENTLY.36530000=09037000=
NXTELBT:= 1; 36535000=09038000=
PRTI:= PRTIMAX:= PRTBASE; 36540000=09039000=
MRCLEAN:= TRUE; 36545000=09040000=
36550000=09040100=
COMMENT START FILLING TABLES NEEDED TO COMPILE A PROGRAM; 36555000=09040100=
FILL TEN[*] WITH 3"1771110463422054", 3"1761332600326467", 36560000=09042000=
3"1751621340414205", 3"1742165630517247", 3"1732623176643120", 36565000=09043000=
3"1723370036413744", 3"1714266046116735", 3"1705343457542525", 36570000=09044000=
3"1676634373473252", 3"1651040347241213", 3"1641250441111455", 36575000=09045000=
3"1631522551333770", 3"1622047303622767", 3"1612461164567564", 36580000=09046000=
3"1603175421725521", 3"1574034726313046", 3"1565044113775657", 36585000=09047000=
3"1556255136775233", 3"1547730366574502", 3"1521171646433362", 36590000=09048000=
3"1511430220142257", 3"1501736264172732", 3"1472325741231521", 36595000=09049000=
3"1463013331500045", 3"1453616220020057", 3"1444561664024072", 36600000=09050000=
3"1435716241031111", 3"1427301711237333", 3"1401116227350722", 36605000=09051000=
3"1371341675243107", 3"1361632254513731", 3"1352200727636717", 36610000=09052000=
3"1342641115606502", 3"1333411341150223", 3"1324313631402270", 36615000=09053000=
3"1315376577702746", 3"1306676337663537", 3"1261045602764047", 36620000=09054000=
3"1251257143561061", 3"1241532774515275", 3"1232061573640554", 36625000=09055000=
3"1222476132610706", 3"1213215561353071", 3"1204061115645707", 36630000=09056000=
3"1175075341217270", 3"1166314631463146", 3"1141000000000000", 36635000=09057000=
3"1131200000000000", 3"1121440000000000", 3"1111750000000000", 36640000=09058000=
3"1102342000000000", 3"1073032400000000", 3"1063641100000000", 36645000=09059000=
3"1054611320000000", 3"1045753604000000", 3"1037346545000000", 36650000=09060000=
3"1011124027620000", 3"0001351035564000", 3"0011643245121000", 36655000=09061000=
3"0022214116345200", 3"0032657142036440", 3"0043432772446150", 36660000=09062000=
3"0054341571157602", 3"0065432127413543", 3"0076740555316473", 36665000=09063000=
3"0111053071060221", 3"0121265707274266", 3"0131543271153343", 36670000=09064000=
3"0142074147406234", 3"0152513201307703", 3"0163236041571663", 36675000=09065000=
3"0174105452130240", 3"0205126764556310", 3"0216354561711772", 36680000=09066000=
3"0231004771627437", 3"0241206170175347", 3"0251447626234641", 36685000=09067000=
3"0261761573704011", 3"0272356132665013", 3"0303051561442216", 36690000=09068000=
3"0313664115752661", 3"0324641141345435", 3"0336011371636745", 36695000=09069000=
3"0347413670206536", 3"0361131664625027", 3"0371360241772234", 36700000=09070000=
3"0401654312370703", 3"0412227375067064", 3"0422675274304701", 36705000=09071000=
3"0433454553366062", 3"0444367706263476", 3"0455465667740415", 36710000=09072000=
3"0467003245730521", 3"0501060411731665", 3"0511274514320242", 36715000=09073000=
3"0521553637404312", 3"0532106607305375", 3"0542530351166674", 36720000=09074000=
3"0553256443424453", 3"0564132154331566", 3"0575160607420123", 36725000=09075000=
3"0606414751324150", 3"0621012014361120", 3"0631214417455344", 36730000=09076000=
3"0641457523370635", 3"0651773450267005", 3"0662372362344606", 36735000=09077000=
3"0673071057035747", 3"0703707272645341", 3"0714671151416632", 36740000=09078000=
3"0726047403722400", 3"0737461304707100", 3"0751137556607072", 36745000=09079000=
3"0761367512350710", 3"0771665435043072"; 36750000=09080000=
36755000=09081000=
COMMENT THIS IS THE FILL FOR THE SECOND ROW OF INFO: 36760000=09081000=
THE FIRST ITEMS ARE STREAM RESERVED WORDS, 36765000=09082000=
THEN ORDINARY RESERVED WORDS, 36770000=09083000=
THEN INTRINSIC FUNCTIONS; 36775000=09084000=
FILL INFO[1, *] WITH 36780000=09086000=
3"0670000600000002", 6"2SI000", %256 36782000
3"0700001040000002", 6"2DI000", %258 36785000=09087000=
3"0710001460000002", 6"2CI000", %260 36790000=09088000=
3"0720001630000002", 6"5TALLY", %262 36795000=09089000=
3"0730000530000002", 6"2DS000", %264 36800000=09090000=
3"0740000150000002", 6"4SKIP0", %266 36805000=09091000=
3"0750001620000002", 6"4JUMP0", %268 36810000=09092000=
3"0760000740000002", 6"2DB000", %270 36815000=09093000=
3"0770000500000002", 6"2SB000", %272 36820000=09094000=
3"1010000730000002", 6"2SC000", %274 36825000=09095000=
3"1020001160000002", 6"3LOC00", %276 36830000=09096000=
3"1030001170000002", 6"2DC000", %278 36835000=09097000=
3"1040001430000002", 6"5LOCAL", %280 36840000=09098000=
3"1050000340000002", 6"3LIT00", %282 36845000=09099000=
3"1060001036400002", 6"3SET00", %284 36850000=09100000=
3"1060001066500002", 6"5RESET", %286 36855000=09101000=
3"1060001020500002", 6"3WDS00", %288 36860000=09102000=
3"1060001357700002", 6"3CHR00", %290 36865000=09103000=
3"1060001057300002", 6"3ADD00", %292 36870000=09104000=
3"1060001617200002", 6"3SUB00", %294 36875000=09105000=
3"1060000727600002", 6"3ZON00", %296 36880000=09106000=
3"1060000417500002", 6"3NUM00", %298 36885000=09107000=
3"1060000766700002", 6"3OCT00", %300 36890000=09108000=
3"1060000176600002", 6"3DEC00", %302 36895000=09109000=
3"1004000260000003", 6"6TOGGL", 6"E0000000", %304 36900000=09110000=
3"0130311060000002", 6"3ABS00", %307 36905000=09110001=
3"1360441030000002", 6"3AND00", %309 36910000=09112000=
3"0500000170000002", 6"5ARRAY", %311 36915000=09112100=
3"0660000000000002", 6"5BEGIN", %313 36920000=09112200=
3"0500000040000003", 6"7BOOLE", 6"AN000000", %315 36925000=09112300=
3"1070000000000003", 6"7COMME", 6"NT000000", %318 36930000=09112400=
3"0500000230000003", 6"6DEFIN", 6"E0000000", %321 36935000=09112500=
3"1410446000000002", 6"3DIV00", %324 36940000=09112600=
3"0550000000000002", 6"2DO000", %326 36945000=09112700=
3"0520000000000003", 6"6DOUBL", 6"E0000000", %328 36950000=09112800=
3"0570000000000002", 6"4ELSE0", %331 36955000=09112900=
3"0600000000000002", 6"3END00", %333 36960000=09113000=
3"1340442030000002", 6"3EQV00", %335 36965000=09113100=
3"0410000000000002", 6"5FALSE", %337 36970000=09113200=
3"0130310030000002", 6"4FLAG0", %339 36975000=09113300=
3"0530000000000002", 6"3FOR00", %341 36980000=09113400=
3"1100000000000003", 6"7FORWA", 6"RD ", %343 36985000=09113500=
3"0640000000000002", 6"2GO000", %346 36990000=09113600=
3"0130316060320002", 6"4HUNT0", %348 36995000=09113700=
3"0630000000000002", 6"2IF000", %350 37000000=09113800=
3"0500000040000002", 6"4REAL0", %352 37005000=09113900=
3"0500000050000003", 6"7INTEG", 6"ER000000", %354 37010000=09114000=
3"0500000070000002", 6"5LABEL", %357 37015000=09114100=
3"0360002000020003", 6"6MEMOR", 6"Y ", %359 37020000=09114200=
3"1410456000000002", 6"3MOD00", %362 37025000=09114300=
3"0500000140000003", 6"7MONIT", 6"OR ", %364 37030000=09114400=
3"0130301060000002", 6"4NABS0", %367 37035000=09114500=
3"0500000200000002", 6"4NAME0", %369 37040000=09114600=
3"0130304030000002", 6"5NFLAG", %371 37045000=09114700=
3"1320300230000002", 6"3NOT00", %373 37050000=09114800=
3"1350440430000002", 6"2OR000", %375 37055000=09114900=
3"0500000020000002", 6"4SAVE0", %377 37060000=09115000=
3"0500000010000002", 6"3OWN00", %379 37065000=09115100=
3"0460000000000003", 6"6POLIS", 6"H ", %381 37070000=09115200=
3"0500000160000003", 6"9PROCE", 6"DURE ", %384 37075000=09115300=
3"0130300000160011", 6"4SIGN0", %387 37080000=09115400=
3"2025", COMMENT DUP ; 37085000=09115500=
3"0000", COMMENT LITC 0; 37090000=09115600=
3"0425", COMMENT NEQ ; 37100000=09115700=
3"1025", COMMENT XCH ; 37110000=09115800=
3"0155", COMMENT DIA 1; 37120000=09115900=
3"0161", COMMENT DIB 1; 37130000=09116000=
3"0165", COMMENT TRB 1; 37140000=09116100=
3"1110000000000002", 6"4STEP0", %396 37150000=09116200=
3"0500000220000003", 6"6STREA", 6"M ", %398 37155000=09116300=
3"0500000110000003", 6"#SUBRO", 6"UTINE ", %401 37160000=09116400=
3"0500000150000003", 6"6SWITC", 6"H ", %404 37165000=09116500=
3"1120000000000002", 6"4THEN0", %407 37170000=09116600=
3"1130000000000002", 6"2TO000", %409 37175000=09116700=
3"0410000010000002", 6"4TRUE0", %411 37180000=09116800=
3"0560000000000002", 6"5UNTIL", %413 37185000=09116900=
3"1140000000000002", 6"5VALUE", %415 37190000=09117000=
3"0540000000000002", 6"5WHILE", %417 37195000=09117100=
3"1310440200000002", 6"3ADD00", %419 37200000=09117200=
3"1310240270000002", 6"3BRT00", %421 37205000=09117300=
3"1310453050000002", 6"3CCX00", %423 37210000=09117400=
3"1310442500000002", 6"3CDC00", %425 37215000=09117500=
3"1310457050000002", 6"3CFX00", %427 37220000=09117600=
3"1310302060000002", 6"3CHS00", %429 37225000=09117700=
3"1310440500000002", 6"3COC00", %431 37230000=09117800=
3"1310242020000002", 6"3COM00", %433 37235000=09117900=
3"1310302060000002", 6"3CSB00", %435 37240000=09118000=
3"1310240120000002", 6"3DEL00", %437 37245000=09118100=
3"1260100550000002", 6"3DIA00", %439 37250000=09118200=
3"1260100610000002", 6"3DIB00", %441 37255000=09118300=
3"1310344050000002", 6"3DUP00", %443 37260000=09118400=
3"1310451050000002", 6"3EQL00", %445 37265000=09118500=
3"1310443050000002", 6"3FCX00", %447 37270000=09118600=
3"1310447050000002", 6"3FFX00", %449 37275000=09118700=
3"1310440250000002", 6"3GEQ00", %451 37280000=09118800=
3"1310440450000002", 6"3GTR00", %453 37285000=09118900=
3"1310104420000002", 6"3HLB00", %455 37290000=09119000=
3"1310104420000002", 6"3HP200", %457 37295000=09119050=
3"1310446000000002", 6"3IDV00", %459 37300000=09119100=
3"1310251020000002", 6"3IIO00", %461 37305000=09119200=
3"1310250220000002", 6"3INA00", %463 37310000=09119300=
3"1310250420000002", 6"3INB00", %465 37315000=09119400=
3"1310100420000002", 6"3INI00", %467 37320000=09119500=
3"1400440300000002", 6"3INX00", %469 37325000=09119600=
3"1310244220000002", 6"3IOR00", %471 37330000=09119700=
3"1310250220000002", 6"3IP100", %473 37335000=09119800=
3"1310250420000002", 6"3IP200", %475 37340000=09119900=
3"1310145060000002", 6"3IPS00", %477 37345000=09120000=
3"1310410240000002", 6"3ISD00", %479 37350000=09120100=
3"1310450440000002", 6"3ISN00", %481 37355000=09120200=
3"1310100420000002", 6"3ITI00", %483 37360000=09120300=
3"1310450250000002", 6"3LEQ00", %485 37365000=09120400=
3"1310505300000002", 6"3LLL00", %487 37370000=09120500=
3"1310441030000002", 6"3LND00", %489 37375000=09120600=
3"1310300230000002", 6"3LNG00", %491 37380000=09120700=
3"1310304040000002", 6"3LOD00", %493 37385000=09120800=
3"1310440430000002", 6"3LOR00", %495 37390000=09120900=
3"1310442030000002", 6"3LQV00", %497 37395000=09121000=
3"1310450450000002", 6"3LSS00", %499 37400000=09121100=
3"1310101100000002", 6"3MKS00", %501 37405000=09121200=
3"1310441000000002", 6"3MUL00", %503 37410000=09121300=
3"1310441050000002", 6"3NEQ00", %505 37415000=09121400=
3"1310100130000002", 6"3NOP00", %507 37420000=09121500=
3"0650006550000002", 6"6SCOPO", 6"N......."; %509 37425000=09121600=
FILL INFO[2, *] WITH 37430000=09121700=
3"131030000020004", 6"3RDF00", %512 37432000
3"0000", COMMENT LITC 0; 37435000=09121800=
3"2141", COMMENT FXS ; 37440000=09121900=
3"131030000020004", 6"3RDS00", %516 37450000=09122000=
3"0004", COMMENT LITC 1; 37455000=09122100=
3"2141", COMMENT FXS ; 37460000=09122200=
3"1310456000000002", 6"3RDV00", %520 37470000=09122300=
3"1310304030000002", 6"3RFB00", %522 37475000=09122400=
3"1310240470000002", 6"3RND00", %524 37480000=09122500=
3"1310145060000002", 6"3RRR00", %526 37485000=09122600=
3"1310311060000002", 6"3RSB00", %528 37490000=09122700=
3"1310242470000002", 6"3RSP00", %530 37495000=09122800=
3"1310141020000002", 6"3RTM00", %532 37500000=09122900=
3"1310240470000002", 6"3RTN00", %534 37505000=09123000=
3"1310141020000002", 6"3RTR00", %536 37510000=09123100=
3"1310242470000002", 6"3RTS00", %538 37515000=09123200=
3"1310310030000002", 6"3SFB00", %540 37520000=09123300=
3"1310442040000002", 6"3SND00", %542 37525000=09123400=
3"1310301060000002", 6"3SSB00", %544 37530000=09123500=
3"1310316060000002", 6"3SSF00", %546 37535000=09123600=
3"1310301060000002", 6"3SSN00", %548 37540000=09123700=
3"1310311060000002", 6"3SSP00", %550 37545000=09123800=
3"1310401040000002", 6"3STD00", %552 37550000=09123900=
3"1310240000020004", 6"3STF00", %554 37555000=09124000=
3"0010", COMMENT LITC 2; 37560000=09124100=
3"2141", COMMENT FXS ; 37565000=09124200=
3"1310442040000002", 6"3STN00", %558 37575000=09124300=
3"1310240000020004", 6"3STS00", %560 37580000=09124400=
3"0014", COMMENT LITC 3; 37585000=09124500=
3"2141", COMMENT FXS ; 37590000=09124600=
3"1310440600000002", 6"3SUB00", %564 37600000=09124700=
3"1310344060000002", 6"3TFB00", %566 37605000=09124800=
3"1270440650000002", 6"3TFR00", %568 37610000=09124900=
3"1310155060000002", 6"3TIO00", %570 37615000=09125000=
3"1310344060000002", 6"3TOP00", %572 37620000=09125050=
3"1270440650000002", 6"3TRB00", %574 37625000=09125100=
3"1300300000000002", 6"3VFI00", %576 37630000=09125200=
3"1310502050000002", 6"3XCH00", %578 37635000=09125300=
3"1310101070000002", 6"3XIT00", %580 37640000=09125400=
3"1310105020000002", 6"3ZIP00", %582 37645000=09125500=
3"1310105020000002", 6"3ZP100", %584 37650000=09125600=
3"1270500750000002", 6"3CFE00", %586 37655000=09125700=
3"1270500750000002", 6"3FCE00", %588 37660000=09125800=
3"1270500710000002", 6"3CFL00", %590 37665000=09125900=
3"1270500710000002", 6"3FCL00", %592 37670000=09126000=
3"1310440210000002", 6"3DLA00", %594 37675000=09126100=
3"1310440210000002", 6"3ADL00", %596 37680000=09126200=
3"1310440610000002", 6"3DLS00", %598 37685000=09126300=
3"1310440610000002", 6"3SDL00", %600 37690000=09126400=
3"1310441010000002", 6"3DLM00", %602 37695000=09126500=
3"1310441010000002", 6"3MDL00", %604 37700000=09126600=
3"1310442010000002", 6"3DLD00", %606 37705000=09126700=
3"1310442010000002", 6"3DDL00", %608 37710000=09126800=
3"0460000000000002", 6"1P0000", %610 37715000=09126900=
3"0360002000020002", 6"1M0000", %612 37720000=09127000=
3"1310240000020004", 6"3PRL00", %614 37725000=09127100=
3"0111", COMMENT PRL; 37730000=09127200=
3"0055", COMMENT NOP; 37735000=09127300=
3"0650006610000003", 6"7SCOPO", 6"FF......", %618 37745000=09127400=
3"0030000000040003", 6"2LB000", 6"[# ", %621 37755000=09127500=
3"0030000000040003", 6"2RB000", 6"]# ", %624 37760000=09127600=
3"0030000000040003", 6"3GTR00", 6"># ", %627 37765000=09127700=
3"0030000000040003", 6"3GEQ00", 6"}# ", %630 37770000=09127800=
3"0030000000040003", 6"3EQL00", 6"=# ", %633 37775000=09127900=
3"0030000000040003", 6"3NEQ00", 6"!# ", %636 37780000=09128000=
3"0030000000040003", 6"3LEQ00", 6"{# ", %639 37785000=09128100=
3"0030000000040003", 6"3LSS00", 6"<# ", %642 37790000=09128200=
3"0030000000040003", 6"5TIMES", 6"|# ", %645 37795000=09128300=
3"1310117530000002", 6"3SCI00", %688 37800000=09128400=
3"1310117540000002", 6"3SAN00", %650 37805000=09128500=
3"1310157730000002", 6"3SCS00", %652 37810000=09128600=
0;% END OF INFO FILL. 37815000=09133700=
FOR GT2:= 256 STEP GT1.LINK WHILE NOT BOOLEAN(GT1.FORMAL) DO 37820000=09133800=
PUT((GT1:= TAKE(GT2)) & GT2[12:12:13], GT2); 37825000=09133900=
FOR GT1:= GT2 STEP GT2.LINK WHILE GT2.LINK ^= 0 DO 37830000=09134000=
PUT((GT2:= TAKE(GT1)) & 37835000=09134200=
STACKHEAD[GT3:= TAKE(GT1+1).[35:36] MOD 125][12:12:13], 37840000=09134200=
STACKHEAD[GT3]:= GT1); 37845000=09134200=
37850000=09197000=
COMMENT THIS IS THE FILL FOR THE SPECIAL CHARACTORS; 37855000=09197000=
FILL SPECIAL[*] WITH 37860000=09198000=
3"1200000000200000", COMMENT #; 3"0000000000100000", COMMENT @; 37865000=09199000=
3"0000000000000000", 3"1160000000120000", COMMENT :; 37870000=09200000=
3"1370440450002763", COMMENT >; 3"1370440250002662", COMMENT >=; 37875000=09201000=
3"1400440200000000", COMMENT +; 3"0000000000000000", 37880000=09202000=
3"1220000000060000", COMMENT .; 3"1210000000000000", COMMENT [; 37885000=09203000=
3"1250000000000000", COMMENT &; 3"0450000000000000", COMMENT (; 37890000=09204000=
3"1370450450003571", COMMENT <; 3"1330401040000000", COMMENT <-; 37895000=09205000=
3"1410441000000000", COMMENT x; 3"0000000000000000", 37900000=09206000=
3"0000000000040000", COMMENT $; 3"0470000000000000", COMMENT *; 37905000=09207000=
3"1400440600000000", COMMENT -; 3"1240000000160000", COMMENT ); 37910000=09208000=
3"0620000000000000", COMMENT .,; 3"1370450250003470", COMMENT <=; 37915000=09209000=
3"0000000000000000", 3"1410442000000000", COMMENT /; 37920000=09210000=
3"1170000000000000", COMMENT ,; 3"0000000000020000", COMMENT %; 37925000=09211000=
3"1370441050002561", COMMENT ^=; 3"1370451050002460", COMMENT =; 37930000=09212000=
3"1230000000000000", COMMENT ]; 3"0000000000140000", COMMENT "; 37935000=09213000=
0,0; 37940000=09214000=
FILL MACRO[*] WITH 37945000=09215000=
3"0131", COMMENT SFS A 00 ; 37950000=09216000=
3"0116", COMMENT SFD A 01 ; 37955000=09217000=
3"0000", COMMENT SYNTAX ERROR02 ; 37960000=09218000=
3"0140", COMMENT INC A 03 ; 37965000=09219000=
3"0130", COMMENT SRS A 04 ; 37970000=09220000=
3"0117", COMMENT SRD A 05 ; 37975000=09221000=
3"0000", COMMENT SYNTAX ERROR06 ; 37980000=09222000=
3"0000", COMMENT SYNTAX ERROR07 ; 37985000=09223000=
3"00310143", COMMENT CRF A, SFS 008 ; 37990000=09224000=
3"00160143", COMMENT CRF A, SFD 009 ; 37995000=09225000=
3"00470143", COMMENT CRF A, JFW 0 10 ; 38000000=09226000=
3"00400143", COMMENT CRF A, INC 011 ; 38005000=09227000=
3"00300143", COMMENT CRF A, SRS 012 ; 38010000=09228000=
3"00170143", COMMENT CRF A, SRD 013 ; 38015000=09229000=
3"0000", COMMENT SYNTAX ERROR14 ; 38020000=09230000=
3"0000", COMMENT SYNTAX ERROR15 ; 38025000=09231000=
3"0153", COMMENT RSA A 16 ; 38030000=09232000=
3"0104", COMMENT RDA A 17 ; 38035000=09233000=
3"0150", COMMENT RCA A 18 ; 38040000=09234000=
3"004201430042", COMMENT SEC 0, CRF A, SEC 0 19 ; 38045000=09235000=
3"0122", COMMENT SES A 20 ; 38050000=09236000=
3"0106", COMMENT SED A 21 ; 38055000=09237000=
3"0000", COMMENT SYNTAX ERROR22 ; 38060000=09238000=
3"0000", COMMENT SYNTAX ERROR23 ; 38065000=09239000=
3"0056", COMMENT TSA 0 24 ; 38070000=09240000=
3"0000", COMMENT SYNTAX ERROR25 ; 38075000=09241000=
3"0000", COMMENT SYNTAX ERROR26 ; 38080000=09242000=
3"0000", COMMENT SYNTAX ERROR27 ; 38085000=09243000=
3"0000", COMMENT SYNTAX ERROR28 ; 38090000=09244000=
3"0007", COMMENT TDA 0 29 ; 38095000=09245000=
3"0000", COMMENT SYNTAX ERROR30 ; 38100000=09246000=
3"0000", COMMENT SYNTAX ERROR31 ; 38105000=09247000=
3"0115", COMMENT SSA A 32 ; 38110000=09248000=
3"0114", COMMENT SDA A 33 ; 38115000=09249000=
3"0154", COMMENT SCA A 34 ; 38120000=09250000=
3"0141"; COMMENT STC A 35 ; 38125000=09251000=
FILL OPTIONS[*] WITH 6"5CHECK", 0, % 0,1 38130000=09251208=
6"6DEBUG", 0, % 2,3 38135000=09251212=
6"4DECK0", 0, % 4,5 38140000=09251214=
6"6FORMA", 0, % 6,7 38145000=09251216=
6"9INTRI", 0, % 8,9 38150000=09251218=
6"5LISTA", 0, % 10,11 38155000=09251220=
6"4LIST0", 0, % 12,13 38160000=09251224=
6"5LISTP", 0, % 14,15 38165000=09251228=
6"3MCP00", 0, % 16,17 38170000=09251230=
6"4TAPE0", 0, % 18,19 38175000=09251232=
6"4NEST0", 0, % 20,21 38180000=09251234=
6"3NEW00", 0, % 22,23 38185000=09251236=
6"7NEWIN", 0, % 24,25 38190000=09251240=
6"4OMIT0", 0, % 26,27 38195000=09251244=
6"1$0000", 0, % 28,29 38200000=09251248=
6"3PRT00", 0, % 30,31 38205000=09251252=
6"5PUNCH", 0, % 32,33 38210000=09251256=
6"5PURGE", 0, % 34,35 38215000=09251260=
6"4SEGS0", 0, % 36,37 38220000=09251264=
6"3SEQ00", 0, % 38,39 38225000=09251268=
6"6SEQER", 0, % 40,41 38230000=09251272=
6"6SINGL", 0, % 42,43 38235000=09251276=
6"5STUFF", 0, % 44,45 38240000=09251378=
6"4VOID0", 0, % 46,47 38245000=09251380=
6"5VOIDT", 0, % 48,49 38250000=09251384=
0; 38255000=09251388=
DO 38260000=09252000=
UNTIL STEPI = BEGINV; 38265000=09252000=
GT1:= -6" "; 38270000=09253000=
INTOG:= INTOG AND TRUE; % 38275000=09253050=
DISKADR:= 38280000=09253100=
IF INTOG THEN 38285000=09253100=
INTRINSICADR 38290000=09253100=
ELSE 38295000=09253100=
2; 38300000=09253100=
MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE]); 38305000=09253500=
MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE-1]); 38310000=09254000=
MDESC(GT1, INFO[LASTSEQROW, LASTSEQUENCE-2]); 38315000=09255000=
STMT; 38320000=09275000=
LOCK(STUFF); 38325000=09281000=
CLOSE(CARD); 38330000=09281500=
IF T:= ((L+3) DIV 4)+CORADR > 4080 THEN 38355000=09282600=
FLAG(040); 38360000=09282600=
IF NOT NOHEADING THEN % PRINT THESE THINGS IF ANY 38365000=09362000=
BEGIN % LISTING HAS BEEN DONE. 38370000=09363000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38372000
PROCEDURE PAN(T, FIEL, FX, NER, LSQ, SX); 38375000=09364000=
VALUE 38380000=09364000=
T, FX, NER, SX; 38385000=09364000=
REAL 38390000=09364000=
T, FX, NER, SX; 38391000
ARRAY 38392000
FIEL, LSQ[0]; 38393000
BEGIN 38395000=09365000=
STREAMLOCALS; 38396000
STREAMSETDI(FIEL, FX); 38400000=09365000=
STREAMSMEARLIT(44*2, 6" "); 38405000=09365000=
STREAMSETSI(LSQ, SX); 38410000=09366000=
STREAMTRANSFERWDS(1); 38415000=09366000=
STREAMSETSI(FIEL, FX); 38420000=09366000=
STREAMTRANSFERWDS(3); 38425000=09366000=
STREAMSETDI(FIEL, FX); 38430000=09367000=
STREAMTRANSFERLIT(8, 6"NUMBER O"); 38435000=09367000=
STREAMTRANSFERLIT(8, 6"F ERRORS"); 38436000
STREAMTRANSFERLIT(8, 6" DETECTE"); 38437000
STREAMTRANSFERLIT(4, 6"D = "); 38438000
STREAMSETLOCSI(NER); 38440000=09368000=
STREAMTRANSFERDEC(3); 38445000=09368000=
STREAMTRANSFERLIT(8, 6". COMPI"); 38450000=09368000=
STREAMTRANSFERLIT(8, 6"LATION T"); 38452000
STREAMTRANSFERLIT(6, 6"IME = "); 38454000
STREAMSETLOCSI(T); 38455000=09369000=
STREAMTRANSFERDEC(4); 38460000=09369000=
STREAMTRANSFERLIT(8, 6" SECONDS"); 38465000=09369000=
STREAMTRANSFERLIT(1, 6"."); 38466000
END; 38470000=09369000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38472000
PROCEDURE PEN(FIL, FX, PRTSIZ, BASE, CORE, DISK); 38475000=09370000=
VALUE 38480000=09371000=
FX, PRTSIZ, BASE, CORE, DISK; 38485000=09371000=
ARRAY 38486000
FIL[0]; 38488000
REAL 38490000
FX, PRTSIZ, BASE, CORE, DISK; 38492000
BEGIN 38505000=09372000=
STREAMLOCALS; 38506000
STREAMSETDI(FIL, FX); 38510000=09372000=
STREAMTRANSFERLIT(8, 6"PRT SIZE"); 38515000=09372000=
STREAMTRANSFERLIT(1, 6"="); 38516000
STREAMSETLOCSI(PRTSIZ); 38520000=09372000=
STREAMTRANSFERDEC(3); 38525000=09373000=
STREAMTRANSFERLIT(8, 6" BASE AD"); 38530000=09373000=
STREAMTRANSFERLIT(6, 6"DRESS="); 38532000
STREAMSETLOCSI(BASE); 38535000=09374000=
STREAMTRANSFERDEC(4); 38540000=09374000=
STREAMTRANSFERLIT(8, 6" CORE RE"); 38545000=09374000=
STREAMTRANSFERLIT(2, 6"Q="); 38546000
STREAMSETLOCSI(CORE); 38550000=09375000=
STREAMTRANSFERDEC(4); 38555000=09375000=
STREAMTRANSFERLIT(8, 6" DISK RE"); 38560000=09375000=
STREAMTRANSFERLIT(2, 6"Q="); 38562000
STREAMSETLOCSI(DISK); 38565000=09376000=
STREAMTRANSFERDEC(5); 38570000=09376000=
STREAMSMEARLIT(61, 6" "); 38575000=09376000=
END PEN; 38580000=09377000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38582000
PROCEDURE FINALAX(LINE, LX, N, SEQ, SX); 38585000=09378000=
VALUE 38590000=09378000=
LX, N, SX; 38595000=09378000=
ARRAY 38596000
LINE[0]; 38597000
REAL 38598000
LX, N, SX; 38599000
BEGIN 38600000=09379000=
STREAMLOCALS; 38602000
STREAMSETDI(LINE, LX); 38605000=09379000=
STREAMSMEARLIT(15*8, 6" "); 38610000=09379000=
STREAMSETDI(LINE, LX); 38615000=09380000=
STREAMTRANSFERLIT(8, 6"NUMBER O"); 38620000=09380000=
STREAMTRANSFERLIT(8, 6"F ACCIDE"); 38621000
STREAMTRANSFERLIT(8, 6"NTAL ENT"); 38622000
STREAMTRANSFERLIT(7, 6"RIES = "); 38623000
STREAMSETLOCSI(N); 38625000=09381000=
STREAMTRANSFERDEC(3); 38630000=09381000=
STREAMSKIPDI(+8); 38635000=09381000=
STREAMSETSI(SEQ, SX); 38640000=09382000=
STREAMSKIPSI(-16); 38645000=09382000=
STREAMTRANSFERCHR(8); 38650000=09382000=
END; 38655000=09383000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38656000
IF AXNUM ^= 0 THEN 38660000=09384000=
BEGIN 38665000=09384050=
FINALAX(LIN, 0, AXNUM, INFO[LASTSEQROW,*], LASTSEQUENCE); 38670000=09384100=
WRITELINE; 38675000=09384500=
END; 38680000=09384600=
SCRAM:= (TIME(1)-TIME1)/60; 38685000=09385000=
PAN(SCRAM, LIN, 0, ERRORCOUNT, 38690000=09386500=
INFO[LASTSEQROW,*], LASTSEQUENCE-1); 38695000=09386500=
WRITELINE; 38700000=09389000=
PEN(LIN, 0, PRTIMAX, T:= (L+3) DIV 4, T:= CORADR+T, 38702000=09389000=
((T+29) DIV 30+DISKADR)*30); 38705000=09389000=
WRITELINE; 38710000=09389500=
LOCK(LINE, CRUNCH); 38715000=09390000=
END; 38720000=09390000=
38720500
MYSELF.TASKVALUE:= ERRORCOUNT; 38721000
IF ERRORCOUNT = 0 THEN 38721500
REPLACE POINTER(EBCDICBUFF,8) BY "NO ERRORS", 0 FOR 1 38722000
ELSE 38722500
REPLACE POINTER(EBCDICBUFF,8) BY ERRORCOUNT FOR * DIGITS, 38723000
" SYNTAX ERROR", "S" FOR REAL(ERRORCOUNT^=1), 0 FOR 1; 38723500
DISPLAY(POINTER(EBCDICBUFF,8)); 38724000
38724500
IF ERRORCOUNT ^= 0 THEN 38725000=09391000=
MYSELF.STATUS:= VALUE(TERMINATED) 38730000=09391000=
ELSE 38735000=09391000=
BEGIN 38740000=09392000=
ARRAY 38745000=09392300=
SAVINFO[0:31, 0:255], 38750000=09392500=
INFO[0:200, 0:255]; % FOR LARGE MCP"S. 38755000=09392500=
INTEGER 38760000=09393000=
SAVNDX, 38765000=09393000=
NONSAVNDX, 38770000=09393000=
N; 38775000=09393000=
INTEGER 38780000=09393010=
Q, 38785000=09393010=
J, 38790000=09393010=
K, 38795000=09393010=
M; 38800000=09393010=
BOOLEAN 38805000=09393020=
TSSTOG; 38810000=09393020=
REAL 38815000=09393020=
T; 38820000=09393020=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38822000
REAL PROCEDURE PUSHER(GRINCH, GOT, XMAS); 38825000=09393050=
VALUE 38830000=09393050=
XMAS; 38835000=09393050=
REAL 38840000=09393050=
XMAS; 38845000=09393050=
ARRAY 38850000=09393060=
GOT[0]; 38855000=09393060=
ARRAY 38860000=09393060=
GRINCH[0, 0]; 38865000=09393060=
BEGIN 38870000=09393070=
REAL 38875000=09393080=
WHO, 38880000=09393080=
WHAT; 38885000=09393080=
DEFINE 38890000=09393090=
LINKR = [15:8] #; 38895000=09393090=
% 38900000=09393100=
IF WHO:= XMAS.LINKC <= 225 THEN 38905000=09393110=
BEGIN 38910000=09393120=
MOVE(30, GRINCH[XMAS.LINKR,*], WHO, GOT, 0); 38915000=09393130=
PUSHER:= XMAS+30; 38920000=09393140=
END 38925000=09393160=
ELSE 38930000=09393160=
BEGIN 38935000=09393160=
MOVE(WHAT:= 256-WHO, GRINCH[XMAS.LINKR,*], WHO, GOT, 0); 38940000=09393170=
XMAS:= XMAS+WHAT; 38945000=09393180=
MOVE(WHO:= 30-WHAT, GRINCH[XMAS.LINKR,*], 0, GOT, WHAT); 38950000=09393190=
PUSHER:= XMAS+WHO; 38955000=09393200=
END; 38960000=09393220=
END PUSHER; 38965000=09393230=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38970000=09393230=
PROCEDURE PUSHEE(GRINCH, N, B, Y); 38975000=09393240=
VALUE 38980000=09393240=
N, 38985000=09393240=
B, 38990000=09393240=
Y; 38995000=09393240=
REAL 39000000=09393240=
N, 39005000=09393240=
B, 39010000=09393240=
Y; 39015000=09393240=
ARRAY 39020000=09393250=
GRINCH[0, 0]; 39025000=09393250=
BEGIN 39030000=09393260=
REAL 39035000=09393270=
I, 39040000=09393270=
J, 39045000=09393270=
X; 39050000=09393270=
DEFINE 39055000=09393280=
LINKR = [15:8] #; 39060000=09393280=
J:= Y; 39065000=09393290=
I:= B+N; 39070000=09393300=
WHILE B < I DO 39075000=09393310=
BEGIN 39080000=09393320=
IF Y:= B.LINKC <= 225 THEN 39085000=09393330=
BEGIN 39090000=09393340=
MOVE(30, CODE, J, GRINCH[B.LINKR,*], Y); 39095000=09393350=
J:= J+30; 39100000=09393360=
B:= B+30; 39105000=09393370=
END 39110000=09393390=
ELSE 39115000=09393390=
BEGIN 39120000=09393390=
MOVE(X:= 256-Y, CODE, J, GRINCH[B.LINKR,*], Y); 39125000=09393400=
B:= B+X; 39130000=09393410=
J:= J+X; 39135000=09393420=
MOVE(Y:= 30-X, CODE, J, GRINCH[B.LINKR,*], 0); 39140000=09393430=
B:= B+Y; 39145000=09393440=
J:= J+Y; 39150000=09393450=
END; 39155000=09393460=
END; 39160000=09393470=
END PUSHEE; 39165000=09393480=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39170000=09393480=
PROCEDURE FIXHDR(F, N); 39175000=09393700=
VALUE 39180000=09393700=
N; 39185000=09393700=
FILE 39185100
F; 39185200
INTEGER 39185300
N; 39185400
BEGIN 39190000=09393710=
COMMENT FIXHDR WAS ORIGINALLY A STREAM PROCEDURE THAT SET THE 39195000=09393710=
CODE FILE TYPE CODE IN HEADER[4].[11:6]. SEE LINES 01561400- 39200000=09393710=
01561460 IN THE ORIGINAL ESPOL SOURCE. 39205000=09393710=
THIS HAS NO MEANING ON E-MODE SYSTEMS, SO THIS PROCEDURE NOW 39210000=09393710=
DOES NOTHING; 39215000=09393720=
END FIXHDR; 39260000=09393750=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39262000
LABEL 39265000=09394000=
EOF; 39270000=09394000=
IF NOT INTOG THEN 39275000=09394100=
BEGIN 39280000=09394200=
L:= (L+3) DIV 4; COMMENT L~NUM. OF WORDS IN OUTER BLOCK;39285000=09395000=
FILL SAVINFO[0, *] WITH 39295000=09395300=
3"7700000000000015", 39296000=09395300=
3"0253010477527705", 39300000=09395500=
3"0051000000000000", 39302000=09395500=
3"0441070001000062"; 39305000=09395500=
Q:= -1; 39310000=09395700=
PUSHEE(SAVEINFO, L, 4, 5); 39315000=09396000=
SAVNDX:= L; 39320000=09397000=
END; 39325000=09397100=
REWIND(CODISK); 39330000=09398000=
DO BEGIN 39335000=09399000=
IF REED = 0 THEN 39340000=09399000=
GO TO EOF; 39345000=09399000=
N:= CODELENGTH-1; 39350000=09400000=
IF BOOLEAN(CODE[0]) THEN 39355000=09401000=
BEGIN 39360000=09402000=
PUSHEE(SAVINFO, N, SAVNDX, 1); 39365000=09402100=
SAVNDX:= SAVNDX+N; 39370000=09403000=
END 39375000=09404000=
ELSE 39380000=09404000=
BEGIN 39385000=09404000=
IF DECKTOG THEN 39390000=09405000=
STACKHEAD[Q:= Q+1]:= 1024*NONSAVNDX+N; 39395000=09405500=
PUSHEE(INFO, N, NONSAVNDX, 1); 39400000=09406000=
NONSAVNDX:= ((NONSAVNDX+N+29) DIV 30)*30; 39405000=09407000=
END; 39410000=09408000=
END 39415000=09412000=
UNTIL FALSE; 39420000=09412000=
EOF: 39425000=09413000=
N:= (SAVNDX+29) DIV 30; COMMENT NUMBER OF DISK SEGMENTS39430000=09413000=
OCCUPIED BY SAVE PROCEDURES AND ARRAYS; 39440000=09414000=
IF INTOG AND NOT DECKTOG THEN 39445000=09414010=
BEGIN% INTRINSIC FUNCTION OPTION 39450000=09414020=
FOR J:= USEROPINX STEP 2 UNTIL OPARSIZE DO % IS TIMESHARING SET 39455000=09414022=
IF OPTIONS[J] = 6"@TIMES" THEN 39460000=09414024=
BEGIN 39465000=09414026=
TSSTOG:= BOOLEAN(OPTIONS[J+1]); 39470000=09414026=
J:= OPARSIZE 39475000=09414026=
END; 39480000=09414026=
I:= PRTBASE+1; 39485000=09414030=
J:= 0; 39490000=09414030=
DO 39495000=09414040=
IF GT1:= PRT[I] ^= 0 THEN 39500000=09414040=
BEGIN 39505000=09414050=
J:= J+1; 39510000=09414060=
SAVINFO[J.LINKR, J.LINKC]:= 0 & GT1[39:39:10] 39515000=09414090=
& GT1[14:29:15]; 39520000=09414090=
END 39525000=09414100=
UNTIL I:= I+1 >= PRTIMAX; 39530000=09414100=
SAVINFO[0, 0]:= J; % # OF INTRINSICS 39535000=09414110=
SAVNDX:= MAXINTRINSIC; 39540000=09414120=
END 39545000=09414130=
ELSE 39550000=09414130=
BEGIN 39555000=09414130=
I:= PRTBASE; 39560000=09415000=
DO 39565000=09415000=
IF GT1:= PRT[I] ^= 0 THEN 39570000=09415000=
BEGIN 39575000=09415500=
IF GT1.[46:5] ^= LDES THEN 39580000=09415500=
BEGIN 39585000=09416000=
IF(GT1:= GT1 & (GT1.[14:15]+L)[14:14:15]).[41:2] ^= 3 THEN39590000=09416000=
GT1:= GT1 & (GT1.[29:15]+N)[29:14:15]; 39595000=09417000=
END; 39600000=09417500=
MDESC(GT1, SAVINFO[I.LINKR, I.LINKC]); 39605000=09418000=
END 39610000=09419000=
ELSE 39615000=09419000=
SAVINFO[I.LINKR, I.LINKC]:= 0 39620000=09419000=
UNTIL I:= I+1 >= PRTIMAX; 39625000=09419000=
MDESC(0 & 1[45:0:1], SAVINFO[D, PRTBASE-1]); 39630000=09419100=
SAVNDX:= 30*N; 39635000=09420000=
END; 39640000=09420010=
I:= 0; 39645000=09420020=
J:= -1; 39650000=09420020=
IF NOT DECKTOG THEN 39655000=09421000=
BEGIN 39660000=09421500=
DO BEGIN 39665000=09423000=
I:= PUSHER(SAVINFO, ELBAT, I); 39670000=09424000=
J:= J+1; 39675000=09425000=
WRITE(DISK, 30, ELBAT[*]); 39680000=09425900=
END 39685000=09426000=
UNTIL I >= SAVNDX; 39690000=09426000=
I:= 0; 39695000=09427000=
WHILE I < NONSAVNDX DO 39700000=09427100=
BEGIN 39705000=09427200=
I:= PUSHER(INFO, ELBAT, I); 39710000=09427500=
J:= J+1; 39715000=09428000=
WRITE(DISK, 30, ELBAT[*]); 39720000=09429000=
END; 39725000=09430000=
N:= 39730000=09430050=
IF INTOG THEN 39735000=09430050=
IF TSSTOG THEN 39740000=09430050=
TSSINTYPE 39745000=09430060=
ELSE 39750000=09430060=
DCINTYPE 39755000=09430060=
ELSE 39760000=09430060=
MCPTYPE; 39765000=09430060=
FIXHDR(DISK, N); % NO EFFECT FOR MODERN MCP 39770000=09430075=
LOCK(DISK, CRUNCH); 39775000=09430100=
END 39780000=09432000=
ELSE 39785000=09432000=
BEGIN 39790000=09432000=
ELBAT[0]:= 0; 39795000=09432000=
I:= 16; 39800000=09432000=
DO BEGIN 39805000=09433000=
MOVE(8, SAVINFO[I.LINKR,*], I.LINKC, ELBAT, 1); 39810000=09433000=
ELBAT[9]:= B2D(I+96) & 1[36:0:1] & (I+96)[24:12:1]; 39815000=09434000=
WRITE(DECK, 10, ELBAT[*]); 39820000=09435000=
END 39825000=09436000=
UNTIL I:= I+8 >= SAVNDX; 39830000=09436000=
FILL ELBAT[*] WITH 0, 39835000=09439000=
3"7500000000000012", 39836000=09439000=
3"0004535530611765", 39840000=09441000=
3"7006000404210435", 39842000=09441000=
3"7700000000000015", 39845000=09443000=
3"0253010477527705", 39846000=09443000=
3"0051000004410046", 39850000=09445000=
3"0441070001000062", 39852000=09445000=
3"0040413100000000", 39855000=09446000=
3"0001000000000101"; 39856000=09446000=
WRITE(DECK, 10, ELBAT[*]); 39860000=09447000=
ELBAT[0]:= 0 & REAL(DECKTOG)[46:28:17]; 39865000=09447010=
FOR I:= 0 STEP 1 UNTIL Q DO 39870000=09447020=
BEGIN 39875000=09447030=
K:= STACKHEAD[I].[24:15]; 39880000=09447030=
M:= STACKHEAD[I].[9:10]; 39885000=09447040=
FOR J:= 0 STEP 8 UNTIL M DO 39890000=09447050=
BEGIN 39895000=09447050=
MOVE(8, INFO[(J+K).LINKR,*], (J+K).LINKC, ELBAT, 1); 39900000=09447070=
ELBAT[9]:= B2D(J) & 6"310"[46:16:17]; 39905000=09447080=
WRITE(DECK, 10, ELBAT[*]) 39910000=09447090=
END; 39915000=09447090=
END; 39920000=09447100=
END 39925000=09448000=
END 39930000=09448000=
END PROGRAM; 39935000=09448000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39940000=09448000=
39945000=10000000=
COMMENT THIS SECTION CONTAINS GENERATORS USED BY THE BLOCK ROUTINE; 39950000=10000000=
PROCEDURE DEFINEGEN(MACRO, J); 39955000=10228000=
VALUE 39960000=10228000=
MACRO, 39965000=10228000=
J; 39970000=10228000=
BOOLEAN 39975000=10228000=
MACRO; 39980000=10228000=
REAL 39985000=10228000=
J; 39990000=10228000=
BEGIN 39995000=10229000=
OWN INTEGER 40000000=10230000=
CHARCOUNT, 40005000=10230000=
REMCOUNT; 40010000=10230000=
COMMENT CHARCOUNT CONTAINS NUMBER OFCHARACTORS OF THE DEFINE THAT WE40015000=10231000=
HAVE PUT INTO INFO. REMCOUNT CONTAINS NUMBER OF CHARACT- 40020000=10232000=
ORS REMAINING IN THIS ROW OF INFO; 40025000=10233000=
PROCEDURE PUTOGETHER(CHAR, CX); 40030000=10234000=
VALUE 40031000
CX; 40032000
ARRAY 40033000
CHAR[0]; 40034000
REAL 40035000=10234000=
CX; 40040000=10234000=
BEGIN 40045000=10235000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40046000
PROCEDURE PACKINFO(INFO, IX, ISKIP, COUNT, ASKIP, ACCUM, AX); 40050000=10236000=
VALUE 40055000=10237000=
IX, ISKIP, COUNT, ASKIP, AX; 40060000=10237000=
ARRAY 40062000
INFO, ACCUM[0]; 40064000
REAL 40066000
IX, ISKIP, COUNT, ASKIP, AX; 40068000
BEGIN 40075000=10238000=
STREAMLOCALS; 40076000
STREAMSETDI(INFO, IX); 40080000=10238000=
STREAMSKIPDI(+ISKIP); 40085000=10238000=
STREAMSETSI(ACCUM, AX); 40090000=10239000=
STREAMSKIPSI(+ASKIP); 40095000=10239000=
STREAMSKIPSI(+3); 40100000=10239000=
STREAMTRANSFERCHR(COUNT) 40105000=10240000=
END PACKINFO; 40110000=10240000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40112000
INTEGER 40115000=10241000=
COUNT, 40120000=10241000=
SKIPCOUNT; 40125000=10241000=
IF(COUNT:= CHAR[CX].[35:6])+CHARCOUNT > 2047 THEN 40130000=10243000=
BEGIN 40135000=10243000=
FLAG(142); 40140000=10243000=
TB1:= TRUE 40145000=10243000=
END 40150000=10244000=
ELSE 40155000=10244000=
BEGIN 40160000=10244000=
IF COUNT > REMCOUNT THEN 40165000=10246000=
BEGIN 40170000=10246000=
SKIPCOUNT:= COUNT-(COUNT:= REMCOUNT); 40175000=10247000=
REMCOUNT:= 2047 40180000=10248000=
END 40185000=10249000=
ELSE 40190000=10249000=
REMCOUNT:= REMCOUNT-COUNT; 40195000=10249000=
GT1:= CHARCOUNT DIV 8+NEXTINFO; 40200000=10250000=
PACKINFO(INFO[GT1.LINKR,*], GT1.LINKC, CHARCOUNT.[2:3], 40205000=10252000=
COUNT, 0, CHAR, CX); 40210000=10252000=
IF SKIPCOUNT ^= 0 THEN 40215000=10253000=
PACKINFO(INFO[NEXTINFO.LINKR+1,*], 0, 0, SKIPCOUNT, COUNT, 40220000=10255000=
CHAR, CX); 40225000
CHARCOUNT:= CHARCOUNT+SKIPCOUNT+COUNT 40230000=10256000=
END 40235000=10257000=
END PUTOGETHER; 40240000=10257000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40245000=10257000=
PROCEDURE SCNN(D, DX, S, SX, Q, N, J); 40250000=10257100=
VALUE 40255000=10257100=
DX, SX, Q, N, J; 40260000=10257100=
ARRAY 40262000
D, A[0]; 40264000
REAL 40266000
DX, SX, Q, N, J; 40268000
BEGIN 40275000=10257200=
STREAMSETDI(D, DX); 40280000=10257200=
STREAMSKIPDI(+11); 40285000=10257200=
STREAMSETSI(S, SX); 40290000=10257200=
STREAMSKIPSI(+3); 40295000=10257200=
IF STREAMCOMPAREEQL(N) THEN 40300000=10257300=
IF STREAMSCGTR(6"0") THEN 40305000=10257400=
BEGIN 40310000=10257500=
STREAMSETLOCDI(J); 40315000=10257500=
STREAMSKIPDI(+7); 40320000=10257500=
IF STREAMCOMPARELEQ(1) THEN 40325000=10257600=
BEGIN 40330000=10257700=
J:= STREAMGETSI; 40335000=10257700=
STREAMSETDI(S, J); 40340000=10257700=
STREAMSETLOCSI(Q); 40345000=10257700=
STREAMSKIPSI(+6); 40350000=10257700=
STREAMTRANSFERCHR(1); 40355000=10257700=
STREAMSETDI(S, SX); 40360000=10257800=
STREAMSKIPDI(+2); 40365000=10257800=
STREAMTRANSFERCHR(1); 40370000=10257800=
END 40375000=10257900=
END 40380000=10257900=
END; 40385000=10257900=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40386000
INTEGER 40390000=10258000=
LASTRESULT; 40395000=10258000=
REAL 40400000=10258100=
K, 40405000=10258100=
N, 40410000=10258100=
ELCLASS; 40415000=10258100=
DEFINE 40420000=10258200=
I = NXTELBT #; 40425000=10258200=
LABEL 40430000=10258300=
FINAL, 40435000=10258300=
PACKIN; 40440000=10258300=
LABEL 40445000=10259000=
BACK, 40450000=10259000=
SKSC, 40455000=10259000=
EXIT; 40460000=10259000=
TB1:= FALSE; 40465000=10260000=
CHARCOUNT:= (NEXTINFO-LASTINFO)*8; 40470000=10261000=
DEFINECTR:= 1; 40475000=10262000=
LASTRESULT:= 2; 40480000=10262000=
REMCOUNT:= (256-NEXTINFO MOD 256)*8; 40485000=10263000=
NEXTINFO:= LASTINFO; 40490000=10263100=
IF J ^= 0 THEN 40495000=10263110=
N:= TAKE(LASTINFO+1).[35:6]; 40500000=10263110=
K:= 0; 40505000=10263200=
BACK: 40510000=10263300=
STOPDEFINE:= TRUE; 40515000=10263300=
ELCLASS:= TABLE(NXTELBT); 40520000=10263400=
SKSC: 40525000=10263500=
NXTELBT:= NXTELBT-1; 40530000=10263500=
IF MACRO THEN 40535000=10263600=
BEGIN 40540000=10263700=
IF ELCLASS = COMMA THEN 40545000=10263700=
IF K = 0 THEN 40550000=10263800=
FINAL: 40555000=10263900=
BEGIN 40560000=10263900=
EBCDICBUFF[0]:= 6"1#0000"; 40562000
PUTOGETHER(EBCDICBUFF, 0); 40565000=10263900=
GO TO EXIT 40570000=10263900=
END 40575000=10264000=
ELSE 40580000=10264000=
GO PACKIN; 40585000=10264000=
IF ELCLASS = LEFTPAREN OR ELCLASS = LFTBRKET THEN 40590000=10264100=
BEGIN 40595000=10264200=
K:= K+1; 40600000=10264200=
GO TO PACKIN 40605000=10264200=
END; 40610000=10264200=
IF ELCLASS = RTPAREN OR ELCLASS = RTBRKET THEN 40615000=10264300=
IF K:= K-1 < 0 THEN 40620000=10264400=
GO FINAL 40625000=10264400=
ELSE 40630000=10264400=
GO PACKIN; 40635000=10264400=
IF ELCLASS = SEMICOLON THEN 40640000=10264410=
BEGIN 40645000=10264420=
FLAG(142); 40650000=10264420=
GO TO FINAL 40655000=10264420=
END 40660000=10264420=
ELSE 40665000=10264420=
GO PACKIN 40670000=10264500=
END; 40675000=10264500=
IF J ^= 0 THEN 40680000=10264600=
IF ACCUM[1].[35:6]-1 = N THEN 40685000=10264700=
SCNN(INFO[LASTINFO.LINKR,*], LASTINFO.LINKC, ACCUM, 1, N+770, 40690000=10264900=
N, J); 40695000=10264900=
PACKIN: 40700000=10265000=
IF RESULT = 4 THEN 40705000=10266000=
BEGIN 40710000=10266000=
COMMENT INSERT " MARKS - 2130706432 IS DECIMAL FOR 1"0000; 40715000=10267000=
EBCDICBUFF[0]:= 2130706432; 40716000
PUTOGETHER(EBCDICBUFF, 0); 40720000=10268000=
PUTOGETHER(ACCUM, 1); 40725000=10269000=
EBCDICBUFF[0]:= 2130706432; 40726000
PUTOGETHER(EBCDICBUFF, 0) 40730000=10270000=
END 40735000=10271000=
ELSE 40740000=10271000=
BEGIN 40745000=10271000=
IF BOOLEAN(RESULT) AND BOOLEAN(LASTRESULT) THEN 40750000=10273000=
BEGIN 40752000
EBCDICBUFF[0]:= 6"1 0000"; 40754000
PUTOGETHER(EBCDICBUFF, 0); COMMENT INSERT BLANK; 40755000=10273000=
END; 40760000
PUTOGETHER(ACCUM, 1) 40765000=10274000=
END; 40770000=10274000=
IF TB1 THEN 40775000=10275000=
GO TO EXIT; 40780000=10275000=
LASTRESULT:= RESULT; 40785000=10276000=
IF MACRO THEN 40790000=10276500=
GO BACK; 40795000=10276500=
IF ELCLASS = DECLARATORS AND ELBAT[I].ADDRESS = DEFINEV THEN 40800000=10278000=
BEGIN 40805000=10278000=
DEFINECTR:= DEFINECTR+1; 40810000=10278000=
GO BACK 40815000=10278000=
END; 40820000=10278000=
IF ELCLASS ^= CROSSHATCH THEN 40825000=10279000=
GO BACK; 40830000=10279000=
IF DEFINECTR ^= 1 THEN 40835000=10281000=
BEGIN 40840000=10281000=
STOPDEFINE:= TRUE; 40845000=10281000=
IF ELCLASS:= TABLE(I) ^= COMMA THEN 40850000=10282000=
DEFINECTR:= DEFINECTR-1; 40855000=10283000=
GO SKSC 40860000=10283000=
END; 40865000=10283000=
EXIT: 40870000=10284000=
DEFINECTR:= 0; 40875000=10284000=
NEXTINFO:= (CHARCOUNT+7) DIV 8+NEXTINFO; 40880000=10285000=
END DEFINEGEN; 40885000=10286000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40890000=10286000=
PROCEDURE DBLSTMT; 40895000=12002000=
BEGIN 40900000=12003000=
REAL 40905000=12004000=
TVAR, % FOR VARIABLE() NAME PARAM 40906000
S, 40910000=12004000=
T; 40915000=12004000=
LABEL 40920000=12005000=
L1, 40925000=12005000=
L2, 40930000=12005000=
L3, 40935000=12005000=
EXIT; 40940000=12005000=
S:= 0; 40945000=12006000=
IF STEPI ^= LEFTPAREN THEN 40950000=12007000=
ERR(281) 40955000=12008000=
ELSE 40960000=12008000=
L1: 40965000=12009000=
BEGIN 40970000=12009000=
IF STEPI = COMMA THEN 40975000=12010000=
BEGIN 40980000=12011000=
DPTOG:= TRUE; 40985000=12012000=
IF STEPI = ADOP THEN 40990000=12013000=
STEPIT; 40995000=12013000=
EMITNUM(NLO); 41000000=12014000=
EMITNUM(IF ELBAT[I-1].ADDRESS = SUB THEN-NHI ELSE NHI); 41005000=12015000=
DPTOG:= FALSE; 41010000=12016000=
STEPIT; 41015000=12017000=
GO TO L2; 41020000=12018000=
END; 41025000=12019000=
IF TABLE(I+1) = COMMA THEN 41030000=12020000=
BEGIN 41035000=12021000=
IF ELCLASS = ADOP OR ELCLASS = MULOP THEN 41040000=12022000=
BEGIN 41045000=12023000=
EMITO(ELBAT[I].ADDRESS+1); 41050000=12024000=
IF S:= S-1 <= 0 THEN 41055000=12025000=
FLAG(282); 41060000=12025000=
STEPIT; 41065000=12025000=
GO TO L3; 41070000=12026000=
END; 41075000=12027000=
IF ELCLASS = ASSIGNOP THEN 41080000=12028000=
BEGIN 41085000=12029000=
IF S ^= 1 THEN 41090000=12030000=
FLAG(283); 41095000=12030000=
S:= 0; 41100000=12030000=
STEPIT; 41105000=12030000=
DO BEGIN 41110000=12032000=
IF ELCLASS ^= COMMA THEN 41115000=12033000=
BEGIN 41120000=12033000=
ERR(284); 41125000=12033000=
GO EXIT 41130000=12033000=
END; 41135000=12033000=
STEPIT; 41140000=12034000=
IF ELCLASS <= INTID AND ELCLASS >= REALID THEN 41145000=12035000=
BEGIN 41150000=12036000=
EMITN(ELBAT[I].ADDRESS); 41155000=12036000=
STEPIT 41160000=12036000=
END 41165000=12037000=
ELSE 41170000=12037000=
BEGIN 41172000
TVAR:=FL; 41174000
VARIABLE(TVAR); 41175000=12037000=
END; 41176000
EMITO(STD) 41180000=12038000=
END 41185000=12038000=
UNTIL S:= S+1 = 2; 41190000=12038000=
IF ELCLASS ^= RTPAREN THEN 41195000=12039000=
ERR(285) 41200000=12039000=
ELSE 41205000=12039000=
STEPIT; 41210000=12039000=
GO TO EXIT; 41215000=12040000=
END; 41220000=12041000=
IF ELCLASS <= INTID AND ELCLASS >= BOOID THEN 41225000=12042000=
BEGIN 41230000=12043000=
CHECKER(T:= ELBAT[I]); 41235000=12044000=
STEPIT; 41240000=12045000=
STEPIT; 41245000=12045000=
AEXP; 41250000=12046000=
EMITV(T.ADDRESS); 41255000=12047000=
GO TO L2; 41260000=12048000=
END; 41265000=12049000=
END; 41270000=12050000=
AEXP; 41275000=12051000=
IF ELCLASS ^= COMMA THEN 41280000=12052000=
BEGIN 41285000=12052000=
ERR(284); 41290000=12052000=
GO EXIT 41295000=12053000=
END; 41300000=12053000=
STEPIT; 41305000=12054000=
AEXP; 41310000=12054000=
EMITO(XCH); 41315000=12054000=
L2: S:= S+1; 41320000=12055000=
L3: IF ELCLASS ^= COMMA THEN 41325000=12056000=
BEGIN 41330000=12056000=
ERR(284); 41335000=12056000=
GO TO EXIT 41340000=12056000=
END; 41345000=12056000=
GO TO L1; 41350000=12057000=
EXIT: 41355000=12058000=
END 41360000=12059000=
END DBLSTMT; 41365000=12059000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41370000=12059000=
REAL PROCEDURE FIXDEFINEINFO(T); 41375000=12101000=
VALUE 41380000=12101000=
T; 41385000=12101000=
REAL 41390000=12101000=
T; 41395000=12101000=
BEGIN 41400000=12102000=
REAL 41405000=12102000=
K, 41410000=12102000=
S, 41415000=12102000=
P, 41420000=12102000=
J, 41425000=12102000=
EL; 41430000=12102000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41432000
PROCEDURE SET(S, SX, D, DX, K, E); 41435000=12103000=
VALUE 41440000=12103000=
SX, DX, K, E; 41445000=12103000=
ARRAY 41446000
S, D[0]; 41448000
REAL 41450000
SX, DX, K, E; 41452000
BEGIN 41455000=12104000=
STREAMLOCALS; 41456000
STREAMSETSI(S, SX); 41460000=12104000=
STREAMSKIPSI(+11); 41465000=12104000=
STREAMSETDI(D, DX); 41470000=12104000=
STREAMSKIPDI(+3); 41475000=12104000=
STREAMTRANSFERCHR(K); 41480000=12104000=
STREAMSETLOCSI(E); 41485000=12105000=
STREAMSKIPSI(+6); 41490000=12105000=
STREAMTRANSFERCHR(2); 41495000=12105000=
END; 41500000=12106000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41502000
MACROID:= TRUE; 41505000=12107000=
P:= (FIXDEFINEINFO:= T).ADDRESS; 41510000=12108000=
K:= COUNT; 41515000=12109000=
S:= SCRAM; 41520000=12110000=
STREAMTOG:= TRUE & STREAMTOG[46:44:45]; 41525000=12110100=
STOPDEFINE:= TRUE; 41530000=12111000=
EL:= TABLE(NXTELBT); 41535000=12112000=
NXTELBT:= NXTELBT-1; 41540000=12113000=
IF EL ^= LEFTPAREN AND EL ^= LFTBRKET THEN 41545000=12114000=
FLAG(141); 41550000=12115000=
ELSE 41555000=12116000=
DO BEGIN 41560000=12116000=
J:= J+1; 41565000=12116000=
SET(INFO[T.LINKR,*], T.LINKC, ACCUM, 1, K, 64*J+12); 41570000=12117000=
ACCUM[1].[35:6]:= K+2; 41575000=12118000=
ACCUM[0]:= 0; 41580000=12119000=
ACCUM[0].CLASS:= DEFINEDID; 41585000=12120000=
COUNT:= K+2; 41590000=12121000=
SCRAM:= ACCUM[1] MOD 125; 41595000=12122000=
E; 41600000=12123000=
DEFINEGEN(TRUE, 0); 41605000=12124000=
END 41610000=12125000=
UNTIL EL:= ELBAT[NXTELBT].CLASS ^= COMMA; 41615000=12125000=
IF EL ^= RTPAREN AND EL ^= RTBRKET OR J ^= P THEN 41620000=12126000=
FLAG(141); 41625000=12126000=
MACROID:= FALSE; 41630000=12127000=
STREAMTOG:= STREAMTOG.[46:45]; 41635000=12127100=
END; 41640000=12128000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41645000=12128000=
PROCEDURE SCATTERELBAT; 41650000=13197000=
BEGIN 41655000=13198000=
REAL 41660000=13199000=
T; 41665000=13199000=
T:= ELBAT[I]; 41670000=13200000=
KLASSF:= T.CLASS; 41675000=13201000=
FORMALF:= BOOLEAN(T.FORMAL); 41680000=13202000=
VONF:= BOOLEAN(T.VO); 41685000=13203000=
LEVELF:= T.LVL; 41690000=13204000=
ADDRSF:= T.ADDRESS; 41695000=13205000=
INCRF:= T.INCR; 41700000=13206000=
LINKF:= T.LINK; 41705000=13207000=
END SCATTERELBAT; 41710000=13208000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41715000=13208000=
PROCEDURE CHKSOB; 41720000=13209000=
IF GTA1[J:= J-1] ^= 0 THEN 41725000=13210000=
FLAG(23); 41730000=13210000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%41735000=13210000=
DEFINE 41740000=13212000=
ADDC = 532480 #, 41745000=13213000=
SUBC = 1581056 #, 41750000=13214000=
EMITSTORE = EMITPAIR #; 41755000=13214000=
PROCEDURE PURGE(STOPPER); 41760000=13215000=
VALUE 41765000=13216000=
STOPPER; 41770000=13216000=
REAL 41775000=13217000=
STOPPER; 41780000=13217000=
BEGIN 41785000=13218000=
INTEGER 41790000=13219000=
POINTAH; 41795000=13219000=
LABEL 41800000=13220000=
RECOV; 41805000=13220000=
DEFINE 41810000=13220000=
ELCLASS = KLASSF #; 41815000=13220000=
REAL 41820000=13221000=
J, 41825000=13221000=
N, 41830000=13221000=
OCR, 41835000=13221000=
TL, 41840000=13221000=
ADD; 41845000=13221000=
POINTAH:= LASTINFO; 41850000=13222000=
WHILE POINTAH >= STOPPER DO 41855000=13224000=
BEGIN 41860000=13225000=
IF ELCLASS:= (GT1:= TAKE(POINTAH)).CLASS = NONLITNO THEN 41865000=13227000=
BEGIN 41870000=13227000=
NCII:= NCII-1; 41875000=13228000=
EMITNUM(TAKE(POINTAH+1)); 41880000=13229000=
EMITSTORE(MAXSTACK, STD); 41885000=13230000=
MAXSTACK:= (G:= MAXSTACK)+1; 41890000=13231000=
J:= L; 41895000=13232000=
L:= GT1.LINK; 41900000=13232000=
DO BEGIN 41905000=13234000=
GT4:= GET(L); 41910000=13235000=
EMITV(G) 41915000=13237000=
END 41920000=13238000=
UNTIL (L:= GT4) = 4095; 41925000=13238000=
L:= J; 41930000=13239000=
POINTAH:= POINTAH-GT1.INCR 41935000=13241000=
END 41940000=13243000=
ELSE 41945000=13243000=
BEGIN 41950000=13243000=
IF NOT BOOLEAN(GT1.FORMAL) THEN 41955000=13245000=
BEGIN 41960000=13245000=
IF ELCLASS = LABELID THEN 41965000=13247000=
BEGIN 41970000=13247000=
ADD:= GT1.ADDRESS; 41975000=13248000=
IF NOT BOOLEAN(OCR:= TAKE(GIT(POINTAH))).[46:1] THEN 41980000=13250000=
IF OCR.[11:12] ^= 0 OR ADD ^= 0 THEN 41985000=13251000=
BEGIN 41990000=13251000=
GT1:= 160; 41995000=13251000=
GO TO RECOV 42000000=13251000=
END; 42005000=13251000=
IF ADD ^= 0 THEN 42010000=13252000=
PROGDESCBLDR(ADD, TRUE, OCR.[11:10], LDES) 42015000=13253000=
END 42020000=13253000=
ELSE 42025000=13253000=
IF FALSE THEN 42030000=13254000=
BEGIN 42035000=13254000=
IF TAKE(POINTAH+1) < 0 THEN 42040000=13256000=
BEGIN 42045000=13256000=
GT1:= 162; 42050000=13256000=
GO TO RECOV 42055000=13256000=
END; 42060000=13256000=
OCR:= (J:= TAKE(GIT(POINTAH))).[23:12]; 42065000=13257000=
N:= GET((J:= J.[11:12])+4); 42070000=13258000=
TL:= L; 42075000=13258000=
IF ADD:= GT1.ADDRESS ^= 0 THEN 42080000=13260000=
BEGIN 42085000=13260000=
IF OCR ^= 0 THEN 42090000=13263000=
BEGIN 42095000=13263000=
L:= OCR-2; 42100000=13263000=
CALLSWITCH(POINTAH); 42105000=13263000=
EMITO(BFW); 42110000=13263000=
END; 42115000=13263000=
L:= J+11; 42120000=13264000=
EMITL(15); 42125000=13264000=
EMITO(RTS); 42130000=13264000=
FOR J:= 4 STEP 4 UNTIL N DO 42135000=13266000=
BEGIN 42140000=13266000=
EMITL(GNAT(GET(L)*4096+GET(L+1))); 42145000=13267000=
EMITO(RTS) 42150000=13268000=
END 42155000=13269000=
END 42160000=13269000=
ELSE 42165000=13269000=
BEGIN 42170000=13269000=
L:= J+13; 42175000=13270000=
FOR J:= 4 STEP 4 UNTIL N DO 42180000=13272000=
BEGIN 42185000=13272000=
GT1:= GET(L)*4096+GET(L+1); 42190000=13273000=
GOGEN(GT1, BFW) 42195000=13274000=
END; 42200000=13274000=
END; 42205000=13274000=
L:= TL 42210000=13277000=
END 42215000=13278000=
ELSE 42220000=13278000=
IF ELCLASS >= PROCID AND ELCLASS <= INTPROCID THEN 42225000=13279000=
IF TAKE(POINTAH+1) < 0 THEN 42230000=13280000=
BEGIN 42235000=13280000=
GT1:= 161; 42240000=13280000=
RECOV: 42245000=13281000=
MOVE(9, INFO[POINTAH.LINKR,*],POINTAH.LINKC, ACCUM,0);42250000=13281000=
Q:= ACCUM[1]; 42255000=13282000=
FLAG(GT1); 42260000=13282000=
ERRORTOG:= TRUE 42265000=13282000=
END 42270000=13283000=
END; 42275000=13283000=
GT2:= TAKE(POINTAH+1); 42280000=13284000=
GT3:= GT2.PURPT; 42285000=13285000=
STACKHEAD[(0 & GT2[35:35:36]) MOD 125]:= TAKE(POINTAH).LINK; 42290000=13286000=
POINTAH:= POINTAH-GT3 42295000=13288000=
END 42300000=13289000=
END; 42305000=13289000=
LASTINFO:= POINTAH; 42310000=13290000=
NEXTINFO:= STOPPER 42315000=13292000=
END; 42320000=13292000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42325000=13292000=
PROCEDURE E; 42330000=13293000=
42335000=13294000=
COMMENT 42340000=13294000=
E IS THE PROCEDURE WHICH PLACES AN ENTRY IN INFO AND 42345000=13295000=
HOOKS IT INTO STACKHEAD. THE PREVIOUS STACKHEAD LINK 42350000=13296000=
IS SAVED IN THE LINK OF THE ELBAT WORD IN THE NEW ENTRY 42355000=13297000=
E PREVENTS AN ENTRY FROM OVERFLOWING A ROW,STARTING AT THE 42360000=13298000=
BEGINNING OF THE NEXT ROW IF NECESSARY ;42365000=13299000=
BEGIN 42370000=13300000=
REAL 42375000=13301000=
WORDCOUNT, 42380000=13301000=
RINX; 42385000=13301000=
IF RINX:= (NEXTINFO+WORDCOUNT:= (COUNT+18) DIV 8).LINKR ^= NEXTINFO.42390000=13303000=
LINKR 42395000=13304000=
THEN 42400000=13304000=
BEGIN 42405000=13304000=
PUT(125 & (RINX*256-NEXTINFO)[20:7:8], NEXTINFO); 42410000=13304000=
NEXTINFO:= 256*RINX 42415000=13305000=
END; 42420000=13305000=
IF SPECTOG THEN 42425000=13305100=
IF NOT MACROID THEN 42430000=13305200=
UNHOOK; 42435000=13305300=
ACCUM[0].INCR:= WORDCOUNT; 42440000=13307000=
IF NOT INLINETOG OR MACROID THEN 42445000=13307500=
BEGIN 42450000=13307500=
ACCUM[0].LINK:= STACKHEAD[SCRAM]; 42455000=13308000=
STACKHEAD[SCRAM]:= NEXTINFO; 42460000=13308000=
END; 42465000=13308500=
ACCUM[1].PURPT:= NEXTINFO-LASTINFO; 42470000=13309000=
MOVE(WORDCOUNT, ACCUM, 0, INFO[NEXTINFO.LINKR,*], NEXTINFO.LINKC); 42475000=13310000=
LASTINFO:= NEXTINFO; 42480000=13311000=
NEXTINFO:= NEXTINFO+WORDCOUNT 42485000=13313000=
END; 42490000=13313000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42495000=13313000=
PROCEDURE ENTRY(TYPE); 42500000=13314000=
VALUE 42505000=13315000=
TYPE; 42510000=13315000=
REAL 42515000=13316000=
TYPE; 42520000=13316000=
42525000=13317000=
COMMENT 42530000=13317000=
ENTRY ASSUMES THAT I IS POINTING AT AN IDENTIFIER WHICH 42535000=13318000=
IS BEING DECLARED AND MAKES UP THE ELBAT ENTRY FOR IT 42540000=13319000=
ACCORD TO TYPE .IF THE ENTRY IS AN ARRAY AND NOT 42545000=13320000=
A SPECIFICATION THEN A DESCRIPTOR IS PLACED IN THE STACK 42550000=13321000=
FOR THE UPCOMING COMMUNICATE TO GET STORAGE FOR THE ARRAY(S) ;42555000=13322000=
BEGIN 42560000=13323000=
J:= 0; 42565000=13324000=
I:= I-1; 42570000=13324000=
DO BEGIN 42575000=13326000=
STOPDEFINE:= TRUE; 42580000=13327000=
STEPIT; 42585000=13327000=
SCATTERELBAT; 42590000=13327000=
IF FORMALF:= SPECTOG THEN 42595000=13329000=
BEGIN 42600000=13330000=
IF ELCLASS ^= SECRET THEN 42605000=13332000=
FLAG(002); 42610000=13332000=
BUP:= BUP+1; 42615000=13333500=
KLASSF:= TYPE; 42620000=13333500=
MAKEUPACCUM; 42625000=13333500=
E; 42630000=13333500=
J:= J+1; 42635000=13333500=
END 42640000=13336000=
ELSE 42645000=13336000=
BEGIN 42650000=13336000=
IF ELCLASS > IDMAX THEN 42655000=13338000=
IF ELCLASS = POLISHV THEN 42660000=13338000=
ELCLASS:= TYPE 42665000=13338000=
ELSE 42670000=13338000=
FLAG(3); 42675000=13338000=
IF LEVELF = LEVEL THEN 42680000=13340000=
FLAG(001); 42685000=13340000=
VONF:= P2; 42690000=13341000=
FORMALF:= PTOG; 42695000=13341100=
KLASSF:= TYPE; 42700000=13342000=
MAKEUPACCUM; 42705000=13342000=
E; 42710000=13342000=
J:= J+1; 42715000=13342000=
IF((FORMALF:= PTOG) OR (STREAMTOG AND NOT STOPGSP)) AND NOT 42720000=13343000=
P2 THEN 42725000=13344000=
ADDRSF:= PJ:= PJ+1 42735000=13345000=
ELSE 42740000=13345000=
IF STOPGSP THEN 42745000=13346000=
ADDRSF:= 0 42750000=13347000=
ELSE 42755000=13347000=
ADDRSF:= GETSPACE(P2, LASTINFO+1); 42760000=13347000=
PUT(TAKE(LASTINFO) & ADDRSF[31:10:11], LASTINFO); 42765000=13348000=
END 42770000=13351000=
END 42775000=13351000=
UNTIL STEPI ^= COMMA OR STOPENTRY; 42780000=13351000=
GTA1[0]:= J 42785000=13352000=
END; 42790000=13352000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42795000=13352000=
PROCEDURE UNHOOK; 42800000=13353000=
42805000=13354000=
COMMENT 42810000=13354000=
UNHOOK ASSUMES THAT THE WORD IN ELBAT[I] POINTS TO A PSUEDO ENTRY 42815000=13355000=
FOR APARAMETER.ITS JOB IS TO UNHOOK THAT FALSE ENTRY SO THAT 42820000=13356000=
E WILL WORK AS NORMAL. ;42825000=13357000=
BEGIN 42830000=13358000=
REAL 42835000=13359000=
LINKT, 42840000=13359000=
A, 42845000=13359000=
LINKP; 42850000=13359000=
LABEL 42855000=13360000=
L; 42860000=13360000=
LINKT:= STACKHEAD[SCRAM]; 42865000=13361000=
LINKP:= ELBAT[I].LINK; 42870000=13361000=
IF LINKT = LINKP THEN 42875000=13362000=
STACKHEAD[SCRAM]:= TAKE(LINKT).LINK 42880000=13363000=
ELSE 42885000=13363000=
L: IF A:= TAKE(LINKT).LINK = LINKP THEN 42890000=13365000=
PUT((TAKE(LINKT)) & (TAKE(A))[12:12:13], LINKT) 42895000=13366000=
ELSE 42900000=13366000=
BEGIN 42905000=13366000=
LINKT:= A; 42910000=13366000=
GO TO L 42915000=13366000=
END; 42920000=13366000=
END; 42925000=13367000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42930000=13367000=
PROCEDURE MAKEUPACCUM; 42935000=13368000=
BEGIN 42940000=13369000=
IF PTOG THEN 42945000=13371000=
GT1:= LEVELF 42950000=13371000=
ELSE 42955000=13371000=
GT1:= LEVEL; 42960000=13371000=
ACCUM[0]:= ABS(ELBAT[I] & KLASSF[45:6:7] & REAL(FORMALF)[38:0:1] & 42965000=13375000=
REAL(VONF)[37:0:1] & GT1[36:4:5] & ADDRSF[31:10:11]) 42970000=13375000=
END; 42975000=13375000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%42980000=13375000=
PROCEDURE ARRAE; 42985000=13376000=
BEGIN 42990000=13377000=
INTEGER 42995000=13378000=
SAVEINFO; 43000000=13378000=
LABEL 43005000=13379000=
BETA1; 43010000=13379000=
TYPEV:= REALARRAYID; 43015000=13380000=
IF T1:= GTA1[J:= J-1] = 0 THEN 43020000=13381000=
J:= J+1 43025000=13381000=
ELSE 43030000=13383000=
IF T1 = OWNV THEN 43035000=13383000=
BEGIN 43040000=13384000=
P2:= TRUE; 43045000=13385000=
IF SPECTOG THEN 43050000=13385000=
FLAG(13) 43055000=13388000=
END 43060000=13389000=
ELSE 43065000=13389000=
TYPEV:= REALARRAYID+T1-REALV; 43070000=13389000=
BETA1: 43075000=13390000=
ENTER(TYPEV); 43080000=13390000=
IF ELCLASS ^= LFTBRKET THEN 43085000=13391000=
FLAG(16); 43090000=13391000=
IF STEPI = LITNO THEN 43095000=13392000=
BEGIN 43100000=13393000=
SAVEINFO:= ELBAT[I].ADDRESS; 43105000=13394000=
IF STEPI ^= RTBRKET THEN 43110000=13395000=
FLAG(53); 43115000=13395000=
FILLSTMT(SAVEINFO); 43120000=13396000=
SAVEINFO:= 1; 43125000=13397000=
END 43130000=13400000=
ELSE 43135000=13400000=
BEGIN 43140000=13400000=
IF ELCLASS ^= ASTRISK THEN 43145000=13400000=
FLAG(56); 43150000=13400000=
SAVEINFO:= 1; 43155000=13401000=
WHILE STEPI ^= RTBRKET DO 43160000=13402000=
BEGIN 43165000=13403000=
IF ELCLASS ^= COMMA AND STEPI ^= ASTRISK THEN 43170000=13404000=
FLAG(56); 43175000=13404000=
SAVEINFO:= SAVEINFO+1 43180000=13406000=
END; 43185000=13406000=
STEPIT; 43190000=13406000=
END; 43195000=13408000=
PUT(TAKE(LASTINFO) & SAVEINFO[20:7:8], LASTINFO); 43200000=13408000=
J:= 1; 43205000=13408500=
GTA1[0]:= 0; 43210000=13408500=
IF ELCLASS = COMMA THEN 43215000=13409000=
BEGIN 43220000=13409000=
STEPIT; 43225000=13409000=
GO TO BETA1 43230000=13409000=
END 43235000=13410000=
END ARRAE; 43240000=13410000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43245000=13410000=
PROCEDURE PUTNBUMP(X); 43250000=13589000=
VALUE 43255000=13590000=
X; 43260000=13590000=
REAL 43265000=13591000=
X; 43270000=13591000=
BEGIN 43275000=13592000=
INFO[NEXTINFO.LINKR, NEXTINFO.LINKC]:= X; 43280000=13593000=
NEXTINFO:= NEXTINFO+1 43285000=13595000=
END; 43290000=13595000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43295000=13595000=
PROCEDURE JUMPCHKX; 43300000=13596000=
43305000=13597000=
COMMENT THIS PROCEDURE IS CALLED AT THE START OF ANY EXECUTABLE CODE 43310000=13597000=
WHICH THE BLOCK MIGHT EMIT.IT DETERMINES WHETHER ANY JUMPS 43315000=13598000=
ARROUND NONEXECUTABLE CODE MAY BE WAITING AND WHETHER IT 43320000=13599000=
IS THE FIRST EXECUTABLE CODE; 43325000=13600000=
IF NOT SPECTOG THEN 43330000=13601000=
BEGIN 43335000=13602000=
IF AJUMP THEN 43340000=13604000=
BEGIN 43345000=13605000=
ADJUST; 43350000=13605000=
EMITB(BFW, SAVEL, L) 43355000=13607000=
END 43360000=13608000=
ELSE 43365000=13608000=
IF FIRSTX = 4095 THEN 43370000=13609000=
BEGIN 43375000=13610000=
ADJUST; 43380000=13611000=
FIRSTX:= L; 43385000=13612000=
END; 43390000=13613000=
AJUMP:= FALSE 43395000=13615000=
END; 43400000=13615000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43405000=13615000=
PROCEDURE JUMPCHKNX; 43410000=13616000=
43415000=13617000=
COMMENT JUMPCHKNX DETERMINES WHETHER ANY EXECUTABLE CODE HAS BEEN 43420000=13617000=
EMITTED AND IF SO WHETHER IT WAS JUST PREVIOUS TO THE 43425000=13618000=
NON EXECUTABLE ABOUT TO BE EMITTED.IF BOTH THEN L IS BUMPED 43430000=13619000=
AND SAVED FOR A LATER BRANCH; 43435000=13620000=
IF NOT SPECTOG THEN 43440000=13621000=
BEGIN 43445000=13622000=
IF FIRSTX ^= 4095 THEN 43450000=13624000=
BEGIN 43455000=13625000=
IF NOT AJUMP THEN 43460000=13627000=
SAVEL:= BUMPL; 43465000=13628000=
AJUMP:= TRUE 43470000=13630000=
END; 43475000=13630000=
ADJUST 43480000=13631000=
END; 43485000=13631000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43490000=13631000=
PROCEDURE SEGMENTSTART(SAVECODE); 43495000=13632000=
VALUE 43500000=13632000=
SAVECODE; 43505000=13632000=
BOOLEAN 43510000=13632000=
SAVECODE; 43515000=13632000=
BEGIN 43520000=13632100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43522000
PROCEDURE PRINT(SAVECODE, ADR, FIEL); 43525000=13633000=
VALUE 43530000=13633000=
SAVECODE, ADR; 43535000=13633000=
REAL 43536000
SAVECODE, ADR; 43538000
ARRAY 43540000
FIEL[0]; 43542000
BEGIN 43545000=13634000=
STREAMLOCALS; 43546000
LABEL 43550000=13635000=
L1; 43555000=13635000=
STREAMSETDI(FIEL, 0); 43560000=13636000=
STREAMSMEARLIT(8, 6" "); 43565000=13636000=
STREAMSETSI(FIEL, 0); 43570000=13637000=
STREAMTRANSFERWDS(9); 43575000=13637000=
STREAMSKIPDI(-3); 43580000=13637000=
THRU SAVECODE DO 43585000=13639000=
BEGIN 43585500
STREAMTRANSFERLIT(8, 6"START OF"); 43586000
STREAMTRANSFERLIT(8, 6" SAVE SE"); 43586500
STREAMTRANSFERLIT(8, 6"GMENT; B"); 43587000
STREAMTRANSFERLIT(8, 6"ASE ADDR"); 43587500
STREAMTRANSFERLIT(6, 6"ESS = "); 43588000
GO TO L1 43590000=13639000=
END; 43592000
STREAMTRANSFERLIT(8, 6" START O"); 43595000=13640000=
STREAMTRANSFERLIT(8, 6"F REL SE"); 43596000
STREAMTRANSFERLIT(8, 6"GMENT; D"); 43597000
STREAMTRANSFERLIT(8, 6"ISK ADDR"); 43598000
STREAMTRANSFERLIT(6, 6"ESS = "); 43599000
L1: STREAMSETLOCSI(ADR); 43600000=13642000=
STREAMTRANSFERDEC(5); 43605000=13642000=
END PRINT; 43610000=13643000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43612000
CODE[0]:= SAVECODE; 43615000=13651000=
IF SAVECODE AND INTOG AND NOT DECKTOG THEN 43620000=13651100=
FLAG(57); 43625000=13651100=
IF LISTER OR SEGSTOG THEN 43630000=13652000=
BEGIN 43635000=13652500=
PRINT(REAL(SAVECODE), IF SAVECODE THEN CORADR ELSE DISKADR, LIN); 43640000=13653000=
IF NOHEADING THEN 43645000=13653500=
DATIME; 43650000=13653500=
WRITELINE; 43655000=13653500=
END; 43660000=13654000=
END SEGMENTSTART; 43665000=13655000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43670000=13655000=
PROCEDURE SEGMENT(SIZE, FR); 43675000=13657000=
VALUE 43680000=13657000=
SIZE, 43685000=13657000=
FR; 43690000=13657000=
INTEGER 43695000=13657000=
SIZE, 43700000=13657000=
FR; 43705000=13657000=
BEGIN 43710000=13660000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43712000
PROCEDURE PRINT(SIZE, FIEL); 43715000=13661000=
VALUE 43720000=13661000=
SIZE; 43725000=13661000=
REAL 43726000
SIZE; 43727000
ARRAY 43728000
FIEL[0]; 43729000
BEGIN 43730000=13663000=
STREAMLOCALS; 43732000
STREAMSETDI(FIEL, 0); 43735000=13665000=
STREAMTRANSFERLIT(8, 6" "); 43740000=13665000=
STREAMSETSI(FIEL, 0); 43745000=13667000=
STREAMTRANSFERWDS(14); 43750000=13667000=
STREAMSKIPDI(-16); 43755000=13668000=
STREAMTRANSFERLIT(6, 6"SIZE= "); 43760000=13668000=
STREAMSETLOCSI(SIZE); 43765000=13670000=
STREAMTRANSFERDEC(4); 43770000=13670000=
STREAMTRANSFERLIT(6, 6" WORDS") 43775000=13673000=
END PRINT; 43780000=13673000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43782000
PROCEDURE DOIT(C, A, I, IX, S, SX, F, W); 43785000=13673100=
VALUE 43790000=13673100=
C, A, IX, SX, F, W; 43795000=13673100=
REAL 43796000
C, A, IX, SX, F, W; 43798000
ARRAY 43800000
I, S[0]; 43802000
BEGIN 43815000=13673150=
STREAMLOCALS; 43816000
REAL 43820000=13673150=
N; 43822000
STREAMSETDI(S, SX); 43825000=13673200=
STREAMSMEARLIT(8, 6" "); 43830000=13673200=
STREAMSETSI(S, SX); 43835000=13673200=
STREAMTRANSFERWDS(9); 43840000=13673200=
STREAMSKIPDI(-8); 43845000=13673250=
STREAMSETLOCSI(W); 43850000=13673250=
STREAMTRANSFERDEC(4); 43855000=13673250=
STREAMSETSI(I, IX); 43860000=13673300=
STREAMSKIPSI(+10); 43865000=13673300=
STREAMSETLOCDI(N); 43870000=13673300=
STREAMSKIPDI(+7); 43875000=13673300=
STREAMTRANSFERCHR(1); 43880000=13673300=
N:= STREAMTEMPD[0]; 43882000
STREAMSETDI(S, SX); 43885000=13673350=
STREAMSETLOCSI(F); 43890000=13673350=
STREAMKIPSI(+7); 43895000=13673350=
STREAMTRANSFERCHR(1); 43900000=13673350=
STREAMSETLOCSI(C); 43905000=13673350=
STREAMTRANSFERDEC(3); 43910000=13673400=
STREAMTRANSFERDEC(4); 43915000=13673400=
STREAMSETSI(I, IX); 43920000=13673400=
STREAMSKIPSI(+11); 43925000=13673400=
STREAMTRANSFERCHR(N); 43930000=13673400=
END DOIT; 43935000=13673450=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%43936000
IF LISTER OR SEGSTOG THEN 43940000=13674000=
BEGIN 43945000=13674500=
PRINT(SIZE, LIN[*]); 43950000=13675000=
IF NOHEADING THEN 43955000=13676000=
DATIME; 43960000=13676000=
WRITELINE; 43965000=13676000=
END; 43970000=13677000=
IF STUFFTOG THEN 43975000=13677100=
IF FR > 0 THEN 43980000=13677100=
IF LEVEL > 1 THEN 43985000=13677100=
BEGIN 43990000=13677150=
KLASSF:= TAKE(PROINFO).CLASS; 43995000=13677200=
IF FR > 1024 THEN 44000000=13677250=
FR:= FR-1024; 44005000=13677250=
DOIT(KLASSF, FR, INFO[PROINFO.LINKR,*], PROINFO.LINKC, 44010000=13677400=
TWXA, 0, SAF, SIZE); 44015000=13677400=
WRITE(STUFF, 10, TWXA[*]); 44020000=13677500=
END; 44025000=13677600=
IF SIZE > SEGSIZEMAX THEN 44030000=13678000=
SEGSIZEMAX:= SIZE; 44035000=13678000=
END SEGMENT; 44040000=13681000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44216000
PROCEDURE ENTER(TYPE); 44220000=13714000=
VALUE 44225000=13715000=
TYPE; 44230000=13715000=
REAL 44235000=13716000=
TYPE; 44240000=13716000=
BEGIN 44245000=13717000=
G:= GTA1[J:= J-1]; 44250000=13718000=
IF NOT SPECTOG THEN 44255000=13720000=
BEGIN 44260000=13721000=
IF NOT P2 THEN 44265000=13723000=
IF P2:= (G = OWNV) THEN 44270000=13724000=
G:= GTA1[J:= J-1]; 44275000=13724000=
IF NOT P3 THEN 44280000=13726000=
IF P3:= (G = SAVEV) THEN 44285000=13727000=
G:= GTA1[J:= J-1] 44290000=13728000=
END; 44295000=13728000=
IF G ^= 0 THEN 44300000=13729000=
FLAG(25) 44305000=13729000=
ELSE 44310000=13729000=
ENTRY(TYPE) 44315000=13730000=
END; 44320000=13730000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44325000=13730000=
PROCEDURE HTTEOAP(GOTSTORAGE, RELAD, STOPPER, PRTAD); 44330000=13731000=
VALUE 44335000=13732000=
GOTSTORAGE, 44340000=13732000=
RELAD, 44345000=13732000=
STOPPER, 44350000=13732000=
PRTAD; 44355000=13732000=
BOOLEAN 44360000=13733000=
GOTSTORAGE; 44365000=13733000=
REAL 44370000=13734000=
RELAD, 44375000=13734000=
STOPPER, 44380000=13734000=
PRTAD; 44385000=13734000=
BEGIN 44390000=13735000=
IF FUNCTOG THEN 44395000=13737000=
BEGIN 44400000=13738000=
EMITV(513); 44405000=13739000=
EMITO(RTN) 44410000=13741000=
END 44415000=13743000=
ELSE 44420000=13743000=
EMITO(XIT); 44425000=13743000=
CONSTANTCLEAN; 44430000=13744000=
PURGE(STOPPER); 44435000=13745000=
Z:= CODE[0]; 44440000=13746000=
PROGDESCBLDR(PRTAD, BOOLEAN(Z), (L+3) DIV 4, PDES); 44445000=13746000=
END HTTEOAP; 44450000=13747000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44455000=13747000=
PROCEDURE INLINE; 44460000=13748000=
BEGIN 44465000=13749000=
INTEGER 44470000=13750000=
SN, 44475000=13750000=
LN, 44480000=13750000=
P, 44485000=13750000=
LS, 44490000=13750000=
J; 44495000=13750000=
BOOLEAN 44500000=13750000=
MKST; 44505000=13750000=
BOOLEAN 44510000=13750500=
FLIPFLOP; 44515000=13750500=
INTEGER 44520000=13750600=
PN; 44525000=13750600=
LABEL 44530000=13751000=
L1, 44535000=13751000=
L2, 44540000=13751000=
L3; 44545000=13751000=
PN:= 1; 44550000=13751100=
FLIPFLOP:= INLINETOG:= TRUE; 44555000=13752000=
P:= 0; 44560000=13752000=
MKST:= FALSE; 44565000=13752000=
LS:= L; 44570000=13752000=
EMITO(NOP); 44575000=13752000=
IF STEPI ^= LEFTPAREN THEN 44580000=13753000=
FLAG(59); 44585000=13753000=
IF TABLE(I+1) = COLON THEN 44590000=13753100=
BEGIN 44595000=13753100=
STEPIT; 44600000=13753100=
GO TO L2 44605000=13753100=
END; 44610000=13753100=
L1: IF STEPI > IDMAX THEN 44615000=13754000=
BEGIN 44620000=13754000=
FLAG(465); 44625000=13754000=
GO TO L2 44630000=13754000=
END; 44635000=13754000=
ACCUM[0]:= 0 & P[31:10:11] & LOCLID[45:6:7] & SCRAM[12:12:13]; 44640000=13755000=
E; 44645000=13755500=
IF FLIPFLOP THEN 44650000=13755500=
BEGIN 44655000=13755500=
FLIPFLOP:= FALSE; 44660000=13755500=
LN:= SN:= LASTINFO 44665000=13755500=
END; 44670000=13755500=
IF STEPI = COMMA OR ELCLASS = COLON OR ELCLASS = RTPAREN THEN 44675000=13757000=
BEGIN 44680000=13757000=
I:= I-2; 44685000=13757000=
STEPIT 44690000=13757000=
END 44695000=13758000=
ELSE 44700000=13758000=
IF ELCLASS ^= ASSIGNOP THEN 44705000=13758000=
FLAG(60) 44710000=13758000=
ELSE 44715000=13758000=
STEPIT; 44720000=13758000=
AEXP; 44725000=13759000=
L2: IF ELCLASS = COLON THEN 44730000=13760000=
BEGIN 44735000=13761000=
IF MKST THEN 44740000=13761000=
FLAG(99); 44745000=13761000=
MKST:= TRUE; 44750000=13761000=
EMITO(MKS); 44755000=13761000=
P:= P+2; 44760000=13761000=
IF TABLE(I+1) ^= RTPAREN THEN 44765000=13761100=
GO TO L1; 44770000=13761100=
STEPIT; 44775000=13761110=
PN:= 2; 44780000=13761110=
END 44785000=13761200=
ELSE 44790000=13761200=
P:= P+1; 44795000=13761200=
IF ELCLASS = COMMA THEN 44800000=13762000=
GO TO L1; 44805000=13762000=
IF ELCLASS ^= RTPAREN THEN 44810000=13763000=
FLAG(61); 44815000=13763000=
IF NOT MKST THEN 44820000=13764000=
BEGIN 44825000=13765000=
J:= L; 44830000=13765000=
L:= LS; 44835000=13765000=
EMITO(MKS); 44840000=13765000=
L:= J 44845000=13765000=
END; 44850000=13765000=
IF STEPI ^= SEMICOLON THEN 44855000=13766000=
FLAG(62); 44860000=13766000=
EMITO(584); 44865000=13766100=
L3: ELBAT[I]:= TAKE(SN); 44870000=13767000=
SCATTERELBAT; 44875000=13767000=
ADDRSF:= P-ADDRSF; 44880000=13767000=
PUT(ELBAT[I] & ADDRSF[31:10:11] & STACKHEAD[LINKF][14:14:15], SN); 44885000=13768000=
STACKHEAD[LINKF]:= SN; 44890000=13769000=
SN:= SN+INCRF; 44895000=13769000=
IF ADDRSF ^= PN THEN 44900000=13770000=
GO TO L3; 44905000=13770000=
INLINETOG:= FALSE; 44910000=13770500=
PN:= NEXTINFO; 44915000=13770600=
STREAMTOG:= TRUE; 44920000=13771000=
STREAMWORDS; 44925000=13771000=
IF STEPI ^= BEGINV THEN 44930000=13771000=
STREAMSTMT 44935000=13772000=
ELSE 44940000=13772000=
BEGIN 44945000=13772000=
STEPIT; 44950000=13772000=
COMPOUNDTAIL 44955000=13772000=
END; 44960000=13772000=
STREAMTOG:= FALSE; 44965000=13773000=
PURGE(PN); 44970000=13773000=
STREAMWORDS; 44975000=13773000=
PURGE(LN); 44980000=13773000=
EMITL(16); 44985000=13773000=
END INLINE; 44990000=13774000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44995000=13774000=
45000000=14000000=
COMMENT THIS SECTION CONTAINS THE BLOCK ROUTINE ; 45005000=14000000=
PROCEDURE BLOCK(SOP); 45010000=14001000=
VALUE 45015000=14002000=
SOP; 45020000=14002000=
BOOLEAN 45025000=14003000=
SOP; 45030000=14003000=
45035000=14004000=
COMMENT SOP IS TRUE IF THE BLOCK WAS CALLED BY ITSELF THROUGH THE 45040000=14004000=
PROCEDURE DECLARATION-OTHERWISE IT WAS CALLED BY STATEMENT. 45045000=14005000=
THE BLOCK ROUTINE IS RESPONSIBLE FOR HANDLING THE BLOCK 45050000=14006000=
STRUCTURE OF AN ALGOL PROGRAM-SEGMENTING EACH BLOCK,HANDLING 45055000=14007000=
ALL DECLARATIONS,DOING NECESSARY BOOKKEEPING REGARDING EACH 45060000=14008000=
BLOCK, AND SUPPLYING THE SCANNER WITH ALL NECESSARY INFORMATION 45065000=14009000=
ABOUT DECLARED IDENTIFIERS. 45070000=14010000=
IT ALSO WRITES EACH SEGMENT ONTO THE PCT; 45075000=14011000=
BEGIN 45080000=14012000=
LABEL 45085000=14013000=
OWNERR, 45090000=14013000=
SAVERR, 45095000=14013000=
BOOLEANDEC, 45100000=14013000=
REALDEC, 45105000=14013000=
ALPHADEC, 45110000=14013000=
INTEGERDEC, 45115000=14014000=
LABELDEC, 45120000=14014000=
DUMPDEC, 45125000=14014000=
SUBDEC, 45130000=14014000=
OUTDEC, 45135000=14014000=
INDEC, 45140000=14014000=
MONITORDEC, 45145000=14015000=
SWITCHDEC, 45150000=14015000=
PROCEDUREDEC, 45155000=14015000=
ARRAYDEC, 45160000=14015000=
NAMEDEC, 45165000=14015000=
FILEDEC, 45170000=14016000=
GOTSCHK, 45175000=14017000=
STREAMERR, 45180000=14017000=
DEFINEDEC, 45185000=14017000=
CALLSTATEMENT, 45190000=14017000=
HF, 45195000=14017000=
START; 45200000=14017000=
SWITCH 45205000=14018000=
DECLSW:= OWNERR, 45210000=14018000=
SAVERR, 45215000=14018000=
BOOLEANDEC, 45220000=14018000=
REALDEC, 45225000=14018000=
INTEGERDEC, 45230000=14018000=
ALPHADEC, 45235000=14019000=
LABELDEC, 45240000=14019000=
DUMPDEC, 45245000=14019000=
SUBDEC, 45250000=14019000=
OUTDEC, 45255000=14019000=
INDEC, 45260000=14019000=
MONITORDEC, 45265000=14020000=
SWITCHDEC, 45270000=14020000=
PROCEDUREDEC, 45275000=14020000=
ARRAYDEC, 45280000=14020000=
NAMEDEC, 45285000=14020000=
FILEDEC, 45290000=14021000=
STREAMERR, 45295000=14021000=
DEFINEDEC; 45300000=14021000=
DEFINE 45305000=14022000=
NLOCS = 10 #, 45310000=14022000=
LOCBEGIN = PRTI #, 45315000=14023000=
LBP = [11:12] #, 45320000=14023100=
SPACEITDOWN = BEGIN 45325000=14023100=
WRITE(LINE[SPACE 2]); 45330000=14023100=
WRITE(LINE[SPACE 2]) 45335000=14023100=
END #; 45340000=14023100=
BOOLEAN 45345000=14025000=
GOTSTORAGE; 45350000=14025000=
INTEGER 45355000=14026000=
PINFOO, 45360000=14026000=
BLKAD; 45365000=14026000=
COMMENT LOCAL TO BLOCK TO SAVE WHERE A PROCEDURE IS EMTERED 45370000=14027000=
IN INFO; 45375000=14028000=
REAL 45380000=14029000=
MAXSTACKO, 45385000=14029000=
LASTINFOT, 45390000=14029000=
RELAD, 45395000=14029000=
LO, 45400000=14029000=
TSUBLEVEL, 45405000=14029000=
STACKCTRO; 45410000=14029000=
INTEGER 45415000=14030000=
SGNOO, 45420000=14030000=
LOLD, 45425000=14030000=
SAVELO, 45430000=14030000=
PRTIO, 45435000=14030000=
NINFOO; 45440000=14030000=
INTEGER 45445000=14031000=
NCIIO; 45450000=14031000=
INTEGER 45455000=14032000=
PROAD; 45460000=14032000=
INTEGER 45465000=14033000=
FIRSTXO; 45470000=14033000=
BOOLEAN 45475000=14034000=
FUNCTOGO, 45480000=14034000=
AJUMPO; 45485000=14034000=
BEGINCTR:= BEGINCTR+1; 45490000=14035000=
IF SOP THEN 45495000=14037000=
BEGIN 45500000=14037000=
BLKAD:= PROADD; 45505000=14037000=
IF LASTENTRY ^= 0 THEN 45510000=14039000=
BEGIN 45515000=14039000=
GT1:= BUMPL; 45520000=14039000=
CONSTANTCLEAN; 45525000=14040000=
EMITB(BFW, GT1, L) 45530000=14042000=
END 45535000=14044000=
END 45540000=14044000=
ELSE 45545000=14044000=
BEGIN 45550000=14044000=
BLKAD:= GETSPACE(TRUE, -6); % SEG. DESCR. 45555000=14044000=
END; 45560000=14048000=
FIRSTXO:= FIRSTX; 45565000=14051000=
FIRSTX:= 0; 45570000=14052000=
LEVEL:= LEVEL+1; 45575000=14053000=
LOLD:= L; 45580000=14054000=
FUNCTOGO:= FUNCTOG; 45585000=14054000=
AJUMPO:= AJUMP; 45590000=14054000=
PRTIO:= PRTI; 45595000=14054000=
SGNOO:= SGNO; 45600000=14054000=
SAVELO:= SAVEL; 45605000=14055000=
AJUMP:= FALSE; 45610000=14055000=
L:= 0; 45615000=14055000=
NINFOO:= NEXTINFO; 45620000=14055000=
NCIIO:= NCII; 45625000=14056000=
NCII:= 0; 45630000=14057000=
STACKCTRO:= STACKCTR; 45635000=14058000=
ELBAT[I].CLASS:= SEMICOLON; 45640000=14062000=
START: 45645000=14063000=
IF TABLE(I) ^= SEMICOLON THEN 45650000=14064000=
BEGIN 45655000=14065000=
FLAG(0); 45660000=14066000=
I:= I-1 45665000=14068000=
END; 45670000=14068000=
GTA1[0]:= J:= 0; 45675000=14069000=
IF SPECTOG THEN 45680000=14071000=
BEGIN 45685000=14072000=
IF BUP = PJ THEN 45690000=14074000=
BEGIN 45695000=14075000=
BEGIN 45700000=14076000=
LABEL 45705000=14076000=
GETLP; 45710000=14076000=
IF STREAMTOG THEN 45715000=14077000=
F:= 0 45720000=14077000=
ELSE 45725000=14077000=
F:= FZERO; 45730000=14078000=
BUP:= LASTINFO; 45735000=14079000=
DO BEGIN 45740000=14081000=
IF NOT STREAMTOG THEN 45745000=14082000=
BUP:= LASTINFO; 45750000=14083000=
GETLP: 45755000=14084000=
G:= TAKE(BUP); 45760000=14084000=
IF K:= G.ADDRESS ^= PJ THEN 45765000=14086000=
BEGIN 45770000=14087000=
IF BUP ^= BUP:= BUP-TAKE(BUP+1).PURPT THEN 45775000=14088000=
GO TO GETLP 45780000=14090000=
END; 45785000=14090000=
TYPEV:= G.CLASS; 45790000=14091000=
G.ADDRESS:= F:= F+1; 45795000=14115000=
PUT(G, BUP); 45800000=14116000=
G.INCR:= GT1; 45805000=14116000=
PUT(G, MARK+PJ); 45810000=14118000=
BUP:= BUP-TAKE(BUP+1).PURPT 45815000=14119000=
END 45820000=14120000=
UNTIL PJ:= PJ-1 = 0 45825000=14121000=
END; 45830000=14121000=
SPECTOG:= FALSE; 45835000=14122000=
GO TO HF 45840000=14124000=
END 45845000=14125000=
END; 45850000=14125000=
STACKCT:= 0; 45855000=14125500=
WHILE STEPI = DECLARATORS DO 45860000=14127000=
BEGIN 45865000=14128000=
GTA1[J:= J+1]:= ELBAT[I].ADDRESS; 45870000=14129000=
STOPDEFINE:= ERRORTOG:= TRUE; 45875000=14130000=
END; 45880000=14131000=
IF J = 0 THEN 45885000=14132000=
GO TO CALLSTATEMENT; 45890000=14132000=
P2:= P3:= FALSE; 45895000=14133000=
GO TO DECLSW[GTA1[J]]; 45900000=14134000=
OWNERR: 45905000=14135000=
FLAG(20); 45910000=14135000=
J:= J+1; 45915000=14135000=
GO TO REALDEC; 45920000=14135000=
SAVERR: 45925000=14136000=
FLAG(21); 45930000=14136000=
J:= J+1; 45935000=14136000=
GO TO REALDEC; 45940000=14136000=
STREAMERR: 45945000=14137000=
IF ELCLASS = LEFTPAREN THEN % 6 45950000=14137000=
BEGIN % 6 45955000=14137100=
I:= I-1; % 6 45960000=14137200=
GO TO CALLSTATEMENT; % 6 45965000=14137300=
END; % 6 45970000=14137400=
FLAG(22); % 6 45975000=14137500=
J:= J+1; % 6 45980000=14137600=
GO TO PROCEDUREDEC; % 6 45985000=14137700=
REALDEC: 45990000=14138000=
P3:= TRUE; 45995000=14138000=
ENTER(REALID); 46000000=14138000=
GO TO START; 46005000=14138000=
ALPHADEC: 46010000=14139000=
P3:= TRUE; 46015000=14139000=
ENTER(ALFAID); 46020000=14139000=
GO TO START; 46025000=14139000=
BOOLEANDEC: 46030000=14140000=
P3:= TRUE; 46035000=14140000=
ENTER(BOOID); 46040000=14140000=
GO TO START; 46045000=14140000=
INTEGERDEC: 46050000=14141000=
P3:= TRUE; 46055000=14141000=
ENTER(INTID); 46060000=14141000=
GO TO START; 46065000=14141000=
MONITORDEC: 46070000=14142000=
IF SPECTOG THEN 46075000=14143000=
BEGIN COMMENT ERROR 463 MEANS THAT A MONITOR 46080000=14143000=
DECLARATION APPEARS IN THE SPECIFICATION 46090000=14144000=
PART OF A PROCEDURE; 46095000=14145000=
FLAG(463); 46100000=14146000=
END; 46105000=14147000=
DO 46110000=14148000=
UNTIL FALSE; % ?? REALLY ?? THIS MUST BE DEAD CODE 46115000=14148000=
DUMPDEC: 46120000=14149000=
IF SPECTOG THEN 46125000=14150000=
BEGIN COMMENT ERROR 464 MEANS A DUMP DECLARATION 46130000=14150000=
APPEARS IN THE SPECIFICATION PART OF A 46140000=14151000=
PROCEDURE; 46145000=14152000=
FLAG(464); 46150000=14153000=
END; 46155000=14154000=
DO 46160000=14155000=
UNTIL FALSE; % ?? MORE DEAD CODE ?? 46165000=14155000=
ARRAYDEC: 46170000=14156000=
ARRAE; 46175000=14156000=
GO TO START; 46180000=14156000=
FILEDEC: 46185000=14158000=
INDEC: 46190000=14158000=
OUTDEC: 46195000=14160000=
GOTSCHK: 46200000=14160000=
GOTSTORAGE:= NOT SPECTOG OR GOTSTORAGE; 46205000=14160000=
GO TO START; 46210000=14160000=
NAMEDEC: 46215000=14161000=
IF T1:= GTA1[J:= J-1] ^= ARRAYV THEN 46220000=14161000=
J:= J+1; 46225000=14161000=
TYPEV:= NAMEID; 46230000=14161010=
IF T1:= GTA1[J:= J-1] = 0 THEN 46235000=14161020=
J:= J+1 46240000=14161030=
ELSE 46245000=14161030=
IF T1 = OWNV THEN 46250000=14161050=
BEGIN 46255000=14161060=
P2:= TRUE; 46260000=14161070=
IF SPECTOG THEN 46265000=14161070=
FLAG(013); 46270000=14161080=
END 46275000=14161120=
ELSE 46280000=14161120=
TYPEV:= NAMEID+T1-REALV; 46285000=14161120=
ENTER(TYPEV); 46290000=14162000=
GO TO START; 46295000=14162000=
SUBDEC: 46300000=14163500=
BEGIN 46305000=14163500=
REAL 46310000=14163500=
TYPEV, 46315000=14163500=
T; 46320000=14163500=
IF GTA1[J:= J-1] = REALV THEN 46325000=14164000=
TYPEV:= REALSUBID 46330000=14164000=
ELSE 46335000=14164000=
TYPEV:= SUBID; 46340000=14164000=
STOPGSP:= TRUE; 46345000=14164500=
JUMPCHKNX; 46350000=14165000=
ENTRY(TYPEV); 46355000=14165000=
IF ELCLASS ^= SEMICOLON THEN 46360000=14165000=
FLAG(57); 46365000=14165000=
STOPGSP:= FALSE; 46370000=14165500=
STEPIT; 46375000=14166000=
T:= NEXTINFO; 46380000=14166500=
PUTNBUMP(L); 46385000=14167000=
STMT; 46390000=14167000=
EMITO(LFU); 46395000=14167000=
IF TYPEV = REALSUBID THEN 46400000=14167000=
IF GET(L-2) ^= 533 THEN 46405000=14168000=
FLAG(58); 46410000=14168000=
PUT(TAKE(T) & L[23:11:12], T); 46415000=14168000=
CONSTANTCLEAN; 46420000=14168500=
END; 46425000=14169000=
GO TO START; 46430000=14170000=
LABELDEC: 46435000=14187000=
IF SPECTOG AND FUNCTOG THEN 46440000=14187000=
FLAG(24); 46445000=14187000=
STOPENTRY:= STOPGSP:= TRUE; 46450000=14188000=
I:= I-1; 46455000=14189000=
DO BEGIN 46460000=14191000=
STOPDEFINE:= TRUE; 46465000=14192000=
STEPIT; 46470000=14193000=
ENTRY(LABELID); 46475000=14194000=
PUTNBUMP(0) 46480000=14196000=
END 46485000=14197000=
UNTIL ELCLASS ^= COMMA; 46490000=14197000=
STOPENTRY:= STOPGSP:= FALSE; 46495000=14198000=
GO TO START; 46500000=14199000=
SWITCHDEC: 46505000=14201000=
BEGIN 46510000=14201000=
LABEL 46515000=14202000=
START; 46520000=14202000=
INTEGER 46525000=14203000=
GT1, 46530000=14203000=
GT2, 46535000=14203000=
GT4, 46540000=14203000=
GT5; 46545000=14203000=
BOOLEAN 46550000=14204000=
TB1; 46555000=14204000=
STOPENTRY:= NOT SPECTOG; 46560000=14205000=
STOPGSP:= TRUE; 46565000=14205000=
SCATTERELBAT; 46570000=14206000=
GT1:= 0; 46575000=14206000=
TB1:= FALSE; 46580000=14206000=
ENTRY(SWITCHID); 46585000=14207000=
GT2:= NEXTINFO; 46590000=14217000=
PUTNBUMP(0); 46595000=14217000=
DO BEGIN 46600000=14219000=
IF STEPI ^= LABELID OR ELBAT[I].LVL ^= LEVEL THEN 46605000=14220000=
FLAG(63); 46610000=14220000=
PUTNBUMP(ELBAT[I]); 46615000=14221000=
GT1:= GT1+1; 46620000=14221000=
END; 46625000=14222000=
; COMMENT 46630000=14222500=
UNTIL STEPI^=COMMA; 46635000=14223000=
PUT(GT1, GT2); 46640000=14224000=
STOPENTRY:= STOPGSP:= FALSE; 46645000=14251000=
END SWITCHDEC; 46650000=14252000=
GO TO START; 46655000=14253000=
DEFINEDEC: 46660000=14254050=
BEGIN 46665000=14254050=
LABEL 46670000=14254050=
START; 46675000=14254050=
REAL 46680000=14254100=
J, 46685000=14254100=
K; 46690000=14254100=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%46692000
BOOLEAN PROCEDURE PARM(S, SX, D, K, J); 46695000=14254200=
VALUE 46705000=14254200=
SX, K, J; 46710000=14254200=
ARRAY 46712000
S, D[0]; 46714000
REAL 46716000
SX, K, J; 46718000
BEGIN 46720000=14254300=
STREAMLOCALS; 46722000
STREAMSETSI(S, SX); 46725000=14254300=
STREAMSKIPSI(+2); 46730000=14254300=
STREAMSETDI(D, 0); 46735000=14254300=
STREAMSKIPDI(+2); 46740000=14254300=
IF STREAMCOMPARENEQ(K) THEN 46745000=14254400=
TALLY:= 1; 46750000=14254500=
STREAMSETLOCDI(J); 46752000
STREAMSKIPDI(+7); 46755000=14254500=
IF STREAMCOMPARENEQ(1) THEN 46760000=14254600=
TALLY:= 1; 46765000=14254600=
PARM:= TALLY; 46770000=14254700=
END; 46775000=14254800=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%46776000
STOPENTRY:= STOPGSP:= TRUE; 46780000=14255000=
I:= I-1; 46785000=14255000=
DO BEGIN 46790000=14257000=
STOPDEFINE:= TRUE; 46795000=14258000=
STEPIT; 46800000=14259000=
MOVE(9, ACCUM, 1, GTA1, 0); 46805000=14259000=
K:= COUNT+1; 46810000=14259010=
J:= GTA1[0]; 46815000=14259010=
ENTRY(DEFINEDID); 46820000=14259010=
GTA1[0]:= J+6"100000"; 46825000=14259015=
J:= 0; 46830000=14259015=
IF ELCLASS = LEFTPAREN OR ELCLASS = LFTBRKET THEN 46835000=14259020=
BEGIN 46840000=14259030=
DO BEGIN 46845000=14259060=
STOPDEFINE:= TRUE; 46850000=14259060=
STEPIT; 46855000=14259070=
IF(J:= J+1) > 9 OR PARM(ACCUM, 1, GTA1, K, J) 46860000=14259090=
OR K > 62 46865000=14259090=
THEN 46870000=14259090=
BEGIN 46875000=14259090=
ERR(141); 46880000=14259090=
GO TO START 46885000=14259090=
END; 46890000=14259090=
STOPDEFINE:= TRUE; 46895000=14259100=
END 46900000=14259110=
UNTIL STEPI ^= COMMA; 46905000=14259110=
IF ELCLASS ^= RTPAREN AND ELCLASS ^= RTBRKET THEN 46910000=14259120=
ERR(141); 46915000=14259120=
STOPDEFINE:= TRUE; 46920000=14259130=
STEPIT; 46925000=14259140=
PUT(TAKE(LASTINFO) & J[31:10:11], LASTINFO); 46930000=14259150=
END; 46935000=14259160=
IF ELCLASS ^= RELOP THEN 46940000=14261000=
BEGIN 46945000=14262000=
FLAG(30); 46950000=14263000=
I:= I-1; 46955000=14264000=
END; 46960000=14265000=
MACROID:= TRUE; 46965000=14265900=
DEFINEGEN(FALSE, J); 46970000=14266000=
MACROID:= FALSE; 46975000=14266100=
END 46980000=14268000=
UNTIL STEPI ^= COMMA; 46985000=14268000=
START: 46990000=14269000=
STOPENTRY:= STOPGSP:= FALSE; 46995000=14269000=
END; 47000000=14269000=
GO TO START; 47005000=14269000=
PROCEDUREDEC: 47010000=14271000=
BEGIN 47015000=14271000=
LABEL 47020000=14272000=
START, 47025000=14272000=
START1; 47030000=14272000=
LABEL 47035000=14273000=
START2; 47040000=14273000=
BOOLEAN 47045000=14274000=
FWDTOG; COMMENT THIS TOGGLE IS THE FORWARD DEC INDICATOR; 47050000=14274000=
IF NOT SPECTOG THEN 47060000=14275000=
FUNCTOG:= FALSE; 47065000=14275000=
FWDTOG:= FALSE; 47070000=14276000=
MAXSTACKO:= MAXSTACK; 47075000=14277000=
IF G:= GTA1[J:= J-1] = STREAMV THEN 47080000=14279000=
BEGIN 47085000=14280000=
STREAMTOG:= TRUE; 47090000=14280000=
IF G:= GTA1[J:= J-1] = 0 THEN 47095000=14281000=
TYPEV:= STRPROCID 47100000=14282000=
ELSE 47105000=14282000=
BEGIN 47110000=14283000=
IF TYPEV:= PROCID+G > INTSTRPROCID OR 47115000=14286000=
TYPEV < BOOSTRPROCID THEN 47120000=14286000=
FLAG(004); 47125000=14286000=
IF NOT SPECTOG THEN 47130000=14287000=
FUNCTOG:= TRUE; 47135000=14288000=
CHKSOB 47140000=14290000=
END 47145000=14291000=
END 47150000=14292000=
ELSE 47155000=14292000=
IF G = SAVEV OR G = 0 THEN 47160000=14292000=
TYPEV:= PROCID 47165000=14293000=
ELSE 47170000=14293000=
IF TYPEV:= REALSTRPROCID+G < BOOPROCID 47175000=14295000=
OR TYPEV > INTPROCID THEN 47180000=14295000=
FLAG(005) 47185000=14296000=
ELSE 47190000=14296000=
BEGIN 47195000=14296000=
FUNCTOG:= TRUE; 47200000=14296000=
G:= GTA1[J:= J-1]; 47205000=14296000=
END; 47210000=14297000=
IF NOT STREAMTOG THEN 47215000=14298000=
SEGMENTSTART(G = SAVEV); 47220000=14298000=
SAF:= G = SAVEV; 47225000=14299000=
MODE:= MODE+1; 47230000=14303000=
LO:= PROINFO; 47235000=14304000=
SCATTERELBAT; 47240000=14305000=
47245000=14306000=
COMMENT CHECK TO SEE IF DECLARED FORWARD PREVIOUSLY ;47250000=14306000=
IF LEVELF = LEVEL THEN 47255000=14308000=
BEGIN 47260000=14309000=
IF G:= TAKE(LINKF+1) >= 0 THEN 47265000=14311000=
FLAG(006); 47270000=14311000=
FWDTOG:= TRUE; 47275000=14312000=
PROAD:= ADDRSF; 47280000=14313000=
PROINFO:= ELBAT[I]; 47285000=14314000=
MARK:= LINKF+INCRF; 47290000=14314000=
STEPIT; 47295000=14315000=
PUT(-G, LINKF+1); 47300000=14315000=
END 47305000=14318000=
ELSE 47310000=14318000=
BEGIN 47315000=14318000=
STOPENTRY:= TRUE; 47320000=14318000=
P2:= TRUE; 47325000=14318000=
STOPGSP:= LEVEL > 1 AND STREAMTOG; 47330000=14318500=
ENTRY(TYPEV); 47335000=14319000=
MARK:= NEXTINFO; 47340000=14319000=
PUTNBUMP(0); 47345000=14319000=
STOPGSP:= FALSE; 47350000=14319500=
PROINFO:= TAKE(LASTINFO) & LASTINFO[12:12:13]; 47355000=14320000=
PROAD:= ADDRSF; 47360000=14320000=
P2:= STOPENTRY:= FALSE 47365000=14322000=
END; 47370000=14322000=
PJ:= 0; 47375000=14323000=
LEVEL:= LEVEL+1; 47380000=14323000=
IF STREAMTOG THEN 47385000=14324000=
STREAMWORDS; 47390000=14324000=
IF ELCLASS = SEMICOLON THEN 47395000=14325000=
GO TO START1; 47400000=14325000=
IF ELCLASS ^= LEFTPAREN THEN 47405000=14326000=
FLAG(007); 47410000=14326000=
47415000=14327000=
COMMENT: THE FOLLOWING 8 STATEMENTS FOOL THE SCANNER AND BLOCK,PUTTING 47420000=14327000=
FORMAL PARAMETER ENTRIES IN THE ZERO ROW OF INFO; 47425000=14328000=
RR1:= NEXTINFO; 47430000=14329000=
LASTINFOT:= LASTINFO; 47435000=14330000=
LASTINFO:= NEXTINFO:= 1; 47440000=14330000=
PUTNBUMP(0); 47445000=14331000=
PTOG:= TRUE; 47450000=14332000=
I:= I+1; 47455000=14332000=
ENTRY(SECRET); 47460000=14333000=
IF FWDTOG THEN 47465000=14333100=
BEGIN 47470000=14333200=
IF GT1:= TAKE(MARK).[7:8] ^= PJ THEN 47475000=14333300=
FLAG(48); % WRONG 47480000=14333300=
% NUMBER OF PARAMETERS. WE DON"T WANT TO CLOBBER INFO. 47485000=14333400=
END 47490000=14334000=
ELSE 47495000=14334000=
PUT(PJ, MARK); 47500000=14334000=
P:= PJ; 47505000=14335000=
IF ELCLASS ^= RTPAREN THEN 47510000=14337000=
FLAG(008); 47515000=14337000=
IF STEPI ^= SEMICOLON THEN 47520000=14339000=
FLAG(009); 47525000=14339000=
47530000=14340000=
COMMENT MARK PARAMETERS VALUE IF THERE IS A VALUE PART; 47535000=14340000=
IF STEPI = VALUEV THEN 47540000=14342000=
BEGIN 47545000=14343000=
DO 47550000=14345000=
IF STEPI ^= SECRET THEN 47555000=14346000=
FLAG(010) 47560000=14347000=
ELSE 47565000=14347000=
BEGIN 47570000=14348000=
IF G:= ELBAT[I].ADDRESS = 0 OR G > PJ THEN 47575000=14350000=
FLAG(010); 47580000=14351000=
G:= TAKE(ELBAT[I]); 47585000=14352000=
PUT(G & 1[37:0:1], ELBAT[I]) 47590000=14354000=
END 47595000=14356000=
UNTIL STEPI ^= COMMA; 47600000=14356000=
IF ELCLASS ^= SEMICOLON THEN 47605000=14358000=
FLAG(011) 47610000=14359000=
ELSE 47615000=14359000=
STEPIT 47620000=14360000=
END; 47625000=14360000=
I:= I-1; 47630000=14360000=
IF STREAMTOG THEN 47635000=14362000=
BEGIN 47640000=14363000=
BUP:= PJ; 47645000=14364000=
SPECTOG:= TRUE; 47650000=14364000=
GO TO START1 47655000=14365000=
END 47660000=14367000=
ELSE 47665000=14367000=
BEGIN 47670000=14367000=
SPECTOG:= TRUE; 47675000=14368000=
BUP:= 0; 47680000=14369000=
IF ELCLASS ^= DECLARATORS THEN 47685000=14371000=
FLAG(012) 47690000=14372000=
END; 47695000=14372000=
START: 47700000=14373000=
PTOG:= FALSE; 47705000=14373000=
LASTINFO:= LASTINFOT; 47710000=14373000=
NEXTINFO:= 47715000=14373000=
IF FWDTOG THEN 47720000=14373000=
RR1 47725000=14373000=
ELSE 47730000=14373000=
MARK+PJ+1; 47735000=14374000=
START1: 47740000=14375000=
PINFOO:= NEXTINFO; 47745000=14375000=
START2: 47750000=14376000=
END; 47755000=14376000=
IF SPECTOG OR STREAMTOG THEN 47760000=14378000=
GO TO START; 47765000=14379000=
47770000=14380000=
COMMENT IF SPECTOG IS ON THEN THE BLOCK WILL PROCESS THE SPECIFICATION 47775000=14380000=
PART SIMILARY TO DECLARATIONS WITH A FEW NECESSARY VARIATIONS; 47780000=14381000=
HF: BEGIN 47785000=14383000=
LABEL 47790000=14384000=
START, 47795000=14384000=
STOP; 47800000=14384000=
DEFINE 47805000=14384100=
TESTLEV = LEVEL > 2 #; 47810000=14384100=
IF STREAMTOG THEN 47815000=14386000=
BEGIN 47820000=14386000=
IF TESTLEV THEN 47825000=14387000=
JUMPCHKNX 47830000=14387000=
ELSE 47835000=14387000=
SEGMENTSTART(TRUE); 47840000=14387000=
PJ:= P; 47845000=14387000=
PTOG:= FALSE; 47850000=14388000=
PUT(TAKE(GIT(PROINFO)) & L[19:11:12], GIT(PROINFO)); 47855000=14388100=
IF TESTLEV THEN 47860000=14389000=
BEGIN 47865000=14389000=
EMITO(584); 47870000=14389000=
END; 47875000=14389000=
IF STEPI = BEGINV THEN 47880000=14394000=
BEGIN 47885000=14395000=
WHILE STEPI = DECLARATORS OR ELCLASS = LOCALV DO 47890000=14397000=
BEGIN 47895000=14398000=
IF ELBAT[I].ADDRESS = LABELV THEN 47900000=14400000=
BEGIN 47905000=14401000=
STOPDEFINE:= STOPGSP:= STOPENTRY:= TRUE; 47910000=14402000=
DO BEGIN 47915000=14403000=
STOPDEFINE:= TRUE; 47920000=14403000=
STEPIT; 47925000=14403000=
ENTRY(STLABID); 47930000=14403000=
PUTNBUMP(0) 47935000=14403000=
END 47940000=14404000=
UNTIL ELCLASS ^= COMMA; 47945000=14404000=
STOPGSP:= STOPENTRY:= FALSE 47950000=14405000=
END 47955000=14407000=
ELSE 47960000=14407000=
BEGIN 47965000=14407000=
I:= I+1; 47970000=14408000=
ENTRY(LOCLID) 47975000=14410000=
END 47980000=14411000=
END; 47985000=14411000=
IF FUNCTOG THEN 47990000=14411100=
PUT((Z:= TAKE(PROINFO)) & LOCLID[45:6:7] & 47995000=14411300=
(PJ+2+REAL(TESTLEV))[31:10:11], PROINFO); 48000000=14411300=
COMPOUNDTAIL 48005000=14413000=
END 48010000=14415000=
ELSE 48015000=14415000=
BEGIN 48020000=14415000=
IF FUNCTOG THEN 48025000=14415100=
PUT((Z:= TAKE(PROINFO)) & LOCLID[45:6:7] & 48030000=14415300=
(PJ+2+REAL(TESTLEV))[31:10:11], PROINFO); 48035000=14415300=
STREAMSTMT; 48040000=14415400=
END; 48045000=14415500=
COMMENT THE FOLLOWING BLOCK CONSTITUTES THE STREAM PROCEDURE PURGE; 48050000=14416000=
BEGIN 48055000=14417000=
REAL 48060000=14418000=
NLOC, 48065000=14418000=
NLAB; 48070000=14418000=
DEFINE 48075000=14419000=
SES = 18 #, 48080000=14419000=
SED = 6 #, 48085000=14419000=
TRW = 5 #; 48090000=14419000=
DEFINE 48095000=14420000=
LOC = [11:12] #, 48100000=14420000=
LASTGT = [23:12] #; 48105000=14420000=
J:= LASTINFO; 48110000=14421000=
NLOC:= NLAB:= 0; 48115000=14422000=
DO BEGIN 48120000=14424000=
IF (GT1:= TAKE(J)).CLASS = LOCLID THEN 48125000=14425000=
BEGIN 48130000=14426000=
IF BOOLEAN(GT1.FORMAL) THEN 48135000=14427000=
BEGIN 48140000=14428000=
IF GT1 < 0 THEN 48145000=14429000=
PUT(TAKE(GT2:= MARK+P-GT1.ADDRESS+1) & 48150000=14431000=
FILEID[45:6:7], GT2); 48155000=14431000=
END 48160000=14433000=
ELSE 48165000=14433000=
NLOC:= NLOC+1; 48170000=14433000=
END 48175000=14436000=
ELSE 48180000=14436000=
BEGIN 48185000=14436000=
IF GT1.ADDRESS ^= 0 THEN 48190000=14437000=
NLAB:= NLAB+1; 48195000=14437000=
IF (GT3:= TAKE(GIT(J))).LASTGT ^= 0 AND GT3.LOC = 0 48200000=14438000=
THEN 48205000=14438000=
BEGIN 48210000=14439000=
MOVE(9, INFO[0,*], J, ACCUM, 0); 48215000=14440000=
Q:= ACCUM[1]; 48220000=14441000=
FLAG(267); 48225000=14442000=
ERRORTOG:= TRUE; 48230000=14443000=
END; 48235000=14444000=
END; 48240000=14445000=
G:= (GT2+TAKE(J+1)).PURPT; 48245000=14446000=
IF GT1.[45:8] ^= STLABID*2+1 THEN 48250000=14447000=
STACKHEAD[(0 & GT2[35:35:36]) MOD 125]:= TAKE(J).LINK; 48255000=14448000=
END 48260000=14449000=
UNTIL J:= J-G <= 1; 48265000=14449000=
IF TESTLEV THEN 48270000=14451000=
BEGIN 48275000=14451000=
EMITC(1, 0); 48280000=14451000=
EMITO(BFW) 48285000=14451000=
END 48290000=14451100=
ELSE 48295000=14451100=
EMIT(0); 48300000=14451100=
PUT(TAKE(MARK) & NLOC[46:5:6] & L[31:11:12] & P[7:7:8], 48305000=14451200=
MARK); 48310000=14451200=
IF FUNCTOG THEN 48315000=14452000=
PUT(Z, PROINFO); 48320000=14457000=
STREAMWORDS; 48325000=14460000=
STREAMTOG:= FALSE; 48330000=14461000=
IF NOT TESTLEV THEN 48335000=14461100=
BEGIN 48340000=14461100=
PROGDESCBLDR(PROAD, TRUE, (L+3) DIV 4, CHAR); 48345000=14461100=
SEGMENT((L+3) DIV 4, PROINFO.ADDRESS); 48350000=14461200=
RIGHT(L); 48355000=14461300=
L:= 0; 48360000=14461300=
END; 48365000=14461400=
IF LISTER AND FORMATOG THEN 48370000=14461500=
SPACEITDOWN; 48375000=14461500=
END; 48380000=14462000=
LASTINFO:= LASTINFOT; 48385000=14463000=
NEXTINFO:= MARK+P+1; 48390000=14463000=
END 48395000=14466000=
ELSE 48400000=14466000=
BEGIN 48405000=14466000=
IF STEPI = FORWARDV THEN 48410000=14468000=
BEGIN 48415000=14469000=
PUT(-TAKE(G:= PROINFO.LINK+1), G); 48420000=14470000=
PURGE(PINFOO); 48425000=14471000=
STEPIT 48430000=14473000=
END 48435000=14475000=
ELSE 48440000=14475000=
BEGIN 48445000=14475000=
PROADO:= PROAD; 48450000=14476000=
TSUBLEVEL:= SUBLEVEL; 48455000=14477000=
SUBLEVEL:= LEVEL; 48460000=14477000=
STACKCTRO:= STACKCTR; 48465000=14477000=
IF MODE = 1 THEN 48470000=14478000=
FRSTLEVEL:= LEVEL; 48475000=14478000=
STACKCTR:= 513+REAL(FUNCTOG); 48480000=14478000=
IF ELCLASS = BEGINV THEN 48485000=14479000=
BEGIN 48490000=14481000=
CALLINFO:= (CALLX:= CALLX+1)+1; 48495000=14481100=
NEXTCTR:= STACKCTR; 48500000=14481200=
BLOCK(TRUE); 48505000=14482000=
; 48510000=14483000=
PURGE(PINFOO); 48515000=14483000=
IF NESTOG THEN 48520000=14483100=
BEGIN 48525000=14483200=
GT1:= TAKE(PROINFO).ADDRESS; 48530000=14483200=
NESTPRT[GT1]:= 0 & PROINFO[12:12:13] & CALLINFO[25:12:13];48535000=14483300=
CALL[CALLINFO-1]:= (TAKE(GIT(PROINFO))+NESTCTR-511) & 48540000=14483500=
CALLX[25:12:13]; 48545000=14483500=
END; 48550000=14483600=
L:= 0; 48555000=14483700=
GO TO STOP 48560000=14484000=
END; 48565000=14484000=
BEGIN 48570000=14485000=
FLAG(052); 48575000=14486000=
RELAD:= L; 48580000=14487000=
STMT; 48585000=14488000=
HTTEOAP(FALSE, RELAD, PINFOO, PROAD); 48590000=14489000=
END; 48595000=14490000=
STOP: 48600000=14492000=
SUBLEVEL:= TSUBLEVEL; 48605000=14492000=
STACKCTR:= STACKCTRO; 48610000=14493000=
IF LISTER AND FORMATOG THEN 48615000=14493500=
SPACEITDOWN; 48620000=14493500=
END; 48625000=14494000=
END; 48630000=14495000=
PROINFO:= LO; 48635000=14496000=
IF JUMPCTR = LEVEL THEN 48640000=14498000=
JUMPCTR:= LEVEL-1; 48645000=14499000=
LEVEL:= LEVEL-1; 48650000=14500000=
MODE:= MODE-1; 48655000=14501000=
MAXSTACK:= MAXSTACKO; 48660000=14502000=
START: 48665000=14503000=
END; 48670000=14503000=
GO TO START; 48675000=14504000=
CALLSTATEMENT: 48680000=14505000=
FOULED:= L; 48685000=14505000=
JUMPCHKX; 48690000=14506000=
IF SOP THEN 48695000=14506000=
BEGIN 48700000=14506000=
Z:= STACKCTR-513; 48705000=14506000=
WHILE Z:= Z-1 >= 0 DO 48710000=14506500=
EMITL(0) 48715000=14506500=
END; 48720000=14506500=
IF SPECTOG THEN 48725000=14507000=
BEGIN 48730000=14507000=
FLAG(12); 48735000=14508000=
GO TO HF 48740000=14509000=
END; 48745000=14509000=
BEGINCTR:= BEGINCTR-1; 48750000=14510000=
IF ERRORTOG THEN 48755000=14512000=
COMPOUNDTAIL 48760000=14513000=
ELSE 48765000=14513000=
BEGIN 48770000=14514000=
STMT; 48775000=14515000=
IF ELCLASS:= TABLE(I+1) = DECLARATORS THEN 48780000=14517000=
BEGIN 48785000=14518000=
ELBAT[I].CLASS:= SEMICOLON; 48790000=14519000=
BEGINCTR:= BEGINCTR+1; 48795000=14520000=
GO TO START 48800000=14522000=
END 48805000=14524000=
ELSE 48810000=14524000=
COMPOUNDTAIL 48815000=14525000=
END; 48820000=14525000=
FUNCTOG:= FUNCTOGO; 48825000=14599000=
IF SOP THEN 48830000=14600000=
HTTEOAP(FALSE, FIRSTX, NINFOO, BLKAD) 48835000=14601000=
ELSE 48840000=14601000=
BEGIN 48845000=14601000=
IF NESTOG THEN 48850000=14601000=
SORTNEST; 48855000=14601000=
PURGE(NINFOO); 48860000=14601000=
END; 48865000=14601000=
SEGMENT((L+3) DIV 4, PROADD); 48870000=14602000=
IF LEVEL > 1 THEN 48875000=14603000=
RIGHT(L); 48880000=14603000=
IF LEVEL:= LEVEL-1 = 0 THEN 48885000=14604000=
CONSTANTCLEAN; 48890000=14604000=
AJUMP:= AJUMPO; 48895000=14606000=
FIRSTX:= FIRSTXO; 48900000=14608000=
SAVEL:= SAVELO; 48905000=14609000=
STACKCTR:= STACKCTRO; 48910000=14610000=
END BLOCK; 48915000=14613000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%48920000=14613000=
48925000=15000000=
COMMENT THIS SECTION CONTAINS THE VARIABLE ROUTINE AND ITS SIDEKICKS; 48930000=15000000=
COMMENT THE FOLLOWING BLOCK HANDLES THE FOLLOWING CASES 48935000=15039000=
OF SIMPLE VARIABLES: 48940000=15040000=
1. V ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 48945000=15041000=
2. V ~ EXP ,ALL V EXCEPT FORMAL-NAME. 48950000=15042000=
3. V.[S:L] ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 48955000=15043000=
4. V.[S:L] ~ EXP ,ALL V EXCEPT FORMAL-NAME. 48960000=15044000=
5. V.[S:L] ,ALL V. 48965000=15045000=
6. V ,ALL V. 48970000=15046000=
CODE EMITED FOR THE ABOVE CASES IS AS FOLLOWS: 48975000=15047000=
1. VN,EXP,M*,XCH,~. 48980000=15048000=
2. EXP,M*,VL,~. 48985000=15049000=
3. VN,DUP,COC,EXP,T,M*,XCH,~. 48990000=15050000=
4. VV,EXP,T,M*,VL,~. 48995000=15051000=
5. ZEROL,VV,T . 49000000=15052000=
6. VV . 49005000=15053000=
WHERE VN = DESC V 49010000=15054000=
EXP= ARITH, OR BOOLEAN EXPRESSION,AS REQUIRED. 49015000=15055000=
M* = CALL ON MONITOR ROUTINE,IF REQUIRED. 49020000=15056000=
VL = LITC V 49025000=15057000=
VV = OPDC V 49030000=15058000=
~ = STORE INSTRUCTION(ISD,ISN,SND OR STD). 49035000=15059000=
T = BIT TRANSFER CODE(DIA,DIB,TRB). 49040000=15060000=
ZEROL = LITC 0 49045000=15061000=
DUP,COC,XCH = THE INSTRUCTIONS DUP,COC,AND XCH. 49050000=15062000=
OF COURSE, EXP WILL CAUSE RECURSION,IN GENERAL,AND THUS 49055000=15063000=
THE PARAMETER P1 AND THE LOCALS CAN NOT BE HANDLED IN A 49060000=15064000=
GLOBAL FASHION. 49065000=15065000=
THE PARAMETER P1 IS USED TO TELL THE VARIABLE ROUTINE 49070000=15066000=
WHO CALLED IT. SOME OF THE CODE GENERATION AND SOME 49075000=15067000=
SYNTAX CHECKS DEPEND UPON A PARTICULAR VALUE OF P1 . 49080000=15068000=
; 49085000=15069000=
PROCEDURE VARIABLE(P1); 49090000=15070000=
REAL 49095000=15070000=
P1; 49100000=15070000=
BEGIN 49105000=15071000=
REAL 49110000=15072000=
TALL, COMMENT ELBAT WORD FOR VARIABLE; 49115000=15072000=
T1, COMMENT 1ST INTEGER OF PARTIAL WORD SYNTAX; 49120000=15073000=
T2, COMMENT 2ND INTEGER OF PARTIAL WORD SYNTAX; 49125000=15074000=
J; COMMENT SUBSCRIPT COUNTER ; 49130000=15075000=
LABEL 49140000=15076000=
EXIT, 49145000=15076000=
L1, 49150000=15076000=
LAST, 49155000=15076000=
NEXT, 49160000=15076000=
JAZZ, 49165000=15076000=
ITUP, 49170000=15076000=
LASS; 49175000=15076000=
DEFINE 49180000=15076100=
FORMALNAME = [38:2] = 2 #, 49185000=15076100=
LONGID = NAMEID #; 49190000=15076100=
BOOLEAN 49195000=15076200=
SPCLMON; 49200000=15076200=
TALL:= ELBAT[I]; 49205000=15077000=
IF ELCLASS <= INTPROCID THEN 49210000=15078000=
BEGIN 49215000=15079000=
IF TALL.LINK ^= PROINFO.LINK THEN 49220000=15080000=
BEGIN 49225000=15081000=
ERR(211); 49230000=15081000=
GO TO EXIT 49235000=15081000=
END; 49240000=15081000=
49245000=15082000=
COMMENT 211 VARIABLE-FUNCTION IDENTIFIER USED OUTSIDE OF ITS SCOPE*; 49250000=15082000=
TALL:= TALL & (ELCLASS+4)[45:6:7] & 513[31:10:11]; 49255000=15083000=
END 49260000=15085000=
ELSE 49265000=15085000=
CHECKER(TALL); 49270000=15085000=
IF TALL.CLASS <= INTID THEN 49275000=15086000=
BEGIN 49280000=15087000=
IF STEPI = ASSIGNOP THEN 49285000=15090000=
BEGIN 49290000=15091000=
STACKCT:= 1; 49295000=15091000=
L1: IF TALL.FORMALNAME THEN 49300000=15092000=
BEGIN 49305000=15093000=
EMITN(TALL.ADDRESS); 49310000=15094000=
IF T1 ^= 0 THEN 49315000=15095000=
BEGIN 49320000=15095000=
EMITO(DUP); 49325000=15095000=
EMITO(COC) 49330000=15095000=
END; 49335000=15095000=
END 49340000=15097000=
ELSE 49345000=15097000=
IF T1 ^= 0 THEN 49350000=15097000=
EMITV(TALL.ADDRESS); 49355000=15098000=
STACKCT:= REAL(T1 ^= 0); 49360000=15098000=
STEPIT; 49365000=15098000=
AEXP; 49370000=15099000=
EMITD(48-T2, T1, T2); 49375000=15100000=
STACKCT:= 0; 49380000=15101500=
GT1:= 49385000=15102000=
IF TALL.CLASS = INTID THEN 49390000=15102000=
IF P1 = FS THEN 49395000=15103000=
ISD 49400000=15103000=
ELSE 49405000=15103000=
ISN 49410000=15103000=
ELSE 49415000=15103000=
IF P1 = FS THEN 49420000=15104000=
STD 49425000=15104000=
ELSE 49430000=15104000=
SND; 49435000=15104000=
IF TALL.FORMALNAME THEN 49440000=15105000=
BEGIN 49445000=15106000=
EMITO(XCH); 49450000=15106100=
IF TALL.ADDRESS > 1023 THEN 49455000=15106100=
EMITO(PRTE); 49460000=15106100=
EMITO(GT1); 49465000=15106200=
END 49470000=15107000=
ELSE 49475000=15107000=
EMITPAIR(TALL.ADDRESS, GT1); 49480000=15107000=
END 49485000=15110000=
ELSE 49490000=15110000=
BEGIN 49495000=15110000=
IF P1 = FL THEN 49500000=15110100=
BEGIN 49505000=15110100=
IF ELCLASS < AMPERSAND THEN 49510000=15110200=
EMITN(TALL.ADDRESS) 49515000=15110300=
ELSE 49520000=15110300=
EMITV(TALL.ADDRESS); 49525000=15110300=
GO TO EXIT 49530000=15110400=
END; 49535000=15110400=
IF ELCLASS = PERIOD THEN 49540000=15111000=
BEGIN 49545000=15112000=
IF DOTSYNTAX(T1, T2) THEN 49550000=15112000=
GO TO EXIT; 49555000=15112000=
IF STEPI = ASSIGNOP THEN 49560000=15113000=
IF P1 ^= FS THEN 49565000=15114000=
BEGIN 49570000=15115000=
ERR(201); 49575000=15115000=
GO TO EXIT 49580000=15115000=
END 49585000=15116000=
ELSE 49590000=15116000=
GO TO L1 49595000=15118000=
END; 49600000=15118000=
IF P1 ^= FP THEN 49605000=15119000=
BEGIN 49610000=15119000=
ERR(202); 49615000=15119000=
GO TO EXIT 49620000=15119000=
END; 49625000=15119000=
49630000=15120000=
COMMENT 202 VARIABLE- A VARIABLE APPEARS WHICH IS NOT FOLLOWED * 49635000=15120000=
BY A LEFT ARROW OR PERIOD *;49640000=15121000=
49645000=15122000=
COMMENT 201 VARIABLE- A PARTIAL WORD DESIGNATOR IS NOT THE * 49650000=15122000=
LEFT-MOST OF A LEFT PART LIST *;49655000=15123000=
EMITI(TALL, T1, T2); 49660000=15124000=
END; 49665000=15126000=
END OF SIMPLE VARIABLES 49670000=15128100=
ELSE 49675000=15128100=
IF TALL.CLASS ^= LABELID THEN 49680000=15128100=
COMMENT THE FOLLOWING BLOCK HANDLES THESE CASES OF SUBSCRIPTED 49685000=15129000=
VARIABLES: 49690000=15130000=
1. V[*] ,ROW DESIGNATOR FOR SINGLE-DIMENSION. 49695000=15131000=
2. V[R,*] ,ROW DESIGNATOR FOR MULTI-DIMENSION. 49700000=15132000=
3. V[R] ,ARRAY ELEMENT,NAME OR VALUE. 49705000=15133000=
4. V[R].[S:L] ,PARTIAL WORD DESIGNATOR, VALUE. 49710000=15134000=
5. V[R] ~ ,ASSIGNMENT TO ARRAY ELEMENT. 49715000=15135000=
6. V[R].[S:L] ~ ,ASSIGNMENT TO PARTIAL WORD,LEFT-MOST. 49720000=15136000=
R IS A K-ORDER SUBSCRIPT LIST,I.E. R= R1,R2,...,RK. 49725000=15137000=
IN THE CASE OF NO MONITORING ON V, THE FOLLOWING CODE 49730000=15138000=
IS EMITTED FOR THE ABOVE CASES: 49735000=15139000=
1. CASE #1 IS A SPECIAL CASE OF #2,NAMELY,SINGLE 49740000=15140000=
DIMENSION. THE CODE EMITTED IS: 49745000=15141000=
VL,LOD . 49750000=15142000=
EXECUTION: PLACES ARRAY DESCRIPTER IN REG A. 49755000=15143000=
2. THIS CODE IS BASIC TO THE SUBSCRIPTION PROCESS.49760000=15144000=
EACH SUBSCRIPT GENERATES THE FOLLOWING SEQUENCE49765000=15145000=
OF CODE: 49770000=15146000=
AEXP,L*,IF FIRST SUBSCRIPT THEN VN ELSE CDC 49775000=15147000=
,LOD. 49780000=15148000=
FOR A K-ORDER SUBSCRIPTION,K-1 SEQUENCE ARE 49785000=15149000=
PRODUCED. THE AEXP IN EACH SEQUENCE REFERS TO 49790000=15150000=
THE CODE PRODUCED BY THE ARITHMETIC EXPRESSION 49795000=15151000=
PROCEDURE FOR THE ACTUAL SUBSCRIPT EXPRESSIONS,49800000=15152000=
[* REFERS TO THE CODE PRODUCED FOR SUBTRACTING 49805000=15153000=
NON-ZERO LOWER BOUNDS FROM THE SUBSCRIPT 49810000=15154000=
EXPRESSION(L* YIELDS NO CODE FOR ZERO BOUNDS). 49815000=15155000=
EXECUTION: PLACES ARRAY ROW DESCRIPTOR IN REG A49820000=15156000=
. THE SPECIFIC ROW DEPENDS UPON THE 49825000=15157000=
VALUES OF THE K-1 SUBSCRIPTS. 49830000=15158000=
FOR THE REMAINING CASES, 49835000=15159000=
SEQUENCES OF CODE ARE EMITED AS IN CASE #2. 49840000=15160000=
HOWEVER,THE ACTUAL SEQUENCES ARE: 49845000=15161000=
ONE SEQUENCE ,(AEXP,L*),FOR THE 1ST SUBSCRIPT.49850000=15162000=
K-1 SEQUENCES,(IF FIRST SUBSCRIPT THEN VN 49855000=15163000=
ELSE CDC,LOD,AEXP,L*), FOR THE REMAINING 49860000=15164000=
SUBSCRIPTS,IF K>1. 49865000=15165000=
AT THIS POINT, CASES #3-6 ARE DIFFERENTIATED 49870000=15166000=
AND ADDITION CODE,PARTICULAR TO EACH CASE,IS 49875000=15167000=
EMITTED. 49880000=15168000=
3. ADD THE SEQUENCE: 49885000=15169000=
IF FIRST SUBSCRIPT THEN VV ELSE COC. 49890000=15170000=
EXECUTION: THE ARRAY ELEMENT IS PUT IN REG A. 49895000=15171000=
4. ADD THE SEQUENCE: 49900000=15172000=
IF FIRST SUBSCRIPT THEN VV ELSE COC,ZEROL. 49905000=15173000=
XCH,T. 49910000=15174000=
5. ADD THE SEQUENCE: 49915000=15175000=
IF FIRST SUBSCRIPT THEN VN ELSE CDC,EXP, 49920000=15176000=
XCH,~. 49925000=15177000=
6. ADD THE SEQUENCE: 49930000=15178000=
IF FIRST SUBSCRIPT THEN VN ELSE CDC,DUP,LOD, 49935000=15179000=
EXP,T, XCH,~. 49940000=15180000=
EXP,T,~,ZEROL,ETC. HAVE SAME MEANINGS AS DEFINED IN 49945000=15181000=
SIMPLE VARIABLE BLOCK. ; 49950000=15182000=
BEGIN 49955000=15183000=
IF STEPI ^= LFTBRKET THEN 49960000=15233000=
BEGIN 49965000=15233002=
IF ELCLASS = PERIOD THEN 49970000=15233003=
BEGIN 49975000=15233004=
IF DOTSYNTAX(T1, T2) THEN 49980000=15233005=
GO TO EXIT; 49985000=15233005=
IF STEPI = ASSIGNOP THEN 49990000=15233006=
BEGIN 49995000=15233007=
IF P1 ^= FS THEN 50000000=15233008=
BEGIN 50005000=15233008=
ERR(209); 50010000=15233008=
GO EXIT 50015000=15233008=
END; 50020000=15233008=
IF TALL.CLASS <= INTARRAYID THEN 50025000=15233009=
BEGIN 50030000=15233010=
EMITPAIR(TALL.ADDRESS, LOD) 50035000=15233010=
END 50040000=15233011=
ELSE 50045000=15233011=
EMITN(TALL.ADDRESS); 50050000=15233011=
STACKCT:= STACKCT+1; 50055000=15233011=
JAZZ: 50060000=15233012=
STEPIT; 50065000=15233012=
AEXP; 50070000=15233012=
EMITD(48-T2, T1, T2); 50075000=15233013=
EMITPAIR(TALL.ADDRESS, IF P1 = FS THEN STD ELSE SND); 50080000=15233015=
STACKCT:= 0; 50085000=15233016=
END 50090000=15233017=
ELSE 50095000=15233017=
BEGIN 50100000=15233017=
ITUP: 50105000=15233018=
EMITI(TALL, T1, T2); 50110000=15233018=
END; 50115000=15233023=
GO TO EXIT; 50120000=15233024=
END; 50125000=15233025=
IF ELCLASS = ASSIGNOP THEN 50130000=15233026=
GO TO JAZZ 50135000=15233026=
ELSE 50140000=15233026=
GO TO ITUP; 50145000=15233026=
END; 50150000=15233027=
J:= 0; 50155000=15234000=
STACKCT:= 0; 50160000=15234500=
50165000=15235000=
COMMENT 207 VARIABLE-MISSING LEFT BRACKET ON SUBSCRIPTED VARIABLE *; 50170000=15235000=
NEXT: 50175000=15253000=
IF STEPI = FACTOP THEN 50180000=15253000=
BEGIN 50185000=15254000=
IF J+1 ^= TALL.INCR THEN 50190000=15255000=
BEGIN 50195000=15256000=
ERR(203); 50200000=15256000=
GO EXIT 50205000=15256000=
END; 50210000=15256000=
50215000=15257000=
COMMENT 203 VARIABLE- THE NUMBER OF SUBSCRIPTS USED IN A ROW * 50220000=15257000=
ROW DESIGNATER DOES NOT MATCH THE ARRAY * 50225000=15258000=
DECLARATION. *;50230000=15259000=
IF STEPI ^= RTBRKET THEN 50235000=15260000=
BEGIN 50240000=15261000=
ERR(204); 50245000=15261000=
GO EXIT 50250000=15261000=
END; 50255000=15261000=
50260000=15262000=
COMMENT 204 VARIABLE- COMPILER EXPECTS A ] IN A ROW DESIGNATER *;50265000=15262000=
50270000=15264000=
COMMENT 205 VARIABLE- A ROW DESIGNATER APPEARS OUTSIDE OF A FILL * 50275000=15264000=
STATEMENT OR ACTUAL PARAMETER LIST. *;50280000=15265000=
IF J = 0 THEN 50285000=15266000=
EMITPAIR(TALL.ADDRESS, LOD); 50290000=15267000=
STLB:= 0; 50295000=15273000=
STEPIT; 50300000=15274000=
GO TO EXIT; 50305000=15275000=
END OF ROW DESIGNATOR PORTION; 50310000=15276000=
IF ELCLASS = LITNO AND ELBAT[I].ADDRESS = 0 AND TABLE(I+1) = 50315000=15276010=
RTBRKET AND TALL.CLASS >= NAMEID 50320000=15276020=
THEN 50325000=15276020=
BEGIN 50330000=15276030=
I:= I+1; 50335000=15276040=
IF STEPI = ASSIGNOP THEN 50340000=15276050=
BEGIN 50345000=15276050=
LASS: 50350000=15276060=
IF T1 ^= 0 THEN 50355000=15276060=
EMITV(TALL.ADDRESS); 50360000=15276060=
STEPIT; 50365000=15276070=
AEXP; 50370000=15276070=
EMITD(48-T2, T1, T2); 50375000=15276070=
EMITN(TALL.ADDRESS); 50380000=15276080=
EMITO(IF TALL.CLASS ^= NAMEID THEN IF P1 = FS THEN ISD ELSE 50385000=15276110=
ISN ELSE IF P1 = FS THEN STD ELSE SND); 50390000=15276110=
STACKCT:= 0; 50395000=15276115=
GO TO EXIT 50400000=15276120=
END 50405000=15276140=
ELSE 50410000=15276140=
IF ELCLASS = PERIOD THEN 50415000=15276140=
BEGIN 50420000=15276140=
IF DOTSYNTAX(T1, T2) THEN 50425000=15276150=
GO TO EXIT; 50430000=15276150=
IF STEPI = ASSIGNOP THEN 50435000=15276160=
IF P1 = FS THEN 50440000=15276160=
GO TO LASS 50445000=15276170=
ELSE 50450000=15276170=
BEGIN 50455000=15276170=
ERR(209); 50460000=15276170=
GO EXIT 50465000=15276170=
END; 50470000=15276170=
END; 50475000=15276180=
IF P1 = FS THEN 50480000=15276190=
BEGIN 50485000=15276190=
ERR(210); 50490000=15276190=
GO EXIT 50495000=15276190=
END; 50500000=15276190=
EMITI 50505000=15276210=
(IF P1 = FL THEN TALL ELSE TALL & REALID[45:6:7], T1, T2); 50510000=15276210=
GO TO EXIT; 50515000=15276230=
END; 50520000=15276240=
AEXP; 50525000=15277000=
STACKCT:= 1; 50530000=15278000=
J:= J+1; 50535000=15280000=
IF ELCLASS = COMMA THEN 50540000=15287000=
BEGIN 50545000=15288000=
50550000=15289000=
COMMENT ***** MONITOR FUNCTION M4 GOES HERE ; 50555000=15289000=
IF J = 1 THEN 50560000=15290000=
EMITV(TALL.ADDRESS) 50565000=15290000=
ELSE 50570000=15290000=
EMITO(COC); 50575000=15290000=
GO TO NEXT; 50580000=15292000=
END OF SUBSCRIPT COMMA HANDLER; 50585000=15293000=
IF ELCLASS ^= RTBRKET THEN 50590000=15294000=
BEGIN 50595000=15294000=
ERR(206); 50600000=15294000=
GO EXIT 50605000=15294000=
END; 50610000=15294000=
50615000=15295000=
COMMENT 206 VARIABLE- MISSING RIGHT BRACKET ON SUBSCRIPTED VARIABLE*; 50620000=15295000=
GT1:= 50625000=15295100=
IF TALL.CLASS >= NAMEID THEN 50630000=15295100=
1 50635000=15295100=
ELSE 50640000=15295100=
TALL.INCR; 50645000=15295100=
IF J ^= GT1 THEN 50650000=15296000=
BEGIN 50655000=15297000=
ERR(208); 50660000=15297000=
GO TO EXIT 50665000=15297000=
END; 50670000=15297000=
50675000=15298000=
COMMENT 208 VARIABLE- NUMBER OF SUBSCRIPTS DOES NOT MATCH WITH * 50680000=15298000=
ARRAY DECLARATION. *;50685000=15299000=
IF STEPI = ASSIGNOP THEN 50690000=15300000=
BEGIN 50695000=15301000=
LAST: 50700000=15302000=
IF J = 1 THEN 50705000=15302000=
EMITN(TALL.ADDRESS) 50710000=15302000=
ELSE 50715000=15302000=
EMITO(CDC); 50720000=15302000=
IF TALL.CLASS >= LONGID THEN 50725000=15303000=
EMITO(INX); 50730000=15303000=
IF T1 = 0 THEN 50735000=15304000=
BEGIN 50740000=15305000=
IF P1 = FR THEN 50745000=15305000=
GO TO EXIT 50750000=15306000=
END 50755000=15306000=
ELSE 50760000=15306000=
BEGIN 50765000=15306000=
EMITO(DUP); 50770000=15306000=
EMITO(LOD) 50775000=15306000=
END; 50780000=15306000=
STEPIT; 50785000=15306000=
AEXP; 50790000=15307000=
EMITD(48-T2, T1, T2); 50795000=15308000=
EMITO(XCH); 50800000=15309000=
IF TALL.ADDRESS > 1023 THEN 50805000=15310000=
EMITI(PRTE); 50810000=15310000=
EMITO(IF TALL.CLASS MOD 2 = INTARRAYID MOD 2 THEN IF P1 = FS 50815000=15335000=
THEN ISD ELSE ISN ELSE IF P1 = FS THEN STD ELSE SND); 50820000=15335000=
STACKCT:= 0; 50825000=15335500=
P1:= 0; 50830000=15336000=
GO TO EXIT; 50835000=15337000=
END OF ASSIGNMENT STATEMENT SUBSCRIPTED VARIABLES; 50840000=15338000=
IF ELCLASS = PERIOD THEN 50845000=15339000=
BEGIN 50850000=15340000=
IF DOTSYNTAX(T1, T2) THEN 50855000=15341000=
GO TO EXIT; 50860000=15341000=
IF STEPI = ASSIGNOP THEN 50865000=15342000=
IF P1 = FS THEN 50870000=15342000=
GO TO LAST 50875000=15343000=
ELSE 50880000=15343000=
BEGIN 50885000=15343000=
ERR(209); 50890000=15343000=
GO EXIT 50895000=15343000=
END; 50900000=15343000=
IF J ^= 1 THEN 50905000=15344000=
EMITO(COC) 50910000=15344000=
ELSE 50915000=15344000=
IF TALL.CLASS >= LONGID THEN 50920000=15344000=
BEGIN 50925000=15344100=
EMITN(TALL.ADDRESS); 50930000=15344100=
EMITO(INX); 50935000=15344100=
EMITO(LOD) 50940000=15344100=
END 50945000=15344200=
ELSE 50950000=15344200=
EMITV(TALL.ADDRESS); 50955000=15344200=
END 50960000=15347000=
ELSE 50965000=15347000=
50970000=15347000=
COMMENT ***** MONITOR FUNCTION M10 GOES HERE ; 50975000=15347000=
BEGIN COMMENT MONITOR FUNCTION M10; 50980000=15348000=
SPCLMON:= P1 = FP OR ELCLASS >= AMPERSAND; 50990000=15349000=
IF J = 1 THEN 50995000=15351000=
IF TALL.CLASS >= LONGID THEN 51000000=15351000=
BEGIN 51005000=15351100=
EMITN(TALL.ADDRESS); 51010000=15351200=
EMITO(INX); 51015000=15351200=
IF SPCLMON THEN 51020000=15351300=
EMITO(LOD); 51025000=15351300=
END 51030000=15351400=
ELSE 51035000=15351400=
IF SPCLMON THEN 51040000=15352000=
EMITV(TALL.ADDRESS) 51045000=15353000=
ELSE 51050000=15353000=
EMITN(TALL.ADDRESS) 51055000=15354000=
ELSE 51060000=15354000=
EMITO(IF SPCLMON THEN COC ELSE CDC); 51065000=15356000=
IF P1 = FS THEN 51070000=15364000=
ERR(210); 51075000=15364000=
GO TO EXIT; 51080000=15365000=
END; 51085000=15366000=
IF P1 = FS THEN 51090000=15367000=
BEGIN 51095000=15367000=
ERR(210); 51100000=15367000=
GO TO EXIT 51105000=15367000=
END; 51110000=15367000=
51115000=15368000=
COMMENT 210 VARIABLE-MISSING LEFT ARROW OR PERIOD. *;51120000=15368000=
STACKCT:= 0; 51125000=15369000=
IF T1 ^= 0 THEN 51130000=15370000=
BEGIN 51135000=15370000=
EMITI(0, T1, T2); 51140000=15370000=
P1:= 0 51145000=15370000=
END; 51150000=15370000=
END OF SUBSCRIPTED VARIABLES 51155000=15376200=
ELSE 51160000=15376200=
BEGIN COMMENT LABELID; 51165000=15376200=
T1:= TAKE(T2:= GIT(TALL)); 51175000=15376300=
PUT(L, T2); 51180000=15376400=
IF T1 = 0 THEN 51185000=15376500=
T1:= L; 51190000=15376500=
IF(T1:= L-T1) DIV 4 > 127 THEN 51195000=15376600=
BEGIN 51200000=15376600=
T1:= 0; 51205000=15376600=
FLAG(50); 51210000=15376600=
END; 51215000=15376600=
EMIT(T1*4+3); 51220000=15376700=
STEPIT; 51225000=15376800=
END OF LABELID; 51230000=15376900=
EXIT: 51235000=15377000=
END OF THE VARIABLE ROUTINE; 51240000=15377000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51245000=15377000=
51250000=16000000=
COMMENT THIS SECTION GENERATES CODE FOR STREAM PROCEDURES; 51255000=16000000=
51260000=16000050=
COMMENT DO LABEL DECS UPON APPEARANCE OF LABEL ; 51265000=16000050=
PROCEDURE DECLARELABEL; 51270000=16000100=
BEGIN 51275000=16000200=
KLASSF:= STLABID; 51280000=16000300=
VONF:= FORMALF:= FALSE; 51285000=16000400=
ADDRSF:= 0; 51290000=16000500=
MAKEUPACCUM; 51295000=16000600=
E; 51300000=16000600=
PUTNBUMP(0); 51305000=16000600=
ELBAT[I]:= ACCUM[0] & LASTINFO[12:12:13]; 51310000=16000700=
END; 51315000=16000800=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51320000=16000800=
PROCEDURE STREAMSTMT; 51325000=16001000=
BEGIN 51330000=16002000=
DEFINE 51335000=16003000=
LFTPAREN = LEFTPAREN #, 51340000=16003000=
LOC = [11:12] #, 51345000=16003000=
LASTGT = [23:12] #, 51350000=16004000=
LOCFLD = 36:36:12 #, 51355000=16004000=
LGTFLD = 24:24:12 #; 51360000=16004000=
DEFINE 51365000=16005000=
LEVEL = LVL #, 51370000=16005000=
ADDOP = ADOP #; 51375000=16005000=
DEFINE 51380000=16006100=
JFW = 39#, COMMENT 7.5.5.1 JUMP FORWARD UNCONDITIONAL ; 51385000=16007000=
RCA = 40#, COMMENT 7.5.7.6 RECALL CONTROL ADDRESS ; 51390000=16008000=
JRV = 47#, COMMENT 7.5.5.2 JUMP REVERSE UNCONDITIONAL ; 51395000=16009000=
CRF = 35#, COMMENT 7.5.10.6 CALL REPEAT FIELD ; 51400000=16010000=
BNS = 42#, COMMENT 7.5.5.5 BEGIN LOOP ; 51405000=16011000=
NOP = 1#, COMMENT ; 51410000=16012000=
ENS = 41#, COMMENT 7.5.5.6 END LOOP ; 51415000=16013000=
TAN = 30#, COMMENT 7.5.3.7 TEST FOR ALPHAMERIC ; 51420000=16014000=
BIT = 31#, COMMENT 7.5.3.8 TEST BIT ; 51425000=16015000=
JFC = 37#, COMMENT 7.5.5.3 JUMP FORWARD CONDITIONAL ; 51430000=16016000=
SED = 06#, COMMENT 7.5.7.8 SET DESTINATION ADDRESS ; 51435000=16017000=
RSA = 43#, COMMENT 7.5.7.4 RECALL SOURCE ADDRESS ; 51440000=16018000=
TRP = 60#, COMMENT 7.5.2.2 TRANSFER PROGRAM CHARACTERS ; 51445000=16019000=
BSS = 3#, COMMENT 7.5.6.6 SKIP SOURCE BIT ; 51450000=16020000=
BSD = 2#, COMMENT 7.5.6.5 SKIP DESTINATION BITS ; 51455000=16021000=
SEC = 34#, COMMENT 7.5.10.1 SET COUNT ; 51460000=16022000=
JNS = 38#; COMMENT 7.5.5.7 JUMP OUT LOOP ; 51465000=16023000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51466000
PROCEDURE ADJUST; 51470000=16024000=
; 51472000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51474000
COMMENT FIXC EMITS BASICLY FORWARD JUMPS. HOWEVER IN THE CASE 51475000=16024000=
OF INSTRUCTIONS INTERPTED AS JUMPS BECAUSE OF A CRF ON 51480000=16025000=
A VALUE = 0 AND THE JUMP >= 64 SYLLABLES A JFW 1 AND 51485000=16026000=
A RCA L (L IS STACK ADDRESS OF A PSEUDO LABEL WHICH 51490000=16027000=
MUST ALSO BE MANUFACTURED) IS EMITTED. ; 51495000=16028000=
PROCEDURE FIXC(S); 51500000=16032000=
VALUE 51500500
S; 51501000
REAL 51501500
S; 51502000
BEGIN 51502500
REAL 51503000
SAVL, 51503500
D, 51504000
F; 51504500
IF D:= (SAVL:= L)-(L:= S)-1 <= 63 THEN 51505000
EMITC(D, GET(S)) 51505500
ELSE 51506000
FLAG(700); 51506500
L:= SAVL; 51507000
END FIXC; 51507500
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51508000
COMMENT EMITJUMP IS CALLED BY GOTOS AND JUMPCHAIN. 51515000=16058000=
THIS ROUTINE WILL EMIT A JUMP IF THE DISTANCE IS <= 63 51520000=16059000=
SYLLABLES ,OTHERWISE, IT GETS A PRT CELL AND STUFFS THE 51525000=16060000=
STACK ADDRESS INTO THE LABEL ENTRY IN INFO AND EMITS AN 51530000=16061000=
RCA ON THIS STACK CELL. AT EXECUTION TIME ACTUAL PARAPART 51535000=16062000=
INSURES US THAT THIS CELL WILL CONATIN A LABEL DESCRIPTOR 51540000=16063000=
POINTING TO OUR LABEL IN QUESTION. ; 51545000=16064000=
PROCEDURE EMITJUMP(E); 51550000=16070000=
VALUE 51551000
E; 51551500
REAL 51552000
E; 51552500
BEGIN 51553000
REAL 51554000
T, 51555000
D; 51556000
REAL 51557000
ADDR; 51558000
IF ABS(D:= (T:= TAKE(GIT(E)).LOC)-L-1) >= 64 THEN 51559000
FLAG(700) 51560000
ELSE 51561000
EMITC(D, IF D < 0 THEN JRV ELSE JFW); 51562000
END EMIT JUMP; 51563000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51564000
COMMENT WHEN JUMPCHAIN IS CALLED THERE IS A LINKEDLIST IN THE CODE51565000=16081000=
ARRAY WHERE JFWS MUST BE PLACED. THE 1ST LINK IS POINTED 51570000=16082000=
TO BY THE LOC FIELD OF EACH LABEL ENTRY IN INFO. THE LAST 51575000=16083000=
LINK IS = 4096. ; 51580000=16084000=
PROCEDURE JUMPCHAIN(E); 51585000=16089000=
VALUE 51585500
E; 51585600
REAL 51586000
E; 51586200
BEGIN 51586500
REAL 51587000
SAVL, 51587500
LINK; 51588000
SAVL:= L; 51588500
L:= TAKE(GIT(E)).LASTGT; 51590000=16093000=
WHILE L ^= 4095 DO 51591000
BEGIN 51592000
LINK:= GET(L); 51593000
EMITJUMP(E); 51595000=16098000=
L:= LINK 51595500
END; 51596000
L:= SAVL; 51596500
END JUMPCHAIN; 51597000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51597500
COMMENT NESTS COMPILES THE NEST STATEMENT. 51600000=16098000=
A VARIABLE NEST INDEX CAUSES THE CODE, 51605000=16099000=
CRF V, BNS 0 ,NOP,NOP, TO BE GENERATED INITIALLY. 51610000=16100000=
AT THE RIGHT PAREN THE BNS IS FIXED WITH THE LENGTH OF 51615000=16101000=
THE NEST (NUMBER OF SYLLABLES) IF THE LENGTH<=63,OTHERWISE51620000=16102000=
IT IS FIXED WITH A 1 AND THE NOPS REPLACED WITH JFW 1, 51625000=16103000=
RCA P. THIS IS DONE BECAUSE THE VALUE OF V AT EXECUTION 51630000=16104000=
MAY = 0 AND THIS CODE CAUSES A JUMP AROUND THE NEST. 51635000=16105000=
JUMPOUT INFO IS REMEMBERED IN A RECURSIVE CELL AND 51640000=16106000=
NEST LEVEL INCREASED BY ONE. 51645000=16107000=
WHEN THE RIGHT PAREN IS REACHED,(IF THE STATEMENTS IN 51650000=16108000=
THE NEST COMPILED), JOINFO IS CHECKED FOR THE EXISTANCE 51655000=16109000=
OF JUMPOUT STATEMENTS IN THE NEST,IF SO,THE THE JUMPS 51660000=16110000=
ARE FIXED BY FAKING TOTOS INTO COMPILING THE REQUIRED 51665000=16111000=
JUMPS. 51670000=16112000=
FINALLY THE BNS IS FIXED,IF REQUIRED,AND NEST LEVEL 51675000=16113000=
AND JOINFO RESTORED TO THEIR ORIGINAL VALUES. ; 51680000=16114000=
PROCEDURE NESTS; 51685000=16119000=
BEGIN 51685500
LABEL 51686000
EXIT; 51686500
REAL 51687000
JOINT, 51687500
BNSFIX; 51688000
IF ELCLASS ^= LITNO THEN 51688500
BEGIN 51689000
EMITC(ELBAT[I].ADDRESS, CRF); 51689500
BNSFIX:= L; 51690000
EMIT(BNS); 51690500
END 51695000=16125000=
ELSE 51696000
EMITC(ELBAT[I].ADDRESS, BNS); 51697000
IF STEPI ^= LFTPAREN THEN 51698000
BEGIN 51699000
ERR(262); 51700000=16128000=
GO TO EXIT 51701000
END; 51702000
NESTLEVEL:= NESTLEVEL+1; 51703000
JOINT:= JOINFO; 51704000
JOINFO:= 0; 51705000=16131000=
DO BEGIN 51706000
STEPIT; 51707000
ERRORTOG:= TRUE; 51708000
STREAMSTMT 51709000
END 51710000
UNTIL ELCLASS ^= SEMICOLON; 51711000
IF ELCLASS ^= RTPAREN THEN 51712000
BEGIN 51713000
ERR(262); 51714000
GO TO EXIT 51715000
END; 51716000
EMIT(ENS); 51717000
IF JOINFO ^= 0 THEN 51718000
BEGIN 51719000
COMMENT PREPARE TO CALL JUMPCHAIN FORJUMPOUTS; 51720000=16136000=
ADJUST; 51725000=16139000=
PUT(TAKE(GIT(JOINFO)) & L[LOCFLD], GIT(JOINFO)); 51726000
JUMPCHAIN(TAKE(JOINFO) & JOINFO[12:12:13]); 51727000
END; 51728000
IF BNSFIX ^= 0 THEN 51729000
FIXC(BNSFIX); 51730000
NESTLEVEL:= NESTLEVEL-1; 51731000
JOINFO:= JOINT; 51732000
EXIT: 51733000
END NESTS; 51734000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51735000
COMMENT LABELS HANDLES STREAM LABELS. 51740000=16145000=
ALL LABELS ARE ADJUSTED TO THE BEGINING OF THE NEXT 51745000=16146000=
WORD (IN THE PROGRAMSTREAM). 51750000=16147000=
IF A GO TO HAS NOT BEEN ENCOUNTERED BEFORE THE LABEL 51755000=16148000=
THEN THE NEST LEVEL FIELD IS ENTERED AND THE DEFINED BIT, 51760000=16149000=
[46:1], SET TO ONE. FOR DEFINED LABELS,IF WHERE A GO TO 51765000=16150000=
HAS APPEARED, A CHECK IS MADE THAT THE CURRENT NEST LEVEL 51770000=16151000=
MATCHES THE LEVEL OF THE LABEL. 51775000=16152000=
MULTIPLE OCCURANCES ARE ALSO CHECKED FOR AND FLAGGED. 51780000=16153000=
FINALLY,JUMPCHAIN IS CALLED TO FIX UP ANY FORWARD GO TOS 51785000=16154000=
AND GET A PRT LOCATION FOR ANY JUMPS >=64 SYLLABLES. ; 51790000=16155000=
PROCEDURE LABELS; 51795000=16160000=
BEGIN 51795500
REAL 51796000
GT1; 51796500
ADJUST; 51797000
GT1:= ELBAT[I]; 51797500
IF STEPI ^= COLON THEN 51798000
ERR(258) 51798500
ELSE 51799000
BEGIN 51799500
IF TAKE(GT2:= GIT(GT1)).LOC ^= 0 THEN 51800000
FLAG(259); 51805000=16166000=
IF GT1 > 0 THEN 51806000
BEGIN 51807000
PUT(-(TAKE(GT1) & NESTLEVEL[36:4:5]), GT1); 51808000
PUT(-L, GT2) 51809000
END 51810000
ELSE 51811000
BEGIN 51815000=16172000=
IF GT1.LEVEL ^= NESTLEVEL THEN 51816000
FLAG(257); 51817000
PUT((-L) & TAKE(GT2)[LGTFLD], GT2); 51818000
JUMPCHAIN(GT1); 51819000
END; 51820000
END; 51821000
STEPIT; 51822000
END LABELS; 51825000=16178000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51826000
COMMENT IFS COMPILES IF STATEMENTS. 51830000=16178000=
FIRST THE TEST IS COMPILED. NOTE THAT IN THE 51835000=16179000=
CONSTRUCTS "SC RELOP DC" AND "SC RELOP STRING" THAT 51840000=16180000=
THE SYLLABLE EMITTED IS FETCHED FROM ONE OF TWO FIELDS 51845000=16181000=
IN THE ELBAT WORD FOR THE RELATIONAL OPERATOR. OTHERWISE 51850000=16182000=
THE CODE IS EMITTED STRAIGHTAWAY. 51855000=16183000=
A TEST IS MADE TO SEE WHETHER THE STATEMENT AFTER THE 51860000=16184000=
"THEN" COULD POSSIBLY BE LONGER THAN 63 SYLLABLES,AND IF 51865000=16185000=
SO, Z NOPS ARE EMITTED FOR FIXC IN CASE A RCA WILL HAVE 51870000=16186000=
TO BE GENERATED. 51875000=16187000=
THIS PROCEDURE DOES NO OPTIMAZATION IN THE CASES 51880000=16188000=
IF THEN GO TO L,IF THEN STATEMENT ELSE GO TO L, OR 51885000=16189000=
IF THEN GO TO L1 ELSE GO TO L2 ; 51890000=16190000=
PROCEDURE IFS; 51895000=16192000=
BEGIN 51896000
DEFINE 51898000
COMPARECODE = [5:6] #, 51900000
TESTCODE = [11:6] #; 51905000=16192000=
LABEL 51910000=16193000=
IFSB, 51915000=16193000=
IFTOG, 51920000=16193000=
IFSC, 51925000=16193000=
EXIT; 51930000=16193000=
SWITCH 51935000=16194000=
IFSW:= IFSB, 51940000=16194000=
IFTOG, 51945000=16194000=
IFSC; 51950000=16194000=
REAL 51955000=16195000=
ADDR, 51960000=16195000=
FIX1, 51965000=16195000=
FIX2; 51970000=16195000=
ADDR:= 1; 51975000=16196000=
GO TO IFSW[STEPI-SBV+1]; 51980000=16197000=
IF ELCLASS = LOCLID THEN 51985000=16198000=
BEGIN 51990000=16199000=
EMITC(ELBAT[I].ADDRESS, CRF); 51995000=16200000=
ADDR:= 0; 52000000=16201000=
END 52005000=16204000=
ELSE 52010000=16204000=
IF ELCLASS = LITNO THEN 52015000=16204000=
ADDR:= ELBAT[I].ADDRESS 52020000=16205000=
ELSE 52025000=16205000=
BEGIN 52030000=16205000=
ERR(250); 52035000=16205000=
GO TO EXIT 52040000=16205000=
END; 52045000=16205000=
IF STEPI ^= SCV THEN 52050000=16206000=
BEGIN 52055000=16206000=
ERR(263); 52060000=16206000=
GO TO EXIT 52065000=16206000=
END; 52070000=16206000=
IFSC: 52075000=16207000=
IF STEPI ^= RELOP THEN 52080000=16207000=
BEGIN 52085000=16207000=
ERR(264); 52090000=16207000=
GO TO EXIT 52095000=16207000=
END; 52100000=16207000=
IF STEPI = DCV THEN 52105000=16208000=
EMITC(ADDR, ELBAT[I-1].COMPARECODE) 52110000=16208000=
ELSE 52115000=16210000=
IF ELCLASS = STRNGCON THEN 52120000=16210000=
EMITC(ACCUM[1].[29:6], ELBAT[I-1].TESTCODE) 52125000=16212000=
ELSE 52130000=16212000=
IF ELCLASS = LITNO THEN 52135000=16212500=
EMITC(C, ELBAT[I-1].TESTCODE) 52140000=16212500=
ELSE 52145000=16212500=
IF ELCLASS <= IDMAX AND Q = 6"5ALPHA" THEN 52150000=16213000=
EMITC(17, TAN) 52155000=16214000=
ELSE 52160000=16214000=
BEGIN 52165000=16214000=
ERR(265); 52170000=16214000=
GO TO EXIT 52175000=16214000=
END; 52180000=16214000=
GO TO IFTOG; 52185000=16215000=
IFSB: 52190000=16216000=
EMITC(1, BIT); 52195000=16216000=
IFTOG: 52200000=16217000=
IF STEPI ^= THENV THEN 52205000=16217000=
BEGIN 52210000=16217000=
ERR(266); 52215000=16217000=
GO TO EXIT 52220000=16217000=
END; 52225000=16217000=
FIX1:= L; 52230000=16218000=
EMIT(JFC); 52235000=16219000=
IF STEPI ^= ELSEV THEN % 52240000=16220000=
STREAMSTMT; 52245000=16229000=
IF ELCLASS = ELSEV THEN 52250000=16230000=
BEGIN 52255000=16231000=
FIX2:= L; 52260000=16232000=
EMIT(JFW); 52265000=16232000=
FIXC(FIX1); 52270000=16233000=
STEPIT; 52275000=16234000=
STREAMSTMT; 52280000=16235000=
FIXC(FIX2); 52285000=16236000=
END 52290000=16238000=
ELSE 52295000=16238000=
FIXC(FIX1); 52300000=16238000=
EXIT: 52305000=16239000=
END IFS; 52310000=16239000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%52315000=16239000=
COMMENT GOTOS HANDLES GO TO AND THE LAST PART OF JUMP OUT TO 52320000=16240000=
STATEMENTS. 52325000=16241000=
IF THE LABEL HAS BEEN ENCOUNTERED THEN EMITJUMP IS CALLED 52330000=16242000=
AN PRODUCES A JRV OR RCA IN THE CASE OF JUMPS>=64 SYLLABL 52335000=16243000=
ES. OTHERWISE, A LINK IS EMITTED POINTING ANY PREVIOUS 52340000=16244000=
GO TOS IN THE CASE OF FORWARD JUMPS. 52345000=16245000=
FINALLY, IF THE NEST LEVEL IS DEFINED THEN IT IS CHECKED 52350000=16246000=
AGAINST THE CURRENT LEVEL MINUS THE NUMBER OF LEVELS TO 52355000=16247000=
BE JUMPED OUT. OTHERWISE,NEST LEVEL IS DEFINED. ; 52360000=16248000=
PROCEDURE GOTOS; 52365000=16249000=
BEGIN 52370000=16250000=
LABEL 52375000=16251000=
EXIT; 52380000=16251000=
IF STEPI ^= TOV THEN 52385000=16252000=
I:= I-1; 52390000=16252000=
IF STEPI ^= STLABID THEN 52395000=16253000=
ELCLASS <= IDMAX 52400000=16253000=
DECLARELABEL ELSE 52405000=16253100=
BEGIN 52410000=16253100=
ERR(260); 52415000=16253100=
GO TO EXIT 52420000=16253100=
END; 52425000=16253100=
IF (GT2:= TAKE(GIT(GT1:= ELBAT[I]))).MON = 1 OR GT2.LOC ^= 0 THEN 52430000=16255000=
EMITJUMP(GT1) 52435000=16256000=
ELSE 52440000=16256000=
BEGIN 52445000=16257000=
PUT(0 & L[23:11:12], GIT(GT1)); 52450000=16257000=
IF GT1 > 0 THEN 52455000=16258000=
BEGIN 52460000=16259000=
PUT(-(TAKE(GT1) & (NESTLEVEL-JUMPLEVEL)[36:4:5]), GT1); 52465000=16260000=
EMITN(1023); 52470000=16261000=
END 52475000=16264000=
ELSE 52480000=16264000=
BEGIN 52485000=16264000=
IF GT1.LEVEL ^= NESTLEVEL-JUMPLEVEL THEN 52490000=16265000=
FLAG(257); 52495000=16265000=
EMIT(GT2.LASTGT); 52500000=16266000=
END; 52505000=16267000=
END; 52510000=16268000=
JUMPLEVEL:= 0; 52515000=16269000=
EXIT: 52520000=16270000=
END GOTOS; 52525000=16270000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%52530000=16270000=
COMMENT RELEASES COMPILES THE STREAM RELEASE STATEMENT. 52535000=16271000=
THE CODE GENERATED IS : 52540000=16272000=
SED FILE 52545000=16273000=
RSA 0. 52550000=16274000=
AT EXECUTION TIME THIS CAUSES AN INVALID ADDRESS WHICH IS 52555000=16275000=
INTERPETED BY THE MCP TO MEAN RELEASE THE FILE POINTED TO 52560000=16276000=
BY THE DESTINATION ADDRESS. 52565000=16277000=
THE MONITOR BIT IS SET IN INFO FOR THE LOCAL VARIABLE SO 52570000=16278000=
THAT ACUTAL PARAPART MAY BE INFORMED LATER THAT A FILE 52575000=16279000=
MUST BE PASSED FOR THIS FORMAL PARAMETER; 52580000=16280000=
COMMENT INDEXS COMPILE STATEMENTS BEGINING WITH SI,DI,CI,TALLY 52585000=16290000=
OR LOCALIDS . 52590000=16291000=
THREE CASES PRESENT THEMSELVES, 52595000=16292000=
LETING X BE EITHER OF SI,DI,CI OR TALLY, THEY ARE: 52600000=16293000=
CASE I LOCLID ~ X 52605000=16294000=
CASE II X ~ X ... 52610000=16295000=
CASE III X ~ EITHER LOC,LOCLID,SC OR DC. 52615000=16296000=
THE VARIABLE "INDEX" IS COMPUTED,DEPENDING UPON WHICH 52620000=16297000=
CASE EXISTS,SUCH THAT ARRAY ELEMENT "MACRO[INDEX]"CONTAINS52625000=16298000=
THE CODE TO BE EMITTED. 52630000=16299000=
EACH ELEMENT OF MACRO HAS 1-3 SYLLABLES ORDERED FROM 52635000=16300000=
RIGHT TO LEFT, UNUSED SYLLABLES MUST = 0. EACH MACRO 52640000=16301000=
MAY REQUIRE AT MOST ONE REPEAT PART. 52645000=16302000=
IN THIS PROCEDURE,INDEXS,THE VARIABLE "ADDR" CONTAINS THE 52650000=16303000=
PROPER REPEAT PART BY THE TIME THE LABEL "GENERATE" IS 52655000=16304000=
ENCOUNTERED. THE SYLLABLES ARE FETCHED FROM MACRO[TYPE] 52660000=16305000=
ONE AT A TIME AND IF THE REPEAT PART ^= 0 THEN"ADDR" IS 52665000=16306000=
USED AS THE REPEAT PART,THUS BUILDING A SYLLABLE WITH 52670000=16307000=
THE PROPER ADDRESS AND OPERATOR . 52675000=16308000=
NOTE: IF MACRO[TYPE] = 0 THEN THIS SIGNIFIES A SYNTAX 52680000=16309000=
ERROR. ; 52685000=16310000=
PROCEDURE INDEXS; 52690000=16311000=
BEGIN 52695000=16312000=
LABEL 52700000=16313000=
EXIT, 52705000=16313000=
GENERATE, 52710000=16313000=
L, 52715000=16313000=
L1; 52720000=16313000=
INTEGER 52725000=16314000=
TCLASS, 52730000=16314000=
INDEX, 52735000=16314000=
ADDR, 52740000=16314000=
J; 52745000=16314000=
TCLASS:= ELCLASS; 52750000=16315000=
IF STEPI ^= ASSIGNOP THEN 52755000=16316000=
BEGIN 52760000=16316000=
ERR(251); 52765000=16316000=
GO TO EXIT 52770000=16316000=
END; 52775000=16316000=
IF TCLASS = LOCLID THEN 52780000=16317000=
BEGIN 52785000=16318000=
IF SIV > STEPI OR ELCLASS > TALLYV THEN 52790000=16319000=
GO TO L; 52795000=16319000=
INDEX:= 32+ELCLASS-SIV; 52800000=16320000=
ADDR:= ELBAT[I-2].ADDRESS; 52805000=16321000=
GO TO GENERATE; 52810000=16322000=
END; 52815000=16323000=
IF TCLASS = STEPI THEN 52820000=16324000=
BEGIN 52825000=16325000=
IF STEPI ^= ADDOP OR STEPI ^= LITNO AND ELCLASS ^= LOCLID THEN 52830000=16327000=
GO TO L; 52835000=16327000=
INDEX:= TCLASS-SIV+REAL(ELBAT[I-1].ADDRESS = SUB)*4+ 52840000=16330000=
REAL(ELCLASS = LOCLID)*8; 52845000=16330000=
END 52850000=16333000=
ELSE 52855000=16333000=
BEGIN 52860000=16333000=
INDEX:= TCLASS-SIV+(IF ELCLASS = LOCLID THEN 16 ELSE IF ELCLASS 52865000=16338000=
= LOCV THEN 20 ELSE IF ELCLASS = SCV THEN 24 ELSE IF ELCLASS 52870000=16338000=
= DCV THEN 28 ELSE 25); 52875000=16338000=
IF ELCLASS = LOCV THEN 52880000=16339000=
IF STEPI ^= LOCLID THEN 52885000=16340000=
GO TO L; 52890000=16340000=
IF ELCLASS = LITNO AND TCLASS = TALLYV THEN 52895000=16341000=
BEGIN 52900000=16342000=
EMITC(ELBAT[I].ADDRESS, SEC); 52905000=16342000=
GO TO EXIT 52910000=16342000=
END; 52915000=16342000=
END; 52920000=16343000=
ADDR:= ELBAT[I].ADDRESS; 52925000=16344000=
GENERATE: 52930000=16346000=
IF MACRO[INDEX] = 0 THEN 52935000=16346000=
L: 52940000=16347000=
BEGIN 52945000=16347000=
ERR(250); 52950000=16347000=
GO TO EXIT 52955000=16347000=
END; 52960000=16347000=
J:= 8; 52965000=16348000=
TCLASS:= 0; 52970000=16348000=
L1: EBCDICBUFF[0]:= TCLASS; 52975000=16349000=
MOVECHARACTERS(2, MACRO, INDEX, J:= J-2, EBCDICBUFF, 0, 6); 52976000
TCLASS:= EBCDICBUFF[0]; 52978000
IF TCLASS ^= 0 THEN 52980000=16350000=
BEGIN 52985000=16351000=
EMITC(IF TCLASS >= 64 THEN ADDR ELSE 0, TCLASS); 52990000=16352000=
GO TO L1 52995000=16354000=
END; 53000000=16354000=
EXIT: 53005000=16355000=
END INDEXS; 53010000=16355000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53015000=16355000=
COMMENT DSS COMPILES DESTINATION STREAM STATEMENTS. 53020000=16356000=
DS:= LIT"STRING" IS HANDLED AS A SPECIAL CASE BECAUE THE 53025000=16357000=
STRING MUST BE SCANED FROM RIGHT TO LEFT,REPEATEDLY IF 53030000=16358000=
NECESSARY, AND EMITTED TO THE PROGRAM STREAM. IN 53035000=16359000=
ALL OTHER CASES,THE ELBAT WORD CONTAINS THE OPERATOR IN 53040000=16360000=
THE OPCODE FIELD ; 53045000=16361000=
PROCEDURE DSS; 53050000=16362000=
BEGIN 53055000=16363000=
INTEGER 53060000=16364000=
ADDR, 53065000=16364000=
J, 53070000=16364000=
K, 53075000=16364000=
L, 53080000=16364000=
T; 53085000=16364000=
LABEL 53090000=16365000=
EXIT, 53095000=16365000=
L1; 53100000=16365000=
DEFINE 53105000=16366000=
OPCODE = [20:6] #; 53110000=16366000=
IF STEPI ^= ASSIGNOP THEN 53115000=16367000=
BEGIN 53120000=16367000=
ERR(251); 53125000=16367000=
GO TO EXIT 53130000=16367000=
END; 53135000=16367000=
IF STEPI = LOCLID THEN 53140000=16368000=
BEGIN 53145000=16369000=
EMITC(ELBAT[I].ADDRESS, CRF); 53150000=16370000=
ADDR:= 0; 53155000=16371000=
IF STEPI = LITV THEN 53160000=16372000=
GO TO L1 53165000=16374000=
END 53170000=16374000=
ELSE 53175000=16374000=
IF ELCLASS = LITNO THEN 53180000=16374000=
BEGIN 53185000=16375000=
ADDR:= ELBAT[I].ADDRESS; 53190000=16376000=
STEPIT; 53195000=16376000=
END 53200000=16378000=
ELSE 53205000=16378000=
ADDR:= 1; 53210000=16378000=
IF Q = 6"4FILL0" THEN 53215000=16378500=
EMITC(ADDR, 10) 53220000=16378500=
ELSE %E 53225000=16378500=
IF ELCLASS = TRNSFER THEN 53230000=16379000=
EMITC(ADDR, ELBAT[1].OPCODE) 53235000=16380000=
ELSE 53240000=16380000=
IF ELCLASS = LITV THEN 53245000=16381000=
BEGIN 53250000=16382000=
EMITC(ADDR, TRP); 53255000=16383000=
IF STEPI ^= STRNGCON THEN 53260000=16384000=
BEGIN 53265000=16384500=
ERR(255); 53270000=16384500=
GO TO EXIT 53275000=16384500=
END; 53280000=16384500=
IF ADDR MOD 2 ^= 0 THEN 53285000=16385000=
BEGIN 53290000=16386000=
EMIT(ACCUM[1].[29:6]); 53295000=16387000=
J:= 1; 53300000=16387000=
END; 53305000=16388000=
FOR K:= J+2 STEP 2 UNTIL ADDR DO 53310000=16389000=
BEGIN 53315000=16390000=
FOR L:= 6, 7 DO 53320000=16391000=
BEGIN 53322000
EBCDICBUFF[0]:= T; 53324000
MOVECHARACTERS(1, ACCUM, 1, 53325000=16393000=
2+(IF J:= J+1 > COUNT THEN J:= 1 ELSE J), 53330000=16393000=
EBCDICBUFF, 0, L); 53331000
T:= EBCDICBUFF[0]; 53332000
END; 53333000
EMIT(T); 53335000=16394000=
END 53340000=16396000=
END 53345000=16397000=
ELSE 53350000=16397000=
L1: ERR(250); 53355000=16397000=
EXIT: 53360000=16398000=
END DSS; 53365000=16398000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53370000=16398000=
COMMENT SKIPS COMPILES THE SKIP BIT STATEMENT. 53375000=16399000=
IF THE REPEAT INDEX IS A LOCALID THEN A CRF IS EMITTED. 53380000=16400000=
A BSS OR BSD IS THEN EMITTED FOR SKIP SOURCE BITS (SB) 53385000=16401000=
OR SKIP DESTINATION BITS (DB) RESPECTIVELY ; 53390000=16402000=
PROCEDURE SKIPS; 53395000=16403000=
BEGIN 53400000=16404000=
REAL 53405000=16405000=
ADDR; 53410000=16405000=
IF STEPI = LOCLID THEN 53415000=16406000=
BEGIN 53420000=16407000=
EMITC(ELBAT[I].ADDRESS, CRF); 53425000=16408000=
ADDR:= 0; 53430000=16408000=
STEPIT; 53435000=16408000=
END 53440000=16410000=
ELSE 53445000=16410000=
IF ELCLASS = LITNO THEN 53450000=16410000=
BEGIN 53455000=16411000=
ADDR:= ELBAT[I].ADDRESS; 53460000=16412000=
STEPIT 53465000=16413000=
END 53470000=16414000=
ELSE 53475000=16414000=
ADDR:= 1; 53480000=16414000=
IF ELCLASS = SBV THEN 53485000=16415000=
EMITC(ADDR, BSS) 53490000=16416000=
ELSE 53495000=16416000=
IF ELCLASS = DBV THEN 53500000=16417000=
EMITC(ADDR, BSD) 53505000=16418000=
ELSE 53510000=16418000=
ERR(250); 53515000=16418000=
END SKIPS; 53520000=16419000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53525000=16419000=
COMMENT JUMPS COMPILES JUMP OUT AND JUMP OUT TO STATEMENTS. 53530000=16420000=
JUMP OUT TO STATEMENTS CAUSE JUMP LEVEL TO BE SET TO 53535000=16421000=
THE NUMBER OF LEVELS SPECIFIED. THEN THIS NUMBER OF 53540000=16422000=
JNS ARE EMITTED AND GOTOS IS CALLED TO COMPILE THE 53545000=16423000=
JUMP INSTRUCTION. 53550000=16424000=
SIMPLE JUMP OUTS ARE HANDLED BY EMITTING ONE JNS,ENTERING 53555000=16425000=
A PSEUDO STLABID IN INFO AND SETTING ELBAT[I] SUCH THAT 53560000=16426000=
THE GOTOS PROCEDURE WILL PERFORM THE ACTION OF SETTING 53565000=16427000=
UP THE LINKS FOR LATER FIX UPS. THE NEST STATEMENT CAUSES 53570000=16428000=
THESE FIX UPS(IF EMITTING OF JUMP INSTRUCTIONS) BY CALLING53575000=16429000=
GO TOS WHEN THE RIGHT PAREN IS ENCOUNTERED. ; 53580000=16430000=
PROCEDURE JUMPS; 53585000=16431000=
BEGIN 53590000=16432000=
JUMPLEVEL:= 1; 53595000=16433000=
IF STEPI ^= DECLARATORS THEN 53600000=16434000=
IF ACCUM[1] ^= 6"3OUT00" THEN 53605000=16434000=
FLAG(261); 53610000=16434100=
IF STEPI = LITNO THEN 53615000=16435000=
JUMPLEVEL:= ELBAT[I].ADDRESS 53620000=16436000=
ELSE 53625000=16436000=
BEGIN 53630000=16436000=
IF ELCLASS ^= TOV AND ELCLASS ^= STLABID THEN 53635000=16437000=
BEGIN 53640000=16438000=
COMMENT SIMPLE JUMP OUT STATEMENT; 53645000=16439000=
IF JOINFO = 0 THEN 53650000=16440000=
BEGIN 53655000=16441000=
JOINFO:= NEXTINFO; 53660000=16442000=
PUTNBUMP 53665000=16444000=
(STACKHEAD[0], LINK & (STLABID*2+1)[45:7:8] & 2[20:7:8]); 53670000=16444000=
PUTNBUMP(0 & (JOINFO-LASTINFO)[43:7:8]); 53675000=16445000=
PUTNBUMP(0); 53680000=16446000=
LASTINFO:= JOINFO; 53685000=16447000=
END; 53690000=16448000=
ELBAT[I:= I-1]:= TAKE(JOINFO) & JOINFO[12:12:13]; 53695000=16449000=
END; 53700000=16450000=
I:= I-1; 53705000=16450000=
END; 53710000=16451000=
FOR GT1:= 1 STEP 1 UNTIL JUMPLEVEL DO 53715000=16452000=
EMIT(JNS); 53720000=16453000=
GOTOS; 53725000=16454000=
END JUMPS; 53730000=16455000=
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53735000=16455000=
COMMENT STREAMSTMT ENVOKES THE APPROPRIATE PROCEDURE TO HANDLE 53740000=16456000=
THE VARIOUS AND SUNDRY STREAM PROCEDURE STATEMENTS. 53745000=16457000=
THE STATEMENTS ARE BROKEN DOWN AS FOLLOWS: 53750000=16458000=
IDENTIFIED BY PROCEDURE ENVOKED 53755000=16459000=
END GO TO FINI 53760000=16460000=
SEMICOLON GO TO FINI 53765000=16461000=
) GO TO FINI 53770000=16462000=
IF IFS 53775000=16463000=
GO GOTOS 53780000=16464000=
RELEASE RELEASES 53785000=16465000=
BEGIN COMPOUNDTAIL 53790000=16466000=
SI,DI,CI,TALLY,LOCALID INDEXS 53795000=16467000=
DS DSS 53800000=16468000=
SKIP SKIPS 53805000=16469000=
JUMP JUMPS 53810000=16470000=
LABELID LABELS 53815000=16471000=
LITERAL NO.,LOCALID( NESTS 53820000=16472000=
UPON EXITING,STREAMSTMT ASSURES THAT "I" POINTS TO 53825000=16473000=
THE SEMICOLON ,END OR ) IN SYNTACICALLY CORRECT PROGRAMS; 53830000=16474000=
LABEL 53835000=16475000=
L, 53840000=16475000=
L1, 53845000=16475000=
L2, 53850000=16475000=
L3, 53855000=16475000=
L4, 53860000=16475000=
L5, 53865000=16475000=
L6, 53870000=16475000=
L7, 53875000=16475000=
L8, 53880000=16475000=
L9, 53885000=16475000=
L10, 53890000=16475000=
EXIT, 53895000=16475000=
FINI, 53900000=16475000=
START; 53905000=16475000=
SWITCH 53910000=16476000=
TYPE:= FINI, 53915000=16476000=
L, 53920000=16476000=
FINI, 53925000=16476000=
L3, 53930000=16476000=
L4, 53935000=16476000=
L5, 53940000=16476000=
L6, 53945000=16476000=
L7, 53950000=16476000=
L7, 53955000=16476000=
L7, 53960000=16476000=
L7, 53965000=16476000=
L8, 53970000=16476000=
L9, 53975000=16476000=
L10; 53980000=16476000=
START: 53985000=16477000=
GO TO TYPE[ELCLASS-ENDV+1]; 53990000=16477000=
IF ELCLASS = RTPAREN THEN 53995000=16478000=
GO TO FINI; 54000000=16478000=
IF ELCLASS = STLABID THEN 54005000=16481000=
GO TO L2; 54010000=16481000=
IF ELCLASS < IDMAX AND ELCLASS ^= LOCLID THEN 54015000=16482100=
BEGIN 54020000=16482100=
DECLARELABEL; 54025000=16482200=
GO TO L2; 54030000=16482200=
END; 54035000=16482200=
IF ELCLASS = LITNO OR ELCLASS = LOCLID AND TABLE(I+1) = LFTPAREN THEN 54040000=16482400=
GO TO L1; 54045000=16482400=
IF ELCLASS = LOCLID THEN 54050000=16482500=
GO TO L7; 54055000=16482500=
L: 54060000=16483000=
ERR(250); 54065000=16483000=
GO TO FINI; 54070000=16483000=
L1: 54075000=16484000=
NESTS; 54080000=16484000=
GO TO EXIT; 54085000=16484000=
L2: 54090000=16485000=
LABELS; 54095000=16485000=
GO TO START; 54100000=16485000=
L3: 54105000=16486000=
IFS; 54110000=16486000=
GO TO FINI; 54115000=16486000=
L4: 54120000=16487000=
GOTOS; 54125000=16487000=
GO TO EXIT; 54130000=16487000=
L5: 54135000=16489000=
L6: 54140000=16489000=
I:= I+1; 54145000=16489000=
COMPOUNDTAIL; 54150000=16489000=
GO TO FINI; 54155000=16489000=
L7: 54160000=16490000=
INDEXS; 54165000=16490000=
GO TO EXIT; 54170000=16490000=
L8: 54175000=16491000=
DSS; 54180000=16491000=
GO TO EXIT; 54185000=16491000=
L9: 54190000=16492000=
SKIPS; 54195000=16492000=
GO TO EXIT; 54200000=16492000=
L10: 54205000=16493000=
JUMPS; 54210000=16493000=
GO TO EXIT; 54215000=16493000=
EXIT: 54220000=16494000=
STEPIT; 54225000=16494000=
FINI: 54230000=16495000=
END STREAMSTMT; 54235000=16495000=
CODE[0]:= I; 54240000=16495100=
TIME1:= TIME(1); 54245000=16495200=
PROGRAM; 54250000=16495200=
ENDOFITALL: 54255000=16495210=
END MAIN BLOCK 54260000=16495300=
END. 54265000=16495300=