mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-29 04:20:55 +00:00
20368 lines
1.8 MiB
20368 lines
1.8 MiB
$ SET ALGOL 00000100120415PK
|
|
$SET OMIT LISTOMITTED = LIST 00001000=00000999=
|
|
%#######################################################################00002000=00001000=
|
|
% 00003000=00001010=
|
|
% B-5700 ALGOL/TSPOL SYMBOLIC 00004000=00001020=
|
|
% MARK XVI.0.122 00005000=00001030=
|
|
% MAY 9, 1977 00006000=00001040=
|
|
% 00007000=00001050=
|
|
%#######################################################################00008000=00001060=
|
|
% 00009000=00001070=
|
|
COMMENT: * TITLE: B5500/B5700 MARK XVI SYSTEM RELEASE * 00010000=00001072=
|
|
* FILE ID: SYMBOL/ALGOL TAPE ID: SYMBOL1/FILE000 * 00011000=00001073=
|
|
* THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00012000=00001074=
|
|
* AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00013000=00001075=
|
|
* EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00014000=00001076=
|
|
* WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00015000=00001077=
|
|
* BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00016000=00001078=
|
|
* * 00017000=00001079=
|
|
* COPYRIGHT (C) 1965, 1971, 1972, 1974 * 00018000=00001080=
|
|
* BURROUGHS CORPORATION * 00019000=00001081=
|
|
* AA759915 AA320206 AA393180 AA332366 *; 00020000=00001082=
|
|
COMMENT#################################################################00021000=00001110=
|
|
ERROR MESSAGES 00022000=00001120=
|
|
########################################################################00023000=00001130=
|
|
% 00024000=00001140=
|
|
ERROR NUMBER ROUTINE:ERROR MESSAGE 00025000=00002000=
|
|
000 BLOCK: DECLARATION NOT FOLLOWED BY SEMICOLON. 00026000=00003000=
|
|
001 BLOCK: IDENTIFIER DECLARED TWICE IN SAME BLOCK. 00027000=00004000=
|
|
002 PROCEDUREDEC: SPECIFICATION PART CONTAINS 00028000=00005000=
|
|
IDENTIFIER NOT APPEARING IN 00029000=00006000=
|
|
FORMAL PARAMETER PART. 00030000=00007000=
|
|
003 BLOCK: NON-IDENTIFIER APPEARS IN IDENTIFIER 00031000=00008000=
|
|
LIST OF DECLARATION. 00032000=00009000=
|
|
004 PROCEDUREDEC: STREAM PROCEDURE DECLARATION 00033000=00010000=
|
|
PRECEDED BY ILLEGAL DECLARATOR. 00034000=00011000=
|
|
005 PROCEDUREDEC: PROCEDURE DECLARATION PRECEDED 00035000=00012000=
|
|
BY ILLEGAL DECLARATOR. 00036000=00013000=
|
|
006 PROCEDUREDEC: PROCEDURE IDENTIFIER USED BEFORE 00037000=00014000=
|
|
IN SAME BLOCK(NOT FORWARD). 00038000=00015000=
|
|
007 PROCEDUREDEC: PROCEDURE IDENTIFIER NOT FOLLOWED 00039000=00016000=
|
|
BY ( OR SEMICOLON IN PROCEDURE 00040000=00017000=
|
|
DECLARATION. 00041000=00018000=
|
|
008 PROCEDUREDEC: FORMAL PARAMETER LIST NOT FOLLOWED 00042000=00019000=
|
|
BY ). 00043000=00020000=
|
|
009 PROCEDUREDEC: FORMAL PARAMETER PART NOT FOLLOWED 00044000=00021000=
|
|
BY SEMICOLON. 00045000=00022000=
|
|
010 PROCEDUREDEC: VALUE PART CONTAINS IDENTIFIER 00046000=00023000=
|
|
WHICH DID NOT APPEAR IN FORMAL 00047000=00024000=
|
|
PARAPART. 00048000=00025000=
|
|
011 PROCEDUREDEC: VALUE PART NOT ENDED BY SEMICOLON. 00049000=00026000=
|
|
012 PROCEDUREDEC: MISSING OR ILLEGAL SPECIFICATION 00050000=00027000=
|
|
PART. 00051000=00028000=
|
|
013 PROCEDUREDEC: OWN, SAVE, OR AUXMEM USED IN 00052000=00029000=
|
|
ARRAY SPECIFICATION. 00053000=00029500=
|
|
014 ARRAYDEC: AUXMEM AND SAVE ARE MUTUALLY EXCLUSIVE. 00054000=00030000=
|
|
015 ARRAYDEC: ARRAY CALL-BY-VALUE NOT IMPLEMENTED. 00055000=00030500=
|
|
00056000=00031000=
|
|
016 ARRAYDEC: ARRAY ID IN DECLARATION NOT FOLLOWED 00057000=00032000=
|
|
BY [ . 00058000=00033000=
|
|
017 ARRAYDEC: LOWER BOUND IN ARRAY DEC NOT 00059000=00034000=
|
|
FOLLOWED BY : . 00060000=00035000=
|
|
018 ARRAYDEC: BOUND PAIR LIST NOT FOLLOWED BY ]. 00061000=00036000=
|
|
019 ARRAYSPEC: ILLEGAL LOWER BOUND DESIGNATOR IN 00062000=00037000=
|
|
ARRAY SPECIFICATION. 00063000=00038000=
|
|
020 BLOCK: OWN APPEARS IMMEDIATELY BEFORE 00064000=00039000=
|
|
IDENTIFIER(NO TYPE). 00065000=00040000=
|
|
021 BLOCK: SAVE APPEARS IMMEDIATELY BEFORE 00066000=00041000=
|
|
IDENTIFIER(NO TYPE). 00067000=00042000=
|
|
022 BLOCK: STREAM APPEARS IMMEDIATELY BEFORE 00068000=00043000=
|
|
IDENTIFIER(THE WORD PROCEDURE LEFT 00069000=00044000=
|
|
OUT). 00070000=00045000=
|
|
023 BLOCK: DECLARATOR PRECEDED ILLEGALLY BY 00071000=00046000=
|
|
ANOTHER DECLARATOR. 00072000=00047000=
|
|
024 PROCEDUREDEC: LABEL CANNOT BE PASSED TO FUNCTION. 00073000=00048000=
|
|
025 BLOCK: DECLARATOR OR SPECIFIER ILLEGALLY 00074000=00049000=
|
|
PRECEDED BY OWN OR SAVE OR SOME 00075000=00050000=
|
|
OTHER DECLARATOR. 00076000=00051000=
|
|
026 FILEDEC: MISSING ( IN FILE DEC. 00077000=00052000=
|
|
027 FILEDEC: MISSING RECORD SIZE. 00078000=00053000=
|
|
00079000=00054000=
|
|
028 FILEDEC: ILLEGAL BUFFER PART OR SAVE FACTOR 00080000=00055000=
|
|
IN FILE DEC. 00081000=00056000=
|
|
029 FILEDEC: MISSING ) IN FILE DEC. 00082000=00057000=
|
|
030 IODEC: MISSING COLON IN DISK DESCRIPTION. 00083000=00058000=
|
|
00084000=00059000=
|
|
031 LISTDEC: MISSING ( IN LISTDEC. 00085000=00060000=
|
|
032 FORMATDEC: MISSING ( IN FORMAT DEC. 00086000=00061000=
|
|
033 SWITCHDEC: SWITCH DEC DOES NOT HAVE := OR 00087000=00062000=
|
|
FORWARD AFTER IDENTIFIER. 00088000=00063000=
|
|
034 SWITCHFILEDEC:MISSING := AFTER FILED. 00089000=00064000=
|
|
035 SWITCHFILEDEC:NON FILE ID APPEARING IN DECLARATION 00090000=00065000=
|
|
OF SWITCHFILE. 00091000=00066000=
|
|
036 SUPERFORMATDEC:FORMAT ID NOT FOLLOWED BY := . 00092000=00067000=
|
|
037 SUPERFORMATDEC:MISSING ( AT START OF FORMATPHRASE . 00093000=00068000=
|
|
038 SUPERFORMATDEC:FORMAT SEGMENT >1022 WORDS. 00094000=00069000=
|
|
039 BLOCK: NUMBER OF NESTED BLOCKS IS GREATER THAN 31 00095000=00069100=
|
|
040 IODEC: PROGRAM PARAMETER BLOCK SIZE EXCEEDED 00096000=00069200=
|
|
041 HANDLESWLIST: MISSING := AFTER SWITCH LIST ID. 00097000=00069300=
|
|
042 HANDLESWLIST: ILLEGAL LIST ID APPEARING IN SWITCH LIST. 00098000=00069400=
|
|
043 IODEC: MISSING ] AFTER DISK IN FILEDEC. 00099000=00069500=
|
|
044 IODEC: MISSING [ AFTER DISK IN FILEDEC. 00100000=00069600=
|
|
045 DEFINEDEC: MISSING "*" AFTER DEFINE ID. 00101000=00069700=
|
|
046 ARRAE: NON-LITERAL ARRAY BOUND NOT GLOBAL TO ARRAY DECL. 00102000=00069800=
|
|
047 TABLE: ITEM FOLLOWING @ NOT A NUMBER. 00103000=00069900=
|
|
048: PROCEDUREDEC: NUMBER OF PARAMETERS DIFFERS FROM FWD DECL. 00104000=00069910=
|
|
049: PROCEDUREDEC: CLASS OF PARAMETER DIFFERS FROM FWD DECL. 00105000=00069920=
|
|
050: PROCEDUREDEC: VALUE PART DIFFERS FROM FWD DECL. 00106000=00069930=
|
|
051 SAVEPROC : FORWARD DECLARATION DOES NOT AGREE WITH 00107000=00069931=
|
|
ACTUAL DECLARATION 00108000=00069932=
|
|
052 SAVEPROC :STATEMENT MAY NOT START WITH THIS KIND OF 00109000=00069933=
|
|
IDENTIFIER. 00110000=00069934=
|
|
059 ARRAYDEC: IMPROPER ARRAY SIZE. 00111000=00069938=
|
|
060 FAULTSTMT: MISSING := IN FAULT STATEMENT. 00112000=00069940=
|
|
061 FAULTDEC: INVALID FAULT TYPE: MUST BE FLAG, EXPOVR, ZERO, 00113000=00069950=
|
|
INTOVR, OR INDEX. 00114000=00069960=
|
|
070 CASESTMT: MISSING BEGIN. 00115000=00069970=
|
|
071 CASESTMT: MISSING END. 00116000=00069980=
|
|
080 PRIMARY: MISSING COMMA . 00117000=00069990=
|
|
090 PARSE: MISSING LEFT BRACKET 00118000=00069991=
|
|
091 PARSE: MISSING COLON 00119000=00069992=
|
|
092 PARSE: ILLEGAL BIT NUMBER 00120000=00069993=
|
|
093 PARSE: FIELD SIZE MUST BE LITERAL 00121000=00069994=
|
|
094 PARSE: MISSING RIGHT BRACKET 00122000=00069995=
|
|
095 PARSE: ILLEGAL FIELD SIZE 00123000=00069996=
|
|
100 ANYWHERE: UNDECLARED IDENTIFIER. 00124000=00070000=
|
|
101 CHECKER: AN ATTEMPT HAS BEEN MADE TO ADDRESS AN 00125000=00071000=
|
|
IDENTIFIER WHICH IS LOCAL TO ONE PROCEDURE AND GLOBAL00126000=00072000=
|
|
TO ANOTHER. IF THE QUANTITY IS A PROCEDURE NAME OR 00127000=00073000=
|
|
AN OWN VARIABLE THIS RESTRICTION IS RELAXED. 00128000=00074000=
|
|
102 AEXP: CONDITIONAL EXPRESSION IS NOT OF ARITHMETIC TYPEH 00129000=00075000=
|
|
103 PRIMARY: PRIMARY MAY NOT BEGIN WITH A QUANTITY OF THIS 00130000=00076000=
|
|
TYPE. 00131000=00077000=
|
|
104 ANYWHERE: MISSING RIGHT PARENTHESIS. 00132000=00078000=
|
|
105 ANYWHERE: MISSING LEFT PARENTHESIS. 00133000=00079000=
|
|
106 PRIMARY: PRIMARY MAY NOT START WITH DECLARATOR. 00134000=00080000=
|
|
107 BEXP: THE EXPRESSION IS NOT OF BOOLEAN TYPE. 00135000=00081000=
|
|
108 EXPRSS: A RELATION MAY NOT HAVE CONDITIONAL EXPRESSIONS 00136000=00082000=
|
|
AS THE ARITHMETIC EXPRESSIONS. 00137000=00083000=
|
|
109 BOOSEC,SIMBOO, AND BOOCOMP: THE PRIMARY IS NOT BOOLEAN. 00138000=00084000=
|
|
110 BOOCOMP: A NON-BOOLEAN OPERATOR OCCURS IN A BOOLEAN 00139000=00085000=
|
|
EXPRESSION. 00140000=00086000=
|
|
111 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00141000=00087000=
|
|
TIONAL) MAY BEGIN WITH A QUANTITY OF THIS TYPE. 00142000=00088000=
|
|
112 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00143000=00089000=
|
|
TIONAL) MAY BEGIN WITH A DECLARATOR. 00144000=00090000=
|
|
113 PARSE: EITHER THE SYTAX OR THE RANGE OF THE LITERALS FOR 00145000=00091000=
|
|
A CONCATENATE OPERATOR IS INCORRECT. 00146000=00092000=
|
|
114 DOTSYNTAX: EITHER THE SYNTAX OR THE RANGE OF THE LITERALS 00147000=00093000=
|
|
FOR A PARTIAL WORD DESIGNATOR IS INCORRECT. 00148000=00094000=
|
|
115 DEXP: THE EXPRESSION IS NOT OF DESIGNATIONAL TYPE. 00149000=00095000=
|
|
116 IFCLAUSE: MISSING THEN. 00150000=00096000=
|
|
117 BANA: MISSING LEFT BRAKET. 00151000=00097000=
|
|
118 BANA: MISSING RIGHT BRAKET. 00152000=00098000=
|
|
119 COMPOUNDTAIL: MISSING SEMICOLON OR END. 00153000=00099000=
|
|
120 COMPOUNDTAIL: MISSING END. 00154000=00100000=
|
|
121 ACTUALPARAPART: AN INDEXED FILE MAY BE PASSED BY NAME 00155000=00101000=
|
|
ONLY AND ONLY TO A STREAM PROCEDURE - THE STREAM 00156000=00102000=
|
|
PROCEDURE MAY NOT DO A RELEASE ON THIS TYPE PARA- 00157000=00103000=
|
|
METER. 00158000=00104000=
|
|
122 ACTUALPARAPART: STREAM PROCEDURE MAY NOT HAVE AN 00159000=00105000=
|
|
EXPRESSION PASSED TO IT BY NAME. 00160000=00106000=
|
|
123 ACTUALPARAPART: THE ACTUAL AND FORMAL PARAMETERS DO NOT 00161000=00107000=
|
|
AGREE AS TO TYPE. 00162000=00108000=
|
|
124 ACTUALPARAPART: ACTUAL AND FORMAL ARRAYS DO NOT HAVE SAME00163000=00109000=
|
|
NUMBER OF DIMENSIONS. 00164000=00110000=
|
|
125 ACTUALPARAPART: STREAM PROCEDURES MAY NOT BE PASSED AS A 00165000=00111000=
|
|
PARAMETER TO A PROCEDURE. 00166000=00112000=
|
|
126 ACTUALPARAPART: NO ACTUAL PARAMETER MAY BEGIN WITH A 00167000=00113000=
|
|
QUANTITY OF THIS TYPE. 00168000=00114000=
|
|
127 ACTUALPARAPART: THIS TYPE QUANTITY MAY NOT BE PASSED TO A00169000=00115000=
|
|
STREAM PROCEDURE. 00170000=00116000=
|
|
128 ACTUALPARAPART: EITHER ACTUAL AND FORMAL PARAMETERS DO 00171000=00117000=
|
|
NOT AGREE AS TO NUMBER, OR EXTRA RIGHT PARENTHESIS. 00172000=00118000=
|
|
129 ACTUALPARAPART: ILLEGAL PARAMETER DELIMITER. 00173000=00119000=
|
|
130 RELSESTMT: NO FILE NAME. 00174000=00120000=
|
|
131 DOSTMT: MISSING UNTIL. 00175000=00121000=
|
|
132 WHILESTMT: MISSING DO. 00176000=00122000=
|
|
133 LABELR: MISSING C OLON. 00177000=00123000=
|
|
134 LABELR: THE LABEL WAS NOT DECLARED IN THIS BLOCK. 00178000=00124000=
|
|
135 LABELR: THE LABEL HAS ALREADY OCCURED. 00179000=00125000=
|
|
136 FORMATPHRASE: IMPROPER FORMAT EDITING PHRASE. 00180000=00126000=
|
|
137 FORMATPHRASE: A FORMAT EDITING PHRASE DOES NOT HAVE AN 00181000=00127000=
|
|
INTEGER WHERE AN INTEGER IS REQUIRED. 00182000=00128000=
|
|
138 FORMATPHRASE: THE WIDTH IS TOO SMALL IN E OR F EDITING 00183000=00129000=
|
|
PHRASE. 00184000=00130000=
|
|
139 TABLE: DEFINE IS NESTED MORE THAN EIGHT DEEP. 00185000=00131000=
|
|
140 NEXTENT: AN INTEGER IN A FORMAT IS GREATER THAN 1023. 00186000=00132000=
|
|
141 SCANNER: INTEGER OR IDENTIFIER HAS MORE THAN 63 00187000=00133000=
|
|
CHARACTORS. 00188000=00134000=
|
|
142 DEFINEGEN: A DEFINE CONTAINS MORE THAN 2047 CHARACTORS 00189000=00135000=
|
|
(BLANK SUPPRESSED). 00190000=00136000=
|
|
143 COMPOUNDTAIL: EXTRA END. 00191000=00137000=
|
|
144 STMT: NO STATEMENT MAY START WITH THIS TYPE IDENTIFIER. 00192000=00138000=
|
|
145 STMT: NO STATEMENT MAY START WITH THIS TYPE QUANTITY. 00193000=00139000=
|
|
146 STMT: NO STATEMENT MAY START WITH A DECLARATOR - MAY BE 00194000=00140000=
|
|
A MISSING END OF A PROCEDURE OR A MISPLACED 00195000=00141000=
|
|
DECLARATION. 00196000=00142000=
|
|
147 SWITCHGEN: MORE THAN 256 EXPRESSIONS IN A SWITCH 00197000=00143000=
|
|
DECLARATION. 00198000=00144000=
|
|
148 GETSPACE: MORE THAN 1023 PROGRAM REFERENCE TABLE CELLS 00199000=00145000=
|
|
ARE REQUIRED FOR THIS PROGRAM. 00200000=00146000=
|
|
149 GETSPACE: MORE THAN 255 STACK CELLS ARE REQUIRED FOR THIS00201000=00147000=
|
|
PROCEDURE. 00202000=00148000=
|
|
150 ACTUALPARAPART: CONSTANTS MAY NOT BE PASSED BY NAME TO 00203000=00149000=
|
|
STREAM PROCEDURES. 00204000=00150000=
|
|
151 FORSTMT: INDEX VARIABLE MAY NOT BE BOOLEAN 00205000=00151000=
|
|
152 FORSTMT: MISSING LEFT ARROW FOLLOWING INDEX VARIABLE. 00206000=00152000=
|
|
153 FORSTMT: MISSING UNTIL OR WHILE IN STEP ELEMENT. 00207000=00153000=
|
|
154 FORSTMT: MISSING DO IN FOR CLAUSE. 00208000=00154000=
|
|
155 IFEXP: MISSING ELSE 00209000=00155000=
|
|
156 LISTELEMENT: A DESIGNATIONAL EXPRESSION MAY NOT BE A LIST 00210000=00156000=
|
|
ELEMENT. 00211000=00157000=
|
|
157 LISTELEMENT: A ROW DESIGNATOR MAY NOT BE A LIST ELEMENT 00212000=00158000=
|
|
158 LISTELEMENT: MISSING RIGHT BRAKET IN GROUP OF ELEMENTS 00213000=00159000=
|
|
159 PROCSTMT: ILLEGAL USE OF PROCEDURE OR FUNCTION IDENTIFIER00214000
|
|
160 PURGE: DECLARED LABEL DOES NOT OCCUR. 00215000=00161000=
|
|
161 PURGE: DECLARED FORWARD PROCEDURE DOES NOT OCCUR. 00216000=00162000=
|
|
162 PURGE: DECLARED SWITCH FORWARD DOES NOT OCCUR. 00217000=00162500=
|
|
163 FORMATPHRASE: THE WIDTH OF A FIELD IS MORE THAN 63. 00218000=00163000=
|
|
164 UNKNOWNSTMT: MISSING COMMA IN ZIP OR WAIT STATEMENT. 00219000=00164000=
|
|
165 IMPFUN: MISSING COMMA IN DELAY PARAMETER LIST 00220000=00164100=
|
|
172 DEFINEDEC: TOO MANY PARAMETERS IN PARAMETRIC DEFINE 00221000=00164720=
|
|
DECLARATION. 00222000=00164725=
|
|
173 DEFINEDEC: RIGHT PARENTHESIS OR RIGHT BRACKET EXPECTED 00223000=00164730=
|
|
AFTER PARAMETERS IN PARAMETRIC DEFINE DECLARATION. 00224000=00164735=
|
|
174 FIXDEFINEINFO: INCORRECT NUMBER OF PARAMETERS IN 00225000=00164740=
|
|
PARAMETRIC DEFINE INVOCATION. 00226000=00164745=
|
|
175 FIXDEFINEINFO: LEFT BRACKET OR LEFT PARENTHESIS EXPECTED. 00227000=00164750=
|
|
185 IMPFUN: LAST PARAMETER MUST BE A SIMPLE OR SUBSCRIPTED 00228000=00164850=
|
|
VARIABLE, OR A TYPE PROCEDURE IDENTIFIER. 00229000=00164851=
|
|
199 E: INFO ARRAY HAS OVERFLOWED. 00230000=00164900=
|
|
200 EMIT: SEGMENT TOO LARGE ( > 4093SYLLABLES). 00231000=00165000=
|
|
201 SIMPLE VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT-MOST 00232000=00166000=
|
|
IN A LEFT PART LIST. 00233000=00167000=
|
|
202 SIMPLE VARIABLE: MISSING . OR := . 00234000=00168000=
|
|
203 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS IN A ROW 00235000=00169000=
|
|
DESIGNATOR. 00236000=00170000=
|
|
204 SUBSCRIPTED VARIABLE: MISSING ] IN A ROW DESIGNATOR. 00237000=00171000=
|
|
205 SUBSCRIPTED VARIABLE: A ROW DESIGNATOR APPEARS OUTSIDE OF 00238000=00172000=
|
|
AN ACTUAL PARAMETER LIST OR FILL STATEMENT. 00239000=00173000=
|
|
206 SUBSCRIPTED VARIABLE: MISSING ]. 00240000=00174000=
|
|
207 SUBSCRIPTED VARIABLE: MISSING [. 00241000=00175000=
|
|
208 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS. 00242000=00176000=
|
|
209 SUBSCRIPTED VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT- 00243000=00177000=
|
|
MOST IN A LEFT PART LIST. 00244000=00178000=
|
|
210 SUBSCRIPTED VARIABLE: MISSING , OR := . 00245000=00179000=
|
|
211 VARIABLE: PROCEDURE ID USED OUTSIDE OF SCOPE IN LEFT PART.00246000=00180000=
|
|
212 VARIABLE: SUB-ARRAY DESIGNATOR PERMITTED AS ACTUAL 00247000=00180100=
|
|
PARAMETER ONLY. 00248000=00180200=
|
|
250 STREAM STMT:ILLEGAL STREAM STATEMENT. 00249000=00181000=
|
|
251 ANY STREAM STMT PROCEDURE: MISSING :=. 00250000=00182000=
|
|
252 INDEX: MISSING + OR - . 00251000=00183000=
|
|
253 INDEX: MISSING NUMBER OR STREAM VARIABLE. 00252000=00184000=
|
|
254 SCANNER: STRING, OCTAL, OR HEX CONSTANT HAS FLAG BIT SET. 00253000=00185000=
|
|
255 DSS: MISSING STRING IN DS:= LIT STATEMENT. 00254000=00186000=
|
|
256 RELEASES: MISSING PARENTHESIS OR FILE IDENTIFIER IS NOT 00255000=00187000=
|
|
A FORMAL PARAMETER. 00256000=00188000=
|
|
257 GOTOS,LABELS,OR JUMPS: LABEL SPECIFIED IS NOT ON THE SAME 00257000=00189000=
|
|
NEST LEVEL AS A PRECEDING APPEARANCE OF THE 00258000=00190000=
|
|
LABEL. 00259000=00191000=
|
|
258 LABELS: MISSING :. 00260000=00192000=
|
|
259 LABELS: LABEL APPEARS MORE THAN ONCE. 00261000=00193000=
|
|
260 GOTOS: MISSING LABEL IN A GO TO OR JUMP OUT TO STATEMENT. 00262000=00194000=
|
|
261 JUMPS: MISSING OUT IN JUMP OUT STATEMENT. 00263000=00195000=
|
|
262 NESTS: MISSING PARENTHESIS. 00264000=00196000=
|
|
263 IFS:MISSING SC IN IF STATEMENT. 00265000=00197000=
|
|
264 IFS: MISSING RELATIONAL IN IF STATEMENT. 00266000=00198000=
|
|
265 IFS: MISSING ALPHA,DC OR STRING IN IF STATEMENT. 00267000=00199000=
|
|
266 IFS: MISSING THEN INIF STATEMENT. 00268000=00200000=
|
|
267 FREDFIX: THERE ARE GO TO STATEMENTS IN WHICH THE LABEL IS 00269000=00201000=
|
|
UNDEFINED. 00270000=00202000=
|
|
268 EMITC: A REPEAT INDEX >= 64 WAS SPECIFIED OR TOO MANY 00271000=00203000=
|
|
FORMAL PARAMETERS,LOCALS AND LABELS. 00272000=00204000=
|
|
269 TABLE: A CONSTANT IS SPECIFIED WHICH IS TOO LARGE 00273000=00205000=
|
|
OR TOO SMALL. 00274000=00206000=
|
|
270 IFS: RELATIONAL IN SC<RELATIONAL>ALPHA MUST BE "EQUAL". 00275000=00206100=
|
|
271 IFS: IMPROPER CONSTRUCT FOR <SOURCE WITH LITERAL>. 00276000=00206200=
|
|
281 DBLSTMT: MISSING (. 00277000=00207000=
|
|
282 DBLSTMT: TOO MANY OPERATORS. 00278000=00208000=
|
|
283 DBLSTMT: TOO MANY OPERANDS. 00279000=00209000=
|
|
284 DBLSTMT: MISSING , . 00280000=00210000=
|
|
285 DBLSTMT: TOO FEW OPERANDS. 00281000=00211000=
|
|
286 DBLSTMT: ILLEGAL PARAMETER . 00282000=00211100=
|
|
290 FILEATTRIBUTEHANDLER: MISSING . IN FILE ATTRIBUTE PART 00283000=00211510=
|
|
291 FILEATTRIBUTEHANDLER: MISSING OR UNDEFINED FILE ATTRIBUTE00284000=00211520=
|
|
292 FILEATTRIBUTEHANDLER: MISSING := IN FILE ATTR ASSIGN STMT00285000=00211530=
|
|
293 FILEATTRIBUTEHANDLER: FILE ATTRIBUTE IS NON ASSIGNABLE 00286000=00211540=
|
|
294 PRIMARY: FILE ATTRIBUTE IS NOT TYPE REAL 00287000=00211550=
|
|
295 FILEATTRIBUTEHANDLER: FILE ATTRIBUTE MUST BE LEFT MOST 00288000=00211551=
|
|
IN A LEFT PART LIST. 00289000=00211552=
|
|
300 FILLSTMT: THE IDENTIFIER FOLLOWING "FILL" IS NOT 00290000=00212000=
|
|
AN ARRAY IDENTIFIER. 00291000=00213000=
|
|
301 FILLSTMT: MISSING "WITH" IN FILL STATEMENT. 00292000=00214000=
|
|
302 FILLSTMT: IMPROPER FILL ELEMENT. 00293000=00215000=
|
|
303 FILLSTMT: NON-OCTAL CHARACTER IN OCTAL FILL. 00294000=00216000=
|
|
304 FILLSTMT: IMPROPER ARRAY ROW DESIGNATOR IN FILL. 00295000=00217000=
|
|
305 FILLSTMT: DATA IN FILL EXCEEDS 1023 WORDS. 00296000=00218000=
|
|
304 FILLSTMT: IMPROPER ROW DESIGNATOR. 00297000=00218100=
|
|
306 FILLSTMT: ODD NUMBER OF PARENTHESES IN FILL. 00298000=00218110=
|
|
307 WHIPOUT: FORMAT > 1023 WORDS. 00299000=00218112=
|
|
350 CHECKCOMMA: MISSING OR ILLEGAL PARAMETER DELIMITER IN 00300000=00218200=
|
|
SORT OR MERGE STATEMENT. 00301000=00218210=
|
|
351 OUTPROCHECK: ILLEGAL TYPE FOR SORT OR MERGE OUTPUT PROC. 00302000=00218220=
|
|
352 OUTPROCHECK: OUTPUT PROCEDURE IN SORT OR MERGE STMT DOES 00303000=00218230=
|
|
NOT HAVE EXACTLY TWO PARAMETERS. 00304000=00218240=
|
|
353 OUTPROCHECK: FIRST PAREMETER OF OUTPUT PROCEDURE MUST 00305000=00218250=
|
|
BE BOOLEAN. 00306000=00218260=
|
|
354 OUTPROCHECK: SECOND PARAM OF OUTPUT PROCEDURE MUST BE 00307000=00218270=
|
|
ONE-DIM ARRAY. 00308000=00218280=
|
|
355 SORTSTMT: MISSING (. 00309000=00218290=
|
|
356 HVCHECK: ILLEGAL TYPE FOR SORT OR MERGE HIGHVALUE PRO00310000=00218300=
|
|
357 HVCHECK: HIVALUE PROCEDURE DOES NOT HAVE EXACTLY ONE 00311000=00218310=
|
|
PARAMETER. 00312000=00218320=
|
|
358 HVCHECK: HIVALUE PROCEDURE PARAM NOT ONE-DIM ARRAY. 00313000=00218330=
|
|
359 EQLESCHECK: SORT OR MERGE COMPARE PROCEDURE NOT BOOLEAN.00314000=00218340=
|
|
360 EQLESCHECK: COMPARE PROCEDURE DOES NOT HAVE EXACTLY 00315000=00218350=
|
|
TWO PARAMETERS. 00316000=00218360=
|
|
361 EQLESCHECK: COMPARE PROCEDURE FIRST PARAM NOT 1-D ARRAY.00317000=00218370=
|
|
362 EQLESCHECK: COMPARE PROCEDURE SECOND PARAM NOT 1-D ARRAY00318000=00218380=
|
|
363 INPROCHECK: SORT STMT INPUT PROCEDURE NOT BOOLEAN. 00319000=00218390=
|
|
364 INPROCHECK: INPUT PROCEDURE DOES NOT HAVE EXACTLY ONE 00320000=00218400=
|
|
PARAMETER. 00321000=00218410=
|
|
365 INPROCHECK: INPUT PROCEDURE PARAMETER NOT ONE-D ARRAY. 00322000=00218420=
|
|
366 SORTSTMT: MISSING ). 00323000=00218430=
|
|
367 MERGESTMT: MISSING (. 00324000=00218440=
|
|
368 MERGESTMT: MORE THAN 7 OR LESS THAN 2 FILES TO MERGE. 00325000=00218450=
|
|
369 MERGESTMT: MISSING ). 00326000=00218460=
|
|
381 CMPLXSTMT: MISSING (. 00327000=00218500=
|
|
382 CMPLXSTMT: TOO MANY OPERATORS. 00328000=00218505=
|
|
383 CMPLXSTMT: TOO MANY OPERANDS. 00329000=00218510=
|
|
384 CMPLXSTMT: MISSING , . 00330000=00218515=
|
|
385 CMPLXSTMT: TOO FEW OPERANDS. 00331000=00218520=
|
|
386 CMPLXSTMT: ILLEGAL PARAMETER. 00332000=00218525=
|
|
400 MERRIMAC:MISSING FILE ID IN MONITOR DEC. 00333000=00219000=
|
|
401 MERRIMAC:MISSING LEFT PARENTHESIS IN MONITOR DEC. 00334000=00220000=
|
|
402 MERRIMAC:IMPROPER SUBSCRIPT FOR MONITOR LIST ELEMENT. 00335000=00221000=
|
|
403 MERRIMAC:IMPROPER SUBSCRIPT EXPRESSION DELIMITER IN 00336000=00222000=
|
|
MONITOR LIST ELEMENT. 00337000=00223000=
|
|
404 MERRIMAC:IMPROPER NUMBER OF SUBSCRIPTS IN MONITOR LIST 00338000=00224000=
|
|
ELEMENT. 00339000=00225000=
|
|
405 MERRIMAC:LABEL OR SWITCH MONITORED AT IMPROPER LAVEL. 00340000=00226000=
|
|
406 MERRIMAC:IMPROPER MONITOR LIST ELEMENT. 00341000=00227000=
|
|
407 MERRIMAC:MISSING RIGHT PARENTHESIS IN MONITOR DECLARATION.00342000=00228000=
|
|
408 MERRIMAC:IMPROPER MONITOR DECLARATION DELIMITER. 00343000=00229000=
|
|
409 DMUP:MISSING FILE IDENTIFIER IN DUMP DECLARATION. 00344000=00230000=
|
|
410 DMUP:MISSING LEFT PARENTHESIS IN DUMP DECLARATION. 00345000=00231000=
|
|
411 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF00346000=00232000=
|
|
SUBSCRIPTS. 00347000=00233000=
|
|
412 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF00348000=00234000=
|
|
SUBSCRIPTS. 00349000=00235000=
|
|
413 DMUP:IMPROPER ARRAY DUMP LIST ELEMENT. 00350000=00236000=
|
|
414 DMUP:ILLEGAL DUMP LIST ELEMENT. 00351000=00237000=
|
|
415 DMUP:MORE THAN 100 LABELS APPEAR AS DUMP LIST ELEMENTS 00352000=00238000=
|
|
IN ONE DUMP DECLARATION. 00353000=00239000=
|
|
416 DMUP:ILLEGAL DUMP LIST ELEMENT DELIMITER. 00354000=00240000=
|
|
417 DMUP:MISSING OR NON-LOCAL LABEL IN DUMP DECLARATION. 00355000=00241000=
|
|
418 DMUP:MISSING COLON IN DUMP DECLARATION. 00356000=00242000=
|
|
419 DMUP:IMPROPER DUMP DECLARATION DELIMITER. 00357000=00243000=
|
|
420 READSTMT:MISSING LEFT PARENTHESIS IN READ STATEMENT. 00358000=00244000=
|
|
421 READSTMT:MISSING LEFT PARENTHESIS IN READ REVERSE 00359000=00245000=
|
|
STATEMENT. 00360000=00246000=
|
|
422 READSTMT:MISSING FILE IN READ STATEMENT. 00361000=00247000=
|
|
00362000=00248000=
|
|
424 READSTMT:IMPROPER FILE DELIMITER IN READ STATEMENT 00363000=00249000=
|
|
425 READSTMT:IMPROPER FORMAT DELIMITER IN READ STATEMENT. 00364000=00250000=
|
|
426 READSTMT:IMPROPER DELIMITER FOR SECOND PARAMETER IN READ 00365000=00251000=
|
|
STATEMENT. 00366000=00252000=
|
|
427 READSTMT:IMPROPER ROW DESIGNATOR IN READ STATEMENT. 00367000=00253000=
|
|
428 READSTMT:IMPROPER ROW DESIGNATOR DELIMITER IN READ 00368000=00254000=
|
|
STATEMENT. 00369000=00255000=
|
|
429 READSTMT:MISSING ROW DESIGNATOR IN READ STATEMENT. 00370000=00256000=
|
|
430 READSTMT:IMPROPER DELIMITER PRECEEDING THE LIST IN A READ 00371000=00257000=
|
|
STATEMENT. 00372000=00258000=
|
|
00373000=00259000=
|
|
00374000=00260000=
|
|
00375000=00261000=
|
|
00376000=00262000=
|
|
433 HANDLETHETAILENDOFAREADORSPACESTATEMENT:MISSING RIGHT 00377000=00263000=
|
|
BRACKET IN READ OR SPACE STATEMENT. 00378000=00264000=
|
|
434 SPACESTMT:MISSING LEFT PARENTHESIS IN SPACE STATEMENT. 00379000=00265000=
|
|
435 SPACESTMT:IMPROPER FILE IDENTIFIER IN SPACE STATEMENT. 00380000=00266000=
|
|
436 SPACESTMT:MISSING COMMA IN SPACE STATEMENT. 00381000=00267000=
|
|
437 SPACESTMT:MISSING RIGHT PARENTHESIS IN SPACE STATEMENT. 00382000=00268000=
|
|
438 WRITESTMT:MISSING LEFT PARENTHESIS IN A WRITE STATEMENT. 00383000=00269000=
|
|
439 WRITESTMT:IMPROPER FILE IDENTIFIER IN A WRITE STATEMENT. 00384000=00270000=
|
|
440 WRITESTMT:IMPROPER DELIMITER FOR FIRST PARAMETER IN A 00385000=00271000=
|
|
WRITE STATEMENT. 00386000=00272000=
|
|
441 WRITESTMT:MISSING RIGHT BRACKET IN CARRIAGE CONTROL PART 00387000=00273000=
|
|
OF A WRITE STATEMENT. 00388000=00274000=
|
|
442 WRITESTMT:ILLEGAL CARRIAGE CONTROL DELIMITER IN A WRITE 00389000=00275000=
|
|
STATEMENT. 00390000=00276000=
|
|
443 WRITESTMT:IMPROPER SECOND PARAMETER DELIMITER IN WRITE 00391000=00277000=
|
|
STATEMENT. 00392000=00278000=
|
|
444 WRITESTMT:IMPROPER ROW DESIGNATOR IN A WRITE STATEMENT. 00393000=00279000=
|
|
445 WRITESTMT:MISSING RIGHT PARENTHESIS AFTER A ROW DESIGNATOR00394000=00280000=
|
|
IN A WRITE STATEMENT. 00395000=00281000=
|
|
446 WRITESTMT:MISSING ROW DESIGNATOR IN A WRITE STATEMENT. 00396000=00282000=
|
|
447 WRITESTMT:IMPROPER DELIMITER PRECEEDING A LIST IN A WRITE 00397000=00283000=
|
|
STATEMENT. 00398000=00284000=
|
|
448 WRITESTMT:IMPROPER LIST DELIMITER IN A WRITE STATEMENT. 00399000=00285000=
|
|
449 READSTMT:IMPROPER LIST DELIMITER IN A READ STATEMENT. 00400000=00286000=
|
|
450 LOCKSTMT:MISSING LEFT PARENTHESIS IN A LOCK STATEMENT. 00401000=00287000=
|
|
451 LOCKSTMT:IMPROPER FILE PART IN A LOCK STATEMENT. 00402000=00288000=
|
|
452 LOCKSTMT:MISSING COMMA IN A LOCK STATEMENT. 00403000=00289000=
|
|
453 LOCKSTMT:IMPROPER UNIT DISPOSITION PART IN A LOCK 00404000=00290000=
|
|
STATEMENT. 00405000=00291000=
|
|
454 LOCKSTMT:MISSING RIGHT PARENTHESIS IN A LOCK STATEMENT. 00406000=00292000=
|
|
455 CLOSESTMT:MISSING LEFT PARENTHESIS IN A CLOSE STATEMENT. 00407000=00293000=
|
|
456 CLOSESTMT:IMPROPER FILE PART IN A CLOSE STATEMENT. 00408000=00294000=
|
|
457 CLOSESTMT:MISSING COMMA IN A CLOSE STATEMENT. 00409000=00295000=
|
|
458 CLOSESTMT:IMPROPER UNIT DISPOSITION PART IN A CLOSE 00410000=00296000=
|
|
STATEMENT. 00411000=00297000=
|
|
459 CLOSESTMT:MISSING RIGHT PARENTHESIS IN A CLOSE STATEMENT. 00412000=00298000=
|
|
460 RWNDSTMT:MISSING LEFT PARENTHESIS IN A REWIND STATEMENT. 00413000=00299000=
|
|
461 RWNDSTMT:IMPROPER FILE PART IN A REWIND STATEMENT. 00414000=00300000=
|
|
462 RWNDSTMT:MISSING RIGHT PARENTHESIS IN A REWIND STATEMENT. 00415000=00301000=
|
|
463 BLOCK:A MONITOR DECLARATION APPEARS IN THE SPECIFICATION 00416000=00302000=
|
|
PART OF A PROCEDURE. 00417000=00303000=
|
|
464 BLOCK:A DUMP DECLARATION APPEARS IN THE SPECIFICATION PART00418000=00304000=
|
|
OF A PROCEDURE. 00419000=00305000=
|
|
465 DMUP:DUMP INDICATOR MUST BE UNSIGNED INTEGER OR 00420000=00305003=
|
|
SIMPLE VARIABLE 00421000=00305004=
|
|
500 SEARCHLIB: ILLEGAL LIBRARY IDENTIFIER. 00422000=00305010=
|
|
501 SEARCHLIB: LIBRARY IDENTIFIER NOT CONTAINED IN DIRECTORY. 00423000=00305020=
|
|
502 SEARCHLIB: ILLEGAL LIBRARY START POINT. 00424000=00305030=
|
|
503 SEARCHLIB: SEPARATOR REQUIRED BETWEEN START POINT AND LENGTH. 00425000=00305040=
|
|
504 SEARCHLIB: ILLEGAL LIBRARY LENGTH. 00426000=00305050=
|
|
505 SEARCHLIB: MISSING BRACKET. 00427000=00305060=
|
|
00428000=00305070=
|
|
507 SEARCHLIB: TAPE POSITIONING ERROR. 00429000=00305080=
|
|
509 IODEC: NON-LITERAL FILE VALUE NOT GLOBAL TO FILE DECL. 00430000=00305100=
|
|
520 TABLE: STRING LONGER THAN ONE WORD (48 BITS). 00431000=00306200=
|
|
521 TABLE: STRING CONTAINS A NON-PERMISSIBLE CHARACTER. 00432000=00306300=
|
|
600 DOLLARCARD: NUMBER EXPECTED. 00433000=00400000=
|
|
601 DOLLARCARD: OPTION IDENTIFIER EXPECTED. 00434000=00401000=
|
|
602 DOLLARCARD: TOO MANY USER-DEFINED OPTIONS. 00435000=00403000=
|
|
603 DOLLARCARD: UNRECOGNIZED WORD OR CHARACTER. 00436000=00404000=
|
|
604 DOLLARCARD: MISMATCHED PARENTHESES. 00437000=00405000=
|
|
610 READACARD: SEQUENCE ERROR. 00438000=00410000=
|
|
611 READACARD: ERROR LIMIT HAS BEEN EXCEEDED. 00439000=00411000=
|
|
612 INCLUDECARD: TOOMANY NESTED INCLUDES. 00440000=00412000=
|
|
613 INCLUDECARD: MISSING FILE NAME ON INCLUDE CARD. 00441000=00413000=
|
|
614 INCLUDECARD: ENDING SEQUENCE NUMBER MISSING. 00442000=00414000=
|
|
615 INCLUDECARD: COPY MISSING ON INCLUDE CARD. 00443000=00415000=
|
|
616 INCLUDECARD: MORE THAN ONE FILE NAME ON INCLUDE CARD 00444000=00416000=
|
|
617 INCLUDECARD: + COPY CAN NOT BE USED UNLESS $ IS IN COLUMN ONE 00445000=00417000=
|
|
618 BLOCK: AUXMEM APPEARS IMMEDIATELY BEFORE IDENTIFIER (NO TYPE) 00446000=00418000=
|
|
; 00447000=00490000=
|
|
$POP OMIT 00448000=00499999=
|
|
BEGIN 00449000=00500000=
|
|
COMMENT OUTERMOST BLOCK; 00450000=00500000=
|
|
INTEGER 00505000=00501000=
|
|
ERRORCOUNT; COMMENT NUMBER OF ERROR MSGS. MCP WILL TYPE 00510000
|
|
SYNTX ERR AT EOJ IF THIS IS NON-ZERO. MUST BE @R+25; 00520000=00502000=
|
|
INTEGER 00525000=00503000=
|
|
SAVETIME; COMMENT SAVE-FACTOR FOR CODE FILE, GIVEN BY MCP. 00530000
|
|
IF COMPILE & GO =0, FOR SYNTAX, =-1. MUST BE AT R+26;00540000=00504000=
|
|
INTEGER 00545000=00504100=
|
|
CARDNUMBER; % SEQ # OF CARD BEING PROCESSED. 00550000=00504100=
|
|
INTEGER 00555000=00504150=
|
|
CARDCOUNT; % NUMBER OF CARDS PROCESSED. 00560000=00504150=
|
|
INTEGER 00565000=00504200=
|
|
LASTADDRESS; 00570000=00504200=
|
|
ARRAY 00575000=00504300=
|
|
ENIL[0:7, 0:127]; 00580000=00504300=
|
|
INTEGER 00585000=00504400=
|
|
ENILPTR; 00590000=00504400=
|
|
DEFINE 00595000=00504500=
|
|
ENILSPOT = ENIL[ENILPTR.[9:3], ENILPTR.[6:7]] #; 00600000=00504500=
|
|
ARRAY 00605000=00504600=
|
|
LDICT[0:7, 0:127]; 00610000=00504600=
|
|
BOOLEAN 00615000=00504700=
|
|
BUILDLINE; 00620000=00504700=
|
|
BOOLEAN 00625000=00504801=
|
|
REL; 00630000=00504801=
|
|
COMMENT RR1-RR11 ARE USED BY SOME PROCEDURES IN LIEU OF LOCALS. 00635000=00505000=
|
|
TO SAVE SOME STACK SPACE; 00640000=00506000=
|
|
REAL 00645000=00507000=
|
|
RR1, 00650000=00507000=
|
|
RR2, 00655000=00507000=
|
|
RR3, 00660000=00507000=
|
|
RR4, 00665000=00507000=
|
|
RR5, 00670000=00507000=
|
|
RR6, 00675000=00507000=
|
|
RR7, 00680000=00507000=
|
|
RR8, 00685000=00507000=
|
|
RR9, 00690000=00507000=
|
|
RR10, 00695000=00507000=
|
|
RR11; 00700000=00507000=
|
|
00710000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00710100
|
|
%% STREAM PROCEDURE EMULATION & BIC TRANSLATION MODULE %%00710200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00710300
|
|
00710400
|
|
DEFINE 00710500
|
|
WOFF = [14:15] #, % STREAM INDEX WORD OFFSET 00710600
|
|
COFF = [17:3] #, % STREAM INDEX CHAR OFFSET 00710700
|
|
STREAMLOCALS = ARRAY REFERENCE MBASE, SBASE[0] #; 00710800
|
|
00715000
|
|
REAL 00715100
|
|
AREG, % STREAM SOURCE WORD BUFFER 00715200
|
|
YREG, % STREAM SOURCE CHAR BUFFER 00715300
|
|
MREG, % STREAM SOURCE WORD INDEX 00715400
|
|
GREG, % STREAM SOURCE CHAR INDEX 00715500
|
|
HREG, % STREAM SOURCE BIT INDEX 00715600
|
|
BREG, % STREAM DEST WORD 00715700
|
|
ZREG, % STREAM DEST CHAR BUFFER 00715800
|
|
NREG, % STREAM DEST ALIGNMENT INDEX 00715900
|
|
SREG, % STREAM DEST WORD INDEX 00716000
|
|
KREG, % STREAM DEST CHAR INDEX 00716100
|
|
VREG, % STREAM DEST BIT INDEX 00716200
|
|
TALLY; % STREAM TALLY REGISTER 00716300
|
|
00717000
|
|
BOOLEAN 00717100
|
|
TFFF; % TRUE/FALSE FLIP-FLOP 00717200
|
|
00718000
|
|
ARRAY 00718100
|
|
STREAMTEMPS[0:15], % STREAM TEMP SOURCE 00718200
|
|
STREAMTEMPD[0:15], % STREAM TEMP DESTINATION 00718300
|
|
EBCDICBUFF[0:21]; % EBCDIC I/O BUFFER 00718400
|
|
00730000
|
|
VALUE ARRAY 00730100
|
|
BICCOLLATE ( % INDEX BY INTERNAL CODE TO GET COLLATION VALUE 00730200
|
|
3"65", % 00 0 DIGIT-ZERO 00730210
|
|
3"66", % 01 1 00730220
|
|
3"67", % 02 2 00730230
|
|
3"70", % 03 3 00730240
|
|
3"71", % 04 4 00730250
|
|
3"72", % 05 5 00730260
|
|
3"73", % 06 6 00730270
|
|
3"74", % 07 7 00730280
|
|
3"75", % 10 8 00730290
|
|
3"76", % 11 9 00730300
|
|
3"23", % 12 # 00730310
|
|
3"24", % 13 @ 00730320
|
|
3"77", % 14 ? 00730330
|
|
3"25", % 15 : 00730340
|
|
3"26", % 16 > 00730350
|
|
3"27", % 17 } GEQ 00730360
|
|
3"30", % 20 + 00730370
|
|
3"31", % 21 A 00730380
|
|
3"32", % 22 B 00730390
|
|
3"33", % 23 C 00730400
|
|
3"34", % 24 D 00730410
|
|
3"35", % 25 E 00730420
|
|
3"36", % 26 F 00730430
|
|
3"37", % 27 G 00730440
|
|
3"40", % 30 H 00730450
|
|
3"41", % 31 I 00730460
|
|
3"01", % 32 . 00730470
|
|
3"02", % 33 [ 00730480
|
|
3"06", % 34 & 00730490
|
|
3"03", % 35 ( 00730500
|
|
3"04", % 36 < 00730510
|
|
3"05", % 37 ~ LEFT-ARROW 00730520
|
|
3"42", % 40 | TIMES 00730530
|
|
3"43", % 41 J 00730540
|
|
3"44", % 42 K 00730550
|
|
3"45", % 43 L 00730560
|
|
3"46", % 44 M 00730570
|
|
3"47", % 45 N 00730580
|
|
3"50", % 46 O LETTER-O 00730590
|
|
3"51", % 47 P 00730600
|
|
3"52", % 50 Q 00730610
|
|
3"53", % 51 R 00730620
|
|
3"07", % 52 $ 00730630
|
|
3"10", % 53 * 00730640
|
|
3"14", % 54 - 00730650
|
|
3"11", % 55 ) 00730660
|
|
3"12", % 56 ; 00730670
|
|
3"13", % 57 { LEQ 00730680
|
|
3"00", % 60 BLANK 00730690
|
|
3"15", % 61 / 00730700
|
|
3"55", % 62 S 00730710
|
|
3"56", % 63 T 00730720
|
|
3"57", % 64 U 00730730
|
|
3"60", % 65 V 00730740
|
|
3"61", % 66 W 00730750
|
|
3"62", % 67 X 00730760
|
|
3"63", % 70 Y 00730770
|
|
3"64", % 71 Z 00730780
|
|
3"16", % 72 , 00730790
|
|
3"17", % 73 % 00730800
|
|
3"54", % 74 ! NEQ 00730810
|
|
3"20", % 75 = 00730820
|
|
3"21", % 76 ] 00730830
|
|
3"22"); % 77 " 00730840
|
|
00740000
|
|
TRUTHSET 00740100
|
|
BICALPHA( % STREAM PROCEDURE "SC IN ALPHA" CHARACTER SET 00740200
|
|
48"11" OR % 21 A 00740210
|
|
48"12" OR % 22 B 00740220
|
|
48"13" OR % 23 C 00740230
|
|
48"14" OR % 24 D 00740240
|
|
48"15" OR % 25 E 00740250
|
|
48"16" OR % 26 F 00740260
|
|
48"17" OR % 27 G 00740270
|
|
48"18" OR % 30 H 00740280
|
|
48"19" OR % 31 I 00740290
|
|
48"21" OR % 41 J 00740300
|
|
48"22" OR % 42 K 00740310
|
|
48"23" OR % 43 L 00740320
|
|
48"24" OR % 44 M 00740330
|
|
48"25" OR % 45 N 00740340
|
|
48"26" OR % 46 O LETTER-O 00740350
|
|
48"27" OR % 47 P 00740360
|
|
48"28" OR % 50 Q 00740370
|
|
48"29" OR % 51 R 00740380
|
|
48"32" OR % 62 S 00740390
|
|
48"33" OR % 63 T 00740400
|
|
48"34" OR % 64 U 00740410
|
|
48"35" OR % 65 V 00740420
|
|
48"36" OR % 66 W 00740430
|
|
48"37" OR % 67 X 00740440
|
|
48"38" OR % 70 Y 00740450
|
|
48"39" OR % 71 Z 00740460
|
|
48"00" OR % 00 0 DIGIT-ZERO 00740470
|
|
48"01" OR % 01 1 00740480
|
|
48"02" OR % 02 2 00740490
|
|
48"03" OR % 03 3 00740500
|
|
48"04" OR % 04 4 00740510
|
|
48"05" OR % 05 5 00740520
|
|
48"06" OR % 06 6 00740530
|
|
48"07" OR % 07 7 00740540
|
|
48"08" OR % 10 8 00740550
|
|
48"09" OR % 11 9 00740560
|
|
48"0C"); % 14 ? 00740570
|
|
00745000
|
|
TRANSLATETABLE 00745100
|
|
BICTOEBCDIC ( % 00745200
|
|
EBCDIC TO 48"FF", 00745210
|
|
48"00" TO "0", % DIGIT-ZERO 00745220
|
|
48"01" TO "1", 00745230
|
|
48"02" TO "2", 00745240
|
|
48"03" TO "3", 00745250
|
|
48"04" TO "4", 00745260
|
|
48"05" TO "5", 00745270
|
|
48"06" TO "6", 00745280
|
|
48"07" TO "7", 00745290
|
|
48"08" TO "8", 00745300
|
|
48"09" TO "9", 00745310
|
|
48"0A" TO "#", 00745320
|
|
48"0B" TO "@", 00745330
|
|
48"0C" TO "?", 00745340
|
|
48"0D" TO ":", 00745350
|
|
48"0E" TO ">", 00745360
|
|
48"0F" TO "}", % GEQ 00745370
|
|
48"10" TO "+", 00745380
|
|
48"11" TO "A", 00745390
|
|
48"12" TO "B", 00745400
|
|
48"13" TO "C", 00745410
|
|
48"14" TO "D", 00745420
|
|
48"15" TO "E", 00745430
|
|
48"16" TO "F", 00745440
|
|
48"17" TO "G", 00745450
|
|
48"18" TO "H", 00745460
|
|
48"19" TO "I", 00745470
|
|
48"1A" TO ".", 00745480
|
|
48"1B" TO "[", 00745490
|
|
48"1C" TO "&", 00745500
|
|
48"1D" TO "(", 00745510
|
|
48"1E" TO "<", 00745520
|
|
48"1F" TO "~", % LEFT-ARROW 00745530
|
|
48"20" TO "|", % TIMES 00745540
|
|
48"21" TO "J", 00745550
|
|
48"22" TO "K", 00745560
|
|
48"23" TO "L", 00745570
|
|
48"24" TO "M", 00745580
|
|
48"25" TO "N", 00745590
|
|
48"26" TO "O", % LETTER-O 00745600
|
|
48"27" TO "P", 00745610
|
|
48"28" TO "Q", 00745620
|
|
48"29" TO "R", 00745630
|
|
48"2A" TO "$", 00745640
|
|
48"2B" TO "*", 00745650
|
|
48"2C" TO "-", 00745660
|
|
48"2D" TO ")", 00745670
|
|
48"2E" TO ";", 00745680
|
|
48"2F" TO "{", % LEQ 00745690
|
|
48"30" TO " ", % BLANK 00745700
|
|
48"31" TO "/", 00745710
|
|
48"32" TO "S", 00745720
|
|
48"33" TO "T", 00745730
|
|
48"34" TO "U", 00745740
|
|
48"35" TO "V", 00745750
|
|
48"36" TO "W", 00745760
|
|
48"37" TO "X", 00745770
|
|
48"38" TO "Y", 00745780
|
|
48"39" TO "Z", 00745790
|
|
48"3A" TO ",", 00745800
|
|
48"3B" TO "%", 00745810
|
|
48"3C" TO "!", % NEQ 00745820
|
|
48"3D" TO "=", 00745830
|
|
48"3E" TO "]", 00745840
|
|
48"3F" TO """), % QUOTE 00745850
|
|
EBCDICTOBIC ( 00746000
|
|
EBCDIC TO 48"0C", % 6"?" 00746010
|
|
"0" TO 48"00", % DIGIT-ZERO 00746020
|
|
"1" TO 48"01", 00746030
|
|
"2" TO 48"02", 00746040
|
|
"3" TO 48"03", 00746050
|
|
"4" TO 48"04", 00746060
|
|
"5" TO 48"05", 00746070
|
|
"6" TO 48"06", 00746080
|
|
"7" TO 48"07", 00746090
|
|
"8" TO 48"08", 00746100
|
|
"9" TO 48"09", 00746110
|
|
"#" TO 48"0A", 00746120
|
|
"@" TO 48"0B", 00746130
|
|
"?" TO 48"0C", 00746140
|
|
":" TO 48"0D", 00746150
|
|
">" TO 48"0E", 00746160
|
|
"}" TO 48"0F", % GEQ 00746170
|
|
"+" TO 48"10", 00746180
|
|
"A" TO 48"11", 00746190
|
|
"B" TO 48"12", 00746200
|
|
"C" TO 48"13", 00746210
|
|
"D" TO 48"14", 00746220
|
|
"E" TO 48"15", 00746230
|
|
"F" TO 48"16", 00746240
|
|
"G" TO 48"17", 00746250
|
|
"H" TO 48"18", 00746260
|
|
"I" TO 48"19", 00746270
|
|
"." TO 48"1A", 00746280
|
|
"[" TO 48"1B", 00746290
|
|
"&" TO 48"1C", 00746300
|
|
"(" TO 48"1D", 00746310
|
|
"<" TO 48"1E", 00746320
|
|
"~" TO 48"1F", % LEFT-ARROW 00746330
|
|
"|" TO 48"20", % TIMES 00746340
|
|
"J" TO 48"21", 00746350
|
|
"K" TO 48"22", 00746360
|
|
"L" TO 48"23", 00746370
|
|
"M" TO 48"24", 00746380
|
|
"N" TO 48"25", 00746390
|
|
"O" TO 48"26", % LETTER-O 00746400
|
|
"P" TO 48"27", 00746410
|
|
"Q" TO 48"28", 00746420
|
|
"R" TO 48"29", 00746430
|
|
"$" TO 48"2A", 00746440
|
|
"*" TO 48"2B", 00746450
|
|
"-" TO 48"2C", 00746460
|
|
")" TO 48"2D", 00746470
|
|
";" TO 48"2E", 00746480
|
|
"{" TO 48"2F", % LEQ 00746490
|
|
" " TO 48"30", % BLANK 00746500
|
|
"/" TO 48"31", 00746510
|
|
"S" TO 48"32", 00746520
|
|
"T" TO 48"33", 00746530
|
|
"U" TO 48"34", 00746540
|
|
"V" TO 48"35", 00746550
|
|
"W" TO 48"36", 00746560
|
|
"X" TO 48"37", 00746570
|
|
"Y" TO 48"38", 00746580
|
|
"Z" TO 48"39", 00746590
|
|
"," TO 48"3A", 00746600
|
|
"%" TO 48"3B", 00746610
|
|
"!" TO 48"3C", % NEQ 00746620
|
|
"=" TO 48"3D", 00746630
|
|
"]" TO 48"3E", 00746640
|
|
""" TO 48"3F"); % QUOTE 00746650
|
|
00750000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00750100
|
|
DEFINE STREAMSETSI(A, X) = 00750200
|
|
BEGIN COMMENT 00750300
|
|
SETS THE SOURCE INDEX REGISTERS TO AN ARRAY. EMULATES RSA. 00750400
|
|
; 00750500
|
|
MBASE:= A; 00750600
|
|
MREG:= (X).WOFF; 00750700
|
|
GREG:= (X).COFF; 00750800
|
|
HREG:= 0; 00750900
|
|
END STREAMSETSI #; 00751000
|
|
00751100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00751200
|
|
DEFINE STREAMSETLOCSI(WD) = 00751300
|
|
BEGIN COMMENT 00751400
|
|
SETS THE SOURCE INDEX REGISTERS TO A SCALAR, WHICH IS STORED 00751500
|
|
AND OPERATED ON IN STREAMTEMPS[*]. EMULATES RSA. 00751600
|
|
; 00751700
|
|
STREAMTEMPS[0]:= (WD); 00751800
|
|
MBASE:= STREAMTEMPS; 00751900
|
|
MREG:= GREG:= HREG:= 0; 00752000
|
|
END STREAMSETLOCSI #; 00752100
|
|
00752200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00752300
|
|
DEFINE STREAMGETSI = 00752400
|
|
COMMENT 00752500
|
|
STREAMGETSI CONSTRUCTS A BINARY WORD FROM THE SOURCE INDEX 00752600
|
|
REGISTERS. EMULATES SSA (SORT OF). 00752700
|
|
; 00752800
|
|
(0 & (MREG)WOFF & (GREG)COFF) #; 00752900
|
|
00753000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00753100
|
|
DEFINE STREAMGETSC = 00753200
|
|
COMMENT 00753300
|
|
STREAMGETSC RETURNS THE CURRENT SOURCE CHARACTER. MOSTLY USED 00753400
|
|
INTERNAL TO THE STREAM EMULATION PROCEDURES. 00753500
|
|
; 00753600
|
|
(MBASE[MREG].[47-GREG*6:6]) #; 00753700
|
|
00753800
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00753900
|
|
DEFINE STREAMTESTSB = 00754000
|
|
COMMENT 00754100
|
|
TESTS THE BIT AT THE CURRENT SOURCE INDEX AND RETURNS TRUE 00754200
|
|
IF IT IS SET. DOES NOT ADVANCE THE SOURCE INDEX. EMULATES BIT. 00754300
|
|
; 00754400
|
|
(TFFF:= BOOLEAN(MBASE[MREG].[47-GREG*6-HREG:1])) #; 00754500
|
|
00754600
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00754700
|
|
DEFINE STREAMADJUSTSICHAR = 00754800
|
|
BEGIN COMMENT 00754900
|
|
ADJUSTS THE SOURCE INDEX FORWARD TO THE NEXT CHARACTER BOUNDARY, 00755000
|
|
IF NECESSARY. USED INTERALLY BY THE EMULATION PROCEDURES. 00755100
|
|
; 00755200
|
|
IF HREG > 0 THEN 00755300
|
|
BEGIN 00755400
|
|
HREG:= 0; 00755500
|
|
IF GREG < 7 THEN 00755600
|
|
GREG:= *+1 00755700
|
|
ELSE 00755800
|
|
BEGIN 00755900
|
|
GREG:= 0; 00756000
|
|
MREG:= *+1; 00756100
|
|
END; 00756200
|
|
END; 00756300
|
|
END STREAMADJUSTSICHAR #; 00756400
|
|
00756500
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00756600
|
|
DEFINE STREAMADJUSTSIWORD = 00756700
|
|
BEGIN COMMENT 00756800
|
|
ADJUSTS THE SOURCE INDEX FORWARD TO THE NEXT WORD BOUNDARY, 00756900
|
|
IF NECESSARY. USED INTERNALLY BY THE EMULATION PROCEDURES. 00757000
|
|
; 00757100
|
|
IF GREG > 0 OR HREG > 0 THEN 00757200
|
|
BEGIN 00757300
|
|
GREG:= HREG:= 0; 00757400
|
|
MREG:= *+1; 00757500
|
|
END; 00757600
|
|
END STREAMADJUSTSIWORD #; 00757700
|
|
00760000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00760100
|
|
DEFINE STREAMSETDI(A, X) = 00760200
|
|
BEGIN COMMENT 00760300
|
|
SETS THE DESTINATION INDEX REGISTERS TO AN ARRAY. EMULATES RDA. 00760400
|
|
; 00760500
|
|
SBASE:= A; 00760600
|
|
SREG:= (X).WOFF; 00760700
|
|
KREG:= (X).COFF; 00760800
|
|
VREG:= 0; 00760900
|
|
END STREAMSETDI #; 00761000
|
|
00761100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00761200
|
|
DEFINE STREAMSETLOCDI(WD) = 00761300
|
|
BEGIN COMMENT 00761400
|
|
SETS THE DESTINATION INDEX REGISTERS TO A SCALAR, WHICH IS STORED 00761500
|
|
AND OPERATED ON IN STREAMTEMPD[*]. EMULATES RDA. 00761600
|
|
; 00761700
|
|
STREAMTEMPD[0]:= (WD); 00761800
|
|
SBASE:= STREAMTEMPD; 00761900
|
|
SREG:= KREG:= VREG:= 0; 00762000
|
|
END STREAMSETLOCDI #; 00762100
|
|
00762200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00762300
|
|
DEFINE STREAMGETDI = 00762400
|
|
COMMENT 00762500
|
|
STREAMGETSI CONSTRUCTS A BINARY WORD FROM THE DESTINATION INDEX 00762600
|
|
REGISTERS. EMULATES SDA (SORT OF). 00762700
|
|
; 00762800
|
|
(0 & (SREG)WOFF & (KREG)COFF) #; 00762900
|
|
00763000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00763100
|
|
DEFINE STREAMGETDC = 00763200
|
|
COMMENT 00763300
|
|
STREAMGETSC RETURNS THE CURRENT DESTINATION CHARACTER. MOSTLY 00763400
|
|
USED INTERNAL TO THE STREAM EMULATION PROCEDURES. 00763500
|
|
; 00763600
|
|
(SBASE[SREG].[47-KREG*6:6]) #; 00763700
|
|
00763800
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00763900
|
|
DEFINE STREAMADJUSTDICHAR = 00764000
|
|
BEGIN COMMENT 00764100
|
|
ADJUSTS THE DESTINATION INDEX FORWARD TO THE NEXT CHARACTER 00764200
|
|
BOUNDARY, IF NECESSARY. USED INTERALLY BY THE EMULATION 00764300
|
|
PROCEDURES. 00764400
|
|
; 00764500
|
|
IF VREG > 0 THEN 00764600
|
|
BEGIN 00764700
|
|
VREG:= 0; 00764800
|
|
IF KREG < 7 THEN 00764900
|
|
KREG:= *+1 00765000
|
|
ELSE 00765100
|
|
BEGIN 00765200
|
|
KREG:= 0; 00765300
|
|
SREG:= *+1; 00765400
|
|
END; 00765500
|
|
END; 00765600
|
|
END STREAMADJUSTDICHAR #; 00765700
|
|
00765800
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00765900
|
|
DEFINE STREAMADJUSTDIWORD = 00766000
|
|
BEGIN COMMENT 00766100
|
|
ADJUSTS THE DESTINATON INDEX FORWARD TO THE NEXT WORD BOUNDARY, 00766200
|
|
IF NECESSARY. USED INTERNALLY BY THE EMULATION PROCEDURES. 00766300
|
|
; 00766400
|
|
IF KREG > 0 OR VREG > 0 THEN 00766500
|
|
BEGIN 00766600
|
|
KREG:= VREG:= 0; 00766700
|
|
SREG:= *+1; 00766800
|
|
END; 00766900
|
|
END STREAMADJUSTDIWORD #; 00767000
|
|
00770000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00770100
|
|
DEFINE STREAMSETTALLY(V) = 00770200
|
|
BEGIN COMMENT 00770300
|
|
SETS THE TALLY REGISTER TO THE LOW-ORDER 6 BITS OF "V". 00770400
|
|
EMULATES SEC. 00770500
|
|
; 00770600
|
|
TALLY:= (V).[5:6]; 00770700
|
|
END #; 00770800
|
|
00770900
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00771000
|
|
DEFINE STREAMINCTALLY(V) = 00771100
|
|
BEGIN COMMENT 00771200
|
|
INCREMENTS THE TALLY REGISTER BY THE LOW-ORDER 6 BITS OF "V", 00771300
|
|
TRUNCATING THE RESULT TO 6 BITS (WHICH IS ALL THE TALLY HOLDS). 00771400
|
|
EMULATES INC. 00771500
|
|
; 00771600
|
|
STREAMSETTALLY(TALLY+(V).[5:6]); 00771700
|
|
END #; 00771800
|
|
00790000
|
|
$ BEGINSEGMENT 00790100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00790200
|
|
PROCEDURE STREAMSKIPSI(CHARS); 00790300
|
|
VALUE CHARS; 00790400
|
|
REAL CHARS; 00790500
|
|
BEGIN COMMENT 00790600
|
|
INCREMENTS THE SOURCE INDEX FORWARD OR BACKWARD BY THE 00790700
|
|
SPECIFIED NUMBER OF CHARACTERS. EMULATES SFS/SRS, BUT IS NOT 00790800
|
|
LIMITED TO A COUNT OF 63. 00790900
|
|
; 00791000
|
|
REAL 00791100
|
|
X; 00791200
|
|
00791300
|
|
STREAMADJUSTSICHAR; 00791400
|
|
X:= (GREG.[2:3] & (MREG)[17:15]) + CHARS; 00791500
|
|
MREG:= X.[17:15]; 00791600
|
|
GREG:= X.[2:3]; 00791700
|
|
END STREAMSKIPSI; 00791800
|
|
00794000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00794100
|
|
PROCEDURE STREAMSKIPDI(CHARS); 00794200
|
|
VALUE CHARS; 00794300
|
|
REAL CHARS; 00794400
|
|
BEGIN COMMENT 00794500
|
|
INCREMENTS THE DESTINATION INDEX FORWARD OR BACKWARD BY THE 00794600
|
|
SPECIFIED NUMBER OF CHARACTERS. EMULATES SFD/SRD, BUT IS NOT 00794700
|
|
LIMITED TO A COUNT OF 63. 00794800
|
|
; 00794900
|
|
REAL 00795000
|
|
X; 00795100
|
|
00795200
|
|
STREAMADJUSTDICHAR; 00795300
|
|
X:= (KREG.[2:3] & (SREG)[17:15]) + CHARS; 00795400
|
|
SREG:= X.[17:15]; 00795500
|
|
KREG:= X.[2:3]; 00795600
|
|
END STREAMSKIPDI; 00795700
|
|
00798000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00798100
|
|
DEFINE STREAMLOADDIFROMDC = 00798200
|
|
STREAMLOADDIFROMDCQQ(SBASE) #; 00798300
|
|
PROCEDURE STREAMLOADDIFROMDCQQ(SBASE); 00798400
|
|
ARRAY SBASE[0]; 00798500
|
|
BEGIN COMMENT 00798600
|
|
LOADS THE VALUE OF THE DESTINATION INDEX FROM THE CURRENT 00798700
|
|
LOCATION OF THE DESTINATION INDEX. EMULATES TDA (SORT OF). 00798800
|
|
; 00798900
|
|
STREAMADJUSTDICHAR; 00799000
|
|
VREG:= STREAMGETDC; 00799100
|
|
STREAMSKIPDI(+1); 00799200
|
|
VREG:= STREAMGETDC & (VREG)[11:6]; 00799300
|
|
STREAMSKIPDI(+1); 00799400
|
|
VREG:= STREAMGETDC & (VREG)[17:6]; 00799500
|
|
KREG:= VREG.COFF; 00799600
|
|
SREG:= VREG.WOFF; 00799700
|
|
VREG:= 0; 00799800
|
|
END STREAMLOADDIFROMDC; 00799900
|
|
00800000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00800100
|
|
DEFINE STREAMTRANSFERCHR(N) = 00800200
|
|
STREAMTRANSFERCHRQQ(MBASE, SBASE, N) #; 00800300
|
|
PROCEDURE STREAMTRANSFERCHRQQ(MBASE, SBASE, N); 00800400
|
|
VALUE N; 00800500
|
|
ARRAY MBASE, SBASE[0]; 00800600
|
|
REAL N; 00800700
|
|
BEGIN COMMENT 00800800
|
|
TRANSFERS "N" 6-BIT CHARACTERS FROM SOURCE TO DESTINATION. 00800900
|
|
EMULATES TRS, BUT IS NOT LIMITED TO A COUNT OF 63. 00801000
|
|
; 00801100
|
|
REAL 00801200
|
|
NC; % CHARS LEFT TO TRANSFER 00801300
|
|
00801400
|
|
STREAMADJUSTSICHAR; 00801500
|
|
AREG:= MBASE[MREG]; 00801600
|
|
STREAMADJUSTDICHAR; 00801700
|
|
BREG:= SBASE[SREG]; 00801800
|
|
NC:= N; 00801900
|
|
WHILE NC > 0 DO 00802000
|
|
BEGIN 00802100
|
|
BREG:= * & AREG[47-KREG*6 : 47-GREG*6 : 6]; 00802200
|
|
NC:= *-1; 00802300
|
|
IF GREG < 7 THEN 00802400
|
|
GREG:= *+1 00802500
|
|
ELSE 00802600
|
|
BEGIN 00802700
|
|
GREG:= 0; 00802800
|
|
MREG:= *+1; 00802900
|
|
IF NC > 0 THEN 00803000
|
|
AREG:= MBASE[MREG]; 00803100
|
|
END; 00803200
|
|
00803300
|
|
IF KREG < 7 THEN 00803400
|
|
KREG:= *+1 00803500
|
|
ELSE 00803600
|
|
BEGIN 00803700
|
|
SBASE[SREG]:= BREG; 00803800
|
|
KREG:= 0; 00803900
|
|
SREG:= *+1; 00804000
|
|
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 00804100
|
|
IF NC > 0 THEN 00804150
|
|
BREG:= SBASE[SREG]; 00804200
|
|
END; 00804300
|
|
END WHILE; 00804400
|
|
00804500
|
|
IF KREG > 0 THEN 00804600
|
|
SBASE[SREG]:= BREG; 00804700
|
|
END STREAMTRANSFERCHR; 00804800
|
|
00804900
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00805000
|
|
DEFINE STREAMTRANSFERWDS(N) = 00805100
|
|
STREAMTRANSFERWDSQQ(MBASE, SBASE, N) #; 00805200
|
|
PROCEDURE STREAMTRANSFERWDSQQ(MBASE, SBASE, N); 00805300
|
|
VALUE N; 00805400
|
|
ARRAY MBASE, SBASE[0]; 00805500
|
|
REAL N; 00805600
|
|
BEGIN COMMENT 00805700
|
|
TRANSFERS "N" 48-BIT WORDS FROM SOURCE TO DESTINATION. 00805800
|
|
EMULATES TRW, BUT IS NOT LIMITED TO A COUNT OF 63. 00805900
|
|
; 00806000
|
|
STREAMADJUSTSIWORD; 00806100
|
|
STREAMADJUSTDIWORD; 00806200
|
|
IF N = 1 THEN 00806300
|
|
SBASE[SREG]:= MBASE[MREG] 00806400
|
|
ELSE 00806500
|
|
REPLACE POINTER(SBASE[SREG]) BY 00806600
|
|
POINTER(MBASE[MREG]) FOR N WORDS; 00806700
|
|
00806800
|
|
SREG:= *+N; 00806900
|
|
MREG:= *+N; 00807000
|
|
END STREAMTRANSFERWDS; 00807100
|
|
00807200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00807300
|
|
DEFINE STREAMSMEARLIT(N, CHAR) = 00807400
|
|
STREAMSMEARLITQQ(SBASE, N, CHAR) #; 00807500
|
|
PROCEDURE STREAMSMEARLITQQ(SBASE, N, CHAR); 00807600
|
|
VALUE N, CHAR; 00807700
|
|
ARRAY SBASE[0]; 00807800
|
|
REAL N, CHAR; 00807900
|
|
BEGIN COMMENT 00808000
|
|
REPETITIVELY TRANSFERS THE 6-BIT CHARACTER "CHAR" TO THE 00808100
|
|
DESTINATION "N" TIMES. USED WHERE TRP MIGHT BE EXECUTED, BUT 00808200
|
|
FOR THE SPECIAL CASE OF A 1-CHARACTER PATTERN. THIS ROUTINE IS 00808300
|
|
FUNCTIONALLY EQUIVALENT TO STREAMTRANSFERLIT(1, CHAR) WHEN N=1. 00808400
|
|
; 00808500
|
|
REAL 00808600
|
|
NC; % CHARS LEFT TO SMEAR 00808700
|
|
00808800
|
|
STREAMADJUSTDICHAR; 00808900
|
|
BREG:= SBASE[SREG]; 00809000
|
|
NC:= N; 00809100
|
|
WHILE NC > 0 DO 00809200
|
|
BEGIN 00809300
|
|
BREG:= * & CHAR[47-KREG*6 : 5 : 6]; 00809400
|
|
NC:= *-1; 00809500
|
|
IF KREG < 7 THEN 00809600
|
|
KREG:= *+1 00809700
|
|
ELSE 00809800
|
|
BEGIN 00809900
|
|
SBASE[SREG]:= BREG; 00810000
|
|
KREG:= 0; 00810100
|
|
SREG:= *+1; 00810200
|
|
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 00810300
|
|
IF NC > 0 THEN 00810350
|
|
BREG:= SBASE[SREG]; 00810400
|
|
END; 00810500
|
|
END WHILE; 00810600
|
|
00810700
|
|
IF KREG > 0 THEN 00810800
|
|
SBASE[SREG]:= BREG; 00810900
|
|
END STREAMSMEARLIT; 00811000
|
|
00811100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00811200
|
|
DEFINE STREAMTRANSFERLIT(N, S) = 00811300
|
|
STREAMTRANSFERLITQQ(SBASE, N, S) #; 00811400
|
|
PROCEDURE STREAMTRANSFERLITQQ(SBASE, N, S); 00811500
|
|
VALUE N, S; 00811600
|
|
ARRAY SBASE[0]; 00811700
|
|
REAL N, S; % N MUST BE <= 8, S IS RIGHT-JUSTIFIED IN ITS WORD 00811800
|
|
BEGIN COMMENT 00811900
|
|
TRANSFERS A LITERAL STRING OF 6-BIT CHARACTERS IN "S" TO THE 00812000
|
|
DESTINATION. "N" IS THE NUMBER OF CHARACTERS TO TRANSFER, WHICH 00812100
|
|
IS LIMITED TO 8. "S" IS CONSIDERED TO BE IN THE "N" LOW-ORDER 00812200
|
|
CHARACTERS OF THE "S" WORD. SORT OF EMULATES TRP, EXCEPT THE 00812300
|
|
SOURCE ISN'T REALLY IN THE PROGRAM STRING AND IS LIMITED TO 00812400
|
|
A 48-BIT SOURCE STRING. CALL MULTIPLE TIMES FOR LONGER STRINGS. 00812500
|
|
; 00812600
|
|
REAL 00812700
|
|
NC; 00812800
|
|
00812900
|
|
STREAMADJUSTDICHAR; 00813000
|
|
BREG:= SBASE[SREG]; 00813100
|
|
NC:= N; 00813200
|
|
WHILE NC > 0 DO 00813300
|
|
BEGIN 00813400
|
|
BREG:= * & (S)[47-KREG*6 : NC*6-1 : 6]; 00813500
|
|
NC:= *-1; 00813600
|
|
IF KREG < 7 THEN 00813700
|
|
KREG:= *+1 00813800
|
|
ELSE 00813900
|
|
BEGIN 00814000
|
|
SBASE[SREG]:= BREG; 00814100
|
|
KREG:= 0; 00814200
|
|
SREG:= *+1; 00814300
|
|
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 00814400
|
|
IF NC > 0 THEN 00814450
|
|
BREG:= SBASE[SREG]; 00814500
|
|
END; 00814600
|
|
END WHILE; 00814700
|
|
00814800
|
|
IF KREG > 0 THEN 00814900
|
|
SBASE[SREG]:= BREG; 00815000
|
|
END STREAMTRANSFERLIT; 00815100
|
|
00815200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00815300
|
|
DEFINE STREAMTRANSFERDEC(N) = 00815400
|
|
STREAMTRANSFERDECQQ(MBASE, SBASE, N) #; 00815500
|
|
PROCEDURE STREAMTRANSFERDECQQ(MBASE, SBASE, N); 00815600
|
|
VALUE N; 00815700
|
|
ARRAY MBASE, SBASE[0]; 00815800
|
|
REAL N; 00815900
|
|
BEGIN COMMENT 00816000
|
|
CONVERTS THE WORD AT THE SOURCE INDEX TO "N" DECIMAL DIGITS AND 00816100
|
|
TRANSFERS THEM TO THE DESTINATION AS 6-BIT CHARACTER CODES. 00816200
|
|
EMULATES OCV. LIMITED TO 8-DIGIT CONVERSION. 00816300
|
|
; 00816400
|
|
REAL 00816500
|
|
DIGITS; 00816600
|
|
00816700
|
|
STREAMADJUSTSIWORD; 00816800
|
|
STREAMADJUSTDICHAR; 00816900
|
|
IF N = 0 THEN 00817000
|
|
TFFF:= TRUE 00817100
|
|
ELSE 00817200
|
|
BEGIN 00817300
|
|
IF N > 8 THEN 00817400
|
|
N:= 8; 00817500
|
|
00817600
|
|
AREG:= MBASE[MREG]; 00817700
|
|
IF AREG = 0 THEN 00817800
|
|
AREG:= 0 % WIPE OUT ANY SIGN BIT 00817900
|
|
ELSE 00818000
|
|
DIGITS:= SCALERIGHTF(AREG.[38:39], 12); 00818100
|
|
00818200
|
|
MREG:= *+1; 00818300
|
|
TFFF:= (DIGITS.[47:(12-N)*4] = 0); % TRUE => NO DECIMAL OVERFLOW 00818400
|
|
WHILE N > 1 DO 00818500
|
|
BEGIN 00818600
|
|
STREAMSMEARLIT(1, DIGITS.[N*4-1:4]); 00818700
|
|
N:= *-1; 00818800
|
|
END WHILE; 00818900
|
|
00819000
|
|
STREAMSMEARLIT(1, DIGITS.[3:4] & (AREG)[5:46:1]); % SET THE SIGN 00819100
|
|
END; 00819200
|
|
END STREAMTRANSFERDEC; 00819300
|
|
00819400
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00819500
|
|
DEFINE STREAMTRANSFEROCT(N) = 00819600
|
|
STREAMTRANSFEROCTQQ(MBASE, SBASE, N) #; 00819700
|
|
PROCEDURE STREAMTRANSFEROCTQQ(MBASE, SBASE, N); 00819800
|
|
VALUE N; 00819900
|
|
ARRAY MBASE, SBASE[0]; 00820000
|
|
REAL N; 00820100
|
|
BEGIN COMMENT 00820200
|
|
CONVERTS "N" 6-BIT CHARACTERS FROM THE SOURCE TO A BINARY VALUE 00820300
|
|
AND STORES THE RESULT AT THE DESTINATION WORD. EMULATES ICV. 00820400
|
|
LIMITED TO 8-DIGIT CONVERSION. 00820500
|
|
; 00820600
|
|
REAL 00820700
|
|
VAL; 00820800
|
|
00820900
|
|
STREAMADJUSTDIWORD; 00821000
|
|
STREAMADJUSTSICHAR; 00821100
|
|
AREG:= MBASE[MREG]; 00821200
|
|
IF N > 8 THEN 00821300
|
|
N:= 8; 00821400
|
|
00821500
|
|
WHILE N > 0 DO 00821600
|
|
BEGIN 00821700
|
|
VAL:= VAL*10 + AREG.[45-GREG*6:4]; 00821800
|
|
N:= *-1; 00821900
|
|
IF N = 0 THEN 00822000
|
|
IF AREG.[47-GREG*6:2] = 2 THEN % SIGN IS NEGATIVE 00822100
|
|
IF VAL ^= 0 THEN 00822200
|
|
VAL:= -VAL; 00822300
|
|
00822400
|
|
IF GREG < 7 THEN 00822500
|
|
GREG:= *+1 00822600
|
|
ELSE 00822700
|
|
BEGIN 00822800
|
|
GREG:= 0; 00822900
|
|
MREG:= *+1; 00823000
|
|
IF N > 0 THEN 00823100
|
|
AREG:= MBASE[MREG]; 00823200
|
|
END; 00823300
|
|
END WHILE; 00823400
|
|
00823500
|
|
SBASE[SREG]:= VAL; 00823600
|
|
SREG:= *+1; 00823700
|
|
END STREAMTRANSFEROCT; 00823800
|
|
00823900
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00824000
|
|
DEFINE STREAMTRANSFERFILL(N) = 00824100
|
|
STREAMTRANSFERFILLQQ(SBASE, N) #; 00824200
|
|
PROCEDURE STREAMTRANSFERFILLQQ(SBASE, N); 00824300
|
|
VALUE N; 00824400
|
|
ARRAY SBASE[0]; 00824500
|
|
REAL N; 00824600
|
|
BEGIN COMMENT 00824700
|
|
PERFORMS LEADING-ZERO SUPPRESSION STARTING AT THE DESTINATION 00824800
|
|
INDEX LOCATION. LEAVES THE DESTINATION INDEX POINTING TO THE 00824900
|
|
FIRST NON-SUPPRESSED CHARACTER. EMULATES TBN. 00825000
|
|
; 00825100
|
|
REAL 00825200
|
|
NC; % CHARS LEFT TO EXAMINE 00825300
|
|
00825400
|
|
STREAMADJUSTDICHAR; 00825500
|
|
TFFF:= TRUE; 00825600
|
|
BREG:= SBASE[SREG]; 00825700
|
|
NC:= N; 00825800
|
|
WHILE NC > 0 DO 00825900
|
|
BEGIN 00826000
|
|
IF BICCOLLATE[STREAMGETDC] <= BICCOLLATE[6"0"] THEN 00826100
|
|
BEGIN 00826200
|
|
BREG:= * & (6" ")[47-KREG*6 : 5 : 6]; 00826300
|
|
NC:= *-1; 00826400
|
|
IF KREG < 7 THEN 00826500
|
|
KREG:= *+1 00826600
|
|
ELSE 00826700
|
|
BEGIN 00826800
|
|
SBASE[SREG]:= BREG; 00826900
|
|
KREG:= 0; 00827000
|
|
SREG:= *+1; 00827100
|
|
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 00827200
|
|
IF NC > 0 THEN 00827250
|
|
BREG:= SBASE[SREG]; 00827300
|
|
END; 00827400
|
|
END 00827500
|
|
ELSE 00827600
|
|
BEGIN 00827700
|
|
NC:= 0; 00827800
|
|
TFFF:= FALSE; 00827900
|
|
IF KREG > 0 THEN 00828000
|
|
SBASE[SREG]:= BREG; 00828100
|
|
END; 00828200
|
|
END WHILE; 00828300
|
|
END STREAMTRANSFERFILL; 00828400
|
|
00830000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00830100
|
|
PROCEDURE STREAMSKIPSB(N); 00830200
|
|
VALUE N; 00830300
|
|
REAL N; 00830400
|
|
BEGIN COMMENT 00830500
|
|
INCREMENTS THE SOURCE INDEX FORWARD BY "N" BITS. 00830600
|
|
EMULATES BSS. 00830700
|
|
; 00830800
|
|
THRU N DO 00830900
|
|
BEGIN 00831000
|
|
IF HREG < 5 THEN 00831100
|
|
HREG:= *+1 00831200
|
|
ELSE 00831300
|
|
BEGIN 00831400
|
|
HREG:= 0; 00831500
|
|
IF GREG < 7 THEN 00831600
|
|
GREG:= *+1 00831700
|
|
ELSE 00831800
|
|
BEGIN 00831900
|
|
GREG:= 0; 00832000
|
|
MREG:= *+1; 00832100
|
|
END; 00832200
|
|
END; 00832300
|
|
END THRU; 00832400
|
|
END STREAMSKIPSB; 00832500
|
|
00832600
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00832700
|
|
PROCEDURE STREAMSKIPDB(N); 00832800
|
|
VALUE N; 00832900
|
|
REAL N; 00833000
|
|
BEGIN COMMENT 00833100
|
|
INCREMENTS THE DESTINATION INDEX FORWARD BY "N" BITS. 00833200
|
|
EMULATES BSD. 00833300
|
|
; 00833400
|
|
THRU N DO 00833500
|
|
BEGIN 00833600
|
|
IF VREG < 5 THEN 00833700
|
|
VREG:= *+1 00833800
|
|
ELSE 00833900
|
|
BEGIN 00834000
|
|
VREG:= 0; 00834100
|
|
IF KREG < 7 THEN 00834200
|
|
KREG:= *+1 00834300
|
|
ELSE 00834400
|
|
BEGIN 00834500
|
|
KREG:= 0; 00834600
|
|
SREG:= *+1; 00834700
|
|
END; 00834800
|
|
END; 00834900
|
|
END THRU; 00835000
|
|
END STREAMSKIPDB; 00835100
|
|
00835200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00835300
|
|
DEFINE STREAMSETDB(N, TRUTH) = 00835400
|
|
STREAMSETDBQQ(SBASE, N, TRUTH) #; 00835500
|
|
PROCEDURE STREAMSETDBQQ(SBASE, N, TRUTH); 00835600
|
|
VALUE N, TRUTH; 00835700
|
|
ARRAY SBASE[0]; 00835800
|
|
REAL N; 00835900
|
|
REAL TRUTH; 00836000
|
|
BEGIN COMMENT 00836100
|
|
SETS OR RESETS "N" DESTINATION BITS, DEPENDING ON "TRUTH". 00836200
|
|
EMULATES BIR/BIS. 00836300
|
|
; 00836400
|
|
REAL 00836500
|
|
NC; 00836600
|
|
00836700
|
|
BREG:= SBASE[SREG]; 00836800
|
|
NC:= N; 00836900
|
|
WHILE NC > 0 DO 00837000
|
|
BEGIN 00837100
|
|
BREG:= * & (TRUTH)[47-KREG*6-VREG:1]; 00837200
|
|
NC:= *-1; 00837300
|
|
IF VREG < 5 THEN 00837400
|
|
VREG:= *+1 00837500
|
|
ELSE 00837600
|
|
BEGIN 00837700
|
|
VREG:= 0; 00837800
|
|
IF KREG < 7 THEN 00837900
|
|
KREG:= *+1 00838000
|
|
ELSE 00838100
|
|
BEGIN 00838200
|
|
SBASE[SREG]:= BREG; 00838300
|
|
KREG:= 0; 00838400
|
|
SREG:= *+1; 00838500
|
|
IF NC < 8 THEN % RELOAD B IF PARTIAL WORD LEFT 00838600
|
|
IF NC > 0 THEN 00838650
|
|
BREG:= SBASE[SREG]; 00838700
|
|
END; 00838800
|
|
END; 00838900
|
|
END WHILE; 00839000
|
|
00839100
|
|
IF VREG > 0 OR KREG > 0 THEN 00839200
|
|
SBASE[SREG]:= BREG; 00839300
|
|
END STREAMSETDB; 00839400
|
|
00850000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00850100
|
|
DEFINE STREAMCOMPARELSS(N) = 00850200
|
|
STREAMCOMPARELSSQQ(MBASE, SBASE, N) #; 00850300
|
|
BOOLEAN PROCEDURE STREAMCOMPARELSSQQ(MBASE, SBASE, N); 00850400
|
|
VALUE N; 00850500
|
|
ARRAY MBASE, SBASE[0]; 00850600
|
|
REAL N; 00850700
|
|
BEGIN COMMENT 00850800
|
|
COMPARES "N" CHARACTERS BETWEEN SOURCE AND DESTINATION FOR A 00850900
|
|
LESS-THAN CONDITION. ADVANCES BOTH INDEXES BY "N". 00851000
|
|
EMULATES CLS. 00851100
|
|
; 00851200
|
|
STREAMADJUSTSICHAR; 00851300
|
|
STREAMADJUSTDICHAR; 00851400
|
|
TFFF:= FALSE; 00851500
|
|
WHILE N > 0 DO 00851600
|
|
BEGIN 00851700
|
|
IF STREAMGETSC = STREAMGETDC THEN 00851800
|
|
BEGIN 00851900
|
|
STREAMSKIPSI(+1); 00852000
|
|
STREAMSKIPDI(+1); 00852100
|
|
N:= *-1; 00852200
|
|
END 00852300
|
|
ELSE 00852400
|
|
BEGIN 00852500
|
|
IF BICCOLLATE[STREAMGETSC] < BICCOLLATE[STREAMGETDC] THEN 00852600
|
|
TFFF:= TRUE; 00852700
|
|
00852800
|
|
STREAMSKIPSI(+N); 00852900
|
|
STREAMSKIPDI(+N); 00853000
|
|
N:= 0; 00853100
|
|
END; 00853200
|
|
END WHILE; 00853300
|
|
00853400
|
|
STREAMCOMPARELSSQQ:= TFFF; 00853500
|
|
END STREAMCOMPARELSS; 00853600
|
|
00860000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00860100
|
|
DEFINE STREAMCOMPAREEQL(N) = 00860200
|
|
STREAMCOMPAREEQLQQ(MBASE, SBASE, N) #; 00860300
|
|
BOOLEAN PROCEDURE STREAMCOMPAREEQLQQ(MBASE, SBASE, N); 00860400
|
|
VALUE N; 00860500
|
|
ARRAY MBASE, SBASE[0]; 00860600
|
|
REAL N; 00860700
|
|
BEGIN COMMENT 00860800
|
|
COMPARES "N" CHARACTERS BETWEEN SOURCE AND DESTINATION FOR AN 00860900
|
|
EQUAL CONDITION. ADVANCES BOTH INDEXES BY "N". 00861000
|
|
EMULATES CEQ. 00861100
|
|
; 00861200
|
|
STREAMADJUSTSICHAR; 00861300
|
|
STREAMADJUSTDICHAR; 00861400
|
|
TFFF:= TRUE; 00861500
|
|
WHILE N > 0 DO 00861600
|
|
BEGIN 00861700
|
|
IF STREAMGETSC = STREAMGETDC THEN % COLLATING SEQ IS IMMATERIAL 00861800
|
|
BEGIN 00861900
|
|
STREAMSKIPSI(+1); 00862000
|
|
STREAMSKIPDI(+1); 00862100
|
|
N:= *-1; 00862200
|
|
END 00862300
|
|
ELSE 00862400
|
|
BEGIN 00862500
|
|
TFFF:= FALSE; 00862600
|
|
STREAMSKIPSI(+N); 00862700
|
|
STREAMSKIPDI(+N); 00862800
|
|
N:= 0; 00862900
|
|
END; 00863000
|
|
END WHILE; 00863100
|
|
00863200
|
|
STREAMCOMPAREEQLQQ:= TFFF; 00863300
|
|
END STREAMCOMPAREEQL; 00863400
|
|
00875000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00875100
|
|
DEFINE STREAMCOMPAREGEQ(N) = 00875200
|
|
STREAMCOMPAREGEQQQ(MBASE, SBASE, N) #; 00875300
|
|
BOOLEAN PROCEDURE STREAMCOMPAREGEQQQ(MBASE, SBASE, N); 00875400
|
|
VALUE N; 00875500
|
|
ARRAY MBASE, SBASE[0]; 00875600
|
|
REAL N; 00875700
|
|
BEGIN COMMENT 00875800
|
|
COMPARES "N" CHARACTERS BETWEEN SOURCE AND DESTINATION FOR A 00875900
|
|
GREATER-THAN-OR-EQUAL CONDITION. ADVANCES BOTH INDEXES BY "N". 00876000
|
|
EMULATES CEG. 00876100
|
|
; 00876200
|
|
STREAMADJUSTSICHAR; 00876300
|
|
STREAMADJUSTDICHAR; 00876400
|
|
TFFF:= TRUE; 00876500
|
|
WHILE N > 0 DO 00876600
|
|
BEGIN 00876700
|
|
IF STREAMGETSC = STREAMGETDC THEN 00876800
|
|
BEGIN 00876900
|
|
STREAMSKIPSI(+1); 00877000
|
|
STREAMSKIPDI(+1); 00877100
|
|
N:= *-1; 00877200
|
|
END 00877300
|
|
ELSE 00877400
|
|
BEGIN 00877500
|
|
IF BICCOLLATE[STREAMGETSC] < BICCOLLATE[STREAMGETDC] THEN 00877600
|
|
TFFF:= FALSE; 00877700
|
|
00877800
|
|
STREAMSKIPSI(+N); 00877900
|
|
STREAMSKIPDI(+N); 00878000
|
|
N:= 0; 00878100
|
|
END; 00878200
|
|
END WHILE; 00878300
|
|
00878400
|
|
STREAMCOMPAREGEQQQ:= TFFF; 00878500
|
|
END STREAMCOMPAREGEQ; 00878600
|
|
00880000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00880100
|
|
DEFINE STREAMSCLSS(CHR) = 00880200
|
|
STREAMSCLSSQQ(MBASE, CHR) #; 00880300
|
|
BOOLEAN PROCEDURE STREAMSCLSSQQ(MBASE, CHR); 00880400
|
|
VALUE CHR; 00880500
|
|
ARRAY MBASE[0]; 00880600
|
|
REAL CHR; 00880700
|
|
BEGIN COMMENT 00880800
|
|
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 00880900
|
|
LESS-THAN CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 00881000
|
|
EMULATES TLS. 00881100
|
|
; 00881200
|
|
STREAMADJUSTSICHAR; 00881300
|
|
STREAMSCLSSQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] < BICCOLLATE[CHR]); 00881400
|
|
END STREAMSCLSS; 00881500
|
|
00881600
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00881700
|
|
DEFINE STREAMSCLEQ(CHR) = 00881800
|
|
STREAMSCLEQQQ(MBASE, CHR) #; 00881900
|
|
BOOLEAN PROCEDURE STREAMSCLEQQQ(MBASE, CHR); 00882000
|
|
VALUE CHR; 00882100
|
|
ARRAY MBASE[0]; 00882200
|
|
REAL CHR; 00882300
|
|
BEGIN COMMENT 00882400
|
|
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 00882500
|
|
LESS-THAN CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 00882600
|
|
EMULATES TLS. 00882700
|
|
; 00882800
|
|
STREAMADJUSTSICHAR; 00882900
|
|
STREAMSCLEQQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] < BICCOLLATE[CHR]); 00883000
|
|
END STREAMSCLEQ; 00883100
|
|
00883200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00883300
|
|
DEFINE STREAMSCEQL(CHR) = 00883400
|
|
STREAMSCEQLQQ(MBASE, CHR) #; 00883500
|
|
BOOLEAN PROCEDURE STREAMSCEQLQQ(MBASE, CHR); 00883600
|
|
VALUE CHR; 00883700
|
|
ARRAY MBASE[0]; 00883800
|
|
REAL CHR; 00883900
|
|
BEGIN COMMENT 00884000
|
|
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR AN 00884100
|
|
EQUAL CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 00884200
|
|
EMULATES TEQ. 00884300
|
|
; 00884400
|
|
STREAMADJUSTSICHAR; 00884500
|
|
STREAMSCEQLQQ:= TFFF:= (STREAMGETSC=CHR); % COLLATING SEQ IMMATERIAL 00884600
|
|
END STREAMSCEQL; 00884700
|
|
00884800
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00884900
|
|
DEFINE STREAMSCNEQ(CHR) = 00885000
|
|
STREAMSCNEQQQ(MBASE, CHR) #; 00885100
|
|
BOOLEAN PROCEDURE STREAMSCNEQQQ(MBASE, CHR); 00885200
|
|
VALUE CHR; 00885300
|
|
ARRAY MBASE[0]; 00885400
|
|
REAL CHR; 00885500
|
|
BEGIN COMMENT 00885600
|
|
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 00885700
|
|
NOT-EQUAL CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 00885800
|
|
EMULATES TNE. 00885900
|
|
; 00886000
|
|
STREAMADJUSTSICHAR; 00886100
|
|
STREAMSCNEQQQ:= TFFF:= (STREAMGETSC^=CHR); % COLLATING SEQ IMMATERIAL 00886200
|
|
END STREAMSCNEQ; 00886300
|
|
00886400
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00886500
|
|
DEFINE STREAMSCGEQ(CHR) = 00886600
|
|
STREAMSCGEQQQ(MBASE, CHR) #; 00886700
|
|
BOOLEAN PROCEDURE STREAMSCGEQQQ(MBASE, CHR); 00886800
|
|
VALUE CHR; 00886900
|
|
ARRAY MBASE[0]; 00887000
|
|
REAL CHR; 00887100
|
|
BEGIN COMMENT 00887200
|
|
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 00887300
|
|
GREATER-THAN-OR-EQUAL CONDITION. DOES NOT ADVANCE THE SOURCE 00887400
|
|
INDEX. EMULATES TEG. 00887500
|
|
; 00887600
|
|
STREAMADJUSTSICHAR; 00887700
|
|
STREAMSCGEQQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] >= BICCOLLATE[CHR]); 00887800
|
|
END STREAMSCGEQ; 00887900
|
|
00888000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00888100
|
|
DEFINE STREAMSCGTR(CHR) = 00888200
|
|
STREAMSCGTRQQ(MBASE, CHR) #; 00888300
|
|
BOOLEAN PROCEDURE STREAMSCGTRQQ(MBASE, CHR); 00888400
|
|
VALUE CHR; 00888500
|
|
ARRAY MBASE[0]; 00888600
|
|
REAL CHR; 00888700
|
|
BEGIN COMMENT 00888800
|
|
COMPARES THE CURRENT SOURCE CHARACTER AGAINST "CHR" FOR A 00888900
|
|
GREATER-THAN CONDITION. DOES NOT ADVANCE THE SOURCE INDEX. 00889000
|
|
EMULATES TGR. 00889100
|
|
; 00889200
|
|
STREAMADJUSTSICHAR; 00889300
|
|
STREAMSCGTRQQ:= TFFF:= (BICCOLLATE[STREAMGETSC] > BICCOLLATE[CHR]); 00889400
|
|
END STREAMSCGTR; 00889500
|
|
00890000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00890100
|
|
DEFINE STREAMSCALPHA = 00890200
|
|
STREAMSCALPHAQQ(MBASE) #; 00890300
|
|
BOOLEAN PROCEDURE STREAMSCALPHAQQ(MBASE); 00890400
|
|
ARRAY MBASE[0]; 00890500
|
|
BEGIN COMMENT 00890600
|
|
TESTS THE CURRENT SOURCE CHARACTER FOR MEMBERSHIP IN THE "ALPHA" 00890700
|
|
SET (0-9, A-Z, AND ODDLY, "?"). DOES NOT ADVANCE THE SOURCE INDEX.00890800
|
|
EMULATES TAN. 00890900
|
|
; 00891000
|
|
STREAMADJUSTSICHAR; 00891100
|
|
STREAMSCALPHAQQ:= TFFF:= (STREAMGETSC IN BICALPHA); 00891200
|
|
END STREAMSCALPHA; 00891300
|
|
$ ENDSEGMENT 00899900
|
|
00900000
|
|
$ BEGINSEGMENT 00900050
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00900100
|
|
PROCEDURE PACKEBCDICTOBIC(S, SX, D, DX, N); 00900200
|
|
VALUE SX, DX, N; 00900300
|
|
ARRAY S, D[0]; 00900400
|
|
REAL SX, DX, N; 00900500
|
|
BEGIN COMMENT 00900600
|
|
PACKS 8-BIT EBCDIC CHARACTERS TO 6-BIT BIC CHARACTERS FROM 00900700
|
|
ARRAY S TO ARRAY D. SX IS THE 8-BIT CHARACTER OFFSET INTO S AND 00900800
|
|
DX IS THE 6-BIT CHARACTER OFFSET INTO D. N IS THE NUMBER OF 00900900
|
|
CHARACTERS TO PACK. PACKING PROCEEDS IN A FORWARD DIRECTION SO 00901000
|
|
THAT SOURCE AND DESTINATION CAN REFER TO THE SAME LOCATION. 00901100
|
|
THE SOURCE DATA IS UNCONDITIONALLY OVERWRITTEN WITH 8-BIT BIC. 00901200
|
|
; 00901300
|
|
REAL 00901400
|
|
NC, % NR CHARS LEFT TO PACK 00901500
|
|
SA, % SOURCE ACCUMULATOR WORD, 00901600
|
|
SB, % SOURCE BIT NBR 00901700
|
|
SW, % SOURCE WORD INDEX 00901800
|
|
DA, % DESTINATION ACCUMULATOR WORD 00901900
|
|
DB, % DESTINATION BIT NBR 00902000
|
|
DW; % DESTINATION WORD INDEX 00902100
|
|
00902200
|
|
SW:= SX DIV 6; 00902300
|
|
SB:= 45-(SX MOD 6)*8; 00902400
|
|
DW:= DX DIV 8; 00902500
|
|
DB:= 47-(DX MOD 8)*6; 00902600
|
|
REPLACE POINTER(S[SX],8) BY POINTER(S[SX],8) FOR N WITH EBCDICTOBIC; 00902700
|
|
SA:= S[SW]; 00902800
|
|
DA:= D[DW]; 00902900
|
|
NC:= N; 00903000
|
|
WHILE NC > 0 DO 00903100
|
|
BEGIN 00903200
|
|
DA:= * & (SA)[DB:SB:6]; 00903300
|
|
NC:= *-1; 00903400
|
|
IF NC > 0 THEN 00903500
|
|
BEGIN 00903600
|
|
IF SB > 7 THEN 00903700
|
|
SB:= *-8 00903800
|
|
ELSE 00903900
|
|
BEGIN 00904000
|
|
SB:= 45; 00904100
|
|
SA:= S[SW:= *+1]; 00904200
|
|
END; 00904300
|
|
00904500
|
|
IF DB > 5 THEN 00904600
|
|
DB:= *-6 00904700
|
|
ELSE 00904800
|
|
BEGIN 00904900
|
|
D[DW]:= DA; 00905000
|
|
DB:= 47; 00905100
|
|
DA:= D[DW:= *+1]; 00905200
|
|
END; 00905300
|
|
END; 00905350
|
|
END WHILE; 00905400
|
|
00905500
|
|
D[DW]:= DA; 00905600
|
|
END PACKEBCDICTOBIC; 00905700
|
|
00905800
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00905900
|
|
PROCEDURE UNPACKBICTOEBCDIC(S, SX, D, DX, N); 00906000
|
|
VALUE SX, DX, N; 00906100
|
|
ARRAY S, D[0]; 00906200
|
|
REAL SX, DX, N; 00906300
|
|
BEGIN COMMENT 00906400
|
|
UNPACKS 6-BIT BIC CHARACTERS TO 8-BIT EBCDIC CHARACTERS FROM 00906500
|
|
ARRAY S TO ARRAY D. SX IS THE 6-BIT CHARACTER OFFSET INTO S AND 00906600
|
|
DX IS THE 8-BIT CHARACTER OFFSET INTO D. N IS THE NUMBER OF 00906700
|
|
CHARACTERS TO UNPACK. UNPACKING PROCEEDS IN A REVERSE DIRECTION 00906800
|
|
SO THAT SOURCE AND DESTINATION CAN REFER TO THE SAME LOCATION. 00906900
|
|
; 00907000
|
|
REAL 00907100
|
|
NC, % NR CHARS LEFT TO UNPACK 00907200
|
|
SA, % SOURCE ACCUMULATOR WORD, 00907300
|
|
SB, % SOURCE BIT NBR 00907400
|
|
SW, % SOURCE WORD INDEX 00907500
|
|
DA, % DESTINATION ACCUMULATOR WORD 00907600
|
|
DB, % DESTINATION BIT NBR 00907700
|
|
DW; % DESTINATION WORD INDEX 00907800
|
|
00907900
|
|
SW:= (SX+N-1) DIV 8; 00908000
|
|
SB:= 47-((SX+N-1) MOD 8)*6; 00908100
|
|
DW:= (DX+N-1) DIV 6; 00908200
|
|
DB:= 47-((DX+N-1) MOD 6)*8; 00908300
|
|
SA:= S[SW]; 00908400
|
|
DA:= D[DW]; 00908500
|
|
NC:= N; 00908600
|
|
WHILE NC > 0 DO 00908700
|
|
BEGIN 00908800
|
|
DA:= * & (SA.[SB:6])[DB:8]; 00908900
|
|
NC:= *-1; 00909000
|
|
IF NC > 0 THEN 00909100
|
|
BEGIN 00909200
|
|
IF SB < 47 THEN 00909300
|
|
SB:= *+6 00909400
|
|
ELSE 00909500
|
|
BEGIN 00909600
|
|
SB:= 5; 00909700
|
|
SA:= S[SW:= *-1]; 00909800
|
|
END; 00909900
|
|
00910100
|
|
IF DB < 47 THEN 00910200
|
|
DB:= *+8 00910300
|
|
ELSE 00910400
|
|
BEGIN 00910500
|
|
D[DW]:= DA; 00910600
|
|
DB:= 7; 00910700
|
|
DA:= D[DW:= *-1]; 00910800
|
|
END; 00910900
|
|
END; 00910950
|
|
END WHILE; 00911000
|
|
00911100
|
|
D[DW]:= DA; 00911200
|
|
REPLACE POINTER(D[DX],8) BY POINTER(D[DX],8) FOR N WITH BICTOEBCDIC; 00911300
|
|
END UNPACKBICTOEBCDIC; 00911400
|
|
00920000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00920100
|
|
REAL PROCEDURE BIC2EBC(B); 00920200
|
|
VALUE B; 00920300
|
|
REAL B; 00920400
|
|
BEGIN COMMENT 00920500
|
|
CONVERTS THE LOW-ORDER SIX 6-BIT BIC CHARACTERS IN W TO THEIR 00920600
|
|
8-BIT EBCDIC EQUIVALENTS AND RETURNS THE RESULTING WORD. 00920700
|
|
; 00920800
|
|
00921100
|
|
EBCDICBUFF[0]:= B.[5:6] & (B)[13:11:6] & (B)[21:17:6] & (B)[29:23:6] 00921200
|
|
& (B)[37:29:6] & (B)[45:35:6]; 00921300
|
|
REPLACE POINTER(EBCDICBUFF,8) BY 00921400
|
|
POINTER(EBCDICBUFF,8) FOR 6 WITH BICTOEBCDIC; 00921450
|
|
BIC2EBC:= EBCDICBUFF[0]; 00921500
|
|
END BIC2EBC; 00921600
|
|
$ ENDSEGMENT 00921700
|
|
01090000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01090100
|
|
%% END STREAM PROCEDURE EMULATION MODULE %%01090200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01090300
|
|
01100000=00510000=
|
|
COMMENT EXAMIN RETURNS THE CHARACTER AT ABSOLUTE ADDRESS NCR; 01100100=00510000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01100200=00511000=
|
|
REAL PROCEDURE EXAMIN(A, NCR); 01100300=00511000=
|
|
VALUE 01100400=00511000=
|
|
NCR; 01100500=00511000=
|
|
REAL 01100520
|
|
NCR; 01100540
|
|
ARRAY 01100560
|
|
A[0]; 01100580
|
|
BEGIN 01100600=00512000=
|
|
STREAMLOCALS; 01100650
|
|
STREAMSETSI(A, NCR); 01100700=00512000=
|
|
EXAMIN:= STREAMGETSC; 01100800=00512000=
|
|
END; 01101100=00512000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01101200=00512100=
|
|
REAL PROCEDURE EXAMINELAST(A, AC, CT); 01101300=00512100=
|
|
VALUE 01101400=00512100=
|
|
AC, CT; 01101500=00512100=
|
|
ARRAY 01101520
|
|
A[0]; 01101540
|
|
REAL 01101560
|
|
AC, CT; 01101580
|
|
BEGIN 01101600=00512200=
|
|
STREAMLOCALS; 01101650
|
|
STREAMSETSI(A, AC); 01101700=00512300=
|
|
STREAMSKIPSI(+CT); 01101800=00512300=
|
|
EXAMINELAST:= STREAMGETSC; 01101900=00512400=
|
|
END EXAMINELAST; 01102200=00512600=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01102300
|
|
COMMENT MOVECHARACTERS MOVES N CHARACTERS FROM THE SK-TH CHARACTER 01102400=00513000=
|
|
IN SORCE TO THE DK-TH CHARACTER IN DEST, 0<=N<=63,0<=SK<=127; 01102500=00514000=
|
|
PROCEDURE MOVECHARACTERS(N, SORCE, SX, SK, DEST, DX, DK); 01102600=00515000=
|
|
VALUE 01102700=00516000=
|
|
N, SX, SK, DX, DK; 01102800=00516000=
|
|
REAL 01102850
|
|
N, SX, SK, DX, DK; 01102900
|
|
ARRAY 01102950
|
|
SORCE, DEST[0]; 01103000
|
|
BEGIN 01103100=00517000=
|
|
STREAMLOCALS; 01103200
|
|
STREAMSETDI(DEST, DX); 01104200=00519000=
|
|
STREAMSETSI(SORCE, SX); 01104500=00521000=
|
|
STREAMSKIPSI(+SK); 01104600=00521000=
|
|
STREAMSKIPDI(+DK); 01104700=00521000=
|
|
STREAMTRANSFERCHR(N); 01104800=00521000=
|
|
END MOVECHARACTERS; 01104900=00522000=
|
|
01254900
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01254920
|
|
%% INNER BLOCK OF COMPILER %%01254940
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01254960
|
|
BEGIN 01255000=01000000=
|
|
INTEGER 01260000=01000700=
|
|
NUMSEQUENCEERRORS; 01265000=01000700=
|
|
INTEGER 01270000=01000800=
|
|
OPINX; % USED FOR INDEXING INTO OPTIONS ARRAY. 01275000=01000800=
|
|
BOOLEAN 01280000=01000802=
|
|
SETTING; % USED BY DOLLARCARD FOR AN OPTION"S SETTING 01285000=01000802=
|
|
BOOLEAN 01290000=01000810=
|
|
GOGOGO; % TRUE FOR SPECIAL WRITES AND READS 01295000=01000810=
|
|
PROCEDURE CHECKBOUNDLVL; 01300000=01000830=
|
|
FORWARD; 01305000=01000830=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01310000=01000830=
|
|
BOOLEAN 01315000=01000840=
|
|
ARRAYFLAG; % USED TO INFORM PRIMARY AND BOOPRIM THAT WE ARE 01320000=01000840=
|
|
% EVALUATING AN ARRAY BOUND 01325000=01000850=
|
|
INTEGER 01330000=01000860=
|
|
NEWINX, 01335000=01000860=
|
|
ADDVALUE, 01340000=01000860=
|
|
BASENUM, 01345000=01000860=
|
|
TOTALNO; 01350000=01000860=
|
|
COMMENT ADDVALUE IS INCREMENT VALUE FOR RESEQUENCING 01355000=01000870=
|
|
BASENUM IS STARTING VALUE 01360000=01000880=
|
|
TOTALNO IS BASENUM + ADDVALUE CALCULATED FOR EACH 01365000=01000890=
|
|
CARD AS TOTALNO = TOTALNO + ADDVALUE; 01370000=01000900=
|
|
DEFINE 01375000=01000902=
|
|
OPARSIZE = 200 #; 01380000=01000902=
|
|
ARRAY 01385000=01000904=
|
|
OPTIONS[0:OPARSIZE]; 01390000=01000904=
|
|
BOOLEAN 01395000=01000910=
|
|
OPTIONWORD; 01400000=01000910=
|
|
DEFINE 01405000=01000920=
|
|
CHECKBIT = 1 #, 01410000=01000930=
|
|
DEBUGBIT = 2 #, 01415000=01000940=
|
|
DECKBIT = 3 #, 01420000=01000950=
|
|
FORMATBIT = 4 #, 01425000=01000960=
|
|
INTBIT = 5 #, 01430000=01000970=
|
|
LISTABIT = 6 #, 01435000=01000980=
|
|
LISTBIT = 7 #, 01440000=01000990=
|
|
LISTPBIT = 8 #, 01445000=01001000=
|
|
MCPBIT = 9 #, 01450000=01001010=
|
|
MERGEBIT = 10 #, 01455000=01001020=
|
|
NESTBIT = 11 #, 01460000=01001030=
|
|
NEWBIT = 12 #, 01465000=01001040=
|
|
NEWINCLBIT = 13 #, 01470000=01001050=
|
|
OMITBIT = 14 #, 01475000=01001060=
|
|
PRINTDOLLARBIT = 01480000=01001060=
|
|
15 #, 01485000=01001070=
|
|
PRTBIT = 16 #, 01490000=01001080=
|
|
PUNCHBIT = 17 #, 01495000=01001090=
|
|
PURGEBIT = 18 #, 01500000=01001100=
|
|
SEGSBIT = 19 #, 01505000=01001110=
|
|
SEQBIT = 20 #, 01510000=01001120=
|
|
SEQERRBIT = 21 #, 01515000=01001130=
|
|
SINGLBIT = 22 #, 01520000=01001140=
|
|
STUFFBIT = 23 #, 01525000=01001150=
|
|
VOIDBIT = 24 #, 01530000=01001160=
|
|
VOIDTBIT = 25 #, 01535000=01001170=
|
|
XREFBIT = 26 #, 01540000=01001171=
|
|
BENDBIT = 27 #, 01545000=01001172=
|
|
CODEFILEBIT = 29 #, 01550000=01001173=
|
|
USEROPINX = 30 #; 01555000=01001173=
|
|
01560000=01001180=
|
|
COMMENT IF A NEW COMPILER-DEFINED OPTION IS ADDED, CHANGE USEROPINX 01565000=01001180=
|
|
AND ADD OPTION IN DEFINES BELOW, IN DOLLARCARD, AND IN 01570000=01001190=
|
|
FILL STATEMENT IN INITIALIZATION OF COMPILER; 01575000=01001200=
|
|
DEFINE 01580000=01001210=
|
|
CHECKTOG = OPTIONWORD.[CHECKBIT:1] #, 01585000=01001220=
|
|
DEBUGTOG = OPTIONWORD.[DEBUGBIT:1] #, 01590000=01001230=
|
|
DECKTOG = OPTIONWORD.[DECKBIT:1] #, 01595000=01001240=
|
|
FORMATOG = OPTIONWORD.[FORMATBIT:1] #, 01600000=01001250=
|
|
INTOG = OPTIONWORD.[INTBIT:1] #, 01605000=01001260=
|
|
LISTATOG = OPTIONWORD.[LISTABIT:1] #, 01610000=01001270=
|
|
LISTOG = OPTIONWORD.[LISTBIT:1] #, 01615000=01001280=
|
|
LISTPTOG = OPTIONWORD.[LISTPBIT:1] #, 01620000=01001290=
|
|
MCPTOG = OPTIONWORD.[MCPBIT:1] #, 01625000=01001300=
|
|
MERGETOG = OPTIONWORD.[MERGEBIT:1] #, 01630000=01001310=
|
|
NESTOG = OPTIONWORD.[NESTBIT:1] #, 01635000=01001320=
|
|
NEWTOG = OPTIONWORD.[NEWBIT:1] #, 01640000=01001330=
|
|
NEWINCL = OPTIONWORD.[NEWINCLBIT:1] #, 01645000=01001340=
|
|
OMITTING = OPTIONWORD.[OMITBIT:1] #, 01650000=01001350=
|
|
PRINTDOLLARTOG = 01655000=01001350=
|
|
OPTIONWORD.[PRINTDOLLARBIT:1] #, 01660000=01001360=
|
|
PRTOG = OPTIONWORD.[PRTBIT:1] #, 01665000=01001370=
|
|
PUNCHTOG = OPTIONWORD.[PUNCHBIT:1] #, 01670000=01001380=
|
|
PURGETOG = OPTIONWORD.[PURGEBIT:1] #, 01675000=01001390=
|
|
SEGSTOG = OPTIONWORD.[SEGSBIT:1] #, 01680000=01001400=
|
|
SEQTOG = OPTIONWORD.[SEQBIT:1] #, 01685000=01001410=
|
|
COMMENT SEQTOG INDICATES RESEQUENCING IS TO BE DONE; 01690000=01001410=
|
|
SEQERRTOG = OPTIONWORD.[SEQERRBIT:1] #, 01695000=01001430=
|
|
SINGLTOG = OPTIONWORD.[SINGLBIT:1] #, 01700000=01001440=
|
|
STUFFTOG = OPTIONWORD.[STUFFBIT:1] #, 01705000=01001450=
|
|
VOIDING = OPTIONWORD.[VOIDBIT:1] #, 01710000=01001460=
|
|
VOIDTAPE = OPTIONWORD.[VOIDTBIT:1] #, 01715000=01001461=
|
|
XREF = OPTIONWORD.[XREFBIT:1] #, 01720000=01001462=
|
|
BEND = OPTIONWORD.[BENDBIT:1] #, 01725000=01001463=
|
|
CODEFILE = OPTIONWORD.[CODEFILEBIT:1] #, 01730000=01001470=
|
|
DUMMY = #; 01735000=01001470=
|
|
BOOLEAN 01740000=01001480=
|
|
NOHEADING; % TRUE IF DATIME HAS NOT BEEN CALLED. 01745000=01001480=
|
|
BOOLEAN 01750000=01001490=
|
|
NEWBASE; % NEW BASENUM FOUND ON A NEW $-CARD. 01755000=01001490=
|
|
INTEGER 01780000=01001530=
|
|
XMODE; % TELLS DOLLARCARD HOW TO SET OPTIONS. 01785000=01001530=
|
|
BOOLEAN 01790000=01001540=
|
|
DOLLARTOG; % TRUE IF SCANNING A DOLLAR CARD. 01795000=01001540=
|
|
INTEGER 01800000=01001550=
|
|
ERRMAX; % COMPILATION STOPS IF EXCEEDED. 01805000=01001550=
|
|
BOOLEAN 01810000=01001560=
|
|
SEQXEQTOG; % GIVE SEQ. NO. WHEN DS-ING OBJ. 01815000=01001560=
|
|
BOOLEAN 01820000=01001570=
|
|
LISTER; % LISTOG OR LISTATOG OR DEBUGTOG. 01825000=01001570=
|
|
ALPHA 01830000=01001580=
|
|
MEDIUM; % INPUT IS: T,C,P,CA,CB,CC. 01835000=01001580=
|
|
INTEGER 01840000=01001590=
|
|
MYCLASS; % USED IN DOLLARCARD EVALUATION. 01845000=01001590=
|
|
REAL 01850000=01001600=
|
|
BATMAN; % USED IN DOLLARCARD EVALUATION. 01855000=01001600=
|
|
ARRAY 01860000=01003000=
|
|
SPECIAL[0:31]; 01865000=01003000=
|
|
COMMENT THIS ARRAY HOLDS THE INTERNAL CODE FOR THE SPECIAL 01870000=01004000=
|
|
CHARACTORS: IT IS FILLED DURING INITIALIZATION; 01875000=01005000=
|
|
ALPHA ARRAY 01880000=01006000=
|
|
IDARRAY[0:127]; 01882000
|
|
ARRAY 01885000=01007000=
|
|
INFO[0:31, 0:255]; 01890000=01007000=
|
|
%***********************************************************************01895000=01007005=
|
|
% X R E F S T U F F 01900000=01007010=
|
|
%***********************************************************************01905000=01007015=
|
|
% 01910000=01007020=
|
|
ARRAY 01915000=01007030=
|
|
XREFAY2[0:29], 01920000=01007030=
|
|
% ARRAY OF ONE WORD REFERENCE RECORDS. 01925000=01007030=
|
|
% THE LAYOUT OF EACH WORD IS 01930000=01007035=
|
|
% 01935000=01007040=
|
|
% .[46:5] TYPE OF REFERENCE 01940000=01007045=
|
|
% = 0 FOR FORWARD DECL 01945000=01007050=
|
|
% = 1 FOR LABEL OCCURENCE 01950000=01007051=
|
|
% = 2 FOR NORMAL DECL 01955000=01007055=
|
|
% = 4 FOR NORMAL REFERENCE 01960000=01007060=
|
|
% = 5 FOR ASSIGNMENT 01965000=01007065=
|
|
% 01970000=01007070=
|
|
% NOTE: THE LOWER ORDER BIT 01975000=01007075=
|
|
% OF THIS FIELD IS ON 01980000=01007080=
|
|
% IF YOU WANT STARS 01985000=01007085=
|
|
% AROUND THIS REFERENCE 01990000=01007090=
|
|
% IN THE XREF 01995000=01007095=
|
|
% 02000000=01007100=
|
|
% .[41:15] IDENTIFIER ID. NO. 02005000=01007105=
|
|
% THIS IS A UNIQUE NUMBER THAT 02010000=01007110=
|
|
% IS ASSIGNED WHEN THE 02015000=01007115=
|
|
% IDENTIFIER IS ENCOUNTERE 02020000=01007120=
|
|
% FOR THE FIRST TIME. 02025000=01007125=
|
|
% 02030000=01007130=
|
|
% .[26:27] SEQUENCE NUMBER 02035000=01007135=
|
|
% 02040000=01007140=
|
|
XREFAY1[0:9], 02045000=01007145=
|
|
% RECORD BUFFER AREA FOR WRITING OUT THE 02050000=01007145=
|
|
% NAME INFORMATION RECORDS, ONE RECORD 02055000=01007150=
|
|
% IS WRITTEN FOR EACH IDENTIFIER IN THE SYMBOL 02060000=01007155=
|
|
% TABLE WHEN THE IDENTIFIER IS PURGED FROM THE 02065000=01007160=
|
|
% SYMBOL TABLE, I.E., WHEN LEAVING THE BLOCK 02070000=01007165=
|
|
% IN WHICH THE IDENTIFIER IS DECLARED. 02075000=01007170=
|
|
% 02080000=01007175=
|
|
% THE LAYOUT OF EACH IS: 02085000=01007180=
|
|
% 02090000=01007185=
|
|
% WORDS 0-7 THE IDENTIFIER WITH BLANK 02095000=01007190=
|
|
% FILE ON THE RIGHT 02100000=01007195=
|
|
% 02105000=01007200=
|
|
% WORD 8 02110000=01007205=
|
|
% .[26:12] SEGMENT NUMBER IN WHICH 02115000=01007210=
|
|
% THIS IDENTIFIER WAS DECLARED02120000=01007215=
|
|
% 02125000=01007220=
|
|
% .[14:15] IDENTIFIER ID. NO. 02130000=01007225=
|
|
% 02135000=01007230=
|
|
% WORD 9 ELBAT WORD 02140000=01007235=
|
|
% 02145000=01007240=
|
|
XINFO[0:31, 0:127];% THIS ARRAY CONTAINS ONE ENTRY FOR EACH ENTRY 02150000=01007245=
|
|
% IN THE INFO TABLE. IF YOU HAVE THE INDEX 02155000=01007250=
|
|
% OF THE ELBAT WORD FOR AN IDENTIFIER IN 02160000=01007255=
|
|
% THE INFO TABLE YOU CAN FIND THE XINFO WORD 02165000=01007260=
|
|
% FOR THE IDENTIFIER BY REFERRING TO: 02170000=01007265=
|
|
% 02175000=01007270=
|
|
% XINFO[INDEX.LINKR,INDEX.LINKC DIV 2] 02180000=01007275=
|
|
% 02185000=01007280=
|
|
% EACH ENTRY CONTAINS: 02190000=01007285=
|
|
% 02195000=01007290=
|
|
% .[26:12] SEGMENT NUMBER IN WHICH 02200000=01007295=
|
|
% THIS IDENTIFIER WAS DECL02205000=01007300=
|
|
% 02210000=01007305=
|
|
% .[14:15] IDENTIFIER ID. NO. 02215000=01007310=
|
|
% IF THIS ID. NO. IS ZERO 02220000=01007315=
|
|
% THEN XREF WAS NOT ON 02225000=01007320=
|
|
% AT THE TIME THE IDENT 02230000=01007325=
|
|
% WAS DECLARED AND ALL 02235000=01007330=
|
|
% FUTURE REFERENCES WILL 02240000=01007335=
|
|
% BE DISCARDED. 02245000=01007340=
|
|
% 02250000=01007345=
|
|
INTEGER 02255000=01007350=
|
|
% 02260000=01007350=
|
|
XREFPT, 02265000=01007355=
|
|
% CONTAINS INDEX OF NEXT AVAILABLE SLOT IN 02270000=01007355=
|
|
% XREFAY2, WHEN THIS BECOMES GREATER 02275000=01007360=
|
|
% THAN 30 THE CURRENT ARRAY IS DUMPED TO DISK 02280000=01007365=
|
|
% AND XREFPT IS RESET TO ZERO. 02285000=01007370=
|
|
% 02290000=01007375=
|
|
XLUN; % THIS VARIABLE CONTROLS THE ASSIGNING OF 02295000=01007380=
|
|
% ID. NO. TO IDENTIFIERS. IT IS INCREMENTED 02300000=01007385=
|
|
% EACH TIME A NEW IDENTIFIER IS ENCOUNTERED. 02305000=01007390=
|
|
% 02310000=01007395=
|
|
DEFINE 02315000=01007400=
|
|
% 02320000=01007400=
|
|
SEGNOF = [26:12] #, 02325000=01007405=
|
|
% FIELDS IN XINFO ENTRIES AND WORD 8 OF 02330000=01007405=
|
|
IDNOF = [14:15] #, 02335000=01007410=
|
|
% IDENTIFIER RECORDS. 02340000=01007410=
|
|
% 02345000=01007415=
|
|
TYPEREF = [46:5] #, 02350000=01007420=
|
|
% FIELDS OF REFERENCE WORDS 02355000=01007420=
|
|
REFIDNOF = [41:15] #, 02360000=01007425=
|
|
% 02365000=01007425=
|
|
SEQNOF = [26:27] #, 02370000=01007430=
|
|
% 02375000=01007430=
|
|
% 02380000=01007435=
|
|
XREFIT(INDEX, SEQNO, REFTYPE) = % DEFINE TO ADD INFO TO REF TABLE 02385000=01007440=
|
|
BEGIN 02390000=01007445=
|
|
IF XREF THEN 02395000=01007445=
|
|
CROSSREFIT(INDEX, SEQNO, REFTYPE); 02400000=01007445=
|
|
END #, 02405000=01007450=
|
|
% 02410000=01007450=
|
|
XMARK(REFTYPE) = % DEFINE TO CHANGE LAST ENTRY IN REF TABLE TO A 02415000=01007455=
|
|
BEGIN 02420000=01007460=
|
|
IF XREF THEN 02425000=01007460=
|
|
XREFAY2[XREFPT-1].TYPEREF:= REFTYPE 02430000=01007460=
|
|
END #, 02435000=01007465=
|
|
% 02440000=01007465=
|
|
XREFDUMP(INDEX) = % DEFINE TO DUMP SYMBOL TABLE INFO FOR IDENTIFIER02445000=01007470=
|
|
BEGIN 02450000=01007475=
|
|
IF DEFINING.[46:1] THEN 02455000=01007475=
|
|
CROSSREFDUMP(INDEX); 02460000=01007475=
|
|
END #, 02465000=01007480=
|
|
% 02470000=01007480=
|
|
XREFINFO[INDEX] = % DEFINE TO TRANSLATE INFO ROW AND COLUMN TO 02475000=01007481=
|
|
XINFO[(INDEX).LINKR, (INDEX).LINKC DIV 2] #, 02480000=01007482=
|
|
% XINFO ROW AND COL 02485000=01007482=
|
|
% 02490000=01007483=
|
|
FORWARDREF = 0 #, 02495000=01007485=
|
|
% DEFINES FOR DIFFERENT REFERENCE TYPES 02500000=01007485=
|
|
LBLREF = 1 #, 02505000=01007486=
|
|
% 02510000=01007486=
|
|
DECLREF = 2 #, 02515000=01007490=
|
|
% 02520000=01007490=
|
|
NORMALREF = 4 #, 02525000=01007495=
|
|
% 02530000=01007495=
|
|
ASSIGNREF = 5 #; % 02535000=01007500=
|
|
ARRAY 02540000=01007600=
|
|
BEGINSTACK[0:255]; 02545000=01007600=
|
|
INTEGER 02550000=01007600=
|
|
BSPOINT; 02555000=01007600=
|
|
BOOLEAN 02560000=01007650=
|
|
DEFINING; 02565000=01007650=
|
|
COMMENT INFO CONTAINS ALL THE INFORMATION ABOUT A GIVEN IDENTIFIER 02570000=01008000=
|
|
OR RESERVED WORD. THE FIRST WORD OF A GIVEN ENTRY IS 02575000=01009000=
|
|
THE INTERNAL CODE (OR ELBAT WORD AS IT IS USUALLY 02580000=01010000=
|
|
CALLED). THE SECOND WORD CONTAINS THE FORWARD BIT (IN 02585000=01011000=
|
|
[46:1]) FOR PROCEDURES, THE LINK TO PREVIOUS ENTRY (IN 02590000=01012000=
|
|
[43:8]). THE NUMBER OF CHARACTORS IN THE ALPHA REPRESENTA-02595000=01013000=
|
|
TION (IN [35:6]), AND THE FIRST 5 CHARACTERS OF ALPHA. 02600000=01014000=
|
|
SUCCEDING WORDS CONTAIN THE REMAINING CHARACTORS OF ALPHA,02605000=01015000=
|
|
FOLLOWED BY ANY ADDITIONAL INFORMATION. THE ELBAT WORD 02610000=01016000=
|
|
AND THE ALPHA FOR ANY QUANTITY ARE NOT SPLIT ACROSS A ROW 02615000=01017000=
|
|
OF INFO. FOR PURPOSES OF FINDING AN IDENTIFIER OR 02620000=01018000=
|
|
RESERVED WORD THE QUANTITIES ARE SCATTERED INTO 125 02625000=01019000=
|
|
DIFERENT LISTS OR STACKES. WHICH STACK CONTAINS A QUANTITY02630000=01020000=
|
|
IS GIVEN BY TAKING NAAAAA MOD 125 WHERE N IS THE NUMBER 02635000=01021000=
|
|
OF CHARACTORS AND AAAAA IS THE FIRST 5 CHARACTORS OF 02640000=01022000=
|
|
ALPHA, FILLED IN WITH ZEROS FROM THE RIGHT IF NEEDED. 02645000=01023000=
|
|
THIS NUMBER IS CALLED THE SCRAMBLE NUMBER OR INDEX. 02650000=01024000=
|
|
THE FIRST ROW OF INFO IS USED FOR OTHER PURPOSES. THE 02655000=01025000=
|
|
RESERVED WORDS OCCUPY THE SECOND ROW. IT IS FILLED DURING 02660000=01026000=
|
|
INITIALIZATION; 02665000=01027000=
|
|
02670000=01028000=
|
|
COMMENT INFO FORMAT 02675000=01028000=
|
|
FOLLOWING IS A DESCRIPTION OF THE FORMAT OF ALL TYPES OF ENTRIES 02680000=01029000=
|
|
ENTERED IN INFO: 02685000=01030000=
|
|
THE FIRST WORD OF ALL ENTRIES IS THE ELBAT WORD. 02690000=01031000=
|
|
THE INCR FIELD ([20:8]) CONTAINS AN INCREMENT WHICH WHEN 02695000=01032000=
|
|
ADDED TO THE CURRENT INDEX INTO INFO YELDSAN INDEX TO ANY 02700000=01033000=
|
|
ADDITIONAL INFO (IF ANY) FOR THIS ENTRY. 02705000=01034000=
|
|
E.G. IF THE INDEX IS IX THEN INFO[(IX+INCR).LINKR,(IX+INCR). 02710000=01035000=
|
|
LINKC] WILL CONTAIN THE FIRST WORD OF ADDITIONAL INFO. 02715000=01036000=
|
|
THE LINK FIELD OF THE ELBAT WORD IN INFO IS DIFFERENT FROM 02720000=01037000=
|
|
THAT OF THE ENTRY IN ELBAT PUT IN BY TABLE.THE ENTRY IN ELBAT 02725000=01038000=
|
|
POINTS TO ITS OWN LOCATION (RELATIVE) IN INFO. 02730000=01039000=
|
|
THE LINK IN INFO POINTS TO THE PREVIOUS ENTRY E.G., THE 02735000=01040000=
|
|
LINK FROM STACKHEAD WHICH THE CURRENT ENTRY REPLACED. 02740000=01041000=
|
|
FOR SIMPLICITY,I WILL CONSIDER INFO TO BE A ONE DIMENSIONAL 02745000=01042000=
|
|
ARRAY,SO THAT THE BREAKING UP OF THE LINKS INTO ROW AND COLUMN 02750000=01043000=
|
|
WILL NOT DETRACT FROM THE DISCUSSION. 02755000=01044000=
|
|
ASSUME THAT THREE IDENTIFIERS A,B,AND C "SCRAMBLE" INTO 02760000=01045000=
|
|
THE SAME STACKHEAD LOCATION IN THE ORDER OF APPEARANCE. 02765000=01046000=
|
|
FURTHER ASSUME THERE ARE NO OTHER ENTRIES CONNECTED TO 02770000=01047000=
|
|
THIS STACKHEAD INDEX. LET THIS STACKHEAD LOCATION BE 02775000=01048000=
|
|
S[L] 02780000=01049000=
|
|
NOW THE DECLARATION 02785000=01050000=
|
|
BEGIN REAL A,B,C IS ENCOUNTERED 02790000=01051000=
|
|
IF THE NEXT AVAILABLE INFO SPACE IS CALLED NEXTINFO 02795000=01052000=
|
|
THEN A IS ENTERED AS FOLLOWS:(ASSUME AN ELBAT WORD T HAS BEEN 02800000=01053000=
|
|
CONSTRUCTED FOR A) 02805000=01054000=
|
|
T.LINK:= S[L]. (WHICH IS ZERO AT FIRST). 02810000=01055000=
|
|
INFO[NEXTINFO]:=T. S[L]:=NEXTINFO. 02815000=01056000=
|
|
NEXTINFO:=NEXTINFO+NUMBER OF WORDS IN THIS 02820000=01057000=
|
|
ENTRY. 02825000=01058000=
|
|
NOW S[L] POINTS TO THE ENTRY FOR A IN INFO AND THE ENTRY 02830000=01059000=
|
|
ITSELF CONTAINS THE STOP FLAG ZERO. 02835000=01060000=
|
|
B IS ENTERED SIMILARLY TO A. 02840000=01061000=
|
|
NOW S[L] POINTS TO THE ENTRY FOR B AND IT POINTS TO THE 02845000=01062000=
|
|
ENTRY FOR A. 02850000=01063000=
|
|
SIMILARLY,AFTER C IS ENTERED 02855000=01064000=
|
|
S[L] POINTS TO C,WHOSE ENTRY POINTS TO B WHOSE ENTRY 02860000=01065000=
|
|
POINTS TO A. 02865000=01066000=
|
|
THE SECOND WORD OF EACH ENTRY IN INFO IS MADE UP AS FOLLOWS: 02870000=01067000=
|
|
FWDPT =[46:1],THIS TELLS WHETHER A PROCEDURE WAS DECLARED 02875000=01068000=
|
|
FORWARD.IT IS RESET AT THE TIME OF ITS ACTUAL 02880000=01069000=
|
|
FULL DECLARATION. 02885000=01070000=
|
|
PURPT =[43:8] THIS GIVES A DECREMENT WHICH GIVES THE RELATIVE 02890000=01071000=
|
|
INDEX TO THE PREVIOUS INFO ENTRY WHEN SUBTRACTED 02895000=01072000=
|
|
FROM THE CURRENT ENTRY INDEX. 02900000=01073000=
|
|
[35:6] TELLS THE NUMBER OF CHARACTERS IN THE ENTRY.(<64) 02905000=01074000=
|
|
[29:30] CONTAINS THE FIRST FIVE ALPHA CHARACTERS OF THE ENTRY 02910000=01075000=
|
|
AND SUCCEEDING WORDS CONTAIN ALL OVERFLOW IF NEEDED. 02915000=01076000=
|
|
THESE WORDS CONTAIN 8 CHARACTERS EACH,LEFT JUSTIFIED. 02920000=01077000=
|
|
THUS,AN ENTRY FOR SYMBOL FOLLOWED BY AN ENTRY 02925000=01078000=
|
|
FOR X WOULD APPEAR AS FOLLOWS: 02930000=01079000=
|
|
INFO[I] = ELBATWRD (MADE FOR SYMBOL) 02935000=01080000=
|
|
I+1 = OP6SYMBO (P DEPENDS ON PREVIOUS ENTRY) 02940000=01081000=
|
|
I+2 = L 02945000=01082000=
|
|
I+3 = ELBATWRD (MADE FOR X) 02950000=01083000=
|
|
I+4 = 031X 02955000=01084000=
|
|
THIS SHOWS THAT INFO[I-P] WOULD POINT TO THE BEGINNING OF 02960000=01085000=
|
|
THE ENTRY BEFORE SYMBOL, AND 02965000=01086000=
|
|
INFO[I+3-3] POINTS TO THE ENTRY FOR SYMBOL. 02970000=01087000=
|
|
ALL ENTRIES OF IDNETIFIERS HAVE THE INFORMATION DESCRIBED ABOVE 02975000=01088000=
|
|
THAT IS,THE ELBAT WORD FOLLOWED BY THE WORD CONTAING THE FIRST 02980000=01089000=
|
|
FIVE CHARACTERS OF ALPHA,AND ANY ADDITIONAL WORDS OF ALPHA IF 02985000=01090000=
|
|
NECESSARY. 02990000=01091000=
|
|
THIS IS SUFFICIENT FOR ENTRIES OF THE FOLLOWING TYPES, 02995000=01092000=
|
|
REAL 03000000=01093000=
|
|
BOOLEAN 03005000=01094000=
|
|
INTEGER 03010000=01095000=
|
|
ALPHA 03015000=01096000=
|
|
FILE 03020000=01097000=
|
|
FORMAT 03025000=01098000=
|
|
LIST 03030000=01099000=
|
|
OTHER ENTRIES REQUIRE ADDITIONAL INFORMATION. 03035000=01100000=
|
|
ARRAYS: 03040000=01101000=
|
|
THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 03045000=01102000=
|
|
DIMENSIONS(IN THE LOW ORDER PART).[7:8] 03050000=01103000=
|
|
EACH SUCCEEDING WORD CONTAINS INFORMATION ABOUT EACH LOWER 03055000=01104000=
|
|
BOUND IN ORDER OF APPEARANCE,ONE WORD FOR EACH LOWER BOUND. 03060000=01105000=
|
|
THESE WORDS ARE MADE UP AS FOLLOWS: 03065000=01106000=
|
|
[24:12] =ADD OPERATOR SYLLABLE (0101) OR 03070000=01107000=
|
|
SUB OPERATOR SYLLABLE (0301) CORRESPONDING 03075000=01108000=
|
|
RESPECTIVELY TO WHETHER THE LOWER BOUND IS 03080000=01109000=
|
|
TO BE ADDED TO THE SUBSCRIPT IN INDEXING OR 03085000=01110000=
|
|
SUBTRACTED. 03090000=01111000=
|
|
[12:11] =11 BIT ADDRESS OF LOWER BOUND,IF THE LOWER BOUND 03095000=01112000=
|
|
REQUIRES A PRT OR STACK CELL,OTHERWISE THE BIT 03100000=01113000=
|
|
35 IS IGNORED AND THE NEXT TEN BITS([11:10]) 03105000=01114000=
|
|
REPRESENT THE ACTUAL VALUE OF THE LOWER BOUND 03110000=01115000=
|
|
[1:2] =00 OR 10 DEPENDING ON WHETHER THE [12:11] VALUE 03115000=01116000=
|
|
IS A LITERAL OR OPERAND,RESPECTIVELY. 03120000=01117000=
|
|
PROCEDURES: 03125000=01118000=
|
|
THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 03130000=01119000=
|
|
PARAMETERS [7:8] 03135000=01120000=
|
|
IF A STREAM PROCEDURE THEN THIS WORD CONTAINS ALSO IN 03140000=01121000=
|
|
[34:11] ENDING PRT ADDRESS FOR LABELS, 03145000=01122000=
|
|
[40:6] NO OF LABELS REQUIRING PRT ADDRESSES, AND [46:6] NUMBER 03150000=01123000=
|
|
OF LOCALS. 03155000=01124000=
|
|
SUCCEEDING WORDS (ONE FOR EACH FORMAL PARAMETER,IN ORDER 03160000=01125000=
|
|
OF APPEARANCE IN FORMAL PARAPART) ARE 03165000=01126000=
|
|
ELBAT WORDS SPECIFYING TYPE OF EACH PARAMETER AND WHETHER 03170000=01127000=
|
|
VALUE OR NOT([37:1]). 03175000=01128000=
|
|
THE ADDRESS([31:11]) IS THE F- ADDRESS FOR EACH. 03180000=01129000=
|
|
IF THE PARAMETER IS AN ARRAY THEN THE INCR FIELD([20:8]) 03185000=01130000=
|
|
CONTAINS THE NUMBER OF DIMENSIONS,OTHERWISE INCR IS MEANINGLESS. 03190000=01131000=
|
|
LINK([12:13]) IS MEANINGLESS. 03195000=01132000=
|
|
IF A STREAM PROCEDURE THEN THE CLASS OF EACH PARAMETER IS 03200000=01133000=
|
|
THAT OF LOCAL ID OR FILE ID, DEPENDING ON WHETHER OR NOT A RELEASE03205000=01134000=
|
|
IS DONE IN THE STREAM PROCEDURE. 03210000=01135000=
|
|
LABELS: 03215000=01136000=
|
|
AT DECLARATION TIME THE ADDITIONAL INFO CONTAINS 0. THE SIGN 03220000=01137000=
|
|
BIT TELLS WHETHER OR NOT THE DEFINITION POINT HAS BEEN REACHED. 03225000=01138000=
|
|
IF SIGN = 0, THEN [11:12] CONTAINS AN ADDRESS IN CODEARRAY OF A 03230000=01139000=
|
|
LIST OF FORWARD REFERENCES TO THIS LABEL. THE END OF LIST FLAG IS03235000=01140000=
|
|
0. IF SIGN =0, THEN [11:12] CONTAINS L FOR THIS LABEL. 03240000=01141000=
|
|
SWITCHES: 03245000=01142000=
|
|
THE FIELD [11:12] CONTAINS L FOR THE BEGINNING OF SWITCH DECLAR- 03250000=01143000=
|
|
ATION. [23:12] CONTAINS L FOR FIRST SIMPLE REFERENCE TO SWITCH. 03255000=01144000=
|
|
IF SWITCH IS NOT SIMPLE, IT IS MARKED FORMAL. HERE SIMPLE MEANS 03260000=01145000=
|
|
NO POSSIBILITY OF JUMPING OUT OF A BLOCK. ;03265000=01146000=
|
|
DEFINE 03270000=01147000=
|
|
MON = [46:1] #, 03275000=01148000=
|
|
CLASS = [45:7] #, 03280000=01149000=
|
|
FORMAL = [38:1] #, 03285000=01150000=
|
|
VO = [37:1] #, 03290000=01151000=
|
|
LVL = [36:5] #, 03295000=01152000=
|
|
ADDRESS = [31:11] #, 03300000=01153000=
|
|
INCR = [20:8] #, 03305000=01154000=
|
|
LINK = [12:13] #, 03310000=01154100=
|
|
DYNAM = [36:16] #, 03315000=01154200=
|
|
SBITF = [26:6] #, 03320000=01154200=
|
|
% STARTING BIT FOR FIELD ID. 03325000=01154200=
|
|
NBITF = [20:6] #, 03330000=01154300=
|
|
% NUMBER OF BITS FOR FIELD ID. 03335000=01154300=
|
|
LINKR = [12:5] #, 03340000=01156000=
|
|
LINKC = [7:8] #; 03345000=01156000=
|
|
03350000=01157000=
|
|
COMMENT THESE DEFINES ARE USED TO PICK APART THE ELBAT WORD. 03355000=01157000=
|
|
MON IS THE BIT WHICH IS TURNED ON IF: 03360000=01158000=
|
|
1. THE QUANTITY IS TO BE MONITORED, OR 03365000=01158100=
|
|
2. THE QUANTITY IS A PARAMETRIC DEFINE AND NOT 03370000=01158200=
|
|
A DEFINE WITHOUT PARAMETERS. 03375000=01158300=
|
|
CLASS IS THE PRINCIPAL IDENTIFICATION OF A GIVEN 03380000=01159000=
|
|
QUANTITY. 03385000=01160000=
|
|
FORMAL IS THE BIT WHICH IS ON IF THE QUANTITY IS A FORMAL 03390000=01161000=
|
|
PARAMETER. 03395000=01162000=
|
|
VO IS THE VALUE-OWN BIT. IF FORMAL = 1 THEN THE BIT 03400000=01163000=
|
|
DISTINGUISHES VALUE PARAMETERS FROM OTHERS. IF 03405000=01164000=
|
|
FORMAL = 0 THEN THE BIT DISTINGUISHES OWN VARIABLES 03410000=01165000=
|
|
FROM OTHERS. 03415000=01166000=
|
|
LVL GIVES THE LEVEL AT WHICH A QUANTITY WAS DECLARED. 03420000=01167000=
|
|
ADDRESS GIVES THE STACK OR PRT ADDRESS. 03425000=01168000=
|
|
DYNAM IS USED INSTEAD OF LVL AND ADDRESS FOR DEFINE AND 03430000=01168100=
|
|
DEFINE PARAMETER ENTRIES, ONLY, IT IS AN INDEX 03435000=01168200=
|
|
INTO THE ARRAY CONTAINING THE DEFINE TEXT. 03440000=01168300=
|
|
THEREFORE, WHEN THE COMPILER CHECKS TO SEE IF A 03445000=01168400=
|
|
DEFINE WAS DECLARED B4 IN THE SAME BLOCK, IT DOES 03450000=01168500=
|
|
NOT USE THE LVL FIELD, BUT MAKES USE OF NINF00 03455000=01168600=
|
|
INCR GIVES A RELATIVE LINK TO ANY ADDITIONAL INFORMATION 03460000=01169000=
|
|
NEEDED, RELATIVE TO THE LOCATION IN INFO. 03465000=01170000=
|
|
LINK CONTAINS A LINK TO THE LOCATION IN INFO IF THE 03470000=01171000=
|
|
QUANTITY LIES IN ELBAT, OTHERWISE IT LINKS TO THE 03475000=01172000=
|
|
NEXT ITEM IN THE STACK. ZERO IS AN END FLAG. 03480000=01173000=
|
|
LINKR AND LINKC ARE SUBDIVISIONS OF LINK.; 03485000=01174000=
|
|
03490000=01175000=
|
|
COMMENT CLASSES FOR ALL QUANTITIES - OCTAL CLASS IS IN COMMENT; 03495000=01175000=
|
|
COMMENT CLASSES FOR IDENTIFIERS; 03500000=01176000=
|
|
DEFINE 03505000=01177000=
|
|
UNKNOWNID = 00 #, COMMENT 000; 03510000=01177000=
|
|
STLABID = 01 #, COMMENT 001; 03515000=01178000=
|
|
LOCLID = 02 #, COMMENT 002; 03520000=01179000=
|
|
DEFINEDID = 03 #, COMMENT 003; 03525000=01180000=
|
|
LISTID = 04 #, COMMENT 004; 03530000=01181000=
|
|
FRMTID = 05 #, COMMENT 005; 03535000=01182000=
|
|
SUPERFRMTID = 06 #, COMMENT 006; 03540000=01183000=
|
|
FILEID = 07 #, COMMENT 007; 03545000=01184000=
|
|
SUPERFILEID = 08 #, COMMENT 010; 03550000=01185000=
|
|
SWITCHID = 09 #, COMMENT 011; 03555000=01186000=
|
|
PROCID = 10 #, COMMENT 012; 03560000=01187000=
|
|
INTRNSICPROCID = 03565000=01188000=
|
|
11 #, COMMENT 013; 03570000=01188000=
|
|
STRPROCID = 12 #, COMMENT 014; 03575000=01189000=
|
|
BOOSTRPROCID = 13 #, COMMENT 015; 03580000=01190000=
|
|
REALSTRPROCID = 14 #, COMMENT 016; 03585000=01191000=
|
|
ALFASTRPROCID = 15 #, COMMENT 017; 03590000=01192000=
|
|
INTSTRPROCID = 16 #, COMMENT 020; 03595000=01193000=
|
|
BOOPROCID = 17 #, COMMENT 021; 03600000=01194000=
|
|
REALPROCID = 18 #, COMMENT 022; 03605000=01195000=
|
|
ALFAPROCID = 19 #, COMMENT 023; 03610000=01196000=
|
|
INTPROCID = 20 #, COMMENT 024; 03615000=01197000=
|
|
BOOID = 21 #, COMMENT 025; 03620000=01198000=
|
|
REALID = 22 #, COMMENT 026; 03625000=01199000=
|
|
ALFAID = 23 #, COMMENT 027; 03630000=01200000=
|
|
INTID = 24 #, COMMENT 030; 03635000=01201000=
|
|
BOOARRAYID = 25 #, COMMENT 031; 03640000=01202000=
|
|
REALARRAYID = 26 #, COMMENT 032; 03645000=01203000=
|
|
ALFARRAYID = 27 #, COMMENT 033; 03650000=01204000=
|
|
INTARRAYID = 28 #, COMMENT 034; 03655000=01205000=
|
|
LABELID = 29 #, COMMENT 035; 03660000=01206000=
|
|
03665000=01207000=
|
|
COMMENT CLASSES FOR PRIMARY BEGINNERS; 03670000=01207000=
|
|
TRUTHV = 30 #, COMMENT 036; 03675000=01208000=
|
|
NONLITNO = 31 #, COMMENT 037; 03680000=01209000=
|
|
LITNO = 32 #, COMMENT 040; 03685000=01210000=
|
|
STRNGCON = 33 #, COMMENT 041; 03690000=01211000=
|
|
LEFTPAREN = 34 #, COMMENT 042; 03695000=01212000=
|
|
03700000=01213000=
|
|
COMMENT CLASSES FOR ALL DECLARATORS; 03705000=01213000=
|
|
DECLARATORS = 35 #, COMMENT 043; 03710000=01214000=
|
|
03715000=01215000=
|
|
COMMENT CLASSES FOR STATEMENT BEGINNERS 03720000=01215000=
|
|
READV = 36 #, COMMENT 044; 03725000=01216000=
|
|
WRITEV = 37 #, COMMENT 045; 03730000=01217000=
|
|
SPACEV = 38 #, COMMENT 046; 03735000=01218000=
|
|
CLOSEV = 39 #, COMMENT 047; 03740000=01219000=
|
|
LOCKV = 40 #, COMMENT 050; 03745000=01220000=
|
|
REWINDV = 41 #, COMMENT 051; 03750000=01221000=
|
|
DOUBLEV = 42 #, COMMENT 052; 03755000=01222000=
|
|
FORV = 43 #, COMMENT 053; 03760000=01223000=
|
|
WHILEV = 44 #, COMMENT 054; 03765000=01224000=
|
|
DOV = 45 #, COMMENT 055; 03770000=01225000=
|
|
UNTILV = 46 #, COMMENT 056; 03775000=01226000=
|
|
ELSEV = 47 #, COMMENT 057; 03780000=01227000=
|
|
ENDV = 48 #, COMMENT 060; 03785000=01228000=
|
|
FILLV = 49 #, COMMENT 061; 03790000=01229000=
|
|
SEMICOLON = 50 #, COMMENT 062; 03795000=01230000=
|
|
IFV = 51 #, COMMENT 063; 03800000=01231000=
|
|
GOV = 52 #, COMMENT 064; 03805000=01232000=
|
|
RELEASEV = 53 #, COMMENT 065; 03810000=01233000=
|
|
BEGINV = 54 #, COMMENT 066; 03815000=01234000=
|
|
03820000=01235000=
|
|
COMMENT CLASSES FOR STREAM RESERVED WORDS; 03825000=01235000=
|
|
SIV = 55 #, COMMENT 067; 03830000=01236000=
|
|
DIQ = 56 #, COMMENT 070; 03835000=01237000=
|
|
CIV = 57 #, COMMENT 071; 03840000=01238000=
|
|
TALLYV = 58 #, COMMENT 072; 03845000=01239000=
|
|
DSV = 59 #, COMMENT 073; 03850000=01240000=
|
|
SKIPV = 60 #, COMMENT 074; 03855000=01241000=
|
|
JUMPV = 61 #, COMMENT 075; 03860000=01242000=
|
|
DBV = 62 #, COMMENT 076; 03865000=01243000=
|
|
SBV = 63 #, COMMENT 077; 03870000=01244000=
|
|
TOGGLEV = 64 #, COMMENT 100; 03875000=01245000=
|
|
SCV = 65 #, COMMENT 101; 03880000=01246000=
|
|
LOCV = 66 #, COMMENT 102; 03885000=01247000=
|
|
DCV = 67 #, COMMENT 103; 03890000=01248000=
|
|
LOCALV = 68 #, COMMENT 104; 03895000=01249000=
|
|
LITV = 69 #, COMMENT 105; 03900000=01250000=
|
|
TRNSFER = 70 #, COMMENT 106; 03905000=01251000=
|
|
03910000=01252000=
|
|
COMMENT CLASSES FOR VARIOUS MISCELLANEOUS QUANTITIES; 03915000=01252000=
|
|
COMMENTV = 71 #, COMMENT 107; 03920000=01253000=
|
|
FORWARDV = 72 #, COMMENT 110; 03925000=01254000=
|
|
STEPV = 73 #, COMMENT 111; 03930000=01255000=
|
|
THENV = 74 #, COMMENT 112; 03935000=01256000=
|
|
TOV = 75 #, COMMENT 113; 03940000=01257000=
|
|
VALUEV = 76 #, COMMENT 114; 03945000=01258000=
|
|
WITHV = 77 #, COMMENT 115; 03950000=01259000=
|
|
COLON = 78 #, COMMENT 116; 03955000=01260000=
|
|
COMMA = 79 #, COMMENT 117; 03960000=01261000=
|
|
CROSSHATCH = 80 #, COMMENT 120; 03965000=01262000=
|
|
LFTBRKET = 81 #, COMMENT 121; 03970000=01263000=
|
|
PERIOD = 82 #, COMMENT 122; 03975000=01264000=
|
|
RTBRKET = 83 #, COMMENT 123; 03980000=01265000=
|
|
RTPAREN = 84 #, COMMENT 124; 03985000=01266000=
|
|
03990000=01267000=
|
|
COMMENT CLASSES FOR OPERATORS; 03995000=01267000=
|
|
NOTOP = 85 #, COMMENT 125; 04000000=01268000=
|
|
ASSIGNOP = 86 #, COMMENT 126; 04005000=01269000=
|
|
AMPERSAND = 87 #, COMMENT 127; 04010000=01270000=
|
|
EQVOP = 88 #, COMMENT 130; 04015000=01271000=
|
|
IMPOP = 89 #, COMMENT 131; 04020000=01272000=
|
|
OROP = 90 #, COMMENT 132; 04025000=01273000=
|
|
ANDOP = 91 #, COMMENT 133; 04030000=01274000=
|
|
RELOP = 92 #, COMMENT 134; 04035000=01275000=
|
|
ADOP = 93 #, COMMENT 135; 04040000=01276000=
|
|
MULOP = 94 #, COMMENT 136; 04045000=01277000=
|
|
FACTOP = 95 #, COMMENT 137; 04050000=01278000=
|
|
STRING = 99 #, COMMENT 143; 04055000=01278050=
|
|
FIELDID = 125 #, COMMENT 175; 04060000=01278090=
|
|
FAULTID = 126 #, COMMENT 176; 04065000=01278100=
|
|
SUPERLISTID = 127 #, COMMENT 177; 04070000=01278500=
|
|
04075000=01279000=
|
|
COMMENT SUBCLASSES FOR DECLARATORS (KEPT IN ADDRESS); 04080000=01279000=
|
|
OWNV = 01 #, COMMENT 01; 04085000=01280000=
|
|
SAVEV = 02 #, COMMENT 02; 04090000=01281000=
|
|
BOOV = 03 #, COMMENT 03; 04095000=01282000=
|
|
REALV = 04 #, COMMENT 04; 04100000=01283000=
|
|
ALFAV = 05 #, COMMENT 05; 04105000=01284000=
|
|
INTV = 06 #, COMMENT 06; 04110000=01285000=
|
|
LABELV = 07 #, COMMENT 07; 04115000=01286000=
|
|
DUMPV = 08 #, COMMENT 10; 04120000=01287000=
|
|
LISTV = 09 #, COMMENT 11; 04125000=01288000=
|
|
OUTV = 10 #, COMMENT 12; 04130000=01289000=
|
|
INV = 11 #, COMMENT 13; 04135000=01290000=
|
|
MONITORV = 12 #, COMMENT 14; 04140000=01291000=
|
|
SWITCHV = 13 #, COMMENT 15; 04145000=01292000=
|
|
PROCV = 14 #, COMMENT 16; 04150000=01293000=
|
|
ARRAYV = 15 #, COMMENT 17; 04155000=01294000=
|
|
FORMATV = 16 #, COMMENT 20; 04160000=01295000=
|
|
FILEV = 17 #, COMMENT 21; 04165000=01296000=
|
|
STREAMV = 18 #, COMMENT 22; 04170000=01297000=
|
|
DEFINEV = 19 #, COMMENT 23; 04175000=01298000=
|
|
AUXMEMV = 20 #, COMMENT 24; 04180000=01298500=
|
|
FIELDV = 21 #; 04185000=01298600=
|
|
COMMENT 25; 04190000=01298600=
|
|
DEFINE 04195000=01299000=
|
|
ADES = 0 #, 04200000=01299000=
|
|
LDES = 2 #, 04205000=01299000=
|
|
PDES = 1 #, 04210000=01299000=
|
|
CHAR = 3 #; 04215000=01299000=
|
|
REAL 04220000=01300000=
|
|
TIME1; 04225000=01300000=
|
|
INTEGER 04230000=01301000=
|
|
SCRAM; 04235000=01301000=
|
|
COMMENT SCRAM CONTAINS THE SCRAMBLE INDEX FOR THE LAST IDENTIFIER 04240000=01302000=
|
|
OR RESERVED WORD SCANNED; 04245000=01303000=
|
|
ARRAY 04250000=01303500=
|
|
FILEATTRIBUTES[0:30]; 04255000=01303500=
|
|
ALPHA ARRAY 04260000=01304000=
|
|
ACCUM[0:10]; 04265000=01304000=
|
|
COMMENT ACCUM HOLDS THE ALPHA AND CHARACTER COUNT OF THE LAST 04270000=01305000=
|
|
SCANNED ITEM IN A FORM COMPATIBLE WITH ITS APPEARANCE 04275000=01306000=
|
|
IN INFO. THAT IS ACCUM[1] = 00NAAAAA, ACCUM[I] , I> 1, 04280000=01307000=
|
|
HAS ANY ADDITIONAL CHARACTERS. ACCUM[0] IS USED FOR 04285000=01308000=
|
|
THE ELBAT WORD BY THE ENTER ROUTINES; 04290000=01309000=
|
|
ARRAY 04295000=01310000=
|
|
STACKHEAD, 04300000=01310000=
|
|
SUPERSTACK[0:124]; 04305000=01310000=
|
|
COMMENT STACKHEAD[N] CONTAINS AN INDEX INTO INFO, THIS INDEX 04310000=01311000=
|
|
POINTS TO THE TOP ITEM IN THE N-TH STACK (ACTUALLY A 04315000=01311100=
|
|
LINKED-LIST). SUPERSTACK IS NOT A TELEVISION STAR, 04320000=01311200=
|
|
BUT RATHER A SPECIAL STACKHEAD WHICH ALWAYS POINTS 04325000=01311300=
|
|
AT CERTAIN COMMONLY USED RESERVED WORDS. THOSE 04330000=01311400=
|
|
WORDS POINTED TO (IN THREE GROUPS) ARE: 04335000=01311500=
|
|
1) ALPHA, LABEL, OWN, REAL, SAVE 04340000=01311600=
|
|
2) AND, DIV, EQV, IMP, MOD, NOT, OR, TRUE 04345000=01311700=
|
|
3) BEGIN, DO, ELSE, END, FOR, GO, IF, 04350000=01311800=
|
|
STEP, THEN, TO, UNTIL, WHILE, WRITE. 04355000=01311900=
|
|
FOR MORE INFORMATION ON THE USE OF SUPERSTACKM SEE 04360000=01312000=
|
|
COMMENTS IN THE TABLE PROCEDURE. ; 04365000=01312100=
|
|
INTEGER 04370000=01313000=
|
|
COUNT; 04375000=01313000=
|
|
COMMENT COUNT CONTAINS THE NUMBER OF CHARACTORS OF THE LAST ITEM 04380000=01314000=
|
|
SCANNED; 04385000=01315000=
|
|
ALPHA 04390000=01316000=
|
|
Q; 04395000=01316000=
|
|
COMMENT Q CONTAINS ACCUM[1] FOR THE LAST IDENTIFIER OR RESERVED 04400000=01317000=
|
|
WORD SCANNED; 04405000=01318000=
|
|
ARRAY 04410000=01319000=
|
|
ELBAT[0:76]; 04415000=01319000=
|
|
INTEGER 04420000=01319000=
|
|
I, 04425000=01319000=
|
|
NXTELBT; 04430000=01319000=
|
|
COMMENT ELBAT IS AN ARRAY HOLDING ELBAT WORDS FOR RECENTLY SCANNED 04435000=01320000=
|
|
QUANTITIES. THE TABLE ROUTINE MAINTAINS THIS ARRAY. 04440000=01321000=
|
|
(ELBAT IS TABLE SPELLED BACKWARDS.) THE TABLE ROUTINE 04445000=01322000=
|
|
GUARANTIES THAT ELBAT ALWAYS CONTAINS THE ELBAT WORDS 04450000=01323000=
|
|
FOR THE LAST 10 QUANTITIES SCANNED. NXTELBT IS AN INDEX 04455000=01324000=
|
|
POINTING TO THE NEXT AVAILABLE WORD IN ELBAT. I IS AN 04460000=01325000=
|
|
INDEX USED BY THE REST OF THE COMPILER TO FETCH THINGS 04465000=01326000=
|
|
FROM ELBAT. I IS ALSO MAINTAINED BY THE TABLE ROUTINE; 04470000=01327000=
|
|
INTEGER 04475000=01328000=
|
|
ELCLASS; 04480000=01328000=
|
|
COMMENT ELCLASS USUALLY CONTAINS ELBAT[I].CLASS; 04485000=01329000=
|
|
INTEGER 04490000=01329100=
|
|
LASTELCLASS; 04495000=01329100=
|
|
COMMENT LASTELCLASS IS SET TO PREV ELCLASS BY NEXTENT; 04500000=01329200=
|
|
INTEGER 04505000=01330000=
|
|
FCR, 04510000=01330000=
|
|
NCR, 04515000=01330000=
|
|
LCR, 04520000=01330000=
|
|
CLCR; 04530000=01330000=
|
|
ARRAY REFERENCE 04540000
|
|
SBUFF[0]; % CURRENT SOURCE INPUT BUFFER 04540100
|
|
COMMENT FCR CONTAINS ABSOLUTE ADDRESS OF THE FIRST CHARACTOR OF 04545000=01332000=
|
|
THE CARD IMAGE CURRENTLY BEING SCANNED, NCR THE ADDRESS 04550000=01333000=
|
|
OF THE NEXT CHARACTOR TO BE SCANNED, AND LCR THE LAST 04555000=01334000=
|
|
CHARACTOR (COLUMN 73). CLCR CONTAIN ADDRESS OF 04560000=01335000=
|
|
THE LAST CHARACTER IN THE CARD BUFFERS; 04565000=01336000=
|
|
DEFINE 04575000=01338000=
|
|
BUFFSIZE = 56 #; 04580000=01338000=
|
|
INTEGER 04585000=01339050=
|
|
GTIX; 04590000=01339050=
|
|
ARRAY 04595000=01340000=
|
|
TEN[0:69]; 04600000=01340000=
|
|
INTEGER 04605000=01340050=
|
|
NOOFARRAYS; COMMENT NOOFARRAYS IS THE SUM OF ARRAYS 04610000
|
|
DECLARED IN THE OBJECT PROGRAM; 04620000=01340060=
|
|
INTEGER 04625000=01340070=
|
|
IOBUFFSIZE; COMMENT IOBUFFSIZE IS FILE SPACE NEEDED. 04630000
|
|
GTI1 EQUALS TOTAL CORE STORAGE REQD; 04640000=01340080=
|
|
REAL 04645000=01340500=
|
|
FSAVE; COMMENT SAVES FRACTIONAL PART EXPONENT WHEN CONV NUM; 04650000
|
|
INTEGER 04660000=01341000=
|
|
IDLOC, 04665000=01341000=
|
|
IDLOCTEMP; 04670000=01341000=
|
|
ARRAY 04675000=01342000=
|
|
PDPRT[0:31, 0:63]; 04680000=01342000=
|
|
COMMENT PDPRT CONTAINS INFORMATION FOR USE AT THE END OF COMPILATION 04685000=01343000=
|
|
IT IS BUILT BY PROGDESCBLDR.THIS INFORMATION IS USED TO 04690000=01344000=
|
|
BUILD THE SEGMENT DICTIONARY AND PRT. THERE ARE TWO TYPES 04695000=01345000=
|
|
OF ENTRIES IN THIS TABLE AS DESCRIBED BELOW. 04700000=01346000=
|
|
TYPE 1 ENTRY 04705000=01347000=
|
|
BIT POSITION KIND OF ENTRY 04710000=01348000=
|
|
0-3 ZERO 04715000=01349000=
|
|
4 MODE BIT(1=CHAR 0=WORD) 04720000=01350000=
|
|
5 ARGUMENT BIT 04725000=01351000=
|
|
6-7 ZERO 04730000=01352000=
|
|
8-17 RELATIVE ADDRESS IN PRT 04735000=01353000=
|
|
18-27 RELATIVE ADDRESS IN SEGMENT 04740000=01354000=
|
|
28-37 SEGMENT NUMBER 04745000=01355000=
|
|
38-47 ZERO 04750000=01356000=
|
|
TYPE 2 ENTRY 04755000=01357000=
|
|
BIT POSITION KIND OF ENTRY 04760000=01358000=
|
|
0 EMPTY 04765000=01359000=
|
|
1 ON IFF TYPE 2 (DATA) SEGMENT 04770000=01360000=
|
|
2 ON IFF INTRINSIC PROCEDURE 04775000=01361000=
|
|
3 ON IFF "PSEUDO-SAVE" SEGMENT 04780000=01361050=
|
|
4-12 EMPTY 04785000=01361100=
|
|
13-27 DISK ADDRESS OR INTRINSIC NUMBER 04790000=01361200=
|
|
28-37 SEGMENT NUMBER 04795000=01361300=
|
|
38-47 NUMBER OF WORDS IN SEGMENT 04800000=01362000=
|
|
THERE IS ONLY ONE TYPE 2 ENTRY PER SEGMENT.THE TYPE 2 ENTRY 04805000=01363000=
|
|
IS DISTINGUISHED BY THE NON ZERO FIELD IN BITS 38-47. THIS 04810000=01364000=
|
|
ENTRY IS USED TO BUILD THE DRUM DESCRIPTOR IN THE SEGMENT 04815000=01365000=
|
|
DICTIONARY.TYPE 2 ENTRIES ARE PUT INTO PDPRT WHEN ANY SEGMENT04820000=01366000=
|
|
IS READY FOR OUTPUT; 04825000=01367000=
|
|
04830000=01367010=
|
|
COMMENT THE FORMAT OF SEGMENT DICTIONARY AND PRT ENTRIES AT THE END OF 04835000=01367010=
|
|
COMPILATION IS AS FOLLOWS: 04840000=01367020=
|
|
SEGMENT DICTIONARY ENTRY (IE., SD[I] FOR SEGMENT NUM. I) 04845000=01367030=
|
|
BIT POSITIONS CONTENTS OF FIELD 04850000=01367040=
|
|
[47:1] EMPTY 04855000=01367050=
|
|
[46:1] ON IFF TYPE 2 (DATA) SEGMENT 04860000=01367060=
|
|
[45:1] ON IFF INTRINSIC PROCEDURE 04865000=01367070=
|
|
[44:1] EMPTY (USED BY MCP PRESENCE-BIT ROUTINE) 04870000=01367075=
|
|
[43:1] ON IFF "PSEUDO-SAVE" SEGMENT 04875000=01367080=
|
|
[42:1] EMPTY (USED BY MCP OVERLAY ROUTINE) 04880000=01367085=
|
|
[39:10] R-RELATIVE LINK TO PRT ENTRY FOR THIS SEGMENT 04885000=01367090=
|
|
[29:15] SIZE (NOT USED FOR INTRINSICS) 04890000=01367100=
|
|
[14:15] DISK ADDRESS OR INTRINSIC NUMBER 04895000=01367110=
|
|
PRT ENTRY (IE., PROGRAM DESCRIPTOR FOR SEGMENT NUMBER I) 04900000=01367120=
|
|
BIT POSITIONS CONTENTS OF FIELD 04905000=01367130=
|
|
[47:4] 1101 (BINARY) NON-PRESENT PROG, DESC. IDBITS 04910000=01367140=
|
|
[43:2] MODE AND ARGUMENT BITS 04915000=01367150=
|
|
[41:1] STOPPER (ON IFF THIS ENTRY LINKS TO SEG. DICT.)04920000=01367160=
|
|
[40:11] IF [41:1] THEN I ELSE R-RELATIVE LINK TO 04925000=01367170=
|
|
ANOTHER PRT ENTRY FOR SEGMENT I 04930000=01367180=
|
|
[29:15] I 04935000=01367190=
|
|
[14:15] RELATIVE ADDRESS WITHIN THE SEGMENT OF THIS DESC;04940000=01367200=
|
|
04945000=01367210=
|
|
COMMENT THE CONTENTS OF RELATIVE DISK SEGMENT ZERO OF THE CODE FILE ARE:04950000=01367210=
|
|
WORD CONTENTS 04955000=01367220=
|
|
0 RELATIVE LOCATION OF SEGMENT DICTIONARY 04960000=01367230=
|
|
1 SIZE OF SEGMENT DICTIONARY 04965000=01367240=
|
|
2 RELATIVE LOCATION OF PRT 04970000=01367250=
|
|
3 SIZE OF PRT 04975000=01367260=
|
|
4 RELATIVE LOCATION OF FILE PARAMETER BLOCK 04980000=01367270=
|
|
5 SIZE OF FILE PARAMETER BLOCK 04985000=01367280=
|
|
6 SEGMENT NUMBER OF FIRST SEGMENT TO EXECUTE (IE., 1) 04990000=01367290=
|
|
7 N 04995000=01367300=
|
|
. O U 05000000=01367310=
|
|
. T S 05005000=01367320=
|
|
. E 05010000=01367330=
|
|
29 D; 05015000=01367340=
|
|
INTEGER 05020000=01368000=
|
|
PDINX; 05025000=01368000=
|
|
COMMENT THIS IS THE INDEX FOR PDPRT; 05030000=01368000=
|
|
INTEGER 05035000=01369000=
|
|
SGAVL; 05040000=01369000=
|
|
COMMENT NEXT AVAILABLE SEGMENT NUMBER; 05045000=01369000=
|
|
INTEGER 05050000=01370000=
|
|
SGNO; 05055000=01370000=
|
|
COMMENT THIS IS THE CURRENT SEGMENT NUMBER; 05060000=01370000=
|
|
ARRAY 05065000=01371000=
|
|
EDOC[0:7, 0:127], 05070000=01371000=
|
|
COP[0:63], 05075000=01371000=
|
|
WOP[0:127], 05080000=01371000=
|
|
POP[0:10]; 05085000=01371000=
|
|
COMMENT THE EMIT ROUTINES PLACE EACH SYLLABLE INTO THE EDOC ARRAY 05090000=01372000=
|
|
AS SPECIFIED BY "L". 05095000=01373000=
|
|
IF DEBUGTOG IS TRUE, COP, WOP, AND POP ARE FILLED 05100000=01374000=
|
|
THE BCD FOR THE OPERATORS,OTHERWISE THEY ARE NOT USED; 05105000=01375000=
|
|
REAL 05110000=01376000=
|
|
LASTENTRY; 05115000=01376000=
|
|
COMMENT LASTENTRY IS USED BY EMITNUM AND CONSTANTCLEAN. IT POINTS 05120000=01377000=
|
|
INTO INFO[0,*] AT THE NEXT AVAILABLE CELL FOR CONSTANTS; 05125000=01378000=
|
|
BOOLEAN 05130000=01379000=
|
|
MRCLEAN; 05135000=01379000=
|
|
COMMENT NO CONSTANTCLEAN ACTION TAKES PLACE WHILE MRCLEAN IS 05140000=01380000=
|
|
FALSE. THIS FEATURE IS USED BY BLOCK BECAUSE OF THE 05145000=01381000=
|
|
POSSIBILITY THAT CONSTANTCLEAN WILL USE INFO[NEXTINFO] 05150000=01382000=
|
|
DURING AN ARRAY DECLARATION ; 05155000=01383000=
|
|
REAL 05160000=01384000=
|
|
GT1, 05165000=01384000=
|
|
GT2, 05170000=01384000=
|
|
GT3, 05175000=01384000=
|
|
GT4, 05180000=01384000=
|
|
GT5; 05185000=01384000=
|
|
INTEGER 05190000=01384500=
|
|
GTI1; 05195000=01384500=
|
|
COMMENT THESE VARIABLES ARE USED FOR TEMPORARY STORAGE; 05200000=01385000=
|
|
INTEGER 05205000=01386000=
|
|
RESULT; 05210000=01386000=
|
|
COMMENT THIS VARIABLE IS USED FOR A DUAL PURPOSE BY THE TABLE 05215000=01387000=
|
|
ROUTINE AND THE SCANNER. THE TABLE ROUTINE USES THIS 05220000=01388000=
|
|
VARIABLE TO SPECIFY SCANNER OPERATIONS AND THE SCANNER 05225000=01389000=
|
|
USES IT TO INFORM THE TABLE ROUTINE OF THE ACTION TAKEN; 05230000=01390000=
|
|
INTEGER 05235000=01391000=
|
|
LASTUSED; 05240000=01391000=
|
|
COMMENT LASTUSED IS A VARIABLE THAT CONTROLS THE ACTION OF 05245000=01392000=
|
|
READACARD, THE ROUTINE WHICH READS CARDS AND INITIALIZES 05250000=01393000=
|
|
OR PREPARES THE CARD FOR THE SCANNER. 05255000=01394000=
|
|
LASTUSED LAST CARD READ FROM 05260000=01394500=
|
|
-------- ------------------- 05265000=01394600=
|
|
1 CARD READER ONLY, NO TAPE. 05270000=01395000=
|
|
2 CARD READER, TAPE AND CARD MERGE. 05275000=01396000=
|
|
3 TAPE, TAPE AND CARD MERGE. 05280000=01397000=
|
|
4 INITIALIZATION ONLY, CARD ONLY. 05285000=01398000=
|
|
5 CARD READER - MAKCAST, MERGING. 05290000=01398100=
|
|
6 TAPE - MAKCAST, MERGING. 05295000=01398200=
|
|
; 05300000=01398300=
|
|
BOOLEAN 05305000=01399000=
|
|
LINKTOG; 05310000=01399000=
|
|
COMMENT LINKTOG IS FALSE IF THE LAST THING EMITTED IS A LINK, 05315000=01400000=
|
|
OTHERWISE IT IS TRUE; 05320000=01401000=
|
|
INTEGER 05325000=01402000=
|
|
LEVEL, 05330000=01402000=
|
|
FRSTLEVEL, 05335000=01402000=
|
|
SUBLEVEL, 05340000=01402000=
|
|
MODE; 05345000=01402000=
|
|
COMMENT THESE VARIABLES ARE MAINTAINED BY THE BLOCK ROUTINE TO KEEP 05350000=01403000=
|
|
TRACK OF LEVELS OF DEFINITION, LEVEL GIVES THE DEPTH OF 05355000=01404000=
|
|
NESTING IN DEFINITION. WHERE EACH BLOCK AND EACH PROCEDURE05360000=01405000=
|
|
GIVES RISE TO A NEW LEVEL. SUBLEVEL GIVES THE LEVEL OF 05365000=01406000=
|
|
THE PARAMETERS OF THE PROCEDURE CURRENTLY BEING COMPILED. 05370000=01407000=
|
|
FRSTLEVEL IS THE LEVEL OF THE PARAMETERS OF THE MOST 05375000=01408000=
|
|
GLOBAL OF THE PROCEDURES CURRENTLY BEING COMPILED. MODE 05380000=01409000=
|
|
IS THE CURRENT DEPTH OF THE PROCEDURE IN WHICH WE ARE 05385000=01410000=
|
|
NESTED (AT COMPILE TIME); 05390000=01411000=
|
|
INTEGER 05395000=01411010=
|
|
AUXMEMREQ; 05400000=01411010=
|
|
BOOLEAN 05405000=01411020=
|
|
SAVEPRTOG; 05410000=01411020=
|
|
COMMENT VARIABLES USED TO CONTROL SEGMENT DICTIONARY 05415000=01411030=
|
|
ENTRIES FOR "PSEUDO-SAVE" PROCEDURES. 05420000=01411040=
|
|
AUXMEMREQ IS THE AMOUNT OF AUXILIARY MEMORY 05425000=01411050=
|
|
WHICH WOULD BE REQUIRED IF ALL OF THESE 05430000=01411060=
|
|
"PSEUDO-SAVE" ROUTINES ARE TO BE OVERLAID 05435000=01411070=
|
|
TO AUXILIARY MEMORY. SAVEPRTOG IS USED 05440000=01411080=
|
|
TO COMMUNICATE TO THE OUTSIDE WORLD THAT A 05445000=01411090=
|
|
ROUTINE IS "PSEUDO-SAVE". 05450000=01411100=
|
|
; 05455000=01411110=
|
|
BOOLEAN 05460000=01412000=
|
|
ERRORTOG; 05465000=01412000=
|
|
COMMENT ERRORTOG IS TRUE IF MESSAGES ARE CURRENTLY ACCEPTABLE TO THE05470000=01413000=
|
|
ERROR ROUTINES. ERRORCOUNT IS THE COUNT OF ERROR MSSGS; 05475000=01414000=
|
|
BOOLEAN 05480000=01415000=
|
|
ENDTOG; 05485000=01415000=
|
|
COMMENT ENDTOG TELLS THE TABLE TO ALLOW 05490000=01415000=
|
|
COMMENT TO BE PASSED BACK TO COMPOUNDTAIL; 05495000=01416000=
|
|
BOOLEAN 05500000=01416500=
|
|
STREAMTOG; % STREAMTOG IS TRUE IF WE ARE COMPILING A 05505000=01416500=
|
|
% STREAM STATEMENT IN ALGOL, TSPOL, OR ESPOL: 05510000=01417000=
|
|
% IT IS USED TO CONTROL COUMPOUNDTAIL. 05515000=01417500=
|
|
% IT IS ALSO USED WHEN WE ARE COMPILING A 05520000=01418000=
|
|
% "FILL" STATEMENT (SEE "FILLSTMT" PROCEDURE) OR 05525000=01418500=
|
|
% AN ALPHA (BCL) STRING (SEE "TABLE" PROCEDURE). 05530000=01419000=
|
|
DEFINE 05535000=01420000=
|
|
FS = 1 #, 05540000=01420000=
|
|
FP = 2 #, 05545000=01420000=
|
|
FL = 3 #, 05550000=01420000=
|
|
FR = 4 #, 05555000=01420000=
|
|
FA = 5 #, 05560000=01420500=
|
|
FI = 6 #, 05565000=01420500=
|
|
FIO = 7 #; 05570000=01420500=
|
|
COMMENT THESE DEFINES ARE USED WHEN CALLING THE VARIABLE ROUTINE. 05575000=01421000=
|
|
THEIR PURPOSES IS TO TELL VARIABLE WHO IS CALLING. 05580000=01422000=
|
|
THEIR MEANING IS: 05585000=01423000=
|
|
FS MEANS FROM STATEMENT, 05590000=01424000=
|
|
FP MEANS FROM PRIMARY, 05595000=01425000=
|
|
FL MEANS FROM LIST, 05600000=01426000=
|
|
FR MEANS FROM FOR, 05605000=01427000=
|
|
FIO MEANS FROM IODEC. 05610000=01427250=
|
|
FA MEANS FROM ACTUALPARAPART. 05615000=01427500=
|
|
FI MEANS FUNNY CALL FROM STATUS (IMPFUN); 05620000=01427600=
|
|
INTEGER 05625000=01428000=
|
|
L; 05630000=01428000=
|
|
COMMENT L IS THE LOCATION OF THE NEXT SYLLABLE TO BE EMITTED; 05635000=01429000=
|
|
DEFINE 05640000=01430000=
|
|
BLOCKCTR = 16 #, 05645000=01430000=
|
|
JUNK = 17 #, 05650000=01430000=
|
|
XITR = 18 #, 05655000=01430000=
|
|
LSTRTN = 19 #; 05660000=01430000=
|
|
COMMENT THESE DEFINES NAME THE FIXED PRT CELLS USED BY ALL OBJECT 05665000=01431000=
|
|
PROGRAMS. 05670000=01432000=
|
|
BLOCKCTR IS A TALLY WHICH IS INCREMENT EACH TIME A 05675000=01433000=
|
|
BLOCK IS ENTERED WHICH OBTAINS STORAGE, OR CONTAINS WITH 05680000=01434000=
|
|
IN IT A NON-LOCAL GO TO. EACH TIME SUCH A BLOCK IS LEFT 05685000=01435000=
|
|
BLOCKCTR IS DECREMENTED. THE PRIMARY PURPOSE SERVED IS T305690000=01436000=
|
|
INFORM THE MCP OF THE STORAGE WHICH NEEDS TO BE RETURNED. 05695000=01437000=
|
|
JUNK IS AN ALL-PURPOSE CELL FOR STORING VALUES USED 05700000=01438000=
|
|
IN LINKAGE BETWEEN VARIOUS ROUTINES AND FOR INTEGERIZING 05705000=01439000=
|
|
THINGS ON THE TOP OF THE STACK. 05710000=01440000=
|
|
XITR CONTAINS A CHARACTOR MODE PROGRAM DESCRIPTOR 05715000=01441000=
|
|
WHICH POINTS AT AN EXIT CHARACTOR MODE OPERATOR. IT IS 05720000=01442000=
|
|
USED TO CLEAN UP THE STACK AFTER A MKS HAS BEEN GIVEN. 05725000=01443000=
|
|
THIS A USFULL WAY TO ELIMINATE MANY REDUNDENT ITEMS IN THE05730000=01444000=
|
|
STACK. SEE FOR EXAMPLE THE ARRAY DECLARATIONS. 05735000=01445000=
|
|
LSTRTN IS A CELL USED AS LINKAGE BETWEEN A LIST AND 05740000=01446000=
|
|
THE I-O FORMATING ROUTINES. THE FIRST SYLLABLES EXECUTED 05745000=01447000=
|
|
BY A LIST ARE: 1) OPDC LSTRTN, 2) BFW, THIS CARRIES YOU 05750000=01448000=
|
|
TO THE PROPER ITEM IN THE LIST. THE FORMATING ROUTINES 05755000=01449000=
|
|
SET LSTRTN INITIALLY TO ZERO. THE LIST ITSELF UPDATES 05760000=01450000=
|
|
LSTRTN. THE LIST EXHAUSTED FLAG IS -1; 05765000=01451000=
|
|
DEFINE 05770000=01452000=
|
|
BTYPE = 1 #, 05775000=01452000=
|
|
DTYPE = 2 #, 05780000=01452000=
|
|
ATYPE = 3 #; 05785000=01452000=
|
|
COMMENT THESE DEFINES NAME THE VALUES USED BY THE EXPRESSION 05790000=01453000=
|
|
ROUTINES IF REPORT THE TYPE OF EXPRESSION COMPILED. 05795000=01454000=
|
|
BTYPE IS FOR BOOLEAN, DTYPE FOR DESIGNATIONAL, AND ATYPE 05800000=01455000=
|
|
FOR ARITHMETIC EXPRESSIONS; 05805000=01456000=
|
|
BOOLEAN 05810000=01457000=
|
|
TB1; 05815000=01457000=
|
|
COMMENT TB1 IS A TEMPORARY BOOLEAN VARIABLE; 05820000=01458000=
|
|
INTEGER 05825000=01459000=
|
|
JUMPCTR; 05830000=01459000=
|
|
COMMENT JUMPCTR IS A VARIABLE USED FOR COMMUNICATION BETWEEN BLOCK 05835000=01460000=
|
|
AND GENGO. IT GIVES HIGHEST LEVEL TO WHICH A JUMP HAS 05840000=01461000=
|
|
BEEN MADE FROM WITHIN A THE PRESENTLY BEING COMPILED 05845000=01462000=
|
|
SEGMENT. THE BLOCK COMPILES CODE TO INCREMENT AND DECRE- 05850000=01463000=
|
|
MENT THE BLOCKCTR ON THE BASIS OF JUMPCTR AT COMPLETION 05855000=01464000=
|
|
OF COMPILATION OF A SEGMENT - I.E. THE BLOCKCTR IS TALLIED 05860000=01465000=
|
|
IF LEVEL = JUMPCTR; 05865000=01466000=
|
|
BOOLEAN 05870000=01467000=
|
|
GOTOG; 05875000=01467000=
|
|
COMMENT GOTOG IS SET FALSE BY GOSTMT. DEXP SETS GOTOG TRUE IF ANY 05880000=01468000=
|
|
LABEL OR SWITCH IS NON LOCAL. GOSTMT FINDS OUT BY THIS 05885000=01469000=
|
|
MEANS WHETHER OR NOT A CALL ON MCP IS NECESSARY; 05890000=01470000=
|
|
REAL 05895000=01471000=
|
|
STLB; 05900000=01471000=
|
|
COMMENT STLB IS USED BY VARIABLE AND ACTUALPARAPART TO COMMUNICATE 05905000=01472000=
|
|
THE LOWER BOUND INFORMATION FOR THE LAST DIMENSION OF THE 05910000=01473000=
|
|
ARRAY INVOLVED IN A ROW DESIGNATOR. THE FORMAT OF THE 05915000=01474000=
|
|
INFORMATION IS THAT OF INFO. STLB IS ALSO SOMETIMES USED 05920000=01475000=
|
|
FOR TEMPORARY STORAGE; 05925000=01476000=
|
|
DEFINE 05930000=01477000=
|
|
BUMPL = L:= L+2 #; 05935000=01477000=
|
|
COMMENT BUMPL IS USED MOSTLY TO PREPARE A FORWARD JUMP; 05940000=01478000=
|
|
DEFINE 05945000=01479000=
|
|
IDMAX = LABELID #; 05950000=01479000=
|
|
COMMENT IDMAX IS THE MAXIMUM CLASS NUMBER FOR IDENTIFIERS; 05955000=01480000=
|
|
INTEGER 05960000=01481000=
|
|
DEFINECTR, 05965000=01481000=
|
|
DEFINEINDEX; 05970000=01481000=
|
|
ALPHA ARRAY 05975000=01481100=
|
|
DEFINFO[0:89]; 05980000=01481100=
|
|
ALPHA ARRAY 05985000=01481200=
|
|
TEXT[0:31, 0:255]; 05990000=01481200=
|
|
INTEGER 05995000=01481300=
|
|
DEFSTACKHEAD; % STACKHEAD FOR DEFINE PARAMETERS 06000000=01481300=
|
|
INTEGER 06005000=01481400=
|
|
NEXTTEXT; % NEDEX OF NEXT DEFINE TEXT 06010000=01481400=
|
|
REAL 06015000=01482000=
|
|
JOINFO, COMMENT POINTS TO PSEUDO LABEL FOR JUMP OUTS; 06020000=01482000=
|
|
LPRT, COMMENT SHOWS LOCATION OF THE LAST LABEL IN THE PRT ; 06025000=01483000=
|
|
NESTLEVEL, COMMENT COUNTS NESTING FOR GO TO AND JUMP OUTS; 06030000=01484000=
|
|
JUMPLEVEL; 06035000=01485000=
|
|
COMMENT NUMBER OF LEVELS TO BE JUMPED OUT; 06040000=01485000=
|
|
06045000=01486000=
|
|
COMMENT THE REALS ABOVE ARE FOR STREAM STATEMENT; 06050000=01486000=
|
|
ARRAY 06055000=01487000=
|
|
MACRO[0:35]; 06060000=01487000=
|
|
COMMENT MACRO IS FILLED WITH SYLLABLES FOR STREAM STATEMENT; 06065000=01488000=
|
|
REAL 06070000=01489000=
|
|
P, COMMENT CONTAINS NUMBER OF FORMALS FOR STREAM PROCS; 06075000=01489000=
|
|
Z; COMMENT CONTAINS 1ST WORD OF INFO FOR STREAM FUNCTIONS; 06080000=01490000=
|
|
ALPHA ARRAY 06090000=01491000=
|
|
DEFINEARRAY[0:34]; 06092000
|
|
COMMENT THESE VARIABLES ARE USED TO CONTROL ACTION OF THE DEFINE. 06095000=01492000=
|
|
DEFINECTR COUNTS DEPTH OF NESTING OF DEFINE-# PAIRS. 06100000=01493000=
|
|
THE CROSSHATCH PART OF THE TABLE ROUTINE USES DEFINECTR 06105000=01494000=
|
|
TO DETERMINE THE MEANING OF A CROSSHATCH. DEFINEINDEX IS 06110000=01495000=
|
|
THE NEXT AVAILABLE CELL IN THE DEFINEARRAY. THE DEFINE- 06115000=01496000=
|
|
ARRAY HOLDS THE ALPHA OF THE DEFINE BEING RECREATED AND 06120000=01497000=
|
|
THE PREVIOUS VALUES OF LASTUSED, LCR, AND NCR; 06125000=01498000=
|
|
INTEGER 06130000=01499000=
|
|
BEGINCTR; 06135000=01499000=
|
|
COMMENT BEGINCTR GIVES THE NUMBER OF UNMATCHED BEGINS. IT IS USED 06140000=01500000=
|
|
FOR ERROR CONTROL ONLY; 06145000=01501000=
|
|
INTEGER 06150000=01502000=
|
|
DIALA, 06155000=01502000=
|
|
DIALB; 06160000=01502000=
|
|
COMMENT THESE VARIABLES GIVE THE LAST VALUE TO WHICH A AND B WERE 06165000=01503000=
|
|
DIALED. THIS GIVES SOME LOCAL OPTIMIZATION. EMITD 06170000=01504000=
|
|
WORRIES ABOUT THIS. OTHER ROUTINES CAUSE A LOSS OF MEMORY 06175000=01505000=
|
|
BY SETTING DIALA AND DIALB TO ZERO; 06180000=01506000=
|
|
BOOLEAN 06185000=01522000=
|
|
RRB1; COMMENT RRB1---RRBN ARE BOOLEAN VARIABLES THAT SERVE THE 06190000=01522000=
|
|
SAME FUNCTION AS RR1---RRN FOR REAL VARIABLES. SEE 06200000=01523000=
|
|
COMMENT AT RR1; 06205000=01524000=
|
|
BOOLEAN 06210000=01525000=
|
|
RRB2; COMMENT SEE COMMENT AT RRB1 DECLARATION; 06215000=01525000=
|
|
DEFINE 06225000=01526000=
|
|
ARRAYMONFILE = [20:11] #; COMMENT ARRAYMONFILE IS THE DEFINE FOR 06230000=01526000=
|
|
THE ADDRESS OF THE FILE DESCRIPTOR IN 06240000=01527000=
|
|
THE FIRST WORD OF ADDITIONAL INFO; 06245000=01528000=
|
|
DEFINE 06250000=01529000=
|
|
SVARMONFILE = [10:11] #; COMMENT MONITORFILE IS THE DEFINE FOR 06255000=01529000=
|
|
THE ADDRESS OF THE FILE DESCRIPTOR IN 06265000=01530000=
|
|
INFO FOR MONITORED SIMPLE VARIABLES; 06270000=01531000=
|
|
DEFINE 06275000=01532000=
|
|
NODIMPART = [7:8] #;COMMENT THE FIRST ADDITIONAL WORD OF INFO 06280000=01532000=
|
|
FOR ARRAYS CONTAINS THE NUMBER OF DIMENSIONS06290000=01533000=
|
|
IN NODIMPART; 06295000=01534000=
|
|
DEFINE 06300000=01535000=
|
|
LABLMONFILE = [34:11] #; COMMENT LABLMONFILE DESIGNATES THE BIT 06305000=01535000=
|
|
POSITION IN THE FIRST WORD OF ADDITIONAL 06315000=01536000=
|
|
INFO THAT CONTAINS THE MONITOR FILE 06320000=01537000=
|
|
ADDRESS FOR LABELS; 06325000=01538000=
|
|
DEFINE 06330000=01539000=
|
|
SWITMONFILE = [34:11] #; COMMENT SWITMONFILE DESIGNATES THE BIT 06335000=01539000=
|
|
POSITION IN THE FIRST WORD OF ADDITIONAL 06345000=01540000=
|
|
INFO THAT CONTAINS THE MONITOR FILE 06350000=01541000=
|
|
ADDRESS FOR LABELS; 06355000=01542000=
|
|
DEFINE 06360000=01543000=
|
|
FUNCMONFILE = [20:11] #; COMMENT FUNCMONFILE DESIGNATES THE BIT 06365000=01543000=
|
|
POSITION IN THE FIRST WORD OF ADDITIONAL 06375000=01544000=
|
|
INFO THAT CONTAINS THE MONITOR FILE 06380000=01545000=
|
|
ADDRESS FOR LABELS; 06385000=01546000=
|
|
DEFINE 06390000=01547000=
|
|
DUMPEE = [45:11] #; 06395000=01547000=
|
|
COMMENT THE DUMPEE FIELD IN THE FIRST 06400000=01547000=
|
|
ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 06405000=01548000=
|
|
THE ADDRESS OF THE COUNTER THAT IS INCREMENTED 06410000=01549000=
|
|
EACH TIME THE LABEL IS PASSED IF THAT LABEL 06415000=01550000=
|
|
APPEARS IN A DUMP DECLARATION; 06420000=01551000=
|
|
DEFINE 06425000=01552000=
|
|
DUMPOR = [23:11] #; 06430000=01552000=
|
|
COMMENT THE DUMPOR FIELD IN THE FIRST 06435000=01552000=
|
|
ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 06440000=01553000=
|
|
THE ADDRESS OF THE ROUTINE THAT IS GENERATED 06445000=01554000=
|
|
FROM THE DUMP DECLARATION THAT IN TURN CALLS 06450000=01555000=
|
|
THE PRINTI ROUTINE; 06455000=01556000=
|
|
DEFINE 06460000=01556100=
|
|
CHUNK = 180 #; 06465000=01556100=
|
|
FILE 06470000=01556200=
|
|
CODE(KIND=DISK, MAXRECSIZE=30, FRAMESIZE=48, 06475000=01556200=
|
|
AREAS=20, AREASIZE=CHUNK, FILEUSE=OUT, PROTECTION=SAVE); 06475100
|
|
FILE 06480000=01557000=
|
|
CARD(KIND=DISK, DEPENDENTSPECS, FILEUSE=IN); 06485000=01557000=
|
|
FILE 06490000=01559000=
|
|
LINE(KIND=PRINTER, MAXRECSIZE=20, FRAMESIZE=48, FILEUSE=OUT); 06492000
|
|
ARRAY 06495000=01559010=
|
|
LIN[0:20]; COMMENT PRINT OUTPUT BUILT IN LIN; 06500000=01559010=
|
|
INTEGER 06510000=01559020=
|
|
DA; 06515000=01559020=
|
|
INTEGER 06520000
|
|
CARDRECSIZE; % FRAMESIZE UNITS 06520100
|
|
ARRAY 06605000=01561056=
|
|
CBUFF[0:9]; % INPUT BUFFER. 06606000
|
|
ARRAY 06608000
|
|
CODEBUFF[0:29]; % CODE FILE RECORD AREA 06608100
|
|
FILE 06640000=01561085=
|
|
DSK1(KIND=DISK, MAXRECSIZE=10, BLOCKSIZE=30, FRAMESIZE=48, 06645000=01561085=
|
|
AREAS=20, AREASIZE=816); 06645100
|
|
FILE 06650000=01561087=
|
|
DSK2(KIND=DISK, MAXRECSIZE=30, FRAMESIZE=48, 06655000=01561087=
|
|
AREAS=20, AREASIZE=450); 06655100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07176000
|
|
REAL 07180000=01562000=
|
|
C; 07185000=01562000=
|
|
COMMENT C CONTAINS ACTUAL VALUE OF LAST CONSTANT SCANNED; 07190000=01563000=
|
|
REAL 07195000=01564000=
|
|
T; 07200000=01564000=
|
|
COMMENT T IS A TEMPORARY CELL; 07205000=01565000=
|
|
INTEGER 07210000=01566000=
|
|
TCOUNT; 07215000=01566000=
|
|
COMMENT TCOUNT IS A VARIABLE WHICH HOLDS A PREVIOUS VALUE OF COUNT 07220000=01567000=
|
|
FOR THE USE OF CONVERT; 07225000=01568000=
|
|
REAL 07230000=01568500=
|
|
STACKCT; 07235000=01568500=
|
|
DEFINE 07240000=01569000=
|
|
LOGI = 443 #, 07245000=01570000=
|
|
EXPI = 440 #, 07250000=01571000=
|
|
XTOTHEI = 480 #, 07255000=01572000=
|
|
GOTOSOLVER = 484 #, 07260000=01573000=
|
|
PRINTI = 477 #, 07265000=01573100=
|
|
MERGEI = 500 #, 07270000=01574000=
|
|
POWERSOFTEN = 670 #, 07275000=01575000=
|
|
LASTSEQUENCE = 166 #, 07280000=01576000=
|
|
LASTSEQROW = 2 #, 07285000=01577000=
|
|
INTERPTO = 461 #, 07290000=01577500=
|
|
SUPERMOVER = 555 #, 07295000=01578000=
|
|
CHARI = 465 #, 07300000=01579000=
|
|
INTERPTI = 469 #, 07305000=01579100=
|
|
SORTI = 473 #, 07310000=01579200=
|
|
DIALER = 559 #, 07315000=01579300=
|
|
FILATTINT = 563 #, 07320000=01579350=
|
|
POWERALL = 567 #, 07325000=01579355=
|
|
SPECIALMATH = 570 #, 07330000=01580000=
|
|
SORTA = 673 #; 07335000=01580000=
|
|
COMMENT THESE DEFINES ARE USED TO TALK TO GNAT. THEY GIVE THE INDEX07340000=01581000=
|
|
IN INFO OF THE CORRESPONDING ROUTINE; 07345000=01582000=
|
|
INTEGER 07350000=01583000=
|
|
KOUNT, 07355000=01583000=
|
|
BUFFACCUM; 07360000=01583000=
|
|
INTEGER 07365000=01584000=
|
|
FILENO; 07370000=01584000=
|
|
BOOLEAN 07375000=01586000=
|
|
FUNCTOG, COMMENT TELLS WHETHER PROCEDURE BEING DECLARED IS A 07380000=01586000=
|
|
FUNCTION; 07385000=01587000=
|
|
P2, COMMENT GENERALY TELLS WHETHER OWN WAS SEEN; 07390000=01588000=
|
|
P3, COMMENT TELLS WHETHER SAVE WAS SEEN; 07395000=01589000=
|
|
P4, COMMENT TELLS WHETHER AUXMEM WAS SEEN; 07400000=01589500=
|
|
VONF, COMMENT VALUE OR OWN FIELD OF ELBAT WORD; 07405000=01590000=
|
|
FORMALF, COMMENT FORMAL FIELD OF ELBAT WORD; 07410000=01591000=
|
|
PTOG, COMMENT TELLS THAT FORMAL PARAPART IS BEING PROCESSD;07415000=01592000=
|
|
SPECTOG, 07420000=01594000=
|
|
STOPENTRY, COMMENT THIS MAKES THE ENTRY PROCEDURE ENTER ONLY 07425000=01594000=
|
|
ONE ID AND THEN EIXT; 07430000=01595000=
|
|
AJUMP; 07435000=01596000=
|
|
COMMENT TELLS WHETHER A JUMP IS HANGING; 07440000=01596000=
|
|
BOOLEAN 07445000=01597000=
|
|
STOPDEFINE; 07450000=01597000=
|
|
REAL 07455000=01597100=
|
|
CORESZ; % CORE ESTIMATE NEEDED FOR SORT. 07460000=01597100=
|
|
INTEGER 07465000=01598000=
|
|
MAXSAVE; 07470000=01598000=
|
|
COMMENT THIS CONTAINS THE SIZE OF THE MAXIMUM SAVE ARRAY 07475000=01599000=
|
|
DECLARED. IT IS USED TO HELP DETERMINE STORAGE REQUIREMENTS 07480000=01600000=
|
|
FOR THE PROGRAM PARAMETER BLOCK FOR THE OBJECT PROGRAM; 07485000=01601000=
|
|
REAL 07490000=01603000=
|
|
KLASSF, COMMENT CLASS IN LOW ORDER 7 BITS; 07495000=01603000=
|
|
ADDRSF, COMMENT ADDRESS IN LOW ORDER 11 BITS; 07500000=01604000=
|
|
LEVELF, COMMENT LVL IN LOW ORDER 5 BITS; 07505000=01605000=
|
|
LINKF, COMMENT LINK IN LOW ORDER 13 BITS; 07510000=01606000=
|
|
INCRF, COMMENT INCR CN LOW ORDER 8 BITS; 07515000=01607000=
|
|
PROINFO, COMMENT CONTAINS ELBAT WORD FOR PROCEDURE BEING 07520000=01608000=
|
|
DECLARED; 07525000=01609000=
|
|
G, COMMENT GLOBAL TEMPORARY FOR BLOCK; 07530000=01610000=
|
|
TYPEV, COMMENT USED TO CARRY CLASS OF IDENTIFIER 07535000=01611000=
|
|
BEING DECLARED; 07540000=01612000=
|
|
PROADO, COMMENT CONTAINS ADDRESS OF PROCEDURE BEING 07545000=01613000=
|
|
DECLARED; 07550000=01614000=
|
|
MARK, COMMENT CONTAINS INDEX INTO INFO WHERE FIRST WORD 07555000=01615000=
|
|
OF ADDITIONAL INFO FOR A PROCEDURE ENTRY; 07560000=01616000=
|
|
PJ, COMMENT FORMAL PARAMETER COUNTER; 07565000=01617000=
|
|
J, COMMENT ARRAY COUNTER; 07570000=01618000=
|
|
LASTINFO, COMMENT INDEX TO LAST ENTRY IN INFO; 07575000=01619000=
|
|
NEXTINFO, COMMENT INDEX FOR NEXT ENTRYIN INFO; 07580000=01620000=
|
|
GLOBALNINFOO, 07585000=01620100=
|
|
COMMENT MAINTAINS VALUE OF NINFOO FROM BLOCK ON A 07590000=01620100=
|
|
GLOBAL LEVEL SO TAHT THE PROCEDURE "ENTRY" 07595000=01620200=
|
|
CAN CHECK FOR DUPLICATE DECLARATIONS; 07600000=01620300=
|
|
OLDNINFOO, COMMENT REMEMBERS OLD VALUE OF GLOBALNINFOO; 07605000=01620400=
|
|
FIRSTX, COMMENT RELATIVE ADD OF FIRST EXECUTABLE CODE 07610000=01621000=
|
|
IN BLOCK,INITIALIZED TO 4095 EACH TIME; 07615000=01622000=
|
|
SAVEL; COMMENT SAVE LOCATION FOR FIXUPS IN BLOCK; 07620000=01623000=
|
|
INTEGER 07625000=01624000=
|
|
NCII; COMMENT THIS CONTAINS THE COUNT OF CONSTANTS 07625100=01624000=
|
|
ENTERED IN INFO AT ANY GIVEN TIME; 07635000=01625000=
|
|
REAL 07640000=01625100=
|
|
FILETHING; 07645000=01625100=
|
|
COMMENT HOLDS LINKS FOR STREAM RELEASES ; 07650000=01625100=
|
|
PROCEDURE UNHOOK; 07655000=01626000=
|
|
FORWARD; 07660000=01626000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07665000=01626000=
|
|
PROCEDURE MAKEUPACCUM; 07670000=01627000=
|
|
FORWARD; 07675000=01627000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%07680000=01627000=
|
|
DEFINE 07685000=01628000=
|
|
PURPT = [43:8] #, 07690000=01628000=
|
|
SECRET = 2 #; 07695000=01628000=
|
|
07700000=01629000=
|
|
COMMENT THESE DEFINES GIVE THE NAMES OF THE WORD MODE OPERATORS. THE 07705000=01629000=
|
|
NUMBERS REFER TO THE APPROPRIATE SECTION OF THE PRODUCT SPECS. THE 07710000=01630000=
|
|
FULL NAME IS ALSO GIVEN; 07715000=01631000=
|
|
DEFINE 07720000=01632000=
|
|
ADD = 16#, COMMENT (0101) 7.4.2.1 ADD; 07725000=01633000=
|
|
BBC = 22#, COMMENT (0131) 7.4.5.4 BRANCH BACKWARD CONDITIONAL;07730000=01634000=
|
|
BBW = 534#, COMMENT (4131) 7.4.5.2 BRANCH BACKWARD; 07735000=01635000=
|
|
BFC = 38#, COMMENT (0231) 7.4.5.3 BRANCH FORWARD CONDITIONAL; 07740000=01636000=
|
|
BFW = 550#, COMMENT (4231) 7.4.5.1 BRANCH FORWARD; 07745000=01637000=
|
|
CDC = 168#, COMMENT (1241) 7.4.10.4 CONSTRUCT DESCRIPTOR CALL; 07750000=01638000=
|
|
CHS = 134#, COMMENT (1031) 7.4.7.11 CHANGE SIGN; 07755000=01639000=
|
|
COC = 40#, COMMENT (0241) 7.4.10.3 CONSTRUCT OPERAND CALL; 07760000=01640000=
|
|
COM = 130#, COMMENT (1011) 7.4.10.5 COMMUNICATION OPERATOR; 07765000=01641000=
|
|
DEL = 10#, COMMENT (0051) 7.4.9.3 DELETE; 07770000=01642000=
|
|
DUP = 261#, COMMENT (2025) 7.4.9.2 DUPLICATE; 07775000=01643000=
|
|
EQL = 581#, COMMENT (4425) 7.4.4.3 EQUAL; 07780000=01644000=
|
|
LBC = 278#, COMMENT(2131) 7.4.5.9 GO BACKWARD CONDITIONAL; 07785000=01645000=
|
|
LBU = 790#, COMMENT(6131) 7.4.5.7 GO BACKWARD (WORD); 07790000=01646000=
|
|
GEQ = 21#, COMMENT (0125) 7.4.4.2 GREATER THAN OR EQUAL TO; 07795000=01647000=
|
|
LFC = 294#, COMMENT(2231) 7.4.5.8 GO FORWARD CONDITIONAL; 07800000=01648000=
|
|
LFU = 806#, COMMENT(6231) 7.4.5.6 GO FORWARD (WORD); 07805000=01649000=
|
|
GTR = 37#, COMMENT (0225) 7.4.4.1 GREATER THAN; 07810000=01650000=
|
|
IDV = 384#, COMMENT (3001) 7.4.2.5 INTEGER DIVIDE; 07815000=01651000=
|
|
INX = 24#, COMMENT (0141) 7.4.10.2 INDEX; 07820000=01652000=
|
|
ISD = 532#, COMMENT (4121) 7.4.6.3 INTEGER STORE DESTRUCTIVE; 07825000=01653000=
|
|
ISN = 548#, COMMENT (4221) 7.4.6.4 INTEGER STORE NON-DESTRUCT; 07830000=01654000=
|
|
LEQ = 533#, COMMENT (4125) 7.4.4.4 LESS THAN OR EQUAL TO; 07835000=01655000=
|
|
LND = 67#, COMMENT (0415) 7.4.3.1 LOGICAL AND; 07840000=01656000=
|
|
LNG = 19#, COMMENT (0115) 7.4.3.4 LOGICAL NEGATE; 07845000=01657000=
|
|
LOD = 260#, COMMENT (2021) 7.4.10.1 LOAD OPERATOR; 07850000=01658000=
|
|
LOR = 35#, COMMENT (0215) 7.4.3.2 LOGICAL OR; 07855000=01659000=
|
|
LQV = 131#, COMMENT (1015) 7.4.3.3 LOGICAL EQUIVALENCE; 07860000=01660000=
|
|
LSS = 549#, COMMENT (4225) 7.4.4.5 LESS THAN; 07865000=01661000=
|
|
MDS = 515#, COMMENT (4015) 7.4.7.7 SET FLAG BIT; 07870000=01661100=
|
|
MKS = 72#, COMMENT (0441) 7.4.8.1 MARK STACK; 07875000=01662000=
|
|
MUL = 64#, COMMENT (0401) 7.4.2.3 MULTIPLY; 07880000=01663000=
|
|
NEQ = 69#, COMMENT (0425) 7.4.4.6 NOT EQUAL TO; 07885000=01664000=
|
|
NOP = 11#, COMMENT (0055) 7.4.7.1 NO OPERATION; 07890000=01665000=
|
|
PRL = 18#, COMMENT (0111) 7.4.10.6 PROGRAM RELEASE; 07895000=01666000=
|
|
PRTE= 12#, COMMENT (0061) 7.4.10.9 EXTEND PRT; 07900000=01667000=
|
|
RDV = 896#, COMMENT (7001) 7.4.2.6 REMAINDER DIVIDE; 07905000=01668000=
|
|
RTN = 39#, COMMENT (0235) 7.4.8.3 RETURN NORMAL; 07910000=01669000=
|
|
RTS = 167#, COMMENT (1235) 7.4.8.4 RETURN SPECIAL; 07915000=01670000=
|
|
SND = 132#, COMMENT (1021) 7.4.6.2 STORE NON-DESTRUCTIVE; 07920000=01671000=
|
|
SSN = 70#, COMMENT (0431) 7.4.7.10 SET SIGN NEGATIVE; 07925000=01671100=
|
|
SSP = 582#, COMMENT (4431) 7.4.7.10 SET SIGN PLUS; 07930000=01672000=
|
|
STD = 68#, COMMENT (0421) 7.4.6.1 STORE DESTRUCTIVE; 07935000=01673000=
|
|
SUB = 48#, COMMENT (0301) 7.4.2.2 SUBTRACT; 07940000=01674000=
|
|
XCH = 133#, COMMENT (1025) 7.4.9.1 EXCHANGE; 07945000=01675000=
|
|
XIT = 71#, COMMENT (0435) 7.4.8.2 EXIT; 07950000=01676000=
|
|
ZP1 = 322#; COMMENT (2411) 7.4.10.8 CONDITIONAL HALT; 07955000=01677000=
|
|
COMMENT THESE DEFINES ARE USED BY EMITD; 07960000=01678000=
|
|
DEFINE 07965000=01679000=
|
|
DIA = 45#, COMMENT (XX55) 7.4.7.1 DIAL A; 07970000=01680000=
|
|
DIB = 49#, COMMENT (XX61) 7.4.7.2 DIAL B; 07975000=01681000=
|
|
TRB = 53#; COMMENT (XX65) 7.4.7.3 TRANSFER BITS; 07980000=01682000=
|
|
REAL 07985000=01683000=
|
|
MAXSTACK, 07990000=01683000=
|
|
STACKCTR; 07995000=01683000=
|
|
INTEGER 08000000=01684000=
|
|
MAXROW;COMMENT THIS CONTAINS THE MAXIMUM ROW SIZE OF ALL NON-SAVE 08005000=01684000=
|
|
ARRAYS DECLARED. ITS USE IS LIKE THAT OF MAXSAVE; 08015000=01686000=
|
|
INTEGER 08020000=01687000=
|
|
SEGSIZEMAX; COMMENT CONTAINS MAX SEGMENT SIZE; 08025000=01687000=
|
|
INTEGER 08035000=01688000=
|
|
F; 08040000=01688000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08042000
|
|
PROCEDURE MOVECODE(EDOC, TEDOC); 08045000=01688010=
|
|
ARRAY 08045100
|
|
EDOC, TEDOC[0,0]; 08045200
|
|
BEGIN COMMENT 08050000=01688020=
|
|
THIS IS UGLY. ORIGINALLY "MOVECODE" WAS A STREAM PROCEDURE THAT 08050100
|
|
SWAPPED THE MOM DESCRIPTORS FOR THE TWO ARRAY PARAMETERS, 08050200
|
|
EFFECTIVELY EXCHANGING THEM IN MEMORY. THERE ISN'T ANY GOOD 08050300
|
|
WAY TO DO THAT ON AN E-MODE SYSTEM, AND WE CAN'T USE ARRAY 08050400
|
|
REFERENCE VARIABLES, BECAUSE TEDOC IS LOCALLY DECLARED IN THE 08050500
|
|
BLOCK OF THE CALLER. THAT WOULD REQUIRE UP-LEVEL ADDRESSING, 08050600
|
|
WHICH IS FORBIDDEN. FURTHER, IN THE CASE OF THE "BLOCK" ROUTINE,08050700
|
|
TEDOC IS RECURSIVELY ALLOCATED AS "BLOCK" DESCENDS INTO THE 08050800
|
|
LEXICAL STRUCTURE OF THE PROGRAM. WITHOUT A LOT OF MESSY 08050900
|
|
REDESIGN WORK, THE ONLY WAY TO IMPLEMENT THIS IN E-MODE IS TO 08051000
|
|
ACTUALLY MOVE THE DATA BETWEEN THE TWO ARRAYS. UGH. 08051100
|
|
; 08051200
|
|
INTEGER 08055000=01688020=
|
|
I; 08055100
|
|
ARRAY 08055200
|
|
TEMP[0:127]; 08055300
|
|
08060000=01688030=
|
|
FOR I:= 0 STEP 1 UNTIL 7 DO 08065000=01688030=
|
|
BEGIN 08070000=01688030=
|
|
REPLACE POINTER(TEMP,0) BY 08075000=01688030=
|
|
POINTER(EDOC[I,*],0) FOR 128 WORDS; 08075100
|
|
REPLACE POINTER(EDOC[I,*],0) BY 08075200
|
|
POINTER(TEDOC[I,*],0) FOR 128 WORDS; 08075300
|
|
REPLACE POINTER(TEDOC[I,*],0) BY 08075400
|
|
POINTER(TEMP,0) FOR 128 WORDS; 08075500
|
|
END FOR; 08075600
|
|
END; 08210000=01688110=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08212000
|
|
REAL 08215000=01689000=
|
|
NLO, 08220000=01689000=
|
|
NHI, 08225000=01689000=
|
|
TLO, 08230000=01689000=
|
|
THI; 08235000=01689000=
|
|
BOOLEAN 08240000=01690000=
|
|
DPTOG; 08245000=01690000=
|
|
COMMENT THE ABOVE THINGS ARE TEMP STORAGE FOR DOUBLE NOS;08250000=01691000=
|
|
DEFINE 08255000=01692000=
|
|
FZERO = 896 #; 08260000=01692000=
|
|
REAL 08265000=01693000=
|
|
T1, 08270000=01693000=
|
|
T2, 08275000=01693000=
|
|
N, 08280000=01693000=
|
|
K, 08285000=01693000=
|
|
AKKUM; 08290000=01693000=
|
|
BOOLEAN 08295000=01694000=
|
|
STOPGSP; 08300000=01694000=
|
|
INTEGER 08305000=01695000=
|
|
BUP; 08310000=01695000=
|
|
COMMENT UNIQUE GLOBAL TEMP FOR BLOCK; 08315000=01696000=
|
|
ARRAY 08320000=01697000=
|
|
GTA1[0:10]; 08325000=01697000=
|
|
BOOLEAN ARRAY 08330000=01698000=
|
|
SPRT[0:31]; 08335000=01698000=
|
|
COMMENT SPRT IS TO BE CONSIDERED TO BE AN ARRAY OF 32 32 BIT 08340000=01699000=
|
|
FIELDS. THE 32 BITS ARE IN THE LOW ORDER PART OF EACH 08345000=01700000=
|
|
WORD. THE BIT IS ON IF AND ONLY IF THE CORRESPONDING 08350000=01701000=
|
|
PRT CELL HAS A PERMANENT ASSIGNMENT; 08355000=01702000=
|
|
INTEGER 08360000=01703000=
|
|
PRTI, 08365000=01703000=
|
|
PRTIMAX; 08370000=01703000=
|
|
COMMENT PRTIMAX GIVES NEXT PRT CELL AVAILABLE FOR PERMANENT ASSIGN-08375000=01704000=
|
|
MENT. PRTI GIVES NEXT PRT CELL POSSIBLY AVAILABLE FOR 08380000=01705000=
|
|
TEMPORARY ASSIGNMENT; 08385000=01706000=
|
|
DEFINE 08390000=01707000=
|
|
ALPHASIZE = [35:6] #; 08395000=01707000=
|
|
COMMENT ALPHASIZE IS THE DEFINE FOR THE BIT08400000=01707000=
|
|
POSITION IN THE SECOND WORD OF INFO WHICH 08405000=01708000=
|
|
CONTAINS THE LENGTH OF ALPHA; 08410000=01709000=
|
|
DEFINE 08415000=01710000=
|
|
EDOCINDEX = L.[11:3], L.[8:7] #; 08420000=01710000=
|
|
COMMENT EDOCINDEX IS THE WORD 08425000=01710000=
|
|
PORTION OF L SPLIT INTO A ROW AND08430000=01711000=
|
|
COLUMN INDEX FOR EDOC; 08435000=01712000=
|
|
DEFINE 08440000=01713000=
|
|
CPLUS1 = 769 #; 08445000=01713000=
|
|
COMMENT SEE COMMENT AT CPLUS2 DEFINE; 08450000=01713000=
|
|
DEFINE 08455000=01714000=
|
|
CPLUS2 = 770 #; 08460000=01714000=
|
|
COMMENT CPLUS1 AND CPLUS2 ARE EXPLICIT CONSTANTS 08465000=01714000=
|
|
USED IN THE GENERATION OF C-RELATIVE CODE; 08470000=01715000=
|
|
PROCEDURE FLAG(ERRNUM); 08475000=01716000=
|
|
VALUE 08480000=01716000=
|
|
ERRNUM; 08485000=01716000=
|
|
INTEGER 08490000=01716000=
|
|
ERRNUM; 08495000=01716000=
|
|
FORWARD; 08500000=01716000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08505000=01716000=
|
|
ALPHA PROCEDURE B2D(B); 08510000=01717000=
|
|
VALUE 08515000=01717000=
|
|
B; 08520000=01717000=
|
|
REAL 08525000=01717000=
|
|
B; 08530000=01717000=
|
|
FORWARD; 08535000=01717000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08540000=01717000=
|
|
BOOLEAN 08545000=01717800=
|
|
MACROID; 08550000=01717800=
|
|
REAL PROCEDURE FIXDEFINEINFO(T); 08555000=01717900=
|
|
VALUE 08560000=01717900=
|
|
T; 08565000=01717900=
|
|
REAL 08570000=01717900=
|
|
T; 08575000=01717900=
|
|
FORWARD; 08580000=01717900=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08585000=01717900=
|
|
PROCEDURE DEFINEPARAM(D, N); 08590000=01717950=
|
|
VALUE 08595000=01717950=
|
|
D, 08600000=01717950=
|
|
N; 08605000=01717950=
|
|
INTEGER 08610000=01717950=
|
|
D, 08615000=01717950=
|
|
N; 08620000=01717950=
|
|
FORWARD; 08625000=01717950=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08630000=01717950=
|
|
PROCEDURE ERR(ERRNUM); 08635000=01718000=
|
|
VALUE 08640000=01718000=
|
|
ERRNUM; 08645000=01718000=
|
|
INTEGER 08650000=01718000=
|
|
ERRNUM; 08655000=01718000=
|
|
FORWARD; 08660000=01718000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08665000=01718000=
|
|
REAL PROCEDURE TAKE(X); 08670000=01718100=
|
|
VALUE 08675000=01718100=
|
|
X; 08680000=01718100=
|
|
REAL 08685000=01718100=
|
|
X; 08690000=01718100=
|
|
FORWARD; 08695000=01718100=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08700000=01718100=
|
|
PROCEDURE PUT(W, X); 08705000=01718200=
|
|
VALUE 08710000=01718200=
|
|
W, 08715000=01718200=
|
|
X; 08720000=01718200=
|
|
REAL 08725000=01718200=
|
|
W, 08730000=01718200=
|
|
X; 08735000=01718200=
|
|
FORWARD; 08740000=01718200=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08745000=01718200=
|
|
INTEGER PROCEDURE GIT(L); 08750000=01719000=
|
|
VALUE 08755000=01719000=
|
|
L; 08760000=01719000=
|
|
REAL 08765000=01719000=
|
|
L; 08770000=01719000=
|
|
FORWARD; 08775000=01719000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08780000=01719000=
|
|
BOOLEAN 08785000=01720000=
|
|
LISTMODE; 08790000=01720000=
|
|
COMMENT LISTMODE IS A VARIABLE USED BY FORSTMT TO DECEIDE IF A LIST 08795000=01721000=
|
|
IS BEING GENERATED OR A STATEMENT; 08800000=01722000=
|
|
INTEGER 08805000=01723000=
|
|
LSTR; 08810000=01723000=
|
|
COMMENT LSTR GIVES THE LOCATION OF FIRST SYLABLE OF A LIST. IT IS 08815000=01724000=
|
|
USED BY LISTELEMENT TO COMPUTE VALUES TO STORE IS LSTRTN; 08820000=01725000=
|
|
PROCEDURE SCANNER; 08825000=01730000=
|
|
FORWARD; 08830000=01730000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08872000
|
|
PROCEDURE MOVE(W)"WORDS FROM"(A, AX)"TO"(B, BX); 08875000=01735000=
|
|
VALUE 08875100
|
|
W, AX, BX; 08875200
|
|
ARRAY 08875300
|
|
A, B[0]; 08875400
|
|
REAL 08875500
|
|
W, AX, BX; 08875600
|
|
BEGIN 08890000=01736000=
|
|
REPLACE POINTER(B[BX],0) BY POINTER(A[AX],0) FOR (W) WORDS; 08895000=01736000=
|
|
END MOVE; 08945000=01736300=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08946000
|
|
DEFINE ZEROUT(DEST, DX, NDIV32, NMOD32) = 08950000=01737000=
|
|
BEGIN 08970000=01737100=
|
|
REPLACE POINTER(DEST[DX],0) BY 6"00000000" FOR 08975000=01737100=
|
|
((NDIV32)*32+(NMOD32)) WORDS; 08980000
|
|
END #; 08990000=01737250=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%08995000=01737300=
|
|
COMMENT "BLANKET" BLANKS OUT N+1 WORDS IN "THERE"; 09000000=01737300=
|
|
DEFINE BLANKET(N, THERE) = 09005000=01737350=
|
|
BEGIN 09020000=01737400=
|
|
REPLACE POINTER(THERE,0) BY 6" " FOR (N)+1 WORDS; 09025000=01737450=
|
|
END BLANKET #; 09045000=01737500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09045100
|
|
PROCEDURE STEPIT; 09050000=01741000=
|
|
FORWARD; 09055000=01741000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09060000=01741000=
|
|
COMMENT SEQCHANGE WILL CONV A MACHING NO. TO PROPER OUTPUT FORM; 09065000=01741100=
|
|
PROCEDURE CHANGESEQ(VAL, BUFF, OLDSEQ); 09070000=01741200=
|
|
VALUE 09075000=01741200=
|
|
VAL, OLDSEQ; 09080000=01741200=
|
|
ARRAY 09080100
|
|
BUFF[0]; 09080200
|
|
REAL 09080300
|
|
VAL, OLDSEQ; 09080400
|
|
BEGIN 09085000=01741300=
|
|
STREAMLOCALS; 09085100
|
|
STREAMSETDI(BUFF, OLDSEQ); 09090000=01741400=
|
|
STREAMSETLOCSI(VAL); 09095000=01741400=
|
|
STREAMTRANSFERDEC(8); 09100000=01741500=
|
|
END; 09105000=01741500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09106000
|
|
DEFINE SEQUENCEWARNING(L) = 09110000=01742100=
|
|
BEGIN 09115000=01742110=
|
|
REPLACE POINTER(L,8)-8 BY 09120000=01742110=
|
|
6"SEQUENCE", 6" WARNING", 6"<<<<<<<<"; 09130000=01742110=
|
|
END #; 09135000=01742110=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09222000
|
|
INTEGER 09225000=01750000=
|
|
FAULTLEVEL; COMMENT THIS IS FOR THE RUN0TIME ERROR KLUDGE-- 09230000=01750000=
|
|
GIVES THE LOWEST LEVEL AT WHICH THERE IS AN ACTIVE 09240000=01751000=
|
|
FAULT DECL OR LABEL USED IN A FAULT STATEMENT; 09245000=01752000=
|
|
BOOLEAN 09250000=01753000=
|
|
FAULTOG; COMMENT FAULTSTMT USES THIS TO TELL DEXP TO WORRY 09255000=01753000=
|
|
ABOUT FAULTLEVEL; 09265000=01754000=
|
|
INTEGER 09270000=01755000=
|
|
SFILENO; COMMENT FILENO OF FIRST SORT FILE; 09275000=01755000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09572000
|
|
BOOLEAN 09590000=01786000=
|
|
SORTMERGETOG; 09595000=01786000=
|
|
FORMAT 09600000=01800000=
|
|
PRINTSEGNO(X88,"START OF SEGMENT ********** ",I4), 09600100=01800000=
|
|
PRINTSIZE(X88,I4," IS ",I4," LONG, NEXT SEG ",I4), 09605000=01801000=
|
|
BUG(X24,4(A4,X2)); 09610000=01802000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09610100
|
|
PROCEDURE DATIME; 09615000=01820000=
|
|
BEGIN 09620000=01821000=
|
|
INTEGER 09625000=01822000=
|
|
H, 09630000=01822000=
|
|
MN, 09635000=01822000=
|
|
Q; 09640000=01822000=
|
|
REAL 09645000=01822000=
|
|
N1, 09650000=01822000=
|
|
N2; 09655000=01822000=
|
|
POINTER 09655100
|
|
P; 09655200
|
|
H:= TIME1 DIV 216000; 09715000=01828000=
|
|
MN:= (TIME1 DIV 3600) MOD 60; 09720000=01828000=
|
|
REPLACE P:POINTER(CODEBUFF,8) BY CODE.TITLE; 09725000=01828500=
|
|
N2:= MIN(OFFSET(P)-1, 118); 09730000=01828500=
|
|
WRITE(LINE, 09735000=01829100=
|
|
$ SET OMIT = NOT ALGOL 09735100=01829900=
|
|
<X18,"BURROUGHS B-5700 ALGOLXEM COMPILER MARK ", 09735120
|
|
$ POP OMIT SET OMIT = ALGOL 09735140
|
|
<X18,"BURROUGHS B-5700 TSPOLXEM COMPILER MARK ", 09735160
|
|
$ POP OMIT 09735180
|
|
"XVI.0.122" 09735200=01831000=
|
|
," ",A6,"DAY, ",I4,"-",A2,"-",A2,", ",I2,":",A2,X1,A3, 09735300=01832000=
|
|
////X*,A*,/X*,*("=")//>, 09735400=01832500=
|
|
CASE (N1:= TIME(7)).[5:6] OF (" SUN", " MON", 09735500=01834000=
|
|
" TUES", "WEDNES", " THURS", " FRI", " SATUR"), 09735520
|
|
N1.[47:12], (N1:= TIME(15)).[47:16], N1.[31:16], 09735540
|
|
12*REAL(Q:=H MOD 12=0)+Q, 09735560
|
|
"00" & (MN MOD 10)[3:4] & (MN DIV 10)[11:4], 09735600=01834000=
|
|
IF H >= 12 THEN "PM." ELSE "AM.", 09735700=01835000=
|
|
(120-N2) DIV 2, N2, POINTER(CODEBUFF,8), (120-N2) DIV 2, N2);09740000=01835550=
|
|
NOHEADING:= FALSE; 09760000=01837000=
|
|
END OF DATIME; 09765000=01837000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09770000=01837000=
|
|
DEFINE 09775000=01841000=
|
|
DOT = BEGIN 09780000=01841000=
|
|
IF ELCLASS = PERIOD THEN 09785000=01841000=
|
|
DOTIT 09790000=01841000=
|
|
END #; 09795000=01841000=
|
|
09800000=02000000=
|
|
COMMENT THIS SECTION CONTAINS ALL CODE PERTAINENT TO READING CARDS 09805000=02000000=
|
|
AND SCANNING THEM; 09810000=02001000=
|
|
%***********************************************************************10330000=02001605=
|
|
% 10335000=02001610=
|
|
% MISCELLANEOUS CROSS REFERENCE PROCEDURES 10340000=02001615=
|
|
% 10345000=02001620=
|
|
%***********************************************************************10350000=02001630=
|
|
% 10355000=02001635=
|
|
PROCEDURE CROSSREFIT(INDEX, SEQNO, REFTYPE); 10360000=02001640=
|
|
VALUE 10365000=02001645=
|
|
INDEX, 10370000=02001645=
|
|
SEQNO, 10375000=02001645=
|
|
REFTYPE; 10380000=02001645=
|
|
REAL 10385000=02001650=
|
|
INDEX, 10390000=02001650=
|
|
SEQNO, 10395000=02001650=
|
|
REFTYPE; 10400000=02001650=
|
|
BEGIN 10405000=02001655=
|
|
IF XREFINFO[INDEX].IDNOF ^= 0 THEN % SAVE 10410000=02001660=
|
|
BEGIN 10415000=02001665=
|
|
IF XREFPT > 29 THEN % NO SLOTS LEFT IN ARRAY, WRITE IT OUT. 10420000=02001670=
|
|
BEGIN 10425000=02001675=
|
|
WRITE(DSK2, 30, XREFAY2[*]); 10430000=02001680=
|
|
XREFPT:= 0; 10435000=02001685=
|
|
END; 10440000=02001690=
|
|
XREFAY2[XREFPT]:= SEQNO & REFTYPE TYPEREF & XREFINFO[INDEX] 10445000=02001700=
|
|
REFIDNOF; 10450000=02001700=
|
|
XREFPT:= XREFPT+1;% EVEN THOUGH THE ARRAY MAY BE FULL NOW WE 10455000=02001705=
|
|
% CANT WRITE IT OUT BECAUSE SOME ROUTINES 10460000=02001710=
|
|
% WILL LOOK BACK AT THE ENTRY WE JUST PUT 10465000=02001715=
|
|
% IN AND FIX IT UP. 10470000=02001720=
|
|
END; 10475000=02001725=
|
|
END OF CROSSREFIT; 10480000=02001730=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10485000=02001730=
|
|
% 10490000=02001735=
|
|
PROCEDURE CROSSREFDUMP(INDEX); 10495000=02001740=
|
|
VALUE 10500000=02001745=
|
|
INDEX; 10505000=02001745=
|
|
REAL 10510000=02001750=
|
|
INDEX; 10515000=02001750=
|
|
BEGIN 10520000=02001755=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10522000
|
|
PROCEDURE MOVEXREFINFO(S, SX, D, DX, N); 10525000=02001760=
|
|
VALUE 10530000=02001765=
|
|
SX, DX, N; 10535000=02001765=
|
|
ARRAY 10535100
|
|
S, D[0]; 10535200
|
|
REAL 10535300
|
|
SX, DX, N; 10535400
|
|
BEGIN 10540000=02001770=
|
|
STREAMLOCALS; 10540100
|
|
STREAMSETDI(D, DX); 10545000=02001775=
|
|
STREAMSMEARLIT(8*8, 6" "); % BLANK RECORD 10550000=02001775=
|
|
STREAMSETSI(S, SX); 10565000=02001780=
|
|
STREAMSKIPSI(+3); 10570000=02001780=
|
|
STREAMSETDI(D, DX); 10575000=02001780=
|
|
STREAMTRANSFERCHR(N); % MOVE IDENTIFIER 10580000=02001780=
|
|
END OF MOVEXREFINFO; 10585000=02001785=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10590000=02001790=
|
|
IF XREFINFO[INDEX].IDNOF ^= 0 THEN % DUMP IT 10595000=02001795=
|
|
BEGIN 10600000=02001800=
|
|
MOVEXREFINFO(INFO[INDEX.LINKR,*], INDEX.LINKC+1, XREFAY1[*], 0, 10605000=02001810=
|
|
TAKE(INDEX+1).[35:6]); 10610000=02001810=
|
|
XREFAY1[8]:= XREFINFO[INDEX]; 10615000=02001815=
|
|
XREFAY1[9]:= TAKE(INDEX); % ELBAT WORD 10620000=02001820=
|
|
WRITE(DSK1, 10, XREFAY1[*]); 10625000=02001821=
|
|
XREFINFO[INDEX]:= 0; 10630000=02001822=
|
|
END; 10635000=02001825=
|
|
END OF CROSSREFDUMP; 10640000=02001830=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10645000=02001830=
|
|
REAL PROCEDURE CONV(ACCUM, AX, SKP, N); 10650000=02001831=
|
|
VALUE 10660000=02001831=
|
|
AX, SKP, N; 10665000=02001831=
|
|
ARRAY 10665100
|
|
ACCUM[0]; 10665200
|
|
REAL 10665300
|
|
AX, SKP, N; 10665400
|
|
BEGIN 10675000=02001832=
|
|
STREAMLOCALS; 10675100
|
|
STREAMSETSI(ACCUM, AX); 10680000=02001833=
|
|
STREAMSKIPSI(+SKP); 10685000=02001833=
|
|
STREAMSKIPSI(+3); 10690000=02001833=
|
|
STREAMSETDI(STREAMTEMPD, 0); 10695000=02001833=
|
|
STREAMTRANSFEROCT(N); 10700000=02001834=
|
|
CONV:= STREAMTEMPD[0]; 10700100
|
|
END CONV; 10705000=02001834=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10710000=02001836=
|
|
COMMENT OCTIZE REFORMATS ACCUM FOR OCTAL CONSTANTS; 10715000=02001836=
|
|
BOOLEAN PROCEDURE OCTIZE(S, SX, D, DX, SKP, CNT); 10725000=02001838=
|
|
VALUE 10730000=02001838=
|
|
SX, DX, SKP, CNT; 10735000=02001838=
|
|
ARRAY 10735100
|
|
S, D[0]; 10735200
|
|
REAL 10735300
|
|
SX, DX, SKP, CNT; 10735400
|
|
BEGIN 10745000=02001840=
|
|
STREAMLOCALS; 10745050
|
|
TALLY:= 0; 10745100
|
|
STREAMSETSI(S, SX); 10750000=02001842=
|
|
STREAMSKIPSI(+3); 10755000=02001842=
|
|
STREAMSETDI(D, DX); 10760000=02001842=
|
|
THRU SKP DO 10765000=02001842=
|
|
STREAMSETDB(3, 0); % RIGHT JUSTIFY. 10765100
|
|
10765200
|
|
THRU CNT DO 10770000=02001846=
|
|
BEGIN 10770100
|
|
IF STREAMSCGEQ(6"8") THEN 10770200
|
|
TALLY:= 1 10770300
|
|
ELSE 10770400
|
|
IF STREAMSCLSS(6"0") THEN 10770500
|
|
TALLY:= 1; 10770600
|
|
10770700
|
|
STREAMSKIPSB(3); 10775000=02001846=
|
|
THRU 3 DO 10775100
|
|
BEGIN 10775200
|
|
IF STREAMTESTSB THEN 10775300
|
|
STREAMSETDB(1, 1) 10775400
|
|
ELSE 10775500
|
|
STREAMSETDB(1, 0); 10775600
|
|
10775700
|
|
STREAMSKIPSB(1); 10775800
|
|
END; 10775900
|
|
END THRU; 10776000
|
|
10785000=02001850=
|
|
OCTIZE:= BOOLEAN(TALLY); % "1" = NON OCTAL CHARACTER. 10790000=02001852=
|
|
END OCTIZE; 10795000=02001854=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10800000=02001856=
|
|
COMMENT HEXIZE REFORMATS ACCUM FOR HEXADECIMAL CONSTANTS; 10805000=02001856=
|
|
BOOLEAN PROCEDURE HEXIZE(S, SX, D, DX, SKP, CNT); 10810000=02001858=
|
|
VALUE 10820000=02001858=
|
|
SX, DX, SKP, CNT; 10825000=02001858=
|
|
ARRAY 10830000=02001858=
|
|
S, D[0]; 10830100
|
|
REAL 10830200
|
|
SX, DX, SKP, CNT; 10830300
|
|
BEGIN 10835000=02001860=
|
|
STREAMLOCALS; 10835100
|
|
REAL 10840000=02001860=
|
|
T1, 10840100
|
|
T2, 10840200
|
|
TEMP2, 10840300
|
|
TEMP1; 10840400
|
|
LABEL 10845000=02001860=
|
|
AGIN; 10850000=02001860=
|
|
COMMENT LOCAL VARIABLES ARE LOCATED IN REVERSE ORDER FROM THE 10860000=02001862=
|
|
WAY THEY ARE DECLARED IN STREAM PROCEDURES; 10865000=02001864=
|
|
TALLY:= 0; 10865100
|
|
STREAMSETDI(STREAMTEMPD, 0); 10870000=02001866=
|
|
THRU CNT DO 10875000=02001866=
|
|
STREAMSMEARLIT(1, 6"1"); % IN CASE A CHAR=A,B,C,D,OR F. 10875100
|
|
10875200
|
|
STREAMSETSI(S, SX); 10880000=02001868=
|
|
STREAMSKIPSI(+3); 10885000=02001868=
|
|
STREAMSETDI(STREAMTEMPD, 0); 10890000=02001868=
|
|
THRU CNT DO 10895000=02001870=
|
|
BEGIN 10895100
|
|
IF STREAMSCLSS(6"0") THEN 10895200
|
|
IF STREAMSCGEQ(6"A") THEN 10895300
|
|
IF STREAMSCLEQ(6"F") THEN 10895400
|
|
BEGIN % WORK HARD. 10900000=02001870=
|
|
T1:= STREAMGETSI; 10905000=02001874=
|
|
T2:= STREAMGETDI; 10905100
|
|
STREAMSETDI(S, T1); 10905200
|
|
STREAMSETSI(STREAMTEMPD, T2); % FLIP, MAN. 10905300
|
|
STREAMSETDB(3, 0); 10910000=02001876=
|
|
STREAMSETSI(S, T1); 10910100
|
|
STREAMSETDI(STREAMTEMPD, T2); % FLIP BACK. 10910200
|
|
STREAMSMEARLIT(1, STREAMGETSC+STREAMGETDC); % DS:= 1 ADD ?? 10915000=02001882=
|
|
STREAMSKIPDI(-1); 10915100
|
|
STREAMSKIPDB(2); 10915200
|
|
STREAMSETDB(1, 1); 10915300
|
|
STREAMSKIPDB(3); 10915400
|
|
GO AGIN; 10915500
|
|
END; 10920000=02001882=
|
|
10920100
|
|
IF STREAMSCLSS(6"0") THEN 10925000=02001884=
|
|
TALLY:= 1; 10930000=02001884=
|
|
10930100
|
|
STREAMTRANSFERCHR(1); % < 0 = NON-HEX CHARACTER.10935000=02001884=
|
|
AGIN: 10940000=02001888=
|
|
END THRU; 10945000=02001888=
|
|
10945100
|
|
STREAMSETSI(STREAMTEMPD, 0); 10950000=02001890=
|
|
STREAMSETDI(D, DX); 10955000=02001890=
|
|
THRU SKP DO 10960000=02001890=
|
|
STREAMSETDB(4, 0); % RIGHT ADJUST CONSTANT. 10960100
|
|
10960200
|
|
THRU CNT DO 10965000=02001894=
|
|
BEGIN 10965100
|
|
STREAMSKIPSB(2); 10965200
|
|
THRU 4 DO 10965300
|
|
BEGIN 10965400
|
|
IF STREAMTESTSB THEN 10965500
|
|
STREAMSETDB(1, 1) 10965600
|
|
ELSE 10965700
|
|
STREAMSETDB(1, 0); 10965800
|
|
10965900
|
|
STREAMSKIPDB(1); 10966000
|
|
END; 10966100
|
|
END; 10966200
|
|
% FINAL CONVERT. 10970000=02001894=
|
|
HEXIZE:= BOOLEAN(TALLY); % "1" IF PROGRAMMER GOOFED. 10975000=02001896=
|
|
END HEXIZE; 10980000=02001898=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10985000=02002000=
|
|
COMMENT PUTSEQNO PUTS THE SEQUENCE NUMBER OF THE CARD-IMAGE 10990000=02002000=
|
|
CURRENTLY BEING SCANNED INTO THE INFO TABLE IN CASE 10995000=02003000=
|
|
IT IS NEEDED FOR FUTURE REFERENCE; 11000000=02004000=
|
|
PROCEDURE PUTSEQNO(INFO, IX, BUFF, LCR); 11005000=02005000=
|
|
VALUE 11010000=02005000=
|
|
IX, LCR; 11015000=02005000=
|
|
ARRAY 11015100
|
|
INFO, BUFF[0]; 11015200
|
|
REAL 11015300
|
|
IX, LCR; 11015400
|
|
BEGIN 11020000=02006000=
|
|
STREAMLOCALS; 11020100
|
|
STREAMSETDI(INFO, IX); 11025000=02006000=
|
|
STREAMSETSI(BUFF, LCR); 11030000=02006000=
|
|
STREAMTRANSFERWDS(1); 11035000=02006000=
|
|
END PUTSEQNO; 11040000=02006000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%11045000=02007000=
|
|
COMMENT TURNONSTOPLIGHT TURNS THE LIGHT "RED" ON THE "CORNER". 11050000=02007000=
|
|
I.E., THE PURPOSE OF THIS ROUTINE IS TO INSERT A PER- 11055000=02008000=
|
|
CENT SIGN IN COLUMN 73 AS AN END OF CARD SENTINEL FOR 11060000=02009000=
|
|
THE SCANNER; 11065000=02010000=
|
|
PROCEDURE TURNONSTOPLIGHT(RED, BUFF, CORNER); 11070000=02011000=
|
|
VALUE 11075000=02011000=
|
|
RED, CORNER; 11080000=02011000=
|
|
ARRAY 11080100
|
|
BUFF[0]; 11080200
|
|
REAL 11080300
|
|
RED, CORNER; 11080400
|
|
BEGIN 11090000=02012000=
|
|
STREAMLOCALS; 11090100
|
|
STREAMSETDI(BUFF, CORNER); 11095000=02012000=
|
|
STREAMSETLOCSI(RED); 11100000=02012000=
|
|
STREAMSKIPSI(+7); 11105000=02012000=
|
|
STREAMTRANSFERCHR(1); 11110000=02012000=
|
|
END; 11115000=02012000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12660000=02061000=
|
|
COMMENT EQUAL COMPARES COUNT CHARACTERS LOCATED AT A AND B FOR 12665000=02061000=
|
|
EQUALITY. THIS ROUTINE IS USED IN THE LOOK-UP OF ALPHA 12670000=02061500=
|
|
QUANTITIES IN THE DIRECTORY; 12675000=02062000=
|
|
BOOLEAN PROCEDURE EQUAL(COUNT, A, AX, B, BX); 12680000=02062500=
|
|
VALUE 12690000=02062500=
|
|
COUNT, AX, BX; 12695000=02062500=
|
|
REAL 12695100
|
|
COUNT, AX, BX; 12695200
|
|
ARRAY 12695300
|
|
A, B[0]; 12695400
|
|
BEGIN 12700000=02063000=
|
|
STREAMLOCALS; 12700100
|
|
STREAMSETSI(A, AX); 12710000=02063500=
|
|
STREAMSETDI(B, BX); 12715000=02063500=
|
|
EQUAL:= STREAMCOMPAREEQL(COUNT); 12720000=02064000=
|
|
END EQUAL; 12730000=02064500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12732000
|
|
PROCEDURE READACARD; 12735000=02065000=
|
|
FORWARD; 12740000=02065000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12745000=02065000=
|
|
PROCEDURE DOLLARCARD; 12750000=02065500=
|
|
FORWARD; 12755000=02065500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12760000=02065500=
|
|
BOOLEAN PROCEDURE BOOLEXP; 12765000=02065600=
|
|
FORWARD; 12770000=02065600=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12775000=02065600=
|
|
PROCEDURE SCANNER; 12780000=02066000=
|
|
BEGIN 12785000=02066500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12790000=02067000=
|
|
COMMENT "SCNN" IS THE STREAM PROCEDURE WHICH DOES THE ACTUAL SCANNING. 12795000=02067000=
|
|
IT IS DRIVEN BY A SMALL WORD MODE PROCEDURE CALLED "SCANNER", 12800000=02067500=
|
|
WHICH CHECKS FOR A QUANTITY BEING BROKEN ACROSS A CARD. "SCNN" 12805000=02068000=
|
|
IS CONTROLLED BY A VARIABLE CALLED "RESULT". "SCNN" ALSO 12810000=02068500=
|
|
INFORMS THE WORLD OF ITS ACTION BY MEANS OF THE SAME VARIABLE, 12815000=02069000=
|
|
HENCE THE VARIABLE "RESULT" IS PASSED BY BOTH NAME AND VALUE. 12820000=02069500=
|
|
THE MEANING OF "RESULT" AS INPUT IS: 12825000=02070000=
|
|
VALUE MEANING 12830000=02070500=
|
|
===== ========================================== 12835000=02071000=
|
|
0 INITIAL CODE - DEBLANK AND START TO FETCH THE 12840000=02071500=
|
|
NEXT QUANTITY. 12845000=02072000=
|
|
1 CONTINUE BUILDING AN IDENTIFIER (INTERRUPTED BY 12850000=02072500=
|
|
END-OF-CARD BREAK). 12855000=02073000=
|
|
2 LAST QUANTITY BUILT WAS SPECIAL CHARACTER. HENCE, 12860000=02073500=
|
|
EXIT (INTERRUPTION BY END-OF-CARD BREAK IS NOT 12865000=02074000=
|
|
IMPORTANT). 12870000=02074500=
|
|
3 CONTINUE BUILDING A NUMBER (INTERRUPTED BY END-OF- 12875000=02075000=
|
|
CARD BREAK). 12880000=02075500=
|
|
4 LAST THING WAS AN ERROR (COUNT EXCEEDED 63). HENCE,12885000=02076000=
|
|
EXIT (INTERRUPTION BY END-OF-CARD BREAK NOT 12890000=02076500=
|
|
IMPORTANT). 12895000=02077000=
|
|
5 GET NEXT CHARACTER AND EXIT. 12900000=02077500=
|
|
6 SCAN A COMMENT. 12905000=02078000=
|
|
7 DEBLANK ONLY. 12910000=02078500=
|
|
THE MEANING OF "RESULT" AS OUTPUT IS: 12915000=02079000=
|
|
VALUE MEANING 12920000=02079500=
|
|
===== ======================================== 12925000=02080000=
|
|
1 AN IDENTIFIER WAS BUILT. 12930000=02080500=
|
|
2 A SPECIAL CHARACTER WAS OBTAINED. 12935000=02081000=
|
|
3 A NUMBER (INTEGER) WAS BUILT. 12940000=02081500=
|
|
"SCNN" PUTS ALL STUFF SCANNED (EXCEPT FOR COMMENTS AND 12945000=02082000=
|
|
DISCARDED BLANKS) INTO "ACCUM" (CALLED "ACCUMULATOR" 12950000=02082500=
|
|
FOR THE REST OF THIS DISCUSSION). 12955000=02083000=
|
|
"COUNT" IS THE VARIABLE THAT GIVES THE NUMBER OF CHARACTERS 12960000=02083500=
|
|
"SCNN" HAS PUT INTO THE "ACCUMULATOR". SINCE "SCNN" NEEDS 12965000=02084000=
|
|
THE VALUE SO THAT IT CAN PUT MORE CHARACTERS INTO THE "ACCUM- 12970000=02084500=
|
|
ULATOR" AND NEEDS TO UPDATE "COUNT" FOR THE OUTSIDE WORLD. 12975000=02085000=
|
|
"COUNT" IS PASSED BY BOTH NAME AND VALUE. IT IS ALSO 12980000=02085500=
|
|
CONVENIENT TO HAVE (63-COUNT). THIS IS CALLED "COMCOUNT". 12985000=02086000=
|
|
"NCR" (NEXT CHARACTER TO BE SCANNED) IS ALSO PASSED BY 12990000=02086500=
|
|
NAME AND VALUE SO THAT IT MAY BE UPDATED. 12995000=02087000=
|
|
"ST1" AND "ST2" ARE TEMPORARY STORAGES WHICH ARE EXPLICITLY 13000000=02087500=
|
|
PASSED TO "SCNN" IN ORDER TO OBTAIN THE MOST USEFULL STACK 13005000=02088000=
|
|
ARRANGEMENT. 13010000=02088500=
|
|
; 13015000=02089000=
|
|
PROCEDURE SCNN(SBUFF, NCR, COUNTV, ACCUM, AX, COMCOUNT, 13020000=02090000=
|
|
RESULT, RESULTV, COUNT, ST2, NCRV, ST1); 13025000=02090000=
|
|
VALUE 13030000=02090500=
|
|
COUNTV, AX, COMCOUNT, RESULTV, ST2, NCRV, ST1; 13035000=02090500=
|
|
ARRAY 13035100
|
|
SBUFF, ACCUM[0]; 13035200
|
|
REAL 13035300
|
|
NCR, COUNTV, AX, COMCOUNT, RESULT, RESULTV, COUNT, ST2, NCRV, ST1;13035400
|
|
BEGIN 13065000=02091000=
|
|
STREAMLOCALS; 13065100
|
|
LABEL 13070000=02091500=
|
|
DEBLANK, 13075000=02091500=
|
|
DEBLANKONLY, 13075100
|
|
NUMBERS, 13080000=02091500=
|
|
IDBLDR, 13085000=02091500=
|
|
GNC, 13090000=02091500=
|
|
K, 13095000=02091500=
|
|
EXIT, 13100000=02091500=
|
|
FINIS, 13105000=02091500=
|
|
L, 13110000=02091500=
|
|
ERROR, 13115000=02092000=
|
|
COMMENTS, 13120000=02092000=
|
|
COMMANTS; 13125000=02092000=
|
|
TALLY:= 0; 13125100
|
|
STREAMSETSI(SBUFF, NCRV); 13140000=02092500=
|
|
COMMENT SETUP "DI" FOR A CHANGE IN "RESULT" AND "SI" FOR A LOOK AT 13150000=02093000=
|
|
THE BUFFER; 13155000=02093500=
|
|
GO TO CASE RESULTV OF ( % SWITCH ON VALUE OF RESULT; 13160000=02094000=
|
|
DEBLANK, % 0 IS INITIAL CODE. 13165000=02094500=
|
|
IDBLDR, % 1 IS ID CODE. 13170000=02095000=
|
|
FINIS, % 2 IS SPECIAL CHARACTER CODE. 13175000=02095500=
|
|
NUMBERS, % 3 IS NUMBER CODE. 13180000=02096000=
|
|
FINIS, % 4 IS ERROR CODE. 13185000=02096500=
|
|
GNC, % 5 IS GET NEXT CHARACTER CODE. 13190000=02097000=
|
|
COMMANTS, % 6 IS COMMENT CODE. 13195000=02097500=
|
|
DEBLANKONLY);% 7 IS DEBLANK ONLY CODE. 13200000=02098000=
|
|
DEBLANKONLY: 13204000
|
|
IF STREAMSCEQL(6" ") THEN 13205000=02098500=
|
|
K: 13210000=02099000=
|
|
BEGIN 13215000=02099000=
|
|
STREAMSKIPSI(+1); 13220000=02099000=
|
|
IF STREAMSCEQL(6" ") THEN 13225000=02099000=
|
|
GO K 13230000=02099000=
|
|
END; 13235000=02099000=
|
|
GO FINIS; 13240000=02099500=
|
|
DEBLANK: 13245000=02100500=
|
|
IF STREAMSCEQL(6" ") THEN 13250000=02100500=
|
|
L: 13255000=02101000=
|
|
BEGIN 13260000=02101000=
|
|
STREAMSKIPSI(+1); 13265000=02101000=
|
|
IF STREAMSCEQL(6" ") THEN 13270000=02101000=
|
|
GO L 13275000=02101000=
|
|
END; 13280000=02101000=
|
|
13285000=02101500=
|
|
COMMENT IF WE ARRIVE HERE WE HAVE A NON-BLANK CHARACTER; 13290000=02101500=
|
|
NCRV:= STREAMGETSI; 13295000=02102000=
|
|
IF STREAMSCGEQ(6"0") THEN 13300000=02102500=
|
|
GO NUMBERS; 13305000=02102500=
|
|
IF STREAMSCALPHA THEN 13310000=02103000=
|
|
GO IDBLDR; 13315000=02103000=
|
|
13320000=02103500=
|
|
COMMENT IF WE ARRIVE HERE WE HAVE A SPECIAL CHARACTER (OR GNC); 13325000=02103500=
|
|
GNC: 13330000=02104500=
|
|
RESULT:= 6"2"; 13335000=02104500=
|
|
TALLY:= 1; 13340000=02104500=
|
|
STREAMSKIPSI(+1); 13345000=02104500=
|
|
GO EXIT; 13350000=02104500=
|
|
COMMANTS: 13355000=02105500=
|
|
IF STREAMSCNEQ(6";") THEN 13360000=02105500=
|
|
BEGIN 13365000=02106000=
|
|
COMMENTS: 13370000=02107000=
|
|
STREAMSKIPSI(+1); 13375000=02107000=
|
|
IF STREAMSCGTR(6"%") THEN 13380000=02107500=
|
|
GO COMMENTS; 13385000=02107500=
|
|
IF STREAMSCLSS(6";") THEN 13390000=02108000=
|
|
GO COMMENTS; 13395000=02108000=
|
|
13400000=02108500=
|
|
COMMENT CHARACTERS BETWEEN % AND SEMICOLON ARE HANDLED BY WORD- 13405000=02108500=
|
|
MODE PART OF COMMENT ROUTINE; 13410000=02109000=
|
|
END; 13415000=02109500=
|
|
GO FINIS; 13420000=02110000=
|
|
IDBLDR: 13425000=02111000=
|
|
TALLY:= 63; 13430000=02111000=
|
|
RESULT:= 6"1"; 13435000=02111000=
|
|
THRU COMCOUNT DO 13440000=02112000=
|
|
BEGIN 13440100
|
|
STREAMINCTALLY(+1); 13440200
|
|
IF STREAMSCALPHA THEN 13440300
|
|
STREAMSKIPSI(+1) 13440400
|
|
ELSE 13440500
|
|
GO EXIT 13445000=02112000=
|
|
END; 13445100
|
|
STREAMINCTALLY(+1); 13450000=02112500=
|
|
IF STREAMSCALPHA THEN 13455000=02113000=
|
|
BEGIN 13460000=02113500=
|
|
ERROR: 13465000=02114500=
|
|
RESULT:= 6"4"; 13475000=02114500=
|
|
GO EXIT; 13480000=02114500=
|
|
END 13485000=02115500=
|
|
ELSE 13490000=02115500=
|
|
GO EXIT; 13495000=02115500=
|
|
COMMENT IF WE ARRIVE AT ERROR WE HAVE MORE THAN 63 CHARACTERS 13505000=02116000=
|
|
IN AN IDENTIFIER OR NUMBER; 13510000=02116500=
|
|
NUMBERS: 13515000=02117500=
|
|
TALLY:= 63; 13520000=02117500=
|
|
RESULT:= 6"3"; 13525000=02117500=
|
|
THRU COMCOUNT DO 13530000=02118500=
|
|
BEGIN 13535000=02118500=
|
|
STREAMINCTALLY(+1); 13535100
|
|
IF STREAMSCLSS(6"0") THEN 13535200
|
|
GO EXIT; 13535300
|
|
STREAMSKIPSI(+1) 13535400
|
|
END; 13535500
|
|
GO ERROR; 13540000=02119000=
|
|
EXIT: 13545000=02120000=
|
|
ST1:= TALLY; % "ST1" CONTAINS NUMBER OF CHARACTERS WE ARE 13550000=02120000=
|
|
% GOING TO MOVE INTO THE "ACCUMULATOR". 13555000=02120500=
|
|
STREAMINCTALLY(COUNTV); 13560000=02121000=
|
|
ST2:= TALLY; 13565000=02121000=
|
|
COUNT:= ST2; 13570000=02121500=
|
|
COMMENT THIS CODE UPDATED "COUNT"; 13590000=02122000=
|
|
STREAMSETDI(ACCUM, AX); 13595000=02122500=
|
|
STREAMSETLOCSI(ST2); 13600000=02122500=
|
|
STREAMSKIPSI(+5); 13600100=02122500=
|
|
STREAMTRANSFERCHR(3); 13605000=02122500=
|
|
COMMENT THIS CODE PLACES "COUNT" IN "ACCUM" AS WELL; 13615000=02123000=
|
|
STREAMSKIPDI(+COUNTV); % POSITION "DI" PAST CHARACTERS ALREADY 13620000=02123500=
|
|
% IN THE "ACCUMULATOR", IF ANY. 13625000=02124000=
|
|
STREAMSETSI(SBUFF, NCRV); 13630000=02124500=
|
|
STREAMTRANSFERCHR(ST1); 13635000=02124500=
|
|
COMMENT MOVE CHARACTERS INTO "ACCUM"; 13645000=02125000=
|
|
FINIS: 13650000=02126000=
|
|
NCR:= STREAMGETSI; 13655000=02126000=
|
|
COMMENT RESET "NCR" TO LOCATION OF NEXT CHARACTER TO BE SCANNED; 13680000=02126500=
|
|
END OF SCNN; 13685000=02127000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%13686000
|
|
LABEL 13690000=02127500=
|
|
L; % 13695000=02127500=
|
|
L: SCNN(SBUFF, NCR, COUNT, ACCUM, 1, 63-COUNT, RESULT, RESULT, COUNT, 13700000=02129000=
|
|
0, NCR, 0); 13705000=02129000=
|
|
IF NCR = LCR THEN 13710000=02129500=
|
|
BEGIN 13715000=02130000=
|
|
READACARD; 13720000=02130500=
|
|
GO TO L; % GO DIRECTLY TO L, DO NOT PASS GO, 13760000=02135500=
|
|
% DO NOT COLLECT $200. 13765000=02136000=
|
|
END; 13770000=02136500=
|
|
END SCANNER; 13775000=02137000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%13780000=02137000=
|
|
DEFINE 13785000=02181000=
|
|
WRITELINE = BEGIN 13790000=02181000=
|
|
UNPACKBICTOEBCDIC(LIN, 0, EBCDICBUFF, 0, 15*8); 13790100
|
|
IF SINGLTOG THEN 13790200
|
|
WRITE(LINE, 20, EBCDICBUFF[*]) 13795000=02181250=
|
|
ELSE 13800000=02181250=
|
|
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]) 13805000=02181500=
|
|
END #, 13805100
|
|
PRINTCARD = BEGIN 13850000=02182500=
|
|
EDITLINE(LIN, SBUFF, FCR, L.[11:10], SGNO, 13855000=02182760=
|
|
L.[2:2], MEDIUM, OMITTING); 13860000=02182760=
|
|
IF NOHEADING THEN 13865000=02183000=
|
|
DATIME; 13870000=02183000=
|
|
WRITELINE; 13875000=02183000=
|
|
END #; 13880000=02183250=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%13882000
|
|
PROCEDURE EDITLINE(LINE, SBUFF, NCR, R, S, L, SYMBOL, OMIT); 13885000=02183500=
|
|
VALUE 13890000=02183750=
|
|
NCR, R, S, L, SYMBOL, OMIT; 13895000=02183750=
|
|
ARRAY 13920100
|
|
LINE[0], SBUFF[0]; 13920200
|
|
REAL 13920300
|
|
NCR, R, S, L, SYMBOL; 13920400
|
|
BOOLEAN 13920500
|
|
OMIT; 13920600
|
|
BEGIN 13925000=02184000=
|
|
STREAMLOCALS; 13925100
|
|
STREAMSETDI(LINE, 0); 13930000=02184250=
|
|
STREAMSMEARLIT(16, 6" "); 13935000=02184250=
|
|
STREAMSETSI(SBUFF, NCR); 13940000=02184500=
|
|
STREAMTRANSFERWDS(9); 13945000=02184500=
|
|
STREAMSMEARLIT(8, 6" "); 13950000=02184750=
|
|
STREAMTRANSFERWDS(1); % SEQUENCE NUMBER. 13955000=02185000=
|
|
STREAMSMEARLIT(1, 6" "); 13960000=02185250=
|
|
STREAMSETLOCSI(SYMBOL); 13965000=02185250=
|
|
STREAMSKIPSI(+6); 13970000=02185250=
|
|
STREAMTRANSFERCHR(2); 13975000=02185500=
|
|
STREAMSMEARLIT(1, 6" "); 13980000=02185500=
|
|
STREAMSETLOCSI(R); 13985000=02185750=
|
|
STREAMSKIPSI(+4); 13990000=02185750=
|
|
IF STREAMSCEQL(6" ") THEN 13995000=02186000=
|
|
STREAMSMEARLIT(12, 6" ") 14000000=02186000=
|
|
ELSE 14005000=02186000=
|
|
BEGIN 14010000=02186250=
|
|
STREAMSETLOCSI(S); 14015000=02186300=
|
|
STREAMTRANSFERDEC(4); 14020000=02186300=
|
|
STREAMSMEARLIT(1, 6":"); 14025000=02186300=
|
|
STREAMSETLOCSI(R); 14030000=02186400=
|
|
STREAMTRANSFERDEC(4); 14035000=02186400=
|
|
STREAMSMEARLIT(1, 6":"); 14040000=02186400=
|
|
STREAMSETLOCSI(L); 14045000=02186500=
|
|
STREAMTRANSFERDEC(1); 14050000=02186500=
|
|
STREAMSMEARLIT(1, 6" "); 14055000=02186500=
|
|
END; 14060000=02186600=
|
|
THRU REAL(OMIT) DO 14065000=02186760=
|
|
BEGIN 14065100
|
|
STREAMSKIPDI(-12); 14065200
|
|
STREAMTRANSFERLIT(8, 6" :OMIT:"); 14065300
|
|
STREAMTRANSFERLIT(4, 6" "); 14065400
|
|
STREAMSETDI(LINE, 0); 14065500
|
|
STREAMTRANSFERLIT(8, 6" :OMIT:"); 14065600
|
|
END; 14065700
|
|
END EDITLINE; 14075000=02187000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14080000=02187250=
|
|
COMMENT COMPARE COMPARES SEQUENCE NUMBERS OF TAPE AND CARD. IF 14085000=02187250=
|
|
TAPE IS SMALLER THEN RESULT = 0 ELSE IF CARD IS SMALLER 14090000=02187500=
|
|
RESULT = 1 ELSE RESULT = 2; 14095000=02187750=
|
|
REAL PROCEDURE COMPARE(TAPE, TX, CARD, CX); 14100000=02188000=
|
|
VALUE 14110000=02188000=
|
|
TX, CX; 14115000=02188000=
|
|
ARRAY 14115100
|
|
TAPE, CARD[0]; 14115200
|
|
REAL 14115300
|
|
TX, CX; 14115400
|
|
BEGIN 14125000=02188250=
|
|
STREAMLOCALS; 14125050
|
|
TALLY:= 0; 14125100
|
|
STREAMSETSI(TAPE, TX); 14130000=02188500=
|
|
STREAMSETDI(CARD, CX); 14135000=02188500=
|
|
IF STREAMCOMPAREGEQ(8) THEN 14140000=02188750=
|
|
BEGIN 14145000=02189000=
|
|
STREAMSKIPSI(-8); 14150000=02189250=
|
|
STREAMSKIPDI(-8); 14155000=02189250=
|
|
TALLY:= 1; 14160000=02189250=
|
|
IF STREAMCOMPAREEQL(8) THEN 14165000=02189500=
|
|
TALLY:= 2 14170000=02189750=
|
|
END; 14175000=02189750=
|
|
COMPARE:= TALLY 14180000=02190000=
|
|
END COMPARE; 14185000=02190250=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14186000
|
|
PROCEDURE OUTPUTSOURCE; 14190000=02190500=
|
|
BEGIN 14195000=02190750=
|
|
LABEL 14200000=02191000=
|
|
LCARD, 14205000=02191000=
|
|
LTAPE, 14210000=02191000=
|
|
AWAY; 14215000=02191000=
|
|
SWITCH 14220000=02191250=
|
|
SW:= LCARD, 14225000=02191250=
|
|
LCARD, 14230000=02191250=
|
|
LTAPE, 14235000=02191250=
|
|
AWAY, 14240000=02191250=
|
|
LCARD, 14245000=02191250=
|
|
LTAPE; 14250000=02191250=
|
|
IF SEQTOG THEN % RESEQUENCING. 14255000=02191500=
|
|
BEGIN 14260000=02191750=
|
|
IF TOTALNO = -10 OR NEWBASE THEN 14265000=02192000=
|
|
BEGIN 14270000=02192250=
|
|
NEWBASE:= FALSE; 14275000=02192500=
|
|
GTI1:= TOTALNO:= BASENUM 14280000=02192750=
|
|
END 14285000=02193000=
|
|
ELSE 14290000=02193000=
|
|
GTI1:= TOTALNO:= TOTALNO+ADDVALUE; 14295000=02193000=
|
|
CHANGESEQ(GTI1, SBUFF, LCR); 14300000=02193250=
|
|
END; 14305000=02193500=
|
|
IF OMITTING THEN 14330000=02194250=
|
|
IF NOT LISTATOG THEN 14335000=02194250=
|
|
GO AWAY; 14340000=02194250=
|
|
GO SW[LASTUSED]; 14345000=02194500=
|
|
LCARD: 14350000=02195000=
|
|
IF LISTER OR LISTPTOG THEN 14355000=02195000=
|
|
PRINTCARD; 14360000=02195000=
|
|
GO AWAY; 14365000=02195250=
|
|
LTAPE: 14370000=02195750=
|
|
IF LISTER THEN 14375000=02195750=
|
|
PRINTCARD; 14380000=02195750=
|
|
% GO AWAY; 14385000=02196000=
|
|
AWAY: 14390000=02196500=
|
|
END OUTPUTSOURCE; 14395000=02196500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14400000=02196500=
|
|
PROCEDURE BEGINPRINT; 14405000=02196510=
|
|
BEGIN 14410000=02196520=
|
|
PROCEDURE STUFF(N, L); 14415000=02196530=
|
|
VALUE 14420000=02196530=
|
|
N; 14425000=02196530=
|
|
REAL 14425100
|
|
N; 14425200
|
|
ARRAY 14425300
|
|
L[0]; 14425400
|
|
BEGIN 14430000=02196540=
|
|
STREAMLOCALS; 14430100
|
|
STREAMSETDI(L, 0); 14435000=02196550=
|
|
STREAMSMEARLIT(14*8, 6" "); 14440000=02196550=
|
|
STREAMSETLOCSI(N); 14455000=02196560=
|
|
STREAMTRANSFERDEC(8); 14460000=02196560=
|
|
END; 14465000=02196570=
|
|
STUFF(BEGINSTACK[BSPOINT], LIN); 14470000=02196580=
|
|
IF NOHEADING THEN 14475000=02196590=
|
|
DATIME; 14480000=02196590=
|
|
WRITELINE; 14485000=02196590=
|
|
END BEGINPRINT; 14490000=02196610=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14495000=02196610=
|
|
PROCEDURE READACARD; 14500000=02196750=
|
|
COMMENT READACARD READS CARDS FROM EITHER THE CARD READER OR THE 14510000=02197000=
|
|
TAPE MERGING AS REQUESTED AND CREATING A NEW TAPE AND 14515000=02197250=
|
|
LISTING IF REQUESTED. READACARD ALSO INSERTS A PERCENT 14520000=02197500=
|
|
SIGN AS AN END OF CARD SENTINEL IN COLUMN 73 AND SETS 14525000=02197750=
|
|
FCR,NCR,LCR,TLCR, AND CLCR; 14530000=02198000=
|
|
BEGIN 14535000=02198250=
|
|
LABEL 14955000=02210000=
|
|
CARDONLY, 14960000=02210000=
|
|
CARDLAST, 14965000=02210000=
|
|
TAPELAST, 14970000=02210000=
|
|
EXIT, 14975000=02210000=
|
|
FIRSTTIME, 14980000=02210250=
|
|
EOF, 14985000=02210250=
|
|
USETHESWITCH, 14990000=02210500=
|
|
COMPAR, 14995000=02210500=
|
|
XIT, 15000000=02210500=
|
|
LIBEND, 15005000=02210500=
|
|
LIBTLAST, 15010000=02210500=
|
|
LIBCLAST; 15015000=02210500=
|
|
LABEL 15020000=02210600=
|
|
COPYLIB, 15025000=02210600=
|
|
COPYEOF; 15030000=02210600=
|
|
SWITCH 15035000=02210750=
|
|
USESWITCH:= CARDONLY, 15040000=02210750=
|
|
CARDLAST, 15045000=02210750=
|
|
TAPELAST, 15050000=02210750=
|
|
FIRSTTIME, 15055000=02211000=
|
|
LIBCLAST, 15060000=02211000=
|
|
LIBTLAST, 15065000=02211000=
|
|
COPYLIB; 15070000=02211000=
|
|
BOOLEAN 15075000=02211250=
|
|
DOLLAR2TOG; 15080000=02211250=
|
|
IF ERRORCOUNT >= ERRMAX THEN 15085000=02211500=
|
|
ERR(611); % ERR LIMIT EXCEEDED - STOP. 15090000=02211500=
|
|
USETHESWITCH: 15095000=02212000=
|
|
GO TO USESWITCH[LASTUSED]; 15100000=02212000=
|
|
MOVE(1, TEXT[LASTUSED.LINKR,*], LASTUSED.LINKC, 15105000=02212500=
|
|
DEFINEARRAY, DEFINEINDEX-2); 15110000=02212500=
|
|
LASTUSED:= LASTUSED+1; 15115000=02212750=
|
|
NCR:= LCR-1; 15120000=02213000=
|
|
GO TO XIT; 15125000=02213250=
|
|
FIRSTTIME: 15130000=02213750=
|
|
READ(CARD, CARDRECSIZE, EBCDICBUFF[*]); 15135000=02213750=
|
|
PACKEBCDICTOBIC(EBCDICBUFF, 0, CBUFF, 0, 10*8); 15135100
|
|
FCR:= NCR:= (LCR:= 9)-9; 15140000=02214000=
|
|
SBUFF:= CBUFF; 15140200
|
|
MEDIUM:= 6"C "; 15145000=02214100=
|
|
IF EXAMIN(SBUFF, FCR) ^= 6"$" AND LISTER THEN 15150000=02214200=
|
|
PRINTCARD; 15155000=02214200=
|
|
PUTSEQNO(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR); 15160000=02214250=
|
|
CARDNUMBER:= CONV(INFO[LASTSEQROW,*], LASTSEQUENCE-1, 5, 8); 15165000=02214260=
|
|
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 15170000=02214500=
|
|
GO XIT; 15175000=02214750=
|
|
15180000=02215000=
|
|
COMMENT WE HAVE JUST INITIALIZED CARD INPUT; 15185000=02215000=
|
|
CARDONLY: 15190000=02215500=
|
|
READ(CARD, CARDRECSIZE, EBCDICBUFF[*]); 15205000=02215500=
|
|
PACKEBCDICTOBIC(EBCDICBUFF, 0, CBUFF, 0, 10*8); 15205100
|
|
LCR:= 9; 15210000=02215750=
|
|
SBUFF:= CBUFF; 15210100
|
|
GO EXIT; 15215000=02215750=
|
|
CARDLAST: 15220000=02216250=
|
|
READ(CARD, CARDRECSIZE, EBCDICBUFF[*])[EOF]; 15235000=02216250=
|
|
PACKEBCDICTOBIC(EBCDICBUFF, 0, CBUFF, 0, 10*8); 15235100
|
|
CLCR:= 9; 15240000=02216500=
|
|
SBUFF:= CBUFF; 15240100
|
|
GO COMPAR; 15245000=02216750=
|
|
EOF: 15250000=02217250=
|
|
DEFINEARRAY[25]:= 6"ND;END."&6"E"[46:4:5]; 15255000=02217250=
|
|
DEFINEARRAY[34]:= 6"9999"&6"9999"[46:22:23]; 15260000=02217500=
|
|
CLCR:= 34; 15265000=02217750=
|
|
SBUFF:= DEFINEARRAY; 15265100
|
|
PUTSEQNO(DEFINEARRAY, 33, SBUFF, CLCR-8); 15270000=02218000=
|
|
TURNONSTOPLIGHT(6"%", DEFINEARRAY, CLCR-8); 15275000=02218250=
|
|
% 15280000=02218400=
|
|
GO COMPAR; 15285000=02218500=
|
|
COMMENT THIS RELEASES THE PREVIOUS CARD FROM THE CARD READER AND 15295000=02218750=
|
|
SETS UP CLCR; 15300000=02219000=
|
|
TAPELAST: 15305000=02219500=
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 15310000=02219500=
|
|
GO TO COMPAR; 15315000=02219500=
|
|
COMMENT THIS RELEASES THE PREVIOUS CARD FROM TAPE AND SETS UP TLCR; 15325000=02219750=
|
|
LIBCLAST: 15330000=02220250=
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 15335000=02220250=
|
|
GO TO COMPAR; 15400000=02222750=
|
|
LIBTLAST: 15405000=02223250=
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 15410000=02223250=
|
|
GO COMPAR; 15450000=02224010=
|
|
COPYLIB: 15455000=02224030=
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 15460000=02224030=
|
|
GO TO EXIT; 15485000=02224060=
|
|
COPYEOF: 15490000=02224080=
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 15495000=02224080=
|
|
GO COPYLIB; 15535000=02224120=
|
|
COMPAR: 15540000=02224500=
|
|
; 15545000=02224500=
|
|
EXIT: 15565000=02225250=
|
|
NCR:= FCR:= LCR-9; COMMENT SETS UP NCR AND FCR; 15570000=02225250=
|
|
IF CHECKTOG AND EXAMIN(SBUFF, FCR) ^= 6"$" THEN %$-CARDS DON"T COUNT15585000=02225750=
|
|
IF COMPARE(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR) = 1 THEN 15590000=02226000=
|
|
IF SEQERRTOG THEN 15595000=02226250=
|
|
BEGIN 15600000=02226250=
|
|
FLAG(610); 15605000=02226250=
|
|
NUMSEQUENCEERRORS:= NUMSEQUENCEERRORS+1; 15610000=02226300=
|
|
END 15615000=02226500=
|
|
ELSE 15620000=02226500=
|
|
BEGIN % SEQUENCE WARNING 15625000=02226500=
|
|
BLANKET(14, LIN); 15630000=02226750=
|
|
SEQUENCEWARNING(LIN[13]); 15635000=02227000=
|
|
IF NOHEADING THEN 15640000=02227250=
|
|
DATIME; 15645000=02227250=
|
|
WRITELINE; 15650000=02227250=
|
|
IF NOT LISTER THEN 15655000=02227500=
|
|
PRINTCARD; 15660000=02227500=
|
|
NUMSEQUENCEERRORS:= NUMSEQUENCEERRORS+1; 15665000=02227600=
|
|
END; 15670000=02227750=
|
|
IF EXAMIN(SBUFF, FCR) = 6"$" THEN 15675000=02228250=
|
|
BEGIN 15680000=02228500=
|
|
IF LISTPTOG OR PRINTDOLLARTOG THEN 15685000=02228750=
|
|
PRINTCARD; 15690000=02228750=
|
|
NCR:= NCR+32768; % INC BY ONE CHAR 15695000=02229000=
|
|
DOLLARCARD; 15700000=02229000=
|
|
15720000=02229250=
|
|
COMMENT DONT FORGET THAT NCR IS NOT WORD MODE, BUT CHAR. MODE POINTER; 15725000=02229250=
|
|
GO USETHESWITCH; 15730000=02229500=
|
|
END; 15735000=02229750=
|
|
IF EXAMIN(SBUFF, FCR) = 6" " THEN 15740000=02230000=
|
|
IF DOLLAR2TOG:= EXAMIN(SBUFF, FCR+32768) = 6"$" THEN 15745000=02230100=
|
|
BEGIN 15750000=02230250=
|
|
OUTPUTSOURCE; 15755000=02230500=
|
|
NCR:= NCR+65536; % INC BY TWO CHARS 15760000=02230750=
|
|
DOLLARCARD; 15765000=02230750=
|
|
END; 15780000=02231250=
|
|
CARDCOUNT:= CARDCOUNT+1; 15855000=02234500=
|
|
IF DOLLAR2TOG THEN 15860000=02234600=
|
|
BEGIN 15865000=02234650=
|
|
DOLLAR2TOG:= FALSE; 15870000=02234650=
|
|
GO USETHESWITCH; 15875000=02234650=
|
|
END; 15880000=02234650=
|
|
PUTSEQNO(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR); 15885000=02234750=
|
|
CARDNUMBER:= 15890000=02234800=
|
|
IF SEQTOG THEN 15895000=02234800=
|
|
TOTALNO+ADDVALUE 15900000=02234800=
|
|
ELSE 15905000=02234800=
|
|
CONV(INFO[LASTSEQROW,*], LASTSEQUENCE-1, 5, 8); 15910000=02234900=
|
|
OUTPUTSOURCE; 15915000=02235000=
|
|
IF OMITTING THEN 15920000=02235250=
|
|
GO USETHESWITCH; 15925000=02235250=
|
|
% 15930000=02235500=
|
|
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 15935000=02235750=
|
|
IF BUILDLINE THEN 15940000=02236000=
|
|
IF LASTADDRESS ^= (LASTADDRESS:= L.[11:10]) THEN 15945000=02236250=
|
|
BEGIN 15950000=02236500=
|
|
ENILSPOT:= LASTADDRESS & CARDNUMBER[37:27:28]; 15955000=02236750=
|
|
IF(ENILPTR:= ENILPTR+1) >= 1023 THEN 15960000=02237000=
|
|
BEGIN 15965000=02237250=
|
|
FLAG(80); 15970000=02237250=
|
|
ENILPTR:= 512; 15975000=02237250=
|
|
END; 15980000=02237250=
|
|
END; 15985000=02237500=
|
|
XIT: 15990000=02238000=
|
|
END READACARD; 15995000=02238000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16750000=02238840=
|
|
REAL PROCEDURE CONVERT; 16755000=02248000=
|
|
BEGIN 16760000=02249000=
|
|
REAL 16765000=02249000=
|
|
T; 16770000=02249000=
|
|
INTEGER 16775000=02249000=
|
|
N; 16780000=02249000=
|
|
TLO:= 0; 16785000=02250000=
|
|
THI:= T:= CONV(ACCUM, 1, TCOUNT, N:= (COUNT-TCOUNT) MOD 8); 16790000=02251000=
|
|
FOR N:= TCOUNT+N STEP 8 UNTIL COUNT-1 DO 16795000=02252000=
|
|
IF DPTOG THEN 16800000=02253000=
|
|
BEGIN 16805000=02254000=
|
|
THI:= FIRSTWORD( 16810000=02256000=
|
|
DOUBLE(THI, TLO)*100000000.0 + CONV(ACCUM, 1, N, 8), TLO); 16815000=02256000=
|
|
T:= THI; 16820000=02257000=
|
|
END 16825000=02259000=
|
|
ELSE 16830000=02259000=
|
|
T:= T*100000000+CONV(ACCUM, 1, N, 8); 16835000=02259000=
|
|
CONVERT:= T; 16840000=02260000=
|
|
END; 16845000=02261000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16902000
|
|
PROCEDURE DUMPINFO; 16905000=02264000=
|
|
BEGIN 16910000=02264050=
|
|
ARRAY 16915000=02264100=
|
|
A[0:14]; 16920000=02264100=
|
|
INTEGER 16925000=02264100=
|
|
JEDEN, 16930000=02264100=
|
|
DWA; 16935000=02264100=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16936000
|
|
PROCEDURE OCTALWORDS(S, SX, D, DX, N); 16940000=02264400=
|
|
VALUE 16945000=02264400=
|
|
SX, DX, N; 16950000=02264400=
|
|
ARRAY 16950100
|
|
S, D[0]; 16950200
|
|
REAL 16950300
|
|
SX, DX, N; 16950400
|
|
BEGIN 16955000=02264450=
|
|
STREAMLOCALS; 16955100
|
|
STREAMSETSI(S, SX); 16960000=02264500=
|
|
STREAMSETDI(D, DX); 16965000=02264500=
|
|
THRU N DO 16970000=02264600=
|
|
BEGIN 16970100
|
|
THRU 2 DO 16970200
|
|
BEGIN 16970300
|
|
THRU 8 DO 16970400
|
|
BEGIN 16970500
|
|
STREAMSETDB(3, 0); 16970600
|
|
THRU 3 DO 16970700
|
|
BEGIN 16975000=02264600=
|
|
IF STREAMTESTSB THEN 16975100
|
|
STREAMSETDB(1, 1) 16975200
|
|
ELSE 16975300
|
|
STREAMSETDB(1, 0); 16975400
|
|
16975500
|
|
STREAMSKIPSB(1); 16975600
|
|
END; 16975700
|
|
END; 16975800
|
|
16975900
|
|
STREAMSMEARLIT(1, 6" "); 16976000
|
|
END; 16976100
|
|
16976200
|
|
STREAMSMEARLIT(2, 6" "); 16976300
|
|
END; 16976400
|
|
END OF OCTALWORDS; 16985000=02264650=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%16986000
|
|
PROCEDURE ALPHAWORDS(S, SX, D, DX, N); 16990000=02264700=
|
|
VALUE 16995000=02264700=
|
|
SX, DX, N; 17000000=02264700=
|
|
ARRAY 17000100
|
|
S, D[0]; 17000200
|
|
REAL 17000300
|
|
SX, DX, N; 17000400
|
|
BEGIN 17005000=02264750=
|
|
STREAMLOCALS; 17005100
|
|
STREAMSETSI(S, SX); 17010000=02264800=
|
|
STREAMSETDI(D, DX); 17015000=02264800=
|
|
THRU N DO 17020000=02264850=
|
|
BEGIN 17020100
|
|
THRU 2 DO 17020200
|
|
BEGIN 17020300
|
|
THRU 4 DO 17020400
|
|
BEGIN 17020500
|
|
STREAMSMEARLIT(1, 6" "); 17020600
|
|
STREAMTRANSFERCHR(1) 17020700
|
|
END; 17020800
|
|
17020900
|
|
STREAMSMEARLIT(1, 6" ") 17021000
|
|
END; 17021100
|
|
17021200
|
|
STREAMSMEARLIT(2, 6" ") 17021300
|
|
END; 17025000=02264850=
|
|
END OF ALPHAWORDS; 17030000=02264900=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17032000
|
|
IF NOHEADING THEN 17035000=02264950=
|
|
DATIME; 17040000=02264950=
|
|
WRITE(LINE[SPACE 2], < //"ELBAT">); 17045000=02264950=
|
|
FOR JEDEN:= 0 STEP 6 UNTIL 71 DO 17050000=02265000=
|
|
BEGIN 17055000=02265050=
|
|
BLANKET(14, A); 17060000=02265100=
|
|
OCTALWORDS(ELBAT, JEDEN, A, 0, 6); 17065000=02265100=
|
|
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 17069900
|
|
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 17070000=02265150=
|
|
END; 17075000=02265200=
|
|
BLANKET(14, A); 17080000=02265250=
|
|
OCTALWORDS(ELBAT, 72, A, 0, 4); 17085000=02265250=
|
|
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 17089900
|
|
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 17090000=02265300=
|
|
FOR JEDEN:= 0 STEP 1 UNTIL NEXTINFO DIV 256 DO 17095000=02265350=
|
|
BEGIN 17100000=02265400=
|
|
WRITE(LINE[SPACE 2], < //"INFO[", I2, ",*]">, JEDEN); 17105000=02265450=
|
|
FOR DWA:= 0 STEP 6 UNTIL 251 DO 17110000=02265500=
|
|
BEGIN 17115000=02265550=
|
|
BLANKET(14, A); 17120000=02265600=
|
|
ALPHAWORDS(INFO[JEDEN,*], DWA, A, 0, 6); 17125000=02265600=
|
|
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 17129900
|
|
WRITE(LINE, 20, EBCDICBUFF[*]); 17130000=02265650=
|
|
BLANKET(14, A); 17135000=02265700=
|
|
OCTALWORDS(INFO[JEDEN,*], DWA, A, 0, 6); 17140000=02265700=
|
|
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 17144900
|
|
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 17145000=02265750=
|
|
END; 17150000=02265800=
|
|
BLANKET(14, A); 17155000=02265850=
|
|
ALPHAWORDS(INFO[JEDEN,*], 252, A, 0, 4); 17160000=02265850=
|
|
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 17164900
|
|
WRITE(LINE, 20, EBCDICBUFF[*]); 17165000=02265900=
|
|
BLANKET(14, A); 17170000=02265950=
|
|
OCTALWORDS(INFO[JEDEN, *], 252, A, 0, 4); 17175000=02265950=
|
|
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 17179900
|
|
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 17180000=02266000=
|
|
END; 17185000=02266050=
|
|
END OF DUMPINFO; 17190000=02266100=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17195000=02266100=
|
|
DEFINE 17200000=02277000=
|
|
SKAN = BEGIN 17205000=02277000=
|
|
COUNT:= RESULT:= ACCUM[1]:= 0; 17210000=02278000=
|
|
SCANNER; 17215000=02279000=
|
|
Q:= ACCUM[1]; 17220000=02280000=
|
|
END #; 17225000=02281000=
|
|
17230000=02282000=
|
|
COMMENT DOLLARCARD HANDLES THE COMPILER CONTROL CARDS. 17235000=02282000=
|
|
ALL COMPILER- AND USER-DEFINED OPTIONS ARE KEPT 17240000=02283000=
|
|
IN THE ARRAY "OPTIONS". 17245000=02284000=
|
|
EACH OPTION HAS A TWO-WORD ENTRY: 17250000=02285000=
|
|
17255000=02286000=
|
|
WORD CONTAINS 17260000=02287000=
|
|
---- -------- 17265000=02288000=
|
|
1 ENTRY FROM ACCUM[1]: 00XZZZZ, WHERE 17270000=02289000=
|
|
X IS THE SIZE OF THE ID AND 17275000=02290000=
|
|
ZZZZZ IS THE FIRST FIVE CHARS OF THE ID. 17280000=02291000=
|
|
2 PUSH-DOWN, 47-BIT STACK CONTAINING THE 17285000=02292000=
|
|
HISTORY OF THE SETTINGS OF THIS OPTION. 17290000=02293000=
|
|
17295000=02294000=
|
|
IN "FINDOPTION", ALL COMPILER-DEFINED OPTIONS ARE USUALLY 17300000=02295000=
|
|
LOCATED BASED UPON A UNIQUE NUMBER ASSIGNED TO EACH. 17305000=02296000=
|
|
FOR ALL USER-DEFINED OPTIONS, A SEQUENTIAL TABLE SEARCH IS 17310000=02297000=
|
|
INITIATED USING "USEROPINX" AS THE INITIAL INDEX INTO THE 17315000=02298000=
|
|
"OPTIONS" ARRAY. IF THE NUMBER OF COMPILER-DEFINED OPTIONS 17320000=02299000=
|
|
IS CHANGED, THEN "USEROPINX" MUST BE ACCORDINGLY CHANGED. 17325000=02300000=
|
|
THE NUMBER OF USER DEFINED OPTIONS ALLOWED CAN BE 17330000=02301000=
|
|
CHANGED BY CHANGING THE DEFINE "OPARSIZE". 17335000=02302000=
|
|
THE VARIABLE "OPTIONWORD" CONTAINS THE CURRENT TRUE OR FALSE 17340000=02303000=
|
|
SETTING OF ALL OF THE COMPILER-DEFINED OPTIONS, ONE BIT PER 17345000=02304000=
|
|
OPTION. 17350000=02305000=
|
|
; 17355000=02306000=
|
|
BOOLEAN PROCEDURE FINDOPTION(BIT); 17360000=02307000=
|
|
VALUE 17365000=02307000=
|
|
BIT; 17370000=02307000=
|
|
INTEGER 17375000=02307000=
|
|
BIT; 17380000=02307000=
|
|
BEGIN 17385000=02308000=
|
|
LABEL 17390000=02309000=
|
|
FOUND; 17395000=02309000=
|
|
REAL 17400000=02310000=
|
|
ID; 17405000=02310000=
|
|
OPINX:= 2*BIT-4; 17410000=02311000=
|
|
WHILE ID:= OPTIONS[OPINX:= OPINX+2] ^= 0 DO 17415000=02313000=
|
|
IF Q = ID THEN 17415100=02313000=
|
|
GO FOUND; 17420000=02313000=
|
|
; 17425000=02313000=
|
|
OPTIONS[OPINX]:= Q; % NEW USER-DEFINED OPTION. 17430000=02314000=
|
|
FOUND: 17435000=02316000=
|
|
IF OPINX+1 > OPARSIZE THEN 17440000=02316000=
|
|
FLAG(602) 17445000=02316000=
|
|
ELSE % TOO MANY USER OPTIONS 17450000=02316000=
|
|
FINDOPTION:= BOOLEAN(OPTIONS[OPINX+1]); 17455000=02317000=
|
|
END FINDOPTION; 17460000=02318000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17465000=02318000=
|
|
PROCEDURE DOLLARCARD; 17470000=02319000=
|
|
BEGIN 17475000=02320000=
|
|
PROCEDURE SWITCHIT(XBIT); 17480000=02321000=
|
|
VALUE 17485000=02321000=
|
|
XBIT; 17490000=02321000=
|
|
INTEGER 17495000=02321000=
|
|
XBIT; 17500000=02321000=
|
|
BEGIN 17505000=02322000=
|
|
BOOLEAN 17510000=02323000=
|
|
B, 17515000=02323000=
|
|
T; 17520000=02323000=
|
|
INTEGER 17525000=02324000=
|
|
SAVEINX; 17530000=02324000=
|
|
LABEL 17535000=02325000=
|
|
XMODE0, 17540000=02325000=
|
|
XMODE1, 17545000=02325000=
|
|
XMODE2, 17550000=02325000=
|
|
XMODE3, 17555000=02325000=
|
|
XMODE4, 17560000=02325000=
|
|
ALONG; 17565000=02325000=
|
|
SWITCH 17570000=02326000=
|
|
SW:= XMODE0, 17575000=02326000=
|
|
XMODE1, 17580000=02326000=
|
|
XMODE2, 17585000=02326000=
|
|
XMODE3, 17590000=02326000=
|
|
XMODE4; 17595000=02326000=
|
|
SETTING:= FINDOPTION(XBIT); 17600000=02327000=
|
|
SKAN; 17605000=02327000=
|
|
GO SW[XMODE+1]; 17610000=02328000=
|
|
XMODE0: 17615000=02329000=
|
|
% FIRST OPTION ON CARD, BUT NOT SET, RESET, OR POP. 17620000=02329000=
|
|
OPTIONWORD:= BOOLEAN(0); 17625000=02330000=
|
|
FOR SAVEINX:= 1 STEP 2 UNTIL OPARSIZE DO 17630000=02331000=
|
|
OPTIONS[SAVEINX]:= 0; 17635000=02331000=
|
|
IF BUILDLINE.[2:1] THEN 17640000=02331050=
|
|
BUILDLINE.[0:1]:= SEQXEQTOG:= FALSE; 17645000=02331060=
|
|
XMODE:= 1; 17650000=02332000=
|
|
IF LASTUSED < 5 AND LASTUSED ^= 3 THEN 17655000=02332000=
|
|
LASTUSED:= 1; 17660000=02332000=
|
|
XMODE1: 17665000=02333000=
|
|
% NOT FIRST OPTION AND NOT BEING SET, RESET, OR POPPED. 17670000=02333000=
|
|
OPTIONS[OPINX+1]:= REAL(TRUE); 17675000=02334000=
|
|
IF XBIT < USEROPINX THEN 17680000=02335000=
|
|
OPTIONWORD:= OPTIONWORD & TRUE[XBIT:1]; 17685000=02335000=
|
|
GO ALONG; 17690000=02336000=
|
|
XMODE2: 17695000=02337000=
|
|
% RESET; 17700000=02337000=
|
|
OPTIONS[OPINX+1]:= REAL(FALSE & SETTING[46:45:46]); 17705000=02338000=
|
|
IF XBIT < USEROPINX THEN 17710000=02339000=
|
|
OPTIONWORD:= OPTIONWORD & FALSE[XBIT:1]; 17715000=02339000=
|
|
GO ALONG; 17720000=02340000=
|
|
XMODE3: 17725000=02341000=
|
|
% SET. 17730000=02341000=
|
|
SAVEINX:= OPINX; % REMEMBER OPTION WE ARE SETTING. 17735000=02342000=
|
|
B:= 17740000=02343000=
|
|
IF Q = 6"1=0000" THEN 17745000=02343000=
|
|
BOOLEXP 17750000=02343000=
|
|
ELSE 17755000=02343000=
|
|
TRUE; 17760000=02343000=
|
|
OPTIONS[SAVEINX+1]:= REAL(B & SETTING[46:46]); 17765000=02352000=
|
|
IF XBIT < USEROPINX THEN 17770000=02353000=
|
|
OPTIONWORD:= OPTIONWORD & B[XBIT:1]; 17775000=02353000=
|
|
GO ALONG; 17780000=02354000=
|
|
XMODE4: 17785000=02355000=
|
|
% POP. 17790000=02355000=
|
|
OPTIONS[OPINX+1]:= REAL(B:= SETTING.[46:46]); 17795000=02356000=
|
|
IF XBIT < USEROPINX THEN 17800000=02357000=
|
|
OPTIONWORD:= OPTIONWORD & B[XBIT:1]; 17805000=02357000=
|
|
ALONG: 17810000=02359000=
|
|
END SWITCHIT; 17815000=02359000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%17820000=02359000=
|
|
LABEL 17825000=02360000=
|
|
EXIT, 17830000=02360000=
|
|
AGAIN, 17835000=02360000=
|
|
SKANAGAIN, 17840000=02360000=
|
|
LENGTH1, 17845000=02360000=
|
|
LENGTH2, 17850000=02360000=
|
|
LENGTH3, 17855000=02360000=
|
|
LENGTH4, 17860000=02361000=
|
|
LENGTH5, 17865000=02361000=
|
|
LENGTH6, 17870000=02361000=
|
|
LENGTH7, 17875000=02361000=
|
|
LENGTH8, 17880000=02361000=
|
|
LENGTH9, 17885000=02362000=
|
|
WHATISIT, 17890000=02363000=
|
|
CARDOPTION, 17895000=02363000=
|
|
MERGEOPTION; 17900000=02363000=
|
|
SWITCH 17905000=02364000=
|
|
OPTIONLENGTH:= LENGTH1, 17910000=02364000=
|
|
WHATISIT, 17915000=02364000=
|
|
LENGTH3, 17920000=02364000=
|
|
LENGTH4, 17925000=02364000=
|
|
LENGTH5, 17930000=02365000=
|
|
LENGTH6, 17935000=02365000=
|
|
LENGTH7, 17940000=02365000=
|
|
LENGTH8, 17945000=02365000=
|
|
LENGTH9, 17950000=02365000=
|
|
WHATISIT; 17955000=02365000=
|
|
INTEGER 17960000=02365100=
|
|
SRESULT, 17965000=02365100=
|
|
SCOUNT; 17970000=02365100=
|
|
INTEGER 17975000=02365200=
|
|
SAVEINX; 17980000=02365200=
|
|
DOLLARTOG:= TRUE; 17985000=02366000=
|
|
MOVE(10, ACCUM, 0, DEFINEARRAY, 0); % SAVE INFORMATION FOR 17990000=02366100=
|
|
SCOUNT:= COUNT; 17995000=02366200=
|
|
SRESULT:= RESULT; % "TABLE" TO RESUME SCAN. 18000000=02366200=
|
|
XMODE:= 0; 18005000=02367000=
|
|
PUTSEQNO(INFO[LASTSEQROW,*], LASTSEQUENCE, SBUFF, LCR); 18010000=02368000=
|
|
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 18015000=02369000=
|
|
SKANAGAIN: 18020000=02371000=
|
|
SKAN; 18025000=02371000=
|
|
AGAIN: 18030000=02373000=
|
|
GO OPTIONLENGTH[MIN(COUNT, 10)]; 18035000=02373000=
|
|
LENGTH1: 18040000=02375000=
|
|
IF Q = 6"1%0000" THEN 18045000=02375000=
|
|
GO EXIT; 18050000=02375000=
|
|
IF Q = 6"1$0000" THEN 18055000=02376000=
|
|
BEGIN 18060000=02377000=
|
|
SWITCHIT(PRINTDOLLARBIT); 18065000=02377000=
|
|
GO AGAIN 18070000=02377000=
|
|
END; 18075000=02377000=
|
|
IF Q = 6"1,0000" THEN 18080000=02378000=
|
|
GO SKANAGAIN; 18085000=02378000=
|
|
GO WHATISIT; 18090000=02379000=
|
|
LENGTH2: 18095000=02380000=
|
|
% NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 18100000=02380000=
|
|
LENGTH3: 18105000=02382000=
|
|
IF Q = 6"3SET00" THEN 18110000=02382000=
|
|
BEGIN 18115000=02383000=
|
|
XMODE:= 3; 18120000=02383000=
|
|
GO SKANAGAIN 18125000=02383000=
|
|
END; 18130000=02383000=
|
|
IF Q = 6"3POP00" THEN 18135000=02384000=
|
|
BEGIN 18140000=02385000=
|
|
XMODE:= 4; 18145000=02385000=
|
|
GO SKANAGAIN 18150000=02385000=
|
|
END; 18155000=02385000=
|
|
IF Q = 6"3NEW00" THEN 18160000=02386000=
|
|
BEGIN 18165000=02387000=
|
|
FLAG(601); % NEWTAPE IS DISABLED. 18170000=02388000=
|
|
GO AGAIN; 18185000=02390000=
|
|
END; 18190000=02391000=
|
|
IF Q = 6"3SEQ00" THEN 18195000=02392000=
|
|
BEGIN 18200000=02393000=
|
|
SWITCHIT(SEQBIT); 18205000=02393000=
|
|
GO AGAIN 18210000=02393000=
|
|
END; 18215000=02393000=
|
|
IF Q = 6"3PRT00" THEN 18220000=02394000=
|
|
BEGIN 18225000=02395000=
|
|
SWITCHIT(PRTBIT); 18230000=02395000=
|
|
GO AGAIN 18235000=02395000=
|
|
END; 18240000=02395000=
|
|
IF Q = 6"3MCP00" THEN 18245000=02396000=
|
|
BEGIN 18250000=02397000=
|
|
SWITCHIT(MCPBIT); 18255000=02397000=
|
|
GO AGAIN 18260000=02397000=
|
|
END; 18265000=02397000=
|
|
GO WHATISIT; 18270000=02398000=
|
|
LENGTH4: 18275000=02400000=
|
|
IF Q = 6"4LIST0" THEN 18280000=02400000=
|
|
BEGIN 18285000=02401000=
|
|
SWITCHIT(LISTBIT); 18290000=02402000=
|
|
GO AGAIN; 18295000=02404000=
|
|
END; 18300000=02405000=
|
|
IF Q = 6"4VOID0" THEN 18305000=02406000=
|
|
BEGIN 18310000=02407000=
|
|
FLAG(601); % VOID IS DISABLED. 18315000=02408000=
|
|
GO AGAIN; 18370000=02418000=
|
|
END; 18375000=02419000=
|
|
IF Q = 6"4XREF0" THEN 18380000=02419100=
|
|
BEGIN 18385000=02419100=
|
|
SWITCHIT(XREFBIT); 18390000=02419100=
|
|
IF BOOLEAN(XMODE) THEN 18395000=02419110=
|
|
DEFINING:= BOOLEAN(REAL(DEFINING) & 1[46:0:1]); 18400000=02419110=
|
|
GO AGAIN 18405000=02419120=
|
|
END; 18410000=02419120=
|
|
IF Q = 6"4BEND0" THEN 18415000=02419200=
|
|
BEGIN 18420000=02419200=
|
|
SWITCHIT(BENDBIT); 18425000=02419200=
|
|
GO AGAIN 18430000=02419200=
|
|
END; 18435000=02419200=
|
|
IF Q = 6"4OMIT0" THEN 18440000=02420000=
|
|
BEGIN 18445000=02421000=
|
|
SWITCHIT(OMITBIT); 18450000=02421000=
|
|
GO AGAIN 18455000=02421000=
|
|
END; 18460000=02421000=
|
|
IF Q = 6"4CARD0" THEN 18465000=02422000=
|
|
BEGIN 18470000=02423000=
|
|
FLAG(601); % MERGE MODE IS DISABLED. 18475000=02424000=
|
|
CARDOPTION: 18515000=02430000=
|
|
IF LASTUSED < 5 THEN 18520000=02430000=
|
|
LASTUSED:= 1; 18525000=02430000=
|
|
GO AGAIN; 18530000=02431000=
|
|
END; 18535000=02432000=
|
|
IF Q = 6"4TAPE0" THEN 18540000=02433000=
|
|
BEGIN 18545000=02434000=
|
|
FLAG(601); % MERGE MODE IS DISABLED. 18550000=02435000=
|
|
IF NOT MERGETOG THEN 18555000=02436000=
|
|
GO CARDOPTION; 18560000=02436000=
|
|
MERGEOPTION: 18565000=02437500=
|
|
IF LASTUSED ^= 1 THEN 18570000=02437500=
|
|
GO TO AGAIN; 18575000=02437500=
|
|
LASTUSED:= 2; % NEXT CARD IS READ FROM READER. 18580000=02438000=
|
|
GO AGAIN; 18775000=02460000=
|
|
END; 18780000=02461000=
|
|
IF Q = 6"4PAGE0" THEN 18785000=02462000=
|
|
BEGIN 18790000=02463000=
|
|
IF LISTER THEN 18795000=02464000=
|
|
WRITE(LINE[SKIP 1]); 18800000=02464000=
|
|
GO SKANAGAIN; 18805000=02465000=
|
|
END; 18810000=02466000=
|
|
IF Q = 6"4INFO0" THEN 18815000=02467000=
|
|
BEGIN 18820000=02468000=
|
|
DUMPINFO; 18825000=02468000=
|
|
GO SKANAGAIN 18830000=02468000=
|
|
END; 18835000=02468000=
|
|
IF Q = 6"4SEGS0" THEN 18840000=02469000=
|
|
BEGIN 18845000=02470000=
|
|
SWITCHIT(SEGSBIT); 18850000=02470000=
|
|
GO AGAIN 18855000=02470000=
|
|
END; 18860000=02470000=
|
|
IF Q = 6"4NEST0" THEN 18865000=02471000=
|
|
BEGIN 18870000=02472000=
|
|
SWITCHIT(NESTBIT); 18875000=02472000=
|
|
GO AGAIN 18880000=02472000=
|
|
END; 18885000=02472000=
|
|
IF Q = 6"4DECK0" THEN 18890000=02473000=
|
|
BEGIN 18895000=02474000=
|
|
SWITCHIT(DECKBIT); 18900000=02474000=
|
|
GO AGAIN 18905000=02474000=
|
|
END; 18910000=02474000=
|
|
GO WHATISIT; 18915000=02475000=
|
|
LENGTH5: 18920000=02477000=
|
|
IF Q = 6"5RESET" THEN 18925000=02477000=
|
|
BEGIN 18930000=02478000=
|
|
XMODE:= 2; 18935000=02478000=
|
|
GO SKANAGAIN 18940000=02478000=
|
|
END; 18945000=02478000=
|
|
IF Q = 6"5LISTP" THEN 18950000=02479000=
|
|
BEGIN 18955000=02480000=
|
|
SWITCHIT(LISTPBIT); 18960000=02480000=
|
|
GO AGAIN; 18965000=02480000=
|
|
END; 18970000=02480000=
|
|
IF Q = 6"5VOIDT" THEN 18975000=02481000=
|
|
BEGIN 18980000=02482000=
|
|
FLAG(601); % VOIDT IS DISABLED. 18985000=02483000=
|
|
GO AGAIN; 19040000=02493000=
|
|
END; 19045000=02494000=
|
|
IF Q = 6"5CHECK" THEN 19050000=02495000=
|
|
BEGIN 19055000=02496000=
|
|
SWITCHIT(CHECKBIT); 19060000=02496000=
|
|
GO AGAIN 19065000=02496000=
|
|
END; 19070000=02496000=
|
|
IF Q = 6"5LIMIT" THEN 19075000=02497000=
|
|
BEGIN 19080000=02498000=
|
|
SKAN; 19085000=02499000=
|
|
IF RESULT ^= 3 THEN % SHOULD BE NUMBER. 19090000=02500000=
|
|
BEGIN 19095000=02501000=
|
|
FLAG(600); 19100000=02501000=
|
|
GO AGAIN 19105000=02501000=
|
|
END; 19110000=02501000=
|
|
ERRMAX:= CONV(ACCUM, 1, 0, ACCUM[1].[35:6]); 19115000=02502000=
|
|
GO SKANAGAIN; 19120000=02503000=
|
|
END; 19125000=02504000=
|
|
IF Q = 6"5PUNCH" THEN 19130000=02505000=
|
|
BEGIN 19135000=02506000=
|
|
ERR(601); % PUNCH IS DISABLED. 19140000=02506000=
|
|
GO AGAIN; 19145000=02506000=
|
|
END; 19150000=02506000=
|
|
IF Q = 6"5PURGE" THEN 19155000=02507000=
|
|
BEGIN 19160000=02508000=
|
|
SWITCHIT(PURGEBIT); 19165000=02508000=
|
|
GO AGAIN; 19170000=02508000=
|
|
END; 19175000=02508000=
|
|
IF Q = 6"5LISTA" THEN 19180000=02509000=
|
|
BEGIN 19185000=02510000=
|
|
SWITCHIT(LISTABIT); 19190000=02511000=
|
|
GO AGAIN; 19195000=02513000=
|
|
END; 19200000=02514000=
|
|
IF Q = 6"5STUFF" THEN 19205000=02515000=
|
|
BEGIN 19210000=02516000=
|
|
SWITCHIT(STUFFBIT); 19215000=02516000=
|
|
GO AGAIN; 19220000=02516000=
|
|
END; 19225000=02516000=
|
|
GO WHATISIT; 19230000=02517000=
|
|
LENGTH6: 19235000=02519000=
|
|
IF Q = 6"6SEQER" THEN 19240000=02519000=
|
|
BEGIN 19245000=02520000=
|
|
SWITCHIT(SEQERRBIT); 19250000=02520000=
|
|
GO AGAIN 19255000=02520000=
|
|
END; 19260000=02520000=
|
|
IF Q = 6"6SINGL" THEN 19265000=02521000=
|
|
BEGIN 19270000=02522000=
|
|
SWITCHIT(SINGLBIT); 19275000=02522000=
|
|
GO AGAIN 19280000=02522000=
|
|
END; 19285000=02522000=
|
|
IF Q = 6"6SEQXE" THEN 19290000=02523000=
|
|
BEGIN 19295000=02524000=
|
|
IF BUILDLINE.[2:1] THEN 19300000=02525000=
|
|
BEGIN 19305000=02525001=
|
|
IF XMODE = 0 THEN 19310000=02525003=
|
|
BEGIN 19315000=02525004=
|
|
OPTIONWORD:= BOOLEAN(0); 19320000=02525005=
|
|
FOR SAVEINX:= 1 STEP 2 UNTIL OPARSIZE DO 19325000=02525006=
|
|
OPTIONS[SAVEINX]:= 0; 19330000=02525007=
|
|
BUILDLINE.[0:1]:= SEQXEQTOG:= FALSE; 19335000=02525008=
|
|
IF LASTUSED < 5 THEN 19340000=02525009=
|
|
LASTUSED:= 1; 19345000=02525009=
|
|
XMODE:= 1; 19350000=02525010=
|
|
END; 19355000=02525011=
|
|
SEQXEQTOG:= XMODE ^= 2 AND XMODE ^= 4; 19360000=02525012=
|
|
BUILDLINE.[0:1]:= SEQXEQTOG; 19365000=02525013=
|
|
END; 19370000=02526000=
|
|
GO SKANAGAIN; 19375000=02527000=
|
|
END; 19380000=02528000=
|
|
IF Q = 6"6DEBUG" THEN 19385000=02529000=
|
|
BEGIN 19390000=02530000=
|
|
SWITCHIT(DEBUGBIT); 19395000=02531000=
|
|
IF DEBUGTOG THEN 19400000=02533000=
|
|
IF WOP[0] = 0 THEN 19405000=02534000=
|
|
BEGIN 19410000=02535000=
|
|
FILL WOP[*] WITH 6"LITC", 6" ", 6"OPDC", 6"DESC", 19415000=02539000=
|
|
10,6"DEL ", 11,6"NOP ", 12,6"XRT ", 16,6"ADD ", 17,6"AD2 ", 19420000
|
|
18,6"PRL ", 19,6"LNG ", 21,6"GEQ ", 22,6"BBC ", 24,6"INX ", 19425000=02540000=
|
|
35,6"LOR ", 37,6"GTR ", 38,6"BFC ", 39,6"RTN ", 40,6"COC ", 19430000=02541000=
|
|
48,6"SUB ", 49,6"SB2 ", 64,6"MUL ", 65,6"ML2 ", 67,6"LND ", 19435000=02542000=
|
|
68,6"STD ", 69,6"NEQ ", 71,6"XIT ", 72,6"MKS ",128,6"DIV ", 19440000=02543000=
|
|
129,6"DV2 ",130,6"COM ",131,6"LQV ",132,6"SND ",133,6"XCH ", 19445000=02543000=
|
|
134,6"CHS ",167,6"RTS ",168,6"CDC ",197,6"FTC ",260,6"LOD ", 19450000=02544000=
|
|
261,6"DUP ",278,6"LBC ",280,6"SSF ",294,6"LFC ",322,6"ZP1 ", 19455000=02545000=
|
|
384,6"IDV ",453,6"FTF ",515,6"MDS ",532,6"ISD ",533,6"LEQ ", 19460000=02546000=
|
|
534,6"BBW ",548,6"ISN ",549,6"LSS ",550,6"BFW ",581,6"EQL ", 19465000=02546000=
|
|
582,6"SSP ",584,6"ECM ",709,6"CTC ",790,6"LBU ",806,6"LFU ", 19470000=02547000=
|
|
896,6"RDV ",965,6"CTF ",1023,1023, 1023,1023, 1023,1023, 19475000=02548000=
|
|
1023,1023, 1023,1023, 1023,1023; 19480000=02549000=
|
|
FILL COP[*] WITH % CHARACTER MODE MNEMONICS 19490000=02550000=
|
|
6"EXC ", 6"NOP ", 19495000=02552000=
|
|
6"BSD ", 6"BSS ", 6"RDA ", 6"TRW ", 6"SED ", 6"TDA ", 19495100=02552000=
|
|
6" ", 6" ", 6"TBN ", 6" ", 6"SDA ", 6"SSA ", 19500000=02552000=
|
|
6"SFD ", 6"SRD ", 6" ", 6" ", 6"SES ", 6" ", 19505000=02553000=
|
|
6"TEQ ", 6"TNE ", 6"TEG ", 6"TGR ", 6"SRS ", 6"SFS ", 19510000=02554000=
|
|
6" ", 6" ", 6"TEL ", 6"TLS ", 6"TAN ", 6"BIT ", 19515000=02555000=
|
|
6"INC ", 6"STC ", 6"SEC ", 6"CRF ", 6"JNC ", 6"JFC ", 19520000=02555000=
|
|
6"JNS ", 6"JFW ", 6"RCA ", 6"ENS ", 6"BNS ", 6"RSA ", 19525000=02556000=
|
|
6"SCA ", 6"JRC ", 6"TSA ", 6"JRV ", 6"CEQ ", 6"CNE ", 19530000=02557000=
|
|
6"CEG ", 6"CGR ", 6"BIS ", 6"BIR ", 6"OCV ", 6"ICV ", 19535000=02558000=
|
|
6"CEL ", 6"CLS ", 6"FSU ", 6"FAD ", 6"TRP ", 6"TRN ", 19540000=02558000=
|
|
6"TRZ ", 6"TRS "; 19545000=02558000=
|
|
FILL POP[*] WITH 6"ZFN ", 6"ZBN ", 6"ZFD ", 6"ZBD ", 6"ISO " 19550000=02561000=
|
|
, 0, "DIA ", 6"DIB ", 6"TRB ", 6"CFL ", 6"CFE "; 19555000=02562000=
|
|
END; 19560000=02563000=
|
|
GO AGAIN; 19565000=02564000=
|
|
END; 19570000=02565000=
|
|
IF Q = 6"6FORMA" THEN 19575000=02566000=
|
|
BEGIN 19580000=02567000=
|
|
SWITCHIT(FORMATBIT); 19585000=02567000=
|
|
GO AGAIN; 19590000=02567000=
|
|
END; 19595000=02567000=
|
|
GO WHATISIT; 19600000=02568000=
|
|
LENGTH7: 19605000=02570000=
|
|
IF Q = 6"7INCLU" THEN 19610000=02570000=
|
|
BEGIN 19615000=02571000=
|
|
ERR(601); % INCLUDE IS DISABLED 19620000=02571000=
|
|
GO EXIT; 19625000=02571000=
|
|
END; 19630000=02571000=
|
|
% IF Q = "7INCLN" THEN 19635000=02572000=
|
|
% BEGIN SWITCHIT(NEWINCLBIT); GO AGAIN; END; 19640000=02573000=
|
|
LENGTH8: 19645000=02574100=
|
|
IF Q = 6"8CODEF" THEN 19650000=02574100=
|
|
BEGIN 19655000=02574200=
|
|
SWITCHIT(CODEFILEBIT); 19660000=02574200=
|
|
GO AGAIN; 19665000=02574200=
|
|
END; 19670000=02574200=
|
|
GO WHATISIT; 19675000=02574300=
|
|
LENGTH9: 19680000=02576000=
|
|
IF Q = 6"9INTRI" THEN 19685000=02576000=
|
|
BEGIN 19690000=02577000=
|
|
SWITCHIT(INTBIT); 19695000=02577000=
|
|
GO AGAIN; 19700000=02577000=
|
|
END; 19705000=02577000=
|
|
WHATISIT: 19710000=02579000=
|
|
IF RESULT = 3 THEN 19715000=02579000=
|
|
BEGIN 19720000=02580000=
|
|
BASENUM:= CONV(ACCUM, 1, 0, ACCUM[1].[35:6]); 19725000=02581000=
|
|
TOTALNO:= -10; 19730000=02582000=
|
|
NEWBASE:= TRUE; 19735000=02583000=
|
|
GO SKANAGAIN; 19740000=02584000=
|
|
END; 19745000=02585000=
|
|
IF RESULT = 2 THEN 19750000=02586000=
|
|
BEGIN 19755000=02587000=
|
|
IF Q = 6"1+0000" THEN 19760000=02588000=
|
|
BEGIN 19765000=02589000=
|
|
SKAN; 19770000=02590000=
|
|
IF RESULT = 3 THEN 19775000=02591000=
|
|
ADDVALUE:= CONV(ACCUM, 1, 0, ACCUM[1].[35:6]) 19780000=02592000=
|
|
ELSE 19784000=02593000=
|
|
FLAG(600); % NUMBER EXPECTED. 19785000=02593000=
|
|
END; 19790000=02594000=
|
|
GO SKANAGAIN; 19795000=02595000=
|
|
END; 19800000=02596000=
|
|
19805000=02597000=
|
|
COMMENT DID NOT RECOGNIZE OPTION; 19810000=02597000=
|
|
IF RESULT ^= 1 THEN % NOT AN IDENTIFIER. 19815000=02598000=
|
|
BEGIN 19820000=02599000=
|
|
FLAG(601); 19825000=02599000=
|
|
GO SKANAGAIN 19830000=02599000=
|
|
END; 19835000=02599000=
|
|
SWITCHIT(USEROPINX); % USEROPINX MEANS A USER-DEFINED OPTION. 19840000=02600000=
|
|
GO AGAIN; 19845000=02601000=
|
|
EXIT: 19850000=02602500=
|
|
LISTER:= DEBUGTOG OR LISTOG OR LISTATOG; 19855000=02602500=
|
|
MOVE(10, DEFINEARRAY, 0, ACCUM, 0); % RESTORE INFORMATION FOR 19860000=02602600=
|
|
COUNT:= SCOUNT; 19865000=02602700=
|
|
RESULT:= SRESULT; % "TABLE" TO RESUME SCAN. 19870000=02602700=
|
|
DOLLARTOG:= FALSE; 19875000=02603000=
|
|
END DOLLARCARD; 19880000=02604000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19885000=02604000=
|
|
19890000=02605000=
|
|
COMMENT TABLE IS THE ROUTINE THAT MOST CODE IN THE COMPILER 19895000=02605000=
|
|
USES WHEN IT IS DESIRED TO SCAN ANOTHER LOGICAL QUANTITY. 19900000=02606000=
|
|
THE RESULT RETURNED IS THE CLASS OF THE ITEM DESIRED. 19905000=02607000=
|
|
TABLE MAINTAINS THE VARIABLES I AND NXTELBT AND THE ARRAY 19910000=02608000=
|
|
ELBAT. ELBAT AND I ARE PRINCIPAL VARIABLES USED FOR 19915000=02609000=
|
|
COMUNICATION BETWEEN TABLE AND THE OUTSIDE WORLD. NXTELBT 19920000=02610000=
|
|
IS ALMOST EXCLUSIVELY USED BY TABLE, ALTHOUGH AN OCCASION- 19925000=02611000=
|
|
AL OTHER USE IS MADE IN ORDER TO FORGET THAT SOMETHING WAS 19930000=02612000=
|
|
SCANNED. (SEE, FOR EXAMPLE, COMPOUNDTAIL). FOR FURTHER 19935000=02613000=
|
|
GENERAL DISCUSSION SEE THE DECLARATION OF THESE VARIABLES. 19940000=02614000=
|
|
THE PARAMETER P IS THE ACTUAL INDEX OF THE QUANTITY 19945000=02615000=
|
|
DESIRED (USUALLY I-1,I, OR I+1). 19950000=02616000=
|
|
THE GENERAL PLAN OF TABLE IS THIS: 19955000=02617000=
|
|
I) IF P < NXTELBAT GO ON TO III). 19960000=02618000=
|
|
II) PROCESS ONE QUANTITY. 19965000=02619000=
|
|
A) SCAN. 19970000=02620000=
|
|
B) TEST FOR IDENTIFIER, NUMBER, OR SPECIAL CHARACTER. 19975000=02621000=
|
|
1) IDENTIFIER - LOOKUP IN DIRECTORY AND PROCESS 19980000=02622000=
|
|
IN SPECIAL MANNER IF COMMENT OR DEFINED ID. 19985000=02623000=
|
|
2) NUMBER - PROCESS INTEGER PART, FRACTIONAL PART, 19990000=02624000=
|
|
AND EXPONENT PART. 19995000=02625000=
|
|
3) TEST IF SPECIAL CHARACTER REQUIRES SPECIAL 20000000=02626000=
|
|
PROCESSING - OTHERWISE GET ELBAT WORD FROM 20005000=02627000=
|
|
SPECIAL. 20010000=02628000=
|
|
C) LOAD ELBAT AND INCREMENT NXTELBT. 20015000=02629000=
|
|
D) IF ELBAT IS FULL ADJUST ELBAT, NXTELBT, I, AND P. 20020000=02630000=
|
|
E) GO BACK TO I). 20025000=02631000=
|
|
III) RETURN WITH CLASS OF ELBAT[P]. 20030000=02632000=
|
|
FURTHER DETAILS ARE GIVEN IN BODY OF TABLE. 20035000=02633000=
|
|
; 20040000=02634000=
|
|
INTEGER PROCEDURE TABLE(P); 20045000=02635000=
|
|
VALUE 20050000=02635000=
|
|
P; 20055000=02635000=
|
|
INTEGER 20060000=02635000=
|
|
P; 20065000=02635000=
|
|
BEGIN 20070000=02636000=
|
|
LABEL 20075000=02637000=
|
|
PERCENT, 20080000=02637000=
|
|
SPECIALCHAR, 20085000=02637000=
|
|
COMPLETE, 20090000=02637000=
|
|
COLON, 20095000=02637000=
|
|
DOT, 20100000=02637000=
|
|
ATSIGN, 20105000=02637000=
|
|
QUOTE, 20110000=02638000=
|
|
STRNGXT, 20115000=02638000=
|
|
MOVEIT, 20120000=02638000=
|
|
ARGH, 20125000=02638000=
|
|
FINISHNUMBER, 20130000=02639000=
|
|
SCANAGAIN, 20135000=02639000=
|
|
FPART, 20140000=02639000=
|
|
EPART, 20145000=02639000=
|
|
IPART, 20150000=02639000=
|
|
IDENT, 20155000=02639000=
|
|
ROSE, 20160000=02639000=
|
|
COMPOST, 20165000=02639000=
|
|
DOLLAR, 20170000=02639000=
|
|
RTPAREN, 20175000=02640000=
|
|
CROSSHATCH; 20180000=02640000=
|
|
SWITCH 20190000=02641000=
|
|
SPECIALSWITCH:= PERCENT, 20195000=02641000=
|
|
DOLLAR, 20200000=02641000=
|
|
DOT, 20205000=02641000=
|
|
ATSIGN, 20210000=02641000=
|
|
COLON, 20215000=02641000=
|
|
QUOTE, 20220000=02642000=
|
|
RTPAREN, 20225000=02642000=
|
|
CROSSHATCH; 20230000=02642000=
|
|
SWITCH 20240000=02643000=
|
|
RESULTSWITCH:= IDENT, 20245000=02643000=
|
|
SPECIALCHAR, 20250000=02643000=
|
|
IPART; 20255000=02643000=
|
|
WHILE P >= NXTELBT DO 20260000=02645000=
|
|
BEGIN 20265000=02645000=
|
|
SCANAGAIN: 20270000=02647000=
|
|
COUNT:= RESULT:= ACCUM[1]:= 0; 20275000=02647000=
|
|
SCANNER; 20280000=02647000=
|
|
GO RESULTSWITCH[RESULT]; 20285000=02648000=
|
|
ARGH: 20290000=02650000=
|
|
Q:= ACCUM[1]; 20295000=02650000=
|
|
FLAG(141); 20300000=02650000=
|
|
GO SCANAGAIN; 20305000=02650000=
|
|
SPECIALCHAR: 20310000=02652000=
|
|
GT1:= ACCUM[1].[29:6]-2; 20315000=02652000=
|
|
ENDTOG:= GT1 = 57 AND ENDTOG; % 57+2 = "%" 20320000=02653000=
|
|
20325000=02654000=
|
|
COMMENT OBTAIN ACTUAL CHARACTER FROM ACCUM; 20330000=02654000=
|
|
T:= SPECIAL[GT1 & GT1[5:6:3]]; 20335000=02655000=
|
|
COMMENT NOTICE COMPRESSION TECHNIQUE USED TO SHORTEN TABLE OF 20335100=02656000=
|
|
ELBAT WORDS FOR SPECIAL CHARACTERS; 20335200=02657000=
|
|
IF GT1:= T.INCR = 0 THEN 20335300=02658000=
|
|
GO COMPLETE; 20335400=02658000=
|
|
GO SPECIALSWITCH[GT1]; 20340000=02659000=
|
|
COMMENT INCR FIELD OF SPECIAL CHARACTER IS NON-ZERO FOR SPECIAL 20340100=02660000=
|
|
CHARACTERS REQUIRING SPECIAL HANDLING. INCR IS SWITCHED 20340200=02661000=
|
|
ON TO OBTAIN DISCRIMINATION; 20340300=02662000=
|
|
COLON: 20340400=02663000=
|
|
RESULT:= 7; 20340500=02663000=
|
|
SCANNER; COMMENT ELIMINATE BLANKS - CHECKING 20345000=02663000=
|
|
FOR := IN PLACE OF ~; 20345100=02664000=
|
|
IF EXAMIN(SBUFF, NCR) = 6"=" THEN 20345200=02665000=
|
|
BEGIN 20345300=02666000=
|
|
RESULT:= 0; 20345400=02666000=
|
|
SCANNER; 20345500=02666000=
|
|
T:= SPECIAL[13] 20350000=02666000=
|
|
END; 20355000=02666000=
|
|
RESULT:= 2; 20360000=02667000=
|
|
GO COMPLETE; 20365000=02667000=
|
|
DOT: 20370000=02680000=
|
|
IF EXAMIN(SBUFF, NCR) > 9 OR ENDTOG THEN 20375000=02680000=
|
|
GO COMPLETE; 20380000=02680000=
|
|
NHI:= NLO:= 0; 20385000=02681000=
|
|
C:= 0; 20390000=02682000=
|
|
FSAVE:= 0; 20395000=02682000=
|
|
GO FPART; 20400000=02682000=
|
|
ATSIGN: 20405000=02684000=
|
|
% RESULT:=0; SCANNER; 20410000=02684000=
|
|
% IF COUNT>17 THEN GO ARGH; 20415000=02685000=
|
|
% IF OCTIZE(ACCUM, 1, COUNT-1, 17-COUNT, C) THEN GO ARGH 20420000=02686000=
|
|
% ELSE GO NUMBEREND; 20425000=02687000=
|
|
NHI:= C:= 1; 20430000=02688000=
|
|
NLO:= FSAVE:= 0; 20435000=02688000=
|
|
GO EPART; 20440000=02688000=
|
|
20445000=02689000=
|
|
COMMENT DOT AND ATSIGN ENTER NUMBER CONVERSION AT CORRECT SPOT; 20450000=02689000=
|
|
QUOTE: 20455000=02691000=
|
|
COUNT:= 0; 20460000=02691000=
|
|
T:= 20465000=02691000=
|
|
IF STREAMTOG THEN 20470000=02691000=
|
|
63 20475000=02691000=
|
|
ELSE 20480000=02691000=
|
|
8; 20485000=02691000=
|
|
% 20490000=02692000=
|
|
% 20495000=02692500=
|
|
DO BEGIN 20500000=02693000=
|
|
RESULT:= 5; 20505000=02694000=
|
|
SCANNER; 20510000=02694000=
|
|
IF COUNT = T THEN 20515000=02695000=
|
|
IF EXAMIN(SBUFF, NCR) ^= 6""" THEN 20520000=02696000=
|
|
GO ARGH; 20525000=02696000=
|
|
END 20530000=02697000=
|
|
UNTIL EXAMIN(SBUFF, NCR) = 6"""; 20535000=02697000=
|
|
IF NOT STREAMTOG AND COUNT = 8 AND BOOLEAN(ACCUM[1].[29:1]) THEN 20540000=02697500=
|
|
BEGIN 20545000=02697600=
|
|
Q:= ACCUM[1]; 20550000=02697600=
|
|
FLAG(254); 20555000=02697600=
|
|
GO TO SCANAGAIN; 20560000=02697600=
|
|
END; 20565000=02697600=
|
|
Q:= ACCUM[1]; 20570000=02698000=
|
|
RESULT:= 5; 20575000=02698000=
|
|
SCANNER; 20580000=02698000=
|
|
COUNT:= COUNT-1; 20585000=02698000=
|
|
IF COUNT < 0 THEN 20590000=02699000=
|
|
COUNT:= COUNT+64; 20595000=02699000=
|
|
ACCUM[1]:= Q; 20600000=02700000=
|
|
RESULT:= 4; 20605000=02700000=
|
|
STRNGXT: 20610000=02701000=
|
|
T:= C:= 0; 20615000=02701000=
|
|
T.CLASS:= STRNGCON; 20620000=02702000=
|
|
IF COUNT < 8 OR(COUNT = 8 AND NOT BOOLEAN(ACCUM[1].[29:1])) THEN 20625000=02703050=
|
|
BEGIN % FLAG BIT NOT SET, FULL WORD CONST. 20630000=02703050=
|
|
MOVEIT: 20635000=02705000=
|
|
EBCDICBUFF[0]:= C; 20635100
|
|
MOVECHARACTERS(COUNT, ACCUM, 1, 3, EBCDICBUFF, 0, 8-COUNT); 20640000=02705100=
|
|
C:= EBCDICBUFF[0]; 20640100
|
|
END 20640200
|
|
ELSE 20645000=02705100=
|
|
T.CLASS:= STRING; 20650000=02705100=
|
|
T.INCR:= COUNT; 20655000=02705200=
|
|
GO COMPLETE; 20660000=02705200=
|
|
% 20665000=02706000=
|
|
20670000=02707000=
|
|
COMMENT CROSSHATCH HANDLES TWO SITUATIONS: 20675000=02707000=
|
|
THE CROSSHATCH AT END OF DEFINE DECLARATIONS AND 20680000=02708000=
|
|
THE CROSSHATCH AT END OF ALPHA REPRESENTING DEFINED IDS. 20685000=02709000=
|
|
THE TWO CASES ARE PROCESSED DIFFERENTLY. THE FIRST CASE 20690000=02710000=
|
|
MERELY PLACES THE CROSSHATCH IN ELBAT. THE SECOND CASE 20695000=02711000=
|
|
CAUSES AN EXIT FROM SCANNING THE ALPHA FOR THE DEFINED ID. 20700000=02712000=
|
|
FOR A FULL DISCUSSION SEE DEFINEGEN; 20705000=02713000=
|
|
CROSSHATCH: 20710000=02715000=
|
|
IF DEFINECTR ^= 0 THEN 20715000=02715000=
|
|
GO COMPLETE; 20720000=02715000=
|
|
PUTSEQNO(EBCDICBUFF, 0, SBUFF, LCR); 20725000=02716000=
|
|
GT1:= EBCDICBUFF[0]; % COMPENSATE FOR SCALAR PARAM 20725100
|
|
TURNONSTOPLIGHT(0, SBUFF, LCR); 20730000=02717000=
|
|
IF DEFINEINDEX = 0 THEN 20735000=02718000=
|
|
GO ARGH; 20740000=02718000=
|
|
LCR:= (GT1:= DEFINEARRAY[DEFINEINDEX-1]) DIV 262144; 20745000=02719000=
|
|
NCR:= GT1 MOD 262144; 20750000=02720000=
|
|
LASTUSED:= (T:= DEFINEARRAY[DEFINEINDEX:= DEFINEINDEX-3]).[14:15];20755000=02721000=
|
|
IF DEFINEINDEX <= 0 THEN 20755100
|
|
SBUFF:= CBUFF; % REVERT BACK TO CARD BUFFER 20755200
|
|
IF(GT2:= T.[29:15]) ^= 0 THEN % THIS WAS A PARAMETRIC DEFINE 20760000=02721500=
|
|
BEGIN % PURGING PARAMETERS FROM DEFSTACKHEAD 20765000=02722000=
|
|
GT2:= TAKE(GT2).LINK; % GET POINTER TO NEW DEFSTACKHEAD 20770000=02722500=
|
|
DO 20775000=02723500=
|
|
PUT(TEXT[(NEXTTEXT:= (GT1:= TAKE(DEFSTACKHEAD)).DYNAM-1).LINKR20780000=02724500=
|
|
, NEXTTEXT.LINKC], DEFSTACKHEAD) 20785000=02724500=
|
|
% THIS RESTORES THE PREVIOUS ELBAT WORD FOR 20790000=02724500=
|
|
% THIS PARAMETER IN CASE OF NESTED DEFINE. 20795000=02725000=
|
|
UNTIL GT2 = (DEFSTACKHEAD:= GT1.LINK); 20800000=02726000=
|
|
END; 20805000=02727000=
|
|
GO SCANAGAIN; 20810000=02728000=
|
|
DOLLAR: 20815000=02729000=
|
|
COMMENT THIS CODE HANDLES CONTROL CARDS; 20820000=02729000=
|
|
20825000=02730000=
|
|
GT1:= EXAMIN(SBUFF, NCR); 20830000=02730000=
|
|
DOLLARCARD; 20845000=02730000=
|
|
PERCENT: 20850000=02731000=
|
|
IF NCR ^= FCR THEN 20855000=02731000=
|
|
READACARD; 20860000=02731000=
|
|
GO SCANAGAIN; 20900000=02737000=
|
|
20905000=02738000=
|
|
COMMENT MOST PERCENT SIGNS ACTING AS END OF CARD SENTINELS GET TO 20910000=02738000=
|
|
PERCENT. PERCENT READS THE NEXT CARD AND STARTS OVER. A 20915000=02739000=
|
|
SIDE EFFECT IS THAT ALL CHARACTERS ON A CARD ARE IGNORED 20920000=02740000=
|
|
AFTER A FREE PERCENT SIGN (ONE NOT IMBEDDED IN A STRING OR 20925000=02741000=
|
|
COMMENT); 20930000=02742000=
|
|
20935000=02743000=
|
|
COMMENT MIGHT BE FUNNY COMMA - HANDLE HERE; 20940000=02743000=
|
|
RTPAREN: 20945000=02744000=
|
|
RESULT:= 7; 20950000=02744000=
|
|
SCANNER; 20955000=02744000=
|
|
IF EXAMIN(SBUFF, NCR) = 6""" THEN 20960000=02745000=
|
|
BEGIN 20965000=02746000=
|
|
RESULT:= 0; 20970000=02747000=
|
|
SCANNER; 20975000=02747000=
|
|
DO BEGIN 20980000=02748000=
|
|
RESULT:= 5; 20985000=02749000=
|
|
SCANNER 20990000=02750000=
|
|
END 20995000=02750000=
|
|
UNTIL EXAMIN(SBUFF, NCR) = 6"""; 21000000=02750000=
|
|
RESULT:= 0; 21005000=02751000=
|
|
SCANNER; 21010000=02751000=
|
|
RESULT:= 7; 21015000=02752000=
|
|
SCANNER; 21020000=02752000=
|
|
IF EXAMIN(SBUFF, NCR) ^= 6"(" THEN 21025000=02753000=
|
|
GO ARGH; 21030000=02753000=
|
|
RESULT:= 0; 21035000=02754000=
|
|
SCANNER; 21040000=02754000=
|
|
Q:= ACCUM[1]; 21045000=02754000=
|
|
T:= SPECIAL[24] 21050000=02756000=
|
|
END; 21055000=02756000=
|
|
RESULT:= 2; 21060000=02757000=
|
|
GO COMPLETE; 21065000=02757000=
|
|
IPART: 21070000=02758000=
|
|
TCOUNT:= FSAVE:= 0; 21075000=02758000=
|
|
C:= CONVERT; 21080000=02758000=
|
|
RESULT:= 7; 21085000=02759000=
|
|
SCANNER; % DEBLANK. 21090000=02759000=
|
|
IF DEFINECTR = 0 THEN 21095000=02760000=
|
|
IF(C = 3 OR C = 4) AND EXAMIN(SBUFF, NCR) = 6""" THEN 21100000=02761000=
|
|
%OCTAL OR HEX STRING.21105000=02761000=
|
|
IF NOT(ACCUM[0].CLASS = FILEID AND 21110000=02761501=
|
|
INFO[LASTINFO.LINKR, LASTINFO.LINKC] = ACCUM[0]) 21115000=02761501=
|
|
THEN 21120000=02761501=
|
|
BEGIN 21125000=02762000=
|
|
INTEGER 21130000=02762000=
|
|
SIZ; 21135000=02762000=
|
|
RESULT:= 5; 21140000=02763000=
|
|
SCANNER; % SKIP QUOTE. 21145000=02763000=
|
|
COUNT:= 0; 21150000=02764000=
|
|
DO BEGIN 21155000=02765000=
|
|
RESULT:= 5; 21160000=02766000=
|
|
SCANNER; 21165000=02766000=
|
|
IF COUNT > SIZ:= 48 DIV C THEN % > 1 WORD LONG. 21170000=02767000=
|
|
BEGIN 21175000=02768000=
|
|
ERR(520); 21180000=02768000=
|
|
GO SCANAGAIN 21185000=02768000=
|
|
END; 21190000=02768000=
|
|
END 21195000=02769000=
|
|
UNTIL EXAMIN(SBUFF, NCR) = 6"""; 21200000=02769000=
|
|
Q:= ACCUM[1]; 21205000=02770000=
|
|
RESULT:= 5; 21210000=02770000=
|
|
SCANNER; 21215000=02770000=
|
|
COUNT:= COUNT-1; 21220000=02770000=
|
|
IF C = 3 THEN % OCTAL STRING. 21225000=02771000=
|
|
IF OCTIZE(ACCUM, 1, ACCUM, 4, 16-COUNT, COUNT) THEN 21230000=02772000=
|
|
FLAG(521) % NON-OCTAL CHARACTER IN STRING. 21235000=02773000=
|
|
ELSE 21240000=02774000=
|
|
ELSE 21245000=02774000=
|
|
IF HEXIZE(ACCUM, 1, ACCUM, 4, 12-COUNT, COUNT) THEN 21250000=02774000=
|
|
FLAG(521); % NON-HEX CHARACTER IN HEX STRING. 21255000=02775000=
|
|
T.INCR:= COUNT:= (C*COUNT-1) DIV 6+1; % # OF CHARS. 21260000=02776100=
|
|
T.CLASS:= STRNGCON; 21265000=02776200=
|
|
MOVECHARACTERS(1, ACCUM, 4, 0, ACCUM, 1, 3); 21270000=02776300=
|
|
IF BOOLEAN(ACCUM[1].[29:1]) THEN% FLAG BIT SET. 21275000=02776400=
|
|
IF STREAMTOG THEN 21280000=02776500=
|
|
T.CLASS:= STRING 21285000=02776700=
|
|
ELSE 21290000=02776700=
|
|
FLAG(254) 21295000=02776900=
|
|
ELSE 21300000=02776900=
|
|
C:= ACCUM[4]; % GET FULL WORD EQUIVALENT OF STRING. 21305000=02777000=
|
|
MOVECHARACTERS(COUNT, ACCUM, 4, 8-COUNT, ACCUM, 1, 3); 21310000=02777050=
|
|
GO TO COMPLETE; 21315000=02777100=
|
|
MOVECHARACTERS(8, ACCUM, 4, 0, ACCUM, 1, 3); 21320000=02781000=
|
|
GO COMPLETE; 21325000=02782000=
|
|
END OCTAL OR HEX STRING; 21330000=02783000=
|
|
IF DPTOG THEN 21335000=02784000=
|
|
BEGIN 21340000=02785000=
|
|
NHI:= THI; 21345000=02785000=
|
|
NLO:= TLO; 21350000=02785000=
|
|
END; 21355000=02785000=
|
|
IF EXAMIN(SBUFF, NCR) = 6"." THEN 21360000=02786000=
|
|
BEGIN 21365000=02787000=
|
|
RESULT:= 0; 21370000=02788000=
|
|
SCANNER; 21375000=02788000=
|
|
C:= 1.0*C; 21380000=02789000=
|
|
FPART: 21385000=02790000=
|
|
TCOUNT:= COUNT; 21390000=02790000=
|
|
IF EXAMIN(SBUFF, NCR) <= 9 THEN 21395000=02791000=
|
|
BEGIN 21400000=02792000=
|
|
RESULT:= 0; 21405000=02793000=
|
|
SCANNER; 21410000=02793000=
|
|
IF DPTOG THEN 21415000=02794000=
|
|
BEGIN 21420000=02795000=
|
|
THI:= FIRSTWORD( 21425000=02797000=
|
|
DOUBLE(CONVERT, TLO)/TEN[(COUNT-TCOUNT) MOD 12], TLO); 21430000=02797000=
|
|
FOR T:= 12 STEP 12 UNTIL COUNT-TCOUNT DO 21435000=02798000=
|
|
THI:= FIRSTWORD(DOUBLE(THI, TLO)/TEN[12], TLO); 21440000=02799000=
|
|
NHI:= FIRSTWORD(DOUBLE(THI, TLO) + DOUBLE(NHI, NLO), NLO); 21445000=02800000=
|
|
C:= NHI 21450000=02802000=
|
|
END 21455000=02803000=
|
|
ELSE 21460000=02803000=
|
|
C:= CONVERT+C*TEN[FSAVE:= COUNT-TCOUNT]; 21465000=02803000=
|
|
END 21470000=02805000=
|
|
END; 21475000=02805000=
|
|
RESULT:= 7; 21480000=02806000=
|
|
SCANNER; 21485000=02806000=
|
|
IF EXAMIN(SBUFF, NCR) = 6"@" THEN 21490000=02807000=
|
|
BEGIN 21495000=02808000=
|
|
RESULT:= 0; 21500000=02809000=
|
|
SCANNER; 21505000=02809000=
|
|
EPART: 21510000=02810000=
|
|
TCOUNT:= COUNT; 21515000=02810000=
|
|
C:= C*1.0; 21520000=02811000=
|
|
RESULT:= 7; 21525000=02812000=
|
|
SCANNER; 21530000=02812000=
|
|
IF T:= EXAMIN(SBUFF, NCR) > 9 THEN 21535000=02813000=
|
|
IF T = 6"-" OR T = 6"+" THEN 21540000=02814000=
|
|
BEGIN 21545000=02815000=
|
|
RESULT:= 0; 21550000=02816000=
|
|
SCANNER; 21555000=02816000=
|
|
TCOUNT:= COUNT; 21560000=02817000=
|
|
END 21565000=02819000=
|
|
ELSE 21570000=02819000=
|
|
FLAG(47); 21575000=02819000=
|
|
RESULT:= 0; 21580000=02820000=
|
|
SCANNER; 21585000=02820000=
|
|
IF RESULT ^= 3 THEN 21590000=02821000=
|
|
FLAG(47); 21595000=02821000=
|
|
COMMENT NOT A NUMBER; 21600000=02821000=
|
|
Q:= ACCUM[1]; 21605000=02822000=
|
|
IF GT1:= T:= (IF T = 6"-" THEN-CONVERT ELSE CONVERT) < -46 OR T 21610000=02824000=
|
|
> 69 21615000=02824000=
|
|
THEN 21620000=02824000=
|
|
FLAG(269) 21625000=02825000=
|
|
ELSE 21630000=02825000=
|
|
BEGIN 21635000=02825000=
|
|
T:= TEN[ABS(GT3:= T-FSAVE)]; 21640000=02826000=
|
|
IF ABS(0 & C[5:44:6] & C[46:45:1]+0 21645000=02828000=
|
|
& T[5:44:6] & GT3[46:46:1]+12) > 63 21650000=02828000=
|
|
THEN 21655000=02828000=
|
|
FLAG(269) 21660000=02829000=
|
|
ELSE 21665000=02829000=
|
|
IF DPTOG THEN 21670000=02829000=
|
|
IF GT1 < 0 THEN 21675000=02830000=
|
|
BEGIN 21680000=02831000=
|
|
GT1:= -GT1; 21685000=02832000=
|
|
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)/TEN[GT1 MOD 12], NLO); 21690000=02833000=
|
|
FOR GT2:= 12 STEP 12 UNTIL GT1 DO 21700000=02834000=
|
|
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)/TEN[12], NLO); 21705000=02835000=
|
|
END 21710000=02837000=
|
|
ELSE 21715000=02837000=
|
|
BEGIN 21720000=02837000=
|
|
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)*TEN[GT1 MOD 12], NLO) 21725000=02838000=
|
|
; 21730000=02838000=
|
|
FOR GT2:= 12 STEP 12 UNTIL GT1 DO 21735000=02839000=
|
|
NHI:= FIRSTWORD(DOUBLE(NHI, NLO)*TEN[12], NLO); 21740000=02840000=
|
|
END 21745000=02842000=
|
|
ELSE 21750000=02842000=
|
|
C:= 21755000=02842000=
|
|
IF GT3 < 0 THEN 21760000=02842000=
|
|
C/T 21765000=02842000=
|
|
ELSE 21770000=02842000=
|
|
C*T; 21775000=02842000=
|
|
END; 21780000=02843000=
|
|
END 21785000=02845000=
|
|
ELSE 21790000=02845000=
|
|
IF FSAVE ^= 0 THEN 21795000=02845000=
|
|
C:= C/TEN[FSAVE]; 21800000=02845000=
|
|
Q:= ACCUM[1]; 21805000=02846000=
|
|
RESULT:= 3; 21810000=02846000=
|
|
FINISHNUMBER: 21815000=02848000=
|
|
T:= 0; 21820000=02848000=
|
|
IF C.[46:37] = 0 THEN 21825000=02849000=
|
|
BEGIN 21830000=02850000=
|
|
T.CLASS:= LITNO; 21835000=02850000=
|
|
T.ADDRESS:= C 21840000=02850000=
|
|
END 21845000=02851000=
|
|
ELSE 21850000=02851000=
|
|
T.CLASS:= NONLITNO; 21855000=02851000=
|
|
GO COMPLETE; 21860000=02852000=
|
|
21865000=02853000=
|
|
COMMENT THE CODE BETWEEN IDENT AND COMPOST DOES A LOOKUP IN INFO. 21870000=02853000=
|
|
IF QUANTITY IS NOT FOUND THE ELBAT WORD EXPECTS TO BE 21875000=02854000=
|
|
ZERO. THE SCRAMBLE FOR APPROPRIATE STACK IS FIRST THING 21880000=02855000=
|
|
TO BE DONE. THEN A CHECK IS MADE, USING SUPERSTACK. 21885000=02856000=
|
|
TO DETERMINE WHETHER THE IDENTIFIER IS ONE OF OUR 21890000=02857000=
|
|
COMMON RESERVED WORDS. IF IT IS, EXIT IS MADE TO 21895000=02858000=
|
|
COMPLETE, OTHERWISE THE LOOP BETWEEN COMPOST AND 21900000=02859000=
|
|
ROSE IS ENTERED. THE LAST THING DONE FOR ANY 21905000=02860000=
|
|
IDENTIFIER WHICH IS FOUND IS TO STUFF THE LOCATION 21910000=02861000=
|
|
OF THE ELBATWORD IN INFO INTO THE LINK FIELD. THIS 21915000=02862000=
|
|
ALLOWS REFERENCE BACK TO INFO FOR ADDITIONAL DATA, 21920000=02863000=
|
|
SHOULD THIS BE REQUIRED. ; 21925000=02864000=
|
|
IDENT: 21930000=02865000=
|
|
IF T:= SUPERSTACK[SCRAM:= (Q:= ACCUM[1]) MOD 125] ^= 0 THEN 21935000=02865000=
|
|
BEGIN 21940000=02866000=
|
|
IF INFO[GT1:= T.LINKR, (GT2:= T.LINKC)+1] = Q THEN 21945000=02867000=
|
|
BEGIN 21950000=02868000=
|
|
T:= INFO[GT1, GT2] & T[12:12:13]; 21955000=02869000=
|
|
GO COMPLETE 21960000=02871000=
|
|
END 21965000=02872000=
|
|
END; 21970000=02872000=
|
|
IF EXAMINELAST(ACCUM, 1, COUNT+2) = 12 THEN 21975000=02873000=
|
|
T:= DEFSTACKHEAD 21980000=02874000=
|
|
ELSE 21985000=02874000=
|
|
T:= STACKHEAD[SCRAM]; 21990000=02874000=
|
|
ROSE: 21995000=02875000=
|
|
GT1:= T.LINKR; 22000000=02875000=
|
|
IF (GT2:= T.LINKC)+GT1 = 0 THEN 22005000=02876000=
|
|
BEGIN 22010000=02877000=
|
|
T:= 0; 22015000=02877000=
|
|
GO COMPLETE 22020000=02877000=
|
|
END; 22025000=02877000=
|
|
IF T = INFO[GT1, GT2] THEN 22030000=02877010=
|
|
BEGIN 22035000=02877010=
|
|
T:= 0; 22040000=02877020=
|
|
GO TO COMPLETE 22045000=02877020=
|
|
END; 22050000=02877020=
|
|
T:= INFO[GT1, GT2]; 22055000=02878000=
|
|
IF INFO[GT1, GT2+1] & 0[46:46:11] ^= Q THEN 22060000=02879000=
|
|
GO ROSE; 22065000=02879000=
|
|
IF COUNT <= 5 THEN 22070000=02880000=
|
|
GO COMPOST; 22075000=02880000=
|
|
IF NOT EQUAL(COUNT-5, ACCUM, 2, INFO[GT1,*], GT2+2) THEN 22080000=02881000=
|
|
GO ROSE; 22085000=02881000=
|
|
COMPOST: 22090000=02882000=
|
|
T:= T & GT1[12:4:5] & GT2[7:7:8]; 22095000=02882000=
|
|
IF GT1 ^= 1 AND NOT MACROID THEN % NOT RESERVED WORD 22100000=02882100=
|
|
XREFIT(T.LINK, CARDNUMBER, NORMALREF); % BUILD XREF ENTRY 22105000=02882200=
|
|
22110000=02883000=
|
|
COMMENT CHECK HERE FOR COMMENTS AND DEFINED IDS; 22115000=02883000=
|
|
IF NOT ENDTOG THEN 22120000=02884000=
|
|
BEGIN 22125000=02885000=
|
|
IF GT1:= T.CLASS = COMMENTV THEN 22130000=02886000=
|
|
BEGIN 22135000=02887000=
|
|
WHILE EXAMIN(SBUFF, NCR) ^= 6";" DO 22140000=02888000=
|
|
BEGIN 22145000=02889000=
|
|
RESULT:= 6; 22150000=02889000=
|
|
COUNT:= 0; 22155000=02889000=
|
|
SCANNER 22160000=02889000=
|
|
END; 22165000=02889000=
|
|
RESULT:= 0; 22170000=02890000=
|
|
SCANNER; 22175000=02890000=
|
|
GO SCANAGAIN 22180000=02891000=
|
|
END 22185000=02892000=
|
|
END; 22190000=02892000=
|
|
IF STOPDEFINE THEN 22195000=02893000=
|
|
GO COMPLETE; 22200000=02893000=
|
|
IF GT1 ^= DEFINEDID THEN 22205000=02894000=
|
|
GO COMPLETE; 22210000=02894000=
|
|
22215000=02895000=
|
|
COMMENT SETUP FOR DEFINED IDS - SEE DEFINEGEN FOR MORE DETAILS; 22220000=02895000=
|
|
IF BOOLEAN(T.MON) THEN % THIS IS A PARAMETRIC DEFINE 22225000=02896000=
|
|
GT1:= GIT(T:= FIXDEFINEINFO(T)) 22230000=02897000=
|
|
ELSE 22235000=02897000=
|
|
GT1:= 0; 22240000=02897000=
|
|
IF DEFINEINDEX = 24 THEN 22245000=02898000=
|
|
BEGIN 22250000=02899000=
|
|
FLAG(139); 22255000=02899000=
|
|
GO ARGH 22260000=02899000=
|
|
END; 22265000=02899000=
|
|
DEFINEARRAY[DEFINEINDEX]:= LASTUSED & GT1[29:14:15]; 22270000=02900000=
|
|
LASTUSED:= T.DYNAM; 22275000=02901000=
|
|
DEFINEARRAY[DEFINEINDEX+2]:= 262144*LCR+NCR; 22280000=02902000=
|
|
LCR:= (NCR:= DEFINEINDEX+1)+1; 22285000=02903000=
|
|
SBUFF:= DEFINEARRAY; % SWITCH SOURCE TO DEFINEARRAY 22285100
|
|
PUTSEQNO(EBCDICBUFF, 0, SBUFF, LCR); 22290000=02904000=
|
|
GT4:= EBCDICBUFF[0]; % COMPENSATE FOR SCALAR PARAM 22290100
|
|
TURNONSTOPLIGHT(6"%", SBUFF, LCR); 22295000=02905000=
|
|
DEFINEINDEX:= DEFINEINDEX+3; 22300000=02905000=
|
|
GO PERCENT; 22305000=02906000=
|
|
COMPLETE: 22325000=02910000=
|
|
ELBAT[NXTELBT]:= T; 22330000=02910000=
|
|
IF NOT DEFINING THEN 22335000=02910100=
|
|
IF T.CLASS = BEGINV THEN 22340000=02910200=
|
|
BEGINSTACK[BSPOINT:= BSPOINT+1]:= CARDNUMBER 22345000=02910300=
|
|
ELSE 22350000=02910300=
|
|
IF T.CLASS = ENDV THEN 22355000=02910400=
|
|
BEGIN 22360000=02910500=
|
|
IF LISTER THEN 22365000=02910600=
|
|
IF BEND THEN 22370000=02910600=
|
|
BEGINPRINT; 22375000=02910600=
|
|
BSPOINT:= BSPOINT-REAL(BSPOINT > 0); % PREVENT INVALID INDEX 22380000=02910700=
|
|
END; 22385000=02910800=
|
|
STOPDEFINE:= FALSE; 22390000=02911000=
|
|
COMMENT ALLOW DEFINES AGAIN; 22395000=02911000=
|
|
IF NXTELBT:= NXTELBT+1 > 74 THEN 22400000=02912000=
|
|
IF NOT MACROID THEN 22405000=02913000=
|
|
BEGIN 22410000=02914000=
|
|
22415000=02915000=
|
|
COMMENT ELBAT IS FULL: ADJUST IT; 22420000=02915000=
|
|
MOVE(10, ELBAT, 65, ELBAT, 0); 22425000=02916000=
|
|
I:= I-65; 22430000=02917000=
|
|
P:= P-65; 22435000=02917000=
|
|
NXTELBT:= 10; 22440000=02917000=
|
|
END 22445000=02919000=
|
|
END; 22450000=02919000=
|
|
IF TABLE:= ELBAT[P].CLASS = COMMENTV THEN 22455000=02920000=
|
|
BEGIN 22460000=02921000=
|
|
22465000=02922000=
|
|
COMMENT SPECIAL HANDLING OF CONSTANTS FOR SAKE OF FOR STATEMENTS; 22470000=02922000=
|
|
C:= INFO[0, ELBAT[P].ADDRESS]; 22475000=02923000=
|
|
ELBAT[P].CLASS:= TABLE:= NONLITNO 22480000=02925000=
|
|
END; 22485000=02925000=
|
|
STOPDEFINE:= FALSE; 22490000=02926000=
|
|
COMMENT ALLOW DEFINE; 22495000=02926000=
|
|
END TABLE; 22500000=02927000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22505000=02927000=
|
|
INTEGER PROCEDURE MOVEANDBLOCK(FROM, SIZE, NAME); 22510000=02927110=
|
|
VALUE 22510100=02927110=
|
|
SIZE, 22510200=02927110=
|
|
NAME; 22515000=02927110=
|
|
REAL 22520000=02927110=
|
|
SIZE, 22525000=02927110=
|
|
NAME; 22530000=02927110=
|
|
ARRAY 22535000=02927110=
|
|
FROM[0, 0]; 22540000=02927110=
|
|
BEGIN 22545000=02927120=
|
|
INTEGER 22550000=02927130=
|
|
NSEGS, 22555000=02927130=
|
|
I, 22560000=02927130=
|
|
J, 22565000=02927130=
|
|
K; 22570000=02927130=
|
|
ARRAY 22575000=02927140=
|
|
A[0:14]; 22580000=02927140=
|
|
SWITCH FORMAT 22585000=02927150=
|
|
FMT:= 22590000=02927155=
|
|
(/,"FILE PARAMETER BLOCK IS CODE FILE SEGMENT",I5,/), 22595000=02927160=
|
|
(/,"SEGMENT DICTIONARY IS CODE FILE SEGMENT",I5,/), 22600000=02927170=
|
|
(/,"PROGRAM-LINE DICTIONARY IS CODE FILE SEGMENT",I5,/), 22605000=02927180=
|
|
(/,"PROGRAM REFERENCE TABLE IS CODE FILE SEGMENT",I5,/), 22610000=02927190=
|
|
(/,"SEGMENT-LINE DICTIONARY IS CODE FILE SEGMENT",I5,/), 22615000=02927200=
|
|
(/,"POWER OF TEN ARRAY IS CODE FILE SEGMENT",I5,/), 22620000=02927210=
|
|
(/,"SEGMENT ZERO",I*,/), 22625000=02927220=
|
|
(/,"SEGMENT NUMBER",I5," IS CODE FILE SEGMENT",I5,/); 22630000=02927230=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22632000
|
|
PROCEDURE OCTALWORDS(N, W, S, SX, D, DX); 22635000=02927240=
|
|
VALUE 22640000=02927240=
|
|
N, W, SX, DX; 22645000=02927240=
|
|
REAL 22645100
|
|
N, W, SX, DX; 22645200
|
|
ARRAY 22645300
|
|
S, D[0]; 22645400
|
|
BEGIN 22655000=02927250=
|
|
STREAMLOCALS; 22655100
|
|
STREAMSETDI(D, DX); 22660000=02927260=
|
|
STREAMSMEARLIT(1, 6" "); 22665000=02927260=
|
|
STREAMSETLOCSI(N); 22670000=02927270=
|
|
STREAMSKIPSI(+6); 22675000=02927270=
|
|
THRU 4 DO 22680000=02927272=
|
|
BEGIN 22680100
|
|
STREAMSETDB(3, 0); 22680200
|
|
THRU 3 DO 22680300
|
|
BEGIN 22680400
|
|
IF STREAMTESTSB THEN 22680500
|
|
STREAMSETDB(1, 1) 22680600
|
|
ELSE 22680700
|
|
STREAMSETDB(1, 0); 22680800
|
|
22680900
|
|
STREAMSKIPSB(1); 22681000
|
|
END; 22681100
|
|
END; 22681200
|
|
22681300
|
|
STREAMSKIPDI(-4); 22685000=02927280=
|
|
STREAMTRANSFERFILL(3); 22690000=02927280=
|
|
STREAMSETDI(D, DX); 22695000=02927290=
|
|
STREAMSKIPDI(+5); 22700000=02927290=
|
|
STREAMSMEARLIT(4, 6" "); 22705000=02927290=
|
|
STREAMSETSI(S, DX); 22710000=02927300=
|
|
THRU W DO 22715000=02927350=
|
|
BEGIN 22715100
|
|
THRU 2 DO 22715200
|
|
BEGIN 22715300
|
|
THRU 8 DO 22715400
|
|
BEGIN 22720000=02927350=
|
|
STREAMSETDB(3, 0); 22720100
|
|
THRU 3 DO 22720200
|
|
BEGIN 22720300
|
|
IF STREAMTESTSB THEN 22720400
|
|
STREAMSETDB(1, 1) 22720500
|
|
ELSE 22720600
|
|
STREAMSETDB(1, 0); 22720700
|
|
22720800
|
|
STREAMSKIPSB(1) 22720900
|
|
END; 22721000
|
|
END; 22721100
|
|
22721200
|
|
STREAMSMEARLIT(1, 6" ") 22725000=02927350=
|
|
END; 22725100
|
|
22725200
|
|
STREAMSMEARLIT(2, 6" ") 22725300
|
|
END; 22725400
|
|
END OF OCTALWORDS; 22730000=02927360=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22732000
|
|
%********** S T A R T ********** 22735000=02927370=
|
|
NSEGS:= (SIZE+29) DIV 30; 22740000=02927380=
|
|
IF DA DIV CHUNK < T:= (DA+NSEGS) DIV CHUNK THEN 22745000=02927390=
|
|
DA:= CHUNK*T; 22750000=02927400=
|
|
MOVEANDBLOCK:= DA; 22755000=02927410=
|
|
IF CODEFILE THEN 22760000=02927420=
|
|
IF NAME >= 0 THEN 22765000=02927430=
|
|
WRITE(LINE, FMT[NAME], DA) 22770000=02927450=
|
|
ELSE 22775000=02927450=
|
|
WRITE(LINE, FMT[7], ABS(NAME), DA); 22780000=02927460=
|
|
IF SIZE ^= 0 THEN 22785000=02927470=
|
|
BEGIN 22790000=02927480=
|
|
FOR J:= 0 STEP 30 WHILE J < SIZE DO 22795000=02927490=
|
|
BEGIN 22800000=02927500=
|
|
IF(K:= (128-(J MOD 128))) < 30 THEN 22805000=02927510=
|
|
BEGIN 22810000=02927520=
|
|
MOVE(K, FROM[J DIV 128,*], J MOD 128, CODEBUFF, 0); 22815000=02927530=
|
|
MOVE(30-K, FROM[(J DIV 128)+1,*], 0, CODEBUFF, K); 22820000=02927540=
|
|
END 22825000=02927570=
|
|
ELSE 22830000=02927570=
|
|
MOVE(30, FROM[J DIV 128,*], J MOD 128, CODEBUFF, 0); 22835000=02927570=
|
|
IF J+30 > SIZE THEN % ZERO OUT UNUSED SECTION 22840000=02927580=
|
|
BEGIN 22845000=02927590=
|
|
K:= 0; 22850000=02927600=
|
|
REPLACE POINTER(CODEBUFF[SIZE-J],0) BY 0 FOR 30-SIZE+J WORDS; 22855000=02927610=
|
|
END; 22870000=02927630=
|
|
IF CODEFILE THEN 22875000=02927640=
|
|
BEGIN 22880000=02927650=
|
|
FOR K:= 0 STEP 5 WHILE K <= 25 AND(J+K) <= SIZE DO 22885000=02927660=
|
|
BEGIN 22890000=02927670=
|
|
BLANKET(14, A); 22895000=02927680=
|
|
OCTALWORDS(J+K, IF(J:= K+5) <= SIZE THEN 5 ELSE SIZE-J-K, 22900000=02927700=
|
|
CODEBUFF, K, A, 0); 22905000=02927700=
|
|
UNPACKBICTOEBCDIC(A, 0, EBCDICBUFF, 0, 15*8); 22909900
|
|
WRITE(LINE, 20, EBCDICBUFF[*]); 22910000=02927710=
|
|
END; 22915000=02927720=
|
|
WRITE(LINE); 22920000=02927722=
|
|
END; 22925000=02927730=
|
|
WRITE(CODE[DA], 30, CODEBUFF); 22930000=02927740=
|
|
DA:= DA+1; 22935000=02927740=
|
|
END; 22940000=02927750=
|
|
END; 22945000=02927760=
|
|
END OF MOVEANDBLOCK; 22950000=02927770=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22955000=02927770=
|
|
22960000=02928000=
|
|
COMMENT NEXTENT IS THE PROCEDURE WHICH SCANS FOR THE FORMAT GENERATOR. 22965000=02928000=
|
|
IT USES THE SAME SCANNER AS THE TABLE ROUTINE. NEXTENT 22970000=02929000=
|
|
PLACES EITHER A CHARACTER OR A CONVERTED NUMBER WITH A 22975000=02930000=
|
|
NEGATIVE SIGN IN ELCLASS. NEXTENT SUPPRESSES BLANKS; 22980000=02931000=
|
|
PROCEDURE NEXTENT; 22985000=02932000=
|
|
BEGIN 22990000=02933000=
|
|
LABEL 22995000=02933000=
|
|
DEBLANK; 23000000=02933000=
|
|
COUNT:= ACCUM[1]:= 0; 23005000=02934000=
|
|
LASTELCLASS:= ELCLASS; 23010000=02934000=
|
|
DEBLANK: 23015000=02936000=
|
|
IF EXAMIN(SBUFF, NCR) = 6" " THEN 23020000=02936000=
|
|
BEGIN 23025000=02937000=
|
|
RESULT:= 7; 23030000=02938000=
|
|
SCANNER; 23035000=02938000=
|
|
END; 23040000=02939000=
|
|
IF EXAMIN(SBUFF, NCR) <= 9 THEN 23045000=02940000=
|
|
BEGIN % WE HAVE A NO. (WORD MODE COLLATING SEQ.)23050000=02941000=
|
|
RESULT:= 3; 23055000=02942000=
|
|
SCANNER; 23060000=02942000=
|
|
TCOUNT:= 0; 23065000=02942000=
|
|
Q:= ACCUM[1]; 23070000=02942000=
|
|
IF COUNT > 4 THEN 23075000=02943000=
|
|
FLAG(140) % INTEGER > 1023. 23080000=02943000=
|
|
ELSE 23085000=02944000=
|
|
IF ELCLASS:= -CONVERT < -1023 THEN 23090000=02944000=
|
|
FLAG(140) % INTEGER > 1023. 23095000=02944000=
|
|
END 23100000=02946000=
|
|
ELSE 23105000=02946000=
|
|
IF EXAMIN(SBUFF, NCR) = 6"%" THEN 23110000=02946000=
|
|
BEGIN 23115000=02947000=
|
|
READACARD; 23120000=02948000=
|
|
COUNT:= ACCUM[1]:= 0; 23125000=02948000=
|
|
GO DEBLANK; 23130000=02948000=
|
|
END 23135000=02950000=
|
|
ELSE 23140000=02950000=
|
|
BEGIN 23145000=02950000=
|
|
RESULT:= 5; 23150000=02951000=
|
|
SCANNER; % GET NEXT CHARACTER. 23155000=02951000=
|
|
Q:= ACCUM[1]; 23160000=02952000=
|
|
ELCLASS:= ACCUM[1].[29:6] 23165000=02953000=
|
|
END 23170000=02954000=
|
|
END OF NEXTENT; 23175000=02954000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23180000=02954000=
|
|
BOOLEAN PROCEDURE BOOLPRIM; 23185000=02955000=
|
|
FORWARD; 23190000=02955000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23195000=02955000=
|
|
PROCEDURE BOOLCOMP(B); 23200000=02955500=
|
|
BOOLEAN 23205000=02955500=
|
|
B; 23210000=02955500=
|
|
FORWARD; 23215000=02955500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23220000=02955500=
|
|
INTEGER PROCEDURE NEXT; 23225000=02956000=
|
|
BEGIN 23230000=02956500=
|
|
LABEL 23235000=02957000=
|
|
EXIT; 23240000=02957000=
|
|
INTEGER 23245000=02957500=
|
|
T; 23250000=02957500=
|
|
DEFINE 23255000=02958000=
|
|
ERROR = BEGIN 23260000=02958000=
|
|
FLAG(603); 23265000=02958000=
|
|
GO EXIT 23270000=02958000=
|
|
END #; 23275000=02958000=
|
|
SKAN; 23280000=02958500=
|
|
IF RESULT = 3 THEN 23285000=02959000=
|
|
ERROR; % NUMBERS NOT ALLOWED. 23290000=02959000=
|
|
IF RESULT = 2 THEN % SPECIAL CHARACTER. 23295000=02959500=
|
|
BEGIN 23300000=02960000=
|
|
T:= 23305000=02960500=
|
|
IF Q = 6"1,0000" OR Q = 6"1%0000" THEN 23310000=02960500=
|
|
20 % FAKE OUT BOOLEXP.23315000=02960500=
|
|
ELSE 23320000=02961000=
|
|
((T:= Q.[29:6]-2) & T[5:6:3]); 23325000=02961000=
|
|
IF T = 11 OR T = 19 OR T = 20 THEN 23330000=02961500=
|
|
BATMAN:= SPECIAL[T] % (,),OR ;23335000=02961500=
|
|
ELSE 23340000=02962000=
|
|
FLAG(603); 23345000=02962000=
|
|
GO EXIT 23350000=02963000=
|
|
END SPECIAL CHARACTERS; 23355000=02963000=
|
|
23360000=02963500=
|
|
COMMENT LOOK FOR BOOLEAN OPERATORS, THEN OPTIONS; 23365000=02963500=
|
|
T:= 23370000=02964000=
|
|
IF Q = 6"3NOT00" THEN 23375000=02964000=
|
|
NOTOP 23380000=02964500=
|
|
ELSE 23385000=02964500=
|
|
IF Q = 6"3AND00" THEN 23390000=02964500=
|
|
ANDOP 23395000=02965000=
|
|
ELSE 23400000=02965000=
|
|
IF Q = 6"2OR000" THEN 23405000=02965000=
|
|
OROP 23410000=02965500=
|
|
ELSE 23415000=02965500=
|
|
IF Q = 6"3EQV00" THEN 23420000=02965500=
|
|
EQVOP 23425000=02966000=
|
|
ELSE 23430000=02966000=
|
|
0; 23435000=02966000=
|
|
IF T ^= 0 THEN 23440000=02966500=
|
|
BATMAN.CLASS:= T 23445000=02967000=
|
|
ELSE 23450000=02967000=
|
|
BATMAN:= 1 & BOOID[45:7] & REAL(FINDOPTION(1))[46:1]; % OPTION. 23455000=02967000=
|
|
EXIT: 23460000=02968000=
|
|
NEXT:= MYCLASS:= BATMAN.CLASS; 23465000=02968000=
|
|
END NEXT; 23470000=02968500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23475000=02968500=
|
|
BOOLEAN PROCEDURE BOOLEXP; 23480000=02969000=
|
|
BEGIN 23485000=02969500=
|
|
BOOLEAN 23490000=02970000=
|
|
B; 23495000=02970000=
|
|
B:= BOOLPRIM; 23500000=02970500=
|
|
WHILE MYCLASS >= EQVOP AND MYCLASS <= ANDOP DO 23505000=02971000=
|
|
BOOLCOMP(B); 23510000=02971000=
|
|
BOOLEXP:= B 23515000=02972000=
|
|
END BOOLEXP; 23520000=02972000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23525000=02972000=
|
|
BOOLEAN PROCEDURE BOOLPRIM; 23530000=02972500=
|
|
BEGIN 23535000=02973000=
|
|
BOOLEAN 23540000=02973500=
|
|
B, 23545000=02973500=
|
|
KNOT; 23550000=02973500=
|
|
DEFINE 23555000=02974000=
|
|
SKIPIT = MYCLASS:= NEXT #; 23560000=02974000=
|
|
IF KNOT:= (NEXT = NOTOP) THEN 23565000=02974500=
|
|
SKIPIT; 23570000=02974500=
|
|
IF MYCLASS = LEFTPAREN THEN 23575000=02975000=
|
|
BEGIN 23580000=02975500=
|
|
B:= BOOLEXP; 23585000=02976000=
|
|
IF MYCLASS ^= RTPAREN THEN 23590000=02976500=
|
|
FLAG(604); 23595000=02976500=
|
|
END 23600000=02977500=
|
|
ELSE 23605000=02977500=
|
|
IF MYCLASS ^= BOOID THEN 23610000=02977500=
|
|
FLAG(601) 23615000=02978000=
|
|
ELSE 23620000=02978000=
|
|
B:= BATMAN < 0; 23625000=02978000=
|
|
IF KNOT THEN 23630000=02978500=
|
|
B:= NOT B; 23635000=02978500=
|
|
SKIPIT; 23640000=02978500=
|
|
BOOLPRIM:= B 23645000=02979500=
|
|
END BOOLPRIM; 23650000=02979500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23655000=02979500=
|
|
PROCEDURE BOOLCOMP(B); 23660000=02980000=
|
|
BOOLEAN 23665000=02980000=
|
|
B; 23670000=02980000=
|
|
BEGIN 23675000=02980500=
|
|
REAL 23680000=02981000=
|
|
OPCLASS; 23685000=02981000=
|
|
BOOLEAN 23690000=02981500=
|
|
T; 23695000=02981500=
|
|
OPCLASS:= MYCLASS; 23700000=02982000=
|
|
T:= BOOLPRIM; 23705000=02982500=
|
|
WHILE OPCLASS < MYCLASS DO 23710000=02983000=
|
|
BOOLCOMP(T); 23715000=02983000=
|
|
B:= 23720000=02983500=
|
|
IF OPCLASS = ANDOP THEN 23725000=02983500=
|
|
(B AND T) 23730000=02984000=
|
|
ELSE 23735000=02984000=
|
|
IF OPCLASS = OROP THEN 23740000=02984000=
|
|
(B OR T) 23745000=02984500=
|
|
ELSE 23750000=02984500=
|
|
(B EQV T); 23755000=02984500=
|
|
END BOOLCOMP; 23760000=02985000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23765000=02985000=
|
|
% 23770000=02985500=
|
|
23775000=02986000=
|
|
COMMENT#################################################################23780000=02986000=
|
|
FORWARD DECLARATIONS 23785000=02986500=
|
|
#######################################################################;23790000=02987000=
|
|
% 23795000=02987500=
|
|
PROCEDURE AEXP; 23800000=03001000=
|
|
FORWARD; 23805000=03001000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23810000=03001000=
|
|
PROCEDURE ARITHSEC; 23815000=03002000=
|
|
FORWARD; 23820000=03002000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23825000=03002000=
|
|
PROCEDURE SIMPARITH; 23830000=03003000=
|
|
FORWARD; 23835000=03003000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23840000=03003000=
|
|
PROCEDURE ARITHCOMP; 23845000=03004000=
|
|
FORWARD; 23850000=03004000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23855000=03004000=
|
|
PROCEDURE PRIMARY; 23860000=03005000=
|
|
FORWARD; 23865000=03005000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23870000=03005000=
|
|
PROCEDURE BEXP; 23875000=03006000=
|
|
FORWARD; 23880000=03006000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23885000=03006000=
|
|
INTEGER PROCEDURE EXPRSS; 23890000=03007000=
|
|
FORWARD; 23895000=03007000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23900000=03007000=
|
|
INTEGER PROCEDURE BOOSEC; 23905000=03008000=
|
|
FORWARD; 23910000=03008000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23915000=03008000=
|
|
PROCEDURE SIMPBOO; 23920000=03009000=
|
|
FORWARD; 23925000=03009000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23930000=03009000=
|
|
PROCEDURE BOOCOMP; 23935000=03010000=
|
|
FORWARD; 23940000=03010000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23945000=03010000=
|
|
INTEGER PROCEDURE BOOPRIM; 23950000=03011000=
|
|
FORWARD; 23955000=03011000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23960000=03011000=
|
|
PROCEDURE RELATION; 23965000=03012000=
|
|
FORWARD; 23970000=03012000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23975000=03012000=
|
|
INTEGER PROCEDURE IFEXP; 23980000=03013000=
|
|
FORWARD; 23985000=03013000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%23990000=03013000=
|
|
PROCEDURE PARSE; 23995000=03014000=
|
|
FORWARD; 24000000=03014000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24005000=03014000=
|
|
PROCEDURE DOTIT; 24010000=03015000=
|
|
FORWARD; 24015000=03015000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24020000=03015000=
|
|
PROCEDURE GENGO(ELBATWORD); 24025000=03016000=
|
|
VALUE 24030000=03016000=
|
|
ELBATWORD; 24035000=03016000=
|
|
REAL 24040000=03016000=
|
|
ELBATWORD; 24045000=03016000=
|
|
FORWARD; 24050000=03016000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24055000=03016000=
|
|
PROCEDURE DEXP; 24060000=03017000=
|
|
FORWARD; 24065000=03017000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24070000=03017000=
|
|
PROCEDURE IFCLAUSE; 24075000=03018000=
|
|
FORWARD; 24080000=03018000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24085000=03018000=
|
|
INTEGER PROCEDURE GET(SYLLABLE); 24090000=03019000=
|
|
VALUE 24095000=03019000=
|
|
SYLLABLE; 24100000=03019000=
|
|
REAL 24105000=03019000=
|
|
SYLLABLE; 24110000=03019000=
|
|
FORWARD; 24115000=03019000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24120000=03019000=
|
|
INTEGER PROCEDURE GNAT(L); 24125000=03020000=
|
|
VALUE 24130000=03020000=
|
|
L; 24135000=03020000=
|
|
REAL 24140000=03020000=
|
|
L; 24145000=03020000=
|
|
FORWARD; 24150000=03020000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24155000=03020000=
|
|
PROCEDURE PANA; 24160000=03021000=
|
|
FORWARD; 24165000=03021000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24170000=03021000=
|
|
PROCEDURE IFSTMT; 24175000=03022000=
|
|
FORWARD; 24180000=03022000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24185000=03022000=
|
|
PROCEDURE GOGEN(LABELBAT, BRANCHTYPE); 24190000=03023000=
|
|
VALUE 24195000=03024000=
|
|
LABELBAT, 24200000=03024000=
|
|
BRANCHTYPE; 24205000=03024000=
|
|
REAL 24210000=03025000=
|
|
LABELBAT, 24215000=03025000=
|
|
BRANCHTYPE; 24220000=03025000=
|
|
FORWARD; 24225000=03025000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24230000=03025000=
|
|
BOOLEAN PROCEDURE SIMPGO; 24235000=03026000=
|
|
FORWARD; 24240000=03026000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24245000=03026000=
|
|
PROCEDURE STMT; 24250000=03027000=
|
|
FORWARD; 24255000=03027000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24260000=03027000=
|
|
PROCEDURE EMIT(SYLLABLE); 24265000=03028000=
|
|
VALUE 24270000=03028000=
|
|
SYLLABLE; 24275000=03028000=
|
|
REAL 24280000=03028000=
|
|
SYLLABLE; 24285000=03028000=
|
|
FORWARD; 24290000=03028000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24295000=03028000=
|
|
PROCEDURE PROCSTMT(FROM); 24300000=03029000=
|
|
VALUE 24305000=03029000=
|
|
FROM; 24310000=03029000=
|
|
BOOLEAN 24315000=03029000=
|
|
FROM; 24320000=03029000=
|
|
FORWARD; 24325000=03029000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24330000=03029000=
|
|
PROCEDURE STRMPROCSTMT; 24335000=03030000=
|
|
FORWARD; 24340000=03030000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24345000=03030000=
|
|
BOOLEAN PROCEDURE GETINT; 24350000=03031000=
|
|
FORWARD; 24355000=03031000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24360000=03031000=
|
|
INTEGER PROCEDURE DIVIDE(NUMBER, P1, P2); 24365000=03032000=
|
|
VALUE 24370000=03032000=
|
|
NUMBER; 24375000=03032000=
|
|
INTEGER 24380000=03033000=
|
|
P1, 24385000=03033000=
|
|
P2, 24390000=03033000=
|
|
NUMBER; 24395000=03033000=
|
|
FORWARD; 24400000=03033000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24405000=03033000=
|
|
PROCEDURE CONSTANTCLEAN; 24410000=03034000=
|
|
FORWARD; 24415000=03034000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24420000=03034000=
|
|
PROCEDURE SCATTERELBAT; 24425000=03035000=
|
|
FORWARD; 24430000=03035000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24435000=03035000=
|
|
PROCEDURE EMITB(BRANCH, FROM, TOWARDS); 24440000=03036000=
|
|
VALUE 24445000=03036000=
|
|
BRANCH, 24450000=03036000=
|
|
FROM, 24455000=03036000=
|
|
TOWARDS; 24460000=03036000=
|
|
REAL 24465000=03037000=
|
|
BRANCH, 24470000=03037000=
|
|
FROM, 24475000=03037000=
|
|
TOWARDS; 24480000=03037000=
|
|
FORWARD; 24485000=03037000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24490000=03037000=
|
|
PROCEDURE VARIABLE(FROM); 24495000=03038000=
|
|
REAL 24500000=03038000=
|
|
FROM; 24505000=03038000=
|
|
FORWARD; 24510000=03038000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24515000=03038000=
|
|
PROCEDURE IMPFUN; 24520000=03039000=
|
|
FORWARD; 24525000=03039000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24530000=03039000=
|
|
PROCEDURE STREAMSTMT; 24535000=03040000=
|
|
FORWARD; 24540000=03040000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24545000=03040000=
|
|
PROCEDURE SEGMENTSTART; 24550000=03041000=
|
|
FORWARD; 24555000=03041000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24560000=03041000=
|
|
PROCEDURE SEGMENT(SIZE, NO, NOO); 24565000=03042000=
|
|
VALUE 24570000=03043000=
|
|
SIZE, 24575000=03043000=
|
|
NO, 24580000=03043000=
|
|
NOO; 24585000=03043000=
|
|
REAL 24590000=03044000=
|
|
SIZE, 24595000=03044000=
|
|
NO, 24600000=03044000=
|
|
NOO; 24605000=03044000=
|
|
FORWARD; 24610000=03045000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24615000=03045000=
|
|
INTEGER PROCEDURE BAE; 24620000=03046000=
|
|
FORWARD; 24625000=03046000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24630000=03046000=
|
|
REAL PROCEDURE PROGDESCBLDR(A, B, C); 24635000=03047000=
|
|
VALUE 24640000=03047000=
|
|
A, 24645000=03047000=
|
|
B, 24650000=03047000=
|
|
C; 24655000=03047000=
|
|
REAL 24660000=03047000=
|
|
A, 24665000=03047000=
|
|
B, 24670000=03047000=
|
|
C; 24675000=03047000=
|
|
FORWARD; 24680000=03047000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24685000=03047000=
|
|
PROCEDURE BANA; 24690000=03048000=
|
|
FORWARD; 24695000=03048000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24700000=03048000=
|
|
PROCEDURE EMITNUM(A); 24705000=03049000=
|
|
VALUE 24710000=03049000=
|
|
A; 24715000=03049000=
|
|
REAL 24720000=03049000=
|
|
A; 24725000=03049000=
|
|
FORWARD; 24730000=03049000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24735000=03049000=
|
|
PROCEDURE EMITD(A, B, T); 24740000=03050000=
|
|
VALUE 24745000=03050000=
|
|
A, 24750000=03050000=
|
|
B, 24755000=03050000=
|
|
T; 24760000=03050000=
|
|
INTEGER 24765000=03050000=
|
|
A, 24770000=03050000=
|
|
B, 24775000=03050000=
|
|
T; 24780000=03050000=
|
|
FORWARD; 24785000=03050000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24790000=03050000=
|
|
INTEGER PROCEDURE GETSPACE(S, L); 24795000=03051000=
|
|
VALUE 24800000=03051000=
|
|
S, 24805000=03051000=
|
|
L; 24810000=03051000=
|
|
INTEGER 24815000=03051001=
|
|
L; 24820000=03051001=
|
|
BOOLEAN 24825000=03051001=
|
|
S; 24830000=03051001=
|
|
FORWARD; 24835000=03051001=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24840000=03051001=
|
|
PROCEDURE FORSTMT; 24845000=03052000=
|
|
FORWARD; 24850000=03052000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24855000=03052000=
|
|
PROCEDURE E; 24860000=03054000=
|
|
FORWARD; 24865000=03054000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24870000=03054000=
|
|
PROCEDURE ENTRY(TYPE); 24875000=03055000=
|
|
VALUE 24880000=03055000=
|
|
TYPE; 24885000=03055000=
|
|
REAL 24890000=03055000=
|
|
TYPE; 24895000=03055000=
|
|
FORWARD; 24900000=03055000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24905000=03055000=
|
|
PROCEDURE FORMATGEN; 24910000=03056000=
|
|
FORWARD; 24915000=03056000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24920000=03056000=
|
|
PROCEDURE EXPLICITFORMAT; 24925000=03056100=
|
|
FORWARD; 24930000=03056100=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24935000=03056100=
|
|
BOOLEAN PROCEDURE FORMATPHRASE; 24940000=03056200=
|
|
FORWARD; 24945000=03056200=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24950000=03056200=
|
|
PROCEDURE PUTNBUMP(P1); 24955000=03057000=
|
|
VALUE 24960000=03057000=
|
|
P1; 24965000=03057000=
|
|
REAL 24970000=03057000=
|
|
P1; 24975000=03057000=
|
|
FORWARD; 24980000=03057000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24985000=03057000=
|
|
PROCEDURE JUMPCHKNX; 24990000=03058000=
|
|
FORWARD; 24995000=03058000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25000000=03058000=
|
|
PROCEDURE JUMPCHKX; 25005000=03059000=
|
|
FORWARD; 25010000=03059000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25015000=03059000=
|
|
PROCEDURE DBLSTMT; 25020000=03060000=
|
|
FORWARD; 25025000=03060000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25030000=03060000=
|
|
PROCEDURE READSTMT; 25035000=03061000=
|
|
FORWARD; 25040000=03061000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25045000=03061000=
|
|
INTEGER PROCEDURE FILEATTRIBUTEHANDLER(N); 25050000=03061010=
|
|
VALUE 25055000=03061010=
|
|
N; 25060000=03061010=
|
|
REAL 25065000=03061010=
|
|
N; 25070000=03061010=
|
|
FORWARD; 25075000=03061010=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25080000=03061010=
|
|
PROCEDURE WRITESTMT; 25085000=03062000=
|
|
FORWARD; 25090000=03062000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25095000=03062000=
|
|
PROCEDURE SPACESTMT; 25100000=03063000=
|
|
FORWARD; 25105000=03063000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25110000=03063000=
|
|
PROCEDURE CLOSESTMT; 25115000=03064000=
|
|
FORWARD; 25120000=03064000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25125000=03064000=
|
|
PROCEDURE LOCKSTMT; 25130000=03065000=
|
|
FORWARD; 25135000=03065000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25140000=03065000=
|
|
PROCEDURE RWNDSTMT; 25145000=03066000=
|
|
FORWARD; 25150000=03066000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25155000=03066000=
|
|
PROCEDURE BLOCK(S); 25160000=03067000=
|
|
VALUE 25165000=03067000=
|
|
S; 25170000=03067000=
|
|
BOOLEAN 25175000=03067000=
|
|
S; 25180000=03067000=
|
|
FORWARD; 25185000=03067000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25190000=03067000=
|
|
PROCEDURE PURGE(STOPPER); 25195000=03068000=
|
|
VALUE 25200000=03068000=
|
|
STOPPER; 25205000=03068000=
|
|
REAL 25210000=03068000=
|
|
STOPPER; 25215000=03068000=
|
|
FORWARD; 25220000=03068000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25225000=03068000=
|
|
PROCEDURE ENTER(TYPEV); 25230000=03069000=
|
|
VALUE 25235000=03070000=
|
|
TYPEV; 25240000=03070000=
|
|
INTEGER 25245000=03071000=
|
|
TYPEV; 25250000=03071000=
|
|
FORWARD; 25255000=03071000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25260000=03071000=
|
|
INTEGER PROCEDURE PASSTYPE(P); 25265000=03074000=
|
|
VALUE 25270000=03074000=
|
|
P; 25275000=03074000=
|
|
REAL 25280000=03074000=
|
|
P; 25285000=03074000=
|
|
FORWARD; 25290000=03074000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25295000=03074000=
|
|
PROCEDURE PASSALPHA(P); 25300000=03075000=
|
|
VALUE 25305000=03075000=
|
|
P; 25310000=03075000=
|
|
REAL 25315000=03075000=
|
|
P; 25320000=03075000=
|
|
FORWARD; 25325000=03075000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25330000=03075000=
|
|
PROCEDURE LISTELEMENT; 25335000=03076000=
|
|
FORWARD; 25340000=03076000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25345000=03076000=
|
|
REAL PROCEDURE LISTGEN; 25350000=03077000=
|
|
FORWARD; 25355000=03077000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25360000=03077000=
|
|
PROCEDURE UNKNOWNSTMT; 25365000=03078000=
|
|
FORWARD; 25370000=03078000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25375000=03078000=
|
|
PROCEDURE FAULTSTMT; 25380000=03079000=
|
|
FORWARD; 25385000=03079000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25390000=03079000=
|
|
PROCEDURE FAULTDEC; 25395000=03080000=
|
|
FORWARD; 25400000=03080000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25405000=03080000=
|
|
PROCEDURE SORTSTMT; 25410000=03081000=
|
|
FORWARD; 25415000=03081000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25420000=03081000=
|
|
PROCEDURE MERGESTMT; 25425000=03082000=
|
|
FORWARD; 25430000=03082000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25435000=03082000=
|
|
PROCEDURE CASESTMT; 25440000=03083000=
|
|
FORWARD; 25445000=03083000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25450000=03083000=
|
|
PROCEDURE HANDLETHETAILENDOFAREADORSPACESTATEMENT; 25455000=03084000=
|
|
FORWARD; 25460000=03084000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25465000=03084000=
|
|
ALPHA PROCEDURE BUGGER(S); 25470000=03100000=
|
|
VALUE 25475000=03100000=
|
|
S; 25480000=03100000=
|
|
INTEGER 25485000=03100000=
|
|
S; 25490000=03100000=
|
|
FORWARD; 25495000=03100000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25500000=03100000=
|
|
25505000=04000000=
|
|
COMMENT THIS SECTION CONTAINS THE EMITTERS. THEY ARE THE AGENTS WHICH 25510000=04000000=
|
|
ACTUALLY PRODUCE CODE AND DEBUGING OUTPUT; 25515000=04001000=
|
|
25520000=04002000=
|
|
COMMENT EMITL EMITS A LIT CALL; 25525000=04002000=
|
|
PROCEDURE EMITL(LITERAL); 25530000=04003000=
|
|
VALUE 25535000=04003000=
|
|
LITERAL; 25540000=04003000=
|
|
REAL 25545000=04003000=
|
|
LITERAL; 25550000=04003000=
|
|
EMIT(0 & LITERAL[11:9:10]); 25555000=04004000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25560000=04004000=
|
|
25565000=04005000=
|
|
COMMENT EMITO EMIT AN OPERATOR; 25570000=04005000=
|
|
PROCEDURE EMITO(OPERATOR); 25575000=04006000=
|
|
VALUE 25580000=04006000=
|
|
OPERATOR; 25585000=04006000=
|
|
REAL 25590000=04006000=
|
|
OPERATOR; 25595000=04006000=
|
|
EMIT(1 & OPERATOR[11:9:10]); 25600000=04007000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25605000=04007000=
|
|
25610000=04008000=
|
|
COMMENT EMITC IS PRIMARILY FOR USE BY STRMSTMT TO EMIT CHARACTOR MODE 25615000=04008000=
|
|
OPERATORS. HOWEVER IT ALSO HANDLES DIA, DIB, AND TRB; 25620000=04009000=
|
|
PROCEDURE EMITC(REPEAT, OPERATOR); 25625000=04010000=
|
|
VALUE 25630000=04010000=
|
|
REPEAT, 25635000=04010000=
|
|
OPERATOR; 25640000=04010000=
|
|
REAL 25645000=04011000=
|
|
REPEAT, 25650000=04011000=
|
|
OPERATOR; 25655000=04011000=
|
|
BEGIN 25660000=04012000=
|
|
IF REPEAT >= 64 THEN 25665000=04013000=
|
|
FLAG(268); 25670000=04013000=
|
|
EMIT(OPERATOR & REPEAT[11:5:6]) 25675000=04014000=
|
|
END EMITC; 25680000=04014000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25685000=04014000=
|
|
25690000=04015000=
|
|
COMMENT EMITV EMITS AN OPERAND CALL. IF THE ADDRESS IS FOR THE SECOND 25695000=04015000=
|
|
HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 25700000=04016000=
|
|
PROCEDURE EMITV(ADDRESS); 25705000=04017000=
|
|
VALUE 25710000=04017000=
|
|
ADDRESS; 25715000=04017000=
|
|
REAL 25720000=04017000=
|
|
ADDRESS; 25725000=04017000=
|
|
BEGIN 25730000=04018000=
|
|
IF ADDRESS > 1023 THEN 25735000=04018000=
|
|
EMITO(PRTE); 25740000=04018000=
|
|
EMIT(2 & ADDRESS[11:9:10]) 25745000=04019000=
|
|
END EMITV; 25750000=04019000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25755000=04019000=
|
|
25760000=04020000=
|
|
COMMENT EMITN EMITS A DESCRIPTOR CALL. IF THE ADDRESS IS FOR THE 25765000=04020000=
|
|
SECOND HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 25770000=04021000=
|
|
PROCEDURE EMITN(ADDRESS); 25775000=04022000=
|
|
VALUE 25780000=04022000=
|
|
ADDRESS; 25785000=04022000=
|
|
REAL 25790000=04022000=
|
|
ADDRESS; 25795000=04022000=
|
|
BEGIN 25800000=04023000=
|
|
IF ADDRESS > 1023 THEN 25805000=04023000=
|
|
EMITO(PRTE); 25810000=04023000=
|
|
EMIT(3 & ADDRESS[11:9:10]) 25815000=04024000=
|
|
END EMITN; 25820000=04024000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25825000=04024000=
|
|
25830000=04025000=
|
|
COMMENT EMITPAIR EMITS A LITC ADDRESS FOLLOWED BY OPERATOR. IF THE 25835000=04025000=
|
|
ADDRESS IS FOR THE SECOND HALF OF THE PRT, THEN IT ALSO 25840000=04026000=
|
|
EMITS PRTE; 25845000=04027000=
|
|
PROCEDURE EMITPAIR(ADDRESS, OPERATOR); 25850000=04028000=
|
|
VALUE 25855000=04029000=
|
|
ADDRESS, 25860000=04029000=
|
|
OPERATOR; 25865000=04029000=
|
|
REAL 25870000=04030000=
|
|
ADDRESS, 25875000=04030000=
|
|
OPERATOR; 25880000=04030000=
|
|
BEGIN 25885000=04031000=
|
|
EMITL(ADDRESS); 25890000=04032000=
|
|
IF ADDRESS > 1023 THEN 25895000=04033000=
|
|
EMITO(PRTE); 25900000=04033000=
|
|
EMITO(OPERATOR) 25905000=04034000=
|
|
END EMITPAIR; 25910000=04034000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%25915000=04034000=
|
|
25920000=04035000=
|
|
COMMENT EMITUP IS RESPONSIBLE FOR COMPILING THE CODE TO RAISE AN 25925000=04035000=
|
|
EXPRESSION TO SOME POWER IF THE EXPONENT IS A LITERAL 25930000=04036000=
|
|
OR A NEGATIVE LITERAL THEN IN LINE CODE IS COMPILED. THIS25935000=04037000=
|
|
CODE CONSISTS OF A SERIES OF DUPS AND MULS, AS WITH 25940000=04038000=
|
|
EMITLNG CARE MUST BE TAKEN TO AVOID CONFUSION WITH LINKS 25945000=04039000=
|
|
AND CONDITIONAL EXPRESSIONS. IF THESE SPECIAL CASES DO 25950000=04040000=
|
|
NOT HOLD, THEN A CALL ON AN INTRINSIC PROCEDURE, XTOTHEI, 25955000=04041000=
|
|
IS CONSTRUCTED. XTOTHEI PRODUCES A SERIES OF MULTIPLIES 25960000=04042000=
|
|
(APPROXIMATELY LN I MULTIPLIES) IF I IS AN INTEGER. 25965000=04043000=
|
|
OTHERWISE IT CALLS LN AND EXP; 25970000=04044000=
|
|
PROCEDURE EMITUP; 25975000=04045000=
|
|
BEGIN 25980000=04046000=
|
|
INTEGER 25985000=04046000=
|
|
BACKUP, 25990000=04046000=
|
|
CTR; 25995000=04046000=
|
|
LABEL 26000000=04047000=
|
|
E; 26005000=04047000=
|
|
IF NOT LINKTOG THEN 26010000=04048000=
|
|
GO TO E; 26015000=04048000=
|
|
COMMENT CALL XTOTHEI IF LAST THING IS LINK; 26020000=04049000=
|
|
IF GET(L-1) = 537 THEN 26025000=04050000=
|
|
COMMENT LAST OPERATOR IS CHS; 26030000=04051000=
|
|
BEGIN 26035000=04052000=
|
|
BACKUP:= 1; 26040000=04052000=
|
|
L:= L-1 26045000=04052000=
|
|
END; 26050000=04052000=
|
|
IF (GT4:= GET(L-1)).[1:2] = 0 THEN 26055000=04054000=
|
|
BEGIN 26060000=04054000=
|
|
COMMENT IT IS A LITERAL; 26065000=04055000=
|
|
BACKUP:= BACKUP+1; 26070000=04056000=
|
|
L:= L-1; 26075000=04056000=
|
|
IF GET(L-1).[8:9] = 153 THEN 26080000=04057000=
|
|
GO TO E; 26085000=04057000=
|
|
COMMENT CALL XTOTHE IF THE LAST OPERATOR IS A BRANCH; 26090000=04058000=
|
|
CTR:= 1; 26095000=04059000=
|
|
GT4:= GT4 DIV 4; 26100000=04059000=
|
|
WHILE GT4 DIV 2 ^= 0 DO 26105000=04061000=
|
|
BEGIN 26110000=04061000=
|
|
EMITO(DUP); 26115000=04062000=
|
|
IF BOOLEAN(GT4) THEN 26120000=04063000=
|
|
BEGIN 26125000=04063000=
|
|
CTR:= CTR+1; 26130000=04063000=
|
|
EMITO(DUP) 26135000=04063000=
|
|
END; 26140000=04063000=
|
|
EMITO(MUL); 26145000=04064000=
|
|
GT4:= GT4 DIV 2 26150000=04065000=
|
|
END; 26155000=04065000=
|
|
IF GT4 = 0 THEN 26160000=04066000=
|
|
BEGIN 26165000=04066000=
|
|
EMITO(DEL); 26170000=04066000=
|
|
EMITL(1) 26175000=04066000=
|
|
END 26180000=04067000=
|
|
ELSE 26185000=04067000=
|
|
WHILE CTR:= CTR-1 ^= 0 DO 26190000=04067000=
|
|
EMITO(MUL); 26195000=04067000=
|
|
IF BACKUP = 2 THEN 26200000=04069000=
|
|
BEGIN 26205000=04069000=
|
|
EMITL(1); 26210000=04070000=
|
|
EMITO(XCH); 26215000=04071000=
|
|
EMITO(128) 26220000=04072000=
|
|
END 26225000=04073000=
|
|
END 26230000=04073000=
|
|
ELSE 26235000=04073000=
|
|
BEGIN 26240000=04073000=
|
|
E: L:= L+BACKUP; 26245000=04074000=
|
|
EMITO(MKS); 26250000=04075000=
|
|
EMITPAIR(GNAT(LOGI), LOD); 26255000=04076000=
|
|
EMITPAIR(GNAT(EXPI), LOD); 26260000=04077000=
|
|
EMITV(GNAT(XTOTHEI)); 26265000=04078000=
|
|
STACKCT:= 0; 26270000=04078500=
|
|
EMITO(DEL) 26275000=04079000=
|
|
END 26280000=04079000=
|
|
END EMITUP; 26285000=04079000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26290000=04079000=
|
|
26295000=04080000=
|
|
COMMENT ADJUST ADJUST L TO THE BEGINING OF A WORD AND FILLS IN THE 26300000=04080000=
|
|
INERVENING SPACE WITH NOPS. IT CHECKS STREAMTOG TO DECIDE 26305000=04081000=
|
|
WHICH SORT OF NOP TO USE; 26310000=04082000=
|
|
PROCEDURE ADJUST; 26315000=04083000=
|
|
BEGIN 26320000=04084000=
|
|
DIALA:= DIALB:= 0; 26325000=04085000=
|
|
WHILE L.[1:2] ^= 0 DO 26330000=04086000=
|
|
EMIT(IF STREAMTOG THEN 1 ELSE 45) 26335000=04087000=
|
|
END ADJUST; 26340000=04087000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26345000=04087000=
|
|
26350000=04088000=
|
|
COMMENT EMITLNG CHANGES A RELATIONAL FOLLOWED BY A NEGATE TO THE 26355000=04088000=
|
|
NEGATED RELATIONAL. IT ALSO CHANGES A NEGATE FOLLOWED 26360000=04089000=
|
|
BY A NEGATE TO NOTHING. CARE MUST BE EXERCIZED. A LINK 26365000=04090000=
|
|
(FOR CONSTANT TO BE EMITTED LATER) MIGHT LOOK LIKE AN LNG 26370000=04091000=
|
|
OR A RELATIONAL OPERATOR. THIS IS THE USE OF LINKTOG. 26375000=04092000=
|
|
ALSO A CONSTRUCT AS NOT ( IF B THEN X=Y ELSE Y=Z) 26380000=04093000=
|
|
COULD GIVE TROUBLE. THIS IS THE MEANING OF THE OBSCURE 26385000=04094000=
|
|
EMITS FOLLOWED BY L:= L-1 FOUND IN IFEXP, BOOSEC, BOOCOMP,26390000=04095000=
|
|
AND RELATION - THAT CODE SERVES TO SET A FLAG FOR USE BY 26395000=04096000=
|
|
EMITLNG; 26400000=04097000=
|
|
PROCEDURE EMITLNG; 26405000=04098000=
|
|
BEGIN 26410000=04099000=
|
|
LABEL 26415000=04099000=
|
|
E; 26420000=04099000=
|
|
IF NOT LINKTOG THEN 26425000=04100000=
|
|
GO TO E; 26430000=04100000=
|
|
COMMENT GO TO E IF LAST THING IS A LINK; 26435000=04101000=
|
|
IF GET(L) ^= 0 THEN 26440000=04102000=
|
|
GO TO E; 26445000=04102000=
|
|
COMMENT EITHER LAST EXPRESSION WAS CONDITIONAL OR THERE IS NO 26450000=04103000=
|
|
LNG OR RELATIONAL OPERATOR; 26455000=04104000=
|
|
IF GT1:= GET(L-1) = 77 THEN 26460000=04105000=
|
|
L:= L-1 26465000=04106000=
|
|
COMMENT LAST THING WAS AN LNG - SO CANCEL IT; 26470000=04106000=
|
|
ELSE 26475000=04107000=
|
|
IF GT1.[5:6] = 21 AND GT1.[10:2] = 0 THEN % AHA 26480000=04107000=
|
|
COMMENT LAST THING WAS A RELATIONAL; 26485000=04108000=
|
|
BEGIN 26490000=04109000=
|
|
L:= L-1; 26495000=04109000=
|
|
EMITO(REAL(BOOLEAN(GT1.[11:10]) EQV 26500000=04111000=
|
|
BOOLEAN(IF GT1.[7:2] = 0 THEN 511 ELSE 463))) 26505000=04111000=
|
|
COMMENT NEGATE THE RELATIONAL; 26510000=04111000=
|
|
END 26515000=04112000=
|
|
ELSE 26520000=04112000=
|
|
E: EMITO(LNG) 26525000=04112000=
|
|
END EMITLNG; 26530000=04112000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26535000=04112000=
|
|
COMMENT EMITB EMITS A BRANCH OPERATOR AND ITS ASSOCIATED NUMBER; 26540000=04113000=
|
|
PROCEDURE EMITB(BRANCH, FROM, TOWARDS); 26545000=04114000=
|
|
VALUE 26550000=04115000=
|
|
BRANCH, 26555000=04115000=
|
|
FROM, 26560000=04115000=
|
|
TOWARDS; 26565000=04115000=
|
|
REAL 26570000=04116000=
|
|
BRANCH, 26575000=04116000=
|
|
FROM, 26580000=04116000=
|
|
TOWARDS; 26585000=04116000=
|
|
BEGIN 26590000=04117000=
|
|
INTEGER 26595000=04118000=
|
|
TL; 26600000=04118000=
|
|
TL:= L; 26605000=04119000=
|
|
L:= FROM-2; 26610000=04120000=
|
|
GT1:= TOWARDS-FROM; 26615000=04120100=
|
|
IF TOWARDS.[1:2] = 0 THEN 26620000=04120300=
|
|
BEGIN 26625000=04120300=
|
|
BRANCH:= BRANCH & 1[8:0:1]; 26630000=04120400=
|
|
GT1:= TOWARDS DIV 4-(FROM-1) DIV 4 26635000=04120500=
|
|
END; 26640000=04120500=
|
|
EMITNUM(ABS(GT1)); 26645000=04121000=
|
|
EMITO(BRANCH & (REAL(GT1 >= 0)+1)[5:1:2]); 26650000=04122000=
|
|
IF BOOLEAN(BRANCH.[9:1]) THEN 26655000=04123000=
|
|
DIALA:= DIALB:= 0; 26660000=04123000=
|
|
L:= TL; 26665000=04124000=
|
|
END EMITB; 26670000=04125000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26675000=04125000=
|
|
COMMENT DEBUGWORD FORMATS TWO FIELDS FOR DEBUGGING OUTPUT IN 26680000=04126000=
|
|
OCTAL, NAMELY : 26685000=04127000=
|
|
1. 4 CHARACTERS FOR THE L REGISTER. 26690000=04128000=
|
|
2.16 CHARACTERS FOR THE WORD BEING EMITTED. ; 26695000=04129000=
|
|
PROCEDURE DEBUGWORD(SEQ, CODE, FEIL); 26700000=04130000=
|
|
VALUE 26705000=04130000=
|
|
SEQ, CODE; 26710000=04130000=
|
|
REAL 26710100
|
|
SEQ, CODE; 26710200
|
|
ARRAY 26710300
|
|
FEIL[0]; 26710400
|
|
BEGIN 26720000=04131000=
|
|
STREAMLOCALS; 26720100
|
|
STREAMSETDI(FEIL, 0); 26725000=04132000=
|
|
STREAMSETLOCSI(SEQ); 26730000=04132000=
|
|
STREAMSKIPSI(+4); 26735000=04132000=
|
|
STREAMTRANSFERCHR(4); 26740000=04132000=
|
|
STREAMTRANSFERLIT(2, 6" "); 26745000=04133000=
|
|
STREAMSETLOCSI(CODE); 26750000=04134000=
|
|
THRU 16 DO 26755000=04136000=
|
|
BEGIN 26755100
|
|
STREAMSETDB(3, 0); 26755200
|
|
THRU 3 DO 26755300
|
|
BEGIN 26755400
|
|
IF STREAMTESTSB THEN 26755500
|
|
STREAMSETDB(1, 1) 26755600
|
|
ELSE 26755700
|
|
STREAMSETDB(1, 0); 26755800
|
|
26755900
|
|
STREAMSKIPSB(1); 26756000
|
|
END 26756100
|
|
END; 26756200
|
|
26756300
|
|
THRU 49 DO 26760000=04137000=
|
|
BEGIN 26760100
|
|
STREAMSMEARLIT(2, 6" ") 26760200
|
|
END; 26760300
|
|
END; 26765000=04138000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26766000
|
|
COMMENT EMITWORD PLACES THE PARAMETER,"WORD",INTO EDOC. IF 26770000=04139000=
|
|
DEBUGGING IS REQUIRED, "L" AND "WORD" ARE OUTPUT ON 26775000=04140000=
|
|
THE PRINTER FILE IN OCTAL FORMAT. ; 26780000=04141000=
|
|
PROCEDURE EMITWORD(WORD); 26785000=04142000=
|
|
VALUE 26790000=04142000=
|
|
WORD; 26795000=04142000=
|
|
REAL 26800000=04142000=
|
|
WORD; 26805000=04142000=
|
|
BEGIN 26810000=04143000=
|
|
ADJUST; 26815000=04144000=
|
|
IF L >= 4092 THEN 26820000=04145000=
|
|
ERR(200) 26825000=04145000=
|
|
ELSE 26830000=04146000=
|
|
BEGIN 26835000=04146000=
|
|
EDOC[L.[11:3], L.[8:7]]:= WORD; 26840000=04147000=
|
|
IF DEBUGTOG THEN 26845000=04148000=
|
|
BEGIN 26850000=04149000=
|
|
DEBUGWORD(B2D(L), WORD, LIN); 26855000=04149000=
|
|
WRITELINE 26860000=04150000=
|
|
END; 26865000=04150000=
|
|
L:= L+4 26870000=04151000=
|
|
END 26875000=04152000=
|
|
END EMITWORD; 26880000=04152000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26885000=04152000=
|
|
COMMENT CONSTANTCLEAN IS CALLED AFTER AN UNCONDITIONAL BRANCH HAS 26890000=04153000=
|
|
BEEN EMITTED. IF ANY CONSTANTS HAVE BEEN ACCUMULATED BY 26895000=04154000=
|
|
EMITNUM IN INFO[0,*], CONSTANTCLEAN WILL FIX THE CHAIN 26900000=04155000=
|
|
OF C-RELATIVE OPDC S LEFT BY EMITNUM. IF C-RELATIVE 26905000=04156000=
|
|
ADDRESSING IS IMPOSSIBLE (I.E. THE ADDRESS 26910000=04157000=
|
|
IF GREATER THAN 127 WORDS) THEN THE CONSTANT ALONG WITH 26915000=04158000=
|
|
THE 1ST LINK OF THE OPDC CHAIN IS ENTERED IN INFO. 26920000=04159000=
|
|
AT PURGE TIME THE REMAINING OPDC S ARE EMITTED WITH 26925000=04160000=
|
|
F -RELATIVE ADDRESSING AND CODE EMITTED TO STORE THE 26930000=04161000=
|
|
CONSTANTS INTO THE PROPER F-RELATIVE CELLS. ; 26935000=04162000=
|
|
PROCEDURE CONSTANTCLEAN; 26940000=04163000=
|
|
IF MRCLEAN THEN 26945000=04164000=
|
|
BEGIN 26950000=04165000=
|
|
INTEGER 26955000=04166000=
|
|
J, 26960000=04166000=
|
|
TEMPL, 26965000=04166000=
|
|
D, 26970000=04166000=
|
|
LINK; 26975000=04166000=
|
|
BOOLEAN 26980000=04167000=
|
|
CREL; 26985000=04167000=
|
|
LABEL 26990000=04168000=
|
|
ALLTHU; 26995000=04168000=
|
|
DIALA:= DIALB:= 0; 27000000=04169000=
|
|
FOR J:= 1 STEP 2 UNTIL LASTENTRY DO 27005000=04170000=
|
|
BEGIN 27010000=04171000=
|
|
ADJUST; 27015000=04172000=
|
|
TEMPL:= L; 27020000=04172000=
|
|
L:= INFO[0, 255-J+1]; 27025000=04172000=
|
|
CREL:= FALSE; 27030000=04173000=
|
|
DO BEGIN 27035000=04174000=
|
|
IF D:= (TEMPL-L+3) DIV 4 >= 128 THEN 27040000=04175000=
|
|
BEGIN 27045000=04176000=
|
|
NCII:= NCII+1; 27050000=04177000=
|
|
PUTNBUMP 27055000=04178000=
|
|
(L & NONLITNO[45:6:7] & (NEXTINFO-LASTINFO)[20:7:8]); 27060000=04178000=
|
|
PUTNBUMP(TAKE(255-J)); 27065000=04179000=
|
|
LASTINFO:= NEXTINFO-2; 27070000=04179000=
|
|
GO TO ALLTHU; 27075000=04180000=
|
|
END; 27080000=04181000=
|
|
LINK:= GET(L); 27085000=04182000=
|
|
CREL:= TRUE; 27090000=04183000=
|
|
EMITV(D+768); 27095000=04184000=
|
|
END 27100000=04185000=
|
|
UNTIL L:= LINK = 4095; 27105000=04185000=
|
|
ALLTHU: 27110000=04186000=
|
|
L:= TEMPL; 27115000=04186000=
|
|
IF CREL THEN 27120000=04187000=
|
|
EMITWORD(INFO[0, 255-J]); 27125000=04187000=
|
|
END; 27130000=04188000=
|
|
LASTENTRY:= 0; 27135000=04189000=
|
|
END; 27140000=04190000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27145000=04190000=
|
|
COMMENT EMITNUM HANDLES THE EMISSION OF CODE FOR CONSTANTS,BOTH 27150000=04191000=
|
|
EXPLICIT AND IMPLICIT. IN EVERY CASE,EMITNUM WILL 27155000=04192000=
|
|
PRODUCE CODE TO GET THE DESIRED CONSTANT ON TOP OF 27160000=04193000=
|
|
THE STACK. IF THE NUMBER IS A LITERAL A SIMPLE LITC 27165000=04194000=
|
|
SYLLABLE IS PRODUCED. HOWEVER,NON-LITERALS ARE KEPT 27170000=04195000=
|
|
IN THE ZERO-TH ROW OF INFO WITH THE SYLLABLE 27175000=04196000=
|
|
POSITION,L. THE FIRST EMITNUM ON A PARTICULAR 27180000=04197000=
|
|
CONSTANT CAUSES THE VALUES OF L AND THE CONSTANT 27185000=04198000=
|
|
TO BE STORED IN INFO[0,*] (NOTE:ITEMS ARE STORED 27190000=04199000=
|
|
IN REVERSE STARTING WITH INFO[0,255],ETC.). THEN 27195000=04200000=
|
|
ITS THE JOB OF CONSTANTCLEAN TO EMIT THE ACTUAL 27200000=04201000=
|
|
OPDC (SEE CONSTANTCLEAN PROCEDURE FOR DETAILS) ; 27205000=04202000=
|
|
PROCEDURE EMITNUM(C); 27210000=04203000=
|
|
VALUE 27215000=04203000=
|
|
C; 27220000=04203000=
|
|
REAL 27225000=04203000=
|
|
C; 27230000=04203000=
|
|
BEGIN 27235000=04204000=
|
|
LABEL 27240000=04204000=
|
|
FINISHED, 27245000=04204000=
|
|
FOUND; 27250000=04204000=
|
|
REAL 27255000=04204000=
|
|
N; 27260000=04204000=
|
|
IF C.[46:37] = 0 THEN 27265000=04205000=
|
|
EMITL(C) 27270000=04206000=
|
|
ELSE 27275000=04206000=
|
|
BEGIN 27280000=04207000=
|
|
FOR N:= 1 STEP 2 UNTIL LASTENTRY DO 27285000=04208000=
|
|
IF INFO[0, 255-N] = C THEN 27290000=04209000=
|
|
GO TO FOUND; 27295000=04209000=
|
|
INFO[0, 255-LASTENTRY]:= L; 27300000=04210000=
|
|
INFO[0, 255-LASTENTRY-1]:= C; 27305000=04211000=
|
|
EMITN(1023); 27310000=04212000=
|
|
LINKTOG:= FALSE; 27315000=04213000=
|
|
IF LASTENTRY:= LASTENTRY+2 >= 128 THEN 27320000=04214000=
|
|
BEGIN 27325000=04215000=
|
|
C:= BUMPL; 27330000=04216000=
|
|
CONSTANTCLEAN; 27335000=04217000=
|
|
EMITB(BFW, C, L); 27340000=04218000=
|
|
END; 27345000=04219000=
|
|
GO TO FINISHED; 27350000=04220000=
|
|
FOUND: 27355000=04221000=
|
|
EMIT(INFO[0, 255-N+1]); 27360000=04221000=
|
|
LINKTOG:= FALSE; 27365000=04222000=
|
|
INFO[0, 255-N+1]:= L-1; 27370000=04223000=
|
|
END; 27375000=04224000=
|
|
FINISHED: 27380000=04225000=
|
|
END EMITNUM; 27385000=04225000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27390000=04225000=
|
|
COMMENT SEARCH PERFORMS A BINARY SEARCH ON THE COP AND WOP 27395000=04226000=
|
|
ARRAYS, GIVEN THE OPERATOR BITS SEARCH YIELDS THE BCD 27400000=04227000=
|
|
MNEUMONIC FOR THAT OPERATOR. IF THE OPERATOR CANNOT 27405000=04228000=
|
|
BE FOUND SEARCH YIELDS BLANKS. 27410000=04229000=
|
|
NOTE: DIA,DIB,TRB ARE RETURNED AS BLANKS. ; 27415000=04230000=
|
|
ALPHA PROCEDURE SEARCH(Q, KEY); 27420000=04231000=
|
|
VALUE 27425000=04231000=
|
|
KEY; 27430000=04231000=
|
|
ARRAY 27435000=04231000=
|
|
Q[0]; 27440000=04231000=
|
|
REAL 27445000=04231000=
|
|
KEY; 27450000=04231000=
|
|
BEGIN 27455000=04232000=
|
|
LABEL 27460000=04232000=
|
|
L; 27465000=04232000=
|
|
COMMENT GT1 AND GT2 ARE INITIALIZED ASSUMMING THAT Q IS ORDERED 27470000=04233000=
|
|
BY PAIRS (ARGUMENT,FUNCTION,ARGUMENT,FUNCTION,ETC.) 27475000=04234000=
|
|
AND THAT THE FIRST ARGUMENT IS IN Q[4]. FURTHERMORE 27480000=04235000=
|
|
THE LENGTH OF Q IS 128. ; 27485000=04236000=
|
|
INTEGER 27490000=04237000=
|
|
N, 27495000=04237000=
|
|
I; 27500000=04237000=
|
|
N:= 64; 27505000=04238000=
|
|
FOR I:= 66 STEP IF Q[I] < KEY THEN 27510000=04239000=
|
|
N 27515000=04239000=
|
|
ELSE 27520000=04239000=
|
|
-N WHILE N:= N DIV 2 >= 1 27525000=04240000=
|
|
DO 27530000=04240000=
|
|
IF Q[I] = KEY THEN 27535000=04241000=
|
|
GO TO L; 27540000=04241000=
|
|
I:= 0; 27545000=04242000=
|
|
COMMENT ARGUMENT NOT FOUND,SEARCH=Q[1] ; 27550000=04242000=
|
|
L: SEARCH:= Q[I+1]; 27555000=04243000=
|
|
END SEARCH; 27560000=04244000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27565000=04244000=
|
|
COMMENT B2D CONVERTS THE FOUR LOW ORDER OCTAL DIGITS TO BCD 27570000=04245000=
|
|
CODE ; 27575000=04246000=
|
|
ALPHA PROCEDURE B2D(B); 27580000=04247000=
|
|
VALUE 27585000=04247000=
|
|
B; 27590000=04247000=
|
|
REAL 27595000=04247000=
|
|
B; 27600000=04247000=
|
|
B2D:= 0 & B[2:2:3] & B[8:5:3] & B[14:8:3] & B[20:11:3]; 27605000=04248000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27610000=04248000=
|
|
COMMENT PACK IS A STREAM PROCEDURE WHICH INSERTS THE SYLLABLE 27615000=04265000=
|
|
INTO THE EDOC ARRAY. THE SPECIFIC ELEMENT OF EDOC 27620000=04266000=
|
|
IS PRECISILY = EDOC[(L DIV 4) DIV 128,(< DIV 4)MOD 128] 27625000=04267000=
|
|
SYLLABLE POSITION=(L MOD 4 ), WHERE L IS THE SYLLABLE 27630000=04268000=
|
|
NUMBER RELATIVE TO THE BEGINNING OF THE SEGMENT; 27635000=04269000=
|
|
PROCEDURE PACK(WORD, WX, POSITION, SYLLABLE); 27640000=04270000=
|
|
VALUE 27645000=04271000=
|
|
WX, POSITION, SYLLABLE; 27650000=04271000=
|
|
REAL 27650100
|
|
WX, POSITION, SYLLABLE; 27650200
|
|
ARRAY 27650300
|
|
WORD[0]; 27650400
|
|
BEGIN 27660000=04272000=
|
|
STREAMLOCALS; 27660100
|
|
STREAMSETDI(WORD, WX); 27665000=04273000=
|
|
STREAMSKIPDI(+POSITION); 27670000=04273000=
|
|
STREAMSKIPDI(+POSITION); 27675000=04273000=
|
|
STREAMSETLOCSI(SYLLABLE); 27680000=04274000=
|
|
STREAMSKIPSI(+6); 27685000=04274000=
|
|
STREAMTRANSFERCHR(2); 27690000=04275000=
|
|
% PERHAPS WE SHOULD JUST DO 27690100
|
|
% WORD[WX]:= * & (SYLLABLE)[47-POSITION*12:12]; 27690200
|
|
END PACK; 27695000=04276000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27696000
|
|
PROCEDURE DEBUG(S); 27700000=04277000=
|
|
VALUE 27705000=04278000=
|
|
S; 27710000=04278000=
|
|
REAL 27715000=04278000=
|
|
S; 27720000=04278000=
|
|
IF STREAMTOG THEN 27725000=04279000=
|
|
IF SINGLTOG THEN 27730000=04279100=
|
|
WRITE(LINE, BUG, BIC2EBC(B2D(L)), BIC2EBC(COP[S.[5:6]]), 27735000=04279200=
|
|
BIC2EBC(B2D(S.[11:6])), BIC2EBC(B2D(S))) 27735100
|
|
ELSE 27755000=04280000=
|
|
WRITE(LINE[SPACE 2], BUG, BIC2EBC(B2D(L)), 27760000=04281000=
|
|
BIC2EBC(COP[S.[5:6]]), BIC2EBC(B2D(S.[11:6])), 27760100
|
|
BIC2EBC(B2D(S))) 27765000
|
|
ELSE 27770000=04283000=
|
|
IF SINGLTOG THEN 27775000=04284100=
|
|
WRITE(LINE, BUG, BIC2EBC(B2D(L)), 27780000=04284500=
|
|
BIC2EBC(IF T1:=S.[1:2]=1 THEN BUGGER(S.[11:10]) ELSE WOP[T1]),27785000=04284500=
|
|
BIC2EBC(IF T1 = 1 THEN WOP[1] ELSE B2D(S.[11:10])), 27790000=04284500=
|
|
BIC2EBC(B2D(S))) 27790100
|
|
ELSE 27795000=04284500=
|
|
WRITE(LINE[SPACE 2], BUG, BIC2EBC(B2D(L)), 27800000=04287000=
|
|
BIC2EBC(IF T1:=S.[1:2]=1 THEN BUGGER(S.[11:10]) ELSE WOP[T1]),27805000=04287000=
|
|
BIC2EBC(IF T1 = 1 THEN WOP[1] ELSE B2D(S.[11:10])), 27810000=04287000=
|
|
BIC2EBC(B2D(S))); 27810100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27812000
|
|
COMMENT EMIT PLACES SYLLABLES INTO EDOC, CALLS DEBUG FOR 27815000=04288000=
|
|
DEBUGGING OUTPUT ON THE PRINTER, AND CHECKS FOR SEGMENTS 27820000=04289000=
|
|
GREATER THAN 4093 SYLLABLES. ; 27825000=04290000=
|
|
PROCEDURE EMIT(S); 27830000=04291000=
|
|
VALUE 27835000=04291000=
|
|
S; 27840000=04291000=
|
|
REAL 27845000=04291000=
|
|
S; 27850000=04291000=
|
|
BEGIN 27855000=04292000=
|
|
IF L < 4092 THEN 27860000=04293000=
|
|
BEGIN 27865000=04294000=
|
|
LINKTOG:= TRUE; 27870000=04295000=
|
|
EDOC[L.[11:3], L.[8:7]].[47-(L.[1:2]*12):12]:= S; % WAS PACK(...);27875000=04296000=
|
|
IF DEBUGTOG THEN 27880000=04297000=
|
|
DEBUG(S); 27885000=04297000=
|
|
L:= L+1; 27890000=04298000=
|
|
END 27895000=04300000=
|
|
ELSE 27900000=04300000=
|
|
ERR(200) 27905000=04301000=
|
|
COMMENT 200 EMIT - SEGMENT GREATER THAN 4093 SYLLABLES *; 27910000=04301000=
|
|
END EMIT; 27915000=04302000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%27920000=04302000=
|
|
COMMENT THE PRINCIPLE FUNCTION OF DEBUG IS TO COMPUTER THE PROPER 27925000=04303000=
|
|
PARAMETERS FOR STREAM PROCEDURE BUG; 27930000=04304000=
|
|
COMMENT EMITD EMITS THE DIA,DIB,TRB SEQUENCE OF CODE. THE 27935000=04305000=
|
|
PREVIOUS SETTING OF THE G-H AND K-V REGISTERS IS COMPARED 27940000=04306000=
|
|
THE CURRENT . IF THE G-H,K-V OR BOTH ARE ALREADY SET THEN 27945000=04307000=
|
|
THE APPROIATE SYLLABLE(S) ARE OMITTED 27950000=04308000=
|
|
IF 0 BITS ARE TO BE TRANSFERED THEN NO SYLLABLES ARE 27955000=04309000=
|
|
EMITTED ; 27960000=04310000=
|
|
PROCEDURE EMITD(A, B, T); 27965000=04311000=
|
|
VALUE 27970000=04311000=
|
|
A, 27975000=04311000=
|
|
B, 27980000=04311000=
|
|
T; 27985000=04311000=
|
|
INTEGER 27990000=04311000=
|
|
A, 27995000=04311000=
|
|
B, 28000000=04311000=
|
|
T; 28005000=04311000=
|
|
BEGIN 28010000=04311010=
|
|
LABEL 28015000=04311010=
|
|
EXIT, 28020000=04311010=
|
|
NORMAL; 28025000=04311010=
|
|
REAL 28030000=04311020=
|
|
Q; 28035000=04311020=
|
|
IF T = 15 THEN 28040000=04311030=
|
|
BEGIN 28045000=04311040=
|
|
IF A = 33 THEN 28050000=04311050=
|
|
Q:= 512 28055000=04311060=
|
|
ELSE 28060000=04311060=
|
|
IF A ^= 18 THEN 28065000=04311060=
|
|
GO TO NORMAL; 28070000=04311060=
|
|
IF B = 18 THEN 28075000=04311070=
|
|
Q:= Q+256 28080000=04311080=
|
|
ELSE 28085000=04311080=
|
|
IF B ^= 33 THEN 28090000=04311080=
|
|
GO TO NORMAL; 28095000=04311080=
|
|
EMITO(Q+197); 28100000=04311090=
|
|
COMMENT -- THIS GETS OUT FIXED FIELD; 28105000=04311090=
|
|
GO TO EXIT; 28110000=04311100=
|
|
END; 28115000=04311110=
|
|
NORMAL: 28120000=04312000=
|
|
IF T ^= 0 THEN 28125000=04312000=
|
|
BEGIN 28130000=04313000=
|
|
IF DIALA ^= A THEN 28135000=04314000=
|
|
EMIT(((DIALA:= A) DIV 6)*512+(A:= A MOD 6)*64+DIA); 28140000=04315000=
|
|
IF DIALB ^= B THEN 28145000=04316000=
|
|
EMIT(((DIALB:= B) DIV 6)*512+(B:= B MOD 6)*64+DIB); 28150000=04317000=
|
|
EMIT(TRB+64*T); 28155000=04318000=
|
|
DIALA:= DIALB:= 0; 28160000=04319000=
|
|
COMMENT THE PRECEEDING STATEMENT CAN BE REMOVED FOR OPTIMIZING 28165000=04320000=
|
|
G-H AND K-V REGISTERS, OTHERWISE NO OPTIMIZING OCCURS; 28170000=04321000=
|
|
END EMITD; 28175000=04322000=
|
|
EXIT: 28180000=04322100=
|
|
END; 28185000=04322100=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28190000=04322100=
|
|
PROCEDURE EMITI(E, A, B); 28195000=04500000=
|
|
VALUE 28200000=04500000=
|
|
E, 28205000=04500000=
|
|
A, 28210000=04500000=
|
|
B; 28215000=04500000=
|
|
REAL 28220000=04500000=
|
|
E, 28225000=04500000=
|
|
A, 28230000=04500000=
|
|
B; 28235000=04500000=
|
|
BEGIN 28240000=04501000=
|
|
LABEL 28245000=04501000=
|
|
EXIT, 28250000=04501000=
|
|
IZ; 28255000=04501000=
|
|
INTEGER 28260000=04502000=
|
|
S, 28265000=04502000=
|
|
T1, 28270000=04502000=
|
|
T2; 28275000=04502000=
|
|
PROCEDURE EMIT21(E, B); 28280000=04503000=
|
|
VALUE 28285000=04503000=
|
|
E, 28290000=04503000=
|
|
B; 28295000=04503000=
|
|
REAL 28300000=04504000=
|
|
E; 28305000=04504000=
|
|
BOOLEAN 28310000=04505000=
|
|
B; 28315000=04505000=
|
|
BEGIN 28320000=04506000=
|
|
IF E = 0 THEN 28325000=04506000=
|
|
BEGIN 28330000=04507000=
|
|
IF B THEN 28335000=04507000=
|
|
EMITO(XCH); 28340000=04507000=
|
|
END 28345000=04508000=
|
|
ELSE 28350000=04508000=
|
|
BEGIN 28355000=04508000=
|
|
GT1:= E.ADDRESS; 28360000=04508000=
|
|
IF E:= E.CLASS <= INTID THEN 28365000=04509000=
|
|
EMITV(GT1) 28370000=04522000=
|
|
ELSE 28375000=04522000=
|
|
IF E <= INTARRAYID THEN 28380000=04522000=
|
|
EMITPAIR(GT1, LOD) 28385000=04523000=
|
|
ELSE 28390000=04523000=
|
|
EMITN(GT1) 28395000=04525000=
|
|
END 28400000=04526000=
|
|
END; 28405000=04526000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28410000=04526000=
|
|
IF B = 0 THEN 28415000=04526100=
|
|
BEGIN 28420000=04526200=
|
|
EMIT21(E, FALSE); 28425000=04526200=
|
|
GO TO EXIT 28430000=04526200=
|
|
END; 28435000=04526200=
|
|
IF STACKCT ^= 0 THEN 28440000=04527000=
|
|
GO TO IZ; 28445000=04527000=
|
|
IF B = 15 THEN 28450000=04528000=
|
|
BEGIN 28455000=04529000=
|
|
IF A = 33 THEN 28460000=04529000=
|
|
BEGIN 28465000=04530000=
|
|
EMIT21(E, FALSE); 28470000=04530000=
|
|
EMIT(0); 28475000=04531000=
|
|
EMITO(INX); 28480000=04531000=
|
|
GO TO EXIT; 28485000=04532000=
|
|
END; 28490000=04533000=
|
|
IF A = 18 THEN 28495000=04534000=
|
|
BEGIN 28500000=04535000=
|
|
EMIT(0); 28505000=04535000=
|
|
EMIT21(E, TRUE); 28510000=04536000=
|
|
EMITO(197); 28515000=04537000=
|
|
GO TO EXIT; 28520000=04538000=
|
|
END; 28525000=04539000=
|
|
GO TO IZ; 28530000=04540000=
|
|
END; 28535000=04541000=
|
|
IF B <= 10 AND A+B = 48 THEN 28540000=04542000=
|
|
BEGIN 28545000=04543000=
|
|
EMIT21(E, FALSE); 28550000=04543000=
|
|
EMITL(2**B-1); 28555000=04544000=
|
|
EMITO(LND); 28560000=04545000=
|
|
GO TO EXIT; 28565000=04546000=
|
|
END; 28570000=04547000=
|
|
IZ: IF(S:= (48-A-B) MOD 6)+B <= 39 THEN 28575000=04548000=
|
|
BEGIN 28580000=04549000=
|
|
EMIT21(E, FALSE); 28585000=04549000=
|
|
EMIT(T2:= (T1:= A DIV 6)*512+(A MOD 6)*64+DIA); 28590000=04550000=
|
|
EMIT(((A+B-1) DIV 6-T1+1)*512+64*S+37); 28595000=04551000=
|
|
GO TO EXIT; 28600000=04552000=
|
|
END; 28605000=04553000=
|
|
EMIT(0); 28610000=04554000=
|
|
EMIT21(E, TRUE); 28615000=04555000=
|
|
EMITD(A, 48-B, B); 28620000=04556000=
|
|
EXIT: 28625000=04558000=
|
|
END; 28630000=04558000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28635000=04558000=
|
|
ALPHA PROCEDURE BUGGER(OP); 28640000=04600000=
|
|
VALUE 28645000=04600000=
|
|
OP; 28650000=04600000=
|
|
INTEGER 28655000=04600000=
|
|
OP; 28660000=04600000=
|
|
BEGIN 28665000=04601000=
|
|
INTEGER 28670000=04601000=
|
|
Q; 28675000=04601000=
|
|
WOP[1]:= 6" "; 28680000=04602000=
|
|
IF BUGGER:= SEARCH(WOP, OP) = 6" " THEN 28685000=04603000=
|
|
IF Q:= OP.[3:4] >= 9 THEN 28690000=04604000=
|
|
BEGIN 28695000=04605000=
|
|
BUGGER:= POP[IF Q ^= 10 THEN Q-5 ELSE OP.[5:2]]; 28700000=04605000=
|
|
WOP[1]:= (IF Q = 10 THEN OP.[8:3] & OP[6:9:1] ELSE OP.[6:3] 28705000=04607000=
|
|
& OP[8:9:3]) & 6" "[23:11:12]; 28710000=04607000=
|
|
END; 28715000=04608000=
|
|
END BUGGER; 28720000=04608000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28725000=04608000=
|
|
PROCEDURE CHECKDISJOINT(A); 28730000=04609000=
|
|
VALUE 28735000=04609000=
|
|
A; 28740000=04609000=
|
|
INTEGER 28745000=04609000=
|
|
A; 28750000=04609000=
|
|
BEGIN 28755000=04610000=
|
|
IF LEVEL > SUBLEVEL+1 THEN 28760000=04611000=
|
|
BEGIN 28765000=04612000=
|
|
EMIT(0); 28770000=04613000=
|
|
EMITPAIR(A, STD); 28775000=04614000=
|
|
END; 28780000=04615000=
|
|
EMITN(A); 28785000=04616000=
|
|
END CHECKDISJOINT; 28790000=04617000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28795000=04617000=
|
|
28800000=05000000=
|
|
COMMENT THIS SECTION CONTAINS MISCELLANEOUS SERVICE ROUTINES; 28805000=05000000=
|
|
28810000=05001000=
|
|
COMMENT STEPI AND STEPIT ARE SHORT CALLS ON TABLE; 28815000=05001000=
|
|
PROCEDURE STEPIT; 28820000=05002000=
|
|
ELCLASS:= TABLE(I:= I+1); 28825000=05002000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28830000=05002000=
|
|
INTEGER PROCEDURE STEPI; 28835000=05003000=
|
|
STEPI:= ELCLASS:= TABLE(I:= I+1); 28840000=05003000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28845000=05003000=
|
|
28850000=05004000=
|
|
COMMENT TAKE FETCHS A WORD FROM INFO; 28855000=05004000=
|
|
REAL PROCEDURE TAKE(INDEX); 28860000=05005000=
|
|
VALUE 28865000=05005000=
|
|
INDEX; 28870000=05005000=
|
|
REAL % B5500 DIDN'T INTEGERIZE PARAM ON CALL? 28875000=05005000=
|
|
INDEX; 28880000=05005000=
|
|
TAKE:= INFO[INDEX.LINKR, INDEX.LINKC]; 28885000=05006000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28890000=05006000=
|
|
28895000=05007000=
|
|
COMMENT PUT PLACES A WORD INTO INFO; 28900000=05007000=
|
|
PROCEDURE PUT(WORD, INDEX); 28905000=05008000=
|
|
VALUE 28910000=05008000=
|
|
WORD, 28915000=05008000=
|
|
INDEX; 28920000=05008000=
|
|
REAL 28925000=05008000=
|
|
WORD, 28930000=05008000=
|
|
INDEX; 28935000=05008000=
|
|
INFO[INDEX.LINKR, INDEX.LINKC]:= WORD; 28940000=05009000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28945000=05009000=
|
|
28950000=05010000=
|
|
COMMENT FLAG FLAGS ERROR MESSAGES, COUNTS THEM AND SUPRESS FUTURE 28955000=05010000=
|
|
ERROR MESSAGES UNTIL THE COMPILER THINKS IT HAS RECOVERED;28960000=05011000=
|
|
PROCEDURE FLAG(ERRNUM); 28965000=05012000=
|
|
VALUE 28970000=05012000=
|
|
ERRNUM; 28975000=05012000=
|
|
INTEGER 28980000=05012000=
|
|
ERRNUM; 28985000=05012000=
|
|
BEGIN 28990000=05013000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%28992000
|
|
COMMENT WRITERROR IS THE STREAM PROCEDURE WHICH ACTUALLY PRODUCES 28995000=05014000=
|
|
THE ERROR MESSAGE ON THE PRINTER; 29000000=05015000=
|
|
PROCEDURE WRITERROR( 29005000=05016000=
|
|
RMT, ERRNUM, ACCUM, AX, LINE, COUNT, LSTSEQ, QX); 29010000=05016000=
|
|
VALUE 29015000=05017000=
|
|
RMT, ERRNUM, AX, COUNT, QX; 29020000=05017000=
|
|
BOOLEAN 29020100
|
|
RMT; 29020200
|
|
REAL 29020300
|
|
ERRNUM, AX, COUNT, QX; 29020400
|
|
ARRAY 29020500
|
|
ACCUM, LINE, LSTSEQ[0]; 29020600
|
|
BEGIN 29030000=05018000=
|
|
STREAMLOCALS; 29030050
|
|
LABEL 29030100
|
|
JUMPOUT; 29030200
|
|
29030300
|
|
TALLY:= 0; 29030400
|
|
STREAMSETDI(LINE, 0); 29035000=05019000=
|
|
STREAMSMEARLIT(11*8, 6" "); % BLANK LINE 29040000=05019000=
|
|
STREAMSETSI(LSTSEQ, QX); 29045000=05020000=
|
|
STREAMSKIPSI(-8); 29050000=05020000=
|
|
STREAMTRANSFERWDS(1); 29055000=05020000=
|
|
STREAMTRANSFERLIT(8, 6" <<<<"); 29060000=05021000=
|
|
STREAMTRANSFERLIT(8, 6"<<<<<<<<"); 29060100
|
|
STREAMTRANSFERLIT(8, 6"<<<<<<<<"); % SET FLAG 29060200
|
|
STREAMSETSI(LSTSEQ, QX); 29065000=05023000=
|
|
STREAMSETDI(LSTSEQ, QX); 29070000=05023000=
|
|
STREAMSKIPDI(-8); 29075000=05023000=
|
|
STREAMTRANSFERWDS(1); 29080000=05023000=
|
|
STREAMSETDI(LINE, 0); 29085000=05024000=
|
|
IF RMT THEN 29100000=05024100=
|
|
BEGIN 29105000=05024200=
|
|
STREAMSETSI(LSTSEQ, QX); 29110000=05024200=
|
|
STREAMTRANSFERLIT(8, 6"NEAR LIN"); 29115000=05024200=
|
|
STREAMTRANSFERLIT(2, 6"E "); 29115100
|
|
THRU 7 DO 29120000=05024400=
|
|
BEGIN 29120100
|
|
IF STREAMSCGTR(6"0") THEN 29120200
|
|
GO JUMPOUT; 29120300
|
|
29120400
|
|
STREAMSKIPSI(+1); 29120500
|
|
STREAMINCTALLY(+1); 29120600
|
|
END; 29120700
|
|
29120800
|
|
JUMPOUT: 29120900
|
|
RMT:= BOOLEAN(TALLY); 29125000=05024500=
|
|
STREAMTRANSFERCHR(8); 29130000=05024500=
|
|
STREAMSKIPDI(-REAL(RMT)); 29135000=05024500=
|
|
END 29140000=05024600=
|
|
ELSE 29145000=05024600=
|
|
STREAMSKIPDI(+7); 29150000=05024600=
|
|
29150100
|
|
STREAMTRANSFERLIT(8, 6" ERROR N"); 29155000=05025000=
|
|
STREAMTRANSFERLIT(6, 6"UMBER "); 29155100
|
|
STREAMSETLOCSI(ERRNUM); 29160000=05026000=
|
|
STREAMTRANSFERDEC(3); COMMENT CONVERT ERRNUM; 29165000=05026000=
|
|
STREAMTRANSFERLIT(4, 6" -- "); 29175000=05027000=
|
|
STREAMSETSI(ACCUM, AX); 29180000=05028000=
|
|
STREAMSKIPSI(+3); 29185000=05028000=
|
|
STREAMTRANSFERCHR(COUNT); 29190000=05028000=
|
|
COMMENT PLACE ALPHA IN BUFFER; 29195000=05029000=
|
|
STREAMSMEARLIT(1, 6".") 29200000=05031000=
|
|
END WRITERROR; 29205000=05031000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29206000
|
|
IF ERRORTOG THEN % DO NOTHING IF WE SUPPRESS MSSGS. 29210000=05032000=
|
|
BEGIN 29215000=05033000=
|
|
SPECTOG:= FALSE; 29220000=05034000=
|
|
ERRORCOUNT:= ERRORCOUNT+1; COMMENT COUNT ERRORS; 29225000=05035000=
|
|
IF NOT (LISTER) THEN 29235000=05036000=
|
|
BEGIN 29240000=05037000=
|
|
EDITLINE(LIN, SBUFF, FCR, 6" ", 0, 0, MEDIUM, FALSE); 29245000=05038000=
|
|
MOVE(1, INFO[LASTSEQROW,*], LASTSEQUENCE, LIN, 12); 29250000=05039000=
|
|
IF NOHEADING THEN 29255000=05039500=
|
|
DATIME; 29260000=05039500=
|
|
WRITELINE; 29265000=05039500=
|
|
END; 29270000=05041000=
|
|
COMMENT PRINT CARDIMAGE IF WE ARE NOT LISTING; 29275000=05042000=
|
|
ACCUM[1]:= Q; COMMENT RESTORE ACCUMULATOR; 29280000=05043000=
|
|
WRITERROR(FALSE, ERRNUM, ACCUM, 1, LIN, Q.[35:6], 29290000=05045000=
|
|
INFO[LASTSEQROW,*], LASTSEQUENCE); 29295000=05045000=
|
|
IF NOT NOHEADING THEN 29310000=05046000=
|
|
BEGIN 29315000=05046000=
|
|
WRITE(LINE); 29320000=05046000=
|
|
WRITELINE; 29325000=05046000=
|
|
END; 29330000=05046000=
|
|
ERRORTOG:= FALSE; COMMENT INHIBIT MESSAGES; 29335000=05047000=
|
|
END 29415000=05101000=
|
|
END FLAG; 29420000=05101000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29425000=05101000=
|
|
LABEL 29430000=05101100=
|
|
ENDOFITALL; 29435000=05101100=
|
|
29440000=05102000=
|
|
COMMENT ERR,IS THE SAME AS FLAG EXCEPT THAT IT MAKES AN ATTEMPT TO 29445000=05102000=
|
|
RECOVER FROM ERROR SITUATIONS BY SEARCHING FOR A 29450000=05103000=
|
|
SEMICOLON, END, OR BEGIN; 29455000=05104000=
|
|
PROCEDURE ERR(ERRNUM); 29460000=05105000=
|
|
VALUE 29465000=05105000=
|
|
ERRNUM; 29470000=05105000=
|
|
INTEGER 29475000=05105000=
|
|
ERRNUM; 29480000=05105000=
|
|
BEGIN 29485000=05106000=
|
|
FLAG(ERRNUM); 29490000=05106000=
|
|
I:= I-1; 29495000=05107000=
|
|
IF ERRNUM = 200 THEN 29500000=05107100=
|
|
GO TO ENDOFITALL; 29505000=05107100=
|
|
IF ERRNUM = 611 THEN 29510000=05107200=
|
|
GO TO ENDOFITALL; %ERRMAX EXCEEDED. 29515000=05107200=
|
|
DO 29520000=05108000=
|
|
IF STEPI = BEGINV THEN 29525000=05108000=
|
|
STMT 29530000=05109000=
|
|
UNTIL ELCLASS = ENDV OR ELCLASS = SEMICOLON 29535000=05109000=
|
|
END ERR; 29540000=05109000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29545000=05109000=
|
|
DEFINE 29550000=05110000=
|
|
ERROR = ERR #; 29555000=05110000=
|
|
COMMENT ERROR IS A SYNONM FOR ERR; 29560000=05110000=
|
|
29565000=05111000=
|
|
COMMENT CHECKER IS A SMALL PROCEDURE THAT CHECKS TO SEE THAT THE 29570000=05111000=
|
|
UPLEVEL ADDRESSING CONVENTIONS ARE OBEYED; 29575000=05112000=
|
|
PROCEDURE CHECKER(ELBATWORD); 29580000=05113000=
|
|
VALUE 29585000=05113000=
|
|
ELBATWORD; 29590000=05113000=
|
|
REAL 29595000=05113000=
|
|
ELBATWORD; 29600000=05113000=
|
|
BEGIN 29605000=05114000=
|
|
IF MODE >= 2 THEN 29610000=05115000=
|
|
IF GT1:= ELBATWORD.LVL >= FRSTLEVEL THEN 29615000=05116000=
|
|
IF GT1 < SUBLEVEL THEN 29620000=05117000=
|
|
IF ELBATWORD.[38:2] ^= 1 THEN 29625000=05119000=
|
|
BEGIN 29630000=05119000=
|
|
FLAG(101); 29635000=05119000=
|
|
ERRORTOG:= TRUE 29640000=05119000=
|
|
END 29645000=05120000=
|
|
END CHECKER; 29650000=05120000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29655000=05120000=
|
|
COMMENT GIT IS USED TO OBTAIN THE INDEX TO ADDITIONAL INFORMATION 29660000=05121000=
|
|
GIVEN THE LINK TO THE ELBAT WORD; 29665000=05122000=
|
|
INTEGER PROCEDURE GIT(L); 29670000=05123000=
|
|
VALUE 29675000=05123000=
|
|
L; 29680000=05123000=
|
|
REAL 29685000=05123000=
|
|
L; 29690000=05123000=
|
|
GIT:= TAKE(L).INCR+L.LINK; 29695000=05124000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29700000=05124000=
|
|
29705000=05125000=
|
|
COMMENT GNAT IS USED TO OBTAIN THE PRT ADDRESS OF A GIVEN DESCRIPTOR. 29710000=05125000=
|
|
IF THE ADDRESS HAS NOT BEEN ASSIGNED, THEN IT USES 29715000=05126000=
|
|
GETSPACE TO OBTAIN THE PRT ADDRESS; 29720000=05127000=
|
|
INTEGER PROCEDURE GNAT(L); 29725000=05128000=
|
|
VALUE 29730000=05128000=
|
|
L; 29735000=05128000=
|
|
REAL 29740000=05128000=
|
|
L; 29745000=05128000=
|
|
BEGIN 29750000=05129000=
|
|
REAL 29755000=05130000=
|
|
A; 29760000=05130000=
|
|
IF GNAT:= (A:= TAKE(L)).ADDRESS = 0 THEN 29765000=05132000=
|
|
PUT(A & (GNAT:= GETSPACE(TRUE, L.LINK+1))[31:10:11], L) 29770000=05133000=
|
|
END GNAT; 29775000=05133000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29780000=05133000=
|
|
29785000=05134000=
|
|
COMMENT PASSFILE COMPILES CODE THAT BRINGS TO TOP OF STACK A DESCRIPTOR29790000=05134000=
|
|
POINTING AT THE I/O DESCRIPTOR (ON TOP). IT HANDLES 29795000=05135000=
|
|
SUPERFILES AS WELL AS ORDINARY FILES; 29800000=05136000=
|
|
PROCEDURE PASSFILE; 29805000=05137000=
|
|
BEGIN 29810000=05138000=
|
|
INTEGER 29815000=05138000=
|
|
ADDRES; 29820000=05138000=
|
|
CHECKER(ELBAT[I]); 29825000=05139000=
|
|
ADDRES:= ELBAT[I].ADDRESS; 29830000=05140000=
|
|
IF ELCLASS = SUPERFILEID THEN 29835000=05142000=
|
|
BEGIN 29840000=05142000=
|
|
BANA; 29845000=05143000=
|
|
EMITN(ADDRES); 29850000=05143000=
|
|
EMITO(LOD) 29855000=05143000=
|
|
END 29860000=05144000=
|
|
ELSE 29865000=05144000=
|
|
BEGIN 29870000=05144000=
|
|
IF NOT BOOLEAN(ELBAT[I].FORMAL) THEN 29875000=05145000=
|
|
EMITL(5); 29880000=05145000=
|
|
STEPIT; 29885000=05146000=
|
|
EMITN(ADDRES) 29890000=05147000=
|
|
END 29895000=05147000=
|
|
END PASSFILE; 29900000=05147000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29905000=05147000=
|
|
PROCEDURE PASSMONFILE(ADDRESS); 29910000=05148000=
|
|
VALUE 29915000=05149000=
|
|
ADDRESS; 29920000=05149000=
|
|
REAL 29925000=05150000=
|
|
ADDRESS; 29930000=05150000=
|
|
BEGIN 29935000=05151000=
|
|
COMMENT PASSMONFILE GENERATES CODE TO PASS THE MONITOR 29940000=05151000=
|
|
FILE TO PRINTI; 29945000=05152000=
|
|
IF ADDRESS < 768 OR ADDRESS > 1023 THEN 29950000=05154000=
|
|
EMITL(5); 29955000=05154000=
|
|
EMITN(ADDRESS); 29960000=05155000=
|
|
END PASSMONFILE; 29965000=05156000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29970000=05156000=
|
|
PROCEDURE PASFILE; 29975000=05157000=
|
|
BEGIN 29980000=05158000=
|
|
COMMENT PASFILE PASSES THE LAST THREE PARAMETERS TO KEN 29985000=05158000=
|
|
MEYERS FOR THE LOCK, CLOSE, AND REWIND STATEMENTS; 29990000=05159000=
|
|
DEFINE 29995000=05160000=
|
|
ELBATWORD = RR1 #; 30000000=05160000=
|
|
COMMENT ELBATWORD CONTAINS THE 30005000=05160000=
|
|
ELBATWORD FOR THE FILE BEING 30010000=05161000=
|
|
OPERATED ON; 30015000=05162000=
|
|
DEFINE 30020000=05163000=
|
|
LTEMP = RR2 #; 30025000=05163000=
|
|
COMMENT LTEMP IS USED TO HOLD THE L 30030000=05163000=
|
|
REGISTER SETTING FOR THE SAVE OR 30035000=05164000=
|
|
RELEASE LITERAL THAT GETS PASSED TO 30040000=05165000=
|
|
KEN MYERS; 30045000=05166000=
|
|
EMITO(MKS); 30050000=05167000=
|
|
L:= (LTEMP:= L)+1; 30055000=05167000=
|
|
EMITL(0); 30060000=05167000=
|
|
EMITL(2); 30065000=05168000=
|
|
CHECKER(ELBATWORD:= ELBAT[I]); 30070000=05168000=
|
|
IF RRB1:= (RRB2:= ELCLASS = SUPERFILEID) OR 30075000=05171000=
|
|
BOOLEAN(ELBATWORD.FORMAL) 30080000=05171000=
|
|
THEN 30085000=05171000=
|
|
EMITO(LNG); 30090000=05171000=
|
|
IF RRB2 THEN 30095000=05173000=
|
|
BANA 30100000=05174000=
|
|
ELSE 30105000=05174000=
|
|
STEPIT; 30110000=05174000=
|
|
EMITN(ELBATWORD.ADDRESS); 30115000=05175000=
|
|
IF RRB2 THEN 30120000=05177000=
|
|
EMITO(LOD); 30125000=05177000=
|
|
IF RRB1 THEN 30130000=05179000=
|
|
EMITO(INX); 30135000=05179000=
|
|
EMITL(4); 30140000=05180000=
|
|
EMITV(14); 30145000=05180000=
|
|
END PASFILE; 30150000=05181000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30155000=05181000=
|
|
30160000=05182000=
|
|
COMMENT CHECKPRESENCE CAUSES THE CORRECT CODE TO BE GENERATED TO CAUSE30165000=05182000=
|
|
PRESENCE BIT INTERRUPTS ON I/O DESCRIPTORS; 30170000=05183000=
|
|
PROCEDURE CHECKPRESENCE; 30175000=05184000=
|
|
BEGIN 30180000=05185000=
|
|
EMITO(DUP); 30185000=05186000=
|
|
EMITO(LOD); 30190000=05186000=
|
|
EMITL(0); 30195000=05186000=
|
|
EMITO(CDC); 30200000=05186000=
|
|
EMITO(DEL); 30205000=05186000=
|
|
END CHECKPRESENCE; 30210000=05187000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30215000=05187000=
|
|
30220000=05187500=
|
|
COMMENT PROCEDURE PASSLIST WILL BRING THE LIST PROGRAM DESCRIPTOR 30225000=05187500=
|
|
TO TOP OF STACK FOR A SUBSCRIPTED LIST ID OR SIMPLE ID; 30230000=05187510=
|
|
PROCEDURE PASSLIST; 30235000=05187520=
|
|
BEGIN 30240000=05187530=
|
|
INTEGER 30245000=05187540=
|
|
LISTADDRESS; 30250000=05187540=
|
|
30255000=05187550=
|
|
COMMENT PASSLIST ASSUMES I IS POINTING AT LIST ID; 30260000=05187550=
|
|
CHECKER(ELBAT[I]); 30265000=05187560=
|
|
LISTADDRESS:= ELBAT[I].ADDRESS; 30270000=05187570=
|
|
IF ELCLASS = SUPERLISTID THEN % SUBSCRIPTED LIST ID. 30275000=05187580=
|
|
BEGIN 30280000=05187590=
|
|
BANA; 30285000=05187600=
|
|
EMITN(LISTADDRESS); 30290000=05187600=
|
|
EMITO(LOD); 30295000=05187600=
|
|
END 30300000=05187620=
|
|
ELSE 30305000=05187620=
|
|
BEGIN 30310000=05187620=
|
|
EMITL(LISTADDRESS); 30315000=05187620=
|
|
STEPIT 30320000=05187620=
|
|
END; 30325000=05187620=
|
|
END OF PASSLIST; 30330000=05187630=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30335000=05187630=
|
|
REAL PROCEDURE TAKEFRST; 30340000=05188000=
|
|
TAKEFRST:= TAKE(ELBAT[I].LINK+ELBAT[I].INCR); 30345000=05189000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30350000=05189000=
|
|
30355000=05196000=
|
|
COMMENT STUFFF DIALS THE F-REGISTER INTO THE F-REGISTER FIELD OF A 30360000=05196000=
|
|
DESCRIPTOR. THE DESCRIPTOR REMAINS ON THE TOP OF THE 30365000=05197000=
|
|
STACK; 30370000=05198000=
|
|
PROCEDURE STUFFF(ADDRESS); 30375000=05199000=
|
|
VALUE 30380000=05199000=
|
|
ADDRESS; 30385000=05199000=
|
|
INTEGER 30390000=05199000=
|
|
ADDRESS; 30395000=05199000=
|
|
BEGIN 30400000=05200000=
|
|
EMITPAIR(ADDRESS, LOD); 30405000=05201000=
|
|
EMITN(512); 30410000=05202000=
|
|
EMITD(33, 18, 15) 30415000=05203000=
|
|
END STUFFF; 30420000=05203000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30425000=05203000=
|
|
30430000=05204000=
|
|
COMMENT LOCAL IS USED TO SEE WHETHER OR NOT A LABEL IS LOCAL TO OUR 30435000=05204000=
|
|
PRESENT CODE; 30440000=05205000=
|
|
BOOLEAN PROCEDURE LOCAL(ELBATWORD); 30445000=05206000=
|
|
VALUE 30450000=05207000=
|
|
ELBATWORD; 30455000=05207000=
|
|
REAL 30460000=05207000=
|
|
ELBATWORD; 30465000=05207000=
|
|
BEGIN 30470000=05208000=
|
|
IF ELBATWORD.LVL = LEVEL AND NOT BOOLEAN(ELBATWORD.FORMAL) THEN 30475000=05209000=
|
|
LOCAL:= TRUE 30480000=05210000=
|
|
END LOCAL; 30485000=05210000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30490000=05210000=
|
|
30495000=05211000=
|
|
COMMENT PASSFORMAT COMPILES CODE THAT PASSES A FORMAT. TWO ITEMS ARE 30500000=05211000=
|
|
PASSED - THE ARRAY REFERENCING FORMAT TABLE AND THE 30505000=05212000=
|
|
STARTING INDEX. THE ROUTINE HANDLES SUPERFORMATS ALSO; 30510000=05213000=
|
|
PROCEDURE PASSFORMAT; 30515000=05214000=
|
|
BEGIN 30520000=05215000=
|
|
INTEGER 30525000=05215000=
|
|
ADRES; 30530000=05215000=
|
|
CHECKER(ELBAT[I]); 30535000=05216000=
|
|
ADRES:= ELBAT[I].ADDRESS; 30540000=05217000=
|
|
IF BOOLEAN(ELBAT[I].FORMAL) THEN 30545000=05219000=
|
|
BEGIN 30550000=05219000=
|
|
EMITV(ADRES); 30555000=05219000=
|
|
ADRES:= ADRES-1 30560000=05219000=
|
|
END 30565000=05220000=
|
|
ELSE 30570000=05220000=
|
|
BEGIN 30575000=05220000=
|
|
IF TABLE(I) = SUPERFRMTID THEN 30580000=05222000=
|
|
EMITL(TAKEFRST) 30585000=05222000=
|
|
ELSE 30590000=05222000=
|
|
EMITL(ELBAT[I].INCR) 30595000=05223000=
|
|
END; 30600000=05223000=
|
|
IF TABLE(I) = SUPERFRMTID THEN 30605000=05225000=
|
|
BEGIN 30610000=05225000=
|
|
BANA; 30615000=05225000=
|
|
I:= I-1; 30620000=05225000=
|
|
EMITO(SSP); 30625000=05226000=
|
|
EMITO(ADD); 30630000=05226000=
|
|
EMITV(ADRES) 30635000=05226000=
|
|
END; 30640000=05226000=
|
|
EMITPAIR(ADRES, LOD) 30645000=05227000=
|
|
END PASSFORMAT; 30650000=05227000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30655000=05227000=
|
|
30660000=05228000=
|
|
COMMENT STREAMWORDS EITHER RESERVES OR UNRESERVES STREAM RESERVED 30665000=05228000=
|
|
WORDS - IT COMPLEMENTS THEIR STATE; 30670000=05229000=
|
|
PROCEDURE STREAMWORDS; 30675000=05230000=
|
|
BEGIN 30680000=05231000=
|
|
GT1:= 0; 30685000=05231000=
|
|
DO BEGIN 30690000=05232000=
|
|
INFO[1, GT1].LINK:= 30695000=05233000=
|
|
STACKHEAD[GT2:= (T:= INFO[1, GT1]).ADDRESS]; 30700000=05233000=
|
|
STACKHEAD[GT2]:= T.LINK; 30705000=05234000=
|
|
GT1:= GT1+2; 30710000=05235000=
|
|
END 30715000=05236000=
|
|
UNTIL BOOLEAN(T.FORMAL) 30720000=05236000=
|
|
END STREAMWORDS; 30725000=05236000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30730000=05236000=
|
|
PROCEDURE DEBUGDESC(LIN, PRT, TYP, RELAD, SGNO); 30735000=05237000=
|
|
VALUE 30740000=05237500=
|
|
PRT, TYP, RELAD, SGNO; 30745000=05237500=
|
|
ARRAY 30745100
|
|
LIN[0]; 30745200
|
|
REAL 30745300
|
|
PRT, TYP, RELAD, SGNO; 30745400
|
|
BEGIN 30765000=05238000=
|
|
STREAMLOCALS; 30765100
|
|
REAL 30770000=05238000=
|
|
COUNT; 30770100
|
|
LABEL 30770200
|
|
JUMPOUT; 30770300
|
|
30770400
|
|
STREAMSETDI(LIN, 0); 30775000=05238500=
|
|
STREAMTRANSFERLIT(6, 6" PRT("); 30780000=05238500=
|
|
STREAMSETLOCSI(PRT); 30785000=05238500=
|
|
STREAMSKIPSI(+4); 30790000=05238500=
|
|
TALLY:= 4; 30795000=05238500=
|
|
THRU 3 DO 30800000=05239000=
|
|
BEGIN 30800100
|
|
IF STREAMSCEQL(6"0") THEN % DONT PRINT LEADING ZEROES. 30800200
|
|
BEGIN 30805000=05239500=
|
|
STREAMSKIPSI(+1); 30805100
|
|
STREAMINCTALLY(+63); % SUBTRACT 1 FROM TALLY 30805200
|
|
END 30810000=05239500=
|
|
ELSE 30810100
|
|
GO JUMPOUT 30810200
|
|
END; 30810300
|
|
30810400
|
|
JUMPOUT: 30810500
|
|
COUNT:= TALLY; 30820000=05240000=
|
|
STREAMTRANSFERCHR(COUNT); 30825000=05240000=
|
|
STREAMTRANSFERLIT(8, 6") = SEGM"); 30830000=05240500=
|
|
STREAMTRANSFERLIT(8, 6"ENT DESC"); 30830100
|
|
STREAMTRANSFERLIT(8, 6"RIPTOR, "); 30830200
|
|
STREAMTRANSFERLIT(7, 6"TYPE = "); 30830300
|
|
STREAMSETLOCSI(TYP); 30835000=05241000=
|
|
STREAMSKIPSI(+7); 30840000=05241000=
|
|
STREAMTRANSFERCHR(1); % TYPE. 30845000=05241000=
|
|
STREAMTRANSFERLIT(8, 6", RELATI"); 30850000=05241500=
|
|
STREAMTRANSFERLIT(8, 6"VE ADDRE"); 30850100
|
|
STREAMTRANSFERLIT(5, 6"SS = "); 30850200
|
|
STREAMSETLOCSI(RELAD); 30855000=05242000=
|
|
STREAMSKIPSI(+4); 30860000=05242000=
|
|
STREAMTRANSFERCHR(4); % REL. ADDR. 30865000=05242000=
|
|
STREAMTRANSFERLIT(8, 6", SEGMEN"); 30870000=05242500=
|
|
STREAMTRANSFERLIT(8, 6"T NUMBER"); 30870100
|
|
STREAMTRANSFERLIT(3, 6" = "); 30870200
|
|
STREAMSETLOCSI(SGNO); 30875000=05243000=
|
|
STREAMSKIPSI(+4); 30880000=05243000=
|
|
STREAMTRANSFERCHR(4); 30885000=05243000=
|
|
STREAMSMEARLIT(1, 6"."); 30890000=05243000=
|
|
END DEBUGDESC; 30895000=05243500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%30896000
|
|
REAL PROCEDURE PROGDESCBLDR(TYPE, RELAD, SPAC); 30900000=05245000=
|
|
COMMENT THIS PROCEDURE BUILDS PDPRT AS DESCRIBED ABOVE, IT IS 30905000=05246000=
|
|
CONCERNED WITH TYPE 1 ENTRIES.THE INFORMATION FURNISHED 30910000=05247000=
|
|
BY PDPRT ALLOWS A DRUM DESCRIPTOR TO BE BUILT FOR EACH 30915000=05248000=
|
|
SEGMENT AND A PSEUDO PROGRAM DESCRIPTOR TO BE BUILT INTO 30920000=05249000=
|
|
THE OBJECT TIME PRT. THE 3 PARAMETERS FUNCTION AS FOLLOWS: 30925000=05250000=
|
|
TYPE --- THIS 2 BIT QUANTITY FURNISHES THE MODE30930000=05251000=
|
|
AND ARGUMENT BIT FOR THE PROGRAM 30935000=05252000=
|
|
DESCRIPTOR TO BE BUILT. 30940000=05253000=
|
|
RELAD --- RELATIVE WORD ADDRESS WITHIN SEGMENT 30945000=05254000=
|
|
SPAC --- IF=0 THEN A SPACE MUST BE OBTAINED 30950000=05255000=
|
|
IF^=0 THEN SPACE IS ALREADY GOTTEN 30955000=05256000=
|
|
ALL PROGRAM DESCRIPTORS REQUIRE A PERMANENT SPACE IN PRT. 30960000=05257000=
|
|
PDINX IS THE INDEX FOR PDPRT.IT IS GLOBAL AND 0 INITIALLY; 30965000=05258000=
|
|
VALUE 30970000=05259000=
|
|
TYPE, 30975000=05259000=
|
|
RELAD, 30980000=05259000=
|
|
SPAC; 30985000=05259000=
|
|
REAL 30990000=05259000=
|
|
TYPE, 30995000=05259000=
|
|
RELAD, 31000000=05259000=
|
|
SPAC; 31005000=05259000=
|
|
BEGIN 31010000=05260000=
|
|
IF SPAC = 0 THEN 31015000=05260000=
|
|
SPAC:= GETSPACE(TRUE, -2); % DESCR. 31020000=05260000=
|
|
PDPRT[PDINX.[10:5], PDINX.[5:6]]:= 0 & RELAD[29:11:10] & 31025000=05262000=
|
|
SGNO[19:9:10] & TYPE[43:1:2] & SPAC[39:9:10]; 31030000=05262000=
|
|
IF DEBUGTOG THEN 31035000=05263000=
|
|
BEGIN 31040000=05263500=
|
|
BLANKET(14, LIN); 31045000=05264000=
|
|
DEBUGDESC(LIN, B2D(SPAC), TYPE, B2D(RELAD), B2D(SGNO)); 31050000=05264500=
|
|
IF NOHEADING THEN 31055000=05265000=
|
|
DATIME; 31060000=05265000=
|
|
WRITELINE; 31065000=05265000=
|
|
END; 31070000=05265100=
|
|
PDINX:= PDINX+1; 31075000=05266000=
|
|
PROGDESCBLDR:= SPAC 31080000=05266000=
|
|
END PROGDESCBLDR; 31085000=05266000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31090000=05266000=
|
|
31095000=05267000=
|
|
COMMENT DOTSYNTAX ANALYSES THE SYNTAX OF A PARTIAL WORD DESIGNATOR. 31100000=05267000=
|
|
IT REPORTS IF AN ERROR IS FOUND. IT RETURNS WITH THE 31105000=05268000=
|
|
LITERALS INVOLVED; 31110000=05269000=
|
|
BOOLEAN PROCEDURE DOTSYNTAX(FIRST, SECOND); 31115000=05270000=
|
|
INTEGER 31120000=05271000=
|
|
FIRST, 31125000=05271000=
|
|
SECOND; 31130000=05271000=
|
|
BEGIN 31135000=05272000=
|
|
LABEL 31140000=05273000=
|
|
EXIT; 31145000=05273000=
|
|
IF STEPI = FIELDID THEN % GET INFO FROM INFO 31150000=05273100=
|
|
BEGIN 31155000=05273200=
|
|
FIRST:= ELBAT[I].SBITF; 31160000=05273300=
|
|
SECOND:= ELBAT[I].NBITF; 31165000=05273400=
|
|
GO TO EXIT; 31170000=05273500=
|
|
END 31175000=05273800=
|
|
ELSE 31180000=05273800=
|
|
IF ELCLASS = LFTBRKET THEN 31185000=05273800=
|
|
IF STEPI = FIELDID THEN 31190000=05273900=
|
|
BEGIN 31195000=05274000=
|
|
FIRST:= ELBAT[I].SBITF; 31200000=05274100=
|
|
SECOND:= ELBAT[I].NBITF; 31205000=05274200=
|
|
IF STEPI = RTBRKET THEN 31210000=05274300=
|
|
GO TO EXIT; 31215000=05274400=
|
|
END 31220000=05275000=
|
|
ELSE 31225000=05275000=
|
|
IF ELCLASS = LITNO THEN 31230000=05275000=
|
|
IF STEPI = COLON THEN 31235000=05276000=
|
|
IF STEPI = LITNO THEN 31240000=05277000=
|
|
IF STEPI = RTBRKET THEN 31245000=05278000=
|
|
COMMENT IF TESTS ARE PASSED THEN SYNTAX IS CORRECT; 31250000=05279000=
|
|
IF(FIRST:= ELBAT[I-3].ADDRESS)* 31255000=05281000=
|
|
(SECOND:= ELBAT[I-1].ADDRESS) ^= 0 31260000=05281000=
|
|
THEN 31265000=05281000=
|
|
IF FIRST+SECOND <= 48 THEN 31270000=05282000=
|
|
COMMENT IF TESTS ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 31275000=05283000=
|
|
GO TO EXIT; 31280000=05284000=
|
|
ERR(114); 31285000=05285000=
|
|
COMMENT ERROR IF SYNTAX OR RANGE FAILS; 31290000=05285000=
|
|
DOTSYNTAX:= TRUE; 31295000=05286000=
|
|
EXIT: 31300000=05286000=
|
|
END DOTSYNTAX; 31305000=05286000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31310000=05286000=
|
|
BOOLEAN PROCEDURE CHECK(ELBATCLASS, ERRORNUMBER); 31315000=05287000=
|
|
VALUE 31320000=05288000=
|
|
ELBATCLASS, 31325000=05288000=
|
|
ERRORNUMBER; 31330000=05288000=
|
|
REAL 31335000=05289000=
|
|
ELBATCLASS, 31340000=05289000=
|
|
ERRORNUMBER; 31345000=05289000=
|
|
BEGIN 31350000=05290000=
|
|
COMMENT CHECK COMPARES ELBATCLASS WITH TABLE(I). IF THEY 31355000=05290000=
|
|
ARE NOT EQUAL, CHECK IS SET TRUE AND THE ERROR ROUTINE IS 31360000=05291000=
|
|
CALLED PASSING ERRORNUMBER. IF THEY ARE EQUAL CHECK IS SET31365000=05292000=
|
|
FALSE; 31370000=05293000=
|
|
IF CHECK:= (ELBATCLASS ^= TABLE(I)) THEN 31375000=05295000=
|
|
ERR(ERRORNUMBER); 31380000=05295000=
|
|
END; 31385000=05296000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31390000=05296000=
|
|
BOOLEAN PROCEDURE RANGE(LOWER, UPPER); 31395000=05297000=
|
|
VALUE 31400000=05298000=
|
|
LOWER, 31405000=05298000=
|
|
UPPER; 31410000=05298000=
|
|
REAL 31415000=05299000=
|
|
LOWER, 31420000=05299000=
|
|
UPPER; 31425000=05299000=
|
|
COMMENT RANGE TESTS THE CLASS OF THE ITEM IN ELBAT[I] TO SEE IF 31430000=05300000=
|
|
IT IS GREATER THAN OR EQUAL TO LOWER OR LESS THAN OR EQUAL TO 31435000=05301000=
|
|
UPPER AND SETS RANGE TO TRUE OR FALSE ACCORDINGLY. THE ITEMS 31440000=05302000=
|
|
CLASS MUST BE IN ELCLASS; 31445000=05303000=
|
|
RANGE:= ELCLASS >= LOWER AND ELCLASS <= UPPER; 31450000=05304000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31455000=05304000=
|
|
31460000=05305000=
|
|
COMMENT GET OBTAINS A SYLLABLE FROM EDOC, THE ARRAY INTO WHICH CODE IS 31465000=05305000=
|
|
EMITTED; 31470000=05306000=
|
|
INTEGER PROCEDURE GET(L); 31475000=05307000=
|
|
VALUE 31480000=05307000=
|
|
L; 31485000=05307000=
|
|
REAL 31490000=05307000=
|
|
L; 31495000=05307000=
|
|
BEGIN 31500000=05308000=
|
|
GET:= EDOC[L.[11:3], L.[8:7]].[47-(L.[1:2]*12):12]; 31565000=05312000=
|
|
END GET; 31570000=05312000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31575000=05312000=
|
|
31580000=05313000=
|
|
COMMENT CALL SWITCH PERFORMS THE FINAL MESS OF GETTING A PROPER DE- 31585000=05313000=
|
|
SCRIPTOR TO THE TOP OF THE STACK; 31590000=05314000=
|
|
PROCEDURE CALLSWITCH(H); 31595000=05315000=
|
|
VALUE 31600000=05315000=
|
|
H; 31605000=05315000=
|
|
REAL 31610000=05315000=
|
|
H; 31615000=05315000=
|
|
BEGIN 31620000=05316000=
|
|
EMITV(GNAT(H)); 31625000=05316000=
|
|
EMITO(PRTE); 31630000=05316000=
|
|
EMITO(LOD) 31635000=05316000=
|
|
END CALLSWITCH; 31640000=05316000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31645000=05316000=
|
|
REAL PROCEDURE GETALPHA(INFOINDEX, IX, SIZE); 31650000=05317000=
|
|
VALUE 31660000=05318000=
|
|
IX, SIZE; 31665000=05318000=
|
|
ARRAY 31665100
|
|
INFOINDEX[0]; 31665200
|
|
REAL 31665300
|
|
IX, SIZE; 31665400
|
|
BEGIN 31670000=05319000=
|
|
COMMENT GETALPHA PICKS ALPHA CHARACTERS OUT OF INFO AND 31675000=05319000=
|
|
FORMATS THE ID WORD THAT IS PASSED TO PRINTI. THE FIRST 31680000=05320000=
|
|
CHARACTER CONTAINS THE SIZE. THE NEXT CHARACTER CONTAINS THE 31685000=05321000=
|
|
ALPHA LEFT JUSTIFIED WITH TRAILING ZEROS; 31690000=05322000=
|
|
STREAMLOCALS; 31690100
|
|
STREAMSETDI(STREAMTEMPD, 0); 31695000=05323000=
|
|
STREAMTRANSFERLIT(8, 6"0 "); 31700000=05323000=
|
|
STREAMSKIPDI(-7); 31705000=05323000=
|
|
STREAMSETSI(INFOINDEX, IX); 31710000=05324000=
|
|
STREAMSKIPSI(+3); 31715000=05324000=
|
|
STREAMTRANSFERCHR(SIZE); 31720000=05324000=
|
|
GETALPHA:= STREAMTEMPD[0]; 31724000
|
|
END GETALPHA; 31725000=05325000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31726000
|
|
PROCEDURE WRITEPRT(PORS, N, GS); 31730000=05325010=
|
|
VALUE 31735000=05325010=
|
|
PORS, 31740000=05325010=
|
|
N, 31745000=05325010=
|
|
GS; 31750000=05325010=
|
|
INTEGER 31755000=05325010=
|
|
PORS, 31760000=05325010=
|
|
N, 31765000=05325010=
|
|
GS; 31770000=05325010=
|
|
BEGIN 31775000=05325020=
|
|
LABEL 31780000=05325030=
|
|
EXIT; 31785000=05325030=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%31786000
|
|
PROCEDURE FILLIT(LIN, PORS, CELL, N, ID, IDX); 31790000=05325040=
|
|
VALUE 31795000=05325050=
|
|
PORS, CELL, N, IDX; 31800000=05325050=
|
|
ARRAY 31800100
|
|
LIN, ID[0]; 31800200
|
|
REAL PORS, CELL, N, IDX; 31800300
|
|
BEGIN 31815000=05325060=
|
|
STREAMLOCALS; 31815100
|
|
REAL 31820000=05325070=
|
|
COUNT; 31820100
|
|
LABEL 31825000=05325080=
|
|
M0, 31830000=05325080=
|
|
M1, 31835000=05325080=
|
|
M2, 31840000=05325080=
|
|
M3, 31845000=05325080=
|
|
M4, 31850000=05325080=
|
|
M5, 31855000=05325080=
|
|
M6, 31860000=05325080=
|
|
M7, 31865000=05325080=
|
|
XIT, 31870000=05325080=
|
|
JUMPOUT; 31871000=05325080=
|
|
31871100
|
|
STREAMSETLOCSI(PORS); 31875000=05325090=
|
|
STREAMSKIPSI(+3); 31880000=05325090=
|
|
STREAMSETDI(LIN, 0); % "PRT" OR "STACK". 31885000=05325090=
|
|
IF STREAMSCEQL(6"P") THEN 31890000=05325100=
|
|
BEGIN 31895000=05325110=
|
|
STREAMTRANSFERCHR(3); 31900000=05325110=
|
|
STREAMSMEARLIT(1, 6"("); 31905000=05325110=
|
|
END 31910000=05325120=
|
|
ELSE 31915000=05325120=
|
|
BEGIN 31920000=05325120=
|
|
STREAMTRANSFERCHR(5); 31925000=05325130=
|
|
STREAMSMEARLIT(1, 6"("); 31930000=05325130=
|
|
STREAMSETLOCSI(CELL); 31935000=05325130=
|
|
STREAMSKIPSI(+5); 31940000=05325130=
|
|
IF STREAMSCGEQ(6"6") THEN 31945000=05325140=
|
|
STREAMTRANSFERLIT(2, 6"F-") 31950000=05325140=
|
|
ELSE 31955000=05325140=
|
|
STREAMTRANSFERLIT(2, 6"F+"); 31960000=05325140=
|
|
31960100
|
|
COUNT:= STREAMGETDI; 31965000=05325150=
|
|
STREAMSETLOCDI(CELL); 31970000=05325150=
|
|
STREAMSKIPDI(+4); 31975000=05325150=
|
|
STREAMSETDB(11, 0); 31980000=05325160=
|
|
CELL:= STREAMTEMPD[0]; 31980100
|
|
STREAMSETDI(LIN, COUNT); 31985000=05325160=
|
|
END; 31990000=05325170=
|
|
31990100
|
|
STREAMSETLOCSI(CELL); 31995000=05325180=
|
|
STREAMSKIPSI(+4); 32000000=05325180=
|
|
TALLY:= 4; % LOCATION. 32005000=05325180=
|
|
THRU 3 DO 32010000=05325190=
|
|
BEGIN 32010100
|
|
IF STREAMSCEQL(6"0") THEN % DONT PRINT LEADING ZEROES. 32010200
|
|
BEGIN 32015000=05325200=
|
|
STREAMSKIPSI(+1); 32015100
|
|
STREAMINCTALLY(+63); % DECREMENT TALLY 32015200
|
|
END 32020000=05325200=
|
|
ELSE 32020100
|
|
GO JUMPOUT 32025000=05325200=
|
|
END; 32025100
|
|
32025200
|
|
JUMPOUT: 32025300
|
|
COUNT:= TALLY; 32030000=05325210=
|
|
STREAMTRANSFERCHR(COUNT); 32035000=05325210=
|
|
TALLY:= 0; 32040000=05325210=
|
|
COUNT:= TALLY; 32045000=05325210=
|
|
STREAMTRANSFERLIT(4, 6") = "); 32050000=05325220=
|
|
CELL:= STREAMGETDI; % SAVE OUR PLACE. 32055000=05325220=
|
|
GO TO CASE N OF ( 32060000=05325230=
|
|
M0, 32065000=05325240=
|
|
M1, 32070000=05325250=
|
|
M2, 32075000=05325260=
|
|
M3, 32080000=05325270=
|
|
M4, 32085000=05325280=
|
|
M5, 32090000=05325290=
|
|
M6, 32095000=05325300=
|
|
M7); 32100000=05325310=
|
|
M0: STREAMSETSI(ID, IDX); 32105000=05325320=
|
|
STREAMSKIPSI(+2); 32110000=05325320=
|
|
STREAMSETLOCDI(COUNT); 32115000=05325320=
|
|
STREAMSKIPDI(+7); 32120000=05325330=
|
|
STREAMTRANSFERCHR(1); 32125000=05325330=
|
|
COUNT:= STREAMTEMPD[0]; 32125100
|
|
STREAMSETDI(LIN, CELL); 32130000=05325330=
|
|
STREAMTRANSFERCHR(COUNT); 32135000=05325330=
|
|
GO XIT; 32140000=05325340=
|
|
M1: STREAMSETDI(LIN, CELL); 32140100=05325330=
|
|
STREAMTRANSFERLIT(8, 6"*TEMPORA"); 32150000=05325350=
|
|
STREAMTRANSFERLIT(8, 6"RY STORA"); 32150100
|
|
STREAMTRANSFERLIT(3, 6"GE*"); 32150200
|
|
GO XIT; 32155000=05325350=
|
|
M2: STREAMSETDI(LIN, CELL); 32155100=05325330=
|
|
STREAMTRANSFERLIT(8, 6"*LIST, L"); 32165000=05325370=
|
|
STREAMTRANSFERLIT(8, 6"ABEL, OR"); 32165100
|
|
STREAMTRANSFERLIT(8, 6" SEGMENT"); 32165200
|
|
STREAMTRANSFERLIT(8, 6" DESCRIP"); 32165300
|
|
STREAMTRANSFERLIT(4, 6"TOR*"); 32165400
|
|
GO XIT; 32170000=05325370=
|
|
M3: STREAMSETDI(LIN, CELL); 32170100=05325330=
|
|
STREAMTRANSFERLIT(8, 6"*CASE ST"); 32180000=05325380=
|
|
STREAMTRANSFERLIT(8, 6"ATEMENT "); 32180100
|
|
STREAMTRANSFERLIT(8, 6"DESCRIPT"); 32180200
|
|
STREAMTRANSFERLIT(3, 6"OR*"); 32180300
|
|
GO XIT; 32185000=05325380=
|
|
M4: STREAMSETDI(LIN, CELL); 32185100=05325330=
|
|
STREAMTRANSFERLIT(8, 6"*FORMAT "); 32195000=05325390=
|
|
STREAMTRANSFERLIT(8, 6"DESCRIPT"); 32195100
|
|
STREAMTRANSFERLIT(3, 6"OR*"); 32195200
|
|
GO XIT; 32200000=05325390=
|
|
M5: STREAMSETDI(LIN, CELL); 32200100=05325330=
|
|
STREAMTRANSFERLIT(8, 6"*OUTER B"); 32210000=05325400=
|
|
STREAMTRANSFERLIT(8, 6"LOCK DES"); 32210100
|
|
STREAMTRANSFERLIT(8, 6"CRIPTOR*"); 32210200
|
|
GO XIT; 32215000=05325400=
|
|
M6: STREAMSETDI(LIN, CELL); 32215100=05325330=
|
|
STREAMTRANSFERLIT(8, 6"*SEGMENT"); 32225000=05325410=
|
|
STREAMTRANSFERLIT(8, 6" DESCRIP"); 32225100
|
|
STREAMTRANSFERLIT(4, 6"TOR*"); 32225200
|
|
GO XIT; 32230000=05325410=
|
|
M7: STREAMSETDI(LIN, CELL); 32230100=05325330=
|
|
STREAMTRANSFERLIT(8, 6"*LABEL D"); 32240000=05325420=
|
|
STREAMTRANSFERLIT(8, 6"ESCRIPTO"); 32240100
|
|
STREAMTRANSFERLIT(2, 6"R*"); 32240200
|
|
XIT: 32245000=05325440=
|
|
END FILLIT; 32250000=05325440=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32252000
|
|
BLANKET(14, LIN); 32255000=05325450=
|
|
IF N = 1 THEN 32260000=05325460=
|
|
FILLIT(LIN, PORS, GS, 0, ACCUM, 1) 32265000=05325470=
|
|
ELSE 32270000=05325470=
|
|
IF N > 1 THEN 32275000=05325470=
|
|
FILLIT(LIN, PORS, GS, 0, INFO[N.LINKR,*], N.LINKC) 32280000=05325480=
|
|
ELSE 32285000=05325480=
|
|
FILLIT(LIN, PORS, GS, ABS(N), EBCDICBUFF, -1); % ID NOT USED 32290000=05325480=
|
|
IF NOHEADING THEN 32295000=05325490=
|
|
DATIME; 32300000=05325490=
|
|
WRITELINE; 32305000=05325490=
|
|
END WRITEPRT; 32310000=05325500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32315000=05325500=
|
|
32320000=05326000=
|
|
COMMENT GETSPACE MAKES ASSIGNMENTS TO VARIABLES AND DESCRIPTORS IN 32325000=05326000=
|
|
THE STACK AND PRT. PERMANENT TELLS WHETHER IT IS A 32330000=05327000=
|
|
PERMANENTLY ASSIGNED CELL (ALWAYS IN PRT) OR NOT. NON 32335000=05328000=
|
|
PERMANENT CELLS ARE EITHER IN STACK OR PRT ACCORDING TO 32340000=05329000=
|
|
MODE. CARE IS TAKEN TO REUSE NON PERMANENT PRT CELLS; 32345000=05330000=
|
|
INTEGER PROCEDURE GETSPACE(PERMANENT, L); 32350000=05331000=
|
|
VALUE 32355000=05331000=
|
|
PERMANENT, 32360000=05331000=
|
|
L; 32365000=05331000=
|
|
BOOLEAN 32370000=05333000=
|
|
PERMANENT; 32375000=05333000=
|
|
INTEGER 32380000=05333000=
|
|
L; 32385000=05333000=
|
|
BEGIN 32390000=05334000=
|
|
LABEL 32395000=05334000=
|
|
L1, 32400000=05334000=
|
|
L2, 32405000=05334000=
|
|
EXIT; 32410000=05334000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32415000=05341000=
|
|
DEFINE MASK(K) = 32420000=05341000=
|
|
BOOLEAN(0 & (1)[35-ABS(K):1]) #; 32435000=05342000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32462000
|
|
BOOLEAN 32465000=05343000=
|
|
M, 32470000=05343000=
|
|
Q; 32475000=05343000=
|
|
INTEGER 32480000=05344000=
|
|
ROW, 32485000=05344000=
|
|
COL, 32490000=05344000=
|
|
GS; 32495000=05344000=
|
|
IF PERMANENT THEN 32500000=05346000=
|
|
BEGIN 32505000=05346000=
|
|
IF PRTIMAX > 1022 THEN 32510000=05347000=
|
|
FLAG(148); % 32515000=05347000=
|
|
SPRT[GS:= PRTIMAX.[9:5]]:= MASK(PRTIMAX.[4:5]-35) OR SPRT[GS]; 32520000=05349000=
|
|
PRTIMAX:= (GS:= PRTIMAX)+1 32525000=05350000=
|
|
END 32530000=05351000=
|
|
ELSE 32535000=05351000=
|
|
IF MODE = 0 THEN 32540000=05351000=
|
|
BEGIN 32545000=05351000=
|
|
Q:= SPRT[ROW:= PRTI.[9:5]]; 32550000=05352000=
|
|
M:= MASK(COL:= PRTI.[4:5]-35); 32555000=05353000=
|
|
COL:= COL+35; 32560000=05354000=
|
|
L1: IF REAL(M AND Q) ^= 0 THEN 32565000=05356000=
|
|
BEGIN 32570000=05356000=
|
|
IF REAL(BOOLEAN(GS:= 4294967296-REAL(M)) AND Q) = GS THEN 32575000=05358000=
|
|
BEGIN 32580000=05358000=
|
|
COL:= 0; 32585000=05359000=
|
|
M:= TRUE; 32590000=05359000=
|
|
IF ROW:= ROW+1 > 31 THEN 32595000=05361000=
|
|
BEGIN 32600000=05361000=
|
|
FLAG(148); 32605000=05361000=
|
|
GS:= PRTIMAX; 32610000=05361000=
|
|
GO TO L2 32615000=05362000=
|
|
END; 32620000=05362000=
|
|
Q:= SPRT[ROW]; 32625000=05363000=
|
|
GO TO L1 32630000=05364000=
|
|
END; 32635000=05364000=
|
|
COL:= COL+1; 32640000=05365000=
|
|
M:= BOOLEAN(REAL(M)+REAL(M)); 32645000=05365000=
|
|
GO TO L1 32650000=05366000=
|
|
END; 32655000=05366000=
|
|
PRTI:= (GS:= 32*ROW+COL)+1; 32660000=05367000=
|
|
IF PRTI > PRTIMAX THEN 32665000=05368000=
|
|
PRTIMAX:= PRTI 32670000=05369000=
|
|
END 32675000=05369000=
|
|
ELSE 32680000=05369000=
|
|
BEGIN 32685000=05369000=
|
|
IF STACKCTR > 767 THEN 32690000=05370000=
|
|
FLAG(149); 32695000=05370000=
|
|
STACKCTR:= (GS:= STACKCTR)+1; 32700000=05371000=
|
|
Q:= FALSE; 32705000=05371000=
|
|
GO TO EXIT 32710000=05372000=
|
|
END; 32715000=05372000=
|
|
L2: IF GS >= 512 THEN 32720000=05373000=
|
|
GS:= GS+1024; 32725000=05373000=
|
|
Q:= TRUE; 32730000=05374000=
|
|
EXIT: 32735000=05375000=
|
|
GETSPACE:= GS; 32740000=05375000=
|
|
IF GS > 1023 THEN 32745000=05376000=
|
|
GS:= GS-1024; 32750000=05376000=
|
|
IF PRTOG THEN 32755000=05376100=
|
|
WRITEPRT(IF Q THEN 6"PRT " ELSE 6"STACK", L, B2D(GS)); 32760000=05376100=
|
|
END GETSPACE; 32765000=05378000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32770000=05378000=
|
|
COMMENT ARRAYCHECK CHECKS A PARAMTER-INFO WORD FOR SORT/MERGE; 32775000=05379000=
|
|
BOOLEAN PROCEDURE ARRAYCHECK(AAW); 32780000=05380000=
|
|
VALUE 32785000=05380000=
|
|
AAW; 32790000=05380000=
|
|
REAL 32795000=05380000=
|
|
AAW; 32800000=05380000=
|
|
ARRAYCHECK:= AAW.CLASS < BOOARRAYID OR AAW.CLASS > INTARRAYID OR AAW32805000=05382000=
|
|
.INCR ^= 1; 32810000=05382000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32815000=05382000=
|
|
COMMENT COMMACHECK LOOKS FOR COMMAS AND STEPS AROUND THEM; 32820000=05383000=
|
|
BOOLEAN PROCEDURE COMMACHECK; 32825000=05384000=
|
|
BEGIN 32830000=05385000=
|
|
IF NOT (COMMACHECK:= (STEPI = COMMA)) THEN 32835000=05385000=
|
|
ERR(350); 32840000=05385000=
|
|
STEPIT 32845000=05387000=
|
|
END COMMACHECK; 32850000=05387000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32855000=05387000=
|
|
COMMENT HVCHECK CHECKS VALIDITY OF HIVALU PROCEDURE FOR SORT; 32860000=05388000=
|
|
BOOLEAN PROCEDURE HVCHECK(ELBW); 32865000=05389000=
|
|
VALUE 32870000=05389000=
|
|
ELBW; 32875000=05389000=
|
|
REAL 32880000=05389000=
|
|
ELBW; 32885000=05389000=
|
|
IF ELBW.CLASS ^= PROCID THEN 32890000=05390000=
|
|
ERR(356) 32895000=05390000=
|
|
ELSE 32900000=05390000=
|
|
IF BOOLEAN(ELBW.FORMAL) THEN 32905000=05390100=
|
|
HVCHECK:= TRUE 32910000=05390100=
|
|
ELSE 32915000=05390100=
|
|
IF TAKE(GT1:= GIT(ELBW)) ^= 1 THEN ERR(357) 32920000=05391000=
|
|
ELSE 32925000=05391000=
|
|
IF ARRAYCHECK(TAKE(GT1+1)) THEN 32930000=05392000=
|
|
ERR(358) 32935000=05392000=
|
|
ELSE 32940000=05392000=
|
|
HVCHECK:= TRUE; 32945000=05393000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32950000=05393000=
|
|
COMMENT OUTPROCHECK CHECKS SORT/MERGE OUTPUT PROCEDURE; 32955000=05394000=
|
|
BOOLEAN PROCEDURE OUTPROCHECK(ELBW); 32960000=05395000=
|
|
VALUE 32965000=05395000=
|
|
ELBW; 32970000=05395000=
|
|
REAL 32975000=05395000=
|
|
ELBW; 32980000=05395000=
|
|
IF ELBW.CLASS ^= PROCID THEN 32985000=05396000=
|
|
ERR(351) 32990000=05396000=
|
|
ELSE 32995000=05396000=
|
|
IF BOOLEAN(ELBW.FORMAL) THEN 33000000=05396100=
|
|
OUTPROCHECK:= TRUE 33005000=05396100=
|
|
ELSE 33010000=05396100=
|
|
IF TAKE(GT1:= GIT(ELBW)) ^= 2 THEN 33015000=05397000=
|
|
ERR(352) 33020000=05397000=
|
|
ELSE 33025000=05397000=
|
|
IF TAKE(GT1:= 1).CLASS ^= BOOID THEN 33030000=05398000=
|
|
ERR(353) 33035000=05398000=
|
|
ELSE 33040000=05398000=
|
|
IF ARRAYCHECK(TAKE(GT1+2)) THEN 33045000=05399000=
|
|
ERR(354) 33050000=05399000=
|
|
ELSE 33055000=05399000=
|
|
OUTPROCHECK:= TRUE; 33060000=05400000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33065000=05400000=
|
|
COMMENT EQLESCHECK CHECKS THE COMPARE ROUTINE FOR SORT/MERGE; 33070000=05401000=
|
|
BOOLEAN PROCEDURE EQLESCHECK(ELBW); 33075000=05402000=
|
|
VALUE 33080000=05402000=
|
|
ELBW; 33085000=05402000=
|
|
REAL 33090000=05402000=
|
|
ELBW; 33095000=05402000=
|
|
IF ELBW.CLASS ^= BOOPROCID THEN 33100000=05403000=
|
|
ERR(359) 33105000=05403000=
|
|
ELSE 33110000=05403000=
|
|
IF BOOLEAN(ELBW.FORMAL) THEN 33115000=05403100=
|
|
EQLESCHECK:= TRUE 33120000=05403100=
|
|
ELSE 33125000=05403100=
|
|
IF TAKE(GT1:= GIT(ELBW)) ^= 2 THEN 33130000=05404000=
|
|
ERR(360) 33135000=05404000=
|
|
ELSE 33140000=05404000=
|
|
IF ARRAYCHECK(TAKE(GT1+1)) THEN 33145000=05405000=
|
|
ERR(361) 33150000=05405000=
|
|
ELSE 33155000=05405000=
|
|
IF ARRAYCHECK(TAKE(GT1+2)) THEN 33160000=05406000=
|
|
ERR(362) 33165000=05406000=
|
|
ELSE 33170000=05406000=
|
|
EQLESCHECK:= TRUE; 33175000=05407000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33180000=05407000=
|
|
33185000=06000000=
|
|
COMMENT ROUTINES IN THIS SECTION COMPILE CODE FOR ALL EXPRESSIONS;33190000=06000000=
|
|
33195000=06001000=
|
|
COMMENT AEXP IS THE ARITHMETIC EXRESSION ROUTINE; 33200000=06001000=
|
|
PROCEDURE AEXP; 33205000=06002000=
|
|
BEGIN 33210000=06003000=
|
|
IF ELCLASS = IFV THEN 33215000=06005000=
|
|
BEGIN 33220000=06005000=
|
|
IF IFEXP ^= ATYPE THEN 33225000=06005000=
|
|
ERR(102) 33230000=06006000=
|
|
END 33235000=06006000=
|
|
ELSE 33240000=06006000=
|
|
BEGIN 33245000=06006000=
|
|
ARITHSEC; 33250000=06006000=
|
|
SIMPARITH 33255000=06006000=
|
|
END 33260000=06007000=
|
|
END AEXP; 33265000=06007000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33270000=06007000=
|
|
33275000=06008000=
|
|
COMMENT ARITHSEC COMPILES FIRST PRIMARY IN AN ARITHMETIC EXPRESSION. 33280000=06008000=
|
|
IN PARTICULAR IT HANDLES P, +P, -P, AND -P*Q WHERE P 33285000=06009000=
|
|
AND Q ARE PRIMARIES; 33290000=06010000=
|
|
PROCEDURE ARITHSEC; 33295000=06011000=
|
|
BEGIN 33300000=06012000=
|
|
IF ELCLASS = ADOP THEN 33305000=06014000=
|
|
BEGIN 33310000=06014000=
|
|
STEPIT; 33315000=06015000=
|
|
IF ELBAT[I-1].ADDRESS = ADD THEN 33320000=06016000=
|
|
PRIMARY 33325000=06017000=
|
|
ELSE 33330000=06017000=
|
|
BEGIN 33335000=06017000=
|
|
PRIMARY; 33340000=06018000=
|
|
WHILE ELCLASS = FACTOP DO 33345000=06019000=
|
|
BEGIN 33350000=06020000=
|
|
STEPIT; 33355000=06020000=
|
|
PRIMARY; 33360000=06020000=
|
|
EMITUP 33365000=06020000=
|
|
END; 33370000=06020000=
|
|
ENDTOG:= LINKTOG; 33375000=06021000=
|
|
EMITO(CHS); 33380000=06021000=
|
|
LINKTOG:= ENDTOG; 33385000=06022000=
|
|
ENDTOG:= FALSE 33390000=06022000=
|
|
END 33395000=06023000=
|
|
END 33400000=06023000=
|
|
ELSE 33405000=06023000=
|
|
PRIMARY 33410000=06023000=
|
|
END ARITHSEC; 33415000=06023000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33420000=06023000=
|
|
33425000=06024000=
|
|
COMMENT SIMPARITH COMPILES SIMPLE ARITHMETIC EXPRESSIONS ON THE 33430000=06024000=
|
|
ASSUMPTION THAT AN ARITHMETIC PRIMARY HAS ALREADY BEEN 33435000=06025000=
|
|
COMPILED. IT ALSO HANDLES THE CASE OF A CONCATENATE 33440000=06026000=
|
|
WHERE ACTUALPARAPART CAUSED THE VARIABLE ROUTINE TO 33445000=06027000=
|
|
COMPILE ONLY PART OF A PRIMARY. MOST OF THE WORK OF 33450000=06028000=
|
|
SIMPARITH IS DONE BY ARITHCOMP, AN ARTIFIAL ROUTINE 33455000=06029000=
|
|
WHICH DOES THE HIERARCHY ANALYSIS USING RECURSION. 33460000=06030000=
|
|
ARITHCOMP IS A SUBROUTINE ONLY TO GET THIS RECURSION; 33465000=06031000=
|
|
PROCEDURE SIMPARITH; 33470000=06032000=
|
|
BEGIN 33475000=06033000=
|
|
WHILE ELCLASS = AMPERSAND DO 33480000=06035000=
|
|
BEGIN 33485000=06035000=
|
|
STEPIT; 33490000=06035000=
|
|
PRIMARY; 33495000=06035000=
|
|
PARSE 33500000=06035000=
|
|
END; 33505000=06035000=
|
|
WHILE ELCLASS >= ADOP AND ELCLASS <= FACTOP DO 33510000=06036000=
|
|
ARITHCOMP 33515000=06036000=
|
|
END; 33520000=06036000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33525000=06036000=
|
|
33530000=06037000=
|
|
COMMENT ARITHCOMP IS THE GUTS OF THE ARITHMETIC EXPRESSION ROUTINE 33535000=06037000=
|
|
ANALYSIS. IT CALLS PRIMARY AT APPROPRIATE TIMES AND 33540000=06038000=
|
|
EMITS THE ARITHMETIC OPERATORS. THE HIERARCHY ANALYSIS 33545000=06039000=
|
|
IS OBTAINED BY RECURSION; 33550000=06040000=
|
|
PROCEDURE ARITHCOMP; 33555000=06041000=
|
|
BEGIN 33560000=06042000=
|
|
INTEGER 33565000=06042000=
|
|
OPERATOR, 33570000=06042000=
|
|
OPCLASS; 33575000=06042000=
|
|
DO BEGIN 33580000=06043000=
|
|
OPERATOR:= 1 & ELBAT[I][11:30:10]; 33585000=06044000=
|
|
COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 33590000=06045000=
|
|
ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [30:10] 33595000=06046000=
|
|
OF THE ELBAT WORD; 33600000=06047000=
|
|
OPCLASS:= ELCLASS; 33605000=06048000=
|
|
STEPIT; 33610000=06049000=
|
|
PRIMARY; 33615000=06049000=
|
|
IF OPCLASS = FACTOP THEN 33620000=06050000=
|
|
EMITUP 33625000=06051000=
|
|
ELSE 33630000=06051000=
|
|
BEGIN 33635000=06051000=
|
|
WHILE OPCLASS < ELCLASS DO 33640000=06052000=
|
|
ARITHCOMP; 33645000=06052000=
|
|
COMMENT THE CLASSES ARE ARRANGED IN ORDER OF HIERARCHY; 33650000=06053000=
|
|
STACKCT:= 1; 33655000=06053500=
|
|
EMIT(OPERATOR) 33660000=06054000=
|
|
END 33665000=06055000=
|
|
END 33670000=06055000=
|
|
UNTIL OPCLASS ^= ELCLASS 33675000=06055000=
|
|
END ARITHCOMP; 33680000=06055000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%33685000=06055000=
|
|
33690000=06056000=
|
|
COMMENT IMPFUN HANDLES ALL OF THE SPECIAL FUNCTIONS; 33695000=06056000=
|
|
PROCEDURE IMPFUN; 33700000=06057000=
|
|
BEGIN 33705000=06058000=
|
|
REAL 33710000=06059000=
|
|
TVAR, % FOR VARIABLE() NAME PARAM 33711000
|
|
T1, 33715000=06059000=
|
|
T2, 33720000
|
|
T3; 33725000
|
|
BOOLEAN 33730000=06059050=
|
|
B; 33735000=06059050=
|
|
DEFINE 33740000=06059100=
|
|
ERRX(ERRX1) = BEGIN 33745000=06059100=
|
|
T1:= ERRX1; 33750000=06059100=
|
|
GO ERROR 33755000=06059100=
|
|
END #; 33760000=06059100=
|
|
LABEL 33765000=06060000=
|
|
ABS, 33770000=06060000=
|
|
SIGN, 33775000=06060000=
|
|
ENTIER, 33780000=06060000=
|
|
TIME, 33785000=06060000=
|
|
STATUS, 33790000=06060000=
|
|
% 33795000=06060000=
|
|
MAXANDMIN, 33800000=06060100=
|
|
DELAY, 33805000=06060100=
|
|
OTHERS, 33810000=06060100=
|
|
EXIT; % 33815000=06060100=
|
|
LABEL 33820000=06060110=
|
|
ERROR, 33825000=06060110=
|
|
L1, 33830000=06060110=
|
|
L2, 33835000=06060110=
|
|
L3; 33840000=06060110=
|
|
SWITCH 33845000=06061000=
|
|
S:= OTHERS, 33850000=06061000=
|
|
ABS, 33855000=06061000=
|
|
SIGN, 33860000=06061000=
|
|
ENTIER, 33865000=06061000=
|
|
TIME, 33870000=06061000=
|
|
STATUS, 33875000=06061000=
|
|
% 33880000=06061000=
|
|
MAXANDMIN, 33885000=06061100=
|
|
MAXANDMIN, 33890000=06061100=
|
|
DELAY; % 33895000=06061100=
|
|
DEFINE 33900000=06061200=
|
|
MAXV = 6 #; % 33905000=06061200=
|
|
IF T2:= (T1:= ELBAT[I]).[20:6] < 9 THEN 33910000=06062000=
|
|
GO S[T2+1]; 33915000=06062000=
|
|
IF T2 ^= 25 THEN 33920000=06062110=
|
|
EMITO(MKS); 33925000=06062110=
|
|
IF STEPI ^= LEFTPAREN THEN 33930000=06062120=
|
|
ERRX(105); 33935000=06062120=
|
|
STEPIT; 33940000=06062120=
|
|
IF T2 < 24 THEN 33945000=06062125=
|
|
BEGIN 33950000=06062130=
|
|
L3: IF TABLE(I+1) = COMMA THEN 33955000=06062135=
|
|
IF ELCLASS > BOOID AND ELCLASS < BOOARRAYID THEN 33960000=06062140=
|
|
BEGIN 33965000=06062145=
|
|
CHECKER(T3:= ELBAT[I]); 33970000=06062150=
|
|
STEPIT; 33975000=06062150=
|
|
STEPIT; 33980000=06062150=
|
|
AEXP; 33985000=06062155=
|
|
EMITV(T3.ADDRESS); 33990000=06062155=
|
|
GO L1; 33995000=06062155=
|
|
END; 34000000=06062160=
|
|
L2: AEXP; 34005000=06062165=
|
|
IF ELCLASS ^= COMMA THEN 34010000=06062165=
|
|
ERRX(80); 34015000=06062165=
|
|
STEPIT; 34020000=06062165=
|
|
AEXP; 34025000=06062170=
|
|
IF T2 < 24 THEN 34030000=06062170=
|
|
EMITO(XCH); 34035000=06062170=
|
|
END 34040000=06062180=
|
|
ELSE 34045000=06062180=
|
|
BEGIN 34050000=06062180=
|
|
IF T2 = 24 THEN 34055000=06062185=
|
|
GO L2; 34060000=06062185=
|
|
EMITL(0); 34065000=06062185=
|
|
AEXP; 34070000=06062185=
|
|
IF ELCLASS ^= COMMA THEN 34075000=06062190=
|
|
ERRX(80); 34080000=06062190=
|
|
EMITPAIR(9, SND); 34085000=06062190=
|
|
EMITD(1, 1, 8); 34090000=06062195=
|
|
STEPIT; 34095000=06062195=
|
|
AEXP; 34100000=06062195=
|
|
END; 34105000=06062200=
|
|
L1: IF T2 < 23 THEN 34110000=06062210=
|
|
BEGIN 34115000=06062210=
|
|
IF ELCLASS ^= COMMA THEN 34120000=06062210=
|
|
ERRX(80) 34125000=06062220=
|
|
END 34130000=06062220=
|
|
ELSE 34135000=06062220=
|
|
IF ELCLASS ^= RTPAREN THEN 34140000=06062220=
|
|
ERRX(104); 34145000=06062220=
|
|
STEPIT; 34150000=06062230=
|
|
IF T2 < 21 OR B THEN 34155000=06062280=
|
|
BEGIN 34160000=06062285=
|
|
EMITV(GNAT(T1)); 34165000=06062285=
|
|
B:= ELCLASS = INTID OR ELCLASS = INTARRAYID OR ELCLASS = INTPROCID34170000=06062295=
|
|
; 34175000=06062295=
|
|
IF ELCLASS >= REALID AND ELCLASS <= INTID THEN 34180000=06062340=
|
|
BEGIN 34185000=06062350=
|
|
EMITN(ELBAT[I].ADDRESS); 34190000=06062350=
|
|
STEPIT 34195000=06062350=
|
|
END 34200000=06062370=
|
|
ELSE 34205000=06062370=
|
|
IF ELCLASS < BOOID AND ELCLASS > BOOPROCID THEN 34210000=06062370=
|
|
IF ELBAT[I].LINK ^= PROINFO.LINK THEN 34215000=06062380=
|
|
FLAG(211) 34220000=06062385=
|
|
ELSE 34225000=06062385=
|
|
BEGIN 34230000=06062385=
|
|
EMITL(514); 34235000=06062385=
|
|
STEPIT 34240000=06062385=
|
|
END 34245000=06062390=
|
|
ELSE 34250000=06062390=
|
|
IF ELCLASS < LABELID AND ELCLASS > BOOARRAYID THEN 34255000=06062400=
|
|
BEGIN 34256000
|
|
TVAR:= FL; 34257000
|
|
VARIABLE(TVAR); 34260000
|
|
END 34261000
|
|
ELSE 34265000=06062420=
|
|
ERRX(185); 34270000=06062420=
|
|
IF ELCLASS ^= RTPAREN THEN 34275000=06062430=
|
|
ERRX(104); 34280000=06062430=
|
|
STEPIT; 34285000=06062430=
|
|
EMITO(IF B THEN ISD ELSE STD); 34290000=06062435=
|
|
EMITV(17); 34295000=06062435=
|
|
GO EXIT; 34300000=06062435=
|
|
END; 34305000=06062440=
|
|
IF T2 < 23 THEN 34310000=06062470=
|
|
BEGIN % DMOD, DARCTAN2 34315000=06062480=
|
|
B:= TRUE; 34320000=06062500=
|
|
GO L3; 34325000=06062500=
|
|
END; 34330000=06062535=
|
|
IF T2 < 25 THEN 34335000=06062540=
|
|
BEGIN 34340000=06062540=
|
|
EMITV(GNAT(T1)); 34345000=06062540=
|
|
GO EXIT 34350000=06062540=
|
|
END; 34355000=06062540=
|
|
EMITD(9, 47, 1); 34360000=06062560=
|
|
EMITV(9); 34365000=06062560=
|
|
EMITO(ADD); 34370000=06062560=
|
|
GO EXIT; 34375000=06062560=
|
|
ERROR: 34380000=06062565=
|
|
ERR(T1); 34385000=06062565=
|
|
GO EXIT; 34390000=06062565=
|
|
OTHERS: 34395000=06064000=
|
|
EMITO(MKS); 34400000=06064000=
|
|
PANA; 34405000=06065000=
|
|
EMITV(GNAT(T1)); 34410000=06066000=
|
|
GO TO EXIT; 34415000=06066000=
|
|
ABS: 34420000=06067000=
|
|
PANA; 34425000=06067000=
|
|
EMITO(SSP); 34430000=06067000=
|
|
GO TO EXIT; 34435000=06067000=
|
|
SIGN: 34440000=06068000=
|
|
PANA; 34445000=06068000=
|
|
EMITO(DUP); 34450000=06069000=
|
|
EMITL(0); 34455000=06069000=
|
|
EMITO(NEQ); 34460000=06069000=
|
|
EMITO(XCH); 34465000=06069000=
|
|
EMITD(1, 1, 1); 34470000=06070000=
|
|
GO TO EXIT; 34475000=06070000=
|
|
ENTIER: 34480000=06071000=
|
|
PANA; 34485000=06071000=
|
|
EMITNUM(.5); 34490000=06071000=
|
|
EMITO(SUB); 34495000=06071000=
|
|
EMITPAIR(JUNK, ISN); 34500000=06072000=
|
|
GO TO EXIT; 34505000=06072000=
|
|
MAXANDMIN: 34510000=06072010=
|
|
% 34515000=06072010=
|
|
IF STEPI ^= LEFTPAREN THEN 34520000=06072030=
|
|
ERR(105) 34525000=06072030=
|
|
ELSE % 34530000=06072030=
|
|
BEGIN 34535000=06072040=
|
|
STEPIT; 34540000=06072040=
|
|
AEXP; % 34545000=06072040=
|
|
WHILE ELCLASS = COMMA DO % 34550000=06072050=
|
|
BEGIN 34555000=06072060=
|
|
STEPIT; 34560000=06072060=
|
|
EMITO(DUP); 34565000=06072060=
|
|
AEXP; % 34570000=06072060=
|
|
EMITPAIR(JUNK, SND); % 34575000=06072070=
|
|
IF T2 = MAXV THEN 34580000=06072080=
|
|
EMITO(LSS) 34585000=06072080=
|
|
ELSE 34590000=06072080=
|
|
EMITO(GTR); 34595000=06072080=
|
|
EMITPAIR(2, BFC); 34600000=06072090=
|
|
EMITO(DEL); 34605000=06072090=
|
|
EMITV(JUNK); 34610000=06072090=
|
|
END; % 34615000=06072100=
|
|
IF ELCLASS ^= RTPAREN THEN 34620000=06072110=
|
|
ERR(104) 34625000=06072110=
|
|
ELSE 34630000=06072110=
|
|
STEPIT; % 34635000=06072110=
|
|
END; % 34640000=06072120=
|
|
GO TO EXIT; % 34645000=06072130=
|
|
DELAY: 34650000=06072200=
|
|
IF STEPI ^= LEFTPAREN THEN % 34655000=06072200=
|
|
BEGIN 34660000=06072210=
|
|
ERR(105); 34665000=06072210=
|
|
GO TO EXIT 34670000=06072210=
|
|
END; % 34675000=06072210=
|
|
STEPIT; 34680000=06072220=
|
|
AEXP; 34685000=06072220=
|
|
IF ELCLASS ^= COMMA THEN % 34690000=06072220=
|
|
BEGIN 34695000=06072230=
|
|
ERR(165); 34700000=06072230=
|
|
GO TO EXIT 34705000=06072230=
|
|
END; % 34710000=06072230=
|
|
STEPIT; 34715000=06072240=
|
|
AEXP; 34720000=06072240=
|
|
IF ELCLASS ^= COMMA THEN % 34725000=06072240=
|
|
BEGIN 34730000=06072250=
|
|
ERR(165); 34735000=06072250=
|
|
GO TO EXIT 34740000=06072250=
|
|
END; % 34745000=06072250=
|
|
STEPIT; 34750000=06072260=
|
|
AEXP; 34755000=06072260=
|
|
IF ELCLASS ^= RTPAREN THEN % 34760000=06072260=
|
|
BEGIN 34765000=06072270=
|
|
ERR(104); 34770000=06072270=
|
|
GO TO EXIT 34775000=06072270=
|
|
END 34780000=06072270=
|
|
ELSE 34785000=06072270=
|
|
STEPIT; % 34790000=06072270=
|
|
EMITPAIR(31, COM); 34795000=06072280=
|
|
EMITO(DEL); 34800000=06072280=
|
|
EMITO(DEL); % 34805000=06072280=
|
|
GO TO EXIT; % 34810000=06072290=
|
|
TIME: 34815000=06073000=
|
|
PANA; 34820000=06073000=
|
|
EMITL(1); 34825000=06073000=
|
|
EMITO(COM); 34830000=06073000=
|
|
GO TO EXIT; 34835000=06073100=
|
|
STATUS: 34840000=06073200=
|
|
IF STEPI ^= LEFTPAREN THEN 34845000=06073200=
|
|
BEGIN 34850000=06073200=
|
|
ERR(105); 34855000=06073200=
|
|
GO TO EXIT 34860000=06073200=
|
|
END; 34865000=06073200=
|
|
IF STEPI = SUPERFILEID OR ELCLASS = FILEID THEN 34870000=06073250=
|
|
BEGIN 34875000=06073300=
|
|
EMIT(16); 34880000=06073300=
|
|
EMIT(0); 34885000=06073300=
|
|
EMIT(0); 34890000=06073300=
|
|
PASSFILE; 34895000=06073300=
|
|
EMITPAIR(32, COM); 34900000=06073350=
|
|
T1:= 3; 34905000=06073350=
|
|
END 34910000=06073400=
|
|
ELSE 34915000=06073400=
|
|
BEGIN 34920000=06073400=
|
|
EMIT(4); 34925000=06073400=
|
|
EMIT(0); 34930000=06073400=
|
|
T1:= 0; 34935000=06073400=
|
|
IF ELCLASS >= BOOARRAYID AND ELCLASS <= INTARRAYID THEN 34940000=06073450=
|
|
BEGIN 34945000=06073500=
|
|
T1:= FI; 34950000=06073500=
|
|
VARIABLE(T1); 34955000=06073500=
|
|
END 34960000=06073500=
|
|
ELSE 34965000=06073500=
|
|
AEXP; 34970000=06073500=
|
|
IF T1 = FI THEN 34975000=06073550=
|
|
BEGIN 34980000=06073600=
|
|
EMITPAIR(0, XCH); 34985000=06073600=
|
|
EMITPAIR(32, COM); 34990000=06073600=
|
|
T1:= 3 34995000=06073650=
|
|
END 35000000=06073650=
|
|
ELSE 35005000=06073650=
|
|
BEGIN 35010000=06073650=
|
|
IF ELCLASS = RTPAREN THEN 35015000=06073650=
|
|
BEGIN 35020000=06073700=
|
|
EMIT(0); 35025000=06073700=
|
|
EMITPAIR(32, COM); 35030000=06073700=
|
|
T1:= 3 35035000=06073700=
|
|
END 35040000=06073750=
|
|
ELSE 35045000=06073750=
|
|
BEGIN 35050000=06073750=
|
|
EMITO(XCH); 35055000=06073750=
|
|
EMITO(DEL); 35060000=06073750=
|
|
EMITO(XCH); 35065000=06073800=
|
|
EMITO(DEL); 35070000=06073800=
|
|
IF ELCLASS ^= COMMA THEN 35075000=06073810=
|
|
BEGIN 35080000=06073820=
|
|
ERR(129); 35085000=06073820=
|
|
GO TO EXIT 35090000=06073820=
|
|
END; 35095000=06073820=
|
|
STEPIT; 35100000=06073830=
|
|
AEXP; 35105000=06073830=
|
|
EMITPAIR(28, COM); 35110000=06073830=
|
|
T1:= 1; 35115000=06073830=
|
|
END; 35120000=06073840=
|
|
END; 35125000=06073840=
|
|
END; 35130000=06073840=
|
|
GTI1:= 0; 35135000=06073845=
|
|
DO 35140000=06073850=
|
|
EMITO(DEL) 35145000=06073850=
|
|
UNTIL GTI1:= GTI1-1 = T1; % 35150000=06073850=
|
|
IF ELCLASS ^= RTPAREN THEN 35155000=06073860=
|
|
ERR(104) 35160000=06073860=
|
|
ELSE 35165000=06073860=
|
|
STEPIT; 35170000=06073860=
|
|
GO TO EXIT; 35175000=06073870=
|
|
EXIT: 35180000=06074000=
|
|
END IMPFUN; 35185000=06074000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%35190000=06074000=
|
|
35195000=06075000=
|
|
COMMENT PRIMARY COMPILES ARITHMETIC PRIMARIES. IT HANDLES MOST CASES 35200000=06075000=
|
|
OF THE CONCATENATE AND SOME CASES OF THE PARTIAL WORD 35205000=06076000=
|
|
DESIGNATORS, ALTHOUGH VARIABLE HANDLES THE MORE COMMON 35210000=06077000=
|
|
CASES; 35215000=06078000=
|
|
PROCEDURE PRIMARY; 35220000=06079000=
|
|
BEGIN 35225000=06080000=
|
|
REAL 35226000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 35227000
|
|
LABEL 35230000=06082000=
|
|
L11, 35235000=06082000=
|
|
L12, 35240000
|
|
L13, 35245000
|
|
L14, 35250000
|
|
L15, 35255000
|
|
L16, 35260000
|
|
L17, 35265000
|
|
L18, 35270000
|
|
L19, 35275000
|
|
L20, 35280000
|
|
L21, 35285000
|
|
L22, 35290000
|
|
L23, 35295000
|
|
L24, 35300000
|
|
L25, 35305000
|
|
L26, 35310000
|
|
L27, 35315000
|
|
L28, 35320000
|
|
L29, 35325000
|
|
L30, 35330000
|
|
L31, 35335000
|
|
L32, 35340000
|
|
L33, 35345000
|
|
L34, 35350000
|
|
L35; 35355000
|
|
SWITCH 35360000=06085000=
|
|
S:= L11, 35365000=06086000=
|
|
L12, 35370000
|
|
L13, 35375000
|
|
L14, 35380000
|
|
L15, 35385000
|
|
L16, 35390000
|
|
L17, 35395000
|
|
L18, 35400000
|
|
L19, 35405000
|
|
L20, 35410000
|
|
L21, 35415000
|
|
L22, 35420000
|
|
L23, 35425000
|
|
L24, 35430000
|
|
L25, 35435000
|
|
L26, 35440000
|
|
L27, 35445000
|
|
L28, 35450000
|
|
L29, 35455000
|
|
L30, 35460000
|
|
L31, 35465000
|
|
L32, 35470000
|
|
L33, 35475000
|
|
L34, 35480000
|
|
L35; 35485000
|
|
COMMENT LN IS THE LABEL FOR THE CLASS N; 35490000=06089000=
|
|
LABEL 35495000=06090000=
|
|
EXIT, 35500000=06090000=
|
|
RP, 35505000
|
|
LDOT, 35510000
|
|
LAMPER; 35515000
|
|
GO TO S[ELCLASS-PROCID]; 35520000=06091000=
|
|
COMMENT GO TO PROPER SYNTAXER; 35525000=06091000=
|
|
IF ELCLASS = UNKNOWNID THEN 35530000=06092000=
|
|
ERR(100); 35535000=06092000=
|
|
IF ELCLASS = FILEID OR ELCLASS = SUPERFILEID THEN 35540000=06092005=
|
|
BEGIN 35545000=06092010=
|
|
IF FILEATTRIBUTEHANDLER(FP) ^= ATYPE THEN 35550000=06092015=
|
|
FLAG(294); 35555000=06092015=
|
|
GO TO LAMPER; 35560000=06092020=
|
|
END; 35565000=06092025=
|
|
L12: 35570000=06093000=
|
|
L13: 35575000=06093000=
|
|
L17: 35580000=06093000=
|
|
L21: 35585000=06093000=
|
|
L25: 35590000=06093000=
|
|
L29: 35595000=06093000=
|
|
L30: 35600000=06094000=
|
|
COMMENT NO PRIMARY MAY BEGIN WITH QUANTITIES WITH THESE CLASSES; 35605000=06094000=
|
|
35610000=06094950=
|
|
IF REL AND ELCLASS = BOOARRAYID THEN 35615000=06094950=
|
|
GO L22; 35620000=06094950=
|
|
ERR(103); 35625000=06095000=
|
|
GO TO EXIT; 35630000=06095000=
|
|
L11: 35635000=06097000=
|
|
COMMENT INTRINSIC FUNCTIONS; 35640000=06097000=
|
|
35645000=06098000=
|
|
IMPFUN; 35650000=06098000=
|
|
STACKCT:= STACKCT-1; 35655000=06098000=
|
|
GO TO LDOT; 35660000=06098000=
|
|
L14: 35665000=06099000=
|
|
L15: 35670000=06099000=
|
|
L16: 35675000=06100000=
|
|
COMMENT STREAM PROCEDURE FUNCTION DESIGNATORS; 35680000=06100000=
|
|
35685000=06100100=
|
|
IF ARRAYFLAG THEN 35690000=06100100=
|
|
CHECKBOUNDLVL; 35695000=06100100=
|
|
STRMPROCSTMT; 35700000=06101000=
|
|
GO TO LDOT; 35705000=06101000=
|
|
L18: 35710000=06102000=
|
|
L19: 35715000=06102000=
|
|
L20: 35720000=06103000=
|
|
COMMENT ORDINARY FUNCTION DESIGNATORS; 35725000=06103000=
|
|
35730000=06103100=
|
|
IF ARRAYFLAG THEN 35735000=06103100=
|
|
CHECKBOUNDLVL; 35740000=06103100=
|
|
PROCSTMT(FALSE); 35745000=06104000=
|
|
GO TO LDOT; 35750000=06104000=
|
|
L22: 35755000=06105000=
|
|
L23: 35760000=06105000=
|
|
L24: 35765000=06105000=
|
|
L26: 35770000=06105000=
|
|
L27: 35775000=06105000=
|
|
L28: 35780000=06106000=
|
|
COMMENT VARIABLES, SIMPLE AND SUBSCRIPTED; 35785000=06106000=
|
|
35790000=06106100=
|
|
IF ARRAYFLAG THEN 35795000=06106100=
|
|
CHECKBOUNDLVL; 35800000=06106100=
|
|
TVAR:= FP; 35801000
|
|
VARIABLE(TVAR); 35805000
|
|
GO TO LAMPER; 35810000=06107000=
|
|
L32: 35815000=06109000=
|
|
COMMENT LITERALS - I.E. INTEGERS BETWEEN 0 AND 1023; 35820000=06109000=
|
|
35825000=06110000=
|
|
EMIT(0 & ELBAT[I][11:30:10]); 35830000=06110000=
|
|
STEPIT; 35835000=06110000=
|
|
GO TO LAMPER; 35840000=06110000=
|
|
L31: 35845000=06111000=
|
|
L33: 35850000=06112000=
|
|
COMMENT STRINGS AND NONLITERALS; 35855000=06112000=
|
|
35860000=06113000=
|
|
EMITNUM(C); 35865000=06113000=
|
|
STEPIT; 35870000=06113000=
|
|
GO TO LAMPER; 35875000=06113000=
|
|
L35: 35880000=06115000=
|
|
COMMENT COULD BE REAL TRANSFER FUNCTION. IF IT IS COMPILE BOOLEAN35885000=06115000=
|
|
EXPRESSION - OTHERWISE AN ERROR; 35890000=06116000=
|
|
35895000=06117000=
|
|
IF ELBAT[I].ADDRESS = REALV THEN 35900000=06117000=
|
|
BEGIN 35905000=06117000=
|
|
IF STEPI ^= LEFTPAREN THEN 35910000=06119000=
|
|
BEGIN 35915000=06119000=
|
|
ERR(105); 35920000=06119000=
|
|
GO TO EXIT 35925000=06119000=
|
|
END; 35930000=06119000=
|
|
STEPIT; 35935000=06120000=
|
|
BEXP; 35940000=06120000=
|
|
GO TO RP 35945000=06120000=
|
|
END; 35950000=06120000=
|
|
IF ELBAT[I].ADDRESS = INTV THEN 35955000=06120100=
|
|
BEGIN 35960000=06120200=
|
|
PANA; 35965000=06120200=
|
|
EMITPAIR(JUNK, ISN); 35970000=06120200=
|
|
GO TO LDOT 35975000=06120200=
|
|
END; 35980000=06120200=
|
|
ERR(106); 35985000=06121000=
|
|
GO TO EXIT; 35990000=06121000=
|
|
L34: 35995000=06123000=
|
|
COMMENT (; 36000000=06123000=
|
|
36005000=06124000=
|
|
STEPIT; 36010000=06124000=
|
|
AEXP; 36015000=06124000=
|
|
STACKCT:= STACKCT-1; 36020000=06124500=
|
|
RP: IF ELCLASS ^= RTPAREN THEN 36025000=06125000=
|
|
BEGIN 36030000=06125000=
|
|
ERR(104); 36035000=06125000=
|
|
GO EXIT 36040000=06125000=
|
|
END; 36045000=06125000=
|
|
STEPIT; 36050000=06126000=
|
|
LDOT: 36055000=06127000=
|
|
DOT; 36060000=06127000=
|
|
COMMENT THIS CHECKS FOR PARTIAL WORDS; 36065000=06127000=
|
|
LAMPER: 36070000=06128000=
|
|
STACKCT:= STACKCT+1; 36075000=06128000=
|
|
WHILE ELCLASS = AMPERSAND DO 36080000=06129000=
|
|
BEGIN 36085000=06129000=
|
|
STEPIT; 36090000=06129000=
|
|
PRIMARY; 36095000=06129000=
|
|
PARSE 36100000=06129000=
|
|
END; 36105000=06129000=
|
|
COMMENT THIS CODE HANDLES CANCATENATES; 36110000=06130000=
|
|
EXIT: 36115000=06131000=
|
|
END PRIMARY; 36120000=06131000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36125000=06131000=
|
|
36130000=06132000=
|
|
COMMENT BEXP IS THE BOOLEAN EXPRESSION ROUTINE; 36135000=06132000=
|
|
PROCEDURE BEXP; 36140000=06133000=
|
|
IF EXPRSS ^= BTYPE THEN 36145000=06133000=
|
|
ERR(107); 36150000=06133000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36155000=06133000=
|
|
36160000=06134000=
|
|
COMMENT EXPRSS IS A GENERAL EXPRESSION ROUTINE CAPABLE OF COMPILING 36165000=06134000=
|
|
ANY GIVEN TYPE OF EXPRESSION. IT REPORTS ON ITS ACTION 36170000=06135000=
|
|
BY GIVING AS A RESULT EITHER ATYPE,BTYPE, OR DTYPE 36175000=06136000=
|
|
DEPENDING ON WHETHER IT COMPILED AN ARITHMETIC, BOOLEAN, 36180000=06137000=
|
|
OR DESIGNATIONAL EXPRESSION; 36185000=06138000=
|
|
INTEGER PROCEDURE EXPRSS; 36190000=06139000=
|
|
BEGIN 36195000=06140000=
|
|
IF ELCLASS = IFV THEN 36200000=06142000=
|
|
BEGIN 36205000=06142000=
|
|
IF EXPRSS:= IFEXP = ATYPE THEN 36210000=06144000=
|
|
IF ELCLASS = RELOP THEN 36215000=06144000=
|
|
ERR(108) 36220000=06145000=
|
|
END 36225000=06145000=
|
|
ELSE 36230000=06145000=
|
|
IF EXPRSS:= BOOSEC = BTYPE THEN 36235000=06145000=
|
|
SIMPBOO 36240000=06146000=
|
|
END EXPRSS; 36245000=06146000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36250000=06146000=
|
|
36255000=06147000=
|
|
COMMENT BOOSEC COMPILES EITHER A BOOLEAN SECONDARY OR AN ARITHMETIC 36260000=06147000=
|
|
EXPRESSION OR A DESIGNATIONAL EXPRESSION. IT REPORTS 36265000=06148000=
|
|
AS EXPRSS REPORTS; 36270000=06149000=
|
|
INTEGER PROCEDURE BOOSEC; 36275000=06150000=
|
|
BEGIN 36280000=06151000=
|
|
BOOLEAN 36285000=06151000=
|
|
N; 36290000=06151000=
|
|
IF N:= ELCLASS = NOTOP THEN 36295000=06152000=
|
|
STEPIT; 36300000=06152000=
|
|
GT4:= BOOSEC:= BOOPRIM; 36305000=06153000=
|
|
IF N THEN 36310000=06154000=
|
|
BEGIN 36315000=06154000=
|
|
EMITLNG; 36320000=06154000=
|
|
EMIT(0); 36325000=06154000=
|
|
L:= L-1; 36330000=06154000=
|
|
COMMENT THE LAST LINE IS PREPARATORY. LATER ROUTINES USE THE 36335000=06155000=
|
|
RESULTS HERE TO ELIMINATE PAIRS OF LNGS; 36340000=06156000=
|
|
IF GT4 ^= BTYPE THEN 36345000=06157000=
|
|
ERR(109) 36350000=06158000=
|
|
COMMENT AN ARITHMETIC OR DESIGNATIONAL EXPRESSION MAY NOT BE 36355000=06158000=
|
|
LOGICALLY NEGATED; 36360000=06159000=
|
|
END 36365000=06160000=
|
|
END BOOSEC; 36370000=06160000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36375000=06160000=
|
|
36380000=06161000=
|
|
COMMENT SIMPBOO COMPILES SIMPLE BOOLEAN EXPRESSIONS ON THE ASSUMPTION 36385000=06161000=
|
|
THAT A BOOLEAN PRIMARY HAS ALREADY BEEN COMPILED. IT 36390000=06162000=
|
|
ALSO HANDLES THE CASE OF A CONCATENATE WHERE ACTUALPARA- 36395000=06163000=
|
|
PART CAUSED THE VARIABLE ROUTINE TO COMPILE ONLY PART OF 36400000=06164000=
|
|
A PRIMARY. MOST OF THE WORK OF SIMPBOO IS DONE BY BOO- 36405000=06165000=
|
|
COMP. AN ARTIFIAL ROUTINE WHICH DOES THE HIERARCHY ANA- 36410000=06166000=
|
|
LYSIS USING RECURSION; 36415000=06167000=
|
|
PROCEDURE SIMPBOO; 36420000=06168000=
|
|
BEGIN 36425000=06169000=
|
|
WHILE ELCLASS = AMPERSAND DO 36430000=06171000=
|
|
BEGIN 36435000=06171000=
|
|
STEPIT; 36440000=06172000=
|
|
IF BOOPRIM ^= BTYPE THEN 36445000=06173000=
|
|
ERR(109); 36450000=06173000=
|
|
PARSE 36455000=06174000=
|
|
END; 36460000=06174000=
|
|
WHILE ELCLASS >= EQVOP AND ELCLASS <= ANDOP DO 36465000=06175000=
|
|
BOOCOMP 36470000=06176000=
|
|
END BOOCOMP; 36475000=06176000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36480000=06176000=
|
|
36485000=06177000=
|
|
COMMENT BOOCOMP IS THE GUTS OF THE BOOLEAN EXPRESSION ROUTINE ANALYSIS.36490000=06177000=
|
|
IT CALLS BOOSEC AT APPROPRIATE TIMES AND EMITS THE BOOLEAN36495000=06178000=
|
|
OPERATORS. THE HIERARCHY ANALYSIS IS OBTAINED BY RECUR- 36500000=06179000=
|
|
SION; 36505000=06180000=
|
|
PROCEDURE BOOCOMP; 36510000=06181000=
|
|
BEGIN 36515000=06182000=
|
|
INTEGER 36520000=06182000=
|
|
OPCLASS, 36525000=06182000=
|
|
OPERATOR; 36530000=06182000=
|
|
LABEL 36535000=06182000=
|
|
EXIT; 36540000=06182000=
|
|
DO BEGIN 36545000=06183000=
|
|
OPERATOR:= 1 & ELBAT[I][11:30:10]; 36550000=06184000=
|
|
COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 36555000=06185000=
|
|
ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [30:10] 36560000=06186000=
|
|
OF THE ELBAT WORD; 36565000=06187000=
|
|
OPCLASS:= ELCLASS; 36570000=06188000=
|
|
STEPIT; 36575000=06189000=
|
|
IF BOOSEC ^= BTYPE THEN 36580000=06191000=
|
|
BEGIN 36585000=06191000=
|
|
ERR(109); 36590000=06191000=
|
|
GO TO EXIT 36595000=06191000=
|
|
END; 36600000=06191000=
|
|
WHILE OPCLASS < ELCLASS DO 36605000=06193000=
|
|
IF ELCLASS <= ANDOP THEN 36610000=06193000=
|
|
BOOCOMP 36615000=06194000=
|
|
ELSE 36620000=06194000=
|
|
BEGIN 36625000=06194000=
|
|
ERR(110); 36630000=06194000=
|
|
GO TO EXIT 36635000=06194000=
|
|
END; 36640000=06194000=
|
|
COMMENT THE CLASSES ARE ARRANGED IN ORDER OF HIERARCHY; 36645000=06195000=
|
|
STACKCT:= 1; 36650000=06195500=
|
|
IF OPCLASS = IMPOP THEN 36655000=06197000=
|
|
BEGIN 36660000=06197000=
|
|
COMMENT SINCE IMP IS NOT IN THE MACHINE REPETOIRE WE MUST CONSTRUCT 36665000=06198000=
|
|
ONE. NOTICE THAT WE USE EMITLNG IN ONE SPOT TO OBTAIN 36670000=06199000=
|
|
THE CANCELING OF POSSIBLE MULTIBLE LNGS. ALSO THE 0 36675000=06200000=
|
|
EMITTED PROVIDES THE POSSIBILITY OF DOING THIS IN THE 36680000=06201000=
|
|
FUTURE. (SEE CODE FOR EMITLNG); 36685000=06202000=
|
|
EMITLNG; 36690000=06203000=
|
|
EMITO(LND); 36695000=06204000=
|
|
EMITO(LNG); 36700000=06205000=
|
|
EMITO(0); 36705000=06206000=
|
|
L:= L-1 36710000=06207000=
|
|
END 36715000=06208000=
|
|
ELSE 36720000=06208000=
|
|
EMIT(OPERATOR) 36725000=06209000=
|
|
END 36730000=06209000=
|
|
UNTIL OPCLASS ^= ELCLASS; 36735000=06209000=
|
|
EXIT: 36740000=06210000=
|
|
END BOOCOMP; 36745000=06210000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36750000=06210000=
|
|
36755000=06211000=
|
|
COMMENT BOOPRIM COMPILES BOOLEAN PRIMARIES, AND ARITHMETIC OR 36760000=06211000=
|
|
DESIGNATIONAL EXPRESSIONS. IT REPORTS AS EXPRSS REPORTS; 36765000=06212000=
|
|
INTEGER PROCEDURE BOOPRIM; 36770000=06213000=
|
|
BEGIN 36775000=06214000=
|
|
INTEGER 36780000=06214000=
|
|
TYPE; 36785000=06214000=
|
|
REAL 36786000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 36787000
|
|
LABEL 36790000=06215000=
|
|
L9, 36795000=06216000=
|
|
L10, 36800000
|
|
L11, 36805000
|
|
L12, 36810000
|
|
L13, 36815000
|
|
L14, 36820000
|
|
L15, 36825000
|
|
L16, 36830000
|
|
L17, 36835000
|
|
L18, 36840000
|
|
L19, 36845000
|
|
L20, 36850000
|
|
L21, 36855000
|
|
L22, 36860000
|
|
L23, 36865000
|
|
L24, 36870000
|
|
L25, 36875000
|
|
L26, 36880000
|
|
L27, 36885000
|
|
L28, 36890000
|
|
L29, 36895000
|
|
L30, 36900000
|
|
L31, 36905000
|
|
L32, 36910000
|
|
L33, 36915000
|
|
L34, 36920000
|
|
L35; 36925000
|
|
SWITCH 36930000=06219000=
|
|
S:= L9, 36935000=06220000=
|
|
L10, 36940000
|
|
L11, 36945000
|
|
L12, 36950000
|
|
L13, 36955000
|
|
L14, 36960000
|
|
L15, 36965000
|
|
L16, 36970000
|
|
L17, 36975000
|
|
L18, 36980000
|
|
L19, 36985000
|
|
L20, 36990000
|
|
L21, 36995000
|
|
L22, 37000000
|
|
L23, 37005000
|
|
L24, 37010000
|
|
L25, 37015000
|
|
L26, 37020000
|
|
L27, 37025000
|
|
L28, 37030000
|
|
L29, 37035000
|
|
L30, 37040000
|
|
L31, 37045000
|
|
L32, 37050000
|
|
L33, 37055000
|
|
L34, 37060000
|
|
L35; 37065000
|
|
COMMENT LN IS THE LABEL FOR THE CLASS N; 37070000=06223000=
|
|
LABEL 37075000=06224000=
|
|
EXIT, 37080000=06224000=
|
|
LE, 37085000
|
|
D, 37090000
|
|
TD, 37095000
|
|
T; 37100000
|
|
LABEL 37105000=06224500=
|
|
FAH; 37110000=06224500=
|
|
GO TO S[ELCLASS-SUPERFILEID]; 37115000=06225000=
|
|
IF ELCLASS = ADOP THEN 37120000=06226000=
|
|
GO TO L11; 37125000=06226000=
|
|
IF ELCLASS = UNKNOWNID THEN 37130000=06227000=
|
|
ERR(100); 37135000=06227000=
|
|
IF ELCLASS = FILEID OR ELCLASS = SUPERFILEID THEN 37140000=06227500=
|
|
BEGIN 37145000=06227510=
|
|
BOOPRIM:= TYPE:= FILEATTRIBUTEHANDLER(FP); 37150000=06227520=
|
|
GO FAH; 37155000=06227530=
|
|
END; 37160000=06227540=
|
|
LE: 37165000=06228000=
|
|
L10: 37170000=06228000=
|
|
L12: 37175000=06229000=
|
|
COMMENT NO BOOLEAN PRIMARY, ARITHMETIC EXPRESSION, OR DESIGNATIONAL 37180000=06229000=
|
|
EXPRESSION MAY BEGIN WITH QUANTITIES WITH THESE CLASSES; 37185000=06230000=
|
|
37190000=06231000=
|
|
ERR(111); 37195000=06231000=
|
|
GO TO EXIT; 37200000=06231000=
|
|
L35: 37205000=06232000=
|
|
IF GT1:= ELBAT[I].ADDRESS = BOOV THEN 37210000=06233000=
|
|
BEGIN 37215000=06233000=
|
|
PANA; 37220000=06233000=
|
|
GO TO TD 37225000=06233000=
|
|
END; 37230000=06233000=
|
|
IF GT1 ^= REALV THEN 37235000=06234000=
|
|
BEGIN 37240000=06234000=
|
|
ERR(112); 37245000=06234000=
|
|
GO TO EXIT 37250000=06234000=
|
|
END; 37255000=06234000=
|
|
L11: 37260000=06235000=
|
|
L14: 37265000=06235000=
|
|
L15: 37270000=06235000=
|
|
L16: 37275000=06235000=
|
|
L18: 37280000=06235000=
|
|
L19: 37285000=06235000=
|
|
L20: 37290000=06235000=
|
|
L22: 37295000=06235000=
|
|
L23: 37300000=06235000=
|
|
L24: 37305000=06235000=
|
|
L26: 37310000=06235000=
|
|
L27: 37315000=06235000=
|
|
L28: 37320000=06236000=
|
|
L31: 37325000=06236000=
|
|
L32: 37330000=06236000=
|
|
L33: 37335000=06237000=
|
|
COMMENT ARITHMETIC TYPE STUFF; 37340000=06237000=
|
|
37345000=06238000=
|
|
AEXP; 37350000=06238000=
|
|
D: IF ELCLASS ^= RELOP THEN 37355000=06239000=
|
|
BEGIN 37360000=06239000=
|
|
BOOPRIM:= ATYPE; 37365000=06239000=
|
|
GO EXIT 37370000=06239000=
|
|
END; 37375000=06239000=
|
|
RELATION; 37380000=06240000=
|
|
BOOPRIM:= BTYPE; 37385000=06241000=
|
|
GO TO EXIT; 37390000=06241000=
|
|
L13: 37395000=06243000=
|
|
COMMENT BOOLEAN STREAM PROCEDURE DESIGNATOR; 37400000=06243000=
|
|
37405000=06243100=
|
|
IF ARRAYFLAG THEN 37410000=06243100=
|
|
CHECKBOUNDLVL; 37415000=06243100=
|
|
STRMPROCSTMT; 37420000=06244000=
|
|
GO TO TD; 37425000=06244000=
|
|
L17: 37430000=06246000=
|
|
COMMENT BOOLEAN PROCEDURE DESIGNATOR; 37435000=06246000=
|
|
37440000=06246100=
|
|
IF ARRAYFLAG THEN 37445000=06246100=
|
|
CHECKBOUNDLVL; 37450000=06246100=
|
|
PROCSTMT(FALSE); 37455000=06247000=
|
|
GO TO TD; 37460000=06247000=
|
|
L21: 37465000=06248000=
|
|
L25: 37470000=06249000=
|
|
COMMENT BOOLEAN VARIABLES; 37475000=06249000=
|
|
37480000=06249100=
|
|
IF ARRAYFLAG THEN 37485000=06249100=
|
|
CHECKBOUNDLVL; 37490000=06249100=
|
|
TVAR:= FP; 37491000
|
|
VARIABLE(TVAR); 37495000
|
|
GO TO T; 37500000=06250000=
|
|
L9: 37505000=06251000=
|
|
L29: 37510000=06252000=
|
|
COMMENT LABELS AND SWITCHES; 37515000=06252000=
|
|
37520000=06253000=
|
|
DEXP; 37525000=06253000=
|
|
BOOPRIM:= DTYPE; 37530000=06253000=
|
|
GO TO EXIT; 37535000=06253000=
|
|
L30: 37540000=06255000=
|
|
COMMENT TRUE OR FALSE; 37545000=06255000=
|
|
37550000=06256000=
|
|
EMIT(0 & ELBAT[I][2:21:1]); 37555000=06256000=
|
|
STEPIT; 37560000=06256000=
|
|
GO TO T; 37565000=06256000=
|
|
L34: 37570000=06258000=
|
|
COMMENT (; 37575000=06258000=
|
|
37580000=06259000=
|
|
STEPIT; 37585000=06259000=
|
|
TYPE:= BOOPRIM:= EXPRSS; 37590000=06259000=
|
|
COMMENT COMPILE THE EXPRESSION, WHATEVER IT IS; 37595000=06260000=
|
|
STACKCT:= STACKCT-1; 37600000=06260500=
|
|
IF ELCLASS ^= RTPAREN THEN 37605000=06261000=
|
|
BEGIN 37610000=06261000=
|
|
ERR(104); 37615000=06261000=
|
|
GO TO EXIT 37620000=06261000=
|
|
END; 37625000=06261000=
|
|
STEPIT; 37630000=06262000=
|
|
FAH: 37635000=06263000=
|
|
IF TYPE = DTYPE THEN 37640000=06263000=
|
|
GO TO EXIT; 37645000=06263000=
|
|
COMMENT FINISHED IF EXPRESSION COMPILED WAS DESIGNATIONAL; 37650000=06264000=
|
|
IF TYPE = BTYPE THEN 37655000=06265000=
|
|
BEGIN 37660000=06265000=
|
|
TD: DOT; 37665000=06266000=
|
|
COMMENT HANDLES PARTIAL WORDS; 37670000=06266000=
|
|
T: STACKCT:= STACKCT+1; 37675000=06267000=
|
|
WHILE ELCLASS = AMPERSAND DO 37680000=06267500=
|
|
COMMENT HANDLES CONCATENATE; 37685000=06268000=
|
|
BEGIN 37690000=06269000=
|
|
STEPIT; 37695000=06270000=
|
|
IF BOOPRIM ^= BTYPE THEN 37700000=06272000=
|
|
BEGIN 37705000=06272000=
|
|
ERR(109); 37710000=06272000=
|
|
GO TO EXIT 37715000=06272000=
|
|
END; 37720000=06272000=
|
|
PARSE 37725000=06273000=
|
|
END; 37730000=06273000=
|
|
BOOPRIM:= BTYPE; 37735000=06274000=
|
|
GO TO EXIT 37740000=06274000=
|
|
END; 37745000=06274000=
|
|
COMMENT IF NOT BOOLEAN OR DESIGNATIONAL, MUST COMPLETE ARITHMETIC 37750000=06275000=
|
|
EXPRESSION; 37755000=06276000=
|
|
DOT; 37760000=06277000=
|
|
SIMPARITH; 37765000=06277000=
|
|
GO TO D; 37770000=06277000=
|
|
EXIT: 37775000=06278000=
|
|
END BOOPRIM; 37780000=06278000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%37785000=06278000=
|
|
37790000=06279000=
|
|
COMMENT RELATION COMPILES RELATIONS. IT ASSUMES THAT THE LEFTHAND 37795000=06279000=
|
|
EXPRESSION HAS ALREADY BEEN COMPILED; 37800000=06280000=
|
|
PROCEDURE RELATION; 37805000=06281000=
|
|
BEGIN 37810000=06282000=
|
|
INTEGER 37815000=06282200=
|
|
OPERATOR; 37820000=06282200=
|
|
REAL 37825000=06282400=
|
|
A; 37830000=06282400=
|
|
BOOLEAN 37835000=06282600=
|
|
SIGNA, 37840000=06282600=
|
|
CONSTANA, 37845000=06282600=
|
|
SIMPLE, 37850000=06282600=
|
|
MANY, 37855000=06282600=
|
|
SIGN; 37860000=06282600=
|
|
DEFINE 37865000=06282800=
|
|
FORMALNAME = [38:2] = 2 #; 37870000=06282800=
|
|
PROCEDURE PLUG(C, A, S); 37875000=06283000=
|
|
VALUE 37880000=06283000=
|
|
C, 37885000=06283000=
|
|
A, 37890000=06283000=
|
|
S; 37895000=06283000=
|
|
BOOLEAN 37900000=06283000=
|
|
C, 37905000=06283000=
|
|
S; 37910000=06283000=
|
|
REAL 37910100
|
|
A; 37910200
|
|
BEGIN 37915000=06283200=
|
|
IF C THEN 37920000=06283400=
|
|
EMITNUM(A) 37925000=06283600=
|
|
ELSE 37930000=06283600=
|
|
BEGIN 37935000=06283600=
|
|
CHECKER(A); 37940000=06283600=
|
|
EMITV(A.ADDRESS) 37945000=06283600=
|
|
END; 37950000=06283600=
|
|
IF S THEN 37955000=06283800=
|
|
EMITO(CHS); 37960000=06283800=
|
|
END PLUG; 37965000=06284000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%37970000=06284000=
|
|
DO BEGIN 37975000=06284200=
|
|
OPERATOR:= 1 & ELBAT[I][11:30:10]; 37980000=06284400=
|
|
37985000=06284600=
|
|
COMMENT SET UP CODE FOR RELATIONAL OPERATOR TO BE 37990000=06284600=
|
|
EMITTED LATER (AFTER PROCESSING SECOND HALF). 37995000=06284800=
|
|
THE HIGH-ORDER BITS OF THE BINARY OPERATOR 38000000=06285000=
|
|
ARE TAKEN FROM THE [30:10] FIELD OF THE 38005000=06285200=
|
|
ELBAT WORD FRO THE RELATIONAL SYMBOL; 38010000=06285400=
|
|
IF MANY THEN 38015000=06285600=
|
|
IF SIMPLE THEN 38020000=06285800=
|
|
PLUG(CONSTANA, A, SIGNA) 38025000=06285800=
|
|
ELSE 38030000=06285800=
|
|
EMITV(JUNK); 38035000=06285800=
|
|
SIGNA:= FALSE; 38040000=06286000=
|
|
IF STEPI = ADOP THEN 38045000=06286200=
|
|
SIGNA:= ELBAT[I].ADDRESS = SUB; 38050000=06286200=
|
|
IF SIGN:= ELCLASS = ADOP THEN 38055000=06286400=
|
|
STEPIT; 38060000=06286400=
|
|
CONSTANA:= ELCLASS >= NONLITNO AND ELCLASS <= STRNGCON; 38065000=06286600=
|
|
A:= REAL(ELCLASS >= REALID AND ELCLASS <= INTID AND NOT 38070000=06287000=
|
|
ELBAT[I].FORMALNAME); 38075000=06287000=
|
|
SIMPLE:= (CONSTANA OR BOOLEAN(A)) AND STEPI = RELOP; 38080000=06287200=
|
|
IF SIMPLE THEN 38085000=06287400=
|
|
BEGIN 38090000=06287600=
|
|
IF CONSTANA THEN 38095000=06287800=
|
|
A:= C 38100000=06287800=
|
|
ELSE 38105000=06287800=
|
|
A:= ELBAT[I-1]; 38110000=06287800=
|
|
PLUG(CONSTANA, A, SIGNA) 38115000=06288200=
|
|
END 38120000=06288400=
|
|
ELSE 38125000=06288400=
|
|
BEGIN 38130000=06288400=
|
|
I:= I-REAL(SIGN)-2; 38135000=06288600=
|
|
STEPIT; 38140000=06288600=
|
|
AEXP; 38145000=06288600=
|
|
IF ELCLASS = RELOP THEN 38150000=06288800=
|
|
EMITPAIR(JUNK, SND); 38155000=06288800=
|
|
END; 38160000=06289000=
|
|
STACKCT:= 1; 38165000=06289200=
|
|
EMIT(OPERATOR); 38170000=06289200=
|
|
IF MANY THEN 38175000=06289400=
|
|
EMITO(LND) 38180000=06289400=
|
|
ELSE 38185000=06289600=
|
|
BEGIN 38190000=06289600=
|
|
EMIT(0); 38195000=06289600=
|
|
L:= L-1 38200000=06289600=
|
|
END; 38205000=06289600=
|
|
MANY:= TRUE; 38210000=06289800=
|
|
END 38215000=06290000=
|
|
UNTIL ELCLASS ^= RELOP 38220000=06290200=
|
|
END RELATION; 38225000=06290200=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38230000=06290200=
|
|
38235000=06292000=
|
|
COMMENT IFEXP COMPILES CONDITIONAL EXPRESSIONS. IT REPORTS THE TYPE 38240000=06292000=
|
|
OF EXPRESSIONS AS EXPRSS REPORTS; 38245000=06293000=
|
|
INTEGER PROCEDURE IFEXP; 38250000=06294000=
|
|
BEGIN 38255000=06295000=
|
|
INTEGER 38260000=06295000=
|
|
TYPE, 38265000=06295000=
|
|
THENBRANCH, 38270000=06295000=
|
|
ELSEBRANCH; 38275000=06295000=
|
|
IFCLAUSE; 38280000=06296000=
|
|
STACKCT:= 0; 38285000=06296500=
|
|
THENBRANCH:= BUMPL; 38290000=06297000=
|
|
COMMENT SAVE L FOR LATER FIXUP; 38295000=06298000=
|
|
IFEXP:= TYPE:= EXPRSS; 38300000=06299000=
|
|
COMMENT COMPILE 1ST EXPRSS; 38305000=06299000=
|
|
STACKCT:= 0; 38310000=06299500=
|
|
ELSEBRANCH:= BUMPL; 38315000=06300000=
|
|
EMITB(BFC, THENBRANCH, L); 38320000=06301000=
|
|
IF ELCLASS ^= ELSEV THEN 38325000=06302000=
|
|
ERR(155) 38330000=06302000=
|
|
ELSE 38335000=06302000=
|
|
BEGIN 38340000=06302000=
|
|
STEPIT; 38345000=06303000=
|
|
IF TYPE = ATYPE THEN 38350000=06304000=
|
|
AEXP 38355000=06304000=
|
|
ELSE 38360000=06304000=
|
|
IF TYPE = DTYPE THEN 38365000=06305000=
|
|
DEXP 38370000=06305000=
|
|
ELSE 38375000=06305000=
|
|
BEXP; 38380000=06305000=
|
|
STACKCT:= 1; 38385000=06305500=
|
|
COMMENT THIS COMPILES PROPER TYPE SECOND EXPRSS; 38390000=06306000=
|
|
EMITB(BFW, ELSEBRANCH, L); 38395000=06307000=
|
|
EMIT(1); 38400000=06308000=
|
|
L:= L-1; 38405000=06308000=
|
|
COMMENT THIS IS USED BY EMITLNG TO CLEANUP CODE. COMPARE WITH 38410000=06309000=
|
|
BOOSEC, BOOCOMP, AND RELATION; 38415000=06310000=
|
|
END 38420000=06311000=
|
|
END IFEXP; 38425000=06311000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38430000=06311000=
|
|
PROCEDURE PARSE;%COMPILES CODE FOR THE CONCATENATE ; 38435000=06312000=
|
|
BEGIN 38440000=06312500=
|
|
INTEGER 38445000=06312500=
|
|
FIRST, 38450000=06312500=
|
|
SECOND, 38455000=06312500=
|
|
THIRD; 38460000=06312500=
|
|
BOOLEAN 38465000=06313000=
|
|
P1, 38470000=06313000=
|
|
P2, 38475000=06313000=
|
|
P3; 38480000=06313000=
|
|
LABEL 38485000=06313500=
|
|
L1, 38490000=06313500=
|
|
L2, 38495000=06313500=
|
|
L3, 38500000=06313500=
|
|
SKIP1, 38505000=06313500=
|
|
SKIP2, 38510000=06313500=
|
|
EXIT; 38515000=06313500=
|
|
IF ELCLASS = FIELDID THEN 38520000=06313550=
|
|
BEGIN 38525000=06313600=
|
|
FIRST:= ELBAT[I].SBITF; 38530000=06313650=
|
|
SECOND:= 48-(THIRD:= ELBAT[I].NBITF); 38535000=06313700=
|
|
GO TO SKIP1; 38540000=06313750=
|
|
END 38545000=06314000=
|
|
ELSE 38550000=06314000=
|
|
IF ELCLASS ^= LFTBRKET THEN 38555000=06314000=
|
|
BEGIN 38560000=06314000=
|
|
ERR(90); 38565000=06314000=
|
|
GO TO EXIT 38570000=06314000=
|
|
END; 38575000=06314000=
|
|
IF STEPI = FIELDID THEN 38580000=06314050=
|
|
BEGIN 38585000=06314100=
|
|
FIRST:= ELBAT[I].SBITF; 38590000=06314150=
|
|
SECOND:= 48-(THIRD:= ELBAT[I].NBITF); 38595000=06314200=
|
|
IF STEPI ^= RTBRKET THEN 38600000=06314250=
|
|
BEGIN 38605000=06314300=
|
|
ERR(94); 38610000=06314350=
|
|
GO TO EXIT; 38615000=06314400=
|
|
END; 38620000=06314450=
|
|
GO TO SKIP1; 38625000=06314500=
|
|
END 38630000=06314650=
|
|
ELSE 38635000=06314650=
|
|
IF ELCLASS ^= LITNO THEN % PREPARE FOR DYNAMIC DIAL 38640000=06314650=
|
|
GO TO L1; 38645000=06314700=
|
|
FIRST:= C; 38650000=06315000=
|
|
IF TABLE(I+1) = COLON THEN 38655000=06315500=
|
|
BEGIN 38660000=06316000=
|
|
STEPIT; 38665000=06316500=
|
|
IF FIRST <= 0 THEN 38670000=06317000=
|
|
FLAG(92); 38675000=06317000=
|
|
END 38680000=06318000=
|
|
ELSE 38685000=06318000=
|
|
BEGIN 38690000=06318000=
|
|
L1: EMITO(MKS); 38695000=06318500=
|
|
AEXP; 38700000=06319000=
|
|
P1:= TRUE; 38705000=06319500=
|
|
IF ELCLASS ^= COLON THEN 38710000=06320000=
|
|
BEGIN 38715000=06320000=
|
|
ERR(91); 38720000=06320000=
|
|
GO TO EXIT 38725000=06320000=
|
|
END; 38730000=06320000=
|
|
END; 38735000=06320500=
|
|
IF STEPI ^= LITNO THEN 38740000=06321000=
|
|
GO TO L2; 38745000=06321000=
|
|
SECOND:= C; 38750000=06321500=
|
|
IF GT1:= TABLE(I+1) = COLON THEN 38755000=06322000=
|
|
BEGIN 38760000=06322500=
|
|
STEPIT; 38765000=06323000=
|
|
IF SECOND <= 0 THEN 38770000=06323500=
|
|
FLAG(092); 38775000=06323500=
|
|
END 38780000=06324500=
|
|
ELSE 38785000=06324500=
|
|
BEGIN 38790000=06324500=
|
|
IF GT1 = RTBRKET THEN 38795000=06325000=
|
|
BEGIN 38800000=06325500=
|
|
STEPIT; 38805000=06326000=
|
|
SECOND:= 48-(THIRD:= SECOND); 38810000=06326500=
|
|
GO TO SKIP2; 38815000=06327000=
|
|
END; 38820000=06327500=
|
|
L2: IF NOT P1 THEN 38825000=06328000=
|
|
BEGIN 38830000=06328000=
|
|
EMITO(MKS); 38835000=06328000=
|
|
EMITL(FIRST) 38840000=06328000=
|
|
END; 38845000=06328000=
|
|
AEXP; 38850000=06328500=
|
|
P1:= P2:= TRUE; 38855000=06329000=
|
|
IF ELCLASS = COLON THEN 38860000=06329100=
|
|
ELSE 38865000=06329400=
|
|
IF ELCLASS = RTBRKET THEN 38870000=06329400=
|
|
BEGIN 38875000=06329450=
|
|
EMITO(DUP); 38880000=06329500=
|
|
EMITL(48); 38885000=06329550=
|
|
EMITO(SUB); 38890000=06329550=
|
|
EMITO(CHS); 38895000=06329600=
|
|
EMITO(XCH); 38900000=06329600=
|
|
P3:= TRUE; 38905000=06329700=
|
|
GO TO SKIP1; 38910000=06329800=
|
|
END 38915000=06329900=
|
|
ELSE 38920000=06329900=
|
|
BEGIN 38925000=06329900=
|
|
ERR(91); 38930000=06329900=
|
|
GO TO EXIT 38935000=06329900=
|
|
END; 38940000=06329900=
|
|
END; 38945000=06330000=
|
|
IF STEPI ^= LITNO THEN 38950000=06330500=
|
|
GO L3; 38955000=06330500=
|
|
THIRD:= C; 38960000=06330600=
|
|
IF TABLE(I+1) = RTBRKET THEN 38965000=06330700=
|
|
BEGIN 38970000=06330800=
|
|
STEPIT; 38975000=06331000=
|
|
SKIP2: 38980000=06331100=
|
|
IF THIRD <= 0 OR THIRD > 47 THEN 38985000=06331100=
|
|
FLAG(95); 38990000=06331100=
|
|
END 38995000=06331300=
|
|
ELSE 39000000=06331300=
|
|
BEGIN 39005000=06331300=
|
|
L3: IF NOT P2 THEN 39010000=06331500=
|
|
BEGIN 39015000=06331600=
|
|
IF NOT P1 THEN 39020000=06331700=
|
|
BEGIN 39025000=06331700=
|
|
EMITO(MKS); 39030000=06331700=
|
|
EMITL(FIRST) 39035000=06331700=
|
|
END; 39040000=06331700=
|
|
EMITL(SECOND); 39045000=06331800=
|
|
END; 39050000=06332000=
|
|
AEXP; 39055000=06332100=
|
|
P1:= P2:= P3:= TRUE; 39060000=06332200=
|
|
IF ELCLASS ^= RTBRKET THEN 39065000=06332300=
|
|
BEGIN 39070000=06332300=
|
|
ERR(94); 39075000=06332300=
|
|
GO TO EXIT 39080000=06332300=
|
|
END; 39085000=06332300=
|
|
END; 39090000=06332400=
|
|
SKIP1: 39095000=06332500=
|
|
IF P1 THEN 39100000=06332500=
|
|
BEGIN 39105000=06333000=
|
|
IF NOT P2 THEN 39110000=06333500=
|
|
EMITL(SECOND); 39115000=06333500=
|
|
IF NOT P3 THEN 39120000=06334000=
|
|
BEGIN 39125000=06334100=
|
|
EMITL(THIRD); 39130000=06334200=
|
|
EMITL(1); 39135000=06334200=
|
|
EMITV(GNAT(DIALER)); 39140000=06334500=
|
|
EMIT(TRB & THIRD[11:5:6]); 39145000=06334600=
|
|
END 39150000=06335000=
|
|
ELSE 39155000=06335000=
|
|
BEGIN 39160000=06335000=
|
|
EMITL(0); 39165000=06335100=
|
|
EMITV(GNAT(DIALER)); 39170000=06335200=
|
|
EMITO(DEL); 39175000=06335500=
|
|
END; 39180000=06335700=
|
|
END 39185000=06336100=
|
|
ELSE 39190000=06336100=
|
|
BEGIN 39195000=06336100=
|
|
IF FIRST+THIRD > 48 OR SECOND+THIRD > 48 THEN 39200000=06336200=
|
|
FLAG(095); 39205000=06336200=
|
|
EMITD(SECOND, FIRST, THIRD); 39210000=06336300=
|
|
END; 39215000=06336400=
|
|
STEPIT; 39220000=06336500=
|
|
EXIT: 39225000=06336600=
|
|
STACKCT:= 1; 39230000=06336600=
|
|
END PARSE; 39235000=06336700=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39240000=06336700=
|
|
39245000=06337000=
|
|
COMMENT DOT COMPILES CODE FOR PARTIAL WORD DESIGNATORS,EXCEPT FOR 39250000=06337000=
|
|
THOSE CASES HANDLED BY THE VARIABLE ROUTINE ; 39255000=06337100=
|
|
PROCEDURE DOTIT; 39260000=06338000=
|
|
BEGIN 39265000=06339000=
|
|
INTEGER 39270000=06339000=
|
|
FIRST, 39275000=06339000=
|
|
SECOND; 39280000=06339000=
|
|
LABEL 39285000=06339000=
|
|
EXIT; 39290000=06339000=
|
|
IF DOTSYNTAX(FIRST, SECOND) THEN 39295000=06340000=
|
|
GO TO EXIT; 39300000=06340000=
|
|
EMITI(0, FIRST, SECOND); 39305000=06343000=
|
|
STEPIT; 39310000=06345000=
|
|
EXIT: 39315000=06346000=
|
|
END DOTIT; 39320000=06346000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39325000=06346000=
|
|
39330000=06347000=
|
|
COMMENT GENGO CONSTRUCTS THE CALL ON AN INTRINSIC PROCEDURE WHICH 39335000=06347000=
|
|
PREPARES A LABEL DESCRIPTOR FOR THE MCP. THE MCP EXPECTS 39340000=06348000=
|
|
THE F-REGISTER AND THE BLOCKCTR TO BE IN THIS DESCRIPTOR, 39345000=06349000=
|
|
SO THAT STORAGE CAN BE PROPERLY RETURNED. THE BLOCKCTR 39350000=06350000=
|
|
IS AN OBJECT TIME COUNTER IN A FIXED CELL IN THE PRT. IT 39355000=06351000=
|
|
IS INCREMENTED AND DECREMENTED AT ENTRY AND EXIT FROM 39360000=06352000=
|
|
BLOCKS,IF NECESSARY. THE CODE TO DO THIS IS COMPILED BY 39365000=06353000=
|
|
THE BLOCK ROUTINE. IN A PROCEDURE, THE BLOCKCTR AT ENTRY 39370000=06354000=
|
|
IS ALSO STORED IN F+1; 39375000=06355000=
|
|
PROCEDURE GENGO(ELBATWORD); 39380000=06356000=
|
|
VALUE 39385000=06356000=
|
|
ELBATWORD; 39390000=06356000=
|
|
REAL 39395000=06356000=
|
|
ELBATWORD; 39400000=06356000=
|
|
BEGIN 39405000=06357000=
|
|
INTEGER 39410000=06357000=
|
|
TLEVEL; 39415000=06357000=
|
|
EMITO(MKS); 39420000=06358000=
|
|
IF TLEVEL:= ELBATWORD.LVL > JUMPCTR THEN 39425000=06359000=
|
|
JUMPCTR:= TLEVEL; 39430000=06360000=
|
|
COMMENT JUMPCTR IS USED BY THE BLOCK ROUTINE TO THINK ABOUT 39435000=06361000=
|
|
INCREMENTING AND DECREMENTING THE BLOCKCTR. HERE WE TELL 39440000=06362000=
|
|
BLOCK ROUTINE ABOUT THE LEVEL TO WHICH OUR BAD GO TO IS 39445000=06363000=
|
|
JUMPING; 39450000=06364000=
|
|
IF TLEVEL < FRSTLEVEL OR MODE = 0 THEN 39455000=06366000=
|
|
BEGIN 39460000=06366000=
|
|
COMMENT OUR BAD GO TO IS JUMPING OUTSIDE OF ALL PROCEDURES; 39465000=06367000=
|
|
EMIT(0); 39470000=06368000=
|
|
EMIT(TLEVEL); 39475000=06369000=
|
|
END 39480000=06370000=
|
|
ELSE 39485000=06370000=
|
|
BEGIN 39490000=06370000=
|
|
EMITN(512); 39495000=06371000=
|
|
EMITV(513); 39500000=06372000=
|
|
COMMENT PICK UP BLOCKCTR AT ENTRY FROM F+1; 39505000=06373000=
|
|
IF TLEVEL:= TLEVEL-SUBLEVEL-1 ^= 0 THEN 39510000=06375000=
|
|
BEGIN 39515000=06375000=
|
|
EMITL(TLEVEL); 39520000=06376000=
|
|
EMITO(ADD) COMMENT IF JUMP IS NOT TO SAME LEVEL 39525000=06377000=
|
|
AS AT ENTRY TIME, FUDGE THE COUNTER; 39530000=06378000=
|
|
END 39535000=06379000=
|
|
END; 39540000=06379000=
|
|
EMITV(GNAT(GOTOSOLVER)) COMMENT CALL THE INTRINSIC; 39545000=06380000=
|
|
END GENGO; 39550000=06381000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39555000=06381000=
|
|
39560000=06382000=
|
|
COMMENT DEXP COMPILES DESIGNATIONAL EXPRESSIONS. FOR THE MOST PART 39565000=06382000=
|
|
IT ASSUMES THAT A COMMUNICATE IS GOING TO BE USED AGAINST 39570000=06383000=
|
|
THE LABEL DESCRIPTOR IN ORDER TO OBTAIN GO TO ACTION, 39575000=06384000=
|
|
STORAGE RETURN, AND STACK CUT BACK. HOWEVER IF IT NEVER 39580000=06385000=
|
|
SETS GOTOG TO TRUE THEN THE LABELS ARE ALL LOCAL AND NO 39585000=06386000=
|
|
COMMUNICATE WILL BE DONE; 39590000=06387000=
|
|
PROCEDURE DEXP; 39595000=06388000=
|
|
BEGIN 39600000=06389000=
|
|
LABEL 39605000=06390000=
|
|
EXIT; 39610000=06390000=
|
|
BOOLEAN 39615000=06391000=
|
|
S, 39620000=06391000=
|
|
F; 39625000=06391000=
|
|
REAL 39630000=06392000=
|
|
ELBW; 39635000=06392000=
|
|
IF(S:= ELCLASS = SWITCHID) OR ELCLASS = LABELID THEN 39640000=06394000=
|
|
BEGIN 39645000=06394000=
|
|
CHECKER(ELBW:= ELBAT[I]); 39650000=06395000=
|
|
SCATTERELBAT; 39655000=06396000=
|
|
IF LEVEL ^= LEVELF OR F:= FORMALF THEN 39660000=06397000=
|
|
GOTOG:= TRUE; 39665000=06397000=
|
|
IF FAULTOG THEN 39670000=06397100=
|
|
IF S OR F THEN 39675000=06397200=
|
|
FAULTLEVEL:= 1 39680000=06397200=
|
|
ELSE 39685000=06397200=
|
|
IF FAULTLEVEL > LEVELF THEN 39690000=06397300=
|
|
FAULTLEVEL:= LEVELF; 39695000=06397300=
|
|
IF S THEN 39700000=06398000=
|
|
BEGIN 39705000=06398000=
|
|
BANA; 39710000=06399000=
|
|
EMITPAIR(JUNK, ISD); 39715000=06399000=
|
|
EMITV(GNAT(ELBW)); 39720000=06400000=
|
|
IF F THEN 39725000=06401000=
|
|
GO TO EXIT; 39730000=06401000=
|
|
END 39735000=06402000=
|
|
ELSE 39740000=06402000=
|
|
BEGIN 39745000=06402000=
|
|
STEPIT; 39750000=06403000=
|
|
IF F THEN 39755000=06404000=
|
|
BEGIN 39760000=06404000=
|
|
EMITV(ADDRSF); 39765000=06404000=
|
|
GO TO EXIT 39770000=06404000=
|
|
END; 39775000=06404000=
|
|
EMITL(GNAT(ELBW)) 39780000=06405000=
|
|
END; 39785000=06405000=
|
|
GENGO(ELBW); 39790000=06406000=
|
|
END 39795000=06407000=
|
|
ELSE 39800000=06407000=
|
|
IF EXPRSS ^= DTYPE THEN 39805000=06407000=
|
|
ERR(115); 39810000=06407000=
|
|
EXIT: 39815000=06408000=
|
|
END DEXP; 39820000=06408000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39825000=06408000=
|
|
PROCEDURE IFCLAUSE; 39830000=06409000=
|
|
BEGIN 39835000=06410000=
|
|
STEPIT; 39840000=06410000=
|
|
STACKCT:= 0; 39845000=06410000=
|
|
BEXP; 39850000=06410000=
|
|
IF ELCLASS ^= THENV THEN 39855000=06411000=
|
|
ERR(116) 39860000=06411000=
|
|
ELSE 39865000=06411000=
|
|
STEPIT 39870000=06411000=
|
|
END IFCLAUS; 39875000=06411000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39880000=06411000=
|
|
39885000=06412000=
|
|
COMMENT PANA COMPILES THE CONSTRUCT: (<ARIT. EXP.>); 39890000=06412000=
|
|
PROCEDURE PANA; 39895000=06413000=
|
|
BEGIN 39900000=06414000=
|
|
IF STEPI ^= LEFTPAREN THEN 39905000=06415000=
|
|
ERR(105) 39910000=06416000=
|
|
ELSE 39915000=06416000=
|
|
BEGIN 39920000=06416000=
|
|
STEPIT; 39925000=06416000=
|
|
AEXP; 39930000=06416000=
|
|
IF ELCLASS ^= RTPAREN THEN 39935000=06416000=
|
|
ERR(104) 39940000=06417000=
|
|
ELSE 39945000=06417000=
|
|
STEPIT 39950000=06417000=
|
|
END 39955000=06417000=
|
|
END PANA; 39960000=06417000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%39965000=06417000=
|
|
39970000=06418000=
|
|
COMMENT BANA COMPILES THE CONSTRUCT: [<ARITH. EXP.>]; 39975000=06418000=
|
|
PROCEDURE BANA; 39980000=06419000=
|
|
BEGIN 39985000=06420000=
|
|
IF STEPI ^= LFTBRKET THEN 39990000=06421000=
|
|
ERR(117) 39995000=06422000=
|
|
ELSE 40000000=06422000=
|
|
BEGIN 40005000=06422000=
|
|
STEPIT; 40010000=06422000=
|
|
AEXP; 40015000=06422000=
|
|
IF ELCLASS ^= RTBRKET THEN 40020000=06422000=
|
|
ERR(118) 40025000=06423000=
|
|
ELSE 40030000=06423000=
|
|
STEPIT 40035000=06423000=
|
|
END 40040000=06423000=
|
|
END BANA; 40045000=06423000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40050000=06423000=
|
|
PROCEDURE MAKEALABEL; 40055000=06500000=
|
|
BEGIN 40060000=06501000=
|
|
LABEL 40065000=06501000=
|
|
EXIT; 40070000=06501000=
|
|
REAL 40075000=06501000=
|
|
I; 40080000=06501000=
|
|
STREAMTOG:= FALSE; 40085000=06502000=
|
|
EMITO(MKS); 40090000=06503000=
|
|
PASSFILE; 40095000=06503000=
|
|
IF ELCLASS ^= WITHV THEN 40100000=06504000=
|
|
BEGIN 40105000=06505000=
|
|
ERR(301); 40110000=06505000=
|
|
GO TO EXIT 40115000=06505000=
|
|
END; 40120000=06505000=
|
|
FOR I:= 1 STEP 1 UNTIL 6 DO 40125000=06506000=
|
|
BEGIN 40130000=06507000=
|
|
IF STEPI = FACTOP THEN 40135000=06507000=
|
|
BEGIN 40140000=06508000=
|
|
EMIT(4); 40145000=06508000=
|
|
EMITO(CHS); 40150000=06508000=
|
|
STEPIT 40155000=06508000=
|
|
END 40160000=06509000=
|
|
ELSE 40165000=06509000=
|
|
AEXP; 40170000=06509000=
|
|
IF ELCLASS ^= COMMA THEN 40175000=06510000=
|
|
GO TO EXIT; 40180000=06510000=
|
|
END; 40185000=06511000=
|
|
EXIT: 40190000=06512000=
|
|
FOR I:= I STEP 1 UNTIL 5 DO 40195000=06512000=
|
|
BEGIN 40200000=06512100=
|
|
EMIT(4); 40205000=06512100=
|
|
EMITO(CHS) 40210000=06512100=
|
|
END; 40215000=06512100=
|
|
EMITL(11); 40220000=06512200=
|
|
EMITV(5); 40225000=06513000=
|
|
END; 40230000=06514000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40235000=06514000=
|
|
40240000=07000000=
|
|
COMMENT THIS SECTION CONTAINS THE STATEMENT ROUTINES; 40245000=07000000=
|
|
40250000=07001000=
|
|
COMMENT COMPOUNDTAIL COMPILES COMPOUNDTAILS. IT ALSO ELIMINATES 40255000=07001000=
|
|
COMMENTS FOLLOWING ENDS. AFTER ANY ERROR, ERROR MESSAGES 40260000=07002000=
|
|
ARE SUPPRESSED. COMPOUNDTAIL IS PARTIALLY RESPONSIBLE 40265000=07003000=
|
|
FOR RESTORING THE ABILITY TO WRITE ERROR MESSAGES. SOME 40270000=07004000=
|
|
CARE IS ALSO TAKEN TO PREVENT READING BEYOND THE "END."; 40275000=07005000=
|
|
PROCEDURE COMPOUNDTAIL; 40280000=07006000=
|
|
BEGIN 40285000=07007000=
|
|
LABEL 40290000=07007000=
|
|
ANOTHER; 40295000=07007000=
|
|
I:= I-1; 40300000=07008000=
|
|
BEGINCTR:= BEGINCTR+1; 40305000=07008000=
|
|
ANOTHER: 40310000=07009000=
|
|
ERRORTOG:= TRUE; 40315000=07009000=
|
|
COMMENT ALLOW ERROR MESSAGES; 40320000=07009000=
|
|
STEPIT; 40325000=07010000=
|
|
IF STREAMTOG THEN 40330000=07011000=
|
|
STREAMSTMT 40335000=07011000=
|
|
ELSE 40340000=07011000=
|
|
STMT; 40345000=07011000=
|
|
IF ELCLASS = SEMICOLON THEN 40350000=07012000=
|
|
GO TO ANOTHER; 40355000=07012000=
|
|
IF ELCLASS ^= ENDV THEN 40360000=07014000=
|
|
BEGIN 40365000=07014000=
|
|
ERR(119); 40370000=07015000=
|
|
GO TO ANOTHER 40375000=07015000=
|
|
END; 40380000=07015000=
|
|
ENDTOG:= TRUE; 40385000=07016000=
|
|
DO 40390000=07017000=
|
|
STOPDEFINE:= TRUE 40395000=07018000=
|
|
UNTIL STEPI <= ENDV AND ELCLASS >= UNTILV OR NOT ENDTOG; 40400000=07019000=
|
|
ENDTOG:= FALSE; 40405000=07020000=
|
|
IF BEGINCTR:= BEGINCTR-1 ^= 0 EQV ELCLASS = PERIOD THEN 40410000=07022000=
|
|
BEGIN 40415000=07022000=
|
|
IF BEGINCTR = 0 THEN 40420000=07023000=
|
|
BEGIN 40425000=07024000=
|
|
FLAG(143); 40430000=07024000=
|
|
BEGINCTR:= 1; 40435000=07024000=
|
|
GO ANOTHER 40440000=07024000=
|
|
END; 40445000=07024000=
|
|
FLAG(120); 40450000=07025000=
|
|
FCR:= (LCR:= 9)-9; 40455000=07025010=
|
|
SBUFF:= CBUFF; 40455100
|
|
IF LISTER THEN 40460000=07025020=
|
|
PRINTCARD; 40465000=07025020=
|
|
END; 40475000=07025030=
|
|
IF ELCLASS = PERIOD THEN 40480000=07026000=
|
|
BEGIN 40485000=07027000=
|
|
GT5:= 6"ND;END."&6"E"[46:4:5]; 40490000=07028000=
|
|
CBUFF[0]:= GT5; 40495000=07029000=
|
|
LASTUSED:= 4; 40500000=07030000=
|
|
ELBAT[I:= I-2]:= SPECIAL[20]; 40505000=07031000=
|
|
ELCLASS:= SEMICOLON 40510000=07032000=
|
|
END 40515000=07033000=
|
|
END COMPOUNDTAIL; 40520000=07033000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%40525000=07033000=
|
|
COMMENT ACTUAPARAPART IS RESPONSIBLE FOR CONSTRUCTING ALL CALLS ON 40530000=07034000=
|
|
PARAMETERS. IT HANDLES THE ENTIRE PARAMETER LIST WITH 40535000=07035000=
|
|
ONE CALL. IT IS ALSO RESPONSIBLE FOR CHECKING FOR 40540000=07036000=
|
|
NON-CORRESPONDENCE OF THE ACTUAL AND FORMAL PARAMETERS. 40545000=07037000=
|
|
CONCERNING THE PARAMETERS: 40550000=07038000=
|
|
FBIT TELLS IF THE PROCEDURE BEING CALLED IS FORMAL 40555000=07039000=
|
|
OR NOT. 40560000=07040000=
|
|
SBIT TELLS IF THE PROCEDURE BEING CALLED IS A STREAM 40565000=07041000=
|
|
PROCEDURE OR NOT. 40570000=07042000=
|
|
INDEX IS THE INDEX INTO INFO OF THE ADDITIONAL 40575000=07043000=
|
|
INFORMATION; 40580000=07044000=
|
|
PROCEDURE ACTUALPARAPART(FBIT, SBIT, INDEX); 40585000=07045000=
|
|
VALUE 40590000=07046000=
|
|
FBIT, 40595000=07046000=
|
|
SBIT, 40600000=07046000=
|
|
INDEX; 40605000=07046000=
|
|
BOOLEAN 40610000=07047000=
|
|
FBIT, 40615000=07047000=
|
|
SBIT; 40620000=07047000=
|
|
INTEGER 40625000=07048000=
|
|
INDEX; 40630000=07048000=
|
|
BEGIN 40635000=07049000=
|
|
INTEGER 40640000=07050000=
|
|
PCTR, 40645000=07050000=
|
|
ACLASS, 40650000=07050000=
|
|
SCLASS; COMMENT 40655000=07050000=
|
|
PCTR IS A COUNT OF THE NUMBER OF PARAMETERS 40665000=07052000=
|
|
COMPILED. 40670000=07053000=
|
|
ACLASS IS THE CLASS OF THE ACTUAL PARAMETER- 40675000=07054000=
|
|
SCLASS IS THE CLASS OF THE FORMAL PARAMETER. 40680000=07055000=
|
|
THEY ARE PUT IN A NORMALIZED FORM IN ORDER 40685000=07056000=
|
|
TO ALLOW INTEGER, REAL, AND ALPHA TO HAVE 40690000=07057000=
|
|
SIMILAR MEANINGS; 40695000=07058000=
|
|
REAL 40700000=07059000=
|
|
TVAR, % FOR VARIABLE() NAME PARAM 40701000
|
|
WHOLE; COMMENT WHOLE CONTAINS THE ELBAT WORD OF THE ACTUAL 40705000=07059000=
|
|
PARAMETERS; 40715000=07061000=
|
|
BOOLEAN 40720000=07062000=
|
|
VBIT; COMMENT VBIT TELLS WHETHER OR NOT THE PARAMETER IS TO40725000=07062000=
|
|
BE CALLED BY VALUE OR BY NAME; 40735000=07064000=
|
|
LABEL 40740000=07065000=
|
|
ANOTHER, 40745000=07065000=
|
|
NORMAL, 40750000=07065000=
|
|
VE, 40755000=07065000=
|
|
STORE, 40760000=07065000=
|
|
LRTS, 40765000=07065000=
|
|
LOWBD, 40770000=07065000=
|
|
FINISHBOO, 40775000=07066000=
|
|
LODPOINT, 40780000=07066000=
|
|
NSBS, 40785000=07066000=
|
|
BS, 40790000=07066000=
|
|
COMMON, 40795000=07066000=
|
|
LP, 40800000=07066000=
|
|
GOBBLE, 40805000=07066000=
|
|
BSXX, 40810000=07066000=
|
|
BSX, 40815000=07066000=
|
|
EXIT, 40820000=07067000=
|
|
CERR, 40825000=07067000=
|
|
FGEN; 40830000=07067000=
|
|
LABEL 40835000=07069000=
|
|
L4, 40840000=07069000=
|
|
L5, 40845000=07069000=
|
|
L6, 40850000=07069000=
|
|
L7, 40855000=07069000=
|
|
L8, 40860000=07069000=
|
|
L9, 40865000=07069000=
|
|
L10, 40870000=07069000=
|
|
L11, 40875000=07069000=
|
|
L12, 40880000=07069000=
|
|
L13, 40885000=07069000=
|
|
L14, 40890000=07069000=
|
|
L15, 40895000=07069000=
|
|
L16, 40900000=07069000=
|
|
L17, 40905000=07070000=
|
|
L18, 40910000=07070000=
|
|
L19, 40915000=07070000=
|
|
L20, 40920000=07070000=
|
|
L21, 40925000=07070000=
|
|
L22, 40930000=07070000=
|
|
L23, 40935000=07070000=
|
|
L24, 40940000=07070000=
|
|
L25, 40945000=07070000=
|
|
L26, 40950000=07070000=
|
|
L27, 40955000=07070000=
|
|
L28, 40960000=07070000=
|
|
L29, 40965000=07070000=
|
|
L30, 40970000=07071000=
|
|
L31, 40975000=07071000=
|
|
L32, 40980000=07071000=
|
|
L33; 40985000=07071000=
|
|
SWITCH 40990000=07072000=
|
|
S:= L4, 40995000=07073000=
|
|
L5, 41000000=07073000=
|
|
L6, 41005000=07073000=
|
|
L7, 41010000=07073000=
|
|
L8, 41015000=07073000=
|
|
L9, 41020000=07073000=
|
|
L10, 41025000=07073000=
|
|
L11, 41030000=07073000=
|
|
L12, 41035000=07073000=
|
|
L13, 41040000=07073000=
|
|
L14, 41045000=07073000=
|
|
L15, 41050000=07073000=
|
|
L16, 41055000=07073000=
|
|
L17, 41060000=07074000=
|
|
L18, 41065000=07074000=
|
|
L19, 41070000=07074000=
|
|
L20, 41075000=07074000=
|
|
L21, 41080000=07074000=
|
|
L22, 41085000=07074000=
|
|
L23, 41090000=07074000=
|
|
L24, 41095000=07074000=
|
|
L25, 41100000=07074000=
|
|
L26, 41105000=07074000=
|
|
L27, 41110000=07074000=
|
|
L28, 41115000=07074000=
|
|
L29, 41120000=07074000=
|
|
L30, 41125000=07075000=
|
|
L31, 41130000=07075000=
|
|
L32, 41135000=07075000=
|
|
L33; 41140000=07075000=
|
|
REAL 41145000=07076000=
|
|
T1, 41150000=07076000=
|
|
T2, 41155000=07076000=
|
|
T3, 41160000=07076000=
|
|
T4, 41165000=07076000=
|
|
T5, 41170000=07076000=
|
|
T6; COMMENT EXAMINE LATER WITH EYE 41175000=07076000=
|
|
TO REDUCING TOTAL NUMBER; 41185000=07077000=
|
|
PCTR:= 1; 41190000=07078000=
|
|
ANOTHER: 41195000=07079000=
|
|
ACLASS:= STEPI; 41200000=07079000=
|
|
WHOLE:= ELBAT[I]; 41205000=07079000=
|
|
SCATTERELBAT; 41210000=07079000=
|
|
STACKCT:= 0; 41215000=07079500=
|
|
COMMENT SETUP FIELDS OF AN ACTUAL PARAMETER; 41220000=07080000=
|
|
IF FBIT THEN 41225000=07081000=
|
|
BEGIN 41230000=07081000=
|
|
VBIT:= FALSE; 41235000=07081000=
|
|
SCLASS:= LOCLID 41240000=07081000=
|
|
END 41245000=07082000=
|
|
COMMENT IF PROCEDURE IS FORMAL ALL CALLS ARE BY NAME AND NO CHECK 41250000=07082000=
|
|
IS MADE FOR CORRESPONDENCE OF ACTUAL AND FORMAL PARA 41255000=07083000=
|
|
METERS SETTING SCLASS TO LOCID HELPS TO COMPRESS CHECK 41260000=07084000=
|
|
ELSE 41265000=07085000=
|
|
BEGIN 41270000=07085000=
|
|
VBIT:= BOOLEAN(GT1:= TAKE(INDEX+PCTR)).VO; 41275000=07086000=
|
|
IF SCLASS:= GT1.CLASS <= INTARRAYID AND SCLASS >= BOOSTRPROCID 41280000=07089000=
|
|
THEN 41285000=07089000=
|
|
IF GT1:= (SCLASS-BOOSTRPROCID) MOD 4 ^= 0 THEN 41290000=07090000=
|
|
SCLASS:= SCLASS-GT1+1 41295000=07091000=
|
|
COMMENT IF PROCEDURE IS NOT FORMAL WE OBTAIN VBIT FROM THE ADDITION-41300000=07091000=
|
|
AL INFO FOR THE PROCEDURE. WE ALSO GET SCLASS FROM THIS 41305000=07092000=
|
|
SOURCE. HOWEVER SCLASS IS NORMALIZED TO REAL, IF NEEDED; 41310000=07093000=
|
|
END; 41315000=07094000=
|
|
IF T1:= TABLE(I+1) ^= COMMA THEN 41320000=07095000=
|
|
IF T1 ^= RTPAREN THEN 41325000=07096000=
|
|
COMMENT THE ACTUAL PARAMETER HAS MORE THAN ONE LOGICAL QUANTITY - 41330000=07097000=
|
|
HENCE A DIFFERENT ANALYSIS IS REQUIRED; 41335000=07098000=
|
|
BEGIN 41340000=07099000=
|
|
IF ACLASS <= IDMAX OR ACLASS = SUPERLISTID THEN 41345000=07099000=
|
|
CHECKER(WHOLE); 41350000=07099500=
|
|
IF ACLASS < BOOARRAYID OR ACLASS > INTARRAYID THEN 41355000=07101000=
|
|
BEGIN 41360000=07101000=
|
|
COMMENT THE ACTUAL PARAMETER DOES NOT START WITH AN ARRAY NAME - 41365000=07102000=
|
|
HENCE THE PARAMETER IS AN EXPRESSION, A SUPERFORMAT, A 41370000=07103000=
|
|
SUPERFILE, AN INDEXED FILE OR SUPERLIST; 41375000=07104000=
|
|
IF ACLASS = SUPERFRMTID THEN 41380000=07105000=
|
|
BEGIN 41385000=07106000=
|
|
ACLASS:= FRMTID; 41390000=07106000=
|
|
GO TO FGEN 41395000=07106000=
|
|
END; 41400000=07106000=
|
|
IF ACLASS = SUPERFILEID OR ACLASS = FILEID THEN 41405000=07108000=
|
|
BEGIN 41410000=07108000=
|
|
T4:= L; 41415000=07108500=
|
|
EMITO(NOP); %MAY NEED FOR FILEATTRIBUTES. 41420000=07108500=
|
|
IF NOT VBIT THEN 41425000=07108505=
|
|
EMITO(NOP); % DITTO. 41430000=07108505=
|
|
ACLASS:= FILEID; 41435000=07109000=
|
|
COMMENT IT IS EITHER AN INDEXED FILE OR A SUPERFILE (OR BOTH); 41440000=07110000=
|
|
PASSFILE; 41445000=07111000=
|
|
IF ELCLASS = PERIOD THEN % THEN FILE ATTRIBUTE 41450000=07111200=
|
|
BEGIN 41455000=07111210=
|
|
IF VBIT THEN 41460000=07111220=
|
|
BEGIN 41465000=07111225=
|
|
T5:= L; 41470000=07111230=
|
|
L:= T4; 41475000=07111230=
|
|
EMITO(MKS); 41480000=07111230=
|
|
L:= T5; 41485000=07111230=
|
|
T5:= 0; 41490000=07111230=
|
|
END; 41495000=07111235=
|
|
ACLASS:= 41500000=07111240=
|
|
IF FILEATTRIBUTEHANDLER(FA) = ATYPE THEN 41505000=07111250=
|
|
REALID 41510000=07111250=
|
|
ELSE 41515000=07111250=
|
|
BOOID; 41520000=07111250=
|
|
IF ELCLASS ^= COMMA AND ELCLASS ^= RTPAREN THEN 41525000=07111255=
|
|
IF ACLASS = BOOID THEN 41530000=07111260=
|
|
SIMPBOO 41535000=07111260=
|
|
ELSE 41540000=07111260=
|
|
BEGIN 41545000=07111265=
|
|
SIMPARITH; 41550000=07111270=
|
|
IF ELCLASS = RELOP THEN 41555000=07111275=
|
|
BEGIN 41560000=07111280=
|
|
ACLASS:= BOOID; 41565000=07111285=
|
|
RELATION; 41570000=07111285=
|
|
SIMPBOO; 41575000=07111290=
|
|
END; 41580000=07111295=
|
|
END; 41585000=07111300=
|
|
IF NOT VBIT THEN 41590000=07111303=
|
|
BEGIN 41595000=07111307=
|
|
EMITPAIR(JUNK, STD); 41600000=07111310=
|
|
EMITN(JUNK); 41605000=07111310=
|
|
EMITO(RTS); 41610000=07111315=
|
|
ADJUST; 41615000=07111315=
|
|
CONSTANTCLEAN; 41620000=07111315=
|
|
EMITO(MKS); 41625000=07111320=
|
|
EMITB(BBW, BUMPL, T4+2); 41630000=07111320=
|
|
EMITB(BFW, T4+2, L); 41635000=07111325=
|
|
STUFFF(PROGDESCBLDR(0, L-3, 0)); 41640000=07111330=
|
|
END; 41645000=07111335=
|
|
GO BS; 41650000=07111340=
|
|
END OF FILE ATTRIBUTE PARAMETER EXPRESSION; 41655000=07111345=
|
|
IF ELCLASS ^= LEFTPAREN THEN 41660000=07112000=
|
|
GO TO BS; 41665000=07112000=
|
|
I:= I-1; 41670000=07113000=
|
|
COMMENT IF WE ARE HERE IT IS INDEXED; 41675000=07114000=
|
|
CHECKPRESENCE; 41680000=07115000=
|
|
EMITO(LOD); 41685000=07116000=
|
|
PANA; 41690000=07116000=
|
|
EMITO(CDC); 41695000=07116000=
|
|
IF SCLASS = FILEID OR NOT SBIT OR VBIT THEN 41700000=07118000=
|
|
BEGIN 41705000=07118000=
|
|
ERR(121); 41710000=07118000=
|
|
GO TO CERR 41715000=07118000=
|
|
END 41720000=07119000=
|
|
COMMENT AN INDEXED FILE MAY BE PASSED BY NAME ONLY AND ONLY TO A 41725000=07119000=
|
|
STREAM PROCEDURE THE STREAM PROCEDURE MAY NOT DO A 41730000=07120000=
|
|
RELEASE ON THIS DESCRIPTOR 41735000=07121000=
|
|
ELSE 41740000=07122000=
|
|
GO TO COMMON 41745000=07122000=
|
|
END; 41750000=07122000=
|
|
IF ACLASS = SUPERLISTID THEN 41755000=07122500=
|
|
BEGIN 41760000=07122500=
|
|
BANA; 41765000=07122500=
|
|
EMITV(WHOLE.ADDRESS); 41770000=07122510=
|
|
IF WHOLE.ADDRESS > 1023 THEN 41775000=07122520=
|
|
EMITO(PRTE); 41780000=07122520=
|
|
EMITO(LOD); 41785000=07122530=
|
|
ACLASS:= LISTID; 41790000=07122540=
|
|
GO TO BS 41795000=07122540=
|
|
END; 41800000=07122540=
|
|
COMMENT NORMAL IS REACHED ONLY IF THE PARAMETER IS AN EXPRESSION; 41805000=07123000=
|
|
NORMAL: 41810000=07124000=
|
|
IF VBIT THEN 41815000=07124000=
|
|
VE: T1:= EXPRSS COMMENT VALUE CALL EXPRESSION; 41820000=07125000=
|
|
ELSE 41825000=07126000=
|
|
BEGIN 41830000=07126000=
|
|
COMMENT NAME CALL EXPRESSION; 41835000=07126000=
|
|
IF SBIT THEN 41840000=07127000=
|
|
BEGIN 41845000=07127000=
|
|
FLAG(122); 41850000=07127000=
|
|
GO TO CERR 41855000=07127000=
|
|
END; 41860000=07127000=
|
|
COMMENT STREAM PROCEDURES MAY NOT HAVE EXPRESSIONS PASSED BY NAME;41865000=07128000=
|
|
T2:= BAE; 41870000=07129000=
|
|
T3:= PROGDESCBLDR(0, L, 0); 41875000=07130000=
|
|
COMMENT BUILD DESCRIPTOR FOR ACCIDENTAL ENTRY AND PREPARE JUMP 41880000=07131000=
|
|
AROUND CODE FOR EXPRESSION; 41885000=07132000=
|
|
T1:= EXPRSS; 41890000=07133000=
|
|
COMMENT COMPILE EXPRESSION; 41895000=07133000=
|
|
STORE: 41900000=07134000=
|
|
EMITPAIR(JUNK, STD); 41905000=07134000=
|
|
EMITN(JUNK); 41910000=07134000=
|
|
COMMENT THIS PROVIDES FOR PROTECTION IF ONE ATTEMPTS INSIDE OF A 41915000=07135000=
|
|
PROCEDURE TO STORE INTO AN EXPRESSION - THE STORE GOES 41920000=07136000=
|
|
INTO JUNK; 41925000=07137000=
|
|
LRTS: 41930000=07138000=
|
|
EMITO(RTS); 41935000=07138000=
|
|
CONSTANTCLEAN; 41940000=07138000=
|
|
EMITB(BFW, T2, L); 41945000=07138000=
|
|
STUFFF(T3) 41950000=07139000=
|
|
COMMENT LRTS IS RESPONSIBLE FOR THE CLEANUP ASSOCIATED WITH ALL 41955000=07139000=
|
|
THE ACCIIDENTAL ENTRIES COMPILED BY ACTUALPARAPART. IT 41960000=07140000=
|
|
EMITS THE RETURN SPECIAL, DOES A CONSTANTCLEAN, FINISHES 41965000=07141000=
|
|
THE BRANCH OPERATION AND PROVIDES FOR THE POSSIBILITY 41970000=07142000=
|
|
OF STUFFING F INTO THE ACCIDENTAL ENTRY DESCRIPTOR; 41975000=07143000=
|
|
END OF NAME CALL EXPRESSIONS; 41980000=07144000=
|
|
ACLASS:= 41985000=07145000=
|
|
IF T1 = ATYPE THEN 41990000=07145000=
|
|
REALID 41995000=07145000=
|
|
ELSE 42000000=07145000=
|
|
IF T1 = BTYPE THEN 42005000=07146000=
|
|
BOOID 42010000=07146000=
|
|
ELSE 42015000=07146000=
|
|
LABELID; 42020000=07146000=
|
|
GO TO BS; 42025000=07146000=
|
|
END OF EXPRESSION CALL CODE; 42030000=07147000=
|
|
COMMENT IF WE REACH THIS POINT THE ACTUAL PARAMETER STARTS WITH AN 42035000=07148000=
|
|
ARRAY NAME FOLLOWED BY SOMETHING ELSE; 42040000=07149000=
|
|
IF SCLASS >= BOOARRAYID THEN 42045000=07150000=
|
|
IF SCLASS <= INTARRAYID THEN 42050000=07151000=
|
|
BEGIN 42055000=07152000=
|
|
T2:= TAKE(INDEX+PCTR).INCR; 42060000=07152000=
|
|
COMMENT THE FORMAL PARAMETER CALLS FOR AN ARRAY AS ACTUAL PARAMETER.42065000=07153000=
|
|
THUS WE MUST HAVE A ROW DESIGNATOR; 42070000=07154000=
|
|
IF ACLASS ^= BOOARRAYID THEN 42075000=07155000=
|
|
ACLASS:= REALARRAYID; 42080000=07155000=
|
|
COMMENT NORMALISE ACLASS FOR LATER COMPARISON; 42085000=07156000=
|
|
TVAR:= FA; 42086000
|
|
VARIABLE(TVAR); 42090000
|
|
IF TABLE(I-2) ^= FACTOP THEN 42095000=07158000=
|
|
BEGIN 42100000=07158000=
|
|
ERR(123); 42105000=07158000=
|
|
GO TO EXIT 42110000=07158000=
|
|
END; 42115000=07158000=
|
|
COMMENT IT MUST BE A ROW DESIGNATOR - OTHERWISE IT IS AN ERROR; 42120000=07159000=
|
|
42125000=07163000=
|
|
COMMENT VARIABLE EMITS LOWER BOUNDS FOR EACH ASTERISK SUBSCRIPT. 42130000=07163000=
|
|
STLB IS THE NUMBER OF SUCH SUBSCRIPTS; 42135000=07164000=
|
|
LOWBD: 42140000=07165000=
|
|
IF T2 ^= STLB THEN 42145000=07165000=
|
|
BEGIN 42150000=07165000=
|
|
FLAG(124); 42155000=07165000=
|
|
GO TO CERR 42160000=07165000=
|
|
END THE FORMAL PARAMETER MUST BE AN ARRAY OF ONE DIMENSION42165000=07167000=
|
|
ELSE 42170000=07167000=
|
|
GO TO BS 42175000=07167000=
|
|
END; 42180000=07167000=
|
|
IF VBIT THEN 42185000=07168000=
|
|
GO TO VE; 42190000=07168000=
|
|
COMMENT IF THE FORMAL PARAMETER DOES NOT CALL FOR AN ARRAY AND 42195000=07169000=
|
|
VBIT IS SET WE MUST HAVE A VALUE CALL EXPRESSION; 42200000=07170000=
|
|
IF SBIT THEN 42205000=07172000=
|
|
BEGIN 42210000=07172000=
|
|
T6:= FL; 42215000=07173000=
|
|
VARIABLE(T6); 42220000=07173000=
|
|
IF T6 ^= 0 THEN 42225000=07174000=
|
|
GO TO BS; 42230000=07174000=
|
|
FLAG(122); 42235000=07175000=
|
|
GO TO CERR 42240000=07175000=
|
|
END; 42245000=07175000=
|
|
COMMENT IF PROCEDURE IS A STREAM PROCEDURE THEN WE COMPILE NAME 42250000=07176000=
|
|
CALL EXPRESSION. IT MUST BE SIMPLY A SUBSCRIPTED 42255000=07177000=
|
|
VARIABLE OR A ROW DESIGNATOR. IF VARIABLE DOES MORE 42260000=07178000=
|
|
THAN THIS IT SETS T6 TO ZERO; 42265000=07179000=
|
|
COMMENT IF THIS PLACE IS REACHED WE HAVE A NON-STREAM PROCEDURE. 42270000=07180000=
|
|
WE HAVE NOT YET DECEIDED WHETHER WE HAVE 42275000=07181000=
|
|
1) A ROW DESIGNATOR WITH FORMAL PROCEDURE. 42280000=07182000=
|
|
2) A SUBSCRIPTED VARIABLE, OR 42285000=07183000=
|
|
3) A GENUINE NAME CALL EXPRESSION; 42290000=07184000=
|
|
IF TABLE(I+2) = LITNO AND 42295000=07187000=
|
|
(GT1:= TABLE(I+4) = COMMA OR GT1 = RTPAREN) 42300000=07187000=
|
|
THEN 42305000=07187000=
|
|
BEGIN 42310000=07187000=
|
|
COMMENT WE HAVE HERE A ONE DIMENSIONAL SUBCRIPTED VARIABLE WITH 42315000=07188000=
|
|
CONSTANT LOWER BOUNDS. WE MAKE A SPECIAL CASE TO AVOID 42320000=07189000=
|
|
ACCIDENTAL ENTRY AND ADDITIONAL PRT CELL; 42325000=07190000=
|
|
TVAR:= FL; 42326000
|
|
VARIABLE(TVAR); 42330000
|
|
ACLASS:= 42335000=07192000=
|
|
IF ACLASS = BOOARRAYID THEN 42340000=07192000=
|
|
BOOID 42345000=07192000=
|
|
ELSE 42350000=07192000=
|
|
REALID; 42355000=07193000=
|
|
GO TO BS 42360000=07193000=
|
|
END; 42365000=07193000=
|
|
T2:= BAE; 42370000=07194000=
|
|
T3:= L; 42375000=07194000=
|
|
COMMENT WE PREPARE FOR ACCIDENTAL ENTRY EVEN THOUGH WE KNOW NOT YET 42380000=07195000=
|
|
IF WE HAVE ROW DESIGNATOR; 42385000=07196000=
|
|
T6:= FA; 42390000=07197000=
|
|
VARIABLE(T6); 42395000=07197000=
|
|
IF TABLE(I-2) = FACTOP THEN 42400000=07199000=
|
|
BEGIN 42405000=07199000=
|
|
COMMENT WE HAVE A ROW DESIGNATOR AFTER ALL; 42410000=07200000=
|
|
EMITB(BFW, T2, T3); 42415000=07201000=
|
|
T2:= STLB; 42420000=07201000=
|
|
GO TO LOWBD 42425000=07201000=
|
|
END; 42430000=07201000=
|
|
COMMENT WE NOW KNOW WE NEED ACCIDENTAL ENTRY; 42435000=07202000=
|
|
T3:= PROGDESCBLDR(0, T3, 0); 42440000=07203000=
|
|
T1:= 42445000=07204000=
|
|
IF BOOARRAYID = ACLASS THEN 42450000=07204000=
|
|
BTYPE 42455000=07204000=
|
|
ELSE 42460000=07204000=
|
|
ATYPE; 42465000=07204000=
|
|
IF ELCLASS = COMMA OR ELCLASS = RTPAREN THEN 42470000=07205000=
|
|
COMMENT WE ARE AT END OF PARAMETER; 42475000=07206000=
|
|
IF T6 = 0 THEN 42480000=07207000=
|
|
COMMENT MORE THAN SUBSCRIPTED VARIABLE; 42485000=07207000=
|
|
GO TO STORE 42490000=07208000=
|
|
ELSE 42495000=07208000=
|
|
COMMENT SUBSCRIPTED VARIABLE; 42500000=07208000=
|
|
GO TO LRTS; 42505000=07209000=
|
|
IF T1 = BTYPE THEN 42510000=07210000=
|
|
GO TO FINISHBOO; 42515000=07210000=
|
|
SIMPARITH; 42520000=07210000=
|
|
IF ELCLASS = RELOP THEN 42525000=07211000=
|
|
BEGIN 42530000=07211000=
|
|
T1:= BTYPE; 42535000=07211000=
|
|
RELATION; 42540000=07211000=
|
|
FINISHBOO: 42545000=07212000=
|
|
SIMPBOO 42550000=07212000=
|
|
END; 42555000=07212000=
|
|
GO TO STORE 42560000=07212000=
|
|
END; 42565000=07212000=
|
|
COMMENT WHEN WE GET HERE WE HAVE THE CASE OF A SINGLE QUANTITY 42570000=07213000=
|
|
ACTUAL PARAMETER; 42575000=07214000=
|
|
IF ACLASS <= IDMAX OR ACLASS = SUPERLISTID THEN 42580000=07215000=
|
|
CHECKER(WHOLE); 42585000=07215500=
|
|
STEPIT; 42590000=07215500=
|
|
GO TO S[ACLASS-3]; 42595000=07216000=
|
|
IF ACLASS = 0 THEN 42600000=07217000=
|
|
FLAG(100) 42605000=07217000=
|
|
ELSE 42610000=07217000=
|
|
IF ACLASS = SUPERLISTID THEN 42615000=07217500=
|
|
BEGIN 42620000=07217510=
|
|
EMITPAIR(ADDRSF, LOD); 42625000=07217510=
|
|
GO TO BS 42630000=07217510=
|
|
END; 42635000=07217510=
|
|
FLAG(126); 42640000=07217520=
|
|
CERR: 42645000=07219000=
|
|
L12: 42650000=07219000=
|
|
L13: 42655000=07219000=
|
|
L14: 42660000=07219000=
|
|
L15: 42665000=07219000=
|
|
L16: 42670000=07220000=
|
|
COMMENT STREAM PROCEDURES MAY NOT BE PASSED AS PARAMETERS; 42675000=07220000=
|
|
42680000=07221000=
|
|
FLAG(125); 42685000=07221000=
|
|
ERRORTOG:= TRUE; 42690000=07221000=
|
|
GO TO COMMON; 42695000=07221000=
|
|
LODPOINT: 42700000=07223000=
|
|
L4: 42705000=07223000=
|
|
L8: COMMENT LIST, SUPERLIST OR SUPERFILE; 42710000=07224000=
|
|
EMITPAIR(ADDRSF, LOD); 42715000=07225000=
|
|
NSBS: 42720000=07226000=
|
|
IF SBIT THEN 42725000=07226000=
|
|
BEGIN 42730000=07226000=
|
|
FLAG(127); 42735000=07226000=
|
|
GO TO CERR 42740000=07226000=
|
|
END; 42745000=07226000=
|
|
COMMENT ITEMS WHICH FIND THEIR WAY HERE MAY NOT BE PASSED TO 42750000=07227000=
|
|
STREAM PROCEDURES; 42755000=07228000=
|
|
BS: IF SCLASS ^= ACLASS THEN 42760000=07229000=
|
|
IF SCLASS ^= LOCLID THEN 42765000=07230000=
|
|
COMMENT IF WE ARRIVE HERE THE ACTUAL AND FORMAL PARAMETERS DO NOT 42770000=07231000=
|
|
AGREE; 42775000=07232000=
|
|
BEGIN 42780000=07233000=
|
|
FLAG(123); 42785000=07233000=
|
|
GO TO CERR 42790000=07233000=
|
|
END; 42795000=07233000=
|
|
COMMON: 42800000=07235000=
|
|
COMMENT ARRIVAL HERE CAUSES THE NEXT PARAMETER TO BE EXAMINED; 42805000=07235000=
|
|
42810000=07236000=
|
|
PCTR:= PCTR+1; 42815000=07236000=
|
|
IF ELCLASS = COMMA THEN 42820000=07237000=
|
|
GO TO ANOTHER; 42825000=07237000=
|
|
IF ELCLASS ^= RTPAREN THEN 42830000=07239000=
|
|
BEGIN 42835000=07239000=
|
|
ERROR(129); 42840000=07239000=
|
|
GO TO EXIT 42845000=07239000=
|
|
END; 42850000=07239000=
|
|
IF NOT FBIT THEN 42855000=07240000=
|
|
IF TAKE(INDEX).NODIMPART+1 ^= PCTR THEN 42860000=07242000=
|
|
BEGIN 42865000=07242000=
|
|
COMMENT WRONG NUMBER OF PARAMETERS; 42870000=07242000=
|
|
ERR(128); 42875000=07243000=
|
|
GO TO EXIT 42880000=07243000=
|
|
END; 42885000=07243000=
|
|
STEPIT; 42890000=07244000=
|
|
GO TO EXIT; 42895000=07244000=
|
|
L5: 42900000=07246000=
|
|
COMMENT FORMATS; 42905000=07246000=
|
|
I:= I-1; 42910000=07247000=
|
|
FGEN: 42915000=07248000=
|
|
PASSFORMAT; 42920000=07248000=
|
|
IF SBIT THEN 42925000=07249000=
|
|
BEGIN 42930000=07249000=
|
|
EMITO(XCH); 42935000=07249000=
|
|
EMITO(CDC) 42940000=07249000=
|
|
END; 42945000=07249000=
|
|
I:= I+1; 42950000=07250000=
|
|
GO TO BS; 42955000=07251000=
|
|
L6: 42960000=07253000=
|
|
COMMENT SUPERFORMAT; 42965000=07253000=
|
|
IF FBIT THEN 42970000=07255000=
|
|
BEGIN 42975000=07255000=
|
|
EMITV(ADDRSF); 42980000=07255000=
|
|
ADDRSF:= ADDRSF-1 42985000=07255000=
|
|
END 42990000=07256000=
|
|
ELSE 42995000=07256000=
|
|
BEGIN 43000000=07256000=
|
|
I:= I-1; 43005000=07256000=
|
|
EMITL(TAKEFRST); 43010000=07256000=
|
|
I:= I+1 43015000=07256000=
|
|
END; 43020000=07256000=
|
|
GO TO LODPOINT; 43025000=07257000=
|
|
L7: 43030000=07259000=
|
|
COMMENT FILE; 43035000=07259000=
|
|
I:= I-1; 43040000=07260000=
|
|
ELCLASS:= FILEID; 43045000=07260000=
|
|
PASSFILE; 43050000=07261000=
|
|
GO TO BS; 43055000=07261000=
|
|
L9: 43060000=07263000=
|
|
COMMENT SWITCH; 43065000=07263000=
|
|
IF FORMALF THEN 43070000=07264000=
|
|
GO TO LODPOINT; 43075000=07264000=
|
|
COMMENT OTHERWISE WE BUILD ACCIDENTAL ENTRY AND SET UP SO THAT 43080000=07265000=
|
|
MCP HANDLES LABEL PROPERLY. SEE IN PARTICULAR OTHER 43085000=07266000=
|
|
DISCUSSIONS OF GO TO PROBLEM. IT SHOULD BE NOTED THAT 43090000=07267000=
|
|
ALL BUT VERY SIMPLE SWITCHES ARE MARKED FORMAL, WHETHER 43095000=07268000=
|
|
THEY ARE OR NOT; 43100000=07269000=
|
|
T2:= BAE; 43105000=07270000=
|
|
T3:= PROGDESCBLDR(0, L, 0); 43110000=07270000=
|
|
EMITV(GNAT(WHOLE)); 43115000=07270000=
|
|
GENGO(WHOLE); 43120000=07271000=
|
|
EMITO(RTS); 43125000=07272000=
|
|
EMITB(BFW, T2, L); 43130000=07272000=
|
|
STUFFF(T3); 43135000=07272000=
|
|
GO TO NSBS; 43140000=07272000=
|
|
L10: 43145000=07274000=
|
|
COMMENT PROCEDURE; 43150000=07274000=
|
|
43155000=07275000=
|
|
TB1:= TRUE; 43160000=07275000=
|
|
IF FORMALF THEN 43165000=07275000=
|
|
GO LODPOINT; 43170000=07275000=
|
|
LP: IF T1:= TAKE(WHOLE:= GIT(WHOLE)).[7:8] = 0 THEN 43175000=07277000=
|
|
BEGIN 43180000=07277000=
|
|
COMMENT THE PRCOEDURE BEING PASSED HAS ZERO PARAMETERS; 43185000=07278000=
|
|
IF TB1 THEN 43190000=07279000=
|
|
GO TO LODPOINT; 43195000=07279000=
|
|
COMMENT IF THE PROCEDURE IS NOT A FUNCTION, WE PASS THE PROCEDURE 43200000=07280000=
|
|
DESCRIPTOR ITSELF (IN BOTH CASES THE PARAMETER PROCEDURE);43205000=07281000=
|
|
IF NOT FBIT THEN 43210000=07281900=
|
|
IF SCLASS <= INTPROCID THEN 43215000=07282000=
|
|
SCLASS:= SCLASS+4; 43220000=07282000=
|
|
I:= I-2; 43225000=07283000=
|
|
STEPIT; 43230000=07283000=
|
|
GO TO NORMAL; 43235000=07284000=
|
|
COMMENT WE LET OUT NORMAL MECHANISM FOR 43240000=07284000=
|
|
EXPRESSIONS HANDLE THIS CASE; 43245000=07285000=
|
|
END THE CASE OF ZERO PARAMETERS; 43250000=07286000=
|
|
TB1:= TRUE; 43255000=07287000=
|
|
FOR T2:= 1 STEP 1 UNTIL T1 DO 43260000=07289000=
|
|
BEGIN 43265000=07289000=
|
|
IF BOOLEAN(T3:= TAKE(WHOLE+T2)).VO THEN 43270000=07291000=
|
|
IF T4:= T3.CLASS < BOOARRAYID OR T4 > INTARRAYID THEN 43275000=07293000=
|
|
BEGIN 43280000=07293000=
|
|
COMMENT THE T2-TH PARAMETER TO THE PROCEDURE BEING PASSED IS VALUE; 43285000=07294000=
|
|
IF TB1 THEN 43290000=07295000=
|
|
BEGIN 43295000=07296000=
|
|
COMMENT THIS IS THE FIRST VALUE PARAMETER. IF ANY PARAMETERS ARE 43300000=07297000=
|
|
VALUE WE BUILD A THINK WHICH SEES THAT WHEN THIS 43305000=07298000=
|
|
PROCEDURE IS CALLED FORMALLY, ITS PARAMETERS THAT ARE 43310000=07299000=
|
|
VALUE GET CALLED BY VALUE. SINCE THIS IS FIRST VALUE 43315000=07300000=
|
|
PARAMETER WE CONSTRUCT THUNK HERE AND INHIBIT FUTURE THUNK43320000=07301000=
|
|
CONSTRUCTIONS; 43325000=07302000=
|
|
GOBBLE: 43330000=07304000=
|
|
TB1:= FALSE; 43335000=07304000=
|
|
T5:= BAE; 43340000=07304000=
|
|
T6:= PROGDESCBLDR(1, L, 0) 43345000=07305000=
|
|
END; 43350000=07305000=
|
|
EMITV(T4:= T3.ADDRESS); 43355000=07306000=
|
|
EMITPAIR(T4, STD) 43360000=07306000=
|
|
END 43365000=07306000=
|
|
END; 43370000=07306000=
|
|
COMMENT THIS CALLS THE T2-TH PARAMETER BY VALUE; 43375000=07307000=
|
|
IF NOT TB1 THEN 43380000=07309000=
|
|
BEGIN 43385000=07309000=
|
|
COMMENT THERE WERE VALUE CALLS SO FINISH CONSTRUCTION OF THINK; 43390000=07310000=
|
|
EMITPAIR(ADDRSF, LOD); 43395000=07311000=
|
|
EMITO(BFW); 43400000=07311000=
|
|
CONSTANTCLEAN; 43405000=07312000=
|
|
EMITB(BFW, T5, L); 43410000=07312000=
|
|
ADDRSF:= T6 43415000=07312000=
|
|
END; 43420000=07312000=
|
|
GO TO LODPOINT; 43425000=07313000=
|
|
COMMENT IN ANY CASE LOAD A DESCRIPTOR; 43430000=07313000=
|
|
L11: 43435000=07315000=
|
|
COMMENT INTRINSIC PROCEDURE; 43440000=07315000=
|
|
43445000=07316000=
|
|
ADDRSF:= GNAT(WHOLE); 43450000=07316000=
|
|
COMMENT GET PRT SPACE IF NOT ASSIGNED; 43455000=07317000=
|
|
ACLASS:= REALPROCID; 43460000=07318000=
|
|
T3.ADDRESS:= 897; 43465000=07319000=
|
|
T2:= T1:= 1; 43470000=07319000=
|
|
GO TO GOBBLE; 43475000=07319000=
|
|
COMMENT THIS MAKES THE INTRINSICS LOOK LIKE ORDINARY 43480000=07320000=
|
|
PROCEDURES; 43485000=07321000=
|
|
L19: 43490000=07322000=
|
|
L20: 43495000=07323000=
|
|
COMMENT ALFAPROC AND INTPROC; 43500000=07323000=
|
|
43505000=07324000=
|
|
ACLASS:= REALPROCID; 43510000=07324000=
|
|
L17: 43515000=07325000=
|
|
L18: 43520000=07326000=
|
|
COMMENT BOOPROC AND REAL PROC; 43525000=07326000=
|
|
43530000=07327000=
|
|
IF FORMALF THEN 43535000=07328000=
|
|
BEGIN 43540000=07328000=
|
|
COMMENT THE PROCEDURE BEING PASSED IS ACTUALLY A FORMAL PARAMETER; 43545000=07329000=
|
|
IF SCLASS > INTPROCID THEN 43550000=07330000=
|
|
ACLASS:= ACLASS+4; 43555000=07330000=
|
|
COMMENT CHANGE ACLASS SO THAT IT LOOKS LIKE WE ARE PASSING AN 43560000=07331000=
|
|
EXPRESSION. THE FORMAL PARAMETER DOES NOT CALL FOR A 43565000=07332000=
|
|
PROCEDURE SO IT MUST CALL FOR AN EXPRESSION; 43570000=07333000=
|
|
IF VBIT THEN 43575000=07335000=
|
|
BEGIN 43580000=07335000=
|
|
EMITV(ADDRSF); 43585000=07335000=
|
|
GO TO BS 43590000=07335000=
|
|
END 43595000=07336000=
|
|
ELSE 43600000=07336000=
|
|
GO TO LODPOINT; 43605000=07336000=
|
|
COMMENT IF VBIT WE DO VALUE CALL. OTHERWISE WE PASS PROCEDURE 43610000=07337000=
|
|
DESCRIPTOR ALONG; 43615000=07338000=
|
|
END; 43620000=07339000=
|
|
TB1:= FALSE; 43625000=07340000=
|
|
GO TO LP; 43630000=07340000=
|
|
L23: 43635000=07341000=
|
|
L24: 43640000=07342000=
|
|
COMMENT INTEGER AND ALPHA IDS; 43645000=07342000=
|
|
43650000=07343000=
|
|
ACLASS:= REALID; 43655000=07343000=
|
|
L21: 43660000=07344000=
|
|
L22: 43665000=07345000=
|
|
COMMENT BOOLEAN AND REAL IDS; 43670000=07345000=
|
|
43675000=07346000=
|
|
IF VBIT THEN 43680000=07346000=
|
|
EMITV(ADDRSF) 43685000=07347000=
|
|
ELSE 43690000=07347000=
|
|
IF NOT (SBIT OR VONF) AND FORMALF THEN 43695000=07348000=
|
|
GO TO LODPOINT 43700000=07348000=
|
|
ELSE 43705000=07348000=
|
|
EMITN(ADDRSF); 43710000=07348000=
|
|
COMMENT JUST PASS THE DESCRIPTOR ALONG IF PROCEDURE IS NOT STREAM 43715000=07349000=
|
|
AND ACTUAL PARAMETER IS A NAME CALL FORMAL PARAMETER. IF 43720000=07350000=
|
|
THESE CONDITIONS ARE NOT MET DO DESCRIPTOR CALL; 43725000=07351000=
|
|
GO TO BS; 43730000=07352000=
|
|
L27: 43735000=07353000=
|
|
L28: 43740000=07354000=
|
|
COMMENT INTEGER AND ALPHA ARRAYS; 43745000=07354000=
|
|
43750000=07355000=
|
|
ACLASS:= REALARRAYID; 43755000=07355000=
|
|
L25: 43760000=07356000=
|
|
L26: 43765000=07357000=
|
|
COMMENT BOOLEAN AND REAL ARRAYS; 43770000=07357000=
|
|
43775000=07358000=
|
|
EMITPAIR(ADDRSF, LOD); 43780000=07358000=
|
|
IF SBIT THEN 43785000=07359000=
|
|
GO TO BS; 43790000=07359000=
|
|
COMMENT LOWER BOUNDS ARE NOT PASSED TO STREAM PROCEDURES; 43795000=07360000=
|
|
T1:= TAKE(WHOLE:= GIT(WHOLE)).NODIMPART; 43800000=07361000=
|
|
FOR T2:= 1 STEP 1 UNTIL T1 DO 43805000=07363000=
|
|
BEGIN 43810000=07363000=
|
|
IF T3:= (STLB:= TAKE(WHOLE+T2)).[12:11] > 1023 THEN 43815000=07365000=
|
|
EMITV(T3) 43820000=07365000=
|
|
ELSE 43825000=07365000=
|
|
EMIT(STLB); 43830000=07365000=
|
|
IF STLB.[24:10] = ADD THEN 43835000=07366000=
|
|
EMITO(CHS) 43840000=07366000=
|
|
END; 43845000=07366000=
|
|
COMMENT THIS CODE EMITTED CALLS ON LOWER BOUNDS; 43850000=07367000=
|
|
IF FBIT THEN 43855000=07368000=
|
|
GO TO BS; 43860000=07368000=
|
|
IF TAKE(INDEX+PCTR).INCR ^= T1 THEN 43865000=07369000=
|
|
FLAG(124); 43870000=07369000=
|
|
GO TO BS; 43875000=07369000=
|
|
COMMENT ERROR IF ACTUAL AND FORMAL ARRAY DO NOT HAVE SAME NUMBER 43880000=07370000=
|
|
OF DIMENSIONS; 43885000=07371000=
|
|
L29: 43890000=07373000=
|
|
COMMENT LABEL; 43895000=07373000=
|
|
43900000=07374000=
|
|
ELCLASS:= TABLE(I:= I-1); 43905000=07374000=
|
|
DEXP; 43910000=07374000=
|
|
GO TO NSBS; 43915000=07374000=
|
|
L30: 43920000=07376000=
|
|
COMMENT TRUTH VALUE; 43925000=07376000=
|
|
43930000=07377000=
|
|
EMITL(ADDRSF); 43935000=07377000=
|
|
ACLASS:= BOOID; 43940000=07377000=
|
|
GO TO BSX; 43945000=07377000=
|
|
L32: 43950000=07379000=
|
|
COMMENT LITERAL; 43955000=07379000=
|
|
43960000=07380000=
|
|
EMITL(ADDRSF); 43965000=07380000=
|
|
BSXX: 43970000=07381000=
|
|
ACLASS:= REALID; 43975000=07381000=
|
|
BSX: 43980000=07382000=
|
|
IF SBIT AND NOT VBIT THEN 43985000=07382000=
|
|
FLAG(150); 43990000=07382000=
|
|
GO TO BS; 43995000=07382000=
|
|
L31: 44000000=07383000=
|
|
L33: 44005000=07384000=
|
|
EMITNUM(C); 44010000=07384000=
|
|
GO TO BSXX; 44015000=07384000=
|
|
EXIT: 44020000=07385000=
|
|
STACKCT:= 0 44025000=07385000=
|
|
END OF ACTUALPARAPART; 44030000=07385000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44035000=07385000=
|
|
44040000=07386000=
|
|
COMMENT PROCSTMT COMPILES CODE FOR ALL PROCEDURE STATEMENTS AND 44045000=07386000=
|
|
FUNCTION CALLS (EXCEPT FOR STREAM PROCEDURES). THE 44050000=07387000=
|
|
PARAMETERS, FROM, TELLS WHO CALLED. IF STMT CALLED FROM 44055000=07388000=
|
|
IS TRUE, PROCSTMT ALSO HANDLES FUNCTION NAME ASSIGNMENT 44060000=07389000=
|
|
OPERATIONS; 44065000=07390000=
|
|
PROCEDURE PROCSTMT(FROM); 44070000=07391000=
|
|
VALUE 44075000=07391000=
|
|
FROM; 44080000=07391000=
|
|
BOOLEAN 44085000=07391000=
|
|
FROM; 44090000=07391000=
|
|
BEGIN 44095000=07392000=
|
|
REAL 44100000=07393000=
|
|
TVAR, % FOR VARIABLE() NAME PARAM 44101000
|
|
HOLE, 44105000=07393000=
|
|
ADDRESS; 44110000=07393000=
|
|
LABEL 44115000=07394000=
|
|
EXIT; 44120000=07394000=
|
|
SCATTERELBAT; 44125000=07395000=
|
|
HOLE:= ELBAT[I]; 44130000=07396000=
|
|
ADDRESS:= ADDRSF; 44135000=07397000=
|
|
CHECKER(HOLE); 44140000=07398000=
|
|
IF ELCLASS ^= PROCID THEN 44145000=07399000=
|
|
IF NOT FORMALF THEN 44150000=07400000=
|
|
IF TABLE(I+1) = ASSIGNOP THEN 44155000=07401000=
|
|
BEGIN 44160000=07402000=
|
|
TVAR:= 2-REAL(FROM); 44164000
|
|
VARIABLE(TVAR); 44165000
|
|
GO TO EXIT 44170000=07402000=
|
|
END; 44175000=07402000=
|
|
COMMENT CALL VARIABLE TO HANDLE THIS ASSIGNMENT OPERATION; 44180000=07403000=
|
|
IF ELCLASS ^= PROCID EQV FROM THEN 44185000=07405000=
|
|
BEGIN 44190000=07405000=
|
|
ERR(159); 44195000=07405000=
|
|
GO TO EXIT 44200000=07405000=
|
|
END; 44205000=07405000=
|
|
COMMENT IT IS PROCEDURE IF AND ONLY WE COME FROM STMT; 44210000=07406000=
|
|
STEPIT; 44215000=07407000=
|
|
EMITO(MKS); 44220000=07408000=
|
|
IF ELCLASS = LEFTPAREN THEN 44225000=07410000=
|
|
ACTUALPARAPART(FORMALF, FALSE, GIT(HOLE)) 44230000=07411000=
|
|
ELSE 44235000=07411000=
|
|
IF FORMALF THEN 44240000=07411000=
|
|
IF FROM THEN 44245000=07411100=
|
|
ELSE 44250000=07411100=
|
|
L:= L-1 44255000=07412000=
|
|
ELSE 44260000=07412000=
|
|
IF TAKE(GIT(HOLE)).NODIMPART ^= 0 THEN 44265000=07412000=
|
|
ERR(128); 44270000=07412000=
|
|
EMITV(ADDRESS); 44275000=07413000=
|
|
COMMENT MONITOR CODE GOES HERE; 44280000=07414000=
|
|
IF HOLE < 0 THEN 44285000=07416000=
|
|
BEGIN COMMENT THIS IS A MONITORED FUNCTION DESIGNATOR44290000=07416000=
|
|
; 44300000=07417000=
|
|
EMITL(JUNK); 44305000=07418000=
|
|
EMITO(SND); 44310000=07418000=
|
|
EMITO(MKS); 44315000=07418000=
|
|
EMITL(JUNK); 44320000=07419000=
|
|
EMITL(PASSTYPE(HOLE)); 44325000=07419000=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 44330000=07420000=
|
|
PASSALPHA(HOLE); 44335000=07420000=
|
|
EMITPAIR(GNAT(CHARI), LOD); 44340000=07421000=
|
|
PASSMONFILE(TAKE(GIT(HOLE)).FUNCMONFILE); 44345000=07422000=
|
|
EMITNUM(1 & CARDNUMBER[46:43:44]); 44350000=07422100=
|
|
EMITV(GNAT(PRINTI)); 44355000=07423000=
|
|
END; 44360000=07424000=
|
|
EXIT: 44365000=07425000=
|
|
END PROCSTMT; 44370000=07425000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44375000=07425000=
|
|
44380000=07426000=
|
|
COMMENT STRMPROCSTMT COMPILES CODE FOR CALLS ON ALL STREAM PROCEDURES;44385000=07426000=
|
|
PROCEDURE STRMPROCSTMT; 44390000=07427000=
|
|
BEGIN 44395000=07428000=
|
|
INTEGER 44400000=07429000=
|
|
ADDRS; 44405000=07429000=
|
|
IF ADDRS:= ELBAT[I].ADDRESS = 0 THEN 44410000=07431000=
|
|
BEGIN 44415000=07431000=
|
|
UNKNOWNSTMT; 44420000=07432000=
|
|
END 44425000=07440000=
|
|
ELSE 44430000=07440000=
|
|
BEGIN 44435000=07440000=
|
|
IF ELCLASS ^= STRPROCID THEN 44440000=07441000=
|
|
EMIT(0); 44445000=07441000=
|
|
EMITO(MKS); 44450000=07441000=
|
|
STEPIT; 44455000=07441000=
|
|
GT1:= (GT2:= TAKE(GT3:= GIT(ELBAT[I-1]))).[33:10]; 44460000=07442000=
|
|
GT4:= GT1-GT2.[40:6]; 44465000=07443000=
|
|
FOR GT1:= GT1-1 STEP-1 UNTIL GT4 DO 44470000=07445000=
|
|
EMITV(IF GT1 >= 512 THEN GT1+1024 ELSE GT1); 44475000=07445000=
|
|
COMMENT THIS CODE CALLS LABELS FROM PRT WHICH ARE NEEDED FOR LONG 44480000=07446000=
|
|
JUMPS INSIDE OF STREAM PROCEDURES; 44485000=07447000=
|
|
GT4:= GT2.[46:6]; 44490000=07448000=
|
|
FOR GT1:= 1 STEP 1 UNTIL GT4 DO 44495000=07449000=
|
|
EMIT(0); 44500000=07449000=
|
|
COMMENT THIS CODE CALLS ZERO LISTS TO MAKE SPACE FOR LOCALS INSIDE44505000=07450000=
|
|
OF STREAM PROCEDURES; 44510000=07451000=
|
|
IF ELCLASS ^= LEFTPAREN THEN 44515000=07452000=
|
|
ERR(128) 44520000=07453000=
|
|
ELSE 44525000=07453000=
|
|
BEGIN 44530000=07453000=
|
|
ACTUALPARAPART(FALSE, TRUE, GT3); 44535000=07454000=
|
|
EMITV(ADDRS) 44540000=07454000=
|
|
END; 44545000=07454000=
|
|
END 44550000=07455000=
|
|
END STRMPROCSTMT; 44555000=07455000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44560000=07455000=
|
|
44565000=07456000=
|
|
COMMENT BAE BUILDS AN ACCIDENTAL ENTRY ( OR AT LEAST PREPARES FOR 44570000=07456000=
|
|
ONE TO BE BUILT). IT RETURNS VALUE OF L AT ENTRY; 44575000=07457000=
|
|
INTEGER PROCEDURE BAE; 44580000=07458000=
|
|
BEGIN 44585000=07459000=
|
|
BAE:= BUMPL; 44590000=07459000=
|
|
CONSTANTCLEAN; 44595000=07459000=
|
|
ADJUST 44600000=07459000=
|
|
END BAE; 44605000=07459000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%44610000=07459000=
|
|
44615000=07460000=
|
|
COMMENT RELSESTMT COMPILES THE RELEASE STATEMENT: 44620000=07460000=
|
|
RELEASE(<MEMORY DESIGNATOR>) % AUXMEM RELEASE STATEMENT. 44625000=07460250=
|
|
RELEASE(<TERMINAL BUFFER SPECIFIER>) % DATACOM RELEASE STATEMENT. 44630000=07460500=
|
|
RELEASE(<FILE PART>) % FILE RELEASE STATEMENT. 44635000=07460750=
|
|
; 44640000=07461000=
|
|
PROCEDURE RELSESTMT; 44645000=07461250=
|
|
BEGIN 44650000=07461500=
|
|
LABEL 44655000=07461750=
|
|
DCR, 44660000=07461750=
|
|
PARENCHECK, 44665000=07461750=
|
|
EXIT; 44670000=07461750=
|
|
IF STEPI ^= LEFTPAREN THEN 44675000=07462000=
|
|
BEGIN 44680000=07462250=
|
|
ERR(105); 44685000=07462250=
|
|
GO EXIT 44690000=07462250=
|
|
END; 44695000=07462250=
|
|
IF STEPI = UNKNOWNID THEN 44700000=07462500=
|
|
BEGIN 44705000=07462750=
|
|
ERR(100); 44710000=07462750=
|
|
GO EXIT 44715000=07462750=
|
|
END; 44720000=07462750=
|
|
IF ELCLASS = PROCID OR RANGE(BOOPROCID, INTPROCID) THEN 44725000=07463000=
|
|
BEGIN 44730000=07463250=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 44735000=07463500=
|
|
EMITPAIR(38, COM); 44740000=07463500=
|
|
EMITO(DEL); 44745000=07463750=
|
|
STEPIT; 44750000=07463750=
|
|
GO PARENCHECK; 44755000=07463750=
|
|
END; 44760000=07464000=
|
|
IF RANGE(BOOARRAYID, INTARRAYID) THEN 44765000=07464250=
|
|
BEGIN 44770000=07464500=
|
|
REL:= TRUE; 44775000=07464750=
|
|
AEXP; 44780000=07464750=
|
|
REL:= FALSE; 44785000=07464750=
|
|
IF TABLE(I-2) = FACTOP THEN 44790000=07465000=
|
|
BEGIN 44795000=07465250=
|
|
STACKCT:= STACKCT-1; 44800000=07465250=
|
|
EMITPAIR(38, COM); 44805000=07465500=
|
|
EMITO(DEL); 44810000=07465500=
|
|
GO PARENCHECK; 44815000=07465500=
|
|
END 44820000=07466000=
|
|
ELSE 44825000=07466000=
|
|
BEGIN % DATACOM RELEASE. 44830000=07466000=
|
|
DCR: 44835000=07466500=
|
|
EMITL(2); 44840000=07466500=
|
|
EMITO(XCH); 44845000=07466500=
|
|
EMITL(0); 44850000=07466500=
|
|
EMITO(XCH); 44855000=07466500=
|
|
EMITL(0); 44860000=07466750=
|
|
EMITPAIR(32, COM); 44865000=07466750=
|
|
EMITO(DEL); 44870000=07466750=
|
|
EMITO(DEL); 44875000=07467000=
|
|
EMITO(DEL); 44880000=07467000=
|
|
EMITO(DEL); 44885000=07467000=
|
|
GO PARENCHECK; 44890000=07467000=
|
|
END; 44895000=07467250=
|
|
END; 44900000=07467500=
|
|
IF ELCLASS ^= FILEID AND ELCLASS ^= SUPERFILEID THEN 44905000=07467750=
|
|
% DATACOM RELEASE. 44910000=07467750=
|
|
BEGIN 44915000=07468000=
|
|
AEXP; 44920000=07468000=
|
|
GO DCR; 44925000=07468000=
|
|
END; 44930000=07468000=
|
|
CHECKER(ELBAT[I]); 44935000=07468250=
|
|
PASSFILE; 44940000=07468250=
|
|
IF ELCLASS = COMMA THEN 44945000=07468500=
|
|
EMITO(DUP); 44950000=07468500=
|
|
44955000=07468750=
|
|
COMMENT THIS WILL FETCH DESCRIPTOR POINTING TO I/O DESCRIPTOR; 44960000=07468750=
|
|
CHECKPRESENCE; 44965000=07469000=
|
|
44970000=07469250=
|
|
COMMENT THIS WILL CAUSE PRESENCE BIT INTERRUPT IF PREVIOUS I/O IS 44975000=07469250=
|
|
NOT COMPLETED; 44980000=07469500=
|
|
EMITO(DUP); 44985000=07469750=
|
|
EMITO(LOD); 44990000=07469750=
|
|
EMITO(XCH); 44995000=07469750=
|
|
IF ELCLASS = COMMA THEN 45000000=07470000=
|
|
BEGIN 45005000=07470250=
|
|
EMITO(DUP); 45010000=07470500=
|
|
EMITO(LOD); 45015000=07470500=
|
|
STEPIT; 45020000=07470500=
|
|
AEXP; 45025000=07470500=
|
|
EMITD(38, 8, 10); 45030000=07470750=
|
|
EMITO(XCH); 45035000=07470750=
|
|
EMITO(STD); 45040000=07470750=
|
|
EMITO(XCH); 45045000=07470750=
|
|
END; 45050000=07471000=
|
|
EMITO(PRL); 45055000=07471250=
|
|
EMITO(DEL); 45060000=07471250=
|
|
PARENCHECK: 45065000=07471750=
|
|
IF ELCLASS = RTPAREN THEN 45070000=07471750=
|
|
STEPIT 45075000=07471750=
|
|
ELSE 45080000=07471750=
|
|
ERR(104); 45085000=07471750=
|
|
EXIT: 45090000=07472250=
|
|
END RELSESTMT; 45095000=07472250=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%45100000=07472250=
|
|
45105000=07481000=
|
|
COMMENT DOSTMT HANDLES THE DO STATEMENT; 45110000=07481000=
|
|
PROCEDURE DOSTMT; 45115000=07482000=
|
|
BEGIN 45120000=07483000=
|
|
INTEGER 45125000=07483000=
|
|
TL; 45130000=07483000=
|
|
DIALA:= DIALB:= 0; 45135000=07484000=
|
|
ADJUST; 45140000=07484100=
|
|
STEPIT; 45145000=07485000=
|
|
TL:= L; 45150000=07485000=
|
|
STMT; 45155000=07485000=
|
|
IF ELCLASS ^= UNTILV THEN 45160000=07485000=
|
|
ERR(131) 45165000=07486000=
|
|
ELSE 45170000=07486000=
|
|
BEGIN 45175000=07486000=
|
|
STEPIT; 45180000=07487000=
|
|
BEXP; 45185000=07487000=
|
|
EMITB(BBC, BUMPL, TL) 45190000=07487000=
|
|
END 45195000=07488000=
|
|
END DOSTMT; 45200000=07488000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%45205000=07488000=
|
|
45210000=07489000=
|
|
COMMENT WHILESTMT COMPILES THE WHILE STATEMENT; 45215000=07489000=
|
|
PROCEDURE WHILESTMT; 45220000=07490000=
|
|
BEGIN 45225000=07491000=
|
|
INTEGER 45230000=07491000=
|
|
BACK, 45235000=07491000=
|
|
FRONT; 45240000=07491000=
|
|
DIALA:= DIALB:= 0; 45245000=07492000=
|
|
ADJUST; 45250000=07492100=
|
|
STEPIT; 45255000=07493000=
|
|
BACK:= L; 45260000=07493000=
|
|
BEXP; 45265000=07493000=
|
|
FRONT:= BUMPL; 45270000=07493000=
|
|
IF ELCLASS ^= DOV THEN 45275000=07494000=
|
|
ERR(132) 45280000=07494000=
|
|
ELSE 45285000=07494000=
|
|
BEGIN 45290000=07495000=
|
|
STEPIT; 45295000=07495000=
|
|
STMT; 45300000=07495000=
|
|
EMITB(BBW, BUMPL, BACK); 45305000=07495000=
|
|
CONSTANTCLEAN; 45310000=07496000=
|
|
EMITB(BFC, FRONT, L) 45315000=07496000=
|
|
END 45320000=07496000=
|
|
END WHILESTMT; 45325000=07496000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%45330000=07496000=
|
|
45335000=07497000=
|
|
COMMENT GOSTMT COMPILES GO TO STATEMENTS. GOSTMT LOOKS AT THE 45340000=07497000=
|
|
EXPRESSION. IF IT IS SIMPLE ENOUGH WE GO DIRECTLY. 45345000=07498000=
|
|
OTHERWISE A CALL ON THE MCP IS GENERATED IN ORDER TO GET 45350000=07499000=
|
|
STORAGE RETURNED. SEE DEXP AND GENGO; 45355000=07500000=
|
|
PROCEDURE GOSTMT; 45360000=07501000=
|
|
BEGIN 45365000=07502000=
|
|
REAL 45370000=07503000=
|
|
ELBW; 45375000=07503000=
|
|
LABEL 45380000=07504000=
|
|
GOMCP, 45385000=07504000=
|
|
EXIT; 45390000=07504000=
|
|
IF STEPI = TOV THEN 45395000=07505000=
|
|
STEPIT; 45400000=07505000=
|
|
IF ELCLASS = LABELID THEN 45405000=07506000=
|
|
TB1:= TRUE 45410000=07507000=
|
|
ELSE 45415000=07507000=
|
|
IF ELCLASS = SWITCHID THEN 45420000=07507000=
|
|
TB1:= FALSE 45425000=07507000=
|
|
ELSE 45430000=07507000=
|
|
GO GOMCP; 45435000=07507000=
|
|
IF NOT LOCAL(ELBAT[I]) THEN 45440000=07508000=
|
|
GO GOMCP; 45445000=07508000=
|
|
IF TB1 THEN 45450000=07509000=
|
|
BEGIN 45455000=07509000=
|
|
GOGEN(ELBAT[I], BFW); 45460000=07509000=
|
|
STEPIT; 45465000=07509000=
|
|
CONSTANTCLEAN; 45470000=07510000=
|
|
GO EXIT 45475000=07510000=
|
|
END; 45480000=07510000=
|
|
ELBW:= ELBAT[I]; 45485000=07511000=
|
|
IF ELBW < 0 THEN 45490000=07513000=
|
|
BEGIN 45495000=07513000=
|
|
COMMENT THIS IS A MONITORED SWITCH; 45500000=07513000=
|
|
EMITO(MKS); 45505000=07514000=
|
|
PASSALPHA(ELBW); 45510000=07514000=
|
|
EMITPAIR(GNAT(CHARI), LOD); 45515000=07515000=
|
|
PASSMONFILE(TAKE(GIT(ELBW)).SWITMONFILE); 45520000=07516000=
|
|
EMITNUM(0 & CARDNUMBER[46:43:44]); 45525000=07516100=
|
|
EMITV(GNAT(PRINTI)); 45530000=07517000=
|
|
END; 45535000=07518000=
|
|
BANA; 45540000=07519000=
|
|
EMITPAIR(JUNK, ISD); 45545000=07519000=
|
|
IF(GT1:= TAKE(GT2:= GIT(ELBW))).[23:12] = 0 AND ELBW.ADDRESS = 0 45550000=07521000=
|
|
THEN 45555000=07521000=
|
|
BEGIN 45560000=07521000=
|
|
PUT(GT1 & (BUMPL)[23:11:12], GT2); 45565000=07522000=
|
|
EMITB(BBW, L, GT4:= GT1.[11:12]); 45570000=07523000=
|
|
EMITB(BFW, GT4+13, L+3); 45575000=07524000=
|
|
EMITO(NOP); 45580000=07525000=
|
|
EMITO(NOP); 45585000=07525000=
|
|
EMITO(NOP) 45590000=07525000=
|
|
END 45595000=07526000=
|
|
ELSE 45600000=07526000=
|
|
BEGIN 45605000=07526000=
|
|
CALLSWITCH(ELBW); 45610000=07526000=
|
|
EMITO(BFW) 45615000=07526000=
|
|
END; 45620000=07526000=
|
|
GO EXIT; 45625000=07527000=
|
|
GOMCP: 45630000=07528000=
|
|
GOTOG:= FALSE; 45635000=07528000=
|
|
DEXP; 45640000=07528000=
|
|
IF GOTOG THEN 45645000=07529000=
|
|
BEGIN 45650000=07529100=
|
|
EMITO(MKS); 45655000=07529100=
|
|
EMITL(9); 45660000=07529100=
|
|
EMITV(5); 45665000=07529100=
|
|
EMITO(BFW) 45670000=07529100=
|
|
END 45675000=07529200=
|
|
ELSE 45680000=07529200=
|
|
BEGIN 45685000=07529200=
|
|
EMITO(PRTE); 45690000=07529200=
|
|
EMITO(LOD); 45695000=07529200=
|
|
EMITO(BFW) 45700000=07529200=
|
|
END; 45705000=07529200=
|
|
EXIT: 45710000=07530000=
|
|
END GOSTMT; 45715000=07530000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%45720000=07530000=
|
|
45725000=07531000=
|
|
COMMENT GOGEN GENERATES CODE TO GO TO A LABEL, GIVEN THAT LABEL AS A 45730000=07531000=
|
|
PARAMETER. GOGEN ASSUMES THAT THE LABEL IS LOCAL. THE 45735000=07532000=
|
|
PARAMETER BRANCH TYPE TELL WHETHER THE JUMP IS CONDITIONAL45740000=07533000=
|
|
OR NOT; 45745000=07534000=
|
|
PROCEDURE GOGEN(LABELBAT, BRANCHTYPE); 45750000=07535000=
|
|
VALUE 45755000=07536000=
|
|
LABELBAT, 45760000=07536000=
|
|
BRANCHTYPE; 45765000=07536000=
|
|
REAL 45770000=07537000=
|
|
LABELBAT, 45775000=07537000=
|
|
BRANCHTYPE; 45780000=07537000=
|
|
BEGIN 45785000=07538000=
|
|
IF BOOLEAN(GT1:= TAKE(GT2:= GIT(LABELBAT))).[46:1] THEN 45790000=07540000=
|
|
EMITB(BRANCHTYPE, BUMPL, GT1.[11:12]) 45795000=07541000=
|
|
COMMENT LABELR SETS THE SIGN OF THE ADDITIONAL INFO FOR A LABEL 45800000=07541000=
|
|
NEGATIVE WHEN THE LABEL IS ENCOUNTERED. SO THIS MEANS 45805000=07542000=
|
|
THAT WE NOW KNOW WHERE TO GO; 45810000=07543000=
|
|
ELSE 45815000=07544000=
|
|
BEGIN 45820000=07544000=
|
|
EMIT(GT1); 45825000=07544000=
|
|
EMIT(BRANCHTYPE); 45830000=07544000=
|
|
PUT(GT1 & L[11:11:12], GT2) 45835000=07545000=
|
|
END 45840000=07545000=
|
|
END GOGEN; 45845000=07545000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%45850000=07545000=
|
|
45855000=07546000=
|
|
COMMENT SIMPGO IS USED ONLY BY THE IF STMT ROUTINE. IT DETERMINES IF 45860000=07546000=
|
|
A STATEMENT IS A SIMPLE GO TO STATEMENT; 45865000=07547000=
|
|
BOOLEAN PROCEDURE SIMPGO; 45870000=07548000=
|
|
BEGIN 45875000=07549000=
|
|
LABEL 45880000=07549000=
|
|
EXIT; 45885000=07549000=
|
|
IF ELCLASS = GOV THEN 45890000=07551000=
|
|
BEGIN 45895000=07551000=
|
|
IF STEPI = TOV THEN 45900000=07552000=
|
|
STEPIT; 45905000=07552000=
|
|
IF ELCLASS = LABELID THEN 45910000=07553000=
|
|
IF LOCAL(ELBAT[I]) THEN 45915000=07554000=
|
|
BEGIN 45920000=07555000=
|
|
SIMPGO:= TRUE; 45925000=07555000=
|
|
GO EXIT 45930000=07555000=
|
|
END; 45935000=07555000=
|
|
I:= I-1; 45940000=07556000=
|
|
ELCLASS:= GOV 45945000=07556000=
|
|
END; 45950000=07556000=
|
|
EXIT: 45955000=07557000=
|
|
END SIMPGO; 45960000=07557000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%45965000=07557000=
|
|
45970000=07558000=
|
|
COMMENT IFSTMT COMPILES IF STATEMENTS. SPECIAL CARE IS TAKEN TO 45975000=07558000=
|
|
OPTIMIZE CODE IN THE NEIGHBORHOOD OF THE JUMPS. TO SOME 45980000=07559000=
|
|
EXTENT SUPPERFULOUS BRANCHING IS AVOIDED; 45985000=07560000=
|
|
PROCEDURE IFSTMT; 45990000=07561000=
|
|
BEGIN 45995000=07562000=
|
|
REAL 46000000=07562000=
|
|
T1, 46005000=07562000=
|
|
T2; 46010000=07562000=
|
|
LABEL 46015000=07562000=
|
|
EXIT; 46020000=07562000=
|
|
IFCLAUSE; 46025000=07563000=
|
|
IF SIMPGO THEN 46030000=07565000=
|
|
BEGIN 46035000=07565000=
|
|
T1:= ELBAT[I]; 46040000=07566000=
|
|
IF STEPI = ELSEV THEN 46045000=07568000=
|
|
BEGIN 46050000=07568000=
|
|
STEPIT; 46055000=07569000=
|
|
IF SIMPGO THEN 46060000=07571000=
|
|
BEGIN 46065000=07571000=
|
|
GOGEN(ELBAT[I], BFC); 46070000=07572000=
|
|
GOGEN(T1, BFW); 46075000=07572000=
|
|
STEPIT; 46080000=07573000=
|
|
GO TO EXIT 46085000=07573000=
|
|
END 46090000=07573000=
|
|
ELSE 46095000=07573000=
|
|
BEGIN 46100000=07573000=
|
|
EMITLNG; 46105000=07573000=
|
|
GOGEN(T1, BFC); 46110000=07573000=
|
|
STMT; 46115000=07574000=
|
|
GO TO EXIT 46120000=07574000=
|
|
END 46125000=07574000=
|
|
END; 46130000=07574000=
|
|
EMITLNG; 46135000=07575000=
|
|
GOGEN(T1, BFC); 46140000=07575000=
|
|
GO EXIT 46145000=07576000=
|
|
END; 46150000=07576000=
|
|
T1:= BUMPL; 46155000=07577000=
|
|
STMT; 46160000=07577000=
|
|
IF ELCLASS ^= ELSEV THEN 46165000=07578000=
|
|
BEGIN 46170000=07579000=
|
|
DIALA:= DIALB:= 0; 46175000=07579000=
|
|
EMITB(BFC, T1, L); 46180000=07579000=
|
|
GO EXIT 46185000=07579000=
|
|
END; 46190000=07579000=
|
|
STEPIT; 46195000=07580000=
|
|
IF SIMPGO THEN 46200000=07582000=
|
|
BEGIN 46205000=07582000=
|
|
T2:= L; 46210000=07583000=
|
|
L:= T1-2; 46215000=07583000=
|
|
GOGEN(ELBAT[I], BFC); 46220000=07583000=
|
|
L:= T2; 46225000=07583000=
|
|
STEPIT; 46230000=07584000=
|
|
GO EXIT 46235000=07584000=
|
|
END; 46240000=07584000=
|
|
T2:= BUMPL; 46245000=07585000=
|
|
CONSTANTCLEAN; 46250000=07585000=
|
|
EMITB(BFC, T1, L); 46255000=07586000=
|
|
STMT; 46260000=07586000=
|
|
EMITB(BFW, T2, L); 46265000=07586000=
|
|
EXIT: 46270000=07587000=
|
|
END IFSTMT; 46275000=07587000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%46280000=07587000=
|
|
46285000=07588000=
|
|
COMMENT LABELR HANDLES LABELED STATEMENTS. IT PUTS L INTO THE 46290000=07588000=
|
|
ADDITIONAL INFO AND MAKES ITS SIGN NEGATIVE. IT COMPILES 46295000=07589000=
|
|
AT THE SAME TIME ALL THE PREVIOUS FORWARD REFERENCES SET 46300000=07590000=
|
|
UP FOR IT BY GOGEN. (THE ADDITIONAL INFO LINKS TO A LIST 46305000=07591000=
|
|
IN THE CODE ARRAY OF ALL FORWARD REFERENCES); 46310000=07592000=
|
|
PROCEDURE LABELR; 46315000=07593000=
|
|
BEGIN 46320000=07594000=
|
|
LABEL 46325000=07594000=
|
|
EXIT, 46330000=07594000=
|
|
ROUND; 46335000=07594000=
|
|
DEFINE 46340000=07595000=
|
|
ELBATWORD = RR9 #, 46345000=07595000=
|
|
LINK = GT2 #, 46350000=07595000=
|
|
INDEX = GT3 #, 46355000=07595000=
|
|
ADDITIONAL = GT4 #, 46360000=07596000=
|
|
NEXTLINK = GT5 #; 46365000=07596000=
|
|
DO BEGIN 46370000=07597000=
|
|
ADJUST; 46375000=07597000=
|
|
IF STEPI ^= COLON THEN 46380000=07597000=
|
|
BEGIN 46385000=07598000=
|
|
ERR(133); 46390000=07598000=
|
|
GO TO EXIT 46395000=07598000=
|
|
END; 46400000=07598000=
|
|
XMARK(LBLREF); % THIS WILL SORT AHEAD OF DECLARATION 46405000=07598100=
|
|
% WHEN WE GET AROUND TO THE XREF. 46410000=07598200=
|
|
IF NOT LOCAL(ELBATWORD:= ELBAT[I-1]) THEN 46415000=07600000=
|
|
BEGIN 46420000=07600000=
|
|
FLAG(134); 46425000=07600000=
|
|
GO TO ROUND 46430000=07600000=
|
|
END; 46435000=07600000=
|
|
LINK:= (ADDITIONAL:= TAKE(INDEX:= GIT(ELBATWORD))).[11:12]; 46440000=07602000=
|
|
IF ADDITIONAL < 0 THEN 46445000=07603000=
|
|
BEGIN 46450000=07604000=
|
|
FLAG(135); 46455000=07604000=
|
|
GO TO ROUND 46460000=07604000=
|
|
END; 46465000=07604000=
|
|
WHILE LINK ^= 0 DO 46470000=07606000=
|
|
BEGIN 46475000=07606000=
|
|
NEXTLINK:= GET(LINK-2); 46480000=07607000=
|
|
EMITB(GET(LINK-1), LINK, L); 46485000=07608000=
|
|
LINK:= NEXTLINK; 46490000=07609000=
|
|
IF LASTENTRY >= 126 THEN % DONT LET EMITNUM DO IT 46495000=07609100=
|
|
BEGIN 46500000=07609200=
|
|
REAL 46505000=07609200=
|
|
C; % HOLD L FOR A WHILE 46510000=07609200=
|
|
COMMENT THIS IS TO ALLOW FOR MORE THAN 56 LONG 46515000=07609300=
|
|
(>1023 WORD) FORWARD REFERENCES TO A LABEL;46520000=07609400=
|
|
C:= BUMPL; 46525000=07609500=
|
|
CONSTANTCLEAN; 46530000=07609600=
|
|
EMITB(BFW, C, L) 46535000=07609700=
|
|
END; 46540000=07609700=
|
|
END; 46545000=07609700=
|
|
PUT(-ADDITIONAL & L[11:11:12], INDEX); 46550000=07610000=
|
|
IF ELBATWORD < 0 THEN 46555000=07612000=
|
|
BEGIN 46560000=07612000=
|
|
COMMENT THIS LABEL IS EITHER APPEARS IN A DUMP 46565000=07612000=
|
|
OR MONITOR DECLARATION; 46570000=07613000=
|
|
IF RR1:= ADDITIONAL.LABLMONFILE ^= 0 THEN 46575000=07615000=
|
|
BEGIN 46580000=07615000=
|
|
COMMENT THIS CODE IS FOR MONITORED 46585000=07615000=
|
|
LABELS; 46590000=07616000=
|
|
EMITO(MKS); 46595000=07617000=
|
|
PASSALPHA(ELBATWORD); 46600000=07617000=
|
|
EMITPAIR(GNAT(CHARI), LOD); 46605000=07618000=
|
|
PASSMONFILE(RR1); 46610000=07619000=
|
|
EMITNUM(0 & CARDNUMBER[46:43:44]); 46615000=07619100=
|
|
EMITV(GNAT(PRINTI)); 46620000=07620000=
|
|
END; 46625000=07621000=
|
|
IF RR1:= ADDITIONAL.DUMPEE ^= 0 THEN 46630000=07623000=
|
|
BEGIN 46635000=07623000=
|
|
COMMENT EMIT CODE TO INCREMENT THE 46640000=07623000=
|
|
LABEL COUNTER; 46645000=07624000=
|
|
EMITV(RR1); 46650000=07625000=
|
|
EMITL(1); 46655000=07625000=
|
|
EMITO(ADD); 46660000=07625000=
|
|
EMITPAIR(RR1, STD); 46665000=07626000=
|
|
IF RR1:= ADDITIONAL.DUMPOR ^= 0 THEN 46670000=07628000=
|
|
BEGIN 46675000=07628000=
|
|
COMMENT EMIT CODE TO CALL 46680000=07628000=
|
|
THE DUMP ROUTINE; 46685000=07629000=
|
|
STUFFF(RR1); 46690000=07633000=
|
|
EMITO(XCH); 46695000=07634000=
|
|
EMITO(COC); 46700000=07634000=
|
|
EMITO(DEL); 46705000=07641000=
|
|
END; 46710000=07642000=
|
|
END; 46715000=07643000=
|
|
END; 46720000=07644000=
|
|
ROUND: 46725000=07645000=
|
|
ERRORTOG:= TRUE 46730000=07645000=
|
|
END 46735000=07645000=
|
|
UNTIL STEPI ^= LABELID; 46740000=07645000=
|
|
EXIT: 46745000=07646000=
|
|
END LABELR; 46750000=07646000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%46755000=07646000=
|
|
PROCEDURE CASESTMT; 46760000=07646100=
|
|
BEGIN 46765000=07646110=
|
|
COMMENT THE CASE STATEMENT HAS THE FOLLOWING FORM: 46770000=07646110=
|
|
CASE <ARITH EXP> OF BEGIN <COMPOUND TAIL> 46775000=07646120=
|
|
AT EXECUTION THE CASE STATEMENT SELECTS ONE OF THE STATEMENTS 46780000=07646130=
|
|
IN THE <COMPOUND TALE>, DEPENDING ON THE VALUE OF THE <ARITH EXP>, 46785000=07646140=
|
|
ONLY THE SELECTED STATEMENT IS EXECUTED AND CONTROL RESUMES AFTER 46790000=07646150=
|
|
THE <COMPOUND TAIL>. IF THERE ARE N STATEMENTS IN THE 46795000=07646160=
|
|
<COMPOUND TAIL>, THEY MAY BE CONSIDERED NUMBERED 0,1,...,N-1. 46800000=07646170=
|
|
AND THE <ARITH EXP> MUST TAKE ON ONLY THESE VALUES. OTHER VALUES 46805000=07646180=
|
|
WILL RESULT IN AN INVALID INDEX TERMINATION OF THE OBJECT PROGRAM. 46810000=07646190=
|
|
THE STATEMENTS IN THE <COMPOUND TAIL> MAY BE ANY EXECUTABLE 46815000=07646200=
|
|
STATEMENTS, INCLUDING COMPOUND STATEMENTS, BLOCKS, CASE STATEMENTS 46820000=07646210=
|
|
AND NULL STATEMENTS. THE CODE GENERATED IS AS FOLLOWS: 46825000=07646220=
|
|
<ARITH EXP> 46830000=07646230=
|
|
OPDC ARRAY 46835000=07646240=
|
|
BFW 46840000=07646250=
|
|
STMT 0 46845000=07646260=
|
|
BRANCH TO RESUME 46850000=07646270=
|
|
STMT 1 46855000=07646280=
|
|
BRANCH TO RESUME 46860000=07646290=
|
|
. 46865000=07646300=
|
|
. 46870000=07646310=
|
|
. 46875000=07646320=
|
|
STMT N-1 46880000=07646330=
|
|
RESUME: 46885000=07646340=
|
|
"ARRAY" IS COMPILED AS A TYPE-2 SEGMENT OF N WORDS AND IS 46890000=07646350=
|
|
CHANGED TO A DATA ARRAY AT THE FIRST REFERENCE. IT IS SUBSCRIPTED 46895000=07646360=
|
|
BY THE VALUE OF <ARITH EXP> AND CONTAINS SYLLABLE COUNTS 46900000=07646370=
|
|
FOR THE BRANCH TO EACH OF THE N STATEMENTS. THE BRANCH TO RESUME 46905000=07646375=
|
|
IS OMITTED FOR A NULL STATEMENT. INSTEAD, THE INITIAL BRANCH 46910000=07646380=
|
|
TRANSFERS TO RESUME DIRECTLY; 46915000=07646385=
|
|
REAL 46920000=07646390=
|
|
LINK, 46925000=07646390=
|
|
TEMP, 46930000=07646390=
|
|
N, 46935000=07646390=
|
|
ADR, 46940000=07646390=
|
|
PRT, 46945000=07646390=
|
|
NULL; 46950000=07646390=
|
|
BOOLEAN 46955000=07646395=
|
|
GOTOG; 46960000=07646395=
|
|
REAL ARRAY 46965000=07646400=
|
|
TEDOC[0:7, 0:127]; 46970000=07646400=
|
|
LABEL 46975000=07646410=
|
|
LOOP, 46980000=07646410=
|
|
XIT; 46985000=07646410=
|
|
LINK:= N:= NULL:= 0; 46990000=07646420=
|
|
STEPIT; 46995000=07646430=
|
|
AEXP; 47000000=07646430=
|
|
IF STEPI ^= BEGINV THEN 47005000=07646440=
|
|
BEGIN 47010000=07646440=
|
|
ERR(70); 47015000=07646440=
|
|
GO TO XIT 47020000=07646440=
|
|
END; 47025000=07646440=
|
|
EMITV(PRT:= GETSPACE(TRUE, -3)); % CASE STMNT. DESCR. 47030000=07646450=
|
|
EMITO(BFW); 47035000=07646460=
|
|
ADR:= L; 47040000=07646460=
|
|
LOOP: 47045000=07646475=
|
|
ERRORTOG:= TRUE; 47050000=07646475=
|
|
IF STEPI = SEMICOLON THEN 47055000=07646480=
|
|
BEGIN 47060000=07646485=
|
|
COMMENT NULL STATEMENT; 47065000=07646485=
|
|
TEDOC[N.[9:3], N.[6:7]]:= NULL; 47070000=07646490=
|
|
NULL:= N:= N+1; 47075000=07646495=
|
|
GO TO LOOP; 47080000=07646495=
|
|
END; 47085000=07646500=
|
|
TEDOC[N.[9:3], N.[6:7]]:= L-ADR; 47090000=07646510=
|
|
N:= N+1; 47095000=07646510=
|
|
IF GOTOG:= SIMPGO THEN 47100000=07646515=
|
|
ELBAT[I:= I-1]:= ELCLASS:= GOV; 47105000=07646515=
|
|
STMT; 47110000=07646520=
|
|
IF ELCLASS = SEMICOLON THEN 47115000=07646525=
|
|
BEGIN 47120000=07646530=
|
|
IF NOT GOTOG THEN 47125000=07646530=
|
|
BEGIN 47130000=07646533=
|
|
EMIT(LINK); 47135000=07646533=
|
|
LINK:= L:= L+1; 47140000=07646533=
|
|
END; 47145000=07646533=
|
|
GO TO LOOP; 47150000=07646535=
|
|
END 47155000=07646538=
|
|
ELSE 47160000=07646538=
|
|
IF ELCLASS = ENDV THEN 47165000=07646538=
|
|
BEGIN 47170000=07646540=
|
|
IF NOT GOTOG THEN 47175000=07646540=
|
|
BEGIN 47180000=07646543=
|
|
EMIT(LINK); 47185000=07646543=
|
|
LINK:= L:= L+1; 47190000=07646543=
|
|
END; 47195000=07646543=
|
|
TEDOC[N.[9:3], N.[6:7]]:= L-ADR; 47200000=07646545=
|
|
N:= N+1; 47205000=07646548=
|
|
END; 47210000=07646550=
|
|
IF ELCLASS ^= ENDV THEN 47215000=07646555=
|
|
BEGIN 47220000=07646555=
|
|
ERR(71); 47225000=07646555=
|
|
GO TO LOOP 47230000=07646555=
|
|
END; 47235000=07646555=
|
|
N:= N-1; 47240000=07646556=
|
|
WHILE NULL ^= 0 DO 47245000=07646560=
|
|
BEGIN 47250000=07646565=
|
|
TEMP:= TEDOC[(NULL:= NULL-1).[9:3], NULL.[6:7]]; 47255000=07646565=
|
|
TEDOC[NULL.[9:3], NULL.[6:7]]:= L-ADR; 47260000=07646570=
|
|
NULL:= TEMP; 47265000=07646575=
|
|
END; 47270000=07646580=
|
|
ENDTOG:= TRUE; 47275000=07646585=
|
|
COMMENT SKIP ANY COMMENTS AFTER "END"; 47280000=07646590=
|
|
DO 47285000=07646595=
|
|
STOPDEFINE:= TRUE 47290000=07646595=
|
|
UNTIL STEPI <= ENDV AND ELCLASS >= UNTILV OR NOT ENDTOG; 47295000=07646600=
|
|
ENDTOG:= FALSE; 47300000=07646610=
|
|
COMMENT DEFINE TEDOC AS TYPE-2 SEGMENT; 47305000=07646620=
|
|
MOVECODE(TEDOC, EDOC); 47310000=07646630=
|
|
BUILDLINE:= BOOLEAN(2*REAL(BUILDLINE)); 47315000=07646635=
|
|
TEMP:= SGNO; 47320000=07646640=
|
|
IF LISTER OR SEGSTOG THEN 47325000=07646640=
|
|
SEGMENTSTART; 47330000=07646640=
|
|
SGNO:= SGAVL; 47335000=07646650=
|
|
Z:= PROGDESCBLDR(LDES, 0, PRT); 47340000=07646660=
|
|
SEGMENT(-N, SGNO, TEMP); 47345000=07646670=
|
|
SGAVL:= SGAVL+1; 47350000=07646680=
|
|
SGNO:= TEMP; 47355000=07646680=
|
|
BUILDLINE:= BUILDLINE.[1:1]; 47360000=07646685=
|
|
MOVECODE(TEDOC, EDOC); 47365000=07646690=
|
|
COMMENT FIX UP BRANCHES TO RESUME POINT; 47370000=07646700=
|
|
IF(L-ADR) > 1019 THEN 47375000=07646705=
|
|
ADJUST; % 47380000=07646705=
|
|
WHILE LINK ^= 0 DO 47385000=07646710=
|
|
BEGIN 47390000=07646720=
|
|
TEMP:= GET(LINK-2); 47395000=07646720=
|
|
EMITB(BFW, LINK, L); 47400000=07646730=
|
|
LINK:= TEMP; 47405000=07646740=
|
|
IF LASTENTRY >= 126 THEN 47410000=07646750=
|
|
BEGIN 47415000=07646760=
|
|
REAL 47420000=07646760=
|
|
C; 47425000=07646760=
|
|
COMMENT PERMITS SEVERAL LONG BRANCHES IF NECESSARY; 47430000=07646770=
|
|
C:= BUMPL; 47435000=07646780=
|
|
CONSTANTCLEAN; 47440000=07646790=
|
|
EMITB(BFW, C, L); 47445000=07646800=
|
|
END; 47450000=07646810=
|
|
END; 47455000=07646820=
|
|
XIT: 47460000=07646840=
|
|
END CASESTMT; 47465000=07646840=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%47470000=07646840=
|
|
47475000=07647000=
|
|
COMMENT THE FOLLOWING PROCEDURE HANDLES THE FILL STATEMENT. 47480000=07647000=
|
|
IT EMITS CODE TO PASS THE ROW TO BE FILLED AND TO PASS 47485000=07647500=
|
|
THE INDEX IN THE SEGMENT DICTIONARY OF THE FILL SEGMENT. 47490000=07648000=
|
|
THESE SEGMENTS LOOK LIKE ANY OTHER SEGMENT TO THE MCP. 47495000=07648500=
|
|
NO FILL SEGMENT IS EVER BROUGHT INTO CORE.THE SEGMENT 47500000=07649000=
|
|
RESIDES ON THE DISK AND IS READ INTO THE ROW DESIGNATED 47505000=07649500=
|
|
BY THE FILL STATEMENT EVERY TIME THE FILL STATEMENT IS 47510000=07650000=
|
|
EXECUTED.STRINGCONSTANTS,LITERAL ,AND NONLITERAL NUMBERS 47515000=07650500=
|
|
ARE ALL CONVERTED BY THE SCANNER AND NUMBER BUILDER.OCTAL 47520000=07651000=
|
|
NUMBERS LOOK LIKE IDENITIFERS TO FILLSTMT AND ARE CONVERTED 47525000=07651500=
|
|
BY OCTIZE.AFTER BUILDING THE SEGMENT AN ENTRY IS MADE IN 47530000=07652000=
|
|
PDPRT TO SUPPLY INFO TO BUILD A DISK DESCRIPTOR IN THE 47535000=07652500=
|
|
SEGMENT DICTIONARY.THE COMMUNICATE LITERAL IS 7; 47540000=07653000=
|
|
PROCEDURE FILLSTMT; 47545000=07653500=
|
|
BEGIN 47550000=07654000=
|
|
LABEL 47555000=07654500=
|
|
EXIT; 47560000=07654500=
|
|
DEFINE 47565000=07655000=
|
|
PARENCOUNTER = RR1 #, 47570000=07655500=
|
|
T = RR2 #, 47575000=07656000=
|
|
J = RR3 #; 47580000=07656000=
|
|
REAL 47581000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 47581100
|
|
ARRAY 47585000=07656500=
|
|
TEDOC[0:7, 0:127], 47590000=07656500=
|
|
FILLTEMP[0:1022]; 47595000
|
|
BOOLEAN PROCEDURE FILLIT(A); 47600000=07657000=
|
|
ARRAY 47605000=07657000=
|
|
A[0]; 47610000=07657000=
|
|
BEGIN 47615000=07657500=
|
|
REAL 47620000=07658000=
|
|
T1, 47625000=07658000=
|
|
T2, 47630000
|
|
T3; 47635000
|
|
BOOLEAN 47640000=07658500=
|
|
BOO; 47645000=07658500=
|
|
LABEL 47650000=07659000=
|
|
CHECK, 47655000=07659000=
|
|
GOOFUP, 47660000
|
|
EXIT; 47665000
|
|
PARENCOUNTER:= PARENCOUNTER+1; 47670000=07659500=
|
|
WHILE T < 1023 DO 47675000=07660000=
|
|
BEGIN 47680000=07660500=
|
|
IF STEPI > IDMAX THEN 47685000=07661000=
|
|
BEGIN 47690000=07661500=
|
|
IF ELCLASS = LITNO THEN 47695000=07662000=
|
|
IF TABLE(I+1) = LEFTPAREN THEN 47700000=07662500=
|
|
BEGIN 47705000=07663000=
|
|
T1:= ELBAT[I].ADDRESS; 47710000=07663500=
|
|
T2:= T; 47715000=07663500=
|
|
STEPIT; 47720000=07664000=
|
|
IF FILLIT(A) THEN 47725000=07664000=
|
|
GO GOOFUP; 47730000=07664000=
|
|
IF T1 = 0 THEN 47735000=07664500=
|
|
T:= T2 47740000=07665000=
|
|
ELSE 47745000=07665000=
|
|
BEGIN 47750000=07665000=
|
|
IF(T3:= (T1-1)*(T-T2))+T > 1022 THEN 47755000=07665500=
|
|
BEGIN 47760000=07666000=
|
|
ERROR(305); 47765000=07666000=
|
|
GO GOOFUP 47770000=07666000=
|
|
END; %>102347775000=07666000=
|
|
MOVE(T3, A, T2, A, T); 47780000=07666500=
|
|
T:= T+T3; 47785000=07666500=
|
|
END; 47790000=07667000=
|
|
GO CHECK; 47795000=07667500=
|
|
END REPEAT PART; 47800000=07668000=
|
|
IF(BOO:= ELCLASS = ADOP) THEN 47805000=07668500=
|
|
STEPIT; 47810000=07668500=
|
|
IF ELCLASS ^= LITNO AND ELCLASS ^= NONLITNO THEN 47815000=07669000=
|
|
IF ELCLASS ^= STRING AND (ELCLASS ^= STRNGCON OR BOO) THEN 47820000=07669500=
|
|
BEGIN 47825000=07670000=
|
|
ERROR(302); 47830000=07670000=
|
|
GO GOOFUP 47835000=07670000=
|
|
END; % WHATISIT. 47840000=07670000=
|
|
IF BOO THEN 47845000=07670500=
|
|
C:= C & ELBAT[I-1][46:26:1]; 47850000=07670500=
|
|
IF ELCLASS = STRING THEN 47855000=07671000=
|
|
BEGIN 47860000=07671500=
|
|
IF(T2:= T+(COUNT+7) DIV 8-1) > 1022 THEN 47865000=07672000=
|
|
BEGIN 47870000=07672500=
|
|
ERROR(305); 47875000=07672500=
|
|
GO GOOFUP 47880000=07672500=
|
|
END; % > 1023. 47885000=07672500=
|
|
T3:= 6" "; 47890000=07673000=
|
|
A[T2]:= T3; 47895000=07673000=
|
|
MOVECHARACTERS(COUNT, ACCUM, 1, 3, A, T, 0); 47900000=07673500=
|
|
T:= T2; 47905000=07674000=
|
|
END 47910000=07675000=
|
|
ELSE 47915000=07675000=
|
|
A[T]:= C; 47920000=07675000=
|
|
END 47925000=07676000=
|
|
ELSE 47930000=07676000=
|
|
IF COUNT <= 19 AND ACCUM[1].[29:18] = 6"OCT" THEN 47935000=07676000=
|
|
BEGIN % GET RID OF "OCT" FOR OCTIZE. 47940000=07676500=
|
|
MOVECHARACTERS(COUNT-3, ACCUM, 1, 6, ACCUM, 1, 3); 47945000=07677000=
|
|
IF OCTIZE(ACCUM, 1, A, T, 19-COUNT, COUNT-3) THEN 47950000=07677500=
|
|
FLAG(303); % NON-OCTAL CHARACTER. 47955000=07678000=
|
|
END 47960000=07679000=
|
|
ELSE 47965000=07679000=
|
|
BEGIN 47970000=07679000=
|
|
ERROR(302); 47975000=07679000=
|
|
GO GOOFUP 47980000=07679000=
|
|
END; % WHATISIT. 47985000=07679000=
|
|
T:= T+1; 47990000=07679500=
|
|
CHECK: 47995000=07680500=
|
|
IF STEPI ^= COMMA THEN 48000000=07680500=
|
|
GO EXIT; 48005000=07680500=
|
|
END T LOOP; 48010000=07681000=
|
|
ERROR(305); % > 1023 ITEMS IN LIST. 48015000=07681500=
|
|
GOOFUP: 48020000=07682500=
|
|
FILLIT:= TRUE; 48025000=07682500=
|
|
EXIT: 48030000=07683500=
|
|
PARENCOUNTER:= PARENCOUNTER-REAL(ELCLASS = RTPAREN); 48035000=07683500=
|
|
END RECURSIVE FILLIT; 48040000=07684000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%48045000=07684000=
|
|
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN 48050000=07684500=
|
|
BEGIN 48055000=07685000=
|
|
IF ELCLASS = FILEID OR ELCLASS = SUPERFILEID THEN 48060000=07685500=
|
|
MAKEALABEL 48065000=07686000=
|
|
ELSE 48070000=07686000=
|
|
ERROR(300); % NO ARRAY ID. 48075000=07686000=
|
|
GO EXIT; 48080000=07686500=
|
|
END; 48085000=07687000=
|
|
TVAR:= FL; 48089000
|
|
VARIABLE(TVAR); 48090000
|
|
IF TABLE(I-2) ^= FACTOP THEN 48095000=07687500=
|
|
FLAG(304); % NOT ARR. ROW. 48100000=07687500=
|
|
XMARK(ASSIGNREF); % FILL STATEMENT 48105000=07687600=
|
|
IF ELCLASS ^= WITHV THEN 48110000=07688000=
|
|
BEGIN 48115000=07688500=
|
|
ERROR(301); 48120000=07688500=
|
|
GO EXIT 48125000=07688500=
|
|
END; % MISSING "WITH". 48130000=07688500=
|
|
STREAMTOG:= TRUE; 48135000=07689000=
|
|
IF TABLE(I+1) <= IDMAX THEN 48140000=07689500=
|
|
IF Q = 6"7INQUI" THEN 48145000=07690000=
|
|
BEGIN 48150000=07690500=
|
|
STREAMTOG:= FALSE; 48155000=07691000=
|
|
I:= I+1; 48160000=07691000=
|
|
STEPIT; 48165000=07691000=
|
|
EMITPAIR(9, COM); 48170000=07691500=
|
|
EMITO(DEL); 48175000=07691500=
|
|
GO EXIT; 48180000=07692000=
|
|
END; 48185000=07692500=
|
|
EMITNUM(SGAVL); 48190000=07693000=
|
|
EMITPAIR(7, COM); 48195000=07693000=
|
|
EMITO(DEL); 48200000=07693000=
|
|
EMITO(DEL); 48205000=07693000=
|
|
IF LISTER OR SEGSTOG THEN 48210000=07693500=
|
|
SEGMENTSTART; 48215000=07693500=
|
|
MOVECODE(TEDOC, EDOC); 48220000=07694000=
|
|
PARENCOUNTER:= T:= 0; 48225000=07694000=
|
|
BUILDLINE:= BOOLEAN(2*REAL(BUILDLINE)); 48230000=07694500=
|
|
IF FILLIT(FILLTEMP) THEN % DO NOTHING. 48235000=07695000=
|
|
ELSE 48240000=07695500=
|
|
IF PARENCOUNTER ^= 1 THEN 48245000=07695500=
|
|
ERROR(306) % ODD # OF PARENS. 48250000=07695500=
|
|
ELSE 48255000=07696000=
|
|
BEGIN 48260000=07696000=
|
|
FOR J:= 0 STEP 32 UNTIL T DO 48265000=07696500=
|
|
MOVE(32, FILLTEMP, J, EDOC[J.[9:3],*], J.[6:7]); 48270000=07697000=
|
|
SEGMENT(T, SGAVL, SGNO); 48275000=07697500=
|
|
END; 48280000=07698000=
|
|
MOVECODE(TEDOC, EDOC); 48285000=07698500=
|
|
STREAMTOG:= FALSE; 48290000=07698500=
|
|
BUILDLINE:= BUILDLINE.[1:1]; 48295000=07699000=
|
|
SGAVL:= SGAVL+1; 48300000=07699000=
|
|
EXIT: 48305000=07700000=
|
|
END FILLSTMT; 48310000=07700000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%48315000=07700000=
|
|
48320000=07710000=
|
|
COMMENT STMT DIRECTS TRAFFIC TO THE VARIOUS STATEMENT ROUTINES. SOME 48325000=07710000=
|
|
CARE IS TAKEN TO PICK UP EXTRANEOUS DECLARATIONS. THIS 48330000=07711000=
|
|
WILL SOMETIMES CAUSE ADDITIONAL ERROR MESSAGES. THIS IS 48335000=07712000=
|
|
AN IMPERFECT ANALYSIS OF BEGIN-END PAIRS; 48340000=07713000=
|
|
PROCEDURE STMT; 48345000=07714000=
|
|
BEGIN 48350000=07715000=
|
|
REAL 48351000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 48352000
|
|
LABEL 48355000=07716000=
|
|
AGAIN, 48360000=07716000=
|
|
LERR, 48365000=07716000=
|
|
LDEC, 48370000=07716000=
|
|
LPROC, 48375000=07716000=
|
|
LSPROC, 48380000=07716000=
|
|
LVAR, 48385000=07716000=
|
|
LAB, 48390000=07716000=
|
|
LREAD, 48395000=07716000=
|
|
LWRITE, 48400000=07717000=
|
|
LSPACE, 48405000=07717000=
|
|
LCLOSE, 48410000=07717000=
|
|
LLOCK, 48415000=07717000=
|
|
LRWND, 48420000=07717000=
|
|
LDBL, 48425000=07717000=
|
|
LFOR, 48430000=07717000=
|
|
LWHILE, 48435000=07717000=
|
|
LDO, 48440000=07717000=
|
|
LFILL, 48445000=07717000=
|
|
LIF, 48450000=07718000=
|
|
LGO, 48455000=07718000=
|
|
LRELSE, 48460000=07718000=
|
|
LBEG, 48465000=07718000=
|
|
LBRK, 48470000=07718000=
|
|
EXIT; 48475000=07718000=
|
|
SWITCH 48480000=07719000=
|
|
S:= LPROC, 48485000=07720000=
|
|
LERR, 48490000=07720000=
|
|
LSPROC, 48495000=07720000=
|
|
LERR, 48500000=07720000=
|
|
LERR, 48505000=07720000=
|
|
LERR, 48510000=07720000=
|
|
LERR, 48515000=07721000=
|
|
LPROC, 48520000=07721000=
|
|
LPROC, 48525000=07721000=
|
|
LPROC, 48530000=07721000=
|
|
LPROC, 48535000=07721000=
|
|
LVAR, 48540000=07721000=
|
|
LVAR, 48545000=07721000=
|
|
LVAR, 48550000=07722000=
|
|
LVAR, 48555000=07723000=
|
|
LVAR, 48560000=07723000=
|
|
LVAR, 48565000=07723000=
|
|
LVAR, 48570000=07723000=
|
|
LVAR, 48575000=07723000=
|
|
LAB, 48580000=07723000=
|
|
LERR, 48585000=07723000=
|
|
LERR, 48590000=07724000=
|
|
LERR, 48595000=07724000=
|
|
LERR, 48600000=07724000=
|
|
LERR, 48605000=07724000=
|
|
LDEC, 48610000=07724000=
|
|
LREAD, 48615000=07724000=
|
|
LWRITE, 48620000=07724000=
|
|
LSPACE, 48625000=07725000=
|
|
LCLOSE, 48630000=07725000=
|
|
LLOCK, 48635000=07725000=
|
|
LRWND, 48640000=07725000=
|
|
LDBL, 48645000=07725000=
|
|
LFOR, 48650000=07725000=
|
|
LWHILE, 48655000=07725000=
|
|
LDO, 48660000=07726000=
|
|
EXIT, 48665000=07726000=
|
|
EXIT, 48670000=07726000=
|
|
EXIT, 48675000=07726000=
|
|
LFILL, 48680000=07726000=
|
|
EXIT, 48685000=07726000=
|
|
LIF, 48690000=07726000=
|
|
LGO, 48695000=07727000=
|
|
LRELSE, 48700000=07727000=
|
|
LBEG; 48705000=07727000=
|
|
COMMENT THESE ADDITIONS ARE BEING MADE TO FORCE 48710000=07727010=
|
|
CONSTANTCLEAN ACTION WHEN IT APPEARS THAT CONSTANTS WILL BE 48715000=07727020=
|
|
GENERATED IN THE STACK WHICH ARE TOO FAR AWAY AND CREL 48720000=07727030=
|
|
ADDRESSING IS NOT POSSIBLE; 48725000=07727040=
|
|
IF LASTENTRY ^= 0 THEN 48730000=07727050=
|
|
BEGIN 48735000=07727055=
|
|
GT2:= INFO[0, 255]; 48740000=07727055=
|
|
DO 48745000=07727060=
|
|
GT1:= GT2 48750000=07727060=
|
|
UNTIL GT2:= GET(GT1) = 4095; 48755000=07727060=
|
|
IF L-GT1 > 400 THEN 48760000=07727065=
|
|
BEGIN 48765000=07727070=
|
|
GT1:= BUMPL; 48770000=07727070=
|
|
CONSTANTCLEAN; 48775000=07727075=
|
|
EMITB(BFW, GT1, L); 48780000=07727080=
|
|
END; 48785000=07727085=
|
|
END; 48790000=07727090=
|
|
STACKCT:= 0; 48795000=07727100=
|
|
AGAIN: 48800000=07728000=
|
|
GO TO S[ELCLASS-SWITCHID]; 48805000=07728000=
|
|
IF ELCLASS = 0 THEN 48810000=07728500=
|
|
BEGIN 48815000=07729000=
|
|
UNKNOWNSTMT; 48820000=07729000=
|
|
GO TO EXIT 48825000=07729000=
|
|
END; 48830000=07729000=
|
|
IF ELCLASS = FAULTID THEN 48835000=07729100=
|
|
BEGIN 48840000=07729100=
|
|
FAULTSTMT; 48845000=07729100=
|
|
GO EXIT 48850000=07729100=
|
|
END; 48855000=07729100=
|
|
IF ELCLASS = FILEID OR ELCLASS = SUPERFILEID THEN 48860000=07729190=
|
|
BEGIN 48865000=07729200=
|
|
GT1:= FILEATTRIBUTEHANDLER(FS); 48870000=07729200=
|
|
GO EXIT 48875000=07729200=
|
|
END; 48880000=07729200=
|
|
FLAG(145); 48885000=07729500=
|
|
LERR: 48890000=07730000=
|
|
ERR(144); 48895000=07730000=
|
|
GO TO EXIT; 48900000=07730000=
|
|
LDEC: 48905000=07731000=
|
|
FLAG(146); 48910000=07731000=
|
|
IF TABLE(I-2) = ENDV AND MODE > 0 THEN 48915000=07733000=
|
|
BEGIN 48920000=07733000=
|
|
I:= I-2; 48925000=07733000=
|
|
ELCLASS:= ENDV; 48930000=07733000=
|
|
GO TO EXIT 48935000=07733000=
|
|
END; 48940000=07733000=
|
|
I:= I-1; 48945000=07734000=
|
|
ERRORTOG:= TRUE; 48950000=07734000=
|
|
BLOCK(FALSE); 48955000=07734000=
|
|
ELCLASS:= TABLE(I:= I-1); 48960000=07735000=
|
|
GO TO EXIT; 48965000=07735000=
|
|
LPROC: 48970000=07736000=
|
|
PROCSTMT(TRUE); 48975000=07736000=
|
|
GO TO EXIT; 48980000=07736000=
|
|
LSPROC: 48985000=07737000=
|
|
STRMPROCSTMT; 48990000=07737000=
|
|
GO TO EXIT; 48995000=07737000=
|
|
LVAR: 49000000=07738000=
|
|
TVAR:= FS; 49001000
|
|
VARIABLE(TVAR); 49005000
|
|
GO TO EXIT; 49010000=07738000=
|
|
LAB: 49015000=07739000=
|
|
LABELR; 49020000=07739000=
|
|
GO TO AGAIN; 49025000=07739000=
|
|
LREAD: 49030000=07740000=
|
|
READSTMT; 49035000=07740000=
|
|
GO TO EXIT; 49040000=07740000=
|
|
LWRITE: 49045000=07741000=
|
|
WRITESTMT; 49050000=07741000=
|
|
GO TO EXIT; 49055000=07741000=
|
|
LSPACE: 49060000=07742000=
|
|
SPACESTMT; 49065000=07742000=
|
|
GO TO EXIT; 49070000=07742000=
|
|
LCLOSE: 49075000=07743000=
|
|
CLOSESTMT; 49080000=07743000=
|
|
GO TO EXIT; 49085000=07743000=
|
|
LLOCK: 49090000=07744000=
|
|
LOCKSTMT; 49095000=07744000=
|
|
GO TO EXIT; 49100000=07744000=
|
|
LRWND: 49105000=07745000=
|
|
RWNDSTMT; 49110000=07745000=
|
|
GO TO EXIT; 49115000=07745000=
|
|
LDBL: 49120000=07746000=
|
|
DBLSTMT; 49125000=07746000=
|
|
GO TO EXIT; 49130000=07746000=
|
|
LFOR: 49135000=07747000=
|
|
FORSTMT; 49140000=07747000=
|
|
GO TO EXIT; 49145000=07747000=
|
|
LWHILE: 49150000=07748000=
|
|
WHILESTMT; 49155000=07748000=
|
|
GO TO EXIT; 49160000=07748000=
|
|
LDO: 49165000=07749000=
|
|
DOSTMT; 49170000=07749000=
|
|
GO TO EXIT; 49175000=07749000=
|
|
LFILL: 49180000=07750000=
|
|
FILLSTMT; 49185000=07750000=
|
|
GO TO EXIT; 49190000=07750000=
|
|
LIF: 49195000=07751000=
|
|
IFSTMT; 49200000=07751000=
|
|
GO TO EXIT; 49205000=07751000=
|
|
LGO: 49210000=07752000=
|
|
GOSTMT; 49215000=07752000=
|
|
GO TO EXIT; 49220000=07752000=
|
|
LRELSE: 49225000=07753000=
|
|
RELSESTMT; 49230000=07753000=
|
|
GO TO EXIT; 49235000=07753000=
|
|
LBEG: 49240000=07754000=
|
|
IF STEPI = DECLARATORS THEN 49245000=07755000=
|
|
BEGIN 49250000=07755000=
|
|
I:= I-1; 49255000=07755000=
|
|
BLOCK(FALSE) 49260000=07755000=
|
|
END 49265000=07756000=
|
|
ELSE 49270000=07756000=
|
|
COMPOUNDTAIL; 49275000=07756000=
|
|
EXIT: 49280000=07757000=
|
|
END STMT; 49285000=07757000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%49290000=07757000=
|
|
PROCEDURE CMPLXSTMT; 49295000=07777777=
|
|
FORWARD; 49300000=07777777=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%49305000=07777777=
|
|
PROCEDURE UNKNOWNSTMT; 49310000=07800000=
|
|
BEGIN 49315000=07801000=
|
|
LABEL 49320000=07801000=
|
|
XXX, 49325000=07801000=
|
|
E; 49330000
|
|
REAL 49335000=07802000=
|
|
TVAR, % FOR VARIABLE() NAME PARAM 49336000
|
|
J, 49340000=07802000=
|
|
N, 49345000
|
|
C; 49350000
|
|
IF Q = 6"5BREAK" THEN 49355000=07803000=
|
|
BEGIN 49360000=07804000=
|
|
EMIT(0); 49365000=07804000=
|
|
EMIT(48); 49370000=07805000=
|
|
EMITO(COM); 49375000=07806000=
|
|
EMITO(DEL); 49380000=07807000=
|
|
STEPIT; 49385000=07808000=
|
|
GO TO XXX; 49390000=07809000=
|
|
END; 49395000=07810000=
|
|
IF Q = 6"7COMPL" THEN 49400000=07810100=
|
|
BEGIN 49405000=07810100=
|
|
CMPLXSTMT; 49410000=07810100=
|
|
GO XXX 49415000=07810100=
|
|
END; 49420000=07810100=
|
|
IF Q = 6"3ZIP00" THEN 49425000=07811000=
|
|
BEGIN 49430000=07812000=
|
|
IF TABLE(I+1) = WITHV THEN 49435000=07812000=
|
|
BEGIN 49440000=07813000=
|
|
STEPIT; 49445000=07813000=
|
|
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN 49450000=07814100=
|
|
IF ELCLASS = FILEID OR ELCLASS = SUPERFILEID THEN 49455000=07814300=
|
|
PASSFILE 49460000=07814400=
|
|
ELSE 49465000=07814400=
|
|
GO E 49470000=07814500=
|
|
ELSE 49475000=07814500=
|
|
BEGIN 49480000=07814600=
|
|
TVAR:= FL; 49481000
|
|
VARIABLE(TVAR); 49485000
|
|
IF TABLE(I-2) ^= FACTOP THEN 49490000=07816000=
|
|
GO TO E; 49495000=07816000=
|
|
END; 49500000=07816100=
|
|
EMIT(16); 49505000=07817000=
|
|
EMITO(COM); 49510000=07817000=
|
|
EMITO(DEL); 49515000=07817000=
|
|
GO TO XXX; 49520000=07818000=
|
|
END; 49525000=07819000=
|
|
N:= 1; 49530000=07820000=
|
|
C:= 8 49535000=07821000=
|
|
END 49540000=07821100=
|
|
ELSE 49545000=07821100=
|
|
IF Q = 6"5CHAIN" THEN 49550000=07821100=
|
|
BEGIN 49555000=07821200=
|
|
N:= 1; 49560000=07821200=
|
|
C:= 37 49565000=07821200=
|
|
END 49570000=07822000=
|
|
ELSE 49575000=07822000=
|
|
IF Q = 6"4WHEN0" THEN 49580000=07822000=
|
|
BEGIN 49585000=07823000=
|
|
N:= 0; 49590000=07823000=
|
|
C:= 6 49595000=07823000=
|
|
END 49600000=07824000=
|
|
ELSE 49605000=07824000=
|
|
IF Q = 6"4WAIT0" THEN 49610000=07824000=
|
|
BEGIN 49615000=07825000=
|
|
N:= 1; 49620000=07825000=
|
|
C:= 2 49625000=07825000=
|
|
END 49630000=07825500=
|
|
ELSE 49635000=07825500=
|
|
IF Q = 6"4CASE0" THEN 49640000=07825500=
|
|
BEGIN 49645000=07825500=
|
|
CASESTMT; 49650000=07825500=
|
|
GO TO XXX 49655000=07825500=
|
|
END 49660000=07826000=
|
|
ELSE 49665000=07826000=
|
|
IF Q = 6"4SORT0" THEN 49670000=07826000=
|
|
BEGIN 49675000=07826000=
|
|
SORTSTMT; 49680000=07826000=
|
|
GO XXX 49685000=07826000=
|
|
END 49690000=07827000=
|
|
ELSE 49695000=07827000=
|
|
IF Q = 6"5MERGE" THEN 49700000=07827000=
|
|
BEGIN 49705000=07827000=
|
|
MERGESTMT; 49710000=07827000=
|
|
GO XXX 49715000=07827000=
|
|
END 49720000=07828000=
|
|
ELSE 49725000=07828000=
|
|
IF Q = 6"6SEARC" THEN 49730000=07828000=
|
|
BEGIN 49735000=07829000=
|
|
IF STEPI ^= LEFTPAREN THEN 49740000=07829000=
|
|
BEGIN 49745000=07830000=
|
|
ERR(105); 49750000=07830000=
|
|
GO TO XXX 49755000=07830000=
|
|
END; 49760000=07830000=
|
|
IF STEPI = FILEID OR ELCLASS = SUPERFILEID THEN 49765000=07831000=
|
|
PASSFILE 49770000=07832000=
|
|
ELSE 49775000=07832000=
|
|
GO TO E; 49780000=07832000=
|
|
IF ELCLASS ^= COMMA THEN 49785000=07833000=
|
|
GO TO E; 49790000=07833000=
|
|
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN 49795000=07834000=
|
|
GO TO E; 49800000=07835000=
|
|
XMARK(ASSIGNREF); % SEARCH STATEMENT 49805000=07835500=
|
|
TVAR:= FL; 49806000
|
|
VARIABLE(TVAR); 49810000
|
|
IF TABLE(I-2) ^= FACTOP THEN 49815000=07837000=
|
|
GO TO E; 49820000=07837000=
|
|
IF ELCLASS ^= RTPAREN THEN 49825000=07838000=
|
|
BEGIN 49830000=07839000=
|
|
ERR(104); 49835000=07839000=
|
|
GO TO XXX 49840000=07839000=
|
|
END; 49845000=07839000=
|
|
EMITPAIR(30, COM); 49850000=07840000=
|
|
EMITO(DEL); 49855000=07840000=
|
|
EMITO(DEL); 49860000=07840000=
|
|
STEPIT; 49865000=07841000=
|
|
GO TO XXX; 49870000=07841000=
|
|
END 49875000=07843000=
|
|
ELSE 49880000=07843000=
|
|
IF Q = 6"4SEEK0" THEN 49885000=07843000=
|
|
BEGIN 49890000=07844000=
|
|
IF STEPI ^= LEFTPAREN THEN 49895000=07844000=
|
|
BEGIN 49900000=07845000=
|
|
ERR(105); 49905000=07845000=
|
|
GO TO XXX; 49910000=07845000=
|
|
END; 49915000=07845000=
|
|
IF STEPI ^= FILEID AND ELCLASS ^= SUPERFILEID THEN 49920000=07846000=
|
|
GO TO E 49925000=07847000=
|
|
ELSE 49930000=07847000=
|
|
BEGIN 49935000=07848000=
|
|
EMITL(0); 49940000=07848000=
|
|
EMITL(0); 49945000=07848000=
|
|
PASSFILE; 49950000=07848000=
|
|
IF ELCLASS ^= LEFTPAREN THEN 49955000=07849000=
|
|
BEGIN 49960000=07850000=
|
|
ERR(105); 49965000=07850000=
|
|
GO TO XXX; 49970000=07850000=
|
|
END; 49975000=07850000=
|
|
STEPIT; 49980000=07851000=
|
|
AEXP; 49985000=07851000=
|
|
EMITO(XCH); 49990000=07851000=
|
|
IF ELCLASS ^= RTPAREN THEN 49995000=07852000=
|
|
BEGIN 50000000=07853000=
|
|
ERR(104); 50005000=07853000=
|
|
GO TO XXX; 50010000=07853000=
|
|
END; 50015000=07853000=
|
|
IF STEPI ^= RTPAREN THEN 50020000=07854000=
|
|
BEGIN 50025000=07855000=
|
|
ERR(104); 50030000=07855000=
|
|
GO TO XXX; 50035000=07855000=
|
|
END; 50040000=07855000=
|
|
EMITPAIR(32, COM); 50045000=07856000=
|
|
EMITO(DEL); 50050000=07856000=
|
|
EMITO(DEL); 50055000=07856000=
|
|
EMITO(DEL); 50060000=07857000=
|
|
EMITO(DEL); 50065000=07857000=
|
|
STEPIT; 50070000=07857000=
|
|
END; 50075000=07858000=
|
|
GO TO XXX; 50080000=07858000=
|
|
END 50085000=07859010=
|
|
ELSE 50090000=07859010=
|
|
IF Q = 6"6UNLOC" THEN 50095000=07859010=
|
|
BEGIN 50100000=07859020=
|
|
IF STEPI ^= LEFTPAREN THEN 50105000=07859020=
|
|
BEGIN 50110000=07859030=
|
|
ERR(105); 50115000=07859030=
|
|
GO TO XXX 50120000=07859030=
|
|
END; 50125000=07859030=
|
|
STEPIT; 50130000=07859040=
|
|
TVAR:= FL; 50131000
|
|
VARIABLE(TVAR); 50135000
|
|
L:= L-1; 50140000=07859040=
|
|
IF TABLE(I-2) ^= FACTOP THEN 50145000=07859050=
|
|
FLAG(208); 50150000=07859050=
|
|
EMITO(DUP); 50155000=07859060=
|
|
EMITO(LOD); 50160000=07859060=
|
|
EMITL(0); 50165000=07859060=
|
|
EMITD(43, 3, 5); 50170000=07859070=
|
|
EMITO(XCH); 50175000=07859070=
|
|
EMITO(STD); 50180000=07859070=
|
|
IF ELCLASS = RTPAREN THEN 50185000=07859080=
|
|
STEPIT 50190000=07859080=
|
|
ELSE 50195000=07859080=
|
|
ERR(104); 50200000=07859080=
|
|
GO TO XXX 50205000=07859100=
|
|
END 50210000=07859900=
|
|
ELSE 50215000=07859900=
|
|
$ SET OMIT = NOT TSPOL 50220000=07859900=
|
|
$ POP OMIT % NOT SURE ABOUT THIS... 50220100
|
|
BEGIN 50225000=07900000=
|
|
ERROR(100); 50230000=07900000=
|
|
GO TO XXX 50235000=07900000=
|
|
END; 50240000=07900000=
|
|
IF STEPI ^= LEFTPAREN THEN 50245000=07901000=
|
|
BEGIN 50250000=07902000=
|
|
ERR(105); 50255000=07902000=
|
|
GO TO XXX 50260000=07902000=
|
|
END; 50265000=07902000=
|
|
STEPIT; 50270000=07903000=
|
|
AEXP; 50275000=07903000=
|
|
FOR J:= 1 STEP 1 UNTIL N DO 50280000=07904000=
|
|
BEGIN 50285000=07905000=
|
|
IF ELCLASS ^= COMMA THEN 50290000=07905000=
|
|
E: 50295000=07906000=
|
|
BEGIN 50300000=07906000=
|
|
ERR(164); 50305000=07906000=
|
|
GO TO XXX 50310000=07906000=
|
|
END; 50315000=07906000=
|
|
STEPIT; 50320000=07907000=
|
|
AEXP; 50325000=07907000=
|
|
END; 50330000=07908000=
|
|
IF ELCLASS ^= RTPAREN THEN 50335000=07909000=
|
|
BEGIN 50340000=07910000=
|
|
ERR(104); 50345000=07910000=
|
|
GO TO XXX 50350000=07910000=
|
|
END; 50355000=07910000=
|
|
EMITL(C); 50360000=07911000=
|
|
EMITO(COM); 50365000=07911000=
|
|
FOR J:= 0 STEP 1 UNTIL N DO 50370000=07912000=
|
|
EMITO(DEL); 50375000=07912000=
|
|
STEPIT; 50380000=07913000=
|
|
XXX: 50385000=07914000=
|
|
END; 50390000=07914000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%50395000=07914000=
|
|
PROCEDURE FAULTSTMT; 50400000=07920000=
|
|
COMMENT THIS IS WHAT HAPPENS FOR THE"<FAULTYPE>:="50405000=07920000=
|
|
KIND OF STATEMENT. FOR THE RUN-TIME ERROR MESS; 50410000=07921000=
|
|
BEGIN 50415000=07922000=
|
|
REAL 50420000=07922000=
|
|
ELBW, 50425000=07922000=
|
|
STR; 50430000=07922000=
|
|
DEFINE 50435000=07922000=
|
|
ADRES = ELBW.ADDRESS #; 50440000=07922000=
|
|
CHECKER(ELBW:= ELBAT[I]); 50445000=07923000=
|
|
STR:= 50450000=07923000=
|
|
IF FAULTOG THEN 50455000=07923000=
|
|
SND 50460000=07923000=
|
|
ELSE 50465000=07923000=
|
|
STD; 50470000=07923000=
|
|
FAULTOG:= BOOLEAN(1) OR FAULTOG; 50475000=07923100=
|
|
COMMENT TELLS DEXP TO MESS 50480000=07923100=
|
|
WITH FAULTLEVEL; 50485000=07923150=
|
|
IF STEPI ^= ASSIGNOP THEN 50490000=07924000=
|
|
ERR(60) 50495000=07924000=
|
|
ELSE 50500000=07924000=
|
|
IF STEPI = LITNO THEN 50505000=07925000=
|
|
BEGIN 50510000=07925000=
|
|
EMIT(0); 50515000=07925000=
|
|
STEPIT 50520000=07925000=
|
|
END 50525000=07925100=
|
|
ELSE 50530000=07925100=
|
|
IF ELCLASS = FAULTID THEN 50535000=07925100=
|
|
FAULTSTMT 50540000=07925100=
|
|
ELSE 50545000=07925100=
|
|
DEXP; 50550000=07925100=
|
|
EMITPAIR(ADRES, STR); 50555000=07926000=
|
|
FAULTOG:= FALSE & (ELBW.LVL < LEVEL OR FAULTOG.[1:1])[1:0:1]; 50560000=07926100=
|
|
END FAULTSTMT NOW WASNT THAT SIMPLE; 50565000=07927000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%50570000=07927000=
|
|
PROCEDURE KLUDGE(T); 50575000=07930000=
|
|
VALUE 50580000=07930000=
|
|
T; 50585000=07930000=
|
|
INTEGER 50590000=07930000=
|
|
T; 50595000=07930000=
|
|
BEGIN 50600000=07931000=
|
|
COMMENT KLUDGE HANDLES ARRAY-ROW READS AND WRITES FOR 50605000=07931000=
|
|
THOSE CASES WHICH DO NOT NEED TO GO THROUGH THE 50610000=07932000=
|
|
FORMATTING INTRINSICS. A NEW MCP INTRINSIC IS 50615000=07933000=
|
|
USED, TO FURTHER IMPROVE SPEED/DECREASE CORE USE; 50620000=07934000=
|
|
REAL 50621000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 50622000
|
|
LABEL 50625000=07935000=
|
|
EXIT; 50630000=07935000=
|
|
L:= ABS(T); 50635000=07936000=
|
|
AEXP; 50640000=07937000=
|
|
IF ELCLASS ^= COMMA THEN 50645000=07938000=
|
|
BEGIN 50650000=07938000=
|
|
ERR(426); 50655000=07938000=
|
|
GO TO EXIT; 50660000=07938000=
|
|
END; 50665000=07938000=
|
|
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN 50670000=07939000=
|
|
BEGIN 50675000=07940000=
|
|
ERR(429); 50680000=07940000=
|
|
GO TO EXIT; 50685000=07940000=
|
|
END; 50690000=07940000=
|
|
TVAR:= FL; 50694000
|
|
VARIABLE(TVAR); 50695000
|
|
IF TABLE(I-2) ^= FACTOP THEN 50700000=07941000=
|
|
BEGIN 50705000=07942000=
|
|
ERR(427); 50710000=07942000=
|
|
GO TO EXIT; 50715000=07942000=
|
|
END; 50720000=07942000=
|
|
IF ELCLASS ^= RTPAREN THEN 50725000=07943000=
|
|
BEGIN 50730000=07943000=
|
|
ERR(428); 50735000=07943000=
|
|
GO TO EXIT; 50740000=07943000=
|
|
END; 50745000=07943000=
|
|
EMITO(XCH); 50750000=07944000=
|
|
IF T < 0 THEN 50755000=07945000=
|
|
COMMENT FROM WRITE...(<0 IS FROM READ); 50760000=07945000=
|
|
BEGIN 50765000=07946000=
|
|
EMITPAIR(JUNK, STD); 50770000=07946000=
|
|
EMITO(XCH); 50775000=07946000=
|
|
EMITV(JUNK); 50780000=07946000=
|
|
END; 50785000=07946000=
|
|
IF T > 0 THEN 50790000=07947000=
|
|
IF TABLE(I+1) = LFTBRKET THEN 50795000=07947000=
|
|
BEGIN 50800000=07948000=
|
|
GOGOGO:= FALSE; % JUST TO MAKE SURE... 50805000=07948000=
|
|
HANDLETHETAILENDOFAREADORSPACESTATEMENT; % 50810000=07949000=
|
|
L:= L-1; % REMOVE THE OPDC ON INPUTINT... 50815000=07950000=
|
|
EMITO(DEL); 50820000=07951000=
|
|
EMITO(DEL); % REMOVE LABEL WORDS... 50825000=07951000=
|
|
END 50830000=07952000=
|
|
ELSE 50835000=07952000=
|
|
STEPIT 50840000=07952000=
|
|
ELSE 50845000=07952000=
|
|
STEPIT; % WALTZ ON BY... 50850000=07952000=
|
|
EMITV(GNAT(SUPERMOVER)); % BET YOU THOUGHT I"D NEVER DO IT 50855000=07953000=
|
|
EXIT: 50860000=07954000=
|
|
END THIS HAIRY KLUDGE; % 50865000=07954000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%50870000=07954000=
|
|
50875000=08000000=
|
|
COMMENT FORSTMT IS RESPONSIBLE FOR THE COMPILATION OF FOR STATEMENTS. 50880000=08000000=
|
|
IF THE FOR STATEMENT HAS A SINGLE STEP-UNTIL ELEMENT SUCH 50885000=08001000=
|
|
THAT THE INITIAL VALUE, THE STEP AND THE FINAL VALUE ARE 50890000=08002000=
|
|
ALL OF THE FORM V,+V, OR -V WHERE V IS A VARIABLE OR A 50895000=08003000=
|
|
CONSTANT, THEN THE CODE TAKES ON MORE EFFICIENT FORM. 50900000=08004000=
|
|
IN OTHER CASES THE CODE IS SOMEWHAT LESS EFFICIENT, SINCE 50905000=08005000=
|
|
THE BODY OF THE FOR STATEMENT BECOMES A SUBROUTINE. THE 50910000=08006000=
|
|
STEP ALSO BECOMES A SUBROUTINE IF IT IS NOT SIMPLE; 50915000=08007000=
|
|
PROCEDURE FORSTMT; 50920000=08008000=
|
|
BEGIN 50925000=08009000=
|
|
REAL 50926000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 50927000
|
|
OWN REAL 50930000=08010000=
|
|
B, 50935000=08010000=
|
|
STMTSTART, 50940000=08010000=
|
|
REGO, 50945000=08010000=
|
|
RETURNSTORE, 50950000=08010000=
|
|
ADDRES, 50955000=08010000=
|
|
V, 50960000=08010000=
|
|
VRET, 50965000=08011000=
|
|
BRET; 50970000=08011000=
|
|
OWN BOOLEAN 50975000=08012000=
|
|
SIGNA, 50980000=08012000=
|
|
SIGNB, 50985000=08012000=
|
|
SIGNC, 50990000=08012000=
|
|
INT, 50995000=08013000=
|
|
CONSTANA, 51000000=08013000=
|
|
CONSTANB, 51005000=08013000=
|
|
CONSTANC; 51010000=08013000=
|
|
DEFINE 51015000=08014000=
|
|
SIMPLEB = SIGNC #, 51020000=08014000=
|
|
FORMALV = SIGNA #, 51025000=08015000=
|
|
SIMPLEV = CONSTANA #, 51030000=08015000=
|
|
A = V #, 51035000=08015000=
|
|
Q = REGO #, 51040000=08016000=
|
|
OPDC = TRUE #, 51045000=08016000=
|
|
DESC = FALSE #, 51050000=08016000=
|
|
K = BRET #; 51055000=08016000=
|
|
LABEL 51060000=08017000=
|
|
EXIT; 51065000=08017000=
|
|
51070000=08017100=
|
|
COMMENT FORCLASS CHECKS FOR THE APPROPRIATE WORD STEP, UNTIL, OR DO-- 51075000=08017100=
|
|
IF A CONSTANT IS FOUND, IT STORES OFF THE VALUE (FROM C) AT 51080000=08017200=
|
|
INFO[0,K] AND STUFFS K INTO THE ELBAT WORD, SO THAT TABLE CAN 51085000=08017300=
|
|
RECONSTRUCT THE CONSTANT EHEN WE SCAN ELBAT AGAIN; 51090000=08017400=
|
|
BOOLEAN PROCEDURE FORCLASS(CLSS); 51095000=08017500=
|
|
VALUE 51100000=08017500=
|
|
CLSS; 51105000=08017500=
|
|
INTEGER 51110000=08017500=
|
|
CLSS; 51115000=08017500=
|
|
IF STEPI = CLSS THEN 51120000=08017600=
|
|
FORCLASS:= TRUE 51125000=08017600=
|
|
ELSE 51130000=08017600=
|
|
IF ELCLASS >= NONLITNO AND ELCLASS <= STRNGCON THEN 51135000=08017700=
|
|
BEGIN 51140000=08017800=
|
|
INFO[0, K:= K+1]:= C; 51145000=08017800=
|
|
ELBAT[I]:= 0 & COMMENTV[45:6:7] & K[31:10:11] 51150000=08017950=
|
|
END FORCLASS; 51155000=08017950=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51160000=08017950=
|
|
51165000=08018000=
|
|
COMMENT PLUG EMITS EITHER AN OPERAND CALL ON A VARIABLE OR A CALL ON A 51170000=08018000=
|
|
CONSTANT DEPENDING ON THE REQUIREMENTS; 51175000=08019000=
|
|
PROCEDURE PLUG(C, A); 51180000=08020000=
|
|
VALUE 51185000=08020000=
|
|
C, 51190000=08020000=
|
|
A; 51195000=08020000=
|
|
REAL 51200000=08020000=
|
|
A; 51205000=08020000=
|
|
BOOLEAN 51210000=08020000=
|
|
C; 51215000=08020000=
|
|
IF C THEN 51220000=08021000=
|
|
EMITNUM(A) 51225000=08021000=
|
|
ELSE 51230000=08021000=
|
|
BEGIN 51235000=08021000=
|
|
CHECKER(A); 51240000=08021100=
|
|
EMITV(A.ADDRESS) 51245000=08021200=
|
|
END; 51250000=08021200=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51255000=08021200=
|
|
51260000=08022000=
|
|
COMMENT SIMPLE DETERMINES IF AN ARITHMETIC EXPRESSION IS + OR - A 51265000=08022000=
|
|
CONSTANT OR A SIMPLE VARIABLE. IT MAKES A THROUGH REPORT 51270000=08023000=
|
|
ON ITS ACTIVITY. IT ALSO MAKES PROVISION FOR THE RESCAN 51275000=08024000=
|
|
OF ELBAT (THIS IS THE ACTION WITH K - SEE CODE IN THE 51280000=08025000=
|
|
TABLE ROUTINE FOR FURTHER DETAILS); 51285000=08026000=
|
|
BOOLEAN PROCEDURE SIMPLE(B, A, S); 51290000=08027000=
|
|
BOOLEAN 51295000=08027000=
|
|
B, 51300000=08027000=
|
|
S; 51305000=08027000=
|
|
REAL 51310000=08027000=
|
|
A; 51315000=08027000=
|
|
BEGIN 51320000=08028000=
|
|
S:= 51325000=08029000=
|
|
IF STEPI ^= ADOP THEN 51330000=08029000=
|
|
FALSE 51335000=08029000=
|
|
ELSE 51340000=08029000=
|
|
ELBAT[I].ADDRESS = SUB; 51345000=08030000=
|
|
IF ELCLASS = ADOP THEN 51350000=08031000=
|
|
STEPIT; 51355000=08031000=
|
|
IF ELCLASS >= NONLITNO AND ELCLASS <= STRNGCON THEN 51360000=08033000=
|
|
BEGIN 51365000=08033000=
|
|
K:= K+1; 51370000=08033000=
|
|
SIMPLE:= TRUE; 51375000=08033000=
|
|
ELBAT[I]:= 0 & COMMENTV[45:6:7] & K[31:10:11]; 51380000=08034000=
|
|
INFO[0, K]:= A:= C; 51385000=08035000=
|
|
B:= TRUE 51390000=08035000=
|
|
END 51395000=08036000=
|
|
ELSE 51400000=08036000=
|
|
BEGIN 51405000=08036000=
|
|
B:= FALSE; 51410000=08037000=
|
|
A:= ELBAT[I]; 51415000=08037000=
|
|
SIMPLE:= REALID <= ELCLASS AND ELCLASS <= INTID 51420000=08038000=
|
|
END; 51425000=08038000=
|
|
END SIMPLE; 51430000=08038100=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51435000=08038100=
|
|
51440000=08040000=
|
|
COMMENT TEST EMITS THE STEP-UNTIL ELEMENT TEST; 51445000=08040000=
|
|
PROCEDURE TEST; 51450000=08041000=
|
|
BEGIN 51455000=08042000=
|
|
IF NOT CONSTANB THEN 51460000=08043000=
|
|
BEGIN 51465000=08044000=
|
|
EMITO(SUB); 51470000=08044000=
|
|
IF SIMPLEB THEN 51475000=08044000=
|
|
EMITV(B.ADDRESS) 51480000=08045000=
|
|
ELSE 51485000=08045000=
|
|
BEGIN 51490000=08045000=
|
|
EMITL(2+L-BRET); 51495000=08046000=
|
|
EMITB(BBW, BUMPL, B); 51500000=08047000=
|
|
END; 51505000=08048000=
|
|
EMITO(MUL); 51510000=08049000=
|
|
EMIT(0) 51515000=08049000=
|
|
END; 51520000=08049000=
|
|
EMITO(IF SIGNB THEN GEQ ELSE LEQ); 51525000=08050000=
|
|
EMIT(0); 51530000=08050000=
|
|
L:= L-1 51535000=08051000=
|
|
END TEST; 51540000=08051000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51545000=08051000=
|
|
BOOLEAN PROCEDURE SIMPI(ALL); 51550000=08052000=
|
|
VALUE 51555000=08052000=
|
|
ALL; 51560000=08052000=
|
|
REAL 51565000=08052000=
|
|
ALL; 51570000=08052000=
|
|
BEGIN 51575000=08053000=
|
|
CHECKER(VRET:= ALL); 51580000=08054000=
|
|
ADDRES:= ALL.ADDRESS; 51585000=08055000=
|
|
FORMALV:= ALL.[38:2] = 2; 51590000=08056000=
|
|
IF T:= ALL.CLASS > INTARRAYID OR T < BOOID OR 51595000=08057000=
|
|
GT1:= (T-BOOID) MOD 4 < 1 THEN 51600000=08058000=
|
|
ERR(REAL(T ^= 0)*51+100); 51610000=08059000=
|
|
INT:= GT1 = 3; 51615000=08060000=
|
|
SIMPI:= T <= INTID 51620000=08061000=
|
|
END SIMPI; 51625000=08061000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51630000=08061000=
|
|
51635000=08062000=
|
|
COMMENT STORE EMITS THE CODE FOR THE STORE INTO THE FOR INDEX; 51640000=08062000=
|
|
PROCEDURE STORE(S); 51645000=08063000=
|
|
VALUE 51650000=08063000=
|
|
S; 51655000=08063000=
|
|
BOOLEAN 51660000=08063000=
|
|
S; 51665000=08063000=
|
|
BEGIN 51670000=08064000=
|
|
IF FORMALV THEN 51675000=08065000=
|
|
BEGIN 51680000=08065000=
|
|
EMITO(XCH); 51685000=08065000=
|
|
S:= FALSE 51690000=08065000=
|
|
END 51695000=08066000=
|
|
ELSE 51700000=08066000=
|
|
BEGIN 51705000=08066000=
|
|
EMITL(ADDRES); 51710000=08067000=
|
|
IF ADDRES > 1023 THEN 51715000=08068000=
|
|
EMITO(PRTE) 51720000=08068000=
|
|
END; 51725000=08068000=
|
|
T:= (REAL(S)+1)*16; 51730000=08069000=
|
|
EMITO((IF INT THEN T+512 ELSE 4*T)+4) 51735000=08070000=
|
|
END STORE; 51740000=08070000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51745000=08070000=
|
|
51750000=08071000=
|
|
COMMENT CALL EFFECTS A CALL ON THE INDEX; 51755000=08071000=
|
|
PROCEDURE CALL(S); 51760000=08072000=
|
|
VALUE 51765000=08072000=
|
|
S; 51770000=08072000=
|
|
BOOLEAN 51775000=08072000=
|
|
S; 51780000=08072000=
|
|
BEGIN 51785000=08073000=
|
|
IF SIMPLEV THEN 51790000=08075000=
|
|
IF S THEN 51795000=08075000=
|
|
EMITV(ADDRES) 51800000=08075000=
|
|
ELSE 51805000=08075000=
|
|
EMITN(ADDRES) 51810000=08076000=
|
|
ELSE 51815000=08076000=
|
|
BEGIN 51820000=08076000=
|
|
EMITL(2+L-VRET); 51825000=08077000=
|
|
EMITB(BBW, BUMPL, V); 51830000=08078000=
|
|
IF S THEN 51835000=08079000=
|
|
EMITO(LOD) 51840000=08079000=
|
|
END 51845000=08079000=
|
|
END CALL; 51850000=08079000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51855000=08079000=
|
|
PROCEDURE FORLIST(NUMLE); 51860000=08080000=
|
|
VALUE 51865000=08080000=
|
|
NUMLE; 51870000=08080000=
|
|
BOOLEAN 51875000=08080000=
|
|
NUMLE; 51880000=08080000=
|
|
BEGIN 51885000=08081000=
|
|
PROCEDURE FIX(STORE, BACK, FORWART, START); 51890000=08082000=
|
|
VALUE 51895000=08083000=
|
|
STORE, 51900000=08083000=
|
|
BACK, 51905000=08083000=
|
|
FORWART, 51910000=08083000=
|
|
START; 51915000=08083000=
|
|
REAL 51920000=08084000=
|
|
STORE, 51925000=08084000=
|
|
BACK, 51930000=08084000=
|
|
FORWART, 51935000=08084000=
|
|
START; 51940000=08084000=
|
|
BEGIN 51945000=08085000=
|
|
EMITB(GET(FORWART-1), FORWART, START); 51950000=08086000=
|
|
IF RETURNSTORE ^= 0 THEN 51955000=08088000=
|
|
BEGIN 51960000=08088000=
|
|
L:= STORE; 51965000=08089000=
|
|
EMITNUM(B-BACK); 51970000=08089000=
|
|
EMITPAIR(RETURNSTORE, STD) 51975000=08090000=
|
|
END 51980000=08090000=
|
|
END FIX; 51985000=08090000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51990000=08090000=
|
|
INTEGER 51995000=08091000=
|
|
BACKFIX, 52000000=08091000=
|
|
FORWARDBRANCH, 52005000=08091000=
|
|
FOOT, 52010000=08091000=
|
|
STOREFIX; 52015000=08091000=
|
|
LABEL 52020000=08092000=
|
|
BRNCH, 52025000=08092000=
|
|
EXIT; 52030000=08092000=
|
|
STOREFIX:= L; 52035000=08093000=
|
|
Q:= REAL(MODE = 0)+3; 52040000=08093000=
|
|
FOR K:= 1 STEP 1 UNTIL Q DO 52045000=08094000=
|
|
EMITO(NOP); 52050000=08094000=
|
|
IF NUMLE THEN 52055000=08096000=
|
|
BEGIN 52060000=08096000=
|
|
BACKFIX:= L; 52065000=08097000=
|
|
IF FORMALV THEN 52070000=08098000=
|
|
CALL(DESC) 52075000=08099000=
|
|
END 52080000=08099000=
|
|
ELSE 52085000=08099000=
|
|
BACKFIX:= V+REAL(SIMPLEV)-1; 52090000=08099000=
|
|
DIALA:= DIALB:= 0; 52095000=08100000=
|
|
AEXP; 52100000=08101000=
|
|
DIALA:= DIALB:= 0; 52105000=08101000=
|
|
COMMENT PICK UP FIRST ARITHMETIC EXPRESSION; 52110000=08102000=
|
|
IF ELCLASS = STEPV THEN 52115000=08104000=
|
|
BEGIN 52120000=08104000=
|
|
COMMENT HERE WE HAVE A STEP ELEMENT; 52125000=08105000=
|
|
BACKFIX:= BUMPL; 52130000=08106000=
|
|
COMMENT LEAVE ROOM FOR FORWARD JUMP; 52135000=08107000=
|
|
IF FORMALV THEN 52140000=08108000=
|
|
CALL(DESC); 52145000=08108000=
|
|
CALL(OPDC); 52150000=08108000=
|
|
COMMENT FETCH INDEX; 52155000=08109000=
|
|
IF I > 70 THEN 52160000=08110000=
|
|
BEGIN 52165000=08110000=
|
|
NXTELBT:= 1; 52170000=08110000=
|
|
I:= 0 52175000=08110000=
|
|
END 52180000=08111000=
|
|
ELSE 52185000=08111000=
|
|
REGO:= I; 52190000=08111000=
|
|
IF SIMPLEB:= SIMPLE(CONSTANB, B, SIGNB) AND 52195000=08114000=
|
|
(STEPI = UNTILV OR ELCLASS = WHILEV) 52200000=08114000=
|
|
THEN 52205000=08114000=
|
|
BEGIN 52210000=08114000=
|
|
COMMENT WE HAVE A SIMPLE STEP FUNCTION; 52215000=08115000=
|
|
PLUG(CONSTANB, B); 52220000=08116000=
|
|
END 52225000=08117000=
|
|
ELSE 52230000=08117000=
|
|
BEGIN 52235000=08117000=
|
|
COMMENT THE STEP FUNCTION IS NOT SIMPLE: WE CONSTRUCT A 52240000=08118000=
|
|
SUBROUTINE; 52245000=08119000=
|
|
I:= 52250000=08120000=
|
|
IF I < 4 THEN 52255000=08120000=
|
|
0 52260000=08120000=
|
|
ELSE 52265000=08120000=
|
|
REGO; 52270000=08120000=
|
|
STEPIT; 52275000=08120000=
|
|
SIGNB:= CONSTANB:= FALSE; 52280000=08121000=
|
|
EMIT(0); 52285000=08122000=
|
|
B:= L; 52290000=08122000=
|
|
AEXP; 52295000=08123000=
|
|
EMITO(XCH); 52300000=08123000=
|
|
BRET:= L; 52305000=08124000=
|
|
EMITO(BFW) 52310000=08125000=
|
|
END; 52315000=08125000=
|
|
EMITO(REAL(SIGNB)*32+ADD); 52320000=08126000=
|
|
EMITB(BFW, BACKFIX, L); 52325000=08127000=
|
|
IF ELCLASS = UNTILV THEN 52330000=08129000=
|
|
BEGIN COMMENT STEP-UNTIL ELEMENT; 52335000=08129000=
|
|
STORE(TRUE); 52345000=08130000=
|
|
IF FORMALV THEN 52350000=08130000=
|
|
CALL(OPDC); 52355000=08130000=
|
|
STEPIT; 52360000=08131000=
|
|
AEXP; 52365000=08131000=
|
|
TEST 52370000=08131000=
|
|
END 52375000=08132000=
|
|
ELSE 52380000=08132000=
|
|
BEGIN 52385000=08132000=
|
|
COMMENT STEP-WHILE ELEMENT; 52390000=08132000=
|
|
IF ELCLASS ^= WHILEV THEN 52395000=08133000=
|
|
BEGIN 52400000=08134000=
|
|
ERR(153); 52405000=08134000=
|
|
GO TO EXIT 52410000=08134000=
|
|
END; 52415000=08134000=
|
|
STEPIT; 52420000=08135000=
|
|
STORE(FALSE); 52425000=08135000=
|
|
BEXP 52430000=08135000=
|
|
END 52435000=08136000=
|
|
END 52440000=08136000=
|
|
ELSE 52445000=08136000=
|
|
BEGIN 52450000=08136000=
|
|
COMMENT WE DO NOT HAVE A STEP ELEMENT; 52455000=08137000=
|
|
STORE(FALSE); 52460000=08138000=
|
|
IF ELCLASS = WHILEV THEN 52465000=08140000=
|
|
BEGIN 52470000=08140000=
|
|
COMMENT WE HAVE A WHILE ELEMENT; 52475000=08141000=
|
|
STEPIT; 52480000=08142000=
|
|
BEXP 52485000=08142000=
|
|
END 52490000=08143000=
|
|
ELSE 52495000=08143000=
|
|
BEGIN 52500000=08143000=
|
|
COMMENT ONE EXPRESSION ELEMENT; 52505000=08144000=
|
|
IF ELCLASS ^= COMMA THEN 52510000=08145000=
|
|
BEGIN 52515000=08145000=
|
|
EMITB(BFW, BUMPL, L+2); 52520000=08146000=
|
|
BACKFIX:= L 52525000=08146000=
|
|
END 52530000=08147000=
|
|
ELSE 52535000=08147000=
|
|
BACKFIX:= L+2; 52540000=08147000=
|
|
L:= L+1; 52545000=08148000=
|
|
EMIT(BFW); 52550000=08148000=
|
|
GO TO BRNCH 52555000=08148000=
|
|
END 52560000=08148000=
|
|
END; 52565000=08148000=
|
|
COMMENT THIS IS THE COMMON POINT; 52570000=08149000=
|
|
IF ELCLASS = COMMA THEN 52575000=08150000=
|
|
EMITLNG; 52580000=08150000=
|
|
L:= L+1; 52585000=08150000=
|
|
EMIT(BFC); 52590000=08151000=
|
|
BRNCH: 52595000=08152000=
|
|
FORWARDBRANCH:= L; 52600000=08152000=
|
|
DIALA:= DIALB:= 0; 52605000=08152000=
|
|
IF ELCLASS = COMMA THEN 52610000=08154000=
|
|
BEGIN 52615000=08154000=
|
|
STEPIT; 52620000=08155000=
|
|
FORLIST(TRUE); 52625000=08156000=
|
|
FIX(STOREFIX, BACKFIX, FORWARDBRANCH, STMTSTART) 52630000=08157000=
|
|
END 52635000=08158000=
|
|
ELSE 52640000=08158000=
|
|
BEGIN 52645000=08158000=
|
|
IF ELCLASS ^= DOV THEN 52650000=08160000=
|
|
BEGIN 52655000=08160000=
|
|
ERR(154); 52660000=08160000=
|
|
REGO:= L; 52665000=08160000=
|
|
GO EXIT 52670000=08160000=
|
|
END; 52675000=08160000=
|
|
STEPIT; 52680000=08161000=
|
|
IF NUMLE THEN 52685000=08162000=
|
|
FOOT:= GETSPACE(FALSE, -1); % TEMP. 52690000=08162000=
|
|
IF LISTMODE THEN 52695000=08163000=
|
|
LISTELEMENT 52700000=08163000=
|
|
ELSE 52705000=08163000=
|
|
STMT; 52710000=08163000=
|
|
IF NUMLE THEN 52715000=08165000=
|
|
BEGIN 52720000=08165000=
|
|
EMITV(RETURNSTORE:= FOOT); 52725000=08166000=
|
|
EMITO(BBW) 52730000=08166000=
|
|
END 52735000=08167000=
|
|
ELSE 52740000=08167000=
|
|
BEGIN 52745000=08167000=
|
|
EMITB(BBW, BUMPL, BACKFIX); 52750000=08168000=
|
|
RETURNSTORE:= 0 52755000=08168000=
|
|
END; 52760000=08168000=
|
|
STMTSTART:= FORWARDBRANCH; 52765000=08169000=
|
|
B:= L; 52770000=08169000=
|
|
CONSTANTCLEAN; 52775000=08170000=
|
|
REGO:= L; 52780000=08170000=
|
|
FIX(STOREFIX, BACKFIX, FORWARDBRANCH, L) 52785000=08171000=
|
|
END; 52790000=08171000=
|
|
EXIT: 52795000=08172000=
|
|
END FORLIST; 52800000=08172000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%52805000=08172000=
|
|
REAL 52810000=08173000=
|
|
T1, 52815000=08173000=
|
|
T2, 52820000=08173000=
|
|
T3, 52825000=08173000=
|
|
T4; 52830000=08173000=
|
|
NXTELBT:= 1; 52835000=08174000=
|
|
I:= 0; 52840000=08174000=
|
|
STEPIT; 52845000=08175000=
|
|
IF SIMPI(VRET:= ELBAT[I]) THEN 52850000=08177000=
|
|
BEGIN 52855000=08177000=
|
|
IF STEPI ^= ASSIGNOP THEN 52860000=08178000=
|
|
BEGIN 52865000=08178000=
|
|
ERR(152); 52870000=08178000=
|
|
GO EXIT 52875000=08178000=
|
|
END; 52880000=08178000=
|
|
XMARK(ASSIGNREF); % FOR STATEMENT 52885000=08178100=
|
|
T1:= L; 52890000=08179000=
|
|
IF FORMALV THEN 52895000=08179000=
|
|
EMITN(ADDRES); 52900000=08179000=
|
|
K:= 0; 52905000=08180000=
|
|
IF SIMPLE(CONSTANA, A, SIGNA) THEN 52910000=08181000=
|
|
IF FORCLASS(STEPV) THEN 52915000=08182000=
|
|
IF SIMPLE(CONSTANB, B, SIGNB) THEN 52920000=08183000=
|
|
IF FORCLASS(UNTILV) THEN 52925000=08184000=
|
|
IF SIMPLE(CONSTANC, Q, SIGNC) THEN 52930000=08185000=
|
|
IF FORCLASS(DOV) THEN 52935000=08186000=
|
|
BEGIN 52940000=08187000=
|
|
PLUG(CONSTANA, A); 52945000=08188000=
|
|
IF SIGNA THEN 52950000=08189000=
|
|
EMITO(CHS); 52955000=08189000=
|
|
RETURNSTORE:= BUMPL; 52960000=08190000=
|
|
ADJUST; 52965000=08190000=
|
|
CONSTANTCLEAN; 52970000=08190000=
|
|
STMTSTART:= L; 52975000=08191000=
|
|
STEPIT; 52980000=08192000=
|
|
T1:= ((((4096*RETURNSTORE + STMTSTART)*2 + 52985000=08193000=
|
|
REAL(CONSTANB))*2 + 52985100=08194000=
|
|
REAL(CONSTANC))*2 + 52985200=08195000=
|
|
REAL(SIGNB))*2 + 52985300=08196000=
|
|
REAL(SIGNC); 52985400=08197000=
|
|
T2:= VRET; 52995000=08198000=
|
|
T3:= B; 53000000=08199000=
|
|
T4:= Q; 53005000=08200000=
|
|
IF LISTMODE THEN 53010000=08201000=
|
|
LISTELEMENT 53015000=08201000=
|
|
ELSE 53020000=08201000=
|
|
STMT; 53025000=08201000=
|
|
SIGNC:= BOOLEAN(T1.[0:1]); 53030000=08202000=
|
|
SIGNB:= BOOLEAN(T1.[1:1]); 53035000=08203000=
|
|
CONSTANC:= BOOLEAN(T1.[2:1]); 53040000=08204000=
|
|
CONSTANB:= BOOLEAN(T1.[3:1]); 53045000=08205000=
|
|
STMTSTART:= T1.[15:12]; 53050000=08206000=
|
|
RETURNSTORE:= T1.[27:12]; 53055000=08207000=
|
|
VRET:= T2; 53060000=08208000=
|
|
B:= T3; 53065000=08209000=
|
|
Q:= T4; 53070000=08210000=
|
|
SIMPLEV:= SIMPI(VRET); 53075000=08211000=
|
|
IF FORMALV THEN 53080000=08212000=
|
|
EMITN(ADDRES); 53085000=08212000=
|
|
EMITV(ADDRES); 53090000=08212000=
|
|
PLUG(CONSTANB, B); 53095000=08213000=
|
|
EMITO(IF SIGNB THEN SUB ELSE ADD); 53100000=08214000=
|
|
EMITB(BFW, RETURNSTORE, L); 53105000=08215000=
|
|
STORE(TRUE); 53110000=08216000=
|
|
IF FORMALV THEN 53115000=08217000=
|
|
CALL(OPDC); 53120000=08217000=
|
|
PLUG(CONSTANC, Q); 53125000=08218000=
|
|
IF SIGNC THEN 53130000=08219000=
|
|
EMITO(CHS); 53135000=08219000=
|
|
SIMPLEB:= TRUE; 53140000=08220000=
|
|
TEST; 53145000=08220000=
|
|
EMITLNG; 53150000=08220000=
|
|
EMITB(BBC, BUMPL, STMTSTART); 53155000=08221000=
|
|
GO TO EXIT 53160000=08222000=
|
|
END; 53165000=08222000=
|
|
I:= 2; 53170000=08223000=
|
|
K:= 0; 53175000=08223000=
|
|
SIMPLEV:= SIMPI(VRET); 53180000=08224000=
|
|
V:= T1 53185000=08225000=
|
|
END 53190000=08226000=
|
|
ELSE 53195000=08226000=
|
|
BEGIN 53200000=08226000=
|
|
EMIT(0); 53205000=08227000=
|
|
V:= L; 53210000=08227000=
|
|
SIMPLEV:= FALSE; 53215000=08227000=
|
|
FORMALV:= TRUE; 53220000=08227000=
|
|
TVAR:= FR; 53224000
|
|
VARIABLE(TVAR); 53225000
|
|
EMITO(XCH); 53230000=08228000=
|
|
VRET:= L; 53235000=08228000=
|
|
EMITO(BFW); 53240000=08228000=
|
|
IF ELCLASS ^= ASSIGNOP THEN 53245000=08229000=
|
|
BEGIN 53250000=08229000=
|
|
ERR(152); 53255000=08229000=
|
|
GO EXIT 53260000=08229000=
|
|
END; 53265000=08229000=
|
|
END; 53270000=08230000=
|
|
STEPIT; 53275000=08231000=
|
|
FORLIST(FALSE); 53280000=08231000=
|
|
L:= REGO; 53285000=08231000=
|
|
EXIT: 53290000=08232000=
|
|
K:= 0 53295000=08232000=
|
|
END FORSTMT; 53300000=08232000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53305000=08232000=
|
|
PROCEDURE HANDLETHETAILENDOFAREADORSPACESTATEMENT; 53310000=08233000=
|
|
BEGIN 53315000=08234000=
|
|
COMMENT THIS ROUTINE CHECK FOR ACTION LABELS IN READ AND 53320000=08234000=
|
|
SPACE STATEMENTS AND GENERATES THE APPROPRIATE CODE; 53325000=08235000=
|
|
LABEL 53330000=08236000=
|
|
PASSPARLABL; 53335000=08236000=
|
|
COMMENT WHEN I REACH THIS LABEL A 53340000=08236000=
|
|
COLON HAS JUST BEEN DETECTED; 53345000=08237000=
|
|
LABEL 53350000=08238000=
|
|
EXIT; 53355000=08238000=
|
|
COMMENT THE LABEL EXIT APPEARS AFTER THE LAST53360000=08238000=
|
|
EXECUTABLE STATEMENT IN THIS ROUTINE; 53365000=08239000=
|
|
IF STEPI = LFTBRKET THEN 53370000=08241000=
|
|
BEGIN 53375000=08241000=
|
|
COMMENT THIS CODE HANDLES PARITY AND END OF 53380000=08241000=
|
|
FILE LABELS; 53385000=08242000=
|
|
IF STEPI ^= COLON THEN 53390000=08243000=
|
|
DEXP 53395000=08243000=
|
|
ELSE 53400000=08243000=
|
|
EMIT(0); 53405000=08243000=
|
|
IF ELCLASS ^= COLON THEN 53410000=08244000=
|
|
EMIT(0) 53415000=08244000=
|
|
ELSE 53420000=08244000=
|
|
BEGIN 53425000=08245000=
|
|
STEPIT; 53430000=08245000=
|
|
DEXP 53435000=08245000=
|
|
END; 53440000=08245000=
|
|
IF CHECK(RTBRKET, 433) THEN 53445000=08278000=
|
|
GO TO EXIT; 53450000=08278000=
|
|
COMMENT ERROR 433 MEANS MISSING RIGHT BRACKET 53455000=08279000=
|
|
IN READ OR SPACE STATEMENT; 53460000=08280000=
|
|
STEPIT; 53465000=08281000=
|
|
END 53470000=08283000=
|
|
ELSE 53475000=08283000=
|
|
BEGIN 53480000=08283000=
|
|
COMMENT THERE ARE NOT ANY ACTION LABELS IN THIS53485000=08283000=
|
|
CASE; 53490000=08284000=
|
|
EMITL(0); 53495000=08285000=
|
|
EMITL(0); 53500000=08285000=
|
|
END; 53505000=08286000=
|
|
IF GOGOGO THEN 53510000=08287000=
|
|
BEGIN 53515000=08287000=
|
|
EMIT(0); 53520000=08287000=
|
|
EMIT(0); 53525000=08287000=
|
|
EMIT(0); 53530000=08287000=
|
|
EMITV(13) 53535000=08287200=
|
|
END 53540000=08287200=
|
|
ELSE 53545000=08287200=
|
|
EMITV(GNAT(INTERPTI)); 53550000=08287200=
|
|
GOGOGO:= FALSE; % 53555000=08287300=
|
|
EXIT: 53560000=08288000=
|
|
; 53565000=08288000=
|
|
END HANDLETHETAILENDORAREADORSPACESTATEMENT; 53570000=08289000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%53575000=08289000=
|
|
DEFINE 53580000=08289010=
|
|
EMITNO(EMITNO1) = 53585000=08289010=
|
|
BEGIN 53590000=08289010=
|
|
EMITL(0); 53595000=08289010=
|
|
EMITL(EMITNO1) 53600000=08289010=
|
|
END #, 53605000=08289020=
|
|
EMITTIME = BEGIN 53610000=08289020=
|
|
EMITN(2); 53615000=08289020=
|
|
EMITO(259); 53620000=08289020=
|
|
AEXP; 53625000=08289020=
|
|
EMITPAIR(JUNK, ISN); 53630000=08289030=
|
|
EMITO(965) 53635000=08289030=
|
|
END #; 53640000=08289030=
|
|
PROCEDURE READSTMT; 53645000=08290000=
|
|
BEGIN 53650000=08291000=
|
|
COMMENT READSTMT GENERATES CODE TO CALL INTERPTI)WHICH IS53655000=08291000=
|
|
SHORT FOR INTERPRET INPUT) AN INTRINSIC PROCEDURE ON THE 53660000=08292000=
|
|
DRUM, PASSING TO IT PARAMETERS DETERMINED BY THE FORMAT OF53665000=08293000=
|
|
THE READ OR SPACE STATEMENT. 53670000=08294000=
|
|
THE SPACE STATEMENT IS HANDLED AS A SPECIAL CASE OF READ53675000=08295000=
|
|
STATEMENT WHERE ZERO WORDS ARE READ IN A FORWARD OR 53680000=08296000=
|
|
REVERSE DIRECTION DEPENDING ON THE SIGN OF THE ARITHMETIC 53685000=08297000=
|
|
EXPRESSION IN THE SPACE STATEMENT. 53690000=08298000=
|
|
I HAVE LISTED BELOW THE VARIOUS CASES CONSIDERED BY THE 53695000=08299000=
|
|
READSTMT PROCEDURE AND THE CORRESPONDING PARAMETERS WHICH 53700000=08300000=
|
|
ARE PASSED TO INTERPTI. 53705000=08301000=
|
|
**********************************************************53710000=08302000=
|
|
<DIRECTION INDICATOR>::=REVERSE/<EMPTY> 53715000=08303000=
|
|
<FILE PART>::=<FILE IDENTIFIER>/<SUPERFILE DESIGNATOR> 53720000=08304000=
|
|
<RELEASE INDICATOR>::=[NO]/<EMPTY> 53725000=08305000=
|
|
<ACTION LABELS>::=[<END OF FILE LABEL>:<PARITY LABEL>]/ 53730000=08306000=
|
|
[<END OF FILE LABEL>]/[:<PARITY LABEL>]/53735000=08307000=
|
|
<EMPTY> 53740000=08308000=
|
|
CIMI IS THE CHARACTER MODE INPUT EDITING ROUTINE. 53745000=08309000=
|
|
POWERSOFTEN IS A TABLE OF POWERS OF TEN USED FOR 53750000=08310000=
|
|
CONVERSION. 53755000=08311000=
|
|
FILE IS A DATA DESCRIPTOR DESCRIBING THE I/O DESCRIPTOR. 53760000=08312000=
|
|
ACTION TYPE IS A FOUR VALUED PARAMETER. IT MAY BE + OR-, 53765000=08313000=
|
|
1 OR 2. THE SIGN OF THE VALUE INDICATES FORWARD OR 53770000=08314000=
|
|
REVERSE DIRECTION FOR + AND - RESPECTIVELY. THE 53775000=08315000=
|
|
VALUE IS ONE MORE THAN THE NUMBER OF RECORDS TO BE 53780000=08316000=
|
|
PROCESSED. 53785000=08317000=
|
|
END OF FILE LABEL IS A DATA DESCRIPTOR POINTING TO A LABEL53790000=08318000=
|
|
DESCRIPTOR FOR THE END OF FILE JUMPS. 53795000=08319000=
|
|
PARITY LABEL IS A DATA DESCRIPTOR POINTING TO A LABEL 53800000=08320000=
|
|
DESCRIPTOR FOR PARITY CONDITION JUMPS. 53805000=08321000=
|
|
+ OR - N IS SIMILAR TO ACTION TYPE. IT CONTAINS THE EXACT53810000=08322000=
|
|
DISTANCE AND DIRECTION TO SPACE RATHER THAN ONE53815000=08323000=
|
|
GREATER THAN THE NUMBER OF RECORDS TO BE SPACED AS53820000=08324000=
|
|
IN ACTION TYPE. 53825000=08325000=
|
|
LIST ROUTINE DESCRIPTOR IS AN ACCIDENTAL ENTRY PROGRAM 53830000=08326000=
|
|
DESCRIPTRO WHICH WILL EITHER RETURN53835000=08327000=
|
|
AN ADDRESS OR VALUE DEPENDING ON 53840000=08328000=
|
|
THE CALL. 53845000=08329000=
|
|
N IS THE VALUE OF THE ARITHMETIC EXPRESSION IN READ STMT. 53850000=08330000=
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>) 53855000=08331000=
|
|
<ACTION LABELS> 53860000=08332000=
|
|
- - - - - - - - - - - - - - 53865000=08333000=
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,0,0,0,END OF FILE LABEL53870000=08334000=
|
|
,PARITY LABEL) 53875000=08335000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 53880000=08336000=
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 53885000=08337000=
|
|
<FORMAT PART>)<ACTION LABELS> 53890000=08338000=
|
|
- - - - - - - - - - - - - - 53895000=08339000=
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,FORMAT INDEX,FORMAT 53900000=08340000=
|
|
ARRAY DESCRIPTOR,0,END OF FILE LABEL,PARITY LABEL) 53905000=08341000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 53910000=08342000=
|
|
SPACE(<FILE PART>,<ARITHMETIC EXPRESSION>)<ACTION LABELS> 53915000=08343000=
|
|
- - - - - - - - - - - - - - 53920000=08344000=
|
|
(CIMI,POWERSOFTEN,FILE,+ OR - N,0,0,1,END OF FILE LABEL, 53925000=08345000=
|
|
PARITY LABEL) 53930000=08346000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 53935000=08347000=
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 53940000=08348000=
|
|
<FORMAT PART>,<LIST>)<ACTION LABELS> 53945000=08349000=
|
|
- - - - - - - - - - - - - - 53950000=08350000=
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,FORMAT INDEX,FORMAT 53955000=08351000=
|
|
ARRAY DESCRIPTOR,LIST ROUTINE DESCRIPTOR,END OF FILE 53960000=08352000=
|
|
LABEL,PARITY LABEL) 53965000=08353000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 53970000=08354000=
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 53975000=08355000=
|
|
*,<LIST>)<ACTION LABELS> 53980000=08356000=
|
|
- - - - - - - - - - - - - - 53985000=08357000=
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,0,0,LIST ROUTINE 53990000=08358000=
|
|
DESCRIPTOR,END OF FILE LABEL,PARITY LABEL) 53995000=08359000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 54000000=08360000=
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 54005000=08361000=
|
|
<ARITHMETIC EXPRESSION>,<ROW DESIGNATOR>)<ACTION 54010000=08362000=
|
|
LABELS> 54015000=08363000=
|
|
- - - - - - - - - - - - - - 54020000=08364000=
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,0,N,ROW DESCRIPTOR, 54025000=08365000=
|
|
END OF FILE LABEL,PARITY LABEL) 54030000=08366000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 54035000=08367000=
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 54040000=08368000=
|
|
<MULTIPLYING OPERATOR>,<LIST>)<ACTION LABELS> 54045000=08369000=
|
|
- - - - - - - - - - - - - - 54050000=08370000=
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,1,0,LIST ROUTINE 54055000=08371000=
|
|
DESCRIPTOR,END OF FILE LABEL,PARITY LABEL) 54060000=08372000=
|
|
*********************************************************;54065000=08373000=
|
|
DEFINE 54070000=08374000=
|
|
REVERSETOG = RRB1 #; 54075000=08374000=
|
|
COMMENT REVERSETOG IS SET TRUE54080000=08374000=
|
|
IF THE STATEMENT BEING COMPILED54085000=08375000=
|
|
IS A READ REVERSE, OTHERWISE IT54090000=08376000=
|
|
IS SET FALSE; 54095000=08377000=
|
|
LABEL 54100000=08378000=
|
|
EXIT; 54105000=08378000=
|
|
COMMENT EXIT APPEARS AFTER THE LAST 54110000=08378000=
|
|
EXECUTABLE STATEMENT IN READSTMT; 54115000=08379000=
|
|
LABEL 54120000=08380000=
|
|
CHKACTIONLABELS; 54125000=08380000=
|
|
COMMENT THE CODE AT THIS LABEL 54130000=08380000=
|
|
ASSUMES I IS POINTING AT THE RIGHT 54135000=08381000=
|
|
PARENTHESIS; 54140000=08382000=
|
|
LABEL 54145000=08383000=
|
|
PASSLIST; 54150000=08383000=
|
|
COMMENT THE CODE AT PASSLIST EXPECTS I TO54155000=08383000=
|
|
BE POINTING AT THE LAST QUANTITY IN THE 54160000=08384000=
|
|
SECOND PARAMETER; 54165000=08385000=
|
|
LABEL 54170000=08385100=
|
|
READXFORM; 54175000=08385100=
|
|
REAL 54176000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 54177000
|
|
INTEGER 54180000=08385500=
|
|
LISTADDRESS; 54185000=08385500=
|
|
COMMENT TEMP TO HOLD LIST ADD DESC; 54190000=08385500=
|
|
BOOLEAN 54195000=08385600=
|
|
SEEKTOG, 54200000=08385600=
|
|
LOCKTOG, 54205000=08385600=
|
|
GRABTOG; % 54210000=08385600=
|
|
BOOLEAN 54215000=08385700=
|
|
MAYI; 54220000=08385700=
|
|
COMMENT TRUE IF "FILE" IS ARRAY ROW; 54225000=08385700=
|
|
INTEGER 54230000=08385800=
|
|
HOLD; 54235000=08385800=
|
|
COMMENT L MAY GET CUT BACK TO HERE; 54240000=08385800=
|
|
IF STEPI = LEFTPAREN THEN 54245000=08387000=
|
|
REVERSETOG:= SEEKTOG:= FALSE 54250000=08387000=
|
|
ELSE 54255000=08388000=
|
|
BEGIN 54260000=08388000=
|
|
COMMENT THIS HAD BETTER SAY REVERSE; 54265000=08388000=
|
|
REVERSETOG:= ACCUM[1] = 6"7REVER"; 54270000=08389000=
|
|
LOCKTOG:= ELCLASS = LOCKV; 54275000=08390000=
|
|
SEEKTOG:= ACCUM[1] = 6"4SEEK0"; 54280000=08390500=
|
|
IF REVERSETOG OR LOCKTOG OR SEEKTOG THEN 54285000=08391000=
|
|
STEPIT 54290000=08392000=
|
|
ELSE 54295000=08392000=
|
|
BEGIN 54300000=08392000=
|
|
ERR(420); 54305000=08392000=
|
|
GO TO EXIT; 54310000=08393000=
|
|
END; 54315000=08394000=
|
|
IF CHECK(LEFTPAREN, 421) THEN 54320000=08395000=
|
|
GO TO EXIT; 54325000=08396000=
|
|
COMMENT ERROR 421 MEANS MISSING LEFT 54330000=08397000=
|
|
PARENTHESIS IN READ REVERSE STATEMENT; 54335000=08398000=
|
|
END; 54340000=08399000=
|
|
EMITO(MKS); 54345000=08400000=
|
|
IF STEPI >= BOOARRAYID AND ELCLASS <= INTARRAYID THEN 54350000=08401000=
|
|
BEGIN 54355000=08401020=
|
|
TVAR:= FL; 54356000
|
|
VARIABLE(TVAR); 54360000
|
|
IF TABLE(I-2) ^= FACTOP THEN 54365000=08401030=
|
|
BEGIN 54370000=08401040=
|
|
ERR(422); 54375000=08401040=
|
|
GO TO EXIT 54380000=08401040=
|
|
END; 54385000=08401040=
|
|
MAYI:= TRUE; 54390000=08401045=
|
|
HOLD:= L; 54395000=08401045=
|
|
EMIT(11); 54400000=08401050=
|
|
EMIT(4); 54405000=08401050=
|
|
EMITO(280); 54410000=08401050=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 54415000=08401060=
|
|
EMITO(XCH); 54420000=08401070=
|
|
EMITL(0); 54425000=08401070=
|
|
EMITL(1); 54430000=08401070=
|
|
END 54435000=08401090=
|
|
ELSE 54440000=08401090=
|
|
BEGIN 54445000=08401090=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 54450000=08402000=
|
|
IF NOT RANGE(FILEID, SUPERFILEID) THEN 54455000=08404000=
|
|
BEGIN 54460000=08404000=
|
|
COMMENT ERROR 422 MEANS MISSING FILE IN READ 54465000=08404000=
|
|
STATEMENT; 54470000=08405000=
|
|
ERR(422); 54475000=08406000=
|
|
GO TO EXIT; 54480000=08406000=
|
|
END; 54485000=08407000=
|
|
PASSFILE; 54490000=08408000=
|
|
IF ELCLASS = LFTBRKET THEN 54495000=08410000=
|
|
BEGIN %%% COMPILES CODE FOR [NS],[NS,*],[NS,<AEXP>], 54500000=08410000=
|
|
%%% [*],[*,*],[*,<AEXP>],[<AEXP>],[<AEXP>,*], 54505000=08410010=
|
|
%%% AND [<AEXP>,<AEXP>]. THE FIRST (LEFTMOST) 54510000=08410020=
|
|
%%% <AEXP> IS THE READSEEKDISTADDRESS, RESIDING 54515000=08410030=
|
|
%%% IN THE C-FIELD OF THE DSKADDR. THE SECOND 54520000=08411000=
|
|
%%% <AEXP> IS THE WAIT-TIME, RESIDING IN THE 54525000=08411010=
|
|
%%% F-FIELD OF THE DSKADDR, AND ALSO TURNING-ON 54530000=08411020=
|
|
%%% THE EXP-SIGN BIT OF DSKADDR,X"S ARE EMPTIES 54535000=08411030=
|
|
%%% IN THE ABOVE, NS = NO OR STOP. 54540000=08411040=
|
|
STEPIT; %%% STEP OVER [, AND POINT AT NEXT ITEM. 54545000=08412000=
|
|
IF RR1:= 54550000=08412010=
|
|
IF ACCUM[1] = 6"2NO000" THEN 54555000=08412010=
|
|
1 54560000=08412010=
|
|
ELSE 54565000=08412010=
|
|
IF ACCUM[1] = 6"4STOP0" THEN 54570000=08412020=
|
|
2 54575000=08412020=
|
|
ELSE 54580000=08412020=
|
|
0 ^= 0 54585000=08412030=
|
|
THEN %%% HAVE [NS 54590000=08412030=
|
|
IF STEPI = COMMA THEN %%% HAVE [NS, 54595000=08412040=
|
|
IF STEPI = FACTOP THEN %%% HAVE [NS,* 54600000=08412050=
|
|
BEGIN 54605000=08412060=
|
|
IF RR1 = 1 THEN 54610000=08412070=
|
|
EMITNO(1) 54615000=08412080=
|
|
ELSE 54620000=08412080=
|
|
BEGIN 54625000=08412080=
|
|
EMITL(1); 54630000=08412080=
|
|
EMITL(2) 54635000=08412080=
|
|
END; 54640000=08412080=
|
|
STEPIT; 54645000=08412090=
|
|
END 54650000=08413012=
|
|
ELSE 54655000=08413012=
|
|
IF ACCUM[1] = 6"4LOCK0" THEN 54660000=08413012=
|
|
BEGIN %%% [NS,LOCK 54665000=08413014=
|
|
EMITL(1); 54670000=08413016=
|
|
EMITD(47, 4, 1); 54675000=08413016=
|
|
STEPIT; 54680000=08413018=
|
|
END 54685000=08413022=
|
|
ELSE 54690000=08413022=
|
|
BEGIN %%% HAVE [NS,AEXP 54695000=08413022=
|
|
IF RR1 = 2 THEN 54700000=08413030=
|
|
EMITL(1); 54705000=08413030=
|
|
EMITTIME; 54710000=08413040=
|
|
IF RR1 = 2 THEN 54715000=08413050=
|
|
BEGIN 54720000=08413060=
|
|
EMITO(LOR); 54725000=08413060=
|
|
EMITL(2) 54730000=08413060=
|
|
END 54735000=08413080=
|
|
ELSE 54740000=08413080=
|
|
EMITL(1); 54745000=08413080=
|
|
END 54750000=08413100=
|
|
ELSE 54755000=08413100=
|
|
IF RR1 = 1 THEN 54760000=08413100=
|
|
EMITNO(1) %%% ONLY HAVE [NS 54765000=08413100=
|
|
ELSE 54770000=08413110=
|
|
BEGIN 54775000=08413110=
|
|
EMITL(1); 54780000=08413110=
|
|
EMITL(2) 54785000=08413110=
|
|
END 54790000=08413120=
|
|
ELSE 54795000=08413120=
|
|
IF ELCLASS = FACTOP THEN %%% HAVE [* 54800000=08413120=
|
|
IF STEPI = COMMA THEN %%% HAVE [*, 54805000=08413130=
|
|
IF STEPI = FACTOP THEN %%% HAVE [*,* 54810000=08414000=
|
|
BEGIN 54815000=08414010=
|
|
EMITNO(2); 54820000=08414010=
|
|
STEPIT 54825000=08414010=
|
|
END 54830000=08414012=
|
|
ELSE 54835000=08414012=
|
|
IF ACCUM[1] = 6"4LOCK0" THEN 54840000=08414012=
|
|
BEGIN %%% [*,LOCK 54845000=08414014=
|
|
EMITL(1); 54850000=08414016=
|
|
EMITD(47, 4, 1); 54855000=08414016=
|
|
STEPIT; 54860000=08414018=
|
|
END 54865000=08414022=
|
|
ELSE 54870000=08414022=
|
|
BEGIN 54875000=08414022=
|
|
EMITTIME; 54880000=08414022=
|
|
EMITL(2); 54885000=08414022=
|
|
END % [*,A 54890000=08414022=
|
|
ELSE 54895000=08414030=
|
|
EMITNO(2) %%% HAVE ONLY [* 54900000=08414030=
|
|
ELSE 54905000=08415000=
|
|
BEGIN %%% HAVE [AEXP 54910000=08415000=
|
|
AEXP; 54915000=08415010=
|
|
EMITO(SSP); 54920000=08415010=
|
|
EMITL(1); 54925000=08415010=
|
|
EMITO(ADD); 54930000=08415010=
|
|
IF SEEKTOG THEN 54935000=08415020=
|
|
EMITO(CHS); 54940000=08415020=
|
|
EMITPAIR(JUNK, ISN); 54945000=08415030=
|
|
IF ELCLASS = COMMA THEN %%% HAVE [AEXP, 54950000=08416000=
|
|
IF STEPI = FACTOP THEN 54955000=08416010=
|
|
STEPIT %%%[AEXP,* 54960000=08416010=
|
|
ELSE 54965000=08416012=
|
|
IF ACCUM[1] = 6"4LOCK0" THEN 54970000=08416012=
|
|
BEGIN %%% [AEXP,LOCK 54975000=08416014=
|
|
EMITL(1); 54980000=08416016=
|
|
EMITD(47, 4, 1); 54985000=08416016=
|
|
STEPIT; 54990000=08416018=
|
|
END 54995000=08416022=
|
|
ELSE 55000000=08416022=
|
|
BEGIN 55005000=08416022=
|
|
EMITTIME; 55010000=08416022=
|
|
EMITO(LOR) 55015000=08416022=
|
|
END; 55020000=08416022=
|
|
EMITL(2); %%% ABOVE ELSE WAS [AEXP,AEXP 55025000=08416030=
|
|
END; 55030000=08417000=
|
|
IF CHECK(RTBRKET, 424) THEN 55035000=08417010=
|
|
GO EXIT 55040000=08417010=
|
|
ELSE 55045000=08417010=
|
|
STEPIT; 55050000=08417010=
|
|
END 55055000=08418100=
|
|
ELSE 55060000=08418100=
|
|
IF ELCLASS = LEFTPAREN THEN 55065000=08418100=
|
|
BEGIN 55070000=08418200=
|
|
STEPIT; 55075000=08418200=
|
|
AEXP; 55080000=08418200=
|
|
IF ELCLASS = COMMA THEN 55085000=08418200=
|
|
IF STEPI ^= FACTOP THEN % 55090000=08418250=
|
|
BEGIN 55095000=08418300=
|
|
AEXP; 55100000=08418300=
|
|
EMITPAIR(JUNK, ISN) 55105000=08418300=
|
|
END 55110000=08418300=
|
|
ELSE % 55115000=08418300=
|
|
BEGIN 55120000=08418350=
|
|
EMITL(1); 55125000=08418350=
|
|
GRABTOG:= TRUE; 55130000=08418350=
|
|
STEPIT 55135000=08418350=
|
|
END 55140000=08418400=
|
|
ELSE 55145000=08418400=
|
|
EMITPAIR(0, LNG); 55150000=08418400=
|
|
EMITD(33, 33, 15); 55155000=08418500=
|
|
EMITO(IF LOCKTOG THEN SSN ELSE SSP); 55160000=08418600=
|
|
EMITL(REAL(SEEKTOG)); 55165000=08418650=
|
|
EMITD(33, 18, 15); 55170000=08418650=
|
|
IF CHECK(RTPAREN, 104) THEN 55175000=08418700=
|
|
GO EXIT; 55180000=08418700=
|
|
EMITL(REAL(GRABTOG)+2); 55185000=08418800=
|
|
STEPIT; % 55190000=08418800=
|
|
END 55195000=08419000=
|
|
ELSE 55200000=08419000=
|
|
BEGIN 55205000=08419000=
|
|
EMITL(0); 55210000=08419000=
|
|
EMITL(2); 55215000=08419000=
|
|
END; 55220000=08419000=
|
|
IF REVERSETOG THEN 55225000=08421000=
|
|
EMITO(CHS); 55230000=08421000=
|
|
END; 55235000=08421500=
|
|
IF ELCLASS = RTPAREN THEN 55240000=08423000=
|
|
BEGIN 55245000=08423000=
|
|
COMMENT NO FORMAT,NO LIST CASE; 55250000=08423000=
|
|
EMITL(0); 55255000=08424000=
|
|
EMITL(0); 55260000=08424000=
|
|
EMITL(0); 55265000=08424000=
|
|
GOGOGO:= NOT MAYI; % 55270000=08424100=
|
|
GO CHKACTIONLABELS; 55275000=08425000=
|
|
END; 55280000=08426000=
|
|
IF CHECK(COMMA, 424) THEN 55285000=08428000=
|
|
GO TO EXIT; 55290000=08428000=
|
|
COMMENT ERROR 424 MEANS IMPROPER FILE DELIMITER IN READ 55295000=08429000=
|
|
STATEMENT; 55300000=08430000=
|
|
IF STEPI = FACTOP THEN 55305000=08432000=
|
|
BEGIN 55310000=08432000=
|
|
COMMENT *,LIST CASE; 55315000=08432000=
|
|
EMITL(0); 55320000=08433000=
|
|
EMITL(0); 55325000=08433000=
|
|
GO PASSLIST; 55330000=08433000=
|
|
END; 55335000=08434000=
|
|
IF ELCLASS = MULOP THEN 55340000=08436000=
|
|
BEGIN 55345000=08436000=
|
|
COMMENT FREE FIELD FORMAT CASE; 55350000=08436000=
|
|
IF STEPI = MULOP THEN 55355000=08437000=
|
|
EMITL(2) 55360000=08437000=
|
|
ELSE 55365000=08437000=
|
|
BEGIN 55370000=08437050=
|
|
EMITL(1); 55375000=08437050=
|
|
I:= I-1; 55380000=08437050=
|
|
END; 55385000=08437050=
|
|
EMITL(0); 55390000=08437075=
|
|
GO TO PASSLIST; 55395000=08437075=
|
|
END; 55400000=08438000=
|
|
IF RANGE(FRMTID, SUPERFRMTID) THEN 55405000=08440000=
|
|
BEGIN 55410000=08440000=
|
|
COMMENT THE SECOND PARAMETER IS A FORMAT; 55415000=08440000=
|
|
PASSFORMAT; 55420000=08441000=
|
|
READXFORM: 55425000=08442000=
|
|
IF TABLE(I+1) = COMMA THEN 55430000=08443000=
|
|
GO PASSLIST; 55435000=08443000=
|
|
STEPIT; 55440000=08444000=
|
|
IF CHECK(RTPAREN, 425) THEN 55445000=08446000=
|
|
GO TO EXIT; 55450000=08446000=
|
|
COMMENT ERROR 425 MEANS IMPROPER FORMAT 55455000=08447000=
|
|
DELIMITER IN READ STATEMENT; 55460000=08448000=
|
|
EMITL(0); 55465000=08449000=
|
|
GO CHKACTIONLABELS; 55470000=08449000=
|
|
END; 55475000=08450000=
|
|
IF Q:= ACCUM[1] = 6"1<0000" THEN 55480000=08450010=
|
|
BEGIN 55485000=08450020=
|
|
EXPLICITFORMAT; 55490000=08450020=
|
|
GO TO READXFORM; 55495000=08450020=
|
|
END; 55500000=08450020=
|
|
IF MAYI THEN 55505000=08450100=
|
|
BEGIN 55510000=08450200=
|
|
KLUDGE(HOLD); 55515000=08450200=
|
|
GO TO EXIT; 55520000=08450300=
|
|
END ARRAY TO ARRAY CASE; 55525000=08450400=
|
|
EMITL(0); 55530000=08451000=
|
|
AEXP; 55535000=08451000=
|
|
IF CHECK(COMMA, 426) THEN 55540000=08453000=
|
|
GO TO EXIT; 55545000=08453000=
|
|
COMMENT ERROR 426 MEANS IMPROPER DELIMITER FOR SECOND 55550000=08454000=
|
|
PARAMETER; 55555000=08455000=
|
|
STEPIT; 55560000=08456000=
|
|
IF RANGE(BOOARRAYID, INTARRAYID) THEN 55565000=08458000=
|
|
BEGIN COMMENT THIS IS THE ROW DESIGNATOR CASE; 55570000
|
|
TVAR:= FL; 55571000
|
|
VARIABLE(TVAR); 55580000
|
|
IF TABLE(I-2) ^= FACTOP THEN 55585000=08461000=
|
|
BEGIN COMMENT ERROR 427 MEANS IMPROPER 55590000
|
|
ROW DESIGNATOR IN READ; 55600000=08462000=
|
|
ERROR(427); 55605000=08463000=
|
|
GO TO EXIT; 55610000=08463000=
|
|
END; 55615000=08464000=
|
|
IF CHECK(RTPAREN, 428) THEN 55620000=08466000=
|
|
GO TO EXIT; COMMENT ERROR 428 MEANS IMPROPER ROW DESIGNATOR55625000
|
|
DELIMITER IN READ STATEMENT; 55635000=08468000=
|
|
GOGOGO:= TRUE; % 55640000=08468100=
|
|
GO CHKACTIONLABELS; 55645000=08469000=
|
|
END 55650000=08471000=
|
|
ELSE 55655000=08471000=
|
|
BEGIN COMMENT ERROR 429 MEANS MISSING ROW DESIGNATOR;55660000
|
|
ERROR(429); 55670000=08472000=
|
|
GO TO EXIT; 55675000=08472000=
|
|
END; 55680000=08473000=
|
|
PASSLIST: 55685000=08474000=
|
|
STEPIT; 55690000=08474000=
|
|
IF CHECK(COMMA, 430) THEN 55695000=08476000=
|
|
GO TO EXIT; 55700000=08476000=
|
|
COMMENT ERROR 430 MEANS IMPROPER DELIMITER PRECEEDING 55705000=08477000=
|
|
THE LIST IN A READ STATEMENT; 55710000=08478000=
|
|
IF STEPI ^= LISTID AND ELCLASS ^= SUPERLISTID THEN 55715000=08480000=
|
|
BEGIN 55720000=08480000=
|
|
RR1:= LISTGEN; 55725000=08481000=
|
|
I:= I-1; 55730000=08482000=
|
|
GO TO CHKACTIONLABELS 55735000=08484000=
|
|
END; 55740000=08484000=
|
|
CHECKER(ELBAT[I]); 55745000=08484500=
|
|
IF ELCLASS = SUPERLISTID THEN 55750000=08485000=
|
|
BEGIN 55755000=08486000=
|
|
COMMENT SUBSCRIPTED SWITCH LIST ID; 55760000=08486000=
|
|
LISTADDRESS:= ELBAT[I].ADDRESS; 55765000=08488000=
|
|
BANA; 55770000=08489000=
|
|
EMITV(LISTADDRESS); 55775000=08489500=
|
|
IF LISTADDRESS > 1023 THEN 55780000=08489510=
|
|
EMITO(PRTE); 55785000=08489510=
|
|
EMITO(LOD); 55790000=08489520=
|
|
I:= I-1 55795000=08489520=
|
|
END 55800000=08489530=
|
|
ELSE 55805000=08489530=
|
|
BEGIN 55810000=08489530=
|
|
COMMENT A COMMON LIST; 55815000=08489530=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 55820000=08489550=
|
|
END; 55825000=08489560=
|
|
STEPIT; 55830000=08489570=
|
|
IF CHECK(RTPAREN, 449) THEN 55835000=08489580=
|
|
GO TO EXIT; 55840000=08489580=
|
|
COMMENT 449 IS IMPROPER LIST DELIMETER IN READ STATEMENT; 55845000=08489590=
|
|
CHKACTIONLABELS: 55850000=08491000=
|
|
HANDLETHETAILENDOFAREADORSPACESTATEMENT; 55855000=08491000=
|
|
EXIT: 55860000=08492000=
|
|
; 55865000=08492000=
|
|
END READSTMT; 55870000=08493000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55875000=08493000=
|
|
REAL PROCEDURE FILEATTRIBUTEINDX(T);% RETURNS A ZERO IF THE NEXTSCANND55880000=08493010=
|
|
VALUE 55885000=08493015=
|
|
T; 55890000=08493015=
|
|
BOOLEAN 55895000=08493015=
|
|
T; % ITEM IS NOT A FILE ATTRIBUTE. 55900000=08493015=
|
|
BEGIN % RETURNS THE ASSOCIATED INDEX IF 55905000=08493020=
|
|
REAL 55910000=08493030=
|
|
I; % IT IS A FILE ATTRIBUTE. 55915000=08493030=
|
|
LABEL 55920000=08493040=
|
|
EXIT; 55925000=08493040=
|
|
STOPDEFINE:= T;% MAY DISALLOW DEFINES IN FILE-ATTRIBUTE PART. 55930000=08493050=
|
|
STEPIT; % NOW POINTED AT ATTRIBUTE (STEPIT TURNS OFF STOP DEFINE). 55935000=08493060=
|
|
IF I:= FILEATTRIBUTES[0] = 0 THEN 55940000=08493070=
|
|
BEGIN 55945000=08493080=
|
|
FILL FILEATTRIBUTES[*] WITH % NON-ASSGNBL ATTRBTS HAVE.[46:1]=155950000=08493090=
|
|
% BOOLEAN ATTRIBUTES HAVE.[45:1]=1,55955000=08493091=
|
|
% ALPHA ATTRIBUTES HAVE.[44:1]=1. 55960000=08493092=
|
|
% THIS NEXT NUMBER IS THE CURRENT # OF FILE ATTRIBUTES: 55965000=08493093=
|
|
17 55970000=08493094=
|
|
,6"6ACCES"%***ANY ADDITIONAL ATTRIBUTES MUST BE INSERTED***55975000=08493095=
|
|
,6"5MYUSE"%******IMMEDIATELY AFTER THE LAST ATTRIBUTE******55980000=08493096=
|
|
,6"4SAVE0" 55985000=08493097=
|
|
,6"8OTHER" % "OTHERUSE". 55990000=08493098=
|
|
,6"404MFID0" 55995000=08493099=
|
|
,6"403FID00" 56000000=08493100=
|
|
,6"4REEL0" 56005000=08493101=
|
|
,6"4DATE0" 56010000=08493102=
|
|
,6"5CYCLE" 56015000=08493103=
|
|
,6"4TYPE0" 56020000=08493104=
|
|
,6"5AREAS" 56025000=08493105=
|
|
,6"8AREAS" % "AREASIZE". 56030000=08493106=
|
|
,6"2EU000" 56035000=08493107=
|
|
,6"5SPEED" 56040000=08493108=
|
|
,6"9TIMEL" % "TIMELIMIT" 56045000=08493109=
|
|
,6"+08IOSTA" % "IOSTATUS" 56050000=08493110=
|
|
,6"9SENSI" % "SENSITIVE" 56055000=08493111=
|
|
% THIS CARD MERELY OCCUPIES A SEQUENCE NUMBER. 56060000=08493120=
|
|
; % END OF FILL STATEMENT. 56065000=08493130=
|
|
I:= FILEATTRIBUTES[0]; 56070000=08493140=
|
|
END; 56075000=08493150=
|
|
FOR I:= I STEP-1 UNTIL 1 DO 56080000=08493160=
|
|
IF FILEATTRIBUTES[I].[35:36] = Q THEN 56085000=08493160=
|
|
BEGIN 56090000=08493170=
|
|
FILEATTRIBUTEINDX:= I; 56095000=08493170=
|
|
GO EXIT 56100000=08493170=
|
|
END; 56105000=08493170=
|
|
EXIT: 56110000=08493190=
|
|
END OF FILEATTRIBUTEINDX; 56115000=08493190=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%56120000=08493190=
|
|
56125000=08493200=
|
|
COMMENT FILEATTRIBUTEHANDLER HANDLES FILE ATTRIBUTE STUFF. IT CONSTRUCTS56130000=08493200=
|
|
A CALL ON FILEATTRIBUTES INTRINSIC.IT IS CALLED BY 5 PROCEDURES:56135000=08493210=
|
|
1. STMT: PASSES N=FS, AND TELLS FAH TO EXPECT AN ASSIGNOP. 56140000=08493220=
|
|
FAH WILL TELL FILEATTRIBUTES TO CHANGE THE ATTRIBUTE56145000=08493230=
|
|
AND XIT. 56150000=08493240=
|
|
2. ACTUALPARAPART: 56155000=08493250=
|
|
PASSES N=FA, AND TELLS FAH THAT THE FILE DESC HAS 56160000=08493260=
|
|
ALREADY BEEN EMITTED. IT ALSO TELLS FAH TO LEAVE 56165000=08493270=
|
|
THE VALUE OF THE ATTRIBUTE IN THE TOP OF THE STACK. 56170000=08493280=
|
|
3. PRIMARY: 56175000=08493290=
|
|
PASSES N=FP, AND TELLS FAH TO HANDLE AN ASSIGNOP 56180000=08493300=
|
|
IF THERE IS ONE (BY CALLING AEXP OR BEXP, DEPENDING 56185000=08493310=
|
|
ON THE TYPE OF ATTRIBUTE) OR JUST TO EMIT A ZERO. IF56190000=08493320=
|
|
THERE IS AN ASSIGNOP, THEN FAH TELLS FILEATTRIBUTES 56195000=08493330=
|
|
TO BOTH CHANGE THE ATTRIBUTE AND LEAVE THE VALUE 56200000=08493340=
|
|
IN THE TOP OF THE STACK. OTHERWISE, FAH TELLS FILE- 56205000=08493350=
|
|
ATTRIBUTES TO ONLY LEAVE THE VALUE OF THE REQUIRED 56210000=08493360=
|
|
ATTRIBUTE IN THE TOP OF THE STACK. IN ALL CASES, 56215000=08493370=
|
|
FAH WILL RETURN THE TYPE OF ATTRIBUTE COMPILED 56220000=08493380=
|
|
(ATYPE OR BTYPE). 56225000=08493390=
|
|
4. BOOPRIM: 56230000=08493400=
|
|
PASSES N=FP, AND DOES THE SAME AS #3 (ABOVE). 56235000=08493410=
|
|
5. IODEC: 56240000=08493420=
|
|
PASSES N=FIO, AND TELLS FAH THAT A MKS & FILE DESC 56245000=08493430=
|
|
HAVE ALREADY BEEN EMITTED, THE ATTRIBUTEINDX IS 56250000=08493440=
|
|
DETERMINED BY IODEC, AND IS PASSED VIA GT1. 56255000=08493450=
|
|
END OF COMMENT ; 56260000=08493460=
|
|
INTEGER PROCEDURE FILEATTRIBUTEHANDLER(N); 56265000=08493470=
|
|
VALUE 56270000=08493470=
|
|
N; 56275000=08493470=
|
|
REAL 56280000=08493470=
|
|
N; 56285000=08493470=
|
|
BEGIN 56290000=08493480=
|
|
REAL 56295000=08493490=
|
|
ATTRIBUTEINDX; 56300000=08493490=
|
|
BOOLEAN 56305000=08493500=
|
|
ASSOP; 56310000=08493500=
|
|
LABEL 56315000=08493510=
|
|
DONESOME, 56320000=08493510=
|
|
DONEMORE, 56325000=08493510=
|
|
EXIT; 56330000=08493510=
|
|
IF N = FA THEN 56335000=08493520=
|
|
GO TO DONESOME 56340000=08493520=
|
|
ELSE 56345000=08493520=
|
|
IF N = FIO THEN 56350000=08493520=
|
|
BEGIN 56355000=08493530=
|
|
ATTRIBUTEINDX:= GT1; 56360000=08493530=
|
|
IF STEPI ^= RELOP THEN 56365000=08493530=
|
|
I:= I-1; 56370000=08493530=
|
|
ASSOP:= TRUE; 56375000=08493530=
|
|
EMITL(0); 56380000=08493540=
|
|
EMITL(0); %%% DUM1 PARAMETER...FOR POSSIBLE FUTR USE.56385000=08493540=
|
|
GO TO DONEMORE; 56390000=08493550=
|
|
END; 56395000=08493560=
|
|
EMITO(MKS); 56400000=08493570=
|
|
PASSFILE; % MARK THE STACK & STACK A FILE DESCRIPTOR. 56405000=08493570=
|
|
IF ELCLASS ^= PERIOD THEN 56410000=08493580=
|
|
ERR(290) 56415000=08493580=
|
|
ELSE 56420000=08493580=
|
|
BEGIN 56425000=08493590=
|
|
DONESOME: 56430000=08493610=
|
|
IF ATTRIBUTEINDX:= FILEATTRIBUTEINDX(TRUE) = 0 THEN 56435000=08493610=
|
|
ERR(291) 56440000=08493610=
|
|
ELSE 56445000=08493610=
|
|
BEGIN 56450000=08493620=
|
|
STEPIT; 56455000=08493625=
|
|
IF FALSE THEN BEGIN COMMENT$$DELETE THIS CARD TO GET ACTION LABEL56460000=08493625=
|
|
IF STEPI=LFTBRKET THEN 56475000=08493630=
|
|
BEGIN 56480000=08493640=
|
|
STEPIT; 56485000=08493650=
|
|
DEXP; 56490000=08493650=
|
|
IF CHECK(RTBRKET, 433) THEN 56495000=08493650=
|
|
GO EXIT; 56500000=08493650=
|
|
STEPIT; 56505000=08493650=
|
|
END 56510000=08493670=
|
|
ELSE 56515000=08493670=
|
|
EMITL(0); 56520000=08493670=
|
|
EMITL(0); %%% DUM1 PARAMETER...FOR POSSIBLE FUTURE USE. 56525000=08493675=
|
|
IF ASSOP:= ELCLASS = ASSIGNOP THEN 56530000=08493680=
|
|
BEGIN 56535000=08493700=
|
|
IF N ^= FS THEN 56540000=08493705=
|
|
FLAG(295); %**DELETE THIS CARD TO ALLOW GENRL FILATT ASSGNMT56545000=08493705=
|
|
DONEMORE: 56550000=08493710=
|
|
IF BOOLEAN(FILEATTRIBUTES[ATTRIBUTEINDX].[46:1]) THEN 56555000=08493720=
|
|
FLAG(293); 56560000=08493720=
|
|
STEPIT; 56565000=08493730=
|
|
IF BOOLEAN(FILEATTRIBUTES[ATTRIBUTEINDX].[45:1]) THEN 56570000=08493750=
|
|
BEXP 56575000=08493750=
|
|
ELSE 56580000=08493750=
|
|
AEXP; 56585000=08493750=
|
|
END 56590000=08493770=
|
|
ELSE 56595000=08493770=
|
|
IF N = FS THEN 56600000=08493770=
|
|
BEGIN 56605000=08493770=
|
|
ERR(292); 56610000=08493770=
|
|
GO EXIT 56615000=08493770=
|
|
END 56620000=08493780=
|
|
ELSE 56625000=08493780=
|
|
EMITL(0); 56630000=08493780=
|
|
EMITNUM(IF ATTRIBUTEINDX = 1 THEN 6"6ACCESS" ELSE IF 56635000=08493830=
|
|
ATTRIBUTEINDX = 4 THEN 6"6OTHRUS" ELSE IF ATTRIBUTEINDX = 12 56640000=08493830=
|
|
THEN 6"6ARASIZ" ELSE IF ATTRIBUTEINDX = 15 THEN 6"6TIMLMT" 56645000=08493830=
|
|
ELSE IF ATTRIBUTEINDX = 16 THEN 6"6IOSTAT" ELSE IF 56650000=08493830=
|
|
ATTRIBUTEINDX = 17 THEN 6"6SNSTIV" ELSE 0 & 56655000=08493830=
|
|
FILEATTRIBUTES[ATTRIBUTEINDX][41:35:36] & 56660000=08493830=
|
|
FILEATTRIBUTES[ATTRIBUTEINDX][46:44:1]); 56665000=08493830=
|
|
EMITL((ATTRIBUTEINDX-1) & REAL(N = FP OR N = FA)[8:0:1] & 56670000=08493850=
|
|
REAL(ASSOP)[9:0:1]); 56675000=08493850=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 56680000=08493860=
|
|
EMITV(GNAT(FILATTINT)); 56685000=08493860=
|
|
FILEATTRIBUTEHANDLER:= 56690000=08493880=
|
|
IF BOOLEAN(FILEATTRIBUTES[ATTRIBUTEINDX].[45:1]) THEN 56695000=08493890=
|
|
BTYPE 56700000=08493890=
|
|
ELSE 56705000=08493890=
|
|
ATYPE; 56710000=08493890=
|
|
END; 56715000=08493900=
|
|
END; 56720000=08493910=
|
|
EXIT: 56725000=08493930=
|
|
END OF FILEATTRIBUTEHANDLER; 56730000=08493930=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%56735000=08493930=
|
|
PROCEDURE SPACESTMT; 56740000=08494000=
|
|
BEGIN 56745000=08495000=
|
|
COMMENT THE SPACE STATEMENT IS BEST THOUGHT OF AS A 56750000=08495000=
|
|
SUBSET OF THE READ STATEMENT WHERE ZERO WORDS ARE READ. 56755000=08496000=
|
|
FOR THE EXACT SYNTAX FOR THE SPACE STATEMENT AND THE 56760000=08497000=
|
|
PARAMETERS PASSED TO THE INTERPTI ROUTINE SEE THE COMMENTS56765000=08498000=
|
|
FOR THE READ STATEMENT; 56770000=08499000=
|
|
LABEL 56775000=08500000=
|
|
EXIT; 56780000=08500000=
|
|
COMMENT EXIT APPEARS AFTER THE LAST 56785000=08500000=
|
|
EXECUTABLE STATEMENT IN SPACESTMT; 56790000=08501000=
|
|
STEPIT; 56795000=08502000=
|
|
IF CHECK(LEFTPAREN, 434) THEN 56800000=08504000=
|
|
GO TO EXIT; 56805000=08504000=
|
|
COMMENT ERROR 434 MEANS MISSING LEFT PARENTHESIS IN 56810000=08505000=
|
|
SPACE STATEMENT; 56815000=08506000=
|
|
STEPIT; 56820000=08507000=
|
|
IF NOT RANGE(FILEID, SUPERFILEID) THEN 56825000=08509000=
|
|
BEGIN 56830000=08509000=
|
|
COMMENT ERROR 435 MEANS IMPROPER FILE 56835000=08509000=
|
|
IDENTIFIER IN SPACE STATEMENT; 56840000=08510000=
|
|
ERROR(435); 56845000=08511000=
|
|
GO TO EXIT; 56850000=08511000=
|
|
END; 56855000=08512000=
|
|
EMITO(MKS); 56860000=08513000=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 56865000=08515000=
|
|
PASSFILE; 56870000=08515000=
|
|
EMITL(0); 56875000=08515100=
|
|
IF CHECK(COMMA, 436) THEN 56880000=08517000=
|
|
GO TO EXIT; 56885000=08517000=
|
|
COMMENT ERROR 436 MEANS MISSING COMMA IN SPACE STATEMENT;56890000=08518000=
|
|
STEPIT; 56895000=08519000=
|
|
AEXP; 56900000=08519000=
|
|
IF CHECK(RTPAREN, 437) THEN 56905000=08521000=
|
|
GO TO EXIT; 56910000=08521000=
|
|
COMMENT ERROR 437 MEANS MISSING RIGHT PARENTHESIS IN 56915000=08522000=
|
|
SPACE STATEMENT; 56920000=08523000=
|
|
EMITL(0); 56925000=08524000=
|
|
EMITL(0); 56930000=08524000=
|
|
EMITL(1); 56935000=08524000=
|
|
HANDLETHETAILENDOFAREADORSPACESTATEMENT; 56940000=08525000=
|
|
EXIT: 56945000=08526000=
|
|
; 56950000=08526000=
|
|
END SPACESTMT; 56955000=08527000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%56960000=08527000=
|
|
PROCEDURE WRITESTMT; 56965000=08528000=
|
|
BEGIN 56970000=08529000=
|
|
COMMENT WRITESTMT GENERATES CODE TO CALL INTERPTO, AN 56975000=08529000=
|
|
INTRINSIC PROCEDURE ON THE DRUM, PASSING TO IT PARAMETERS 56980000=08530000=
|
|
DETERMINED BY THE FORMAT OF THE WRITE STATEMENT. 56985000=08531000=
|
|
I HAVE LISTED BELOW THE VARIOUS CASES CONSIDERED BY THE 56990000=08532000=
|
|
WRITESTMT PROCEDURE AND THE CORRESPONDING PARAMETERS WHICH56995000=08533000=
|
|
ARE PASSED TO INTERPTO. 57000000=08534000=
|
|
**********************************************************57005000=08535000=
|
|
FOR AN EXPLANATION OF THE PARAMETERS AND SYNTACTICAL 57010000=08536000=
|
|
UNITS NOT DESCRIBED HERE, SEE THE COMMENTS FOR THE 57015000=08537000=
|
|
READSTMT ROUTINE. 57020000=08538000=
|
|
<CARRIAGE CONTROL>::= [DBL]/[PAGE]/[NO]/<ARITHMETIC 57025000=08539000=
|
|
EXPRESSION>/<EMPTY> 57030000=08540000=
|
|
CHARI IS THE CHARACTER MODE OUTPUT EDITING ROUTINE SIMILAR57035000=08541000=
|
|
TO CIMI FOR INPUT. 57040000=08542000=
|
|
<CARRIAGE> <EMPTY> [DBL] [PAGE] [NO] <ARITHMETIC EXP> 57045000=08543000=
|
|
CHANNEL SKIP 0 0 0 0 EXPRESSIONS VALUE 57050000=08544000=
|
|
LINESKIP 1 2 4 8 0 57055000=08545000=
|
|
WRITE(<FILE PART><CARRIAGE CONTROLS>)/ 57060000=08546000=
|
|
- - - - - - - - - - - - - - 57065000=08547000=
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,0,0,0) 57070000=08548000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 57075000=08549000=
|
|
WRITE(<FILE PART><CARRIAGE CONTROL>,<FORMAT PART>)/ 57080000=08550000=
|
|
- - - - - - - - - - - - - - 57085000=08551000=
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,FORMAT 57090000=08552000=
|
|
INDEX,FORMAT ARRAY DESCRIPTOR,0) 57095000=08553000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 57100000=08554000=
|
|
WRITE(<FILE PART><CARRIAGE CONTROL>,<FORMAT PART>,<LIST>)/57105000=08555000=
|
|
- - - - - - - - - - - - - - 57110000=08556000=
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,FORMAT 57115000=08557000=
|
|
INDEX,FORMAT ARRAY DESCRIPTOR,LIST ROUTINE DESCRIPTOR) 57120000=08558000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 57125000=08559000=
|
|
WRITE(<FILE PART><CARRIAGE CONTROL>,*,<LIST>)/ 57130000=08560000=
|
|
- - - - - - - - - - - - - - 57135000=08561000=
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,0,0,LIST 57140000=08562000=
|
|
ROUTINE DESCRIPTOR) 57145000=08563000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 57150000=08564000=
|
|
WRITE(<FILE PART>(CARRIAGE CONTROL>,<ARITHMETIC EXPRESSION57155000=08565000=
|
|
>,<ROW DESIGNATOR>) 57160000=08566000=
|
|
- - - - - - - - - - - - - - 57165000=08567000=
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,0,N,ARRAY 57170000=08568000=
|
|
ROW DESCRIPTOR) 57175000=08569000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** **; 57180000=08570000=
|
|
LABEL 57185000=08571000=
|
|
EXIT; COMMENT EXIT APPEARS AFTER THE LAST 57185100
|
|
EXECUTABLE STATEMENT IN WRITESTMT; 57195000=08572000=
|
|
LABEL 57200000=08573000=
|
|
CHKSECOND; COMMENT I IS NOW POINTING AT THE COMMA 57205000=08573000=
|
|
SEPARATING THE FIRST AND SECOND 57215000=08574000=
|
|
PARAMETERS; 57220000=08575000=
|
|
LABEL 57225000=08576000=
|
|
ONEPARENSH; COMMENT I IS POINT AT THE RIGHT 57230000=08576000=
|
|
PARENTHESIS AT THIS POINT AND I HAVE 57240000=08577000=
|
|
JUST DISCOVERED THAT THIS IS THE ONE 57245000=08578000=
|
|
PARAMETER CASE; 57250000=08579000=
|
|
DEFINE 57255000=08580000=
|
|
ACCUM1 = RR1 #; COMMENT ACCUM1 IS USED AS A 57260000=08580000=
|
|
TEMPORARY CELL FOR ACCUM[1]; 57270000=08581000=
|
|
REAL 57271000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 57272000
|
|
%VOID 57275000=08582000=
|
|
%VOID 57280000=08583000=
|
|
%VOID 57285000=08584000=
|
|
%VOID 57290000=08585000=
|
|
LABEL 57295000=08586000=
|
|
PASSLIST; COMMENT I IS POINTING AT THE COMMA 57300000=08586000=
|
|
PRECEEDING THE LIST WHEN THIS LABEL IS 57310000=08587000=
|
|
REACHED; 57315000=08588000=
|
|
LABEL 57320000=08589000=
|
|
EMITCALL; COMMENT I IS POINTING AT THE STATEMENT 57325000=08589000=
|
|
DELIMITER. THE CODE AT EMITCALL EMITS THE57335000=08590000=
|
|
CODE TO CALL INTERPTO; 57340000=08591000=
|
|
LABEL 57345000=08591100=
|
|
CHKRTPAREN; 57350000=08591100=
|
|
LABEL 57355000=08591200=
|
|
WRITXFORM; 57360000=08591200=
|
|
INTEGER 57365000=08591500=
|
|
LISTADDRESS; COMMENT TEMP TO HOLD LIST ADD DESC; 57370000=08591500=
|
|
BOOLEAN 57380000=08591600=
|
|
LOCKTOG, 57385000=08591600=
|
|
ARC; 57390000=08591600=
|
|
INTEGER 57395000=08591700=
|
|
HOLD; % 57400000=08591700=
|
|
IF(LOCKTOG:= STEPI = LOCKV) THEN 57405000=08592000=
|
|
STEPIT; 57410000=08592000=
|
|
IF CHECK(LEFTPAREN, 438) THEN 57415000=08594000=
|
|
GO TO EXIT; 57420000=08594000=
|
|
COMMENT ERROR 438 MEANS MISSING LEFT PARENTHESIS IN A 57425000=08595000=
|
|
WRITE STATEMENT; 57430000=08596000=
|
|
EMITO(MKS); 57435000=08597000=
|
|
IF STEPI >= BOOARRAYID AND ELCLASS <= INTARRAYID THEN 57440000=08597100=
|
|
BEGIN 57445000=08597200=
|
|
TVAR:= FL; 57446000
|
|
VARIABLE(TVAR); 57450000
|
|
IF TABLE(I-2) ^= FACTOP THEN 57455000=08597300=
|
|
BEGIN 57460000=08597400=
|
|
ERR(439); 57465000=08597400=
|
|
GO TO EXIT 57470000=08597400=
|
|
END; 57475000=08597400=
|
|
ARC:= TRUE; 57480000=08597450=
|
|
HOLD:= L; 57485000=08597450=
|
|
EMIT(11); 57490000=08597500=
|
|
EMIT(4); 57495000=08597500=
|
|
EMITO(280); 57500000=08597500=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 57505000=08597600=
|
|
EMITO(XCH); 57510000=08597700=
|
|
END 57515000=08597900=
|
|
ELSE 57520000=08597900=
|
|
BEGIN 57525000=08597900=
|
|
IF NOT RANGE(FILEID, SUPERFILEID) THEN 57530000=08599000=
|
|
BEGIN 57535000=08599000=
|
|
COMMENT ERROR 439 MEANS IMPROPER FILE 57540000=08599000=
|
|
IDENTIFIER IN A WRITE STATEMENT; 57545000=08600000=
|
|
ERR(439); 57550000=08601000=
|
|
GO TO EXIT; 57555000=08601000=
|
|
END; 57560000=08602000=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 57565000=08605000=
|
|
PASSFILE; 57570000=08605000=
|
|
END; 57575000=08605500=
|
|
IF (RRB1:= ELCLASS = COMMA) OR ELCLASS = RTPAREN THEN 57580000=08607000=
|
|
BEGIN 57585000=08607000=
|
|
COMMENT STANDARD CARRIAGE CONTROL CASE; 57590000=08607000=
|
|
EMITL(0); 57595000=08608000=
|
|
EMITL(1); 57600000=08608000=
|
|
IF RRB1 THEN 57605000=08610000=
|
|
GO CHKSECOND; 57610000=08610000=
|
|
ONEPARENSH: 57615000=08611000=
|
|
STEPIT; 57620000=08611000=
|
|
EMITL(0); 57625000=08611000=
|
|
EMITL(0); 57630000=08611000=
|
|
GOGOGO:= NOT ARC; % 57635000=08611100=
|
|
EMITL(0); 57640000=08612000=
|
|
GO EMITCALL; 57645000=08612000=
|
|
END; 57650000=08613000=
|
|
IF ELCLASS = LEFTPAREN THEN 57655000=08613100=
|
|
BEGIN 57660000=08613200=
|
|
STEPIT; 57665000=08613200=
|
|
AEXP; 57670000=08613200=
|
|
EMITO(IF LOCKTOG THEN SSN ELSE SSP); 57675000=08613200=
|
|
IF ELCLASS = COMMA THEN 57680000=08613300=
|
|
BEGIN 57685000=08613300=
|
|
STEPIT; 57690000=08613300=
|
|
AEXP 57695000=08613300=
|
|
END 57700000=08613400=
|
|
ELSE 57705000=08613400=
|
|
EMITPAIR(0, LNG); 57710000=08613400=
|
|
EMITD(33, 33, 15); 57715000=08613500=
|
|
EMIT(0); 57720000=08613500=
|
|
IF CHECK(RTPAREN, 104) THEN 57725000=08613600=
|
|
GO EXIT 57730000=08613600=
|
|
ELSE 57735000=08613600=
|
|
GO CHKRTPAREN 57740000=08613700=
|
|
END; 57745000=08613700=
|
|
IF CHECK(LFTBRKET, 440) THEN 57750000=08615000=
|
|
GO TO EXIT; 57755000=08615000=
|
|
COMMENT ERROR 440 MEANS IMPROPER DELIMITER FOR FIRST 57760000=08616000=
|
|
PARAMETER IN A WRITE STATEMENT; 57765000=08617000=
|
|
STEPIT; 57770000=08618000=
|
|
%%% THE FOLLOWING CODE COMPILES CODE FOR [DPN],[DPN,*], 57775000=08619000=
|
|
%%% [DPN,<AEXP>],[*],[*,*],[*,<AEXP>],[<AEXP>],[<AEXP>,*] 57780000=08619010=
|
|
%%% AND [<AEXP>,<AEXP>], WHERE DPN IN STOP, DBL, PAGE, OR 57785000=08619020=
|
|
%%% NO. THE FIRST (LEFTMOST) <AEXP> IS THE CHANNELSKIP, 57790000=08619030=
|
|
%%% RIGHT JUSTIFIED TO ITS C-FIELD. THE SECOND <AEXP> IS 57795000=08619040=
|
|
%%% THE WAIT-TIME, RESIDING IN THE F-FIELD OF CHANNELSKIP,57800000=08619050=
|
|
%%% AND ALSO TURNING ON THE EXP-SIGN BIT OF CHANNELSKIP, 57805000=08619060=
|
|
%%% *"S ARE CONSIDERED TO BE EMPTIES. 57810000=08619070=
|
|
IF ACCUM1:= 57815000=08619080=
|
|
IF ACCUM1:= ACCUM[1] = 6"3DBL00" THEN 57820000=08619080=
|
|
2 57825000=08619080=
|
|
ELSE 57830000=08619080=
|
|
IF ACCUM1 = 6"4PAGE0" THEN 57835000=08619090=
|
|
4 57840000=08619090=
|
|
ELSE 57845000=08619090=
|
|
IF ACCUM1 = 6"4STOP0" THEN 57850000=08619095=
|
|
16 57855000=08619095=
|
|
ELSE 57860000=08619095=
|
|
IF ACCUM1 = 6"2NO000" THEN 57865000=08620000=
|
|
8 57870000=08620000=
|
|
ELSE 57875000=08620000=
|
|
0 ^= 0 57880000=08620000=
|
|
THEN %%% [DPN57885000=08620000=
|
|
IF STEPI = COMMA THEN %%% HAVE [DPN, 57890000=08620010=
|
|
IF STEPI = FACTOP THEN %%% HAVE [DPN,* 57895000=08620020=
|
|
BEGIN 57900000=08621000=
|
|
EMITNO(ACCUM1); 57905000=08621000=
|
|
STEPIT 57910000=08621000=
|
|
END 57915000=08621002=
|
|
ELSE 57920000=08621002=
|
|
IF ACCUM[1] = 6"6UNLOC" THEN %%% [NS,UNLOCK 57925000=08621002=
|
|
BEGIN 57930000=08621004=
|
|
EMITL(1); 57935000=08621004=
|
|
EMITD(47, 4, 1); 57940000=08621004=
|
|
STEPIT 57945000=08621004=
|
|
END 57950000=08621010=
|
|
ELSE 57955000=08621010=
|
|
BEGIN 57960000=08621010=
|
|
EMITTIME; 57965000=08621010=
|
|
EMITL(ACCUM1) 57970000=08621010=
|
|
END %[DPN,AEXP57975000=08621010=
|
|
ELSE 57980000=08621020=
|
|
EMITNO(ACCUM1) %%% HAVE ONLY [DPN 57985000=08621020=
|
|
ELSE 57990000=08622000=
|
|
IF ELCLASS = FACTOP THEN %%% HAVE [* 57995000=08622000=
|
|
IF STEPI = COMMA THEN %%% HAVE [*, 58000000=08622010=
|
|
IF STEPI = FACTOP THEN %%% HAVE [*,* 58005000=08623000=
|
|
BEGIN 58010000=08624000=
|
|
EMITNO(1); 58015000=08624000=
|
|
STEPIT 58020000=08624000=
|
|
END 58025000=08624002=
|
|
ELSE 58030000=08624002=
|
|
IF ACCUM[1] = 6"6UNLOC" THEN %%% [*,UNLOCK 58035000=08624002=
|
|
BEGIN 58040000=08624004=
|
|
EMITL(1); 58045000=08624004=
|
|
EMITD(47, 4, 1); 58050000=08624004=
|
|
STEPIT 58055000=08624004=
|
|
END 58060000=08625000=
|
|
ELSE 58065000=08625000=
|
|
BEGIN 58070000=08625000=
|
|
EMITTIME; 58075000=08625000=
|
|
EMITL(1) 58080000=08625000=
|
|
END %[*,AEXP 58085000=08625000=
|
|
ELSE 58090000=08626000=
|
|
EMITNO(1) %%% HAVE ONLY [* 58095000=08626000=
|
|
ELSE 58100000=08627000=
|
|
BEGIN 58105000=08627000=
|
|
AEXP; 58110000=08627000=
|
|
EMITO(SSP); 58115000=08627000=
|
|
EMITPAIR(JUNK, ISN); 58120000=08627000=
|
|
%% HAVE [AEXP 58125000=08627100=
|
|
IF ELCLASS = COMMA THEN %%% HAVE [AEXP, 58130000=08628000=
|
|
IF STEPI = FACTOP THEN 58135000=08629000=
|
|
STEPIT %%%HAVE [AEXP,*58140000=08629000=
|
|
ELSE 58145000=08629002=
|
|
IF ACCUM[1] = 6"6UNLOC" THEN %%% [AEXP,UNLOCK 58150000=08629002=
|
|
BEGIN 58155000=08629004=
|
|
EMITL(1); 58160000=08629004=
|
|
EMITD(47, 4, 1); 58165000=08629004=
|
|
STEPIT 58170000=08629004=
|
|
END 58175000=08630000=
|
|
ELSE 58180000=08630000=
|
|
BEGIN 58185000=08630000=
|
|
EMITTIME; 58190000=08630000=
|
|
EMITO(LOR) 58195000=08630000=
|
|
END; %[AEXP,A58200000=08630000=
|
|
EMITL(0); %%% 0 IS NO DPN. 58205000=08631000=
|
|
END; 58210000=08632000=
|
|
IF CHECK(RTBRKET, 441) THEN 58215000=08634000=
|
|
GO TO EXIT; 58220000=08634000=
|
|
COMMENT ERROR 441 MEANS MISSING RIGHT BRACKET IN CARRIAGE58225000=08635000=
|
|
CONTROL PART; 58230000=08636000=
|
|
CHKRTPAREN: 58235000=08637000=
|
|
IF STEPI = RTPAREN THEN 58240000=08638000=
|
|
GO TO ONEPARENSH; 58245000=08638000=
|
|
IF CHECK(COMMA, 442) THEN 58250000=08640000=
|
|
GO TO EXIT; 58255000=08640000=
|
|
COMMENT ERROR 442 MEANS ILLEGAL CARRIAGE CONTROL 58260000=08641000=
|
|
DELIMITER IN A WRITE STATEMENT; 58265000=08642000=
|
|
CHKSECOND: 58270000=08643000=
|
|
STEPIT; 58275000=08643000=
|
|
IF RANGE(FRMTID, SUPERFRMTID) THEN 58280000=08645000=
|
|
BEGIN 58285000=08645000=
|
|
COMMENT THIS IS THE FORMAT FORM OF THE WRITE; 58290000=08645000=
|
|
PASSFORMAT; 58295000=08646000=
|
|
WRITXFORM: 58300000=08647000=
|
|
IF STEPI = RTPAREN THEN 58305000=08648000=
|
|
BEGIN 58310000=08648000=
|
|
COMMENT THIS IS THE TWO PARAMETER 58315000=08648000=
|
|
CASE OF THE WRITE; 58320000=08649000=
|
|
STEPIT; 58325000=08650000=
|
|
EMITL(0); 58330000=08650000=
|
|
GO EMITCALL; 58335000=08650000=
|
|
END; 58340000=08651000=
|
|
GO PASSLIST; 58345000=08652000=
|
|
END; 58350000=08653000=
|
|
IF ELCLASS = LFTBRKET THEN %%% FREE FIELD AT LEAST = [AEXP]/. 58355000=08653100=
|
|
BEGIN 58360000=08653110=
|
|
I:= I-1; 58365000=08653110=
|
|
BANA; 58370000=08653110=
|
|
EMITO(SSP); 58375000=08653110=
|
|
EMITPAIR(1, ADD); 58380000=08653110=
|
|
IF ELCLASS ^= MULOP THEN 58385000=08653120=
|
|
ERR(443) 58390000=08653125=
|
|
ELSE 58395000=08653125=
|
|
IF STEPI = MULOP THEN 58400000=08653125=
|
|
BEGIN 58405000=08653125=
|
|
EMITO(SSN); 58410000=08653125=
|
|
STEPIT 58415000=08653125=
|
|
END; 58420000=08653125=
|
|
IF ELCLASS = LFTBRKET THEN %%% FREE FIELD = [AEXP]/[AEXP]. 58425000=08653130=
|
|
BEGIN 58430000=08653140=
|
|
I:= I-1; 58435000=08653140=
|
|
BANA; 58440000=08653140=
|
|
EMITO(SSP); 58445000=08653140=
|
|
EMITPAIR(1, ADD) 58450000=08653150=
|
|
END 58455000=08653150=
|
|
ELSE 58460000=08653150=
|
|
EMITL(1); %%% FREE FIELD = [AEXP]/. 58465000=08653150=
|
|
GO TO PASSLIST; 58470000=08653160=
|
|
END 58475000=08653180=
|
|
ELSE 58480000=08653180=
|
|
IF ELCLASS = MULOP THEN %%% FREE FIELD AT LEAST = /. 58485000=08653180=
|
|
BEGIN 58490000=08653190=
|
|
EMITL(1); 58495000=08653190=
|
|
IF STEPI = MULOP THEN 58500000=08653195=
|
|
BEGIN 58505000=08653195=
|
|
EMITO(SSN); 58510000=08653195=
|
|
STEPIT 58515000=08653195=
|
|
END; 58520000=08653195=
|
|
IF ELCLASS = LFTBRKET THEN %%% FREE FIELD = /[AEXP]. 58525000=08653200=
|
|
BEGIN 58530000=08653210=
|
|
I:= I-1; 58535000=08653210=
|
|
BANA; 58540000=08653210=
|
|
EMITO(SSP); 58545000=08653210=
|
|
EMITPAIR(1, ADD) 58550000=08653220=
|
|
END 58555000=08653220=
|
|
ELSE 58560000=08653220=
|
|
EMITL(1); %%% FREE FIELD = /. 58565000=08653220=
|
|
GO TO PASSLIST; 58570000=08653230=
|
|
END OF SCANNING FOR FREE FIELD FORMAT; 58575000=08653240=
|
|
IF ELCLASS = FACTOP THEN 58580000=08655000=
|
|
BEGIN 58585000=08655000=
|
|
COMMENT THIS IS THE ASTERISK FORM OF THE WRITE;58590000=08655000=
|
|
EMITL(0); 58595000=08656000=
|
|
EMITL(0); 58600000=08656000=
|
|
STEPIT; 58605000=08656000=
|
|
GO PASSLIST; 58610000=08657000=
|
|
END; 58615000=08658000=
|
|
IF ACCUM[1] = 6"1<0000" THEN 58620000=08658010=
|
|
BEGIN 58625000=08658020=
|
|
EXPLICITFORMAT; 58630000=08658020=
|
|
GO TO WRITXFORM; 58635000=08658020=
|
|
END; 58640000=08658020=
|
|
IF ARC THEN 58645000=08658100=
|
|
BEGIN 58650000=08658200=
|
|
KLUDGE(-HOLD); 58655000=08658200=
|
|
GO TO EXIT; 58660000=08658300=
|
|
END ARRAY TO ARRAY CASE; 58665000=08658400=
|
|
EMITL(0); 58670000=08659000=
|
|
AEXP; 58675000=08659000=
|
|
IF CHECK(COMMA, 443) THEN 58680000=08661000=
|
|
GO TO EXIT; 58685000=08661000=
|
|
COMMENT ERROR 443 MEANS IMPROPER DELIMITER FOR SECOND 58690000=08662000=
|
|
PARAMETER IN WRITE STATEMENT; 58695000=08663000=
|
|
STEPIT; 58700000=08664000=
|
|
IF RANGE(BOOARRAYID, INTARRAYID) THEN 58705000=08666000=
|
|
BEGIN COMMENT THIS IS THE ROW DESIGNATOR CASE; 58710000
|
|
TVAR:= FL; 58711000
|
|
VARIABLE(TVAR); 58720000
|
|
IF TABLE(I-2) ^= FACTOP THEN 58725000=08669000=
|
|
BEGIN COMMENT ERROR 444 MEANS IMPROPER ROW 58730000
|
|
DESIGNATOR IN A WRITE STATEMENT; 58740000=08670000=
|
|
ERROR(444); 58745000=08671000=
|
|
GO TO EXIT; 58750000=08671000=
|
|
END; 58755000=08672000=
|
|
IF CHECK(RTPAREN, 445) THEN 58760000=08674000=
|
|
GO TO EXIT; COMMENT ERROR 445 MEANS MISSING RIGHT 58765000
|
|
PARENTHESIS AFTER A ROW DESIGNATOR IN A WRITE 58775000=08676000=
|
|
STATEMENT; 58780000=08677000=
|
|
GOGOGO:= TRUE; % 58785000=08677100=
|
|
STEPIT; 58790000=08678000=
|
|
GO EMITCALL; 58795000=08678000=
|
|
END 58800000=08680000=
|
|
ELSE 58805000=08680000=
|
|
BEGIN COMMENT ERROR 446 MEANS MISSING ROW DESIGNATOR;58810000
|
|
ERROR(446); 58820000=08681000=
|
|
GO TO EXIT; 58825000=08681000=
|
|
END; 58830000=08682000=
|
|
PASSLIST: 58835000=08683000=
|
|
IF CHECK(COMMA, 447) THEN 58840000=08684000=
|
|
GO TO EXIT; 58845000=08684000=
|
|
COMMENT ERROR 447 MEANS IMPROPER DELIMITER PRECEEDING A 58850000=08685000=
|
|
LIST IN A WRITE STATEMENT; 58855000=08686000=
|
|
IF STEPI ^= LISTID AND ELCLASS ^= SUPERLISTID THEN 58860000=08688000=
|
|
BEGIN 58865000=08688000=
|
|
RR1:= LISTGEN; 58870000=08688000=
|
|
GO TO EMITCALL 58875000=08688000=
|
|
END; 58880000=08688000=
|
|
CHECKER(ELBAT[I]); 58885000=08688500=
|
|
IF ELCLASS = SUPERLISTID THEN 58890000=08689000=
|
|
BEGIN 58895000=08690000=
|
|
COMMENT SUBSCRIPTED SWITCH LIST ID; 58900000=08690000=
|
|
LISTADDRESS:= ELBAT[I].ADDRESS; 58905000=08692000=
|
|
BANA; 58910000=08693000=
|
|
EMITV(LISTADDRESS); 58915000=08694000=
|
|
IF LISTADDRESS > 1023 THEN 58920000=08694500=
|
|
EMITO(PRTE); 58925000=08694500=
|
|
EMITO(LOD); 58930000=08695000=
|
|
I:= I-1; 58935000=08695500=
|
|
COMMENT STEP DOWN THE&I FROM BANA; 58940000=08695500=
|
|
END 58945000=08696500=
|
|
ELSE 58950000=08696500=
|
|
BEGIN 58955000=08696500=
|
|
COMMENT A COMMON LIST ID; 58960000=08696500=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 58965000=08696520=
|
|
END; 58970000=08696530=
|
|
STEPIT; 58975000=08696540=
|
|
IF CHECK(RTPAREN, 448) THEN 58980000=08696550=
|
|
GO TO EXIT; 58985000=08696550=
|
|
COMMENT 448 IS IMPROPER LIST DELMETER IN WRITE STATEMENT; 58990000=08696560=
|
|
STEPIT; 58995000=08697000=
|
|
EMITCALL: 59000000=08698000=
|
|
IF ELCLASS = LFTBRKET AND NOT ARC THEN 59005000=08698000=
|
|
BEGIN 59010000=08698100=
|
|
EMITO(MKS); 59015000=08698100=
|
|
IF STEPI ^= COLON THEN 59020000=08698200=
|
|
DEXP 59025000=08698200=
|
|
ELSE 59030000=08698200=
|
|
EMIT(0); 59035000=08698200=
|
|
IF ELCLASS ^= COLON THEN 59040000=08698300=
|
|
EMIT(0) 59045000=08698300=
|
|
ELSE 59050000=08698300=
|
|
BEGIN 59055000=08698400=
|
|
STEPIT; 59060000=08698400=
|
|
DEXP 59065000=08698400=
|
|
END; 59070000=08698400=
|
|
IF CHECK(RTBRKET, 433) THEN 59075000=08698500=
|
|
GO EXIT; 59080000=08698500=
|
|
EMITL(15); 59085000=08698600=
|
|
EMITV(5); 59090000=08698600=
|
|
STEPIT; 59095000=08698600=
|
|
END; % 59100000=08698700=
|
|
IF GOGOGO THEN % 59105000=08698750=
|
|
BEGIN 59110000=08698800=
|
|
EMIT(0); 59115000=08698800=
|
|
EMIT(0); 59120000=08698800=
|
|
EMIT(0); % 59125000=08698800=
|
|
EMIT(0); 59130000=08698850=
|
|
EMIT(0); 59135000=08698850=
|
|
EMITV(12); % 59140000=08698850=
|
|
END 59145000=08698900=
|
|
ELSE 59150000=08698900=
|
|
EMITV(GNAT(INTERPTO)); % 59155000=08698900=
|
|
GOGOGO:= FALSE; % 59160000=08698950=
|
|
EXIT: 59165000=08699000=
|
|
; 59170000=08699000=
|
|
END WRITESTMT; 59175000=08700000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%59180000=08700000=
|
|
PROCEDURE LOCKSTMT; 59185000=08701000=
|
|
BEGIN 59190000=08702000=
|
|
COMMENT THE LOCK STATEMENT ROUTINE GENERATES CODE THAT 59195000=08702000=
|
|
CALLS ON THE FILE CONTROL ROUTINE PASSING TO IT THE 59200000=08703000=
|
|
FOLLOWING PARAMETERS FOR THE CORRESPONDING CASES. 59205000=08704000=
|
|
**********************************************************59210000=08705000=
|
|
<LOCK STATEMENT>::=LOCK(<FILE PART>,SAVE)/ 59215000=08706000=
|
|
- - - - - - - - - - - - - - 59220000=08707000=
|
|
(2,0,FILE,4) 59225000=08708000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 59230000=08709000=
|
|
LOCK(<FILE PART>,RELEASE) 59235000=08710000=
|
|
- - - - - - - - - - - - - - 59240000=08711000=
|
|
(6,0,FILE,4); 59245000=08712000=
|
|
LABEL 59250000=08713000=
|
|
EXIT; 59255000=08713000=
|
|
COMMENT THE LABEL EXIT APPEARS AFTER THE LAST59260000=08713000=
|
|
EXECUTABLE STATEMENT IN THE LOCK ROUTINE; 59265000=08714000=
|
|
DEFINE 59270000=08715000=
|
|
THISL = RR1 #; 59275000=08715000=
|
|
COMMENT THISL IS A TEMP CELL 59280000=08715000=
|
|
FOR THE CURRENT L REGISTER; 59285000=08716000=
|
|
DEFINE 59290000=08717000=
|
|
LTEMP = RR2 #; 59295000=08717000=
|
|
COMMENT LTEMP CONTAINS THE 59300000=08717000=
|
|
L REGISTER SETTING FOR THE 59305000=08718000=
|
|
SAVE OR RELEASE LITERAL THAT 59310000=08719000=
|
|
GETS PASSED TO KEN MEYERS; 59315000=08720000=
|
|
REAL 59316000
|
|
TVAR; % FOR VARIABLE() NAME PARAM 59317000
|
|
STEPIT; 59320000=08721000=
|
|
IF CHECK(LEFTPAREN, 450) THEN 59325000=08723000=
|
|
GO TO EXIT; 59330000=08723000=
|
|
COMMENT ERROR NUMBER 450 MEANS MISSING LEFT PARENTHESIS 59335000=08724000=
|
|
IN A LOCK STATEMENT; 59340000=08725000=
|
|
STEPIT; 59345000=08726000=
|
|
IF NOT RANGE(FILEID, SUPERFILEID) THEN 59350000=08728000=
|
|
BEGIN 59355000=08728000=
|
|
COMMENT MUST BE READ-ONLY ARRAY TYPE LOCK; 59360000=08728000=
|
|
IF NOT RANGE(BOOARRAYID, INTARRAYID) THEN 59365000=08728100=
|
|
BEGIN 59370000=08728200=
|
|
ERR(451); 59375000=08728200=
|
|
GO TO EXIT 59380000=08728200=
|
|
END; 59385000=08728200=
|
|
TVAR:= FL; 59389000
|
|
VARIABLE(TVAR); 59390000
|
|
L:= L-1; 59395000=08728300=
|
|
IF TABLE(I-2) ^= FACTOP THEN 59400000=08728400=
|
|
FLAG(208); 59405000=08728400=
|
|
EMITO(DUP); 59410000=08728500=
|
|
EMITO(LOD); 59415000=08728500=
|
|
EMITL(24); 59420000=08728500=
|
|
EMITD(43, 3, 5); 59425000=08728600=
|
|
EMITO(XCH); 59430000=08728600=
|
|
EMITO(STD); 59435000=08728600=
|
|
IF ELCLASS = RTPAREN THEN 59440000=08729000=
|
|
STEPIT 59445000=08729000=
|
|
ELSE 59450000=08729000=
|
|
ERR(104); 59455000=08729000=
|
|
GO TO EXIT 59460000=08731000=
|
|
END; 59465000=08731000=
|
|
PASFILE; 59470000=08732000=
|
|
IF ELCLASS = RTPAREN THEN 59475000=08732100=
|
|
ELBAT[(I:= I-2)+1].CLASS:= RELEASEV 59480000=08732200=
|
|
ELSE 59485000=08732200=
|
|
IF CHECK(COMMA, 452) THEN 59490000=08734000=
|
|
GO TO EXIT; 59495000=08734000=
|
|
COMMENT ERROR 452 MEANS MISSING COMMA IN A LOCK STATEMENT59500000=08735000=
|
|
; 59505000=08736000=
|
|
THISL:= L; 59510000=08737000=
|
|
L:= LTEMP; 59515000=08737000=
|
|
IF (RRB1:= STEPI = RELEASEV) OR ELCLASS = DECLARATORS AND ELBAT[I]. 59520000=08739000=
|
|
ADDRESS = SAVEV OR ELCLASS = FACTOP 59525000=08740000=
|
|
THEN 59530000=08740000=
|
|
EMITL(IF RRB1 THEN 6 ELSE IF ELCLASS = FACTOP THEN 8 ELSE 2) 59535000=08743000=
|
|
ELSE 59540000=08743000=
|
|
BEGIN 59545000=08743000=
|
|
COMMENT ERROR 453 MEANS IMPROPER UNIT 59550000=08743000=
|
|
DISPOSITION PART; 59555000=08744000=
|
|
ERROR(453); 59560000=08745000=
|
|
GO TO EXIT; 59565000=08745000=
|
|
END; 59570000=08746000=
|
|
L:= THISL; 59575000=08747000=
|
|
STEPIT; 59580000=08748000=
|
|
IF CHECK(RTPAREN, 454) THEN 59585000=08750000=
|
|
GO TO EXIT; 59590000=08750000=
|
|
COMMENT ERROR 454 MEANS MISSING RIGHT PARENTHESIS IN A 59595000=08751000=
|
|
LOCK STATEMENT; 59600000=08752000=
|
|
STEPIT; 59605000=08753000=
|
|
EXIT: 59610000=08754000=
|
|
; 59615000=08754000=
|
|
END LOCKSTMT; 59620000=08755000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%59625000=08755000=
|
|
PROCEDURE CLOSESTMT; 59630000=08756000=
|
|
BEGIN 59635000=08757000=
|
|
COMMENT THE CLOSE STATEMENT ROUTINE GENERATES CODE THAT 59640000=08757000=
|
|
CALLS ON THE FILE CONTROL ROUTINE PASSING TO IT THE 59645000=08758000=
|
|
FOLLOWING PARAMETERS FOR THE CORRESPONDING CASES. 59650000=08759000=
|
|
**********************************************************59655000=08760000=
|
|
<CLOSE STATEMENT>::=CLOSE(<FILE PART>,SAVE)/ 59660000=08761000=
|
|
- - - - - - - - - - - - - - 59665000=08762000=
|
|
(3,0,FILE,4) 59670000=08763000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 59675000=08764000=
|
|
CLOSE(<FILE PART>,RELEASE)/ 59680000=08765000=
|
|
- - - - - - - - - - - - - - 59685000=08766000=
|
|
(7,0,FILE,4) 59690000=08767000=
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 59695000=08768000=
|
|
CLOSE(<FILE PART>,*) 59700000=08769000=
|
|
- - - - - - - - - - - - - - 59705000=08770000=
|
|
(1,0,FILE,4) 59710000=08771000=
|
|
<CLOSE STATEMENT> ::= CLOSE(<FILE PART>, PURGE) 59715000=08771100=
|
|
-- -- -- -- -- --- -- -- -- -- -- -- 59720000=08771200=
|
|
(4,0,FILE,4) 59725000=08771300=
|
|
** ** ** ** ** ** *** ** ** ** ** ** ; 59730000=08771400=
|
|
LABEL 59735000=08772000=
|
|
EXIT; 59740000=08772000=
|
|
COMMENT THE LABEL EXIT APPEARS AFTER THE LAST 59745000=08772000=
|
|
EXECUTABLE STATEMENT IN THE CLOSESTMT ROUTINE; 59750000=08773000=
|
|
DEFINE 59755000=08774000=
|
|
THISL = RR1 #; 59760000=08774000=
|
|
COMMENT THISL IS A TEMP CELL 59765000=08774000=
|
|
FOR THE CURRENT LREGISTER; 59770000=08775000=
|
|
DEFINE 59775000=08776000=
|
|
LTEMP = RR2 #; 59780000=08776000=
|
|
COMMENT LTEMP CONTAINS THE 59785000=08776000=
|
|
L REGISTER SETTING FOR THE 59790000=08777000=
|
|
SAVE OR RELEASE LITERAL THAT 59795000=08778000=
|
|
GETS PASSED TO KEN MEYERS; 59800000=08779000=
|
|
LABEL 59805000=08780000=
|
|
EMITREST; 59810000=08780000=
|
|
COMMENT I IS POINTING AT THE UNIT 59815000=08780000=
|
|
DISPOTION PART AND CODE FOR THE LAST THREE59820000=08781000=
|
|
PARAMETERS TO THE FILE CONTROL ROUTINE 59825000=08782000=
|
|
MUST NOW BE GENERATED; 59830000=08783000=
|
|
STEPIT; 59835000=08784000=
|
|
IF CHECK(LEFTPAREN, 455) THEN 59840000=08786000=
|
|
GO TO EXIT; 59845000=08786000=
|
|
COMMENT ERROR 455 MEANS MISSING LEFT PARENTHESIS IN A 59850000=08787000=
|
|
CLOSE STATEMENT; 59855000=08788000=
|
|
STEPIT; 59860000=08789000=
|
|
IF NOT RANGE(FILEID, SUPERFILEID) THEN 59865000=08791000=
|
|
BEGIN 59870000=08791000=
|
|
COMMENT ERROR 456 MEANS IMPROPER FILE PART IN A59875000=08791000=
|
|
CLOSE STATEMENT; 59880000=08792000=
|
|
ERROR(456); 59885000=08793000=
|
|
GO TO EXIT; 59890000=08793000=
|
|
END; 59895000=08794000=
|
|
PASFILE; 59900000=08795000=
|
|
IF ELCLASS = RTPAREN THEN 59905000=08795100=
|
|
ELBAT[(I:= I-2)+1].CLASS:= RELEASEV 59910000=08795200=
|
|
ELSE 59915000=08795200=
|
|
IF CHECK(COMMA, 457) THEN 59920000=08797000=
|
|
GO TO EXIT; 59925000=08797000=
|
|
COMMENT ERROR 457 MEANS MISSING COMMA IN A CLOSE 59930000=08798000=
|
|
STATEMENT; 59935000=08799000=
|
|
THISL:= L; 59940000=08800000=
|
|
L:= LTEMP; 59945000=08800000=
|
|
IF STEPI = RELEASEV THEN 59950000=08802000=
|
|
BEGIN 59955000=08802000=
|
|
COMMENT RELEASE UNIT DISPOSITION PART CASE; 59960000=08802000=
|
|
EMITL(7); 59965000=08803000=
|
|
GO EMITREST; 59970000=08803000=
|
|
END; 59975000=08804000=
|
|
IF ELCLASS = FACTOP THEN 59980000=08806000=
|
|
BEGIN 59985000=08806000=
|
|
COMMENT ASTERISK UNTI DISPOSITION PART CASE; 59990000=08806000=
|
|
EMITL(1); 59995000=08807000=
|
|
GO EMITREST; 60000000=08807000=
|
|
END; 60005000=08808000=
|
|
IF ELCLASS = DECLARATORS AND ELBAT[I].ADDRESS = SAVEV THEN 60010000=08810000=
|
|
BEGIN 60015000=08810000=
|
|
COMMENT SAVE UNIT DISPOSITION PART CASE; 60020000=08810000=
|
|
EMITL(3); 60025000=08811000=
|
|
GO EMITREST; 60030000=08811000=
|
|
END; 60035000=08812000=
|
|
IF ACCUM[1] = 6"5PURGE" THEN 60040000=08812100=
|
|
BEGIN 60045000=08812100=
|
|
COMMENT FILE PURGE; 60050000=08812100=
|
|
EMITL(4); 60055000=08812200=
|
|
GO EMITREST; 60060000=08812200=
|
|
END; 60065000=08812300=
|
|
ERROR(458); 60070000=08813000=
|
|
GO TO EXIT; 60075000=08813000=
|
|
COMMENT ERROR 458 MEANS IMPROPER UNIT DISPOSITION PART 60080000=08814000=
|
|
IN A CLOSE STATEMENT; 60085000=08815000=
|
|
EMITREST: 60090000=08816000=
|
|
STEPIT; 60095000=08816000=
|
|
L:= THISL; 60100000=08817000=
|
|
IF CHECK(RTPAREN, 459) THEN 60105000=08819000=
|
|
GO TO EXIT; 60110000=08819000=
|
|
COMMENT ERROR 459 MEANS MISSING RIGHT PARENTHESIS IN A 60115000=08820000=
|
|
CLOSE STATEMENT; 60120000=08821000=
|
|
STEPIT; 60125000=08822000=
|
|
EXIT: 60130000=08823000=
|
|
; 60135000=08823000=
|
|
END CLOSESTMT; 60140000=08824000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%60145000=08824000=
|
|
PROCEDURE RWNDSTMT; 60150000=08825000=
|
|
BEGIN 60155000=08826000=
|
|
COMMENT THE REWIND STATEMENT ROUTINE GENERATES CODE THAT 60160000=08826000=
|
|
CALLS ON THE FILE CONTROL ROUTINE PASSING TO IT THE 60165000=08827000=
|
|
FOLLOWING PARAMETERS. 60170000=08828000=
|
|
**********************************************************60175000=08829000=
|
|
<REWIND STATEMENT>::=REWIND(<FILE PART>) 60180000=08830000=
|
|
- - - - - - - - - - - - - - 60185000=08831000=
|
|
(0,0,FILE,4); 60190000=08832000=
|
|
LABEL 60195000=08833000=
|
|
EXIT; 60200000=08833000=
|
|
COMMENT THE LABEL EXIT APPEARS AFTER THE LAST60205000=08833000=
|
|
EXECUTABLE STATEMENT IN THE REWIND ROUTINE; 60210000=08834000=
|
|
DEFINE 60215000=08835000=
|
|
THISL = RR1 #; 60220000=08835000=
|
|
COMMENT THISL IS A TEMP CELL 60225000=08835000=
|
|
FOR THE CURRENT L REGISTER; 60230000=08836000=
|
|
DEFINE 60235000=08837000=
|
|
LTEMP = RR2 #; 60240000=08837000=
|
|
COMMENT LTEMP SETTING FOR THE60245000=08837000=
|
|
L REGISTER SETTING FOR THE 60250000=08838000=
|
|
SAVE OR RELEASE LITERAL THAT 60255000=08839000=
|
|
GETS PASSED TO KEN MEYERS; 60260000=08840000=
|
|
STEPIT; 60265000=08841000=
|
|
IF CHECK(LEFTPAREN, 460) THEN 60270000=08843000=
|
|
GO TO EXIT; 60275000=08843000=
|
|
COMMENT ERROR 460 MEANS MISSING LEFT PARENTHESIS IN A 60280000=08844000=
|
|
REWIND STATEMENT; 60285000=08845000=
|
|
STEPIT; 60290000=08846000=
|
|
IF NOT RANGE(FILEID, SUPERFILEID) THEN 60295000=08848000=
|
|
BEGIN 60300000=08848000=
|
|
COMMENT ERROR 461 MEANS IMPROPER FILE PART IN A60305000=08848000=
|
|
REWIND STATEMENT; 60310000=08849000=
|
|
ERROR(461); 60315000=08850000=
|
|
GO TO EXIT; 60320000=08850000=
|
|
END; 60325000=08851000=
|
|
PASFILE; 60330000=08852000=
|
|
IF CHECK(RTPAREN, 462) THEN 60335000=08854000=
|
|
GO TO EXIT; 60340000=08854000=
|
|
COMMENT ERROR 462 MEANS MISSING RIGHT PARENTHESIS IN A 60345000=08855000=
|
|
REWIND STATEMENT; 60350000=08856000=
|
|
STEPIT; 60355000=08857000=
|
|
THISL:= L; 60360000=08857000=
|
|
L:= LTEMP; 60365000=08857000=
|
|
EMITL(0); 60370000=08858000=
|
|
L:= THISL; 60375000=08858000=
|
|
EXIT: 60380000=08859000=
|
|
; 60385000=08859000=
|
|
END RWNDSTMT; 60390000=08860000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%60395000=08860000=
|
|
PROCEDURE EXPLICITFORMAT; 60400000=08860050=
|
|
BEGIN 60405000=08860100=
|
|
INTEGER 60410000=08860100=
|
|
PRT; 60415000=08860100=
|
|
ARRAY 60420000=08860100=
|
|
TEDOC[0:7, 0:127]; 60425000=08860100=
|
|
MOVECODE(TEDOC, EDOC); 60430000=08860150=
|
|
GT5:= SGNO; 60435000=08860200=
|
|
GT1:= (2*SGAVL-1) & 2[43:1:2]; 60440000=08860200=
|
|
SGNO:= SGAVL; 60445000=08860200=
|
|
F:= 0; 60450000=08860250=
|
|
PRT:= GETSPACE(TRUE, -4); % FORMAT DESCR. 60455000=08860250=
|
|
PRT:= PROGDESCBLDR(LDES, 0, PRT); 60460000=08860300=
|
|
ELCLASS:= 6"<"; 60465000=08860350=
|
|
TB1:= FORMATPHRASE; 60470000=08860350=
|
|
SEGMENT(-F, SGNO, GT5); 60475000=08860400=
|
|
SGAVL:= SGAVL+1; 60480000=08860400=
|
|
SGNO:= GT5; 60485000=08860450=
|
|
MOVECODE(TEDOC, EDOC); 60490000=08860450=
|
|
IF LASTELCLASS ^= 6">" THEN 60495000=08860500=
|
|
ERR(136); 60500000=08860500=
|
|
IF ELCLASS = 6"," THEN 60505000=08860600=
|
|
ELBAT[I].CLASS:= COMMA 60510000=08860600=
|
|
ELSE 60515000=08860600=
|
|
IF ELCLASS = 6")" THEN 60520000=08860650=
|
|
ELBAT[I].CLASS:= RTPAREN 60525000=08860650=
|
|
ELSE 60530000=08860650=
|
|
ELBAT[I].CLASS:= 0; 60535000=08860700=
|
|
I:= I-1; 60540000=08860700=
|
|
EMITL(0); 60545000=08860750=
|
|
EMITPAIR(PRT, LOD); 60550000=08860750=
|
|
END EXPLICITFORMAT; 60555000=08860800=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%60560000=08860800=
|
|
COMMENT SORTSTMT AND MERGESTMT ANALYZE THEIR APPROPRIATE SYNTAXES 60565000=08861000=
|
|
AND CALL SORTI, PASSING THE FOLLOWING: 60570000=08862000=
|
|
SORT: MERGE: 60575000=08863000=
|
|
<AEXP> 0 DISK SIZE,IF SPECIFIED 60580000=08864000=
|
|
<AEXP> 0 CORE SIZE,IF SPECIFIED 60585000=08865000=
|
|
0 0 ALFA FLAG 60590000=08866000=
|
|
<AEXP> <AEXP> RECORD SIZE 60595000=08867000=
|
|
PROG.DESC. PROG.DESC. DESCRIPTOR TO COMPARE PROCEDURE 60600000=08868000=
|
|
PROG.DESC. PROG.DESC. DESCRIPTOR TO HIVALUE PROCEDURE 60605000=08869000=
|
|
... 2,3,4,5,6,7 NUMBER OF FILES TO MERGE, OR 60610000=08870000=
|
|
0,3,4,5 ... NUMBER OF SORTTAPES TO USE 60615000=08871000=
|
|
TP5 FL7 SCRATCH TAPES FOR SORT, 60620000=08872000=
|
|
TP4 FL6 OR MERGE FILES, POINTERS TO 60625000=08873000=
|
|
TP3 FL5 TOP I/O DESCRIPTORS, OR ZERO 60630000=08874000=
|
|
TP2 FL4 IF NOT USED. 60635000=08875000=
|
|
TP1 FL3 60640000=08876000=
|
|
0 FL2 DISK FILES FOR SORT 60645000=08877000=
|
|
DK0 FL1 60650000=08878000=
|
|
0/1 0 TRUE IF INPUT PROCEDURE 60655000=08879000=
|
|
0/1 0/1 TRUE IF OUTPUT PROCEDURE 60660000=08880000=
|
|
INF 0 POINTER TO I/O DESC FOR INPUT 60665000=08881000=
|
|
OUTF OUTF OR OUTPUT FILE, OR MOTHER 60670000=08882000=
|
|
OF WORK ARRAY. 60675000=08883000=
|
|
PD/0 0 INPUT PROCEDURE DESCRIPTOR 60680000=08884000=
|
|
PD/0 PD/0 OUTPUT PROCEDURE 60685000=08885000=
|
|
0 0 60690000=08886000=
|
|
0 0 60695000=08887000=
|
|
0 0 60700000=08888000=
|
|
LIT LIT PRT INDEX OF MERGE INTRINSIC 60705000=08889000=
|
|
0 0 60710000=08890000=
|
|
0 1 SORT/MERGE FLAG 60715000=08891000=
|
|
... MSCW 60720000=08892000=
|
|
0 SORT-FILE MOTHER 60725000=08893000=
|
|
0 DESCRIPTORS 60730000=08894000=
|
|
0 . 60735000=08895000=
|
|
0 . 60740000=08896000=
|
|
0 . 60745000=08897000=
|
|
0 . 60750000=08898000=
|
|
MSCW; 60755000=08900000=
|
|
PROCEDURE MERGESTMT; 60760000=08901000=
|
|
BEGIN 60765000=08902000=
|
|
INTEGER 60770000=08902000=
|
|
J, 60775000=08902000=
|
|
K, 60780000=08902000=
|
|
FILER, 60785000=08902000=
|
|
FILEND; 60790000=08902000=
|
|
BOOLEAN 60795000=08903000=
|
|
OPTOG; 60800000=08903000=
|
|
LABEL 60805000=08904000=
|
|
QUIT; 60810000=08904000=
|
|
STEPIT; 60815000=08905000=
|
|
IF CHECK(LEFTPAREN, 367) THEN 60820000=08905000=
|
|
GO QUIT; 60825000=08905000=
|
|
EMITO(MKS); 60830000=08906000=
|
|
EMITL(1); 60835000=08906000=
|
|
EMIT(0); 60840000=08906000=
|
|
EMITL(GNAT(MERGEI)); 60845000=08906000=
|
|
EMIT(0); 60850000=08907000=
|
|
EMIT(0); 60855000=08907000=
|
|
EMIT(0); 60860000=08907000=
|
|
IF OPTOG:= (STEPI = FILEID OR ELCLASS = SUPERFILEID) THEN 60865000=08908000=
|
|
EMIT(0) 60870000=08909000=
|
|
ELSE 60875000=08909000=
|
|
IF NOT OUTPROCHECK(ELBAT[I]) THEN 60880000=08909000=
|
|
GO QUIT 60885000=08909000=
|
|
ELSE 60890000=08909000=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 60895000=08910000=
|
|
EMIT(0); 60900000=08911000=
|
|
IF OPTOG THEN 60905000=08911000=
|
|
BEGIN 60910000=08911000=
|
|
PASSFILE; 60915000=08911000=
|
|
I:= I-1 60920000=08911000=
|
|
END 60925000=08911100=
|
|
ELSE 60930000=08911100=
|
|
EMITN(GNAT(SORTA)); 60935000=08911100=
|
|
IF NOT COMMACHECK THEN 60940000=08912000=
|
|
GO QUIT; 60945000=08912000=
|
|
EMIT(0); 60950000=08913000=
|
|
EMITL(REAL(TRUE AND NOT OPTOG)); 60955000=08913000=
|
|
EMIT(0); 60960000=08913000=
|
|
FILER:= BUMPL; 60965000=08914000=
|
|
IF NOT HVCHECK(ELBAT[I]) THEN 60975000=08914000=
|
|
GO QUIT; 60980000=08914000=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 60985000=08915000=
|
|
IF NOT COMMACHECK THEN 60990000=08915000=
|
|
GO QUIT; 60995000=08915000=
|
|
IF NOT EQLESCHECK(ELBAT[I]) THEN 61000000=08916000=
|
|
GO QUIT; 61005000=08916000=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 61010000=08917000=
|
|
IF NOT COMMACHECK THEN 61015000=08917000=
|
|
GO QUIT; 61020000=08917000=
|
|
AEXP; 61025000=08918000=
|
|
EMITB(BFW, FILER, FILEND:= BUMPL); 61030000=08918000=
|
|
FOR J:= 1 STEP 1 WHILE ELCLASS = COMMA DO 61035000=08919000=
|
|
BEGIN 61040000=08920000=
|
|
STEPIT; 61045000=08920000=
|
|
PASSFILE 61050000=08920000=
|
|
END; 61055000=08920000=
|
|
FOR K:= J STEP 1 UNTIL 7 DO 61060000=08921000=
|
|
EMIT(0); 61065000=08921000=
|
|
J:= J-1; 61070000=08921000=
|
|
IF J > 7 OR J < 2 THEN 61075000=08922000=
|
|
BEGIN 61080000=08922000=
|
|
ERR(368); 61085000=08922000=
|
|
GO QUIT 61090000=08922000=
|
|
END; 61095000=08922000=
|
|
EMITL(J); 61100000=08923000=
|
|
EMITB(BBW, BUMPL, FILER); 61105000=08923000=
|
|
EMITB(BFW, FILEND, L); 61110000=08923000=
|
|
IF CHECK(RTPAREN, 369) THEN 61115000=08924000=
|
|
GO QUIT; 61120000=08924000=
|
|
STEPIT; 61125000=08924000=
|
|
EMITO(SSN); 61130000=08924000=
|
|
EMIT(0); 61135000=08925000=
|
|
EMIT(0); 61140000=08925000=
|
|
EMIT(0); 61145000=08925000=
|
|
QUIT: 61150000=08926000=
|
|
EMITV(GNAT(SORTI)); 61155000=08926000=
|
|
END MERGESTMT; 61160000=08927000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%61165000=08927000=
|
|
PROCEDURE SORTSTMT; 61170000=08928000=
|
|
BEGIN 61175000=08929000=
|
|
BOOLEAN 61180000=08929000=
|
|
INPRO, 61185000=08929000=
|
|
OUTPRO; 61190000=08929000=
|
|
INTEGER 61195000=08930000=
|
|
A, 61200000=08930000=
|
|
J; 61205000=08930000=
|
|
LABEL 61210000=08931000=
|
|
QUIT; 61215000=08931000=
|
|
DEFINE 61220000=08931000=
|
|
RDS = 1, 280 #; 61225000=08931000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%61226000
|
|
PROCEDURE STUFFILE(IDARRAY, IDLOC, FN, SFN); 61230000=08932000=
|
|
VALUE 61235000=08933000=
|
|
FN, SFN; 61240000=08933000=
|
|
ARRAY 61240100
|
|
IDARRAY[0]; 61240200
|
|
REAL 61240300
|
|
IDLOC, FN, SFN; 61240400
|
|
BEGIN 61250000=08934000=
|
|
STREAMLOCALS; 61250100
|
|
STREAMSETDI(IDARRAY, IDLOC); 61255000=08934000=
|
|
STREAMSETLOCSI(FN); 61270000=08935000=
|
|
STREAMSKIPSI(+5); 61275000=08935000=
|
|
STREAMTRANSFERCHR(3); 61280000=08935000=
|
|
STREAMSETLOCSI(SFN); 61284000
|
|
STREAMSKIPSI(+7); 61285000=08935000=
|
|
STREAMTRANSFERLIT(8, 6"0000000D"); 61290000=08936000=
|
|
STREAMTRANSFERLIT(3, 6"SRT"); 61290100
|
|
STREAMTRANSFERCHR(1); 61295000=08936000=
|
|
STREAMSKIPSI(-1); 61300000=08936000=
|
|
STREAMTRANSFERLIT(7, 6" 5DSRT"); 61305000=08937000=
|
|
STREAMTRANSFERCHR(1); 61310000=08937000=
|
|
IDLOC:= STREAMGETDI; 61315000=08937000=
|
|
END STUFFILE; 61345000=08939000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%61346000
|
|
BOOLEAN PROCEDURE INPROCHECK(ELBW); 61350000=08940000=
|
|
VALUE 61355000=08940000=
|
|
ELBW; 61360000=08940000=
|
|
REAL 61365000=08940000=
|
|
ELBW; 61370000=08940000=
|
|
IF ELBW.CLASS ^= BOOPROCID THEN 61375000=08941000=
|
|
ERR(363) 61380000=08941000=
|
|
ELSE 61385000=08941000=
|
|
IF BOOLEAN(ELBW.FORMAL) THEN 61390000=08941100=
|
|
INPROCHECK:= TRUE 61395000=08941100=
|
|
ELSE 61400000=08941100=
|
|
IF TAKE(GT1:= GIT(ELBW)) ^= 1 THEN 61405000=08942000=
|
|
ERR(364) 61410000=08942000=
|
|
ELSE 61415000=08942000=
|
|
IF ARRAYCHECK(TAKE(GT1+1)) THEN 61420000=08943000=
|
|
ERR(365) 61425000=08943000=
|
|
ELSE 61430000=08943000=
|
|
INPROCHECK:= TRUE; 61435000=08944000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%61440000=08944000=
|
|
IF SFILENO = 0 THEN 61445000=08945000=
|
|
BEGIN 61450000=08946000=
|
|
SFILENO:= FILENO; 61455000=08946000=
|
|
FOR J:= 1 STEP 1 UNTIL 7 DO 61460000=08947000=
|
|
IF 127 < IDLOC.[14:15]+3 THEN 61465000=08948000=
|
|
FLAG(40) % PPB SIZE EXCEEDED 61470000=08948000=
|
|
ELSE 61475000=08948000=
|
|
BEGIN 61480000=08949000=
|
|
STUFFILE(IDARRAY, IDLOC, 61485000=08950000=
|
|
(IF J <= 2 THEN 12 ELSE 2) & FILENO[17:11:12], J); 61490000=08950000=
|
|
FILENO:= FILENO+1; 61495000=08951000=
|
|
END; 61500000=08952000=
|
|
END; 61505000=08952000=
|
|
EMITO(MKS); 61510000=08953000=
|
|
EMITV(BLOCKCTR); 61515000=08953000=
|
|
EMITPAIR(1, ADD); 61520000=08953000=
|
|
EMITPAIR(BLOCKCTR, STD); 61525000=08954000=
|
|
EMIT(0); 61530000=08954000=
|
|
EMIT(0); 61535000=08954000=
|
|
EMITN(2); 61540000=08955000=
|
|
EMITPAIR(RDS); 61545000=08955000=
|
|
EMITPAIR(A:= GNAT(SORTA), STD); 61550000=08955000=
|
|
EMITO(MKS); 61555000=08956000=
|
|
EMITL(20); 61560000=08956000=
|
|
EMITL(1000); 61565000=08956000=
|
|
EMITL(3); 61570000=08956000=
|
|
EMITL(SFILENO); 61575000=08956000=
|
|
EMIT(0); 61580000=08957000=
|
|
EMITO(LNG); 61585000=08957000=
|
|
EMITN(A); 61590000=08957000=
|
|
EMITO(INX); 61595000=08957000=
|
|
EMITL(2); 61600000=08957000=
|
|
EMITL(1); 61605000=08958000=
|
|
EMITL(10); 61610000=08958000=
|
|
EMIT(0); 61615000=08958000=
|
|
EMIT(0); 61620000=08958000=
|
|
EMITL(10); 61625000=08958000=
|
|
EMITL(8); 61630000=08959000=
|
|
EMITV(5); 61635000=08959000=
|
|
EMIT(0); 61640000=08964000=
|
|
EMIT(0); 61645000=08964000=
|
|
EMIT(0); 61650000=08964000=
|
|
EMIT(0); 61655000=08964000=
|
|
EMIT(0); 61660000=08964000=
|
|
EMIT(0); 61665000=08964000=
|
|
EMITL(GNAT(MERGEI)); 61670000=08965000=
|
|
EMIT(0); 61675000=08965000=
|
|
EMIT(0); 61680000=08965000=
|
|
EMIT(0); 61685000=08965000=
|
|
STEPIT; 61690000=08965000=
|
|
IF CHECK(LEFTPAREN, 355) THEN 61695000=08966000=
|
|
GO QUIT; 61700000=08966000=
|
|
% OUTPUT OPTION. 61705000=08966500=
|
|
IF STEPI = FILEID OR ELCLASS = SUPERFILEID THEN 61710000=08967000=
|
|
BEGIN 61715000=08968000=
|
|
EMIT(0); 61720000=08968000=
|
|
PASSFILE; 61725000=08968000=
|
|
I:= I-1 61730000=08968000=
|
|
END 61735000=08969000=
|
|
ELSE 61740000=08969000=
|
|
BEGIN 61745000=08969000=
|
|
IF NOT (OUTPRO:= OUTPROCHECK(ELBAT[I])) THEN 61750000=08969000=
|
|
GO QUIT; 61755000=08969000=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 61760000=08970000=
|
|
EMITL(A); 61765000=08970000=
|
|
EMITN(10) 61770000=08971000=
|
|
END; 61775000=08971000=
|
|
IF NOT COMMACHECK THEN 61780000=08972000=
|
|
GO QUIT; 61785000=08972000=
|
|
% INPUT OPTION. 61790000=08972500=
|
|
IF ELCLASS = FILEID OR ELCLASS = SUPERFILEID THEN 61795000=08973000=
|
|
BEGIN 61800000=08974000=
|
|
EMITPAIR(0, XCH); 61805000=08974000=
|
|
PASSFILE; 61810000=08974000=
|
|
I:= I-1 61815000=08974000=
|
|
END 61820000=08975000=
|
|
ELSE 61825000=08975000=
|
|
IF NOT (INPRO:= INPROCHECK(ELBAT[I])) THEN 61830000=08975000=
|
|
GO QUIT 61835000=08975000=
|
|
ELSE 61840000=08975000=
|
|
BEGIN 61845000=08976000=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 61850000=08976000=
|
|
EMITO(XCH); 61855000=08976000=
|
|
IF OUTPRO THEN 61860000=08977000=
|
|
EMITO(DUP) 61865000=08977000=
|
|
ELSE 61870000=08977000=
|
|
BEGIN 61875000=08977000=
|
|
EMITL(A); 61880000=08977000=
|
|
EMITN(10) 61885000=08978000=
|
|
END; 61890000=08978000=
|
|
END INPUT PRO; 61895000=08978000=
|
|
EMITL(REAL(OUTPRO)); 61900000=08979000=
|
|
EMITL(REAL(INPRO)); 61905000=08979000=
|
|
EMIT(0); 61910000=08979000=
|
|
EMITO(LNG); 61915000=08980000=
|
|
EMITN(A); 61920000=08980000=
|
|
EMITO(INX); 61925000=08980000=
|
|
EMITO(LOD); 61930000=08980000=
|
|
EMITPAIR(5, CDC); 61935000=08981000=
|
|
EMIT(0); 61940000=08981000=
|
|
IF NOT COMMACHECK THEN 61945000=08983000=
|
|
GO QUIT; 61950000=08983000=
|
|
% NUMBER OF TAPES. 61955000=08983500=
|
|
EMIT(0); 61960000=08984000=
|
|
EMIT(0); 61965000=08984000=
|
|
EMIT(0); 61970000=08984000=
|
|
EMIT(0); 61975000=08984000=
|
|
EMIT(0); 61980000=08984000=
|
|
EMITO(MKS); 61985000=08985000=
|
|
EMITN(A); 61990000=08985000=
|
|
EMITL(SFILENO+2); 61995000=08985000=
|
|
AEXP; 62000000=08985000=
|
|
I:= I-1; 62005000=08985000=
|
|
EMITL(14); 62010000=08986000=
|
|
EMITV(5); 62015000=08986000=
|
|
IF NOT COMMACHECK THEN 62020000=08987000=
|
|
GO QUIT; 62025000=08987000=
|
|
% HIVALUE PROCEDURE. 62030000=08987500=
|
|
IF NOT HVCHECK(ELBAT[I]) THEN 62035000=08988000=
|
|
GO QUIT; 62040000=08988000=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 62045000=08989000=
|
|
IF NOT COMMACHECK THEN 62050000=08990000=
|
|
GO QUIT; 62055000=08990000=
|
|
% COMPARE PROCEDURE. 62060000=08990500=
|
|
IF NOT EQLESCHECK(ELBAT[I]) THEN 62065000=08991000=
|
|
GO QUIT; 62070000=08991000=
|
|
EMITPAIR(ELBAT[I].ADDRESS, LOD); 62075000=08992000=
|
|
% RECORD LENGTH. 62080000=08992500=
|
|
IF NOT COMMACHECK THEN 62085000=08993000=
|
|
GO QUIT; 62090000=08993000=
|
|
AEXP; 62095000=08993000=
|
|
EMITO(SSN); 62100000=08993000=
|
|
EMIT(0); 62105000=08993500=
|
|
EMITPAIR(A, SND); 62110000=08993500=
|
|
% CORE SIZE. 62115000=08993900=
|
|
IF ELCLASS = COMMA THEN 62120000=08994000=
|
|
BEGIN 62125000=08994010=
|
|
STEPIT; 62130000=08994020=
|
|
CORESZ:= MAX(IF ELCLASS = NONLITNO THEN C ELSE 12000, CORESZ); 62135000=08994040=
|
|
AEXP; 62140000=08994060=
|
|
END 62145000=08994080=
|
|
ELSE 62150000=08994080=
|
|
IF ELCLASS = RTPAREN THEN 62155000=08994080=
|
|
BEGIN 62160000=08994090=
|
|
IF CORESZ < 1023 THEN 62165000=08994500=
|
|
CORESZ:= 12000; 62170000=08994500=
|
|
EMIT(0); 62175000=08994510=
|
|
END 62180000=08994530=
|
|
ELSE 62185000=08994530=
|
|
ERR(366); 62190000=08994530=
|
|
% DISK SIZE. 62195000=08994900=
|
|
IF ELCLASS = COMMA THEN 62200000=08995000=
|
|
BEGIN 62205000=08995000=
|
|
STEPIT; 62210000=08995000=
|
|
AEXP 62215000=08995000=
|
|
END 62220000=08995500=
|
|
ELSE 62225000=08995500=
|
|
IF ELCLASS = RTPAREN THEN 62230000=08995500=
|
|
EMIT(0) 62235000=08995500=
|
|
ELSE 62240000=08995500=
|
|
ERR(366); 62245000=08995500=
|
|
IF ELCLASS ^= RTPAREN THEN 62250000=08996000=
|
|
ERR(366) 62255000=08996000=
|
|
ELSE 62260000=08996000=
|
|
STEPIT; 62265000=08996000=
|
|
QUIT: 62270000=08997000=
|
|
EMITV(GNAT(SORTI)); 62275000=08997000=
|
|
END SORTSTMT; 62280000=08998000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%62285000=08998000=
|
|
62290000=09000000=
|
|
COMMENT THE PROGRAM ROUTINE DOES THE INITIALIZATION AND THE WRAPUP 62295000=09000000=
|
|
FOR THE REST OF THE COMPILER. THE MAIN PROGRAM OF THE COMPILER62300000=09001000=
|
|
IS SIMPLY A CALL ON THE PROGRAM ROUTINE; 62305000=09002000=
|
|
PROCEDURE PROGRAM; 62310000=09003000=
|
|
BEGIN 62315000=09004000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%62316000
|
|
DEFINE MDESC(WD, TOLOC) = 62320000=09005000=
|
|
BEGIN 62335000=09006000=
|
|
TOLOC:= (WD) & (1)[47:1]; 62340000=09006000=
|
|
END #; 62365000=09006000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%62370000=09007000=
|
|
COMMENT THE FOLLOWING PROCEDURE PRINTS OUT THE PRT, NAME, AND 62375000=09007000=
|
|
SEGMENT NUMBER OF THE INTRINSIC PROCEDURES USED IN THE 62380000=09008000=
|
|
OBJECT PROGRAM; 62385000=09009000=
|
|
PROCEDURE WRTINTRSC(SGNO, ALFA, AX, PRT, FIL); 62390000=09010000=
|
|
VALUE 62395000=09011000=
|
|
SGNO, AX, PRT; 62400000=09011000=
|
|
REAL 62400100
|
|
SGNO, AX, PRT; 62400200
|
|
ARRAY 62400300
|
|
ALFA, FIL[0]; 62400400
|
|
BEGIN 62410000=09012000=
|
|
STREAMLOCALS; 62410100
|
|
REAL 62415000=09012000=
|
|
COUNT, 62415100
|
|
DEST; 62415200
|
|
LABEL 62415300
|
|
JUMPOUT; 62415400
|
|
62415500
|
|
STREAMSETDI(FIL, 0); 62420000=09013000=
|
|
STREAMTRANSFERLIT(4, 6"PRT("); 62425000=09013000=
|
|
STREAMSETLOCSI(PRT); 62430000=09013000=
|
|
STREAMSKIPSI(+4); 62435000=09013000=
|
|
TALLY:= 4; 62440000=09013000=
|
|
THRU 3 DO 62445000=09014000=
|
|
BEGIN 62445100
|
|
IF STREAMSCEQL(6"0") THEN % DONT PRINT LEADING ZEROES. 62445200
|
|
BEGIN 62450000=09015000=
|
|
STREAMSKIPSI(+1); 62450100
|
|
STREAMINCTALLY(+63); % DECREMENT TALLY 62450200
|
|
END 62455000=09015000=
|
|
ELSE 62455100
|
|
GO JUMPOUT 62460000=09015000=
|
|
END; 62460100
|
|
62460200
|
|
JUMPOUT: 62464000
|
|
COUNT:= TALLY; 62465000=09016000=
|
|
STREAMTRANSFERCHR(COUNT); 62470000=09016000=
|
|
STREAMTRANSFERLIT(4, 6") = "); 62475000=09016000=
|
|
STREAMSETSI(ALFA, AX); 62480000=09017000=
|
|
STREAMSKIPSI(+2); 62485000=09017000=
|
|
DEST:= STREAMGETDI; % SAVE DI. 62490000=09017000=
|
|
STREAMSETLOCDI(COUNT); 62495000=09018000=
|
|
STREAMSMEARLIT(7, 6"0"); 62500000=09018000=
|
|
STREAMTRANSFERCHR(1); % NO OF CHARS IN NAME. 62505000=09018000=
|
|
COUNT:= STREAMTEMPD[0]; 62505100
|
|
STREAMSETDI(FIL, DEST); 62510000=09019000=
|
|
STREAMTRANSFERCHR(COUNT); % INT. NAME. 62515000=09019000=
|
|
STREAMTRANSFERLIT(8, 6" INTRINS"); 62520000=09020000=
|
|
STREAMTRANSFERLIT(8, 6"IC, SEGM"); 62520100
|
|
STREAMTRANSFERLIT(8, 6"ENT NUMB"); 62520200
|
|
STREAMTRANSFERLIT(5, 6"ER = "); 62520300
|
|
STREAMSETLOCSI(SGNO); 62525000=09021000=
|
|
STREAMTRANSFERDEC(4); 62530000=09021000=
|
|
STREAMTRANSFERLIT(1, 6"."); 62535000=09021000=
|
|
STREAMSKIPDI(-5); 62540000=09022000=
|
|
STREAMTRANSFERFILL(4); % JUNK LEADING BLANKS. 62545000=09022000=
|
|
END WRTINTRSC; 62550000=09023000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%62552000
|
|
DEFINE 62555000=09024000=
|
|
STARTINTRSC = 426 #; 62560000=09024000=
|
|
LABEL 62565000=09025000=
|
|
L1; 62570000=09025000=
|
|
IDLOC:= 0; 62575000=09026000=
|
|
IDLOCTEMP:= IDLOC; 62580000=09027000=
|
|
FILL OPTIONS[*] WITH 6"5CHECK", 0, % 0, 1 62585000=09027002=
|
|
6"6DEBUG", 0, % 2, 3 62590000=09027004=
|
|
6"4DECK0", 0, % 4, 5 62595000=09027006=
|
|
6"6FORMA", 0, % 6, 7 62600000=09027008=
|
|
6"9INTRI", 0, % 8, 9 62605000=09027010=
|
|
6"5LISTA", 0, % 10, 11 62610000=09027012=
|
|
6"4LIST0", 0, % 12, 13 62615000=09027014=
|
|
6"5LISTP", 0, % 14, 15 62620000=09027016=
|
|
6"3MCP00", 0, % 16, 17 62625000=09027018=
|
|
6"4TAPE0", 0, % 18, 19 62630000=09027020=
|
|
6"4NEST0", 0, % 20, 21 62635000=09027022=
|
|
6"3NEW00", 0, % 22, 23 62640000=09027024=
|
|
6"7NEWIN", 0, % 24, 25 62645000=09027026=
|
|
6"4OMIT0", 0, % 26, 27 62650000=09027028=
|
|
6"1$0000", 0, % 28, 29 62655000=09027030=
|
|
6"3PRT00", 0, % 30, 31 62660000=09027032=
|
|
6"5PUNCH", 0, % 32, 33 62665000=09027034=
|
|
6"5PURGE", 0, % 34, 35 62670000=09027036=
|
|
6"4SEGS0", 0, % 36, 37 62675000=09027038=
|
|
6"3SEQ00", 0, % 38, 39 62680000=09027040=
|
|
6"6SEQER", 0, % 40, 41 62685000=09027042=
|
|
6"6SINGL", 0, % 42, 43 62690000=09027044=
|
|
6"5STUFF", 0, % 44, 45 62695000=09027046=
|
|
6"4VOID0", 0, % 46, 47 62700000=09027048=
|
|
6"5VOIDT", 0, % 48, 49 62705000=09027050=
|
|
6"4BEND0", 0, % 50, 51 62710000=09027052=
|
|
6"4XREF0", 0, % 52, 53 62715000=09027054=
|
|
6"7INCLU", 0, % 54,55 62720000=09027056=
|
|
6"8CODEF", 0, % 56,57 62725000=09027058=
|
|
0; 62730000=09027100=
|
|
LISTOG:= LISTER:= BOOLEAN(1-ERRORCOUNT.[1:1]); 62735000=09028000=
|
|
SINGLTOG:= TRUE; % DEFAULT TO SINGLE-SPACED LISTING 62735100
|
|
OPTIONS[13]:= REAL(LISTER); 62740000=09028005=
|
|
SAVETIME:= 30; % ON THE B5500, THE MCP WOULD SET THIS 62742000
|
|
62745000=09028010=
|
|
COMMENT LISTOG IS NOT SET BY DEFAULT ON TIMESHARING; 62750000=09028010=
|
|
NOHEADING:= TRUE; 62755000=09028050=
|
|
BUILDLINE.[0:1]:= SEQXEQTOG:= BOOLEAN(ERRORCOUNT.[0:1]); 62760000=09028150=
|
|
ERRORCOUNT:= 0; 62765000=09028900=
|
|
ERRMAX:= 999; % MAY BE CHANGED IN DOLLARCARD. 62770000=09028910=
|
|
BASENUM:= 10000; 62775000=09028920=
|
|
ADDVALUE:= 1000; 62780000=09028920=
|
|
NEWBASE:= TRUE; 62785000=09028920=
|
|
COMMENT DEFAULT VALUES FOR "$SEQ" OPTION; 62795000=09028930=
|
|
62795100
|
|
OPEN(CARD); 62795200
|
|
CARDRECSIZE:= CARD.MAXRECSIZE; 62795300
|
|
LASTUSED:= 4; % FOR INITIALIZATION. 62800000=09029000=
|
|
SGNO:= 1; 62805000=09030000=
|
|
SGAVL:= 2; 62810000=09030000=
|
|
PDINX:= 0; 62815000=09030000=
|
|
FILENO:= DA:= 1; 62820000=09031000=
|
|
FILETHING:= 4095; 62825000=09031100=
|
|
MAXSTACK:= 513; 62830000=09032000=
|
|
NEXTINFO:= LASTINFO:= LASTSEQROW*256+LASTSEQUENCE+1; 62835000=09033000=
|
|
PUTNBUMP(0); 62840000=09034000=
|
|
BLANKET(0, INFO[LASTSEQROW, LASTSEQUENCE]); % FOR "$ CHECK". 62845000=09034500=
|
|
READACARD; % INITIALIZATION OF NCR,FCR, AND LCR, AND 62850000=09035000=
|
|
% READS FIRST CARD INTO CARD BUFFER. 62855000=09036000=
|
|
LASTUSED:= 1; % ASSUMES CARD ONLY UNTIL TOLD DIFFERENTLY.62860000=09037000=
|
|
NXTELBT:= 1; 62865000=09038000=
|
|
FAULTLEVEL:= 32; 62870000=09038000=
|
|
PRTI:= PRTIMAX:= 18; 62875000=09039000=
|
|
MRCLEAN:= TRUE; 62880000=09040000=
|
|
62885000=09040100=
|
|
COMMENT START FILLING TABLES NEEDED TO COMPILE A PROGRAM; 62890000=09040100=
|
|
FILL TEN[*] WITH 3"1141000000000000", 3"1131200000000000", 62895000=09058000=
|
|
3"1121440000000000", 3"1111750000000000", 3"1102342000000000", 62900000=09059000=
|
|
3"1073032400000000", 3"1063641100000000", 3"1054611320000000", 62905000=09060000=
|
|
3"1045753604000000", 3"1037346545000000", 3"1011124027620000", 62910000=09061000=
|
|
3"0001351035564000", 3"0011643245121000", 3"0022214116345200", 62915000=09062000=
|
|
3"0032657142036440", 3"0043432772446150", 3"0054341571157602", 62920000=09063000=
|
|
3"0065432127413543", 3"0076740555316473", 3"0111053071060221", 62925000=09064000=
|
|
3"0121265707274266", 3"0131543271153343", 3"0142074147406234", 62930000=09065000=
|
|
3"0152513201307703", 3"0163236041571663", 3"0174105452130240", 62935000=09066000=
|
|
3"0205126764556310", 3"0216354561711772", 3"0231004771627437", 62940000=09067000=
|
|
3"0241206170175347", 3"0251447626234641", 3"0261761573704011", 62945000=09068000=
|
|
3"0272356132665013", 3"0303051561442216", 3"0313664115752661", 62950000=09069000=
|
|
3"0324641141345435", 3"0336011371636745", 3"0347413670206536", 62955000=09070000=
|
|
3"0361131664625027", 3"0371360241772234", 3"0401654312370703", 62960000=09071000=
|
|
3"0412227375067064", 3"0422675274304701", 3"0433454553366062", 62965000=09072000=
|
|
3"0444367706263476", 3"0455465667740415", 3"0467003245730521", 62970000=09073000=
|
|
3"0501060411731665", 3"0511274514320242", 3"0521553637404312", 62975000=09074000=
|
|
3"0532106607305375", 3"0542530351166674", 3"0553256443424453", 62980000=09075000=
|
|
3"0564132154331566", 3"0575160607420123", 3"0606414751324150", 62985000=09076000=
|
|
3"0621012014361120", 3"0631214417455344", 3"0641457523370635", 62990000=09077000=
|
|
3"0651773450267005", 3"0662372362344606", 3"0673071057035747", 62995000=09078000=
|
|
3"0703707272645341", 3"0714671151416632", 3"0726047403722400", 63000000=09079000=
|
|
3"0737461304707100", 3"0751137556607072", 3"0761367512350710", 63005000=09080000=
|
|
3"0771665435043073"; 63010000=09080000=
|
|
63015000=09081000=
|
|
COMMENT THIS IS THE FILL FOR THE SECOND ROW OF INFO: 63020000=09081000=
|
|
THE FIRST ITEMS ARE STREAM RESERVED WORDS, 63025000=09082000=
|
|
THEN ORDINARY RESERVED WORDS, 63030000=09083000=
|
|
THEN INTRINSIC FUNCTIONS; 63035000=09084000=
|
|
FILL INFO[1,*] WITH 63040000=09085000=
|
|
3"0670000600000400", 6"2SI000", COMMENT 256; 63045000=09086000=
|
|
3"0700001040000402", 6"2DI000", COMMENT 258; 63050000=09087000=
|
|
3"0710001460000404", 6"2CI000", COMMENT 260; 63055000=09088000=
|
|
3"0720001630000406", 6"5TALLY", COMMENT 262; 63060000=09089000=
|
|
3"0730000530000410", 6"2DS000", COMMENT 264; 63065000=09090000=
|
|
3"0740000150000412", 6"4SKIP0", COMMENT 266; 63070000=09091000=
|
|
3"0750001620000414", 6"4JUMP0", COMMENT 268; 63075000=09092000=
|
|
3"0760000740000416", 6"2DB000", COMMENT 270; 63080000=09093000=
|
|
3"0770000500000420", 6"2SB000", COMMENT 272; 63085000=09094000=
|
|
3"1010000730000422", 6"2SC000", COMMENT 274; 63090000=09095000=
|
|
3"1020001160000424", 6"3LOC00", COMMENT 276; 63095000=09096000=
|
|
3"1030001170000426", 6"2DC000", COMMENT 278; 63100000=09097000=
|
|
3"1040001430000430", 6"5LOCAL", COMMENT 280; 63105000=09098000=
|
|
3"1050000340000432", 6"3LIT00", COMMENT 282; 63110000=09099000=
|
|
3"1060001036400434", 6"3SET00", COMMENT 284; 63115000=09100000=
|
|
3"1060001066500436", 6"5RESET", COMMENT 286; 63120000=09101000=
|
|
3"1060001020500440", 6"3WDS00", COMMENT 288; 63125000=09102000=
|
|
3"1060001357700442", 6"3CHR00", COMMENT 290; 63130000=09103000=
|
|
3"1060001057300444", 6"3ADD00", COMMENT 292; 63135000=09104000=
|
|
3"1060001617200446", 6"3SUB00", COMMENT 294; 63140000=09105000=
|
|
3"1060000727600450", 6"3ZON00", COMMENT 296; 63145000=09106000=
|
|
3"1060000417500452", 6"3NUM00", COMMENT 298; 63150000=09107000=
|
|
3"1060000766700454", 6"3OCT00", COMMENT 300; 63155000=09108000=
|
|
3"1060000176600456", 6"3DEC00", COMMENT 302; 63160000=09109000=
|
|
3"1004000260000460", 6"6TOGGL",6"E0000000", COMMENT 304; 63165000=09110000=
|
|
3"0430000050000000", 6"5ALPHA", COMMENT 307; 63170000=09111000=
|
|
3"1330001030000000", 6"3AND00", COMMENT 309; 63175000=09112000=
|
|
3"0430000170000525", 6"5ARRAY", COMMENT 311; 63180000=09113000=
|
|
3"0660000000000000", 6"5BEGIN", COMMENT 313; 63185000=09114000=
|
|
3"0430000030000503", 6"7BOOLE",6"AN000000", COMMENT 315; 63190000=09115000=
|
|
3"0470000000000000", 6"5CLOSE", COMMENT 318; 63195000=09116000=
|
|
3"1070000000000655", 6"7COMME",6"NT000000", COMMENT 320; 63200000=09117000=
|
|
3"0430000230000000", 6"6DEFIN",6"E0000000", COMMENT 323; 63205000=09118000=
|
|
3"1360006000000000", 6"3DIV00", COMMENT 326; 63210000=09119000=
|
|
3"0550000000000000", 6"2DO000", COMMENT 328; 63215000=09120000=
|
|
3"0520000000000000", 6"6DOUBL",6"E0000000", COMMENT 330; 63220000=09121000=
|
|
3"0430000100000000", 6"4DUMP0", COMMENT 333; 63225000=09122000=
|
|
3"0570000000000000", 6"4ELSE0", COMMENT 335; 63230000=09123000=
|
|
3"0600000000000000", 6"3END00", COMMENT 337; 63235000=09124000=
|
|
3"1300002030000000", 6"3EQV00", COMMENT 339; 63240000=09125000=
|
|
3"0360000000000644", 6"5FALSE", COMMENT 341; 63245000=09126000=
|
|
3"0430000210000000", 6"4FILE0", COMMENT 343; 63250000=09127000=
|
|
3"0610000001200000", 6"4FILL0", 63255000=09128000=
|
|
3"0530000000000000", 6"3FOR00", COMMENT 347; 63260000=09129000=
|
|
3"0430000200000554", 6"6FORMA",6"T0000000", COMMENT 349; 63265000=09130000=
|
|
3"1100000000000000", 6"7FORWA",6"RD000000", COMMENT 352; 63270000=09131000=
|
|
3"0640000000000604", 6"2GO000", COMMENT 355; 63275000=09132000=
|
|
3"0630000000000000", 6"2IF000", COMMENT 357; 63280000=09133000=
|
|
3"0430000130000000", 6"2IN000", COMMENT 359; 63285000=09134000=
|
|
3"0430000060000000", 6"7INTEG",6"ER000000", COMMENT 361; 63290000=09135000=
|
|
3"1310000000000000", 6"3IMP00", COMMENT 364; 63295000=09136000=
|
|
3"0430000070000000", 6"5LABEL", COMMENT 366; 63300000=09137000=
|
|
3"0430000110000613", 6"4LIST0", COMMENT 368; 63305000=09138000=
|
|
3"0500000000000000", 6"4LOCK0", COMMENT 370; 63310000=09139000=
|
|
3"1360016000000000", 6"3MOD00", COMMENT 372; 63315000=09140000=
|
|
3"0430000140000000", 6"7MONIT",6"OR000000", COMMENT 374; 63320000=09141000=
|
|
3"1250000000000000", 6"3NOT00", COMMENT 377; 63325000=09142000=
|
|
3"1320000430000624", 6"2OR000", COMMENT 379; 63330000=09143000=
|
|
3"0430000120000000", 6"3OUT00", COMMENT 381; 63335000=09144000=
|
|
3"0430000010000476", 6"3OWN00", COMMENT 383; 63340000=09145000=
|
|
3"0430000160000463", 6"9PROCE",6"DURE0000", COMMENT 385; 63345000=09146000=
|
|
3"0440000000000000", 6"4READ0", COMMENT 388; 63350000=09147000=
|
|
3"0430000040000000", 6"4REAL0", COMMENT 390; 63355000=09148000=
|
|
3"0650000000000000", 6"7RELEA",6"SE000000", COMMENT 392; 63360000=09149000=
|
|
3"0510000000000000", 6"6REWIN",6"D0000000", COMMENT 395; 63365000=09150000=
|
|
3"0430000020000773", 6"4SAVE0", COMMENT 398; 63370000=09151000=
|
|
3"0460000000000000", 6"5SPACE", COMMENT 400; 63375000=09152000=
|
|
3"1110000000000000", 6"4STEP0", COMMENT 402; 63380000=09153000=
|
|
3"0430000220000000", 6"6STREA",6"M0000000", COMMENT 404; 63385000=09154000=
|
|
3"0430000150000562", 6"6SWITC",6"H0000000", COMMENT 407; 63390000=09155000=
|
|
3"1120000000000000", 6"4THEN0", COMMENT 410; 63395000=09156000=
|
|
3"1130000000000000", 6"2TO000", COMMENT 412; 63400000=09157000=
|
|
3"0360000010000000", 6"4TRUE0", COMMENT 414; 63405000=09158000=
|
|
3"0560000000000000", 6"5UNTIL", COMMENT 416; 63410000=09159000=
|
|
3"1140000000000000", 6"5VALUE", COMMENT 418; 63415000=09160000=
|
|
3"0540000000000540", 6"5WHILE", COMMENT 420; 63420000=09161000=
|
|
3"1150000000000000", 6"4WITH0", COMMENT 422; 63425000=09162000=
|
|
3"0450000000000531", 6"5WRITE", COMMENT 424; 63430000=09163000=
|
|
3"0130000000140673", 6"3ABS00", 3"0000000000700000",%426 63435000=09164000=
|
|
3"0130000000060000", 6"6ARCTA",6"N0000000",3"0000000001600000",%429;63440000=09165000=
|
|
3"0130000000040000", 6"3COS00", 3"0000000001500000",%433; 63445000=09166000=
|
|
3"0130000000360000", 6"6ENTIE",6"R0000000",3"0000000001100000",%436 63450000=09167000=
|
|
3"0130000000040000", 6"3EXP00", 3"0000000002000000",%440; 63455000=09168000=
|
|
3"0130000000040000", 6"2LN000", 3"0000000001700000",%443; 63460000=09169000=
|
|
3"0130000000240000", 6"4SIGN0", 3"0000000001000000",%446 63465000=09170000=
|
|
3"0130000000040000", 6"3SIN00", 3"0000000001400000",%449; 63470000=09171000=
|
|
3"0130000000040515", 6"4SQRT0", 3"0000000001300000",%452; 63475000=09172000=
|
|
3"0130000000440000", 6"4TIME0", 3"0000000001200000",%455 63480000=09173000=
|
|
3"0140000000040000", 6"3ZIP00", 0, COMMENT 455; 63485000=09174000=
|
|
3"0130000000060000", 6"9OUTPU",6"T(W)0000",3"0000000000100000",%461;63490000=09175000=
|
|
3"0130000050060000", 6":BLOCK",6" CONTROL",3"0000000000200000",%465;63495000=09176000=
|
|
3"0130000000060000", 6"8INPUT",6"(W)00000",3"0000000000300000",%469;63500000=09177000=
|
|
3"0000000000060000", 6"4SORT0", 0, 3"0000000000400000",% 473 63505000=09178000=
|
|
3"0130000000040000", 6"4DUMP0", 3"0000000000500000",%477; 63510000=09179000=
|
|
3"0130000000060000", 6"#X TO ",6"THE I000",3"0000000000600000",%480;63515000=09180000=
|
|
3"0130000000060000", 6":GO TO",6" SOLVER ",3"0000000002100000",%484;63520000=09181000=
|
|
3"0130000140060000", 6":ALGOL",6" WRITE ",3"0000000002200000",%488;63525000=09182000=
|
|
3"0130000150060000", 6":ALGOL",6" READ ",3"0000000002300000",%492;63530000=09183000=
|
|
3"0130000160060000", 6":ALGOL",6" SELECT ",3"0000000002400000",%496;63535000=09184000=
|
|
3"0000000000040000", 6"5MERGE", 3"0000000002700000",% 500 63540000=09184100=
|
|
3"0130000000560652", 6"6STATU",6"S0000000",3"0000000003000000",%503 63545000=09184200=
|
|
3"0130000000640000", 6"3MAX00", 3"0000000003100047",%507 63550000=09184300=
|
|
3"0430000240000000", 6"6AUXME",6"M0000000"; %510 63555000=09185000=
|
|
63560000=09185100=
|
|
63565000=09186000=
|
|
COMMENT THIS IS THE FILL FOR STACKHEAD; 63570000=09187000=
|
|
FILL STACKHEAD[*] WITH 63575000=09188000=
|
|
320,359,313,458,385, 0,337,347,383,361,379,412, 0, 0, 0,372, 63580000=09189000=
|
|
355,309, 0, 0,368, 0,446, 0, 0,549,311,410, 0, 0,400, 0, 63585000=09190000=
|
|
0, 0, 0, 0,503,315, 0, 0,330, 0, 0, 0, 0, 0, 0,440, 63590000=09191000=
|
|
390,449,349, 0,414, 0, 0, 0,452, 0, 0, 0, 0, 0, 0, 0, 63595000=09192000=
|
|
381,328, 0, 0, 0, 0, 0, 0, 0, 0, 0,436, 0,402,407, 0, 63600000=09193000=
|
|
0, 0,377, 0, 0, 0,416,455,355, 0, 0,357, 0,552,374, 0, 63605000=09194000=
|
|
0, 0,433, 0,418,398,343, 0, 0,326,339, 0, 0, 0,366, 0, 63610000=09195000=
|
|
0, 0, 0, 0, 0,422, 0,392, 0, 0, 0,424, 0; 63615000=09196000=
|
|
FILL SUPERSTACK[*] WITH 63620000=09196100=
|
|
0, 0,313, 0,307, 0,337,347,383, 0,379,412, 0, 0, 0,372, 63625000=09196200=
|
|
335,309, 0, 0, 0, 0, 0, 0, 0, 0,420,410, 0, 0, 0, 0, 63630000=09196300=
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63635000=09196400=
|
|
390, 0,364, 0,414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63640000=09196500=
|
|
0,328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,402, 0, 0, 63645000=09196600=
|
|
0, 0,377, 0,510, 0,416, 0,355, 0, 0,357, 0, 0, 0, 0, 63650000=09196700=
|
|
0, 0, 0, 0, 0,398, 0, 0, 0,326,339, 0, 0, 0,366, 0, 63655000=09196800=
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,424, 0; 63660000=09196900=
|
|
COMMENT THIS IS THE FILL FOR THE SPECIAL CHARACTORS; 63665000=09197000=
|
|
FILL SPECIAL[*] WITH 63670000=09198000=
|
|
3"1200000000200000", COMMENT #; 3"0000000000100000", COMMENT @; 63675000=09199000=
|
|
3"0000000000000000", 3"1160000000120000", COMMENT :; 63680000=09200000=
|
|
3"1340000450002763", COMMENT >; 3"1340000250002662", COMMENT >=; 63685000=09201000=
|
|
3"1350000200000000", COMMENT +; 3"0000000000000000", 63690000=09202000=
|
|
3"1220000000060000", COMMENT .; 3"1210000000000000", COMMENT [; 63695000=09203000=
|
|
3"1270000000000000", COMMENT &; 3"0420000000000000", COMMENT (; 63700000=09204000=
|
|
3"1340010450003571", COMMENT <; 3"1260000000000000", COMMENT <-; 63705000=09205000=
|
|
3"1360001000000000", COMMENT x; 3"0000000000000000", 63710000=09206000=
|
|
3"0000000000040000", COMMENT $; 3"1370000000000000", COMMENT *; 63715000=09207000=
|
|
3"1350000600000000", COMMENT -; 3"1240000000160000", COMMENT ); 63720000=09208000=
|
|
3"0620000000000000", COMMENT .,; 3"1340010250003470", COMMENT <=; 63725000=09209000=
|
|
3"0000000000000000", 3"1360002000000000", COMMENT /; 63730000=09210000=
|
|
3"1170000000000000", COMMENT ,; 3"0000000000020000", COMMENT %; 63735000=09211000=
|
|
3"1340001050002561", COMMENT ^=; 3"1340011050002460", COMMENT =; 63740000=09212000=
|
|
3"1230000000000000", COMMENT ]; 3"0000000000140000", COMMENT "; 63745000=09213000=
|
|
0,0; 63750000=09214000=
|
|
COMMENT THIS IS THE FILL FOR THE REALLY SPECIAL CHARACTERS FOR DATACOM;63755000=09214100=
|
|
FILL INFO[2,*] WITH 3"0030000120000000", 6"2LB000", % THESE ENTRIES ARE 63760000=09214105=
|
|
3"0030000130000000", 6"2RB000", % DESIGNED TO LOOK 63765000=09214110=
|
|
3"0030000140000000", 6"3GTR00", % LIKE DEFINE 63770000=09214115=
|
|
3"0030000150000000", 6"3GEQ00", % DECLARATIONS AT 63775000=09214120=
|
|
3"0030000160000000", 6"3EQL00", % BLOCK LEVEL 0. 63780000=09214125=
|
|
3"0030000170000000", 6"3NEQ00", 63785000=09214130=
|
|
3"0030000200000000", 6"3LEQ00", 63790000=09214135=
|
|
3"0030000210000000", 6"3LSS00", 63795000=09214140=
|
|
3"0030000220000000", 6"5TIMES", 63800000=09214145=
|
|
3"0030000230000000", 6"5INPUT", 63805000=09214150=
|
|
3"0030000240000000", 6"2IO000", 63810000=09214155=
|
|
3"0030000250000000", 6"6SERIA",6"L0000000", 63815000=09214160=
|
|
3"0030000260000000", 6"6RANDO",6"M0000000", 63820000=09214165=
|
|
3"0030000270000000", 6"6UPDAT",6"E0000000", 63825000=09214170=
|
|
3"0030000300000000", 6"6OUTPU",6"T0000000", 63830000=09214180=
|
|
3"0030000310000000", 6"7CANTU",6"SE000000", 63835000=09214190=
|
|
3"0130000000740000", 6"3MIN00", 3"0000000003200000",%54963840000=09214200=
|
|
3"0130000001040000", 6"5DELAY", 3"0000000003300000",%55263845000=09214210=
|
|
3"0000000000060000", 6":SUPER",6" MOVER ", 3"0000000003400000",%55563850000=09214220=
|
|
3"0000000000060000", 6":DYNAM",6"IC DIALS", 3"0000000004000000",%55963855000=09214230=
|
|
3"0130000000060000", 6":FILE ",6"ATTRBUTS", 3"0000000015000000",%56363860000=09214240=
|
|
3"0000000000040000", 6"5DCPWR", 3"0000000005600000",%56763865000=09214250=
|
|
3"0000000000040000", 6"5DCMTH", 3"0000000005500000",%57063870000=09214255=
|
|
3"0130000001140000", 6"5DSQRT", 3"0000000012300000",%57363875000=09214260=
|
|
3"0130000001240000", 6"4CEXP0", 3"0000000010000000",%57663880000=09214270=
|
|
3"0130000001340000", 6"3CLN00", 3"0000000010200000",%57963885000=09214295=
|
|
3"0130000001440000", 6"4CSIN0", 3"0000000010600000",%58263890000=09214300=
|
|
3"0130000001540000", 6"4CCOS0", 3"0000000011000000",%58563895000=09214305=
|
|
3"0130000001640000", 6"5CSQRT", 3"0000000012400000",%58863900000=09214310=
|
|
3"0130000001740000", 6"4DEXP0", 3"0000000007700000",%59163905000=09214315=
|
|
3"0130000002040000", 6"3DLN00", 3"0000000010100000",%59463910000=09214320=
|
|
3"0130000002140000", 6"4DSIN0", 3"0000000010500000",%59763915000=09214325=
|
|
3"0130000002240000", 6"4DCOS0", 3"0000000010700000",%60063920000=09214330=
|
|
3"0130000002360000", 6"7DARCT",6"AN000000", 3"0000000011300000",%60363925000=09214340=
|
|
3"0130000002460000", 6"6DLOG1",6"00000000", 3"0000000010400000",%60763930000=09214345=
|
|
3"0130000002560000", 6"8DARCT",6"AN200000", 3"0000000011500000",%61163935000=09214350=
|
|
3"0130000002640000", 6"4DMOD0", 3"0000000006500000",%61563940000=09214355=
|
|
3"0130000002740000", 6"4CABS0", 3"0000000005300000",%61863945000=09214360=
|
|
3"0130000003060000", 6"7ARCTA",6"N2000000", 3"0000000011400000",%62163950000=09214365=
|
|
3"0130000003160000", 6"6DROUN",6"D0000000", 3"0000000006100000",%62563955000=09214370=
|
|
3"0130000000040000", 6"5LOG10", 3"0000000010300000",%62963960000=09214375=
|
|
3"0130000000040000", 6"5COTAN", 3"0000000011200000",%63263965000=09214380=
|
|
3"0130000000060000", 6"6ARCSI",6"N0000000", 3"0000000011600000",%63563970000=09214385=
|
|
3"0130000000040000", 6"5ARCOS", 3"0000000011700000",%63963975000=09214390=
|
|
3"0130000000040000", 6"4SINH0", 3"0000000012000000",%64263980000=09214395=
|
|
3"0130000000040000", 6"4COSH0", 3"0000000012100000",%64563985000=09214400=
|
|
3"0130000000040000", 6"4TANH0", 3"0000000012200000",%64863990000=09214405=
|
|
3"0130000000040000", 6"3ERF00", 3"0000000012500000",%65163995000=09214410=
|
|
3"0130000000040000", 6"5GAMMA", 3"0000000012600000",%65464000000=09214415=
|
|
3"0130000000040000", 6"5LNGAM", 3"0000000012700000",%65764005000=09214420=
|
|
3"0130000000040000", 6"3TAN00", 3"0000000011100007",%66064010000=09214425=
|
|
3"0130000260000000", 6"4FAST0", %66364015000=09214426=
|
|
3"0130000270000000", 6"4SLOW0", %66564020000=09214427=
|
|
3"0130000240000000", 6"7PROTE",6"CT000000", %66764025000=09214428=
|
|
3"2000000000004050", COMMENT POWERS OF TEN ; %67064030000=09214430=
|
|
3"0430000250000000", 6"5FIELD", %67164035000=09214432=
|
|
0, 6">SORT ",6"TEMPORAR",6"Y0000000", % SORTA %67364040000=09214435=
|
|
6" " ; COMMENT LASTSEQUENCE,LASTSEQROW ; %67464045000=09214440=
|
|
64050000=09214500=
|
|
COMMENT NOW LINK THESE ENTRIES INTO STACKHEAD; 64055000=09214500=
|
|
FOR NEXTINFO:= 512 STEP 2 UNTIL 534, 537 STEP 3 UNTIL 546, 567 STEP 64060000=09214515=
|
|
3 UNTIL 603, 607 STEP 4 UNTIL 615, 618, 621 STEP 4 UNTIL 629, 632,64065000=09214515=
|
|
635, 639 STEP 3 UNTIL 660, 663 STEP 2 UNTIL 667, 671 64070000=09214520=
|
|
DO 64075000=09214520=
|
|
PUT(TAKE(NEXTINFO) & 64080000=09214530=
|
|
STACKHEAD[GT2:= TAKE(NEXTINFO+1) MOD 125][12:12:13], 64080100=09214530=
|
|
LASTINFO:= STACKHEAD[GT2]:= NEXTINFO); 64080200=09214530=
|
|
NEXTINFO:= LASTINFO:= LASTSEQROW*256+LASTSEQUENCE+1; 64090000=09214980=
|
|
BUILDLINE.[2:1]:= TRUE; 64095000=09214985=
|
|
PUTNBUMP(0); 64100000=09214990=
|
|
FILL MACRO[*] WITH 64105000=09215100=
|
|
3"0131", COMMENT SFS A 00 ; 64110000=09216000=
|
|
3"0116", COMMENT SFD A 01 ; 64115000=09217000=
|
|
3"0000", COMMENT SYNTAX ERROR02 ; 64120000=09218000=
|
|
3"0140", COMMENT INC A 03 ; 64125000=09219000=
|
|
3"0130", COMMENT SRS A 04 ; 64130000=09220000=
|
|
3"0117", COMMENT SRD A 05 ; 64135000=09221000=
|
|
3"0000", COMMENT SYNTAX ERROR06 ; 64140000=09222000=
|
|
3"0000", COMMENT SYNTAX ERROR07 ; 64145000=09223000=
|
|
3"00310143", COMMENT CRF A, SFS 008 ; 64150000=09224000=
|
|
3"00160143", COMMENT CRF A, SFD 009 ; 64155000=09225000=
|
|
3"00470143", COMMENT CRF A, JFW 0 10 ; 64160000=09226000=
|
|
3"00400143", COMMENT CRF A, INC 011 ; 64165000=09227000=
|
|
3"00300143", COMMENT CRF A, SRS 012 ; 64170000=09228000=
|
|
3"00170143", COMMENT CRF A, SRD 013 ; 64175000=09229000=
|
|
3"0000", COMMENT SYNTAX ERROR14 ; 64180000=09230000=
|
|
3"0000", COMMENT SYNTAX ERROR15 ; 64185000=09231000=
|
|
3"0153", COMMENT RSA A 16 ; 64190000=09232000=
|
|
3"0104", COMMENT RDA A 17 ; 64195000=09233000=
|
|
3"0150", COMMENT RCA A 18 ; 64200000=09234000=
|
|
3"004201430042", COMMENT SEC 0, CRF A, SEC 0 19 ; 64205000=09235000=
|
|
3"0122", COMMENT SES A 20 ; 64210000=09236000=
|
|
3"0106", COMMENT SED A 21 ; 64215000=09237000=
|
|
3"0000", COMMENT SYNTAX ERROR22 ; 64220000=09238000=
|
|
3"0000", COMMENT SYNTAX ERROR23 ; 64225000=09239000=
|
|
3"0056", COMMENT TSA 0 24 ; 64230000=09240000=
|
|
3"0000", COMMENT SYNTAX ERROR25 ; 64235000=09241000=
|
|
3"0000", COMMENT SYNTAX ERROR26 ; 64240000=09242000=
|
|
3"0000", COMMENT SYNTAX ERROR27 ; 64245000=09243000=
|
|
3"0000", COMMENT SYNTAX ERROR28 ; 64250000=09244000=
|
|
3"0007", COMMENT TDA 0 29 ; 64255000=09245000=
|
|
3"0000", COMMENT SYNTAX ERROR30 ; 64260000=09246000=
|
|
3"0000", COMMENT SYNTAX ERROR31 ; 64265000=09247000=
|
|
3"0115", COMMENT SSA A 32 ; 64270000=09248000=
|
|
3"0114", COMMENT SDA A 33 ; 64275000=09249000=
|
|
3"0154", COMMENT SCA A 34 ; 64280000=09250000=
|
|
3"0141"; COMMENT STC A 35 ; 64285000=09251000=
|
|
FILL TEXT[0,*] WITH 0,0,0,0,0,0,0,0,0,0, 64290000=09251010=
|
|
6"[# ", 64295000=09251020=
|
|
6"]# ", 64300000=09251030=
|
|
6"># ", 64305000=09251040=
|
|
3"17"6"# ", 64310000=09251050=
|
|
6"=# ", 64315000=09251060=
|
|
3"74"6"# ", 64320000=09251070=
|
|
3"57"6"# ", 64325000=09251080=
|
|
6"<# ", 64330000=09251090=
|
|
3"40"6"# ", 64335000=09251100=
|
|
6"1# ", 64340000=09251101=
|
|
6"3# ", 64345000=09251102=
|
|
6"0# ", 64350000=09251103=
|
|
6"1# ", 64355000=09251104=
|
|
6"2# ", 64360000=09251105=
|
|
6"2# ", 64365000=09251106=
|
|
6"0# " 64370000=09251107=
|
|
; 64375000=09251200=
|
|
NEXTTEXT:= 26; 64380000=09251300=
|
|
DO 64385000=09252000=
|
|
UNTIL STEPI = BEGINV; 64390000=09252000=
|
|
BUILDLINE.[2:1]:= FALSE; 64395000=09252050=
|
|
COMMENT THE FOLLOWING IS THE FIRST CODE EXECUTED IN ANY PROGRAM. 64400000=09253000=
|
|
THE OUTER BLOCK(NUMBER 1) CONSISTS OF THE FOLLOWING CODE: 64405000=09254000=
|
|
LITC 0 --- THIS PUTS A BOTTOM ON THE STACK 64410000=09255000=
|
|
AND IS ALSO USED AS A ONE SYLLABLE 64415000=09256000=
|
|
CHARACTER MODE PROGRAM TO CAUSE AN EXIT. 64420000=09257000=
|
|
ITS PRIMARY FUNCTION IS TO CUT BACK 64425000=09258000=
|
|
THE STACK AFTER A COMMUNICATE OPERATOR. 64430000=09259000=
|
|
MKS --- THIS SETS THE PROGRAM UP FOR RUNNING 64435000=09260000=
|
|
IN SUBPROGRAM LEVEL.THIS IS TO ALLOW 64440000=09261000=
|
|
C-RELATIVE ADDRESSING FOR CONSTANTS 64445000=09262000=
|
|
IN THE PROGRAM STREAM 64450000=09263000=
|
|
OPDC XXXX--- THIS ACCESSES A PROGRAM DESCRIPTOR 64455000=09264000=
|
|
THAT GETS THE PROGRAM INTO SUBPROGRAM 64460000=09265000=
|
|
LEVEL. XXXX IS THE FIRST AVAILABLE PRT 64465000=09266000=
|
|
CELL.AT THE START OF COMPILATION XXXX IS 64470000=09267000=
|
|
ASSUMED TO CONTAIN A LABEL DESCRIPTOR 64475000=09268000=
|
|
IT IS CHANGED BEFORE COMPILATION IS 64480000=09269000=
|
|
COMPLETE TO LOOK LIKE A WORD MODE 64485000=09270000=
|
|
PROGRAM DESCRIPTOR; 64490000=09271000=
|
|
EMITL(0); 64495000=09272000=
|
|
EMITO(MKS); 64500000=09272000=
|
|
GT1:= PROGDESCBLDR(3, 0, 0); 64505000=09273000=
|
|
GT1:= GETSPACE(TRUE, -5); % SEG.#2 DESCR. 64510000=09274000=
|
|
ERRORTOG:= TRUE; 64520000=09275000=
|
|
BLOCK(FALSE); 64525000=09275000=
|
|
COMMENT THE FOLLOWING CODE SEARCHES THROUGH INFO TO DETERMINE 64580000=09277000=
|
|
WHICH INTRINSICS HAVE BEEN USED.IF AN INTRINSIC HAS BEEN 64585000=09278000=
|
|
USED THEN A PRT ADDRESS WILL HAVE BEEN ASSIGNED AND 64590000=09279000=
|
|
THIS INDICATES THAT A DESCRIPTOR MUST BE BUILT FOR PLACING 64595000=09280000=
|
|
IN THE PRT.POWERSOFTEN IS ENTERED IN THE OBJECT PROGRAM 64600000=09281000=
|
|
PRT AS AN ABSENT DATA DESCRIPTOR.IT MAY BE RECOGNIZED IN 64605000=09282000=
|
|
INFO BECAUSE IT IS MINUS. THE FIRST WORD IN EACH OF THESE 64610000=09283000=
|
|
ENTRIES LOOKS LIKE THE REST OF INFO EXCEPT THAT THE INCR 64615000=09284000=
|
|
FIELD IS BROKEN INTO 2 PARTS, [14:2] IS USED TO ADD TO THE 64620000=09285000=
|
|
INDEX OF CURRENT WORD TO LINK TO NEXT ENTRY.THE REST OF 64625000=09286000=
|
|
THE INCR FIELD IS USED BY IMPFUN. THE ADDITIONAL INFO 64630000=09287000=
|
|
PORTION INDICATES AN INDEX THAT ALLOWS THE MCP TO ASSIGN 64635000=09288000=
|
|
DRUM ADDRESSES TO THE INTRINSICS; 64640000=09289000=
|
|
GT1:= GT3:= STARTINTRSC; 64645000=09291000=
|
|
L1: GT1:= GT1+(GT2:= INFO[GT1.LINKR, GT1.LINKC]).[14:2]; 64650000=09292000=
|
|
IF GT2 >= 0 THEN % NOT POWERS OF TEN TABLE 64655000=09293000=
|
|
BEGIN 64660000=09294000=
|
|
IF GT2.ADDRESS ^= 0 THEN % IT WAS USED 64665000=09294000=
|
|
BEGIN 64670000=09295000=
|
|
SGNO:= SGAVL; 64675000=09295000=
|
|
SGAVL:= SGAVL+1; 64680000=09295000=
|
|
GT2:= PROGDESCBLDR 64685000=09296100=
|
|
(INFO[GT1.LINKR, GT1.LINKC].[46:1]*2+1, 0, GT2.ADDRESS); 64690000=09296100=
|
|
PDPRT[PDINX.[10:5], PDINX.[5:6]]:= 1 & 64695000=09298000=
|
|
INFO[GT1.LINKR, GT1.LINKC][34:29:15] & SGNO[19:9:10] & 1 64700000=09298100=
|
|
[45:0:1]; 64705000=09298100=
|
|
PDINX:= PDINX+1; 64710000=09299000=
|
|
IF PRTOG THEN % WRITE OUT INTRINSICS USED. 64715000=09300000=
|
|
BEGIN 64720000=09300100=
|
|
GT3:= GT3+1; 64725000=09300100=
|
|
BLANKET(14, LIN); % BLANK BUFFER. 64730000=09300150=
|
|
WRTINTRSC(SGNO, INFO[GT3.LINKR,*], GT3.LINKC, 64735000=09301000=
|
|
B2D(GT2.[9:10]), LIN); 64740000=09301000=
|
|
IF NOHEADING THEN 64745000=09302000=
|
|
DATIME; 64750000=09302000=
|
|
WRITELINE; 64755000=09302000=
|
|
END 64760000=09304000=
|
|
END; 64765000=09304000=
|
|
GT3:= GT1:= GT1+INFO[GT1.LINKR, GT1.LINKC].[14:15]+1; 64770000=09305000=
|
|
GO TO L1; 64775000=09305100=
|
|
END; 64780000=09306000=
|
|
L:= L-1; COMMENT WIPES OUT EXTRANEOUS BFW EMITTED BY BLOCK; 64785000
|
|
EMITL(5); 64795000=09307000=
|
|
EMITO(COM); 64800000=09307000=
|
|
ENIL[0, 1]:= 1023 & 99999999[37:27:28]; 64805000=09307100=
|
|
ENILPTR:= 1; 64810000=09307100=
|
|
SEGMENT((L+3) DIV 4, 1, 0); 64815000=09308000=
|
|
64820000=09309000=
|
|
COMMENT IF THE POWERS-OF-TEN TABLE HAS BEEN USED, IT IS WRITTEN OUT 64825000=09309000=
|
|
AT THIS TIME AS A TYPE 2 SEGMENT; 64830000=09310000=
|
|
IF GT1:= GT2.ADDRESS ^= 0 THEN 64835000=09311000=
|
|
BEGIN 64840000=09312000=
|
|
SGAVL:= (SGNO:= SGAVL)+1; 64845000=09312000=
|
|
GT2:= PROGDESCBLDR(2, 0, GT2.ADDRESS); 64850000=09313000=
|
|
MOVE(69, TEN, 0, EDOC[0,*], 0); 64855000=09314000=
|
|
BUILDLINE:= BOOLEAN(2*REAL(BUILDLINE)); 64860000=09314100=
|
|
SEGMENT(-69, SGNO, 0); 64865000=09315000=
|
|
BUILDLINE:= BUILDLINE.[1:1]; 64870000=09315100=
|
|
END; 64875000=09316000=
|
|
BEGIN 64880000=09317000=
|
|
ARRAY 64885000=09317000=
|
|
PRT[0:7, 0:127], 64890000=09317000=
|
|
SEGDICT[0:7, 0:127]; 64895000
|
|
INTEGER 64900000=09318000=
|
|
PRTADR, 64905000=09318000=
|
|
SEGMNT, 64910000
|
|
LINK; 64915000
|
|
64920000=09333000=
|
|
COMMENT THE PRT AND SEGMENT DICTIONARY ARE NOW BUILT; 64925000=09333000=
|
|
FOR I:= 0 STEP 1 UNTIL PDINX-1 DO 64930000=09348000=
|
|
IF(GT1:= PDPRT[I.[10:5], I.[5:6]]).[9:10] = 0 THEN 64935000=09349000=
|
|
BEGIN 64940000=09350000=
|
|
PRTADR:= GT1.[39:10]; 64945000=09350000=
|
|
SEGMNT:= GT1.[19:10]; 64950000=09350000=
|
|
LINK:= SEGDICT[SEGMNT.[11:5], SEGMNT.[6:7]].[39:10]; 64955000=09351000=
|
|
MDESC(GT1.[29:10] & SEGMNT[29:14:15] & 64960000=09354100=
|
|
(IF LINK = 0 THEN SEGMNT+2048 ELSE LINK)[41:11:12] & 64965000=09354100=
|
|
GT1[43:43:2] & 5[46:2:3], 64970000=09354100=
|
|
PRT[PRTADR DIV 128, PRTADR MOD 128]); 64975000=09354100=
|
|
SEGDICT[SEGMNT.[11:5], SEGMNT.[6:7]].[39:10]:= PRTADR; 64980000=09355000=
|
|
END 64985000=09357000=
|
|
ELSE 64990000=09357000=
|
|
BEGIN 64995000=09357000=
|
|
SEGMNT:= GT1.[19:10]; 65000000=09357000=
|
|
SEGDICT[SEGMNT.[11:5], SEGMNT.[6:7]]:= 65005000=09359000=
|
|
SEGDICT[SEGMNT.[11:5], SEGMNT.[6:7]] & GT1[24:9:10] & 65010000=09360000=
|
|
GT1[14:34:15] & GT1[43:44:1] & GT1[46:46:2]; 65015000=09360000=
|
|
END; 65020000=09361000=
|
|
COMMENT SET UP NEWINX = TOTAL SEGMENT SIZE; 65025000=09361005=
|
|
NEWINX:= AKKUM; 65030000=09361005=
|
|
COMMENT CODE TO ADD IN CORE STORAGE REQUIREMENTS; 65035000=09361010=
|
|
GTI1:= 0; 65040000=09361020=
|
|
COMMENT ADD IN ARRAYS; 65045000=09361030=
|
|
GTI1:= GTI1+(IF NOOFARRAYS = 0 THEN 0 ELSE IF NOOFARRAYS <= 4 65050000=09361060=
|
|
THEN 2000 ELSE IF NOOFARRAYS <= 8 THEN 3500 ELSE 5000); 65055000=09361060=
|
|
COMMENT ADD IN SEGMENT SIZE REQUIREMENTS; 65060000=09361070=
|
|
GTI1:= GTI1+(IF NEWINX <= 1000 THEN NEWINX ELSE IF NEWINX <= 2000 65065000=09361100=
|
|
THEN 1000 ELSE NEWINX/2); 65070000=09361100=
|
|
COMMENT ADD IN STACK AND PRT; 65075000=09361110=
|
|
GTI1:= GTI1+512+PRTIMAX; 65080000=09361120=
|
|
COMMENT ADD IN JRT; 65085000=09361130=
|
|
GTI1:= GTI1+((FILENO+1)*5); 65090000=09361140=
|
|
COMMENT ADD IN I/O BUFFER REQUIREMENTS; 65095000=09361150=
|
|
GTI1:= GTI1+IOBUFFSIZE; 65100000=09361160=
|
|
COMMENT I/O SIZE CAL. IN P.IODEC; 65105000=09361160=
|
|
65110000=09361170=
|
|
COMMENT ADD SEGMENT DICT.SIZE; 65115000=09361170=
|
|
GTI1:= GTI1+SGAVL-1; 65120000=09361180=
|
|
65125000=09361181=
|
|
COMMENT ADD IN CORE ESTIMATE FOR SORT; 65130000=09361181=
|
|
GTI1:= GTI1+CORESZ; 65135000=09361182=
|
|
COMMENT CHECK IF TOTAL IS MORE THAN 8 MODS; 65140000=09361190=
|
|
IF GTI1 >= 32000 THEN 65145000=09361200=
|
|
GTI1:= 32000; 65150000=09361200=
|
|
COMMENT AT THIS POINT GTI1 HAS THE NEEDED TOTAL CORE REQD; 65155000=09361210=
|
|
65160000=09393000=
|
|
COMMENT WRITE OUT FILE PARAMETER BLOCK; 65165000=09393000=
|
|
GT1:= MIN((IDLOC-IDLOCTEMP).[14:15]+1, 128); % AHA 65170000=09394000=
|
|
MOVE(GT1, IDARRAY, 0, EDOC[0,*], 0); 65175000=09395000=
|
|
ZEROUT(IDARRAY, 0, 0, 30); 65180000=09395500=
|
|
IDARRAY[4]:= MOVEANDBLOCK(EDOC, GT1, 0); 65185000=09396000=
|
|
IDARRAY[5]:= GT1; 65190000=09397000=
|
|
65195000=09398000=
|
|
COMMENT WRITE OUT SEGMENT DICTIONARY; 65200000=09398000=
|
|
IDARRAY[0]:= MOVEANDBLOCK(SEGDICT, SGAVL, 1); 65205000=09399000=
|
|
IF BUILDLINE THEN 65210000=09399100=
|
|
IDARRAY[0]:= IDARRAY[0] & MOVEANDBLOCK(LDICT, SGAVL, 2) 65215000=09399150=
|
|
[29:14:15]; 65220000=09399150=
|
|
IDARRAY[1]:= SGAVL; 65225000=09400000=
|
|
65230000=09401000=
|
|
COMMENT WRITE OUT PRT; 65235000=09401000=
|
|
IDARRAY[2]:= MOVEANDBLOCK(PRT, PRTIMAX, 3); 65240000=09402000=
|
|
IDARRAY[3]:= PRTIMAX; 65245000=09403000=
|
|
65250000=09404000=
|
|
COMMENT MARK FIRST EXECUTABLE SEGMENT; 65255000=09404000=
|
|
IDARRAY[6]:= 1; 65260000=09405000=
|
|
65265000=09405100=
|
|
COMMENT PASS NUMBER OF FILES; 65270000=09405100=
|
|
IDARRAY[7]:= (FILENO-1) & GTI1[29:20:15]; 65275000=09405200=
|
|
65280000=09406000=
|
|
COMMENT WRITE DISK SEGMENT ZERO; 65285000=09406000=
|
|
GT1:= DA; 65290000=09407000=
|
|
DA:= 0; 65295000=09407000=
|
|
MOVE(30, IDARRAY, 0, PRT[0,*], 0); 65300000=09407000=
|
|
GT2:= MOVEANDBLOCK(PRT, 30, 6); 65305000=09407010=
|
|
DA:= GT1; 65310000=09407010=
|
|
IF CODEFILE THEN 65315000=09407020=
|
|
WRITE(LINE); 65320000=09407020=
|
|
IF SAVETIME >= 0 AND ERRORCOUNT = 0 THEN 65325000=09407050=
|
|
LOCK(CODE, CRUNCH); 65330000=09407100=
|
|
CLOSE(CARD); % RELEASE PRIMARY INPUT FILE. 65335000=09407200=
|
|
IF LISTER OR NOT NOHEADING THEN 65350000=09408000=
|
|
BEGIN 65355000=09409000=
|
|
FORMAT PAN("NUMBER OF ERRORS DETECTED =",I4,". COMPILAT" 65360000=09409200=
|
|
,"ION TIME = ",I5," SECONDS."X22,2A4/ 65365000=09410000=
|
|
"PRT SIZE =",I4,"; TOTAL SEGMENT SIZE =",I6, 65370000=09411000=
|
|
" WORDS; DISK SIZE =",I4," SEGS; NO. PGM. SEGS =", 65375000=09412000=
|
|
I4/"ESTIMATED CORE STORAGE REQUIRED =",I6," WORDS.", 65380000=09413000=
|
|
/"ESTIMATED AUXILIARY MEMORY REQUIRED =",I6," WORDS.", 65385000=09414000=
|
|
/"NUMBER OF CARD-IMAGES PROCESSED =",F7.0); 65390000=09414100=
|
|
FORMAT SERR("THERE WERE ",V6," SEQUENCE ERRORS"); 65395000=09414101=
|
|
EBCDICBUFF[0]:= GT1; 65395100
|
|
MOVECHARACTERS 65400000=09415000=
|
|
(4, INFO[LASTSEQROW,*], LASTSEQUENCE-1, 0, EBCDICBUFF, 0, 4); 65405000=09415000=
|
|
GT1:= EBCDICBUFF[0]; 65405100
|
|
EBCDICBUFF[0]:= GT2; 65405200
|
|
MOVECHARACTERS 65410000=09416000=
|
|
(4, INFO[LASTSEQROW,*], LASTSEQUENCE-1, 4, EBCDICBUFF, 0, 4); 65415000=09416000=
|
|
GT2:= EBCDICBUFF[0]; 65415100
|
|
IF CHECKTOG THEN 65420000=09416001=
|
|
WRITE(LINE[SPACE 2], SERR, 65425000=09416006=
|
|
IF NUMSEQUENCEERRORS = 0 THEN 6"A" ELSE 6"I", IF 65430000=09416006=
|
|
NUMSEQUENCEERRORS = 0 THEN " NO" ELSE NUMSEQUENCEERRORS); 65435000=09416006=
|
|
WRITE(LINE[SPACE 2], PAN, ERRORCOUNT, (TIME(1)-TIME1)/60, 65445000=09419000=
|
|
BIC2EBC(GT1), BIC2EBC(GT2), PRTIMAX, AKKUM, 65450000=09419000=
|
|
IF DA <= CHUNK THEN DA ELSE((DA+CHUNK-1) DIV CHUNK)*CHUNK, 65455000=09419000=
|
|
SGAVL-1, GTI1, AUXMEMREQ, CARDCOUNT); 65460000=09419000=
|
|
END; 65465000
|
|
65469000
|
|
MYSELF.TASKVALUE:= ERRORCOUNT; 65469100
|
|
IF ERRORCOUNT = 0 THEN 65469200
|
|
REPLACE POINTER(EBCDICBUFF,8) BY "NO ERRORS", 0 FOR 1 65469300
|
|
ELSE 65469400
|
|
REPLACE POINTER(EBCDICBUFF,8) BY ERRORCOUNT FOR * DIGITS, 65469500
|
|
" SYNTAX ERROR", "S" FOR REAL(ERRORCOUNT^=1), 0 FOR 1; 65469600
|
|
DISPLAY(POINTER(EBCDICBUFF,8)); 65469700
|
|
END 65470000=09420000=
|
|
END PROGRAM; 65475000=09420000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%65480000=09420000=
|
|
65485000=10000000=
|
|
COMMENT THIS SECTION CONTAINS GENERATORS USED BY THE BLOCK ROUTINE; 65490000=10000000=
|
|
65495000=10001000=
|
|
COMMENT FORMATPHRASE COMPILES A PSEUDO CODE USED BY THE OBJECT TIME 65500000=10001000=
|
|
FORMATING ROUTINES TO PRODUCE DESIRED I/O. THERE IS ONE 65505000=10002000=
|
|
WORD OF PSEUDO CODE PRODUCED FOR EACH EDITING PHRASE. IN 65510000=10003000=
|
|
ADDITION ONE WORD IS PRODUCED FOR EACH LEFT PARENTHESIS, 65515000=10004000=
|
|
RIGHT PARENTHESIS, AND STROKE. EACH SIX CHARACTERS OF 65520000=10005000=
|
|
STRING ALSO PRODUCES ONE WORD. IN ADDITION THERE IS ONE 65525000=10006000=
|
|
EXTRA WORD FOR EACH LEFT PARENTHESIS WITH NO REPEAT PART. 65530000=10007000=
|
|
THIS IS AN IMPLIED STROKE TO CONTROL END OF LINE CONDI- 65535000=10008000=
|
|
TIONS. THE WORD IS BROKEN UP INTO NINE FIELDS: 65540000=10009000=
|
|
S = [46:1], 65545000=10010000=
|
|
REPEAT = [9:10], 65550000=10011000=
|
|
SKIP = [15:6], 65555000=10012000=
|
|
CODE = [45:4], 65560000=10013000=
|
|
W = [41:6], 65565000=10014000=
|
|
W1 = [19:4], W2 = [23:4], D1 = [27:4], D2 = [31:4], 65570000=10015000=
|
|
S IS A DISTINGUISHER BETWEEN EDITING PHRASES AND OTHER 65575000=10016000=
|
|
TYPE WORDS. CODE IS THE INTERNAL CODE TO DISTINGUISH 65580000=10017000=
|
|
BETWEEN THE VARIOUS EDITING PHRASES OR BETWEEN THE OTHER 65585000=10018000=
|
|
WORDS. GIVEN S = 1 WE HAVE: 65590000=10019000=
|
|
IF CODE = 0 THEN RIGHTPAREN, 65595000=10020000=
|
|
IF CODE = 2 THEN STRING, 65600000=10021000=
|
|
IF CODE = 4 THEN LEFTPAREN, 65605000=10022000=
|
|
IF CODE = 6 THEN STROKE, 65610000=10023000=
|
|
IF CODE = 8 THEN SCALE. 65615000=10023100=
|
|
GIVEN S = 0 WE HAVE 65620000=10024000=
|
|
IF CODE = 0 THEN D, 65625000=10025000=
|
|
IF CODE=1 THEN T, 65630000=10025010=
|
|
IF CODE = 2 THEN X, 65635000=10026000=
|
|
IF CODE = 4 THEN A, 65640000=10027000=
|
|
IF CODE = 6 THEN I, 65645000=10028000=
|
|
IF CODE = 8 THEN F, 65650000=10029000=
|
|
IF CODE =10 THEN E, 65655000=10030000=
|
|
IF CODE = 11 THEN U, 65660000=10030100=
|
|
IF CODE =12 THEN O, 65665000=10031000=
|
|
IF CODE = 13 THEN V, 65670000=10031100=
|
|
IF CODE =14 THEN L, 65675000=10032000=
|
|
IF CODE = 15 THEN R, 65680000=10032100=
|
|
W IS THE FIELD WIDTH. 65685000=10033000=
|
|
FOR STRINGS [35:36] IS W CHARACTORS OF ALPHA, RIGHT 65690000=10034000=
|
|
ADJUSTED. THE REST OF THE FIELDS ARE MEANINGLESS. 65695000=10035000=
|
|
REPEAT IS THE REPEAT FIELD - FOR LEFTPARENS WITH NO 65700000=10036000=
|
|
REPEAT FIELD, REPEAT = 0. FOR RIGHTPARENS, REPEAT TELLS 65705000=10037000=
|
|
HOW MANY WORDS BACK THE CORRESPONDING LEFTPAREN IS. 65710000=10038000=
|
|
IMPLIED STROKES ARE DISTINGUISHED FROM VISIBLE STROKES BY 65715000=10039000=
|
|
A NON-ZERO REPEAT FIELDS. 65720000=10040000=
|
|
THE DESCRIPTION OF W1,W2, D1, AND D2 APPLIES ONLY TO 65725000=10041000=
|
|
FORMATING TYPES. FOR THE PURPOSES OF DESCRIPTION LET 65730000=10042000=
|
|
D BE THE DECIMAL PART. W IS, OF COURSE, THE WIDTH, 65735000=10043000=
|
|
THEN FOR D, W1=W2=D1=D2=SKIP=0. 65740000=10044000=
|
|
FOR X, W = SKIP = WIDTH MOD 64 AND W1 = WIDTH DIV 64. 65745000=10045000=
|
|
W2 = D1 = D2 =0. 65750000=10046000=
|
|
FOR T, W=(WIDTH-1) MOD 64, W1=(WIDTH-1) DIV 64, AND 65755000=10046010=
|
|
W2=D1=D2=0. 65760000=10046020=
|
|
FOR A, W1 = W, SKIP = 0 IF W < 6, OTHERWISE 65765000=10047000=
|
|
W1 = 6, SKIP = W-6, W2=D1=D2=0. 65770000=10048000=
|
|
FOR I: SKIP = IF W > 16 THEN W-16 ELSE 0. 65775000=10049000=
|
|
IF W > 8 THEN W1 = 8, W2 = W-SKIP-8. 65780000=10050000=
|
|
IF W < 8 THEN W1 = W, W2 = 0, ALWAYS D1=D2=0. 65785000=10051000=
|
|
FOR F IF D < 8 THEN D1 = D, D2=0, 65790000=10052000=
|
|
IF D > 8 THEN D1 = 8, D2=D-8, 65795000=10053000=
|
|
IF D >16 THEN ERROR. 65800000=10054000=
|
|
IF W-D-1 > 16 THEN SKIP = W-D-17, OTHERWISE 65805000=10055000=
|
|
SKIP=0. 65810000=10056000=
|
|
IF W-D-1 > 8 THEN W1=8, W2=W-D-1-SKIP-8, 65815000=10057000=
|
|
IF W-D-1 < 8 THEN W1=W-D-1,W2=0. 65820000=10058000=
|
|
FOR E D1 AND D2 ARE CALCULATED AS IN F EXCEPT THAT WE 65825000=10059000=
|
|
D+1 FOR D, SKIP = W-D-6, W1=W2=0. 65830000=10060000=
|
|
FOR O, W1=W2=D1=D2=SKIP=0, 65835000=10061000=
|
|
FOR L, W2=D1=D2=0, IF W > 5 THEN W1=5 ELSE W1 = W, 65840000=10062000=
|
|
SKIP = W-W1, 65845000=10063000=
|
|
FOR U: SKIP = W1 = W2 = D1 = D2 = 0. 65850000=10063100=
|
|
FOR B: SEE U-PHRASE DESCRIPTION. 65855000=10063110=
|
|
FOR R: SEE ABOVE F-PHRASE DESCRIPTION. 65860000=10063200=
|
|
FOR V: SKIP = W1 = W2 = UNSET, D1,D2 AS IN ABOVE 65865000=10063300=
|
|
F-PHRASE DESCRIPTION. 65870000=10063400=
|
|
FORMATPHRASE USES RECURSION TO DO ANALYSIS OF SYNTAX. THE65875000=10064000=
|
|
WORDS ARE GENERATED AND PLACED DIRECTLY INTO THE CODE 65880000=10065000=
|
|
BUFFER. FORMATPHRASE IS A BOOLEAN PROCEDURE WHICH REPORTS65885000=10066000=
|
|
IF IT NOTICES AN ERROR; 65890000=10067000=
|
|
PROCEDURE WHIPOUT(W); 65895000=10068000=
|
|
VALUE 65900000=10068000=
|
|
W; 65905000=10068000=
|
|
REAL 65910000=10068000=
|
|
W; 65915000=10068000=
|
|
BEGIN 65920000=10071000=
|
|
EDOC[F.[9:3], F.[6:7]]:= W; 65921000=10071000=
|
|
IF DEBUGTOG THEN 65925000=10075000=
|
|
BEGIN 65925100=10075000=
|
|
DEBUGWORD(B2D(F), W, LIN); 65930000=10075000=
|
|
WRITELINE 65930100=10075000=
|
|
END; 65935000=10075000=
|
|
IF(F:= F+1) > 1024 THEN 65940000=10076000=
|
|
FLAG(307); 65945000=10076000=
|
|
END WHIPOUT; 65950000=10082000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%65955000=10082000=
|
|
BOOLEAN PROCEDURE FORMATPHRASE; 65960000=10083000=
|
|
BEGIN 65965000=10084000=
|
|
LABEL 65970000=10085000=
|
|
EL, 65975000=10085000=
|
|
EX, 65980000=10085000=
|
|
EXIT, 65985000=10085000=
|
|
L1, 65990000=10085000=
|
|
L2, 65995000=10085000=
|
|
L3; 66000000=10085000=
|
|
PROCEDURE 66005000=10086000=
|
|
EMITFORMAT(S, CODE, REPEAT, SKIP, W, W1, W2, D1, D2); 66010000=10086000=
|
|
VALUE 66015000=10087000=
|
|
S, 66020000=10087000=
|
|
CODE, 66025000=10087000=
|
|
REPEAT, 66030000=10087000=
|
|
SKIP, 66035000=10087000=
|
|
W, 66040000=10087000=
|
|
W1, 66045000=10087000=
|
|
W2, 66050000=10087000=
|
|
D1, 66055000=10087000=
|
|
D2; 66060000=10087000=
|
|
REAL 66065000=10088000=
|
|
CODE, 66070000=10088000=
|
|
REPEAT, 66075000=10088000=
|
|
SKIP, 66080000=10088000=
|
|
W, 66085000=10088000=
|
|
W1, 66090000=10088000=
|
|
W2, 66095000=10088000=
|
|
D1, 66100000=10088000=
|
|
D2; 66105000=10088000=
|
|
BOOLEAN 66110000=10089000=
|
|
S; 66115000=10089000=
|
|
BEGIN 66120000=10090000=
|
|
IF W > 63 THEN 66125000=10090000=
|
|
FLAG(163); 66130000=10090000=
|
|
W:= REPEAT & W[41:5:6] & SKIP[15:5:6] & W1[19:3:4] & W2[23:3:4] 66135000=10095000=
|
|
& D1[27:3:4] & D2[31:3:4] & CODE[45:3:4] & REAL(S)[46:0:1]; 66140000=10098000=
|
|
WHIPOUT(W) 66145000=10099000=
|
|
END EMITFORMAT; 66150000=10099000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%66155000=10099000=
|
|
PROCEDURE PACKALPHA(PLACE, LETTER, CTR); 66160000=10100000=
|
|
VALUE 66165000=10101000=
|
|
LETTER, CTR; 66170000=10101000=
|
|
REAL 66170100
|
|
PLACE, LETTER, CTR; 66170200
|
|
BEGIN 66180000=10102000=
|
|
PLACE:= LETTER & (6"B")[47:6] & (CTR)[41:6] & (PLACE)[35:30]; 66185000=10102000=
|
|
END PACKALPHA; 66240000=10105000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%66242000
|
|
INTEGER 66245000=10106000=
|
|
REPEAT, 66250000=10106000=
|
|
SKIP, 66255000=10106000=
|
|
W, 66260000=10106000=
|
|
W1, 66265000=10106000=
|
|
W2, 66270000=10106000=
|
|
D1, 66275000=10106000=
|
|
D2, 66280000=10106000=
|
|
CODE; 66285000=10106000=
|
|
BOOLEAN 66290000=10106000=
|
|
S; 66295000=10106000=
|
|
DEFINE 66300000=10107000=
|
|
RRIGHT = 0 #, 66305000=10108000=
|
|
RLEFT = 4 #, 66310000=10109000=
|
|
RSTROKE = 6 #; 66315000=10109000=
|
|
DEFINE 66320000=10109500=
|
|
RSCALE = 8 #, 66325000=10109500=
|
|
RU = 11 #, 66330000=10109500=
|
|
RV = 13 #, 66335000=10109500=
|
|
RR = 15 #; 66340000=10109500=
|
|
DEFINE 66345000=10110000=
|
|
RD = 0 #, 66350000=10110000=
|
|
RX = 2 #, 66355000=10110000=
|
|
RA = 4 #, 66360000=10110000=
|
|
RI = 6 #, 66365000=10110010=
|
|
RT = 1 #, 66370000=10111000=
|
|
RF = 8 #, 66375000=10111000=
|
|
RE = 10 #, 66380000=10111000=
|
|
RO = 12 #, 66385000=10111000=
|
|
RL = 14 #; 66390000=10111000=
|
|
IF ELCLASS < 0 THEN 66395000=10112000=
|
|
BEGIN 66400000=10112000=
|
|
REPEAT:= -ELCLASS; 66405000=10112000=
|
|
NEXTENT; 66410000=10112000=
|
|
IF ELCLASS = 6"," OR ELCLASS = 6")" THEN 66415000=10112100=
|
|
GO EX 66420000=10113000=
|
|
END 66425000=10113000=
|
|
ELSE 66430000=10113000=
|
|
BEGIN 66435000=10113000=
|
|
REPEAT:= REAL(ELCLASS ^= 6"<"); 66440000=10113000=
|
|
IF ELCLASS = 6"*" THEN 66445000=10113100=
|
|
BEGIN 66450000=10113100=
|
|
REPEAT.[35:1]:= 1; 66455000=10113100=
|
|
NEXTENT; 66460000=10113200=
|
|
END 66465000=10113300=
|
|
END; 66470000=10113300=
|
|
IF ELCLASS = 6"(" OR ELCLASS = 6"<" THEN 66475000=10115000=
|
|
BEGIN 66480000=10115000=
|
|
SKIP:= F; 66485000=10116000=
|
|
EMITFORMAT(TRUE, RLEFT, REPEAT, 1, 0, 0, 0, 0, 0); 66490000=10117000=
|
|
DO BEGIN 66495000=10118000=
|
|
NEXTENT; 66500000=10118000=
|
|
EL: IF FORMATPHRASE THEN 66505000=10119000=
|
|
GO TO EX 66510000=10120000=
|
|
END 66515000=10120000=
|
|
UNTIL ELCLASS ^= 6","; 66520000=10120000=
|
|
WHILE ELCLASS = 6"/" DO 66525000=10122000=
|
|
BEGIN 66530000=10122000=
|
|
EMITFORMAT(TRUE, RSTROKE, 0, 1, 0, 0, 0, 0, 0); 66535000=10122000=
|
|
NEXTENT 66540000=10123000=
|
|
END; 66545000=10123000=
|
|
IF ELCLASS ^= 6")" AND ELCLASS ^= 6">" THEN 66550000=10124100=
|
|
GO TO EL; 66555000=10124100=
|
|
IF LASTELCLASS = 6"," THEN 66560000=10124200=
|
|
GO TO EX; 66565000=10124200=
|
|
IF REPEAT = 0 THEN 66570000=10125000=
|
|
EMITFORMAT(TRUE, RSTROKE, 1, 0, 0, 0, 0, 0, 0); 66575000=10126000=
|
|
REPEAT:= F-SKIP; 66580000=10127000=
|
|
F:= SKIP; 66585000=10127000=
|
|
WHIPOUT(EDOC[F.[9:3], F.[6:7]] & REPEAT[19:9:10]); 66590000=10127100=
|
|
F:= SKIP+REPEAT; 66595000=10127200=
|
|
S:= TRUE; 66600000=10127200=
|
|
CODE:= RRIGHT 66605000=10127200=
|
|
END 66610000=10128000=
|
|
ELSE 66615000=10128000=
|
|
IF ELCLASS = 6"O" THEN 66620000=10129000=
|
|
BEGIN 66625000=10129000=
|
|
CODE:= RO; 66630000=10129000=
|
|
W:= 8 66635000=10129000=
|
|
END 66640000=10130000=
|
|
ELSE 66645000=10130000=
|
|
IF ELCLASS = 6"D" THEN 66650000=10131000=
|
|
BEGIN 66655000=10131000=
|
|
CODE:= RD; 66660000=10131000=
|
|
W:= 8 66665000=10131000=
|
|
END 66670000=10132000=
|
|
ELSE 66675000=10132000=
|
|
IF ELCLASS = 6"," THEN 66680000=10132000=
|
|
GO TO L2 66685000=10133000=
|
|
ELSE 66690000=10133000=
|
|
IF ELCLASS = 6"/" THEN 66695000=10133000=
|
|
GO TO EXIT 66700000=10134000=
|
|
ELSE 66705000=10134000=
|
|
IF ELCLASS = 6")" OR ELCLASS = 6">" THEN 66710000=10134000=
|
|
IF LASTELCLASS = 6"," THEN 66715000=10134100=
|
|
GO EX 66720000=10134100=
|
|
ELSE 66725000=10134100=
|
|
GO EXIT 66730000=10134500=
|
|
ELSE 66735000=10134500=
|
|
IF ELCLASS = 6"S" THEN 66740000=10134500=
|
|
BEGIN 66745000=10134510=
|
|
NEXTENT; 66750000=10134520=
|
|
W:= 66755000=10134530=
|
|
IF ELCLASS = 6"-" THEN 66760000=10134530=
|
|
1 66765000=10134530=
|
|
ELSE 66770000=10134530=
|
|
0; 66775000=10134530=
|
|
IF ELCLASS = 6"+" OR ELCLASS = 6"-" THEN 66780000=10134540=
|
|
NEXTENT; 66785000=10134540=
|
|
IF ELCLASS = 6"*" THEN 66790000=10134545=
|
|
REPEAT.[35:1]:= 1 66795000=10134545=
|
|
ELSE 66800000=10134545=
|
|
IF ELCLASS > 0 THEN 66805000=10134550=
|
|
BEGIN 66810000=10134550=
|
|
ERR(136); 66815000=10134550=
|
|
GO TO EXIT 66820000=10134570=
|
|
END 66825000=10134580=
|
|
ELSE 66830000=10134580=
|
|
REPEAT:= -ELCLASS; 66835000=10134580=
|
|
EMITFORMAT(TRUE, RSCALE, REPEAT, 0, W, 0, 0, 0, 0); 66840000=10134590=
|
|
GO TO L2 66845000=10134610=
|
|
END 66850000=10135000=
|
|
ELSE 66855000=10135000=
|
|
IF ELCLASS = 6""" THEN 66860000=10136000=
|
|
BEGIN 66865000=10136000=
|
|
IF REPEAT ^= 1 THEN 66870000=10136500=
|
|
FLAG(136); 66875000=10136500=
|
|
CODE:= 100; 66880000=10137000=
|
|
DO BEGIN 66885000=10138000=
|
|
SKIP:= 1; 66890000=10139000=
|
|
DO BEGIN 66895000=10140000=
|
|
RESULT:= 5; 66900000=10140000=
|
|
COUNT:= 0; 66905000=10140000=
|
|
SCANNER; 66910000=10140000=
|
|
IF ELCLASS:= ACCUM[1].[29:6] = CODE THEN 66915000=10142000=
|
|
BEGIN 66920000=10142000=
|
|
IF SKIP ^= 1 THEN 66925000=10143000=
|
|
WHIPOUT(W); 66930000=10143000=
|
|
GO TO L2 66935000=10144000=
|
|
END; 66940000=10144000=
|
|
CODE:= 6"""; 66945000=10145000=
|
|
PACKALPHA(W, ELCLASS, SKIP); 66950000=10146000=
|
|
END 66955000=10147000=
|
|
UNTIL SKIP:= SKIP+1 = 7; 66960000=10147000=
|
|
WHIPOUT(W) 66965000=10149000=
|
|
END 66970000=10149000=
|
|
UNTIL FALSE 66975000=10149000=
|
|
END 66980000=10150000=
|
|
ELSE 66985000=10150000=
|
|
BEGIN 66990000=10150000=
|
|
CODE:= ELCLASS; 66995000=10150000=
|
|
IF CODE = 6"U" OR CODE = 6"B" THEN 67000000=10150100=
|
|
BEGIN %%% ALL OF COMPILER CODE TO HANDLE U-PHRASE. 67005000=10150110=
|
|
NEXTENT; 67010000=10150120=
|
|
SKIP:= 0; 67015000=10150125=
|
|
IF ELCLASS = 6"*" OR ELCLASS <= 0 THEN 67020000=10150130=
|
|
BEGIN %%% PHRASE IS AT LEAST UW OR U*. 67025000=10150135=
|
|
IF ELCLASS = 6"*" THEN 67030000=10150140=
|
|
REPEAT.[34:1]:= 1 67035000=10150145=
|
|
ELSE 67040000=10150145=
|
|
W:= -ELCLASS; 67045000=10150145=
|
|
NEXTENT; 67050000=10150150=
|
|
IF ELCLASS = 6"." THEN 67055000=10150155=
|
|
BEGIN %%% PHRASE IS AT LEAST UW. OR U*.. 67060000=10150160=
|
|
NEXTENT; 67065000=10150165=
|
|
IF ELCLASS = 6"*" OR ELCLASS <= 0 THEN 67070000=10150170=
|
|
BEGIN %%% PHRASE IS UW<OR>*.D<OR>*. 67075000=10150175=
|
|
IF ELCLASS = 6"*" THEN 67080000=10150185=
|
|
REPEAT.[33:1]:= 1 67085000=10150190=
|
|
ELSE 67090000=10150190=
|
|
SKIP:= -ELCLASS; 67095000=10150190=
|
|
NEXTENT; 67100000=10150195=
|
|
END 67105000=10150205=
|
|
ELSE 67110000=10150205=
|
|
GO TO EX 67115000=10150210=
|
|
END 67120000=10150220=
|
|
END 67125000=10150220=
|
|
ELSE 67130000=10150220=
|
|
W:= -63; %%% PHRASE IS D. 67135000=10150220=
|
|
EMITFORMAT(FALSE, RD, REPEAT, SKIP, W, REAL(CODE = 6"B"), 67140000=10150230=
|
|
REAL(W < 0), 0, 0); 67145000=10150230=
|
|
GO TO EXIT; 67150000=10150260=
|
|
END OF U PHRASE HANDLER; 67155000=10150270=
|
|
IF GETINT THEN 67160000=10150280=
|
|
BEGIN 67165000=10150280=
|
|
W:= 11; 67170000=10150280=
|
|
REPEAT.[34:1]:= 1 67175000=10150280=
|
|
END 67180000=10150290=
|
|
ELSE 67185000=10150290=
|
|
ELCLASS:= -(W:= ELCLASS); 67190000=10150290=
|
|
IF CODE = 6"I" THEN 67195000=10152000=
|
|
BEGIN 67200000=10152000=
|
|
SKIP:= DIVIDE(W, W1, W2); 67205000=10153000=
|
|
CODE:= RI 67210000=10153000=
|
|
END 67215000=10154000=
|
|
ELSE 67220000=10154000=
|
|
IF CODE = 6"F" THEN 67225000=10155000=
|
|
BEGIN 67230000=10155000=
|
|
CODE:= RF; 67235000=10155000=
|
|
GO TO L1 67240000=10155000=
|
|
END 67245000=10155500=
|
|
ELSE 67250000=10155500=
|
|
IF CODE = 6"R" THEN 67255000=10155500=
|
|
BEGIN 67260000=10155500=
|
|
CODE:= RR; 67265000=10155500=
|
|
GO TO L1 67270000=10155500=
|
|
END 67275000=10156000=
|
|
ELSE 67280000=10156000=
|
|
IF CODE = 6"E" THEN 67285000=10157000=
|
|
BEGIN 67290000=10157000=
|
|
CODE:= RE; 67295000=10157000=
|
|
D1:= 1; 67300000=10157000=
|
|
L1: NEXTENT; 67305000=10158000=
|
|
IF ELCLASS ^= 6"." THEN 67310000=10159000=
|
|
GO EX; 67315000=10159000=
|
|
IF GETINT THEN 67320000=10159100=
|
|
BEGIN 67325000=10159100=
|
|
ELCLASS:= 3; 67330000=10159100=
|
|
REPEAT.[33:1]:= 1 67335000=10159100=
|
|
END; 67340000=10159100=
|
|
IF DIVIDE(ELCLASS+D1, D1, D2) > 0 THEN 67345000=10160000=
|
|
GO TO EX; 67350000=10160000=
|
|
IF CODE = RF OR CODE = RR THEN 67355000=10161000=
|
|
SKIP:= DIVIDE(W-ELCLASS-1, W1, W2) 67360000=10162000=
|
|
ELSE 67365000=10162000=
|
|
IF SKIP:= W-ELCLASS-6 < 0 THEN 67370000=10162000=
|
|
GO TO EX 67375000=10163000=
|
|
END 67380000=10163000=
|
|
ELSE 67385000=10163000=
|
|
IF CODE = 6"X" THEN 67390000=10164000=
|
|
BEGIN 67395000=10164000=
|
|
CODE:= RX; 67400000=10164000=
|
|
W1:= W.[9:4]; 67405000=10164000=
|
|
SKIP:= W:= W.[5:6] 67410000=10165000=
|
|
END 67415000=10165500=
|
|
ELSE 67420000=10165500=
|
|
IF CODE = 6"T" THEN 67425000=10165500=
|
|
IF W:= ABS(W)-1 < 0 THEN 67430000=10165500=
|
|
FLAG(136) 67435000=10165505=
|
|
ELSE 67440000=10165505=
|
|
BEGIN 67445000=10165505=
|
|
CODE:= RT; 67450000=10165505=
|
|
W1:= W.[9:4]; 67455000=10165505=
|
|
W:= W.[5:6] 67460000=10165505=
|
|
END 67465000=10166000=
|
|
ELSE 67470000=10166000=
|
|
IF CODE = 6"A" THEN 67475000=10167000=
|
|
BEGIN 67480000=10167000=
|
|
CODE:= RA; 67485000=10167000=
|
|
W1:= 6; 67490000=10167000=
|
|
GO TO L3 67495000=10167000=
|
|
END 67500000=10167100=
|
|
ELSE 67505000=10167100=
|
|
IF CODE = 6"V" THEN 67510000=10167100=
|
|
BEGIN 67515000=10167200=
|
|
CODE:= RV; 67520000=10167200=
|
|
COUNT:= ACCUM[1]:= 0; 67525000=10167300=
|
|
IF EXAMIN(SBUFF, NCR) = 6" " THEN 67530000=10167400=
|
|
BEGIN 67535000=10167500=
|
|
RESULT:= 7; 67540000=10167500=
|
|
SCANNER 67545000=10167500=
|
|
END; 67550000=10167500=
|
|
IF EXAMIN(SBUFF, NCR) = 6"." THEN 67555000=10167600=
|
|
BEGIN 67560000=10167700=
|
|
NEXTENT; 67565000=10167700=
|
|
IF GETINT THEN 67570000=10167800=
|
|
REPEAT.[33:1]:= 1 67575000=10167800=
|
|
ELSE 67580000=10167800=
|
|
GT1:= DIVIDE(ELCLASS, D1, D2); 67585000=10167900=
|
|
ELCLASS:= -ELCLASS; 67590000=10167910=
|
|
END; 67595000=10168000=
|
|
END 67600000=10168000=
|
|
ELSE 67605000=10168000=
|
|
IF CODE = 6"L" THEN 67610000=10169000=
|
|
BEGIN 67615000=10169000=
|
|
CODE:= RL; 67620000=10169000=
|
|
W1:= 5; 67625000=10169000=
|
|
L3: IF W < W1 THEN 67630000=10170000=
|
|
W1:= W; 67635000=10170000=
|
|
SKIP:= W-W1 67640000=10170000=
|
|
END 67645000=10170000=
|
|
ELSE 67650000=10170000=
|
|
GO EX 67655000=10170000=
|
|
END; 67660000=10170000=
|
|
EMITFORMAT(S, CODE, REPEAT, SKIP, W, W1, W2, D1, D2); 67665000=10171000=
|
|
L2: NEXTENT; 67670000=10172000=
|
|
GO TO EXIT; 67675000=10172000=
|
|
EX: FORMATPHRASE:= TRUE; 67680000=10173000=
|
|
ERR(136); 67685000=10173000=
|
|
EXIT: 67690000=10174000=
|
|
END FORMATPHRASE; 67695000=10174000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%67700000=10174000=
|
|
67705000=10175000=
|
|
COMMENT GETINT DOES A CALL ON NEXTENT AND CHECKS TO SEE IF AN INTEGER 67710000=10175000=
|
|
WAS THE RESULT: IF NOT ERROR - OTHERWISE MAKE SIGN PLUS; 67715000=10176000=
|
|
BOOLEAN PROCEDURE GETINT; 67720000=10177000=
|
|
BEGIN 67725000=10178000=
|
|
NEXTENT; 67730000=10178000=
|
|
IF ELCLASS:= -ELCLASS < 0 THEN 67735000=10178000=
|
|
IF ELCLASS = -(6"*") THEN 67740000=10178100=
|
|
GETINT:= TRUE 67745000=10178100=
|
|
ELSE 67750000=10178100=
|
|
BEGIN 67755000=10179000=
|
|
FLAG(137); 67760000=10179000=
|
|
ELCLASS:= 0 67765000=10179000=
|
|
END 67770000=10180000=
|
|
END GETINT; 67775000=10180000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%67780000=10180000=
|
|
67785000=10181000=
|
|
COMMENT DIVIDE PARTIONS THE PARAMETER NUMBER INTO THREE PARTS. THE 67790000=10181000=
|
|
RESULT IS PASSED BACK THROUGH P1,P2, AND THE FUNCTION 67795000=10182000=
|
|
IDENTIFIER. SEE CODE FOR DETAILS; 67800000=10183000=
|
|
INTEGER PROCEDURE DIVIDE(NUMBER, P1, P2); 67805000=10184000=
|
|
VALUE 67810000=10185000=
|
|
NUMBER; 67815000=10185000=
|
|
INTEGER 67820000=10185000=
|
|
P1, 67825000=10185000=
|
|
P2, 67830000=10185000=
|
|
NUMBER; 67835000=10185000=
|
|
BEGIN 67840000=10186000=
|
|
IF NUMBER < 0 THEN 67845000=10187000=
|
|
BEGIN 67850000=10187000=
|
|
FLAG(138); 67855000=10187000=
|
|
ERRORTOG:= TRUE; 67860000=10187000=
|
|
NUMBER:= 0 67865000=10188000=
|
|
END; 67870000=10188000=
|
|
P1:= 67875000=10189000=
|
|
IF NUMBER < 8 THEN 67880000=10189000=
|
|
NUMBER 67885000=10189000=
|
|
ELSE 67890000=10189000=
|
|
8; 67895000=10189000=
|
|
NUMBER:= NUMBER-P1; 67900000=10190000=
|
|
P2:= 67905000=10191000=
|
|
IF NUMBER < 8 THEN 67910000=10191000=
|
|
NUMBER 67915000=10191000=
|
|
ELSE 67920000=10191000=
|
|
8; 67925000=10191000=
|
|
DIVIDE:= NUMBER-P2 67930000=10192000=
|
|
END DIVIDE; 67935000=10192000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%67940000=10192000=
|
|
67945000=10193000=
|
|
COMMENT DEFINEGEN PACKS THE ALPHA FOR A DEFINE INTO INFO. DEFINEGEN 67950000=10193000=
|
|
PRINCIPALLY ELIMINATES BLANKS AND COMMENTS. PUTOGETHER 67955000=10194000=
|
|
ACTUALLY DOES THE MECHANICAL WORK OF PROCESSING THE 67960000=10195000=
|
|
CHARACTORS FROM ACCUM TO INFO. THE FINAL TRANSFER IS DONE67965000=10196000=
|
|
IN PACKINFO. THE OTHER FUNCTION SERVED BY DEFINEGEN IS 67970000=10197000=
|
|
THAT OF COUNTING DEFINES AND CROSSHATCHES IN ORDER TO 67975000=10198000=
|
|
ALLOW NESTED DEFINES. 67980000=10199000=
|
|
A WORD ON THE OVERALL PLAN OF ATTACK ON HANDLEING 67985000=10200000=
|
|
DEFINES: 67990000=10201000=
|
|
THERE ARE FOUR PLACES THAT THERE IS CODE WRITTEN 67995000=10202000=
|
|
EXPLICITLY FOR THE DEFINE. 68000000=10203000=
|
|
FIRST IS DEFINEGEN WHICH LOADS THE ALPHA INTO INFO. 68005000=10204000=
|
|
SECOND IS IN THE TABLE ROUTINE AFTER A DEFINED ID IS 68010000=10205000=
|
|
NOTICED. HERE A SETUP IS PERFORMED SO THAT THE SCANNER 68015000=10206000=
|
|
WILL SCAN INFO. SINCE INFO (UNLIKE I/O BUFFERS) IS NOT 68020000=10207000=
|
|
A SAVE ARRAY, WE CAN NOT DIRECTLY SCAN INFO. INSTEAD WE 68025000=10208000=
|
|
FOOL READACARD SO THAT THE ALPHA IS FETCHED FROM INFO AND 68030000=10209000=
|
|
PLACED INTO A SMALL SAVE ARRAY (DEFINEARRAY) INSTEAD OF 68035000=10210000=
|
|
BEING FETCHED FROM AN I/O DEVICE. NATURALLY WE MUST HAVE 68040000=10211000=
|
|
NESTING WHICH IS OBTAINED BY USING DEFINEARRAY AS A SMALL 68045000=10212000=
|
|
STACK. THE QUANTITIES SAVED ARE LCR,NCR, AND LASTUSED. 68050000=10213000=
|
|
LASTUSED DOUBLES AS A DEVICE FOR DIRECTING THE FLOW OF 68055000=10214000=
|
|
INFORMATION FROM I/O GEAR AND FROM INFO DURING ANALYSIS OF68060000=10215000=
|
|
DEFINES. THIS STACKING IS DONE HERE BY THE TABLE ROUTINE.68065000=10216000=
|
|
THIRD IS READACARD WHICH HAS NOW BEEN FAIRLY WELL 68070000=10217000=
|
|
DESCRIBED. THE ONLY ADDITIONAL COMMENT NECESSARY IS THAT 68075000=10218000=
|
|
LASTUSED SERVES AS AN INDEX TO FETCH NEXT WORD OF ALPHA 68080000=10219000=
|
|
FROM INFO. READACARD FETCHES ONLY ONE WORD AT A TIME. 68085000=10220000=
|
|
FOURTH IS ALSO IN THE TABLE ROUTINE. IT IS AT THE 68090000=10221000=
|
|
PLACE THAT A CROSSHATCH IS NOTICED. IT CAUSES AN UNSETUP 68095000=10222000=
|
|
SO THAT THE SCANNER WILL STOP SCANNING THAT PART OF INFO 68100000=10223000=
|
|
AND RESUME ITS PREVIOUS TASKS. A DISTINCTION IS MADE 68105000=10224000=
|
|
BETWEEN CROSSHATCHES SCANNED AFTER A DEFINE DECLARATION 68110000=10225000=
|
|
AND THOSE SCANNED DURING THE RECALL PROCESS. THE LATER 68115000=10226000=
|
|
ONLY CAUSES AN UNSETUP; 68120000=10227000=
|
|
PROCEDURE DEFINEGEN(MACRO, J); 68125000=10228000=
|
|
VALUE 68130000=10228000=
|
|
MACRO, 68135000=10228000=
|
|
J; 68140000=10228000=
|
|
BOOLEAN 68145000=10228000=
|
|
MACRO; 68150000=10228000=
|
|
REAL 68155000=10228000=
|
|
J; 68160000=10228000=
|
|
BEGIN 68165000=10229000=
|
|
OWN INTEGER 68170000=10230000=
|
|
CHARCOUNT, 68175000=10230000=
|
|
REMCOUNT; 68180000=10230000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%68182000
|
|
COMMENT CHARCOUNT CONTAINS NUMBER OFCHARACTORS OF THE DEFINE THAT WE68185000=10231000=
|
|
HAVE PUT INTO INFO. REMCOUNT CONTAINS NUMBER OF CHARACT- 68190000=10232000=
|
|
ORS REMAINING IN THIS ROW OF INFO; 68195000=10233000=
|
|
PROCEDURE PUTOGETHER(CHAR, CX); 68200000=10234000=
|
|
VALUE 68200100
|
|
CX; 68200200
|
|
ARRAY 68205000=10234000=
|
|
CHAR[0]; 68210000=10234000=
|
|
REAL CX; 68210100
|
|
BEGIN 68215000=10235000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%68216000
|
|
PROCEDURE PACKINFO(INFO, IX, ISKIP, COUNT, ASKIP, ACCUM, AX); 68220000=10236000=
|
|
VALUE 68225000=10237000=
|
|
IX, ISKIP, COUNT, ASKIP, AX; 68230000=10237000=
|
|
ARRAY 68230100
|
|
INFO, ACCUM[0]; 68230200
|
|
REAL 68230300
|
|
IX, ISKIP, COUNT, ASKIP, AX; 68230400
|
|
BEGIN 68245000=10238000=
|
|
STREAMLOCALS; 68245100
|
|
STREAMSETDI(INFO, IX); 68250000=10238000=
|
|
STREAMSKIPDI(+ISKIP); 68255000=10238000=
|
|
STREAMSETSI(ACCUM, AX); 68260000=10239000=
|
|
STREAMSKIPSI(+ASKIP); 68265000=10239000=
|
|
STREAMSKIPSI(+3); 68270000=10239000=
|
|
STREAMTRANSFERCHR(COUNT); 68275000=10240000=
|
|
END PACKINFO; 68280000=10240000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%68282000
|
|
INTEGER 68285000=10241000=
|
|
COUNT, 68290000=10241000=
|
|
SKIPCOUNT; 68295000=10241000=
|
|
IF(COUNT:= CHAR[CX].[35:6])+CHARCOUNT > 2047 THEN 68300000=10243000=
|
|
BEGIN 68305000=10243000=
|
|
FLAG(142); 68310000=10243000=
|
|
TB1:= TRUE 68315000=10243000=
|
|
END 68320000=10244000=
|
|
ELSE 68325000=10244000=
|
|
BEGIN 68330000=10244000=
|
|
IF COUNT > REMCOUNT THEN 68335000=10246000=
|
|
BEGIN 68340000=10246000=
|
|
SKIPCOUNT:= COUNT-(COUNT:= REMCOUNT); 68345000=10247000=
|
|
REMCOUNT:= 2048 68350000=10248000=
|
|
END 68355000=10249000=
|
|
ELSE 68360000=10249000=
|
|
REMCOUNT:= REMCOUNT-COUNT; 68365000=10249000=
|
|
GT1:= CHARCOUNT DIV 8 + NEXTTEXT; 68370000=10250000=
|
|
PACKINFO(TEXT[GT1.LINKR,*], GT1.LINKC, CHARCOUNT.[2:3], 68375000=10252000=
|
|
COUNT, 0, CHAR, CX); 68380000=10252000=
|
|
IF SKIPCOUNT ^= 0 THEN 68385000=10253000=
|
|
PACKINFO(TEXT[NEXTTEXT.LINKR+1,*], 0, 68390000=10255000=
|
|
0, SKIPCOUNT, COUNT, CHAR, CX); 68395000=10255000=
|
|
CHARCOUNT:= CHARCOUNT+SKIPCOUNT+COUNT 68400000=10256000=
|
|
END 68405000=10257000=
|
|
END PUTOGETHER; 68410000=10257000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%68415000=10257000=
|
|
INTEGER 68420000=10258000=
|
|
LASTRESULT; 68425000=10258000=
|
|
REAL 68430000=10258100=
|
|
K, 68435000=10258100=
|
|
N, 68440000=10258100=
|
|
ELCLASS; 68445000=10258100=
|
|
DEFINE 68450000=10258200=
|
|
I = NXTELBT #; 68455000=10258200=
|
|
LABEL 68460000=10258300=
|
|
FINAL, 68465000=10258300=
|
|
PACKIN; 68470000=10258300=
|
|
LABEL 68475000=10259000=
|
|
BACK, 68480000=10259000=
|
|
SKSC, 68485000=10259000=
|
|
EXIT; 68490000=10259000=
|
|
REAL 68495000=10259200=
|
|
DINFO; 68500000=10259200=
|
|
BOOLEAN 68505000=10259400=
|
|
TSSTREAMTOG; % 1289 68510000=10259400=
|
|
DINFO:= J.[29:15]; 68515000=10259600=
|
|
J:= J.[14:15]; 68520000=10259700=
|
|
TB1:= FALSE; 68525000=10260000=
|
|
TSSTREAMTOG:= STREAMTOG; % 1289 68530000=10260050=
|
|
STREAMTOG:= TRUE; 68535000=10260100=
|
|
CHARCOUNT:= 0; 68540000=10261000=
|
|
DEFINECTR:= 1; 68545000=10262000=
|
|
LASTRESULT:= 2; 68550000=10262000=
|
|
REMCOUNT:= (256-NEXTTEXT.LINKC)*8; 68555000=10263000=
|
|
K:= 0; 68560000=10263200=
|
|
BACK: 68565000=10263300=
|
|
STOPDEFINE:= TRUE; 68570000=10263300=
|
|
ELCLASS:= TABLE(NXTELBT); 68575000=10263400=
|
|
SKSC: 68580000=10263500=
|
|
NXTELBT:= NXTELBT-1; 68585000=10263500=
|
|
IF MACRO THEN 68590000=10263600=
|
|
BEGIN 68595000=10263700=
|
|
IF ELCLASS = COMMA THEN 68600000=10263700=
|
|
IF K = 0 THEN 68605000=10263800=
|
|
FINAL: 68610000=10263900=
|
|
BEGIN 68615000=10263900=
|
|
EBCDICBUFF[0]:= 6"1#0000"; 68615100
|
|
PUTOGETHER(EBCDICBUFF, 0); 68620000=10263900=
|
|
GO TO EXIT 68625000=10263900=
|
|
END 68630000=10264000=
|
|
ELSE 68635000=10264000=
|
|
GO PACKIN; 68640000=10264000=
|
|
IF ELCLASS = LEFTPAREN OR ELCLASS = LFTBRKET THEN 68645000=10264100=
|
|
BEGIN 68650000=10264200=
|
|
K:= K+1; 68655000=10264200=
|
|
GO TO PACKIN 68660000=10264200=
|
|
END; 68665000=10264200=
|
|
IF ELCLASS = RTPAREN OR ELCLASS = RTBRKET THEN 68670000=10264300=
|
|
IF K:= K-1 < 0 THEN 68675000=10264400=
|
|
GO FINAL 68680000=10264400=
|
|
ELSE 68685000=10264400=
|
|
GO PACKIN; 68690000=10264400=
|
|
IF ELCLASS = SEMICOLON THEN 68695000=10264410=
|
|
BEGIN 68700000=10264420=
|
|
FLAG(142); 68705000=10264420=
|
|
GO TO FINAL 68710000=10264420=
|
|
END 68715000=10264420=
|
|
ELSE 68720000=10264420=
|
|
GO PACKIN 68725000=10264500=
|
|
END; 68730000=10264500=
|
|
IF RESULT = 1 THEN 68735000=10264600=
|
|
IF J ^= 0 THEN 68740000=10264600=
|
|
FOR N:= 1 STEP 1 UNTIL J DO 68745000=10264650=
|
|
BEGIN 68750000=10264700=
|
|
IF EQUAL(ACCUM[1].[35:6]+3, ACCUM, 1, DEFINFO, (N-1)*10) THEN 68755000=10264760=
|
|
BEGIN 68760000=10264800=
|
|
DEFINEPARAM(DINFO+1, N); 68765000=10264810=
|
|
GO PACKIN; 68770000=10264820=
|
|
END; 68775000=10264830=
|
|
END; 68780000=10264900=
|
|
PACKIN: 68785000=10265000=
|
|
IF RESULT = 4 THEN 68790000=10266000=
|
|
BEGIN 68795000=10266000=
|
|
COMMENT INSERT " MARKS - 2130706432 IS DECIMAL FOR 1"0000; 68800000=10267000=
|
|
EBCDICBUFF[0]:= 2130706432; 68800100
|
|
PUTOGETHER(EBCDICBUFF, 0); 68805000=10268000=
|
|
PUTOGETHER(ACCUM, 1); 68810000=10269000=
|
|
EBCDICBUFF[0]:= 2130706432; 68810100
|
|
PUTOGETHER(EBCDICBUFF, 0) 68815000=10270000=
|
|
END 68820000=10271000=
|
|
ELSE 68825000=10271000=
|
|
BEGIN 68830000=10271000=
|
|
IF BOOLEAN(RESULT) AND BOOLEAN(LASTRESULT) THEN 68835000=10273000=
|
|
BEGIN 68835100
|
|
EBCDICBUFF[0]:= 6"1 0000"; 68835200
|
|
PUTOGETHER(EBCDICBUFF, 0); COMMENT INSERT BLANK; 68840000=10273000=
|
|
END; 68845000
|
|
PUTOGETHER(ACCUM, 1) 68850000=10274000=
|
|
END; 68855000=10274000=
|
|
IF TB1 THEN 68860000=10275000=
|
|
GO TO EXIT; 68865000=10275000=
|
|
LASTRESULT:= RESULT; 68870000=10276000=
|
|
IF MACRO THEN 68875000=10276500=
|
|
GO BACK; 68880000=10276500=
|
|
IF ELCLASS = DECLARATORS AND ELBAT[I].ADDRESS = DEFINEV THEN 68885000=10278000=
|
|
BEGIN 68890000=10278000=
|
|
DEFINECTR:= DEFINECTR+1; 68895000=10278000=
|
|
GO BACK 68900000=10278000=
|
|
END; 68905000=10278000=
|
|
IF ELCLASS ^= CROSSHATCH THEN 68910000=10279000=
|
|
GO BACK; 68915000=10279000=
|
|
IF DEFINECTR ^= 1 THEN 68920000=10281000=
|
|
BEGIN 68925000=10281000=
|
|
STOPDEFINE:= TRUE; 68930000=10281000=
|
|
IF ELCLASS:= TABLE(I) ^= COMMA THEN 68935000=10282000=
|
|
DEFINECTR:= DEFINECTR-1; 68940000=10283000=
|
|
GO SKSC 68945000=10283000=
|
|
END; 68950000=10283000=
|
|
EXIT: 68955000=10284000=
|
|
DEFINECTR:= 0; 68960000=10284000=
|
|
STREAMTOG:= TSSTREAMTOG; % 1289 68965000=10284000=
|
|
NEXTTEXT:= (CHARCOUNT+7) DIV 8+NEXTTEXT; 68970000=10285000=
|
|
END DEFINEGEN; 68975000=10286000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%68980000=10286000=
|
|
68985000=10287000=
|
|
COMMENT LISTELEMENT IS RESPONSIBLE FOR THE GENERATION OF CODE FOR LIST68990000=10287000=
|
|
ELEMENTS; 68995000=10288000=
|
|
PROCEDURE LISTELEMENT; 69000000=10289000=
|
|
BEGIN 69005000=10290000=
|
|
REAL 69010000=10291000=
|
|
T1, 69015000=10291000=
|
|
T2, 69020000=10291000=
|
|
T3; 69025000=10291000=
|
|
LABEL 69030000=10292000=
|
|
BOOFINISH, 69035000=10292000=
|
|
STORE, 69040000=10292000=
|
|
LRTS; 69045000=10292000=
|
|
DIALA:= DIALB:= 0; 69050000=10293000=
|
|
IF ELCLASS = FORV THEN 69055000=10294000=
|
|
FORSTMT COMMENT FORCLAUSE; 69060000=10294000=
|
|
ELSE 69065000=10295000=
|
|
IF ELCLASS = LFTBRKET THEN 69070000=10296000=
|
|
BEGIN 69075000=10296000=
|
|
COMMENT GORUP OF LIST ELEMENTS; 69080000=10296000=
|
|
DO BEGIN 69085000=10297000=
|
|
STEPIT; 69090000=10297000=
|
|
LISTELEMENT 69095000=10297000=
|
|
END 69100000=10297000=
|
|
UNTIL ELCLASS ^= COMMA; 69105000=10297000=
|
|
IF ELCLASS = RTBRKET THEN 69110000=10298000=
|
|
STEPIT 69115000=10298000=
|
|
ELSE 69120000=10298000=
|
|
ERR(158) 69125000=10298000=
|
|
END 69130000=10299000=
|
|
ELSE 69135000=10299000=
|
|
BEGIN 69140000=10299000=
|
|
COMMENT THE MEAT OF THE MATTER: 69145000=10299000=
|
|
VARIABLES AND EXPRESSIONS; 69150000=10300000=
|
|
L:= (T1:= L)+1; 69155000=10301000=
|
|
COMMENT SAVE L FOR LATER FIXUP; 69160000=10301000=
|
|
EMITPAIR(LSTRTN, STD); 69165000=10302000=
|
|
COMMENT PREPARE LSTRTN FOR 69170000=10302000=
|
|
NEXT TIME AROUND; 69175000=10303000=
|
|
IF (GT1:= TABLE(I+1) = COMMA OR GT1 = RTPAREN OR GT1 = RTBRKET) 69180000=10307000=
|
|
AND ELCLASS >= BOOID AND ELCLASS <= INTID 69185000=10308000=
|
|
THEN 69190000=10308000=
|
|
BEGIN 69195000=10308000=
|
|
COMMENT SIMPLE VARIABLES; 69200000=10308000=
|
|
CHECKER(ELBAT[I]); 69205000=10308100=
|
|
EMITN(ELBAT[I].ADDRESS); 69210000=10309000=
|
|
STEPIT 69215000=10309000=
|
|
END 69220000=10310000=
|
|
ELSE 69225000=10310000=
|
|
BEGIN 69230000=10310000=
|
|
IF ELCLASS >= BOOARRAYID AND ELCLASS <= INTARRAYID THEN 69235000=10312000=
|
|
BEGIN 69240000=10312000=
|
|
COMMENT IS EITHER A SUBCRIPTED VARIABLE 69245000=10312000=
|
|
OR THE BEGINNING OF AN EXPRESSION. THIS69250000=10313000=
|
|
SITUATION IS VERY SIMILAR TO THAT IN 69255000=10314000=
|
|
ACTUALPARAPART (SEE COMMENTS THERE FOR 69260000=10315000=
|
|
FURTHER DETAILS); 69265000=10316000=
|
|
T2:= FL; 69270000=10317000=
|
|
T3:= ELCLASS; 69275000=10317000=
|
|
VARIABLE(T2); 69280000=10317000=
|
|
IF TABLE(I-2) = FACTOP AND TABLE(I-1) = RTBRKET THEN 69285000=10318000=
|
|
ERR(157); 69290000=10318000=
|
|
IF ELCLASS = COMMA OR ELCLASS = RTPAREN OR ELCLASS = RTBRKET 69295000=10321000=
|
|
THEN 69300000=10321000=
|
|
IF T2 = 0 THEN 69305000=10322000=
|
|
GO TO STORE 69310000=10322000=
|
|
ELSE 69315000=10322000=
|
|
GO TO LRTS; 69320000=10322000=
|
|
IF T3 = BOOARRAYID THEN 69325000=10323000=
|
|
GO TO BOOFINISH; 69330000=10323000=
|
|
SIMPARITH; 69335000=10324000=
|
|
IF ELCLASS = RELOP THEN 69340000=10325000=
|
|
BEGIN 69345000=10325000=
|
|
RELATION; 69350000=10325000=
|
|
BOOFINISH: 69355000=10326000=
|
|
SIMPBOO 69360000=10326000=
|
|
END 69365000=10327000=
|
|
END 69370000=10327000=
|
|
ELSE 69375000=10327000=
|
|
IF EXPRSS = DTYPE THEN 69380000=10327000=
|
|
ERR(156); 69385000=10327000=
|
|
STORE: 69390000=10328000=
|
|
EMITPAIR(JUNK, STD); 69395000=10328000=
|
|
EMITN(JUNK) 69400000=10328000=
|
|
END; 69405000=10328000=
|
|
LRTS: 69410000=10329000=
|
|
EMITO(RTS); 69415000=10329000=
|
|
CONSTANTCLEAN; 69420000=10329000=
|
|
T2:= L; 69425000=10330000=
|
|
L:= T1; 69430000=10330000=
|
|
EMITNUM(T2-LSTR); 69435000=10330000=
|
|
L:= T2 69440000=10330000=
|
|
END 69445000=10330000=
|
|
END LSTELMT; 69450000=10330000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%69455000=10330000=
|
|
69460000=10331000=
|
|
COMMENT LISTGEN COMPILES ALL THE CODE FOR A LIST. LISTGEN CALLS 69465000=10331000=
|
|
LISTELEMENT WHICH IS RESPONSIBLE FOR EACH INDIVIDUAL 69470000=10332000=
|
|
LIST ELEMENT. LIST ELEMENT ALSO TAKES CARE TO GENERATE 69475000=10333000=
|
|
CODE WHICH UPDATES LSTRTN AFTER EACH CALL ON THE LIST. 69480000=10334000=
|
|
LISTGEN GENERATES THE CHANGING OF LSTRTN TO -1, THE END 69485000=10335000=
|
|
FLAG FOR A LIST, THE CODE TO JUMP AROUND THE LIST, 69490000=10336000=
|
|
THE INITIAL JUMP OF THE LIST, THE OBTAINING OF A PRT CELL 69495000=10337000=
|
|
FOR THE LIST, THE OBTAINING OF AN ACCIDENTAL PROGRAM 69500000=10338000=
|
|
DESCRIPTOR, THE STUFFING OF F INTO THIS DESCRIPTOR, 69505000=10339000=
|
|
LISTGEN EXPECTS I TO POINT AT FIRST LIST ELEMENT AND 69510000=10340000=
|
|
LEAVES I POINTING AT FIRST ITEM BEYOND RIGHTPAREN. THE 69515000=10341000=
|
|
VALUE RETURNED BY LISTGEN IS THE LOCATION OF THE 69520000=10342000=
|
|
ACCIDENTAL ENTRY DESCRIPTOR IN THE PRT; 69525000=10343000=
|
|
REAL PROCEDURE LISTGEN; 69530000=10344000=
|
|
BEGIN 69535000=10345000=
|
|
INTEGER 69540000=10346000=
|
|
JUMPLACE, 69545000=10346000=
|
|
LISTPLACE; 69550000=10346000=
|
|
JUMPLACE:= BAE; 69555000=10347000=
|
|
LISTGEN:= LISTPLACE:= PROGDESCBLDR(0, L, 0); 69560000=10348000=
|
|
COMMENT BUILDS ACCIDENTAL ENTRY FOR LIST; 69565000=10349000=
|
|
EMITV(LSTRTN); 69570000=10350000=
|
|
EMITO(BFW); 69575000=10350000=
|
|
LSTR:= L; 69580000=10350000=
|
|
COMMENT INITIAL JUMP OF A LIST; 69585000=10351000=
|
|
LISTMODE:= TRUE; 69590000=10352000=
|
|
COMMENT CAUSES FORSTMT TO RECOGNIZE THAT WE ARE COMPILING LISTS; 69595000=10353000=
|
|
I:= I-1; 69600000=10354000=
|
|
DO BEGIN 69605000=10355000=
|
|
STEPIT; 69610000=10356000=
|
|
LISTELEMENT 69615000=10358000=
|
|
END 69620000=10358000=
|
|
UNTIL ELCLASS ^= COMMA; 69625000=10358000=
|
|
EMITL(1); 69630000=10359000=
|
|
EMITO(CHS); 69635000=10359000=
|
|
EMITPAIR(LSTRTN, SND); 69640000=10360000=
|
|
EMITO(RTS); 69645000=10361000=
|
|
COMMENT SET END FLAG OF -1; 69650000=10362000=
|
|
CONSTANTCLEAN; 69655000=10363000=
|
|
DIALA:= DIALB:= 0; 69660000=10364000=
|
|
LISTMODE:= FALSE; 69665000=10365000=
|
|
ADJUST; 69670000=10365100=
|
|
EMITB(BFW, JUMPLACE, L); 69675000=10366000=
|
|
STUFFF(LISTPLACE); 69680000=10367000=
|
|
IF ELCLASS ^= RTPAREN THEN 69685000=10368000=
|
|
ERR(104) 69690000=10368000=
|
|
ELSE 69695000=10368000=
|
|
STEPIT 69700000=10369000=
|
|
END LISTGEN; 69705000=10369000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%69710000=10369000=
|
|
BOOLEAN PROCEDURE MERRIMAC; 69715000=10370000=
|
|
BEGIN 69720000=10371000=
|
|
COMMENT THIS TIME THE MERRIMAC WILL HANDLE THE MONITOR. 69725000=10371000=
|
|
03 JULY 1963 69730000=10372000=
|
|
THERE ARE SIX TYPES OF MONITOR LIST ELEMENTS. THEY ARE 69735000=10373000=
|
|
LABELS, SWITCHES, SIMPLE VARIABLES, SUBSCRIPTED VARIABLES,69740000=10374000=
|
|
ARRAYS, AND FUNCTION DESIGNATORS. 69745000=10375000=
|
|
WITH ONE EXCEPTION, THE MERRIMAX ROUTINES ONLY FUNCTION 69750000=10376000=
|
|
IS TO SAVE INFORMATION SO THAT OTHER ROUTINES, SUCH AS THE69755000=10377000=
|
|
VARIABLE ROUTINE, CAN GENERATE THE ACTUAL CODE THAT CALLS 69760000=10378000=
|
|
THE PRINTI ROUTINE AT OBJECT TIME. THE ONE EXCEPTION IS 69765000=10379000=
|
|
THE CASE OF A SUBSCRIPTED VARIABLE WITH AN EXPRESSION FOR 69770000=10380000=
|
|
A SUBSCRIPT. THE CODE FOR THE EXPRESSION IS GENERATED, AN69775000=10381000=
|
|
ACCIDENTAL ENTRY PROGRAM DESCRIPTOR IS CREATED, AND THE 69780000=10382000=
|
|
ADDRESS OF THE DESCRIPTOR IS REMEMBERED. 69785000=10383000=
|
|
THE PRINTI ROUTINE IS AN INTRINSIC WHICH PRINTS THE 69790000=10384000=
|
|
INFORMATION IT RECEIVES ACCORDING TO A SPECIFIED FORMAT 69795000=10385000=
|
|
FOR BOTH MONITORING AND DUMPING. THE FOLLOWING CHART 69800000=10386000=
|
|
EXPLAINS THE VARIOUS ACTIONS TAKEN BY THE PRINTI ROUTINE 69805000=10387000=
|
|
AND THE PARAMETERS THAT MUST BE PASSED FOR THE FIVE 69810000=10388000=
|
|
POSSIBLE CALLS ON PRINTI. 69815000=10389000=
|
|
ID IS DEFINED TO MEAN THE FIRST SEVEN CHARACTERS OF 69820000=10390000=
|
|
THE IDENTIFIER TO BE PRINTED. 69825000=10391000=
|
|
N IS DEFINED TO MEAN THE NUMBER OF DIMENSIONS OF AN 69830000=10392000=
|
|
ARRAY OR SUBSCRIPTED VARIABLE. 69835000=10393000=
|
|
V IS DEFINED TO MEAN THE VALUE TO BE PRINTED. 69840000=10394000=
|
|
S1---SN IS DEFINED TO MEAN THE SUBSCRIPT TO BE 69845000=10395000=
|
|
PRINTED. 69850000=10396000=
|
|
S1*---SN* IS DEFINED TO MEAN THE SUBSCRIPT TO BE 69855000=10397000=
|
|
MONITORED. PRINTI COMPARES SN* TO SN AND PRINTS 69860000=10398000=
|
|
ONLY IF THEY ARE EQUAL. 69865000=10399000=
|
|
FORMAT TYPE MONITOR DUMP 69870000=10400000=
|
|
----------- ------- ---- 69875000=10401000=
|
|
0 LABELS 69880000=10402000=
|
|
SWITCHES 69885000=10403000=
|
|
--------- ----- -- 69890000=10404000=
|
|
1 SIMPLE VARIABLES LABELS 69895000=10405000=
|
|
FUNCTION SIMPLE VARIABLES 69900000=10406000=
|
|
--------- ----- -- 69905000=10407000=
|
|
2 ARRAYS SUBSCRIPTED VARS 69910000=10408000=
|
|
--------- ----- -- 69915000=10409000=
|
|
3 SUBSCRIPTED VARS 69920000=10410000=
|
|
--------- ----- -- 69925000=10411000=
|
|
4 ARRAYS 69930000=10412000=
|
|
********* ***** ** 69935000=10413000=
|
|
FORMAT TYPE PRINTOUT 69940000=10414000=
|
|
----------- -------- 69945000=10415000=
|
|
0 ID 69950000=10416000=
|
|
--------- ----- 69955000=10417000=
|
|
1 ID=V 69960000=10418000=
|
|
--------- ----- 69965000=10419000=
|
|
2 ID[S1---SN]=V 69970000=10420000=
|
|
--------- ----- 69975000=10421000=
|
|
3 ID[S1---SN]=V 69980000=10422000=
|
|
--------- ----- 69985000=10423000=
|
|
4 ID=V1---VN 69990000=10424000=
|
|
*********** ******** 69995000=10425000=
|
|
THE FORMAT THAT V IS PRINTED IN WILL BE DETERMINED BY70000000=10426000=
|
|
THE TYPE OF V. THE FOLLOWING CONVENTIONS APPLY FOR 70005000=10427000=
|
|
PASSING THE TYPEV TO PRINTI. 70010000=10428000=
|
|
TYPE TYPEV 70015000=10429000=
|
|
---- ----- 70020000=10430000=
|
|
BOOLEAN 0 70025000=10431000=
|
|
-- --- 70030000=10432000=
|
|
REAL 1 70035000=10433000=
|
|
-- --- 70040000=10434000=
|
|
ALPHA 2 70045000=10435000=
|
|
-- --- 70050000=10436000=
|
|
INTEGER 3 70055000=10437000=
|
|
**** ***** 70060000=10438000=
|
|
POWERSOFTEN IS A TABLE OF POWERS OF TEN THAT PRINTI 70065000=10439000=
|
|
AND OTHER ROUTINES USE FOR CONVERSION PURPOSES. 70070000=10440000=
|
|
FORMAT TYPE ACTUAL PARAMETERS TO PRINTI 70075000=10441000=
|
|
----------- --------------------------- 70080000=10442000=
|
|
0 <ID,CHARI,FILE,0> 70085000=10443000=
|
|
--------- ------------------------- 70090000=10444000=
|
|
1 (V,TYPEV,POWERSOFTEN,ID,CHARI,FILE,1) 70095000=10445000=
|
|
--------- ------------------------- 70100000=10446000=
|
|
2 (S1---SN,V,N,TYPEV,POWERSOFTEN,ID,CHARI,70105000=10447000=
|
|
FILE,2) 70110000=10448000=
|
|
--------- ------------------------- 70115000=10449000=
|
|
3 (S1*---SN*,S1---SN,V,N,TYPEV,POWERSOFTEN70120000=10450000=
|
|
,ID,CHARI,FILE,3) 70125000=10451000=
|
|
--------- ------------------------- 70130000=10452000=
|
|
4 (DESCRIPTOR FOR THE ARRAY,N,TYPEV, 70135000=10453000=
|
|
POWERSOFTEN,ID,CHARI,FILE,4) 70140000=10454000=
|
|
*********** *************************** 70145000=10455000=
|
|
SINCE THE RESTRICTION EXISTS THAT THE SCOPE OF THE 70150000=10456000=
|
|
MONITOR FOR A LABEL OR SWITCH MUST BE THE SAME AS 70155000=10457000=
|
|
THE SCOPE OF THE LABEL OR SWITCH, THE INFORMATION 70160000=10458000=
|
|
THAT IS GATHERED BY THE MONITOR IS STORED IN THE 70165000=10459000=
|
|
ORIGIONAL ENTRY IN INFO. IN THE CASES OF VARIABLES, 70170000=10460000=
|
|
ARRAYS, AND FUNCTION DESIGNATORS,THE MONITORS SCOPE 70175000=10461000=
|
|
MAY BE DIFFERENT THAN THE SCOPE OF THE ITEM BEING 70180000=10462000=
|
|
MONITORED, THEREFORE, A NEW ENTRY IS MADE IN INFO 70185000=10463000=
|
|
WITH THE CURRENT LEVEL COUNTER AND THE ADDITIONAL 70190000=10464000=
|
|
MONITORING INFORMATION. 70195000=10465000=
|
|
*********FORMAT OF INFO FOR MONITORED ITEMS**********70200000=10466000=
|
|
ALL MONITORED ITEMS- MONITOR BIT [46:1] IN THE ELBAT 70205000=10467000=
|
|
WORD WILL BE SET. 70210000=10468000=
|
|
SIMPLE VARIABLES- A NEW ENTRY IS MADE IN INFO WITH 70215000=10469000=
|
|
ONE EXTRA WORD WHICH CONTAINS THE ADDRESS OF 70220000=10470000=
|
|
THE MONITOR FILE IN [10:11], I WILL HAVE A 70225000=10471000=
|
|
DEFINE SVARMONFILE = [10:11]#. 70230000=10472000=
|
|
ARRAYS- A NEW ENTRY IS MADE IN INFO WITH THE SAME 70235000=10473000=
|
|
NUMBER OF WORDS AS THE ORIGIONAL ENTRY. THE 70240000=10474000=
|
|
MONITOR FILE IS REMEMBERED IN [20:11] OF THE 70245000=10475000=
|
|
FIRST WORD OF ADDITIONAL INFO. I WILL HAVE A 70250000=10476000=
|
|
DEFINE ARRAYMONFILE = [20:11]#. 70255000=10477000=
|
|
SUBSCRIPTED VARIABLES- THE TECHNIQUE FOR HANDLING 70260000=10478000=
|
|
SUBSCRIPTED VARIABLES IS IDENTICLE TO THE 70265000=10479000=
|
|
TECHNIQUE FOR ARRAYS EXCEPT THAT EACH WORD70270000=10480000=
|
|
OF INFO CONTAINING LOWER BOUND INFORMATION70275000=10481000=
|
|
ALSO CONTAINS MONITOR INFORMATION. EITHER70280000=10482000=
|
|
A LITERAL OR AN ADDRESS WILL BE CONTAINED 70285000=10483000=
|
|
IN BITS [35:11]. IN [36:1] IS A BIT THAT 70290000=10484000=
|
|
DESIGNATES WHETHER AN OPDC OR A LITC 70295000=10485000=
|
|
SHOULD BE GENERATED USING [35:11]. IF THE70300000=10486000=
|
|
BIT IS 1 THEN AN OPDC WILL BE GENERATED, 70305000=10487000=
|
|
ELSE A LITC. IF AN OPDC IS GENERATED IT 70310000=10488000=
|
|
MAY BE ON A SIMPLE VARIABLE, OR ON AN 70315000=10489000=
|
|
ACCIDENTAL ENTRY PROGRAM DESCRIPTOR. THE 70320000=10490000=
|
|
PURPOSE OF THE LITC OR OPDC IS TO PASS 70325000=10491000=
|
|
SI* TO THE PRINTI ROUTINE. 70330000=10492000=
|
|
LABELS- THE FIRST WORD OF ADDITIONAL INFO CONTAINS 70335000=10493000=
|
|
THE ADDRESS OF THE FILE DESCRIPTOR IN THE 70340000=10494000=
|
|
ORIGIONAL ENTRY IN BITS [34:11]. I WILL HAVE A70345000=10495000=
|
|
DEFINE LABLMONFILE = [34:11]#. 70350000=10496000=
|
|
SWITCHES- THE MONITOR IS THE SAME AS THAT FOR LABELS.70355000=10497000=
|
|
I WILL HAVE A DEFINE SWITMONFILE = [34:11]#. 70360000=10498000=
|
|
FUNCTION DESIGNATORS- A NEW ENTRY IS MADE IN INFO 70365000=10499000=
|
|
WITH THE SAME NUMBER OF WORDS AS THE 70370000=10500000=
|
|
ORIGIONAL ENTRY. THE MONITOR FILE IS 70375000=10501000=
|
|
REMEMBERED IN [20:11] OF THE FIRST WORD OF 70380000=10502000=
|
|
ADDITIONAL INFO. I WILL HAVE A DEFINE 70385000=10503000=
|
|
FUNCMONFILE = [20:11]#; 70390000=10504000=
|
|
DEFINE 70395000=10505000=
|
|
FILEIDENT = RR7 #; 70400000=10505000=
|
|
COMMENT FILEIDENT CONTAINS THE 70405000=10505000=
|
|
ADDRESS OF THE MONITOR FILE; 70410000=10506000=
|
|
DEFINE 70415000=10507000=
|
|
SUBSCRIPT = RR1 #; 70420000=10507000=
|
|
COMMENT SUBSCRIPT IS USED TO 70425000=10507000=
|
|
SAVE THE ADDRESS OR VALUE OF A 70430000=10508000=
|
|
SUBSCRIPT. ONE ADDITIONAL BIT IS70435000=10509000=
|
|
USED TO TELL WHETHER TO EMIT AN 70440000=10510000=
|
|
OPDC OR A LITC ON THIS ADDRESS OR70445000=10511000=
|
|
VALUE; 70450000=10512000=
|
|
DEFINE 70455000=10513000=
|
|
NODIM = RR2 #; 70460000=10513000=
|
|
COMMENT NODIM CONTAINS THE NUMBER OF70465000=10513000=
|
|
DIMENSIONS OF AN ARRAY OR SUBSCRIPTED70470000=10514000=
|
|
VARIABLE APPEARING IN A MONITOR LIST;70475000=10515000=
|
|
DEFINE 70480000=10516000=
|
|
INC = RR3 #; 70485000=10516000=
|
|
COMMENT INC CONTAINS THE LINK TO 70490000=10516000=
|
|
ADDITIONAL INFO AND IS USED WHEN MAKING70495000=10517000=
|
|
A NEW ENTRY IN INFO FOR ARRAYS; 70500000=10518000=
|
|
DEFINE 70505000=10519000=
|
|
ELBATWORD = RR4 #; 70510000=10519000=
|
|
COMMENT ELBATWORD CONTAINS THE 70515000=10519000=
|
|
ELBAT WORD FOR A MONITOR LIST 70520000=10520000=
|
|
ELEMENT; 70525000=10521000=
|
|
DEFINE 70530000=10522000=
|
|
OPLIT = RR4 #; 70535000=10522000=
|
|
COMMENT OPLIT IS USED FOR MARKING70540000=10522000=
|
|
SUBSCRIPTED VARIABLES TO TELL ME 70545000=10523000=
|
|
WHETHER TO EMIT AN OPDC OR A LITC.70550000=10524000=
|
|
0 IS USED FOR OPDC, 1 FOR LITC; 70555000=10525000=
|
|
DEFINE 70560000=10526000=
|
|
TESTVARB = RR5 #; 70565000=10526000=
|
|
COMMENT TESTVARB CONTAINS A LINK 70570000=10526000=
|
|
POINTING AT THE END OF ADDITIONAL 70575000=10527000=
|
|
INFO AND IS USED TO TELL WHEN TO 70580000=10528000=
|
|
STOP MOVING INFO FOR THE NEW ENTRY70585000=10529000=
|
|
FOR MONITORED ARRAYS; 70590000=10530000=
|
|
DEFINE 70595000=10531000=
|
|
NXTINFOTEMP = RR6 #; 70600000=10531000=
|
|
COMMENT NXTINFOTEMP CONTAINS A70605000=10531000=
|
|
LINK POINTING AT THE FIRST 70610000=10532000=
|
|
ADDITIONAL WORD OF INFO FOR 70615000=10533000=
|
|
MONITORED ARRAYS; 70620000=10534000=
|
|
DEFINE 70625000=10535000=
|
|
INSERTFILE = 20:10:11 #; 70630000=10535000=
|
|
COMMENT INSERTFILE IS THE 70635000=10535000=
|
|
CONCATENATE DEFINE FOR 70640000=10536000=
|
|
STUFFING THE MONITOR FILE 70645000=10537000=
|
|
ADDRESS INTO THE FIRST 70650000=10538000=
|
|
ADDITIONAL INFO WORD FOR 70655000=10539000=
|
|
ARRAYS AND FUNCTIONS; 70660000=10540000=
|
|
DEFINE 70665000=10541000=
|
|
NOPARPART = NODIMPART #; 70670000=10541000=
|
|
COMMENT NOPARPART IS A 70675000=10541000=
|
|
PARTIAL WORD DESIGNATOR [4070680000=10542000=
|
|
:8] USED TO EXTRACT THE 70685000=10543000=
|
|
NUMBER OF PARAMETERS FOR A 70690000=10544000=
|
|
GIVEN PROCEDURE FROM INFO; 70695000=10545000=
|
|
DEFINE 70700000=10546000=
|
|
NOPAR = NODIM #; 70705000=10546000=
|
|
COMMENT NOPAR CONTAINS THE NUMBER 70710000=10546000=
|
|
OF PARAMETERS FOR A FUNCTION 70715000=10547000=
|
|
DESIGNATOR APPEARING IN A MONITOR 70720000=10548000=
|
|
LIST; 70725000=10549000=
|
|
LABEL 70730000=10550000=
|
|
START; 70735000=10550000=
|
|
COMMENT WHEN START IS REACHED, I MUST BE 70740000=10550000=
|
|
POINTING AT THE FILE IDENTIFIER IN THE 70745000=10551000=
|
|
MONITOR DECLARATION; 70750000=10552000=
|
|
LABEL 70755000=10553000=
|
|
MARKMONITORED; 70760000=10553000=
|
|
COMMENT THE CODE AT MARKMONITORED 70765000=10553000=
|
|
TURNS ON THE MONITOR BIT OF THE ELBAT70770000=10554000=
|
|
WORD IN THE MONITOR LIST AND STORES 70775000=10555000=
|
|
IT IN ACCUM[0] FOR THE E ROUTINE; 70780000=10556000=
|
|
LABEL 70785000=10557000=
|
|
STORESUBS; 70790000=10557000=
|
|
COMMENT STORESUBS IS THE CODE THAT 70795000=10557000=
|
|
REMEMBERS ALL THAT IS NECESSARY ABOUT 70800000=10558000=
|
|
EACH SUBSCRIPT EXPRESSION; 70805000=10559000=
|
|
LABEL 70810000=10560000=
|
|
CHKCOMMA; 70815000=10560000=
|
|
COMMENT CHKCOMMA REQUIRES THAT I BE 70820000=10560000=
|
|
POINTING THE LAST LOGICAL QUANTITY OF THE 70825000=10561000=
|
|
MONITOR LIST ELEMENT THAT HAS JUST BEEN 70830000=10562000=
|
|
PROCESSED; 70835000=10563000=
|
|
LABEL 70840000=10564000=
|
|
EXIT; 70845000=10564000=
|
|
COMMENT EXIT EXITS THE MERRIMAC PROCEDURE; 70850000=10564000=
|
|
START: 70855000=10565000=
|
|
IF ELCLASS ^= FILEID THEN 70860000=10565000=
|
|
BEGIN 70865000=10565100=
|
|
IF Q = 6"5INDEX" OR Q = 6"4FLAG0" OR Q = 6"6INTOV" OR Q = 70870000=10565200=
|
|
6"6EXPOV" OR Q = 6"4ZERO0" 70875000=10565200=
|
|
THEN 70880000=10565200=
|
|
MERRIMAC:= TRUE 70885000=10565200=
|
|
ELSE 70890000=10565200=
|
|
ERR(400); 70895000=10565300=
|
|
GO EXIT; 70900000=10565300=
|
|
END COMMENT ERROR 400 IS MISSING FILE ID IN MONITOR DEC; 70905000=10567000=
|
|
CHECKER(ELBAT[I]); 70910000=10568000=
|
|
FILEIDENT:= ELBAT[I].ADDRESS; 70915000=10569000=
|
|
I:= I+1; 70920000=10569000=
|
|
IF CHECK(LEFTPAREN, 401) THEN 70925000=10571000=
|
|
GO TO EXIT; 70930000=10571000=
|
|
COMMENT ERROR 401 IS MISSING LEFT PARENTHSIS IN MONITOR; 70935000=10572000=
|
|
MARKMONITORED: 70940000=10573000=
|
|
STEPIT; 70945000=10573000=
|
|
ACCUM[0]:= -ABS(ELBAT[I]); 70950000=10573000=
|
|
IF RANGE(BOOID, INTID) THEN 70955000=10575000=
|
|
BEGIN 70960000=10575000=
|
|
COMMENT THIS CODE HANDLES SIMPLE VARIABLES; 70965000=10575000=
|
|
E; 70970000=10576000=
|
|
PUTNBUMP(FILEIDENT); 70975000=10576000=
|
|
GO CHKCOMMA; 70980000=10577000=
|
|
END; 70985000=10578000=
|
|
IF RANGE(BOOARRAYID, INTARRAYID) THEN 70990000=10580000=
|
|
BEGIN 70995000=10580000=
|
|
COMMENT THIS CODE HANDLES ARRAYS AND 71000000=10580000=
|
|
SUBSCRIPTED VARIABLES; 71005000=10581000=
|
|
E; 71010000=10582000=
|
|
NXTINFOTEMP:= NEXTINFO; 71015000=10582000=
|
|
PUTNBUMP(NODIM:= TAKEFRST & FILEIDENT[INSERTFILE]); 71020000=10583000=
|
|
TESTVARB:= (NODIM:= NODIM.NODIMPART)+ 71025000=10585000=
|
|
(INC:= (ELBATWORD:= ELBAT[I]).LINK+ELBATWORD.INCR); 71030000=10585000=
|
|
DO 71035000=10586000=
|
|
PUTNBUMP(TAKE(INC:= INC+1)) 71040000=10587000=
|
|
UNTIL INC >= TESTVARB; 71045000=10587000=
|
|
IF TABLE(I+1) ^= LFTBRKET THEN 71050000=10589000=
|
|
GO CHKCOMMA; 71055000=10589000=
|
|
TESTVARB:= NODIM+NXTINFOTEMP; 71060000=10590000=
|
|
STEPIT; 71065000=10591000=
|
|
STORESUBS: 71070000=10592000=
|
|
IF (RR3:= TABLE(I+2) = COMMA OR RR3 = RTBRKET) AND STEPI ^= 71075000=10593000=
|
|
NONLITNO 71080000=10594000=
|
|
THEN 71085000=10594000=
|
|
BEGIN 71090000=10594000=
|
|
COMMENT THIS IS THE SIMPLE CASE OF 71095000=10594000=
|
|
SUBSCRIPTED VARIABLES. EITHER A LITC 71100000=10595000=
|
|
OR AN OPDC ON A VARIABLE IS ALL THAT 71105000=10596000=
|
|
IS NEEDED TO CALL THE SUBSCRIPT; 71110000=10597000=
|
|
SUBSCRIPT:= ELBAT[I].ADDRESS; 71115000=10598000=
|
|
OPLIT:= 0; 71120000=10598500=
|
|
IF NOT RANGE(INTRNSICPROCID, INTID) THEN 71125000=10600000=
|
|
IF CHECK(LITNO, 402) THEN 71130000=10601000=
|
|
GO TO EXIT 71135000=10602000=
|
|
ELSE 71140000=10602000=
|
|
COMMENT MARK FOR LITC; 71145000=10602000=
|
|
OPLIT:= 1; 71150000=10603000=
|
|
COMMENT ERROR 402 IS BAD 71155000=10604000=
|
|
SUBSCRIPT IN MONITOR DECLARATION;71160000=10605000=
|
|
STEPIT; 71165000=10606000=
|
|
END 71170000=10608000=
|
|
ELSE 71175000=10608000=
|
|
BEGIN 71180000=10608000=
|
|
COMMENT THIS IS THE SPECIAL CASE OF 71185000=10608000=
|
|
SUBSCRIPTED VARIABLES. CODE FOR THIS 71190000=10609000=
|
|
SUBSCRIPT EXPRESSION MUST BE GENERATED71195000=10610000=
|
|
AND JUMPED AROUND, AN ACCIDENTAL ENTRY71200000=10611000=
|
|
PROGRAM DESCRIPTOR CREATED AND THE 71205000=10612000=
|
|
ADDRESS SAVED IN SUBSCRIPT. SUBSCRIPT71210000=10613000=
|
|
MUST BE MARKED FOR AN OPDC; 71215000=10614000=
|
|
JUMPCHKNX; 71220000=10615000=
|
|
SUBSCRIPT:= PROGDESCBLDR(ADES, L, 0); 71225000=10616000=
|
|
AEXP; 71230000=10616000=
|
|
EMITO(RTS); 71235000=10616000=
|
|
JUMPCHKX; 71240000=10616500=
|
|
OPLIT:= 0; 71245000=10617000=
|
|
IF MODE > 0 THEN 71250000=10619000=
|
|
BEGIN 71255000=10619000=
|
|
COMMENT STUFF F AT THIS 71260000=10619000=
|
|
POINT IF MODE > 0; 71265000=10620000=
|
|
STUFFF(SUBSCRIPT); 71270000=10621000=
|
|
EMITPAIR(SUBSCRIPT, STD); 71275000=10622000=
|
|
END; 71280000=10623000=
|
|
END; 71285000=10624000=
|
|
PUT(TAKE(NXTINFOTEMP:= NXTINFOTEMP+1) & SUBSCRIPT[35:10:11] & 71290000=10627000=
|
|
OPLIT[36:0:01], NXTINFOTEMP); 71295000=10627000=
|
|
IF ELCLASS = COMMA THEN 71300000=10629000=
|
|
GO TO STORESUBS; 71305000=10629000=
|
|
IF CHECK(RTBRKET, 403) THEN 71310000=10631000=
|
|
GO TO EXIT; 71315000=10631000=
|
|
COMMENT ERROR 403 IS IMPROPER SUBSCRIPT 71320000=10632000=
|
|
EXPRESSION DELIMITER IN MONITOR LIST ELEMENT; 71325000=10633000=
|
|
IF NXTINFOTEMP ^= TESTVARB THEN 71330000=10635000=
|
|
BEGIN 71335000=10635000=
|
|
COMMENT ERROR 404 MONITOR LIST 71340000=10635000=
|
|
ELEMENT HAS IMPROPER NUMBER OF 71345000=10636000=
|
|
SUBSCRIPTS; 71350000=10637000=
|
|
I:= I-1; 71355000=10638000=
|
|
ERROR(404); 71360000=10638000=
|
|
GO TO EXIT; 71365000=10638000=
|
|
END; 71370000=10639000=
|
|
GO CHKCOMMA; 71375000=10640000=
|
|
END; 71380000=10641000=
|
|
IF ELCLASS = LABELID OR ELCLASS = SWITCHID THEN 71385000=10643000=
|
|
BEGIN 71390000=10643000=
|
|
COMMENT THIS CODE HANDLES LABELS AND SWITCHES; 71395000=10643000=
|
|
IF (ELBATWORD:= ELBAT[I]).LVL ^= LEVEL THEN 71400000=10645000=
|
|
BEGIN 71405000=10645000=
|
|
COMMENT ERROR 405 MEANS LABEL OR 71410000=10645000=
|
|
SWITCH MONITORED AT IMPROPER LEVEL; 71415000=10646000=
|
|
ERROR(405); 71420000=10647000=
|
|
GO TO EXIT; 71425000=10647000=
|
|
END; 71430000=10648000=
|
|
PUT(TAKEFRST & FILEIDENT[34:10:11], GIT(ELBAT[I])); 71435000=10650000=
|
|
PUT(TAKE(ELBATWORD) & (0-ABS(ELBATWORD))[46:46:34], ELBATWORD); 71440000=10652000=
|
|
GO CHKCOMMA; 71445000=10652000=
|
|
END; 71450000=10653000=
|
|
IF RANGE(BOOPROCID, INTPROCID) THEN 71455000=10655000=
|
|
BEGIN 71460000=10655000=
|
|
COMMENT THIS CODE HANDLES FUNCTIONS; 71465000=10655000=
|
|
E; % 71470000=10656000=
|
|
IF LEVEL = (RR2:= ELBAT[I]).LVL THEN 71475000=10656010=
|
|
BEGIN 71480000=10656011=
|
|
%%% COPY FORWARD BIT FROM ELBAT[I] INFO ENTRY INTO MONITOR"S INFO 71485000=10656012=
|
|
%%% ENTRY, AND THEN TURN OFF THE ELBAT[I] INFO ENTRY"S FORWARD BIT. 71490000=10656013=
|
|
PUT(TAKE(LASTINFO+1) & TAKE(RR2.LINK+1)[46:46:1], LASTINFO+1); 71495000=10656014=
|
|
PUT(ABS(TAKE(RR2.LINK+1)), RR2.LINK+1); 71500000=10656015=
|
|
END; 71505000=10656016=
|
|
PUTNBUMP(NOPAR:= TAKEFRST & FILEIDENT[INSERTFILE]); 71510000=10657000=
|
|
TESTVARB:= (NOPAR:= NOPAR.NOPARPART)+ 71515000=10659000=
|
|
(INC:= (ELBATWORD:= ELBAT[I]).LINK+ELBATWORD.INCR); 71520000=10659000=
|
|
DO 71525000=10660000=
|
|
PUTNBUMP(TAKE(INC:= INC+1)) 71530000=10661000=
|
|
UNTIL INC >= TESTVARB; 71535000=10661000=
|
|
GO CHKCOMMA; 71540000=10662000=
|
|
END; 71545000=10663000=
|
|
ERROR(406); 71550000=10664000=
|
|
GO TO EXIT; 71555000=10664000=
|
|
COMMENT ERROR 406 IS IMPROPER MONITOR LIST ELEMENT; 71560000=10665000=
|
|
CHKCOMMA: 71565000=10666000=
|
|
IF STEPI = COMMA THEN 71570000=10667000=
|
|
GO MARKMONITORED; 71575000=10667000=
|
|
IF CHECK(RTPAREN, 407) THEN 71580000=10669000=
|
|
GO TO EXIT; 71585000=10669000=
|
|
COMMENT ERROR 407 IS MISSING RIGHT PARENTHESIS IN MONITOR71590000=10670000=
|
|
DECLARATION; 71595000=10671000=
|
|
IF STEPI = SEMICOLON THEN 71600000=10673000=
|
|
GO TO EXIT; 71605000=10673000=
|
|
IF CHECK(COMMA, 408) THEN 71610000=10675000=
|
|
GO TO EXIT; 71615000=10675000=
|
|
COMMENT ERROR 408 MEANS IMPROPER MONITOR DECLARATION 71620000=10676000=
|
|
DELIMITER; 71625000=10677000=
|
|
STEPIT; 71630000=10678000=
|
|
GO TO START; 71635000=10678000=
|
|
EXIT: 71640000=10679000=
|
|
; 71645000=10679000=
|
|
END MERRIMAC; 71650000=10680000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%71655000=10680000=
|
|
PROCEDURE DMUP; 71660000=10681000=
|
|
BEGIN 71665000=10682000=
|
|
COMMENT 15 JULY 1963 71670000=10682000=
|
|
THERE ARE FOUR TYPES OF DUMP LIST ELEMENTS. THERE 71675000=10683000=
|
|
ARE LABELS, SIMPLE VARIABLES, SUBSCRIPTED VARIABLES, AND 71680000=10684000=
|
|
ARRAYS. 71685000=10685000=
|
|
THE DMUP ROUTINE GENERATES CODE AND SAVES INFORMATION. 71690000=10686000=
|
|
THE INFORMATION THAT IS SAVED IS OF TWO TYPES. FOR EASE 71695000=10687000=
|
|
OF REFERENCE I WOULD LIKE TO DEFINE THE DUMP LABEL OUTSIDE71700000=10688000=
|
|
THE PARENTHESES AS THE DUMPOR, AND ANY LABEL APPEARING AS 71705000=10689000=
|
|
A DUMP LIST ELEMENT A DUMPEE. BOTH DUMPORS AND DUMPEES 71710000=10690000=
|
|
HAVE A COUNTER ASSOCIATED WITH THEM WHICH IS INCREMENTED 71715000=10691000=
|
|
BY ONE EACH TIME THE LABEL IS PASSED. THE ADDRESS OF THIS71720000=10692000=
|
|
COUNTER IS KEPT IN BITS [45:11] OF THE FIRST ADDITIONAL 71725000=10693000=
|
|
WORD OF INFO. THE ADDRESS OF THE PROGRAM DESCRIPTOR FOR 71730000=10694000=
|
|
THE CODE GENERATED BY DMUP IS KEPT IN BITS [23:11] OF THE 71735000=10695000=
|
|
FIRST ADDITIONAL WORD OF INFO FOR THE DUMPOR. 71740000=10696000=
|
|
THE CODE THAT IS GENERATED IS OF TWO TYPES. CODE TO 71745000=10697000=
|
|
INITIALIZE THE COUNTERS MENTIONED ABOVE IS EXECUTED UPON 71750000=10698000=
|
|
ENTRY TO THE BLOCK CONTAINING THE DUMP DECLARATION. THE 71755000=10699000=
|
|
OTHER TYPE CODE IS ONLY EXECUTED WHEN THE DUMPOR IS PASSED71760000=10700000=
|
|
. THIS CODE THEN COMPARES THE DUMPORS COUNTER WITH THE 71765000=10701000=
|
|
DUMP INDICATOR, IF THEY ARE NOT EQUAL IT JUMPS TO EXIT. 71770000=10702000=
|
|
IF THEY ARE EQUAL IT THEN PROCEEDS TO CALL PRINTI ONCE 71775000=10703000=
|
|
FOR EACH DUMP LIST ELEMENT. FOR A DESCRIPTION OF PRINTI 71780000=10704000=
|
|
SEE THE COMMENTS FOR THE MERRIMAC ROUTINE; 71785000=10705000=
|
|
LABEL 71790000=10706000=
|
|
START; COMMENT WHEN START IS REACHED, I MUST BE 71795000
|
|
POINTING AT THE FILE IDENTIFIER IN THE DUMP 71805000=10707000=
|
|
DECLARATION; 71810000=10708000=
|
|
LABEL 71815000=10709000=
|
|
EXIT; COMMENT EXIT APPEARS AT THE END OF THE DMUP 71820000
|
|
ROUTINE. NO STATMENTS ARE EXECUTED AFTER IT 71830000=10710000=
|
|
IS REACHED; 71835000=10711000=
|
|
DEFINE 71840000=10712000=
|
|
FILEIDENT = RR1 #; COMMENT FILEIDENT CONTAINS THE 71845000
|
|
ADDRESS OF THE MONITOR FILE; 71855000=10713000=
|
|
LABEL 71860000=10714000=
|
|
STARTCALL; COMMENT THE CODE AT STARTCALL GENERATES 71865000
|
|
CODE TO CALL THE PRINTI ROUTINE. WHEN 71875000=10715000=
|
|
STARTCALL IS REACHED, I MUST BE POINTING 71880000=10716000=
|
|
AT THE CHARACTER IMMEDIATELY BEFORE THE 71885000=10717000=
|
|
DUMP LIST ELEMENT TO BE PASSED TO PRINTI;71890000=10718000=
|
|
DEFINE 71895000=10719000=
|
|
NODIM = RR2 #; COMMENT NODIM CONTAINS THE NUMBER OF71900000
|
|
DIMENSIONS OF AN ARRAY OR A 71910000=10720000=
|
|
SUBSCRIPTED VARIABLE APPEARING IN A 71915000=10721000=
|
|
DUMP LIST; 71920000=10722000=
|
|
DEFINE 71925000=10723000=
|
|
LEXIT = RR3 #; COMMENT LEXIT CONTAINS THE PROGRAM 71930000
|
|
COUNTER SETTING AT WHICH CODE IS 71940000=10724000=
|
|
GENERATED TO EXIT THE ROUTINE EMITTED71945000=10725000=
|
|
BY DMUP; 71950000=10726000=
|
|
DEFINE 71955000=10727000=
|
|
DUMPETEMP = RR2 #; COMMENT DUMPETEMP HOLDS THE 71960000
|
|
LOCATION OF THE COUNTER 71970000=10728000=
|
|
ASSOCIATED WITH THIS LABEL IF 71975000=10729000=
|
|
SPACE HAS BEEN ASSIGNED FOR IT; 71980000=10730000=
|
|
DEFINE 71985000=10731000=
|
|
DIMCTR = RR3 #; COMMENT DIMCTR IS INITIALIZED TO 71990000
|
|
NODIM. IT IS THEN COUNTED DOWN TO 72000000=10732000=
|
|
ZERO AS SUBSCRIPT CODE IS GENERATED;72005000=10733000=
|
|
LABEL 72010000=10734000=
|
|
PASSN; COMMENT THE CODE AT PASSN PASSES N (THE 72015000
|
|
NUMBER OF DIMENSIONS) TO THE PRINTI ROUTINE; 72025000=10735000=
|
|
LABEL 72030000=10736000=
|
|
SUBSLOOP; COMMENT THE CODE AT SUBLOOP PASSES 72035000
|
|
SUBSCRIPTS TO PRINTI; 72045000=10737000=
|
|
ARRAY 72050000=10738000=
|
|
LABELCTR[0:100]; COMMENT LABELCTR IS AN ARRAY THAT 72055000
|
|
HOLDS THE ADDRESSES OF ALL LABEL 72065000=10739000=
|
|
COUNTERS FOR LABELS APPEARING IN 72070000=10740000=
|
|
THIS DUMP DECLARATION. IT IS 72075000=10741000=
|
|
NECESSARY TO RETAIN THIS 72080000=10742000=
|
|
INFORMATION SO THAT CODE MAY BE 72085000=10743000=
|
|
GENERATED AT THE END OF THE 72090000=10744000=
|
|
DECLARATION TO INITIALIZE THE 72095000=10745000=
|
|
COUNTERS; 72100000=10746000=
|
|
DEFINE 72105000=10747000=
|
|
LABELCTRINX = RR4 #; COMMENT LABELCTRINX IS THE 72110000
|
|
VARIABLE USED TO INDEX INTO THE72120000=10748000=
|
|
LABELCTR ARRAY; 72125000=10749000=
|
|
DEFINE 72130000=10750000=
|
|
DUMPE = 45:10:11 #; COMMENT DUMPE IS THE 72135000
|
|
CONCATENATE DEFINE FOR INSERTING72145000=10751000=
|
|
THE COUNTER ASSOCIATED WITH THIS72150000=10752000=
|
|
LABEL INTO THE FIRST ADDITIONAL 72155000=10753000=
|
|
WORD OF INFO; 72160000=10754000=
|
|
DEFINE 72165000=10755000=
|
|
LWRBND = RR5 #; COMMENT LWRBND CONTAINS THE LOWER 72170000
|
|
BOUND FOR MONITORED SUBSCRIPTED 72180000=10756000=
|
|
VARIABLES; 72185000=10757000=
|
|
DEFINE 72190000=10758000=
|
|
FORMATTYPE = RR5 #; COMMENT FORMATTYPE IS THE 72195000
|
|
FORMAT TYPE REFERRED TO IN THE 72205000=10759000=
|
|
COMMENTS FOR THE MERRIMAC 72210000=10760000=
|
|
ROUTINE DESCRIBING PRINTI; 72215000=10761000=
|
|
DEFINE 72220000=10762000=
|
|
FINALL = RR5 #; COMMENT FINALL IS A TEMPORARY CELL 72225000
|
|
USED TO HOLD L WHILE THE DUMP 72235000=10763000=
|
|
INDICATOR TEST CODE IS BEING 72240000=10764000=
|
|
GENERATED; 72245000=10765000=
|
|
DEFINE 72250000=10766000=
|
|
TESTLOC = RR6 #; COMMENT TESTLOC CONTAINS THE 72255000
|
|
LOCATION OF THE CODE THAT MUST BE 72265000=10767000=
|
|
GENERATED TO MAKE THE TEST TO 72270000=10768000=
|
|
DETERMINE WHETHER OR NOT DUMPING 72275000=10769000=
|
|
SHOULD OCCUR; 72280000=10770000=
|
|
DEFINE 72285000=10771000=
|
|
DUMPR = 23:10:11 #; COMMENT DUMPR IS THE 72290000
|
|
CONCATENATE DEFINE USED TO 72300000=10772000=
|
|
INSERT THE ADDRESS OF THE 72305000=10773000=
|
|
PROGRAM DESCRIPTOR FOR THE CODE 72310000=10774000=
|
|
GENERATED FROM THE DUMP 72315000=10775000=
|
|
DECLARATION; 72320000=10776000=
|
|
DEFINE 72325000=10777000=
|
|
DUMPLOC = RR7 #; COMMENT DUMPLOC CONTAINS THE 72330000
|
|
ADDRESS OF THE PROGRAM DESCRIPTOR 72340000=10778000=
|
|
THAT DESCRIBES THE CODE GENERATED 72345000=10779000=
|
|
BY DMUP; 72350000=10780000=
|
|
DEFINE 72355000=10781000=
|
|
ELBATWORD = RR8 #; COMMENT ELBATWORD CONTAINS THE 72360000
|
|
ELBAT WORD FOR THE DUMP LIST 72370000=10782000=
|
|
ELEMENT CURRENTLY BEING OPERATED 72375000=10783000=
|
|
ON; 72380000=10784000=
|
|
LABEL 72385000=10785000=
|
|
CALLPRINTI; COMMENT CALLPRINTI FINISHES THE CALL 72390000
|
|
ON PRINTI. IT GENERATES THE CODE TO 72400000=10786000=
|
|
PASS TYPEV, POWERSOFTEN, ID, CHARI, 72405000=10787000=
|
|
FILE, AND FORMAT TYPE; 72410000=10788000=
|
|
DEFINE 72415000=10789000=
|
|
SUBSCTR = RR9 #; COMMENT SUBSCTR CONTAINS THE 72420000
|
|
DIMENSION NUMBER THAT IS CURRENTLY 72430000=10790000=
|
|
BEING WORKED ON; 72435000=10791000=
|
|
START: 72440000=10792000=
|
|
IF CHECK(FILEID, 409) THEN 72445000=10793000=
|
|
GO TO EXIT; 72450000=10793000=
|
|
COMMENT ERROR 409 MEANS MISSING FILE ID IN DUMP DEC; 72455000=10794000=
|
|
CHECKER(ELBAT[I]); 72460000=10795000=
|
|
FILEIDENT:= ELBAT[I].ADDRESS; 72465000=10796000=
|
|
STEPIT; 72470000=10796000=
|
|
IF CHECK(LEFTPAREN, 410) THEN 72475000=10798000=
|
|
GO TO EXIT; 72480000=10798000=
|
|
COMMENT ERROR 410 MEANS MISSING LEFT PAREN IN DUMP DEC; 72485000=10799000=
|
|
JUMPCHKNX; 72490000=10800000=
|
|
ADJUST; 72495000=10800000=
|
|
DUMPLOC:= PROGDESCBLDR(ADES, L, 0); 72500000=10801000=
|
|
TESTLOC:= L; 72505000=10801000=
|
|
L:= L+3; 72510000=10801000=
|
|
LABELCTRINX:= -1; 72515000=10802000=
|
|
EMITO(NOP); 72520000=10802000=
|
|
BUMPL; 72525000=10802000=
|
|
STARTCALL: 72530000=10803000=
|
|
EMITO(MKS); 72535000=10803000=
|
|
STEPIT; 72540000=10803000=
|
|
ELBATWORD:= -ABS(ELBAT[I]); 72545000=10804000=
|
|
IF RANGE(BOOARRAYID, INTARRAYID) THEN 72550000=10806000=
|
|
BEGIN COMMENT THIS CODE HANDLES ARRAYS AND 72555000
|
|
SUBSCRIPTED VARIABLES; 72565000=10807000=
|
|
NODIM:= DIMCTR:= TAKEFRST.NODIMPART; 72570000=10808000=
|
|
IF STEPI = LFTBRKET THEN 72575000=10810000=
|
|
BEGIN COMMENT THIS CODE HANDLES SUBSCRIPTED72580000
|
|
VARIABLES; 72590000=10811000=
|
|
STEPIT; 72595000=10812000=
|
|
AEXP; 72600000=10812000=
|
|
EMITO(DUP); 72605000=10812000=
|
|
SUBSCTR:= 1; 72610000=10813000=
|
|
IF (LWRBND:= TAKE(GIT(ELBATWORD)+SUBSCTR)).[12:13] ^= 0 THEN 72615000=10816000=
|
|
BEGIN COMMENT SUBTRACT OFF THE 72620000
|
|
LOWER BOUND BEFORE INDEXING;72630000=10817000=
|
|
IF LWRBND.[1:2] = 0 THEN 72635000=10819000=
|
|
EMIT(LWRBND) 72640000=10820000=
|
|
ELSE 72645000=10820000=
|
|
EMITV(LWRBND.[12:11]); 72650000=10820000=
|
|
EMIT(LWRBND.[24:12]); 72655000=10821000=
|
|
END; 72660000=10822000=
|
|
IF DIMCTR-SUBSCTR = 0 THEN 72665000=10824000=
|
|
BEGIN COMMENT PASS SUBSCRIPT, 72670000
|
|
VALUE,N; 72680000=10825000=
|
|
EMITV(ELBATWORD.ADDRESS); 72685000=10826000=
|
|
PASSN: 72690000=10827000=
|
|
EMITL(NODIM); 72695000=10827000=
|
|
IF CHECK(RTBRKET, 411) THEN 72700000=10829000=
|
|
GO TO EXIT; COMMENT ERROR 411 MEANS 72705000
|
|
DUMP LIST ELEMENT HAS WRONG 72715000=10831000=
|
|
NUMBER OF SUBSCRIPTS; 72720000=10832000=
|
|
FORMATTYPE:= 2; 72725000=10833000=
|
|
GO CALLPRINTI 72730000=10834000=
|
|
END; 72735000=10834000=
|
|
EMITN(ELBATWORD.ADDRESS); 72740000=10835000=
|
|
SUBSLOOP: 72745000=10836000=
|
|
EMITO(LOD); 72750000=10836000=
|
|
STEPIT; 72755000=10836000=
|
|
AEXP; 72760000=10836000=
|
|
EMITL(JUNK); 72765000=10837000=
|
|
EMITO(SND); 72770000=10837000=
|
|
SUBSCTR:= SUBSCTR+1; 72775000=10838000=
|
|
IF (LWRBND:= TAKE(GIT(ELBATWORD)+SUBSCTR)).[12:13] ^= 0 THEN 72780000=10841000=
|
|
BEGIN COMMENT SUBTRACT OFF THE 72785000
|
|
LOWER BOUND BEFORE INDEXING;72795000=10842000=
|
|
IF LWRBND.[1:2] = 0 THEN 72800000=10844000=
|
|
EMIT(LWRBND) 72805000=10845000=
|
|
ELSE 72810000=10845000=
|
|
EMITV(LWRBND.[12:11]); 72815000=10845000=
|
|
EMIT(LWRBND.[24:12]); 72820000=10846000=
|
|
END; 72825000=10847000=
|
|
IF DIMCTR-SUBSCTR = 0 THEN 72830000=10849000=
|
|
BEGIN COMMENT EMIT COC; 72835000
|
|
EMITO(COC); 72845000=10850000=
|
|
EMITV(JUNK); 72850000=10851000=
|
|
EMITO(XCH); 72855000=10851000=
|
|
GO PASSN; 72860000=10852000=
|
|
END; 72865000=10853000=
|
|
EMITO(CDC); 72870000=10854000=
|
|
EMITV(JUNK); 72875000=10854000=
|
|
EMITO(XCH); 72880000=10854000=
|
|
IF CHECK(COMMA, 412) THEN 72885000=10856000=
|
|
GO TO EXIT 72890000=10857000=
|
|
ELSE 72895000=10857000=
|
|
GO TO SUBSLOOP; COMMENT ERROR 412 MEANS DUMP LIST 72900000
|
|
ELEMENT HAS WRONG NUMBER OF SUBSCRIPTS72910000=10859000=
|
|
; 72915000=10860000=
|
|
END; 72920000=10861000=
|
|
COMMENT THIS CODE HANDLES ARRAYS; 72925000=10862000=
|
|
IF ELCLASS ^= COMMA AND ELCLASS ^= RTPAREN THEN 72930000=10864000=
|
|
BEGIN COMMENT ERROR 413 MEANS IMPROPER 72935000
|
|
ARRAY DUMP LIST ELEMENT; 72945000=10865000=
|
|
ERR(413); 72950000=10866000=
|
|
GO TO EXIT; 72955000=10866000=
|
|
END; 72960000=10867000=
|
|
EMITPAIR(ELBATWORD.ADDRESS, LOD); 72965000=10868000=
|
|
EMITL(NODIM); 72970000=10868000=
|
|
FORMATTYPE:= 4; 72975000=10869000=
|
|
I:= I-1; 72980000=10869000=
|
|
GO CALLPRINTI; 72985000=10869000=
|
|
END; 72990000=10870000=
|
|
FORMATTYPE:= 1; 72995000=10871000=
|
|
IF RANGE(BOOID, INTID) THEN 73000000=10873000=
|
|
BEGIN COMMENT THIS CODE HANDLES SIMPLE VARIABLES; 73005000
|
|
EMITV(ELBATWORD.ADDRESS); 73015000=10874000=
|
|
GO CALLPRINTI; 73020000=10874000=
|
|
END; 73025000=10875000=
|
|
IF CHECK(LABELID, 414) THEN 73030000=10877000=
|
|
GO TO EXIT; 73035000=10877000=
|
|
COMMENT ERROR 414 MEANS ILLEGAL DUMP LIST ELEMENT. THIS 73040000=10878000=
|
|
CODE HANDLES LABELS; 73045000=10879000=
|
|
PUT(TAKEFRST & (LABELCTR[LABELCTRINX:= LABELCTRINX+1]:= % := OR - ?73050000=10882000=
|
|
IF DUMPETEMP:= TAKEFRST.DUMPEE = 0 THEN 73050100=10882000=
|
|
GETSPACE(FALSE, -7) % LABEL DESCRIPTOR. 73060000=10882000=
|
|
ELSE 73065000=10883000=
|
|
DUMPETEMP)[DUMPE], GIT(ELBATWORD)); 73065100=10884000=
|
|
EMITV(LABELCTR[LABELCTRINX]); 73070000=10885000=
|
|
PUT(TAKE(ELBATWORD) & ELBATWORD[46:46:34], ELBATWORD); 73075000=10886000=
|
|
EMITL(3); 73080000=10887000=
|
|
IF FALSE THEN 73085000=10887000=
|
|
CALLPRINTI: 73090000=10888000=
|
|
EMITL(PASSTYPE(ELBATWORD)); 73095000=10888000=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 73100000=10889000=
|
|
PASSALPHA(ELBATWORD); 73105000=10889000=
|
|
EMITPAIR(GNAT(CHARI), LOD); 73110000=10890000=
|
|
PASSMONFILE(FILEIDENT); 73115000=10891000=
|
|
EMITNUM(FORMATTYPE & CARDNUMBER[46:43:44]); 73120000=10891100=
|
|
EMITV(GNAT(PRINTI)); 73125000=10891200=
|
|
IF STEPI = COMMA THEN 73130000=10893000=
|
|
BEGIN COMMENT GO AROUND ONE MORE TIME; 73135000
|
|
IF LABELCTRINX = 100 THEN 73145000=10895000=
|
|
BEGIN COMMENT ERROR 415 MEANS LABELCTR IS 73150000
|
|
ABOUT TO OVERFLOW WITH LABEL 73160000=10896000=
|
|
INFORMATION; 73165000=10897000=
|
|
ERR(415); 73170000=10898000=
|
|
GO TO EXIT; 73175000=10898000=
|
|
END; 73180000=10899000=
|
|
GO STARTCALL; 73185000=10900000=
|
|
END; 73190000=10901000=
|
|
IF CHECK(RTPAREN, 416) THEN 73195000=10903000=
|
|
GO TO EXIT; 73200000=10903000=
|
|
COMMENT ERROR 416 MEANS ILLEGAL DUMP LIST ELEMENT 73205000=10904000=
|
|
DELIMETER; 73210000=10905000=
|
|
LEXIT:= L; 73215000=10906000=
|
|
EMITL(0); 73220000=10906000=
|
|
EMITO(RTS); 73225000=10906000=
|
|
JUMPCHKX; 73230000=10907000=
|
|
STEPIT; 73235000=10907000=
|
|
IF CHECK(LABELID, 417) THEN 73240000=10909000=
|
|
GO TO EXIT; 73245000=10909000=
|
|
COMMENT ERROR 417 MEANS MISSING DUMP LABEL; 73250000=10910000=
|
|
PUT 73255000=10912000=
|
|
(TAKE(ELBATWORD:=-ABS(ELBAT[I])) & ELBATWORD[46:46:34], ELBATWORD)73260000=10912000=
|
|
; 73265000=10912000=
|
|
IF NOT LOCAL(ELBATWORD) THEN 73270000=10912100=
|
|
FLAG(417); 73275000=10912100=
|
|
PUT(TAKEFRST & (LABELCTR[LABELCTRINX:= LABELCTRINX+1]:= IF DUMPETEMP73280000=10915000=
|
|
:= TAKEFRST.DUMPEE = 0 THEN DUMPETEMP:= GETSPACE(FALSE, -7) 73285000=10915000=
|
|
% LABEL DESCR. 73290000=10915000=
|
|
ELSE DUMPETEMP)[DUMPE], GIT(ELBATWORD)); 73295000=10916000=
|
|
EMITL(0); 73300000=10917000=
|
|
DO BEGIN COMMENT THIS CODE INITIALIZES THE LABEL COUNTERS;73305000
|
|
EMITPAIR(LABELCTR[LABELCTRINX], SND) 73315000=10920000=
|
|
END 73320000=10921000=
|
|
UNTIL LABELCTRINX:= LABELCTRINX-1 < 0; 73325000=10921000=
|
|
L:= L-1; 73330000=10922000=
|
|
EMITO(STD); 73335000=10922000=
|
|
STEPIT; 73340000=10922000=
|
|
IF CHECK(COLON, 418) THEN 73345000=10924000=
|
|
GO TO EXIT; 73350000=10924000=
|
|
COMMENT ERROR 418 MEANS MISSING COLON IN DUMP DEC; 73355000=10925000=
|
|
FINALL:= L; 73360000=10926000=
|
|
L:= TESTLOC; 73365000=10926000=
|
|
STEPIT; 73370000=10926000=
|
|
IF(GT1:= TABLE(I) ^= NONLITNO AND GT1 ^= LITNO AND GT1 < REALID AND 73375000=10926510=
|
|
GT1 > INTID) OR(GT1:= TABLE(I+1) ^= COMMA AND GT1 ^= SEMICOLON) 73380000=10926530=
|
|
THEN 73385000=10926530=
|
|
BEGIN COMMENT ERROR 465-DUMP INDICATOR MUST BE 73390000
|
|
UNSIGNED INTEGER OR SIMPLE VARIABLE; 73400000=10926540=
|
|
FLAG(465); 73405000=10926550=
|
|
GO TO EXIT; 73410000=10926550=
|
|
END; 73415000=10926560=
|
|
PRIMARY; 73420000=10927000=
|
|
EMITV(DUMPETEMP); 73425000=10927000=
|
|
EMITO(EQL); 73430000=10928000=
|
|
EMITB(BFC, TESTLOC+6, LEXIT); 73435000=10928000=
|
|
L:= FINALL; 73440000=10929000=
|
|
PUT(TAKE(GIT(ELBAT[I-3])) & DUMPLOC[DUMPR], GIT(ELBAT[I-3])); 73445000=10930000=
|
|
IF ELCLASS = COMMA THEN 73450000=10932000=
|
|
BEGIN COMMENT GO AROUND ONE MORE TIME; 73455000
|
|
STEPIT; 73465000=10933000=
|
|
GO TO START; 73470000=10933000=
|
|
END; 73475000=10934000=
|
|
IF CHECK(SEMICOLON, 419) THEN 73480000=10936000=
|
|
; 73485000=10936000=
|
|
COMMENT ERROR 419 MEANS IMPROPER DUMP DEC DELIMITER; 73490000=10937000=
|
|
EXIT: 73495000=10938000=
|
|
; 73500000=10938000=
|
|
END DMUP; 73505000=10939000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%73510000=10939000=
|
|
73515000=10940000=
|
|
COMMENT CODE FOR SWITCHES IS COMPILED FROM TWO PLACES - IN SWITCHGEN 73520000=10940000=
|
|
AND IN PURGE. COMPLEX SWITCHES (I.E. SWITCHES CONTAINING 73525000=10941000=
|
|
OTHER THAN LOCAL LABELS) ARE COMPILED HERE. SIMPLE 73530000=10942000=
|
|
SWITCHES ARE COMPILED AT PURGE TIME. THIS IS FOR REASONS 73535000=10943000=
|
|
OF EFFICIENCY. IF A SWITCH IS ONLY CALLED ONE THE CODE 73540000=10944000=
|
|
IS QUITE A BIT BETTER. AFTER SWITCHGEN GOTOG IS TRUE IF 73545000=10945000=
|
|
A COMMUNICATE MUST BE USED. THE BLOCK ROUTINE MARKS SUCH 73550000=10946000=
|
|
SWITCHES FORMAL. THIS IS, OF COURSE, A FICTION, FOR 73555000=10947000=
|
|
SIMPLE SWITCHES SWITCHGEN LEAVES THE INDEX TO INFO IN EDOC73560000=10948000=
|
|
SO THAT PURGE CAN FIND THE LABELS. IT SHOULD BE NOTED 73565000=10949000=
|
|
THAT A SWITCH EXPECTS THE SWITCH INDEX TO BE FOUND IN 73570000=10950000=
|
|
JUNK. THE RESULT RETURNED BY SWITCHGEN IS WHETHER OR NOT 73575000=10951000=
|
|
TO STUFF F INOT A SWITCH DESCRIPTOR, SINCE A SWITCH DE- 73580000=10952000=
|
|
SCRIPTOR IS AN ACCIDENTAL ENTRY DESCRIPTOR; 73585000=10953000=
|
|
BOOLEAN PROCEDURE SWITCHGEN(BEFORE, PD); 73590000=10954000=
|
|
VALUE 73595000=10954100=
|
|
BEFORE; 73600000=10954100=
|
|
BOOLEAN 73605000=10954100=
|
|
BEFORE; 73610000=10954100=
|
|
REAL 73615000=10954100=
|
|
PD; 73620000=10954100=
|
|
BEGIN 73625000=10955000=
|
|
LABEL 73630000=10956000=
|
|
LX, 73635000=10956000=
|
|
EXIT, 73640000=10956000=
|
|
BEF; 73645000=10956000=
|
|
REAL 73650000=10957000=
|
|
K, 73655000=10957000=
|
|
N, 73660000=10957000=
|
|
T1, 73665000=10957000=
|
|
TL; 73670000=10957000=
|
|
TL:= L; 73675000=10958000=
|
|
EMIT(0); 73680000=10959000=
|
|
EMITV(JUNK); 73685000=10959000=
|
|
EMITO(GEQ); 73690000=10959000=
|
|
EMITV(JUNK); 73695000=10959000=
|
|
L:= L+1; 73700000=10960000=
|
|
EMITO(GTR); 73705000=10960000=
|
|
EMITO(LOR); 73710000=10960000=
|
|
EMITV(JUNK); 73715000=10960000=
|
|
EMITO(DUP); 73720000=10961000=
|
|
EMITO(ADD); COMMENT WE HAVE GENERATED TEST 73725000=10961000=
|
|
AND PREPARATION FOR SWITCH-JUMP; 73735000=10962000=
|
|
GOTOG:= FALSE; COMMENT IF WE COMPILE JUMP OUT WE KNOW; 73740000=10963000=
|
|
IF BEFORE THEN 73750000=10964000=
|
|
BEGIN 73755000=10964000=
|
|
STEPIT; 73760000=10964000=
|
|
GO TO BEF 73765000=10964000=
|
|
END; 73770000=10964000=
|
|
LX: IF STEPI = LABELID AND ELBAT[I].LVL = LEVEL THEN 73775000=10966000=
|
|
BEGIN 73780000=10966000=
|
|
INFO[0, N]:= ELBAT[I]; 73785000=10967000=
|
|
IF N:= N+1 = 256 THEN 73790000=10969000=
|
|
BEGIN 73795000=10969000=
|
|
ERR(147); 73800000=10969000=
|
|
GO TO EXIT 73805000=10969000=
|
|
END; 73810000=10969000=
|
|
IF STEPI = COMMA THEN 73815000=10970000=
|
|
GO TO LX; 73820000=10970000=
|
|
EMITO(BFC); 73825000=10971000=
|
|
L:= BUMPL; 73830000=10971000=
|
|
N:= N-1; 73835000=10971000=
|
|
FOR K:= 0 STEP 1 UNTIL N DO 73840000=10973000=
|
|
BEGIN COMMENT SAVE LINKS TO LABELS IN EDOC; 73845000=10973000=
|
|
EMIT((GT1:= INFO[0, K]).[12:1]); 73855000=10974000=
|
|
EMIT(GT1) 73860000=10975000=
|
|
END; 73865000=10975000=
|
|
SWITCHGEN:= FALSE 73870000=10976000=
|
|
END 73875000=10977000=
|
|
ELSE 73880000=10977000=
|
|
BEGIN 73885000=10977000=
|
|
BEF: 73890000=10978000=
|
|
L:= BUMPL; 73895000=10978000=
|
|
N:= N-1; 73900000=10978000=
|
|
PUT(TAKE(LASTINFO) & (PD:= PROGDESCBLDR(ADES, TL, PD))[31:10:11] 73905000=10978600=
|
|
, LASTINFO); % GET PRT LOC AND SAVE 73910000=10978600=
|
|
FOR K:= 0 STEP 1 UNTIL N DO 73915000=10980000=
|
|
BEGIN COMMENT EMIT CODE FOR SIMPLE LABELS SEEN; 73920000=10980000=
|
|
ADJUST; 73930000=10981000=
|
|
T1:= L; 73935000=10981000=
|
|
EMITL(GNAT(GT1:= INFO[0, K])); 73940000=10982000=
|
|
GENGO(GT1); 73945000=10983000=
|
|
INFO[0, K]:= T1; 73950000=10984000=
|
|
EMITO(RTS); 73955000=10985000=
|
|
CONSTANTCLEAN 73960000=10986000=
|
|
END; 73965000=10986000=
|
|
I:= I-1; 73970000=10987000=
|
|
N:= N+1; 73975000=10987000=
|
|
DO BEGIN 73980000=10988000=
|
|
ADJUST; 73985000=10988000=
|
|
STEPIT; 73990000=10989000=
|
|
INFO[0, N]:= L; 73995000=10989000=
|
|
IF N:= N+1 = 256 THEN 74000000=10991000=
|
|
BEGIN 74005000=10991000=
|
|
ERR(147); 74010000=10991000=
|
|
GO TO EXIT 74015000=10991000=
|
|
END; 74020000=10991000=
|
|
DEXP; 74025000=10992000=
|
|
EMITO(RTS) 74030000=10992000=
|
|
END 74035000=10993000=
|
|
UNTIL ELCLASS ^= COMMA; 74040000=10993000=
|
|
ADJUST; 74045000=10993000=
|
|
EMITB(BFW, TL+12, L); 74050000=10994000=
|
|
EMITO(BFC); 74055000=10994000=
|
|
EMIT(0); 74060000=10995000=
|
|
EMITO(RTS); 74065000=10995000=
|
|
N:= N-1; 74070000=10995000=
|
|
FOR K:= 0 STEP 1 UNTIL N DO 74075000=10997000=
|
|
EMITB(BBW, BUMPL, INFO[0, K]); 74080000=10997000=
|
|
SWITCHGEN:= TRUE 74085000=10998000=
|
|
END; 74090000=10998000=
|
|
T1:= L; 74095000=10999000=
|
|
L:= TL+4; 74100000=11000000=
|
|
EMITL(N+1); 74105000=11001000=
|
|
L:= T1; 74110000=12000000=
|
|
EXIT: 74115000=12001000=
|
|
END SWITCHGEN; 74120000=12001000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%74125000=12001000=
|
|
PROCEDURE DBLSTMT; 74130000=12002000=
|
|
BEGIN 74135000=12003000=
|
|
REAL 74140000=12004000=
|
|
TVAR, % FOR VARIABLE() NAME PARAM 74141000
|
|
S, 74145000=12004000=
|
|
T; 74150000
|
|
BOOLEAN 74155000=12004100=
|
|
B; 74160000=12004100=
|
|
LABEL 74165000=12005000=
|
|
L1, 74170000=12005000=
|
|
L2, 74175000
|
|
L3, 74180000
|
|
L4, 74185000
|
|
EXIT; 74190000
|
|
S:= 0; 74195000=12006000=
|
|
IF STEPI ^= LEFTPAREN THEN 74200000=12007000=
|
|
ERR(281) 74205000=12008000=
|
|
ELSE 74210000=12008000=
|
|
L1: 74215000=12009000=
|
|
BEGIN 74220000=12009000=
|
|
IF STEPI = COMMA THEN 74225000=12010000=
|
|
BEGIN 74230000=12011000=
|
|
DPTOG:= TRUE; 74235000=12012000=
|
|
IF STEPI = ADOP THEN 74240000=12013000=
|
|
STEPIT; 74245000=12013000=
|
|
EMITNUM(NLO); 74250000=12014000=
|
|
EMITNUM(IF ELBAT[I-1].ADDRESS = SUB THEN-NHI ELSE NHI); 74255000=12015000=
|
|
DPTOG:= FALSE; 74260000=12016000=
|
|
STEPIT; 74265000=12017000=
|
|
GO TO L2; 74270000=12018000=
|
|
END; 74275000=12019000=
|
|
IF TABLE(I+1) = COMMA THEN 74280000=12020000=
|
|
BEGIN 74285000=12021000=
|
|
IF ELCLASS = ADOP OR ELCLASS = MULOP THEN 74290000=12022000=
|
|
BEGIN 74295000=12023000=
|
|
EMITO(ELBAT[I].ADDRESS+1); 74300000=12024000=
|
|
L4: IF(S:= S-1) <= 0 THEN 74305000=12025000=
|
|
FLAG(282); 74310000=12025000=
|
|
STEPIT; 74315000=12025000=
|
|
GO TO L3; 74320000=12026000=
|
|
END; 74325000=12027000=
|
|
IF ELCLASS = ASSIGNOP THEN 74330000=12028000=
|
|
BEGIN 74335000=12029000=
|
|
IF S:= S-1 < 0 THEN 74340000=12030000=
|
|
FLAG(285); 74345000=12030000=
|
|
T:= 0; 74350000=12030000=
|
|
STEPIT; 74355000=12030000=
|
|
DO BEGIN 74360000=12032000=
|
|
IF ELCLASS ^= COMMA THEN 74365000=12033000=
|
|
BEGIN 74370000=12033000=
|
|
ERR(284); 74375000=12033000=
|
|
GO EXIT 74380000=12033000=
|
|
END; 74385000=12033000=
|
|
STEPIT; 74390000=12034000=
|
|
B:= ELCLASS = INTID OR ELCLASS = INTARRAYID OR ELCLASS = 74395000=12034110=
|
|
INTPROCID; 74400000=12034110=
|
|
IF ELCLASS <= INTID AND ELCLASS >= REALID THEN 74405000=12035000=
|
|
BEGIN 74410000=12036000=
|
|
EMITN(ELBAT[I].ADDRESS); 74415000=12036000=
|
|
STEPIT 74420000=12036000=
|
|
END 74425000=12036100=
|
|
ELSE 74430000=12036100=
|
|
IF ELCLASS <= INTPROCID AND ELCLASS >= REALPROCID THEN 74435000=12036200=
|
|
IF ELBAT[I].LINK ^= PROINFO.LINK THEN 74440000=12036200=
|
|
FLAG(211) 74445000=12036300=
|
|
ELSE 74450000=12036300=
|
|
BEGIN 74455000=12036300=
|
|
EMITL(514); 74460000=12036300=
|
|
STEPIT 74465000=12036300=
|
|
END 74470000=12036400=
|
|
ELSE 74475000=12036400=
|
|
IF ELCLASS > INTARRAYID OR ELCLASS < REALARRAYID THEN 74480000=12036500=
|
|
ERR(286) 74485000=12037000=
|
|
ELSE 74490000=12037000=
|
|
BEGIN 74491000
|
|
TVAR:= FL; 74492000
|
|
VARIABLE(TVAR); 74495000
|
|
END; 74496000
|
|
EMITO(IF B THEN ISD ELSE STD) 74500000=12038000=
|
|
END 74505000=12038000=
|
|
UNTIL T:= T+1 = 2; 74510000=12038000=
|
|
IF ELCLASS ^= RTPAREN THEN 74515000=12039000=
|
|
GO L3; 74520000=12039000=
|
|
IF S ^= 0 THEN 74525000=12039100=
|
|
FLAG(283) 74530000=12040000=
|
|
ELSE 74535000=12040000=
|
|
BEGIN 74540000=12040000=
|
|
STEPIT; 74545000=12040000=
|
|
GO EXIT 74550000=12040000=
|
|
END; 74555000=12040000=
|
|
END; 74560000=12041000=
|
|
IF ELCLASS = FACTOP THEN 74565000=12041100=
|
|
BEGIN 74570000=12041110=
|
|
EMITO(MKS); 74575000=12041130=
|
|
EMITL(4); 74580000=12041130=
|
|
EMITV(GNAT(POWERALL)); 74585000=12041130=
|
|
EMITO(DEL); 74590000=12041140=
|
|
EMITO(DEL); 74595000=12041140=
|
|
GO L4; 74600000=12041140=
|
|
END; 74605000=12041160=
|
|
IF ELCLASS <= INTID AND ELCLASS >= BOOID THEN 74610000=12042000=
|
|
BEGIN 74615000=12043000=
|
|
CHECKER(T:= ELBAT[I]); 74620000=12044000=
|
|
STEPIT; 74625000=12045000=
|
|
STEPIT; 74630000=12045000=
|
|
AEXP; 74635000=12046000=
|
|
EMITV(T.ADDRESS); 74640000=12047000=
|
|
GO TO L2; 74645000=12048000=
|
|
END; 74650000=12049000=
|
|
END; 74655000=12050000=
|
|
AEXP; 74660000=12051000=
|
|
IF ELCLASS ^= COMMA THEN 74665000=12052000=
|
|
BEGIN 74670000=12052000=
|
|
ERR(284); 74675000=12052000=
|
|
GO EXIT 74680000=12053000=
|
|
END; 74685000=12053000=
|
|
STEPIT; 74690000=12054000=
|
|
AEXP; 74695000=12054000=
|
|
EMITO(XCH); 74700000=12054000=
|
|
L2: S:= S+1; 74705000=12055000=
|
|
L3: IF ELCLASS ^= COMMA THEN 74710000=12056000=
|
|
BEGIN 74715000=12056000=
|
|
ERR(284); 74720000=12056000=
|
|
GO TO EXIT 74725000=12056000=
|
|
END; 74730000=12056000=
|
|
GO TO L1; 74735000=12057000=
|
|
EXIT: 74740000=12058000=
|
|
END 74745000=12059000=
|
|
END DBLSTMT; 74750000=12059000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%74755000=12059000=
|
|
PROCEDURE CMPLXSTMT; 74760000=12060000=
|
|
BEGIN 74765000=12060100=
|
|
REAL 74770000=12060200=
|
|
TVAR, % FOR VARIABLE() NAME PARAM 74771000
|
|
S, 74775000=12060200=
|
|
T; 74780000
|
|
BOOLEAN 74785000=12060250=
|
|
B; 74790000=12060250=
|
|
LABEL 74795000=12060300=
|
|
L1, 74800000=12060300=
|
|
L2, 74805000
|
|
L3, 74810000
|
|
L4, 74815000
|
|
L5, 74820000
|
|
EXIT, 74825000
|
|
ERROR; 74830000
|
|
DEFINE 74835000=12060400=
|
|
ERRX(ERRX1) = BEGIN 74840000=12060400=
|
|
T:= ERRX1; 74845000=12060400=
|
|
GO ERROR 74850000=12060400=
|
|
END #; 74855000=12060400=
|
|
IF STEPI ^= LEFTPAREN THEN 74860000=12060500=
|
|
ERRX(381); 74865000=12060500=
|
|
L1: STEPIT; 74870000=12060550=
|
|
IF TABLE(I+1) = COMMA THEN 74875000=12060600=
|
|
BEGIN 74880000=12060700=
|
|
IF ELCLASS = ADOP THEN 74885000=12060800=
|
|
BEGIN 74890000=12060900=
|
|
T:= ELBAT[I].ADDRESS; 74895000=12061000=
|
|
EMITPAIR(9, STD); 74900000=12061100=
|
|
EMITO(XCH); 74905000=12061100=
|
|
EMITV(9); 74910000=12061100=
|
|
EMITO(T); 74915000=12061100=
|
|
EMITPAIR(9, STD); 74920000=12061200=
|
|
EMITO(T); 74925000=12061200=
|
|
EMITV(9); 74930000=12061200=
|
|
L4: IF S:= S-1 < 1 THEN 74935000=12061300=
|
|
FLAG(382); 74940000=12061300=
|
|
STEPIT; 74945000=12061300=
|
|
GO L1; 74950000=12061300=
|
|
END; 74955000=12061400=
|
|
IF ELCLASS = MULOP THEN 74960000=12061500=
|
|
BEGIN 74965000=12061600=
|
|
EMITO(MKS); 74970000=12061700=
|
|
EMITL(IF ELBAT[I].ADDRESS = MUL THEN 26 ELSE 35); 74975000=12061725=
|
|
EMITV(GNAT(SPECIALMATH)); 74980000=12061750=
|
|
L5: EMITO(DEL); 74985000=12061800=
|
|
EMITO(DEL); 74990000=12061800=
|
|
GO L4; 74995000=12061800=
|
|
END; 75000000=12061900=
|
|
IF ELCLASS = ASSIGNOP THEN 75005000=12062000=
|
|
BEGIN 75010000=12062100=
|
|
IF S:= S-1 < 0 THEN 75015000=12062200=
|
|
FLAG(385); 75020000=12062200=
|
|
T:= 0; 75025000=12062200=
|
|
STEPIT; 75030000=12062200=
|
|
B:= ELCLASS = INTID OR ELCLASS = INTPROCID OR ELCLASS = 75035000=12062255=
|
|
INTARRAYID; 75040000=12062255=
|
|
DO BEGIN 75045000=12062300=
|
|
IF ELCLASS ^= COMMA THEN 75050000=12062400=
|
|
ERRX(384); 75055000=12062400=
|
|
STEPIT; 75060000=12062400=
|
|
IF ELCLASS > BOOID AND ELCLASS < BOOARRAYID THEN 75065000=12062500=
|
|
BEGIN 75070000=12062600=
|
|
EMITN(ELBAT[I].ADDRESS); 75075000=12062600=
|
|
STEPIT 75080000=12062600=
|
|
END 75085000=12062700=
|
|
ELSE 75090000=12062700=
|
|
IF ELCLASS > BOOPROCID AND ELCLASS < BOOID THEN 75095000=12062700=
|
|
IF ELBAT[I].LINK ^= PROINFO.LINK THEN 75100000=12062800=
|
|
FLAG(211) 75105000=12062900=
|
|
ELSE 75110000=12062900=
|
|
BEGIN 75115000=12062900=
|
|
EMITL(514); 75120000=12062900=
|
|
STEPIT 75125000=12062900=
|
|
END 75130000=12063000=
|
|
ELSE 75135000=12063000=
|
|
IF ELCLASS < LABELID AND ELCLASS > BOOARRAYID THEN 75140000=12063100=
|
|
BEGIN 75141000
|
|
TVAR:= FL; 75142000
|
|
VARIABLE(TVAR); 75145000
|
|
END 75146000
|
|
ELSE 75150000=12063200=
|
|
ERRX(386); 75155000=12063200=
|
|
EMITO(IF B THEN ISD ELSE STD); 75160000=12063300=
|
|
END 75165000=12063500=
|
|
UNTIL T:= T+1 = 2; 75170000=12063500=
|
|
IF ELCLASS ^= RTPAREN THEN 75175000=12063600=
|
|
GO L3; 75180000=12063600=
|
|
IF S ^= 0 THEN 75185000=12063610=
|
|
FLAG(383) 75190000=12063610=
|
|
ELSE 75195000=12063610=
|
|
BEGIN 75200000=12063610=
|
|
STEPIT; 75205000=12063610=
|
|
GO EXIT 75210000=12063610=
|
|
END; 75215000=12063610=
|
|
END; 75220000=12063700=
|
|
IF ELCLASS = FACTOP THEN 75225000=12063800=
|
|
BEGIN 75230000=12063900=
|
|
EMITO(MKS); 75235000=12064000=
|
|
EMITL(8); 75240000=12064000=
|
|
EMITV(GNAT(POWERALL)); 75245000=12064000=
|
|
GO L5; 75250000=12064000=
|
|
END; 75255000=12064100=
|
|
IF ELCLASS > BOOID AND ELCLASS < BOOARRAYID THEN 75260000=12064200=
|
|
BEGIN 75265000=12064300=
|
|
CHECKER(T:= ELBAT[I]); 75270000=12064400=
|
|
STEPIT; 75275000=12064400=
|
|
STEPIT; 75280000=12064400=
|
|
AEXP; 75285000=12064400=
|
|
EMITV(T.ADDRESS); 75290000=12064500=
|
|
GO L2; 75295000=12064500=
|
|
END; 75300000=12064600=
|
|
END; 75305000=12064700=
|
|
AEXP; 75310000=12064800=
|
|
IF ELCLASS ^= COMMA THEN 75315000=12064800=
|
|
ERRX(384); 75320000=12064800=
|
|
STEPIT; 75325000=12064800=
|
|
AEXP; 75330000=12064800=
|
|
EMITO(XCH); 75335000=12064800=
|
|
L2: S:= S+1; 75340000=12064900=
|
|
L3: IF ELCLASS = COMMA THEN 75345000=12065000=
|
|
GO L1; 75350000=12065000=
|
|
T:= 384; 75355000=12065000=
|
|
ERROR: 75360000=12065200=
|
|
ERR(T); 75365000=12065200=
|
|
EXIT: 75370000=12065400=
|
|
END OF CMPLXSTMT; 75375000=12065400=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%75380000=12065400=
|
|
REAL PROCEDURE FIXDEFINEINFO(T); 75385000=12101000=
|
|
VALUE 75390000=12101000=
|
|
T; 75395000=12101000=
|
|
REAL 75400000=12101000=
|
|
T; 75405000=12101000=
|
|
BEGIN 75410000=12102000=
|
|
REAL 75415000=12102000=
|
|
K, 75420000=12102000=
|
|
S, 75425000=12102000=
|
|
P, 75430000=12102000=
|
|
J, 75435000=12102000=
|
|
EL; 75440000=12102000=
|
|
MACROID:= TRUE; 75445000=12107000=
|
|
P:= GIT(FIXDEFINEINFO:= T); 75450000=12108000=
|
|
STOPDEFINE:= TRUE; 75455000=12111000=
|
|
EL:= TABLE(NXTELBT); 75460000=12112000=
|
|
NXTELBT:= NXTELBT-1; 75465000=12113000=
|
|
IF EL ^= LEFTPAREN AND EL ^= LFTBRKET THEN 75470000=12114000=
|
|
FLAG(175) % [ OR ( EXPECTED. 75475000=12115000=
|
|
ELSE 75480000=12116000=
|
|
DO BEGIN 75485000=12116000=
|
|
J:= J+1; 75490000=12116000=
|
|
TEXT[NEXTTEXT.LINKR, NEXTTEXT.LINKC]:= TAKE(P); 75495000=12117000=
|
|
NEXTTEXT:= NEXTTEXT+1; 75500000=12118000=
|
|
PUT 75505000=12122000=
|
|
(TAKE(P) & NEXTTEXT[36:15:16] & DEFSTACKHEAD[12:12:13], P) 75510000=12122000=
|
|
; 75515000=12122000=
|
|
DEFSTACKHEAD:= P.LINK; 75520000=12123000=
|
|
P:= GIT(K:= P); 75525000=12123500=
|
|
DEFINEGEN(TRUE, 0); 75530000=12124000=
|
|
END 75535000=12125000=
|
|
UNTIL EL:= ELBAT[NXTELBT].CLASS ^= COMMA OR K = P; 75540000=12125000=
|
|
IF EL ^= RTPAREN AND EL ^= RTBRKET OR K ^= P THEN 75545000=12126000=
|
|
FLAG(174); %INCORRECT # OF PARAMS IN DEFINE INVOCATION. 75550000=12126100=
|
|
MACROID:= FALSE; 75555000=12127000=
|
|
END; 75560000=12128000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%75565000=12128000=
|
|
PROCEDURE DEFINEPARAM(DINFO, N); 75570000=12150000=
|
|
75575000=12150100=
|
|
COMMENT DEFINEPARAM GENERATES EVERYTHING (EXCEPT THE ELBAT 75580000=12150100=
|
|
WORD) FOR AN INFO TABLE ENTRY FOR A PARAMETER OF A 75585000=12150200=
|
|
PARAMETRIC DEFINE. 75590000=12150300=
|
|
; 75595000=12150400=
|
|
VALUE 75600000=12151000=
|
|
DINFO, 75605000=12151000=
|
|
N; 75610000=12151000=
|
|
INTEGER 75615000=12151000=
|
|
DINFO, 75620000=12151000=
|
|
N; 75625000=12151000=
|
|
BEGIN 75630000=12152000=
|
|
INTEGER 75635000=12153000=
|
|
J; 75640000=12153000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%75642000
|
|
PROCEDURE MAKEPARAM(INF, IX, ACC, AX, C, Q, N); 75645000=12154000=
|
|
VALUE 75650000=12154000=
|
|
IX, AX, C, Q, N; 75655000=12154000=
|
|
ARRAY 75655100
|
|
INF, ACC[0]; 75655200
|
|
REAL 75655300
|
|
IX, AX, C, Q, N; 75655400
|
|
BEGIN 75670000=12155000=
|
|
STREAMLOCALS; 75670100
|
|
STREAMSETDI(ACC, AX); 75675000=12156000=
|
|
STREAMSKIPDI(+3); 75680000=12156000=
|
|
STREAMSETSI(INF, IX); 75685000=12157000=
|
|
STREAMSKIPSI(+3); 75690000=12157000=
|
|
STREAMTRANSFERCHR(C); 75695000=12157000=
|
|
STREAMSETLOCSI(N); 75700000=12158000=
|
|
STREAMSKIPSI(+7); 75705000=12158000=
|
|
STREAMTRANSFERCHR(1); 75710000=12158000=
|
|
STREAMSETLOCSI(Q); 75715000=12159000=
|
|
STREAMSKIPSI(+6); 75720000=12159000=
|
|
STREAMTRANSFERCHR(1); 75725000=12159000=
|
|
STREAMSETDI(ACC, AX); 75730000=12160000=
|
|
STREAMSKIPDI(+2); 75735000=12160000=
|
|
STREAMTRANSFERCHR(1); 75740000=12160000=
|
|
END MAKEPARAM; 75745000=12161000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%75746000
|
|
ACCUM[1]:= 0; 75750000=12161500=
|
|
MAKEPARAM(INFO[DINFO.LINKR,*], DINFO.LINKC, ACCUM, 1, 75755000=12163000=
|
|
J:= INFO[DINFO.LINKR, DINFO.LINKC].[35:6], 770+J, N); 75760000=12163000=
|
|
SCRAM:= ACCUM[1] MOD 125; 75765000=12164000=
|
|
COUNT:= J+2; 75770000=12165000=
|
|
END DEFINEPARAM; 75775000=12166000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%75780000=12166000=
|
|
75785000=13000000=
|
|
COMMENT THIS SECTION CONTAINS THE PROCEDURES USED BY THE BLOCK ROUTINE;75790000=13000000=
|
|
PROCEDURE IODEC(IOT); 75795000=13001000=
|
|
VALUE 75800000=13002000=
|
|
IOT; 75805000=13002000=
|
|
INTEGER 75810000=13003000=
|
|
IOT; 75815000=13003000=
|
|
BEGIN 75820000=13004000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%75822000
|
|
PROCEDURE GET7(ACCUM, AX, RESULT); 75825000=13005000=
|
|
VALUE 75825100
|
|
AX; 75825200
|
|
ARRAY 75825300
|
|
ACCUM[0]; 75825400
|
|
REAL 75825500
|
|
AX, RESULT; 75825600
|
|
BEGIN 75830000=13006000=
|
|
STREAMLOCALS; 75830100
|
|
REAL 75835000=13007000=
|
|
T, 75835100
|
|
T1; 75835200
|
|
LABEL 75840000=13007000=
|
|
EXIT; 75845000=13007000=
|
|
75845100
|
|
STREAMSETSI(ACCUM, AX); 75850000=13008000=
|
|
STREAMSKIPSI(+2); 75855000=13008000=
|
|
STREAMSETLOCDI(T); 75860000=13008000=
|
|
STREAMSKIPDI(+7); 75865000=13008000=
|
|
STREAMTRANSFERCHR(1); 75870000=13009000=
|
|
T:= STREAMTEMPD[0]; 75870100
|
|
T1:= STREAMGETSI; 75875000=13009000=
|
|
STREAMSETLOCSI(T); 75880000=13009000=
|
|
STREAMSKIPSI(+7); 75885000=13009000=
|
|
STREAMSETLOCDI(RESULT); 75890000=13010000=
|
|
STREAMTRANSFERLIT(8, 6"0 "); 75895000=13010000=
|
|
STREAMSKIPDI(-7); 75900000=13010000=
|
|
IF STREAMSCGEQ(6"0") THEN 75905000=13012000=
|
|
IF STREAMSCLSS(6"8") THEN 75910000=13013000=
|
|
BEGIN 75915000=13014000=
|
|
STREAMSETSI(ACCUM, T1); 75920000=13015000=
|
|
STREAMTRANSFERCHR(T); 75925000=13015000=
|
|
GO TO EXIT 75930000=13016000=
|
|
END; 75935000=13016000=
|
|
75939000
|
|
STREAMSETSI(ACCUM, T1); 75940000=13017000=
|
|
STREAMTRANSFERCHR(7); 75945000=13017000=
|
|
EXIT: 75950000=13019000=
|
|
RESULT:= STREAMTEMPD[0]; 75950100
|
|
END; 75955000=13019000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%75956000
|
|
PROCEDURE ENTERID 75960000=13020000=
|
|
(IDARRAY, IDLOC, FILENO, TYPE, MULFID, FILID, INFO, FILID1, N); 75965000=13020000=
|
|
VALUE 75970000=13021000=
|
|
FILENO, TYPE, MULFID, FILID, FILID1, N; 75975000=13021000=
|
|
ARRAY 75975100
|
|
IDARRAY, INFO[0]; 75975200
|
|
REAL 75975300
|
|
IDLOC, FILENO, TYPE, MULFID, FILID, FILID1, N; 75975400
|
|
BEGIN 76000000=13022000=
|
|
STREAMLOCALS; 76000100
|
|
STREAMSETDI(IDARRAY, IDLOC); 76005000=13023000=
|
|
STREAMSETLOCSI(FILENO); 76020000=13024000=
|
|
STREAMSKIPSI(+6); 76025000=13024000=
|
|
STREAMTRANSFERCHR(2); 76030000=13025000=
|
|
STREAMSETLOCSI(TYPE); 76035000=13025000=
|
|
STREAMSKIPSI(+7); 76040000=13026000=
|
|
STREAMTRANSFERCHR(1); 76045000=13026000=
|
|
STREAMSETLOCSI(MULFID); 76050000=13027000=
|
|
STREAMSKIPSI(+1); 76055000=13027000=
|
|
STREAMTRANSFERCHR(7); 76060000=13028000=
|
|
STREAMSETLOCSI(FILID); 76065000=13029000=
|
|
STREAMSKIPSI(+1); 76070000=13029000=
|
|
STREAMTRANSFERCHR(7); 76075000=13030000=
|
|
STREAMSETLOCSI(N); 76080000=13031000=
|
|
STREAMSKIPSI(+7); 76085000=13031000=
|
|
STREAMTRANSFERCHR(1); 76090000=13032000=
|
|
STREAMSETSI(INFO, FILID1); 76095000=13033000=
|
|
STREAMSKIPSI(+3); 76100000=13033000=
|
|
STREAMTRANSFERCHR(N); 76105000=13034000=
|
|
IDLOC:= STREAMGETDI; 76110000=13034000=
|
|
END; 76140000=13038000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%76142000
|
|
REAL 76145000=13039000=
|
|
MULFID, 76150000=13039000=
|
|
FILID, 76155000=13039000=
|
|
TYPE, 76160000=13039000=
|
|
M, 76165000=13039000=
|
|
K; 76170000=13039000=
|
|
DEFINE 76175000=13039400=
|
|
CALL5 = EMITL(0); 76180000=13039400=
|
|
EMITL(IOT); 76185000=13039400=
|
|
EMITL(8); 76190000=13039400=
|
|
EMITV(5) #; 76195000=13039400=
|
|
REAL 76200000=13039450=
|
|
SAVADDRSF; 76205000=13039450=
|
|
REAL 76210000=13039500=
|
|
ACCUM1; 76215000=13039500=
|
|
INTEGER 76220000=13039550=
|
|
CURRENT, 76225000=13039550=
|
|
IOTEMP, 76230000=13039550=
|
|
IOTEMPO; 76235000=13039550=
|
|
LABEL 76240000=13040000=
|
|
START; 76245000=13040000=
|
|
JUMPCHKX; 76250000=13041000=
|
|
IF G:= GTA1[J:= J-1] = FILEV THEN 76255000=13043000=
|
|
BEGIN 76260000=13044000=
|
|
IF G:= GTA1[J:= J-1] = SWITCHV THEN 76265000=13046000=
|
|
BEGIN 76270000=13047000=
|
|
STOPENTRY:= NOT SPECTOG; 76275000=13048000=
|
|
ENTRY(SUPERFILEID); 76280000=13049000=
|
|
IF SPECTOG THEN 76285000=13050000=
|
|
GO TO START; 76290000=13050000=
|
|
IF ELCLASS ^= ASSIGNOP THEN 76295000=13052000=
|
|
FLAG(34); 76300000=13052000=
|
|
EMITO(MKS); 76305000=13053000=
|
|
CHECKDISJOINT(ADDRSF); 76310000=13054000=
|
|
G:= L; 76315000=13055000=
|
|
L:= L+1; 76320000=13055000=
|
|
EMITL(1); 76325000=13056000=
|
|
EMITL(1); 76330000=13057000=
|
|
EMITL(1); 76335000=13058000=
|
|
EMITV(5); 76340000=13059000=
|
|
J:= -1; 76345000=13061000=
|
|
STOPENTRY:= FALSE; 76350000=13061000=
|
|
DO BEGIN 76355000=13063000=
|
|
IF STEPI ^= FILEID % 76360000=13064000=
|
|
THEN 76365000=13065000=
|
|
FLAG(35); 76370000=13065000=
|
|
PASSFILE; 76375000=13066000=
|
|
EMITL(J:= J+1); 76380000=13067000=
|
|
EMITN(ADDRSF); 76385000=13068000=
|
|
EMITO(STD); 76390000=13069000=
|
|
END 76395000=13071000=
|
|
UNTIL ELCLASS ^= COMMA; 76400000=13071000=
|
|
GT2:= L; 76405000=13072000=
|
|
L:= G; 76410000=13072000=
|
|
EMITL(J+1); 76415000=13072000=
|
|
L:= GT2; 76420000=13072000=
|
|
GO TO START 76425000=13073000=
|
|
END; 76430000=13073000=
|
|
I:= I-1; 76435000=13074000=
|
|
M:= 1; 76440000=13074000=
|
|
IF G = ALFAV THEN 76445000=13076000=
|
|
M:= 0 76450000=13077000=
|
|
ELSE 76455000=13077000=
|
|
J:= J+1; 76460000=13077000=
|
|
K:= J; 76465000=13077000=
|
|
STOPENTRY:= NOT SPECTOG; 76470000=13077000=
|
|
DO BEGIN 76475000=13079000=
|
|
STOPDEFINE:= TRUE; 76480000=13079500=
|
|
STEPIT; 76485000=13080000=
|
|
J:= K; 76490000=13080000=
|
|
P2:= P3:= P4:= FALSE; 76495000=13080000=
|
|
GTA1[0]:= 0; 76500000=13080000=
|
|
GET7(ACCUM, 1, FILID); 76505000=13080000=
|
|
MULFID:= 0; 76510000=13081000=
|
|
TYPE:= 2; 76515000=13081000=
|
|
ENTER(FILEID); 76520000=13081000=
|
|
SAVADDRSF:= ADDRSF; 76525000=13081500=
|
|
IF SPECTOG THEN 76530000=13082000=
|
|
GO TO START; 76535000=13082000=
|
|
EMITO(MKS); 76540000=13082500=
|
|
EMITL(0); 76545000=13082500=
|
|
EMITL(0); 76550000=13082500=
|
|
IF ELCLASS = LITNO THEN 76555000=13084000=
|
|
BEGIN 76560000=13085000=
|
|
TYPE:= ELBAT[I].ADDRESS; 76565000=13086000=
|
|
STEPIT 76570000=13088000=
|
|
END; 76575000=13088000=
|
|
IF ELCLASS <= IDMAX THEN 76580000=13088010=
|
|
BEGIN 76585000=13088020=
|
|
% TO VOID A CARD 76590000=13088025=
|
|
IF ACCUM1:= ACCUM[1] = 6"5PRINT" THEN 76595000=13088030=
|
|
TYPE:= 1 76600000=13088030=
|
|
ELSE 76605000=13088030=
|
|
IF ACCUM1 = 6"6REMOT" THEN 76610000=13088035=
|
|
TYPE:= 19 76615000=13088035=
|
|
ELSE 76620000=13088035=
|
|
IF ACCUM1 = 6"5PUNCH" THEN 76625000=13088040=
|
|
TYPE:= 0 76630000=13088040=
|
|
ELSE 76635000=13088040=
|
|
IF ACCUM1 = 6"4DISK0" THEN 76640000=13088050=
|
|
BEGIN 76645000=13088050=
|
|
STOPDEFINE:= TRUE; 76650000=13088050=
|
|
TYPE:= 12; 76655000=13088060=
|
|
IF STEPI <= IDMAX THEN 76660000=13088060=
|
|
BEGIN 76665000=13088060=
|
|
IF ACCUM1:= ACCUM[1] ^= 6"6SERIA" THEN 76670000=13088070=
|
|
BEGIN 76675000=13088070=
|
|
IF ACCUM1 = 6"6RANDO" THEN 76680000=13088070=
|
|
TYPE:= TYPE-2 76685000=13088075=
|
|
ELSE 76690000=13088075=
|
|
IF ACCUM1 = 6"6UPDAT" THEN 76695000=13088075=
|
|
TYPE:= TYPE+1 76700000=13088080=
|
|
ELSE 76705000=13088080=
|
|
IF ACCUM1 = 6"7PROTE" THEN 76710000=13088082=
|
|
TYPE:= 26 76715000=13088082=
|
|
ELSE 76720000=13088082=
|
|
FLAG(43); 76725000=13088085=
|
|
END; 76730000=13088085=
|
|
STEPIT; 76735000=13088085=
|
|
END; 76740000=13088085=
|
|
IF ELCLASS = LFTBRKET THEN 76745000=13088085=
|
|
BEGIN 76750000=13088090=
|
|
STEPIT; 76755000=13088090=
|
|
L:= L-2; 76760000=13088090=
|
|
AEXP; 76765000=13088090=
|
|
IF ELCLASS = COLON THEN 76770000=13088090=
|
|
BEGIN 76775000=13088090=
|
|
STEPIT; 76780000=13088100=
|
|
AEXP 76785000=13088100=
|
|
END 76790000=13088100=
|
|
ELSE 76795000=13088100=
|
|
FLAG(30); 76800000=13088100=
|
|
IF ELCLASS ^= RTBRKET THEN 76805000=13088105=
|
|
FLAG(44); 76810000=13088105=
|
|
END 76815000=13088105=
|
|
ELSE 76820000=13088105=
|
|
I:= I-1; 76825000=13088105=
|
|
END; 76830000=13088110=
|
|
STEPIT 76835000=13088130=
|
|
END; 76840000=13088130=
|
|
IF ELCLASS = STRNGCON THEN 76845000=13089000=
|
|
BEGIN 76850000=13090000=
|
|
GET7(ACCUM, 1, G); 76855000=13091000=
|
|
IF STEPI = STRNGCON THEN 76860000=13093000=
|
|
BEGIN 76865000=13094000=
|
|
GET7(ACCUM, 1, FILID); 76870000=13095000=
|
|
STEPIT; 76875000=13096000=
|
|
MULFID:= G 76880000=13098000=
|
|
END 76885000=13100000=
|
|
ELSE 76890000=13100000=
|
|
FILID:= G; 76895000=13100000=
|
|
END; 76900000=13101000=
|
|
IF 127-IDLOC.[14:15] < (26+KOUNT).[6:4] THEN 76905000=13101200=
|
|
FLAG(040) % PPB SIZE EXCEEDED 76910000=13101200=
|
|
ELSE 76915000=13101200=
|
|
ENTERID(IDARRAY, IDLOC, FILENO, TYPE, MULFID, FILID, 76920000=13103000=
|
|
INFO[(LASTINFO+1).LINKR,*], (LASTINFO+1).LINKC, KOUNT); 76925000=13103000=
|
|
IF ELCLASS ^= LEFTPAREN THEN 76930000=13105000=
|
|
FLAG(26); 76935000=13105000=
|
|
ARRAYFLAG:= BOOLEAN(3); 76940000=13106000=
|
|
EMITL(REAL(NOT (P2 OR P3)).[1:2]); 76945000=13108000=
|
|
EMITL(FILENO); 76950000=13109000=
|
|
FILENO:= FILENO+1; 76955000=13109000=
|
|
CHECKDISJOINT(TAKE(LASTINFO).ADDRESS); 76960000=13110000=
|
|
STEPIT; 76965000=13111000=
|
|
AEXP; 76970000=13111000=
|
|
EMITL(M); 76975000=13111000=
|
|
COMMENT GUESS AT THE NO. OF BUFFERS DECLARED; 76980000=13112000=
|
|
IF(IOTEMP:= GET(L-2)).[1:2] = 0 THEN 76985000=13113000=
|
|
CURRENT:= IOTEMP DIV 4 76990000=13114000=
|
|
ELSE 76995000=13114000=
|
|
CURRENT:= 2; 77000000=13114000=
|
|
IF ELCLASS ^= COMMA THEN 77005000=13145000=
|
|
BEGIN 77010000=13145000=
|
|
FLAG(27); 77015000=13145000=
|
|
GO TO START 77020000=13145000=
|
|
END 77025000=13147000=
|
|
ELSE 77030000=13147000=
|
|
BEGIN 77035000=13147000=
|
|
STEPIT; 77040000=13148000=
|
|
AEXP; 77045000=13148000=
|
|
; 77050000=13148100=
|
|
IF(IOTEMP:= GET(L-1)).[1:2] = 0 THEN 77055000=13148200=
|
|
IOTEMP:= IOTEMP DIV 4 77060000=13148300=
|
|
ELSE 77065000=13148300=
|
|
IOTEMP:= 256; 77070000=13148300=
|
|
IF ELCLASS ^= COMMA THEN 77075000=13150000=
|
|
BEGIN 77080000=13151000=
|
|
EMITL(0); 77085000=13152000=
|
|
CALL5; 77090000=13153000=
|
|
END 77095000=13156000=
|
|
ELSE 77100000=13156000=
|
|
BEGIN 77105000=13156000=
|
|
IF GT1:= FILEATTRIBUTEINDX(FALSE) = 0 THEN 77110000=13157000=
|
|
BEGIN 77115000=13157010=
|
|
AEXP; 77120000=13157010=
|
|
IF(IOTEMPO:= GET(L-1)).[1:2] = 0 THEN 77125000=13157020=
|
|
IF IOTEMPO DIV 4 > IOTEMP THEN 77130000=13157030=
|
|
IOTEMP:= IOTEMPO DIV 4; 77135000=13157040=
|
|
CALL5; 77140000=13157040=
|
|
END 77145000=13158000=
|
|
ELSE 77150000=13158000=
|
|
BEGIN 77155000=13158000=
|
|
EMITL(0); 77160000=13159000=
|
|
CALL5; 77165000=13159000=
|
|
EMITO(MKS); 77170000=13159000=
|
|
EMITL(5); 77175000=13159000=
|
|
EMITN(SAVADDRSF); 77180000=13160000=
|
|
GT1:= FILEATTRIBUTEHANDLER(FIO); 77185000=13160000=
|
|
END; 77190000=13161000=
|
|
WHILE ELCLASS = COMMA DO 77195000=13162000=
|
|
IF GT1:= FILEATTRIBUTEINDX(TRUE) = 0 THEN 77200000=13163000=
|
|
BEGIN 77205000=13164000=
|
|
ERR(291); 77210000=13164000=
|
|
GO START 77215000=13164000=
|
|
END 77220000=13165000=
|
|
ELSE 77225000=13165000=
|
|
BEGIN 77230000=13165000=
|
|
EMITO(MKS); 77235000=13166000=
|
|
EMITL(5); 77240000=13166000=
|
|
EMITN(SAVADDRSF); 77245000=13166000=
|
|
GT1:= FILEATTRIBUTEHANDLER(FIO); 77250000=13167000=
|
|
END; 77255000=13168000=
|
|
END; 77260000=13169000=
|
|
END; 77265000=13170000=
|
|
ARRAYFLAG:= FALSE; 77270000=13181000=
|
|
IF ELCLASS ^= RTPAREN THEN 77275000=13182000=
|
|
FLAG(29); 77280000=13182000=
|
|
COMMENT TOTAL UP THE BUFFER REQ. PER FILE DECLARATION; 77285000=13183000=
|
|
IOBUFFSIZE:= IOBUFFSIZE+50+(CURRENT*IOTEMP); 77290000=13184000=
|
|
% VOID 77295000=13185000=
|
|
% VOID 77300000=13186000=
|
|
END 77305000=13188000=
|
|
UNTIL STEPI ^= COMMA; 77310000=13188000=
|
|
STOPENTRY:= FALSE; 77315000=13189000=
|
|
END 77320000=13191000=
|
|
ELSE 77325000=13191000=
|
|
BEGIN 77330000=13191000=
|
|
IF G ^= FORMATV THEN 77335000=13192000=
|
|
FLAG(33) 77340000=13192000=
|
|
ELSE 77345000=13192000=
|
|
IF SPECTOG THEN 77350000=13193000=
|
|
ENTRY(FRMTID+REAL(GTA1[J-1] = SWITCHV)) 77355000=13193000=
|
|
ELSE 77360000=13193000=
|
|
FORMATGEN 77365000=13194000=
|
|
END; 77370000=13194000=
|
|
START: 77375000=13196000=
|
|
END; 77380000=13196000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%77385000=13196000=
|
|
PROCEDURE HANDLESWLIST; 77390000=13196300=
|
|
BEGIN 77395000=13196310=
|
|
LABEL 77400000=13196320=
|
|
OVER; 77405000=13196320=
|
|
JUMPCHKX; 77410000=13196340=
|
|
STOPENTRY:= NOT SPECTOG; 77415000=13196350=
|
|
ENTRY(SUPERLISTID); 77420000=13196360=
|
|
IF SPECTOG THEN 77425000=13196370=
|
|
GO TO OVER; 77430000=13196370=
|
|
IF ELCLASS ^= ASSIGNOP THEN 77435000=13196380=
|
|
FLAG(41); 77440000=13196380=
|
|
COMMENT MISSING :=; 77445000=13196390=
|
|
EMITO(MKS); 77450000=13196400=
|
|
CHECKDISJOINT(ADDRSF); 77455000=13196410=
|
|
G:= L; 77460000=13196420=
|
|
L:= L+1; 77465000=13196420=
|
|
EMITL(1); 77470000=13196430=
|
|
EMITL(1); 77475000=13196440=
|
|
EMITL(1); 77480000=13196450=
|
|
EMITV(5); 77485000=13196460=
|
|
COMMENT CREATE AN ARRAY TO HOLD 77490000=13196460=
|
|
LIST DESCRIPTORS FOR SWITCH LIST; 77495000=13196470=
|
|
COMMENT USED TO USE EMITN(XITR), DOESN"T ANYMORE; 77500000=13196480=
|
|
J:= -1; 77505000=13196490=
|
|
STOPENTRY:= FALSE; 77510000=13196490=
|
|
DO BEGIN 77515000=13196510=
|
|
IF STEPI ^= LISTID AND ELCLASS ^= SUPERLISTID THEN 77520000=13196530=
|
|
BEGIN 77525000=13196530=
|
|
ERR(42); 77530000=13196530=
|
|
GO TO OVER 77535000=13196530=
|
|
END; 77540000=13196530=
|
|
PASSLIST; 77545000=13196540=
|
|
EMITL(J:= J+1); 77550000=13196550=
|
|
EMITN(ADDRSF); 77555000=13196560=
|
|
EMITO(STD); 77560000=13196570=
|
|
COMMENT STORE LIST DESC IN ARRAY;77565000=13196570=
|
|
END 77570000=13196590=
|
|
UNTIL ELCLASS ^= COMMA; 77575000=13196590=
|
|
GT2:= L; 77580000=13196600=
|
|
L:= G; 77585000=13196600=
|
|
EMITL(J+1); 77590000=13196600=
|
|
L:= GT2; 77595000=13196600=
|
|
OVER: 77600000=13196610=
|
|
END OF HANDLESWLIST; 77605000=13196610=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%77610000=13196610=
|
|
PROCEDURE SCATTERELBAT; 77615000=13197000=
|
|
BEGIN 77620000=13198000=
|
|
REAL 77625000=13199000=
|
|
T; 77630000=13199000=
|
|
T:= ELBAT[I]; 77635000=13200000=
|
|
KLASSF:= T.CLASS; 77640000=13201000=
|
|
FORMALF:= BOOLEAN(T.FORMAL); 77645000=13202000=
|
|
VONF:= BOOLEAN(T.VO); 77650000=13203000=
|
|
LEVELF:= T.LVL; 77655000=13204000=
|
|
ADDRSF:= T.ADDRESS; 77660000=13205000=
|
|
INCRF:= T.INCR; 77665000=13206000=
|
|
LINKF:= T.LINK; 77670000=13207000=
|
|
END SCATTERELBAT; 77675000=13208000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%77680000=13208000=
|
|
PROCEDURE CHKSOB; 77685000=13209000=
|
|
IF GTA1[J:= J-1] ^= 0 THEN 77690000=13210000=
|
|
FLAG(23); 77695000=13210000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%77700000=13210000=
|
|
DEFINE 77705000=13211000=
|
|
SUBOP = 48 #, 77710000=13212000=
|
|
ADDC = 532480 #, 77715000=13213000=
|
|
SUBC = 1581056 #, 77720000=13214000=
|
|
EMITSTORE = EMITPAIR #; 77725000=13214000=
|
|
PROCEDURE PURGE(STOPPER); 77730000=13215000=
|
|
VALUE 77735000=13216000=
|
|
STOPPER; 77740000=13216000=
|
|
REAL 77745000=13217000=
|
|
STOPPER; 77750000=13217000=
|
|
BEGIN 77755000=13218000=
|
|
INTEGER 77760000=13219000=
|
|
POINTAH; 77765000=13219000=
|
|
LABEL 77770000=13220000=
|
|
RECOV; 77775000=13220000=
|
|
DEFINE 77780000=13220000=
|
|
ELCLASS = KLASSF #; 77785000=13220000=
|
|
REAL 77790000=13221000=
|
|
J, 77795000=13221000=
|
|
N, 77800000=13221000=
|
|
OCR, 77805000=13221000=
|
|
TL, 77810000=13221000=
|
|
ADD; 77815000=13221000=
|
|
POINTAH:= LASTINFO; 77820000=13222000=
|
|
WHILE POINTAH >= STOPPER DO 77825000=13224000=
|
|
BEGIN 77830000=13225000=
|
|
IF ELCLASS:= (GT1:= TAKE(POINTAH)).CLASS = NONLITNO THEN 77835000=13227000=
|
|
BEGIN 77840000=13227000=
|
|
NCII:= NCII-1; 77845000=13228000=
|
|
EMITNUM(TAKE(POINTAH+1)); 77850000=13229000=
|
|
EMITSTORE(MAXSTACK, STD); 77855000=13230000=
|
|
MAXSTACK:= (G:= MAXSTACK)+1; 77860000=13231000=
|
|
J:= L; 77865000=13232000=
|
|
L:= GT1.LINK; 77870000=13232000=
|
|
DO BEGIN 77875000=13234000=
|
|
GT4:= GET(L); 77880000=13235000=
|
|
EMITV(G) 77885000=13237000=
|
|
END 77890000=13238000=
|
|
UNTIL (L:= GT4) = 4095; 77895000=13238000=
|
|
L:= J; 77900000=13239000=
|
|
POINTAH:= POINTAH-GT1.INCR 77905000=13241000=
|
|
END 77910000=13243000=
|
|
ELSE 77915000=13243000=
|
|
BEGIN 77920000=13243000=
|
|
IF NOT BOOLEAN(GT1.FORMAL) THEN 77925000=13245000=
|
|
BEGIN 77930000=13245000=
|
|
IF ELCLASS = LABELID THEN 77935000=13247000=
|
|
BEGIN 77940000=13247000=
|
|
ADD:= GT1.ADDRESS; 77945000=13248000=
|
|
IF NOT BOOLEAN(OCR:= TAKE(GIT(POINTAH))).[46:1] THEN 77950000=13250000=
|
|
IF OCR.[11:12] ^= 0 OR ADD ^= 0 THEN 77955000=13251000=
|
|
BEGIN 77960000=13251000=
|
|
GT1:= 160; 77965000=13251000=
|
|
GO TO RECOV 77970000=13251000=
|
|
END; 77975000=13251000=
|
|
IF ADD ^= 0 THEN 77980000=13252000=
|
|
GT1:= PROGDESCBLDR(2, OCR, ADD) 77985000=13253000=
|
|
END 77990000=13253000=
|
|
ELSE 77995000=13253000=
|
|
IF ELCLASS = SWITCHID THEN 78000000=13254000=
|
|
BEGIN 78005000=13254000=
|
|
IF TAKE(POINTAH+1) < 0 THEN 78010000=13256000=
|
|
BEGIN 78015000=13256000=
|
|
GT1:= 162; 78020000=13256000=
|
|
GO TO RECOV 78025000=13256000=
|
|
END; 78030000=13256000=
|
|
OCR:= (J:= TAKE(GIT(POINTAH))).[23:12]; 78035000=13257000=
|
|
N:= GET((J:= J.[11:12])+4); 78040000=13258000=
|
|
TL:= L; 78045000=13258000=
|
|
IF ADD:= GT1.ADDRESS ^= 0 THEN 78050000=13260000=
|
|
BEGIN 78055000=13260000=
|
|
GT5:= PROGDESCBLDR(0, J, ADD); 78060000=13261000=
|
|
IF OCR ^= 0 THEN 78065000=13263000=
|
|
BEGIN 78070000=13263000=
|
|
L:= OCR-2; 78075000=13263000=
|
|
CALLSWITCH(POINTAH); 78080000=13263000=
|
|
EMITO(BFW); 78085000=13263000=
|
|
END; 78090000=13263000=
|
|
L:= J+11; 78095000=13264000=
|
|
EMITL(15); 78100000=13264000=
|
|
EMITO(RTS); 78105000=13264000=
|
|
FOR J:= 4 STEP 4 UNTIL N DO 78110000=13266000=
|
|
BEGIN 78115000=13266000=
|
|
EMITL(GNAT(GET(L)*4096+GET(L+1))); 78120000=13267000=
|
|
EMITO(RTS) 78125000=13268000=
|
|
END 78130000=13269000=
|
|
END 78135000=13269000=
|
|
ELSE 78140000=13269000=
|
|
BEGIN 78145000=13269000=
|
|
L:= J+13; 78150000=13270000=
|
|
FOR J:= 4 STEP 4 UNTIL N DO 78155000=13272000=
|
|
BEGIN 78160000=13272000=
|
|
GT1:= GET(L)*4096+GET(L+1); 78165000=13273000=
|
|
GOGEN(GT1, BFW) 78170000=13274000=
|
|
END; 78175000=13274000=
|
|
END; 78180000=13274000=
|
|
L:= TL 78185000=13277000=
|
|
END 78190000=13278000=
|
|
ELSE 78195000=13278000=
|
|
IF ELCLASS >= PROCID AND ELCLASS <= INTPROCID THEN 78200000=13279000=
|
|
IF TAKE(POINTAH+1) < 0 THEN 78205000=13280000=
|
|
BEGIN 78210000=13280000=
|
|
GT1:= 161; 78215000=13280000=
|
|
RECOV: 78220000=13281000=
|
|
MOVE(9, INFO[POINTAH.LINKR,*], POINTAH.LINKC, ACCUM, 0); 78225000=13281000=
|
|
Q:= ACCUM[1]; 78230000=13282000=
|
|
FLAG(GT1); 78235000=13282000=
|
|
ERRORTOG:= TRUE 78240000=13282000=
|
|
END 78245000=13283000=
|
|
END; 78250000=13283000=
|
|
XREFDUMP(POINTAH); % DUMP XREF INFO 78255000=13283500=
|
|
GT2:= TAKE(POINTAH+1); 78260000=13284000=
|
|
GT3:= GT2.PURPT; 78265000=13285000=
|
|
STACKHEAD[(0 & GT2[35:35:36]) MOD 125]:= TAKE(POINTAH).LINK; 78270000=13286000=
|
|
POINTAH:= POINTAH-GT3 78275000=13288000=
|
|
END 78280000=13289000=
|
|
END; 78285000=13289000=
|
|
LASTINFO:= POINTAH; 78290000=13290000=
|
|
NEXTINFO:= STOPPER 78295000=13292000=
|
|
END; 78300000=13292000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%78305000=13292000=
|
|
PROCEDURE E; 78310000=13293000=
|
|
78315000=13294000=
|
|
COMMENT 78320000=13294000=
|
|
E IS THE PROCEDURE WHICH PLACES AN ENTRY IN INFO AND 78325000=13295000=
|
|
HOOKS IT INTO STACKHEAD. THE PREVIOUS STACKHEAD LINK 78330000=13296000=
|
|
IS SAVED IN THE LINK OF THE ELBAT WORD IN THE NEW ENTRY 78335000=13297000=
|
|
E PREVENTS AN ENTRY FROM OVERFLOWING A ROW,STARTING AT THE 78340000=13298000=
|
|
BEGINNING OF THE NEXT ROW IF NECESSARY ;78345000=13299000=
|
|
BEGIN 78350000=13300000=
|
|
REAL 78355000=13301000=
|
|
WORDCOUNT, 78360000=13301000=
|
|
RINX; 78365000=13301000=
|
|
IF RINX:= (NEXTINFO+WORDCOUNT:= (COUNT+18) DIV 8).LINKR ^= NEXTINFO.78370000=13303000=
|
|
LINKR 78375000=13304000=
|
|
THEN 78380000=13304000=
|
|
BEGIN 78385000=13304000=
|
|
PUT(0 & (RINX*256-NEXTINFO)[20:7:8], NEXTINFO); 78390000=13304000=
|
|
NEXTINFO:= 256*RINX 78395000=13305000=
|
|
END; 78400000=13305000=
|
|
IF SPECTOG THEN 78405000=13305100=
|
|
IF NOT MACROID THEN 78410000=13305200=
|
|
UNHOOK; 78415000=13305300=
|
|
KOUNT:= COUNT; 78420000=13306000=
|
|
ACCUM[0].INCR:= WORDCOUNT; 78425000=13307000=
|
|
ACCUM[0].LINK:= STACKHEAD[SCRAM]; 78430000=13308000=
|
|
STACKHEAD[SCRAM]:= NEXTINFO; 78435000=13308000=
|
|
ACCUM[1].PURPT:= NEXTINFO-LASTINFO; 78440000=13309000=
|
|
MOVE(WORDCOUNT, ACCUM, 0, INFO[NEXTINFO.LINKR,*], NEXTINFO.LINKC); 78445000=13310000=
|
|
IF XREF THEN % MAKE DECLARATION REFERENCE 78450000=13310050=
|
|
IF(ACCUM[0].CLASS ^= DEFINEDID OR NOT BOOLEAN(ACCUM[0].FORMAL)) 78455000=13310080=
|
|
THEN % NOT DEFINE PARAMETER 78460000=13310080=
|
|
BEGIN 78465000=13310100=
|
|
XREFINFO[NEXTINFO]:= 78470000=13310300=
|
|
IF SPECTOG THEN 78475000=13310300=
|
|
XREFINFO[ELBAT[I]] 78480000=13310400=
|
|
ELSE 78485000=13310400=
|
|
((XLUN:= XLUN+1) & SGNO SEGNOF); 78490000=13310450=
|
|
IF SPECTOG THEN % JUST GO BACK AND FIX UP XREF ENTRY 78495000=13310500=
|
|
XMARK(DECLREF) 78500000=13310550=
|
|
ELSE 78505000=13310550=
|
|
XREFIT(NEXTINFO, CARDNUMBER, IF PTOG AND NOT STREAMTOG THEN 78510000=13310580=
|
|
NORMALREF ELSE DECLREF); 78515000=13310580=
|
|
END 78520000=13310700=
|
|
ELSE % DEFINE PARAMETERS - DONT CROSS REF. 78525000=13310700=
|
|
XREFINFO[NEXTINFO]:= 0 78530000=13310800=
|
|
ELSE 78535000=13310800=
|
|
IF DEFINING.[46:1] THEN % WE ARE DOING XREFING 78540000=13310900=
|
|
XREFINFO[NEXTINFO]:= 0; 78545000=13310950=
|
|
LASTINFO:= NEXTINFO; 78550000=13311000=
|
|
IF NEXTINFO:= NEXTINFO+WORDCOUNT >= 8192 THEN 78555000=13312000=
|
|
BEGIN 78560000=13312500=
|
|
FLAG(199); 78565000=13312500=
|
|
GO TO ENDOFITALL 78570000=13312500=
|
|
END; 78575000=13312500=
|
|
END; 78580000=13313000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%78585000=13313000=
|
|
PROCEDURE ENTRY(TYPE); 78590000=13314000=
|
|
VALUE 78595000=13315000=
|
|
TYPE; 78600000=13315000=
|
|
REAL 78605000=13316000=
|
|
TYPE; 78610000=13316000=
|
|
78615000=13317000=
|
|
COMMENT 78620000=13317000=
|
|
ENTRY ASSUMES THAT I IS POINTING AT AN IDENTIFIER WHICH 78625000=13318000=
|
|
IS BEING DECLARED AND MAKES UP THE ELBAT ENTRY FOR IT 78630000=13319000=
|
|
ACCORD TO TYPE .IF THE ENTRY IS AN ARRAY AND NOT 78635000=13320000=
|
|
A SPECIFICATION THEN A DESCRIPTOR IS PLACED IN THE STACK 78640000=13321000=
|
|
FOR THE UPCOMING COMMUNICATE TO GET STORAGE FOR THE ARRAY(S) ;78645000=13322000=
|
|
BEGIN 78650000=13323000=
|
|
BOOLEAN 78655000=13323010=
|
|
SVTOG; % 78660000=13323010=
|
|
J:= 0; 78665000=13324000=
|
|
I:= I-1; 78670000=13324000=
|
|
DO BEGIN 78675000=13326000=
|
|
STOPDEFINE:= TRUE; 78680000=13327000=
|
|
STEPIT; 78685000=13327000=
|
|
SCATTERELBAT; 78690000=13327000=
|
|
IF FORMALF:= SPECTOG THEN 78695000=13329000=
|
|
BEGIN 78700000=13330000=
|
|
IF TYPE <= INTARRAYID AND TYPE >= BOOARRAYID THEN % 78705000=13330550=
|
|
IF VONF THEN 78710000=13330600=
|
|
BEGIN 78715000=13330600=
|
|
SVTOG:= ERRORTOG; 78720000=13330600=
|
|
FLAG(15); % 78725000=13330600=
|
|
SPECTOG:= ERRORTOG:= SVTOG; 78730000=13330650=
|
|
END; % 78735000=13330650=
|
|
IF ELCLASS ^= SECRET THEN 78740000=13332000=
|
|
FLAG(002); 78745000=13332000=
|
|
BUP:= BUP+1 78750000=13334000=
|
|
END 78755000=13336000=
|
|
ELSE 78760000=13336000=
|
|
BEGIN 78765000=13336000=
|
|
IF ELCLASS > IDMAX AND ELCLASS <= FACTOP THEN 78770000=13338000=
|
|
FLAG(003); 78775000=13338000=
|
|
IF ELCLASS = DEFINEDID THEN % CHECK IF NEW DECLARATION 78780000=13339000=
|
|
IF NOT(PTOG OR STREAMTOG) AND LINKF >= GLOBALNINFOO THEN 78785000=13339200=
|
|
FLAG(1) 78790000=13339300=
|
|
ELSE 78795000=13339300=
|
|
ELSE 78800000=13339500=
|
|
IF LEVELF = LEVEL THEN % DUPLICATE DECLARATION 78805000=13339500=
|
|
FLAG(1); 78810000=13340000=
|
|
VONF:= P2; 78815000=13341000=
|
|
IF((FORMALF:= PTOG) OR(STREAMTOG AND NOT STOPGSP)) AND NOT P278820000=13343000=
|
|
THEN 78825000=13343000=
|
|
ADDRSF:= PJ:= PJ+1 78830000=13344000=
|
|
ELSE 78835000=13344000=
|
|
IF STOPGSP THEN 78840000=13344000=
|
|
ADDRSF:= 0 78845000=13345000=
|
|
ELSE 78850000=13345000=
|
|
ADDRSF:= GETSPACE(P2, 1); % ID IN ACCUM[1]. 78855000=13345000=
|
|
IF TYPE <= INTARRAYID AND TYPE >= BOOARRAYID THEN 78860000=13347000=
|
|
IF P2 THEN 78865000=13347000=
|
|
BEGIN 78870000=13347000=
|
|
COMMENT OWN ARRAY; 78875000=13347000=
|
|
EMITL(ADDRSF); 78880000=13347500=
|
|
EMITN(10); 78885000=13347500=
|
|
END 78890000=13347520=
|
|
ELSE 78895000=13347520=
|
|
CHECKDISJOINT(ADDRSF); 78900000=13347520=
|
|
END; 78905000=13348000=
|
|
IF XREF AND NOT SPECTOG THEN % ERASE PREVIOUS XREF ENTRY. 78910000=13348100=
|
|
XREFPT:= XREFPT-REAL(ELBAT[I] ^= 0);% GET RID OF LAST CREF 78915000=13348200=
|
|
KLASSF:= TYPE; 78920000=13349000=
|
|
MAKEUPACCUM; 78925000=13349000=
|
|
E; 78930000=13349000=
|
|
J:= J+1; 78935000=13349000=
|
|
END 78940000=13351000=
|
|
UNTIL STEPI ^= COMMA OR STOPENTRY; 78945000=13351000=
|
|
GTA1[0]:= J 78950000=13352000=
|
|
END; 78955000=13352000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%78960000=13352000=
|
|
PROCEDURE UNHOOK; 78965000=13353000=
|
|
78970000=13354000=
|
|
COMMENT 78975000=13354000=
|
|
UNHOOK ASSUMES THAT THE WORD IN ELBAT[I] POINTS TO A PSUEDO ENTRY 78980000=13355000=
|
|
FOR APARAMETER.ITS JOB IS TO UNHOOK THAT FALSE ENTRY SO THAT 78985000=13356000=
|
|
E WILL WORK AS NORMAL. ;78990000=13357000=
|
|
BEGIN 78995000=13358000=
|
|
REAL 79000000=13359000=
|
|
LINKT, 79005000=13359000=
|
|
A, 79010000=13359000=
|
|
LINKP; 79015000=13359000=
|
|
LABEL 79020000=13360000=
|
|
L; 79025000=13360000=
|
|
LINKT:= STACKHEAD[SCRAM]; 79030000=13361000=
|
|
LINKP:= ELBAT[I].LINK; 79035000=13361000=
|
|
IF LINKT = LINKP THEN 79040000=13362000=
|
|
STACKHEAD[SCRAM]:= TAKE(LINKT).LINK 79045000=13363000=
|
|
ELSE 79050000=13363000=
|
|
L: IF A:= TAKE(LINKT).LINK = LINKP THEN 79055000=13365000=
|
|
PUT((TAKE(LINKT)) & (TAKE(A))[12:12:13], LINKT) 79060000=13366000=
|
|
ELSE 79065000=13366000=
|
|
BEGIN 79070000=13366000=
|
|
LINKT:= A; 79075000=13366000=
|
|
GO TO L 79080000=13366000=
|
|
END; 79085000=13366000=
|
|
END; 79090000=13367000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%79095000=13367000=
|
|
PROCEDURE MAKEUPACCUM; 79100000=13368000=
|
|
BEGIN 79105000=13369000=
|
|
IF PTOG THEN 79110000=13371000=
|
|
GT1:= LEVELF 79115000=13371000=
|
|
ELSE 79120000=13371000=
|
|
GT1:= LEVEL; 79125000=13371000=
|
|
ACCUM[0]:= ABS(ELBAT[I] & KLASSF[45:6:7] & REAL(FORMALF)[38:0:1] & 79130000=13375000=
|
|
REAL(VONF)[37:0:1] & GT1[36:4:5] & ADDRSF[31:10:11]) 79135000=13375000=
|
|
END; 79140000=13375000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%79145000=13375000=
|
|
PROCEDURE ARRAE; 79150000=13376000=
|
|
79155000=13377000=
|
|
COMMENT 79160000=13377000=
|
|
ARRAE ENTERS INFO ABOUT ARRAYS AND THEIR LOWER BOUNDS. 79165000=13378000=
|
|
IT ALSO EMITS CODE TO COMMUNICATE WITH THE MCP TO OBTAIN 79170000=13379000=
|
|
STORAGE FOR THE ARRAY AT OBJECT TIME.SPECIAL ANALYSIS IS 79175000=13380000=
|
|
MADE TO GENERATE EFFICIENT CODE WHEN DETERMING THE SIZE OF 79180000=13381000=
|
|
EACH DIMENSION.FOLLOWING ARE A FEW EXAMPLES OF CODE EMITTED: 79185000=13382000=
|
|
ARRAY A[0:10], 79190000=13383000=
|
|
MKS (THIS MARKS STACK TO CUT BACK AFTER COM)79195000=13384000=
|
|
DESC A (THIS FORMS A DESCRITOR POINTING TO 79200000=13385000=
|
|
THE ADDRESS OF A) 79205000=13386000=
|
|
LITC 11 (SIZE OF ARRAY) 79210000=13387000=
|
|
LITC 1 (NUMBER OF DIMENSIONS) 79215000=13388000=
|
|
LITC 1 (NUMBER OF ARRAYS) 79220000=13389000=
|
|
LITC ARCOM (COMMUNICATE LITERAL FOR NON SAVE, 79225000=13390000=
|
|
NON OWN ARRAYS) 79230000=13391000=
|
|
COM (COMMUNICATE TO MCP TO GET STORAGE) 79235000=13392000=
|
|
DESC XITR (XITR JUST EXITS,THUS CUTTING BACK 79240000=13393000=
|
|
STACK) 79245000=13394000=
|
|
OWN ARRAY B,C[0:X,-1:10], 79250000=13395000=
|
|
MKS 79255000=13396000=
|
|
DESC B 79260000=13397000=
|
|
DESC C 79265000=13398000=
|
|
LITC 0 (LOWER BOUND MUST BE PASSED FOR OWN) 79270000=13399000=
|
|
OPDC X 79275000=13400000=
|
|
LITC JUNK (JUNK CELL) 79280000=13401000=
|
|
ISN (INTEGERIZE UPPER BOUND) 79285000=13402000=
|
|
LITC 1 (COMPUTE SIZE 79290000=13403000=
|
|
ADD OF DIMENSION 79295000=13404000=
|
|
LITC 1 (LOWER BOUND,SECOND DIMENSION) 79300000=13405000=
|
|
CHS 79305000=13406000=
|
|
LITC 12 (SIZE SECOND DIMENSION) 79310000=13407000=
|
|
LITC 2 (NUMBER DIMENSIONS) 79315000=13408000=
|
|
LITC 2 (NUMBER ARRAYS) 79320000=13409000=
|
|
LITC OWNCOM (OWN ARRAY COMMUNICATE) 79325000=13410000=
|
|
COM 79330000=13411000=
|
|
DESC XITR 79335000=13412000=
|
|
SAVE OWN ARRAY D,E,F[X:Y,M+N:T|V], 79340000=13413000=
|
|
MKS 79345000=13414000=
|
|
DESC D 79350000=13415000=
|
|
DESC E 79355000=13416000=
|
|
DESC F 79360000=13417000=
|
|
OPDC X 79365000=13418000=
|
|
LITC XT (CELL OBTAINED TO KEEP LOWER BOUND) 79370000=13419000=
|
|
ISN (PUT INTEGERIZED LOWER BOUND AWAY) 79375000=13420000=
|
|
DUP (MUST PASS LOWER BOUND FOR OWN) 79380000=13421000=
|
|
OPDC Y (INTEGERIZE 79385000=13422000=
|
|
LITC JUNK UPPER 79390000=13423000=
|
|
ISN BOUND) 79395000=13424000=
|
|
XCH (COMPUTE SIZE OF FIRST DIMENSION 79400000=13425000=
|
|
SUB UPPER 79405000=13426000=
|
|
LITC 1 -LOWER 79410000=13427000=
|
|
ADD +1) 79415000=13428000=
|
|
OPDC M (COMPUTER LOWER BOUND 79420000=13429000=
|
|
OPDC N SECOND DIM) 79425000=13430000=
|
|
ADD 79430000=13431000=
|
|
LITC MNT (GET CELL FOR SECOND LOWER BOUND) 79435000=13432000=
|
|
ISN (INTEGERIZE) 79440000=13433000=
|
|
DUP (PASS LOWER BOUND FOR OWN) 79445000=13434000=
|
|
OPDC T 79450000=13435000=
|
|
MUL V 79455000=13436000=
|
|
LITC JUNK (INTEGERIZE 79460000=13437000=
|
|
ISN UPPER) 79465000=13438000=
|
|
XCH (COMPUTE 79470000=13439000=
|
|
SUB SIZE 79475000=13440000=
|
|
LITC 1 79480000=13441000=
|
|
ADD ) 79485000=13442000=
|
|
LITC 2 (NUMBER DIMENSIONS) 79490000=13443000=
|
|
LITC 3 (NUMBER ARRAYS) 79495000=13444000=
|
|
LITC SAVON (SAVE OWN LITERAL FOR COM) 79500000=13445000=
|
|
COM 79505000=13446000=
|
|
DESC XITR ; 79510000=13447000=
|
|
BEGIN 79515000=13448000=
|
|
REAL 79520000=13449000=
|
|
T1, 79525000=13449000=
|
|
T2, 79530000=13449000=
|
|
T3, 79535000=13449000=
|
|
K, 79540000=13449000=
|
|
LBJ, 79545000=13449000=
|
|
ARPROGS, 79550000=13449000=
|
|
SAVEDIM, 79555000=13449000=
|
|
T, 79560000=13449000=
|
|
T4, 79565000=13449000=
|
|
SAVEINFO, 79570000=13449000=
|
|
SAVEINFO2; 79575000=13449000=
|
|
BOOLEAN 79580000=13450000=
|
|
LLITOG, 79585000=13450000=
|
|
ULITOG; 79590000=13450000=
|
|
REAL 79595000=13451000=
|
|
ADDCON; 79600000=13451000=
|
|
LABEL 79605000=13452000=
|
|
CSZ, 79610000=13452000=
|
|
BETA1, 79615000=13452000=
|
|
TWO, 79620000=13452000=
|
|
START, 79625000=13452000=
|
|
SLB, 79630000=13452000=
|
|
BETA2; 79635000=13452000=
|
|
ARRAYFLAG:= TRUE; 79640000=13452100=
|
|
TYPEV:= REALARRAYID; 79645000=13453000=
|
|
IF T1:= GTA1[J:= J-1] = 0 THEN 79650000=13454000=
|
|
J:= J+1 79655000=13455000=
|
|
ELSE 79660000=13455000=
|
|
IF T1 = OWNV THEN 79665000=13456000=
|
|
BEGIN 79670000=13457000=
|
|
P2:= TRUE; 79675000=13457000=
|
|
IF SPECTOG THEN 79680000=13457000=
|
|
FLAG(13) 79685000=13458000=
|
|
END 79690000=13459000=
|
|
ELSE 79695000=13459000=
|
|
IF T1 = SAVEV THEN 79700000=13459000=
|
|
BEGIN 79705000=13460000=
|
|
P3:= TRUE; 79710000=13461000=
|
|
IF SPECTOG THEN 79715000=13462000=
|
|
FLAG(13); 79720000=13462000=
|
|
END 79730000=13466000=
|
|
ELSE 79735000=13466000=
|
|
IF T1 = AUXMEMV THEN 79740000=13466000=
|
|
BEGIN 79745000=13467000=
|
|
P4:= TRUE; 79750000=13467000=
|
|
IF SPECTOG THEN 79755000=13467000=
|
|
FLAG(13) 79760000=13468000=
|
|
END 79765000=13469000=
|
|
ELSE 79770000=13469000=
|
|
TYPEV:= REALID+T1; 79775000=13469000=
|
|
IF NOT SPECTOG THEN 79780000=13470000=
|
|
EMITO(MKS); 79785000=13470000=
|
|
SAVEINFO:= NEXTINFO; 79790000=13470000=
|
|
ENTER(TYPEV); 79795000=13471000=
|
|
SAVEINFO2:= NEXTINFO:= NEXTINFO+1; 79800000=13471000=
|
|
BETA1: 79805000=13473000=
|
|
IF ELCLASS ^= LFTBRKET THEN 79810000=13473000=
|
|
FLAG(016); 79815000=13473000=
|
|
LBJ:= 0; 79820000=13473000=
|
|
SAVEDIM:= 1; 79825000=13473000=
|
|
TWO: 79830000=13474000=
|
|
IF STEPI = ADOP THEN 79835000=13474000=
|
|
BEGIN 79840000=13475000=
|
|
T1:= ELBAT[I].ADDRESS; 79845000=13476000=
|
|
I:= I+1 79850000=13477000=
|
|
END 79855000=13478000=
|
|
ELSE 79860000=13478000=
|
|
T1:= 0; 79865000=13478000=
|
|
IF SPECTOG THEN 79870000=13478000=
|
|
GO TO BETA2; 79875000=13478000=
|
|
ARPROGS:= L; 79880000=13479000=
|
|
IF TABLE(I+1) = COLON AND TABLE(I) = LITNO THEN 79885000=13480000=
|
|
BEGIN 79890000=13481000=
|
|
LLITOG:= TRUE; 79895000=13482000=
|
|
IF T3:= ELBAT[I].ADDRESS ^= 0 THEN 79900000=13484000=
|
|
BEGIN 79905000=13485000=
|
|
EMITL(T3); 79910000=13486000=
|
|
IF T1 = SUBOP THEN 79915000=13487000=
|
|
BEGIN 79920000=13488000=
|
|
EMITO(CHS); 79925000=13489000=
|
|
ADDCON:= ADDC 79930000=13491000=
|
|
END 79935000=13492000=
|
|
ELSE 79940000=13492000=
|
|
ADDCON:= SUBC 79945000=13493000=
|
|
END; 79950000=13493000=
|
|
T2:= T3*4+ADDCON 79955000=13495000=
|
|
END 79960000=13497000=
|
|
ELSE 79965000=13497000=
|
|
BEGIN 79970000=13497000=
|
|
LLITOG:= FALSE; 79975000=13498000=
|
|
IF T1 ^= 0 THEN 79980000=13499000=
|
|
I:= I-1; 79985000=13499000=
|
|
T2:= GETSPACE(P2, -1); %TEMP. 79990000=13500000=
|
|
AEXP; 79995000=13501000=
|
|
EMITSTORE(T2, ISN); 80000000=13501000=
|
|
T2:= T2*4+SUBC+2; 80005000=13502000=
|
|
IF ELCLASS ^= COLON THEN 80010000=13503000=
|
|
FLAG(017); 80015000=13504000=
|
|
I:= I-1 80020000=13505000=
|
|
END; 80025000=13505000=
|
|
IF P2 THEN 80030000=13506000=
|
|
BEGIN 80035000=13507000=
|
|
IF LLITOG AND T3 = 0 THEN 80040000=13508000=
|
|
EMITL(0); 80045000=13508000=
|
|
ARPROGS:= L; 80050000=13509000=
|
|
EMITO(DUP); 80055000=13509000=
|
|
END; 80060000=13510000=
|
|
IF ELCLASS:= TABLE(I:= I+2) = LITNO THEN 80065000=13511000=
|
|
BEGIN 80070000=13512000=
|
|
IF T:= TABLE(I:= I+1) = COMMA OR T = RTBRKET THEN 80075000=13515000=
|
|
BEGIN 80080000=13516000=
|
|
EMITL(T4:= ELBAT[I-1].ADDRESS); 80085000=13517000=
|
|
ULITOG:= TRUE; 80090000=13518000=
|
|
GO TO CSZ 80095000=13519000=
|
|
END 80100000=13521000=
|
|
ELSE 80105000=13521000=
|
|
I:= I-1 80110000=13522000=
|
|
END; 80115000=13522000=
|
|
ULITOG:= FALSE; 80120000=13523000=
|
|
AEXP; 80125000=13524000=
|
|
EMITL(JUNK); 80130000=13525000=
|
|
EMITO(ISN); 80135000=13526000=
|
|
CSZ: 80140000=13527000=
|
|
IF LLITOG AND ULITOG THEN 80145000=13527000=
|
|
BEGIN 80150000=13528000=
|
|
L:= ARPROGS; 80155000=13529000=
|
|
IF (T:= IF ADDCON = ADDC THEN T4+T3+1 ELSE T4-T3+1) <= 0 OR T > 80160000=13531000=
|
|
1023 80165000=13531000=
|
|
THEN 80170000=13531000=
|
|
FLAG(59); 80175000=13531000=
|
|
EMITL(T); 80180000=13531100=
|
|
IF P3 THEN 80185000=13532000=
|
|
BEGIN 80190000=13532000=
|
|
SAVEDIM:= SAVEDIM*T; 80195000=13532000=
|
|
IF SAVEDIM > MAXSAVE THEN 80200000=13534000=
|
|
MAXSAVE:= SAVEDIM 80205000=13536000=
|
|
END 80210000=13537000=
|
|
ELSE 80215000=13537000=
|
|
IF T > MAXROW THEN 80220000=13537000=
|
|
MAXROW:= T; 80225000=13537000=
|
|
END 80230000=13540000=
|
|
ELSE 80235000=13540000=
|
|
BEGIN 80240000=13540000=
|
|
IF NOT (LLITOG AND T3 = 0) OR P2 THEN 80245000=13542000=
|
|
BEGIN 80250000=13543000=
|
|
EMITO(XCH); 80255000=13544000=
|
|
EMITO(SUB) 80260000=13545000=
|
|
END; 80265000=13545000=
|
|
EMITL(1); 80270000=13545000=
|
|
EMITO(ADD) 80275000=13546000=
|
|
END; 80280000=13546000=
|
|
SLB: 80285000=13547000=
|
|
PUTNBUMP(T2); 80290000=13547000=
|
|
LBJ:= LBJ+1; 80295000=13547000=
|
|
IF T:= TABLE(I) = COMMA THEN 80300000=13547000=
|
|
GO TO TWO 80305000=13548000=
|
|
ELSE 80310000=13548000=
|
|
IF T ^= RTBRKET THEN 80315000=13549000=
|
|
FLAG(018); 80320000=13549000=
|
|
IF NOT SPECTOG THEN 80325000=13550000=
|
|
BEGIN 80330000=13551000=
|
|
80335000=13551400=
|
|
COMMENT KEEP COUNT OF NO. OF ARRAYS DECLARED; 80340000=13551400=
|
|
NOOFARRAYS:= NOOFARRAYS+GTA1[0]; 80345000=13551500=
|
|
EMITL(LBJ); 80350000=13552000=
|
|
EMITL(GTA1[0]); 80355000=13552000=
|
|
IF P3 AND P4 THEN 80360000=13552500=
|
|
FLAG(14); % SAVE AND AUXMEM MUTUALLY EXCL. 80365000=13552500=
|
|
EMITL(REAL(P3)+2*REAL(P2)+REAL(P4)*64); 80370000=13553000=
|
|
EMITV(5) 80375000=13555000=
|
|
END; 80380000=13555000=
|
|
PUT(LBJ, SAVEINFO2-1); 80385000=13556000=
|
|
DO BEGIN 80390000=13557000=
|
|
T:= TAKE(SAVEINFO); 80395000=13558000=
|
|
K:= T.INCR; 80400000=13559000=
|
|
T.INCR:= SAVEINFO2-SAVEINFO-1; 80405000=13560000=
|
|
PUT(T, SAVEINFO); 80410000=13561000=
|
|
END 80415000=13563000=
|
|
UNTIL SAVEINFO:= SAVEINFO+K = SAVEINFO2-1; 80420000=13563000=
|
|
IF STEPI ^= COMMA THEN 80425000=13564000=
|
|
GO TO START; 80430000=13564000=
|
|
IF NOT SPECTOG THEN 80435000=13565000=
|
|
EMITO(MKS); 80440000=13565000=
|
|
SAVEINFO:= NEXTINFO; 80445000=13566000=
|
|
I:= I+1; 80450000=13567000=
|
|
ENTRY(TYPEV); 80455000=13567000=
|
|
SAVEINFO2:= NEXTINFO:= NEXTINFO+1; 80460000=13567000=
|
|
GO TO BETA1; 80465000=13567000=
|
|
BETA2: 80470000=13569000=
|
|
IF T:= TABLE(I:= I+1) = COMMA OR T = RTBRKET THEN 80475000=13570000=
|
|
BEGIN 80480000=13571000=
|
|
IF ELCLASS:= TABLE(I-1) = LITNO THEN 80485000=13573000=
|
|
BEGIN 80490000=13574000=
|
|
T3:= ELBAT[I-1].ADDRESS; 80495000=13575000=
|
|
IF T1 = SUBOP THEN 80500000=13576000=
|
|
ADDCON:= ADDC 80505000=13578000=
|
|
ELSE 80510000=13578000=
|
|
ADDCON:= SUBC; 80515000=13579000=
|
|
T2:= T3*4+ADDCON; 80520000=13580000=
|
|
GO TO SLB; 80525000=13580000=
|
|
END; 80530000=13581000=
|
|
IF ELCLASS = FACTOP THEN 80535000=13582000=
|
|
BEGIN 80540000=13583000=
|
|
T2:= -SUBC; 80545000=13584000=
|
|
GO TO SLB 80550000=13585000=
|
|
END 80555000=13586000=
|
|
END; 80560000=13586000=
|
|
FLAG(019); 80565000=13587000=
|
|
START: 80570000=13588000=
|
|
ARRAYFLAG:= FALSE 80575000=13588000=
|
|
END; 80580000=13588000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80585000=13588000=
|
|
PROCEDURE PUTNBUMP(X); 80590000=13589000=
|
|
VALUE 80595000=13590000=
|
|
X; 80600000=13590000=
|
|
REAL 80605000=13591000=
|
|
X; 80610000=13591000=
|
|
BEGIN 80615000=13592000=
|
|
INFO[NEXTINFO.LINKR, NEXTINFO.LINKC]:= X; 80620000=13593000=
|
|
NEXTINFO:= NEXTINFO+1 80625000=13595000=
|
|
END; 80630000=13595000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80635000=13595000=
|
|
PROCEDURE JUMPCHKX; 80640000=13596000=
|
|
80645000=13597000=
|
|
COMMENT THIS PROCEDURE IS CALLED AT THE START OF ANY EXECUTABLE CODE 80650000=13597000=
|
|
WHICH THE BLOCK MIGHT EMIT.IT DETERMINES WHETHER ANY JUMPS 80655000=13598000=
|
|
ARROUND NONEXECUTABLE CODE MAY BE WAITING AND WHETHER IT 80660000=13599000=
|
|
IS THE FIRST EXECUTABLE CODE; 80665000=13600000=
|
|
IF NOT SPECTOG THEN 80670000=13601000=
|
|
BEGIN 80675000=13602000=
|
|
IF AJUMP THEN 80680000=13604000=
|
|
BEGIN 80685000=13605000=
|
|
ADJUST; 80690000=13605000=
|
|
EMITB(BFW, SAVEL, L) 80695000=13607000=
|
|
END 80700000=13608000=
|
|
ELSE 80705000=13608000=
|
|
IF FIRSTX = 4095 THEN 80710000=13609000=
|
|
BEGIN 80715000=13610000=
|
|
ADJUST; 80720000=13611000=
|
|
FIRSTX:= L; 80725000=13612000=
|
|
END; 80730000=13613000=
|
|
AJUMP:= FALSE 80735000=13615000=
|
|
END; 80740000=13615000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80745000=13615000=
|
|
PROCEDURE JUMPCHKNX; 80750000=13616000=
|
|
80755000=13617000=
|
|
COMMENT JUMPCHKNX DETERMINES WHETHER ANY EXECUTABLE CODE HAS BEEN 80760000=13617000=
|
|
EMITTED AND IF SO WHETHER IT WAS JUST PREVIOUS TO THE 80765000=13618000=
|
|
NON EXECUTABLE ABOUT TO BE EMITTED.IF BOTH THEN L IS BUMPED 80770000=13619000=
|
|
AND SAVED FOR A LATER BRANCH; 80775000=13620000=
|
|
IF NOT SPECTOG THEN 80780000=13621000=
|
|
BEGIN 80785000=13622000=
|
|
IF FIRSTX ^= 4095 THEN 80790000=13624000=
|
|
BEGIN 80795000=13625000=
|
|
IF NOT AJUMP THEN 80800000=13627000=
|
|
SAVEL:= BUMPL; 80805000=13628000=
|
|
AJUMP:= TRUE 80810000=13630000=
|
|
END; 80815000=13630000=
|
|
ADJUST 80820000=13631000=
|
|
END; 80825000=13631000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80830000=13631000=
|
|
PROCEDURE SEGMENTSTART; 80835000=13632000=
|
|
BEGIN 80840000=13632100=
|
|
IF NOHEADING THEN 80845000=13633000=
|
|
DATIME; 80850000=13633000=
|
|
IF SINGLTOG THEN 80855000=13633100=
|
|
WRITE(LINE, PRINTSEGNO, SGAVL) 80860000=13633200=
|
|
ELSE 80865000=13633200=
|
|
WRITE(LINE[SPACE 2], PRINTSEGNO, SGAVL); 80870000=13633200=
|
|
END SEGMENTSTART; 80875000=13633300=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80880000=13633300=
|
|
PROCEDURE SEGMENT(SIZE, NO, NOO); 80885000=13634000=
|
|
VALUE 80890000=13635000=
|
|
SIZE, 80895000=13635000=
|
|
NO, 80900000=13635000=
|
|
NOO; 80905000=13635000=
|
|
REAL 80910000=13636000=
|
|
SIZE, 80915000=13636000=
|
|
NO, 80920000=13636000=
|
|
NOO; 80925000=13636000=
|
|
BEGIN 80930000=13637000=
|
|
INTEGER 80935000=13637100=
|
|
DUMMY; % THIS IS HERE SO THAT OUR CODE SEGMENT 80940000=13637100=
|
|
% IS NOT TOO BIG 80945000=13637200=
|
|
PDPRT[PDINX.[10:5], PDINX.[5:6]]:= SIZE & NO[19:9:10] & 80950000=13640000=
|
|
MOVEANDBLOCK(EDOC, ABS(SIZE), -ABS(NO))[34:14:15] & 80955000=13641000=
|
|
REAL(SAVEPRTOG)[44:0:1]; 80960000=13641000=
|
|
PDINX:= PDINX+1; 80965000=13642000=
|
|
SIZE:= ABS(SIZE); 80970000=13642000=
|
|
IF SIZE > SEGSIZEMAX THEN 80975000=13643000=
|
|
SEGSIZEMAX:= SIZE; 80980000=13643000=
|
|
AKKUM:= AKKUM+SIZE; 80985000=13644000=
|
|
IF SAVEPRTOG THEN 80990000=13645000=
|
|
AUXMEMREQ:= AUXMEMREQ+16*(SIZE.[9:6]+1); 80995000=13645000=
|
|
IF LISTER OR SEGSTOG THEN 81000000=13646000=
|
|
BEGIN 81005000=13647000=
|
|
IF NOHEADING THEN 81010000=13648000=
|
|
DATIME; 81015000=13648000=
|
|
IF SINGLTOG THEN 81020000=13649000=
|
|
WRITE(LINE, PRINTSIZE, NO, SIZE, NOO) 81025000=13650000=
|
|
ELSE 81030000=13650000=
|
|
WRITE(LINE, PRINTSIZE, NO, SIZE, NOO); 81035000=13650000=
|
|
END; 81040000=13651000=
|
|
LDICT[NO.[9:3], NO.[6:7]]:= 81045000=13653000=
|
|
IF BUILDLINE THEN 81050000=13653000=
|
|
MOVEANDBLOCK(ENIL, ENILPTR+1, 4) & SIZE[29:14:15] 81055000=13655000=
|
|
ELSE 81060000=13655000=
|
|
-1; 81065000=13655000=
|
|
END OF SEGMENT; 81070000=13656000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%81075000=13656000=
|
|
PROCEDURE ENTER(TYPE); 81080000=13714000=
|
|
VALUE 81085000=13714000=
|
|
TYPE; 81090000=13714000=
|
|
INTEGER 81095000=13714000=
|
|
TYPE; 81100000=13714000=
|
|
BEGIN 81105000=13715000=
|
|
G:= GTA1[J:= J-1]; 81110000=13716000=
|
|
IF NOT SPECTOG THEN 81115000=13717000=
|
|
BEGIN 81120000=13718000=
|
|
IF NOT P2 THEN 81125000=13719000=
|
|
IF P2:= (G = OWNV) THEN 81130000=13720000=
|
|
G:= GTA1[J:= J-1]; 81135000=13720000=
|
|
IF NOT P3 THEN 81140000=13721000=
|
|
IF P3:= (G = SAVEV) THEN 81145000=13722000=
|
|
G:= GTA1[J:= J-1]; 81150000=13722000=
|
|
IF NOT P4 THEN 81155000=13723000=
|
|
IF P4:= (G = AUXMEMV) THEN 81160000=13724000=
|
|
G:= GTA1[J:= J-1]; 81165000=13724000=
|
|
END; 81170000=13725000=
|
|
IF G ^= 0 THEN 81175000=13726000=
|
|
FLAG(25) 81180000=13726000=
|
|
ELSE 81185000=13726000=
|
|
ENTRY(TYPE) 81190000=13727000=
|
|
END ENTER; 81195000=13727000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%81200000=13727000=
|
|
PROCEDURE HTTEOAP(GOTSTORAGE, RELAD, STOPPER, PRTAD); 81205000=13731000=
|
|
VALUE 81210000=13732000=
|
|
GOTSTORAGE, 81215000=13732000=
|
|
RELAD, 81220000=13732000=
|
|
STOPPER, 81225000=13732000=
|
|
PRTAD; 81230000=13732000=
|
|
BOOLEAN 81235000=13733000=
|
|
GOTSTORAGE; 81240000=13733000=
|
|
REAL 81245000=13734000=
|
|
RELAD, 81250000=13734000=
|
|
STOPPER, 81255000=13734000=
|
|
PRTAD; 81260000=13734000=
|
|
BEGIN 81265000=13735000=
|
|
BOOLEAN 81270000=13736000=
|
|
BT; 81275000=13736000=
|
|
REAL 81280000=13737000=
|
|
K, 81285000=13737000=
|
|
LS; 81290000=13737000=
|
|
LS:= RELAD; 81295000=13738000=
|
|
BT:= JUMPCTR = LEVEL; 81300000=13739000=
|
|
IF FUNCTOG THEN 81305000=13741000=
|
|
BEGIN 81310000=13742000=
|
|
EMITV(514); 81315000=13743000=
|
|
EMITO(RTN) 81320000=13745000=
|
|
END 81325000=13747000=
|
|
ELSE 81330000=13747000=
|
|
EMITO(XIT); 81335000=13747000=
|
|
IF STACKCTR > MAXSTACK THEN 81340000=13748000=
|
|
MAXSTACK:= STACKCTR; 81345000=13748000=
|
|
CONSTANTCLEAN; 81350000=13749000=
|
|
IF K:= MAXSTACK-514 > 0 OR GOTSTORAGE OR BT OR NCII > 0 OR FAULTOG. 81355000=13750000=
|
|
[1:1] 81360000=13751000=
|
|
THEN 81365000=13751000=
|
|
BEGIN 81370000=13752000=
|
|
ADJUST; 81375000=13752000=
|
|
LS:= L; 81380000=13752000=
|
|
IF BT OR GOTSTORAGE OR FAULTOG.[1:1] THEN 81385000=13754000=
|
|
BEGIN 81390000=13755000=
|
|
% 81395000=13755500=
|
|
EMITV(BLOCKCTR); 81400000=13756000=
|
|
EMITL(1); 81405000=13757000=
|
|
EMITO(ADD); 81410000=13758000=
|
|
IF GOTSTORAGE OR FAULTOG.[1:1] THEN 81415000=13760000=
|
|
EMITSTORE(BLOCKCTR, SND) 81420000=13762500=
|
|
END 81425000=13762500=
|
|
% 81430000=13762500=
|
|
ELSE 81435000=13763000=
|
|
EMITL(0); 81440000=13763000=
|
|
K:= K+NCII; 81445000=13764000=
|
|
WHILE K:= K-1 >= 0 DO 81450000=13766000=
|
|
EMITL(0); 81455000=13766000=
|
|
PURGE(STOPPER); 81460000=13767000=
|
|
IF FAULTLEVEL <= LEVEL THEN 81465000=13767100=
|
|
BEGIN 81470000=13767200=
|
|
IF FAULTLEVEL = LEVEL THEN 81475000=13767200=
|
|
FAULTLEVEL:= 32; 81480000=13767200=
|
|
EMITPAIR(0, MDS); 81485000=13767300=
|
|
EMITO(CHS); 81490000=13767300=
|
|
END OF THIS PART OF ERROR KLUDGE; 81495000=13767400=
|
|
EMIT(0); % DC & DISK 81500000=13767500=
|
|
BUMPL; 81505000=13768000=
|
|
EMITB(BBC, L, IF RELAD = 4095 THEN 0 ELSE RELAD); % DC & DISK 81510000=13769000=
|
|
CONSTANTCLEAN 81515000=13771000=
|
|
END 81520000=13771000=
|
|
ELSE 81525000=13771000=
|
|
PURGE(STOPPER); 81530000=13771000=
|
|
Z:= PROGDESCBLDR(PDES, IF LS = 4095 THEN 0 ELSE LS, PRTAD); 81535000=13772000=
|
|
END HTTEOAP; 81540000=13773000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%81545000=13773000=
|
|
PROCEDURE FORMATGEN; 81550000=13774000=
|
|
BEGIN 81555000=13775000=
|
|
INTEGER 81560000=13776000=
|
|
PRT; 81565000=13776000=
|
|
LABEL 81570000=13776000=
|
|
L; 81575000=13776000=
|
|
BOOLEAN 81580000=13777000=
|
|
TB2; 81585000=13777000=
|
|
ARRAY 81590000=13777500=
|
|
TEDOC[0:7, 0:127]; 81595000=13777500=
|
|
MOVECODE(TEDOC, EDOC); 81600000=13777600=
|
|
BUILDLINE:= BOOLEAN(2*REAL(BUILDLINE)); 81605000=13777700=
|
|
TB2:= GTA1[J-1] = SWITCHV; 81610000=13778000=
|
|
GT5:= SGNO; 81615000=13779000=
|
|
L: GT1:= (2*SGAVL-1) & 2[43:1:2]; 81620000=13780000=
|
|
STOPENTRY:= TRUE; 81625000=13780000=
|
|
IF LISTER OR SEGSTOG THEN 81630000=13780002=
|
|
SEGMENTSTART; 81635000=13780002=
|
|
SGNO:= SGAVL; 81640000=13781000=
|
|
F:= 0; 81645000=13783000=
|
|
PRT:= GETSPACE(TRUE, 1); 81650000=13783000=
|
|
STOPGSP:= TRUE; % FORMAT. 81655000=13783000=
|
|
Z:= PROGDESCBLDR(LDES, 0, PRT); 81660000=13784000=
|
|
IF TB2 THEN 81665000=13785000=
|
|
BEGIN 81670000=13786000=
|
|
ENTRY(SUPERFRMTID); 81675000=13787000=
|
|
IF ELCLASS ^= ASSIGNOP THEN 81680000=13787000=
|
|
FLAG(36); 81685000=13787000=
|
|
PUT(TAKE(LASTINFO) & PRT[31:10:11], LASTINFO); 81690000=13788000=
|
|
RR4:= NEXTINFO; 81695000=13789000=
|
|
PUTNBUMP(0); 81700000=13789000=
|
|
DO BEGIN 81705000=13791000=
|
|
PUTNBUMP(F); 81710000=13791000=
|
|
IF STEPI = LEFTPAREN THEN 81715000=13791000=
|
|
FLAG(37); 81720000=13791000=
|
|
ELCLASS:= 6"<"; 81725000=13791050=
|
|
TB1:= FORMATPHRASE; 81730000=13792000=
|
|
END 81735000=13794000=
|
|
UNTIL ELCLASS ^= 6","; 81740000=13794000=
|
|
RR3:= NEXTINFO-1; 81745000=13795000=
|
|
NEXTINFO:= RR4; 81750000=13795000=
|
|
PUTNBUMP(F); 81755000=13795000=
|
|
DO 81760000=13797000=
|
|
WHIPOUT(TAKE(RR4:= RR4+1)) 81765000=13798000=
|
|
UNTIL RR4 = RR3; 81770000=13798000=
|
|
IF F > 1022 THEN 81775000=13798000=
|
|
FLAG(38); 81780000=13798000=
|
|
END 81785000=13801000=
|
|
ELSE 81790000=13801000=
|
|
BEGIN 81795000=13801000=
|
|
I:= I-1; 81800000=13802000=
|
|
DO BEGIN 81805000=13804000=
|
|
STOPDEFINE:= TRUE; 81810000=13805000=
|
|
STEPIT; 81815000=13805000=
|
|
ENTRY(FRMTID); 81820000=13806000=
|
|
IF ELCLASS ^= LEFTPAREN THEN 81825000=13806000=
|
|
FLAG(32); 81830000=13806000=
|
|
ELCLASS:= 6"<"; 81835000=13806000=
|
|
PUT(TAKE(LASTINFO) & PRT[31:10:11] & F[20:7:8], LASTINFO); 81840000=13807000=
|
|
TB1:= FORMATPHRASE; 81845000=13808000=
|
|
END 81850000=13810000=
|
|
UNTIL ELCLASS ^= 6"," OR TB1:= F >= 256; 81855000=13810000=
|
|
END; 81860000=13813000=
|
|
SEGMENT(-F, SGNO, GT5); 81865000=13814000=
|
|
SGAVL:= SGAVL+1; 81870000=13814000=
|
|
IF TB1 AND ELCLASS = 6"," THEN 81875000=13815000=
|
|
BEGIN 81880000=13815000=
|
|
I:= I+1; 81885000=13815000=
|
|
GO TO L 81890000=13815000=
|
|
END; 81895000=13815000=
|
|
IF ELCLASS ^= 6";" THEN 81900000=13816000=
|
|
ELBAT[I]:= 0 81905000=13816000=
|
|
ELSE 81910000=13816000=
|
|
ELBAT[I].CLASS:= SEMICOLON; 81915000=13816000=
|
|
STOPGSP:= STOPENTRY:= FALSE; 81920000=13817000=
|
|
SGNO:= GT5; 81925000=13818000=
|
|
MOVECODE(TEDOC, EDOC); 81930000=13818500=
|
|
BUILDLINE:= BUILDLINE.[1:1]; 81935000=13818600=
|
|
END FORMATGEN; 81940000=13819000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%81945000=13819000=
|
|
PROCEDURE CHECKBOUNDLVL; 81950000=13819100=
|
|
COMMENT CHECK DYNAMIC ARRAY BOUND: MUST NOT BE 81955000=13819200=
|
|
DECLARED AT SAME LEVEL; 81960000=13819300=
|
|
IF NOT SPECTOG AND ELBAT[I].LVL = LEVEL THEN 81965000=13819410=
|
|
FLAG(IF REAL(ARRAYFLAG) = 3 THEN 509 ELSE 46); 81970000=13819410=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%81975000=13819410=
|
|
COMMENT 46-ARRAE NON-LITERAL ARRAY BOUND NOT GLOBAL TO 81980000=13819500=
|
|
ARARY DECLARATION; 81985000=13819600=
|
|
PROCEDURE FAULTDEC; 81990000=13900000=
|
|
COMMENT FAULTDEC HANDLES THE MONITOR <FAULT LIST> 81995000=13900000=
|
|
THING, FOR THE RUN-TIME ERROR BUSINESS. IT GETS STACK OR 82000000=13901000=
|
|
PRT SPACE AND PASSES SOME STUFF TO THE BLOCK CONTROL 82005000=13902000=
|
|
INTRINSIC, WHO WILL BUILD AIT ENTRIES; 82010000=13903000=
|
|
BEGIN 82015000=13903100=
|
|
INTEGER 82020000=13903100=
|
|
TP; 82025000=13903100=
|
|
REAL 82030000=13903100=
|
|
A; 82035000=13903100=
|
|
J:= 0; 82040000=13904000=
|
|
JUMPCHKX; 82045000=13904000=
|
|
EMITO(MKS); 82050000=13904000=
|
|
IF FAULTLEVEL > LEVEL THEN 82055000=13905000=
|
|
FAULTLEVEL:= LEVEL; 82060000=13905000=
|
|
IF MODE = 0 THEN 82065000=13906000=
|
|
FAULTLEVEL:= 1; 82070000=13906000=
|
|
DO BEGIN 82075000=13907000=
|
|
IF J > 0 THEN 82080000=13907000=
|
|
STEPIT; 82085000=13907000=
|
|
J:= J+1; 82090000=13907000=
|
|
SCATTERELBAT; 82095000=13908000=
|
|
A:= ACCUM[1]; 82100000=13908000=
|
|
IF TP:= REAL((Q = 6"6INTOV") & (Q = 6"6EXPOV")[1:0:1] & 82105000=13910000=
|
|
(Q = 6"5INDEX")[2:0:1] & (Q = 6"4ZERO0")[3:0:1] & 82110000=13910000=
|
|
(Q = 6"4FLAG0")[4:0:1]) = 0 82115000=13911000=
|
|
THEN 82120000=13911000=
|
|
ERR(61) 82125000=13911000=
|
|
ELSE 82130000=13911000=
|
|
BEGIN 82135000=13911100=
|
|
IF TABLE(I+1) = ASSIGNOP THEN 82140000=13911100=
|
|
BEGIN 82145000=13911200=
|
|
STEPIT; 82150000=13911200=
|
|
COMMENT OVER THE :=; 82155000=13911200=
|
|
IF GT1:= STEPI > IDMAX AND GT1 < FAULTID THEN 82160000=13911300=
|
|
ERR(3); 82165000=13911300=
|
|
LEVELF:= ELBAT[I].LVL; 82170000=13911400=
|
|
END 82175000=13911500=
|
|
ELSE 82180000=13911500=
|
|
COUNT:= (ACCUM[1]:= A).[35:6]; 82185000=13911500=
|
|
IF LEVELF = LEVEL THEN 82190000=13912000=
|
|
ERR(1) 82195000=13912000=
|
|
ELSE 82200000=13912000=
|
|
BEGIN 82205000=13913000=
|
|
KLASSF:= FAULTID; 82210000=13913000=
|
|
ADDRSF:= GETSPACE(FALSE, 1); 82215000=13913000=
|
|
FORMALF:= VONF:= FALSE; 82220000=13913100=
|
|
EMITL(TP); 82225000=13914000=
|
|
IF MODE = 0 THEN 82230000=13914000=
|
|
BEGIN 82235000=13914000=
|
|
EMITL(0); 82240000=13914000=
|
|
EMITPAIR(ADDRSF, STD); 82245000=13915000=
|
|
END; 82250000=13915000=
|
|
EMITN(ADDRSF); 82255000=13915000=
|
|
EMIT(3"74"6"E"); 82260000=13916000=
|
|
COMMENT C-TO-F; 82265000=13916000=
|
|
MAKEUPACCUM; 82270000=13917000=
|
|
E; 82275000=13917000=
|
|
STEPIT 82280000=13918000=
|
|
END; 82285000=13918000=
|
|
END; 82290000=13918000=
|
|
END 82295000=13918000=
|
|
UNTIL ELCLASS ^= COMMA; 82300000=13918000=
|
|
EMITL(J); 82305000=13919000=
|
|
EMITL(13); 82310000=13919000=
|
|
EMITV(5); 82315000=13919000=
|
|
END FAULTDEC; 82320000=13920000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%82325000=13920000=
|
|
82330000=14000000=
|
|
COMMENT THIS SECTION CONTAINS THE BLOCK ROUTINE ; 82335000=14000000=
|
|
PROCEDURE BLOCK(SOP); 82340000=14001000=
|
|
VALUE 82345000=14002000=
|
|
SOP; 82350000=14002000=
|
|
BOOLEAN 82355000=14003000=
|
|
SOP; 82360000=14003000=
|
|
82365000=14004000=
|
|
COMMENT SOP IS TRUE IF THE BLOCK WAS CALLED BY ITSELF THROUGH THE 82370000=14004000=
|
|
PROCEDURE DECLARATION-OTHERWISE IT WAS CALLED BY STATEMENT. 82375000=14005000=
|
|
THE BLOCK ROUTINE IS RESPONSIBLE FOR HANDLING THE BLOCK 82380000=14006000=
|
|
STRUCTURE OF AN ALGOL PROGRAM-SEGMENTING EACH BLOCK,HANDLING 82385000=14007000=
|
|
ALL DECLARATIONS,DOING NECESSARY BOOKKEEPING REGARDING EACH 82390000=14008000=
|
|
BLOCK, AND SUPPLYING THE SCANNER WITH ALL NECESSARY INFORMATION 82395000=14009000=
|
|
ABOUT DECLARED IDENTIFIERS. 82400000=14010000=
|
|
IT ALSO WRITES EACH SEGMENT ONTO THE PCT; 82405000=14011000=
|
|
BEGIN 82410000=14012000=
|
|
LABEL 82415000=14013000=
|
|
OWNERR, 82420000=14013000=
|
|
SAVERR, 82425000=14013000=
|
|
BOOLEANDEC, 82430000=14013000=
|
|
REALDEC, 82435000=14013000=
|
|
ALPHADEC, 82440000=14013000=
|
|
INTEGERDEC, 82445000=14014000=
|
|
LABELDEC, 82450000=14014000=
|
|
DUMPDEC, 82455000=14014000=
|
|
LISTDEC, 82460000=14014000=
|
|
OUTDEC, 82465000=14014000=
|
|
INDEC, 82470000=14014000=
|
|
MONITORDEC, 82475000=14015000=
|
|
SWITCHDEC, 82480000=14015000=
|
|
PROCEDUREDEC, 82485000=14015000=
|
|
ARRAYDEC, 82490000=14015000=
|
|
FORMATDEC, 82495000=14015000=
|
|
FILEDEC, 82500000=14016000=
|
|
GOTSCHK, 82505000=14016000=
|
|
FIELDDEC, 82510000=14016000=
|
|
AUXMEMERR, 82515000=14017000=
|
|
STREAMERR, 82520000=14017000=
|
|
DEFINEDEC, 82525000=14017000=
|
|
CALLSTATEMENT, 82530000=14017000=
|
|
HF, 82535000=14017000=
|
|
START; 82540000=14017000=
|
|
SWITCH 82545000=14018000=
|
|
DECLSW:= OWNERR, 82550000=14018000=
|
|
SAVERR, 82555000=14018000=
|
|
BOOLEANDEC, 82560000=14018000=
|
|
REALDEC, 82565000=14018000=
|
|
ALPHADEC, 82570000=14018000=
|
|
INTEGERDEC, 82575000=14019000=
|
|
LABELDEC, 82580000=14019000=
|
|
DUMPDEC, 82585000=14019000=
|
|
LISTDEC, 82590000=14019000=
|
|
OUTDEC, 82595000=14019000=
|
|
INDEC, 82600000=14019000=
|
|
MONITORDEC, 82605000=14020000=
|
|
SWITCHDEC, 82610000=14020000=
|
|
PROCEDUREDEC, 82615000=14020000=
|
|
ARRAYDEC, 82620000=14020000=
|
|
FORMATDEC, 82625000=14020000=
|
|
FILEDEC, 82630000=14021000=
|
|
STREAMERR, 82635000=14021000=
|
|
DEFINEDEC, 82640000=14021000=
|
|
AUXMEMERR, 82645000=14021000=
|
|
FIELDDEC; 82650000=14021000=
|
|
DEFINE 82655000=14022000=
|
|
NLOCS = 10 #, 82660000=14022000=
|
|
LOCBEGIN = PRTI #, 82665000=14023000=
|
|
LBP = [11:12] #, 82670000=14023100=
|
|
SPACEITDOWN = BEGIN 82675000=14023100=
|
|
WRITE(LINE[SPACE 2]); 82680000=14023100=
|
|
WRITE(LINE[SPACE 2]) 82685000=14023100=
|
|
END #; 82690000=14023100=
|
|
ARRAY 82695000=14024000=
|
|
TEDOC[0:7, 0:127], 82700000=14024000=
|
|
LOCALS[0:NLOCS]; 82705000=14024000=
|
|
ARRAY 82710000=14024100=
|
|
TENIL[0:7, 0:127]; 82715000=14024100=
|
|
INTEGER 82720000=14024200=
|
|
OLDLASTADDRESS; 82725000=14024200=
|
|
INTEGER 82730000=14024300=
|
|
OLDENILPTR; 82735000=14024300=
|
|
BOOLEAN 82740000=14025000=
|
|
GOTSTORAGE; 82745000=14025000=
|
|
BOOLEAN 82750000=14025100=
|
|
FWDTOG; 82755000=14025100=
|
|
COMMENT PREVIOUS FORWARD DECLARATION INDICATOR; 82760000=14025100=
|
|
INTEGER 82765000=14026000=
|
|
PINFOO, 82770000=14026000=
|
|
BLKAD; 82775000=14026000=
|
|
COMMENT LOCAL TO BLOCK TO SAVE WHERE A PROCEDURE IS EMTERED 82780000=14027000=
|
|
IN INFO; 82785000=14028000=
|
|
REAL 82790000=14029000=
|
|
MAXSTACKO, 82795000=14029000=
|
|
LASTINFOT, 82800000=14029000=
|
|
RELAD, 82805000=14029000=
|
|
LO, 82810000=14029000=
|
|
TSUBLEVEL, 82815000=14029000=
|
|
STACKCTRO; 82820000=14029000=
|
|
INTEGER 82825000=14030000=
|
|
SGNOO, 82830000=14030000=
|
|
LOLD, 82835000=14030000=
|
|
SAVELO, 82840000=14030000=
|
|
PRTIO, 82845000=14030000=
|
|
NINFOO; 82850000=14030000=
|
|
INTEGER 82855000=14031000=
|
|
NCIIO; 82860000=14031000=
|
|
INTEGER 82865000=14032000=
|
|
PROAD; 82870000=14032000=
|
|
INTEGER 82875000=14032500=
|
|
NTEXTO; 82880000=14032500=
|
|
INTEGER 82885000=14033000=
|
|
FIRSTXO; 82890000=14033000=
|
|
BOOLEAN 82895000=14034000=
|
|
FUNCTOGO, 82900000=14034000=
|
|
AJUMPO, 82905000=14034000=
|
|
FAULTOGO; 82910000=14034000=
|
|
BOOLEAN 82915000=14034100=
|
|
SAVEPRTOGO, 82920000=14034100=
|
|
NEXTSAVE; 82925000=14034100=
|
|
BEGINCTR:= BEGINCTR+1; 82930000=14035000=
|
|
IF SOP THEN 82935000=14036000=
|
|
BLKAD:= PROADO 82940000=14044000=
|
|
ELSE 82945000=14044000=
|
|
BEGIN 82950000=14044000=
|
|
BLKAD:= GETSPACE(TRUE, -6); % SEG. DESCR. 82955000=14044000=
|
|
EMITV(BLKAD); 82960000=14045000=
|
|
EMITO(BFW); 82965000=14046000=
|
|
CONSTANTCLEAN 82970000=14048000=
|
|
END; 82975000=14048000=
|
|
MOVECODE(TEDOC, EDOC); 82980000=14049000=
|
|
MOVECODE(TENIL, ENIL); 82985000=14049000=
|
|
OLDLASTADDRESS:= LASTADDRESS; 82990000=14049100=
|
|
LASTADDRESS:= -1; 82995000=14049100=
|
|
OLDENILPTR:= ENILPTR; 83000000=14049200=
|
|
ENILPTR:= 0; 83005000=14049200=
|
|
ENILSPOT:= 0 & CARDNUMBER[37:27:28]; 83010000=14049300=
|
|
ENILPTR:= 1; 83015000=14049300=
|
|
%% MOVE(NLOCS, LOCBEGIN, 0, LOCALS, 0); %% WON'T WORK AND NOT USED! 83020000=14050000=
|
|
FIRSTXO:= FIRSTX; 83025000=14051000=
|
|
FIRSTX:= 4095; 83030000=14052000=
|
|
IF LEVEL < 31 THEN 83035000=14053000=
|
|
LEVEL:= LEVEL+1 83040000=14053100=
|
|
ELSE 83045000=14053100=
|
|
FLAG(039); 83050000=14053100=
|
|
LOLD:= L; 83055000=14054000=
|
|
FUNCTOGO:= FUNCTOG; 83060000=14054000=
|
|
AJUMPO:= AJUMP; 83065000=14054000=
|
|
PRTIO:= PRTI; 83070000=14054000=
|
|
SGNOO:= SGNO; 83075000=14054000=
|
|
SAVELO:= SAVEL; 83080000=14055000=
|
|
AJUMP:= FALSE; % NO PENDING JUMPS IN THIS BLOCK YET. 83085000=14055100=
|
|
L:= 0; % START GENERATING CODE AT WORD 0, SYLLABLE 0. 83090000=14055200=
|
|
OLDNINFOO:= GLOBALNINFOO; % REMEMBER WHERE PREVIOUS BLOCKS 83095000=14055250=
|
|
% SYMBOLS BEGAN IN SYMBOL TABLE. 83100000=14055260=
|
|
GLOBALNINFOO:= NINFOO:= NEXTINFO; % REMEMBER WHERE THE SYMBOLS 83105000=14055300=
|
|
% FROM THIS BLOCK WILL GO 83110000=14055400=
|
|
% IN THE SYMBOL TABLE. 83115000=14055450=
|
|
NTEXTO:= NEXTTEXT; 83120000=14055500=
|
|
NCIIO:= NCII; 83125000=14056000=
|
|
NCII:= 0; 83130000=14057000=
|
|
STACKCTRO:= STACKCTR; 83135000=14058000=
|
|
FAULTOGO:= FAULTOG; 83140000=14058100=
|
|
FAULTOG:= GOTSTORAGE:= FALSE; 83145000=14059000=
|
|
SAVEPRTOG:= (SAVEPRTOGO:= SAVEPRTOG) OR SOP.[1:1]; 83150000=14059100=
|
|
IF LISTER OR SEGSTOG THEN 83155000=14060000=
|
|
SEGMENTSTART; 83160000=14060000=
|
|
SGNO:= SGAVL; 83165000=14061000=
|
|
SGAVL:= SGAVL+1; 83170000=14061000=
|
|
ELBAT[I].CLASS:= SEMICOLON; 83175000=14062000=
|
|
START: 83180000=14063000=
|
|
IF TABLE(I) ^= SEMICOLON THEN 83185000=14064000=
|
|
BEGIN 83190000=14065000=
|
|
FLAG(0); 83195000=14066000=
|
|
I:= I-1 83200000=14068000=
|
|
END; 83205000=14068000=
|
|
GTA1[0]:= J:= 0; 83210000=14069000=
|
|
IF SPECTOG THEN 83215000=14071000=
|
|
BEGIN 83220000=14072000=
|
|
IF BUP = PJ THEN 83225000=14074000=
|
|
BEGIN 83230000=14075000=
|
|
BEGIN 83235000=14076000=
|
|
LABEL 83240000=14076000=
|
|
GETLP; 83245000=14076000=
|
|
IF STREAMTOG THEN 83250000=14077000=
|
|
F:= 0 83255000=14077000=
|
|
ELSE 83260000=14077000=
|
|
F:= FZERO; 83265000=14078000=
|
|
BUP:= LASTINFO; 83270000=14079000=
|
|
DO BEGIN 83275000=14081000=
|
|
IF NOT STREAMTOG THEN 83280000=14082000=
|
|
BUP:= LASTINFO; 83285000=14083000=
|
|
GETLP: 83290000=14084000=
|
|
G:= TAKE(BUP); 83295000=14084000=
|
|
IF K:= G.ADDRESS ^= PJ THEN 83300000=14086000=
|
|
BEGIN 83305000=14087000=
|
|
IF BUP ^= BUP:= BUP-TAKE(BUP+1).PURPT THEN 83310000=14088000=
|
|
GO TO GETLP 83315000=14090000=
|
|
END; 83320000=14090000=
|
|
IF TYPEV:= G.CLASS = FRMTID OR TYPEV = SUPERFRMTID THEN 83325000=14091000=
|
|
G.ADDRESS:= F:= F+2 83330000=14093000=
|
|
ELSE 83335000=14093000=
|
|
IF TYPEV:= G.CLASS <= INTARRAYID AND TYPEV >= BOOARRAYID 83340000=14096000=
|
|
THEN 83345000=14096000=
|
|
BEGIN 83350000=14097000=
|
|
T1:= G.INCR; 83355000=14098000=
|
|
GT1:= N:= TAKE(BUP+T1); 83360000=14099000=
|
|
G.ADDRESS:= F:= F+N+1; 83365000=14100000=
|
|
WHILE N ^= 0 DO 83370000=14102000=
|
|
BEGIN 83375000=14103000=
|
|
IF T2:= TAKE(BUP+T1+N) < 0 THEN 83380000=14105000=
|
|
BEGIN 83385000=14106000=
|
|
T2:= -T2; 83390000=14107000=
|
|
T2.LBP:= 4*(F-N)+2; 83395000=14108000=
|
|
PUT(T2, BUP+T1+N) 83400000=14110000=
|
|
END; 83405000=14110000=
|
|
N:= N-1 83410000=14112000=
|
|
END 83415000=14114000=
|
|
END 83420000=14115000=
|
|
ELSE 83425000=14115000=
|
|
G.ADDRESS:= F:= F+1; 83430000=14115000=
|
|
PUT(G, BUP); 83435000=14116000=
|
|
G.INCR:= GT1; 83440000=14116000=
|
|
IF FWDTOG THEN 83445000=14116100=
|
|
COMMENT CHECK CORRESPONDENCE W/ FWD; 83450000=14116100=
|
|
BEGIN 83455000=14116200=
|
|
IF (GT1:= TAKE(MARK+PJ)).CLASS ^= G.CLASS 83460000=14116400=
|
|
COMMENT CLASS ERROR; 83465000=14116400=
|
|
THEN 83470000=14116400=
|
|
FLAG(49); 83475000=14116400=
|
|
COMMENT VALUE ERROR; 83480000=14116500=
|
|
IF GT1.VO ^= G.VO THEN 83485000=14116500=
|
|
FLAG(50) 83490000=14116600=
|
|
END 83495000=14117000=
|
|
ELSE 83500000=14117000=
|
|
PUT(G, MARK+PJ); 83505000=14118000=
|
|
BUP:= BUP-TAKE(BUP+1).PURPT 83510000=14119000=
|
|
END 83515000=14120000=
|
|
UNTIL PJ:= PJ-1 = 0 83520000=14121000=
|
|
END; 83525000=14121000=
|
|
SPECTOG:= FALSE; 83530000=14122000=
|
|
GO TO HF 83535000=14124000=
|
|
END 83540000=14125000=
|
|
END; 83545000=14125000=
|
|
STACKCT:= 0; 83550000=14125500=
|
|
WHILE STEPI = DECLARATORS DO 83555000=14127000=
|
|
BEGIN 83560000=14128000=
|
|
STOPDEFINE:= (GTA1[J:= J+1]:= ELBAT[I].ADDRESS) ^= MONITORV AND 83565000=14130000=
|
|
GTA1[J] ^= DUMPV; 83570000=14130000=
|
|
ERRORTOG:= TRUE; 83575000=14130000=
|
|
END; 83580000=14131000=
|
|
IF J = 0 THEN 83585000=14132000=
|
|
GO TO CALLSTATEMENT; 83590000=14132000=
|
|
P2:= P3:= P4:= FALSE; 83595000=14133000=
|
|
GO TO DECLSW[GTA1[J]]; 83600000=14134000=
|
|
OWNERR: 83605000=14135000=
|
|
FLAG(20); 83610000=14135000=
|
|
J:= J+1; 83615000=14135000=
|
|
GO TO REALDEC; 83620000=14135000=
|
|
SAVERR: 83625000=14136000=
|
|
FLAG(21); 83630000=14136000=
|
|
J:= J+1; 83635000=14136000=
|
|
GO TO REALDEC; 83640000=14136000=
|
|
AUXMEMERR: 83645000=14136100=
|
|
FLAG(618); 83650000=14136100=
|
|
J:= J+1; 83655000=14136100=
|
|
GO TO REALDEC; 83660000=14136100=
|
|
STREAMERR: 83665000=14137000=
|
|
FLAG(22); 83670000=14137000=
|
|
J:= J+1; 83675000=14137000=
|
|
GO TO PROCEDUREDEC; 83680000=14137000=
|
|
REALDEC: 83685000=14138000=
|
|
P3:= TRUE; 83690000=14138000=
|
|
ENTER(REALID); 83695000=14138000=
|
|
GO TO START; 83700000=14138000=
|
|
ALPHADEC: 83705000=14139000=
|
|
P3:= TRUE; 83710000=14139000=
|
|
ENTER(ALFAID); 83715000=14139000=
|
|
GO TO START; 83720000=14139000=
|
|
BOOLEANDEC: 83725000=14140000=
|
|
P3:= TRUE; 83730000=14140000=
|
|
ENTER(BOOID); 83735000=14140000=
|
|
GO TO START; 83740000=14140000=
|
|
INTEGERDEC: 83745000=14141000=
|
|
P3:= TRUE; 83750000=14141000=
|
|
ENTER(INTID); 83755000=14141000=
|
|
GO TO START; 83760000=14141000=
|
|
MONITORDEC: 83765000=14142000=
|
|
IF SPECTOG THEN 83770000=14143000=
|
|
BEGIN 83775000=14143000=
|
|
COMMENT ERROR 463 MEANS THAT A MONITOR 83780000=14143000=
|
|
DECLARATION APPEARS IN THE SPECIFICATION 83785000=14144000=
|
|
PART OF A PROCEDURE; 83790000=14145000=
|
|
FLAG(463); 83795000=14146000=
|
|
END; 83800000=14147000=
|
|
IF MERRIMAC THEN 83805000=14148000=
|
|
BEGIN 83810000=14148000=
|
|
FAULTDEC; 83815000=14148000=
|
|
GO GOTSCHK 83820000=14148000=
|
|
END; 83825000=14148000=
|
|
GO START; 83830000=14148000=
|
|
DUMPDEC: 83835000=14149000=
|
|
IF SPECTOG THEN 83840000=14150000=
|
|
BEGIN 83845000=14150000=
|
|
COMMENT ERROR 464 MEANS A DUMP DECLARATION 83850000=14150000=
|
|
APPEARS IN THE SPECIFICATION PART OF A 83855000=14151000=
|
|
PROCEDURE; 83860000=14152000=
|
|
FLAG(464); 83865000=14153000=
|
|
END; 83870000=14154000=
|
|
DMUP; 83875000=14155000=
|
|
GO TO START; 83880000=14155000=
|
|
ARRAYDEC: 83885000=14156000=
|
|
JUMPCHKX; 83890000=14156000=
|
|
ARRAE; 83895000=14156000=
|
|
GO TO GOTSCHK; 83900000=14156000=
|
|
FILEDEC: 83905000=14157000=
|
|
J:= J+1; 83910000=14157000=
|
|
IODEC(11); 83915000=14157000=
|
|
GO TO GOTSCHK; 83920000=14157000=
|
|
INDEC: 83925000=14158000=
|
|
IODEC(9); 83930000=14158000=
|
|
IF G ^= FORMATV THEN 83935000=14158000=
|
|
GO GOTSCHK; 83940000=14158000=
|
|
GO START; % 83945000=14158000=
|
|
OUTDEC: 83950000=14159000=
|
|
IODEC(10); 83955000=14159000=
|
|
IF G = FORMATV THEN 83960000=14159000=
|
|
GO TO START; 83965000=14159000=
|
|
GOTSCHK: 83970000=14160000=
|
|
GOTSTORAGE:= NOT SPECTOG OR GOTSTORAGE; 83975000=14160000=
|
|
GO TO START; 83980000=14160000=
|
|
FORMATDEC: 83985000=14161000=
|
|
IF SPECTOG THEN 83990000=14161000=
|
|
ENTRY(FRMTID+REAL(GTA1[J-1] = SWITCHV)) 83995000=14161000=
|
|
ELSE 84000000=14161000=
|
|
FORMATGEN; 84005000=14162000=
|
|
GO TO START; 84010000=14162000=
|
|
LISTDEC: 84015000=14164000=
|
|
BEGIN 84020000=14164000=
|
|
REAL 84025000=14165000=
|
|
SAVEINFO; 84030000=14165000=
|
|
LABEL 84035000=14166000=
|
|
START; 84040000=14166000=
|
|
IF G:= GTA1[J] = LISTV AND G:= GTA1[J-1] = SWITCHV THEN 84045000=14167000=
|
|
BEGIN 84050000=14168000=
|
|
HANDLESWLIST; 84055000=14168000=
|
|
GO TO GOTSCHK 84060000=14168000=
|
|
END; 84065000=14168000=
|
|
IF SPECTOG THEN 84070000=14169000=
|
|
BEGIN 84075000=14170000=
|
|
ENTRY(LISTID); 84080000=14170000=
|
|
GO TO START 84085000=14170000=
|
|
END; 84090000=14170000=
|
|
STOPENTRY:= STOPGSP:= TRUE; 84095000=14171000=
|
|
I:= I-1; 84100000=14171000=
|
|
DO BEGIN 84105000=14172000=
|
|
I:= I+1; 84110000=14173000=
|
|
JUMPCHKX; 84115000=14173000=
|
|
ENTRY(LISTID); 84120000=14174000=
|
|
IF ELCLASS ^= LEFTPAREN THEN 84125000=14174000=
|
|
FLAG(31) 84130000=14174000=
|
|
ELSE 84135000=14174000=
|
|
STEPIT; 84140000=14174000=
|
|
SAVEINFO:= LASTINFO; % IN CASE C-RELATIVE CONSTANTS ARE 84145000=14175000=
|
|
% EMITTED B4 DOING THE PUT-TAKE BELOW. 84150000=14176000=
|
|
F:= LISTGEN; 84155000=14177000=
|
|
PUT(TAKE(SAVEINFO) & 84160000=14179000=
|
|
(IF MODE = 0 THEN F ELSE F:= GETSPACE(FALSE, SAVEINFO+1)) 84165000=14179000=
|
|
% LIST DESCR. 84170000=14179000=
|
|
[31:11], SAVEINFO); 84175000=14180000=
|
|
EMITSTORE(F, STD); 84180000=14181000=
|
|
END 84185000=14182000=
|
|
UNTIL ELCLASS ^= COMMA; 84190000=14182000=
|
|
STOPENTRY:= STOPGSP:= FALSE; 84195000=14183000=
|
|
START: 84200000=14185000=
|
|
END LISTDEC; 84205000=14185000=
|
|
GO TO START; 84210000=14186000=
|
|
LABELDEC: 84215000=14187000=
|
|
IF SPECTOG AND FUNCTOG THEN 84220000=14187000=
|
|
FLAG(24); 84225000=14187000=
|
|
STOPENTRY:= STOPGSP:= TRUE; 84230000=14188000=
|
|
I:= I-1; 84235000=14189000=
|
|
DO BEGIN 84240000=14191000=
|
|
STOPDEFINE:= TRUE; 84245000=14192000=
|
|
STEPIT; 84250000=14193000=
|
|
ENTRY(LABELID); 84255000=14194000=
|
|
PUTNBUMP(0) 84260000=14196000=
|
|
END 84265000=14197000=
|
|
UNTIL ELCLASS ^= COMMA; 84270000=14197000=
|
|
STOPENTRY:= STOPGSP:= FALSE; 84275000=14198000=
|
|
GO TO START; 84280000=14199000=
|
|
SWITCHDEC: 84285000=14201000=
|
|
BEGIN 84290000=14201000=
|
|
LABEL 84295000=14202000=
|
|
START; 84300000=14202000=
|
|
INTEGER 84305000=14203000=
|
|
GT1, 84310000=14203000=
|
|
GT2, 84315000=14203000=
|
|
GT4, 84320000=14203000=
|
|
GT5; 84325000=14203000=
|
|
BOOLEAN 84330000=14204000=
|
|
TB1; 84335000=14204000=
|
|
STOPENTRY:= NOT SPECTOG; 84340000=14205000=
|
|
STOPGSP:= TRUE; 84345000=14205000=
|
|
SCATTERELBAT; 84350000=14206000=
|
|
GT1:= 0; 84355000=14206000=
|
|
TB1:= FALSE; 84360000=14206000=
|
|
IF LEVELF = LEVEL THEN 84365000=14208000=
|
|
BEGIN 84370000=14209000=
|
|
IF TAKE(LINKF+1) >= 0 THEN 84375000=14211000=
|
|
FLAG(1); 84380000=14211000=
|
|
PUT(-TAKE(LINKF+1), LINKF+1); 84385000=14211000=
|
|
TB1:= TRUE; 84390000=14212000=
|
|
GT2:= ADDRSF; 84395000=14212000=
|
|
GT1:= TAKEFRST; 84400000=14213000=
|
|
GT4:= LASTINFO; 84405000=14213000=
|
|
LASTINFO:= LINKF; 84410000=14213000=
|
|
STEPIT; 84415000=14214000=
|
|
GT5:= NEXTINFO; 84420000=14214000=
|
|
NEXTINFO:= LINKF+INCRF 84425000=14215000=
|
|
END 84430000=14217000=
|
|
ELSE 84435000=14217000=
|
|
ENTRY(SWITCHID); 84440000=14217000=
|
|
STOPGSP:= STOPENTRY:= FALSE; 84445000=14217000=
|
|
IF SPECTOG THEN 84450000=14217000=
|
|
GO TO START; 84455000=14219000=
|
|
IF ELCLASS = ASSIGNOP THEN 84460000=14220000=
|
|
BEGIN 84465000=14221000=
|
|
JUMPCHKNX; 84470000=14222000=
|
|
PUTNBUMP(L); 84475000=14222000=
|
|
G:= L; 84480000=14222000=
|
|
IF FORMALF:= SWITCHGEN(TB1, GT1) THEN 84485000=14224000=
|
|
BEGIN 84490000=14225000=
|
|
JUMPCHKX; 84495000=14227000=
|
|
STUFFF(GT1); 84500000=14228000=
|
|
IF MODE > 0 THEN 84505000=14230000=
|
|
IF TB1 THEN 84510000=14231000=
|
|
GT1:= GT2 84515000=14231000=
|
|
ELSE 84520000=14231000=
|
|
GT1:= GETSPACE(FALSE, LASTINFO+1); % SWITCH. 84525000=14232000=
|
|
EMITSTORE(GT1, STD) 84530000=14234000=
|
|
END; 84535000=14234000=
|
|
END 84540000=14237000=
|
|
ELSE 84545000=14237000=
|
|
BEGIN 84550000=14237000=
|
|
IF ELCLASS ^= FORWARDV THEN 84555000=14238000=
|
|
FLAG(33); 84560000=14238000=
|
|
PUT(-TAKE(LASTINFO+1), LASTINFO+1); 84565000=14239000=
|
|
PUTNBUMP(GT1:= GETSPACE(TRUE, LASTINFO+1)); %SWITCH. 84570000=14240000=
|
|
IF MODE > 0 THEN 84575000=14241000=
|
|
GT1:= GETSPACE(FALSE, -1); %TEMP. STOR. 84580000=14241000=
|
|
STEPIT; 84585000=14242000=
|
|
FORMALF:= TRUE 84590000=14244000=
|
|
END; 84595000=14244000=
|
|
PUT(TAKE(LASTINFO) & REAL(FORMALF)[38:0:1] & GT1[31:10:11], 84600000=14245000=
|
|
LASTINFO); 84605000=14245000=
|
|
IF TB1 THEN 84610000=14246000=
|
|
BEGIN 84615000=14247000=
|
|
NEXTINFO:= GT5; 84620000=14248000=
|
|
LASTINFO:= GT4; 84625000=14249000=
|
|
END; 84630000=14250000=
|
|
START: 84635000=14252000=
|
|
END SWITCHDEC; 84640000=14252000=
|
|
GO TO START; 84645000=14253000=
|
|
DEFINEDEC: 84650000=14254050=
|
|
BEGIN 84655000=14254050=
|
|
LABEL 84660000=14254050=
|
|
START; 84665000=14254050=
|
|
REAL 84670000=14254100=
|
|
J, 84675000=14254100=
|
|
K, 84680000=14254100=
|
|
DINFO, 84685000=14254100=
|
|
LINKA, 84690000=14254100=
|
|
LINKB; 84695000=14254100=
|
|
STOPENTRY:= STOPGSP:= TRUE; 84700000=14255000=
|
|
I:= I-1; 84705000=14255000=
|
|
DEFINING:= BOOLEAN(REAL(DEFINING) & 1[0:0:1]); 84710000=14255500=
|
|
DO BEGIN 84715000=14257000=
|
|
STOPDEFINE:= TRUE; 84720000=14258000=
|
|
STEPIT; 84725000=14259000=
|
|
MOVE(9, ACCUM, 1, GTA1, 0); 84730000=14259000=
|
|
K:= COUNT+1; 84735000=14259010=
|
|
J:= GTA1[0]; 84740000=14259010=
|
|
ENTRY(DEFINEDID); 84745000=14259010=
|
|
GTA1[0]:= J+6"100000"; 84750000=14259015=
|
|
J:= 0; 84755000=14259015=
|
|
DINFO:= LASTINFO; 84760000=14259017=
|
|
IF ELCLASS = LEFTPAREN OR ELCLASS = LFTBRKET THEN 84765000=14259020=
|
|
BEGIN 84770000=14259030=
|
|
IF K > 62 THEN 84775000=14259040=
|
|
BEGIN 84780000=14259040=
|
|
ERR(141); 84785000=14259040=
|
|
GO START 84790000=14259040=
|
|
END; 84795000=14259040=
|
|
DO BEGIN 84800000=14259060=
|
|
STOPDEFINE:= TRUE; 84805000=14259060=
|
|
STEPIT; 84810000=14259070=
|
|
IF(J:= J+1) > 9 THEN 84815000=14259075=
|
|
BEGIN 84820000=14259075=
|
|
ERR(172); 84825000=14259075=
|
|
GO START 84830000=14259075=
|
|
END; 84835000=14259075=
|
|
MOVE(9, ACCUM, 1, DEFINFO, (J-1)*10); 84840000=14259080=
|
|
DEFINEPARAM(DINFO+1, J); 84845000=14259085=
|
|
ACCUM[0]:= 0 & DEFINEDID CLASS & 1 FORMAL; 84850000=14259090=
|
|
LINKA:= LASTINFO; 84855000=14259094=
|
|
LINKB:= NEXTINFO; 84860000=14259094=
|
|
E; 84865000=14259096=
|
|
IF LASTINFO ^= LINKB THEN % NEW INFO ROW ENTERED. 84870000=14259098=
|
|
PUT(TAKE(LINKA) & (LASTINFO-LINKA)[20:7:8], LINKA) 84875000=14259100=
|
|
; 84880000=14259100=
|
|
STACKHEAD[SCRAM]:= TAKE(LASTINFO).LINK; 84885000=14259102=
|
|
STOPDEFINE:= TRUE; 84890000=14259104=
|
|
END 84895000=14259110=
|
|
UNTIL STEPI ^= COMMA; 84900000=14259110=
|
|
IF ELCLASS ^= RTPAREN AND ELCLASS ^= RTBRKET THEN 84905000=14259120=
|
|
ERR(173); 84910000=14259120=
|
|
STOPDEFINE:= TRUE; 84915000=14259130=
|
|
STEPIT; 84920000=14259140=
|
|
PUT(-TAKE(DINFO), DINFO); % MARK AS PARAMETRIC 84925000=14259150=
|
|
PUT(TAKE(LASTINFO) & 0[20:7:8], LASTINFO); 84930000=14259155=
|
|
END; 84935000=14259160=
|
|
IF ELCLASS ^= RELOP OR ACCUM[1] ^= 6"1=0000" THEN 84940000=14261000=
|
|
BEGIN 84945000=14262000=
|
|
FLAG(45); 84950000=14263000=
|
|
COMMENT ERROR 45 IS NO = FOLLOWING DEFINE ID; 84955000=14263100=
|
|
I:= I-1; 84960000=14264000=
|
|
END; 84965000=14265000=
|
|
MACROID:= TRUE; 84970000=14265900=
|
|
LASTINFO:= DINFO; 84975000=14265930=
|
|
PUT(TAKE(DINFO) & NEXTTEXT[36:15:16], DINFO); 84980000=14265950=
|
|
DEFINEGEN(FALSE, J & DINFO[29:14:15]); 84985000=14266000=
|
|
MACROID:= FALSE; 84990000=14266100=
|
|
END 84995000=14268000=
|
|
UNTIL STEPI ^= COMMA; 85000000=14268000=
|
|
DEFINING:= BOOLEAN(REAL(DEFINING) & 0[0:0:1]); 85005000=14268500=
|
|
START: 85010000=14269000=
|
|
STOPENTRY:= STOPGSP:= FALSE; 85015000=14269000=
|
|
END; 85020000=14269000=
|
|
GO TO START; 85025000=14269000=
|
|
FIELDDEC: 85030000=14269040=
|
|
BEGIN 85035000=14269040=
|
|
REAL 85040000=14269060=
|
|
SAVEINFO, 85045000=14269060=
|
|
SB, 85050000=14269060=
|
|
NB; 85055000=14269060=
|
|
BOOLEAN 85060000=14269080=
|
|
FOUNDLB; % TRUE IF LEFT-BRACKET WAS USED IN FIELD SPEC. 85065000=14269080=
|
|
LABEL 85070000=14269100=
|
|
EXIT, 85075000=14269100=
|
|
SAVEIT; 85080000=14269100=
|
|
STOPENTRY:= STOPGSP:= TRUE; 85085000=14269120=
|
|
I:= I-1; 85090000=14269140=
|
|
DO BEGIN 85095000=14269180=
|
|
STOPDEFINE:= TRUE; 85100000=14269200=
|
|
STEPIT; 85105000=14269220=
|
|
ENTRY(FIELDID); 85110000=14269240=
|
|
SAVEINFO:= LASTINFO; 85115000=14269260=
|
|
IF ELCLASS = RELOP AND ACCUM[1] = 6"1=0000" THEN 85120000=14269280=
|
|
BEGIN 85125000=14269300=
|
|
IF STEPI = LFTBRKET THEN% REMEMBER THIS 85130000=14269320=
|
|
BEGIN 85135000=14269340=
|
|
FOUNDLB:= TRUE; 85140000=14269360=
|
|
STEPIT; 85145000=14269380=
|
|
END 85150000=14269440=
|
|
ELSE 85155000=14269440=
|
|
FOUNDLB:= FALSE; 85160000=14269440=
|
|
IF ELCLASS = FIELDID THEN 85165000=14269442=
|
|
BEGIN 85170000=14269444=
|
|
SB:= ELBAT[I].SBITF; 85175000=14269446=
|
|
NB:= ELBAT[I].NBITF; 85180000=14269448=
|
|
GO TO SAVEIT; 85185000=14269450=
|
|
END; 85190000=14269452=
|
|
IF ELCLASS = LITNO THEN 85195000=14269460=
|
|
IF STEPI = COLON THEN 85200000=14269480=
|
|
IF STEPI = LITNO THEN 85205000=14269500=
|
|
IF(SB:= ELBAT[I-2].ADDRESS)*(NB:= ELBAT[I].ADDRESS) 85210000=14269540=
|
|
^= 0 AND SB+NB <= 48 85215000=14269560=
|
|
THEN 85220000=14269560=
|
|
BEGIN 85225000=14269580=
|
|
SAVEIT: 85230000=14269600=
|
|
PUT 85235000=14269620=
|
|
(TAKE(SAVEINFO) & SB SBITF & NB NBITF, SAVEINFO) 85240000=14269620=
|
|
; 85245000=14269620=
|
|
STEPIT; 85250000=14269640=
|
|
IF FOUNDLB THEN % BETTER HAVE RIGHT BRACKET. 85255000=14269660=
|
|
IF ELCLASS = RTBRKET THEN 85260000=14269680=
|
|
BEGIN 85265000=14269700=
|
|
STEPIT; 85270000=14269705=
|
|
GO TO EXIT; 85275000=14269710=
|
|
END 85280000=14269740=
|
|
ELSE 85285000=14269740=
|
|
ELSE 85290000=14269760=
|
|
GO TO EXIT; 85295000=14269760=
|
|
END; 85300000=14269780=
|
|
END; 85305000=14269800=
|
|
FLAG(114); 85310000=14269820=
|
|
DO 85315000=14269840=
|
|
STEPIT 85320000=14269840=
|
|
UNTIL ELCLASS = COMMA OR ELCLASS = SEMICOLON; 85325000=14269840=
|
|
EXIT: 85330000=14269880=
|
|
END 85335000=14269920=
|
|
UNTIL ELCLASS ^= COMMA; 85340000=14269920=
|
|
STOPENTRY:= STOPGSP:= FALSE; 85345000=14269940=
|
|
END; 85350000=14269960=
|
|
GO TO START; 85355000=14269980=
|
|
PROCEDUREDEC: 85360000=14271000=
|
|
BEGIN 85365000=14271000=
|
|
LABEL 85370000=14272000=
|
|
START, 85375000=14272000=
|
|
START1; 85380000=14272000=
|
|
LABEL 85385000=14273000=
|
|
START2, 85390000=14273000=
|
|
DOITANYWAY; 85395000=14273000=
|
|
COMMENT FWDTOG NOW GLOBAL TO BLOCK; 85400000=14274000=
|
|
IF NOT SPECTOG THEN 85405000=14275000=
|
|
FUNCTOG:= FALSE; 85410000=14275000=
|
|
FWDTOG:= NEXTSAVE:= FALSE; 85415000=14276000=
|
|
IF LASTENTRY ^= 0 THEN 85420000=14276500=
|
|
BEGIN 85425000=14276500=
|
|
JUMPCHKNX; 85430000=14276500=
|
|
CONSTANTCLEAN 85435000=14276500=
|
|
END; 85440000=14276500=
|
|
MAXSTACKO:= MAXSTACK; 85445000=14277000=
|
|
IF G:= GTA1[J:= J-1] = STREAMV THEN 85450000=14279000=
|
|
BEGIN 85455000=14280000=
|
|
STREAMTOG:= TRUE; 85460000=14280000=
|
|
IF G:= GTA1[J:= J-1] = 0 THEN 85465000=14281000=
|
|
TYPEV:= STRPROCID 85470000=14282000=
|
|
ELSE 85475000=14282000=
|
|
BEGIN 85480000=14283000=
|
|
IF TYPEV:= PROCID+G > INTSTRPROCID OR 85485000=14286000=
|
|
TYPEV < BOOSTRPROCID THEN 85485100
|
|
FLAG(004); 85490000=14286000=
|
|
IF NOT SPECTOG THEN 85495000=14287000=
|
|
FUNCTOG:= TRUE; 85500000=14288000=
|
|
CHKSOB 85505000=14290000=
|
|
END 85510000=14291000=
|
|
END 85515000=14292000=
|
|
ELSE 85520000=14292000=
|
|
IF G = 0 THEN 85525000=14292000=
|
|
TYPEV:= PROCID 85530000=14293000=
|
|
ELSE 85535000=14293000=
|
|
IF(TYPEV:= REALSTRPROCID+G) = INTSTRPROCID THEN 85540000=14294000=
|
|
BEGIN 85545000=14294100=
|
|
NEXTSAVE:= TRUE; 85550000=14294100=
|
|
TYPEV:= PROCID 85555000=14294100=
|
|
END 85560000=14295000=
|
|
ELSE 85565000=14295000=
|
|
IF TYPEV < BOOPROCID OR TYPEV > INTPROCID THEN 85570000=14295000=
|
|
FLAG(005) 85575000=14295100=
|
|
ELSE 85580000=14295100=
|
|
BEGIN 85585000=14295100=
|
|
IF(NEXTSAVE:= GTA1[J-1] = SAVEV) THEN 85590000=14295100=
|
|
J:= J-1; 85595000=14295100=
|
|
IF NOT SPECTOG THEN 85600000=14296000=
|
|
FUNCTOG:= TRUE; 85605000=14296000=
|
|
CHKSOB 85610000=14297000=
|
|
END; 85615000=14297000=
|
|
IF SPECTOG THEN 85620000=14299000=
|
|
BEGIN 85625000=14300000=
|
|
ENTRY(TYPEV); 85630000=14301000=
|
|
GO TO START2 85635000=14302000=
|
|
END; 85640000=14302000=
|
|
MODE:= MODE+1; 85645000=14303000=
|
|
LO:= PROINFO; 85650000=14304000=
|
|
SCATTERELBAT; 85655000=14305000=
|
|
85660000=14306000=
|
|
COMMENT CHECK TO SEE IF DECLARED FORWARD PREVIOUSLY ;85665000=14306000=
|
|
IF LEVELF = LEVEL THEN 85670000=14308000=
|
|
IF KLASSF ^= TYPEV THEN 85675000=14308000=
|
|
BEGIN 85680000=14308000=
|
|
FLAG(6); 85685000=14308000=
|
|
GO DOITANYWAY 85690000=14308000=
|
|
END 85695000=14309000=
|
|
ELSE 85700000=14309000=
|
|
BEGIN 85705000=14309000=
|
|
IF G:= TAKE(LINKF+1) >= 0 THEN 85710000=14310000=
|
|
FLAG(006) 85715000=14310000=
|
|
ELSE 85720000=14310000=
|
|
PUT(-G, LINKF+1); 85725000=14310000=
|
|
XMARK(DECLREF); % PROCEDURE DECLARED FORWARD. MARK LAST 85730000=14310500=
|
|
% XREF ENTRY AS A DECLARATION. 85735000=14310501=
|
|
IF REAL(NEXTSAVE) ^= G.[44:1] THEN 85740000=14311100=
|
|
FLAG(051); 85745000=14311100=
|
|
FWDTOG:= TRUE; 85750000=14312000=
|
|
PROAD:= ADDRSF; 85755000=14313000=
|
|
PROINFO:= ELBAT[I]; 85760000=14314000=
|
|
MARK:= LINKF+INCRF; 85765000=14314000=
|
|
STEPIT 85770000=14316000=
|
|
END 85775000=14318000=
|
|
ELSE 85780000=14318000=
|
|
DOITANYWAY: 85785000=14318000=
|
|
BEGIN 85790000=14318000=
|
|
STOPENTRY:= P2:= TRUE; 85795000=14318000=
|
|
ENTRY(TYPEV); 85800000=14319000=
|
|
MARK:= NEXTINFO; 85805000=14319000=
|
|
PUTNBUMP(0); 85810000=14319000=
|
|
PROINFO:= TAKE(LASTINFO) & LASTINFO[12:12:13]; 85815000=14320000=
|
|
PROAD:= ADDRSF; 85820000=14320000=
|
|
P2:= STOPENTRY:= FALSE 85825000=14322000=
|
|
END; 85830000=14322000=
|
|
IF LEVEL < 31 THEN 85835000=14323000=
|
|
LEVEL:= LEVEL+1 85840000=14323100=
|
|
ELSE 85845000=14323100=
|
|
FLAG(039); 85850000=14323100=
|
|
PJ:= 0; 85855000=14323200=
|
|
IF STREAMTOG THEN 85860000=14324000=
|
|
STREAMWORDS; 85865000=14324000=
|
|
IF ELCLASS = SEMICOLON THEN 85870000=14325000=
|
|
GO TO START1; 85875000=14325000=
|
|
IF ELCLASS ^= LEFTPAREN THEN 85880000=14326000=
|
|
FLAG(007); 85885000=14326000=
|
|
85890000=14327000=
|
|
COMMENT: THE FOLLOWING 8 STATEMENTS FOOL THE SCANNER AND BLOCK,PUTTING 85895000=14327000=
|
|
FORMAL PARAMETER ENTRIES IN THE ZERO ROW OF INFO; 85900000=14328000=
|
|
RR1:= NEXTINFO; 85905000=14329000=
|
|
LASTINFOT:= LASTINFO; 85910000=14330000=
|
|
LASTINFO:= NEXTINFO:= 1; 85915000=14330000=
|
|
PUTNBUMP(0); 85920000=14331000=
|
|
PTOG:= TRUE; 85925000=14332000=
|
|
I:= I+1; 85930000=14332000=
|
|
ENTRY(SECRET); 85935000=14333000=
|
|
IF FWDTOG THEN 85940000=14333100=
|
|
BEGIN 85945000=14333100=
|
|
IF GT1:= TAKE(MARK).[7:8] ^= PJ THEN % 85950000=14333100=
|
|
FLAG(48); COMMENT WRONG NUMBER OF PARAMETERS; 85955000=14333200=
|
|
COMMENT SO THAT WE DONT CLOBBER INFO; 85970000=14333300=
|
|
END 85975000=14334000=
|
|
ELSE 85980000=14334000=
|
|
PUT(PJ, MARK); 85985000=14334000=
|
|
P:= PJ; 85990000=14335000=
|
|
IF ELCLASS ^= RTPAREN THEN 85995000=14337000=
|
|
FLAG(008); 86000000=14337000=
|
|
IF STEPI ^= SEMICOLON THEN 86005000=14339000=
|
|
FLAG(009); 86010000=14339000=
|
|
86015000=14340000=
|
|
COMMENT MARK PARAMETERS VALUE IF THERE IS A VALUE PART; 86020000=14340000=
|
|
IF STEPI = VALUEV THEN 86025000=14342000=
|
|
BEGIN 86030000=14343000=
|
|
DO 86035000=14345000=
|
|
IF STEPI ^= SECRET THEN 86040000=14346000=
|
|
FLAG(010) 86045000=14347000=
|
|
ELSE 86050000=14347000=
|
|
BEGIN 86055000=14348000=
|
|
IF G:= ELBAT[I].ADDRESS = 0 OR G > PJ THEN 86060000=14350000=
|
|
FLAG(010); 86065000=14351000=
|
|
G:= TAKE(ELBAT[I]); 86070000=14352000=
|
|
PUT(G & 1[37:0:1], ELBAT[I]) 86075000=14354000=
|
|
END 86080000=14356000=
|
|
UNTIL STEPI ^= COMMA; 86085000=14356000=
|
|
IF ELCLASS ^= SEMICOLON THEN 86090000=14358000=
|
|
FLAG(011) 86095000=14359000=
|
|
ELSE 86100000=14359000=
|
|
STEPIT 86105000=14360000=
|
|
END; 86110000=14360000=
|
|
I:= I-1; 86115000=14360000=
|
|
IF STREAMTOG THEN 86120000=14362000=
|
|
BEGIN 86125000=14363000=
|
|
BUP:= PJ; 86130000=14364000=
|
|
SPECTOG:= TRUE; 86135000=14364000=
|
|
GO TO START1 86140000=14365000=
|
|
END 86145000=14367000=
|
|
ELSE 86150000=14367000=
|
|
BEGIN 86155000=14367000=
|
|
SPECTOG:= TRUE; 86160000=14368000=
|
|
BUP:= 0; 86165000=14369000=
|
|
IF ELCLASS ^= DECLARATORS THEN 86170000=14371000=
|
|
FLAG(012) 86175000=14372000=
|
|
END; 86180000=14372000=
|
|
START: 86185000=14373000=
|
|
PTOG:= FALSE; 86190000=14373000=
|
|
LASTINFO:= LASTINFOT; 86195000=14373000=
|
|
NEXTINFO:= 86200000=14373000=
|
|
IF FWDTOG THEN 86205000=14373000=
|
|
RR1 86210000=14373000=
|
|
ELSE 86215000=14373000=
|
|
MARK+PJ+1; 86220000=14374000=
|
|
START1: 86225000=14375000=
|
|
PINFOO:= NEXTINFO; 86230000=14375000=
|
|
START2: 86235000=14376000=
|
|
END; 86240000=14376000=
|
|
IF SPECTOG OR STREAMTOG THEN 86245000=14378000=
|
|
GO TO START; 86250000=14379000=
|
|
86255000=14380000=
|
|
COMMENT IF SPECTOG IS ON THEN THE BLOCK WILL PROCESS THE SPECIFICATION 86260000=14380000=
|
|
PART SIMILARY TO DECLARATIONS WITH A FEW NECESSARY VARIATIONS; 86265000=14381000=
|
|
HF: BEGIN 86270000=14383000=
|
|
LABEL 86275000=14384000=
|
|
START, 86280000=14384000=
|
|
STOP; 86285000=14384000=
|
|
IF STREAMTOG THEN 86290000=14386000=
|
|
BEGIN 86295000=14386000=
|
|
JUMPCHKNX; 86300000=14387000=
|
|
G:= PROGDESCBLDR(CHAR, L, PROAD); 86305000=14387000=
|
|
PJ:= P; 86310000=14387000=
|
|
PTOG:= FALSE; 86315000=14388000=
|
|
IF FUNCTOG THEN 86320000=14390000=
|
|
PUT((Z:= TAKE(PROINFO)) & LOCLID[45:6:7] & (PJ:= PJ+1) 86325000=14392000=
|
|
[31:10:11], PROINFO); 86330000=14392000=
|
|
IF STEPI = BEGINV THEN 86335000=14394000=
|
|
BEGIN 86340000=14395000=
|
|
WHILE STEPI = DECLARATORS OR ELCLASS = LOCALV DO 86345000=14397000=
|
|
BEGIN 86350000=14398000=
|
|
IF ELBAT[I].ADDRESS = LABELV THEN 86355000=14400000=
|
|
BEGIN 86360000=14401000=
|
|
STOPDEFINE:= STOPGSP:= STOPENTRY:= TRUE; 86365000=14402000=
|
|
DO BEGIN 86370000=14403000=
|
|
STOPDEFINE:= TRUE; 86375000=14403000=
|
|
STEPIT; 86380000=14403000=
|
|
ENTRY(STLABID); 86385000=14403000=
|
|
PUTNBUMP(0) 86390000=14403000=
|
|
END 86395000=14404000=
|
|
UNTIL ELCLASS ^= COMMA; 86400000=14404000=
|
|
STOPGSP:= STOPENTRY:= FALSE 86405000=14405000=
|
|
END 86410000=14407000=
|
|
ELSE 86415000=14407000=
|
|
BEGIN 86420000=14407000=
|
|
I:= I+1; 86425000=14408000=
|
|
ENTRY(LOCLID) 86430000=14410000=
|
|
END 86435000=14411000=
|
|
END; 86440000=14411000=
|
|
COMPOUNDTAIL 86445000=14413000=
|
|
END 86450000=14415000=
|
|
ELSE 86455000=14415000=
|
|
STREAMSTMT; 86460000=14415000=
|
|
COMMENT THE FOLLOWING BLOCK CONSTITUTES THE STREAM PROCEDURE PURGE; 86465000=14416000=
|
|
BEGIN 86470000=14417000=
|
|
REAL 86475000=14418000=
|
|
NLOC, 86480000=14418000=
|
|
NLAB; 86485000=14418000=
|
|
DEFINE 86490000=14419000=
|
|
SES = 18 #, 86495000=14419000=
|
|
SED = 6 #, 86500000=14419000=
|
|
TRW = 5 #; 86505000=14419000=
|
|
DEFINE 86510000=14419100=
|
|
RSA = 43 #; 86515000=14419100=
|
|
DEFINE 86520000=14420000=
|
|
LOC = [11:12] #, 86525000=14420000=
|
|
LASTGT = [23:12] #; 86530000=14420000=
|
|
J:= LASTINFO; 86535000=14421000=
|
|
NLOC:= NLAB:= 0; 86540000=14422000=
|
|
DO BEGIN 86545000=14424000=
|
|
IF (GT1:= TAKE(J)).CLASS = LOCLID THEN 86550000=14425000=
|
|
BEGIN 86555000=14426000=
|
|
IF BOOLEAN(GT1.FORMAL) THEN 86560000=14427000=
|
|
BEGIN 86565000=14428000=
|
|
IF GT1 < 0 THEN 86570000=14429000=
|
|
PUT(TAKE(GT2:= MARK+P-GT1.ADDRESS+1) & 86575000=14431000=
|
|
FILEID[45:6:7], GT2); 86580000=14431000=
|
|
END 86585000=14433000=
|
|
ELSE 86590000=14433000=
|
|
NLOC:= NLOC+1; 86595000=14433000=
|
|
END 86600000=14436000=
|
|
ELSE 86605000=14436000=
|
|
BEGIN 86610000=14436000=
|
|
IF GT1.ADDRESS ^= 0 THEN 86615000=14437000=
|
|
NLAB:= NLAB+1; 86620000=14437000=
|
|
IF (GT3:= TAKE(GIT(J))).LASTGT ^= 0 AND GT3.LOC = 0 86625000=14438000=
|
|
THEN 86630000=14438000=
|
|
BEGIN 86635000=14439000=
|
|
MOVE(9, INFO[0,*], J, ACCUM, 0); 86640000=14440000=
|
|
Q:= ACCUM[1]; 86645000=14441000=
|
|
FLAG(267); 86650000=14442000=
|
|
ERRORTOG:= TRUE; 86655000=14443000=
|
|
END; 86660000=14444000=
|
|
END; 86665000=14445000=
|
|
XREFDUMP(J); % DUMP XREF INFO 86670000=14445100=
|
|
G:= (GT2:= TAKE(J+1)).PURPT; 86675000=14446000=
|
|
IF GT1.[45:8] ^= STLABID*2+1 THEN 86680000=14447000=
|
|
STACKHEAD[(0 & GT2[35:35:36]) MOD 125]:= TAKE(J).LINK; 86685000=14448000=
|
|
END 86690000=14449000=
|
|
UNTIL J:= J-G <= 1; 86695000=14449000=
|
|
PUT(P & NLAB[40:5:6] & (NLOC+REAL(FUNCTOG))[46:5:6] & (LPRT+1)86700000=14451000=
|
|
[34:10:11], MARK); 86705000=14451000=
|
|
GT1:= L; 86710000=14451100=
|
|
L:= FILETHING; 86715000=14451100=
|
|
WHILE L ^= 4095 DO 86720000=14451200=
|
|
BEGIN 86725000=14451300=
|
|
FILETHING:= GET(L); 86730000=14451300=
|
|
EMITC(PJ+1, RSA); 86735000=14451400=
|
|
L:= FILETHING; 86740000=14451500=
|
|
END; 86745000=14451600=
|
|
L:= GT1; 86750000=14451700=
|
|
FILETHING:= 4095; 86755000=14451700=
|
|
IF FUNCTOG THEN 86760000=14452000=
|
|
BEGIN 86765000=14453000=
|
|
EMITC(TAKE(PROINFO).ADDRESS, SES); 86770000=14454000=
|
|
EMITC(PJ+2, SED); 86775000=14455000=
|
|
EMITC(1, TRW); 86780000=14456000=
|
|
PUT(Z, PROINFO); 86785000=14457000=
|
|
END; 86790000=14458000=
|
|
EMIT(0); 86795000=14459000=
|
|
STREAMWORDS; 86800000=14460000=
|
|
STREAMTOG:= FALSE; 86805000=14461000=
|
|
IF LISTER AND FORMATOG THEN 86810000=14461500=
|
|
SPACEITDOWN; 86815000=14461500=
|
|
END; 86820000=14462000=
|
|
LASTINFO:= LASTINFOT; 86825000=14463000=
|
|
NEXTINFO:= MARK+P+1; 86830000=14463000=
|
|
END 86835000=14466000=
|
|
ELSE 86840000=14466000=
|
|
BEGIN 86845000=14466000=
|
|
IF STEPI = FORWARDV THEN 86850000=14468000=
|
|
BEGIN 86855000=14469000=
|
|
XREFIT(PROINFO, 0, FORWARDREF); % WE NEED THIS SO WE CAN FIND 86860000=14469100=
|
|
% THE FORWARD DECL. DURING XREF 86865000=14469101=
|
|
PUT(-TAKE(G:= PROINFO.LINK+1) & REAL(NEXTSAVE)[44:0:1], G); 86870000=14470000=
|
|
PURGE(PINFOO); 86875000=14471000=
|
|
STEPIT 86880000=14473000=
|
|
END 86885000=14475000=
|
|
ELSE 86890000=14475000=
|
|
BEGIN 86895000=14475000=
|
|
PROADO:= PROAD; 86900000=14476000=
|
|
TSUBLEVEL:= SUBLEVEL; 86905000=14477000=
|
|
SUBLEVEL:= LEVEL; 86910000=14477000=
|
|
STACKCTRO:= STACKCTR; 86915000=14477000=
|
|
% 86920000=14478000=
|
|
COMMENT ADDITIONS MADE TO COMPILER TO INSURE THAT STACKCELLS 86925000=14478010=
|
|
COUNTER DOES NOT OVERFLOW FOR PROCEDURE DECLARATIONS; 86930000=14478020=
|
|
IF MODE = 1 THEN 86935000=14478030=
|
|
FRSTLEVEL:= LEVEL; 86940000=14478030=
|
|
MAXSTACK:= STACKCTR:= 514+REAL(FUNCTOG); 86945000=14478040=
|
|
IF ELCLASS = BEGINV THEN 86950000=14479000=
|
|
IF TABLE(I+1) = DECLARATORS THEN 86955000=14480000=
|
|
BEGIN 86960000=14481000=
|
|
BLOCK(TRUE & NEXTSAVE[1:0:1]); 86965000=14482000=
|
|
; 86970000=14483000=
|
|
PURGE(PINFOO); 86975000=14483000=
|
|
GO TO STOP 86980000=14484000=
|
|
END; 86985000=14484000=
|
|
BEGIN 86990000=14485000=
|
|
JUMPCHKNX; 86995000=14486000=
|
|
RELAD:= L; 87000000=14487000=
|
|
IF NEXTSAVE THEN 87005000=14487010=
|
|
FLAG(052); 87010000=14487010=
|
|
STMT; 87015000=14488000=
|
|
IF FAULTOG.[1:1] THEN 87020000=14488500=
|
|
BEGIN 87025000=14488500=
|
|
EMITL(10); 87030000=14488500=
|
|
EMITO(COM); 87035000=14488500=
|
|
END; 87040000=14488500=
|
|
HTTEOAP(FALSE, RELAD, PINFOO, PROAD); 87045000=14489000=
|
|
END; 87050000=14490000=
|
|
STOP: 87055000=14492000=
|
|
SUBLEVEL:= TSUBLEVEL; 87060000=14492000=
|
|
STACKCTR:= STACKCTRO; 87065000=14493000=
|
|
IF LISTER AND FORMATOG THEN 87070000=14493500=
|
|
SPACEITDOWN; 87075000=14493500=
|
|
END; 87080000=14494000=
|
|
END; 87085000=14495000=
|
|
PROINFO:= LO; 87090000=14496000=
|
|
IF JUMPCTR = LEVEL THEN 87095000=14498000=
|
|
JUMPCTR:= LEVEL-1; 87100000=14499000=
|
|
LEVEL:= LEVEL-1; 87105000=14500000=
|
|
MODE:= MODE-1; 87110000=14501000=
|
|
MAXSTACK:= MAXSTACKO; 87115000=14502000=
|
|
START: 87120000=14503000=
|
|
END; 87125000=14503000=
|
|
GO TO START; 87130000=14504000=
|
|
CALLSTATEMENT: 87135000=14506000=
|
|
JUMPCHKX; 87140000=14506000=
|
|
IF SPECTOG THEN 87145000=14507000=
|
|
BEGIN 87150000=14507000=
|
|
IF(PJ ^= BUP) THEN 87155000=14507010=
|
|
BEGIN 87160000=14507020=
|
|
INTEGER 87165000=14507030=
|
|
II, 87170000=14507030=
|
|
SSCRAM, 87175000=14507030=
|
|
SCOUNT; 87180000=14507030=
|
|
MOVE(10, ACCUM, 0, INFO[31,*], 240); 87185000=14507040=
|
|
II:= I; 87190000=14507050=
|
|
SSCRAM:= SCRAM; 87195000=14507050=
|
|
SCOUNT:= COUNT; 87200000=14507050=
|
|
FOR SCRAM:= 0 STEP 1 UNTIL 124 DO 87205000=14507070=
|
|
IF ((I:= STACKHEAD[SCRAM]) < 256) THEN 87210000=14507080=
|
|
IF I ^= 0 THEN 87215000=14507080=
|
|
BEGIN 87220000=14507090=
|
|
ELBAT[76]:= INFO[0, I] & I[12:12:13]; 87225000=14507095=
|
|
COUNT:= INFO[0, I+1].[35:6]; 87230000=14507100=
|
|
MOVE(COUNT, INFO[0,*], I, ACCUM, 0); 87235000=14507105=
|
|
I:= 76; 87240000=14507110=
|
|
SCATTERELBAT; 87245000=14507110=
|
|
FORMALF:= TRUE; 87250000=14507120=
|
|
KLASSF:= REALID; 87255000=14507130=
|
|
MAKEUPACCUM; 87260000=14507140=
|
|
E; 87265000=14507140=
|
|
END; 87270000=14507150=
|
|
I:= II; 87275000=14507160=
|
|
SCRAM:= SSCRAM; 87280000=14507160=
|
|
COUNT:= SCOUNT; 87285000=14507160=
|
|
MOVE(10, INFO[31,*], 240, ACCUM, 0); 87290000=14507170=
|
|
BUP:= PJ; 87295000=14507180=
|
|
FLAG(12); 87300000=14507180=
|
|
SPECTOG:= TRUE; 87305000=14507180=
|
|
GO TO START; 87310000=14507190=
|
|
END; 87315000=14507200=
|
|
FLAG(12); 87320000=14508000=
|
|
GO TO HF 87325000=14509000=
|
|
END; 87330000=14509000=
|
|
BEGINCTR:= BEGINCTR-1; 87335000=14510000=
|
|
IF ERRORTOG THEN 87340000=14512000=
|
|
COMPOUNDTAIL 87345000=14513000=
|
|
ELSE 87350000=14513000=
|
|
BEGIN 87355000=14514000=
|
|
STMT; 87360000=14515000=
|
|
IF ELCLASS:= TABLE(I+1) = DECLARATORS THEN 87365000=14517000=
|
|
BEGIN 87370000=14518000=
|
|
ELBAT[I].CLASS:= SEMICOLON; 87375000=14519000=
|
|
BEGINCTR:= BEGINCTR+1; 87380000=14520000=
|
|
GO TO START 87385000=14522000=
|
|
END 87390000=14524000=
|
|
ELSE 87395000=14524000=
|
|
COMPOUNDTAIL 87400000=14525000=
|
|
END; 87405000=14525000=
|
|
BEGIN 87410000=14526000=
|
|
RELAD:= FIRSTX; 87415000=14534000=
|
|
IF STACKCTR > MAXSTACK THEN 87420000=14536000=
|
|
MAXSTACK:= STACKCTR; 87425000=14536000=
|
|
IF GOTSTORAGE OR JUMPCTR = LEVEL OR FAULTOG.[1:1] THEN 87430000=14538000=
|
|
IF NOT (GOTSTORAGE OR FAULTOG.[1:1]) THEN 87435000=14540000=
|
|
BEGIN 87440000=14541000=
|
|
EMITV(BLOCKCTR); 87445000=14542000=
|
|
EMITL(1); 87450000=14543000=
|
|
EMITO(SUB); 87455000=14544000=
|
|
EMITSTORE(BLOCKCTR, STD); 87460000=14545000=
|
|
GOTSTORAGE:= TRUE 87465000=14547000=
|
|
END 87470000=14549000=
|
|
ELSE 87475000=14549000=
|
|
BEGIN 87480000=14549000=
|
|
EMITL(10); 87485000=14550000=
|
|
EMITO(COM) 87490000=14552000=
|
|
END; 87495000=14552000=
|
|
FUNCTOG:= FUNCTOGO; 87500000=14553000=
|
|
IF SOP THEN 87505000=14555000=
|
|
HTTEOAP(GOTSTORAGE, FIRSTX, NINFOO, BLKAD) 87510000=14556000=
|
|
ELSE 87515000=14556000=
|
|
BEGIN 87520000=14557000=
|
|
IF LEVEL = 1 THEN 87525000=14557500=
|
|
EMITO(XIT) 87530000=14557600=
|
|
ELSE 87535000=14557600=
|
|
BEGIN 87540000=14557600=
|
|
EMITV(ADDRSF:= GETSPACE(TRUE, -6)); % SEG. DESCR. 87545000=14558000=
|
|
EMITO(BFW); 87550000=14558500=
|
|
END; 87555000=14558600=
|
|
CONSTANTCLEAN; 87560000=14559000=
|
|
IF GOTSTORAGE OR NCII > 0 OR LEVEL = 1 OR FAULTOG.[1:1] THEN 87565000=14561000=
|
|
BEGIN 87570000=14562000=
|
|
ADJUST; 87575000=14563000=
|
|
RELAD:= L; 87580000=14563000=
|
|
IF GOTSTORAGE OR FAULTOG.[1:1] THEN 87585000=14564100=
|
|
BEGIN 87590000=14564100=
|
|
EMITV(BLOCKCTR); 87595000=14564100=
|
|
EMITL(1); 87600000=14564100=
|
|
EMITO(ADD); 87605000=14565000=
|
|
EMITSTORE(BLOCKCTR, STD); 87610000=14565000=
|
|
END; 87615000=14566000=
|
|
IF LEVEL = 1 THEN 87620000=14567000=
|
|
IF G:= NCII+MAXSTACK-512 > 0 THEN 87625000=14567000=
|
|
DO 87630000=14567000=
|
|
EMITL(0) 87635000=14567000=
|
|
UNTIL G:= G-1 = 0; 87640000=14568000=
|
|
PURGE(NINFOO); 87645000=14569000=
|
|
IF LEVEL = 1 THEN 87650000=14569100=
|
|
IF FAULTLEVEL = 1 THEN 87655000=14569100=
|
|
BEGIN 87660000=14569200=
|
|
EMITPAIR(0, MDS); 87665000=14569200=
|
|
EMITO(CHS); 87670000=14569200=
|
|
END; 87675000=14569200=
|
|
BUMPL; 87680000=14570000=
|
|
EMITB(BBW, L, IF FIRSTX = 4095 THEN 0 ELSE FIRSTX); 87685000=14571000=
|
|
CONSTANTCLEAN 87690000=14573000=
|
|
END 87695000=14573000=
|
|
ELSE 87700000=14573000=
|
|
PURGE(NINFOO); 87705000=14573000=
|
|
IF RELAD = 4095 THEN 87710000=14574000=
|
|
RELAD:= 0; 87715000=14574000=
|
|
NEXTTEXT:= NTEXTO; 87720000=14574500=
|
|
G:= PROGDESCBLDR(LDES-REAL(LEVEL = 1), RELAD, BLKAD) 87725000=14576000=
|
|
END; 87730000=14576000=
|
|
ENILSPOT:= 1023 & CARDNUMBER[37:27:28]; 87735000=14576100=
|
|
SEGMENT((L+3) DIV 4, SGNO, SGNOO); 87740000=14577000=
|
|
ENILPTR:= OLDENILPTR; 87745000=14593000=
|
|
LASTADDRESS:= OLDLASTADDRESS; 87750000=14593000=
|
|
MOVECODE(TENIL, ENIL); 87755000=14594000=
|
|
MOVECODE(TEDOC, EDOC); 87760000=14595000=
|
|
L:= LOLD; 87765000=14595000=
|
|
SGNO :=: SGNOO; % ORIGINALLY A CLEVER USE OF DOUBLE 87770000=14596000=
|
|
IF NOT SOP AND LEVEL ^= 1 THEN 87775000=14598000=
|
|
BEGIN 87780000=14599000=
|
|
ADJUST; 87785000=14600000=
|
|
G:= PROGDESCBLDR(LDES, L, ADDRSF); 87790000=14601000=
|
|
IF ELCLASS = FACTOP THEN 87795000=14601100=
|
|
BEGIN 87800000=14601200=
|
|
COMMENT SPECIAL CASE FOR COBOL ONLY; 87805000=14601200=
|
|
STEPIT; 87810000=14601700=
|
|
END; 87815000=14601800=
|
|
END; 87820000=14602000=
|
|
IF JUMPCTR = LEVEL THEN 87825000=14603000=
|
|
JUMPCTR:= LEVEL-1; 87830000=14603000=
|
|
LEVEL:= LEVEL-1; 87835000=14604000=
|
|
FUNCTOG:= FUNCTOGO; 87840000=14605000=
|
|
AJUMP:= AJUMPO; 87845000=14606000=
|
|
GLOBALNINFOO:= OLDNINFOO; 87850000=14606100=
|
|
PRTI:= PRTIO; 87855000=14607000=
|
|
FIRSTX:= FIRSTXO; 87860000=14608000=
|
|
SAVEL:= SAVELO; 87865000=14609000=
|
|
STACKCTR:= STACKCTRO; 87870000=14610000=
|
|
SAVEPRTOG:= SAVEPRTOGO; 87875000=14610100=
|
|
NCII:= NCIIO; 87880000=14611000=
|
|
FAULTOG:= FAULTOGO AND (FALSE & FAULTLEVEL < LEVEL[1:0:1]); 87885000=14611000=
|
|
END; 87890000=14612000=
|
|
END BLOCK; 87895000=14613000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%87900000=14613000=
|
|
87905000=15000000=
|
|
COMMENT THIS SECTION CONTAINS THE VARIABLE ROUTINE AND ITS SIDEKICKS; 87910000=15000000=
|
|
PROCEDURE CLSMPMN(ELBATWORD, TYPEDPROC); 87915000=15001000=
|
|
VALUE 87920000=15002000=
|
|
ELBATWORD, 87925000=15002000=
|
|
TYPEDPROC; 87930000=15002000=
|
|
REAL 87935000=15003000=
|
|
ELBATWORD; 87940000=15003000=
|
|
BOOLEAN 87945000=15003010=
|
|
TYPEDPROC; 87950000=15003010=
|
|
BEGIN 87955000=15004000=
|
|
COMMENT CALL SIMPLE MONITOR IS USED TO CALL PRINTI FOR 87960000=15004000=
|
|
SIMPLE VARIABLES. SEE THE MERRIMAC ROUTINE FOR A 87965000=15005000=
|
|
DESCRIPTION OF PRINTI; 87970000=15006000=
|
|
EMITPAIR(JUNK, SND); 87975000=15007000=
|
|
EMITO(MKS); 87980000=15007000=
|
|
EMITV(JUNK); 87985000=15007000=
|
|
EMITL(PASSTYPE(ELBATWORD)); 87990000=15008000=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 87995000=15009000=
|
|
PASSALPHA(ELBATWORD); 88000000=15009000=
|
|
EMITPAIR(GNAT(CHARI), LOD); 88005000=15010000=
|
|
IF TYPEDPROC THEN 88010000=15010010=
|
|
PASSMONFILE(TAKE(GIT(ELBATWORD)).[20:11]) 88015000=15010010=
|
|
ELSE 88020000=15010010=
|
|
PASSMONFILE(TAKE(GIT(ELBATWORD)).SVARMONFILE); 88025000=15010020=
|
|
EMITNUM(1 & CARDNUMBER[46:43:44]); 88030000=15011000=
|
|
EMITV(GNAT(PRINTI)); 88035000=15012000=
|
|
END CLSMPMN; 88040000=15013000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%88045000=15013000=
|
|
INTEGER PROCEDURE PASSTYPE(ELBATWORD); 88050000=15014000=
|
|
VALUE 88055000=15015000=
|
|
ELBATWORD; 88060000=15015000=
|
|
REAL 88065000=15016000=
|
|
ELBATWORD; 88070000=15016000=
|
|
COMMENT PASSTYPE IS USED TO PASS THE TYPE OF VARIABLE BEING 88075000=15017000=
|
|
MONITORED TO PRINTI; 88080000=15018000=
|
|
PASSTYPE:= (ELBATWORD.CLASS-BOOPROCID) MOD 4; 88085000=15019000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%88090000=15019000=
|
|
PROCEDURE PASSALPHA(ELBATWORD); 88095000=15020000=
|
|
VALUE 88100000=15021000=
|
|
ELBATWORD; 88105000=15021000=
|
|
REAL 88110000=15022000=
|
|
ELBATWORD; 88115000=15022000=
|
|
BEGIN 88120000=15023000=
|
|
COMMENT PASSALPHA GENERATES CODE THAT PASSES THE ID 88125000=15023000=
|
|
PARAMETER TO PRINTI; 88130000=15024000=
|
|
DEFINE 88135000=15025000=
|
|
SIZEALPHA = RR9 #; 88140000=15025000=
|
|
COMMENT SIZEALPHA CONTAINS THE 88145000=15025000=
|
|
LENGTH OF THE ALPHA FOR THE 88150000=15026000=
|
|
VARIABLE DESCRIBED BY ELBATWORD; 88155000=15027000=
|
|
DEFINE 88160000=15028000=
|
|
INDEX = RR10 #; 88165000=15028000=
|
|
COMMENT INDEX CONTAINS THE INDEX 88170000=15028000=
|
|
INTO INFO FOR ID. INFO[INDEX] = ID; 88175000=15029000=
|
|
DEFINE 88180000=15030000=
|
|
LTEMP = RR11 #; 88185000=15030000=
|
|
COMMENT LTEMP IS A TEMP FOR L; 88190000=15030000=
|
|
EMITV(IF BOOLEAN(L.[1:1]) THEN CPLUS2 ELSE CPLUS1); 88195000=15033000=
|
|
LTEMP:= BUMPL; 88200000=15033000=
|
|
EMITWORD(GETALPHA( 88205000=15037000=
|
|
INFO[(INDEX:= ELBATWORD.LINK+1).LINKR,*], INDEX.LINKC, 88210000=15037000=
|
|
IF SIZEALPHA:= TAKE(INDEX).ALPHASIZE > 7 THEN 7 ELSE SIZEALPHA)); 88215000=15037000=
|
|
EMITB(BFW, LTEMP, L); 88220000=15037000=
|
|
END PASSALPHA; 88225000=15038000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%88230000=15038000=
|
|
COMMENT THE FOLLOWING BLOCK HANDLES THE FOLLOWING CASES 88235000=15039000=
|
|
OF SIMPLE VARIABLES: 88240000=15040000=
|
|
1. V ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 88245000=15041000=
|
|
2. V ~ EXP ,ALL V EXCEPT FORMAL-NAME. 88250000=15042000=
|
|
3. V.[S:L] ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 88255000=15043000=
|
|
4. V.[S:L] ~ EXP ,ALL V EXCEPT FORMAL-NAME. 88260000=15044000=
|
|
5. V.[S:L] ,ALL V. 88265000=15045000=
|
|
6. V ,ALL V. 88270000=15046000=
|
|
CODE EMITED FOR THE ABOVE CASES IS AS FOLLOWS: 88275000=15047000=
|
|
1. VN,EXP,M*,XCH,~. 88280000=15048000=
|
|
2. EXP,M*,VL,~. 88285000=15049000=
|
|
3. VN,DUP,COC,EXP,T,M*,XCH,~. 88290000=15050000=
|
|
4. VV,EXP,T,M*,VL,~. 88295000=15051000=
|
|
5. ZEROL,VV,T . 88300000=15052000=
|
|
6. VV . 88305000=15053000=
|
|
WHERE VN = DESC V 88310000=15054000=
|
|
EXP= ARITH, OR BOOLEAN EXPRESSION,AS REQUIRED. 88315000=15055000=
|
|
M* = CALL ON MONITOR ROUTINE,IF REQUIRED. 88320000=15056000=
|
|
VL = LITC V 88325000=15057000=
|
|
VV = OPDC V 88330000=15058000=
|
|
~ = STORE INSTRUCTION(ISD,ISN,SND OR STD). 88335000=15059000=
|
|
T = BIT TRANSFER CODE(DIA,DIB,TRB). 88340000=15060000=
|
|
ZEROL = LITC 0 88345000=15061000=
|
|
DUP,COC,XCH = THE INSTRUCTIONS DUP,COC,AND XCH. 88350000=15062000=
|
|
OF COURSE, EXP WILL CAUSE RECURSION,IN GENERAL,AND THUS 88355000=15063000=
|
|
THE PARAMETER P1 AND THE LOCALS CAN NOT BE HANDLED IN A 88360000=15064000=
|
|
GLOBAL FASHION. 88365000=15065000=
|
|
THE PARAMETER P1 IS USED TO TELL THE VARIABLE ROUTINE 88370000=15066000=
|
|
WHO CALLED IT. SOME OF THE CODE GENERATION AND SOME 88375000=15067000=
|
|
SYNTAX CHECKS DEPEND UPON A PARTICULAR VALUE OF P1 . 88380000=15068000=
|
|
; 88385000=15069000=
|
|
PROCEDURE VARIABLE(P1); 88390000=15070000=
|
|
REAL 88395000=15070000=
|
|
P1; 88400000=15070000=
|
|
BEGIN 88405000=15071000=
|
|
REAL 88410000=15072000=
|
|
TALL, COMMENT ELBAT WORD FOR VARIABLE; 88415000=15072000=
|
|
T1, COMMENT 1ST INTEGER OF PARTIAL WORD SYNTAX; 88420000
|
|
T2, COMMENT 2ND INTEGER OF PARTIAL WORD SYNTAX; 88425000
|
|
J; 88430000
|
|
COMMENT SUBSCRIPT COUNTER ; 88435000=15075000=
|
|
REAL 88440000=15075500=
|
|
X, 88445000=15075500=
|
|
Z; 88450000
|
|
REAL 88455000=15075550=
|
|
REMEMBERSEQNO; % REMEMBERS SEQUENCE NUMBER OF VARIABLE 88460000=15075550=
|
|
% ON LEFT HAND SIDE OF ASSIGNMENT SO WE 88465000=15075551=
|
|
% CAN XREF IT CORRECTLY. 88470000=15075552=
|
|
LABEL 88475000=15076000=
|
|
EXIT; 88480000=15076000=
|
|
TALL:= ELBAT[I]; 88485000=15077000=
|
|
IF ELCLASS <= INTPROCID THEN 88490000=15078000=
|
|
BEGIN 88495000=15079000=
|
|
IF TALL.LINK ^= PROINFO.LINK THEN 88500000=15080000=
|
|
BEGIN 88505000=15081000=
|
|
ERR(211); 88510000=15081000=
|
|
GO TO EXIT 88515000=15081000=
|
|
END; 88520000=15081000=
|
|
88525000=15082000=
|
|
COMMENT 211 VARIABLE-FUNCTION IDENTIFIER USED OUTSIDE OF ITS SCOPE*; 88530000=15082000=
|
|
TALL:= TALL & (ELCLASS+4)[45:6:7] & 514[31:10:11]; 88535000=15083000=
|
|
END 88540000=15085000=
|
|
ELSE 88545000=15085000=
|
|
CHECKER(TALL); 88550000=15085000=
|
|
REMEMBERSEQNO:= CARDNUMBER; 88555000=15085100=
|
|
IF TALL.CLASS <= INTID THEN 88558000=15086000=
|
|
BEGIN 88560000=15087000=
|
|
LABEL 88565000=15088000=
|
|
L1, 88570000=15088000=
|
|
EXIT; 88575000=15088000=
|
|
DEFINE 88580000=15089000=
|
|
FORMALNAME = [38:2] = 2 #; 88585000=15089000=
|
|
J:= ELCLASS; 88590000=15089010=
|
|
IF STEPI = ASSIGNOP THEN 88595000=15090000=
|
|
BEGIN 88600000=15091000=
|
|
STACKCT:= 1; 88605000=15091000=
|
|
XMARK(ASSIGNREF); % ASSIGNMENT TO SIMPLE VARIABLE. 88610000=15091100=
|
|
L1: IF TALL.FORMALNAME THEN 88615000=15092020=
|
|
BEGIN 88620000=15093000=
|
|
EMITN(TALL.ADDRESS); 88625000=15094000=
|
|
IF T1 ^= 0 THEN 88630000=15095000=
|
|
BEGIN 88635000=15095000=
|
|
EMITO(DUP); 88640000=15095000=
|
|
EMITO(COC) 88645000=15095000=
|
|
END; 88650000=15095000=
|
|
END 88655000=15097000=
|
|
ELSE 88660000=15097000=
|
|
IF T1 ^= 0 THEN 88665000=15097000=
|
|
EMITV(TALL.ADDRESS); 88670000=15098000=
|
|
STACKCT:= REAL(T1 ^= 0); 88675000=15098000=
|
|
STEPIT; 88680000=15098000=
|
|
IF TALL.CLASS = BOOID THEN 88685000=15099000=
|
|
BEXP 88690000=15099000=
|
|
ELSE 88695000=15099000=
|
|
AEXP; 88700000=15099000=
|
|
EMITD(48-T2, T1, T2); 88705000=15100000=
|
|
IF TALL < 0 THEN 88710000=15101000=
|
|
CLSMPMN(TALL, J >= BOOPROCID AND J <= INTPROCID); 88715000=15101000=
|
|
STACKCT:= 0; 88720000=15101500=
|
|
GT1:= 88725000=15102000=
|
|
IF TALL.CLASS = INTID THEN 88730000=15102000=
|
|
IF P1 = FS THEN 88735000=15103000=
|
|
ISD 88740000=15103000=
|
|
ELSE 88745000=15103000=
|
|
ISN 88750000=15103000=
|
|
ELSE 88755000=15103000=
|
|
IF P1 = FS THEN 88760000=15104000=
|
|
STD 88765000=15104000=
|
|
ELSE 88770000=15104000=
|
|
SND; 88775000=15104000=
|
|
IF TALL.FORMALNAME THEN 88780000=15105000=
|
|
BEGIN 88785000=15106000=
|
|
EMITO(XCH); 88790000=15106000=
|
|
EMITO(GT1) 88795000=15106000=
|
|
END 88800000=15107000=
|
|
ELSE 88805000=15107000=
|
|
EMITPAIR(TALL.ADDRESS, GT1); 88810000=15107000=
|
|
END 88815000=15110000=
|
|
ELSE 88820000=15110000=
|
|
BEGIN 88825000=15110000=
|
|
IF ELCLASS = PERIOD THEN 88830000=15111000=
|
|
BEGIN 88835000=15112000=
|
|
IF DOTSYNTAX(T1, T2) THEN 88840000=15112000=
|
|
GO TO EXIT; 88845000=15112000=
|
|
IF STEPI = ASSIGNOP THEN 88850000=15113000=
|
|
BEGIN 88855000=15113100=
|
|
IF P1 ^= FS THEN 88860000=15114000=
|
|
BEGIN 88865000=15115000=
|
|
ERR(201); % PARTIAL WORD NOT LEFT-MOST 88870000=15115100=
|
|
GO TO EXIT; 88875000=15115200=
|
|
END; 88880000=15115300=
|
|
XREFIT(TALL, REMEMBERSEQNO, ASSIGNREF); 88885000=15116000=
|
|
GO TO L1; 88890000=15116100=
|
|
END; 88895000=15116200=
|
|
END; 88900000=15118000=
|
|
IF P1 ^= FP THEN 88905000=15119000=
|
|
BEGIN 88910000=15119000=
|
|
ERR(202); 88915000=15119000=
|
|
GO TO EXIT 88920000=15119000=
|
|
END; 88925000=15119000=
|
|
88930000=15120000=
|
|
COMMENT 202 VARIABLE- A VARIABLE APPEARS WHICH IS NOT FOLLOWED * 88935000=15120000=
|
|
BY A LEFT ARROW OR PERIOD *;88940000=15121000=
|
|
88945000=15122000=
|
|
COMMENT 201 VARIABLE- A PARTIAL WORD DESIGNATOR IS NOT THE * 88950000=15122000=
|
|
LEFT-MOST OF A LEFT PART LIST *;88955000=15123000=
|
|
EMITI(TALL, T1, T2); 88960000=15124000=
|
|
END; 88965000=15126000=
|
|
EXIT: 88970000=15127000=
|
|
END OF BLOCK OF SIMPLE VARIABLES 88975000=15129000=
|
|
ELSE 88980000=15129000=
|
|
COMMENT THE FOLLOWING BLOCK HANDLES THESE CASES OF SUBSCRIPTED 88985000=15129000=
|
|
VARIABLES: 88990000=15130000=
|
|
1. V[*] ,ROW DESIGNATOR FOR SINGLE-DIMENSION. 88995000=15131000=
|
|
2. V[R,*] ,ROW DESIGNATOR FOR MULTI-DIMENSION. 89000000=15132000=
|
|
3. V[R] ,ARRAY ELEMENT,NAME OR VALUE. 89005000=15133000=
|
|
4. V[R].[S:L] ,PARTIAL WORD DESIGNATOR, VALUE. 89010000=15134000=
|
|
5. V[R] ~ ,ASSIGNMENT TO ARRAY ELEMENT. 89015000=15135000=
|
|
6. V[R].[S:L] ~ ,ASSIGNMENT TO PARTIAL WORD,LEFT-MOST. 89020000=15136000=
|
|
R IS A K-ORDER SUBSCRIPT LIST,I.E. R= R1,R2,...,RK. 89025000=15137000=
|
|
IN THE CASE OF NO MONITORING ON V, THE FOLLOWING CODE 89030000=15138000=
|
|
IS EMITTED FOR THE ABOVE CASES: 89035000=15139000=
|
|
1. CASE #1 IS A SPECIAL CASE OF #2,NAMELY,SINGLE 89040000=15140000=
|
|
DIMENSION. THE CODE EMITTED IS: 89045000=15141000=
|
|
VL,LOD . 89050000=15142000=
|
|
EXECUTION: PLACES ARRAY DESCRIPTER IN REG A. 89055000=15143000=
|
|
2. THIS CODE IS BASIC TO THE SUBSCRIPTION PROCESS.89060000=15144000=
|
|
EACH SUBSCRIPT GENERATES THE FOLLOWING SEQUENCE89065000=15145000=
|
|
OF CODE: 89070000=15146000=
|
|
AEXP,L*,IF FIRST SUBSCRIPT THEN VN ELSE CDC 89075000=15147000=
|
|
,LOD. 89080000=15148000=
|
|
FOR A K-ORDER SUBSCRIPTION,K-1 SEQUENCE ARE 89085000=15149000=
|
|
PRODUCED. THE AEXP IN EACH SEQUENCE REFERS TO 89090000=15150000=
|
|
THE CODE PRODUCED BY THE ARITHMETIC EXPRESSION 89095000=15151000=
|
|
PROCEDURE FOR THE ACTUAL SUBSCRIPT EXPRESSIONS,89100000=15152000=
|
|
[* REFERS TO THE CODE PRODUCED FOR SUBTRACTING 89105000=15153000=
|
|
NON-ZERO LOWER BOUNDS FROM THE SUBSCRIPT 89110000=15154000=
|
|
EXPRESSION(L* YIELDS NO CODE FOR ZERO BOUNDS). 89115000=15155000=
|
|
EXECUTION: PLACES ARRAY ROW DESCRIPTOR IN REG A89120000=15156000=
|
|
. THE SPECIFIC ROW DEPENDS UPON THE 89125000=15157000=
|
|
VALUES OF THE K-1 SUBSCRIPTS. 89130000=15158000=
|
|
FOR THE REMAINING CASES, 89135000=15159000=
|
|
SEQUENCES OF CODE ARE EMITED AS IN CASE #2. 89140000=15160000=
|
|
HOWEVER,THE ACTUAL SEQUENCES ARE: 89145000=15161000=
|
|
ONE SEQUENCE ,(AEXP,L*),FOR THE 1ST SUBSCRIPT.89150000=15162000=
|
|
K-1 SEQUENCES,(IF FIRST SUBSCRIPT THEN VN 89155000=15163000=
|
|
ELSE CDC,LOD,AEXP,L*), FOR THE REMAINING 89160000=15164000=
|
|
SUBSCRIPTS,IF K>1. 89165000=15165000=
|
|
AT THIS POINT, CASES #3-6 ARE DIFFERENTIATED 89170000=15166000=
|
|
AND ADDITION CODE,PARTICULAR TO EACH CASE,IS 89175000=15167000=
|
|
EMITTED. 89180000=15168000=
|
|
3. ADD THE SEQUENCE: 89185000=15169000=
|
|
IF FIRST SUBSCRIPT THEN VV ELSE COC. 89190000=15170000=
|
|
EXECUTION: THE ARRAY ELEMENT IS PUT IN REG A. 89195000=15171000=
|
|
4. ADD THE SEQUENCE: 89200000=15172000=
|
|
IF FIRST SUBSCRIPT THEN VV ELSE COC,ZEROL. 89205000=15173000=
|
|
XCH,T. 89210000=15174000=
|
|
5. ADD THE SEQUENCE: 89215000=15175000=
|
|
IF FIRST SUBSCRIPT THEN VN ELSE CDC,EXP, 89220000=15176000=
|
|
XCH,~. 89225000=15177000=
|
|
6. ADD THE SEQUENCE: 89230000=15178000=
|
|
IF FIRST SUBSCRIPT THEN VN ELSE CDC,DUP,LOD, 89235000=15179000=
|
|
EXP,T, XCH,~. 89240000=15180000=
|
|
EXP,T,~,ZEROL,ETC. HAVE SAME MEANINGS AS DEFINED IN 89245000=15181000=
|
|
SIMPLE VARIABLE BLOCK. ; 89250000=15182000=
|
|
BEGIN 89255000=15183000=
|
|
LABEL 89260000=15184000=
|
|
EXIT, 89265000=15184000=
|
|
LAST, 89270000=15184000=
|
|
NEXT; 89275000=15184000=
|
|
INTEGER 89280000=15184100=
|
|
THENUMBEROFDECLAREDDIMENSIONS; 89285000=15184100=
|
|
DEFINE 89290000=15185000=
|
|
NODIM = RR1 #; 89295000=15185000=
|
|
COMMENT NODIM CONTAINS THE NUMBER OF89300000=15185000=
|
|
DIMENSIONS OF A MONITORED SUBSCRIPTED 89305000=15186000=
|
|
VARIABLE; 89310000=15187000=
|
|
DEFINE 89315000=15188000=
|
|
TESTVARB = RR2 #; 89320000=15188000=
|
|
COMMENT TESTVARB CONTAINS THE 89325000=15188000=
|
|
INDEX OF THE LAST ENTRY IN INFO 89330000=15189000=
|
|
FOR A MONITORED SUBSCRIPTED 89335000=15190000=
|
|
VARIABLE; 89340000=15191000=
|
|
DEFINE 89345000=15192000=
|
|
INC = RR3 #; 89350000=15192000=
|
|
COMMENT INC IS A COUNTER USED TO INDEX89355000=15192000=
|
|
INTO INFO TO PICK OUT SPECIAL MONITOR 89360000=15193000=
|
|
INFORMATION; 89365000=15194000=
|
|
DEFINE 89370000=15195000=
|
|
SPMON = [36:12] #; 89375000=15195000=
|
|
COMMENT SPMON DESIGNATES THE BIT89380000=15195000=
|
|
POSITION OF THE SPECIAL MONITOR 89385000=15196000=
|
|
INFORMATION FOR SUBSCRIPTED 89390000=15197000=
|
|
VARIABLES; 89395000=15198000=
|
|
DEFINE 89400000=15199000=
|
|
OPBIT = [36:1] #; 89405000=15199000=
|
|
COMMENT OPBIT TELLS WHETHER TO 89410000=15199000=
|
|
EMIT AN OPDC OR LITC FOR PASSING 89415000=15200000=
|
|
THE SUBSCRIPTS FOR MONITORED 89420000=15201000=
|
|
SUBSCRIPTED VARIABLES.1 MEANS 89425000=15202000=
|
|
LITC, 0 MEANS OPDC; 89430000=15203000=
|
|
DEFINE 89435000=15204000=
|
|
LWRBND = RR4 #; 89440000=15204000=
|
|
COMMENT LWRBND HOLDS THE LOWER 89445000=15204000=
|
|
BOUND WORD FROM INFO FOR MONITORED 89450000=15205000=
|
|
SUBSCRIPTED VARIABLES; 89455000=15206000=
|
|
DEFINE 89460000=15207000=
|
|
SPMONADR = [35:11] #; 89465000=15207000=
|
|
COMMENT SPMONADR CONTAINS 89470000=15207000=
|
|
THE ADDRESS THAT WILL BE 89475000=15208000=
|
|
EMITTED IN AN OPDC OR LITC 89480000=15209000=
|
|
DEPENDING ON OPBIT; 89485000=15210000=
|
|
BOOLEAN 89490000=15211000=
|
|
SPCLMON; 89495000=15211000=
|
|
COMMENT SPCLMON IS A BOOLEAN THAT89500000=15211000=
|
|
IS SET TRUE IF THE VARIABLE IN 89505000=15212000=
|
|
TALL IS SPECIAL MONITORED. 89510000=15213000=
|
|
; 89515000=15214000=
|
|
PROCEDURE M4(TALL, J); 89520000=15215000=
|
|
VALUE 89525000=15216000=
|
|
TALL, 89530000=15216000=
|
|
J; 89535000=15216000=
|
|
REAL 89540000=15217000=
|
|
TALL, 89545000=15217000=
|
|
J; 89550000=15217000=
|
|
BEGIN 89555000=15217500=
|
|
STACKCT:= 1; 89560000=15217500=
|
|
IF J = 1 THEN 89565000=15219000=
|
|
BEGIN 89570000=15219000=
|
|
COMMENT FIRST TIME AROUND; 89575000=15219000=
|
|
IF TALL < 0 THEN 89580000=15221000=
|
|
BEGIN 89585000=15221000=
|
|
COMMENT TALL IS MONITORED; 89590000=15221000=
|
|
EMITV(JUNK); 89595000=15222000=
|
|
EMITO(XCH); 89600000=15222000=
|
|
END; 89605000=15223000=
|
|
EMITN(TALL.ADDRESS) 89610000=15225000=
|
|
END 89615000=15226000=
|
|
ELSE 89620000=15226000=
|
|
BEGIN 89625000=15226000=
|
|
COMMENT NOT THE FIRST TIME AROUND; 89630000=15226000=
|
|
EMITO(CDC); 89635000=15227000=
|
|
IF TALL < 0 THEN 89640000=15229000=
|
|
BEGIN 89645000=15229000=
|
|
COMMENT CALL SUBSCRIPT; 89650000=15229000=
|
|
EMITV(JUNK); 89655000=15230000=
|
|
EMITO(XCH); 89660000=15230000=
|
|
END; 89665000=15231000=
|
|
END; 89670000=15232000=
|
|
END; 89675000=15232000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%89680000=15232000=
|
|
IF STEPI ^= LFTBRKET THEN 89685000=15233000=
|
|
BEGIN 89690000=15233000=
|
|
ERR(207); 89695000=15233000=
|
|
GO TO EXIT 89700000=15233000=
|
|
END; 89705000=15233000=
|
|
THENUMBEROFDECLAREDDIMENSIONS:= TAKE(GIT(TALL)).[7:8]; 89710000=15233100=
|
|
J:= 0; 89715000=15234000=
|
|
STACKCT:= 0; 89720000=15234500=
|
|
89725000=15235000=
|
|
COMMENT 207 VARIABLE-MISSING LEFTBRACKET ON SUBSCRIPTED VARIABLE *; 89730000=15235000=
|
|
IF P1 > FP THEN 89735000=15236000=
|
|
TALL:= ABS(TALL) 89740000=15236000=
|
|
ELSE 89745000=15236000=
|
|
IF TALL < 0 THEN 89750000=15237000=
|
|
89755000=15238000=
|
|
COMMENT **** MONITOR FUNCTION M1 GOES HERE ; 89760000=15238000=
|
|
BEGIN 89765000=15239000=
|
|
COMMENT THIS MAY BE A MONITORED SUBSCRIPTED 89770000=15239000=
|
|
VARIABLE; 89775000=15240000=
|
|
EMITO(MKS); 89780000=15241000=
|
|
IF SPCLMON:= TAKE(GIT(TALL)+1).SPMON ^= 0 THEN 89785000=15243000=
|
|
BEGIN 89790000=15243000=
|
|
COMMENT THIS IS SPECIAL MONITORED; 89795000=15243000=
|
|
TESTVARB:= (NODIM:= TAKE(INC:= GIT(TALL)).NODIMPART)+INC; 89800000=15245000=
|
|
DO 89805000=15246000=
|
|
IF BOOLEAN(LWRBND:= TAKE(INC:= INC+1)).OPBIT THEN 89810000=15248000=
|
|
EMITL(LWRBND.SPMONADR) 89815000=15249000=
|
|
ELSE 89820000=15249000=
|
|
EMITV(LWRBND.SPMONADR) 89825000=15250000=
|
|
UNTIL INC >= TESTVARB 89830000=15251000=
|
|
END; 89835000=15251000=
|
|
END; 89840000=15252000=
|
|
NEXT: 89845000=15253000=
|
|
IF STEPI = FACTOP THEN 89850000=15253000=
|
|
BEGIN 89855000=15254000=
|
|
STLB:= 1; 89860000=15254400=
|
|
WHILE TABLE(I+1) = COMMA DO 89865000=15254500=
|
|
BEGIN 89870000=15254600=
|
|
STEPIT; 89875000=15254600=
|
|
IF STEPI = FACTOP THEN 89880000=15254700=
|
|
STLB:= STLB+1 89885000=15254700=
|
|
ELSE 89890000=15254700=
|
|
BEGIN 89895000=15254800=
|
|
ERR(204); 89900000=15254800=
|
|
GO TO EXIT 89905000=15254800=
|
|
END; 89910000=15254800=
|
|
END; 89915000=15254900=
|
|
IF J+STLB ^= THENUMBEROFDECLAREDDIMENSIONS THEN 89920000=15255000=
|
|
BEGIN 89925000=15256000=
|
|
ERR(203); 89930000=15256000=
|
|
GO EXIT 89935000=15256000=
|
|
END; 89940000=15256000=
|
|
89945000=15257000=
|
|
COMMENT 203 VARIABLE- THE NUMBER OF SUBSCRIPTS USED IN A ROW * 89950000=15257000=
|
|
ROW DESIGNATER DOES NOT MATCH THE ARRAY * 89955000=15258000=
|
|
DECLARATION. *;89960000=15259000=
|
|
IF STEPI ^= RTBRKET THEN 89965000=15260000=
|
|
BEGIN 89970000=15261000=
|
|
ERR(204); 89975000=15261000=
|
|
GO EXIT 89980000=15261000=
|
|
END; 89985000=15261000=
|
|
89990000=15262000=
|
|
COMMENT 204 VARIABLE- COMPILER EXPECTS A ] IN A ROW DESIGNATER *;89995000=15262000=
|
|
IF P1 ^= FA THEN 90000000=15262500=
|
|
IF STLB > 1 THEN 90005000=15262600=
|
|
FLAG(212) 90010000=15262600=
|
|
ELSE 90015000=15262600=
|
|
IF P1 ^= FI AND P1 ^= FL THEN 90020000=15263000=
|
|
IF P1 = FP AND REL THEN 90025000=15263050=
|
|
ELSE 90030000=15263100=
|
|
BEGIN 90035000=15263100=
|
|
ERR(205); 90040000=15263100=
|
|
GO TO EXIT; 90045000=15263100=
|
|
END; 90050000=15263100=
|
|
90055000=15264000=
|
|
COMMENT 205 VARIABLE- A ROW DESIGNATER APPEARS OUTSIDE OF A FILL * 90060000=15264000=
|
|
STATEMENT OR ACTUAL PARAMETER LIST. *;90065000=15265000=
|
|
IF J = 0 THEN 90070000=15266000=
|
|
EMITPAIR(TALL.ADDRESS, LOD); 90075000=15267000=
|
|
90080000=15268000=
|
|
COMMENT ***** MONITOR FUNCTION M2 GOES HERE ; 90085000=15268000=
|
|
IF TALL < 0 THEN 90090000=15269000=
|
|
BEGIN 90095000=15270000=
|
|
COMMENT DO NOT MONITOR AFTER ALL; 90100000=15270000=
|
|
EMITNUM(5 & CARDNUMBER[46:43:44]); 90105000=15271000=
|
|
EMITN(GNAT(PRINTI)); 90110000=15271100=
|
|
END; 90115000=15272000=
|
|
IF P1 = FA THEN 90120000=15272900=
|
|
FOR X:= 1 STEP 1 UNTIL STLB DO 90125000=15273000=
|
|
BEGIN 90130000=15273100=
|
|
IF(Z:= TAKE(GIT(TALL)+J+X)).[12:11] > 1023 THEN 90135000=15273200=
|
|
EMITV(Z) 90140000=15273200=
|
|
ELSE 90145000=15273200=
|
|
EMIT(Z); 90150000=15273200=
|
|
IF Z.[24:10] = ADD THEN 90155000=15273300=
|
|
EMITO(CHS); 90160000=15273300=
|
|
END; 90165000=15273400=
|
|
STEPIT; 90170000=15274000=
|
|
GO TO EXIT; 90175000=15275000=
|
|
END OF ROW DESIGNATOR PORTION; 90180000=15276000=
|
|
AEXP; 90185000=15278000=
|
|
COMMENT ***** MONITOR FUNCTION M3 GOES HERE ; 90190000=15278000=
|
|
90195000=15279000=
|
|
IF TALL < 0 THEN 90200000=15279000=
|
|
EMITPAIR(JUNK, ISN); 90205000=15279000=
|
|
J:= J+1; 90210000=15280000=
|
|
IF (GT1:= TAKE(GIT(TALL)+J)).[12:13] ^= 0 THEN 90215000=15281000=
|
|
BEGIN 90220000=15282000=
|
|
IF GT1.[1:2] = 0 THEN 90225000=15283000=
|
|
EMIT(GT1) 90230000=15284000=
|
|
ELSE 90235000=15284000=
|
|
EMITV(GT1.[12:11]); 90240000=15284000=
|
|
EMIT(GT1.[24:12]); 90245000=15285000=
|
|
END OF LOWER BOUND ADJUSTMENT; 90250000=15286000=
|
|
IF ELCLASS = COMMA THEN 90255000=15287000=
|
|
BEGIN 90260000=15288000=
|
|
90265000=15289000=
|
|
COMMENT ***** MONITOR FUNCTION M4 GOES HERE ; 90270000=15289000=
|
|
M4(TALL, J); 90275000=15290000=
|
|
EMITO(LOD); 90280000=15291000=
|
|
IF J+1 > THENUMBEROFDECLAREDDIMENSIONS THEN 90285000=15291100=
|
|
BEGIN 90290000=15291200=
|
|
ERR(208); 90295000=15291200=
|
|
GO TO EXIT 90300000=15291200=
|
|
END; 90305000=15291200=
|
|
90310000=15291300=
|
|
COMMENT 208 VARIABLE- NUMBER OF SUBSCRIPTS DOES NOT MATCH ARRAY * 90315000=15291300=
|
|
DECLARATION *;90320000=15291400=
|
|
GO TO NEXT; 90325000=15292000=
|
|
END OF SUBSCRIPT COMMA HANDLER; 90330000=15293000=
|
|
IF ELCLASS ^= RTBRKET THEN 90335000=15294000=
|
|
BEGIN 90340000=15294000=
|
|
ERR(206); 90345000=15294000=
|
|
GO EXIT 90350000=15294000=
|
|
END; 90355000=15294000=
|
|
90360000=15295000=
|
|
COMMENT 206 VARIABLE- MISSING RIGHT BRACKET ON SUBSCRIPTED VARIABLE*; 90365000=15295000=
|
|
IF J ^= THENUMBEROFDECLAREDDIMENSIONS THEN 90370000=15296000=
|
|
BEGIN 90375000=15297000=
|
|
ERR(208); 90380000=15297000=
|
|
GO TO EXIT 90385000=15297000=
|
|
END; 90390000=15297000=
|
|
STACKCT:= 0; 90395000=15299500=
|
|
IF STEPI = ASSIGNOP THEN 90400000=15300000=
|
|
BEGIN 90405000=15301000=
|
|
XREFIT(TALL, REMEMBERSEQNO, ASSIGNREF); % ASSIGNMENT TO 90410000=15301100=
|
|
% SUBSCRIPTED VARIABLE. 90415000=15301200=
|
|
90420000=15302000=
|
|
COMMENT ***** MONITOR FUNCTION M4 GOES HERE ; 90425000=15302000=
|
|
LAST: 90430000=15303000=
|
|
M4(TALL, J); 90435000=15303000=
|
|
IF T1 = 0 THEN 90440000=15304000=
|
|
BEGIN 90445000=15305000=
|
|
IF P1 = FR THEN 90450000=15305000=
|
|
GO TO EXIT 90455000=15306000=
|
|
END 90460000=15306000=
|
|
ELSE 90465000=15306000=
|
|
BEGIN 90470000=15306000=
|
|
EMITO(DUP); 90475000=15306000=
|
|
EMITO(COC) 90480000=15306000=
|
|
END; 90485000=15306000=
|
|
STEPIT; 90490000=15306000=
|
|
IF TALL.CLASS = BOOARRAYID THEN 90495000=15307000=
|
|
BEXP 90500000=15307000=
|
|
ELSE 90505000=15307000=
|
|
AEXP; 90510000=15307000=
|
|
EMITD(48-T2, T1, T2); 90515000=15308000=
|
|
EMITO(XCH); 90520000=15309000=
|
|
90525000=15310000=
|
|
COMMENT ***** MONITOR FUNCTION M6 GOES BEFORE EMITO(XCH); 90530000=15310000=
|
|
IF TALL < 0 THEN 90535000=15312000=
|
|
BEGIN COMMENT STORE THE VALUE OF THE EXPRESSION 90540000
|
|
IN JUNK AND CALL PRINTI, THEN RECALL THE 90550000=15313000=
|
|
VALUE FROM JUNK; 90555000=15314000=
|
|
EMITO(IF TALL.CLASS = INTARRAYID THEN ISN ELSE SND); 90560000=15318000=
|
|
IF P1 ^= FS THEN 90565000=15320000=
|
|
EMITPAIR(JUNK, SND); 90570000=15320000=
|
|
EMITL(J); 90575000=15321000=
|
|
EMITL(PASSTYPE(TALL)); 90580000=15321000=
|
|
EMITPAIR(GNAT(POWERSOFTEN), LOD); 90585000=15322000=
|
|
PASSALPHA(TALL); 90590000=15323000=
|
|
EMITPAIR(GNAT(CHARI), LOD); 90595000=15324000=
|
|
PASSMONFILE(TAKE(GIT(TALL)).ARRAYMONFILE); 90600000=15325000=
|
|
EMITNUM((IF SPCLMON THEN 3 ELSE 2) & CARDNUMBER[46:43:44]); 90605000=15327000=
|
|
EMITV(GNAT(PRINTI)); 90610000=15328000=
|
|
IF P1 ^= FS THEN 90615000=15330000=
|
|
EMITV(JUNK); 90620000=15330000=
|
|
P1:= 0; 90625000=15331000=
|
|
GO TO EXIT; 90630000=15331000=
|
|
END; 90635000=15332000=
|
|
EMITO(IF TALL.CLASS = INTARRAYID THEN IF P1 = FS THEN ISD 90640000=15335000=
|
|
ELSE ISN ELSE IF P1 = FS THEN STD ELSE SND); 90645000=15335000=
|
|
P1:= 0; 90650000=15336000=
|
|
GO TO EXIT; 90655000=15337000=
|
|
END OF ASSIGNMENT STATEMENT SUBSCRIPTED VARIABLES; 90660000=15338000=
|
|
IF ELCLASS = PERIOD THEN 90665000=15339000=
|
|
BEGIN 90670000=15340000=
|
|
IF DOTSYNTAX(T1, T2) THEN 90675000=15341000=
|
|
GO TO EXIT; 90680000=15341000=
|
|
IF STEPI = ASSIGNOP THEN 90685000=15342000=
|
|
IF P1 = FS THEN % PARTIAL WORD IS LEFT-MOST 90690000=15342100=
|
|
BEGIN 90695000=15342200=
|
|
XREFIT(TALL, REMEMBERSEQNO, ASSIGNREF); % PARTIAL 90700000=15342300=
|
|
% WORD ASSIGNMENT TO SUBSCR. VAR. 90705000=15342400=
|
|
GO TO LAST; 90710000=15342500=
|
|
END 90715000=15343000=
|
|
ELSE 90720000=15343000=
|
|
BEGIN 90725000=15343000=
|
|
ERR(209); 90730000=15343000=
|
|
GO EXIT 90735000=15343000=
|
|
END; 90740000=15343000=
|
|
IF J = 1 THEN 90745000=15344000=
|
|
EMITV(TALL.ADDRESS) 90750000=15344000=
|
|
ELSE 90755000=15344000=
|
|
EMITO(COC); 90760000=15344000=
|
|
END 90765000=15347000=
|
|
ELSE 90770000=15347000=
|
|
90775000=15347000=
|
|
COMMENT ***** MONITOR FUNCTION M10 GOES HERE ; 90780000=15347000=
|
|
BEGIN 90785000=15348000=
|
|
COMMENT MONITOR FUNCTION M10; 90790000=15348000=
|
|
SPCLMON:= P1 = FP OR ELCLASS >= AMPERSAND; 90795000=15349000=
|
|
IF J = 1 THEN 90800000=15351000=
|
|
IF SPCLMON THEN 90805000=15352000=
|
|
EMITV(TALL.ADDRESS) 90810000=15353000=
|
|
ELSE 90815000=15353000=
|
|
EMITN(TALL.ADDRESS) 90820000=15354000=
|
|
ELSE 90825000=15354000=
|
|
EMITO(IF SPCLMON THEN COC ELSE CDC); 90830000=15356000=
|
|
IF TALL < 0 THEN 90835000=15358000=
|
|
BEGIN 90840000=15358000=
|
|
COMMENT DO NOT MONITOR AFTER ALL; 90845000=15358000=
|
|
EMITNUM(5 & CARDNUMBER[46:43:44]); 90850000=15359000=
|
|
IF SPCLMON THEN 90855000=15361000=
|
|
EMITV(GNAT(PRINTI)) 90860000=15362000=
|
|
ELSE 90865000=15362000=
|
|
EMITN(GNAT(PRINTI)) 90870000=15363000=
|
|
END; 90875000=15363000=
|
|
IF P1 = FS THEN 90880000=15364000=
|
|
ERR(210); 90885000=15364000=
|
|
IF P1 = FI THEN 90890000=15364500=
|
|
P1:= 0; 90895000=15364500=
|
|
GO TO EXIT; 90900000=15365000=
|
|
END; 90905000=15366000=
|
|
IF P1 = FS THEN 90910000=15367000=
|
|
BEGIN 90915000=15367000=
|
|
ERR(210); 90920000=15367000=
|
|
GO TO EXIT 90925000=15367000=
|
|
END; 90930000=15367000=
|
|
90935000=15368000=
|
|
COMMENT 210 VARIABLE-MISSING LEFT ARROW OR PERIOD. *;90940000=15368000=
|
|
IF T1 ^= 0 THEN 90945000=15369000=
|
|
BEGIN 90950000=15369000=
|
|
EMITI(0, T1, T2); 90955000=15369000=
|
|
IF P1 ^= FI THEN 90960000=15369100=
|
|
P1:= 0; 90965000=15369100=
|
|
END; 90970000=15369200=
|
|
IF P1 = FI THEN 90975000=15369300=
|
|
IF ELCLASS ^= COMMA AND ELCLASS ^= RTPAREN THEN 90980000=15369500=
|
|
SIMPARITH; 90985000=15369500=
|
|
IF P1 = FI THEN 90990000=15369600=
|
|
P1:= 0; % 90995000=15369600=
|
|
91000000=15371000=
|
|
COMMENT ***** MONITOR FUNCTION M9 ; 91005000=15371000=
|
|
IF TALL < 0 THEN 91010000=15373000=
|
|
BEGIN 91015000=15373000=
|
|
COMMENT MONITOR FUNCTION M9; 91020000=15373000=
|
|
EMITNUM(5 & CARDNUMBER[46:43:44]); 91025000=15374000=
|
|
EMITV(GNAT(PRINTI)); 91030000=15374100=
|
|
END; 91035000=15375000=
|
|
EXIT: 91040000=15376000=
|
|
STACKCT:= 0 91045000=15376000=
|
|
END OF SUBSCRIPTED BLOCK; 91050000=15376000=
|
|
EXIT: 91055000=15377000=
|
|
END OF THE VARIABLE ROUTINE; 91060000=15377000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%91065000=15377000=
|
|
91070000=16000000=
|
|
COMMENT THIS SECTION GENERATES CODE FOR STREAM PROCEDURES; 91075000=16000000=
|
|
PROCEDURE STREAMSTMT; 91080000=16001000=
|
|
BEGIN 91085000=16002000=
|
|
DEFINE 91090000=16003000=
|
|
LFTPAREN = LEFTPAREN #, 91095000=16003000=
|
|
LOC = [11:12] #, 91100000=16003000=
|
|
LASTGT = [23:12] #, 91105000=16004000=
|
|
LOCFLD = 11:11:12 #, 91110000=16004000=
|
|
LGTFLD = 23:23:12 #; 91115000=16004000=
|
|
DEFINE 91120000=16005000=
|
|
LEVEL = LVL #, 91125000=16005000=
|
|
ADDOP = ADOP #; 91130000=16005000=
|
|
DEFINE 91135000=16007000=
|
|
JFW = 39 #, 91140000=16007000=
|
|
COMMENT 7.5.5.1 JUMP FORWARD UNCONDITIONAL ; 91145000=16007000=
|
|
RCA = 40 #, 91150000=16008000=
|
|
COMMENT 7.5.7.6 RECALL CONTROL ADDRESS ; 91155000=16008000=
|
|
JRV = 47 #, 91160000=16009000=
|
|
COMMENT 7.5.5.2 JUMP REVERSE UNCONDITIONAL ; 91165000=16009000=
|
|
CRF = 35 #, 91170000=16010000=
|
|
COMMENT 7.5.10.6 CALL REPEAT FIELD ; 91175000=16010000=
|
|
BNS = 42 #, 91180000=16011000=
|
|
COMMENT 7.5.5.5 BEGIN LOOP ; 91185000=16011000=
|
|
NOP = 1 #, 91190000=16012000=
|
|
COMMENT ; 91195000=16012000=
|
|
ENS = 41 #, 91200000=16013000=
|
|
COMMENT 7.5.5.6 END LOOP ; 91205000=16013000=
|
|
TAN = 30 #, 91210000=16014000=
|
|
COMMENT 7.5.3.7 TEST FOR ALPHAMERIC ; 91215000=16014000=
|
|
BIT = 31 #, 91220000=16015000=
|
|
COMMENT 7.5.3.8 TEST BIT ; 91225000=16015000=
|
|
JFC = 37 #, 91230000=16016000=
|
|
COMMENT 7.5.5.3 JUMP FORWARD CONDITIONAL ; 91235000=16016000=
|
|
SED = 06 #, 91240000=16017000=
|
|
COMMENT 7.5.7.8 SET DESTINATION ADDRESS ; 91245000=16017000=
|
|
RSA = 43 #, 91250000=16018000=
|
|
COMMENT 7.5.7.4 RECALL SOURCE ADDRESS ; 91255000=16018000=
|
|
TRP = 60 #, 91260000=16019000=
|
|
COMMENT 7.5.2.2 TRANSFER PROGRAM CHARACTERS ; 91265000=16019000=
|
|
BSS = 3 #, 91270000=16020000=
|
|
COMMENT 7.5.6.6 SKIP SOURCE BIT ; 91275000=16020000=
|
|
BSD = 2 #, 91280000=16021000=
|
|
COMMENT 7.5.6.5 SKIP DESTINATION BITS ; 91285000=16021000=
|
|
SEC = 34 #, 91290000=16022000=
|
|
COMMENT 7.5.10.1 SET COUNT ; 91295000=16022000=
|
|
JNS = 38 #; 91300000=16023000=
|
|
COMMENT 7.5.5.7 JUMP OUT LOOP ; 91305000=16023000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%91310000=16024000=
|
|
COMMENT FIXC EMITS BASICLY FORWARD JUMPS. HOWEVER IN THE CASE 91315000=16024000=
|
|
OF INSTRUCTIONS INTERPTED AS JUMPS BECAUSE OF A CRF ON 91320000=16025000=
|
|
A VALUE = 0 AND THE JUMP >= 64 SYLLABLES A JFW 1 AND 91325000=16026000=
|
|
A RCA L (L IS STACK ADDRESS OF A PSEUDO LABEL WHICH 91330000=16027000=
|
|
MUST ALSO BE MANUFACTURED) IS EMITTED. ; 91335000=16028000=
|
|
PROCEDURE FIXC(S); 91340000=16029000=
|
|
VALUE 91345000=16029000=
|
|
S; 91350000=16029000=
|
|
REAL 91355000=16029000=
|
|
S; 91360000=16029000=
|
|
BEGIN 91365000=16030000=
|
|
REAL 91370000=16031000=
|
|
SAVL, 91375000=16031000=
|
|
D, 91380000=16031000=
|
|
F; 91385000=16031000=
|
|
SAVL:= L; 91390000=16032000=
|
|
F:= GET(S); 91395000=16033000=
|
|
IF D:= L-(L:= S)-1 <= 63 THEN 91400000=16034000=
|
|
BEGIN 91405000=16035000=
|
|
IF F = BNS THEN 91410000=16036000=
|
|
BEGIN 91415000=16037000=
|
|
S:= GET(L:= L-1); 91420000=16038000=
|
|
EMIT(NOP); 91425000=16038000=
|
|
EMIT(NOP); 91430000=16038000=
|
|
EMIT(S); 91435000=16038000=
|
|
D:= D-2; 91440000=16038000=
|
|
END; 91445000=16039000=
|
|
EMITC(D, F); 91450000=16040000=
|
|
L:= SAVL 91455000=16041000=
|
|
END 91460000=16042000=
|
|
ELSE 91465000=16042000=
|
|
BEGIN 91470000=16042000=
|
|
IF F ^= JFW THEN 91475000=16043000=
|
|
BEGIN 91480000=16043000=
|
|
EMITC(1, F); 91485000=16044000=
|
|
EMITC(1, JFW) 91490000=16045000=
|
|
END; 91495000=16045000=
|
|
EMITC(PJ:= PJ+1, RCA); 91500000=16046000=
|
|
L:= SAVL; 91505000=16047000=
|
|
ADJUST; 91510000=16048000=
|
|
LPRT:= PROGDESCBLDR(2, L, 0); 91515000=16049000=
|
|
COMMENT NOW ENTER PSEUDO LABEL INTO INFO WITH ADDRESS=PJ-1; 91520000=16050000=
|
|
PUTNBUMP(0 & (STLABID*2+1)[45:7:8] & PJ[31:10:11] & 2[20:7:8]); 91525000=16052000=
|
|
PUTNBUMP(0 & (NEXTINFO-LASTINFO-1)[43:7:8]); 91530000=16053000=
|
|
PUTNBUMP(0); 91535000=16054000=
|
|
LASTINFO:= NEXTINFO-3; 91540000=16055000=
|
|
END; 91545000=16056000=
|
|
END FIXC; 91550000=16057000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%91555000=16057000=
|
|
COMMENT EMITJUMP IS CALLED BY GOTOS AND JUMPCHAIN. 91560000=16058000=
|
|
THIS ROUTINE WILL EMIT A JUMP IF THE DISTANCE IS <= 63 91565000=16059000=
|
|
SYLLABLES ,OTHERWISE, IT GETS A PRT CELL AND STUFFS THE 91570000=16060000=
|
|
STACK ADDRESS INTO THE LABEL ENTRY IN INFO AND EMITS AN 91575000=16061000=
|
|
RCA ON THIS STACK CELL. AT EXECUTION TIME ACTUAL PARAPART 91580000=16062000=
|
|
INSURES US THAT THIS CELL WILL CONATIN A LABEL DESCRIPTOR 91585000=16063000=
|
|
POINTING TO OUR LABEL IN QUESTION. ; 91590000=16064000=
|
|
PROCEDURE EMITJUMP(E); 91595000=16065000=
|
|
VALUE 91600000=16065000=
|
|
E; 91605000=16065000=
|
|
REAL 91610000=16065000=
|
|
E; 91615000=16065000=
|
|
BEGIN 91620000=16066000=
|
|
REAL 91625000=16067000=
|
|
T, 91630000=16067000=
|
|
D; 91635000=16067000=
|
|
REAL 91640000=16068000=
|
|
ADDR; 91645000=16068000=
|
|
IF ABS(D:= (T:= TAKE(GIT(E)).LOC)-L-1) >= 64 THEN 91650000=16070000=
|
|
BEGIN 91655000=16071000=
|
|
IF ADDR:= TAKE(E).ADDRESS = 0 THEN 91660000=16072000=
|
|
BEGIN 91665000=16073000=
|
|
PUT(TAKE(E) & (ADDR:= PJ:= PJ+1)[31:10:11], E); 91670000=16074000=
|
|
LPRT:= PROGDESCBLDR(2, T, 0); 91675000=16075000=
|
|
END; 91680000=16076000=
|
|
EMITC(ADDR, RCA); 91685000=16077000=
|
|
END 91690000=16079000=
|
|
ELSE 91695000=16079000=
|
|
EMITC(D, IF D < 0 THEN JRV ELSE JFW); 91700000=16079000=
|
|
END EMIT JUMP; 91705000=16080000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%91710000=16080000=
|
|
COMMENT WHEN JUMPCHAIN IS CALLED THERE IS A LINKEDLIST IN THE CODE91715000=16081000=
|
|
ARRAY WHERE JFWS MUST BE PLACED. THE 1ST LINK IS POINTED 91720000=16082000=
|
|
TO BY THE LOC FIELD OF EACH LABEL ENTRY IN INFO. THE LAST 91725000=16083000=
|
|
LINK IS = 4096. ; 91730000=16084000=
|
|
PROCEDURE JUMPCHAIN(E); 91735000=16085000=
|
|
VALUE 91740000=16085000=
|
|
E; 91745000=16085000=
|
|
REAL 91750000=16085000=
|
|
E; 91755000=16085000=
|
|
BEGIN 91760000=16086000=
|
|
REAL 91765000=16087000=
|
|
SAVL, 91770000=16087000=
|
|
LINK; 91775000=16087000=
|
|
SAVL:= L; 91780000=16088000=
|
|
L:= TAKE(GIT(E)).LASTGT; 91785000=16089000=
|
|
WHILE L ^= 4095 DO 91790000=16090000=
|
|
BEGIN 91795000=16091000=
|
|
LINK:= GET(L); 91800000=16092000=
|
|
EMITJUMP(E); 91805000=16093000=
|
|
L:= LINK 91810000=16095000=
|
|
END; 91815000=16095000=
|
|
L:= SAVL; 91820000=16096000=
|
|
END JUMPCHAIN; 91825000=16097000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%91830000=16097000=
|
|
COMMENT NESTS COMPILES THE NEST STATEMENT. 91835000=16098000=
|
|
A VARIABLE NEST INDEX CAUSES THE CODE, 91840000=16099000=
|
|
CRF V, BNS 0 ,NOP,NOP, TO BE GENERATED INITIALLY. 91845000=16100000=
|
|
AT THE RIGHT PAREN THE BNS IS FIXED WITH THE LENGTH OF 91850000=16101000=
|
|
THE NEST (NUMBER OF SYLLABLES) IF THE LENGTH<=63,OTHERWISE91855000=16102000=
|
|
IT IS FIXED WITH A 1 AND THE NOPS REPLACED WITH JFW 1, 91860000=16103000=
|
|
RCA P. THIS IS DONE BECAUSE THE VALUE OF V AT EXECUTION 91865000=16104000=
|
|
MAY = 0 AND THIS CODE CAUSES A JUMP AROUND THE NEST. 91870000=16105000=
|
|
JUMPOUT INFO IS REMEMBERED IN A RECURSIVE CELL AND 91875000=16106000=
|
|
NEST LEVEL INCREASED BY ONE. 91880000=16107000=
|
|
WHEN THE RIGHT PAREN IS REACHED,(IF THE STATEMENTS IN 91885000=16108000=
|
|
THE NEST COMPILED), JOINFO IS CHECKED FOR THE EXISTANCE 91890000=16109000=
|
|
OF JUMPOUT STATEMENTS IN THE NEST,IF SO,THE THE JUMPS 91895000=16110000=
|
|
ARE FIXED BY FAKING TOTOS INTO COMPILING THE REQUIRED 91900000=16111000=
|
|
JUMPS. 91905000=16112000=
|
|
FINALLY THE BNS IS FIXED,IF REQUIRED,AND NEST LEVEL 91910000=16113000=
|
|
AND JOINFO RESTORED TO THEIR ORIGINAL VALUES. ; 91915000=16114000=
|
|
PROCEDURE NESTS; 91920000=16115000=
|
|
BEGIN 91925000=16116000=
|
|
LABEL 91930000=16117000=
|
|
EXIT; 91935000=16117000=
|
|
REAL 91940000=16118000=
|
|
JOINT, 91945000=16118000=
|
|
BNSFIX; 91950000=16118000=
|
|
IF ELCLASS ^= LITNO THEN 91955000=16119000=
|
|
BEGIN 91960000=16120000=
|
|
EMITC(ELBAT[I].ADDRESS, CRF); 91965000=16121000=
|
|
BNSFIX:= L; 91970000=16121000=
|
|
EMIT(BNS); 91975000=16122000=
|
|
EMIT(NOP); 91980000=16122000=
|
|
EMIT(NOP); 91985000=16122000=
|
|
END 91990000=16124000=
|
|
ELSE 91995000=16124000=
|
|
EMITC(ELBAT[I].ADDRESS, BNS); 92000000=16124000=
|
|
IF STEPI ^= LFTPAREN THEN 92005000=16125000=
|
|
BEGIN 92010000=16125000=
|
|
ERR(262); 92015000=16125000=
|
|
GO TO EXIT 92020000=16125000=
|
|
END; 92025000=16125000=
|
|
NESTLEVEL:= NESTLEVEL+1; 92030000=16126000=
|
|
JOINT:= JOINFO; 92035000=16127000=
|
|
JOINFO:= 0; 92040000=16128000=
|
|
DO BEGIN 92045000=16129000=
|
|
STEPIT; 92050000=16130000=
|
|
ERRORTOG:= TRUE; 92055000=16130000=
|
|
STREAMSTMT 92060000=16131000=
|
|
END 92065000=16131000=
|
|
UNTIL ELCLASS ^= SEMICOLON; 92070000=16131000=
|
|
IF ELCLASS ^= RTPAREN THEN 92075000=16132000=
|
|
BEGIN 92080000=16132000=
|
|
ERR(262); 92085000=16132000=
|
|
GO TO EXIT 92090000=16132000=
|
|
END; 92095000=16132000=
|
|
EMIT(ENS); 92100000=16133000=
|
|
IF JOINFO ^= 0 THEN 92105000=16134000=
|
|
BEGIN 92110000=16135000=
|
|
COMMENT PREPARE TO CALL JUMPCHAIN FORJUMPOUTS; 92115000=16136000=
|
|
ADJUST; 92120000=16137000=
|
|
PUT(TAKE(GIT(JOINFO)) & L[LOCFLD], GIT(JOINFO)); 92125000=16138000=
|
|
JUMPCHAIN(TAKE(JOINFO) & JOINFO[12:12:13]); 92130000=16139000=
|
|
END; 92135000=16140000=
|
|
IF BNSFIX ^= 0 THEN 92140000=16141000=
|
|
FIXC(BNSFIX); 92145000=16141000=
|
|
NESTLEVEL:= NESTLEVEL-1; 92150000=16142000=
|
|
JOINFO:= JOINT; 92155000=16143000=
|
|
EXIT: 92160000=16144000=
|
|
END NESTS; 92165000=16144000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%92170000=16144000=
|
|
COMMENT LABELS HANDLES STREAM LABELS. 92175000=16145000=
|
|
ALL LABELS ARE ADJUSTED TO THE BEGINING OF THE NEXT 92180000=16146000=
|
|
WORD (IN THE PROGRAMSTREAM). 92185000=16147000=
|
|
IF A GO TO HAS NOT BEEN ENCOUNTERED BEFORE THE LABEL 92190000=16148000=
|
|
THEN THE NEST LEVEL FIELD IS ENTERED AND THE DEFINED BIT, 92195000=16149000=
|
|
[46:1], SET TO ONE. FOR DEFINED LABELS,IF WHERE A GO TO 92200000=16150000=
|
|
HAS APPEARED, A CHECK IS MADE THAT THE CURRENT NEST LEVEL 92205000=16151000=
|
|
MATCHES THE LEVEL OF THE LABEL. 92210000=16152000=
|
|
MULTIPLE OCCURANCES ARE ALSO CHECKED FOR AND FLAGGED. 92215000=16153000=
|
|
FINALLY,JUMPCHAIN IS CALLED TO FIX UP ANY FORWARD GO TOS 92220000=16154000=
|
|
AND GET A PRT LOCATION FOR ANY JUMPS >=64 SYLLABLES. ; 92225000=16155000=
|
|
PROCEDURE LABELS; 92230000=16156000=
|
|
BEGIN 92235000=16157000=
|
|
ADJUST; 92240000=16158000=
|
|
GT1:= ELBAT[I]; 92245000=16159000=
|
|
XMARK(LBLREF); % MARK LABEL OCCURENCE FOR XREF 92250000=16159100=
|
|
IF STEPI ^= COLON THEN 92255000=16160000=
|
|
ERR(258) 92260000=16161000=
|
|
ELSE 92265000=16161000=
|
|
BEGIN 92270000=16162000=
|
|
IF TAKE(GT2:= GIT(GT1)).LOC ^= 0 THEN 92275000=16163000=
|
|
FLAG(259) 92280000=16163000=
|
|
ELSE 92285000=16163000=
|
|
IF GT1 > 0 THEN 92290000=16164000=
|
|
BEGIN 92295000=16165000=
|
|
PUT(-(TAKE(GT1) & NESTLEVEL[36:4:5]), GT1); 92300000=16166000=
|
|
PUT(-L, GT2) 92305000=16168000=
|
|
END 92310000=16170000=
|
|
ELSE 92315000=16170000=
|
|
BEGIN 92320000=16170000=
|
|
IF GT1.LEVEL ^= NESTLEVEL THEN 92325000=16171000=
|
|
FLAG(257); 92330000=16171000=
|
|
PUT((-L) & TAKE(GT2)[LGTFLD], GT2); 92335000=16172000=
|
|
JUMPCHAIN(GT1); 92340000=16173000=
|
|
END; 92345000=16174000=
|
|
END; 92350000=16176000=
|
|
STEPIT; 92355000=16176000=
|
|
END LABELS; 92360000=16177000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%92365000=16177000=
|
|
COMMENT IFS COMPILES IF STATEMENTS. 92370000=16178000=
|
|
FIRST THE TEST IS COMPILED. NOTE THAT IN THE 92375000=16179000=
|
|
CONSTRUCTS "SC RELOP DC" AND "SC RELOP STRING" THAT 92380000=16180000=
|
|
THE SYLLABLE EMITTED IS FETCHED FROM ONE OF TWO FIELDS 92385000=16181000=
|
|
IN THE ELBAT WORD FOR THE RELATIONAL OPERATOR. OTHERWISE 92390000=16182000=
|
|
THE CODE IS EMITTED STRAIGHTAWAY. 92395000=16183000=
|
|
A TEST IS MADE TO SEE WHETHER THE STATEMENT AFTER THE 92400000=16184000=
|
|
"THEN" COULD POSSIBLY BE LONGER THAN 63 SYLLABLES,AND IF 92405000=16185000=
|
|
SO, Z NOPS ARE EMITTED FOR FIXC IN CASE A RCA WILL HAVE 92410000=16186000=
|
|
TO BE GENERATED. 92415000=16187000=
|
|
THIS PROCEDURE DOES NO OPTIMAZATION IN THE CASES 92420000=16188000=
|
|
IF THEN GO TO L,IF THEN STATEMENT ELSE GO TO L, OR 92425000=16189000=
|
|
IF THEN GO TO L1 ELSE GO TO L2 ; 92430000=16190000=
|
|
PROCEDURE IFS; 92435000=16191000=
|
|
BEGIN 92440000=16191000=
|
|
DEFINE 92445000=16192000=
|
|
COMPARECODE = [5:6] #, 92450000=16192000=
|
|
TESTCODE = [11:6] #, 92455000=16192000=
|
|
EQUALV = 48 #; 92460000=16192000=
|
|
LABEL 92465000=16193000=
|
|
IFSB, 92470000=16193000=
|
|
IFTOG, 92475000=16193000=
|
|
IFSC, 92480000=16193000=
|
|
EXIT; 92485000=16193000=
|
|
SWITCH 92490000=16194000=
|
|
IFSW:= IFSB, 92495000=16194000=
|
|
IFTOG, 92500000=16194000=
|
|
IFSC; 92505000=16194000=
|
|
REAL 92510000=16195000=
|
|
ADDR, 92515000=16195000=
|
|
FIX1, 92520000=16195000=
|
|
FIX2; 92525000=16195000=
|
|
ADDR:= 1; 92530000=16196000=
|
|
GO TO IFSW[STEPI-SBV+1]; 92535000=16197000=
|
|
IF ELCLASS = LOCLID THEN 92540000=16198000=
|
|
BEGIN 92545000=16199000=
|
|
EMITC(ELBAT[I].ADDRESS, CRF); 92550000=16200000=
|
|
ADDR:= 0; 92555000=16201000=
|
|
END 92560000=16204000=
|
|
ELSE 92565000=16204000=
|
|
IF ELCLASS = LITNO THEN 92570000=16204000=
|
|
ADDR:= ELBAT[I].ADDRESS 92575000=16205000=
|
|
ELSE 92580000=16205000=
|
|
BEGIN 92585000=16205000=
|
|
ERR(250); 92590000=16205000=
|
|
GO TO EXIT 92595000=16205000=
|
|
END; 92600000=16205000=
|
|
IF STEPI ^= SCV THEN 92605000=16206000=
|
|
BEGIN 92610000=16206000=
|
|
ERR(263); 92615000=16206000=
|
|
GO TO EXIT 92620000=16206000=
|
|
END; 92625000=16206000=
|
|
IFSC: 92630000=16208000=
|
|
IF STEPI ^= RELOP THEN 92635000=16208000=
|
|
BEGIN 92640000=16208000=
|
|
ERR(264); 92645000=16208000=
|
|
GO EXIT 92650000=16208000=
|
|
END; 92655000=16208000=
|
|
IF STEPI = DCV THEN 92660000=16209000=
|
|
EMITC(ADDR, ELBAT[I-1].COMPARECODE) 92665000=16210000=
|
|
ELSE 92670000=16210000=
|
|
IF ELCLASS = STRNGCON THEN 92675000=16210000=
|
|
BEGIN 92680000=16211000=
|
|
IF ACCUM[1].[35:6] ^= 1 OR ELBAT[I-3].CLASS ^= IFV THEN 92685000=16211100=
|
|
BEGIN 92690000=16211200=
|
|
ERR(271); 92695000=16211200=
|
|
GO EXIT 92700000=16211200=
|
|
END 92705000=16211300=
|
|
ELSE 92710000=16211300=
|
|
EMITC(ACCUM[1].[29:6], ELBAT[I-1].TESTCODE) 92715000=16211400=
|
|
END 92720000=16212000=
|
|
ELSE 92725000=16212000=
|
|
IF ELCLASS = LOCLID THEN 92730000=16212000=
|
|
BEGIN 92735000=16212100=
|
|
IF ELBAT[I-3].CLASS ^= IFV THEN 92740000=16212200=
|
|
BEGIN 92745000=16212300=
|
|
ERR(271); 92750000=16212300=
|
|
GO EXIT 92755000=16212300=
|
|
END 92760000=16212400=
|
|
ELSE 92765000=16212400=
|
|
BEGIN 92770000=16212400=
|
|
EMITC(0, ELBAT[I-1].TESTCODE); % RESET TFFF. 92775000=16212500=
|
|
EMITC(ELBAT[I].ADDRESS, CRF); 92780000=16212600=
|
|
EMITC(0, ELBAT[I-1].TESTCODE); % COMPARE. 92785000=16212700=
|
|
END 92790000=16213000=
|
|
END 92795000=16213000=
|
|
ELSE 92800000=16213000=
|
|
IF ACCUM[1] ^= 6"5ALPHA" THEN 92805000=16213000=
|
|
BEGIN 92810000=16213100=
|
|
ERR(265); 92815000=16213100=
|
|
GO EXIT 92820000=16213100=
|
|
END 92825000=16214000=
|
|
ELSE 92830000=16214000=
|
|
IF ELBAT[I-1].COMPARECODE = EQUALV THEN 92835000=16214000=
|
|
EMITC(17, TAN) 92840000=16214100=
|
|
ELSE 92845000=16214100=
|
|
BEGIN 92850000=16214100=
|
|
FLAG(270); 92855000=16214100=
|
|
ERRORTOG:= TRUE 92860000=16214100=
|
|
END; 92865000=16214100=
|
|
GO IFTOG; 92870000=16215000=
|
|
IFSB: 92875000=16216000=
|
|
EMITC(1, BIT); 92880000=16216000=
|
|
IFTOG: 92885000=16217000=
|
|
IF STEPI ^= THENV THEN 92890000=16217000=
|
|
BEGIN 92895000=16217000=
|
|
ERR(266); 92900000=16217000=
|
|
GO EXIT 92905000=16217000=
|
|
END; 92910000=16217000=
|
|
FIX1:= L; 92915000=16218000=
|
|
EMIT(JFC); 92920000=16219000=
|
|
STEPIT; 92925000=16220000=
|
|
IF ELCLASS = BEGINV OR ELCLASS = IFV OR ELCLASS = LITNO OR ELCLASS92930000=16224000=
|
|
= STLABID OR ELCLASS = LOCLID AND TABLE(I+1) = LFTPAREN 92935000=16225000=
|
|
THEN 92940000=16225000=
|
|
BEGIN 92945000=16226000=
|
|
EMIT(NOP); 92950000=16227000=
|
|
EMIT(NOP) 92955000=16228000=
|
|
END; 92960000=16228000=
|
|
IF ELCLASS = ELSEV THEN 92965000=16228500=
|
|
ELSE 92970000=16229000=
|
|
STREAMSTMT; 92975000=16229000=
|
|
IF ELCLASS = ELSEV THEN 92980000=16230000=
|
|
BEGIN 92985000=16231000=
|
|
FIX2:= L; 92990000=16232000=
|
|
EMIT(JFW); 92995000=16232000=
|
|
FIXC(FIX1); 93000000=16233000=
|
|
STEPIT; 93005000=16234000=
|
|
STREAMSTMT; 93010000=16235000=
|
|
FIXC(FIX2); 93015000=16236000=
|
|
END 93020000=16238000=
|
|
ELSE 93025000=16238000=
|
|
FIXC(FIX1); 93030000=16238000=
|
|
EXIT: 93035000=16239000=
|
|
END IFS; 93040000=16239000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%93045000=16239000=
|
|
COMMENT GOTOS HANDLES GO TO AND THE LAST PART OF JUMP OUT TO 93050000=16240000=
|
|
STATEMENTS. 93055000=16241000=
|
|
IF THE LABEL HAS BEEN ENCOUNTERED THEN EMITJUMP IS CALLED 93060000=16242000=
|
|
AN PRODUCES A JRV OR RCA IN THE CASE OF JUMPS>=64 SYLLABL 93065000=16243000=
|
|
ES. OTHERWISE, A LINK IS EMITTED POINTING ANY PREVIOUS 93070000=16244000=
|
|
GO TOS IN THE CASE OF FORWARD JUMPS. 93075000=16245000=
|
|
FINALLY, IF THE NEST LEVEL IS DEFINED THEN IT IS CHECKED 93080000=16246000=
|
|
AGAINST THE CURRENT LEVEL MINUS THE NUMBER OF LEVELS TO 93085000=16247000=
|
|
BE JUMPED OUT. OTHERWISE,NEST LEVEL IS DEFINED. ; 93090000=16248000=
|
|
PROCEDURE GOTOS; 93095000=16249000=
|
|
BEGIN 93100000=16250000=
|
|
LABEL 93105000=16251000=
|
|
EXIT; 93110000=16251000=
|
|
IF STEPI ^= TOV THEN 93115000=16252000=
|
|
I:= I-1; 93120000=16252000=
|
|
IF STEPI ^= STLABID THEN 93125000=16253000=
|
|
BEGIN 93130000=16253000=
|
|
ERR(260); 93135000=16253000=
|
|
GO TO EXIT 93140000=16253000=
|
|
END; 93145000=16253000=
|
|
IF (GT2:= TAKE(GIT(GT1:= ELBAT[I]))).MON = 1 OR GT2.LOC ^= 0 THEN 93150000=16255000=
|
|
EMITJUMP(GT1) 93155000=16256000=
|
|
ELSE 93160000=16256000=
|
|
BEGIN 93165000=16257000=
|
|
PUT(0 & L[23:11:12], GIT(GT1)); 93170000=16257000=
|
|
IF GT1 > 0 THEN 93175000=16258000=
|
|
BEGIN 93180000=16259000=
|
|
PUT(-(TAKE(GT1) & (NESTLEVEL-JUMPLEVEL)[36:4:5]), GT1); 93185000=16260000=
|
|
EMITN(1023); 93190000=16261000=
|
|
END 93195000=16264000=
|
|
ELSE 93200000=16264000=
|
|
BEGIN 93205000=16264000=
|
|
IF GT1.LEVEL ^= NESTLEVEL-JUMPLEVEL THEN 93210000=16265000=
|
|
FLAG(257); 93215000=16265000=
|
|
EMIT(GT2.LASTGT); 93220000=16266000=
|
|
END; 93225000=16267000=
|
|
END; 93230000=16268000=
|
|
JUMPLEVEL:= 0; 93235000=16269000=
|
|
EXIT: 93240000=16270000=
|
|
END GOTOS; 93245000=16270000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%93250000=16270000=
|
|
COMMENT RELEASES COMPILES THE STREAM RELEASE STATEMENT. 93255000=16271000=
|
|
THE CODE GENERATED IS : 93260000=16272000=
|
|
SED FILE 93265000=16273000=
|
|
RSA 0. 93270000=16274000=
|
|
AT EXECUTION TIME THIS CAUSES AN INVALID ADDRESS WHICH IS 93275000=16275000=
|
|
INTERPETED BY THE MCP TO MEAN RELEASE THE FILE POINTED TO 93280000=16276000=
|
|
BY THE DESTINATION ADDRESS. 93285000=16277000=
|
|
THE MONITOR BIT IS SET IN INFO FOR THE LOCAL VARIABLE SO 93290000=16278000=
|
|
THAT ACUTAL PARAPART MAY BE INFORMED LATER THAT A FILE 93295000=16279000=
|
|
MUST BE PASSED FOR THIS FORMAL PARAMETER; 93300000=16280000=
|
|
PROCEDURE RELEASES; 93305000=16281000=
|
|
IF STEPI ^= LFTPAREN OR STEPI ^= LOCLID OR STEPI ^= RTPAREN OR 93310000=16283000=
|
|
(GT1:= ELBAT[I-1]).FORMAL = 0 93315000=16284000=
|
|
THEN 93320000=16284000=
|
|
ERR(256) 93325000=16284000=
|
|
ELSE 93330000=16284000=
|
|
BEGIN 93335000=16285000=
|
|
EMITC(GT1.ADDRESS, SED); 93340000=16286000=
|
|
EMIT(FILETHING); 93345000=16287000=
|
|
FILETHING:= L-1; 93350000=16287000=
|
|
INFO[GT1.LINKR, GT1.LINKC].MON:= 1; 93355000=16288000=
|
|
END RELEASES; 93360000=16289000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%93365000=16289000=
|
|
COMMENT INDEXS COMPILE STATEMENTS BEGINING WITH SI,DI,CI,TALLY 93370000=16290000=
|
|
OR LOCALIDS . 93375000=16291000=
|
|
THREE CASES PRESENT THEMSELVES, 93380000=16292000=
|
|
LETING X BE EITHER OF SI,DI,CI OR TALLY, THEY ARE: 93385000=16293000=
|
|
CASE I LOCLID ~ X 93390000=16294000=
|
|
CASE II X ~ X ... 93395000=16295000=
|
|
CASE III X ~ EITHER LOC,LOCLID,SC OR DC. 93400000=16296000=
|
|
THE VARIABLE "INDEX" IS COMPUTED,DEPENDING UPON WHICH 93405000=16297000=
|
|
CASE EXISTS,SUCH THAT ARRAY ELEMENT "MACRO[INDEX]"CONTAINS93410000=16298000=
|
|
THE CODE TO BE EMITTED. 93415000=16299000=
|
|
EACH ELEMENT OF MACRO HAS 1-3 SYLLABLES ORDERED FROM 93420000=16300000=
|
|
RIGHT TO LEFT, UNUSED SYLLABLES MUST = 0. EACH MACRO 93425000=16301000=
|
|
MAY REQUIRE AT MOST ONE REPEAT PART. 93430000=16302000=
|
|
IN THIS PROCEDURE,INDEXS,THE VARIABLE "ADDR" CONTAINS THE 93435000=16303000=
|
|
PROPER REPEAT PART BY THE TIME THE LABEL "GENERATE" IS 93440000=16304000=
|
|
ENCOUNTERED. THE SYLLABLES ARE FETCHED FROM MACRO[TYPE] 93445000=16305000=
|
|
ONE AT A TIME AND IF THE REPEAT PART ^= 0 THEN"ADDR" IS 93450000=16306000=
|
|
USED AS THE REPEAT PART,THUS BUILDING A SYLLABLE WITH 93455000=16307000=
|
|
THE PROPER ADDRESS AND OPERATOR . 93460000=16308000=
|
|
NOTE: IF MACRO[TYPE] = 0 THEN THIS SIGNIFIES A SYNTAX 93465000=16309000=
|
|
ERROR. ; 93470000=16310000=
|
|
PROCEDURE INDEXS; 93475000=16311000=
|
|
BEGIN 93480000=16312000=
|
|
LABEL 93485000=16313000=
|
|
EXIT, 93490000=16313000=
|
|
GENERATE, 93495000=16313000=
|
|
L, 93500000=16313000=
|
|
L1; 93505000=16313000=
|
|
INTEGER 93510000=16314000=
|
|
TCLASS, 93515000=16314000=
|
|
INDEX, 93520000=16314000=
|
|
ADDR, 93525000=16314000=
|
|
J; 93530000=16314000=
|
|
TCLASS:= ELCLASS; 93535000=16315000=
|
|
IF STEPI ^= ASSIGNOP THEN 93540000=16316000=
|
|
BEGIN 93545000=16316000=
|
|
ERR(251); 93550000=16316000=
|
|
GO TO EXIT 93555000=16316000=
|
|
END; 93560000=16316000=
|
|
IF TCLASS = LOCLID THEN 93565000=16317000=
|
|
BEGIN 93570000=16318000=
|
|
XMARK(ASSIGNREF); 93575000=16318500=
|
|
IF SIV > STEPI OR ELCLASS > TALLYV THEN 93580000=16319000=
|
|
GO TO L; 93585000=16319000=
|
|
INDEX:= 32+ELCLASS-SIV; 93590000=16320000=
|
|
ADDR:= ELBAT[I-2].ADDRESS; 93595000=16321000=
|
|
GO TO GENERATE; 93600000=16322000=
|
|
END; 93605000=16323000=
|
|
IF TCLASS = STEPI THEN 93610000=16324000=
|
|
BEGIN 93615000=16325000=
|
|
IF STEPI ^= ADDOP THEN 93620000=16326000=
|
|
BEGIN 93625000=16326000=
|
|
ERR(252); 93630000=16326000=
|
|
GO EXIT 93635000=16326000=
|
|
END 93640000=16326100=
|
|
ELSE 93645000=16326100=
|
|
IF STEPI ^= LITNO AND ELCLASS ^= LOCLID THEN 93650000=16326100=
|
|
BEGIN 93655000=16327000=
|
|
ERR(253); 93660000=16327000=
|
|
GO EXIT 93665000=16327000=
|
|
END; 93670000=16327000=
|
|
INDEX:= TCLASS-SIV+REAL(ELBAT[I-1].ADDRESS = SUB)*4+ 93675000=16330000=
|
|
REAL(ELCLASS = LOCLID)*8; 93680000=16330000=
|
|
END 93685000=16333000=
|
|
ELSE 93690000=16333000=
|
|
BEGIN 93695000=16333000=
|
|
INDEX:= TCLASS-SIV+(IF ELCLASS = LOCLID THEN 16 ELSE IF ELCLASS 93700000=16338000=
|
|
= LOCV THEN 20 ELSE IF ELCLASS = SCV THEN 24 ELSE IF ELCLASS 93705000=16338000=
|
|
= DCV THEN 28 ELSE 25); 93710000=16338000=
|
|
IF ELCLASS = LOCV THEN 93715000=16339000=
|
|
IF STEPI ^= LOCLID THEN 93720000=16340000=
|
|
GO TO L; 93725000=16340000=
|
|
IF ELCLASS = LITNO AND TCLASS = TALLYV THEN 93730000=16341000=
|
|
BEGIN 93735000=16342000=
|
|
EMITC(ELBAT[I].ADDRESS, SEC); 93740000=16342000=
|
|
GO TO EXIT 93745000=16342000=
|
|
END; 93750000=16342000=
|
|
END; 93755000=16343000=
|
|
ADDR:= ELBAT[I].ADDRESS; 93760000=16344000=
|
|
GENERATE: 93765000=16346000=
|
|
IF MACRO[INDEX] = 0 THEN 93770000=16346000=
|
|
L: 93775000=16347000=
|
|
BEGIN 93780000=16347000=
|
|
ERR(250); 93785000=16347000=
|
|
GO TO EXIT 93790000=16347000=
|
|
END; 93795000=16347000=
|
|
J:= 8; 93800000=16348000=
|
|
TCLASS:= 0; 93805000=16348000=
|
|
L1: EBCDICBUFF[0]:= TCLASS; 93810000=16349000=
|
|
MOVECHARACTERS(2, MACRO, INDEX, J:= J-2, EBCDICBUFF, 0, 6); 93810100
|
|
TCLASS:= EBCDICBUFF[0]; 93810200
|
|
IF TCLASS ^= 0 THEN 93815000=16350000=
|
|
BEGIN 93820000=16351000=
|
|
EMITC(IF TCLASS >= 64 THEN ADDR ELSE 0, TCLASS); 93825000=16352000=
|
|
GO TO L1 93830000=16354000=
|
|
END; 93835000=16354000=
|
|
EXIT: 93840000=16355000=
|
|
END INDEXS; 93845000=16355000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%93850000=16355000=
|
|
COMMENT DSS COMPILES DESTINATION STREAM STATEMENTS. 93855000=16356000=
|
|
DS:= LIT"STRING" IS HANDLED AS A SPECIAL CASE BECAUE THE 93860000=16357000=
|
|
STRING MUST BE SCANED FROM RIGHT TO LEFT,REPEATEDLY IF 93865000=16358000=
|
|
NECESSARY, AND EMITTED TO THE PROGRAM STREAM. IN 93870000=16359000=
|
|
ALL OTHER CASES,THE ELBAT WORD CONTAINS THE OPERATOR IN 93875000=16360000=
|
|
THE OPCODE FIELD ; 93880000=16361000=
|
|
PROCEDURE DSS; 93885000=16362000=
|
|
BEGIN 93890000=16363000=
|
|
INTEGER 93895000=16364000=
|
|
ADDR, 93900000=16364000=
|
|
J, 93905000=16364000=
|
|
K, 93910000=16364000=
|
|
L, 93915000=16364000=
|
|
T; 93920000=16364000=
|
|
LABEL 93925000=16365000=
|
|
EXIT, 93930000=16365000=
|
|
L1; 93935000=16365000=
|
|
DEFINE 93940000=16366000=
|
|
OPCODE = [20:6] #; 93945000=16366000=
|
|
IF STEPI ^= ASSIGNOP THEN 93950000=16367000=
|
|
BEGIN 93955000=16367000=
|
|
ERR(251); 93960000=16367000=
|
|
GO TO EXIT 93965000=16367000=
|
|
END; 93970000=16367000=
|
|
IF STEPI = LOCLID THEN 93975000=16368000=
|
|
BEGIN 93980000=16369000=
|
|
EMITC(ELBAT[I].ADDRESS, CRF); 93985000=16370000=
|
|
ADDR:= 0; 93990000=16371000=
|
|
IF STEPI = LITV THEN 93995000=16372000=
|
|
GO TO L1 94000000=16374000=
|
|
END 94005000=16374000=
|
|
ELSE 94010000=16374000=
|
|
IF ELCLASS = LITNO THEN 94015000=16374000=
|
|
BEGIN 94020000=16375000=
|
|
ADDR:= ELBAT[I].ADDRESS; 94025000=16376000=
|
|
STEPIT; 94030000=16376000=
|
|
END 94035000=16378000=
|
|
ELSE 94040000=16378000=
|
|
ADDR:= 1; 94045000=16378000=
|
|
IF ELCLASS = TRNSFER OR ELCLASS = FILLV THEN 94050000=16379000=
|
|
EMITC(ADDR, ELBAT[I].OPCODE) 94055000=16380000=
|
|
ELSE 94060000=16380000=
|
|
IF ELCLASS = LITV THEN 94065000=16381000=
|
|
BEGIN 94070000=16382000=
|
|
EMITC(ADDR, TRP); 94075000=16383000=
|
|
IF STEPI ^= STRING AND ELCLASS ^= STRNGCON AND ELCLASS ^= LITNO 94080000=16384100=
|
|
AND ELCLASS ^= NONLITNO 94085000=16384100=
|
|
THEN 94090000=16384100=
|
|
BEGIN 94095000=16384500=
|
|
ERR(255); 94100000=16384500=
|
|
GO TO EXIT 94105000=16384500=
|
|
END; 94110000=16384500=
|
|
IF ELCLASS = LITNO OR ELCLASS = NONLITNO THEN 94115000=16384700=
|
|
BEGIN 94115100
|
|
EBCDICBUFF[0]:= C; 94115200
|
|
MOVECHARACTERS(COUNT:= IF ADDR < 8 THEN ADDR ELSE 8, 94120000=16384900=
|
|
EBCDICBUFF, 0, 8-COUNT, ACCUM, 1, 3); 94125000=16384900=
|
|
C:= EBCDICBUFF[0]; 94125100
|
|
END; 94125200
|
|
IF ADDR MOD 2 ^= 0 THEN 94130000=16385000=
|
|
BEGIN 94135000=16386000=
|
|
EMIT(ACCUM[1].[29:6]); 94140000=16387000=
|
|
J:= 1; 94145000=16387000=
|
|
END; 94150000=16388000=
|
|
FOR K:= J+2 STEP 2 UNTIL ADDR DO 94155000=16389000=
|
|
BEGIN 94160000=16390000=
|
|
FOR L:= 6, 7 DO 94165000=16391000=
|
|
BEGIN 94165100
|
|
EBCDICBUFF[0]:= T; 94165200
|
|
MOVECHARACTERS(1, ACCUM, 1, 94170000=16393000=
|
|
2+(IF J:= J+1 > COUNT THEN J:= 1 ELSE J), 94175000=16393000=
|
|
EBCDICBUFF, 0, L); 94175100
|
|
T:= EBCDICBUFF[0]; 94175200
|
|
END; 94175300
|
|
EMIT(T); 94180000=16394000=
|
|
END 94185000=16396000=
|
|
END 94190000=16397000=
|
|
ELSE 94195000=16397000=
|
|
L1: ERR(250); 94200000=16397000=
|
|
EXIT: 94205000=16398000=
|
|
END DSS; 94210000=16398000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%94215000=16398000=
|
|
COMMENT SKIPS COMPILES THE SKIP BIT STATEMENT. 94220000=16399000=
|
|
IF THE REPEAT INDEX IS A LOCALID THEN A CRF IS EMITTED. 94225000=16400000=
|
|
A BSS OR BSD IS THEN EMITTED FOR SKIP SOURCE BITS (SB) 94230000=16401000=
|
|
OR SKIP DESTINATION BITS (DB) RESPECTIVELY ; 94235000=16402000=
|
|
PROCEDURE SKIPS; 94240000=16403000=
|
|
BEGIN 94245000=16404000=
|
|
REAL 94250000=16405000=
|
|
ADDR; 94255000=16405000=
|
|
IF STEPI = LOCLID THEN 94260000=16406000=
|
|
BEGIN 94265000=16407000=
|
|
EMITC(ELBAT[I].ADDRESS, CRF); 94270000=16408000=
|
|
ADDR:= 0; 94275000=16408000=
|
|
STEPIT; 94280000=16408000=
|
|
END 94285000=16410000=
|
|
ELSE 94290000=16410000=
|
|
IF ELCLASS = LITNO THEN 94295000=16410000=
|
|
BEGIN 94300000=16411000=
|
|
ADDR:= ELBAT[I].ADDRESS; 94305000=16412000=
|
|
STEPIT 94310000=16413000=
|
|
END 94315000=16414000=
|
|
ELSE 94320000=16414000=
|
|
ADDR:= 1; 94325000=16414000=
|
|
IF ELCLASS = SBV THEN 94330000=16415000=
|
|
EMITC(ADDR, BSS) 94335000=16416000=
|
|
ELSE 94340000=16416000=
|
|
IF ELCLASS = DBV THEN 94345000=16417000=
|
|
EMITC(ADDR, BSD) 94350000=16418000=
|
|
ELSE 94355000=16418000=
|
|
ERR(250); 94360000=16418000=
|
|
END SKIPS; 94365000=16419000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%94370000=16419000=
|
|
COMMENT JUMPS COMPILES JUMP OUT AND JUMP OUT TO STATEMENTS. 94375000=16420000=
|
|
JUMP OUT TO STATEMENTS CAUSE JUMP LEVEL TO BE SET TO 94380000=16421000=
|
|
THE NUMBER OF LEVELS SPECIFIED. THEN THIS NUMBER OF 94385000=16422000=
|
|
JNS ARE EMITTED AND GOTOS IS CALLED TO COMPILE THE 94390000=16423000=
|
|
JUMP INSTRUCTION. 94395000=16424000=
|
|
SIMPLE JUMP OUTS ARE HANDLED BY EMITTING ONE JNS,ENTERING 94400000=16425000=
|
|
A PSEUDO STLABID IN INFO AND SETTING ELBAT[I] SUCH THAT 94405000=16426000=
|
|
THE GOTOS PROCEDURE WILL PERFORM THE ACTION OF SETTING 94410000=16427000=
|
|
UP THE LINKS FOR LATER FIX UPS. THE NEST STATEMENT CAUSES 94415000=16428000=
|
|
THESE FIX UPS(IF EMITTING OF JUMP INSTRUCTIONS) BY CALLING94420000=16429000=
|
|
GO TOS WHEN THE RIGHT PAREN IS ENCOUNTERED. ; 94425000=16430000=
|
|
PROCEDURE JUMPS; 94430000=16431000=
|
|
BEGIN 94435000=16432000=
|
|
JUMPLEVEL:= 1; 94440000=16433000=
|
|
IF STEPI ^= DECLARATORS THEN 94445000=16434000=
|
|
FLAG(261); 94450000=16434000=
|
|
IF STEPI = LITNO THEN 94455000=16435000=
|
|
JUMPLEVEL:= ELBAT[I].ADDRESS 94460000=16436000=
|
|
ELSE 94465000=16436000=
|
|
BEGIN 94470000=16436000=
|
|
IF ELCLASS ^= TOV AND ELCLASS ^= STLABID THEN 94475000=16437000=
|
|
BEGIN 94480000=16438000=
|
|
COMMENT SIMPLE JUMP OUT STATEMENT; 94485000=16439000=
|
|
IF JOINFO = 0 THEN 94490000=16440000=
|
|
BEGIN 94495000=16441000=
|
|
JOINFO:= NEXTINFO; 94500000=16442000=
|
|
PUTNBUMP(0 & (STLABID*2+1)[45:7:8] & 2[20:7:8]); 94505000=16444000=
|
|
PUTNBUMP(0 & (JOINFO-LASTINFO)[43:7:8]); 94510000=16445000=
|
|
PUTNBUMP(0); 94515000=16446000=
|
|
LASTINFO:= JOINFO; 94520000=16447000=
|
|
END; 94525000=16448000=
|
|
ELBAT[I:= I-1]:= TAKE(JOINFO) & JOINFO[12:12:13]; 94530000=16449000=
|
|
END; 94535000=16450000=
|
|
I:= I-1; 94540000=16450000=
|
|
END; 94545000=16451000=
|
|
FOR GT1:= 1 STEP 1 UNTIL JUMPLEVEL DO 94550000=16452000=
|
|
EMIT(JNS); 94555000=16453000=
|
|
GOTOS; 94560000=16454000=
|
|
END JUMPS; 94565000=16455000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%94570000=16455000=
|
|
COMMENT STREAMSTMT ENVOKES THE APPROPRIATE PROCEDURE TO HANDLE 94575000=16456000=
|
|
THE VARIOUS AND SUNDRY STREAM PROCEDURE STATEMENTS. 94580000=16457000=
|
|
THE STATEMENTS ARE BROKEN DOWN AS FOLLOWS: 94585000=16458000=
|
|
IDENTIFIED BY PROCEDURE ENVOKED 94590000=16459000=
|
|
END GO TO FINI 94595000=16460000=
|
|
SEMICOLON GO TO FINI 94600000=16461000=
|
|
) GO TO FINI 94605000=16462000=
|
|
IF IFS 94610000=16463000=
|
|
GO GOTOS 94615000=16464000=
|
|
RELEASE RELEASES 94620000=16465000=
|
|
BEGIN COMPOUNDTAIL 94625000=16466000=
|
|
SI,DI,CI,TALLY,LOCALID INDEXS 94630000=16467000=
|
|
DS DSS 94635000=16468000=
|
|
SKIP SKIPS 94640000=16469000=
|
|
JUMP JUMPS 94645000=16470000=
|
|
LABELID LABELS 94650000=16471000=
|
|
LITERAL NO.,LOCALID( NESTS 94655000=16472000=
|
|
UPON EXITING,STREAMSTMT ASSURES THAT "I" POINTS TO 94660000=16473000=
|
|
THE SEMICOLON ,END OR ) IN SYNTACICALLY CORRECT PROGRAMS; 94665000=16474000=
|
|
LABEL 94670000=16475000=
|
|
L, 94675000=16475000=
|
|
L1, 94680000=16475000=
|
|
L2, 94685000=16475000=
|
|
L3, 94690000=16475000=
|
|
L4, 94695000=16475000=
|
|
L5, 94700000=16475000=
|
|
L6, 94705000=16475000=
|
|
L7, 94710000=16475000=
|
|
L8, 94715000=16475000=
|
|
L9, 94720000=16475000=
|
|
L10, 94725000=16475000=
|
|
EXIT, 94730000=16475000=
|
|
FINI, 94735000=16475000=
|
|
START; 94740000=16475000=
|
|
SWITCH 94745000=16476000=
|
|
TYPE:= FINI, 94750000=16476000=
|
|
L, 94755000=16476000=
|
|
FINI, 94760000=16476000=
|
|
L3, 94765000=16476000=
|
|
L4, 94770000=16476000=
|
|
L5, 94775000=16476000=
|
|
L6, 94780000=16476000=
|
|
L7, 94785000=16476000=
|
|
L7, 94790000=16476000=
|
|
L7, 94795000=16476000=
|
|
L7, 94800000=16476000=
|
|
L8, 94805000=16476000=
|
|
L9, 94810000=16476000=
|
|
L10; 94815000=16476000=
|
|
START: 94820000=16477000=
|
|
GO TO TYPE[ELCLASS-ENDV+1]; 94825000=16477000=
|
|
IF ELCLASS = RTPAREN THEN 94830000=16478000=
|
|
GO TO FINI; 94835000=16478000=
|
|
IF ELCLASS = LITNO OR ELCLASS = LOCLID AND TABLE(I+1) = LFTPAREN 94840000=16480000=
|
|
THEN 94845000=16480000=
|
|
GO TO L1; 94850000=16480000=
|
|
IF ELCLASS = STLABID THEN 94855000=16481000=
|
|
GO TO L2; 94860000=16481000=
|
|
IF ELCLASS = LOCLID THEN 94865000=16482000=
|
|
GO TO L7; 94870000=16482000=
|
|
L: ERR(250); 94875000=16483000=
|
|
GO TO FINI; 94880000=16483000=
|
|
L1: NESTS; 94885000=16484000=
|
|
GO TO EXIT; 94890000=16484000=
|
|
L2: LABELS; 94895000=16485000=
|
|
GO TO START; 94900000=16485000=
|
|
L3: IFS; 94905000=16486000=
|
|
GO TO FINI; 94910000=16486000=
|
|
L4: GOTOS; 94915000=16487000=
|
|
GO TO EXIT; 94920000=16487000=
|
|
L5: RELEASES; 94925000=16488000=
|
|
GO TO EXIT; 94930000=16488000=
|
|
L6: I:= I+1; 94935000=16489000=
|
|
COMPOUNDTAIL; 94940000=16489000=
|
|
GO TO FINI; 94945000=16489000=
|
|
L7: INDEXS; 94950000=16490000=
|
|
GO TO EXIT; 94955000=16490000=
|
|
L8: DSS; 94960000=16491000=
|
|
GO TO EXIT; 94965000=16491000=
|
|
L9: SKIPS; 94970000=16492000=
|
|
GO TO EXIT; 94975000=16492000=
|
|
L10: 94980000=16493000=
|
|
JUMPS; 94985000=16493000=
|
|
GO TO EXIT; 94990000=16493000=
|
|
EXIT: 94995000=16494000=
|
|
STEPIT; 95000000=16494000=
|
|
FINI: 95005000=16495000=
|
|
END STREAMSTMT; 95010000=16495000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95015000=16495000=
|
|
TIME1:= TIME(1); 95020000=17000000=
|
|
PROGRAM; 95025000=17000000=
|
|
ENDOFITALL: 95030000=17001000=
|
|
IF(XREF OR DEFINING.[46:1]) AND XLUN > 0 THEN 95035000=17001000=
|
|
BEGIN 95040000=17002000=
|
|
DEFINE 95045000=17002000=
|
|
LSS = < #, 95050000=17002000=
|
|
GTR = > #, 95055000=17002000=
|
|
NEQ = ^= #, 95060000=17002000=
|
|
LEQ = <= #; 95065000=17002000=
|
|
DEFINE 95070000=17002005=
|
|
XREFINFO[INDEX] = 95075000=17002005=
|
|
INFO[((INDEX).CF DIV 2).[14:7], ((INDEX).CF DIV 2)95080000=17002006=
|
|
.LINKC] #, 95085000=17002007=
|
|
CF = [14:15] #, 95090000=17002008=
|
|
FF = [29:15] #, 95095000=17002009=
|
|
NEWID[INDEX] = (IF BOOLEAN(INDEX) THEN XREFINFO[INDEX].FF ELSE 95100000=17002010=
|
|
XREFINFO[INDEX].CF) #; 95105000=17002010=
|
|
ARRAY 95110000=17002012=
|
|
TIMINGS[0:2, 0:3]; 95115000=17002012=
|
|
PROCEDURE SAVETIMES(I); 95120000=17002015=
|
|
VALUE 95125000=17002020=
|
|
I; 95130000=17002020=
|
|
INTEGER 95135000=17002020=
|
|
I; 95140000=17002020=
|
|
BEGIN 95145000=17002025=
|
|
INTEGER 95150000=17002030=
|
|
J; 95155000=17002030=
|
|
FOR J:= 1 STEP 1 UNTIL 3 DO 95160000=17002035=
|
|
TIMINGS[I, J]:= TIME(J); 95165000=17002040=
|
|
END; 95170000=17002045=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95175000=17002045=
|
|
PROCEDURE UPDATETIMES(I); 95180000=17002050=
|
|
VALUE 95185000=17002055=
|
|
I; 95190000=17002055=
|
|
INTEGER 95195000=17002055=
|
|
I; 95200000=17002055=
|
|
BEGIN 95205000=17002060=
|
|
INTEGER 95210000=17002065=
|
|
J; 95215000=17002065=
|
|
FOR J:= 1 STEP 1 UNTIL 3 DO 95220000=17002070=
|
|
TIMINGS[I, J]:= TIME(J)-TIMINGS[I, J]; 95225000=17002075=
|
|
END; 95230000=17002080=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95235000=17002080=
|
|
WRITE(LINE[SKIP 1]); 95240000=17002520=
|
|
SAVETIMES(0); % SAVE TIMES FOR START OF IDENTIFIER SORT. 95245000=17002525=
|
|
LASTADDRESS:= 0; 95250000=17002530=
|
|
FOR XREFPT:= XREFPT STEP 1 UNTIL 29 DO 95255000=17003000=
|
|
XREFAY2[XREFPT]:= 100000000; 95260000=17003000=
|
|
WRITE(DSK2, 30, XREFAY2[*]); 95265000=17004000=
|
|
TOTALNO:= XLUN; % REMEMBER NUMBER OF IDENTIFIERS. 95270000=17004500=
|
|
XREFPT:= XLUN:= 0; 95275000=17004600=
|
|
FOR I:= 0 STEP 1 UNTIL 8191 DO 95280000=17004700=
|
|
XREFINFO[I]:= 0; 95285000=17004710=
|
|
BEGIN 95290000=17005000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95290100
|
|
BOOLEAN PROCEDURE INPUT1(A); 95295000=17006000=
|
|
ARRAY 95300000=17007000=
|
|
A[0]; 95305000=17007000=
|
|
BEGIN 95310000=17008000=
|
|
LABEL 95315000=17009000=
|
|
L, 95320000=17009000=
|
|
EOF; 95325000=17009000=
|
|
READ(DSK1, 10, A[*])[EOF]; 95330000=17010000=
|
|
GO TO L; 95335000=17011000=
|
|
EOF: 95340000=17012000=
|
|
INPUT1:= TRUE; 95345000=17012000=
|
|
REWIND(DSK1); 95350000=17013000=
|
|
L: 95355000=17015000=
|
|
END; 95360000=17015000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95365000=17015000=
|
|
PROCEDURE OUTPUT1(B, A); 95370000=17016000=
|
|
VALUE 95375000=17017000=
|
|
B; 95380000=17017000=
|
|
BOOLEAN 95385000=17018000=
|
|
B; 95390000=17018000=
|
|
ARRAY 95395000=17019000=
|
|
A[0]; 95400000=17019000=
|
|
BEGIN 95405000=17020000=
|
|
IF B THEN 95410000=17021000=
|
|
BEGIN 95415000=17022000=
|
|
REWIND(DSK1); 95420000=17022100=
|
|
UPDATETIMES(0); % UPDATE TIMES FOR IDENTIFIER SORT. 95425000=17022200=
|
|
TIMINGS[0, 0]:= XLUN; % NUMBER OF IDENTIFIERS SORTED. 95430000=17022300=
|
|
END 95435000=17024000=
|
|
ELSE 95440000=17024000=
|
|
BEGIN 95445000=17024000=
|
|
IF BOOLEAN(A[8]) THEN 95450000=17025000=
|
|
XREFINFO[A[8]].FF:= XLUN:= XLUN+1 95455000=17025200=
|
|
ELSE 95460000=17025200=
|
|
XREFINFO[A[8]].CF:= XLUN:= XLUN+1; 95465000=17025300=
|
|
A[8].IDNOF:= XLUN; 95470000=17025400=
|
|
WRITE(DSK1, 10, A[*]); 95475000=17026000=
|
|
END; 95480000=17027000=
|
|
END; 95485000=17028000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95490000=17028000=
|
|
BOOLEAN PROCEDURE COMPS1(A, B); 95495000=17029000=
|
|
ARRAY 95495100
|
|
A, B[0]; 95495200
|
|
BEGIN 95505000=17030000=
|
|
STREAMLOCALS; 95505050
|
|
TALLY:= 0; 95505100
|
|
STREAMSETSI(A, 0); 95510000=17031000=
|
|
STREAMSETDI(B, 0); 95515000=17032000=
|
|
IF STREAMCOMPARELSS(63) THEN 95520000=17033000=
|
|
TALLY:= 1 95525000=17033200=
|
|
ELSE 95530000=17033200=
|
|
BEGIN 95535000=17033300=
|
|
STREAMSETSI(A, 0); 95540000=17033400=
|
|
STREAMSETDI(B, 0); 95545000=17033500=
|
|
IF STREAMCOMPAREEQL(63) THEN 95550000=17033600=
|
|
TALLY:= 2; 95555000=17033700=
|
|
END; 95560000=17033800=
|
|
95560100
|
|
COMPS1:= BOOLEAN(TALLY); 95565000=17034000=
|
|
END; 95570000=17035000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95612000
|
|
BOOLEAN PROCEDURE COMP1(A, B); 95615000=17042100=
|
|
ARRAY 95620000=17042200=
|
|
A, 95625000=17042200=
|
|
B[0]; 95630000=17042200=
|
|
IF REAL(COMP1:= COMPS1(A, B)) = 2 THEN % IDS EQUAL 95635000=17042300=
|
|
COMP1:= A[8].IDNOF < B[8].IDNOF; 95640000=17042350=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95670000=17042600=
|
|
XLUN:= 0; 95675000=17043000=
|
|
REWIND(DSK1); 95680000=17044000=
|
|
SORT(OUTPUT1, INPUT1, 0, COMP1, 10, 95685000=17045100=
|
|
IF TOTALNO < 1000 THEN 12000 ELSE 60000); 95690000=17045100=
|
|
END; 95695000=17046000=
|
|
BEGIN 95700000=17047000=
|
|
ARRAY 95705000=17047100=
|
|
IDTYPE[0:(IDMAX+4)*4-1]; 95710000=17047100=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95712000
|
|
PROCEDURE SETUPHEADING(S, D, SEG, SEQNO, FWDTOG, 95715000=17047350=
|
|
LBLTOG, FWDSEQNO, TYPE, TX, OWNTOG, PARAMTOG, VALTOG); 95720000=17047350=
|
|
VALUE 95725000=17047400=
|
|
SEG, SEQNO, FWDTOG, LBLTOG, FWDSEQNO, TX, 95730000=17047400=
|
|
OWNTOG, PARAMTOG, VALTOG; 95730050
|
|
ARRAY 95730100
|
|
S, D, TYPE[0]; 95730200
|
|
REAL 95730300
|
|
SEG, SEQNO, FWDTOG, LBLTOG, FWDSEQNO, TX, 95730400
|
|
OWNTOG, PARAMTOG, VALTOG; 95730500
|
|
BEGIN 95770000=17047500=
|
|
STREAMLOCALS; 95770050
|
|
REAL 95770100
|
|
SAVEDI; 95770200
|
|
LABEL 95770300
|
|
JUMPOUT1, 95770400
|
|
JUMPOUT2; 95770500
|
|
95770600
|
|
STREAMSETSI(S, 0); 95775000=17047700=
|
|
STREAMSETDI(D, 0); 95780000=17047800=
|
|
THRU 63 DO 95785000=17047900=
|
|
BEGIN 95785100
|
|
IF STREAMSCEQL(6" ") THEN 95785200
|
|
GO JUMPOUT1 95785300
|
|
ELSE 95785400
|
|
STREAMTRANSFERCHR(1); 95785500
|
|
END; 95785600
|
|
95785700
|
|
JUMPOUT1: 95785800
|
|
STREAMTRANSFERLIT(6, 6" -- "); 95790000=17048000=
|
|
THRU OWNTOG DO 95795000=17048100=
|
|
STREAMTRANSFERLIT(4, 6"OWN "); 95795100
|
|
95795200
|
|
STREAMSETSI(TYPE, TX); 95800000=17049300=
|
|
THRU 32 DO 95805000=17049400=
|
|
BEGIN 95805100
|
|
IF STREAMSCEQL(6".") THEN 95805200
|
|
GO JUMPOUT2 95805300
|
|
ELSE 95805400
|
|
STREAMTRANSFERCHR(1); 95805500
|
|
END; 95805600
|
|
95805700
|
|
JUMPOUT2: 95805800
|
|
THRU PARAMTOG DO 95810000=17049440=
|
|
BEGIN 95810100
|
|
STREAMTRANSFERLIT(6, 6" -- "); 95810200
|
|
STREAMTRANSFERLIT(4, 6"NAME"); 95810300
|
|
THRU VALTOG DO 95815000=17049440=
|
|
BEGIN 95815100
|
|
STREAMSKIPDI(-4); 95815200
|
|
STREAMTRANSFERLIT(5, 6"VALUE") 95815300
|
|
END; 95815400
|
|
95815500
|
|
STREAMTRANSFERLIT(8, 6" PARAMET"); 95815600
|
|
STREAMTRANSFERLIT(2, 6"ER"); 95815700
|
|
END; 95815800
|
|
95815900
|
|
STREAMTRANSFERLIT(8, 6" -- DE"); 95825000=17049500=
|
|
STREAMTRANSFERLIT(8, 6"CLARED I"); 95825100
|
|
STREAMTRANSFERLIT(8, 6"N SEGMEN"); 95825200
|
|
STREAMTRANSFERLIT(2, 6"T "); 95825300
|
|
STREAMSETLOCSI(SEG); 95830000=17049600=
|
|
SAVEDI:= STREAMGETDI; % DI POINTS TO D 95835000=17049700=
|
|
STREAMTRANSFERDEC(4); 95840000=17049800=
|
|
STREAMSKIPDI(-4); 95845000=17049800=
|
|
STREAMTRANSFERFILL(3); % CONV AND ZERO SUPPR 95850000=17049800=
|
|
% DI:= DI+8; % TO FORCE STORE OF LAST WORD [NOT NEEDED] 95855000=17049900=
|
|
STREAMSETSI(D, SAVEDI); 95860000=17050000=
|
|
STREAMSETDI(D, SAVEDI); 95865000=17050100=
|
|
THRU 4 DO 95870000=17050200=
|
|
BEGIN 95870100
|
|
IF STREAMSCNEQ(6" ") THEN 95870200
|
|
STREAMTRANSFERCHR(1) 95870300
|
|
ELSE 95870400
|
|
STREAMSKIPSI(+1) 95870500
|
|
END; 95870600
|
|
95870700
|
|
STREAMTRANSFERLIT(4, 6" AT "); 95875000=17050300=
|
|
STREAMSETLOCSI(SEQNO); 95880000=17050400=
|
|
STREAMTRANSFERDEC(8); 95885000=17050500=
|
|
THRU FWDTOG DO 95890000=17050800=
|
|
BEGIN 95890100
|
|
STREAMTRANSFERLIT(8, 6" -- FO"); 95890200
|
|
STREAMTRANSFERLIT(8, 6"RWARD AT"); 95890300
|
|
STREAMTRANSFERLIT(1, 6" "); 95890400
|
|
STREAMSETLOCSI(FWDSEQNO); 95892000=17050800=
|
|
STREAMTRANSFERDEC(8) 95892100
|
|
END; 95892200
|
|
95892300
|
|
THRU LBLTOG DO 95895000=17051100=
|
|
BEGIN 95895100
|
|
STREAMTRANSFERLIT(8, 6" -- OC"); 95895200
|
|
STREAMTRANSFERLIT(8, 6"CURS AT "); 95895300
|
|
STREAMSETLOCSI(FWDSEQNO); 95896000=17051100=
|
|
STREAMTRANSFERDEC(8); 95896100
|
|
END; 95896200
|
|
END OF SETUPHEADING; 95900000=17051200=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95902000
|
|
PROCEDURE ADDASEQNO(SEQNO, N, STARS, D); 95905000=17051400=
|
|
VALUE 95910000=17051500=
|
|
SEQNO, N, STARS; 95915000=17051500=
|
|
REAL 95915100
|
|
SEQNO, N, STARS; 95915200
|
|
ARRAY 95915300
|
|
D[0]; 95915400
|
|
BEGIN 95930000=17051600=
|
|
STREAMLOCALS; 95930100
|
|
STREAMSETDI(D, 0); 95935000=17051700=
|
|
STREAMSKIPDI(+8); 95940000=17051800=
|
|
THRU N DO 95945000=17051900=
|
|
STREAMSKIPDI(+10); 95945100
|
|
95945200
|
|
THRU STARS DO 95950000=17052000=
|
|
BEGIN 95950100
|
|
STREAMSKIPDI(-1); 95950200
|
|
STREAMTRANSFERLIT(1, 6"*") 95950300
|
|
END; 95950400
|
|
95950500
|
|
STREAMSETLOCSI(SEQNO); 95955000=17052100=
|
|
STREAMTRANSFERDEC(8); 95960000=17052200=
|
|
STREAMTRANSFERLIT(1, 6" "); 95965000=17052300=
|
|
THRU STARS DO 95970000=17052400=
|
|
BEGIN 95970100
|
|
STREAMSKIPDI(-1); 95970200
|
|
STREAMTRANSFERLIT(1, 6"*") 95970300
|
|
END; 95970400
|
|
END; 95975000=17052500=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%95976000
|
|
DEFINE BLANKET(D) = 95980000=17052600=
|
|
BEGIN 95985000=17052700=
|
|
REPLACE POINTER(D,0) BY 6" " FOR 17 WORDS; 95990000=17052800=
|
|
END OF BLANKET #; 96010000=17053200=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%96012000
|
|
PROCEDURE PRINTXREFSTATISTICS; 96015000=17053300=
|
|
BEGIN 96020000=17053400=
|
|
SWITCH FORMAT STATS := 96025000=17053500=
|
|
(///, "CROSS REFERENCE STATISTICS", /, 96030000=17053600=
|
|
"----- --------- ----------", /), 96035000=17053700=
|
|
("PHASE ONE - SORT",I6," IDENTIFIERS"), 96040000=17053800=
|
|
("PHASE TWO - SORT",I7," REFERENCES"), 96045000=17053900=
|
|
("PHASE THREE - PRINT CROSS REFERENCE (",I7," LINES)"), 96050000=17054000=
|
|
(X5,I4,":",2I1," ELAPSED TIME (MIN:SEC)"), 96055000=17054100=
|
|
(X5,I4,":",2I1," PROCESSOR TIME"), 96060000=17054200=
|
|
(X5,I4,":",2I1," I/O TIME",/); 96065000=17054300=
|
|
INTEGER 96070000=17054400=
|
|
I, 96075000=17054400=
|
|
J, 96080000=17054400=
|
|
K; 96085000=17054400=
|
|
WRITE(LINE, STATS[0]); 96090000=17054500=
|
|
FOR I:= 0 STEP 1 UNTIL 2 DO 96095000=17054600=
|
|
BEGIN 96100000=17054700=
|
|
WRITE(LINE, STATS[I+1], TIMINGS[I, 0]); 96105000=17054800=
|
|
FOR J:= 1 STEP 1 UNTIL 3 DO 96110000=17054900=
|
|
BEGIN 96115000=17055000=
|
|
K:= (TIMINGS[I, J]+30) DIV 60; % ROUND TO NEAREST SECON 96120000=17055010=
|
|
WRITE(LINE, STATS[J+3], K DIV 60, (K:= K MOD 60) DIV 10, 96125000=17055025=
|
|
K MOD 10); 96130000=17055025=
|
|
END; 96135000=17055030=
|
|
END; 96140000=17055100=
|
|
END PRINTXREFSTATISTICS; 96145000=17055200=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%96150000=17055200=
|
|
DEFINE 96155000=17069300=
|
|
REFCOUNT = TIMINGS[1, 0] #; % NUMBER OF REFERENCES SORTED.96160000=17069300=
|
|
BOOLEAN 96165000=17069400=
|
|
FIRSTTIME; % TRUE ON FIRST CALL OF OUTPUT PROCEDURE. 96170000=17069400=
|
|
ARRAY 96175000=17069500=
|
|
PAY[0:21]; 96180000=17069500=
|
|
REAL 96185000=17069600=
|
|
LASTADDRESS; 96190000=17069600=
|
|
BOOLEAN PROCEDURE INPUT2(A); 96195000=17070000=
|
|
ARRAY 96200000=17071000=
|
|
A[0]; 96205000=17071000=
|
|
BEGIN 96210000=17072000=
|
|
LABEL 96215000=17073000=
|
|
L, 96220000=17073000=
|
|
EOF; 96225000=17073000=
|
|
DEFINE 96230000=17073100=
|
|
I = LASTADDRESS #; 96235000=17073100=
|
|
IF XREFPT:= XREFPT+1 = 30 THEN 96240000=17074000=
|
|
BEGIN 96245000=17075000=
|
|
READ(DSK2, 30, XREFAY2[*])[EOF]; 96250000=17076000=
|
|
XREFPT:= 0; 96255000=17077000=
|
|
END; 96260000=17078000=
|
|
IF(I:= XREFAY2[XREFPT]).[26:27] GTR 99999999 THEN 96265000=17079000=
|
|
GO TO EOF; 96270000=17079000=
|
|
A[0]:= I & NEWID[I.REFIDNOF] REFIDNOF; 96275000=17080000=
|
|
REFCOUNT:= REFCOUNT+1; 96280000=17080100=
|
|
GO TO L; 96285000=17081000=
|
|
EOF: 96290000=17082000=
|
|
INPUT2:= TRUE; 96295000=17082000=
|
|
BLANKET(PAY); 96300000=17083000=
|
|
XREFAY1[8]:= XREFPT:= LASTADDRESS:= 0; 96305000=17084000=
|
|
FILL IDTYPE[*] WITH 96310000=17084020=
|
|
6"UNKNOWN.",6" ",6" ",6" ", % 0 96312000=17084020=
|
|
6"STREAM L",6"ABEL. ",6" ",6" ", % 1 96315000=17084030=
|
|
6"STREAM V",6"ARIABLE.",6" ",6" ", % 2 96320000=17084040=
|
|
6"DEFINE. ",6" ",6" ",6" ", % 3 96325000=17084050=
|
|
6"LIST. ",6" ",6" ",6" ", % 4 96330000=17084060=
|
|
6"FORMAT. ",6" ",6" ",6" ", % 5 96335000=17084070=
|
|
6"SWITCH F",6"ORMAT. ",6" ",6" ", % 6 96340000=17084080=
|
|
6"FILE. ",6" ",6" ",6" ", % 7 96345000=17084090=
|
|
6"SWITCH F",6"ILE. ",6" ",6" ", % 8 96350000=17084100=
|
|
6"SWITCH L",6"ABEL. ",6" ",6" ", % 9 96355000=17084110=
|
|
6"PROCEDUR",6"E. ",6" ",6" ", % 10 96360000=17084120=
|
|
6"INTRINSI",6"C. ",6" ",6" ", % 11 96365000=17084130=
|
|
6"STREAM P",6"ROCEDURE",6". ",6" ", % 12 96370000=17084140=
|
|
6"BOOLEAN ",6"STREAM P",6"ROCEDURE",6". ", % 13 96375000=17084150=
|
|
6"REAL STR",6"EAM PROC",6"EDURE. ",6" ", % 14 96380000=17084160=
|
|
6"ALPHA ST",6"REAM PRO",6"CEDURE. ",6" ", % 15 96385000=17084170=
|
|
6"INTEGER ",6"STREAM P",6"ROCEDURE",6". ", % 16 96390000=17084180=
|
|
6"BOOLEAN ",6"PROCEDUR",6"E. ",6" ", % 17 96395000=17084182=
|
|
6"REAL PRO",6"CEDURE. ",6" ",6" ", % 18 96400000=17084184=
|
|
6"ALPHA PR",6"OCEDURE.",6" ",6" ", % 19 96405000=17084186=
|
|
6"INTEGER ",6"PROCEDUR",6"E. ",6" ", % 20 96410000=17084188=
|
|
6"BOOLEAN.",6" ",6" ",6" ", % 21 96415000=17084190=
|
|
6"REAL. ",6" ",6" ",6" ", % 22 96420000=17084200=
|
|
6"ALPHA. ",6" ",6" ",6" ", % 23 96425000=17084210=
|
|
6"INTEGER.",6" ",6" ",6" ", % 24 96430000=17084220=
|
|
6"BOOLEAN ",6"ARRAY. ",6" ",6" ", % 25 96435000=17084230=
|
|
6"REAL ARR",6"AY. ",6" ",6" ", % 26 96440000=17084240=
|
|
6"ALPHA AR",6"RAY. ",6" ",6" ", % 27 96445000=17084250=
|
|
6"INTEGER ",6"ARRAY. ",6" ",6" ", % 28 96450000=17084260=
|
|
6"LABEL. ",6" ",6" ",6" ", % 29 96455000=17084270=
|
|
6"FIELD. ",6" ",6" ",6" ", % 30 96460000=17084275=
|
|
% (CLASS = 125)96460100
|
|
6"FAULT. ",6" ",6" ",6" ", % 32 96465000=17084280=
|
|
% (CLASS = 126)96465100
|
|
6"SWITCH L",6"IST. ",6" ",6" "; % 31 96470000=17084290=
|
|
% (CLASS = 127)96470100
|
|
L: 96475000=17086000=
|
|
END; 96480000=17086000=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%96485000=17086000=
|
|
PROCEDURE OUTPUT2(B, A); 96490000=17087000=
|
|
VALUE 96495000=17088000=
|
|
B; 96500000=17088000=
|
|
BOOLEAN 96505000=17089000=
|
|
B; 96510000=17089000=
|
|
ARRAY 96515000=17090000=
|
|
A[0]; 96520000=17090000=
|
|
BEGIN 96525000=17091000=
|
|
DEFINE 96530000=17091000=
|
|
PRINTER = LINE #; 96535000=17091000=
|
|
LABEL 96540000=17091100=
|
|
EOF2, 96545000=17091100=
|
|
SKIP; 96550000=17091100=
|
|
OWN BOOLEAN 96555000=17091110=
|
|
B2, 96560000=17091110=
|
|
FWDTOG, 96565000=17091110=
|
|
LBLTOG, 96570000=17091110=
|
|
WAITINGFORFWDREF; 96575000=17091110=
|
|
DEFINE 96580000=17091115=
|
|
MATCH(A, B) = REAL(BOOLEAN(A) EQV BOOLEAN(B)) = 96585000=17091116=
|
|
REAL(NOT FALSE) #; 96590000=17091116=
|
|
REAL 96595000=17091120=
|
|
I; 96600000=17091120=
|
|
DEFINE 96605000=17091140=
|
|
LINECOUNT = TIMINGS[2, 0] #; % NUMBER OF LINES PRINTED. 96610000=17091140=
|
|
OWN REAL 96615000=17091150=
|
|
FWDSEQNO; 96620000=17091150=
|
|
IF FIRSTTIME THEN % PRINT HEADINGS AND SAVE TIMINGS. 96625000=17091155=
|
|
BEGIN 96630000=17091160=
|
|
FIRSTTIME:= FALSE; 96635000=17091162=
|
|
TIME1:= TIME(1); 96640000=17091165=
|
|
DATIME; 96645000=17091170=
|
|
UPDATETIMES(1); 96650000=17091175=
|
|
SAVETIMES(2); % SAVE TIMES FOR START OF XREF PRINT. 96655000=17091180=
|
|
END; 96660000=17091200=
|
|
IF NOT B2 THEN 96665000=17091210=
|
|
IF B THEN % END OF SORT - LIST OUT REST OF SEQ. NO. 96670000=17091300=
|
|
IF XREFPT ^= 0 THEN % WE GOT SOME TO LIST OUT 96675000=17091400=
|
|
BEGIN 96680000=17091500=
|
|
UNPACKBICTOEBCDIC(PAY, 0, EBCDICBUFF, 0, 15*8); 96684900
|
|
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 96685000=17091510=
|
|
LINECOUNT:= LINECOUNT+1; 96690000=17091520=
|
|
END 96695000=17091600=
|
|
ELSE % NOTHING TO LIST OUT 96700000=17091600=
|
|
ELSE % NOT END OF SORT 96705000=17091700=
|
|
IF NOT MATCH(LASTADDRESS, A[0]) AND A[0].REFIDNOF ^= 0 AND 96710000=17091900=
|
|
A[0].REFIDNOF >= XREFAY1[8].IDNOF 96715000=17091900=
|
|
THEN 96720000=17091900=
|
|
IF A[0].TYPEREF = FORWARDREF THEN % 96725000=17092000=
|
|
WAITINGFORFWDREF:= TRUE 96730000=17092200=
|
|
ELSE 96735000=17092200=
|
|
IF A[0].TYPEREF = LBLREF THEN % 96740000=17092300=
|
|
BEGIN 96745000=17092400=
|
|
LBLTOG:= TRUE; 96750000=17092500=
|
|
FWDSEQNO:= A[0].SEQNOF; 96755000=17092600=
|
|
END 96760000=17092900=
|
|
ELSE 96765000=17092900=
|
|
IF A[0].TYPEREF = DECLREF THEN 96770000=17092900=
|
|
IF WAITINGFORFWDREF THEN % THIS MUST BE IT 96775000=17093000=
|
|
BEGIN 96780000=17093100=
|
|
WAITINGFORFWDREF:= FALSE; 96785000=17093200=
|
|
FWDTOG:= TRUE; 96790000=17093300=
|
|
FWDSEQNO:= A[0].SEQNOF; 96795000=17093400=
|
|
END 96800000=17093600=
|
|
ELSE % ITS A NORMAL DECLARATION - NOT FORWARD 96805000=17093600=
|
|
BEGIN 96810000=17093700=
|
|
IF A[0].REFIDNOF > XREFAY1[8].IDNOF THEN 96815000=17093850=
|
|
DO 96820000=17093950=
|
|
READ(DSK1, 10, XREFAY1[*])[EOF2] 96825000=17094050=
|
|
UNTIL A[0].REFIDNOF <= XREFAY1[8].IDNOF; 96830000=17094050=
|
|
IF A[0].REFIDNOF < XREFAY1[8].IDNOF THEN 96835000=17094100=
|
|
GO TO SKIP; 96840000=17094150=
|
|
IF XREFPT > 0 THEN % THERE IS STUFF TO PRINT 96845000=17094200=
|
|
BEGIN 96850000=17094240=
|
|
UNPACKBICTOEBCDIC(PAY, 0, EBCDICBUFF, 0, 15*8); 96850100
|
|
IF SINGLTOG THEN 96855000=17094250=
|
|
WRITE(LINE, 20, EBCDICBUFF[*]) 96860000=17094350=
|
|
ELSE 96865000=17094350=
|
|
WRITE(LINE[SPACE 2], 20, EBCDICBUFF[*]); 96870000=17094400=
|
|
LINECOUNT:= LINECOUNT+1; 96875000=17094410=
|
|
END 96880000=17094500=
|
|
ELSE 96885000=17094500=
|
|
IF NOT SINGLTOG THEN 96890000=17094500=
|
|
WRITE(LINE); 96895000=17094550=
|
|
XREFPT:= 0; 96900000=17094600=
|
|
BLANKET(PAY[*]); 96905000=17094650=
|
|
SETUPHEADING(XREFAY1[*], PAY[*], XREFAY1[8].SEGNOF, 96910000=17095320=
|
|
A[0].SEQNOF, REAL(FWDTOG), REAL(LBLTOG), FWDSEQNO, 96915000=17095320=
|
|
IDTYPE, (IF(I:= XREFAY1[9].CLASS) >= FIELDID THEN 96920000=17095320=
|
|
(IDMAX+I-FIELDID+1) 96925000=17095320=
|
|
ELSE IF I > IDMAX THEN 0 ELSE I)*4, 96925100
|
|
REAL(I >= BOOID AND XREFAY1[9].[38:2] = 1), 96930000=17095320=
|
|
REAL((I >= BOOID OR I = LOCLID) AND 96935000=17095320=
|
|
BOOLEAN(XREFAY1[9].[38:1])), 96940000=17095320=
|
|
XREFAY1[9].[37:1]); 96940100
|
|
FWDTOG:= LBLTOG:= FALSE; 96945000=17095400=
|
|
UNPACKBICTOEBCDIC(PAY, 0, EBCDICBUFF, 0, 15*8); 96949900
|
|
WRITE(LINE, 20, EBCDICBUFF[*]); 96950000=17095500=
|
|
LINECOUNT:= LINECOUNT+1; 96955000=17095510=
|
|
BLANKET(PAY[*]); 96960000=17095550=
|
|
END 96965000=17095700=
|
|
ELSE % IT MUST BE A NORMAL REFERENCE 96970000=17095700=
|
|
IF A[0].SEQNOF ^= LASTADDRESS.SEQNOF THEN 96975000=17095750=
|
|
BEGIN 96980000=17095800=
|
|
ADDASEQNO(A[0].SEQNOF, XREFPT, A[0].[42:1], PAY[*]); 96985000=17096000=
|
|
IF(XREFPT:= XREFPT+1) = 11 THEN %FULL 96990000=17096100=
|
|
BEGIN 96995000=17096200=
|
|
UNPACKBICTOEBCDIC(PAY, 0, EBCDICBUFF, 0, 15*8); 96999900
|
|
WRITE(LINE, 20, EBCDICBUFF[*]); 97000000=17096300=
|
|
LINECOUNT:= LINECOUNT+1; 97005000=17096350=
|
|
XREFPT:= 0; 97010000=17096400=
|
|
BLANKET(PAY[*]); 97015000=17096450=
|
|
END 97020000=17096575=
|
|
END 97025000=17096575=
|
|
ELSE % REFERENCE TO SAME SEQ. NO. SKIP IT 97030000=17096575=
|
|
ELSE % THIS IS A REFERENCE TO THE SAME SEQ. NO. - SKIP 97035000=17096600=
|
|
ELSE % HIT END OF IDENTIFIER FILE - JUST SKIP OVER REFERENCES 97040000=17096700=
|
|
EOF2: 97045000=17096800=
|
|
B2:= TRUE; % SO SORT CAN GO TO NORMAL EOJ 97050000=17096800=
|
|
IF NOT B THEN 97055000=17096850=
|
|
SKIP: 97060000=17096850=
|
|
LASTADDRESS:= A[0]; 97065000=17096850=
|
|
END OF OUTPUT2; 97070000=17096900=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%97100000=17114000=
|
|
BOOLEAN PROCEDURE COMP2(A, B); 97105000=17115000=
|
|
ARRAY 97110000=17116000=
|
|
A, 97115000=17116000=
|
|
B[0]; 97120000=17116000=
|
|
COMP2:= 97125000=17117000=
|
|
IF A[0].REFIDNOF < B[0].REFIDNOF THEN % DIF IDS 97130000=17117000=
|
|
TRUE 97135000=17117200=
|
|
ELSE 97140000=17117200=
|
|
IF A[0].REFIDNOF = B[0].REFIDNOF THEN 97145000=17117300=
|
|
IF A[0].[46:4] LSS B[0].[46:4] THEN 97150000=17117400=
|
|
TRUE 97155000=17117600=
|
|
ELSE 97160000=17117600=
|
|
IF A[0].[46:4] = B[0].[46:4] THEN 97165000=17117700=
|
|
IF A[0].SEQNOF < B[0].SEQNOF THEN 97170000=17117702=
|
|
TRUE 97175000=17117706=
|
|
ELSE 97180000=17117706=
|
|
IF A[0].SEQNOF = B[0].SEQNOF THEN 97185000=17117708=
|
|
BOOLEAN(A[0].[42:1]) 97190000=17117712=
|
|
ELSE 97195000=17117712=
|
|
FALSE 97200000=17117720=
|
|
ELSE 97205000=17117720=
|
|
FALSE 97210000=17117800=
|
|
ELSE 97215000=17117800=
|
|
FALSE; 97220000=17117900=
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%97225000=17117900=
|
|
SAVETIMES(1); % SAVE TIMES FOR START OF REFERENCES SORT 97230000=17117910=
|
|
FIRSTTIME:= TRUE; % LET OUTPUT PROCEDURE KNOW ABOUT FIRST CAL 97235000=17117920=
|
|
XREFPT:= 29; 97240000=17118000=
|
|
REWIND(DSK2); 97245000=17118000=
|
|
SORT(OUTPUT2, INPUT2, 0, COMP2, 1, 12000); 97250000=17119000=
|
|
UPDATETIMES(2); % UPDATE TIMES FOR PRINTING CROSS REFERENCE 97255000=17119100=
|
|
PRINTXREFSTATISTICS; 97260000=17119200=
|
|
END; 97265000=17120000=
|
|
END; 97270000=17121000=
|
|
END OF MAIN BLOCK; 97275000=17121500=
|
|
END. 97280000=17122000=
|