mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-17 08:32:07 +00:00
12709 lines
1.1 MiB
12709 lines
1.1 MiB
$SET OMIT LISTA = LIST %121-00000999
|
|
%#######################################################################00001000
|
|
% 00001010
|
|
% B-5700 ALGOL/TSPOL SYMBOLIC 00001020
|
|
% MARK XVI.0.122 %123-00001030
|
|
% MAY 9, 1977 %123-00001040
|
|
% 00001050
|
|
%#######################################################################00001060
|
|
% 00001070
|
|
COMMENT: * TITLE: B5500/B5700 MARK XVI SYSTEM RELEASE * 00001072
|
|
* FILE ID: SYMBOL/ALGOL TAPE ID: SYMBOL1/FILE000 * 00001073
|
|
* THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00001074
|
|
* AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00001075
|
|
* EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00001076
|
|
* WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00001077
|
|
* BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00001078
|
|
* * 00001079
|
|
* COPYRIGHT (C) 1965, 1971, 1972, 1974 * 00001080
|
|
* BURROUGHS CORPORATION * 00001081
|
|
* AA759915 AA320206 AA393180 AA332366 *; 00001082
|
|
COMMENT#################################################################00001110
|
|
ERROR MESSAGES 00001120
|
|
########################################################################00001130
|
|
% 00001140
|
|
ERROR NUMBER ROUTINE:ERROR MESSAGE 00002000
|
|
000 BLOCK: DECLARATION NOT FOLLOWED BY SEMICOLON. 00003000
|
|
001 BLOCK: IDENTIFIER DECLARED TWICE IN SAME BLOCK. 00004000
|
|
002 PROCEDUREDEC: SPECIFICATION PART CONTAINS 00005000
|
|
IDENTIFIER NOT APPEARING IN 00006000
|
|
FORMAL PARAMETER PART. 00007000
|
|
003 BLOCK: NON-IDENTIFIER APPEARS IN IDENTIFIER 00008000
|
|
LIST OF DECLARATION. 00009000
|
|
004 PROCEDUREDEC: STREAM PROCEDURE DECLARATION 00010000
|
|
PRECEDED BY ILLEGAL DECLARATOR. 00011000
|
|
005 PROCEDUREDEC: PROCEDURE DECLARATION PRECEDED 00012000
|
|
BY ILLEGAL DECLARATOR. 00013000
|
|
006 PROCEDUREDEC: PROCEDURE IDENTIFIER USED BEFORE 00014000
|
|
IN SAME BLOCK(NOT FORWARD). 00015000
|
|
007 PROCEDUREDEC: PROCEDURE IDENTIFIER NOT FOLLOWED 00016000
|
|
BY ( OR SEMICOLON IN PROCEDURE 00017000
|
|
DECLARATION. 00018000
|
|
008 PROCEDUREDEC: FORMAL PARAMETER LIST NOT FOLLOWED 00019000
|
|
BY ). 00020000
|
|
009 PROCEDUREDEC: FORMAL PARAMETER PART NOT FOLLOWED 00021000
|
|
BY SEMICOLON. 00022000
|
|
010 PROCEDUREDEC: VALUE PART CONTAINS IDENTIFIER 00023000
|
|
WHICH DID NOT APPEAR IN FORMAL 00024000
|
|
PARAPART. 00025000
|
|
011 PROCEDUREDEC: VALUE PART NOT ENDED BY SEMICOLON. 00026000
|
|
012 PROCEDUREDEC: MISSING OR ILLEGAL SPECIFICATION 00027000
|
|
PART. 00028000
|
|
013 PROCEDUREDEC: OWN, SAVE, OR AUXMEM USED IN 00029000
|
|
ARRAY SPECIFICATION. 00029500
|
|
014 ARRAYDEC: AUXMEM AND SAVE ARE MUTUALLY EXCLUSIVE. 00030000
|
|
015 ARRAYDEC: ARRAY CALL-BY-VALUE NOT IMPLEMENTED. 00030500
|
|
00031000
|
|
016 ARRAYDEC: ARRAY ID IN DECLARATION NOT FOLLOWED 00032000
|
|
BY [ . 00033000
|
|
017 ARRAYDEC: LOWER BOUND IN ARRAY DEC NOT 00034000
|
|
FOLLOWED BY : . 00035000
|
|
018 ARRAYDEC: BOUND PAIR LIST NOT FOLLOWED BY ]. 00036000
|
|
019 ARRAYSPEC: ILLEGAL LOWER BOUND DESIGNATOR IN 00037000
|
|
ARRAY SPECIFICATION. 00038000
|
|
020 BLOCK: OWN APPEARS IMMEDIATELY BEFORE 00039000
|
|
IDENTIFIER(NO TYPE). 00040000
|
|
021 BLOCK: SAVE APPEARS IMMEDIATELY BEFORE 00041000
|
|
IDENTIFIER(NO TYPE). 00042000
|
|
022 BLOCK: STREAM APPEARS IMMEDIATELY BEFORE 00043000
|
|
IDENTIFIER(THE WORD PROCEDURE LEFT 00044000
|
|
OUT). 00045000
|
|
023 BLOCK: DECLARATOR PRECEDED ILLEGALLY BY 00046000
|
|
ANOTHER DECLARATOR. 00047000
|
|
024 PROCEDUREDEC: LABEL CANNOT BE PASSED TO FUNCTION. 00048000
|
|
025 BLOCK: DECLARATOR OR SPECIFIER ILLEGALLY 00049000
|
|
PRECEDED BY OWN OR SAVE OR SOME 00050000
|
|
OTHER DECLARATOR. 00051000
|
|
026 FILEDEC: MISSING ( IN FILE DEC. 00052000
|
|
027 FILEDEC: MISSING RECORD SIZE. 00053000
|
|
00054000
|
|
028 FILEDEC: ILLEGAL BUFFER PART OR SAVE FACTOR 00055000
|
|
IN FILE DEC. 00056000
|
|
029 FILEDEC: MISSING ) IN FILE DEC. 00057000
|
|
030 IODEC: MISSING COLON IN DISK DESCRIPTION. 00058000
|
|
00059000
|
|
031 LISTDEC: MISSING ( IN LISTDEC. 00060000
|
|
032 FORMATDEC: MISSING ( IN FORMAT DEC. 00061000
|
|
033 SWITCHDEC: SWITCH DEC DOES NOT HAVE ~ OR 00062000
|
|
FORWARD AFTER IDENTIFIER. 00063000
|
|
034 SWITCHFILEDEC:MISSING ~ AFTER FILED. 00064000
|
|
035 SWITCHFILEDEC:NON FILE ID APPEARING IN DECLARATION 00065000
|
|
OF SWITCHFILE. 00066000
|
|
036 SUPERFORMATDEC:FORMAT ID NOT FOLLOWED BY ~ . 00067000
|
|
037 SUPERFORMATDEC:MISSING ( AT START OF FORMATPHRASE . 00068000
|
|
038 SUPERFORMATDEC:FORMAT SEGMENT >1022 WORDS. 00069000
|
|
039 BLOCK: NUMBER OF NESTED BLOCKS IS GREATER THAN 31 00069100
|
|
040 IODEC: PROGRAM PARAMETER BLOCK SIZE EXCEEDED 00069200
|
|
041 HANDLESWLIST: MISSING ~ AFTER SWITCH LIST ID. 00069300
|
|
042 HANDLESWLIST: ILLEGAL LIST ID APPEARING IN SWITCH LIST. 00069400
|
|
043 IODEC: MISSING ] AFTER DISK IN FILEDEC. 00069500
|
|
044 IODEC: MISSING [ AFTER DISK IN FILEDEC. 00069600
|
|
045 DEFINEDEC: MISSING "*" AFTER DEFINE ID. 00069700
|
|
046 ARRAE: NON-LITERAL ARRAY BOUND NOT GLOBAL TO ARRAY DECL. 00069800
|
|
047 TABLE: ITEM FOLLOWING @ NOT A NUMBER. 00069900
|
|
048: PROCEDUREDEC: NUMBER OF PARAMETERS DIFFERS FROM FWD DECL. 00069910
|
|
049: PROCEDUREDEC: CLASS OF PARAMETER DIFFERS FROM FWD DECL. 00069920
|
|
050: PROCEDUREDEC: VALUE PART DIFFERS FROM FWD DECL. 00069930
|
|
051 SAVEPROC : FORWARD DECLARATION DOES NOT AGREE WITH 00069931
|
|
ACTUAL DECLARATION 00069932
|
|
052 SAVEPROC :STATEMENT MAY NOT START WITH THIS KIND OF 00069933
|
|
IDENTIFIER. 00069934
|
|
059 ARRAYDEC: IMPROPER ARRAY SIZE. 00069938
|
|
060 FAULTSTMT: MISSING ~ IN FAULT STATEMENT. 00069940
|
|
061 FAULTDEC: INVALID FAULT TYPE: MUST BE FLAG, EXPOVR, ZERO, 00069950
|
|
INTOVR, OR INDEX. 00069960
|
|
070 CASESTMT: MISSING BEGIN. 00069970
|
|
071 CASESTMT: MISSING END. 00069980
|
|
080 PRIMARY: MISSING COMMA . 00069990
|
|
090 PARSE: MISSING LEFT BRACKET 00069991
|
|
091 PARSE: MISSING COLON 00069992
|
|
092 PARSE: ILLEGAL BIT NUMBER 00069993
|
|
093 PARSE: FIELD SIZE MUST BE LITERAL 00069994
|
|
094 PARSE: MISSING RIGHT BRACKET 00069995
|
|
095 PARSE: ILLEGAL FIELD SIZE 00069996
|
|
100 ANYWHERE: UNDECLARED IDENTIFIER. 00070000
|
|
101 CHECKER: AN ATTEMPT HAS BEEN MADE TO ADDRESS AN 00071000
|
|
IDENTIFIER WHICH IS LOCAL TO ONE PROCEDURE AND GLOBAL00072000
|
|
TO ANOTHER. IF THE QUANTITY IS A PROCEDURE NAME OR 00073000
|
|
AN OWN VARIABLE THIS RESTRICTION IS RELAXED. 00074000
|
|
102 AEXP: CONDITIONAL EXPRESSION IS NOT OF ARITHMETIC TYPEH 00075000
|
|
103 PRIMARY: PRIMARY MAY NOT BEGIN WITH A QUANTITY OF THIS 00076000
|
|
TYPE. 00077000
|
|
104 ANYWHERE: MISSING RIGHT PARENTHESIS. 00078000
|
|
105 ANYWHERE: MISSING LEFT PARENTHESIS. 00079000
|
|
106 PRIMARY: PRIMARY MAY NOT START WITH DECLARATOR. 00080000
|
|
107 BEXP: THE EXPRESSION IS NOT OF BOOLEAN TYPE. 00081000
|
|
108 EXPRSS: A RELATION MAY NOT HAVE CONDITIONAL EXPRESSIONS 00082000
|
|
AS THE ARITHMETIC EXPRESSIONS. 00083000
|
|
109 BOOSEC,SIMBOO, AND BOOCOMP: THE PRIMARY IS NOT BOOLEAN. 00084000
|
|
110 BOOCOMP: A NON-BOOLEAN OPERATOR OCCURS IN A BOOLEAN 00085000
|
|
EXPRESSION. 00086000
|
|
111 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00087000
|
|
TIONAL) MAY BEGIN WITH A QUANTITY OF THIS TYPE. 00088000
|
|
112 BOOPRIM: NO EXPRESSION (ARITHMETIC, BOOLEAN, OR DESIGNA- 00089000
|
|
TIONAL) MAY BEGIN WITH A DECLARATOR. 00090000
|
|
113 PARSE: EITHER THE SYTAX OR THE RANGE OF THE LITERALS FOR 00091000
|
|
A CONCATENATE OPERATOR IS INCORRECT. 00092000
|
|
114 DOTSYNTAX: EITHER THE SYNTAX OR THE RANGE OF THE LITERALS00093000
|
|
FOR A PARTIAL WORD DESIGNATOR IS INCORRECT. 00094000
|
|
115 DEXP: THE EXPRESSION IS NOT OF DESIGNATIONAL TYPE. 00095000
|
|
116 IFCLAUSE: MISSING THEN. 00096000
|
|
117 BANA: MISSING LEFT BRAKET. 00097000
|
|
118 BANA: MISSING RIGHT BRAKET. 00098000
|
|
119 COMPOUNDTAIL: MISSING SEMICOLON OR END. 00099000
|
|
120 COMPOUNDTAIL: MISSING END. 00100000
|
|
121 ACTUALPARAPART: AN INDEXED FILE MAY BE PASSED BY NAME 00101000
|
|
ONLY AND ONLY TO A STREAM PROCEDURE - THE STREAM 00102000
|
|
PROCEDURE MAY NOT DO A RELEASE ON THIS TYPE PARA- 00103000
|
|
METER. 00104000
|
|
122 ACTUALPARAPART: STREAM PROCEDURE MAY NOT HAVE AN 00105000
|
|
EXPRESSION PASSED TO IT BY NAME. 00106000
|
|
123 ACTUALPARAPART: THE ACTUAL AND FORMAL PARAMETERS DO NOT 00107000
|
|
AGREE AS TO TYPE. 00108000
|
|
124 ACTUALPARAPART: ACTUAL AND FORMAL ARRAYS DO NOT HAVE SAME00109000
|
|
NUMBER OF DIMENSIONS. 00110000
|
|
125 ACTUALPARAPART: STREAM PROCEDURES MAY NOT BE PASSED AS A 00111000
|
|
PARAMETER TO A PROCEDURE. 00112000
|
|
126 ACTUALPARAPART: NO ACTUAL PARAMETER MAY BEGIN WITH A 00113000
|
|
QUANTITY OF THIS TYPE. 00114000
|
|
127 ACTUALPARAPART: THIS TYPE QUANTITY MAY NOT BE PASSED TO A00115000
|
|
STREAM PROCEDURE. 00116000
|
|
128 ACTUALPARAPART: EITHER ACTUAL AND FORMAL PARAMETERS DO 00117000
|
|
NOT AGREE AS TO NUMBER, OR EXTRA RIGHT PARENTHESIS. 00118000
|
|
129 ACTUALPARAPART: ILLEGAL PARAMETER DELIMITER. 00119000
|
|
130 RELSESTMT: NO FILE NAME. 00120000
|
|
131 DOSTMT: MISSING UNTIL. 00121000
|
|
132 WHILESTMT: MISSING DO. 00122000
|
|
133 LABELR: MISSING C OLON. 00123000
|
|
134 LABELR: THE LABEL WAS NOT DECLARED IN THIS BLOCK. 00124000
|
|
135 LABELR: THE LABEL HAS ALREADY OCCURED. 00125000
|
|
136 FORMATPHRASE: IMPROPER FORMAT EDITING PHRASE. 00126000
|
|
137 FORMATPHRASE: A FORMAT EDITING PHRASE DOES NOT HAVE AN 00127000
|
|
INTEGER WHERE AN INTEGER IS REQUIRED. 00128000
|
|
138 FORMATPHRASE: THE WIDTH IS TOO SMALL IN E OR F EDITING 00129000
|
|
PHRASE. 00130000
|
|
139 TABLE: DEFINE IS NESTED MORE THAN EIGHT DEEP. 00131000
|
|
140 NEXTENT: AN INTEGER IN A FORMAT IS GREATER THAN 1023. 00132000
|
|
141 SCANNER: INTEGER OR IDENTIFIER HAS MORE THAN 63 00133000
|
|
CHARACTORS. 00134000
|
|
142 DEFINEGEN: A DEFINE CONTAINS MORE THAN 2047 CHARACTORS 00135000
|
|
(BLANK SUPPRESSED). 00136000
|
|
143 COMPOUNDTAIL: EXTRA END. 00137000
|
|
144 STMT: NO STATEMENT MAY START WITH THIS TYPE IDENTIFIER. 00138000
|
|
145 STMT: NO STATEMENT MAY START WITH THIS TYPE QUANTITY. 00139000
|
|
146 STMT: NO STATEMENT MAY START WITH A DECLARATOR - MAY BE 00140000
|
|
A MISSING END OF A PROCEDURE OR A MISPLACED 00141000
|
|
DECLARATION. 00142000
|
|
147 SWITCHGEN: MORE THAN 256 EXPRESSIONS IN A SWITCH 00143000
|
|
DECLARATION. 00144000
|
|
148 GETSPACE: MORE THAN 1023 PROGRAM REFERENCE TABLE CELLS 00145000
|
|
ARE REQUIRED FOR THIS PROGRAM. 00146000
|
|
149 GETSPACE: MORE THAN 255 STACK CELLS ARE REQUIRED FOR THIS00147000
|
|
PROCEDURE. 00148000
|
|
150 ACTUALPARAPART: CONSTANTS MAY NOT BE PASSED BY NAME TO 00149000
|
|
STREAM PROCEDURES. 00150000
|
|
151 FORSTMT: INDEX VARIABLE MAY NOT BE BOOLEAN 00151000
|
|
152 FORSTMT: MISSING LEFT ARROW FOLLOWING INDEX VARIABLE. 00152000
|
|
153 FORSTMT: MISSING UNTIL OR WHILE IN STEP ELEMENT. 00153000
|
|
154 FORSTMT: MISSING DO IN FOR CLAUSE. 00154000
|
|
155 IFEXP: MISSING ELSE 00155000
|
|
156 LISTELEMENT: A DESIGNATIONAL EXPRESSION MAY NOT BE A LIST00156000
|
|
ELEMENT. 00157000
|
|
157 LISTELEMENT: A ROW DESIGNATOR MAY NOT BE A LIST ELEMENT. 00158000
|
|
158 LISTELEMENT: MISSING RIGHT BRAKET IN GROUP OF ELEMENTS 00159000
|
|
159 PROCSTMT: ILLEGAL USE OF PROCEDURE OR FUNCTION IDENTIFIER00160000
|
|
160 PURGE: DECLARED LABEL DOES NOT OCCUR. 00161000
|
|
161 PURGE: DECLARED FORWARD PROCEDURE DOES NOT OCCUR. 00162000
|
|
162 PURGE: DECLARED SWITCH FORWARD DOES NOT OCCUR. 00162500
|
|
163 FORMATPHRASE: THE WIDTH OF A FIELD IS MORE THAN 63. 00163000
|
|
164 UNKNOWNSTMT: MISSING COMMA IN ZIP OR WAIT STATEMENT. 00164000
|
|
165 IMPFUN: MISSING COMMA IN DELAY PARAMETER LIST 00164100
|
|
172 DEFINEDEC: TOO MANY PARAMETERS IN PARAMETRIC DEFINE 00164720
|
|
DECLARATION. 00164725
|
|
173 DEFINEDEC: RIGHT PARENTHESIS OR RIGHT BRACKET EXPECTED 00164730
|
|
AFTER PARAMETERS IN PARAMETRIC DEFINE DECLARATION. 00164735
|
|
174 FIXDEFINEINFO: INCORRECT NUMBER OF PARAMETERS IN 00164740
|
|
PARAMETRIC DEFINE INVOCATION. 00164745
|
|
175 FIXDEFINEINFO: LEFT BRACKET OR LEFT PARENTHESIS EXPECTED. 00164750
|
|
185 IMPFUN: LAST PARAMETER MUST BE A SIMPLE OR SUBSCRIPTED 00164850
|
|
VARIABLE, OR A TYPE PROCEDURE IDENTIFIER. 00164851
|
|
199 E: INFO ARRAY HAS OVERFLOWED. 00164900
|
|
200 EMIT: SEGMENT TOO LARGE ( > 4093SYLLABLES). 00165000
|
|
201 SIMPLE VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT-MOST 00166000
|
|
IN A LEFT PART LIST. 00167000
|
|
202 SIMPLE VARIABLE: MISSING . OR ~ . 00168000
|
|
203 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS IN A ROW 00169000
|
|
DESIGNATOR. 00170000
|
|
204 SUBSCRIPTED VARIABLE: MISSING ] IN A ROW DESIGNATOR. 00171000
|
|
205 SUBSCRIPTED VARIABLE: A ROW DESIGNATOR APPEARS OUTSIDE OF 00172000
|
|
AN ACTUAL PARAMETER LIST OR FILL STATEMENT. 00173000
|
|
206 SUBSCRIPTED VARIABLE: MISSING ]. 00174000
|
|
207 SUBSCRIPTED VARIABLE: MISSING [. 00175000
|
|
208 SUBSCRIPTED VARIABLE: WRONG NUMBER OF SUBSCRIPTS. 00176000
|
|
209 SUBSCRIPTED VARIABLE: PARTIAL WORD DESIGNATOR NOT LEFT- 00177000
|
|
MOST IN A LEFT PART LIST. 00178000
|
|
210 SUBSCRIPTED VARIABLE: MISSING , OR ~ . 00179000
|
|
211 VARIABLE: PROCEDURE ID USED OUTSIDE OF SCOPE IN LEFT PART.00180000
|
|
212 VARIABLE: SUB-ARRAY DESIGNATOR PERMITTED AS ACTUAL 00180100
|
|
PARAMETER ONLY. 00180200
|
|
250 STREAM STMT:ILLEGAL STREAM STATEMENT. 00181000
|
|
251 ANY STREAM STMT PROCEDURE: MISSING ~. 00182000
|
|
252 INDEX: MISSING + OR - . 00183000
|
|
253 INDEX: MISSING NUMBER OR STREAM VARIABLE. 00184000
|
|
254 SCANNER: STRING, OCTAL, OR HEX CONSTANT HAS FLAG BIT SET. 00185000
|
|
255 DSS: MISSING STRING IN DS~ LIT STATEMENT. 00186000
|
|
256 RELEASES: MISSING PARENTHESIS OR FILE IDENTIFIER IS NOT 00187000
|
|
A FORMAL PARAMETER. 00188000
|
|
257 GOTOS,LABELS,OR JUMPS: LABEL SPECIFIED IS NOT ON THE SAME 00189000
|
|
NEST LEVEL AS A PRECEDING APPEARANCE OF THE 00190000
|
|
LABEL. 00191000
|
|
258 LABELS: MISSING :. 00192000
|
|
259 LABELS: LABEL APPEARS MORE THAN ONCE. 00193000
|
|
260 GOTOS: MISSING LABEL IN A GO TO OR JUMP OUT TO STATEMENT. 00194000
|
|
261 JUMPS: MISSING OUT IN JUMP OUT STATEMENT. 00195000
|
|
262 NESTS: MISSING PARENTHESIS. 00196000
|
|
263 IFS:MISSING SC IN IF STATEMENT. 00197000
|
|
264 IFS: MISSING RELATIONAL IN IF STATEMENT. 00198000
|
|
265 IFS: MISSING ALPHA,DC OR STRING IN IF STATEMENT. 00199000
|
|
266 IFS: MISSING THEN INIF STATEMENT. 00200000
|
|
267 FREDFIX: THERE ARE GO TO STATEMENTS IN WHICH THE LABEL IS 00201000
|
|
UNDEFINED. 00202000
|
|
268 EMITC: A REPEAT INDEX }64 WAS SPECIFIED OR TOO MANY 00203000
|
|
FORMAL PARAMETERS,LOCALS AND LABELS. 00204000
|
|
269 TABLE: A CONSTANT IS SPECIFIED WHICH IS TOO LARGE 00205000
|
|
OR TOO SMALL. 00206000
|
|
270 IFS: RELATIONAL IN SC<RELATIONAL>ALPHA MUST BE "EQUAL". 00206100
|
|
271 IFS: IMPROPER CONSTRUCT FOR <SOURCE WITH LITERAL>. 00206200
|
|
281 DBLSTMT: MISSING (. 00207000
|
|
282 DBLSTMT: TOO MANY OPERATORS. 00208000
|
|
283 DBLSTMT: TOO MANY OPERANDS. 00209000
|
|
284 DBLSTMT: MISSING , . 00210000
|
|
285 DBLSTMT: TOO FEW OPERANDS. 00211000
|
|
286 DBLSTMT: ILLEGAL PARAMETER . 00211100
|
|
290 FILEATTRIBUTEHANDLER: MISSING . IN FILE ATTRIBUTE PART 00211510
|
|
291 FILEATTRIBUTEHANDLER: MISSING OR UNDEFINED FILE ATTRIBUTE00211520
|
|
292 FILEATTRIBUTEHANDLER: MISSING ~ IN FILE ATTR ASSIGN STMT 00211530
|
|
293 FILEATTRIBUTEHANDLER: FILE ATTRIBUTE IS NON ASSIGNABLE 00211540
|
|
294 PRIMARY: FILE ATTRIBUTE IS NOT TYPE REAL 00211550
|
|
295 FILEATTRIBUTEHANDLER: FILE ATTRIBUTE MUST BE LEFT MOST 00211551
|
|
IN A LEFT PART LIST. 00211552
|
|
300 FILLSTMT: THE IDENTIFIER FOLLOWING "FILL" IS NOT 00212000
|
|
AN ARRAY IDENTIFIER. 00213000
|
|
301 FILLSTMT: MISSING "WITH" IN FILL STATEMENT. 00214000
|
|
302 FILLSTMT: IMPROPER FILL ELEMENT. 00215000
|
|
303 FILLSTMT: NON-OCTAL CHARACTER IN OCTAL FILL. 00216000
|
|
304 FILLSTMT: IMPROPER ARRAY ROW DESIGNATOR IN FILL. 00217000
|
|
305 FILLSTMT: DATA IN FILL EXCEEDS 1023 WORDS. 00218000
|
|
304 FILLSTMT: IMPROPER ROW DESIGNATOR. 00218100
|
|
306 FILLSTMT: ODD NUMBER OF PARENTHESES IN FILL. 00218110
|
|
307 WHIPOUT: FORMAT > 1023 WORDS. 00218112
|
|
350 CHECKCOMMA: MISSING OR ILLEGAL PARAMETER DELIMITER IN 00218200
|
|
SORT OR MERGE STATEMENT. 00218210
|
|
351 OUTPROCHECK: ILLEGAL TYPE FOR SORT OR MERGE OUTPUT PROC. 00218220
|
|
352 OUTPROCHECK: OUTPUT PROCEDURE IN SORT OR MERGE STMT DOES 00218230
|
|
NOT HAVE EXACTLY TWO PARAMETERS. 00218240
|
|
353 OUTPROCHECK: FIRST PAREMETER OF OUTPUT PROCEDURE MUST 00218250
|
|
BE BOOLEAN. 00218260
|
|
354 OUTPROCHECK: SECOND PARAM OF OUTPUT PROCEDURE MUST BE 00218270
|
|
ONE-DIM ARRAY. 00218280
|
|
355 SORTSTMT: MISSING (. 00218290
|
|
356 HVCHECK: ILLEGAL TYPE FOR SORT OR MERGE HIGHVALUE PRO00218300
|
|
357 HVCHECK: HIVALUE PROCEDURE DOES NOT HAVE EXACTLY ONE 00218310
|
|
PARAMETER. 00218320
|
|
358 HVCHECK: HIVALUE PROCEDURE PARAM NOT ONE-DIM ARRAY. 00218330
|
|
359 EQLESCHECK: SORT OR MERGE COMPARE PROCEDURE NOT BOOLEAN.00218340
|
|
360 EQLESCHECK: COMPARE PROCEDURE DOES NOT HAVE EXACTLY 00218350
|
|
TWO PARAMETERS. 00218360
|
|
361 EQLESCHECK: COMPARE PROCEDURE FIRST PARAM NOT 1-D ARRAY.00218370
|
|
362 EQLESCHECK: COMPARE PROCEDURE SECOND PARAM NOT 1-D ARRAY00218380
|
|
363 INPROCHECK: SORT STMT INPUT PROCEDURE NOT BOOLEAN. 00218390
|
|
364 INPROCHECK: INPUT PROCEDURE DOES NOT HAVE EXACTLY ONE 00218400
|
|
PARAMETER. 00218410
|
|
365 INPROCHECK: INPUT PROCEDURE PARAMETER NOT ONE-D ARRAY. 00218420
|
|
366 SORTSTMT: MISSING ). 00218430
|
|
367 MERGESTMT: MISSING (. 00218440
|
|
368 MERGESTMT: MORE THAN 7 OR LESS THAN 2 FILES TO MERGE. 00218450
|
|
369 MERGESTMT: MISSING ). 00218460
|
|
381 CMPLXSTMT: MISSING (. 00218500
|
|
382 CMPLXSTMT: TOO MANY OPERATORS. 00218505
|
|
383 CMPLXSTMT: TOO MANY OPERANDS. 00218510
|
|
384 CMPLXSTMT: MISSING , . 00218515
|
|
385 CMPLXSTMT: TOO FEW OPERANDS. 00218520
|
|
386 CMPLXSTMT: ILLEGAL PARAMETER. 00218525
|
|
400 MERRIMAC:MISSING FILE ID IN MONITOR DEC. 00219000
|
|
401 MERRIMAC:MISSING LEFT PARENTHESIS IN MONITOR DEC. 00220000
|
|
402 MERRIMAC:IMPROPER SUBSCRIPT FOR MONITOR LIST ELEMENT. 00221000
|
|
403 MERRIMAC:IMPROPER SUBSCRIPT EXPRESSION DELIMITER IN 00222000
|
|
MONITOR LIST ELEMENT. 00223000
|
|
404 MERRIMAC:IMPROPER NUMBER OF SUBSCRIPTS IN MONITOR LIST 00224000
|
|
ELEMENT. 00225000
|
|
405 MERRIMAC:LABEL OR SWITCH MONITORED AT IMPROPER LAVEL. 00226000
|
|
406 MERRIMAC:IMPROPER MONITOR LIST ELEMENT. 00227000
|
|
407 MERRIMAC:MISSING RIGHT PARENTHESIS IN MONITOR DECLARATION.00228000
|
|
408 MERRIMAC:IMPROPER MONITOR DECLARATION DELIMITER. 00229000
|
|
409 DMUP:MISSING FILE IDENTIFIER IN DUMP DECLARATION. 00230000
|
|
410 DMUP:MISSING LEFT PARENTHESIS IN DUMP DECLARATION. 00231000
|
|
411 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF00232000
|
|
SUBSCRIPTS. 00233000
|
|
412 DMUP:SUBSCRIPTED VARIABLE IN DUMP LIST HAS WRONG NUMBER OF00234000
|
|
SUBSCRIPTS. 00235000
|
|
413 DMUP:IMPROPER ARRAY DUMP LIST ELEMENT. 00236000
|
|
414 DMUP:ILLEGAL DUMP LIST ELEMENT. 00237000
|
|
415 DMUP:MORE THAN 100 LABELS APPEAR AS DUMP LIST ELEMENTS 00238000
|
|
IN ONE DUMP DECLARATION. 00239000
|
|
416 DMUP:ILLEGAL DUMP LIST ELEMENT DELIMITER. 00240000
|
|
417 DMUP:MISSING OR NON-LOCAL LABEL IN DUMP DECLARATION. 00241000
|
|
418 DMUP:MISSING COLON IN DUMP DECLARATION. 00242000
|
|
419 DMUP:IMPROPER DUMP DECLARATION DELIMITER. 00243000
|
|
420 READSTMT:MISSING LEFT PARENTHESIS IN READ STATEMENT. 00244000
|
|
421 READSTMT:MISSING LEFT PARENTHESIS IN READ REVERSE 00245000
|
|
STATEMENT. 00246000
|
|
422 READSTMT:MISSING FILE IN READ STATEMENT. 00247000
|
|
00248000
|
|
424 READSTMT:IMPROPER FILE DELIMITER IN READ STATEMENT 00249000
|
|
425 READSTMT:IMPROPER FORMAT DELIMITER IN READ STATEMENT. 00250000
|
|
426 READSTMT:IMPROPER DELIMITER FOR SECOND PARAMETER IN READ 00251000
|
|
STATEMENT. 00252000
|
|
427 READSTMT:IMPROPER ROW DESIGNATOR IN READ STATEMENT. 00253000
|
|
428 READSTMT:IMPROPER ROW DESIGNATOR DELIMITER IN READ 00254000
|
|
STATEMENT. 00255000
|
|
429 READSTMT:MISSING ROW DESIGNATOR IN READ STATEMENT. 00256000
|
|
430 READSTMT:IMPROPER DELIMITER PRECEEDING THE LIST IN A READ 00257000
|
|
STATEMENT. 00258000
|
|
00259000
|
|
00260000
|
|
00261000
|
|
00262000
|
|
433 HANDLETHETAILENDOFAREADORSPACESTATEMENT:MISSING RIGHT 00263000
|
|
BRACKET IN READ OR SPACE STATEMENT. 00264000
|
|
434 SPACESTMT:MISSING LEFT PARENTHESIS IN SPACE STATEMENT. 00265000
|
|
435 SPACESTMT:IMPROPER FILE IDENTIFIER IN SPACE STATEMENT. 00266000
|
|
436 SPACESTMT:MISSING COMMA IN SPACE STATEMENT. 00267000
|
|
437 SPACESTMT:MISSING RIGHT PARENTHESIS IN SPACE STATEMENT. 00268000
|
|
438 WRITESTMT:MISSING LEFT PARENTHESIS IN A WRITE STATEMENT. 00269000
|
|
439 WRITESTMT:IMPROPER FILE IDENTIFIER IN A WRITE STATEMENT. 00270000
|
|
440 WRITESTMT:IMPROPER DELIMITER FOR FIRST PARAMETER IN A 00271000
|
|
WRITE STATEMENT. 00272000
|
|
441 WRITESTMT:MISSING RIGHT BRACKET IN CARRIAGE CONTROL PART 00273000
|
|
OF A WRITE STATEMENT. 00274000
|
|
442 WRITESTMT:ILLEGAL CARRIAGE CONTROL DELIMITER IN A WRITE 00275000
|
|
STATEMENT. 00276000
|
|
443 WRITESTMT:IMPROPER SECOND PARAMETER DELIMITER IN WRITE 00277000
|
|
STATEMENT. 00278000
|
|
444 WRITESTMT:IMPROPER ROW DESIGNATOR IN A WRITE STATEMENT. 00279000
|
|
445 WRITESTMT:MISSING RIGHT PARENTHESIS AFTER A ROW DESIGNATOR00280000
|
|
IN A WRITE STATEMENT. 00281000
|
|
446 WRITESTMT:MISSING ROW DESIGNATOR IN A WRITE STATEMENT. 00282000
|
|
447 WRITESTMT:IMPROPER DELIMITER PRECEEDING A LIST IN A WRITE 00283000
|
|
STATEMENT. 00284000
|
|
448 WRITESTMT:IMPROPER LIST DELIMITER IN A WRITE STATEMENT. 00285000
|
|
449 READSTMT:IMPROPER LIST DELIMITER IN A READ STATEMENT. 00286000
|
|
450 LOCKSTMT:MISSING LEFT PARENTHESIS IN A LOCK STATEMENT. 00287000
|
|
451 LOCKSTMT:IMPROPER FILE PART IN A LOCK STATEMENT. 00288000
|
|
452 LOCKSTMT:MISSING COMMA IN A LOCK STATEMENT. 00289000
|
|
453 LOCKSTMT:IMPROPER UNIT DISPOSITION PART IN A LOCK 00290000
|
|
STATEMENT. 00291000
|
|
454 LOCKSTMT:MISSING RIGHT PARENTHESIS IN A LOCK STATEMENT. 00292000
|
|
455 CLOSESTMT:MISSING LEFT PARENTHESIS IN A CLOSE STATEMENT. 00293000
|
|
456 CLOSESTMT:IMPROPER FILE PART IN A CLOSE STATEMENT. 00294000
|
|
457 CLOSESTMT:MISSING COMMA IN A CLOSE STATEMENT. 00295000
|
|
458 CLOSESTMT:IMPROPER UNIT DISPOSITION PART IN A CLOSE 00296000
|
|
STATEMENT. 00297000
|
|
459 CLOSESTMT:MISSING RIGHT PARENTHESIS IN A CLOSE STATEMENT. 00298000
|
|
460 RWNDSTMT:MISSING LEFT PARENTHESIS IN A REWIND STATEMENT. 00299000
|
|
461 RWNDSTMT:IMPROPER FILE PART IN A REWIND STATEMENT. 00300000
|
|
462 RWNDSTMT:MISSING RIGHT PARENTHESIS IN A REWIND STATEMENT. 00301000
|
|
463 BLOCK:A MONITOR DECLARATION APPEARS IN THE SPECIFICATION 00302000
|
|
PART OF A PROCEDURE. 00303000
|
|
464 BLOCK:A DUMP DECLARATION APPEARS IN THE SPECIFICATION PART00304000
|
|
OF A PROCEDURE. 00305000
|
|
465 DMUP:DUMP INDICATOR MUST BE UNSIGNED INTEGER OR 00305003
|
|
SIMPLE VARIABLE 00305004
|
|
500 SEARCHLIB: ILLEGAL LIBRARY IDENTIFIER. 00305010
|
|
501 SEARCHLIB: LIBRARY IDENTIFIER NOT CONTAINED IN DIRECTORY. 00305020
|
|
502 SEARCHLIB: ILLEGAL LIBRARY START POINT. 00305030
|
|
503 SEARCHLIB: SEPARATOR REQUIRED BETWEEN START POINT AND LENGTH. 00305040
|
|
504 SEARCHLIB: ILLEGAL LIBRARY LENGTH. 00305050
|
|
505 SEARCHLIB: MISSING BRACKET. 00305060
|
|
00305070
|
|
507 SEARCHLIB: TAPE POSITIONING ERROR. 00305080
|
|
509 IODEC: NON-LITERAL FILE VALUE NOT GLOBAL TO FILE DECL. 00305100
|
|
520 TABLE: STRING LONGER THAN ONE WORD (48 BITS). 00306200
|
|
521 TABLE: STRING CONTAINS A NON-PERMISSIBLE CHARACTER. 00306300
|
|
600 DOLLARCARD: NUMBER EXPECTED. 00400000
|
|
601 DOLLARCARD: OPTION IDENTIFIER EXPECTED. 00401000
|
|
602 DOLLARCARD: TOO MANY USER-DEFINED OPTIONS. 00403000
|
|
603 DOLLARCARD: UNRECOGNIZED WORD OR CHARACTER. 00404000
|
|
604 DOLLARCARD: MISMATCHED PARENTHESES. 00405000
|
|
610 READACARD: SEQUENCE ERROR. 00410000
|
|
611 READACARD: ERROR LIMIT HAS BEEN EXCEEDED. 00411000
|
|
612 INCLUDECARD: TOOMANY NESTED INCLUDES. %107-00412000
|
|
613 INCLUDECARD: MISSING FILE NAME ON INCLUDE CARD. %107-00413000
|
|
614 INCLUDECARD: ENDING SEQUENCE NUMBER MISSING. %107-00414000
|
|
615 INCLUDECARD: COPY MISSING ON INCLUDE CARD. %107-00415000
|
|
616 INCLUDECARD: MORE THAN ONE FILE NAME ON INCLUDE CARD %107-00416000
|
|
617 INCLUDECARD: + COPY CAN NOT BE USED UNLESS $ IS IN COLUMN ONE 00417000
|
|
618 BLOCK: AUXMEM APPEARS IMMEDIATELY BEFORE IDENTIFIER (NO TYPE) 00418000
|
|
; 00490000
|
|
$POP OMIT LISTA %121-00499999
|
|
BEGIN COMMENT OUTERMOST BLOCK; 00500000
|
|
INTEGER ERRORCOUNT; COMMENT NUMBER OF ERROR MSGS. MCP WILL TYPE 00501000
|
|
SYNTX ERR AT EOJ IF THIS IS NON-ZERO. MUST BE @R+25; 00502000
|
|
INTEGER SAVETIME; COMMENT SAVE-FACTOR FOR CODE FILE, GIVEN BY MCP. 00503000
|
|
IF COMPILE & GO =0, FOR SYNTAX, =-1. MUST BE AT R+26;00504000
|
|
INTEGER CARDNUMBER; % SEQ # OF CARD BEING PROCESSED. 00504100
|
|
INTEGER CARDCOUNT; % NUMBER OF CARDS PROCESSED. 00504150
|
|
INTEGER LASTADDRESS; 00504200
|
|
ARRAY ENIL[0:7,0:127]; 00504300
|
|
INTEGER ENILPTR; 00504400
|
|
DEFINE ENILSPOT = ENIL[ENILPTR.[38:3], ENILPTR.[41:7]]#; 00504500
|
|
ARRAY LDICT[0:7,0:127]; 00504600
|
|
BOOLEAN BUILDLINE; 00504700
|
|
BOOLEAN REL; 00504801
|
|
COMMENT RR1-RR11 ARE USED BY SOME PROCEDURES IN LIEU OF LOCALS. 00505000
|
|
TO SAVE SOME STACK SPACE; 00506000
|
|
REAL RR1,RR2,RR3,RR4,RR5,RR6,RR7,RR8,RR9,RR10,RR11; 00507000
|
|
COMMENT SOME OF THE RRI ARE USED TO PASS FILE INFORMATION TO 00508000
|
|
THE MAIN BLOCK; 00509000
|
|
COMMENT EXAMIN RETURNS THE CHARACTER AT ABSOLUTE ADDRESS NCR; 00510000
|
|
REAL STREAM PROCEDURE EXAMIN(NCR); VALUE NCR; 00511000
|
|
BEGIN SI~NCR; DI~LOC EXAMIN; DI~DI+7; DS~CHR END; 00512000
|
|
REAL STREAM PROCEDURE EXAMINELAST(AC, CT); VALUE CT; 00512100
|
|
BEGIN 00512200
|
|
SI ~ AC; SI ~ SI + CT; 00512300
|
|
DI ~ LOC EXAMINELAST; DI ~ DI+7; 00512400
|
|
DS ~ 1 CHR; 00512500
|
|
END EXAMINELAST; 00512600
|
|
COMMENT MOVECHARACTERS MOVES N CHARACTERS FROM THE SK-TH CHARACTER 00513000
|
|
IN SORCE TO THE DK-TH CHARACTER IN DEST, 0{N{63,0{SK{127; 00514000
|
|
DEFINE DK=DSK#; 00514500
|
|
STREAM PROCEDURE MOVECHARACTERS(N,SORCE,SK,DEST,DSK); 00515000
|
|
VALUE N, SK, DSK ; 00516000
|
|
BEGIN SI~LOC SK; SI~SI+6; 00517000
|
|
IF SC!"0" THEN BEGIN SI~SORCE; 2(SI~SI+32);SORCE~SI END; 00518000
|
|
SI~LOC DK; SI~SI+6; DI~DEST; 00519000
|
|
IF SC!"0" THEN 2(DI~DI+32); 00520000
|
|
SI~SORCE; SI~SI+SK; DI~DI+DK; DS~N CHR; 00521000
|
|
END MOVECHARACTERS; 00522000
|
|
INTEGER STREAM PROCEDURE GETF(Q); VALUE Q; 00523000
|
|
BEGIN SI~LOC GETF; SI~SI-7; DI~LOC Q; DI~DI+5; 00524000
|
|
SKIP 3 DB; 9(IF SB THEN DS~SET ELSE DS~RESET; SKIP SB); 00525000
|
|
DI~LOC Q; SI~Q; DS~WDS; SI~Q; GETF~SI 00526000
|
|
END GETF; 00527000
|
|
COMMENT START SETTING UP FILE PARAMETERS; 00528000
|
|
IF EXAMIN(RR11~GETF(3)+"Y08" )!12 THEN RR1~5 ELSE 00529000
|
|
BEGIN RR1~2; RR2~150END; 00530000
|
|
IF EXAMIN(RR11+5)!12 THEN RR3~4 ELSE 00531000
|
|
BEGIN RR3~2; RR4~150END; 00532000
|
|
IF EXAMIN(RR11+10)=12 THEN 00533000
|
|
BEGIN RR5~2; RR6~10; RR7~150END ELSE 00534000
|
|
BEGIN RR5~1; RR6~56; RR7~10 END; 00535000
|
|
IF EXAMIN(RR11+15)=12 THEN 00536000
|
|
BEGIN RR8~10; RR9~150END ELSE 00537000
|
|
BEGIN RR8~56; RR9~10 END; 00538000
|
|
IF EXAMIN(RR11+20)=12 THEN RR10~150; 00539000
|
|
BEGIN 01000000
|
|
01000100
|
|
01000200
|
|
01000300
|
|
01000400
|
|
01000500
|
|
01000600
|
|
INTEGER NUMSEQUENCEERRORS; 01000700
|
|
INTEGER OPINX; % USED FOR INDEXING INTO OPTIONS ARRAY. 01000800
|
|
BOOLEAN SETTING; % USED BY DOLLARCARD FOR AN OPTION"S SETTING 01000802
|
|
BOOLEAN GOGOGO; % TRUE FOR SPECIAL WRITES AND READS 01000810
|
|
PROCEDURE CHECKBOUNDLVL;FORWARD; 01000830
|
|
BOOLEAN ARRAYFLAG;% USED TO INFORM PRIMARY AND BOOPRIM THAT WE ARE 01000840
|
|
% EVALUATING AN ARRAY BOUND 01000850
|
|
INTEGER NEWINX, ADDVALUE, BASENUM, TOTALNO; 01000860
|
|
COMMENT ADDVALUE IS INCREMENT VALUE FOR RESEQUENCING 01000870
|
|
BASENUM IS STARTING VALUE 01000880
|
|
TOTALNO IS BASENUM + ADDVALUE CALCULATED FOR EACH 01000890
|
|
CARD AS TOTALNO = TOTALNO + ADDVALUE; 01000900
|
|
DEFINE OPARSIZE = 200 #; 01000902
|
|
ARRAY OPTIONS[0:OPARSIZE]; 01000904
|
|
BOOLEAN OPTIONWORD; 01000910
|
|
DEFINE CHECKBIT = 1#, 01000920
|
|
DEBUGBIT = 2#, 01000930
|
|
DECKBIT = 3#, 01000940
|
|
FORMATBIT = 4#, 01000950
|
|
INTBIT = 5#, 01000960
|
|
LISTABIT = 6#, 01000970
|
|
LISTBIT = 7#, 01000980
|
|
LISTPBIT = 8#, 01000990
|
|
MCPBIT = 9#, 01001000
|
|
MERGEBIT = 10#, 01001010
|
|
NESTBIT = 11#, 01001020
|
|
NEWBIT = 12#, 01001030
|
|
NEWINCLBIT = 13#, 01001040
|
|
OMITBIT = 14#, 01001050
|
|
PRINTDOLLARBIT = 15#, 01001060
|
|
PRTBIT = 16#, 01001070
|
|
PUNCHBIT = 17#, 01001080
|
|
PURGEBIT = 18#, 01001090
|
|
SEGSBIT = 19#, 01001100
|
|
SEQBIT = 20#, 01001110
|
|
SEQERRBIT = 21#, 01001120
|
|
SINGLBIT = 22#, 01001130
|
|
STUFFBIT = 23#, 01001140
|
|
VOIDBIT = 24#, 01001150
|
|
VOIDTBIT = 25#, 01001160
|
|
XREFBIT = 26#, 01001170
|
|
BENDBIT = 27#, 01001171
|
|
CODEFILEBIT = 29#, %106-01001172
|
|
USEROPINX = 30#; %106-01001173
|
|
COMMENT IF A NEW COMPILER-DEFINED OPTION IS ADDED, CHANGE USEROPINX 01001180
|
|
AND ADD OPTION IN DEFINES BELOW, IN DOLLARCARD, AND IN 01001190
|
|
FILL STATEMENT IN INITIALIZATION OF COMPILER; 01001200
|
|
DEFINE CHECKTOG = OPTIONWORD.[CHECKBIT:1] #, 01001210
|
|
DEBUGTOG = OPTIONWORD.[DEBUGBIT:1] #, 01001220
|
|
DECKTOG = OPTIONWORD.[DECKBIT:1] #, 01001230
|
|
FORMATOG = OPTIONWORD.[FORMATBIT:1] #, 01001240
|
|
INTOG = OPTIONWORD.[INTBIT:1] #, 01001250
|
|
LISTATOG = OPTIONWORD.[LISTABIT:1] #, 01001260
|
|
LISTOG = OPTIONWORD.[LISTBIT:1] #, 01001270
|
|
LISTPTOG = OPTIONWORD.[LISTPBIT:1] #, 01001280
|
|
MCPTOG = OPTIONWORD.[MCPBIT:1] #, 01001290
|
|
MERGETOG = OPTIONWORD.[MERGEBIT:1] #, 01001300
|
|
NESTOG = OPTIONWORD.[NESTBIT:1] #, 01001310
|
|
NEWTOG = OPTIONWORD.[NEWBIT:1] #, 01001320
|
|
NEWINCL = OPTIONWORD.[NEWINCLBIT:1] #, 01001330
|
|
OMITTING = OPTIONWORD.[OMITBIT:1] #, 01001340
|
|
PRINTDOLLARTOG = OPTIONWORD.[PRINTDOLLARBIT:1] #, 01001350
|
|
PRTOG = OPTIONWORD.[PRTBIT:1] #, 01001360
|
|
PUNCHTOG = OPTIONWORD.[PUNCHBIT:1] #, 01001370
|
|
PURGETOG = OPTIONWORD.[PURGEBIT:1] #, 01001380
|
|
SEGSTOG = OPTIONWORD.[SEGSBIT:1] #, 01001390
|
|
SEQTOG = OPTIONWORD.[SEQBIT:1] #, 01001400
|
|
COMMENT SEQTOG INDICATES RESEQUENCING IS TO BE DONE; 01001410
|
|
SEQERRTOG = OPTIONWORD.[SEQERRBIT:1] #, 01001420
|
|
SINGLTOG = OPTIONWORD.[SINGLBIT:1] #, 01001430
|
|
STUFFTOG = OPTIONWORD.[STUFFBIT:1] #, 01001440
|
|
VOIDING = OPTIONWORD.[VOIDBIT:1] #, 01001450
|
|
VOIDTAPE = OPTIONWORD.[VOIDTBIT:1] #, 01001460
|
|
XREF = OPTIONWORD.[XREFBIT:1] #, 01001461
|
|
BEND = OPTIONWORD.[BENDBIT:1] #, 01001462
|
|
CODEFILE = OPTIONWORD.[CODEFILEBIT:1] #, %106-01001463
|
|
DUMMY = #; 01001470
|
|
BOOLEAN NOHEADING; % TRUE IF DATIME HAS NOT BEEN CALLED. 01001480
|
|
BOOLEAN NEWBASE; % NEW BASENUM FOUND ON A NEW $-CARD. 01001490
|
|
BOOLEAN LASTCRDPATCH; % NORMALLY FALSE, SET TO TRUE WHEN THE 01001500
|
|
% LAST CARD FROM SYMBOLIC LIBRARY READ 01001510
|
|
% IS PATCHED FROM THE CARD READER. 01001520
|
|
INTEGER XMODE; % TELLS DOLLARCARD HOW TO SET OPTIONS. 01001530
|
|
BOOLEAN DOLLARTOG; % TRUE IF SCANNING A DOLLAR CARD. 01001540
|
|
INTEGER ERRMAX; % COMPILATION STOPS IF EXCEEDED. 01001550
|
|
BOOLEAN SEQXEQTOG; % GIVE SEQ. NO. WHEN DS-ING OBJ. 01001560
|
|
BOOLEAN LISTER; % LISTOG OR LISTATOG OR DEBUGTOG. 01001570
|
|
ALPHA MEDIUM; % INPUT IS: T,C,P,CA,CB,CC. 01001580
|
|
INTEGER MYCLASS; % USED IN DOLLARCARD EVALUATION. 01001590
|
|
REAL BATMAN; % USED IN DOLLARCARD EVALUATION. 01001600
|
|
ARRAY SPECIAL[0:31]; 01003000
|
|
COMMENT THIS ARRAY HOLDS THE INTERNAL CODE FOR THE SPECIAL 01004000
|
|
CHARACTORS: IT IS FILLED DURING INITIALIZATION; 01005000
|
|
SAVE ALPHA ARRAY IDARRAY[0:127]; 01006000
|
|
ARRAY INFO[0:31,0:255]; 01007000
|
|
%***********************************************************************01007005
|
|
% X R E F S T U F F %116-01007010
|
|
%***********************************************************************01007015
|
|
% %116-01007020
|
|
ARRAY %116-01007025
|
|
XREFAY2[0:29], % ARRAY OF ONE WORD REFERENCE RECORDS. %116-01007030
|
|
% THE LAYOUT OF EACH WORD IS %116-01007035
|
|
% %116-01007040
|
|
% .[1:5] TYPE OF REFERENCE %116-01007045
|
|
% = 0 FOR FORWARD DECL %116-01007050
|
|
% = 1 FOR LABEL OCCURENCE %116-01007051
|
|
% = 2 FOR NORMAL DECL %116-01007055
|
|
% = 4 FOR NORMAL REFERENCE %116-01007060
|
|
% = 5 FOR ASSIGNMENT %116-01007065
|
|
% %116-01007070
|
|
% NOTE: THE LOWER ORDER BIT 01007075
|
|
% OF THIS FIELD IS ON 01007080
|
|
% IF YOU WANT STARS %116-01007085
|
|
% AROUND THIS REFERENCE 01007090
|
|
% IN THE XREF %116-01007095
|
|
% %116-01007100
|
|
% .[6:15] IDENTIFIER ID. NO. %116-01007105
|
|
% THIS IS A UNIQUE NUMBER THAT 01007110
|
|
% IS ASSIGNED WHEN THE %116-01007115
|
|
% IDENTIFIER IS ENCOUNTERE %116-01007120
|
|
% FOR THE FIRST TIME. %116-01007125
|
|
% %116-01007130
|
|
% .[21:27] SEQUENCE NUMBER %116-01007135
|
|
% %116-01007140
|
|
XREFAY1[0:9], % RECORD BUFFER AREA FOR WRITING OUT THE %116-01007145
|
|
% NAME INFORMATION RECORDS, ONE RECORD %116-01007150
|
|
% IS WRITTEN FOR EACH IDENTIFIER IN THE SYMBOL 01007155
|
|
% TABLE WHEN THE IDENTIFIER IS PURGED FROM THE 01007160
|
|
% SYMBOL TABLE, I.E., WHEN LEAVING THE BLOCK%116-01007165
|
|
% IN WHICH THE IDENTIFIER IS DECLARED. %116-01007170
|
|
% %116-01007175
|
|
% THE LAYOUT OF EACH IS: %116-01007180
|
|
% %116-01007185
|
|
% WORDS 0-7 THE IDENTIFIER WITH BLANK%116-01007190
|
|
% FILE ON THE RIGHT %116-01007195
|
|
% %116-01007200
|
|
% WORD 8 %116-01007205
|
|
% .[21:12] SEGMENT NUMBER IN WHICH %116-01007210
|
|
% THIS IDENTIFIER WAS DECLARED01007215
|
|
% %116-01007220
|
|
% .[33:15] IDENTIFIER ID. NO. %116-01007225
|
|
% %116-01007230
|
|
% WORD 9 ELBAT WORD %116-01007235
|
|
% %116-01007240
|
|
XINFO[0:31,0:127]; % THIS ARRAY CONTAINS ONE ENTRY FOR EACH ENTRY 01007245
|
|
% IN THE INFO TABLE. IF YOU HAVE THE INDEX %116-01007250
|
|
% OF THE ELBAT WORD FOR AN IDENTIFIER IN %116-01007255
|
|
% THE INFO TABLE YOU CAN FIND THE XINFO WORD%116-01007260
|
|
% FOR THE IDENTIFIER BY REFERRING TO: %116-01007265
|
|
% %116-01007270
|
|
% XINFO[INDEX.LINKR,INDEX.LINKC DIV 2] %116-01007275
|
|
% %116-01007280
|
|
% EACH ENTRY CONTAINS: %116-01007285
|
|
% %116-01007290
|
|
% .[21:12] SEGMENT NUMBER IN WHICH 01007295
|
|
% THIS IDENTIFIER WAS DECL01007300
|
|
% %116-01007305
|
|
% .[33:15] IDENTIFIER ID. NO. %116-01007310
|
|
% IF THIS ID. NO. IS ZERO 01007315
|
|
% THEN XREF WAS NOT ON 01007320
|
|
% AT THE TIME THE IDENT 01007325
|
|
% WAS DECLARED AND ALL 01007330
|
|
% FUTURE REFERENCES WILL 01007335
|
|
% BE DISCARDED. %116-01007340
|
|
% %116-01007345
|
|
INTEGER % %116-01007350
|
|
XREFPT, % CONTAINS INDEX OF NEXT AVAILABLE SLOT IN %116-01007355
|
|
% XREFAY2, WHEN THIS BECOMES GREATER %116-01007360
|
|
% THAN 30 THE CURRENT ARRAY IS DUMPED TO DISK 01007365
|
|
% AND XREFPT IS RESET TO ZERO. %116-01007370
|
|
% %116-01007375
|
|
XLUN; % THIS VARIABLE CONTROLS THE ASSIGNING OF %116-01007380
|
|
% ID. NO. TO IDENTIFIERS. IT IS INCREMENTED %116-01007385
|
|
% EACH TIME A NEW IDENTIFIER IS ENCOUNTERED.%116-01007390
|
|
% %116-01007395
|
|
DEFINE % %116-01007400
|
|
SEGNOF = [21:12]#, % FIELDS IN XINFO ENTRIES AND WORD 8 OF %116-01007405
|
|
IDNOF = [33:15]#, % IDENTIFIER RECORDS. %116-01007410
|
|
% %116-01007415
|
|
TYPEREF = [1:5]#, % FIELDS OF REFERENCE WORDS %116-01007420
|
|
REFIDNOF =[6:15]#, % %116-01007425
|
|
SEQNOF = [21:27]#, % %116-01007430
|
|
% %116-01007435
|
|
XREFIT(INDEX,SEQNO,REFTYPE) = % DEFINE TO ADD INFO TO REF TABLE %116-01007440
|
|
BEGIN IF XREF THEN CROSSREFIT(INDEX,SEQNO,REFTYPE); END#, %116-01007445
|
|
% %116-01007450
|
|
XMARK(REFTYPE) = % DEFINE TO CHANGE LAST ENTRY IN REF TABLE TO A 01007455
|
|
BEGIN IF XREF THEN XREFAY2[XREFPT-1].TYPEREF := REFTYPE END#, %116-01007460
|
|
% %116-01007465
|
|
XREFDUMP(INDEX) = % DEFINE TO DUMP SYMBOL TABLE INFO FOR IDENTIFIER01007470
|
|
BEGIN IF DEFINING.[1:1] THEN CROSSREFDUMP(INDEX); END#, %116-01007475
|
|
% %116-01007480
|
|
XREFINFO[INDEX] = % DEFINE TO TRANSLATE INFO ROW AND COLUMN TO%116-01007481
|
|
XINFO[(INDEX).LINKR,(INDEX).LINKC DIV 2]#, % XINFO ROW AND COL %116-01007482
|
|
% %116-01007483
|
|
FORWARDREF = 0#, % DEFINES FOR DIFFERENT REFERENCE TYPES %116-01007485
|
|
LBLREF = 1#, % %116-01007486
|
|
DECLREF = 2#, % %116-01007490
|
|
NORMALREF = 4#, % %116-01007495
|
|
ASSIGNREF = 5#; % %116-01007500
|
|
ARRAY BEGINSTACK[0:255]; INTEGER BSPOINT; 01007600
|
|
BOOLEAN DEFINING; 01007650
|
|
COMMENT INFO CONTAINS ALL THE INFORMATION ABOUT A GIVEN IDENTIFIER 01008000
|
|
OR RESERVED WORD. THE FIRST WORD OF A GIVEN ENTRY IS 01009000
|
|
THE INTERNAL CODE ( OR ELBAT WORD AS IT IS USUALLY 01010000
|
|
CALLED). THE SECOND WORD CONTAINS THE FORWARD BIT (IN 01011000
|
|
[1:1]) FOR PROCEDURES, THE LINK TO PREVIOUS ENTRY (IN 01012000
|
|
[4:8]). THE NUMBER OF CHARACTORS IN THE ALPHA REPRESENTA- 01013000
|
|
TION (IN [12:6]), AND THE FIRST 5 CHARACTERS OF ALPHA. 01014000
|
|
SUCCEDING WORDS CONTAIN THE REMAINING CHARACTORS OF ALPHA,01015000
|
|
FOLLOWED BY ANY ADDITIONAL INFORMATION. THE ELBAT WORD 01016000
|
|
AND THE ALPHA FOR ANY QUANTITY ARE NOT SPLIT ACROSS A ROW 01017000
|
|
OF INFO. FOR PURPOSES OF FINDING AN IDENTIFIER OR 01018000
|
|
RESERVED WORD THE QUANTITIES ARE SCATTERED INTO 125 01019000
|
|
DIFERENT LISTS OR STACKES. WHICH STACK CONTAINS A QUANTITY01020000
|
|
IS GIVEN BY TAKING NAAAAA MOD 125 WHERE N IS THE NUMBER 01021000
|
|
OF CHARACTORS AND AAAAA IS THE FIRST 5 CHARACTORS OF 01022000
|
|
ALPHA, FILLED IN WITH ZEROS FROM THE RIGHT IF NEEDED. 01023000
|
|
THIS NUMBER IS CALLED THE SCRAMBLE NUMBER OR INDEX. 01024000
|
|
THE FIRST ROW OF INFO IS USED FOR OTHER PURPOSES. THE 01025000
|
|
RESERVED WORDS OCCUPY THE SECOND ROW. IT IS FILLED DURING 01026000
|
|
INITIALIZATION; 01027000
|
|
COMMENT INFO FORMAT 01028000
|
|
FOLLOWING IS A DESCRIPTION OF THE FORMAT OF ALL TYPES OF ENTRIES 01029000
|
|
ENTERED IN INFO: 01030000
|
|
THE FIRST WORD OF ALL ENTRIES IS THE ELBAT WORD. 01031000
|
|
THE INCR FIELD ([27:8]) CONTAINS AN INCREMENT WHICH WHEN 01032000
|
|
ADDED TO THE CURRENT INDEX INTO INFO YELDSAN INDEX TO ANY 01033000
|
|
ADDITIONAL INFO (IF ANY) FOR THIS ENTRY. 01034000
|
|
E.G. IF THE INDEX IS IX THEN INFO[(IX+INCR).LINKR,(IX+INCR). 01035000
|
|
LINKC] WILL CONTAIN THE FIRST WORD OF ADDITIONAL INFO. 01036000
|
|
THE LINK FIELD OF THE ELBAT WORD IN INFO IS DIFFERENT FROM 01037000
|
|
THAT OF THE ENTRY IN ELBAT PUT IN BY TABLE.THE ENTRY IN ELBAT 01038000
|
|
POINTS TO ITS OWN LOCATION (RELATIVE) IN INFO. 01039000
|
|
THE LINK IN INFO POINTS TO THE PREVIOUS ENTRY E.G.,THE 01040000
|
|
LINK FROM STACKHEAD WHICH THE CURRENT ENTRY REPLACED. 01041000
|
|
FOR SIMPLICITY,I WILL CONSIDER INFO TO BE A ONE DIMENSIONAL 01042000
|
|
ARRAY,SO THAT THE BREAKING UP OF THE LINKS INTO ROW AND COLUMN 01043000
|
|
WILL NOT DETRACT FROM THE DISCUSSION. 01044000
|
|
ASSUME THAT THREE IDENTIFIERS A,B,AND C "SCRAMBLE" INTO 01045000
|
|
THE SAME STACKHEAD LOCATION IN THE ORDER OF APPEARANCE. 01046000
|
|
FURTHER ASSUME THERE ARE NO OTHER ENTRIES CONNECTED TO 01047000
|
|
THIS STACKHEAD INDEX. LET THIS STACKHEAD LOCATION BE 01048000
|
|
S[L] 01049000
|
|
NOW THE DECLARATION 01050000
|
|
BEGIN REAL A,B,C IS ENCOUNTERED 01051000
|
|
IF THE NEXT AVAILABLE INFO SPACE IS CALLED NEXTINFO 01052000
|
|
THEN A IS ENTERED AS FOLLOWS:(ASSUME AN ELBAT WORD T HAS BEEN 01053000
|
|
CONSTRUCTED FOR A) 01054000
|
|
T.LINK~ S[L]. (WHICH IS ZERO AT FIRST). 01055000
|
|
INFO[NEXTINFO]~T. S[L]~NEXTINFO. 01056000
|
|
NEXTINFO~NEXTINFO+NUMBER OF WORDS IN THIS 01057000
|
|
ENTRY. 01058000
|
|
NOW S[L] POINTS TO THE ENTRY FOR A IN INFO AND THE ENTRY 01059000
|
|
ITSELF CONTAINS THE STOP FLAG ZERO. 01060000
|
|
B IS ENTERED SIMILARLY TO A. 01061000
|
|
NOW S[L] POINTS TO THE ENTRY FOR B AND IT POINTS TO THE 01062000
|
|
ENTRY FOR A. 01063000
|
|
SIMILARLY,AFTER C IS ENTERED 01064000
|
|
S[L] POINTS TO C,WHOSE ENTRY POINTS TO B WHOSE ENTRY 01065000
|
|
POINTS TO A. 01066000
|
|
THE SECOND WORD OF EACH ENTRY IN INFO IS MADE UP AS FOLLOWS: 01067000
|
|
FWDPT =[1:1],THIS TELLS WHETHER A PROCEDURE WAS DECLARED 01068000
|
|
FORWARD. IT IS RESET AT THE TIME OF ITS ACTUAL 01069000
|
|
FULL DECLARATION. 01070000
|
|
PURPT =[4:8] THIS GIVES A DECREMENT WHICH GIVES THE RELATIVE 01071000
|
|
INDEX TO THE PREVIOUS INFO ENTRY WHEN SUBTRACTED 01072000
|
|
FROM THE CURRENT ENTRY INDEX. 01073000
|
|
[12:6] TELLS THE NUMBER OF CHARACTERS IN THE ENTRY.(<64) 01074000
|
|
[18:30] CONTAINS THE FIRST FIVE ALPHA CHARACTERS OF THE ENTRY 01075000
|
|
AND SUCCEEDING WORDS CONTAIN ALL OVERFLOW IF NEEDED. 01076000
|
|
THESE WORDS CONTAIN 8 CHARACTERS EACH,LEFT JUSTIFIED. 01077000
|
|
THUS,AN ENTRY FOR SYMBOL FOLLOWED BY AN ENTRY 01078000
|
|
FOR X WOULD APPEAR AS FOLLOWS: 01079000
|
|
INFO[I] = ELBATWRD (MADE FOR SYMBOL) 01080000
|
|
I+1 = OP6SYMBO (P DEPENDS ON PREVIOUS ENTRY) 01081000
|
|
I+2 = L 01082000
|
|
I+3 = ELBATWRD (MADE FOR X) 01083000
|
|
I+4 = 031X 01084000
|
|
THIS SHOWS THAT INFO[I-P] WOULD POINT TO THE BEGINNING OF 01085000
|
|
THE ENTRY BEFORE SYMBOL, AND 01086000
|
|
INFO[I+3-3] POINTS TO THE ENTRY FOR SYMBOL. 01087000
|
|
ALL ENTRIES OF IDNETIFIERS HAVE THE INFORMATION DESCRIBED ABOVE 01088000
|
|
THAT IS,THE ELBAT WORD FOLLOWED BY THE WORD CONTAING THE FIRST 01089000
|
|
FIVE CHARACTERS OF ALPHA,AND ANY ADDITIONAL WORDS OF ALPHA IF 01090000
|
|
NECESSARY. 01091000
|
|
THIS IS SUFFICIENT FOR ENTRIES OF THE FOLLOWING TYPES, 01092000
|
|
REAL 01093000
|
|
BOOLEAN 01094000
|
|
INTEGER 01095000
|
|
ALPHA 01096000
|
|
FILE 01097000
|
|
FORMAT 01098000
|
|
LIST 01099000
|
|
OTHER ENTRIES REQUIRE ADDITIONAL INFORMATION. 01100000
|
|
ARRAYS: 01101000
|
|
THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 01102000
|
|
DIMENSIONS(IN THE LOW ORDER PART).[40:8] 01103000
|
|
EACH SUCCEEDING WORD CONTAINS INFORMATION ABOUT EACH LOWER 01104000
|
|
BOUND IN ORDER OF APPEARANCE,ONE WORD FOR EACH LOWER BOUND. 01105000
|
|
THESE WORDS ARE MADE UP AS FOLLOWS: 01106000
|
|
[23:12] =ADD OPERATOR SYLLABLE (0101) OR 01107000
|
|
SUB OPERATOR SYLLABLE (0301) CORRESPONDING 01108000
|
|
RESPECTIVELY TO WHETHER THE LOWER BOUND IS 01109000
|
|
TO BE ADDED TO THE SUBSCRIPT IN INDEXING OR 01110000
|
|
SUBTRACTED. 01111000
|
|
[35:11] =11 BIT ADDRESS OF LOWER BOUND,IF THE LOWER BOUND 01112000
|
|
REQUIRES A PRT OR STACK CELL,OTHERWISE THE BIT 01113000
|
|
35 IS IGNORED AND THE NEXT TEN BITS([36:10]) 01114000
|
|
REPRESENT THE ACTUAL VALUE OF THE LOWER BOUND 01115000
|
|
[46:2] =00 OR 10 DEPENDING ON WHETHER THE [35:11] VALUE 01116000
|
|
IS A LITERAL OR OPERAND,RESPECTIVELY. 01117000
|
|
PROCEDURES: 01118000
|
|
THE FIRST WORD OF ADDITIONAL INFO CONTAINS THE NUMBER OF 01119000
|
|
PARAMETERS [40:8] 01120000
|
|
IF A STREAM PROCEDURE THEN THIS WORD CONTAINS ALSO IN 01121000
|
|
[13:11] ENDING PRT ADDRESS FOR LABELS, 01122000
|
|
[ 7:6] NO OF LABELS REQUIRING PRT ADDRESSES, AND [1:6] NUMBER 01123000
|
|
OF LOCALS. 01124000
|
|
SUCCEEDING WORDS (ONE FOR EACH FORMAL PARAMETER,IN ORDER 01125000
|
|
OF APPEARANCE IN FORMAL PARAPART) ARE 01126000
|
|
ELBAT WORDS SPECIFYING TYPE OF EACH PARAMETER AND WHETHER 01127000
|
|
VALUE OR NOT([10:1]). 01128000
|
|
THE ADDRESS([16:11]) IS THE F- ADDRESS FOR EACH. 01129000
|
|
IF THE PARAMETER IS AN ARRAY THEN THE INCR FIELD([27:8]) 01130000
|
|
CONTAINS THE NUMBER OF DIMENSIONS,OTHERWISE INCR IS MEANINGLESS. 01131000
|
|
LINK([35:13]) IS MEANINGLESS. 01132000
|
|
IF A STREAM PROCEDURE THEN THE CLASS OF EACH PARAMETER IS 01133000
|
|
THAT OF LOCAL ID OR FILE ID, DEPENDING ON WHETHER OR NOT A RELEASE01134000
|
|
IS DONE IN THE STREAM PROCEDURE. 01135000
|
|
LABELS: 01136000
|
|
AT DECLARATION TIME THE ADDITIONAL INFO CONTAINS 0. THE SIGN 01137000
|
|
BIT TELLS WHETHER OR NOT THE DEFINITION POINT HAS BEEN REACHED. 01138000
|
|
IF SIGN = 0, THEN [36:12] CONTAINS AN ADDRESS IN CODEARRAY OF A 01139000
|
|
LIST OF FORWARD REFERENCES TO THIS LABEL. THE END OF LIST FLAG IS01140000
|
|
0. IF SIGN =0, THEN [36:12] CONTAINS L FOR THIS LABEL. 01141000
|
|
SWITCHES: 01142000
|
|
THE FIELD [36:12] CONTAINS L FOR THE BEGINNING OF SWITCH DECLAR- 01143000
|
|
ATION. [24:12] CONTAINS L FOR FIRST SIMPLE REFERENCE TO SWITCH. 01144000
|
|
IF SWITCH IS NOT SIMPLE, IT IS MARKED FORMAL. HERE SIMPLE MEANS 01145000
|
|
NO POSSIBILITY OF JUMPING OUT OF A BLOCK. ;01146000
|
|
DEFINE MON =[ 1: 1]#, 01147000
|
|
CLASS =[ 2: 7]#, 01148000
|
|
FORMAL=[ 9: 1]#, 01149000
|
|
VO =[10: 1]#, 01150000
|
|
LVL =[11: 5]#, 01151000
|
|
ADDRESS=[16:11]#, 01152000
|
|
INCR =[27: 8]#, 01153000
|
|
LINK =[35:13]#, 01154000
|
|
DYNAM =[11:16]#, 01154100
|
|
SBITF =[21:6]#, % STARTING BIT FOR FIELD ID. %117-01154200
|
|
NBITF =[27:6]#, % NUMBER OF BITS FOR FIELD ID.%117-01154300
|
|
LINKR =[35: 5]#, 01155000
|
|
LINKC =[40: 8]#; 01156000
|
|
COMMENT THESE DEFINES ARE USED TO PICK APART THE ELBAT WORD. 01157000
|
|
MON IS THE BIT WHICH IS TURNED ON IF: 01158000
|
|
1. THE QUANTITY IS TO BE MONITORED, OR 01158100
|
|
2. THE QUANTITY IS A PARAMETRIC DEFINE AND NOT 01158200
|
|
A DEFINE WITHOUT PARAMETERS. 01158300
|
|
CLASS IS THE PRINCIPAL IDENTIFICATION OF A GIVEN 01159000
|
|
QUANTITY. 01160000
|
|
FORMAL IS THE BIT WHICH IS ON IF THE QUANTITY IS A FORMAL 01161000
|
|
PARAMETER. 01162000
|
|
VO IS THE VALUE-OWN BIT. IF FORMAL = 1 THEN THE BIT 01163000
|
|
DISTINGUISHES VALUE PARAMETERS FROM OTHERS. IF 01164000
|
|
FORMAL = 0 THEN THE BIT DISTINGUISHES OWN VARIABLES 01165000
|
|
FROM OTHERS. 01166000
|
|
LVL GIVES THE LEVEL AT WHICH A QUANTITY WAS DECLARED. 01167000
|
|
ADDRESS GIVES THE STACK OR PRT ADDRESS. 01168000
|
|
DYNAM IS USED INSTEAD OF LVL AND ADDRESS FOR DEFINE AND 01168100
|
|
DEFINE PARAMETER ENTRIES, ONLY, IT IS AN INDEX 01168200
|
|
INTO THE ARRAY CONTAINING THE DEFINE TEXT. 01168300
|
|
THEREFORE, WHEN THE COMPILER CHECKS TO SEE IF A 01168400
|
|
DEFINE WAS DECLARED B4 IN THE SAME BLOCK, IT DOES 01168500
|
|
NOT USE THE LVL FIELD, BUT MAKES USE OF NINF00 01168600
|
|
INCR GIVES A RELATIVE LINK TO ANY ADDITIONAL INFORMATION 01169000
|
|
NEEDED, RELATIVE TO THE LOCATION IN INFO. 01170000
|
|
LINK CONTAINS A LINK TO THE LOCATION IN INFO IF THE 01171000
|
|
QUANTITY LIES IN ELBAT, OTHERWISE IT LINKS TO THE 01172000
|
|
NEXT ITEM IN THE STACK. ZERO IS AN END FLAG. 01173000
|
|
LINKR AND LINKC ARE SUBDIVISIONS OF LINK.; 01174000
|
|
COMMENT CLASSES FOR ALL QUANTITIES - OCTAL CLASS IS IN COMMENT; 01175000
|
|
COMMENT CLASSES FOR IDENTIFIERS; 01176000
|
|
DEFINE UNKNOWNID =00#, COMMENT 000; 01177000
|
|
STLABID =01#, COMMENT 001; 01178000
|
|
LOCLID =02#, COMMENT 002; 01179000
|
|
DEFINEDID =03#, COMMENT 003; 01180000
|
|
LISTID =04#, COMMENT 004; 01181000
|
|
FRMTID =05#, COMMENT 005; 01182000
|
|
SUPERFRMTID =06#, COMMENT 006; 01183000
|
|
FILEID =07#, COMMENT 007; 01184000
|
|
SUPERFILEID =08#, COMMENT 010; 01185000
|
|
SWITCHID =09#, COMMENT 011; 01186000
|
|
PROCID =10#, COMMENT 012; 01187000
|
|
INTRNSICPROCID =11#, COMMENT 013; 01188000
|
|
STRPROCID =12#, COMMENT 014; 01189000
|
|
BOOSTRPROCID =13#, COMMENT 015; 01190000
|
|
REALSTRPROCID =14#, COMMENT 016; 01191000
|
|
ALFASTRPROCID =15#, COMMENT 017; 01192000
|
|
INTSTRPROCID =16#, COMMENT 020; 01193000
|
|
BOOPROCID =17#, COMMENT 021; 01194000
|
|
REALPROCID =18#, COMMENT 022; 01195000
|
|
ALFAPROCID =19#, COMMENT 023; 01196000
|
|
INTPROCID =20#, COMMENT 024; 01197000
|
|
BOOID =21#, COMMENT 025; 01198000
|
|
REALID =22#, COMMENT 026; 01199000
|
|
ALFAID =23#, COMMENT 027; 01200000
|
|
INTID =24#, COMMENT 030; 01201000
|
|
BOOARRAYID =25#, COMMENT 031; 01202000
|
|
REALARRAYID =26#, COMMENT 032; 01203000
|
|
ALFARRAYID =27#, COMMENT 033; 01204000
|
|
INTARRAYID =28#, COMMENT 034; 01205000
|
|
LABELID =29#, COMMENT 035; 01206000
|
|
COMMENT CLASSES FOR PRIMARY BEGINNERS; 01207000
|
|
TRUTHV =30#, COMMENT 036; 01208000
|
|
NONLITNO =31#, COMMENT 037; 01209000
|
|
LITNO =32#, COMMENT 040; 01210000
|
|
STRNGCON =33#, COMMENT 041; 01211000
|
|
LEFTPAREN =34#, COMMENT 042; 01212000
|
|
COMMENT CLASSES FOR ALL DECLARATORS; 01213000
|
|
DECLARATORS =35#, COMMENT 043; 01214000
|
|
COMMENT CLASSES FOR STATEMENT BEGINNERS 01215000
|
|
READV =36#, COMMENT 044; 01216000
|
|
WRITEV =37#, COMMENT 045; 01217000
|
|
SPACEV =38#, COMMENT 046; 01218000
|
|
CLOSEV =39#, COMMENT 047; 01219000
|
|
LOCKV =40#, COMMENT 050; 01220000
|
|
REWINDV =41#, COMMENT 051; 01221000
|
|
DOUBLEV =42#, COMMENT 052; 01222000
|
|
FORV =43#, COMMENT 053; 01223000
|
|
WHILEV =44#, COMMENT 054; 01224000
|
|
DOV =45#, COMMENT 055; 01225000
|
|
UNTILV =46#, COMMENT 056; 01226000
|
|
ELSEV =47#, COMMENT 057; 01227000
|
|
ENDV =48#, COMMENT 060; 01228000
|
|
FILLV =49#, COMMENT 061; 01229000
|
|
SEMICOLON =50#, COMMENT 062; 01230000
|
|
IFV =51#, COMMENT 063; 01231000
|
|
GOV =52#, COMMENT 064; 01232000
|
|
RELEASEV =53#, COMMENT 065; 01233000
|
|
BEGINV =54#, COMMENT 066; 01234000
|
|
COMMENT CLASSES FOR STREAM RESERVED WORDS; 01235000
|
|
SIV =55#, COMMENT 067; 01236000
|
|
DIQ =56#, COMMENT 070; 01237000
|
|
CIV =57#, COMMENT 071; 01238000
|
|
TALLYV =58#, COMMENT 072; 01239000
|
|
DSV =59#, COMMENT 073; 01240000
|
|
SKIPV =60#, COMMENT 074; 01241000
|
|
JUMPV =61#, COMMENT 075; 01242000
|
|
DBV =62#, COMMENT 076; 01243000
|
|
SBV =63#, COMMENT 077; 01244000
|
|
TOGGLEV =64#, COMMENT 100; 01245000
|
|
SCV =65#, COMMENT 101; 01246000
|
|
LOCV =66#, COMMENT 102; 01247000
|
|
DCV =67#, COMMENT 103; 01248000
|
|
LOCALV =68#, COMMENT 104; 01249000
|
|
LITV =69#, COMMENT 105; 01250000
|
|
TRNSFER =70#, COMMENT 106; 01251000
|
|
COMMENT CLASSES FOR VARIOUS MISCELLANEOUS QUANTITIES; 01252000
|
|
COMMENTV =71#, COMMENT 107; 01253000
|
|
FORWARDV =72#, COMMENT 110; 01254000
|
|
STEPV =73#, COMMENT 111; 01255000
|
|
THENV =74#, COMMENT 112; 01256000
|
|
TOV =75#, COMMENT 113; 01257000
|
|
VALUEV =76#, COMMENT 114; 01258000
|
|
WITHV =77#, COMMENT 115; 01259000
|
|
COLON =78#, COMMENT 116; 01260000
|
|
COMMA =79#, COMMENT 117; 01261000
|
|
CROSSHATCH =80#, COMMENT 120; 01262000
|
|
LFTBRKET =81#, COMMENT 121; 01263000
|
|
PERIOD =82#, COMMENT 122; 01264000
|
|
RTBRKET =83#, COMMENT 123; 01265000
|
|
RTPAREN =84#, COMMENT 124; 01266000
|
|
COMMENT CLASSES FOR OPERATORS; 01267000
|
|
NOTOP =85#, COMMENT 125; 01268000
|
|
ASSIGNOP =86#, COMMENT 126; 01269000
|
|
AMPERSAND =87#, COMMENT 127; 01270000
|
|
EQVOP =88#, COMMENT 130; 01271000
|
|
IMPOP =89#, COMMENT 131; 01272000
|
|
OROP =90#, COMMENT 132; 01273000
|
|
ANDOP =91#, COMMENT 133; 01274000
|
|
RELOP =92#, COMMENT 134; 01275000
|
|
ADOP =93#, COMMENT 135; 01276000
|
|
MULOP =94#, COMMENT 136; 01277000
|
|
FACTOP =95#, COMMENT 137; 01278000
|
|
STRING =99#, COMMENT 143; 01278050
|
|
FIELDID =125#, COMMENT 175; %117-01278090
|
|
FAULTID =126#, COMMENT 176; 01278100
|
|
SUPERLISTID =127#, COMMENT 177; 01278500
|
|
COMMENT SUBCLASSES FOR DECLARATORS (KEPT IN ADDRESS); 01279000
|
|
OWNV =01#, COMMENT 01; 01280000
|
|
SAVEV =02#, COMMENT 02; 01281000
|
|
BOOV =03#, COMMENT 03; 01282000
|
|
REALV =04#, COMMENT 04; 01283000
|
|
ALFAV =05#, COMMENT 05; 01284000
|
|
INTV =06#, COMMENT 06; 01285000
|
|
LABELV =07#, COMMENT 07; 01286000
|
|
DUMPV =08#, COMMENT 10; 01287000
|
|
LISTV =09#, COMMENT 11; 01288000
|
|
OUTV =10#, COMMENT 12; 01289000
|
|
INV =11#, COMMENT 13; 01290000
|
|
MONITORV =12#, COMMENT 14; 01291000
|
|
SWITCHV =13#, COMMENT 15; 01292000
|
|
PROCV =14#, COMMENT 16; 01293000
|
|
ARRAYV =15#, COMMENT 17; 01294000
|
|
FORMATV =16#, COMMENT 20; 01295000
|
|
FILEV =17#, COMMENT 21; 01296000
|
|
STREAMV =18#, COMMENT 22; 01297000
|
|
DEFINEV =19#, COMMENT 23; 01298000
|
|
AUXMEMV =20#, COMMENT 24; %117-01298500
|
|
FIELDV =21#; COMMENT 25; %117-01298600
|
|
DEFINE ADES=0#,LDES=2#,PDES=1#,CHAR=3#; 01299000
|
|
REAL TIME1; 01300000
|
|
INTEGER SCRAM; 01301000
|
|
COMMENT SCRAM CONTAINS THE SCRAMBLE INDEX FOR THE LAST IDENTIFIER 01302000
|
|
OR RESERVED WORD SCANNED; 01303000
|
|
ARRAY FILEATTRIBUTES[0:30] ; 01303500
|
|
ALPHA ARRAY ACCUM[0:10]; 01304000
|
|
COMMENT ACCUM HOLDS THE ALPHA AND CHARACTER COUNT OF THE LAST 01305000
|
|
SCANNED ITEM IN A FORM COMPATIBLE WITH ITS APPEARANCE 01306000
|
|
IN INFO. THAT IS ACCUM[1] = 00NAAAAA, ACCUM[I] , I> 1, 01307000
|
|
HAS ANY ADDITIONAL CHARACTERS. ACCUM[0] IS USED FOR 01308000
|
|
THE ELBAT WORD BY THE ENTER ROUTINES; 01309000
|
|
ARRAY STACKHEAD,SUPERSTACK[0:124]; %WF 01310000
|
|
COMMENT STACKHEAD[N] CONTAINS AN INDEX INTO INFO, THIS INDEX %WF 01311000
|
|
POINTS TO THE TOP ITEM IN THE N-TH STACK (ACTUALLY A %WF 01311100
|
|
LINKED-LIST). SUPERSTACK IS NOT A TELEVISION STAR, %WF 01311200
|
|
BUT RATHER A SPECIAL STACKHEAD WHICH ALWAYS POINTS %WF 01311300
|
|
AT CERTAIN COMMONLY USED RESERVED WORDS. THOSE %WF 01311400
|
|
WORDS POINTED TO (IN THREE GROUPS) ARE: %WF 01311500
|
|
1) ALPHA, LABEL, OWN, REAL, SAVE %WF 01311600
|
|
2) AND, DIV, EQV, IMP, MOD, NOT, OR, TRUE %WF 01311700
|
|
3) BEGIN, DO, ELSE, END, FOR, GO, IF, %WF 01311800
|
|
STEP, THEN, TO, UNTIL, WHILE, WRITE. %WF 01311900
|
|
FOR MORE INFORMATION ON THE USE OF SUPERSTACKM SEE %WF 01312000
|
|
COMMENTS IN THE TABLE PROCEDURE. ; %WF 01312100
|
|
INTEGER COUNT; 01313000
|
|
COMMENT COUNT CONTAINS THE NUMBER OF CHARACTORS OF THE LAST ITEM 01314000
|
|
SCANNED; 01315000
|
|
ALPHA Q; 01316000
|
|
COMMENT Q CONTAINS ACCUM[1] FOR THE LAST IDENTIFIER OR RESERVED 01317000
|
|
WORD SCANNED; 01318000
|
|
ARRAY ELBAT[0:76]; INTEGER I,NXTELBT; 01319000
|
|
COMMENT ELBAT IS AN ARRAY HOLDING ELBAT WORDS FOR RECENTLY SCANNED 01320000
|
|
QUANTITIES. THE TABLE ROUTINE MAINTAINS THIS ARRAY. 01321000
|
|
(ELBAT IS TABLE SPELLED BACKWARDS.) THE TABLE ROUTINE 01322000
|
|
GUARANTIES THAT ELBAT ALWAYS CONTAINS THE ELBAT WORDS 01323000
|
|
FOR THE LAST 10 QUANTITIES SCANNED. NXTELBT IS AN INDEX 01324000
|
|
POINTING TO THE NEXT AVAILABLE WORD IN ELBAT. I IS AN 01325000
|
|
INDEX USED BY THE REST OF THE COMPILER TO FETCH THINGS 01326000
|
|
FROM ELBAT. I IS ALSO MAINTAINED BY THE TABLE ROUTINE; 01327000
|
|
INTEGER ELCLASS; 01328000
|
|
COMMENT ELCLASS USUALLY CONTAINS ELBAT[I].CLASS; 01329000
|
|
INTEGER LASTELCLASS; 01329100
|
|
COMMENT LASTELCLASS IS SET TO PREV ELCLASS BY NEXTENT; 01329200
|
|
INTEGER FCR, NCR, LCR,TLCR,CLCR; 01330000
|
|
INTEGER MAXTLCR; 01331000
|
|
COMMENT FCR CONTAINS ABSOLUTE ADDRESS OF THE FIRST CHARACTOR OF 01332000
|
|
THE CARD IMAGE CURRENTLY BEING SCANNED, NCR THE ADDRESS 01333000
|
|
OF THE NEXT CHARACTOR TO BE SCANNED, AND LCR THE LAST 01334000
|
|
CHARACTOR (COLUMN 73). TLCR AND CLCR CONTAIN ADDRESS OF 01335000
|
|
THE LAST CHARACTER IN THE TAPE AND CARD BUFFERS. MAXTLCR 01336000
|
|
IS THE MAXIMUM OF TLCR WHEN THE INPUT IS BLOCKED; 01337000
|
|
DEFINE BUFFSIZE = 56#; 01338000
|
|
INTEGER GTIX; 01339050
|
|
ARRAY TEN[0:69]; 01340000
|
|
INTEGER NOOFARRAYS; COMMENT NOOFARRAYS IS THE SUM OF ARRAYS 01340050
|
|
DECLARED IN THE OBJECT PROGRAM; 01340060
|
|
INTEGER IOBUFFSIZE; COMMENT IOBUFFSIZE IS FILE SPACE NEEDED. 01340070
|
|
GTI1 EQUALS TOTAL CORE STORAGE REQD; 01340080
|
|
REAL FSAVE; COMMENT SAVES FRACTIONAL PART EXPONENT WHEN CONV NUM; 01340500
|
|
INTEGER IDLOC,IDLOCTEMP; 01341000
|
|
ARRAY PDPRT[0:31,0:63]; 01342000
|
|
COMMENT PDPRT CONTAINS INFORMATION FOR USE AT THE END OF COMPILATION 01343000
|
|
IT IS BUILT BY PROGDESCBLDR.THIS INFORMATION IS USED TO 01344000
|
|
BUILD THE SEGMENT DICTIONARY AND PRT. THERE ARE TWO TYPES 01345000
|
|
OF ENTRIES IN THIS TABLE AS DESCRIBED BELOW. 01346000
|
|
TYPE 1 ENTRY 01347000
|
|
BIT POSITION KIND OF ENTRY 01348000
|
|
0-3 ZERO 01349000
|
|
4 MODE BIT(1=CHAR 0=WORD) 01350000
|
|
5 ARGUMENT BIT 01351000
|
|
6-7 ZERO 01352000
|
|
8-17 RELATIVE ADDRESS IN PRT 01353000
|
|
18-27 RELATIVE ADDRESS IN SEGMENT 01354000
|
|
28-37 SEGMENT NUMBER 01355000
|
|
38-47 ZERO 01356000
|
|
TYPE 2 ENTRY 01357000
|
|
BIT POSITION KIND OF ENTRY 01358000
|
|
0 EMPTY 01359000
|
|
1 ON IFF TYPE 2 (DATA) SEGMENT 01360000
|
|
2 ON IFF INTRINSIC PROCEDURE 01361000
|
|
3 ON IFF "PSEUDO-SAVE" SEGMENT 01361050
|
|
4-12 EMPTY 01361100
|
|
13-27 DISK ADDRESS OR INTRINSIC NUMBER 01361200
|
|
28-37 SEGMENT NUMBER 01361300
|
|
38-47 NUMBER OF WORDS IN SEGMENT 01362000
|
|
THERE IS ONLY ONE TYPE 2 ENTRY PER SEGMENT.THE TYPE 2 ENTRY 01363000
|
|
IS DISTINGUISHED BY THE NON ZERO FIELD IN BITS 38-47. THIS 01364000
|
|
ENTRY IS USED TO BUILD THE DRUM DESCRIPTOR IN THE SEGMENT 01365000
|
|
DICTIONARY.TYPE 2 ENTRIES ARE PUT INTO PDPRT WHEN ANY SEGMENT01366000
|
|
IS READY FOR OUTPUT; 01367000
|
|
COMMENT THE FORMAT OF SEGMENT DICTIONARY AND PRT ENTRIES AT THE END OF 01367010
|
|
COMPILATION IS AS FOLLOWS: 01367020
|
|
SEGMENT DICTIONARY ENTRY (IE., SD[I] FOR SEGMENT NUM. I) 01367030
|
|
BIT POSITIONS CONTENTS OF FIELD 01367040
|
|
[0:1] EMPTY 01367050
|
|
[1:1] ON IFF TYPE 2 (DATA) SEGMENT 01367060
|
|
[2:1] ON IFF INTRINSIC PROCEDURE 01367070
|
|
[3:1] EMPTY (USED BY MCP PRESENCE-BIT ROUTINE) 01367075
|
|
[4:1] ON IFF "PSEUDO-SAVE" SEGMENT 01367080
|
|
[5:1] EMPTY (USED BY MCP OVERLAY ROUTINE) 01367085
|
|
[8:10] R-RELATIVE LINK TO PRT ENTRY FOR THIS SEGMENT 01367090
|
|
[18:15] SIZE (NOT USED FOR INTRINSICS) 01367100
|
|
[33:15] DISK ADDRESS OR INTRINSIC NUMBER 01367110
|
|
PRT ENTRY (IE., PROGRAM DESCRIPTOR FOR SEGMENT NUMBER I) 01367120
|
|
BIT POSITIONS CONTENTS OF FIELD 01367130
|
|
[0:4] 1101 (BINARY) NON-PRESENT PROG, DESC. IDBITS 01367140
|
|
[4:2] MODE AND ARGUMENT BITS 01367150
|
|
[6:1] STOPPER (ON IFF THIS ENTRY LINKS TO SEG. DICT.) 01367160
|
|
[7:11] IF [6:1] THEN I ELSE R-RELATIVE LINK TO ANOTHER 01367170
|
|
PRT ENTRY FOR SEGMENT I 01367180
|
|
[18:15] I 01367190
|
|
[33:15] RELATIVE ADDRESS WITHIN THE SEGMENT OF THIS DESC;01367200
|
|
COMMENT THE CONTENTS OF RELATIVE DISK SEGMENT ZERO OF THE CODE FILE ARE:01367210
|
|
WORD CONTENTS 01367220
|
|
0 RELATIVE LOCATION OF SEGMENT DICTIONARY 01367230
|
|
1 SIZE OF SEGMENT DICTIONARY 01367240
|
|
2 RELATIVE LOCATION OF PRT 01367250
|
|
3 SIZE OF PRT 01367260
|
|
4 RELATIVE LOCATION OF FILE PARAMETER BLOCK 01367270
|
|
5 SIZE OF FILE PARAMETER BLOCK 01367280
|
|
6 SEGMENT NUMBER OF FIRST SEGMENT TO EXECUTE (IE., 1) 01367290
|
|
7 N 01367300
|
|
. O U 01367310
|
|
. T S 01367320
|
|
. E 01367330
|
|
29 D; 01367340
|
|
INTEGER PDINX;COMMENT THIS IS THE INDEX FOR PDPRT; 01368000
|
|
INTEGER SGAVL;COMMENT NEXT AVAILABLE SEGMENT NUMBER; 01369000
|
|
INTEGER SGNO;COMMENT THIS IS THE CURRENT SEGMENT NUMBER; 01370000
|
|
ARRAY EDOC[0:7,0:127],COP[0:63],WOP[0:127],POP[0:10]; 01371000
|
|
COMMENT THE EMIT ROUTINES PLACE EACH SYLLABLE INTO THE EDOC ARRAY 01372000
|
|
AS SPECIFIED BY "L". 01373000
|
|
IF DEBUGTOG IS TRUE, COP, WOP, AND POP ARE FILLED 01374000
|
|
THE BCD FOR THE OPERATORS,OTHERWISE THEY ARE NOT USED; 01375000
|
|
REAL LASTENTRY ; 01376000
|
|
COMMENT LASTENTRY IS USED BY EMITNUM AND CONSTANTCLEAN. IT POINTS 01377000
|
|
INTO INFO[0,*] AT THE NEXT AVAILABLE CELL FOR CONSTANTS; 01378000
|
|
BOOLEAN MRCLEAN ; 01379000
|
|
COMMENT NO CONSTANTCLEAN ACTION TAKES PLACE WHILE MRCLEAN IS 01380000
|
|
FALSE. THIS FEATURE IS USED BY BLOCK BECAUSE OF THE 01381000
|
|
POSSIBILITY THAT CONSTANTCLEAN WILL USE INFO[NEXTINFO] 01382000
|
|
DURING AN ARRAY DECLARATION ; 01383000
|
|
REAL GT1,GT2,GT3,GT4,GT5; 01384000
|
|
INTEGER GTI1; 01384500
|
|
COMMENT THESE VARIABLES ARE USED FOR TEMPORARY STORAGE; 01385000
|
|
INTEGER RESULT; 01386000
|
|
COMMENT THIS VARIABLE IS USED FOR A DUAL PURPOSE BY THE TABLE 01387000
|
|
ROUTINE AND THE SCANNER. THE TABLE ROUTINE USES THIS 01388000
|
|
VARIABLE TO SPECIFY SCANNER OPERATIONS AND THE SCANNER 01389000
|
|
USES IT TO INFORM THE TABLE ROUTINE OF THE ACTION TAKEN; 01390000
|
|
INTEGER LASTUSED; 01391000
|
|
COMMENT LASTUSED IS A VARIABLE THAT CONTROLS THE ACTION OF 01392000
|
|
READACARD, THE ROUTINE WHICH READS CARDS AND INITIALIZES 01393000
|
|
OR PREPARES THE CARD FOR THE SCANNER. 01394000
|
|
LASTUSED LAST CARD READ FROM 01394500
|
|
-------- ------------------- 01394600
|
|
1 CARD READER ONLY, NO TAPE. 01395000
|
|
2 CARD READER, TAPE AND CARD MERGE. 01396000
|
|
3 TAPE, TAPE AND CARD MERGE. 01397000
|
|
4 INITIALIZATION ONLY, CARD ONLY. 01398000
|
|
5 CARD READER - MAKCAST, MERGING. 01398100
|
|
6 TAPE - MAKCAST, MERGING. 01398200
|
|
; 01398300
|
|
BOOLEAN LINKTOG; 01399000
|
|
COMMENT LINKTOG IS FALSE IF THE LAST THING EMITTED IS A LINK, 01400000
|
|
OTHERWISE IT IS TRUE; 01401000
|
|
INTEGER LEVEL,FRSTLEVEL,SUBLEVEL,MODE; 01402000
|
|
COMMENT THESE VARIABLES ARE MAINTAINED BY THE BLOCK ROUTINE TO KEEP 01403000
|
|
TRACK OF LEVELS OF DEFINITION. LEVEL GIVES THE DEPTH OF 01404000
|
|
NESTING IN DEFINITION, WHERE EACH BLOCK AND EACH PROCEDURE01405000
|
|
GIVES RISE TO A NEW LEVEL. SUBLEVEL GIVES THE LEVEL OF 01406000
|
|
THE PARAMETERS OF THE PROCEDURE CURRENTLY BEING COMPILED. 01407000
|
|
FRSTLEVEL IS THE LEVEL OF THE PARAMETERS OF THE MOST 01408000
|
|
GLOBAL OF THE PROCEDURES CURRENTLY BEING COMPILED. MODE 01409000
|
|
IS THE CURRENT DEPTH OF THE PROCEDURE IN WHICH WE ARE 01410000
|
|
NESTED (AT COMPILE TIME); 01411000
|
|
INTEGER AUXMEMREQ; 01411010
|
|
BOOLEAN SAVEPRTOG; 01411020
|
|
COMMENT VARIABLES USED TO CONTROL SEGMENT DICTIONARY 01411030
|
|
ENTRIES FOR "PSEUDO-SAVE" PROCEDURES. 01411040
|
|
AUXMEMREQ IS THE AMOUNT OF AUXILIARY MEMORY 01411050
|
|
WHICH WOULD BE REQUIRED IF ALL OF THESE 01411060
|
|
"PSEUDO-SAVE" ROUTINES ARE TO BE OVERLAID 01411070
|
|
TO AUXILIARY MEMORY. SAVEPRTOG IS USED 01411080
|
|
TO COMMUNICATE TO THE OUTSIDE WORLD THAT A 01411090
|
|
ROUTINE IS "PSEUDO-SAVE". 01411100
|
|
; 01411110
|
|
BOOLEAN ERRORTOG; 01412000
|
|
COMMENT ERRORTOG IS TRUE IF MESSAGES ARE CURRENTLY ACCEPTABLE TO THE01413000
|
|
ERROR ROUTINES. ERRORCOUNT IS THE COUNT OF ERROR MSSGS; 01414000
|
|
BOOLEAN ENDTOG; COMMENT ENDTOG TELLS THE TABLE TO ALLOW 01415000
|
|
COMMENT TO BE PASSED BACK TO COMPOUNDTAIL; 01416000
|
|
BOOLEAN STREAMTOG; % STREAMTOG IS TRUE IF WE ARE COMPILING A 01416500
|
|
% STREAM STATEMENT IN ALGOL, TSPOL, OR ESPOL: 01417000
|
|
% IT IS USED TO CONTROL COUMPOUNDTAIL. 01417500
|
|
% IT IS ALSO USED WHEN WE ARE COMPILING A 01418000
|
|
% "FILL" STATEMENT (SEE "FILLSTMT" PROCEDURE) OR 01418500
|
|
% AN ALPHA (BCL) STRING (SEE "TABLE" PROCEDURE). 01419000
|
|
DEFINE FS = 1#, FP = 2#, FL = 3#, FR = 4#, FA = 5#, 01420000
|
|
FI = 6#, FIO = 7#; 01420500
|
|
COMMENT THESE DEFINES ARE USED WHEN CALLING THE VARIABLE ROUTINE. 01421000
|
|
THEIR PURPOSES IS TO TELL VARIABLE WHO IS CALLING. 01422000
|
|
THEIR MEANING IS: 01423000
|
|
FS MEANS FROM STATEMENT, 01424000
|
|
FP MEANS FROM PRIMARY, 01425000
|
|
FL MEANS FROM LIST, 01426000
|
|
FR MEANS FROM FOR, 01427000
|
|
FIO MEANS FROM IODEC. 01427250
|
|
FA MEANS FROM ACTUALPARAPART. 01427500
|
|
FI MEANS FUNNY CALL FROM STATUS (IMPFUN); 01427600
|
|
INTEGER L; 01428000
|
|
COMMENT L IS THE LOCATION OF THE NEXT SYLLABLE TO BE EMITTED; 01429000
|
|
DEFINE BLOCKCTR = 16#, JUNK = 17 #, XITR = 18 #, LSTRTN = 19#; 01430000
|
|
COMMENT THESE DEFINES NAME THE FIXED PRT CELLS USED BY ALL OBJECT 01431000
|
|
PROGRAMS. 01432000
|
|
BLOCKCTR IS A TALLY WHICH IS INCREMENT EACH TIME A 01433000
|
|
BLOCK IS ENTERED WHICH OBTAINS STORAGE, OR CONTAINS WITH 01434000
|
|
IN IT A NON-LOCAL GO TO. EACH TIME SUCH A BLOCK IS LEFT 01435000
|
|
BLOCKCTR IS DECREMENTED. THE PRIMARY PURPOSE SERVED IS T301436000
|
|
INFORM THE MCP OF THE STORAGE WHICH NEEDS TO BE RETURNED. 01437000
|
|
JUNK IS AN ALL-PURPOSE CELL FOR STORING VALUES USED 01438000
|
|
IN LINKAGE BETWEEN VARIOUS ROUTINES AND FOR INTEGERIZING 01439000
|
|
THINGS ON THE TOP OF THE STACK. 01440000
|
|
XITR CONTAINS A CHARACTOR MODE PROGRAM DESCRIPTOR 01441000
|
|
WHICH POINTS AT AN EXIT CHARACTOR MODE OPERATOR. IT IS 01442000
|
|
USED TO CLEAN UP THE STACK AFTER A MKS HAS BEEN GIVEN. 01443000
|
|
THIS A USFULL WAY TO ELIMINATE MANY REDUNDENT ITEMS IN THE01444000
|
|
STACK. SEE FOR EXAMPLE THE ARRAY DECLARATIONS. 01445000
|
|
LSTRTN IS A CELL USED AS LINKAGE BETWEEN A LIST AND 01446000
|
|
THE I-O FORMATING ROUTINES. THE FIRST SYLLABLES EXECUTED 01447000
|
|
BY A LIST ARE: 1) OPDC LSTRTN, 2) BFW, THIS CARRIES YOU 01448000
|
|
TO THE PROPER ITEM IN THE LIST. THE FORMATING ROUTINES 01449000
|
|
SET LSTRTN INITIALLY TO ZERO. THE LIST ITSELF UPDATES 01450000
|
|
LSTRTN. THE LIST EXHAUSTED FLAG IS -1; 01451000
|
|
DEFINE BTYPE =1#, DTYPE =2#, ATYPE =3#; 01452000
|
|
COMMENT THESE DEFINES NAME THE VALUES USED BY THE EXPRESSION 01453000
|
|
ROUTINES IF REPORT THE TYPE OF EXPRESSION COMPILED. 01454000
|
|
BTYPE IS FOR BOOLEAN, DTYPE FOR DESIGNATIONAL, AND ATYPE 01455000
|
|
FOR ARITHMETIC EXPRESSIONS; 01456000
|
|
BOOLEAN TB1; 01457000
|
|
COMMENT TB1 IS A TEMPORARY BOOLEAN VARIABLE; 01458000
|
|
INTEGER JUMPCTR; 01459000
|
|
COMMENT JUMPCTR IS A VARIABLE USED FOR COMMUNICATION BETWEEN BLOCK 01460000
|
|
AND GENGO. IT GIVES HIGHEST LEVEL TO WHICH A JUMP HAS 01461000
|
|
BEEN MADE FROM WITHIN A THE PRESENTLY BEING COMPILED 01462000
|
|
SEGMENT. THE BLOCK COMPILES CODE TO INCREMENT AND DECRE- 01463000
|
|
MENT THE BLOCKCTR ON THE BASIS OF JUMPCTR AT COMPLETION 01464000
|
|
OF COMPILATION OF A SEGMENT - I.E. THE BLOCKCTR IS TALLIED 01465000
|
|
IF LEVEL = JUMPCTR; 01466000
|
|
BOOLEAN GOTOG; 01467000
|
|
COMMENT GOTOG IS SET FALSE BY GOSTMT. DEXP SETS GOTOG TRUE IF ANY 01468000
|
|
LABEL OR SWITCH IS NON LOCAL. GOSTMT FINDS OUT BY THIS 01469000
|
|
MEANS WHETHER OR NOT A CALL ON MCP IS NECESSARY; 01470000
|
|
REAL STLB; 01471000
|
|
COMMENT STLB IS USED BY VARIABLE AND ACTUALPARAPART TO COMMUNICATE 01472000
|
|
THE LOWER BOUND INFORMATION FOR THE LAST DIMENSION OF THE 01473000
|
|
ARRAY INVOLVED IN A ROW DESIGNATOR. THE FORMAT OF THE 01474000
|
|
INFORMATION IS THAT OF INFO. STLB IS ALSO SOMETIMES USED 01475000
|
|
FOR TEMPORARY STORAGE; 01476000
|
|
DEFINE BUMPL = L~L+2#; 01477000
|
|
COMMENT BUMPL IS USED MOSTLY TO PREPARE A FORWARD JUMP; 01478000
|
|
DEFINE IDMAX = LABELID#; 01479000
|
|
COMMENT IDMAX IS THE MAXIMUM CLASS NUMBER FOR IDENTIFIERS; 01480000
|
|
INTEGER DEFINECTR,DEFINEINDEX; 01481000
|
|
ALPHA ARRAY DEFINFO[0:89]; 01481100
|
|
ALPHA ARRAY TEXT[0:31,0:255]; 01481200
|
|
INTEGER DEFSTACKHEAD; % STACKHEAD FOR DEFINE PARAMETERS 01481300
|
|
INTEGER NEXTTEXT; % NEDEX OF NEXT DEFINE TEXT 01481400
|
|
REAL JOINFO, COMMENT POINTS TO PSEUDO LABEL FOR JUMP OUTS; 01482000
|
|
LPRT, COMMENT SHOWS LOCATION OF THE LAST LABEL IN THE PRT ; 01483000
|
|
NESTLEVEL, COMMENT COUNTS NESTING FOR GO TO AND JUMP OUTS; 01484000
|
|
JUMPLEVEL; COMMENT NUMBER OF LEVELS TO BE JUMPED OUT; 01485000
|
|
COMMENT THE REALS ABOVE ARE FOR STREAM STATEMENT; 01486000
|
|
ARRAY MACRO[0:35]; 01487000
|
|
COMMENT MACRO IS FILLED WITH SYLLABLES FOR STREAM STATEMENT; 01488000
|
|
REAL P, COMMENT CONTAINS NUMBER OF FORMALS FOR STREAM PROCS; 01489000
|
|
Z; COMMENT CONTAINS 1ST WORD OF INFO FOR STREAM FUNCTIONS; 01490000
|
|
SAVE ALPHA ARRAY DEFINEARRAY[0:34]; 01491000
|
|
COMMENT THESE VARIABLES ARE USED TO CONTROL ACTION OF THE DEFINE. 01492000
|
|
DEFINECTR COUNTS DEPTH OF NESTING OF DEFINE-# PAIRS. 01493000
|
|
THE CROSSHATCH PART OF THE TABLE ROUTINE USES DEFINECTR 01494000
|
|
TO DETERMINE THE MEANING OF A CROSSHATCH. DEFINEINDEX IS 01495000
|
|
THE NEXT AVAILABLE CELL IN THE DEFINEARRAY. THE DEFINE- 01496000
|
|
ARRAY HOLDS THE ALPHA OF THE DEFINE BEING RECREATED AND 01497000
|
|
THE PREVIOUS VALUES OF LASTUSED, LCR, AND NCR; 01498000
|
|
INTEGER BEGINCTR; 01499000
|
|
COMMENT BEGINCTR GIVES THE NUMBER OF UNMATCHED BEGINS. IT IS USED01500000
|
|
FOR ERROR CONTROL ONLY; 01501000
|
|
INTEGER DIALA,DIALB; 01502000
|
|
COMMENT THESE VARIABLES GIVE THE LAST VALUE TO WHICH A AND B WERE 01503000
|
|
DIALED. THIS GIVES SOME LOCAL OPTIMIZATION. EMITD 01504000
|
|
WORRIES ABOUT THIS. OTHER ROUTINES CAUSE A LOSS OF MEMORY01505000
|
|
BY SETTING DIALA AND DIALB TO ZERO; 01506000
|
|
01507000
|
|
01508000
|
|
01509000
|
|
01510000
|
|
01511000
|
|
01512000
|
|
01513000
|
|
01514000
|
|
01515000
|
|
01516000
|
|
01517000
|
|
01518000
|
|
01519000
|
|
01520000
|
|
01521000
|
|
BOOLEAN RRB1; COMMENT RRB1---RRBN ARE BOOLEAN VARIABLES THAT SERVE THE 01522000
|
|
SAME FUNCTION AS RR1---RRN FOR REAL VARIABLES. SEE 01523000
|
|
COMMENT AT RR1; 01524000
|
|
BOOLEAN RRB2; COMMENT SEE COMMENT AT RRB1 DECLARATION; 01525000
|
|
DEFINE ARRAYMONFILE = [27:11]#; COMMENT ARRAYMONFILE IS THE DEFINE FOR 01526000
|
|
THE ADDRESS OF THE FILE DESCRIPTOR IN 01527000
|
|
THE FIRST WORD OF ADDITIONAL INFO; 01528000
|
|
DEFINE SVARMONFILE = [37:11]#; COMMENT MONITORFILE IS THE DEFINE FOR 01529000
|
|
THE ADDRESS OF THE FILE DESCRIPTOR IN 01530000
|
|
INFO FOR MONITORED SIMPLE VARIABLES; 01531000
|
|
DEFINE NODIMPART = [40:8]#; COMMENT THE FIRST ADDITIONAL WORD OF INFO 01532000
|
|
FOR ARRAYS CONTAINS THE NUMBER OF DIMENSIONS01533000
|
|
IN NODIMPART; 01534000
|
|
DEFINE LABLMONFILE = [13:11]#; COMMENT LABLMONFILE DESIGNATES THE BIT 01535000
|
|
POSITION IN THE FIRST WORD OF ADDITIONAL 01536000
|
|
INFO THAT CONTAINS THE MONITOR FILE 01537000
|
|
ADDRESS FOR LABELS; 01538000
|
|
DEFINE SWITMONFILE = [13:11]#; COMMENT SWITMONFILE DESIGNATES THE BIT 01539000
|
|
POSITION IN THE FIRST WORD OF ADDITIONAL 01540000
|
|
INFO THAT CONTAINS THE MONITOR FILE 01541000
|
|
ADDRESS FOR LABELS; 01542000
|
|
DEFINE FUNCMONFILE = [27:11]#; COMMENT FUNCMONFILE DESIGNATES THE BIT 01543000
|
|
POSITION IN THE FIRST WORD OF ADDITIONAL 01544000
|
|
INFO THAT CONTAINS THE MONITOR FILE 01545000
|
|
ADDRESS FOR LABELS; 01546000
|
|
DEFINE DUMPEE = [2:11]#; COMMENT THE DUMPEE FIELD IN THE FIRST 01547000
|
|
ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 01548000
|
|
THE ADDRESS OF THE COUNTER THAT IS INCREMENTED 01549000
|
|
EACH TIME THE LABEL IS PASSED IF THAT LABEL 01550000
|
|
APPEARS IN A DUMP DECLARATION; 01551000
|
|
DEFINE DUMPOR = [24:11]#; COMMENT THE DUMPOR FIELD IN THE FIRST 01552000
|
|
ADDITIONAL WORD OF INFO FOR LABELS CONTAINS 01553000
|
|
THE ADDRESS OF THE ROUTINE THAT IS GENERATED 01554000
|
|
FROM THE DUMP DECLARATION THAT IN TURN CALLS 01555000
|
|
THE PRINTI ROUTINE; 01556000
|
|
DEFINE CHUNK = 180#; 01556100
|
|
FILE OUT CODE DISK[20:CHUNK](4,30,SAVE ABS(SAVETIME)); 01556200
|
|
FILE IN CARD (RR1,10,RR2); 01557000
|
|
SAVE 01558000
|
|
FILE OUT LINE DISK SERIAL [20:2400] (RR3,15,RR4,SAVE 10); 01559000
|
|
ARRAY LIN[0:20]; COMMENT PRINT OUTPUT BUILT IN LIN; 01559010
|
|
INTEGER DA; 01559020
|
|
SAVE FILE OUT NEWTAPE DISK SERIAL [20:2400] (RR5,RR6,RR7,SAVE 1); 01560000
|
|
FILE IN TAPE "OCRDIMG" (2,RR8,RR9); 01561000
|
|
SAVE FILE OUT PNCH DISK SERIAL [20:2400](2,10,RR10,SAVE 1); 01561005
|
|
COMMENT THE FOLLOWING ARE DECLARATIONS FOR THE SYMBOLIC LIBRARIES; 01561010
|
|
FILE IN CASTA DISK SERIAL "CASTA" "LIBRARY"(1,BUFFSIZE); 01561020
|
|
FILE IN CASTB(1,BUFFSIZE); 01561030
|
|
FILE IN CASTC(1,BUFFSIZE); 01561040
|
|
SWITCH FILE LIBRARY~CASTA,CASTB,CASTC; 01561050
|
|
FILE OUT REMOTE 19 (2,10); 01561055
|
|
SAVE ARRAY CBUFF,TBUFF[0:9]; % INPUT BUFFERS. 01561056
|
|
BOOLEAN REMOTOG; 01561060
|
|
ARRAY LIBARRAY[0:24]; % LIBARRAY IS USED TO KEEP INFORMATION AS 01561065
|
|
% TO LAST COMPILED LIBRARY SEQUENCE NUMBERS. 01561070
|
|
% EACH ENTRY CONSISTS OF THREE WORDS CONTAINING: 01561080
|
|
FILE DSK1 DISK SERIAL [20:816](2,10,30); %116-01561085
|
|
FILE DSK2 DISK SERIAL [20:450](2,30,30); %116-01561087
|
|
DEFINE LSTUSD=[9:3]#, FILEINDEX=[12:4]#, STOPPOINT=[16:16]#, 01561090
|
|
NEXTENTRY =[32:16]#; COMMENT SECOND WORD IS THE $$ SEQ NO; 01561100
|
|
DEFINE NCRLINK = [18:15]#, LCRLINK= [33:15]#; 01561110
|
|
INTEGER LIBINDEX,LTLCR,MAXLTLCR,FILEINX,SEQSUM; 01561120
|
|
COMMENT LIBINDEX IS A INDEX INTO LIBRARRAY 01561130
|
|
INDICATING LAST ENTRY MADE IN THE ARRAY. 01561140
|
|
LTLCR AND MAXLTLCR CORRESPOND TO TLCR AND 01561150
|
|
MAXTLCR USED IN READACARD, FILEINX IS THE 01561160
|
|
LIBRARY SWITCH FILE INDEX. SEQSUM IS THE 01561170
|
|
SUM OF BASE SEQUENCE NUMBERS AT THIS POINT. 01561180
|
|
FINISHPT IS THE LAST RECORD NUMBER TO COMPILE; 01561190
|
|
REAL RECOUNT,FINISHPT; 01561200
|
|
BOOLEAN FIRSTIMEX; COMMENT USED TO INDICATE WHEN 01561202
|
|
PROCESSING FIRST CARDIMAGE OF A NESTED CALL; 01561204
|
|
BOOLEAN CARDCALL; COMMENT TRUE IF NESTED CALL CAME FROM THE 01561206
|
|
CARD READER ELSE FALSE; 01561208
|
|
COMMENT RECOUNT IS THE LIBRARY RECORD COUNT; 01561210
|
|
BOOLEAN NORELEASE; COMMENT NORELEASE ALLOWS PRINTING 01561215
|
|
OF CURRENT BUFFER WHEN COMMING OUT OF LIBRARIES; 01561217
|
|
DEFINE NOROWS = 3#; COMMENT THIS IS THE MAXIMUM NUMBER OF DIRECTORY 01561220
|
|
BLOCKS PER LIBRARY TAPE; 01561230
|
|
ARRAY DIRECTORY[0:3|NOROWS-1, 0:55]; COMMENT THIS IS THE ACTUAL 01561240
|
|
DIRECTORY AND IS MADE UP AS FOLLOWS: 01561250
|
|
A: 1 CAR- NUMBER OF DIRECTORY BLOCKS. 01561260
|
|
B: 1 CHR - NUMBER OF CHARACTERS IN THE LIBRARY 01561270
|
|
IDENTIFIER NAME. 01561280
|
|
C N CHR - ACTUAL ALPHA OF THE LIBRARY IDENTIFIER. 01561290
|
|
D: 3 CHR - STARTING RECORD NUMBER FOR THE ACTUAL 01561300
|
|
ENTRIES. 01561310
|
|
ITEMS B,C,D ARE THE REPEATED FOR EACH IDENTIFIER. 01561320
|
|
LIBRARY DIRECTORY ENTRIES ARE NOT SPLIT ACROSS 01561330
|
|
DIRECTORY BLOCKS. 01561340
|
|
ITEM B WHEN 0 INDICATES THE END OF THE DIRECTORY 01561350
|
|
AND THE ITEM D WILL FOLLOW INDICATING THE 01561360
|
|
LAST SEQUENCE NUMBER + 1 PUT ON THE LIBRARY. 01561370
|
|
ITEM B WHEN INDICATS LAST DIRECTORY ITEM IN THIS 01561380
|
|
BLOCK. 01561390
|
|
IN ORDER TO CHANGE: 01561400
|
|
NUMBER OF LIBRARY TAPES - ADD FILE DECLARATIONS AT 01561410
|
|
01561020 - 01561050. 01561420
|
|
- CHANGE "3" AT 01561430
|
|
NUMBER OF LIBRARY ENTRIES PER TAPE - CHANGE NOROWS 01561440
|
|
AT ; 01561450
|
|
DEFINE %107-01561500
|
|
INSERTMAX = 20#, % CHANGE THIS IF YOU NEED MORE LEVELS OF INCLUDES 01561510
|
|
INSERTCOP = INSERTINFO[INSERTDEPTH,4]#, % = 1 IF COPY TO NEWTAPE 01561520
|
|
INSERTMID = INSERTINFO[INSERTDEPTH,0]#, % MFID OF THE LIBRARY FILE 01561530
|
|
INSERTFID = INSERTINFO[INSERTDEPTH,1]#, % FID OF THE LIBRARY FILE 01561540
|
|
INSERTINX = INSERTINFO[INSERTDEPTH,2]#, % POINTER TO THE RECORD%107-01561550
|
|
INSERTSEQ = INSERTINFO[INSERTDEPTH,3]#; % LAST SEQUENCE TO BE INCLUD01561560
|
|
INTEGER SAVECARD, INSERTDEPTH; %107-01561570
|
|
ARRAY INSERTINFO[0:INSERTMAX,0:4]; %107-01561580
|
|
FILE LIBRARYFIL DISK RANDOM(2,10,30); %107-01561590
|
|
DEFINE LF = LIBRARYFIL#; %107-01561600
|
|
SAVE ARRAY LBUFF[0:9]; % INPUT BUFFER %107-01561610
|
|
REAL STREAM PROCEDURE CMPD(A,B); %107-01561620
|
|
BEGIN %107-01561630
|
|
SI:=A; DI:=B; %107-01561640
|
|
IF 8 SC } DC THEN %107-01561650
|
|
BEGIN %107-01561660
|
|
SI:=SI-8; DI=DI-8; TALLY:=2; %107-01561670
|
|
IF 8 SC = DC THEN TALLY:=1; %107-01561680
|
|
END; %107-01561690
|
|
CMPD:=TALLY; %107-01561700
|
|
END CMPD; %107-01561710
|
|
REAL C; 01562000
|
|
COMMENT C CONTAINS ACTUAL VALUE OF LAST CONSTANT SCANNED; 01563000
|
|
REAL T; 01564000
|
|
COMMENT T IS A TEMPORARY CELL; 01565000
|
|
INTEGER TCOUNT; 01566000
|
|
COMMENT TCOUNT IS A VARIABLE WHICH HOLDS A PREVIOUS VALUE OF COUNT 01567000
|
|
FOR THE USE OF CONVERT; 01568000
|
|
REAL STACKCT; %A01568500
|
|
DEFINE LOGI =443#, 01569000
|
|
EXPI =440#, 01570000
|
|
XTOTHEI =480#, 01571000
|
|
GOTOSOLVER =484#, 01572000
|
|
PRINTI =477#, 01573000
|
|
MERGEI =500#, 01573100
|
|
POWERSOFTEN =670#, 01574000
|
|
LASTSEQUENCE =166#, %117-01575000
|
|
LASTSEQROW = 2#, 01576000
|
|
INTERPTO =461#, 01577000
|
|
SUPERMOVER =555#, 01577500
|
|
CHARI =465#, 01578000
|
|
INTERPTI =469#, 01579000
|
|
SORTI =473#, 01579100
|
|
DIALER =559#, 01579200
|
|
FILATTINT =563#, 01579300
|
|
POWERALL =567#, 01579350
|
|
SPECIALMATH =570#, 01579355
|
|
SORTA =673#; %117-01580000
|
|
COMMENT THESE DEFINES ARE USED TO TALK TO GNAT. THEY GIVE THE INDEX01581000
|
|
IN INFO OF THE CORRESPONDING ROUTINE; 01582000
|
|
INTEGER KOUNT,BUFFACCUM; 01583000
|
|
INTEGER FILENO; 01584000
|
|
BOOLEAN 01585000
|
|
FUNCTOG, COMMENT TELLS WHETHER PROCEDURE BEING DECLARED IS A 01586000
|
|
FUNCTION; 01587000
|
|
P2, COMMENT GENERALY TELLS WHETHER OWN WAS SEEN; 01588000
|
|
P3, COMMENT TELLS WHETHER SAVE WAS SEEN; 01589000
|
|
P4, COMMENT TELLS WHETHER AUXMEM WAS SEEN; 01589500
|
|
VONF, COMMENT VALUE OR OWN FIELD OF ELBAT WORD; 01590000
|
|
FORMALF, COMMENT FORMAL FIELD OF ELBAT WORD; 01591000
|
|
PTOG, COMMENT TELLS THAT FORMAL PARAPART IS BEING PROCESSD;01592000
|
|
SPECTOG, 01593000
|
|
STOPENTRY, COMMENT THIS MAKES THE ENTRY PROCEDURE ENTER ONLY 01594000
|
|
ONE ID AND THEN EIXT; 01595000
|
|
AJUMP; COMMENT TELLS WHETHER A JUMP IS HANGING; 01596000
|
|
BOOLEAN STOPDEFINE; 01597000
|
|
REAL CORESZ; % CORE ESTIMATE NEEDED FOR SORT. 01597100
|
|
INTEGER MAXSAVE; 01598000
|
|
COMMENT THIS CONTAINS THE SIZE OF THE MAXIMUM SAVE ARRAY 01599000
|
|
DECLARED. IT IS USED TO HELP DETERMINE STORAGE REQUIREMENTS 01600000
|
|
FOR THE PROGRAM PARAMETER BLOCK FOR THE OBJECT PROGRAM; 01601000
|
|
REAL 01602000
|
|
KLASSF, COMMENT CLASS IN LOW ORDER 7 BITS; 01603000
|
|
ADDRSF, COMMENT ADDRESS IN LOW ORDER 11 BITS; 01604000
|
|
LEVELF, COMMENT LVL IN LOW ORDER 5 BITS; 01605000
|
|
LINKF, COMMENT LINK IN LOW ORDER 13 BITS; 01606000
|
|
INCRF, COMMENT INCR CN LOW ORDER 8 BITS; 01607000
|
|
PROINFO, COMMENT CONTAINS ELBAT WORD FOR PROCEDURE BEING 01608000
|
|
DECLARED; 01609000
|
|
G, COMMENT GLOBAL TEMPORARY FOR BLOCK; 01610000
|
|
TYPEV, COMMENT USED TO CARRY CLASS OF IDENTIFIER 01611000
|
|
BEING DECLARED; 01612000
|
|
PROADO, COMMENT CONTAINS ADDRESS OF PROCEDURE BEING 01613000
|
|
DECLARED; 01614000
|
|
MARK , COMMENT CONTAINS INDEX INTO INFO WHERE FIRST WORD 01615000
|
|
OF ADDITIONAL INFO FOR A PROCEDURE ENTRY; 01616000
|
|
PJ, COMMENT FORMAL PARAMETER COUNTER; 01617000
|
|
J, COMMENT ARRAY COUNTER; 01618000
|
|
LASTINFO, COMMENT INDEX TO LAST ENTRY IN INFO; 01619000
|
|
NEXTINFO, COMMENT INDEX FOR NEXT ENTRYIN INFO; 01620000
|
|
GLOBALNINFOO,COMMENT MAINTAINS VALUE OF NINFOO FROM BLOCK ON A 01620100
|
|
GLOBAL LEVEL SO TAHT THE PROCEDURE "ENTRY" 01620200
|
|
CAN CHECK FOR DUPLICATE DECLARATIONS; %118-01620300
|
|
OLDNINFOO, COMMENT REMEMBERS OLD VALUE OF GLOBALNINFOO; %118-01620400
|
|
FIRSTX, COMMENT RELATIVE ADD OF FIRST EXECUTABLE CODE 01621000
|
|
IN BLOCK,INITIALIZED TO 4095 EACH TIME; 01622000
|
|
SAVEL; COMMENT SAVE LOCATION FOR FIXUPS IN BLOCK; 01623000
|
|
INTEGER NCII; COMMENT THIS CONTAINS THE COUNT OF CONSTANTS 01624000
|
|
ENTERED IN INFO AT ANY GIVEN TIME; 01625000
|
|
REAL FILETHING; COMMENT HOLDS LINKS FOR STREAM RELEASES ; 01625100
|
|
PROCEDURE UNHOOK;FORWARD; 01626000
|
|
PROCEDURE MAKEUPACCUM;FORWARD; 01627000
|
|
DEFINE PURPT=[4:8]#,SECRET=2#; 01628000
|
|
COMMENT THESE DEFINES GIVE THE NAMES OF THE WORD MODE OPERATORS. THE 01629000
|
|
NUMBERS REFER TO THE APPROPRIATE SECTION OF THE PRODUCT SPECS. THE 01630000
|
|
FULL NAME IS ALSO GIVEN; 01631000
|
|
DEFINE 01632000
|
|
ADD = 16#, COMMENT (0101) 7.4.2.1 ADD; 01633000
|
|
BBC = 22#, COMMENT (0131) 7.4.5.4 BRANCH BACKWARD CONDITIONAL;01634000
|
|
BBW = 534#, COMMENT (4131) 7.4.5.2 BRANCH BACKWARD; 01635000
|
|
BFC = 38#, COMMENT (0231) 7.4.5.3 BRANCH FORWARD CONDITIONAL; 01636000
|
|
BFW = 550#, COMMENT (4231) 7.4.5.1 BRANCH FORWARD; 01637000
|
|
CDC = 168#, COMMENT (1241) 7.4.10.4 CONSTRUCT DESCRIPTOR CALL; 01638000
|
|
CHS = 134#, COMMENT (1031) 7.4.7.11 CHANGE SIGN; 01639000
|
|
COC = 40#, COMMENT (0241) 7.4.10.3 CONSTRUCT OPERAND CALL; 01640000
|
|
COM = 130#, COMMENT (1011) 7.4.10.5 COMMUNICATION OPERATOR; 01641000
|
|
DEL = 10#, COMMENT (0051) 7.4.9.3 DELETE; %A 01642000
|
|
DUP = 261#, COMMENT (2025) 7.4.9.2 DUPLICATE; 01643000
|
|
EQL = 581#, COMMENT (4425) 7.4.4.3 EQUAL; 01644000
|
|
LBC = 278#, COMMENT(2131) 7.4.5.9 GO BACKWARD CONDITIONAL; 01645000
|
|
LBU = 790#, COMMENT(6131) 7.4.5.7 GO BACKWARD (WORD); 01646000
|
|
GEQ = 21#, COMMENT (0125) 7.4.4.2 GREATER THAN OR EQUAL TO; 01647000
|
|
LFC = 294#, COMMENT(2231) 7.4.5.8 GO FORWARD CONDITIONAL; 01648000
|
|
LFU = 806#, COMMENT(6231) 7.4.5.6 GO FORWARD (WORD); 01649000
|
|
GTR = 37#, COMMENT (0225) 7.4.4.1 GREATER THAN; 01650000
|
|
IDV = 384#, COMMENT (3001) 7.4.2.5 INTEGER DIVIDE; 01651000
|
|
INX = 24#, COMMENT (0141) 7.4.10.2 INDEX; 01652000
|
|
ISD = 532#, COMMENT (4121) 7.4.6.3 INTEGER STORE DESTRUCTIVE; 01653000
|
|
ISN = 548#, COMMENT (4221) 7.4.6.4 INTEGER STORE NON-DESTRUCT; 01654000
|
|
LEQ = 533#, COMMENT (4125) 7.4.4.4 LESS THAN OR EQUAL TO; 01655000
|
|
LND = 67#, COMMENT (0415) 7.4.3.1 LOGICAL AND; 01656000
|
|
LNG = 19#, COMMENT (0115) 7.4.3.4 LOGICAL NEGATE; 01657000
|
|
LOD = 260#, COMMENT (2021) 7.4.10.1 LOAD OPERATOR; 01658000
|
|
LOR = 35#, COMMENT (0215) 7.4.3.2 LOGICAL OR; 01659000
|
|
LQV = 131#, COMMENT (1015) 7.4.3.3 LOGICAL EQUIVALENCE; 01660000
|
|
LSS = 549#, COMMENT (4225) 7.4.4.5 LESS THAN; 01661000
|
|
MDS = 515#, COMMENT (4015) 7.4.7.7 SET FLAG BIT; 01661100
|
|
MKS = 72#, COMMENT (0441) 7.4.8.1 MARK STACK; 01662000
|
|
MUL = 64#, COMMENT (0401) 7.4.2.3 MULTIPLY; 01663000
|
|
NEQ = 69#, COMMENT (0425) 7.4.4.6 NOT EQUAL TO; 01664000
|
|
NOP = 11#, COMMENT (0055) 7.4.7.1 NO OPERATION; 01665000
|
|
PRL = 18#, COMMENT (0111) 7.4.10.6 PROGRAM RELEASE; 01666000
|
|
PRTE= 12#, COMMENT (0061) 7.4.10.9 EXTEND PRT; 01667000
|
|
RDV = 896#, COMMENT (7001) 7.4.2.6 REMAINDER DIVIDE; 01668000
|
|
RTN = 39#, COMMENT (0235) 7.4.8.3 RETURN NORMAL; 01669000
|
|
RTS = 167#, COMMENT (1235) 7.4.8.4 RETURN SPECIAL; 01670000
|
|
SND = 132#, COMMENT (1021) 7.4.6.2 STORE NON-DESTRUCTIVE; 01671000
|
|
SSN = 70#, COMMENT (0431) 7.4.7.10 SET SIGN NEGATIVE; 01671100
|
|
SSP = 582#, COMMENT (4431) 7.4.7.10 SET SIGN PLUS; 01672000
|
|
STD = 68#, COMMENT (0421) 7.4.6.1 STORE DESTRUCTIVE; 01673000
|
|
SUB = 48#, COMMENT (0301) 7.4.2.2 SUBTRACT; 01674000
|
|
XCH = 133#, COMMENT (1025) 7.4.9.1 EXCHANGE; 01675000
|
|
XIT = 71#, COMMENT (0435) 7.4.8.2 EXIT; 01676000
|
|
ZP1 = 322#; COMMENT (2411) 7.4.10.8 CONDITIONAL HALT; 01677000
|
|
COMMENT THESE DEFINES ARE USED BY EMITD; 01678000
|
|
DEFINE 01679000
|
|
DIA = 45#, COMMENT (XX55) 7.4.7.1 DIAL A; 01680000
|
|
DIB = 49#, COMMENT (XX61) 7.4.7.2 DIAL B; 01681000
|
|
TRB = 53#; COMMENT (XX65) 7.4.7.3 TRANSFER BITS; 01682000
|
|
REAL MAXSTACK,STACKCTR; 01683000
|
|
INTEGER MAXROW; 01684000
|
|
COMMENT THIS CONTAINS THE MAXIMUM ROW SIZE OF ALL NON-SAVE 01685000
|
|
ARRAYS DECLARED. ITS USE IS LIKE THAT OF MAXSAVE; 01686000
|
|
INTEGER SEGSIZEMAX; COMMENT CONTAINS MAX SEGMENT SIZE; 01687000
|
|
INTEGER F; 01688000
|
|
STREAM PROCEDURE MOVECODE(EDOC,TEDOC); 01688010
|
|
BEGIN LOCAL T1,T2,T3; 01688020
|
|
SI~EDOC;T1~SI;SI~TEDOC;T2~SI;SI~LOC EDOC;SI~SI+3;DI~LOC T3; 01688030
|
|
DI~DI+5;SKIP 3 DB;15(IF SB THEN DS~1 SET ELSE DS~1 RESET; 01688040
|
|
SKIP 1 SB);SI~LOC EDOC;DI~LOC T2; DS~5 CHR;3(IF SB THEN DS~ 01688050
|
|
1 SET ELSE DS ~ 1 RESET; SKIP 1 SB);DI~T3;SI~LOC T2;DS~WDS; 01688060
|
|
DI~LOC T3;DI~DI+5;SKIP 3 DB;SI~LOC TEDOC;SI~SI+3;15(IF SB 01688070
|
|
THEN DS~1 SET ELSE DS~1 RESET;SKIP 1 SB);SI~ LOC TEDOC;DI~LOC 01688080
|
|
T1; DS~5 CHR;3(IF SB THEN DS~1 SET ELSE DS~1 RESET;SKIP 1 SB); 01688090
|
|
DI~T3;SI~LOC T1;DS~WDS 01688100
|
|
END; 01688110
|
|
REAL NLO,NHI,TLO,THI; 01689000
|
|
BOOLEAN DPTOG; 01690000
|
|
COMMENT THE ABOVE THINGS ARE TEMP STORAGE FOR DOUBLE NOS;01691000
|
|
DEFINE FZERO=896#; 01692000
|
|
REAL T1,T2,N,K,AKKUM; 01693000
|
|
BOOLEAN STOPGSP; 01694000
|
|
INTEGER BUP; 01695000
|
|
COMMENT UNIQUE GLOBAL TEMP FOR BLOCK; 01696000
|
|
ARRAY GTA1[0:10]; 01697000
|
|
BOOLEAN ARRAY SPRT[0:31]; 01698000
|
|
COMMENT SPRT IS TO BE CONSIDERED TO BE AN ARRAY OF 32 32 BIT 01699000
|
|
FIELDS. THE 32 BITS ARE IN THE LOW ORDER PART OF EACH 01700000
|
|
WORD. THE BIT IS ON IF AND ONLY IF THE CORRESPONDING 01701000
|
|
PRT CELL HAS A PERMANENT ASSIGNMENT; 01702000
|
|
INTEGER PRTI,PRTIMAX; 01703000
|
|
COMMENT PRTIMAX GIVES NEXT PRT CELL AVAILABLE FOR PERMANENT ASSIGN-01704000
|
|
MENT. PRTI GIVES NEXT PRT CELL POSSIBLY AVAILABLE FOR 01705000
|
|
TEMPORARY ASSIGNMENT; 01706000
|
|
DEFINE ALPHASIZE = [12:6]#; COMMENT ALPHASIZE IS THE DEFINE FOR THE BIT01707000
|
|
POSITION IN THE SECOND WORD OF INFO WHICH 01708000
|
|
CONTAINS THE LENGTH OF ALPHA; 01709000
|
|
DEFINE EDOCINDEX = L.[36:3],L.[39:7]#; COMMENT EDOCINDEX IS THE WORD 01710000
|
|
PORTION OF L SPLIT INTO A ROW AND01711000
|
|
COLUMN INDEX FOR EDOC; 01712000
|
|
DEFINE CPLUS1 = 769#; COMMENT SEE COMMENT AT CPLUS2 DEFINE; 01713000
|
|
DEFINE CPLUS2 = 770#; COMMENT CPLUS1 AND CPLUS2 ARE EXPLICIT CONSTANTS 01714000
|
|
USED IN THE GENERATION OF C-RELATIVE CODE; 01715000
|
|
PROCEDURE FLAG(ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; FORWARD; 01716000
|
|
ALPHA PROCEDURE B2D(B); VALUE B; REAL B; FORWARD; 01717000
|
|
BOOLEAN MACROID; 01717800
|
|
REAL PROCEDURE FIXDEFINEINFO(T); VALUE T; REAL T; FORWARD; 01717900
|
|
PROCEDURE DEFINEPARAM(D,N); VALUE D,N; INTEGER D,N; FORWARD; 01717950
|
|
PROCEDURE ERR (ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; FORWARD; 01718000
|
|
REAL PROCEDURE TAKE(X); VALUE X; INTEGER X; FORWARD; 01718100
|
|
PROCEDURE PUT(W,X); VALUE W,X; REAL W,X; FORWARD ; 01718200
|
|
INTEGER PROCEDURE GIT(L); VALUE L; REAL L; FORWARD; 01719000
|
|
BOOLEAN LISTMODE; 01720000
|
|
COMMENT LISTMODE IS A VARIABLE USED BY FORSTMT TO DECEIDE IF A LIST 01721000
|
|
IS BEING GENERATED OR A STATEMENT; 01722000
|
|
INTEGER LSTR; 01723000
|
|
COMMENT LSTR GIVES THE LOCATION OF FIRST SYLABLE OF A LIST. IT IS 01724000
|
|
USED BY LISTELEMENT TO COMPUTE VALUES TO STORE IS LSTRTN; 01725000
|
|
PROCEDURE SCANNER; FORWARD; 01730000
|
|
COMMENT MKABS CONVERTS A DESCRIPTOR TO AN ABSOLTE ADDRESS; 01732000
|
|
REAL STREAM PROCEDURE MKABS(A); 01733000
|
|
BEGIN DI ~ A; MKABS ~ DI END MKABS; 01734000
|
|
STREAM PROCEDURE MOVE(W)"WORDS FROM"(A)"TO"(B); VALUE W; 01735000
|
|
BEGIN LOCAL T; 01736000
|
|
SI~LOC W; DI~LOC T; SI~SI+6; DI~DI+7; DS~CHR; 01736100
|
|
SI~A; DI~B; T(DS~32 WDS; DS~32 WDS); DS~W WDS; 01736200
|
|
END MOVE; 01736300
|
|
STREAM PROCEDURE ZEROUT(DEST,NDIV32,NMOD32); 01737000
|
|
VALUE NDIV32,NMOD32 ; 01737050
|
|
BEGIN DI := DEST; 01737100
|
|
NDIV32(32(DS :=8 LIT"0")); 01737150
|
|
NMOD32(DS := 8 LIT"0"); 01737200
|
|
END; 01737250
|
|
COMMENT "BLANKET" BLANKS OUT N+1 WORDS IN "THERE"; 01737300
|
|
STREAM PROCEDURE BLANKET(N,THERE); VALUE N; 01737350
|
|
BEGIN 01737400
|
|
DI:=THERE; DS:=8 LIT" "; SI:=THERE; DS:=N WDS; 01737450
|
|
END BLANKET; 01737500
|
|
01738000
|
|
01739000
|
|
01740000
|
|
PROCEDURE STEPIT; FORWARD; 01741000
|
|
COMMENT SEQCHANGE WILL CONV A MACHING NO. TO PROPER OUTPUT FORM; 01741100
|
|
STREAM PROCEDURE CHANGESEQ(VAL, OLDSEQ); VALUE OLDSEQ; 01741200
|
|
BEGIN 01741300
|
|
DI ~ OLDSEQ; SI~VAL ; DS ~ 8 DEC 01741400
|
|
END; 01741500
|
|
STREAM PROCEDURE SEQUENCEWARNING(L); 01742100
|
|
BEGIN DI:=L; DI:=DI-8; DS:=24 LIT "SEQUENCE WARNING<<<<<<<<"; END; 01742110
|
|
BOOLEAN STREAM PROCEDURE NONBLANK(FCR); VALUE FCR; 01742200
|
|
COMMENT NONBLANK SCANS CARD FOR ALL BLANKS-- 01742300
|
|
TRUE IF ANY VISIBLE CHARACTER ; 01742400
|
|
BEGIN 01742500
|
|
LABEL NED; 01742600
|
|
SI~FCR; 01742700
|
|
TALLY~0; 01742800
|
|
2(36(IF SC ! " " THEN JUMP OUT 2 TO NED; SI~ SI+1)); 01742900
|
|
TALLY~63; 01743000
|
|
NED: TALLY~TALLY+1; 01743100
|
|
NONBLANK~TALLY 01743200
|
|
END NONBLANK; 01743300
|
|
INTEGER FAULTLEVEL; COMMENT THIS IS FOR THE RUN0TIME ERROR KLUDGE-- 01750000
|
|
GIVES THE LOWEST LEVEL AT WHICH THERE IS AN ACTIVE 01751000
|
|
FAULT DECL OR LABEL USED IN A FAULT STATEMENT; 01752000
|
|
BOOLEAN FAULTOG; COMMENT FAULTSTMT USES THIS TO TELL DEXP TO WORRY 01753000
|
|
ABOUT FAULTLEVEL; 01754000
|
|
INTEGER SFILENO; COMMENT FILENO OF FIRST SORT FILE; 01755000
|
|
STREAM PROCEDURE GETVOID(VP,NCR,VR,LCR,SEQ); VALUE NCR; 01756000
|
|
BEGIN 01757000
|
|
LABEL L,TRANS; 01758000
|
|
LOCAL N; 01759000
|
|
SI:=SEQ; DI:=LCR; DI:=DI-1; DS:=LIT"%"; % PUT "%" IN CC 72. 01759100
|
|
DS:=WDS; % RESTORE SEQ. NO. FOR $VOID(T) CARDS. 01759200
|
|
SI:=LCR; DI:=LOC N; DS:=CHR; % SAVE COL. 73 01760000
|
|
SI:=NCR; DI:=VP; DS:=8 LIT "0"; 01761000
|
|
2(34(IF SC=" " THEN SI:=SI+1 ELSE JUMP OUT 2 TO L)); 01762000
|
|
SI:=LCR; TALLY:=8; GO TRANS;% NO VOID RANGE FOUND, USE 73-80. 01763000
|
|
L: 01764000
|
|
IF SC=""" THEN 01765000
|
|
BEGIN 01766000
|
|
SI:=SI+1; DI:=LCR; DS:=1 LIT"""; % STOPPER FOR SCAN 01767000
|
|
NCR:=SI; % TEMP. STORAGE, SINCE NCR IS "LOCAL" TO GETVOID. 01768000
|
|
8(IF SC=""" THEN JUMP OUT ELSE 01769000
|
|
BEGIN TALLY:=TALLY+1; SI:=SI+1 END); 01770000
|
|
END 01771000
|
|
ELSE BEGIN 01772000
|
|
NCR:=SI; % TEMP. STORAGE, SINCE NCR IS "LOCAL" TO GETVOID. 01773000
|
|
DI:=LCR; DS:=1 LIT" "; % STOPPER FOR SCAN 01774000
|
|
8(IF SC=" " THEN JUMP OUT ELSE 01775000
|
|
BEGIN TALLY:=TALLY+1; SI:=SI+1 END); 01776000
|
|
END; 01777000
|
|
TRANS: 01778000
|
|
SI:=LOC N; DI:=LCR; DS:=CHR; % RESTORE COLUMN 73 01779000
|
|
SI:=NCR; DI:=VP; DI:=DI+8; % RESTORE POINTERS. 01780000
|
|
N:=TALLY; DI:=DI-N; DS:=N CHR; 01781000
|
|
DI:=DI-8; VP:=DI; % I.E., "LOC VP":=DI. 01782000
|
|
DI:=VR; SI:=LOC VP; DS:=WDS; % ADDRESS OF VOID RANGE. 01783000
|
|
END OF GETVOID; 01784000
|
|
REAL VOIDCR,VOIDPLACE; 01785000
|
|
BOOLEAN SORTMERGETOG; 01786000
|
|
FORMAT PRINTSEGNO(X88,"START OF SEGMENT ********** ",I4), 01800000
|
|
PRINTSIZE(X88,I4," IS ",I4," LONG, NEXT SEG ",I4), 01801000
|
|
BUG(X24,4(A4,X2)); 01802000
|
|
PROCEDURE DATIME; 01820000
|
|
BEGIN 01821000
|
|
INTEGER H,MIN,Q; ALPHA N1,N2; 01822000
|
|
ALPHA STREAM PROCEDURE DATER(DATE); VALUE DATE; 01823000
|
|
BEGIN 01824000
|
|
DI:=LOC DATER; SI:=LOC DATE; SI:=SI+2; 01825000
|
|
2(DS:=2 CHR; DS:=LIT"/"); DS:=2 CHR; 01826000
|
|
END OF DATER; 01827000
|
|
H:=TIME1 DIV 216000; MIN:=(TIME1 DIV 3600) MOD 60; 01828000
|
|
N1:=CODE.MFID; N2:=CODE.FID; 01828500
|
|
WRITE(LINE, 01829000
|
|
$ SET OMIT = NOT ALGOL 01829900
|
|
<X22,"BURROUGHS B-5700 ALGOL COMPILER MARK ", 01830000
|
|
$ POP OMIT 01830010
|
|
$ SET OMIT = ALGOL 01830020
|
|
<X22,"BURROUGHS B-5700 TSPOL COMPILER MARK ", 01830030
|
|
$ POP OMIT 01830040
|
|
"XVI.0.122" %123-01831000
|
|
," ",A6,"DAY, ",O,", ",I2,":",A2,X1,A3, 01832000
|
|
////X45,A1,A6,"/",A1,A6,/X45,15("=")//>, 01832500
|
|
TIME(6),DATER(TIME(5)),12|REAL(Q:=H MOD 12=0)+Q, 01833000
|
|
Q:=MIN MOD 10+(MIN DIV 10)|64, 01834000
|
|
IF H}12 THEN "PM." ELSE "AM.", 01835000
|
|
N1.[6:6],N1,N2.[6:6],N2); 01835500
|
|
IF MERGETOG THEN % INDICATE NAME OF SOURCE FILE. %120-01835600
|
|
WRITE(LINE,<X40,"SOURCE FILE: ",A1,A6,"/",A1,A6,//>, %120-01835700
|
|
(N1:=TAPE.MFID).[6:6],N1,(N2:=TAPE.FID).[6:6],N2); %120-01835800
|
|
NOHEADING:=FALSE; 01836000
|
|
END OF DATIME; 01837000
|
|
DEFINE DOT= BEGIN IF ELCLASS = PERIOD THEN DOTIT END#; 01841000
|
|
COMMENT THIS SECTION CONTAINS ALL CODE PERTAINENT TO READING CARDS 02000000
|
|
AND SCANNING THEM; 02001000
|
|
BOOLEAN STREAM PROCEDURE LOOK(ACC1,DIR,ROW,STRTPOS,STOPOS); 02001020
|
|
VALUE ROW ; 02001030
|
|
BEGIN COMMENT LOOK DOES THE ACTUAL DIRECTORY SEARCH. IT 02001040
|
|
REPORTS TRUE IF THE ITEM WAS NOT FOUND IN THE DIRECTORY02001050
|
|
; 02001060
|
|
LOCAL DPPOS,TEMP,LGTH; 02001070
|
|
LABEL LOOP,EXIT; 02001080
|
|
SI~DIR; ROW(SI~SI+8); DPPOS~SI; 02001090
|
|
DI~LOC TEMP; DS~WDS; SI~TEMP; 02001100
|
|
SI~SI+8; 02001110
|
|
LOOP:DI ~ LOC LGTH; DI~DI+7; DS~CHR; 02001120
|
|
DI~ACC1; DI~DI+2; SI~SI-1; 02001130
|
|
IF SC = DC 02001140
|
|
THEN BEGIN COMMENT THE LENGTHS ARE EQUAL; 02001150
|
|
IF LGTH SC = DC 02001160
|
|
THEN BEGIN COMMENT FOUND IT; 02001170
|
|
DI~STRTPOS;DS~5 LIT "0"; DS~3 CHR; 02001180
|
|
IF SC = "0" 02001190
|
|
THEN BEGIN COMMENT WE MAY BE IN THE02001200
|
|
WRONG ROW; 02001210
|
|
SI~SI+1;DI~LOC LOOK; 02001220
|
|
IF 3 SC = DC 02001230
|
|
THEN BEGIN COMMENT WE ARE02001240
|
|
IN THE WRONG 02001250
|
|
ROW; 02001260
|
|
SI~DPPOS; 02001270
|
|
SI~SI+8; 02001280
|
|
DPPOS~SI; 02001290
|
|
DI~LOC TEMP; 02001300
|
|
DS~WDS; 02001310
|
|
SI~TEMP; 02001320
|
|
END 02001330
|
|
ELSE SI~SI-4; 02001340
|
|
END; 02001350
|
|
DI~LOC LGTH; DI~DI+7; DS~CHR; 02001360
|
|
SI~SI+ LGTH; 02001370
|
|
DI~STOPOS; DS~5 LIT"0"; 02001375
|
|
DS~3 CHR; GO TO EXIT; 02001380
|
|
END; 02001390
|
|
SI~SI+3; 02001400
|
|
END 02001410
|
|
ELSE BEGIN COMMENT THE LENGTHS ARE NOT EQUAL; 02001420
|
|
SI~SI-1; 02001430
|
|
IF SC = "0" 02001440
|
|
THEN BEGIN COMMENT MAY BE A NEW ROW; 02001450
|
|
SI~SI+1; DI~LOC LOOK; 02001460
|
|
IF 3 SC = DC 02001470
|
|
THEN BEGIN COMMENT CHANGE ROWS; 02001480
|
|
SI~DPPOS;SI~SI+8;DPPOS~SI;02001490
|
|
DI~LOC TEMP; DS~WDS; 02001500
|
|
SI~TEMP; 02001510
|
|
END 02001520
|
|
ELSE BEGIN COMMENT IT IS NOT HERE; 02001530
|
|
TALLY~1; LOOK~TALLY; 02001540
|
|
GO TO EXIT; 02001550
|
|
END; 02001560
|
|
GO TO LOOP; 02001563
|
|
END; 02001565
|
|
SI~SI~LGTH; SI~SI+4; COMMENT POSITION TO NEXT ID.; 02001568
|
|
END; 02001570
|
|
GO TO LOOP; 02001580
|
|
EXIT:; 02001590
|
|
END LOOK; 02001600
|
|
%***********************************************************************02001605
|
|
% %116-02001610
|
|
% MISCELLANEOUS CROSS REFERENCE PROCEDURES %116-02001615
|
|
% %116-02001620
|
|
%***********************************************************************02001630
|
|
% %116-02001635
|
|
PROCEDURE CROSSREFIT(INDEX,SEQNO,REFTYPE); %116-02001640
|
|
VALUE INDEX,SEQNO,REFTYPE; %116-02001645
|
|
REAL INDEX,SEQNO,REFTYPE; %116-02001650
|
|
BEGIN %116-02001655
|
|
IF XREFINFO[INDEX].IDNOF ! 0 THEN % SAVE %116-02001660
|
|
BEGIN %116-02001665
|
|
IF XREFPT > 29 THEN % NO SLOTS LEFT IN ARRAY, WRITE IT OUT. %116-02001670
|
|
BEGIN %116-02001675
|
|
WRITE(DSK2,30,XREFAY2[*]); %116-02001680
|
|
XREFPT := 0; %116-02001685
|
|
END; %116-02001690
|
|
XREFAY2[XREFPT] := SEQNO & REFTYPE TYPEREF & XREFINFO[INDEX] %116-02001695
|
|
REFIDNOF; %116-02001700
|
|
XREFPT := XREFPT + 1; % EVEN THOUGH THE ARRAY MAY BE FULL NOW WE %116-02001705
|
|
% CANT WRITE IT OUT BECAUSE SOME ROUTINES %116-02001710
|
|
% WILL LOOK BACK AT THE ENTRY WE JUST PUT %116-02001715
|
|
% IN AND FIX IT UP. %116-02001720
|
|
END; %116-02001725
|
|
END OF CROSSREFIT; %116-02001730
|
|
% %116-02001735
|
|
PROCEDURE CROSSREFDUMP(INDEX); %116-02001740
|
|
VALUE INDEX; %116-02001745
|
|
REAL INDEX; %116-02001750
|
|
BEGIN %116-02001755
|
|
STREAM PROCEDURE MOVEXREFINFO(S,D,N); %116-02001760
|
|
VALUE N; %116-02001765
|
|
BEGIN %116-02001770
|
|
SI := D; DI := D; DS := 8 LIT " "; DS := 7 WDS; % BLANK RECORD %116-02001775
|
|
SI := S; SI := SI + 3; DI := D; DS := N CHR; % MOVE IDENTIFIER %116-02001780
|
|
END OF MOVEXREFINFO; %116-02001785
|
|
% %116-02001790
|
|
IF XREFINFO[INDEX].IDNOF ! 0 THEN % DUMP IT %116-02001795
|
|
BEGIN %116-02001800
|
|
MOVEXREFINFO(INFO[INDEX.LINKR,INDEX.LINKC+1],XREFAY1[*], %116-02001805
|
|
TAKE(INDEX+1).[12:6]); %116-02001810
|
|
XREFAY1[8] := XREFINFO[INDEX]; %116-02001815
|
|
XREFAY1[9] := TAKE(INDEX); % ELBAT WORD %116-02001820
|
|
WRITE(DSK1,10,XREFAY1[*]); %116-02001821
|
|
XREFINFO[INDEX] := 0; %116-02001822
|
|
END; %116-02001825
|
|
END OF CROSSREFDUMP; %116-02001830
|
|
REAL STREAM PROCEDURE CONV(ACCUM,SKP,N); VALUE SKP,N; 02001831
|
|
BEGIN 02001832
|
|
SI~ ACCUM; SI~SI+SKP;SI~SI+3;DI~LOC CONV; DS ~ N OCT 02001833
|
|
END CONV; 02001834
|
|
COMMENT OCTIZE REFORMATS ACCUM FOR OCTAL CONSTANTS; 02001836
|
|
BOOLEAN STREAM PROCEDURE OCTIZE(S,D,SKP,CNT); VALUE SKP,CNT; 02001838
|
|
BEGIN 02001840
|
|
SI:=S; SI:=SI+3; DI:=D; SKP(DS:=3 RESET); % RIGHT JUSTIFY. 02001842
|
|
CNT(IF SC}"8" THEN TALLY:=1 ELSE IF SC<"0" THEN TALLY:=1; SKIP 3 SB;02001844
|
|
3(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB)); 02001846
|
|
% 02001848
|
|
% 02001850
|
|
OCTIZE:=TALLY; % "1" = NON OCTAL CHARACTER. 02001852
|
|
END OCTIZE; 02001854
|
|
COMMENT HEXIZE REFORMATS ACCUM FOR HEXADECIMAL CONSTANTS; 02001856
|
|
BOOLEAN STREAM PROCEDURE HEXIZE(S,D,SKP,CNT); VALUE SKP,CNT; 02001858
|
|
BEGIN LOCAL T1,T2,TEMP2,TEMP1; LABEL AGIN; 02001860
|
|
COMMENT LOCAL VARIABLES ARE LOCATED IN REVERSE ORDER FROM THE 02001862
|
|
WAY THEY ARE DECLARED IN STREAM PROCEDURES; 02001864
|
|
DI:=LOC TEMP1; CNT(DS:=LIT"1"); % IN CASE A CHAR=A,B,C,D,OR F. 02001866
|
|
SI:=S; SI:=SI+3; DI:=LOC TEMP1; % WE MAY OVERFLOW INTO TEMP2. 02001868
|
|
CNT(IF SC<"0" THEN IF SC}"A" THEN IF SC{"F" THEN % WORK HARD. 02001870
|
|
BEGIN 02001872
|
|
T1:=SI; T2:=DI; DI:=T1; SI:=T2; % FLIP, MAN. 02001874
|
|
DS:=3 RESET; SI:=T1; DI:=T2; % FLIP BACK. 02001876
|
|
DS:=1 ADD; DI:=DI-1; SKIP 2 DB; DS:=1 SET; SKIP 3 DB; 02001878
|
|
GO AGIN; 02001880
|
|
END; 02001882
|
|
IF SC<"0" THEN TALLY:=1; DS:=CHR; % < 0 = NON-HEX CHARACTER. 02001884
|
|
AGIN: 02001886
|
|
); 02001888
|
|
SI:=LOC TEMP1; DI:=D; SKP(DS:=4 RESET); % RIGHT ADJUST CONSTANT. 02001890
|
|
CNT(SKIP 2 SB; 02001892
|
|
4(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB));% FINAL CONVERT. 02001894
|
|
HEXIZE:=TALLY; % "1" IF PROGRAMMER GOOFED. 02001896
|
|
END HEXIZE; 02001898
|
|
COMMENT PUTSEQNO PUTS THE SEQUENCE NUMBER OF THE CARD-IMAGE 02002000
|
|
CURRENTLY BEING SCANNED INTO THE INFO TABLE IN CASE 02003000
|
|
IT IS NEEDED FOR FUTURE REFERENCE; 02004000
|
|
STREAM PROCEDURE PUTSEQNO(INFO,LCR); VALUE LCR; 02005000
|
|
BEGIN DI:=INFO; SI:=LCR; DS:=WDS; END PUTSEQNO; 02006000
|
|
COMMENT TURNONSTOPLIGHT TURNS THE LIGHT "RED" ON THE "CORNER". 02007000
|
|
I.E., THE PURPOSE OF THIS ROUTINE IS TO INSERT A PER- 02008000
|
|
CENT SIGN IN COLUMN 73 AS AN END OF CARD SENTINEL FOR 02009000
|
|
THE SCANNER; 02010000
|
|
STREAM PROCEDURE TURNONSTOPLIGHT(RED,CORNER); VALUE RED,CORNER; 02011000
|
|
BEGIN DI:=CORNER; SI:=LOC CORNER; SI:=SI-1; DS:=CHR END; 02012000
|
|
COMMENT ADDER COMPUTES SEQUENCE NUMBERS FOR LIBRARY FUNCTIONS. 02013010
|
|
IT WILL EITHER ADD THE NUMBER IN SUM TO THE NUMBER IS SEQLOC STORING 02013020
|
|
THE RESULT IN SEQLOC OR SUBTRACT THE NUMBER IN SUM FROM THE 02013030
|
|
NUMBER IN SEQLOC AND STORE THE RESULT IN SEQLOC,DEPENDING ON THE 02013040
|
|
VARIABLE AD; 02013050
|
|
STREAM PROCEDURE ADDER(SUM,SEQLOC,AD,DESCRP); 02013060
|
|
VALUE AD,DESCRP; 02013065
|
|
BEGIN 02013070
|
|
LOCAL HOLD,ZONEP; 02013073
|
|
DI~LOC ZONEP; SI~SUM; DS~8 ZON; 02013074
|
|
COMMENT SAVED ZONE PART OF THE SEQ.NO.; 02013075
|
|
DI~SUM; DI~DI+7; DS~2 RESET; 02013076
|
|
COMMENT HAVE ZEROED OUT SIGN VALUE OF SEQ.NO.; 02013077
|
|
SI~LOC DESCRP; SI~SI+7; 02013078
|
|
IF SC="1" THEN BEGIN DI~LOC HOLD; SI~SEQLOC; 02013080
|
|
DS~WDS; DI~HOLD; END 02013085
|
|
ELSE DI~SEQLOC; 02013090
|
|
COMMENT DI IS NOW POINTING TO THE SEQNUMBER; 02013091
|
|
HOLD~DI; DI~DI+7; DS~2 RESET; DI~HOLD; 02013095
|
|
SI ~ LOC AD; 02013100
|
|
SI ~ SI + 7; 02013110
|
|
IF SC = "1" THEN BEGIN SI~ SUM; DS~8 ADD; END 02013120
|
|
ELSE BEGIN SI~ SUM; DS~8 SUB; END; 02013130
|
|
SI~LOC ZONEP; DI~HOLD; DS~8 ZON; 02013135
|
|
SI~LOC ZONEP; DI~SUM; DS~8 ZON; 02013136
|
|
COMMENT MOVE IN ZONE PORTION TO RESULT SEQ.NO.; 02013137
|
|
END ADDER; 02013140
|
|
COMMENT SEARCHLIB IS RESPONSIBLE FOR SEARCHING THE LIBRARY TAPES FOR 02013150
|
|
COMPILABLE QUANTITIES. THE PARAMETER INDICATES THAT WE ARE ENTERING 02013155
|
|
A LIBRARY CALL IF TRUE, ELSE WE ARE EXITING.; 02013160
|
|
PROCEDURE SEARCHLIB(DOLLAR); VALUE DOLLAR; BOOLEAN DOLLAR; 02013165
|
|
BEGIN 02013170
|
|
LABEL EXIT,EXITOUT, NOPARTIAL; 02013175
|
|
PROCEDURE FLAGIT(N); VALUE N; INTEGER N; 02013176
|
|
BEGIN 02013177
|
|
BOOLEAN TL,TS; 02013178
|
|
TL:=LISTOG; TS:=SINGLTOG; LISTOG:=FALSE; SINGLTOG:=FALSE; 02013179
|
|
Q:=ACCUM[1]; FLAG(N); 02013180
|
|
LISTOG:=TL; SINGLTOG:=TS; 02013181
|
|
END FLAGIT; 02013183
|
|
IF DOLLAR THEN 02013184
|
|
BEGIN COMMENT WE ARE ON A DOUBLE DOLLAR CARD; 02013190
|
|
RESULT~COUNT~ACCUM[1] ~0; SCANNER; 02013195
|
|
RESULT~COUNT~ACCUM[1] ~0; SCANNER; 02013200
|
|
IF ACCUM[1] > "1+0000" AND ACCUM[1] < "1D0000" THEN 02013205
|
|
FILEINX:=ACCUM[1].[21:3] ELSE BEGIN 02013210
|
|
COMMENT ERROR 500 - ILLEGAL LIBRARY NAME; 02013219
|
|
FLAGIT(500); GO EXIT; 02013222
|
|
END; 02013225
|
|
FILEINX ~ FILEINX -1; 02013230
|
|
IF DIRECTORY[GT1~3|FILEINX,0]=0 THEN 02013235
|
|
BEGIN COMMENT MUST READ DIRECTORY; 02013240
|
|
GT3~MKABS(LIBRARY[FILEINX](0)); 02013245
|
|
MOVE(56,LIBRARY[FILEINX](0),DIRECTORY[GT1,0]); 02013250
|
|
GT2~DIRECTORY[GT1,0]; DIRECTORY[FILEINX|3,0] ~ -2; 02013255
|
|
WHILE GT2 ~ GT2-1 > 0 DO 02013260
|
|
BEGIN 02013265
|
|
READ(LIBRARY[FILEINX]); 02013270
|
|
MOVE(56,LIBRARY[FILEINX](0),DIRECTORY[GT1~GT1+1,0]); 02013275
|
|
END; 02013280
|
|
END; 02013285
|
|
RESULT~ACCUM[1]~ COUNT~0; SCANNER; COMMENT GET THE PROD.ID.; 02013290
|
|
IF LOOK(ACCUM[1],DIRECTORY,3|FILEINX, GT1,GT2) THEN 02013295
|
|
BEGIN COMMENT ERROR 501 - ITEM NOT IN DIRECTORY; 02013300
|
|
FLAGIT(501); GO EXIT; 02013305
|
|
END; 02013310
|
|
WHILE LCR.[33:15] - NCR.[33:15] ! 1 OR NCR.[30:3] ! 7 02013313
|
|
DO BEGIN 02013315
|
|
IF EXAMIN(NCR) = "[" THEN GO TO EXITOUT ; 02013317
|
|
RESULT~5; SCANNER; 02013318
|
|
END; 02013319
|
|
GO TO NOPARTIAL; 02013320
|
|
EXITOUT: BEGIN COMMENT WE HAVE A PARTIAL LIBRARY OPERATION; 02013325
|
|
RESULT~ ACCUM[1]~ COUNT~0; SCANNER; COMMENT SPACE PAST "[" ;02013330
|
|
RESULT~ ACCUM[1]~ COUNT~0; SCANNER; COMMENT GET START POINT;02013335
|
|
IF RESULT ! 3 THEN 02013340
|
|
BEGIN COMMENT ERROR 502 - IMPROPER START POINT; 02013345
|
|
FLAGIT(502); GO EXIT; 02013350
|
|
END; 02013355
|
|
GT1 ~ GT1 + CONV(ACCUM[1],0,ACCUM[1].[12:6]) - 1; 02013360
|
|
RESULT~ ACCUM[1]~ COUNT~0; SCANNER; 02013365
|
|
IF RESULT ! 2 THEN 02013370
|
|
BEGIN COMMENT ERROR 503 - NO SEPARATOR; 02013375
|
|
FLAGIT(503); GO EXIT; 02013380
|
|
END; 02013385
|
|
RESULT~ ACCUM[1]~ COUNT~0; SCANNER; COMMENT GET LENGTH; 02013390
|
|
IF RESULT ! 3 THEN 02013395
|
|
BEGIN COMMENT ERROR 504 - IMPROPER LENGTH; 02013400
|
|
FLAGIT(504); GO EXIT; 02013405
|
|
END; 02013410
|
|
GT2 ~ GT1 + CONV(ACCUM[1],0,ACCUM[1].[12:6]); 02013415
|
|
RESULT~ ACCUM[1]~ COUNT~0; SCANNER; 02013420
|
|
IF ACCUM[1] ! "1]0000" THEN 02013425
|
|
BEGIN COMMENT ERROR 505 - NO RIGHT BRACKET; 02013430
|
|
FLAGIT(505); GO EXIT; 02013435
|
|
END; 02013440
|
|
WHILE LCR.[33:15] - NCR.[33:15] ! 1 OR NCR.[30:3] ! 7 02013445
|
|
DO BEGIN RESULT ~ 5; SCANNER END; 02013446
|
|
END; 02013450
|
|
NOPARTIAL: COMMENT NOW SET UP THE LINKS; 02013475
|
|
LIBARRAY[LIBINDEX].LSTUSD ~ LASTUSED; 02013480
|
|
LIBARRAY[LIBINDEX].FILEINDEX ~ FILEINX; 02013490
|
|
LIBARRAY[LIBINDEX].STOPPOINT ~ FINISHPT; 02013495
|
|
LIBARRAY[LIBINDEX].NEXTENTRY ~ RECOUNT-1; 02013497
|
|
FINISHPT ~ GT2; 02013500
|
|
IF LIBINDEX>0 THEN DIRECTORY[(LIBARRAY[LIBINDEX-3].FILEINDEX) 02013505
|
|
|3,0] ~ RECOUNT -1; 02013510
|
|
RECOUNT~GT1; 02013515
|
|
IF EXAMIN(LCR) ! "%" THEN 02013516
|
|
PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02013517
|
|
MOVE(1,INFO[LASTSEQROW,LASTSEQUENCE],LIBARRAY[LIBINDEX+1]); 02013520
|
|
MOVE(1,INFO[LASTSEQROW,LASTSEQUENCE],SEQSUM); 02013525
|
|
IF LASTUSED{2 OR LASTUSED=5 THEN GTI1~0 02013526
|
|
ELSE IF MAXLTLCR.[33:15]-NCR.[33:15]<11 THEN 02013527
|
|
GTI1~MKABS(LIBRARY[FILEINX](0)) ELSE GTI1~(NCR+2).[33:15]; 02013528
|
|
LIBARRAY[LIBINDEX+2].NCRLINK~GTI1.[33:15]; COMMENT GTI1=NCR; 02013530
|
|
IF LASTUSED{2 OR LASTUSED=5 THEN 02013533
|
|
LIBARRAY[LIBINDEX+2].LCRLINK~0 ELSE 02013534
|
|
LIBARRAY[LIBINDEX+2].LCRLINK~GTI1.[33:15]+10; 02013535
|
|
IF LIBINDEX> 0 THEN IF CARDCALL THEN BEGIN 02013536
|
|
LASTUSED~5; LIBARRAY[LIBINDEX].NEXTENTRY~ 02013537
|
|
LIBARRAY[LIBINDEX].NEXTENTRY -1; 02013538
|
|
END ELSE BEGIN 02013539
|
|
LASTUSED~6; FIRSTIMEX~ TRUE; END 02013540
|
|
ELSE BEGIN IF LASTUSED=3 THEN FIRSTIMEX:=TRUE; LASTUSED:=5; END; 02013541
|
|
LIBINDEX ~ LIBINDEX + 3; 02013542
|
|
END 02013545
|
|
ELSE 02013550
|
|
BEGIN COMMENT WE DID NOT COME FROM DOUBLE DOLLAR SO UNLINK; 02013555
|
|
LIBINDEX ~ LIBINDEX -3; 02013560
|
|
RECOUNT~RECOUNT-1; 02013563
|
|
LASTUSED ~ LIBARRAY[LIBINDEX].LSTUSD; 02013565
|
|
IF LASTUSED =1 THEN MEDIUM := "C "; %112-02013566
|
|
IF LIBINDEX > 0 THEN BEGIN GTI1~LIBARRAY[LIBINDEX].NEXTENTRY; 02013567
|
|
DIRECTORY[FILEINX|3,0]~RECOUNT; RECOUNT~GTI1+2; END ELSE 02013568
|
|
DIRECTORY[FILEINX|3,0] ~ RECOUNT; 02013570
|
|
IF LIBINDEX > 0 THEN 02013575
|
|
FILEINX ~ LIBARRAY[LIBINDEX -3].FILEINDEX; 02013580
|
|
FINISHPT ~ LIBARRAY[LIBINDEX].STOPPOINT; 02013600
|
|
IF LIBINDEX ! 0 THEN 02013610
|
|
MOVE(1,LIBARRAY[LIBINDEX -3 +1], SEQSUM); 02013615
|
|
IF LASTUSED{2 OR LASTUSED=5 THEN LCR:=MKABS(CBUFF[0]) ELSE 02013617
|
|
NCR ~ LIBARRAY[LIBINDEX+2].NCRLINK; 02013620
|
|
IF LASTUSED{2 OR LASTUSED=5 THEN LCR:=MKABS(CBUFF[9]) ELSE 02013621
|
|
LCR ~ LIBARRAY[LIBINDEX+2].LCRLINK; 02013625
|
|
NORELEASE~TRUE; 02013627
|
|
IF LASTUSED=6 THEN FIRSTIMEX~TRUE; 02013628
|
|
END OF UNLINK; 02013630
|
|
IF LIBINDEX = 0 THEN 02013635
|
|
BEGIN COMMENT GOING BACK TO OUTSIDE WORLD; 02013640
|
|
SEQSUM~0; 02013645
|
|
END 02013650
|
|
ELSE 02013655
|
|
BEGIN 02013660
|
|
GT1~(GTI1~(DIRECTORY[FILEINX|3,0]+3)/5)|5+1; 02013665
|
|
GT2~(GTI1~(RECOUNT-3)/5)|5+1; 02013670
|
|
GT3 ~(GT2 - GT1)DIV 5; 02013675
|
|
SPACE(LIBRARY[FILEINX],GT3); 02013680
|
|
02013681
|
|
02013682
|
|
READ(LIBRARY[FILEINX]); 02013685
|
|
02013690
|
|
02013693
|
|
02013695
|
|
MOVE(1,LIBRARY[FILEINX](0),GTI1); 02013697
|
|
IF GTI1!GT2 AND GTI1 ! 0 THEN 02013699
|
|
BEGIN COMMENT ERROR 507 MEANS TAPE POSITIONING ERROR; 02013701
|
|
FLAG(507); GO TO EXIT; 02013702
|
|
END; 02013703
|
|
LTLCR~MKABS(LIBRARY[FILEINX](10))+(GTI1~(((RECOUNT-1) MOD 5) |11)); 02013705
|
|
MAXLTLCR~MKABS(LIBRARY[FILEINX](0))+54; 02013710
|
|
ADDER(SEQSUM,LTLCR,TRUE,TRUE); 02013713
|
|
IF LASTUSED= 6 THEN BEGIN 02013714
|
|
NCR~LCR~MKABS(LIBRARY[FILEINX](0)); 02013715
|
|
PUTSEQNO(GT1,LCR); 02013716
|
|
TURNONSTOPLIGHT("%",LCR); 02013717
|
|
END; END; 02013718
|
|
EXIT: END SEARCHLIB; 02013720
|
|
COMMENT WRITNEW TRANSFERS THE CARD IMAGE TO THE NEWTAPE BUFFER 02014000
|
|
AND REPORTS IF THE CARD MIGHT BE CONTROL CARD; 02015000
|
|
BOOLEAN STREAM PROCEDURE WRITNEW(NEW,FCR); VALUE FCR; 02016000
|
|
BEGIN SI~FCR; IF SC!"$" THEN TALLY~1; 02017000
|
|
DI~NEW; DS~10 WDS; WRITNEW~TALLY 02018000
|
|
END WRITNEW; 02019000
|
|
02020000
|
|
02021000
|
|
02022000
|
|
02023000
|
|
02041000
|
|
02042000
|
|
02043000
|
|
02044000
|
|
02045000
|
|
02046000
|
|
02047000
|
|
02047050
|
|
02047055
|
|
02047060
|
|
02047065
|
|
02047070
|
|
02047075
|
|
02048000
|
|
02049000
|
|
02050000
|
|
02051000
|
|
02052000
|
|
02053000
|
|
02054000
|
|
02055000
|
|
02055100
|
|
02055200
|
|
02055300
|
|
02056000
|
|
02057000
|
|
02058000
|
|
02059000
|
|
02060000
|
|
COMMENT EQUAL COMPARES COUNT CHARACTERS LOCATED AT A AND B FOR 02061000
|
|
EQUALITY. THIS ROUTINE IS USED IN THE LOOK-UP OF ALPHA 02061500
|
|
QUANTITIES IN THE DIRECTORY; 02062000
|
|
BOOLEAN STREAM PROCEDURE EQUAL(COUNT,A,B); VALUE COUNT; 02062500
|
|
BEGIN 02063000
|
|
TALLY:=1; SI:=A; DI:=B; 02063500
|
|
IF COUNT SC=DC THEN EQUAL:=TALLY 02064000
|
|
END EQUAL; 02064500
|
|
PROCEDURE READACARD; FORWARD; 02065000
|
|
PROCEDURE DOLLARCARD; FORWARD; 02065500
|
|
BOOLEAN PROCEDURE BOOLEXP; FORWARD; 02065600
|
|
PROCEDURE SCANNER; 02066000
|
|
BEGIN 02066500
|
|
COMMENT "SCAN" IS THE STREAM PROCEDURE WHICH DOES THE ACTUAL SCANNING. 02067000
|
|
IT IS DRIVEN BY A SMALL WORD MODE PROCEDURE CALLED "SCANNER", 02067500
|
|
WHICH CHECKS FOR A QUANTITY BEING BROKEN ACROSS A CARD. "SCAN" 02068000
|
|
IS CONTROLLED BY A VARIABLE CALLED "RESULT". "SCAN" ALSO 02068500
|
|
INFORMS THE WORLD OF ITS ACTION BY MEANS OF THE SAME VARIABLE, 02069000
|
|
HENCE THE VARIABLE "RESULT" IS PASSED BY BOTH NAME AND VALUE. 02069500
|
|
THE MEANING OF "RESULT" AS INPUT IS: 02070000
|
|
VALUE MEANING 02070500
|
|
===== ======================================== 02071000
|
|
0 INITIAL CODE - DEBLANK AND START TO FETCH THE 02071500
|
|
NEXT QUANTITY. 02072000
|
|
1 CONTINUE BUILDING AN IDENTIFIER (INTERRUPTED BY 02072500
|
|
END-OF-CARD BREAK). 02073000
|
|
2 LAST QUANTITY BUILT WAS SPECIAL CHARACTER. HENCE, 02073500
|
|
EXIT (INTERRUPTION BY END-OF-CARD BREAK IS NOT 02074000
|
|
IMPORTANT). 02074500
|
|
3 CONTINUE BUILDING A NUMBER (INTERRUPTED BY END-OF- 02075000
|
|
CARD BREAK). 02075500
|
|
4 LAST THING WAS AN ERROR (COUNT EXCEEDED 63). HENCE,02076000
|
|
EXIT (INTERRUPTION BY END-OF-CARD BREAK NOT 02076500
|
|
IMPORTANT). 02077000
|
|
5 GET NEXT CHARACTER AND EXIT. 02077500
|
|
6 SCAN A COMMENT. 02078000
|
|
7 DEBLANK ONLY. 02078500
|
|
THE MEANING OF "RESULT" AS OUTPUT IS: 02079000
|
|
VALUE MEANING 02079500
|
|
===== ======================================== 02080000
|
|
1 AN IDENTIFIER WAS BUILT. 02080500
|
|
2 A SPECIAL CHARACTER WAS OBTAINED. 02081000
|
|
3 A NUMBER (INTEGER) WAS BUILT. 02081500
|
|
"SCAN" PUTS ALL STUFF SCANNED (EXCEPT FOR COMMENTS AND 02082000
|
|
DISCARDED BLANKS) INTO "ACCUM" (CALLED "ACCUMULATOR" 02082500
|
|
FOR THE REST OF THIS DISCUSSION). 02083000
|
|
"COUNT" IS THE VARIABLE THAT GIVES THE NUMBER OF CHARACTERS 02083500
|
|
"SCAN" HAS PUT INTO THE "ACCUMULATOR". SINCE "SCAN" NEEDS 02084000
|
|
THE VALUE SO THAT IT CAN PUT MORE CHARACTERS INTO THE "ACCUM- 02084500
|
|
ULATOR" AND NEEDS TO UPDATE "COUNT" FOR THE OUTSIDE WORLD. 02085000
|
|
"COUNT" IS PASSED BY BOTH NAME AND VALUE. IT IS ALSO 02085500
|
|
CONVENIENT TO HAVE (63-COUNT). THIS IS CALLED "COMCOUNT". 02086000
|
|
"NCR" (NEXT CHARACTER TO BE SCANNED) IS ALSO PASSED BY 02086500
|
|
NAME AND VALUE SO THAT IT MAY BE UPDATED. 02087000
|
|
"ST1" AND "ST2" ARE TEMPORARY STORAGES WHICH ARE EXPLICITLY 02087500
|
|
PASSED TO "SCAN" IN ORDER TO OBTAIN THE MOST USEFULL STACK 02088000
|
|
ARRANGEMENT. 02088500
|
|
; 02089000
|
|
STREAM PROCEDURE SCAN(NCR,COUNTV,ACCUM,COMCOUNT,RESULT,RESULTV, 02089500
|
|
COUNT,ST2,NCRV,ST1); 02090000
|
|
VALUE COUNTV, COMCOUNT,RESULTV,ST2,NCRV,ST1; 02090500
|
|
BEGIN 02091000
|
|
LABEL DEBLANK,NUMBERS,IDBLDR,GNC,K,EXIT,FINIS,L,ERROR, 02091500
|
|
COMMENTS,COMMANTS; 02092000
|
|
DI:=RESULT; DI:=DI+7; SI:=NCRV; 02092500
|
|
COMMENT SETUP "DI" FOR A CHANGE IN "RESULT" AND "SI" FOR A LOOK AT 02093000
|
|
THE BUFFER; 02093500
|
|
CI:=CI+RESULTV; % SWITCH ON VALUE OF RESULT; 02094000
|
|
GO DEBLANK; % 0 IS INITIAL CODE. 02094500
|
|
GO IDBLDR; % 1 IS ID CODE. 02095000
|
|
GO FINIS; % 2 IS SPECIAL CHARACTER CODE. 02095500
|
|
GO NUMBERS; % 3 IS NUMBER CODE. 02096000
|
|
GO FINIS; % 4 IS ERROR CODE. 02096500
|
|
GO GNC; % 5 IS GET NEXT CHARACTER CODE. 02097000
|
|
GO COMMANTS; % 6 IS COMMENT CODE. 02097500
|
|
% 7 IS DEBLANK ONLY CODE. 02098000
|
|
IF SC=" " THEN 02098500
|
|
K: BEGIN SI:=SI+1; IF SC=" " THEN GO K END; 02099000
|
|
GO FINIS; 02099500
|
|
DEBLANK: 02100000
|
|
IF SC=" " THEN 02100500
|
|
L: BEGIN SI:=SI+1; IF SC=" " THEN GO L END; 02101000
|
|
COMMENT IF WE ARRIVE HERE WE HAVE A NON-BLANK CHARACTER; 02101500
|
|
NCRV:=SI; 02102000
|
|
IF SC } "0" THEN GO NUMBERS; 02102500
|
|
IF SC=ALPHA THEN GO IDBLDR; 02103000
|
|
COMMENT IF WE ARRIVE HERE WE HAVE A SPECIAL CHARACTER (OR GNC); 02103500
|
|
GNC: 02104000
|
|
DS:=LIT"2"; TALLY:=1; SI:=SI+1; GO EXIT; 02104500
|
|
COMMANTS: 02105000
|
|
IF SC!";" THEN 02105500
|
|
BEGIN 02106000
|
|
COMMENTS: 02106500
|
|
SI:=SI+1; 02107000
|
|
IF SC > "%" THEN GO COMMENTS; 02107500
|
|
IF SC < ";" THEN GO COMMENTS; 02108000
|
|
COMMENT CHARACTERS BETWEEN % AND SEMICOLON ARE HANDLED BY WORD- 02108500
|
|
MODE PART OF COMMENT ROUTINE; 02109000
|
|
END; 02109500
|
|
GO FINIS; 02110000
|
|
IDBLDR: 02110500
|
|
TALLY:=63; DS:=LIT "1"; 02111000
|
|
COMCOUNT(TALLY:=TALLY+1; 02111500
|
|
IF SC=ALPHA THEN SI:=SI+1 ELSE JUMP OUT TO EXIT); 02112000
|
|
TALLY:=TALLY+1; 02112500
|
|
IF SC=ALPHA THEN 02113000
|
|
BEGIN 02113500
|
|
ERROR: 02114000
|
|
DI:=DI-1; DS:=LIT "4"; GO EXIT; 02114500
|
|
END 02115000
|
|
ELSE GO EXIT; 02115500
|
|
COMMENT IF WE ARRIVE AT ERROR WE HAVE MORE THAN 63 CHARACTERS 02116000
|
|
IN AN IDENTIFIER OR NUMBER; 02116500
|
|
NUMBERS: 02117000
|
|
TALLY:=63; DS:=LIT "3"; 02117500
|
|
COMCOUNT(TALLY:=TALLY+1; 02118000
|
|
IF SC <"0"THEN JUMP OUT TO EXIT; SI:=SI+1); 02118500
|
|
GO ERROR; 02119000
|
|
EXIT: 02119500
|
|
ST1:=TALLY; % "ST1" CONTAINS NUMBER OF CHARACTERS WE ARE 02120000
|
|
% GOING TO MOVE INTO THE "ACCUMULATOR". 02120500
|
|
TALLY:=TALLY+COUNTV; ST2:=TALLY; 02121000
|
|
DI:=COUNT; SI:=LOC ST2; DS:=WDS; 02121500
|
|
COMMENT THIS CODE UPDATED "COUNT"; 02122000
|
|
DI:=ACCUM; SI:=SI-3; DS:=3 CHR; 02122500
|
|
COMMENT THIS CODE PLACES "COUNT" IN "ACCUM" AS WELL; 02123000
|
|
DI:=DI+COUNTV; % POSITION "DI" PAST CHARACTERS ALREADY 02123500
|
|
% IN THE "ACCUMULATOR", IF ANY. 02124000
|
|
SI:=NCRV; DS:=ST1 CHR; 02124500
|
|
COMMENT MOVE CHARACTERS INTO "ACCUM"; 02125000
|
|
FINIS: 02125500
|
|
DI:=NCR; ST1:=SI; SI:=LOC ST1; DS:=WDS; 02126000
|
|
COMMENT RESET "NCR" TO LOCATION OF NEXT CHARACTER TO BE SCANNED; 02126500
|
|
END OF SCAN; 02127000
|
|
LABEL L;% 02127500
|
|
L: 02128000
|
|
SCAN(NCR,COUNT,ACCUM[1],63-COUNT,RESULT, 02128500
|
|
RESULT,COUNT,0,NCR,0); 02129000
|
|
IF NCR=LCR THEN 02129500
|
|
BEGIN 02130000
|
|
READACARD; 02130500
|
|
IF LIBINDEX!0 THEN 02131500
|
|
IF RECOUNT=FINISHPT THEN 02132000
|
|
BEGIN 02132500
|
|
SEARCHLIB(FALSE); 02133000
|
|
READACARD; 02133500
|
|
NORELEASE:=FALSE; 02134000
|
|
END; 02134500
|
|
GO TO L; % GO DIRECTLY TO L, DO NOT PASS GO, 02135500
|
|
% DO NOT COLLECT $200. 02136000
|
|
END; 02136500
|
|
END SCANNER; 02137000
|
|
DEFINE WRITELINE = IF SINGLTOG THEN WRITE(LINE,15,LIN[*]) 02181000
|
|
ELSE WRITE(LINE[DBL],15,LIN[*])#, 02181250
|
|
MAKCAST = BEGIN 02181500
|
|
CARDCALL:=IF LASTUSED=5 THEN TRUE ELSE FALSE; 02181750
|
|
SEARCHLIB(TRUE); 02182000
|
|
END #, 02182250
|
|
PRINTCARD = BEGIN 02182500
|
|
EDITLINE(LIN,FCR,L.[36:10], %114-02182750
|
|
SGNO,L.[45:2],MEDIUM,OMITTING); %114-02182760
|
|
IF NOHEADING THEN DATIME; WRITELINE; 02183000
|
|
END #; 02183250
|
|
STREAM PROCEDURE EDITLINE(LINE,NCR,R,S,L,SYMBOL,OMIT); %114-02183500
|
|
VALUE NCR,R,S,L,SYMBOL,OMIT; %114-02183750
|
|
BEGIN 02184000
|
|
DI := LINE; DS := 16 LIT " "; 02184250
|
|
SI := NCR; DS := 9 WDS; 02184500
|
|
DS := 8 LIT " "; 02184750
|
|
DS := WDS; % SEQUENCE NUMBER. 02185000
|
|
DS:=LIT" "; SI:=LOC SYMBOL; SI:=SI+6; 02185250
|
|
DS:=2 CHR; DS:=LIT" "; 02185500
|
|
SI:=LOC R; SI:=SI+4; 02185750
|
|
IF SC=" " THEN DS:=12 LIT" " ELSE %114-02186000
|
|
BEGIN %114-02186250
|
|
SI:=LOC S; DS:=4 DEC; DS:=LIT ":"; %114-02186300
|
|
SI:=LOC R; DS:=4 DEC; DS:=LIT ":"; %114-02186400
|
|
SI:=LOC L; DS:=1 DEC; DS:=LIT " "; %114-02186500
|
|
END; %114-02186600
|
|
OMIT(DI := DI - 12; DS := 12 LIT " :OMIT: "; DI:= LINE; %114-02186750
|
|
DS := 8 LIT " :OMIT:"); %114-02186760
|
|
END EDITLINE; 02187000
|
|
COMMENT COMPARE COMPARES SEQUENCE NUMBERS OF TAPE AND CARD. IF 02187250
|
|
TAPE IS SMALLER THEN RESULT = 0 ELSE IF CARD IS SMALLER 02187500
|
|
RESULT = 1 ELSE RESULT = 2; 02187750
|
|
REAL STREAM PROCEDURE COMPARE(TAPE,CARD); VALUE TAPE,CARD; 02188000
|
|
BEGIN 02188250
|
|
SI := TAPE; DI := CARD; 02188500
|
|
IF 8 SC } DC THEN 02188750
|
|
BEGIN 02189000
|
|
SI := SI-8; DI := DI-8; TALLY := 1; 02189250
|
|
IF 8 SC = DC THEN TALLY := 2 02189500
|
|
END; 02189750
|
|
COMPARE := TALLY 02190000
|
|
END COMPARE; 02190250
|
|
PROCEDURE OUTPUTSOURCE; 02190500
|
|
BEGIN 02190750
|
|
LABEL LCARD,LTAPE,AWAY; 02191000
|
|
SWITCH SW:=LCARD,LCARD,LTAPE,AWAY,LCARD,LTAPE; 02191250
|
|
IF SEQTOG THEN % RESEQUENCING. 02191500
|
|
BEGIN 02191750
|
|
IF TOTALNO = -10 OR NEWBASE THEN 02192000
|
|
BEGIN 02192250
|
|
NEWBASE := FALSE; GTI1:= TOTALNO:=BASENUM 02192500
|
|
END 02192750
|
|
ELSE GTI1:= TOTALNO:= TOTALNO + ADDVALUE; 02193000
|
|
CHANGESEQ(GTI1,LCR); 02193250
|
|
END; 02193500
|
|
IF NEWTOG THEN 02193750
|
|
IF INSERTDEPTH > 0 AND INSERTCOP=1 OR INSERTDEPTH=0 THEN %107- 02193800
|
|
IF WRITNEW(LIN,FCR) THEN WRITE(NEWTAPE,10,LIN[*]); 02194000
|
|
IF OMITTING THEN IF NOT LISTATOG THEN GO AWAY; 02194250
|
|
GO SW[LASTUSED]; 02194500
|
|
LCARD: 02194750
|
|
IF LISTER OR LISTPTOG THEN PRINTCARD; 02195000
|
|
GO AWAY; 02195250
|
|
LTAPE: 02195500
|
|
IF LISTER THEN PRINTCARD; 02195750
|
|
% GO AWAY; 02196000
|
|
AWAY: 02196250
|
|
END OUTPUTSOURCE; 02196500
|
|
PROCEDURE BEGINPRINT; 02196510
|
|
BEGIN 02196520
|
|
STREAM PROCEDURE STUFF(N,L); VALUE N; 02196530
|
|
BEGIN 02196540
|
|
DI:=L; DS:=8 LIT " "; SI:=L; DS:=13 WDS; 02196550
|
|
SI:=LOC N; DS:=8 DEC; 02196560
|
|
END; 02196570
|
|
STUFF(BEGINSTACK[BSPOINT],LIN); 02196580
|
|
IF NOHEADING THEN DATIME; WRITELINE; 02196590
|
|
END BEGINPRINT; 02196610
|
|
PROCEDURE READACARD; 02196750
|
|
COMMENT READACARD READS CARDS FROM EITHER THE CARD READER OR THE 02197000
|
|
TAPE MERGING AS REQUESTED AND CREATING A NEW TAPE AND 02197250
|
|
LISTING IF REQUESTED. READACARD ALSO INSERTS A PERCENT 02197500
|
|
SIGN AS AN END OF CARD SENTINEL IN COLUMN 73 AND SETS 02197750
|
|
FCR,NCR,LCR,TLCR, AND CLCR; 02198000
|
|
BEGIN 02198250
|
|
PROCEDURE READTAPE(LCR,MAXLCR,LIB); VALUE LIB; BOOLEAN LIB; 02198500
|
|
REAL LCR, MAXLCR; 02198750
|
|
BEGIN %105-02198755
|
|
LABEL ENDREADTAPE, EOFT; %105-02198760
|
|
IF LIB THEN 02199000
|
|
BEGIN 02199250
|
|
RECOUNT:=RECOUNT+1; 02199500
|
|
IF LCR:=LCR+11>MAXLCR THEN 02199750
|
|
BEGIN 02200000
|
|
READ(LIBRARY,FILEINX); 02200250
|
|
MAXLCR:=46+LCR:=MKABS(LIBRARY[FILEINX](0))+10; 02200500
|
|
END; 02200750
|
|
ADDER(SEQSUM,LCR,TRUE,TRUE); 02201000
|
|
END 02201250
|
|
ELSE BEGIN 02201500
|
|
READ (TAPE, 10, TBUFF[*])[EOFT]; %105-02201750
|
|
MAXLCR:=LCR:=MKABS(TBUFF[9]); %105-02202000
|
|
GO TO ENDREADTAPE; %105-02202010
|
|
EOFT: %105-02202020
|
|
DEFINEARRAY[25]:="ND;END."& "E"[1:43:5]; %105-02202030
|
|
DEFINEARRAY[34]:="9999" & "9999"[1:25:23]; %105-02202040
|
|
TLCR:= MKABS(DEFINEARRAY[34]); %105-02202050
|
|
PUTSEQNO (DEFINEARRAY[33],TLCR-8); %105-02202060
|
|
TURNONSTOPLIGHT("%", TLCR-8); %105-02202070
|
|
ENDREADTAPE: %105-02202080
|
|
END; %105-02202090
|
|
END READTAPE; 02202250
|
|
PROCEDURE SEQCOMPARE(TLCR,CLCR, LIB); VALUE LIB; BOOLEAN LIB; 02202500
|
|
REAL TLCR, CLCR ; 02202750
|
|
BEGIN 02203000
|
|
MEDIUM:="C "; % CARD READER. 02203250
|
|
IF GT1:=COMPARE(TLCR,CLCR)=0 THEN % TAPE HAS LOW SEQUENCE NUMB02203500
|
|
BEGIN 02203750
|
|
LCR:=TLCR; LASTUSED:=IF LIB THEN 6 ELSE 3; 02204000
|
|
MEDIUM:=IF LIB THEN "CA"+FILEINX ELSE "T ";%CA,CB,CC,OR T.02204250
|
|
END 02204500
|
|
ELSE BEGIN 02204750
|
|
IF GT1 ! 1 THEN % TAPE AND CARD HAVE SAME SEQ 02205000
|
|
BEGIN 02205250
|
|
MEDIUM:="P "; % CARD PATCHES TAPE. 02205500
|
|
IF LIB THEN IF FINISHPT-RECOUNT=1 THEN 02207750
|
|
LASTCRDPATCH:=TRUE ELSE 02208000
|
|
READTAPE(LTLCR,MAXLTLCR,TRUE) ELSE 02208250
|
|
READTAPE(TLCR,MAXTLCR,FALSE); 02208500
|
|
END; 02208750
|
|
LCR:=CLCR; 02209000
|
|
LASTUSED:=IF LIB THEN 5 ELSE 2; 02209250
|
|
END; 02209500
|
|
END OF SEQCOMPARE; 02209750
|
|
LABEL CARDONLY, CARDLAST, TAPELAST, EXIT, FIRSTTIME, 02210000
|
|
EOF, USETHESWITCH, 02210250
|
|
COMPAR,XIT,LIBEND, LIBTLAST,LIBCLAST; 02210500
|
|
LABEL COPYLIB, COPYEOF; %107-02210600
|
|
SWITCH USESWITCH := CARDONLY,CARDLAST,TAPELAST,FIRSTTIME, 02210750
|
|
LIBCLAST, LIBTLAST, COPYLIB; %107-02211000
|
|
BOOLEAN DOLLAR2TOG; 02211250
|
|
IF ERRORCOUNT}ERRMAX THEN ERR(611);% ERR LIMIT EXCEEDED - STOP. 02211500
|
|
USETHESWITCH: 02211750
|
|
GO TO USESWITCH[LASTUSED]; 02212000
|
|
MOVE(1,TEXT[LASTUSED.LINKR,LASTUSED.LINKC], 02212250
|
|
DEFINEARRAY[DEFINEINDEX-2]); 02212500
|
|
LASTUSED := LASTUSED + 1; 02212750
|
|
NCR := LCR-1; 02213000
|
|
GO TO XIT; 02213250
|
|
FIRSTTIME: 02213500
|
|
READ(CARD,10,CBUFF[*]); 02213750
|
|
FCR:=NCR:=(LCR:=MKABS(CBUFF[9]))-9; 02214000
|
|
MEDIUM:="C "; 02214100
|
|
IF EXAMIN(FCR)!"$" AND LISTER THEN PRINTCARD; 02214200
|
|
PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02214250
|
|
CARDNUMBER:=CONV(INFO[LASTSEQROW,LASTSEQUENCE-1],5,8); 02214260
|
|
TURNONSTOPLIGHT("%",LCR); 02214500
|
|
GO XIT; 02214750
|
|
COMMENT WE HAVE JUST INITIALIZED CARD INPUT; 02215000
|
|
CARDONLY: 02215250
|
|
IF NORELEASE THEN GO TO EXIT; READ(CARD,10,CBUFF[*]); 02215500
|
|
LCR := MKABS(CBUFF[9]); GO EXIT; 02215750
|
|
CARDLAST: 02216000
|
|
IF NORELEASE THEN GO TO EXIT; READ(CARD,10,CBUFF[*])[EOF]; 02216250
|
|
CLCR := MKABS(CBUFF[9]); 02216500
|
|
GO COMPAR; 02216750
|
|
EOF: 02217000
|
|
DEFINEARRAY[25]:="ND;END."&"E"[1:43:5]; 02217250
|
|
DEFINEARRAY[34]:="9999"&"9999"[1:25:23]; 02217500
|
|
CLCR:=MKABS(DEFINEARRAY[34]); 02217750
|
|
PUTSEQNO(DEFINEARRAY[33],CLCR-8); 02218000
|
|
TURNONSTOPLIGHT("%",CLCR-8); 02218250
|
|
% 02218400
|
|
GO COMPAR; 02218500
|
|
COMMENT THIS RELEASES THE PREVIOUS CARD FROM THE CARD READER AND 02218750
|
|
SETS UP CLCR; 02219000
|
|
TAPELAST: 02219250
|
|
READTAPE(TLCR,MAXTLCR,FALSE); GO TO COMPAR; 02219500
|
|
COMMENT THIS RELEASES THE PREVIOUS CARD FROM TAPE AND SETS UP TLCR; 02219750
|
|
LIBCLAST: 02220000
|
|
IF FIRSTIMEX THEN 02220250
|
|
BEGIN FIRSTIMEX:=FALSE; GO COMPAR END; 02220500
|
|
READ(CARD,10,CBUFF[*])[EOF]; 02220750
|
|
CLCR := MKABS(CBUFF[9]); 02221000
|
|
IF LASTCRDPATCH THEN 02221250
|
|
BEGIN 02221500
|
|
LASTCRDPATCH:=FALSE; 02221750
|
|
RECOUNT:=RECOUNT+1; 02222000
|
|
GO TO XIT 02222250
|
|
END; 02222500
|
|
GO TO COMPAR; 02222750
|
|
LIBTLAST: 02223000
|
|
IF FIRSTIMEX THEN 02223250
|
|
BEGIN FIRSTIMEX:=FALSE; GO TO COMPAR END; 02223500
|
|
READTAPE(LTLCR,MAXLTLCR,TRUE); 02223750
|
|
IF RECOUNT=FINISHPT THEN GO TO XIT; 02224000
|
|
GO COMPAR; %107-02224010
|
|
COPYLIB: %107-02224020
|
|
READ(LF[INSERTINX:=INSERTINX+1],10,LBUFF[*])[COPYEOF]; %107-02224030
|
|
READ SEEK(LF[INSERTINX+1]); %107-02224032
|
|
IF(CMPD(INSERTSEQ,LBUFF[9]) = 0) THEN GO COPYEOF; %107-02224040
|
|
LCR:=MKABS(LBUFF[9]); %107-02224050
|
|
GO TO EXIT; %107-02224060
|
|
COPYEOF: %107-02224070
|
|
CLOSE(LF,RELEASE); %107-02224080
|
|
IF((INSERTDEPTH:=INSERTDEPTH-1) = 0) THEN %107-02224090
|
|
BEGIN LASTUSED:=SAVECARD; MEDIUM:=MEDIUM.[24:12]; %107-02224100
|
|
GO USETHESWITCH; %107-02224102
|
|
END; %107-02224104
|
|
FILL LF WITH INSERTMID, INSERTFID; %107-02224110
|
|
GO COPYLIB; %107-02224120
|
|
COMPAR: 02224250
|
|
IF LASTUSED = 2 OR LASTUSED = 3 THEN SEQCOMPARE(TLCR,CLCR,FALSE) 02224500
|
|
ELSE SEQCOMPARE(LTLCR,CLCR,TRUE); 02224750
|
|
EXIT: 02225000
|
|
NCR := FCR:= LCR - 9; 02225250
|
|
COMMENT SETS UP NCR AND FCR; 02225500
|
|
IF CHECKTOG AND EXAMIN(FCR)!"$" THEN %$-CARDS DON"T COUNT. 02225750
|
|
IF COMPARE(MKABS(INFO[LASTSEQROW,LASTSEQUENCE]),LCR)=1 THEN 02226000
|
|
IF SEQERRTOG THEN BEGIN FLAG(610); 02226250
|
|
NUMSEQUENCEERRORS:=NUMSEQUENCEERRORS+1;END 02226300
|
|
ELSE BEGIN % SEQUENCE WARNING 02226500
|
|
BLANKET(14,LIN); 02226750
|
|
SEQUENCEWARNING(LIN[13]); 02227000
|
|
IF NOHEADING THEN DATIME; WRITELINE; 02227250
|
|
IF NOT LISTER THEN PRINTCARD; 02227500
|
|
NUMSEQUENCEERRORS:=NUMSEQUENCEERRORS+1; 02227600
|
|
END; 02227750
|
|
IF EXAMIN(FCR)="$" THEN 02228250
|
|
BEGIN 02228500
|
|
IF LISTPTOG OR PRINTDOLLARTOG THEN PRINTCARD; 02228750
|
|
IF EXAMIN(NCR:=NCR+32768)="$" THEN MAKCAST ELSE DOLLARCARD; 02229000
|
|
NORELEASE := FALSE; 02229100
|
|
COMMENT DONT FORGET THAT NCR IS NOT WORD MODE, BUT CHAR. MODE POINTER; 02229250
|
|
GO USETHESWITCH; 02229500
|
|
END; 02229750
|
|
IF EXAMIN(FCR)=" " THEN 02230000
|
|
IF DOLLAR2TOG:=EXAMIN(FCR+32768)="$" THEN 02230100
|
|
BEGIN 02230250
|
|
OUTPUTSOURCE; 02230500
|
|
IF EXAMIN(NCR:=NCR+65536)="$" THEN MAKCAST ELSE 02230750
|
|
DOLLARCARD; 02231000
|
|
END; 02231250
|
|
IF VOIDING OR VOIDTAPE THEN 02231500
|
|
BEGIN 02231750
|
|
IF COMPARE(LCR,VOIDCR)=0 THEN 02232000
|
|
BEGIN 02232250
|
|
IF VOIDTAPE AND LASTUSED=3 OR NOT VOIDTAPE THEN 02232500
|
|
GO USETHESWITCH; 02232750
|
|
END 02233000
|
|
ELSE BEGIN 02233250
|
|
VOIDCR:=VOIDPLACE:=0; 02233500
|
|
VOIDING:=FALSE; VOIDTAPE:=FALSE 02233750
|
|
END; 02234000
|
|
END; 02234250
|
|
CARDCOUNT:=CARDCOUNT+1; 02234500
|
|
IF DOLLAR2TOG THEN 02234600
|
|
BEGIN DOLLAR2TOG:=NORELEASE:=FALSE; GO USETHESWITCH;END; 02234650
|
|
PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02234750
|
|
CARDNUMBER:=IF SEQTOG THEN TOTALNO+ADDVALUE ELSE 02234800
|
|
CONV(INFO[LASTSEQROW,LASTSEQUENCE-1],5,8); 02234900
|
|
OUTPUTSOURCE; 02235000
|
|
IF OMITTING THEN GO USETHESWITCH; 02235250
|
|
% 02235500
|
|
TURNONSTOPLIGHT("%",LCR); 02235750
|
|
IF BUILDLINE THEN 02236000
|
|
IF LASTADDRESS ! (LASTADDRESS := L.[36:10]) THEN 02236250
|
|
BEGIN 02236500
|
|
ENILSPOT := LASTADDRESS & CARDNUMBER[10:20:28]; 02236750
|
|
IF (ENILPTR := ENILPTR+1)}1023 THEN 02237000
|
|
BEGIN FLAG(80); ENILPTR := 512; END; 02237250
|
|
END; 02237500
|
|
XIT: 02237750
|
|
END READACARD; 02238000
|
|
PROCEDURE INCLUDECARD; %107-02238100
|
|
BEGIN %107-02238110
|
|
REAL V; %107-02238112
|
|
LABEL EEXIT,AGAIN,GETEM,EOF,EXIT,DONTSCAN; %107-02238120
|
|
REAL STREAM PROCEDURE SCNN(A,B); VALUE B; %107-02238130
|
|
BEGIN %107-02238140
|
|
SI:=A; DI:=LOC SCNN; DS:=8 LIT"0 "; %107-02238150
|
|
DI:=DI-7; SI:=SI+3; DS:=B CHR; %107-02238160
|
|
END; %107-02238170
|
|
STREAM PROCEDURE MVE(A,B,C,D); VALUE B,C; %107-02238180
|
|
BEGIN %107-02238190
|
|
SI:=A; SI:=SI+3; DI:=D; C(DS:=LIT"0"); DS:=B CHR; %107-02238200
|
|
END; %107-02238210
|
|
STREAM PROCEDURE MVEWD(A,B); VALUE A; %107-02238212
|
|
BEGIN SI:=A; DI:=B; DS:=10 WDS; END; %107-02238214
|
|
DEFINE SKAN = BEGIN %107-02238220
|
|
COUNT:=RESULT:=ACCUM[0]:=0; %107-02238230
|
|
SCANNER; %107-02238240
|
|
V:=SCNN(ACCUM[1],MIN(COUNT,7)); %107-02238250
|
|
END#; %107-02238260
|
|
DEFINE ERR(ERR1) = BEGIN FLAG(ERR1); GO TO EEXIT; END#; %107-02238270
|
|
IF((INSERTDEPTH:=INSERTDEPTH+1) > INSERTMAX) THEN ERR(612); %107-02238280
|
|
INSERTMID:=INSERTFID:=INSERTINX:=INSERTCOP:=0; %107-02238290
|
|
INSERTSEQ:="9999"&"9999"[1:23]; %107-02238300
|
|
AGAIN: %107-02238330
|
|
SKAN; %107-02238340
|
|
DONTSCAN: %107-02238342
|
|
IF V="% " THEN GO GETEM; %107-02238350
|
|
IF V="/ " THEN GO AGAIN; %107-02238360
|
|
IF RESULT=3 THEN % SEQ RANGE %107-02238370
|
|
BEGIN %107-02238380
|
|
MVE(ACCUM[1],COUNT:=MIN(COUNT,8),8-COUNT,INSERTINX); %107-02238385
|
|
SKAN; %107-02238390
|
|
IF V="- " THEN %107-02238400
|
|
BEGIN %107-02238410
|
|
SKAN; %107-02238420
|
|
IF RESULT ! 3 THEN ERR(614); %107-02238430
|
|
MVE(ACCUM[1],COUNT:=MIN(COUNT,8),8-COUNT,INSERTSEQ); %107-02238440
|
|
END ELSE GO TO DONTSCAN; %107-02238450
|
|
GO AGAIN; %107-02238460
|
|
END; % SEQ RANGE %107-02238470
|
|
IF V="+ " THEN % WE HAVE COPY FORM %107-02238480
|
|
BEGIN %107-02238490
|
|
SKAN; %107-02238500
|
|
IF V="COPY " THEN %107-02238510
|
|
IF EXAMIN(LCR-9)="$" THEN %107-02238512
|
|
INSERTCOP:=INSERTINFO[INSERTDEPTH-1,4] %107-02238514
|
|
ELSE ERR(617) %107-02238520
|
|
ELSE ERR(616); %107-02238522
|
|
GO AGAIN; %107-02238530
|
|
END; %107-02238540
|
|
IF INSERTMID=0 THEN INSERTMID:=V %107-02238550
|
|
ELSE IF INSERTFID=0 THEN INSERTFID:=V ELSE ERR(616); %107-02238552
|
|
GO AGAIN; %107-02238555
|
|
GETEM: %107-02238560
|
|
IF NOT BOOLEAN(INSERTCOP) AND NEWTOG THEN %107-02238570
|
|
IF EXAMIN(FCR) = "$" THEN % ONLY IF "$" IS IN COLUMN ONE %107-02238572
|
|
IF BOOLEAN(INSERTINFO[INSERTDEPTH-1,4]) THEN % ONLY IF LAST HAD COPY02238574
|
|
BEGIN MVEWD(FCR,LBUFF[0]); %107-02238580
|
|
PUTSEQNO(LBUFF[9],MKABS(INFO[LASTSEQROW,LASTSEQUENCE])); %107-02238582
|
|
WRITE(NEWTAPE,10,LBUFF[*]); %107-02238590
|
|
END; %107-02238600
|
|
IF INSERTMID=0 THEN ERR(613); %107-02238602
|
|
IF INSERTFID=0 THEN INSERTFID:=TIME(-1); %107-02238610
|
|
IF INSERTFID=0 THEN %107-02238620
|
|
BEGIN INSERTFID:=INSERTMID; INSERTMID:=0; END; %107-02238630
|
|
IF INSERTDEPTH > 1 THEN CLOSE(LF,RELEASE); %107-02238640
|
|
FILL LF WITH INSERTMID,INSERTFID; %107-02238650
|
|
READ(LF[0],10,LBUFF[*])[EEXIT]; % DO THE FOLLOWING SO THAT %107-02238652
|
|
INSERTMID:=LF.MFID; % IF THE OPERATOR IL-ED US %107-02238654
|
|
INSERTFID:=LF.FID; % WE WILL HAVE THE PROPER NAMES. 02238656
|
|
V:=-1; %107-02238658
|
|
IF INSERTINX > 0 THEN %107-02238660
|
|
BEGIN %107-02238670
|
|
DO READ(LF[V:=V+1],10,LBUFF[*])[EEXIT] %107-02238680
|
|
UNTIL CMPD(INSERTINX,LBUFF[9]) { 1; %107-02238690
|
|
V:=V-1; %107-02238700
|
|
END; %107-02238702
|
|
INSERTINX:=V; %107-02238704
|
|
IF INSERTDEPTH = 1 THEN %107-02238710
|
|
BEGIN SAVECARD:=LASTUSED; LASTUSED:=7; MEDIUM:="L "& MEDIUM[24:12]; 02238720
|
|
END; %107-02238730
|
|
GO TO EXIT; %107-02238760
|
|
EEXIT: %107-02238770
|
|
IF((INSERTDEPTH:=INSERTDEPTH-1) > 0) THEN %107-02238780
|
|
BEGIN %107-02238790
|
|
CLOSE(LF,RELEASE); %107-02238800
|
|
FILL LF WITH INSERTMID,INSERTFID; %107-02238810
|
|
END; %107-02238820
|
|
EXIT: %107-02238830
|
|
Q:="1%0000"; %107-02238832
|
|
END; %107-02238840
|
|
REAL PROCEDURE CONVERT; 02248000
|
|
BEGIN REAL T; INTEGER N; 02249000
|
|
TLO~0; THI~ 02250000
|
|
T~ CONV(ACCUM[1],TCOUNT,N~(COUNT-TCOUNT)MOD 8); 02251000
|
|
FOR N~ TCOUNT+N STEP 8 UNTIL COUNT- 1 DO 02252000
|
|
IF DPTOG THEN 02253000
|
|
BEGIN 02254000
|
|
DOUBLE(THI,TLO,100000000.0,0,|,CONV(ACCUM[1],N,8),0,+,~, 02255000
|
|
THI,TLO); 02256000
|
|
T~THI; 02257000
|
|
END ELSE 02258000
|
|
T~ T|100000000+ CONV(ACCUM[1],N,8); 02259000
|
|
CONVERT~T; 02260000
|
|
END; 02261000
|
|
REAL STREAM PROCEDURE FETCH(F); VALUE F; 02262000
|
|
BEGIN SI:=F; SI:=SI-8; DI:=LOC FETCH; DS:=WDS END FETCH; 02263000
|
|
PROCEDURE DUMPINFO; 02264000
|
|
BEGIN 02264050
|
|
ARRAY A[0:14]; INTEGER JEDEN,DWA; 02264100
|
|
STREAM PROCEDURE OCTALWORDS(S,D,N); VALUE N; 02264400
|
|
BEGIN 02264450
|
|
SI:=S; DI:=D; 02264500
|
|
N(2(8(DS:=3 RESET; 3(IF SB THEN DS:=1 SET ELSE 02264550
|
|
DS:=1 RESET; SKIP 1 SB)); DS:=1 LIT " ");DS:=2 LIT" "); 02264600
|
|
END OF OCTALWORDS; 02264650
|
|
STREAM PROCEDURE ALPHAWORDS(S,D,N); VALUE N; 02264700
|
|
BEGIN 02264750
|
|
SI:=S; DI:=D; 02264800
|
|
N(2(4(DS:=1 LIT" "; DS:=1 CHR); DS:=1 LIT" "); DS:=2 LIT" "); 02264850
|
|
END OF ALPHAWORDS; 02264900
|
|
IF NOHEADING THEN DATIME;WRITE(LINE[DBL],<//"ELBAT">); 02264950
|
|
FOR JEDEN:=0 STEP 6 UNTIL 71 DO 02265000
|
|
BEGIN 02265050
|
|
BLANKET(14,A); OCTALWORDS(ELBAT[JEDEN],A,6); 02265100
|
|
WRITE(LINE[DBL],15,A[*]); 02265150
|
|
END; 02265200
|
|
BLANKET(14,A); OCTALWORDS(ELBAT[72],A,4); 02265250
|
|
WRITE(LINE[DBL],15,A[*]); 02265300
|
|
FOR JEDEN:=0 STEP 1 UNTIL NEXTINFO DIV 256 DO 02265350
|
|
BEGIN 02265400
|
|
WRITE(LINE[DBL],<//"INFO[",I2,",*]">,JEDEN); 02265450
|
|
FOR DWA:=0 STEP 6 UNTIL 251 DO 02265500
|
|
BEGIN 02265550
|
|
BLANKET(14,A); ALPHAWORDS(INFO[JEDEN,DWA],A,6); 02265600
|
|
WRITE(LINE,15,A[*]); 02265650
|
|
BLANKET(14,A); OCTALWORDS(INFO[JEDEN,DWA],A,6); 02265700
|
|
WRITE(LINE[DBL],15,A[*]); 02265750
|
|
END; 02265800
|
|
BLANKET(14,A); ALPHAWORDS(INFO[JEDEN,252],A,4); 02265850
|
|
WRITE(LINE,15,A[*]); 02265900
|
|
BLANKET(14,A); OCTALWORDS(INFO[JEDEN,252],A,4); 02265950
|
|
WRITE(LINE[DBL],15,A[*]); 02266000
|
|
END; 02266050
|
|
END OF DUMPINFO; 02266100
|
|
DEFINE SKAN = BEGIN 02277000
|
|
COUNT:=RESULT:=ACCUM[1]:=0; 02278000
|
|
SCANNER; 02279000
|
|
Q:=ACCUM[1]; 02280000
|
|
END #; 02281000
|
|
COMMENT DOLLARCARD HANDLES THE COMPILER CONTROL CARDS. 02282000
|
|
ALL COMPILER- AND USER-DEFINED OPTIONS ARE KEPT 02283000
|
|
IN THE ARRAY "OPTIONS". 02284000
|
|
EACH OPTION HAS A TWO-WORD ENTRY: 02285000
|
|
02286000
|
|
WORD CONTAINS 02287000
|
|
---- -------- 02288000
|
|
1 ENTRY FROM ACCUM[1]: 00XZZZZ, WHERE 02289000
|
|
X IS THE SIZE OF THE ID AND 02290000
|
|
ZZZZZ IS THE FIRST FIVE CHARS OF THE ID. 02291000
|
|
2 PUSH-DOWN, 47-BIT STACK CONTAINING THE 02292000
|
|
HISTORY OF THE SETTINGS OF THIS OPTION. 02293000
|
|
02294000
|
|
IN "FINDOPTION", ALL COMPILER-DEFINED OPTIONS ARE USUALLY 02295000
|
|
LOCATED BASED UPON A UNIQUE NUMBER ASSIGNED TO EACH. 02296000
|
|
FOR ALL USER-DEFINED OPTIONS, A SEQUENTIAL TABLE SEARCH IS 02297000
|
|
INITIATED USING "USEROPINX" AS THE INITIAL INDEX INTO THE 02298000
|
|
"OPTIONS" ARRAY. IF THE NUMBER OF COMPILER-DEFINED OPTIONS 02299000
|
|
IS CHANGED, THEN "USEROPINX" MUST BE ACCORDINGLY CHANGED. 02300000
|
|
THE NUMBER OF USER DEFINED OPTIONS ALLOWED CAN BE 02301000
|
|
CHANGED BY CHANGING THE DEFINE "OPARSIZE". 02302000
|
|
THE VARIABLE "OPTIONWORD" CONTAINS THE CURRENT TRUE OR FALSE 02303000
|
|
SETTING OF ALL OF THE COMPILER-DEFINED OPTIONS, ONE BIT PER 02304000
|
|
OPTION. 02305000
|
|
; 02306000
|
|
BOOLEAN PROCEDURE FINDOPTION(BIT); VALUE BIT; INTEGER BIT; 02307000
|
|
BEGIN 02308000
|
|
LABEL FOUND; 02309000
|
|
REAL ID; 02310000
|
|
OPINX:=2|BIT-4; 02311000
|
|
WHILE ID:=OPTIONS[OPINX:=OPINX+2]!0 DO 02312000
|
|
IF Q=ID THEN GO FOUND; 02313000
|
|
OPTIONS[OPINX]:=Q; % NEW USER-DEFINED OPTION. 02314000
|
|
FOUND: %103-02315000
|
|
IF OPINX +1>OPARSIZE THEN FLAG(602) ELSE % TOO MANY USER OPTIONS 02316000
|
|
FINDOPTION:=BOOLEAN(OPTIONS[OPINX+1]); 02317000
|
|
END FINDOPTION; 02318000
|
|
PROCEDURE DOLLARCARD; 02319000
|
|
BEGIN 02320000
|
|
PROCEDURE SWITCHIT(XBIT); VALUE XBIT; INTEGER XBIT; 02321000
|
|
BEGIN 02322000
|
|
BOOLEAN B,T; 02323000
|
|
INTEGER SAVEINX; 02324000
|
|
LABEL XMODE0,XMODE1,XMODE2,XMODE3,XMODE4,ALONG; 02325000
|
|
SWITCH SW:=XMODE0,XMODE1,XMODE2,XMODE3,XMODE4; 02326000
|
|
SETTING:=FINDOPTION(XBIT); SKAN; 02327000
|
|
GO SW[XMODE+1]; 02328000
|
|
XMODE0: % FIRST OPTION ON CARD, BUT NOT SET, RESET, OR POP. 02329000
|
|
OPTIONWORD:=BOOLEAN(0); 02330000
|
|
FOR SAVEINX:=1 STEP 2 UNTIL OPARSIZE DO OPTIONS[SAVEINX]:=0; 02331000
|
|
IF BUILDLINE.[45:1] THEN %108-02331050
|
|
BUILDLINE.[47:1]:=SEQXEQTOG:=FALSE; %108-02331060
|
|
XMODE:=1; IF LASTUSED < 5 AND LASTUSED ! 3 THEN LASTUSED:=1; 02332000
|
|
XMODE1: % NOT FIRST OPTION AND NOT BEING SET, RESET, OR POPPED. 02333000
|
|
OPTIONS[OPINX+1]:=REAL(TRUE); 02334000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & TRUE[XBIT:1]; 02335000
|
|
GO ALONG; 02336000
|
|
XMODE2: % RESET; 02337000
|
|
OPTIONS[OPINX+1]:=REAL(FALSE & SETTING[1:2:46]); 02338000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & FALSE[XBIT:1]; 02339000
|
|
GO ALONG; 02340000
|
|
XMODE3: % SET. 02341000
|
|
SAVEINX:=OPINX; % REMEMBER OPTION WE ARE SETTING. 02342000
|
|
B:=IF Q="1=0000" THEN BOOLEXP ELSE TRUE; 02343000
|
|
OPTIONS[SAVEINX+1]:=REAL(B & SETTING[1:46]); 02352000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & B [XBIT:1]; 02353000
|
|
GO ALONG; 02354000
|
|
XMODE4: % POP. 02355000
|
|
OPTIONS[OPINX+1]:=REAL(B:=SETTING.[1:46]); 02356000
|
|
IF XBIT<USEROPINX THEN OPTIONWORD:=OPTIONWORD & B [XBIT:1]; 02357000
|
|
ALONG: 02358000
|
|
END SWITCHIT; 02359000
|
|
LABEL EXIT,AGAIN,SKANAGAIN,LENGTH1,LENGTH2,LENGTH3,LENGTH4, 02360000
|
|
LENGTH5,LENGTH6,LENGTH7,LENGTH8,LENGTH9, 02361000
|
|
WHATISIT, 02362000
|
|
CARDOPTION,MERGEOPTION; 02363000
|
|
SWITCH OPTIONLENGTH:=LENGTH1,WHATISIT,LENGTH3,LENGTH4,LENGTH5, 02364000
|
|
LENGTH6,LENGTH7,LENGTH8,LENGTH9,WHATISIT; %106-02365000
|
|
INTEGER SRESULT,SCOUNT; 02365100
|
|
INTEGER SAVEINX; %108-02365200
|
|
DOLLARTOG:=TRUE; 02366000
|
|
MOVE(10,ACCUM[0],DEFINEARRAY[0]); % SAVE INFORMATION FOR 02366100
|
|
SCOUNT:=COUNT; SRESULT:=RESULT; % "TABLE" TO RESUME SCAN. 02366200
|
|
XMODE:=0; 02367000
|
|
PUTSEQNO(INFO[LASTSEQROW,LASTSEQUENCE],LCR); 02368000
|
|
TURNONSTOPLIGHT("%",LCR); 02369000
|
|
SKANAGAIN: 02370000
|
|
SKAN; 02371000
|
|
AGAIN: 02372000
|
|
GO OPTIONLENGTH[MIN(COUNT,10)]; 02373000
|
|
LENGTH1: 02374000
|
|
IF Q = "1%0000" THEN GO EXIT; 02375000
|
|
IF Q = "1$0000" THEN 02376000
|
|
BEGIN SWITCHIT(PRINTDOLLARBIT); GO AGAIN END; 02377000
|
|
IF Q = "1,0000" THEN GO SKANAGAIN; 02378000
|
|
GO WHATISIT; 02379000
|
|
LENGTH2: % NO OPTIONS OF THIS LENGTH ARE CURRENTLY IMPLEMENTED. 02380000
|
|
LENGTH3: 02381000
|
|
IF Q = "3SET00" THEN 02382000
|
|
BEGIN XMODE:=3; GO SKANAGAIN END; 02383000
|
|
IF Q = "3POP00" THEN 02384000
|
|
BEGIN XMODE:=4; GO SKANAGAIN END; 02385000
|
|
IF Q = "3NEW00" THEN 02386000
|
|
BEGIN 02387000
|
|
SWITCHIT(NEWBIT); 02388000
|
|
IF Q = "4TAPE0" THEN GO SKANAGAIN; 02389000
|
|
GO AGAIN; 02390000
|
|
END; 02391000
|
|
IF Q = "3SEQ00" THEN 02392000
|
|
BEGIN SWITCHIT(SEQBIT); GO AGAIN END; 02393000
|
|
IF Q = "3PRT00" THEN 02394000
|
|
BEGIN SWITCHIT(PRTBIT); GO AGAIN END; 02395000
|
|
IF Q = "3MCP00" THEN 02396000
|
|
BEGIN SWITCHIT(MCPBIT); GO AGAIN END; 02397000
|
|
GO WHATISIT; 02398000
|
|
LENGTH4: 02399000
|
|
IF Q = "4LIST0" THEN 02400000
|
|
BEGIN 02401000
|
|
SWITCHIT(LISTBIT); 02402000
|
|
GO AGAIN; 02404000
|
|
END; 02405000
|
|
IF Q = "4VOID0" THEN 02406000
|
|
BEGIN 02407000
|
|
IF XMODE=0 THEN 02408000
|
|
BEGIN 02409000
|
|
GETVOID(VOIDPLACE,NCR,VOIDCR,LCR, 02410000
|
|
INFO[LASTSEQROW,LASTSEQUENCE]); 02411000
|
|
XMODE:=1; SWITCHIT(VOIDBIT); 02412000
|
|
GO EXIT; 02413000
|
|
END; 02414000
|
|
SWITCHIT(VOIDBIT); 02415000
|
|
VOIDPLACE:="9999"&"9999"[1:23];%2 B COMPATIBLE W/B-5700 VOIDS 02416000
|
|
VOIDCR:=MKABS(VOIDPLACE); % AND FAKE OUT READACARD. 02417000
|
|
GO AGAIN; 02418000
|
|
END; 02419000
|
|
IF Q = "4XREF0" THEN BEGIN SWITCHIT(XREFBIT); IF BOOLEAN(XMODE) THEN02419100
|
|
DEFINING := BOOLEAN(REAL(DEFINING)&1[1:47:1]); 02419110
|
|
GO AGAIN END; 02419120
|
|
IF Q = "4BEND0" THEN BEGIN SWITCHIT(BENDBIT); GO AGAIN END; 02419200
|
|
IF Q = "4OMIT0" THEN 02420000
|
|
BEGIN SWITCHIT(OMITBIT); GO AGAIN END; 02421000
|
|
IF Q = "4CARD0" THEN 02422000
|
|
BEGIN 02423000
|
|
Q:="4TAPE0"; % FAKE OUT SWITCHIT. 02424000
|
|
SWITCHIT(MERGEBIT); 02425000
|
|
IF XMODE!2 THEN MERGETOG:=NOT MERGETOG; 02425500
|
|
OPTIONS[2|MERGEBIT-1]:= % CARD IS 02426000
|
|
REAL(SETTING & (MERGETOG)[47:1]); % INVERSE OF MERGE. 02427000
|
|
IF MERGETOG THEN GO MERGEOPTION; 02428000
|
|
CARDOPTION: 02429000
|
|
IF LASTUSED<5 THEN LASTUSED:=1; 02430000
|
|
GO AGAIN; 02431000
|
|
END; 02432000
|
|
IF Q = "4TAPE0" THEN 02433000
|
|
BEGIN 02434000
|
|
SWITCHIT(MERGEBIT); 02435000
|
|
IF NOT MERGETOG THEN GO CARDOPTION; 02436000
|
|
MERGEOPTION: 02437000
|
|
IF LASTUSED ! 1 THEN GO TO AGAIN; %110-02437500
|
|
LASTUSED:=2; % NEXT CARD IS READ FROM READER. 02438000
|
|
IF MAXTLCR=0 THEN 02439000
|
|
BEGIN 02440000
|
|
INTEGER STREAM PROCEDURE FEJ(F,T); VALUE T; 02441000
|
|
BEGIN 02442000
|
|
SI:=F; DI:=LOC T; DS:=WDS; 02443000
|
|
SI:=T; SI:=SI-16; DI:=LOC FEJ; DS:=WDS; 02444000
|
|
END FEJ; 02445000
|
|
STREAM PROCEDURE FIX(F,T); VALUE T; 02446000
|
|
BEGIN 02447000
|
|
SI:=F; SI:=SI-24; DI:=LOC T; DS:=WDS; 02448000
|
|
DI:=T; DI:=DI+47; SKIP 4 DB; DS:=2 RESET; 02449000
|
|
2(DI:=DI+48); DS:=8 LIT"00#01+0#"; 02450000
|
|
END FIX; 02451000
|
|
IF GT1:=FEJ(TAPE,0)=10 THEN 02452000
|
|
BEGIN 02453000
|
|
REWIND(TAPE); FIX(TAPE,0); 02454000
|
|
END; 02455000
|
|
MAXTLCR:=GT1+TLCR:=9+MKABS(TBUFF[0]); 02456000
|
|
READ(TAPE,10,TBUFF[*]); % INITIALIZE TAPE INPUT. 02457000
|
|
LASTUSED:=2; 02458000
|
|
END; 02459000
|
|
GO AGAIN; 02460000
|
|
END; 02461000
|
|
IF Q = "4PAGE0" THEN 02462000
|
|
BEGIN 02463000
|
|
IF LISTER THEN WRITE(LINE[PAGE]); 02464000
|
|
GO SKANAGAIN; 02465000
|
|
END; 02466000
|
|
IF Q = "4INFO0" THEN 02467000
|
|
BEGIN DUMPINFO; GO SKANAGAIN END; 02468000
|
|
IF Q = "4SEGS0" THEN 02469000
|
|
BEGIN SWITCHIT(SEGSBIT); GO AGAIN END; 02470000
|
|
IF Q = "4NEST0" THEN 02471000
|
|
BEGIN SWITCHIT(NESTBIT); GO AGAIN END; 02472000
|
|
IF Q = "4DECK0" THEN 02473000
|
|
BEGIN SWITCHIT(DECKBIT); GO AGAIN END; 02474000
|
|
GO WHATISIT; 02475000
|
|
LENGTH5: 02476000
|
|
IF Q = "5RESET" THEN 02477000
|
|
BEGIN XMODE:=2; GO SKANAGAIN END; 02478000
|
|
IF Q = "5LISTP" THEN 02479000
|
|
BEGIN SWITCHIT(LISTPBIT); GO AGAIN; END; 02480000
|
|
IF Q = "5VOIDT" THEN 02481000
|
|
BEGIN 02482000
|
|
IF XMODE=0 THEN 02483000
|
|
BEGIN 02484000
|
|
GETVOID(VOIDPLACE,NCR,VOIDCR,LCR, 02485000
|
|
INFO[LASTSEQROW,LASTSEQUENCE]); 02486000
|
|
XMODE:=1; SWITCHIT(VOIDBIT); 02487000
|
|
GO EXIT; 02488000
|
|
END; 02489000
|
|
SWITCHIT(VOIDTBIT); 02490000
|
|
VOIDPLACE:="9999"&"9999"[1:23];%2 B COMPATIBLE W/B-5700 VOIDS 02491000
|
|
VOIDCR:=MKABS(VOIDPLACE); % AND FAKE OUT READACARD. 02492000
|
|
GO AGAIN; 02493000
|
|
END; 02494000
|
|
IF Q = "5CHECK" THEN 02495000
|
|
BEGIN SWITCHIT(CHECKBIT); GO AGAIN END; 02496000
|
|
IF Q = "5LIMIT" THEN 02497000
|
|
BEGIN 02498000
|
|
SKAN; 02499000
|
|
IF RESULT!3 THEN % SHOULD BE NUMBER. 02500000
|
|
BEGIN FLAG(600); GO AGAIN END; 02501000
|
|
ERRMAX:=CONV(ACCUM[1],0,ACCUM[1].[12:6]); 02502000
|
|
GO SKANAGAIN; 02503000
|
|
END; 02504000
|
|
IF Q = "5PUNCH" THEN 02505000
|
|
BEGIN SWITCHIT(PUNCHBIT); GO AGAIN; END; 02506000
|
|
IF Q = "5PURGE" THEN 02507000
|
|
BEGIN SWITCHIT(PURGEBIT); GO AGAIN; END; 02508000
|
|
IF Q = "5LISTA" THEN 02509000
|
|
BEGIN 02510000
|
|
SWITCHIT(LISTABIT); 02511000
|
|
GO AGAIN; 02513000
|
|
END; 02514000
|
|
IF Q = "5STUFF" THEN 02515000
|
|
BEGIN SWITCHIT(STUFFBIT); GO AGAIN; END; 02516000
|
|
GO WHATISIT; 02517000
|
|
LENGTH6: 02518000
|
|
IF Q = "6SEQER" THEN 02519000
|
|
BEGIN SWITCHIT(SEQERRBIT); GO AGAIN END; 02520000
|
|
IF Q = "6SINGL" THEN 02521000
|
|
BEGIN SWITCHIT(SINGLBIT); GO AGAIN END; 02522000
|
|
IF Q = "6SEQXE" THEN 02523000
|
|
BEGIN 02524000
|
|
IF BUILDLINE.[45:1] THEN %108-02525000
|
|
BEGIN %108-02525001
|
|
IF XMODE = 0 THEN %108-02525003
|
|
BEGIN %108-02525004
|
|
OPTIONWORD:=BOOLEAN(0); %108-02525005
|
|
FOR SAVEINX:=1 STEP 2 UNTIL OPARSIZE DO %108-02525006
|
|
OPTIONS[SAVEINX]:=0; %108-02525007
|
|
BUILDLINE.[47:1]:=SEQXEQTOG:=FALSE; %108-02525008
|
|
IF LASTUSED < 5 THEN LASTUSED:=1; %108-02525009
|
|
XMODE:=1; %108-02525010
|
|
END; %108-02525011
|
|
SEQXEQTOG:=XMODE ! 2 AND XMODE ! 4; %108-02525012
|
|
BUILDLINE.[47:1]:=SEQXEQTOG; %108-02525013
|
|
END; %108-02526000
|
|
GO SKANAGAIN; 02527000
|
|
END; 02528000
|
|
IF Q = "6DEBUG" THEN 02529000
|
|
BEGIN 02530000
|
|
SWITCHIT(DEBUGBIT); 02531000
|
|
IF DEBUGTOG THEN 02533000
|
|
IF WOP[0]=0 THEN 02534000
|
|
BEGIN 02535000
|
|
FILL WOP[*] WITH 02536000
|
|
"LITC"," ", 02537000
|
|
"OPDC","DESC", 02538000
|
|
10,"DFL ", 11,"NOP ", 12,"XRT ", 16,"ADD ", 17,"AD2 ", 18,"PRL ", 02539000
|
|
19,"LNG ", 21,"GEQ ", 22,"BBC ", 24,"INX ", 35,"LOR ", 37,"GTR ", 02540000
|
|
38,"BFC ", 39,"RTN ", 40,"COC ", 48,"SUB ", 49,"SB2 ", 64,"MUL ", 02541000
|
|
65,"ML2 ", 67,"LND ", 68,"STD ", 69,"NEQ ", 71,"XIT ", 72,"MKS ", 02542000
|
|
128,"DIV ",129,"DV2 ",130,"COM ",131,"LQV ",132,"SND ",133,"XCH ", 02543000
|
|
134,"CHS ",167,"RTS ",168,"CDC ",197,"FTC ",260,"LOD ",261,"DUP ", 02544000
|
|
278,"LBC ",280,"SSF ",294,"LFC ",322,"ZP1 ",384,"IDV ",453,"FTF ", 02545000
|
|
515,"MDS ",532,"ISD ",533,"LEQ ",534,"BBW ",548,"ISN ",549,"LSS ", 02546000
|
|
550,"BFW ",581,"EQL ",582,"SSP ",584,"ECM ",709,"CTC ",790,"LBU ", 02547000
|
|
806,"LFU ",896,"RDV ",965,"CTF ", 02548000
|
|
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1023; 02549000
|
|
FILL COP[*] WITH % CHARACTER MODE MNEMONICS 02550000
|
|
"EXC ","NOP ","BSD ","BSS ","RDA ","TRW ","SED ","TDA ", 02551000
|
|
" "," ","TBN "," ","SDA ","SSA ","SFD ","SRD ", 02552000
|
|
" "," ","SES "," ","TEQ ","TNE ","TEG ","TGR ", 02553000
|
|
"SRS ","SFS "," "," ","TEL ","TLS ","TAN ","BIT ", 02554000
|
|
"INC ","STC ","SEC ","CRF ","JNC ","JFC ","JNS ","JFW ", 02555000
|
|
"RCA ","ENS ","BNS ","RSA ","SCA ","JRC ","TSA ","JRV ", 02556000
|
|
"CEQ ","CNE ","CEG ","CGR ","BIS ","BIR ","OCV ","ICV ", 02557000
|
|
"CEL ","CLS ","FSU ","FAD ","TRP ","TRN ","TRZ ","TRS "; 02558000
|
|
02559000
|
|
FILL POP[*] WITH 02560000
|
|
"ZFN ","ZBN ","ZFD ","ZBD ","ISO ",0,"DIA ","DIB ","TRB ","CFL ","CFE "02561000
|
|
; 02562000
|
|
END; 02563000
|
|
GO AGAIN; 02564000
|
|
END; 02565000
|
|
IF Q = "6FORMA" THEN 02566000
|
|
BEGIN SWITCHIT(FORMATBIT); GO AGAIN; END; 02567000
|
|
GO WHATISIT; 02568000
|
|
LENGTH7: 02569000
|
|
IF Q = "7INCLU" THEN %107-02570000
|
|
BEGIN INCLUDECARD; GO EXIT; END; %107-02571000
|
|
% IF Q = "7INCLN" THEN 02572000
|
|
% BEGIN SWITCHIT(NEWINCLBIT); GO AGAIN; END; 02573000
|
|
LENGTH8: %106-02574000
|
|
IF Q ="8CODEF" THEN %106-02574100
|
|
BEGIN SWITCHIT(CODEFILEBIT); GO AGAIN; END; %106-02574200
|
|
GO WHATISIT; %106-02574300
|
|
LENGTH9: 02575000
|
|
IF Q = "9INTRI" THEN 02576000
|
|
BEGIN SWITCHIT(INTBIT); GO AGAIN; END; 02577000
|
|
WHATISIT: 02578000
|
|
IF RESULT=3 THEN 02579000
|
|
BEGIN 02580000
|
|
BASENUM:=CONV(ACCUM[1],0,ACCUM[1].[12:6]); 02581000
|
|
TOTALNO:=-10; 02582000
|
|
NEWBASE:=TRUE; 02583000
|
|
GO SKANAGAIN; 02584000
|
|
END; 02585000
|
|
IF RESULT=2 THEN 02586000
|
|
BEGIN 02587000
|
|
IF Q = "1+0000" THEN 02588000
|
|
BEGIN 02589000
|
|
SKAN; 02590000
|
|
IF RESULT=3 THEN 02591000
|
|
ADDVALUE:=CONV(ACCUM[1],0,ACCUM[1].[12:6]) 02592000
|
|
ELSE FLAG(600); % NUMBER EXPECTED. 02593000
|
|
END; 02594000
|
|
GO SKANAGAIN; 02595000
|
|
END; 02596000
|
|
COMMENT DID NOT RECOGNIZE OPTION; 02597000
|
|
IF RESULT!1 THEN % NOT AN IDENTIFIER. 02598000
|
|
BEGIN FLAG(601); GO SKANAGAIN END; 02599000
|
|
SWITCHIT(USEROPINX); % USEROPINX MEANS A USER-DEFINED OPTION. 02600000
|
|
GO AGAIN; 02601000
|
|
EXIT: 02602000
|
|
LISTER:=DEBUGTOG OR LISTOG OR LISTATOG; 02602500
|
|
MOVE(10,DEFINEARRAY[0],ACCUM[0]); % RESTORE INFORMATION FOR 02602600
|
|
COUNT:=SCOUNT; RESULT:=SRESULT; % "TABLE" TO RESUME SCAN. 02602700
|
|
DOLLARTOG:=FALSE; 02603000
|
|
END DOLLARCARD; 02604000
|
|
COMMENT TABLE IS THE ROUTINE THAT MOST CODE IN THE COMPILER 02605000
|
|
USES WHEN IT IS DESIRED TO SCAN ANOTHER LOGICAL QUANTITY. 02606000
|
|
THE RESULT RETURNED IS THE CLASS OF THE ITEM DESIRED. 02607000
|
|
TABLE MAINTAINS THE VARIABLES I AND NXTELBT AND THE ARRAY 02608000
|
|
ELBAT. ELBAT AND I ARE PRINCIPAL VARIABLES USED FOR 02609000
|
|
COMUNICATION BETWEEN TABLE AND THE OUTSIDE WORLD. NXTELBT 02610000
|
|
IS ALMOST EXCLUSIVELY USED BY TABLE, ALTHOUGH AN OCCASION- 02611000
|
|
AL OTHER USE IS MADE IN ORDER TO FORGET THAT SOMETHING WAS 02612000
|
|
SCANNED. (SEE, FOR EXAMPLE, COMPOUNDTAIL). FOR FURTHER 02613000
|
|
GENERAL DISCUSSION SEE THE DECLARATION OF THESE VARIABLES. 02614000
|
|
THE PARAMETER P IS THE ACTUAL INDEX OF THE QUANTITY 02615000
|
|
DESIRED (USUALLY I-1,I, OR I+1). 02616000
|
|
THE GENERAL PLAN OF TABLE IS THIS: 02617000
|
|
I) IF P < NXTELBAT GO ON TO III). 02618000
|
|
II) PROCESS ONE QUANTITY. 02619000
|
|
A) SCAN. 02620000
|
|
B) TEST FOR IDENTIFIER, NUMBER, OR SPECIAL CHARACTER. 02621000
|
|
1) IDENTIFIER - LOOKUP IN DIRECTORY AND PROCESS 02622000
|
|
IN SPECIAL MANNER IF COMMENT OR DEFINED ID. 02623000
|
|
2) NUMBER - PROCESS INTEGER PART, FRACTIONAL PART, 02624000
|
|
AND EXPONENT PART. 02625000
|
|
3) TEST IF SPECIAL CHARACTER REQUIRES SPECIAL 02626000
|
|
PROCESSING - OTHERWISE GET ELBAT WORD FROM 02627000
|
|
SPECIAL. 02628000
|
|
C) LOAD ELBAT AND INCREMENT NXTELBT. 02629000
|
|
D) IF ELBAT IS FULL ADJUST ELBAT, NXTELBT, I, AND P. 02630000
|
|
E) GO BACK TO I). 02631000
|
|
III) RETURN WITH CLASS OF ELBAT[P]. 02632000
|
|
FURTHER DETAILS ARE GIVEN IN BODY OF TABLE. 02633000
|
|
; 02634000
|
|
INTEGER PROCEDURE TABLE(P); VALUE P; INTEGER P; 02635000
|
|
BEGIN 02636000
|
|
LABEL PERCENT,SPECIALCHAR,COMPLETE,COLON,DOT,ATSIGN,QUOTE, 02637000
|
|
STRNGXT,MOVEIT,ARGH,FINISHNUMBER, 02638000
|
|
SCANAGAIN,FPART,EPART,IPART,IDENT,ROSE,COMPOST,DOLLAR,RTPAREN,02639000
|
|
CROSSHATCH, DBLDOLLAR; 02640000
|
|
SWITCH SPECIALSWITCH:=PERCENT,DOLLAR,DOT,ATSIGN,COLON,QUOTE, 02641000
|
|
RTPAREN,CROSSHATCH,DBLDOLLAR; 02642000
|
|
SWITCH RESULTSWITCH:=IDENT,SPECIALCHAR,IPART; 02643000
|
|
WHILE P } NXTELBT 02644000
|
|
DO BEGIN 02645000
|
|
SCANAGAIN: 02646000
|
|
COUNT:=RESULT:=ACCUM[1]:=0; SCANNER; 02647000
|
|
GO RESULTSWITCH[RESULT]; 02648000
|
|
ARGH: 02649000
|
|
Q:=ACCUM[1]; FLAG(141); GO SCANAGAIN; 02650000
|
|
SPECIALCHAR: 02651000
|
|
GT1:=ACCUM[1].[18:6] - 2; 02652000
|
|
ENDTOG:=GT1 = 57 AND ENDTOG; 02653000
|
|
COMMENT OBTAIN ACTUAL CHARACTER FROM ACCUM; 02654000
|
|
T:=SPECIAL[GT1>1[42:41:3]]; 02655000
|
|
COMMENT NOTICE COMPRESSION TECHNIQUE USED TO SHORTEN TABLE OF 02656000
|
|
ELBAT WORDS FOR SPECIAL CHARACTERS; 02657000
|
|
IF GT1:=T.INCR = 0 THEN GO COMPLETE; 02658000
|
|
GO SPECIALSWITCH[GT1]; 02659000
|
|
COMMENT INCR FIELD OF SPECIAL CHARACTER IS NON-ZERO FOR SPECIAL 02660000
|
|
CHARACTERS REQUIRING SPECIAL HANDLING. INCR IS SWITCHED 02661000
|
|
ON TO OBTAIN DISCRIMINATION; 02662000
|
|
COLON: RESULT:=7; SCANNER; COMMENT ELIMINATE BLANKS - CHECKING 02663000
|
|
FOR := IN PLACE OF ~ ; 02664000
|
|
IF EXAMIN (NCR) = "=" THEN 02665000
|
|
BEGIN RESULT:=0; SCANNER; T:=SPECIAL[13] END; 02666000
|
|
RESULT:=2; GO COMPLETE; 02667000
|
|
DOT: 02668000
|
|
IF EXAMIN(NCR)>9 OR ENDTOG THEN GO COMPLETE; 02680000
|
|
NHI:=NLO:=0; 02681000
|
|
C:=0; FSAVE:=0; GO FPART; 02682000
|
|
ATSIGN: 02683000
|
|
% RESULT:=0; SCANNER; 02684000
|
|
% IF COUNT>17 THEN GO ARGH; 02685000
|
|
% IF OCTIZE(ACCUM[1],COUNT-1,17-COUNT,C) THEN GO ARGH 02686000
|
|
% ELSE GO NUMBEREND; 02687000
|
|
NHI:=C:=1; NLO:=FSAVE:=0; GO EPART; 02688000
|
|
COMMENT DOT AND ATSIGN ENTER NUMBER CONVERSION AT CORRECT SPOT; 02689000
|
|
QUOTE: 02690000
|
|
COUNT := 0; T := IF STREAMTOG THEN 63 ELSE 8; %111-02691000
|
|
% 02692000
|
|
% 02692500
|
|
DO BEGIN 02693000
|
|
RESULT:=5; SCANNER; 02694000
|
|
IF COUNT=T THEN 02695000
|
|
IF EXAMIN(NCR) ! """ THEN GO ARGH; 02696000
|
|
END UNTIL EXAMIN(NCR) = """; 02697000
|
|
IF NOT STREAMTOG AND COUNT=8 AND BOOLEAN(ACCUM[1].[18:1]) THEN 02697500
|
|
BEGIN Q := ACCUM[1]; FLAG(254); GO TO SCANAGAIN; END; %111-02697600
|
|
Q:=ACCUM[1]; RESULT:=5; SCANNER; COUNT:=COUNT-1; 02698000
|
|
IF COUNT<0 THEN COUNT:=COUNT+64; 02699000
|
|
ACCUM[1]:=Q; RESULT:=4; 02700000
|
|
STRNGXT: T:=C:=0; 02701000
|
|
T.CLASS:=STRNGCON; 02702000
|
|
IF COUNT < 8 OR (COUNT = 8 AND NOT BOOLEAN %111-02703000
|
|
(ACCUM[1].[18:1])) THEN % FLAG BIT NOT SET, FULL WORD CONST. 02703050
|
|
MOVEIT: 02704000
|
|
MOVECHARACTERS(COUNT,ACCUM[1],3,C,8-COUNT) 02705000
|
|
ELSE T.CLASS:=STRING; 02705100
|
|
T.INCR:=COUNT; GO COMPLETE; 02705200
|
|
% 02706000
|
|
COMMENT CROSSHATCH HANDLES TWO SITUATIONS: 02707000
|
|
THE CROSSHATCH AT END OF DEFINE DECLARATIONS AND 02708000
|
|
THE CROSSHATCH AT END OF ALPHA REPRESENTING DEFINED IDS. 02709000
|
|
THE TWO CASES ARE PROCESSED DIFFERENTLY. THE FIRST CASE 02710000
|
|
MERELY PLACES THE CROSSHATCH IN ELBAT. THE SECOND CASE 02711000
|
|
CAUSES AN EXIT FROM SCANNING THE ALPHA FOR THE DEFINED ID. 02712000
|
|
FOR A FULL DISCUSSION SEE DEFINEGEN; 02713000
|
|
CROSSHATCH: 02714000
|
|
IF DEFINECTR!0 THEN GO COMPLETE; 02715000
|
|
PUTSEQNO(GT1,LCR); 02716000
|
|
TURNONSTOPLIGHT(0,LCR); 02717000
|
|
IF DEFINEINDEX = 0 THEN GO ARGH; 02718000
|
|
LCR:=(GT1:=DEFINEARRAY[DEFINEINDEX-1]) DIV 262144; 02719000
|
|
NCR:=GT1 MOD 262144; 02720000
|
|
LASTUSED:=(T:=DEFINEARRAY[DEFINEINDEX:=DEFINEINDEX-3]).[33:15];02721000
|
|
IF (GT2 := T.[18:15]) ! 0 THEN % THIS WAS A PARAMETRIC DEFINE 02721500
|
|
BEGIN % PURGING PARAMETERS FROM DEFSTACKHEAD %122-02722000
|
|
GT2 := TAKE(GT2).LINK; % GET POINTER TO NEW DEFSTACKHEAD 02722500
|
|
DO %122-02723000
|
|
PUT(TEXT[(NEXTTEXT:=(GT1:=TAKE(DEFSTACKHEAD)).DYNAM-1) 02723500
|
|
.LINKR,NEXTTEXT.LINKC],DEFSTACKHEAD) %122-02724000
|
|
% THIS RESTORES THE PREVIOUS ELBAT WORD FOR %122-02724500
|
|
% THIS PARAMETER IN CASE OF NESTED DEFINE. %122-02725000
|
|
UNTIL %122-02725500
|
|
GT2 = (DEFSTACKHEAD := GT1.LINK); %122-02726000
|
|
END; %122-02727000
|
|
GO SCANAGAIN; 02728000
|
|
DOLLAR: COMMENT THIS CODE HANDLES CONTROL CARDS; 02729000
|
|
IF GT1:=EXAMIN(NCR)="$" THEN GO DBLDOLLAR ELSE DOLLARCARD; 02730000
|
|
PERCENT: IF NCR ! FCR THEN READACARD; 02731000
|
|
IF LIBINDEX!0 THEN 02732000
|
|
IF RECOUNT=FINISHPT THEN 02733000
|
|
BEGIN 02734000
|
|
SEARCHLIB(FALSE); READACARD; NORELEASE:=FALSE 02735000
|
|
END; 02736000
|
|
GO SCANAGAIN; 02737000
|
|
COMMENT MOST PERCENT SIGNS ACTING AS END OF CARD SENTINELS GET TO 02738000
|
|
PERCENT. PERCENT READS THE NEXT CARD AND STARTS OVER. A 02739000
|
|
SIDE EFFECT IS THAT ALL CHARACTERS ON A CARD ARE IGNORED 02740000
|
|
AFTER A FREE PERCENT SIGN (ONE NOT IMBEDDED IN A STRING OR 02741000
|
|
COMMENT); 02742000
|
|
COMMENT MIGHT BE FUNNY COMMA - HANDLE HERE; 02743000
|
|
RTPAREN: RESULT:=7; SCANNER; 02744000
|
|
IF EXAMIN(NCR) = """ THEN 02745000
|
|
BEGIN 02746000
|
|
RESULT:=0; SCANNER; 02747000
|
|
DO BEGIN 02748000
|
|
RESULT:=5; SCANNER 02749000
|
|
END UNTIL EXAMIN(NCR) = """; 02750000
|
|
RESULT:=0; SCANNER; 02751000
|
|
RESULT:=7; SCANNER; 02752000
|
|
IF EXAMIN(NCR) ! "(" THEN GO ARGH; 02753000
|
|
RESULT:=0; SCANNER; Q:=ACCUM[1]; 02754000
|
|
T:=SPECIAL[24] 02755000
|
|
END; 02756000
|
|
RESULT:=2; GO COMPLETE; 02757000
|
|
IPART: TCOUNT:=FSAVE:=0; C:=CONVERT; 02758000
|
|
RESULT:=7; SCANNER; % DEBLANK. 02759000
|
|
IF DEFINECTR=0 THEN 02760000
|
|
IF (C=3 OR C=4) AND EXAMIN(NCR)=""" THEN %OCTAL OR HEX STRING.02761000
|
|
IF NOT (ACCUM[0].CLASS=FILEID AND INFO[LASTINFO. % 1641 02761500
|
|
LINKR, LASTINFO.LINKC] = ACCUM[0])THEN % 1641 02761501
|
|
BEGIN INTEGER SIZ; 02762000
|
|
RESULT:=5; SCANNER; % SKIP QUOTE. 02763000
|
|
COUNT:=0; 02764000
|
|
DO BEGIN 02765000
|
|
RESULT:=5; SCANNER; 02766000
|
|
IF COUNT > SIZ:=48 DIV C THEN % > 1 WORD LONG. 02767000
|
|
BEGIN ERR(520); GO SCANAGAIN END; 02768000
|
|
END UNTIL EXAMIN(NCR)="""; 02769000
|
|
Q:=ACCUM[1]; RESULT:=5; SCANNER; COUNT:=COUNT-1; 02770000
|
|
IF C=3 THEN % OCTAL STRING. 02771000
|
|
IF OCTIZE(ACCUM[1],ACCUM[4],16-COUNT,COUNT) THEN 02772000
|
|
FLAG(521) % NON-OCTAL CHARACTER IN STRING. 02773000
|
|
ELSE ELSE IF HEXIZE(ACCUM[1],ACCUM[4],12-COUNT,COUNT) THEN 02774000
|
|
FLAG(521); % NON-HEX CHARACTER IN HEX STRING. 02775000
|
|
T.INCR := COUNT := (C|COUNT-1)DIV 6 + 1; % # OF CHARS. 02776100
|
|
T.CLASS:= STRNGCON; %111-02776200
|
|
MOVECHARACTERS(1,ACCUM[4],0,ACCUM[1],3); %111-02776300
|
|
IF BOOLEAN(ACCUM[1].[18:1]) THEN % FLAG BIT SET. %111-02776400
|
|
IF STREAMTOG THEN %111-02776500
|
|
T.CLASS := STRING %111-02776600
|
|
ELSE %111-02776700
|
|
FLAG(254) %111-02776800
|
|
ELSE %111-02776900
|
|
C := ACCUM[4]; % GET FULL WORD EQUIVALENT OF STRING. 02777000
|
|
MOVECHARACTERS(COUNT,ACCUM[4],8-COUNT,ACCUM[1],3); %111-02777050
|
|
GO TO COMPLETE; %111-02777100
|
|
MOVECHARACTERS(8,ACCUM[4],0,ACCUM[1],3); 02781000
|
|
GO COMPLETE; 02782000
|
|
END OCTAL OR HEX STRING; 02783000
|
|
IF DPTOG THEN 02784000
|
|
BEGIN NHI:=THI; NLO:=TLO; END; 02785000
|
|
IF EXAMIN(NCR)="." THEN 02786000
|
|
BEGIN 02787000
|
|
RESULT:=0; SCANNER; 02788000
|
|
C:=1.0| C; 02789000
|
|
FPART: TCOUNT:=COUNT; 02790000
|
|
IF EXAMIN(NCR){9 THEN 02791000
|
|
BEGIN 02792000
|
|
RESULT:=0; SCANNER; 02793000
|
|
IF DPTOG THEN 02794000
|
|
BEGIN 02795000
|
|
DOUBLE(CONVERT,TLO,TEN[(COUNT-TCOUNT)MOD 12], 02796000
|
|
0,/,:=,THI,TLO); 02797000
|
|
FOR T:=12 STEP 12 UNTIL COUNT - TCOUNT DO 02798000
|
|
DOUBLE(THI,TLO,TEN[12],0,/,:=,THI,TLO); 02799000
|
|
DOUBLE(THI,TLO,NHI,NLO,+,:=,NHI,NLO); 02800000
|
|
C:=NHI 02801000
|
|
END 02802000
|
|
ELSE C:=CONVERT+C|TEN[FSAVE:=COUNT-TCOUNT]; 02803000
|
|
END 02804000
|
|
END; 02805000
|
|
RESULT:=7; SCANNER; 02806000
|
|
IF EXAMIN(NCR)="@" THEN 02807000
|
|
BEGIN 02808000
|
|
RESULT:=0; SCANNER; 02809000
|
|
EPART: TCOUNT:=COUNT; 02810000
|
|
C:=C|1.0; 02811000
|
|
RESULT:=7; SCANNER; 02812000
|
|
IF T:=EXAMIN(NCR)>9 THEN 02813000
|
|
IF T="-" OR T = "+" THEN 02814000
|
|
BEGIN 02815000
|
|
RESULT:=0; SCANNER; 02816000
|
|
TCOUNT:=COUNT; 02817000
|
|
END 02818000
|
|
ELSE FLAG(47); 02819000
|
|
RESULT:=0; SCANNER; 02820000
|
|
IF RESULT ! 3 THEN FLAG (47); COMMENT NOT A NUMBER; 02821000
|
|
Q:=ACCUM[1]; 02822000
|
|
IF GT1:=T:=(IF T="-"THEN -CONVERT ELSE CONVERT)<-46 OR 02823000
|
|
T>69 THEN FLAG(269) 02824000
|
|
ELSE BEGIN 02825000
|
|
T:=TEN[ABS(GT3:=T-FSAVE)]; 02826000
|
|
IF ABS(0&C[42:3:6]&C[1:2:1]+0&T[42:3:6]>3[1:1:1] 02827000
|
|
+ 12) >63 THEN FLAG(269) 02828000
|
|
ELSE IF DPTOG THEN 02829000
|
|
IF GT1<0 THEN 02830000
|
|
BEGIN 02831000
|
|
GT1:=-GT1; 02832000
|
|
DOUBLE(NHI,NLO,TEN[GT1 MOD 12],0,/,:=,NHI,NLO); 02833000
|
|
FOR GT2:=12 STEP 12 UNTIL GT1 DO 02834000
|
|
DOUBLE(NHI,NLO,TEN[12],0,/,:=,NHI,NLO); 02835000
|
|
END 02836000
|
|
ELSE BEGIN 02837000
|
|
DOUBLE(NHI,NLO,TEN[GT1 MOD 12],0,|,:=,NHI,NLO); 02838000
|
|
FOR GT2:=12 STEP 12 UNTIL GT1 DO 02839000
|
|
DOUBLE( NHI,NLO,TEN[12],0,|,:=,NHI,NLO); 02840000
|
|
END 02841000
|
|
ELSE C:=IF GT3<0 THEN C/T ELSE C|T; 02842000
|
|
END; 02843000
|
|
END 02844000
|
|
ELSE IF FSAVE ! 0 THEN C:=C/TEN[FSAVE]; 02845000
|
|
Q:=ACCUM[1]; RESULT:=3; 02846000
|
|
FINISHNUMBER: 02847000
|
|
T:=0; 02848000
|
|
IF C.[1:37]=0 THEN 02849000
|
|
BEGIN T.CLASS:=LITNO ; T.ADDRESS:=C END 02850000
|
|
ELSE T.CLASS:=NONLITNO ; 02851000
|
|
GO COMPLETE; 02852000
|
|
COMMENT THE CODE BETWEEN IDENT AND COMPOST DOES A LOOKUP IN INFO. 02853000
|
|
IF QUANTITY IS NOT FOUND THE ELBAT WORD EXPECTS TO BE 02854000
|
|
ZERO. THE SCRAMBLE FOR APPROPRIATE STACK IS FIRST THING 02855000
|
|
TO BE DONE. THEN A CHECK IS MADE, USING SUPERSTACK. 02856000
|
|
TO DETERMINE WHETHER THE IDENTIFIER IS ONE OF OUR 02857000
|
|
COMMON RESERVED WORDS. IF IT IS, EXIT IS MADE TO 02858000
|
|
COMPLETE, OTHERWISE THE LOOP BETWEEN COMPOST AND 02859000
|
|
ROSE IS ENTERED. THE LAST THING DONE FOR ANY 02860000
|
|
IDENTIFIER WHICH IS FOUND IS TO STUFF THE LOCATION 02861000
|
|
OF THE ELBATWORD IN INFO INTO THE LINK FIELD. THIS 02862000
|
|
ALLOWS REFERENCE BACK TO INFO FOR ADDITIONAL DATA, 02863000
|
|
SHOULD THIS BE REQUIRED. ; 02864000
|
|
IDENT: IF T:=SUPERSTACK[SCRAM:=(Q:=ACCUM[1])MOD 125]!0 THEN 02865000
|
|
BEGIN 02866000
|
|
IF INFO[GT1:=T.LINKR,(GT2:=T.LINKC)+1]=Q THEN 02867000
|
|
BEGIN 02868000
|
|
T:=INFO[GT1,GT2]&T[35:35:13]; 02869000
|
|
GO COMPLETE 02870000
|
|
END 02871000
|
|
END; 02872000
|
|
IF EXAMINELAST(ACCUM[1], COUNT+2) = 12 THEN T:=DEFSTACKHEAD 02873000
|
|
ELSE T:=STACKHEAD[SCRAM]; 02874000
|
|
ROSE: GT1:=T.LINKR; 02875000
|
|
IF(GT2:=T.LINKC)+GT1= 0 THEN 02876000
|
|
BEGIN T:=0; GO COMPLETE END; 02877000
|
|
IF T = INFO[GT1, GT2] THEN BEGIN %101-02877010
|
|
T:= 0; GO TO COMPLETE END; %101-02877020
|
|
T:=INFO[GT1,GT2]; 02878000
|
|
IF INFO[GT1,GT2+1]&0[1:1:11] ! Q THEN GO ROSE; 02879000
|
|
IF COUNT { 5 THEN GO COMPOST ; 02880000
|
|
IF NOT EQUAL(COUNT-5,ACCUM[2],INFO[GT1,GT2+2])THEN GO ROSE; 02881000
|
|
COMPOST: T:=T>1[35:43:5]>2[40:40:8]; 02882000
|
|
IF GT1 !1 AND NOT MACROID THEN % NOT RESERVED WORD %116-02882100
|
|
XREFIT(T.LINK,CARDNUMBER,NORMALREF); % BUILD XREF ENTRY %116-02882200
|
|
COMMENT CHECK HERE FOR COMMENTS AND DEFINED IDS; 02883000
|
|
IF NOT ENDTOG THEN 02884000
|
|
BEGIN 02885000
|
|
IF GT1:=T.CLASS = COMMENTV THEN 02886000
|
|
BEGIN 02887000
|
|
WHILE EXAMIN(NCR) ! ";" DO 02888000
|
|
BEGIN RESULT:=6; COUNT:=0; SCANNER END; 02889000
|
|
RESULT:=0;SCANNER;GO SCANAGAIN 02890000
|
|
END 02891000
|
|
END; 02892000
|
|
IF STOPDEFINE THEN GO COMPLETE; 02893000
|
|
IF GT1 ! DEFINEDID THEN GO COMPLETE; 02894000
|
|
COMMENT SETUP FOR DEFINED IDS - SEE DEFINEGEN FOR MORE DETAILS; 02895000
|
|
IF BOOLEAN(T.MON) THEN % THIS IS A PARAMETRIC DEFINE 02896000
|
|
GT1:=GIT(T:=FIXDEFINEINFO(T)) ELSE GT1:=0; 02897000
|
|
IF DEFINEINDEX = 24 THEN 02898000
|
|
BEGIN FLAG(139);GO ARGH END; 02899000
|
|
DEFINEARRAY[DEFINEINDEX]:=LASTUSED & GT1[18:33:15]; 02900000
|
|
LASTUSED:=T.DYNAM; 02901000
|
|
DEFINEARRAY[DEFINEINDEX+2]:=262144|LCR+NCR; 02902000
|
|
LCR:=(NCR:=MKABS(DEFINEARRAY[DEFINEINDEX+1]))+1; 02903000
|
|
PUTSEQNO(GT4,LCR); 02904000
|
|
TURNONSTOPLIGHT("%",LCR); DEFINEINDEX:=DEFINEINDEX+3; 02905000
|
|
GO PERCENT; 02906000
|
|
DBLDOLLAR: 02907000
|
|
MAKCAST; GO SCANAGAIN; 02908000
|
|
COMPLETE: 02909000
|
|
ELBAT[NXTELBT]:=T; 02910000
|
|
IF NOT DEFINING THEN 02910100
|
|
IF T.CLASS = BEGINV THEN 02910200
|
|
BEGINSTACK[BSPOINT:=BSPOINT+1]:=CARDNUMBER ELSE 02910300
|
|
IF T.CLASS = ENDV THEN 02910400
|
|
BEGIN 02910500
|
|
IF LISTER THEN IF BEND THEN BEGINPRINT; 02910600
|
|
BSPOINT:=BSPOINT - REAL(BSPOINT > 0); % PREVENT INVALID INDEX 02910700
|
|
END; 02910800
|
|
STOPDEFINE:=FALSE; COMMENT ALLOW DEFINES AGAIN; 02911000
|
|
IF NXTELBT:=NXTELBT+1 > 74 THEN 02912000
|
|
IF NOT MACROID THEN 02913000
|
|
BEGIN 02914000
|
|
COMMENT ELBAT IS FULL: ADJUST IT; 02915000
|
|
MOVE(10,ELBAT[65],ELBAT); 02916000
|
|
I:=I-65; P:=P-65; NXTELBT:=10; 02917000
|
|
END 02918000
|
|
END; 02919000
|
|
IF TABLE:=ELBAT[P].CLASS = COMMENTV THEN 02920000
|
|
BEGIN 02921000
|
|
COMMENT SPECIAL HANDLING OF CONSTANTS FOR SAKE OF FOR STATEMENTS; 02922000
|
|
C:=INFO[0,ELBAT[P].ADDRESS]; 02923000
|
|
ELBAT[P].CLASS:=TABLE:=NONLITNO 02924000
|
|
END; 02925000
|
|
STOPDEFINE:=FALSE; COMMENT ALLOW DEFINE; 02926000
|
|
END TABLE ; 02927000
|
|
INTEGER PROCEDURE MOVEANDBLOCK(FROM,SIZE,NAME); %106-02927100
|
|
VALUE SIZE,NAME; REAL SIZE,NAME; ARRAY FROM [0,0]; %106-02927110
|
|
BEGIN %106-02927120
|
|
INTEGER NSEGS,I,J,K; %106-02927130
|
|
ARRAY A[0:14]; %106-02927140
|
|
SWITCH FORMAT FMT := %106-02927150
|
|
(/,"FILE PARAMETER BLOCK IS CODE FILE SEGMENT",I5,/), %106-02927160
|
|
(/,"SEGMENT DICTIONARY IS CODE FILE SEGMENT",I5,/), %106-02927170
|
|
(/,"PROGRAM-LINE DICTIONARY IS CODE FILE SEGMENT",I5,/), %106-02927180
|
|
(/,"PROGRAM REFERENCE TABLE IS CODE FILE SEGMENT",I5,/), %106-02927190
|
|
(/,"SEGMENT-LINE DICTIONARY IS CODE FILE SEGMENT",I5,/), %106-02927200
|
|
(/,"POWER OF TEN ARRAY IS CODE FILE SEGMENT",I5,/), %106-02927210
|
|
(/,"SEGMENT ZERO",I*,/), %106-02927220
|
|
(/,"SEGMENT NUMBER",I5," IS CODE FILE SEGMENT",I5,/); %106-02927230
|
|
STREAM PROCEDURE OCTALWORDS(N,W,S,D); VALUE N,W; %106-02927240
|
|
BEGIN %106-02927250
|
|
DI:=D; DS:=LIT" "; %106-02927260
|
|
SI:=LOC N; SI:=SI+6; %106-02927270
|
|
4(DS:=3 RESET; 3(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB)); 02927272
|
|
DI:=DI-4; DS:=3 FILL; %106-02927280
|
|
DI:=D; DI:=DI+5; DS:=4 LIT" "; %106-02927290
|
|
SI:=S; %106-02927300
|
|
W(2(8(DS:=3 RESET; %106-02927310
|
|
3(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB); %106-02927320
|
|
); %106-02927330
|
|
DS:=LIT" "); %106-02927340
|
|
DS:=2 LIT" "); %106-02927350
|
|
END OF OCTALWORDS; %106-02927360
|
|
%********** S T A R T ********** %106-02927370
|
|
NSEGS:=(SIZE+29) DIV 30; %106-02927380
|
|
IF DA DIV CHUNK < T:=(DA+NSEGS) DIV CHUNK THEN %106-02927390
|
|
DA:=CHUNK|T; %106-02927400
|
|
MOVEANDBLOCK:=DA; %106-02927410
|
|
IF CODEFILE THEN %106-02927420
|
|
IF NAME}0 THEN %106-02927430
|
|
WRITE(LINE,FMT[NAME],DA) %106-02927440
|
|
ELSE %106-02927450
|
|
WRITE(LINE,FMT[7],ABS(NAME),DA); %106-02927460
|
|
IF SIZE!0 THEN %106-02927470
|
|
BEGIN %106-02927480
|
|
FOR J:=0 STEP 30 WHILE J < SIZE DO %106-02927490
|
|
BEGIN %106-02927500
|
|
IF (K:=(128-(J MOD 128))) < 30 THEN %106-02927510
|
|
BEGIN %106-02927520
|
|
MOVE(K,FROM[J DIV 128,J MOD 128],CODE(0)); %106-02927530
|
|
MOVE(30-K,FROM[(J DIV 128)+1,0],CODE(K)); %106-02927540
|
|
END %106-02927550
|
|
ELSE %106-02927560
|
|
MOVE(30,FROM[J DIV 128,J MOD 128],CODE(0)); %106-02927570
|
|
IF J+30 > SIZE THEN % ZERO OUT UNUSED SECTION %106-02927580
|
|
BEGIN %106-02927590
|
|
K:=0; %106-02927600
|
|
MOVE(1,K,CODE(SIZE-J)); %106-02927610
|
|
IF (SIZE-J) < 29 THEN % MORE THAN ONE WORD %106-02927612
|
|
MOVE(29-SIZE+J,CODE(SIZE-J),CODE(SIZE-J+1)); %106-02927620
|
|
END; %106-02927630
|
|
IF CODEFILE THEN %106-02927640
|
|
BEGIN %106-02927650
|
|
FOR K:=0 STEP 5 WHILE K{25 AND (J+K){SIZE DO %106-02927660
|
|
BEGIN %106-02927670
|
|
BLANKET(14,A); %106-02927680
|
|
OCTALWORDS(J+K,IF (J~K+5){SIZE THEN 5 ELSE %106-02927690
|
|
SIZE-J-K,CODE(K),A); %106-02927700
|
|
WRITE(LINE,15,A[*]); %106-02927710
|
|
END; %106-02927720
|
|
WRITE(LINE); %106-02927722
|
|
END; %106-02927730
|
|
WRITE(CODE[DA]); DA:=DA+1; %106-02927740
|
|
END; %106-02927750
|
|
END; %106-02927760
|
|
END OF MOVEANDBLOCK; %106-02927770
|
|
COMMENT NEXTENT IS THE PROCEDURE WHICH SCANS FOR THE FORMAT GENERATOR. 02928000
|
|
IT USES THE SAME SCANNER AS THE TABLE ROUTINE. NEXTENT 02929000
|
|
PLACES EITHER A CHARACTER OR A CONVERTED NUMBER WITH A 02930000
|
|
NEGATIVE SIGN IN ELCLASS. NEXTENT SUPPRESSES BLANKS; 02931000
|
|
PROCEDURE NEXTENT; 02932000
|
|
BEGIN LABEL DEBLANK; 02933000
|
|
COUNT:=ACCUM[1]:=0; LASTELCLASS:=ELCLASS; 02934000
|
|
DEBLANK: 02935000
|
|
IF EXAMIN(NCR)=" "THEN 02936000
|
|
BEGIN 02937000
|
|
RESULT:=7; SCANNER; 02938000
|
|
END; 02939000
|
|
IF EXAMIN(NCR) { 9 THEN % WE HAVE A NO. (WORD MODE COLLATING SEQ.) 02940000
|
|
BEGIN 02941000
|
|
RESULT:=3; SCANNER; TCOUNT:=0; Q:=ACCUM[1]; 02942000
|
|
IF COUNT>4 THEN FLAG(140) % INTEGER > 1023. 02943000
|
|
ELSE IF ELCLASS:=-CONVERT < -1023 THEN FLAG(140) % INTEGER > 1023. 02944000
|
|
END 02945000
|
|
ELSE IF EXAMIN(NCR)="%" THEN 02946000
|
|
BEGIN 02947000
|
|
READACARD; COUNT:=ACCUM[1]:=0; GO DEBLANK; 02948000
|
|
END 02949000
|
|
ELSE BEGIN 02950000
|
|
RESULT:=5; SCANNER; % GET NEXT CHARACTER. 02951000
|
|
Q:=ACCUM[1]; ELCLASS:=ACCUM[1].[18:6] 02952000
|
|
END 02953000
|
|
END OF NEXTENT; 02954000
|
|
BOOLEAN PROCEDURE BOOLPRIM; FORWARD; 02955000
|
|
PROCEDURE BOOLCOMP(B); BOOLEAN B; FORWARD; 02955500
|
|
INTEGER PROCEDURE NEXT; 02956000
|
|
BEGIN 02956500
|
|
LABEL EXIT; 02957000
|
|
INTEGER T; 02957500
|
|
DEFINE ERROR = BEGIN FLAG(603); GO EXIT END#; 02958000
|
|
SKAN; 02958500
|
|
IF RESULT=3 THEN ERROR; % NUMBERS NOT ALLOWED. 02959000
|
|
IF RESULT=2 THEN % SPECIAL CHARACTER. 02959500
|
|
BEGIN 02960000
|
|
T:=IF Q="1,0000" OR Q="1%0000" THEN 20 % FAKE OUT BOOLEXP.02960500
|
|
ELSE ((T:=Q.[18:6]-2) & T[42:41:3]); 02961000
|
|
IF T=11 OR T=19 OR T=20 THEN BATMAN:=SPECIAL[T] % (,),OR ;02961500
|
|
ELSE FLAG(603); 02962000
|
|
GO EXIT 02962500
|
|
END SPECIAL CHARACTERS; 02963000
|
|
COMMENT LOOK FOR BOOLEAN OPERATORS, THEN OPTIONS; 02963500
|
|
T:= IF Q="3NOT00" THEN NOTOP 02964000
|
|
ELSE IF Q="3AND00" THEN ANDOP 02964500
|
|
ELSE IF Q="2OR000" THEN OROP 02965000
|
|
ELSE IF Q="3EQV00" THEN EQVOP 02965500
|
|
ELSE 0; 02966000
|
|
IF T!0 THEN BATMAN.CLASS:=T 02966500
|
|
ELSE BATMAN:=1 & BOOID[2:7] & REAL(FINDOPTION(1))[1:1]; % OPTION. 02967000
|
|
EXIT: 02967500
|
|
NEXT:=MYCLASS:=BATMAN.CLASS; 02968000
|
|
END NEXT; 02968500
|
|
BOOLEAN PROCEDURE BOOLEXP; 02969000
|
|
BEGIN 02969500
|
|
BOOLEAN B; 02970000
|
|
B:=BOOLPRIM; 02970500
|
|
WHILE MYCLASS}EQVOP AND MYCLASS{ANDOP DO BOOLCOMP(B); 02971000
|
|
BOOLEXP:=B 02971500
|
|
END BOOLEXP; 02972000
|
|
BOOLEAN PROCEDURE BOOLPRIM; 02972500
|
|
BEGIN 02973000
|
|
BOOLEAN B,KNOT; 02973500
|
|
DEFINE SKIPIT = MYCLASS:=NEXT #; 02974000
|
|
IF KNOT:=(NEXT=NOTOP) THEN SKIPIT; 02974500
|
|
IF MYCLASS=LEFTPAREN THEN 02975000
|
|
BEGIN 02975500
|
|
B:=BOOLEXP; 02976000
|
|
IF MYCLASS!RTPAREN THEN FLAG(604); 02976500
|
|
END 02977000
|
|
ELSE IF MYCLASS!BOOID THEN FLAG(601) 02977500
|
|
ELSE B:=BATMAN<0; 02978000
|
|
IF KNOT THEN B:=NOT B; SKIPIT; 02978500
|
|
BOOLPRIM:=B 02979000
|
|
END BOOLPRIM; 02979500
|
|
PROCEDURE BOOLCOMP(B); BOOLEAN B; 02980000
|
|
BEGIN 02980500
|
|
REAL OPCLASS; 02981000
|
|
BOOLEAN T; 02981500
|
|
OPCLASS:=MYCLASS; 02982000
|
|
T:=BOOLPRIM; 02982500
|
|
WHILE OPCLASS<MYCLASS DO BOOLCOMP(T); 02983000
|
|
B:= IF OPCLASS=ANDOP THEN (B AND T) 02983500
|
|
ELSE IF OPCLASS=OROP THEN (B OR T) 02984000
|
|
ELSE (B EQV T); 02984500
|
|
END BOOLCOMP; 02985000
|
|
% 02985500
|
|
COMMENT#################################################################02986000
|
|
FORWARD DECLARATIONS 02986500
|
|
#######################################################################;02987000
|
|
% 02987500
|
|
PROCEDURE AEXP; FORWARD; 03001000
|
|
PROCEDURE ARITHSEC; FORWARD; 03002000
|
|
PROCEDURE SIMPARITH; FORWARD; 03003000
|
|
PROCEDURE ARITHCOMP; FORWARD; 03004000
|
|
PROCEDURE PRIMARY; FORWARD; 03005000
|
|
PROCEDURE BEXP; FORWARD; 03006000
|
|
INTEGER PROCEDURE EXPRSS; FORWARD; 03007000
|
|
INTEGER PROCEDURE BOOSEC; FORWARD; 03008000
|
|
PROCEDURE SIMPBOO; FORWARD; 03009000
|
|
PROCEDURE BOOCOMP; FORWARD; 03010000
|
|
INTEGER PROCEDURE BOOPRIM; FORWARD; 03011000
|
|
PROCEDURE RELATION; FORWARD; 03012000
|
|
INTEGER PROCEDURE IFEXP; FORWARD; 03013000
|
|
PROCEDURE PARSE; FORWARD; 03014000
|
|
PROCEDURE DOTIT; FORWARD; 03015000
|
|
PROCEDURE GENGO(ELBATWORD); VALUE ELBATWORD; REAL ELBATWORD; FORWARD; 03016000
|
|
PROCEDURE DEXP; FORWARD; 03017000
|
|
PROCEDURE IFCLAUSE; FORWARD; 03018000
|
|
INTEGER PROCEDURE GET(SYLLABLE);VALUE SYLLABLE; REAL SYLLABLE; FORWARD; 03019000
|
|
INTEGER PROCEDURE GNAT(L); VALUE L; REAL L; FORWARD; 03020000
|
|
PROCEDURE PANA; FORWARD; 03021000
|
|
PROCEDURE IFSTMT; FORWARD; 03022000
|
|
PROCEDURE GOGEN(LABELBAT,BRANCHTYPE); 03023000
|
|
VALUE LABELBAT,BRANCHTYPE; 03024000
|
|
REAL LABELBAT,BRANCHTYPE; FORWARD; 03025000
|
|
BOOLEAN PROCEDURE SIMPGO; FORWARD; 03026000
|
|
PROCEDURE STMT; FORWARD; 03027000
|
|
PROCEDURE EMIT(SYLLABLE); VALUE SYLLABLE; REAL SYLLABLE; FORWARD; 03028000
|
|
PROCEDURE PROCSTMT(FROM); VALUE FROM; BOOLEAN FROM; FORWARD; 03029000
|
|
PROCEDURE STRMPROCSTMT; FORWARD; 03030000
|
|
BOOLEAN PROCEDURE GETINT; FORWARD; 03031000
|
|
INTEGER PROCEDURE DIVIDE(NUMBER,P1,P2); VALUE NUMBER; 03032000
|
|
INTEGER P1,P2,NUMBER; FORWARD; 03033000
|
|
PROCEDURE CONSTANTCLEAN; FORWARD; 03034000
|
|
PROCEDURE SCATTERELBAT; FORWARD; 03035000
|
|
PROCEDURE EMITB(BRANCH,FROM,TOWARDS); VALUE BRANCH,FROM,TOWARDS; 03036000
|
|
INTEGER BRANCH,FROM,TOWARDS; FORWARD; 03037000
|
|
PROCEDURE VARIABLE(FROM); REAL FROM; FORWARD; 03038000
|
|
PROCEDURE IMPFUN; FORWARD; 03039000
|
|
PROCEDURE STREAMSTMT; FORWARD; 03040000
|
|
PROCEDURE SEGMENTSTART;FORWARD; 03041000
|
|
PROCEDURE SEGMENT(SIZE,NO,NOO); 03042000
|
|
VALUE SIZE,NO,NOO; 03043000
|
|
REAL SIZE,NO,NOO; 03044000
|
|
FORWARD; 03045000
|
|
INTEGER PROCEDURE BAE; FORWARD; 03046000
|
|
REAL PROCEDURE PROGDESCBLDR(A,B,C);VALUE A,B,C; REAL A,B,C; FORWARD; 03047000
|
|
PROCEDURE BANA; FORWARD; 03048000
|
|
PROCEDURE EMITNUM(A); VALUE A; REAL A; FORWARD; 03049000
|
|
PROCEDURE EMITD(A,B,T); VALUE A,B,T; INTEGER A,B,T; FORWARD; 03050000
|
|
INTEGER PROCEDURE GETSPACE(S,L); VALUE S,L; 03051000
|
|
INTEGER L; BOOLEAN S; FORWARD; 03051001
|
|
PROCEDURE FORSTMT; FORWARD; 03052000
|
|
03053000
|
|
PROCEDURE E; FORWARD; 03054000
|
|
PROCEDURE ENTRY(TYPE); VALUE TYPE;REAL TYPE; FORWARD; 03055000
|
|
PROCEDURE FORMATGEN;FORWARD; 03056000
|
|
PROCEDURE EXPLICITFORMAT; FORWARD; 03056100
|
|
BOOLEAN PROCEDURE FORMATPHRASE; FORWARD; 03056200
|
|
PROCEDURE PUTNBUMP(P1); VALUE P1; REAL P1; FORWARD; 03057000
|
|
PROCEDURE JUMPCHKNX; FORWARD; 03058000
|
|
PROCEDURE JUMPCHKX; FORWARD; 03059000
|
|
PROCEDURE DBLSTMT; FORWARD; 03060000
|
|
PROCEDURE READSTMT; FORWARD; 03061000
|
|
INTEGER PROCEDURE FILEATTRIBUTEHANDLER(N); VALUE N; REAL N; FORWARD ; 03061010
|
|
PROCEDURE WRITESTMT; FORWARD; 03062000
|
|
PROCEDURE SPACESTMT; FORWARD; 03063000
|
|
PROCEDURE CLOSESTMT; FORWARD; 03064000
|
|
PROCEDURE LOCKSTMT; FORWARD; 03065000
|
|
PROCEDURE RWNDSTMT; FORWARD; 03066000
|
|
PROCEDURE BLOCK(S); VALUE S; BOOLEAN S; FORWARD; 03067000
|
|
PROCEDURE PURGE(STOPPER);VALUE STOPPER;REAL STOPPER;FORWARD; 03068000
|
|
PROCEDURE ENTER(TYPEV); 03069000
|
|
VALUE TYPEV; 03070000
|
|
INTEGER TYPEV; FORWARD; 03071000
|
|
INTEGER PROCEDURE PASSTYPE(P); VALUE P; REAL P; FORWARD; 03074000
|
|
PROCEDURE PASSALPHA(P); VALUE P; REAL P; FORWARD; 03075000
|
|
PROCEDURE LISTELEMENT; FORWARD; 03076000
|
|
REAL PROCEDURE LISTGEN; FORWARD; 03077000
|
|
PROCEDURE UNKNOWNSTMT; FORWARD; 03078000
|
|
PROCEDURE FAULTSTMT; FORWARD; 03079000
|
|
PROCEDURE FAULTDEC; FORWARD; 03080000
|
|
PROCEDURE SORTSTMT; FORWARD; 03081000
|
|
PROCEDURE MERGESTMT; FORWARD; 03082000
|
|
PROCEDURE CASESTMT; FORWARD; 03083000
|
|
PROCEDURE HANDLETHETAILENDOFAREADORSPACESTATEMENT; FORWARD; 03084000
|
|
ALPHA PROCEDURE BUGGER(S); VALUE S; INTEGER S; FORWARD; 03100000
|
|
COMMENT THIS SECTION CONTAINS THE EMITTERS. THEY ARE THE AGENTS WHICH 04000000
|
|
ACTUALLY PRODUCE CODE AND DEBUGING OUTPUT; 04001000
|
|
COMMENT EMITL EMITS A LIT CALL; 04002000
|
|
PROCEDURE EMITL(LITERAL); VALUE LITERAL; INTEGER LITERAL; 04003000
|
|
EMIT(0&LITERAL[36:38:10]); 04004000
|
|
COMMENT EMITO EMIT AN OPERATOR; 04005000
|
|
PROCEDURE EMITO(OPERATOR); VALUE OPERATOR; INTEGER OPERATOR; 04006000
|
|
EMIT(1&OPERATOR[36:38:10]); 04007000
|
|
COMMENT EMITC IS PRIMARILY FOR USE BY STRMSTMT TO EMIT CHARACTOR MODE 04008000
|
|
OPERATORS. HOWEVER IT ALSO HANDLES DIA, DIB, AND TRB; 04009000
|
|
PROCEDURE EMITC(REPEAT,OPERATOR); VALUE REPEAT,OPERATOR; 04010000
|
|
INTEGER REPEAT,OPERATOR; 04011000
|
|
BEGIN 04012000
|
|
IF REPEAT}64 THEN FLAG(268); 04013000
|
|
EMIT(OPERATOR&REPEAT[36:42:6]) END EMITC; 04014000
|
|
COMMENT EMITV EMITS AN OPERAND CALL. IF THE ADDRESS IS FOR THE SECOND 04015000
|
|
HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 04016000
|
|
PROCEDURE EMITV(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; 04017000
|
|
BEGIN IF ADDRESS > 1023 THEN EMITO(PRTE); 04018000
|
|
EMIT(2 & ADDRESS [36:38:10]) END EMITV; 04019000
|
|
COMMENT EMITN EMITS A DESCRIPTOR CALL. IF THE ADDRESS IS FOR THE 04020000
|
|
SECOND HALF OF THE PRT, THEN IT ALSO EMITS A PRTE; 04021000
|
|
PROCEDURE EMITN(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; 04022000
|
|
BEGIN IF ADDRESS > 1023 THEN EMITO(PRTE); 04023000
|
|
EMIT(3 & ADDRESS [36:38:10]) END EMITN; 04024000
|
|
COMMENT EMITPAIR EMITS A LITC ADDRESS FOLLOWED BY OPERATOR. IF THE 04025000
|
|
ADDRESS IS FOR THE SECOND HALF OF THE PRT, THEN IT ALSO 04026000
|
|
EMITS PRTE; 04027000
|
|
PROCEDURE EMITPAIR(ADDRESS,OPERATOR); 04028000
|
|
VALUE ADDRESS,OPERATOR; 04029000
|
|
INTEGER ADDRESS,OPERATOR; 04030000
|
|
BEGIN 04031000
|
|
EMITL(ADDRESS); 04032000
|
|
IF ADDRESS > 1023 THEN EMITO(PRTE); 04033000
|
|
EMITO(OPERATOR) END EMITPAIR; 04034000
|
|
COMMENT EMITUP IS RESPONSIBLE FOR COMPILING THE CODE TO RAISE AN 04035000
|
|
EXPRESSION TO SOME POWER IF THE EXPONENT IS A LITERAL 04036000
|
|
OR A NEGATIVE LITERAL THEN IN LINE CODE IS COMPILED. THIS04037000
|
|
CODE CONSISTS OF A SERIES OF DUPS AND MULS, AS WITH 04038000
|
|
EMITLNG CARE MUST BE TAKEN TO AVOID CONFUSION WITH LINKS 04039000
|
|
AND CONDITIONAL EXPRESSIONS. IF THESE SPECIAL CASES DO 04040000
|
|
NOT HOLD, THEN A CALL ON AN INTRINSIC PROCEDURE, XTOTHEI, 04041000
|
|
IS CONSTRUCTED. XTOTHEI PRODUCES A SERIES OF MULTIPLIES 04042000
|
|
(APPROXIMATELY LN I MULTIPLIES) IF I IS AN INTEGER. 04043000
|
|
OTHERWISE IT CALLS LN AND EXP; 04044000
|
|
PROCEDURE EMITUP; 04045000
|
|
BEGIN INTEGER BACKUP, CTR; 04046000
|
|
LABEL E; 04047000
|
|
IF NOT LINKTOG THEN GO TO E; 04048000
|
|
COMMENT CALL XTOTHEI IF LAST THING IS LINK; 04049000
|
|
IF GET(L-1) = 537 THEN 04050000
|
|
COMMENT LAST OPERATOR IS CHS; 04051000
|
|
BEGIN BACKUP ~ 1; L ~ L-1 END; 04052000
|
|
IF(GT4 ~ GET(L-1)).[46:2] = 0 04053000
|
|
THEN BEGIN 04054000
|
|
COMMENT IT IS A LITERAL; 04055000
|
|
BACKUP ~ BACKUP+1; L ~ L-1; 04056000
|
|
IF GET(L-1).[39:9] = 153 THEN GO TO E; 04057000
|
|
COMMENT CALL XTOTHE IF THE LAST OPERATOR IS A BRANCH; 04058000
|
|
CTR ~ 1; GT4 ~ GT4 DIV 4; 04059000
|
|
WHILE GT4 DIV 2 ! 0 04060000
|
|
DO BEGIN 04061000
|
|
EMITO(DUP); 04062000
|
|
IF BOOLEAN(GT4) THEN BEGIN CTR~CTR+1;EMITO(DUP)END; 04063000
|
|
EMITO(MUL); 04064000
|
|
GT4 ~ GT4 DIV 2 END; 04065000
|
|
IF GT4 =0 THEN BEGIN EMITO(DEL);EMITL(1) END 04066000
|
|
ELSE WHILE CTR ~ CTR-1 ! 0 DO EMITO(MUL); 04067000
|
|
IF BACKUP = 2 04068000
|
|
THEN BEGIN 04069000
|
|
EMITL(1); 04070000
|
|
EMITO(XCH); 04071000
|
|
EMITO(128) END END 04072000
|
|
ELSE BEGIN 04073000
|
|
E: L ~ L+BACKUP; 04074000
|
|
EMITO(MKS); 04075000
|
|
EMITPAIR(GNAT(LOGI),LOD); 04076000
|
|
EMITPAIR(GNAT(EXPI),LOD); 04077000
|
|
EMITV(GNAT(XTOTHEI)); 04078000
|
|
STACKCT ~ 0; %A 04078500
|
|
EMITO(DEL) END END EMITUP; 04079000
|
|
COMMENT ADJUST ADJUST L TO THE BEGINING OF A WORD AND FILLS IN THE 04080000
|
|
INERVENING SPACE WITH NOPS. IT CHECKS STREAMTOG TO DECIDE 04081000
|
|
WHICH SORT OF NOP TO USE; 04082000
|
|
PROCEDURE ADJUST; 04083000
|
|
BEGIN 04084000
|
|
DIALA ~ DIALB ~ 0; 04085000
|
|
WHILE L.[46:2] ! 0 DO EMIT(IF STREAMTOG THEN 1 ELSE 45) 04086000
|
|
END ADJUST; 04087000
|
|
COMMENT EMITLNG CHANGES A RELATIONAL FOLLOWED BY A NEGATE TO THE 04088000
|
|
NEGATED RELATIONAL. IT ALSO CHANGES A NEGATE FOLLOWED 04089000
|
|
BY A NEGATE TO NOTHING. CARE MUST BE EXERCIZED. A LINK 04090000
|
|
(FOR CONSTANT TO BE EMITTED LATER) MIGHT LOOK LIKE AN LNG 04091000
|
|
OR A RELATIONAL OPERATOR. THIS IS THE USE OF LINKTOG. 04092000
|
|
ALSO A CONSTRUCT AS NOT ( IF B THEN X=Y ELSE Y=Z) 04093000
|
|
COULD GIVE TROUBLE. THIS IS THE MEANING OF THE OBSCURE 04094000
|
|
EMITS FOLLOWED BY L ~ L-1 FOUND IN IFEXP, BOOSEC, BOOCOMP,04095000
|
|
AND RELATION - THAT CODE SERVES TO SET A FLAG FOR USE BY 04096000
|
|
EMITLNG; 04097000
|
|
PROCEDURE EMITLNG; 04098000
|
|
BEGIN LABEL E; 04099000
|
|
IF NOT LINKTOG THEN GO TO E; 04100000
|
|
COMMENT GO TO E IF LAST THING IS A LINK; 04101000
|
|
IF GET(L) ! 0 THEN GO TO E; 04102000
|
|
COMMENT EITHER LAST EXPRESSION WAS CONDITIONAL OR THERE IS NO 04103000
|
|
LNG OR RELATIONAL OPERATOR; 04104000
|
|
IF GT1 ~ GET(L-1) = 77 THEN L ~ L-1 04105000
|
|
COMMENT LAST THING WAS AN LNG - SO CANCEL IT; 04106000
|
|
ELSE IF GT1.[42:6]=21 AND GT1.[37:2]=0 THEN % AHA 04107000
|
|
COMMENT LAST THING WAS A RELATIONAL; 04108000
|
|
BEGIN L~L-1; EMITO(REAL(BOOLEAN(GT1.[36:10]) EQV 04109000
|
|
BOOLEAN(IF GT1.[40:2] = 0 THEN 511 ELSE 463))) 04110000
|
|
COMMENT NEGATE THE RELATIONAL; END ELSE 04111000
|
|
E: EMITO(LNG) END EMITLNG; 04112000
|
|
COMMENT EMITB EMITS A BRANCH OPERATOR AND ITS ASSOCIATED NUMBER; 04113000
|
|
PROCEDURE EMITB(BRANCH,FROM,TOWARDS); 04114000
|
|
VALUE BRANCH,FROM,TOWARDS; 04115000
|
|
INTEGER BRANCH,FROM,TOWARDS; 04116000
|
|
BEGIN 04117000
|
|
INTEGER TL; 04118000
|
|
TL ~ L; 04119000
|
|
L ~ FROM-2; 04120000
|
|
GT1 ~ TOWARDS-FROM; 04120100
|
|
IF TOWARDS.[46:2] = 0 04120200
|
|
THEN BEGIN 04120300
|
|
BRANCH ~ BRANCH&1[39:47:1]; 04120400
|
|
GT1 ~ TOWARDS DIV 4 - (FROM-1) DIV 4 END; 04120500
|
|
EMITNUM(ABS(GT1)); 04121000
|
|
EMITO(BRANCH&(REAL(GT1} 0)+1)[42:46:2]); 04122000
|
|
IF BOOLEAN(BRANCH.[38:1]) THEN DIALA ~ DIALB ~ 0; 04123000
|
|
L ~ TL; 04124000
|
|
END EMITB; 04125000
|
|
COMMENT DEBUGWORD FORMATS TWO FIELDS FOR DEBUGGING OUTPUT IN 04126000
|
|
OCTAL, NAMELY : 04127000
|
|
1. 4 CHARACTERS FOR THE L REGISTER. 04128000
|
|
2.16 CHARACTERS FOR THE WORD BEING EMITTED. ; 04129000
|
|
STREAM PROCEDURE DEBUGWORD( SEQ,CODE,FEIL); VALUE SEQ,CODE ; 04130000
|
|
BEGIN 04131000
|
|
DI~FEIL; SI~ LOC SEQ; SI~ SI+4; DS ~ 4 CHR; 04132000
|
|
DS ~ 2 LIT" "; 04133000
|
|
SI ~ LOC CODE ; 04134000
|
|
16( DS ~ 3 RESET; 3( IF SB THEN DS~SET ELSE 04135000
|
|
DS ~ RESET ; SKIP 1 SB)); 04136000
|
|
49(DS ~ 2 LIT " "); 04137000
|
|
END ; 04138000
|
|
COMMENT EMITWORD PLACES THE PARAMETER,"WORD",INTO EDOC. IF 04139000
|
|
DEBUGGING IS REQUIRED, "L" AND "WORD" ARE OUTPUT ON 04140000
|
|
THE PRINTER FILE IN OCTAL FORMAT. ; 04141000
|
|
PROCEDURE EMITWORD (WORD); VALUE WORD; REAL WORD; 04142000
|
|
BEGIN 04143000
|
|
ADJUST; 04144000
|
|
IF L}4092 THEN ERR(200) 04145000
|
|
ELSE BEGIN 04146000
|
|
MOVE(1,WORD,EDOC[L.[36:3],L.[39:7]]); 04147000
|
|
IF DEBUGTOG THEN 04148000
|
|
BEGIN DEBUGWORD(B2D(L),WORD,LIN); 04149000
|
|
WRITELINE END; 04150000
|
|
L~L+4 END 04151000
|
|
END EMITWORD; 04152000
|
|
COMMENT CONSTANTCLEAN IS CALLED AFTER AN UNCONDITIONAL BRANCH HAS 04153000
|
|
BEEN EMITTED. IF ANY CONSTANTS HAVE BEEN ACCUMULATED BY 04154000
|
|
EMITNUM IN INFO[0,*], CONSTANTCLEAN WILL FIX THE CHAIN 04155000
|
|
OF C-RELATIVE OPDC S LEFT BY EMITNUM. IF C-RELATIVE 04156000
|
|
ADDRESSING IS IMPOSSIBLE (I.E. THE ADDRESS 04157000
|
|
IF GREATER THAN 127 WORDS) THEN THE CONSTANT ALONG WITH 04158000
|
|
THE 1ST LINK OF THE OPDC CHAIN IS ENTERED IN INFO. 04159000
|
|
AT PURGE TIME THE REMAINING OPDC S ARE EMITTED WITH 04160000
|
|
F -RELATIVE ADDRESSING AND CODE EMITTED TO STORE THE 04161000
|
|
CONSTANTS INTO THE PROPER F-RELATIVE CELLS. ; 04162000
|
|
PROCEDURE CONSTANTCLEAN ; 04163000
|
|
IF MRCLEAN THEN 04164000
|
|
BEGIN 04165000
|
|
INTEGER J,TEMPL,D,LINK; 04166000
|
|
BOOLEAN CREL; 04167000
|
|
LABEL ALLTHU ; 04168000
|
|
DIALA ~ DIALB ~ 0; 04169000
|
|
FOR J ~ 1 STEP 2 UNTIL LASTENTRY DO 04170000
|
|
BEGIN 04171000
|
|
ADJUST; TEMPL~L; L~INFO[0,255-J+1]; 04172000
|
|
CREL ~ FALSE; 04173000
|
|
DO BEGIN 04174000
|
|
IF D~(TEMPL-L+3)DIV 4}128 THEN 04175000
|
|
BEGIN 04176000
|
|
NCII~NCII+1; 04177000
|
|
PUTNBUMP(L&NONLITNO[2:41:7]&(NEXTINFO-LASTINFO)[27:40:8]); 04178000
|
|
PUTNBUMP(TAKE(255-J)); LASTINFO~NEXTINFO-2; 04179000
|
|
GO TO ALLTHU; 04180000
|
|
END; 04181000
|
|
LINK~GET(L); 04182000
|
|
CREL ~ TRUE; 04183000
|
|
EMITV(D + 768); 04184000
|
|
END UNTIL L~ LINK = 4095 ; 04185000
|
|
ALLTHU: L ~ TEMPL; 04186000
|
|
IF CREL THEN EMITWORD( INFO[0,255-J ]); 04187000
|
|
END; 04188000
|
|
LASTENTRY ~ 0; 04189000
|
|
END ; 04190000
|
|
COMMENT EMITNUM HANDLES THE EMISSION OF CODE FOR CONSTANTS,BOTH 04191000
|
|
EXPLICIT AND IMPLICIT. IN EVERY CASE,EMITNUM WILL 04192000
|
|
PRODUCE CODE TO GET THE DESIRED CONSTANT ON TOP OF 04193000
|
|
THE STACK. IF THE NUMBER IS A LITERAL A SIMPLE LITC 04194000
|
|
SYLLABLE IS PRODUCED. HOWEVER,NON-LITERALS ARE KEPT 04195000
|
|
IN THE ZERO-TH ROW OF INFO WITH THE SYLLABLE 04196000
|
|
POSITION,L. THE FIRST EMITNUM ON A PARTICULAR 04197000
|
|
CONSTANT CAUSES THE VALUES OF L AND THE CONSTANT 04198000
|
|
TO BE STORED IN INFO[0,*] (NOTE:ITEMS ARE STORED 04199000
|
|
IN REVERSE STARTING WITH INFO[0,255],ETC.). THEN 04200000
|
|
ITS THE JOB OF CONSTANTCLEAN TO EMIT THE ACTUAL 04201000
|
|
OPDC (SEE CONSTANTCLEAN PROCEDURE FOR DETAILS) ; 04202000
|
|
PROCEDURE EMITNUM( C ); VALUE C; REAL C; 04203000
|
|
BEGIN LABEL FINISHED,FOUND ; REAL N; 04204000
|
|
IF C.[1:37]=0 THEN EMITL(C) 04205000
|
|
ELSE 04206000
|
|
BEGIN 04207000
|
|
FOR N ~ 1 STEP 2 UNTIL LASTENTRY DO 04208000
|
|
IF INFO[0,255-N] = C THEN GO TO FOUND ; 04209000
|
|
INFO[0,255 -LASTENTRY] ~ L; 04210000
|
|
INFO[0,255 -LASTENTRY-1]~ C ; 04211000
|
|
EMITN(1023); 04212000
|
|
LINKTOG~FALSE; 04213000
|
|
IF LASTENTRY ~ LASTENTRY+2 } 128 THEN 04214000
|
|
BEGIN 04215000
|
|
C ~ BUMPL; 04216000
|
|
CONSTANTCLEAN; 04217000
|
|
EMITB(BFW,C,L); 04218000
|
|
END; 04219000
|
|
GO TO FINISHED; 04220000
|
|
FOUND: EMIT(INFO[0,255 -N+1]); 04221000
|
|
LINKTOG~FALSE; 04222000
|
|
INFO[0,255-N+1]~ L-1; 04223000
|
|
END; 04224000
|
|
FINISHED:END EMITNUM ; 04225000
|
|
COMMENT SEARCH PERFORMS A BINARY SEARCH ON THE COP AND WOP 04226000
|
|
ARRAYS, GIVEN THE OPERATOR BITS SEARCH YIELDS THE BCD 04227000
|
|
MNEUMONIC FOR THAT OPERATOR. IF THE OPERATOR CANNOT 04228000
|
|
BE FOUND SEARCH YIELDS BLANKS. 04229000
|
|
NOTE: DIA,DIB,TRB ARE RETURNED AS BLANKS. ; 04230000
|
|
ALPHA PROCEDURE SEARCH (Q,KEY); VALUE KEY; ARRAY Q[0]; REAL KEY ; 04231000
|
|
BEGIN LABEL L; 04232000
|
|
COMMENT GT1 AND GT2 ARE INITIALIZED ASSUMMING THAT Q IS ORDERED 04233000
|
|
BY PAIRS (ARGUMENT,FUNCTION,ARGUMENT,FUNCTION,ETC.) 04234000
|
|
AND THAT THE FIRST ARGUMENT IS IN Q[4]. FURTHERMORE 04235000
|
|
THE LENGTH OF Q IS 128. ; 04236000
|
|
INTEGER N,I ; 04237000
|
|
N ~ 64 ; 04238000
|
|
FOR I ~ 66 STEP IF Q[I]<KEY THEN N ELSE - N 04239000
|
|
WHILE N~N DIV 2 } 1 DO 04240000
|
|
IF Q[ I ]=KEY THEN GO TO L ; 04241000
|
|
I ~0; COMMENT ARGUMENT NOT FOUND,SEARCH=Q[1] ; 04242000
|
|
L: SEARCH~Q[ I +1] ; 04243000
|
|
END SEARCH ; 04244000
|
|
COMMENT B2D CONVERTS THE FOUR LOW ORDER OCTAL DIGITS TO BCD 04245000
|
|
CODE ; 04246000
|
|
ALPHA PROCEDURE B2D(B); VALUE B; REAL B; 04247000
|
|
B2D~0&B[45:45:3]&B[39:42:3]&B[33:39:3]&B[27:36:3] ; 04248000
|
|
COMMENT PACK IS A STREAM PROCEDURE WHICH INSERTS THE SYLLABLE 04265000
|
|
INTO THE EDOC ARRAY. THE SPECIFIC ELEMENT OF EDOC 04266000
|
|
IS PRECISILY = EDOC[(L DIV 4) DIV 128,(< DIV 4)MOD 128] 04267000
|
|
SYLLABLE POSITION=(L MOD 4 ), WHERE L IS THE SYLLABLE 04268000
|
|
NUMBER RELATIVE TO THE BEGINNING OF THE SEGMENT; 04269000
|
|
STREAM PROCEDURE PACK(WORD,POSITION,SYLLABLE); 04270000
|
|
VALUE POSITION,SYLLABLE; 04271000
|
|
BEGIN 04272000
|
|
DI~WORD ; DI ~ DI+POSITION ; DI ~ DI+POSITION; 04273000
|
|
SI~LOC SYLLABLE ; SI~SI+6; 04274000
|
|
DS~2 CHR ; 04275000
|
|
END PACK ; 04276000
|
|
PROCEDURE DEBUG(S); 04277000
|
|
VALUE S; REAL S ; 04278000
|
|
IF STREAMTOG THEN 04279000
|
|
IF SINGLTOG THEN 04279100
|
|
WRITE(LINE,BUG,B2D(L),COP[S.[42:6]],B2D(S.[36:6]),B2D(S)) 04279200
|
|
ELSE 04279300
|
|
WRITE(LINE[DBL],BUG,B2D(L),COP[S.[42:6]],B2D(S.[36:6]), 04280000
|
|
B2D(S)) 04281000
|
|
04282000
|
|
ELSE 04283000
|
|
04284000
|
|
IF SINGLTOG THEN 04284100
|
|
WRITE(LINE,BUG,B2D(L),IF T1~S.[46:2]=1 THEN 04284200
|
|
BUGGER(S.[36:10]) ELSE WOP[T1],IF T1=1 THEN WOP[1] 04284300
|
|
ELSE B2D(S.[36:10]),B2D(S)) 04284400
|
|
ELSE 04284500
|
|
WRITE(LINE[DBL],BUG,B2D(L),IF T1~S.[46:2]=1 THEN 04285000
|
|
BUGGER(S.[36:10]) ELSE WOP[T1],IF T1=1 THEN WOP[1] 04286000
|
|
ELSE B2D(S.[36:10]),B2D(S)); 04287000
|
|
COMMENT EMIT PLACES SYLLABLES INTO EDOC, CALLS DEBUG FOR 04288000
|
|
DEBUGGING OUTPUT ON THE PRINTER, AND CHECKS FOR SEGMENTS 04289000
|
|
GREATER THAN 4093 SYLLABLES. ; 04290000
|
|
PROCEDURE EMIT ( S ) ; VALUE S; REAL S ; 04291000
|
|
BEGIN 04292000
|
|
IF L <4092 THEN 04293000
|
|
BEGIN 04294000
|
|
LINKTOG ~ TRUE; 04295000
|
|
PACK( EDOC[L.[36:3 ],L.[39:7]],L.[46:2],S); 04296000
|
|
IF DEBUGTOG THEN DEBUG(S); 04297000
|
|
L~L+1; 04298000
|
|
END ELSE 04299000
|
|
ERR(200) 04300000
|
|
COMMENT 200 EMIT - SEGMENT GREATER THAN 4093 SYLLABLES *; 04301000
|
|
END EMIT ; 04302000
|
|
COMMENT THE PRINCIPLE FUNCTION OF DEBUG IS TO COMPUTER THE PROPER 04303000
|
|
PARAMETERS FOR STREAM PROCEDURE BUG; 04304000
|
|
COMMENT EMITD EMITS THE DIA,DIB,TRB SEQUENCE OF CODE. THE 04305000
|
|
PREVIOUS SETTING OF THE G-H AND K-V REGISTERS IS COMPARED 04306000
|
|
THE CURRENT . IF THE G-H,K-V OR BOTH ARE ALREADY SET THEN 04307000
|
|
THE APPROIATE SYLLABLE(S) ARE OMITTED 04308000
|
|
IF 0 BITS ARE TO BE TRANSFERED THEN NO SYLLABLES ARE 04309000
|
|
EMITTED ; 04310000
|
|
PROCEDURE EMITD(A,B,T); VALUE A,B,T ; INTEGER A,B,T; 04311000
|
|
BEGIN LABEL EXIT,NORMAL; 04311010
|
|
REAL Q; 04311020
|
|
IF T = 15 THEN 04311030
|
|
BEGIN 04311040
|
|
IF A = 33 THEN Q ~ 512 04311050
|
|
ELSE IF A ! 18 THEN GO TO NORMAL; 04311060
|
|
IF B = 18 THEN Q ~ Q+256 04311070
|
|
ELSE IF B ! 33 THEN GO TO NORMAL; 04311080
|
|
EMITO(Q+197); COMMENT -- THIS GETS OUT FIXED FIELD; 04311090
|
|
GO TO EXIT; 04311100
|
|
END; 04311110
|
|
NORMAL: 04311120
|
|
IF T! 0 THEN 04312000
|
|
BEGIN 04313000
|
|
IF DIALA! A THEN 04314000
|
|
EMIT(((DIALA~A) DIV 6)|512 + ( A~ A MOD 6)| 64 + DIA); 04315000
|
|
IF DIALB!B THEN 04316000
|
|
EMIT(((DIALB~B) DIV 6)|512 + ( B~ B MOD 6)| 64 + DIB); 04317000
|
|
EMIT(TRB+64|T); 04318000
|
|
DIALA~DIALB~0; 04319000
|
|
COMMENT THE PRECEEDING STATEMENT CAN BE REMOVED FOR OPTIMIZING 04320000
|
|
G-H AND K-V REGISTERS, OTHERWISE NO OPTIMIZING OCCURS; 04321000
|
|
END EMITD ; 04322000
|
|
EXIT: END; 04322100
|
|
PROCEDURE EMITI(E,A,B); VALUE E,A,B; REAL E,A,B; 04500000
|
|
BEGIN LABEL EXIT,IS; 04501000
|
|
INTEGER S,T1,T2; 04502000
|
|
PROCEDURE EMIT21(E,B); VALUE E,B; 04503000
|
|
REAL E; 04504000
|
|
BOOLEAN B; 04505000
|
|
BEGIN IF E = 0 THEN 04506000
|
|
BEGIN IF B THEN EMITO(XCH); END 04507000
|
|
ELSE BEGIN GT1 ~ E.ADDRESS; 04508000
|
|
IF E ~ E.CLASS { INTID THEN 04509000
|
|
EMITV(GT1) 04521000
|
|
ELSE IF E { INTARRAYID THEN 04522000
|
|
EMITPAIR(GT1,LOD) ELSE 04523000
|
|
EMITN(GT1) 04524000
|
|
END 04525000
|
|
END; 04526000
|
|
IF B = 0 THEN 04526100
|
|
BEGIN EMIT21(E,FALSE); GO TO EXIT END; 04526200
|
|
IF STACKCT ! 0 THEN GO TO IS; 04527000
|
|
IF B = 15 THEN 04528000
|
|
BEGIN IF A = 33 THEN 04529000
|
|
BEGIN EMIT21(E,FALSE); 04530000
|
|
EMIT(0); EMITO(INX); 04531000
|
|
GO TO EXIT; 04532000
|
|
END; 04533000
|
|
IF A = 18 THEN 04534000
|
|
BEGIN EMIT(0); 04535000
|
|
EMIT21(E,TRUE); 04536000
|
|
EMITO(197); 04537000
|
|
GO TO EXIT; 04538000
|
|
END; 04539000
|
|
GO TO IS; 04540000
|
|
END; 04541000
|
|
IF B { 10 AND A+B = 48 THEN 04542000
|
|
BEGIN EMIT21(E,FALSE); 04543000
|
|
EMITL(2*B-1); 04544000
|
|
EMITO(LND); 04545000
|
|
GO TO EXIT; 04546000
|
|
END; 04547000
|
|
IS: IF (S ~ (48-A-B) MOD 6)+B { 39 THEN 04548000
|
|
BEGIN EMIT21(E,FALSE); 04549000
|
|
EMIT(T2~(T1~A DIV 6)|512+(A MOD 6)|64+DIA); 04550000
|
|
EMIT(((A+B-1) DIV 6 -T1+1)|512+64|S+37); 04551000
|
|
GO TO EXIT; 04552000
|
|
END; 04553000
|
|
EMIT(0); 04554000
|
|
EMIT21(E,TRUE); 04555000
|
|
EMITD(A,48-B,B); 04556000
|
|
EXIT: END; 04558000
|
|
ALPHA PROCEDURE BUGGER(OP); VALUE OP; INTEGER OP; 04600000
|
|
BEGIN INTEGER Q; 04601000
|
|
WOP[1]~" "; 04602000
|
|
IF BUGGER~SEARCH(WOP,OP)=" " THEN 04603000
|
|
IF Q~OP.[44:4]}9 THEN 04604000
|
|
BEGIN BUGGER~POP[IF Q!10 THEN Q-5 ELSE OP.[42:2]]; 04605000
|
|
WOP[1]~(IF Q=10 THEN OP.[39:3]&OP[41:38:1] ELSE 04606000
|
|
OP.[41:3]&OP[39:38:3])&" "[24:36:12]; 04607000
|
|
END; END BUGGER; 04608000
|
|
PROCEDURE CHECKDISJOINT(A); VALUE A; INTEGER A; 04609000
|
|
BEGIN 04610000
|
|
IF LEVEL > SUBLEVEL+1 THEN 04611000
|
|
BEGIN 04612000
|
|
EMIT(0); 04613000
|
|
EMITPAIR(A,STD); 04614000
|
|
END; 04615000
|
|
EMITN(A); 04616000
|
|
END CHECKDISJOINT; 04617000
|
|
COMMENT THIS SECTION CONTAINS MISCELLANEOUS SERVICE ROUTINES; 05000000
|
|
COMMENT STEPI AND STEPIT ARE SHORT CALLS ON TABLE; 05001000
|
|
PROCEDURE STEPIT; ELCLASS ~ TABLE(I~I+1); 05002000
|
|
INTEGER PROCEDURE STEPI; STEPI~ELCLASS~TABLE(I~I+1); 05003000
|
|
COMMENT TAKE FETCHS A WORD FROM INFO; 05004000
|
|
REAL PROCEDURE TAKE(INDEX); VALUE INDEX; INTEGER INDEX; 05005000
|
|
TAKE ~ INFO[INDEX.LINKR,INDEX.LINKC]; 05006000
|
|
COMMENT PUT PLACES A WORD INTO INFO; 05007000
|
|
PROCEDURE PUT(WORD,INDEX); VALUE WORD,INDEX; REAL WORD,INDEX; 05008000
|
|
INFO[INDEX.LINKR,INDEX.LINKC] ~ WORD; 05009000
|
|
COMMENT FLAG FLAGS ERROR MESSAGES, COUNTS THEM AND SUPRESS FUTURE 05010000
|
|
ERROR MESSAGES UNTIL THE COMPILER THINKS IT HAS RECOVERED;05011000
|
|
PROCEDURE FLAG(ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; 05012000
|
|
BEGIN 05013000
|
|
COMMENT WRITERROR IS THE STREAM PROCEDURE WHICH ACTUALLY PRODUCES 05014000
|
|
THE ERROR MESSAGE ON THE PRINTER; 05015000
|
|
STREAM PROCEDURE WRITERROR(RMT,ERRNUM,ACCUM,LINE,COUNT,LSTSEQ); 05016000
|
|
VALUE ERRNUM,COUNT; 05017000
|
|
BEGIN 05018000
|
|
DI:=LINE; 11(DS:=8 LIT " "); % BLANK LINE 05019000
|
|
SI ~LSTSEQ; SI ~ SI-8; DS ~WDS; 05020000
|
|
DS:=24 LIT " <<<<<<<<<<<<<<<<<<<<"; % SET FLAG 05021000
|
|
SI ~ LSTSEQ; DI ~ LSTSEQ; DI ~ DI-8; DS ~ WDS; 05023000
|
|
DI~LINE; SI~RMT; SI~SI+7; 05024000
|
|
IF SC="1" THEN 05024100
|
|
BEGIN SI~LSTSEQ; DS~10 LIT "NEAR LINE "; 05024200
|
|
7(IF SC>"0" THEN JUMP OUT; 05024300
|
|
SI~SI+1; TALLY~TALLY+1); 05024400
|
|
RMT~TALLY; DS~8 CHR; DI~DI-RMT; 05024500
|
|
END ELSE DI~DI+7; 05024600
|
|
DS~14 LIT " ERROR NUMBER "; 05025000
|
|
SI ~ LOC ERRNUM; DS ~ 3 DEC; COMMENT CONVERT ERRNUM; 05026000
|
|
DS ~ 4 LIT " -- "; 05027000
|
|
SI ~ ACCUM; SI ~ SI+3; DS ~ COUNT CHR; 05028000
|
|
COMMENT PLACE ALPHA IN BUFFER; 05029000
|
|
DS ~ LIT "." 05030000
|
|
END WRITERROR; 05031000
|
|
IF ERRORTOG THEN % DO NOTHING IF WE SUPPRESS MSSGS. 05032000
|
|
BEGIN 05033000
|
|
SPECTOG := FALSE; 05034000
|
|
ERRORCOUNT := ERRORCOUNT+1; COMMENT COUNT ERRORS; 05035000
|
|
IF NOT(LISTER OR REMOTOG) THEN 05036000
|
|
BEGIN 05037000
|
|
EDITLINE(LIN,FCR," ",0,0,MEDIUM,0); %114-05038000
|
|
MOVE(1,INFO[LASTSEQROW,LASTSEQUENCE],LIN[12]); 05039000
|
|
IF NOHEADING THEN DATIME; WRITELINE; 05039500
|
|
END; 05041000
|
|
COMMENT PRINT CARDIMAGE IF WE ARE NOT LISTING; 05042000
|
|
ACCUM[1] ~ Q; COMMENT RESTORE ACCUMULATOR; 05043000
|
|
WRITERROR(REMOTOG,ERRNUM,ACCUM[1],LIN,Q.[12:6], 05044000
|
|
INFO[LASTSEQROW,LASTSEQUENCE]); 05045000
|
|
IF REMOTOG THEN WRITE(REMOTE,10,LIN[*]); 05045900
|
|
IF NOT NOHEADING THEN BEGIN WRITE (LINE); WRITELINE; END; 05046000
|
|
ERRORTOG ~ FALSE; COMMENT INHIBIT MESSAGES; 05047000
|
|
IF PUNCHTOG THEN 05048000
|
|
BEGIN 05049000
|
|
STREAM PROCEDURE PUNCH(FL,ST); 05050000
|
|
VALUE ST; 05051000
|
|
BEGIN 05052000
|
|
DI ~ FL; 05053000
|
|
SI ~ ST; 05054000
|
|
DS ~ 9 WDS 05055000
|
|
END PUNCH; 05056000
|
|
PUNCH(PNCH(0),FCR); 05057000
|
|
MOVE(1,INFO[LASTSEQROW,LASTSEQUENCE], PNCH(9)); 05058000
|
|
WRITE(PNCH) 05059000
|
|
END 05060000
|
|
END END FLAG; 05101000
|
|
LABEL ENDOFITALL; 05101100
|
|
COMMENT ERR,IS THE SAME AS FLAG EXCEPT THAT IT MAKES AN ATTEMPT TO 05102000
|
|
RECOVER FROM ERROR SITUATIONS BY SEARCHING FOR A 05103000
|
|
SEMICOLON, END, OR BEGIN; 05104000
|
|
PROCEDURE ERR(ERRNUM); VALUE ERRNUM; INTEGER ERRNUM; 05105000
|
|
BEGIN FLAG(ERRNUM); 05106000
|
|
I ~ I-1; 05107000
|
|
IF ERRNUM=200 THEN GO TO ENDOFITALL; 05107100
|
|
IF ERRNUM=611 THEN GO TO ENDOFITALL;%ERRMAX EXCEEDED. 05107200
|
|
DO IF STEPI = BEGINV THEN STMT UNTIL 05108000
|
|
ELCLASS = ENDV OR ELCLASS = SEMICOLON END ERR; 05109000
|
|
DEFINE ERROR = ERR#; COMMENT ERROR IS A SYNONM FOR ERR; 05110000
|
|
COMMENT CHECKER IS A SMALL PROCEDURE THAT CHECKS TO SEE THAT THE 05111000
|
|
UPLEVEL ADDRESSING CONVENTIONS ARE OBEYED; 05112000
|
|
PROCEDURE CHECKER(ELBATWORD); VALUE ELBATWORD; REAL ELBATWORD; 05113000
|
|
BEGIN 05114000
|
|
IF MODE } 2 THEN 05115000
|
|
IF GT1 ~ ELBATWORD.LVL } FRSTLEVEL THEN 05116000
|
|
IF GT1 < SUBLEVEL THEN 05117000
|
|
IF ELBATWORD.[9:2] ! 1 05118000
|
|
THEN BEGIN FLAG(101); ERRORTOG ~ TRUE END 05119000
|
|
END CHECKER; 05120000
|
|
COMMENT GIT IS USED TO OBTAIN THE INDEX TO ADDITIONAL INFORMATION 05121000
|
|
GIVEN THE LINK TO THE ELBAT WORD; 05122000
|
|
INTEGER PROCEDURE GIT(L); VALUE L; REAL L; 05123000
|
|
GIT ~ TAKE(L).INCR+L.LINK; 05124000
|
|
COMMENT GNAT IS USED TO OBTAIN THE PRT ADDRESS OF A GIVEN DESCRIPTOR. 05125000
|
|
IF THE ADDRESS HAS NOT BEEN ASSIGNED, THEN IT USES 05126000
|
|
GETSPACE TO OBTAIN THE PRT ADDRESS; 05127000
|
|
INTEGER PROCEDURE GNAT(L); VALUE L; REAL L; 05128000
|
|
BEGIN 05129000
|
|
REAL A; 05130000
|
|
IF GNAT ~(A~TAKE(L)).ADDRESS=0 05131000
|
|
THEN PUT(A&(GNAT:=GETSPACE(TRUE,L.LINK+1))[16:37:11],L) 05132000
|
|
END GNAT; 05133000
|
|
COMMENT PASSFILE COMPILES CODE THAT BRINGS TO TOP OF STACK A DESCRIPTOR05134000
|
|
POINTING AT THE I/O DESCRIPTOR (ON TOP). IT HANDLES 05135000
|
|
SUPERFILES AS WELL AS ORDINARY FILES; 05136000
|
|
PROCEDURE PASSFILE; 05137000
|
|
BEGIN INTEGER ADDRES; 05138000
|
|
CHECKER(ELBAT[I]); 05139000
|
|
ADDRES ~ ELBAT[I].ADDRESS; 05140000
|
|
IF ELCLASS = SUPERFILEID 05141000
|
|
THEN BEGIN 05142000
|
|
BANA; EMITN(ADDRES); EMITO(LOD) END 05143000
|
|
ELSE BEGIN 05144000
|
|
IF NOT BOOLEAN(ELBAT[I].FORMAL) THEN EMITL(5); 05145000
|
|
STEPIT; 05146000
|
|
EMITN(ADDRES) END END PASSFILE; 05147000
|
|
PROCEDURE PASSMONFILE(ADDRESS); 05148000
|
|
VALUE ADDRESS ; 05149000
|
|
REAL ADDRESS ; 05150000
|
|
BEGIN COMMENT PASSMONFILE GENERATES CODE TO PASS THE MONITOR 05151000
|
|
FILE TO PRINTI; 05152000
|
|
IF ADDRESS < 768 OR ADDRESS > 1023 05153000
|
|
THEN EMITL(5); 05154000
|
|
EMITN(ADDRESS); 05155000
|
|
END PASSMONFILE; 05156000
|
|
PROCEDURE PASFILE; 05157000
|
|
BEGIN COMMENT PASFILE PASSES THE LAST THREE PARAMETERS TO KEN 05158000
|
|
MEYERS FOR THE LOCK, CLOSE, AND REWIND STATEMENTS; 05159000
|
|
DEFINE ELBATWORD = RR1#; COMMENT ELBATWORD CONTAINS THE 05160000
|
|
ELBATWORD FOR THE FILE BEING 05161000
|
|
OPERATED ON; 05162000
|
|
DEFINE LTEMP = RR2#; COMMENT LTEMP IS USED TO HOLD THE L 05163000
|
|
REGISTER SETTING FOR THE SAVE OR 05164000
|
|
RELEASE LITERAL THAT GETS PASSED TO 05165000
|
|
KEN MYERS; 05166000
|
|
EMITO(MKS); L~(LTEMP~L)+1; EMITL(0); 05167000
|
|
EMITL(2); CHECKER(ELBATWORD~ELBAT[I]); 05168000
|
|
IF RRB1~(RRB2~ ELCLASS = SUPERFILEID)OR 05169000
|
|
BOOLEAN(ELBATWORD.FORMAL) 05170000
|
|
THEN EMITO(LNG); 05171000
|
|
IF RRB2 05172000
|
|
THEN BANA 05173000
|
|
ELSE STEPIT; 05174000
|
|
EMITN(ELBATWORD.ADDRESS); 05175000
|
|
IF RRB2 05176000
|
|
THEN EMITO(LOD); 05177000
|
|
IF RRB1 05178000
|
|
THEN EMITO(INX); 05179000
|
|
EMITL(4); EMITV(14); 05180000
|
|
END PASFILE; 05181000
|
|
COMMENT CHECKPRESENCE CAUSES THE CORRECT CODE TO BE GENERATED TO CAUSE05182000
|
|
PRESENCE BIT INTERRUPTS ON I/O DESCRIPTORS; 05183000
|
|
PROCEDURE CHECKPRESENCE; 05184000
|
|
BEGIN 05185000
|
|
EMITO(DUP); EMITO(LOD); EMITL(0); EMITO(CDC); EMITO(DEL); 05186000
|
|
END CHECKPRESENCE; 05187000
|
|
COMMENT PROCEDURE PASSLIST WILL BRING THE LIST PROGRAM DESCRIPTOR 05187500
|
|
TO TOP OF STACK FOR A SUBSCRIPTED LIST ID OR SIMPLE ID; 05187510
|
|
PROCEDURE PASSLIST; 05187520
|
|
BEGIN 05187530
|
|
INTEGER LISTADDRESS; 05187540
|
|
COMMENT PASSLIST ASSUMES I IS POINTING AT LIST ID; 05187550
|
|
CHECKER(ELBAT[I]); 05187560
|
|
LISTADDRESS:=ELBAT[I].ADDRESS; 05187570
|
|
IF ELCLASS = SUPERLISTID THEN % SUBSCRIPTED LIST ID. 05187580
|
|
BEGIN 05187590
|
|
BANA; EMITN(LISTADDRESS); EMITO(LOD); 05187600
|
|
END 05187610
|
|
ELSE BEGIN EMITL(LISTADDRESS); STEPIT END; 05187620
|
|
END OF PASSLIST; 05187630
|
|
REAL PROCEDURE TAKEFRST; 05188000
|
|
TAKEFRST ~ TAKE(ELBAT[I].LINK+ELBAT[I].INCR); 05189000
|
|
COMMENT STUFFF DIALS THE F-REGISTER INTO THE F-REGISTER FIELD OF A 05196000
|
|
DESCRIPTOR. THE DESCRIPTOR REMAINS ON THE TOP OF THE 05197000
|
|
STACK; 05198000
|
|
PROCEDURE STUFFF(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; 05199000
|
|
BEGIN 05200000
|
|
EMITPAIR(ADDRESS,LOD); 05201000
|
|
EMITN(512); 05202000
|
|
EMITD(33,18,15) END STUFFF; 05203000
|
|
COMMENT LOCAL IS USED TO SEE WHETHER OR NOT A LABEL IS LOCAL TO OUR 05204000
|
|
PRESENT CODE; 05205000
|
|
BOOLEAN PROCEDURE LOCAL(ELBATWORD); 05206000
|
|
VALUE ELBATWORD; REAL ELBATWORD; 05207000
|
|
BEGIN IF ELBATWORD.LVL = LEVEL AND 05208000
|
|
NOT BOOLEAN(ELBATWORD.FORMAL) THEN 05209000
|
|
LOCAL ~ TRUE END LOCAL; 05210000
|
|
COMMENT PASSFORMAT COMPILES CODE THAT PASSES A FORMAT. TWO ITEMS ARE 05211000
|
|
PASSED - THE ARRAY REFERENCING FORMAT TABLE AND THE 05212000
|
|
STARTING INDEX. THE ROUTINE HANDLES SUPERFORMATS ALSO; 05213000
|
|
PROCEDURE PASSFORMAT; 05214000
|
|
BEGIN INTEGER ADRES; 05215000
|
|
CHECKER(ELBAT[I]); 05216000
|
|
ADRES ~ ELBAT[I].ADDRESS; 05217000
|
|
IF BOOLEAN(ELBAT[I].FORMAL) 05218000
|
|
THEN BEGIN EMITV(ADRES); ADRES ~ ADRES-1 END 05219000
|
|
ELSE BEGIN 05220000
|
|
IF TABLE(I) = SUPERFRMTID 05221000
|
|
THEN EMITL(TAKEFRST) ELSE EMITL(ELBAT[I].INCR)05222000
|
|
END; 05223000
|
|
IF TABLE(I) = SUPERFRMTID 05224000
|
|
THEN BEGIN BANA; I ~ I-1; 05225000
|
|
EMITO(SSP); EMITO(ADD); EMITV(ADRES) END; 05226000
|
|
EMITPAIR(ADRES,LOD) END PASSFORMAT; 05227000
|
|
COMMENT STREAMWORDS EITHER RESERVES OR UNRESERVES STREAM RESERVED 05228000
|
|
WORDS - IT COMPLEMENTS THEIR STATE; 05229000
|
|
PROCEDURE STREAMWORDS; 05230000
|
|
BEGIN GT1 ~ 0; 05231000
|
|
DO BEGIN 05232000
|
|
INFO[1,GT1].LINK~STACKHEAD[GT2~(T~INFO[1,GT1]).ADDRESS];05233000
|
|
STACKHEAD[GT2] ~ T.LINK; 05234000
|
|
GT1 ~ GT1+2; 05235000
|
|
END UNTIL BOOLEAN(T.FORMAL) END STREAMWORDS; 05236000
|
|
STREAM PROCEDURE DEBUGDESC(LIN,PRT,TYP,RELAD,SGNO); 05237000
|
|
VALUE PRT,TYP,RELAD,SGNO; 05237500
|
|
BEGIN LOCAL COUNT; 05238000
|
|
DI:=LIN; DS:=6 LIT" PRT("; SI:=LOC PRT; SI:=SI+4; TALLY:=4; 05238500
|
|
3(IF SC="0" THEN % DONT PRINT LEADING ZEROES. 05239000
|
|
BEGIN SI:=SI+1; TALLY:=TALLY+63 END ELSE JUMP OUT); 05239500
|
|
COUNT:=TALLY; DS:=COUNT CHR; 05240000
|
|
DS:= 31 LIT") = SEGMENT DESCRIPTOR, TYPE = "; 05240500
|
|
SI:=LOC TYP; SI:=SI+7; DS:=CHR; % TYPE. 05241000
|
|
DS:=21 LIT", RELATIVE ADDRESS = "; 05241500
|
|
SI:=LOC RELAD; SI:=SI+4; DS:=4 CHR; % REL. ADDR. 05242000
|
|
DS:=19 LIT", SEGMENT NUMBER = "; 05242500
|
|
SI:=LOC SGNO; SI:=SI+4; DS:=4 CHR; DS:=LIT"."; 05243000
|
|
END DEBUGDESC; 05243500
|
|
REAL PROCEDURE PROGDESCBLDR(TYPE,RELAD,SPAC); 05245000
|
|
COMMENT THIS PROCEDURE BUILDS PDPRT AS DESCRIBED ABOVE, IT IS 05246000
|
|
CONCERNED WITH TYPE 1 ENTRIES.THE INFORMATION FURNISHED 05247000
|
|
BY PDPRT ALLOWS A DRUM DESCRIPTOR TO BE BUILT FOR EACH 05248000
|
|
SEGMENT AND A PSEUDO PROGRAM DESCRIPTOR TO BE BUILT INTO 05249000
|
|
THE OBJECT TIME PRT. THE 3 PARAMETERS FUNCTION AS FOLLOWS: 05250000
|
|
TYPE --- THIS 2 BIT QUANTITY FURNISHES THE MODE05251000
|
|
AND ARGUMENT BIT FOR THE PROGRAM 05252000
|
|
DESCRIPTOR TO BE BUILT. 05253000
|
|
RELAD --- RELATIVE WORD ADDRESS WITHIN SEGMENT 05254000
|
|
SPAC --- IF=0 THEN A SPACE MUST BE OBTAINED 05255000
|
|
IF!0 THEN SPACE IS ALREADY GOTTEN 05256000
|
|
ALL PROGRAM DESCRIPTORS REQUIRE A PERMANENT SPACE IN PRT. 05257000
|
|
PDINX IS THE INDEX FOR PDPRT.IT IS GLOBAL AND 0 INITIALLY; 05258000
|
|
VALUE TYPE,RELAD,SPAC;REAL TYPE,RELAD,SPAC; 05259000
|
|
BEGIN IF SPAC=0 THEN SPAC:=GETSPACE(TRUE,-2);% DESCR. 05260000
|
|
PDPRT[PDINX.[37:5],PDINX.[42:6]]~0&RELAD[18:36:10] 05261000
|
|
&SGNO[28:38:10]&TYPE[4:46:2]&SPAC[8:38:10]; 05262000
|
|
IF DEBUGTOG THEN 05263000
|
|
BEGIN 05263500
|
|
BLANKET(14,LIN); 05264000
|
|
DEBUGDESC(LIN,B2D(SPAC),TYPE,B2D(RELAD),B2D(SGNO));05264500
|
|
IF NOHEADING THEN DATIME; WRITELINE; 05265000
|
|
END; 05265100
|
|
PDINX~PDINX+1;PROGDESCBLDR~SPAC END PROGDESCBLDR; 05266000
|
|
COMMENT DOTSYNTAX ANALYSES THE SYNTAX OF A PARTIAL WORD DESIGNATOR. 05267000
|
|
IT REPORTS IF AN ERROR IS FOUND. IT RETURNS WITH THE 05268000
|
|
LITERALS INVOLVED; 05269000
|
|
BOOLEAN PROCEDURE DOTSYNTAX(FIRST,SECOND); 05270000
|
|
INTEGER FIRST,SECOND; 05271000
|
|
BEGIN 05272000
|
|
LABEL EXIT; 05273000
|
|
IF STEPI = FIELDID THEN % GET INFO FROM INFO %117-05273100
|
|
BEGIN %117-05273200
|
|
FIRST := ELBAT[I].SBITF; %117-05273300
|
|
SECOND := ELBAT[I].NBITF; %117-05273400
|
|
GO TO EXIT; %117-05273500
|
|
END %117-05273600
|
|
ELSE %117-05273700
|
|
IF ELCLASS = LFTBRKET THEN %117-05273800
|
|
IF STEPI = FIELDID THEN %117-05273900
|
|
BEGIN %117-05274000
|
|
FIRST := ELBAT[I].SBITF; %117-05274100
|
|
SECOND := ELBAT[I].NBITF; %117-05274200
|
|
IF STEPI = RTBRKET THEN %117-05274300
|
|
GO TO EXIT; %117-05274400
|
|
END %117-05274500
|
|
ELSE %117-05274600
|
|
IF ELCLASS = LITNO THEN %117-05275000
|
|
IF STEPI = COLON THEN 05276000
|
|
IF STEPI = LITNO THEN 05277000
|
|
IF STEPI = RTBRKET THEN 05278000
|
|
COMMENT IF TESTS ARE PASSED THEN SYNTAX IS CORRECT; 05279000
|
|
IF (FIRST ~ ELBAT[I-3].ADDRESS) | 05280000
|
|
(SECOND ~ ELBAT[I-1].ADDRESS)!0 THEN 05281000
|
|
IF FIRST + SECOND { 48 THEN 05282000
|
|
COMMENT IF TESTS ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 05283000
|
|
GO TO EXIT; 05284000
|
|
ERR(114); COMMENT ERROR IF SYNTAX OR RANGE FAILS; 05285000
|
|
DOTSYNTAX ~ TRUE; EXIT: END DOTSYNTAX; 05286000
|
|
BOOLEAN PROCEDURE CHECK(ELBATCLASS,ERRORNUMBER); 05287000
|
|
VALUE ELBATCLASS,ERRORNUMBER; 05288000
|
|
REAL ELBATCLASS,ERRORNUMBER; 05289000
|
|
BEGIN COMMENT CHECK COMPARES ELBATCLASS WITH TABLE(I). IF THEY 05290000
|
|
ARE NOT EQUAL, CHECK IS SET TRUE AND THE ERROR ROUTINE IS 05291000
|
|
CALLED PASSING ERRORNUMBER. IF THEY ARE EQUAL CHECK IS SET05292000
|
|
FALSE; 05293000
|
|
IF CHECK~(ELBATCLASS ! TABLE(I)) 05294000
|
|
THEN ERR(ERRORNUMBER); 05295000
|
|
END; 05296000
|
|
BOOLEAN PROCEDURE RANGE(LOWER,UPPER); 05297000
|
|
VALUE LOWER,UPPER; 05298000
|
|
REAL LOWER,UPPER; 05299000
|
|
COMMENT RANGE TESTS THE CLASS OF THE ITEM IN ELBAT[I] TO SEE IF 05300000
|
|
IT IS GREATER THAN OR EQUAL TO LOWER OR LESS THAN OR EQUAL TO 05301000
|
|
UPPER AND SETS RANGE TO TRUE OR FALSE ACCORDINGLY. THE ITEMS 05302000
|
|
CLASS MUST BE IN ELCLASS; 05303000
|
|
RANGE~ELCLASS } LOWER AND ELCLASS { UPPER; 05304000
|
|
COMMENT GET OBTAINS A SYLLABLE FROM EDOC, THE ARRAY INTO WHICH CODE IS 05305000
|
|
EMITTED; 05306000
|
|
INTEGER PROCEDURE GET(L); VALUE L; REAL L; 05307000
|
|
BEGIN 05308000
|
|
INTEGER STREAM PROCEDURE GETSYL(W,S); VALUE S; 05309000
|
|
BEGIN DI ~ LOC GETSYL; DI ~ DI+6; 05310000
|
|
SI ~ W; SI ~ SI+S; SI ~ SI+S; DS ~ 2 CHR END; 05311000
|
|
GET ~ GETSYL(EDOC[L.[36:3],L.[39:7]],L.[46:2]) END GET; 05312000
|
|
COMMENT CALL SWITCH PERFORMS THE FINAL MESS OF GETTING A PROPER DE- 05313000
|
|
SCRIPTOR TO THE TOP OF THE STACK; 05314000
|
|
PROCEDURE CALLSWITCH(H); VALUE H; REAL H; 05315000
|
|
BEGIN EMITV(GNAT(H)); EMITO(PRTE); EMITO(LOD) END CALLSWITCH; 05316000
|
|
REAL STREAM PROCEDURE GETALPHA(INFOINDEX,SIZE); 05317000
|
|
VALUE SIZE ; 05318000
|
|
BEGIN COMMENT GETALPHA PICKS ALPHA CHARACTERS OUT OF INFO AND 05319000
|
|
FORMATS THE ID WORD THAT IS PASSED TO PRINTI. THE FIRST 05320000
|
|
CHARACTER CONTAINS THE SIZE. THE NEXT CHARACTER CONTAINS THE 05321000
|
|
ALPHA LEFT JUSTIFIED WITH TRAILING ZEROS; 05322000
|
|
DI~LOC GETALPHA; DS~8 LIT"0 "; DI~DI-7; 05323000
|
|
SI~INFOINDEX; SI~SI+3; DS~SIZE CHR; 05324000
|
|
END GETALPHA; 05325000
|
|
PROCEDURE WRITEPRT(PORS,N,GS); VALUE PORS,N,GS; INTEGER PORS,N,GS; 05325010
|
|
BEGIN 05325020
|
|
LABEL EXIT; 05325030
|
|
STREAM PROCEDURE FILLIT(LIN,PORS,CELL,N,ID); 05325040
|
|
VALUE PORS,CELL,N; 05325050
|
|
BEGIN 05325060
|
|
LOCAL COUNT; 05325070
|
|
LABEL M0,M1,M2,M3,M4,M5,M6,M7,XIT; 05325080
|
|
SI:=LOC PORS; SI:=SI+3; DI:=LIN; % "PRT" OR "STACK". 05325090
|
|
IF SC="P" THEN 05325100
|
|
BEGIN DS:=3 CHR; DS:=LIT"("; END 05325110
|
|
ELSE BEGIN 05325120
|
|
DS:=5 CHR; DS:=LIT"("; SI:=LOC CELL; SI:=SI+5; 05325130
|
|
IF SC}"6" THEN DS:=2 LIT"F-" ELSE DS:=2 LIT"F+"; 05325140
|
|
COUNT:=DI; DI:=LOC CELL; DI:=DI+4; 05325150
|
|
DS:=11 RESET; DI:=COUNT; 05325160
|
|
END; 05325170
|
|
SI:=LOC CELL; SI:=SI+4; TALLY:=4; % LOCATION. 05325180
|
|
3(IF SC="0" THEN % DONT PRINT LEADING ZEROES. 05325190
|
|
BEGIN SI:=SI+1; TALLY:=TALLY+63 END ELSE JUMP OUT); 05325200
|
|
COUNT:=TALLY; DS:=COUNT CHR; TALLY:=0; COUNT:=TALLY; 05325210
|
|
DS:=4 LIT") = "; CELL:=DI; % SAVE OUR PLACE. 05325220
|
|
CI:=CI+N; 05325230
|
|
GO M0; 05325240
|
|
GO M1; 05325250
|
|
GO M2; 05325260
|
|
GO M3; 05325270
|
|
GO M4; 05325280
|
|
GO M5; 05325290
|
|
GO M6; 05325300
|
|
GO M7; 05325310
|
|
M0: SI:=ID; SI:=SI+2; DI:=LOC COUNT; 05325320
|
|
DI:=DI+7; DS:=CHR; DI:=CELL; DS:=COUNT CHR; 05325330
|
|
GO XIT; 05325340
|
|
M1: DI:=CELL; DS:=19 LIT"*TEMPORARY STORAGE*"; GO XIT; 05325350
|
|
M2: DI:=CELL; 05325360
|
|
DS:=36 LIT"*LIST, LABEL, OR SEGMENT DESCRIPTOR*"; GO XIT; 05325370
|
|
M3: DI:=CELL; DS:=27 LIT"*CASE STATEMENT DESCRIPTOR*"; GO XIT; 05325380
|
|
M4: DI:=CELL; DS:=19 LIT"*FORMAT DESCRIPTOR*"; GO XIT; 05325390
|
|
M5: DI:=CELL; DS:=24 LIT"*OUTER BLOCK DESCRIPTOR*"; GO XIT; 05325400
|
|
M6: DI:=CELL; DS:=20 LIT"*SEGMENT DESCRIPTOR*"; GO XIT; 05325410
|
|
M7: DI:=CELL; DS:=18 LIT"*LABEL DESCRIPTOR*"; 05325420
|
|
XIT: 05325430
|
|
END FILLIT; 05325440
|
|
BLANKET(14,LIN); 05325450
|
|
IF N=1 THEN FILLIT(LIN,PORS,GS,0,ACCUM[1]) 05325460
|
|
ELSE IF N>1 THEN FILLIT(LIN,PORS,GS,0,INFO[N.LINKR,N.LINKC]) 05325470
|
|
ELSE FILLIT(LIN,PORS,GS,ABS(N),N); 05325480
|
|
IF NOHEADING THEN DATIME; WRITELINE; 05325490
|
|
END WRITEPRT; 05325500
|
|
COMMENT GETSPACE MAKES ASSIGNMENTS TO VARIABLES AND DESCRIPTORS IN 05326000
|
|
THE STACK AND PRT. PERMANENT TELLS WHETHER IT IS A 05327000
|
|
PERMANENTLY ASSIGNED CELL (ALWAYS IN PRT) OR NOT. NON 05328000
|
|
PERMANENT CELLS ARE EITHER IN STACK OR PRT ACCORDING TO 05329000
|
|
MODE. CARE IS TAKEN TO REUSE NON PERMANENT PRT CELLS; 05330000
|
|
INTEGER PROCEDURE GETSPACE(PERMANENT,L); VALUE PERMANENT,L; 05331000
|
|
BOOLEAN PERMANENT; INTEGER L; 05333000
|
|
BEGIN LABEL L1,L2,EXIT; 05334000
|
|
BOOLEAN STREAM PROCEDURE MASK(K); VALUE K; 05341000
|
|
BEGIN DI~LOC MASK; DI~DI+2; SKIP K DB; DS~SET END MASK; 05342000
|
|
BOOLEAN M,Q; 05343000
|
|
INTEGER ROW,COL,GS; 05344000
|
|
IF PERMANENT 05345000
|
|
THEN BEGIN 05346000
|
|
IF PRTIMAX>1022 THEN FLAG(148);% 05347000
|
|
SPRT[GS~PRTIMAX.[38:5]] ~ MASK(PRTIMAX.[43:5]-35) 05348000
|
|
OR SPRT[GS]; 05349000
|
|
PRTIMAX ~ (GS ~ PRTIMAX)+1 END 05350000
|
|
ELSE IF MODE = 0 THEN BEGIN 05351000
|
|
Q ~ SPRT[ROW ~ PRTI.[38:5]]; 05352000
|
|
M ~ MASK(COL ~ PRTI.[43:5]-35); 05353000
|
|
COL ~ COL+35; 05354000
|
|
L1: IF REAL(M AND Q) ! 0 05355000
|
|
THEN BEGIN 05356000
|
|
IF REAL(BOOLEAN(GS~4294967296-REAL(M)) AND Q) =GS 05357000
|
|
THEN BEGIN 05358000
|
|
COL ~ 0; M ~ TRUE; 05359000
|
|
IF ROW ~ ROW+1 > 31 05360000
|
|
THEN BEGIN FLAG(148); GS ~ PRTIMAX; 05361000
|
|
GO TO L2 END; 05362000
|
|
Q ~ SPRT[ROW]; 05363000
|
|
GO TO L1 END; 05364000
|
|
COL ~ COL+1; M ~ BOOLEAN(REAL(M)+REAL(M)); 05365000
|
|
GO TO L1 END; 05366000
|
|
PRTI ~ (GS ~ 32|ROW+COL)+1; 05367000
|
|
IF PRTI > PRTIMAX THEN PRTIMAX ~ PRTI END 05368000
|
|
ELSE BEGIN 05369000
|
|
IF STACKCTR > 767 THEN FLAG(149); 05370000
|
|
STACKCTR ~ (GS ~ STACKCTR)+1; Q ~ FALSE; 05371000
|
|
GO TO EXIT END; 05372000
|
|
L2: IF GS } 512 THEN GS ~ GS+1024; 05373000
|
|
Q ~ TRUE; 05374000
|
|
EXIT: GETSPACE ~ GS; 05375000
|
|
IF GS > 1023 THEN GS ~ GS-1024; 05376000
|
|
IF PRTOG THEN WRITEPRT(IF Q THEN "PRT " ELSE "STACK",L,B2D(GS)); 05376100
|
|
END GETSPACE; 05378000
|
|
COMMENT ARRAYCHECK CHECKS A PARAMTER-INFO WORD FOR SORT/MERGE; 05379000
|
|
BOOLEAN PROCEDURE ARRAYCHECK(AAW); VALUE AAW; REAL AAW; 05380000
|
|
ARRAYCHECK~AAW.CLASS<BOOARRAYID OR AAW.CLASS>INTARRAYID 05381000
|
|
OR AAW.INCR !1; 05382000
|
|
COMMENT COMMACHECK LOOKS FOR COMMAS AND STEPS AROUND THEM; 05383000
|
|
BOOLEAN PROCEDURE COMMACHECK; 05384000
|
|
BEGIN IF NOT(COMMACHECK~(STEPI=COMMA)) THEN ERR(350); 05385000
|
|
STEPIT 05386000
|
|
END COMMACHECK; 05387000
|
|
COMMENT HVCHECK CHECKS VALIDITY OF HIVALU PROCEDURE FOR SORT; 05388000
|
|
BOOLEAN PROCEDURE HVCHECK(ELBW); VALUE ELBW; REAL ELBW; 05389000
|
|
IF ELBW.CLASS!PROCID THEN ERR(356) ELSE 05390000
|
|
IF BOOLEAN(ELBW.FORMAL) THEN HVCHECK~TRUE ELSE 05390100
|
|
IF TAKE(GT1~GIT(ELBW))!1 THEN ERR(357) ELSE 05391000
|
|
IF ARRAYCHECK(TAKE(GT1+1)) THEN ERR(358) ELSE 05392000
|
|
HVCHECK~TRUE; 05393000
|
|
COMMENT OUTPROCHECK CHECKS SORT/MERGE OUTPUT PROCEDURE; 05394000
|
|
BOOLEAN PROCEDURE OUTPROCHECK(ELBW); VALUE ELBW; REAL ELBW; 05395000
|
|
IF ELBW.CLASS!PROCID THEN ERR(351) ELSE 05396000
|
|
IF BOOLEAN(ELBW.FORMAL) THEN OUTPROCHECK~TRUE ELSE 05396100
|
|
IF TAKE(GT1~GIT(ELBW))!2 THEN ERR(352) ELSE 05397000
|
|
IF TAKE(GT1~1).CLASS!BOOID THEN ERR(353) ELSE 05398000
|
|
IF ARRAYCHECK(TAKE(GT1+2)) THEN ERR(354) ELSE 05399000
|
|
OUTPROCHECK~TRUE; 05400000
|
|
COMMENT EQLESCHECK CHECKS THE COMPARE ROUTINE FOR SORT/MERGE; 05401000
|
|
BOOLEAN PROCEDURE EQLESCHECK(ELBW); VALUE ELBW; REAL ELBW; 05402000
|
|
IF ELBW.CLASS!BOOPROCID THEN ERR(359) ELSE 05403000
|
|
IF BOOLEAN (ELBW.FORMAL) THEN EQLESCHECK ~ TRUE ELSE 05403100
|
|
IF TAKE(GT1~GIT(ELBW))!2 THEN ERR(360) ELSE 05404000
|
|
IF ARRAYCHECK(TAKE(GT1+1)) THEN ERR(361) ELSE 05405000
|
|
IF ARRAYCHECK(TAKE(GT1+2)) THEN ERR(362) ELSE 05406000
|
|
EQLESCHECK~TRUE; 05407000
|
|
COMMENT ROUTINES IN THIS SECTION COMPILE CODE FOR ALL EXPRESSIONS;06000000
|
|
COMMENT AEXP IS THE ARITHMETIC EXRESSION ROUTINE; 06001000
|
|
PROCEDURE AEXP; 06002000
|
|
BEGIN 06003000
|
|
IF ELCLASS = IFV 06004000
|
|
THEN BEGIN IF IFEXP ! ATYPE THEN ERR(102) END 06005000
|
|
ELSE BEGIN ARITHSEC; SIMPARITH END 06006000
|
|
END AEXP; 06007000
|
|
COMMENT ARITHSEC COMPILES FIRST PRIMARY IN AN ARITHMETIC EXPRESSION. 06008000
|
|
IN PARTICULAR IT HANDLES P, +P, -P, AND -P*Q WHERE P 06009000
|
|
AND Q ARE PRIMARIES; 06010000
|
|
PROCEDURE ARITHSEC; 06011000
|
|
BEGIN 06012000
|
|
IF ELCLASS = ADOP 06013000
|
|
THEN BEGIN 06014000
|
|
STEPIT; 06015000
|
|
IF ELBAT[I-1].ADDRESS = ADD THEN PRIMARY 06016000
|
|
ELSE BEGIN 06017000
|
|
PRIMARY; 06018000
|
|
WHILE ELCLASS = FACTOP DO %WF 06019000
|
|
BEGIN STEPIT; PRIMARY; EMITUP END; %WF 06020000
|
|
ENDTOG ~ LINKTOG; EMITO(CHS); 06021000
|
|
LINKTOG ~ ENDTOG; ENDTOG ~ FALSE END END 06022000
|
|
ELSE PRIMARY END ARITHSEC; 06023000
|
|
COMMENT SIMPARITH COMPILES SIMPLE ARITHMETIC EXPRESSIONS ON THE 06024000
|
|
ASSUMPTION THAT AN ARITHMETIC PRIMARY HAS ALREADY BEEN 06025000
|
|
COMPILED. IT ALSO HANDLES THE CASE OF A CONCATENATE 06026000
|
|
WHERE ACTUALPARAPART CAUSED THE VARIABLE ROUTINE TO 06027000
|
|
COMPILE ONLY PART OF A PRIMARY. MOST OF THE WORK OF 06028000
|
|
SIMPARITH IS DONE BY ARITHCOMP, AN ARTIFIAL ROUTINE 06029000
|
|
WHICH DOES THE HIERARCHY ANALYSIS USING RECURSION. 06030000
|
|
ARITHCOMP IS A SUBROUTINE ONLY TO GET THIS RECURSION; 06031000
|
|
PROCEDURE SIMPARITH; 06032000
|
|
BEGIN 06033000
|
|
WHILE ELCLASS = AMPERSAND 06034000
|
|
DO BEGIN STEPIT; PRIMARY; PARSE END; 06035000
|
|
WHILE ELCLASS}ADOP AND ELCLASS{FACTOP DO ARITHCOMP END; 06036000
|
|
COMMENT ARITHCOMP IS THE GUTS OF THE ARITHMETIC EXPRESSION ROUTINE 06037000
|
|
ANALYSIS. IT CALLS PRIMARY AT APPROPRIATE TIMES AND 06038000
|
|
EMITS THE ARITHMETIC OPERATORS. THE HIERARCHY ANALYSIS 06039000
|
|
IS OBTAINED BY RECURSION; 06040000
|
|
PROCEDURE ARITHCOMP; 06041000
|
|
BEGIN INTEGER OPERATOR, OPCLASS; 06042000
|
|
DO BEGIN 06043000
|
|
OPERATOR ~ 1 & ELBAT[I] [36:17:10]; 06044000
|
|
COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 06045000
|
|
ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [17:10] 06046000
|
|
OF THE ELBAT WORD; 06047000
|
|
OPCLASS ~ ELCLASS; 06048000
|
|
STEPIT; PRIMARY; 06049000
|
|
IF OPCLASS = FACTOP THEN EMITUP 06050000
|
|
ELSE BEGIN 06051000
|
|
WHILE OPCLASS < ELCLASS DO ARITHCOMP; 06052000
|
|
COMMENT THE CLASSES ARE ARRANGED IN ORDER OF HIERARCHY; 06053000
|
|
STACKCT ~ 1; %A06053500
|
|
EMIT(OPERATOR) END 06054000
|
|
END UNTIL OPCLASS ! ELCLASS END ARITHCOMP; 06055000
|
|
COMMENT IMPFUN HANDLES ALL OF THE SPECIAL FUNCTIONS; 06056000
|
|
PROCEDURE IMPFUN; 06057000
|
|
BEGIN 06058000
|
|
REAL T1,T2,T3 ; 06059000
|
|
BOOLEAN B ; 06059050
|
|
DEFINE ERRX(ERRX1)=BEGIN T1~ERRX1; GO ERROR END #; 06059100
|
|
LABEL ABS, SIGN, ENTIER, TIME, STATUS,% 06060000
|
|
MAXANDMIN, DELAY, OTHERS, EXIT;% 06060100
|
|
LABEL ERROR,L1,L2,L3 ; 06060110
|
|
SWITCH S ~ OTHERS, ABS, SIGN, ENTIER, TIME, STATUS,% 06061000
|
|
MAXANDMIN, MAXANDMIN, DELAY;% 06061100
|
|
DEFINE MAXV = 6#;% 06061200
|
|
IF T2~(T1~ELBAT[I]).[27:6]<9 THEN GO S[T2+1] ; 06062000
|
|
IF T2!25 THEN EMITO(MKS) ; 06062110
|
|
IF STEPI!LEFTPAREN THEN ERRX(105); STEPIT ; 06062120
|
|
IF T2<24 THEN 06062125
|
|
BEGIN 06062130
|
|
L3: IF TABLE(I+1)=COMMA THEN 06062135
|
|
IF ELCLASS>BOOID AND ELCLASS<BOOARRAYID THEN 06062140
|
|
BEGIN 06062145
|
|
CHECKER(T3~ELBAT[I]); STEPIT; STEPIT ; 06062150
|
|
AEXP; EMITV(T3.ADDRESS); GO L1 ; 06062155
|
|
END ; 06062160
|
|
L2: AEXP; IF ELCLASS!COMMA THEN ERRX(80); STEPIT ; 06062165
|
|
AEXP; IF T2<24 THEN EMITO(XCH) ; 06062170
|
|
END 06062175
|
|
ELSE BEGIN 06062180
|
|
IF T2=24 THEN GO L2; EMITL(0); AEXP ; 06062185
|
|
IF ELCLASS!COMMA THEN ERRX(80); EMITPAIR(9,SND) ; 06062190
|
|
EMITD(1,1,8); STEPIT; AEXP ; 06062195
|
|
END ; 06062200
|
|
L1: IF T2<23 THEN BEGIN IF ELCLASS!COMMA THEN ERRX(80) END 06062210
|
|
ELSE IF ELCLASS!RTPAREN THEN ERRX(104) ; 06062220
|
|
STEPIT ; 06062230
|
|
IF T2<21 OR B THEN 06062280
|
|
BEGIN EMITV(GNAT(T1)) ; 06062285
|
|
B~ELCLASS=INTID OR ELCLASS=INTARRAYID 06062290
|
|
OR ELCLASS=INTPROCID ; 06062295
|
|
IF ELCLASS}REALID AND ELCLASS{INTID THEN 06062340
|
|
BEGIN EMITN(ELBAT[I].ADDRESS); STEPIT END 06062350
|
|
ELSE IF ELCLASS<BOOID AND ELCLASS>BOOPROCID THEN 06062370
|
|
IF ELBAT[I].LINK!PROINFO.LINK THEN FLAG(211)06062380
|
|
ELSE BEGIN EMITL(514); STEPIT END 06062385
|
|
ELSE IF ELCLASS<LABELID AND ELCLASS>BOOARRAYID 06062390
|
|
THEN VARIABLE(FL) 06062400
|
|
ELSE ERRX(185) ; 06062420
|
|
IF ELCLASS!RTPAREN THEN ERRX(104); STEPIT ; 06062430
|
|
EMITO(IF B THEN ISD ELSE STD); EMITV(17); GO EXIT ;06062435
|
|
END ; 06062440
|
|
IF T2<23 THEN 06062470
|
|
BEGIN % DMOD, DARCTAN2 06062480
|
|
B~TRUE; GO L3 ; 06062500
|
|
END ; 06062535
|
|
IF T2<25 THEN BEGIN EMITV(GNAT(T1)); GO EXIT END ; 06062540
|
|
EMITD(9,47,1); EMITV(9); EMITO(ADD); GO EXIT ; 06062560
|
|
ERROR: ERR(T1); GO EXIT ; 06062565
|
|
OTHERS: EMITO(MKS) ; 06064000
|
|
PANA; 06065000
|
|
EMITV(GNAT(T1)); GO TO EXIT; 06066000
|
|
ABS: PANA; EMITO(SSP); GO TO EXIT; 06067000
|
|
SIGN: PANA; 06068000
|
|
EMITO(DUP); EMITL(0); EMITO(NEQ); EMITO(XCH); 06069000
|
|
EMITD(1,1,1); GO TO EXIT; 06070000
|
|
ENTIER: PANA; EMITNUM(.5); EMITO(SUB); 06071000
|
|
EMITPAIR(JUNK,ISN); GO TO EXIT; 06072000
|
|
MAXANDMIN:% 06072010
|
|
IF STEPI!LEFTPAREN THEN ERR(105) ELSE% 06072030
|
|
BEGIN STEPIT; AEXP;% 06072040
|
|
WHILE ELCLASS=COMMA DO% 06072050
|
|
BEGIN STEPIT; EMITO(DUP); AEXP;% 06072060
|
|
EMITPAIR(JUNK, SND);% 06072070
|
|
IF T2=MAXV THEN EMITO(LSS) ELSE EMITO(GTR) ; 06072080
|
|
EMITPAIR(2, BFC); EMITO(DEL); EMITV(JUNK); 06072090
|
|
END;% 06072100
|
|
IF ELCLASS!RTPAREN THEN ERR(104) ELSE STEPIT;% 06072110
|
|
END;% 06072120
|
|
GO TO EXIT;% 06072130
|
|
DELAY: IF STEPI!LEFTPAREN THEN% 06072200
|
|
BEGIN ERR(105); GO TO EXIT END;% 06072210
|
|
STEPIT; AEXP; IF ELCLASS!COMMA THEN% 06072220
|
|
BEGIN ERR(165); GO TO EXIT END;% 06072230
|
|
STEPIT; AEXP; IF ELCLASS!COMMA THEN% 06072240
|
|
BEGIN ERR(165); GO TO EXIT END;% 06072250
|
|
STEPIT; AEXP; IF ELCLASS!RTPAREN THEN% 06072260
|
|
BEGIN ERR(104); GO TO EXIT END ELSE STEPIT;% 06072270
|
|
EMITPAIR(31, COM); EMITO(DEL); EMITO(DEL);% 06072280
|
|
GO TO EXIT;% 06072290
|
|
TIME: PANA; EMITL(1); EMITO(COM); 06073000
|
|
GO TO EXIT; 06073100
|
|
STATUS: IF STEPI!LEFTPAREN THEN BEGIN ERR(105); GO TO EXIT END; 06073200
|
|
IF STEPI=SUPERFILEID OR ELCLASS=FILEID THEN 06073250
|
|
BEGIN EMIT(16); EMIT(0); EMIT(0); PASSFILE; 06073300
|
|
EMITPAIR(32, COM); T1~3; 06073350
|
|
END ELSE BEGIN EMIT(4); EMIT(0); T1~0; 06073400
|
|
IF ELCLASS}BOOARRAYID AND ELCLASS{INTARRAYID THEN 06073450
|
|
BEGIN T1~FI; VARIABLE(T1); END ELSE AEXP; 06073500
|
|
IF T1=FI THEN 06073550
|
|
BEGIN EMITPAIR(0, XCH); EMITPAIR(32, COM); T1~3 06073600
|
|
END ELSE BEGIN IF ELCLASS=RTPAREN THEN 06073650
|
|
BEGIN EMIT(0); EMITPAIR(32, COM); T1~3 END 06073700
|
|
ELSE BEGIN EMITO(XCH); EMITO(DEL); 06073750
|
|
EMITO(XCH); EMITO(DEL); 06073800
|
|
IF ELCLASS!COMMA THEN 06073810
|
|
BEGIN ERR(129); GO TO EXIT END; 06073820
|
|
STEPIT; AEXP; EMITPAIR(28,COM); T1~1; 06073830
|
|
END; END; END; 06073840
|
|
GTI1~0; 06073845
|
|
DO EMITO(DEL) UNTIL GTI1~GTI1-1=T1;% 06073850
|
|
IF ELCLASS!RTPAREN THEN ERR(104) ELSE STEPIT; 06073860
|
|
GO TO EXIT; 06073870
|
|
EXIT: END IMPFUN; 06074000
|
|
COMMENT PRIMARY COMPILES ARITHMETIC PRIMARIES. IT HANDLES MOST CASES 06075000
|
|
OF THE CONCATENATE AND SOME CASES OF THE PARTIAL WORD 06076000
|
|
DESIGNATORS, ALTHOUGH VARIABLE HANDLES THE MORE COMMON 06077000
|
|
CASES; 06078000
|
|
PROCEDURE PRIMARY; 06079000
|
|
BEGIN 06080000
|
|
LABEL 06081000
|
|
L11, L12, L13, L14, L15, L16, L17, L18, L19, 06082000
|
|
L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, 06083000
|
|
L30, L31, L32, L33, L34, L35; 06084000
|
|
SWITCH S ~ 06085000
|
|
L11, L12, L13, L14, L15, L16, L17, L18, L19, 06086000
|
|
L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, 06087000
|
|
L30, L31, L32, L33, L34, L35; 06088000
|
|
COMMENT LN IS THE LABEL FOR THE CLASS N; 06089000
|
|
LABEL EXIT,RP,LDOT,LAMPER; 06090000
|
|
GO TO S[ELCLASS-PROCID]; COMMENT GO TO PROPER SYNTAXER; 06091000
|
|
IF ELCLASS = UNKNOWNID THEN ERR(100); 06092000
|
|
IF ELCLASS=FILEID OR ELCLASS=SUPERFILEID THEN 06092005
|
|
BEGIN 06092010
|
|
IF FILEATTRIBUTEHANDLER(FP)!ATYPE THEN FLAG(294) ; 06092015
|
|
GO TO LAMPER ; 06092020
|
|
END ; 06092025
|
|
L12: L13: L17: L21: L25: L29: L30: 06093000
|
|
COMMENT NO PRIMARY MAY BEGIN WITH QUANTITIES WITH THESE CLASSES; 06094000
|
|
IF REL AND ELCLASS = BOOARRAYID THEN GO L22; 06094950
|
|
ERR(103); GO TO EXIT; 06095000
|
|
L11: 06096000
|
|
COMMENT INTRINSIC FUNCTIONS; 06097000
|
|
IMPFUN; STACKCT ~ STACKCT-1; GO TO LDOT; %A06098000
|
|
L14: L15: L16: 06099000
|
|
COMMENT STREAM PROCEDURE FUNCTION DESIGNATORS; 06100000
|
|
IF ARRAYFLAG THEN CHECKBOUNDLVL; 06100100
|
|
STRMPROCSTMT; GO TO LDOT; 06101000
|
|
L18: L19: L20: 06102000
|
|
COMMENT ORDINARY FUNCTION DESIGNATORS; 06103000
|
|
IF ARRAYFLAG THEN CHECKBOUNDLVL; 06103100
|
|
PROCSTMT(FALSE); GO TO LDOT; 06104000
|
|
L22: L23: L24: L26: L27: L28: 06105000
|
|
COMMENT VARIABLES, SIMPLE AND SUBSCRIPTED; 06106000
|
|
IF ARRAYFLAG THEN CHECKBOUNDLVL; 06106100
|
|
VARIABLE(FP); GO TO LAMPER; 06107000
|
|
L32: 06108000
|
|
COMMENT LITERALS - I.E. INTEGERS BETWEEN 0 AND 1023; 06109000
|
|
EMIT(0&ELBAT[I] [36:17:10]); STEPIT;GO TO LAMPER; 06110000
|
|
L31: L33: 06111000
|
|
COMMENT STRINGS AND NONLITERALS; 06112000
|
|
EMITNUM(C); STEPIT; GO TO LAMPER; 06113000
|
|
L35: 06114000
|
|
COMMENT COULD BE REAL TRANSFER FUNCTION. IF IT IS COMPILE BOOLEAN06115000
|
|
EXPRESSION - OTHERWISE AN ERROR; 06116000
|
|
IF ELBAT[I].ADDRESS = REALV THEN BEGIN 06117000
|
|
IF STEPI ! LEFTPAREN 06118000
|
|
THEN BEGIN ERR(105); GO TO EXIT END; 06119000
|
|
STEPIT; BEXP; GO TO RP END; 06120000
|
|
IF ELBAT[I].ADDRESS = INTV THEN 06120100
|
|
BEGIN PANA; EMITPAIR(JUNK,ISN); GO TO LDOT END; 06120200
|
|
ERR(106); GO TO EXIT; 06121000
|
|
L34: 06122000
|
|
COMMENT (; 06123000
|
|
STEPIT; AEXP; 06124000
|
|
STACKCT ~ STACKCT-1; %A 06124500
|
|
RP: IF ELCLASS ! RTPAREN THEN BEGIN ERR(104); GO EXIT END; 06125000
|
|
STEPIT; 06126000
|
|
LDOT: DOT; COMMENT THIS CHECKS FOR PARTIAL WORDS; 06127000
|
|
LAMPER: STACKCT ~ STACKCT+1; %A 06128000
|
|
WHILE ELCLASS = AMPERSAND %A 06128500
|
|
DO BEGIN STEPIT; PRIMARY; PARSE END; 06129000
|
|
COMMENT THIS CODE HANDLES CANCATENATES; 06130000
|
|
EXIT: END PRIMARY; 06131000
|
|
COMMENT BEXP IS THE BOOLEAN EXPRESSION ROUTINE; 06132000
|
|
PROCEDURE BEXP; IF EXPRSS ! BTYPE THEN ERR(107); 06133000
|
|
COMMENT EXPRSS IS A GENERAL EXPRESSION ROUTINE CAPABLE OF COMPILING 06134000
|
|
ANY GIVEN TYPE OF EXPRESSION. IT REPORTS ON ITS ACTION 06135000
|
|
BY GIVING AS A RESULT EITHER ATYPE,BTYPE, OR DTYPE 06136000
|
|
DEPENDING ON WHETHER IT COMPILED AN ARITHMETIC, BOOLEAN, 06137000
|
|
OR DESIGNATIONAL EXPRESSION; 06138000
|
|
INTEGER PROCEDURE EXPRSS; 06139000
|
|
BEGIN 06140000
|
|
IF ELCLASS = IFV 06141000
|
|
THEN BEGIN 06142000
|
|
IF EXPRSS ~ IFEXP = ATYPE 06143000
|
|
THEN IF ELCLASS = RELOP THEN ERR(108) END 06144000
|
|
ELSE IF EXPRSS ~ BOOSEC = BTYPE THEN SIMPBOO 06145000
|
|
END EXPRSS; 06146000
|
|
COMMENT BOOSEC COMPILES EITHER A BOOLEAN SECONDARY OR AN ARITHMETIC 06147000
|
|
EXPRESSION OR A DESIGNATIONAL EXPRESSION. IT REPORTS 06148000
|
|
AS EXPRSS REPORTS; 06149000
|
|
INTEGER PROCEDURE BOOSEC; 06150000
|
|
BEGIN BOOLEAN N; 06151000
|
|
IF N ~ ELCLASS = NOTOP THEN STEPIT; 06152000
|
|
GT4 ~ BOOSEC ~ BOOPRIM; 06153000
|
|
IF N THEN BEGIN EMITLNG; EMIT(0); L ~ L-1; 06154000
|
|
COMMENT THE LAST LINE IS PREPARATORY. LATER ROUTINES USE THE 06155000
|
|
RESULTS HERE TO ELIMINATE PAIRS OF LNGS; 06156000
|
|
IF GT4 ! BTYPE THEN ERR(109) 06157000
|
|
COMMENT AN ARITHMETIC OR DESIGNATIONAL EXPRESSION MAY NOT BE 06158000
|
|
LOGICALLY NEGATED; 06159000
|
|
END END BOOSEC; 06160000
|
|
COMMENT SIMPBOO COMPILES SIMPLE BOOLEAN EXPRESSIONS ON THE ASSUMPTION 06161000
|
|
THAT A BOOLEAN PRIMARY HAS ALREADY BEEN COMPILED. IT 06162000
|
|
ALSO HANDLES THE CASE OF A CONCATENATE WHERE ACTUALPARA- 06163000
|
|
PART CAUSED THE VARIABLE ROUTINE TO COMPILE ONLY PART OF 06164000
|
|
A PRIMARY. MOST OF THE WORK OF SIMPBOO IS DONE BY BOO- 06165000
|
|
COMP. AN ARTIFIAL ROUTINE WHICH DOES THE HIERARCHY ANA- 06166000
|
|
LYSIS USING RECURSION; 06167000
|
|
PROCEDURE SIMPBOO; 06168000
|
|
BEGIN 06169000
|
|
WHILE ELCLASS = AMPERSAND 06170000
|
|
DO BEGIN 06171000
|
|
STEPIT; 06172000
|
|
IF BOOPRIM! BTYPE THEN ERR(109); 06173000
|
|
PARSE END; 06174000
|
|
WHILE ELCLASS } EQVOP AND ELCLASS { ANDOP DO BOOCOMP 06175000
|
|
END BOOCOMP; 06176000
|
|
COMMENT BOOCOMP IS THE GUTS OF THE BOOLEAN EXPRESSION ROUTINE ANALYSIS.06177000
|
|
IT CALLS BOOSEC AT APPROPRIATE TIMES AND EMITS THE BOOLEAN06178000
|
|
OPERATORS. THE HIERARCHY ANALYSIS IS OBTAINED BY RECUR- 06179000
|
|
SION; 06180000
|
|
PROCEDURE BOOCOMP; 06181000
|
|
BEGIN INTEGER OPCLASS, OPERATOR; LABEL EXIT; 06182000
|
|
DO BEGIN 06183000
|
|
OPERATOR ~ 1 & ELBAT[I] [36:17:10]; 06184000
|
|
COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 06185000
|
|
ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [17:10] 06186000
|
|
OF THE ELBAT WORD; 06187000
|
|
OPCLASS ~ ELCLASS; 06188000
|
|
STEPIT; 06189000
|
|
IF BOOSEC ! BTYPE 06190000
|
|
THEN BEGIN ERR(109); GO TO EXIT END; 06191000
|
|
WHILE OPCLASS < ELCLASS 06192000
|
|
DO IF ELCLASS { ANDOP THEN BOOCOMP 06193000
|
|
ELSE BEGIN ERR(110); GO TO EXIT END; 06194000
|
|
COMMENT THE CLASSES ARE ARRANGED IN ORDER OF HIERARCHY; 06195000
|
|
STACKCT ~ 1; %A 06195500
|
|
IF OPCLASS = IMPOP 06196000
|
|
THEN BEGIN 06197000
|
|
COMMENT SINCE IMP IS NOT IN THE MACHINE REPETOIRE WE MUST CONSTRUCT 06198000
|
|
ONE. NOTICE THAT WE USE EMITLNG IN ONE SPOT TO OBTAIN 06199000
|
|
THE CANCELING OF POSSIBLE MULTIBLE LNGS. ALSO THE 0 06200000
|
|
EMITTED PROVIDES THE POSSIBILITY OF DOING THIS IN THE 06201000
|
|
FUTURE. (SEE CODE FOR EMITLNG); 06202000
|
|
EMITLNG; 06203000
|
|
EMITO(LND); 06204000
|
|
EMITO(LNG); 06205000
|
|
EMITO(0); 06206000
|
|
L ~ L-1 END 06207000
|
|
ELSE EMIT(OPERATOR) 06208000
|
|
END UNTIL OPCLASS ! ELCLASS; 06209000
|
|
EXIT: END BOOCOMP; 06210000
|
|
COMMENT BOOPRIM COMPILES BOOLEAN PRIMARIES, AND ARITHMETIC OR 06211000
|
|
DESIGNATIONAL EXPRESSIONS. IT REPORTS AS EXPRSS REPORTS; 06212000
|
|
INTEGER PROCEDURE BOOPRIM; 06213000
|
|
BEGIN INTEGER TYPE; 06214000
|
|
LABEL L9, 06215000
|
|
L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, 06216000
|
|
L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, 06217000
|
|
L30, L31, L32, L33, L34, L35; 06218000
|
|
SWITCH S ~ L9, 06219000
|
|
L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, 06220000
|
|
L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, 06221000
|
|
L30, L31, L32, L33, L34, L35; 06222000
|
|
COMMENT LN IS THE LABEL FOR THE CLASS N; 06223000
|
|
LABEL EXIT,LE,D,TD,T; 06224000
|
|
LABEL FAH ; 06224500
|
|
GO TO S[ELCLASS-SUPERFILEID]; 06225000
|
|
IF ELCLASS = ADOP THEN GO TO L11; 06226000
|
|
IF ELCLASS = UNKNOWNID THEN ERR(100); 06227000
|
|
IF ELCLASS=FILEID OR ELCLASS=SUPERFILEID THEN 06227500
|
|
BEGIN 06227510
|
|
BOOPRIM~TYPE~FILEATTRIBUTEHANDLER(FP) ; 06227520
|
|
GO FAH ; 06227530
|
|
END ; 06227540
|
|
LE: L10: L12: 06228000
|
|
COMMENT NO BOOLEAN PRIMARY, ARITHMETIC EXPRESSION, OR DESIGNATIONAL 06229000
|
|
EXPRESSION MAY BEGIN WITH QUANTITIES WITH THESE CLASSES; 06230000
|
|
ERR(111); GO TO EXIT; 06231000
|
|
L35: IF GT1 ~ ELBAT[I].ADDRESS = BOOV 06232000
|
|
THEN BEGIN PANA; GO TO TD END; 06233000
|
|
IF GT1 ! REALV THEN BEGIN ERR(112); GO TO EXIT END; 06234000
|
|
L11: L14: L15: L16: L18: L19: L20: L22: L23: L24: L26: L27: L28: 06235000
|
|
L31: L32: L33: 06236000
|
|
COMMENT ARITHMETIC TYPE STUFF; 06237000
|
|
AEXP; 06238000
|
|
D: IF ELCLASS ! RELOP THEN BEGIN BOOPRIM ~ ATYPE;GO EXIT END;06239000
|
|
RELATION; 06240000
|
|
BOOPRIM ~ BTYPE; GO TO EXIT; 06241000
|
|
L13: 06242000
|
|
COMMENT BOOLEAN STREAM PROCEDURE DESIGNATOR; 06243000
|
|
IF ARRAYFLAG THEN CHECKBOUNDLVL; 06243100
|
|
STRMPROCSTMT; GO TO TD; 06244000
|
|
L17: 06245000
|
|
COMMENT BOOLEAN PROCEDURE DESIGNATOR; 06246000
|
|
IF ARRAYFLAG THEN CHECKBOUNDLVL; 06246100
|
|
PROCSTMT(FALSE); GO TO TD; 06247000
|
|
L21: L25: 06248000
|
|
COMMENT BOOLEAN VARIABLES; 06249000
|
|
IF ARRAYFLAG THEN CHECKBOUNDLVL; 06249100
|
|
VARIABLE(FP); GO TO T; 06250000
|
|
L9: L29: 06251000
|
|
COMMENT LABELS AND SWITCHES; 06252000
|
|
DEXP; BOOPRIM ~ DTYPE; GO TO EXIT; 06253000
|
|
L30: 06254000
|
|
COMMENT TRUE OR FALSE; 06255000
|
|
EMIT(0&ELBAT[I][45:26:1]); STEPIT; GO TO T; 06256000
|
|
L34: 06257000
|
|
COMMENT (; 06258000
|
|
STEPIT; TYPE ~ BOOPRIM ~ EXPRSS; 06259000
|
|
COMMENT COMPILE THE EXPRESSION, WHATEVER IT IS; 06260000
|
|
STACKCT ~ STACKCT-1; %A 06260500
|
|
IF ELCLASS ! RTPAREN THEN BEGIN ERR(104); GO TO EXIT END; 06261000
|
|
STEPIT; 06262000
|
|
FAH: 06262500
|
|
IF TYPE = DTYPE THEN GO TO EXIT; 06263000
|
|
COMMENT FINISHED IF EXPRESSION COMPILED WAS DESIGNATIONAL; 06264000
|
|
IF TYPE = BTYPE THEN BEGIN 06265000
|
|
TD: DOT; COMMENT HANDLES PARTIAL WORDS; 06266000
|
|
T: STACKCT ~ STACKCT+1; %A 06267000
|
|
WHILE ELCLASS = AMPERSAND DO %A 06267500
|
|
COMMENT HANDLES CONCATENATE; 06268000
|
|
BEGIN 06269000
|
|
STEPIT; 06270000
|
|
IF BOOPRIM ! BTYPE 06271000
|
|
THEN BEGIN ERR(109); GO TO EXIT END; 06272000
|
|
PARSE END; 06273000
|
|
BOOPRIM ~ BTYPE; GO TO EXIT END; 06274000
|
|
COMMENT IF NOT BOOLEAN OR DESIGNATIONAL, MUST COMPLETE ARITHMETIC 06275000
|
|
EXPRESSION; 06276000
|
|
DOT; SIMPARITH; GO TO D; 06277000
|
|
EXIT: END BOOPRIM; 06278000
|
|
COMMENT RELATION COMPILES RELATIONS. IT ASSUMES THAT THE LEFTHAND 06279000
|
|
EXPRESSION HAS ALREADY BEEN COMPILED; 06280000
|
|
PROCEDURE RELATION; 06281000
|
|
BEGIN 06282000
|
|
INTEGER OPERATOR; 06282200
|
|
REAL A; 06282400
|
|
BOOLEAN SIGNA,CONSTANA,SIMPLE,MANY,SIGN; 06282600
|
|
DEFINE FORMALNAME = [9:2]=2#; 06282800
|
|
PROCEDURE PLUG(C,A,S); VALUE C,A,S; BOOLEAN C,S; REAL A; 06283000
|
|
BEGIN 06283200
|
|
IF C THEN EMITNUM(A) 06283400
|
|
ELSE BEGIN CHECKER(A); EMITV(A.ADDRESS) END; 06283600
|
|
IF S THEN EMITO(CHS); 06283800
|
|
END PLUG; 06284000
|
|
DO BEGIN 06284200
|
|
OPERATOR:=1&ELBAT[I][36:17:10]; 06284400
|
|
COMMENT SET UP CODE FOR RELATIONAL OPERATOR TO BE 06284600
|
|
EMITTED LATER (AFTER PROCESSING SECOND HALF). 06284800
|
|
THE HIGH-ORDER BITS OF THE BINARY OPERATOR 06285000
|
|
ARE TAKEN FROM THE [17:10] FIELD OF THE 06285200
|
|
ELBAT WORD FRO THE RELATIONAL SYMBOL; 06285400
|
|
IF MANY THEN 06285600
|
|
IF SIMPLE THEN PLUG(CONSTANA,A,SIGNA) ELSE EMITV(JUNK); 06285800
|
|
SIGNA:=FALSE; 06286000
|
|
IF STEPI=ADOP THEN SIGNA:=ELBAT[I].ADDRESS=SUB; 06286200
|
|
IF SIGN:=ELCLASS=ADOP THEN STEPIT; 06286400
|
|
CONSTANA:=ELCLASS}NONLITNO AND ELCLASS{STRNGCON; 06286600
|
|
A:=REAL(ELCLASS}REALID AND ELCLASS{INTID 06286800
|
|
AND NOT ELBAT[I].FORMALNAME); 06287000
|
|
SIMPLE:=(CONSTANA OR BOOLEAN(A)) AND STEPI=RELOP; 06287200
|
|
IF SIMPLE THEN 06287400
|
|
BEGIN 06287600
|
|
IF CONSTANA THEN A:=C ELSE A:=ELBAT[I-1]; 06287800
|
|
PLUG(CONSTANA,A,SIGNA) 06288000
|
|
END 06288200
|
|
ELSE BEGIN 06288400
|
|
I:=I-REAL(SIGN)-2; STEPIT; AEXP; 06288600
|
|
IF ELCLASS=RELOP THEN EMITPAIR(JUNK,SND); 06288800
|
|
END; 06289000
|
|
STACKCT:=1; EMIT(OPERATOR); 06289200
|
|
IF MANY THEN EMITO(LND) 06289400
|
|
ELSE BEGIN EMIT(0); L:=L-1 END; 06289600
|
|
MANY:=TRUE; 06289800
|
|
END UNTIL ELCLASS!RELOP 06290000
|
|
END RELATION; 06290200
|
|
COMMENT IFEXP COMPILES CONDITIONAL EXPRESSIONS. IT REPORTS THE TYPE 06292000
|
|
OF EXPRESSIONS AS EXPRSS REPORTS; 06293000
|
|
INTEGER PROCEDURE IFEXP; 06294000
|
|
BEGIN INTEGER TYPE,THENBRANCH,ELSEBRANCH; 06295000
|
|
IFCLAUSE; 06296000
|
|
STACKCT ~ 0; %A 06296500
|
|
THENBRANCH ~ BUMPL; 06297000
|
|
COMMENT SAVE L FOR LATER FIXUP; 06298000
|
|
IFEXP ~ TYPE ~ EXPRSS; COMMENT COMPILE 1ST EXPRSS; 06299000
|
|
STACKCT ~ 0; %A 06299500
|
|
ELSEBRANCH ~ BUMPL; 06300000
|
|
EMITB(BFC,THENBRANCH,L); 06301000
|
|
IF ELCLASS ! ELSEV THEN ERR(155) ELSE BEGIN 06302000
|
|
STEPIT; 06303000
|
|
IF TYPE = ATYPE THEN AEXP ELSE 06304000
|
|
IF TYPE = DTYPE THEN DEXP ELSE BEXP; 06305000
|
|
STACKCT ~ 1; %A 06305500
|
|
COMMENT THIS COMPILES PROPER TYPE SECOND EXPRSS; 06306000
|
|
EMITB(BFW,ELSEBRANCH,L); 06307000
|
|
EMIT(1); L ~ L-1; 06308000
|
|
COMMENT THIS IS USED BY EMITLNG TO CLEANUP CODE. COMPARE WITH 06309000
|
|
BOOSEC, BOOCOMP, AND RELATION; 06310000
|
|
END END IFEXP; 06311000
|
|
PROCEDURE PARSE ;%COMPILES CODE FOR THE CONCATENATE ; 06312000
|
|
BEGIN INTEGER FIRST,SECOND,THIRD; 06312500
|
|
BOOLEAN P1,P2,P3; 06313000
|
|
LABEL L1,L2,L3,SKIP1,SKIP2,EXIT; 06313500
|
|
IF ELCLASS = FIELDID THEN %117 06313550
|
|
BEGIN %117 06313600
|
|
FIRST := ELBAT[I].SBITF; %117 06313650
|
|
SECOND := 48 - (THIRD := ELBAT[I].NBITF); %117 06313700
|
|
GO TO SKIP1; %117 06313750
|
|
END %117 06313800
|
|
ELSE %117 06313850
|
|
IF ELCLASS ! LFTBRKET THEN BEGIN ERR(90);GO TO EXIT END; 06314000
|
|
IF STEPI = FIELDID THEN %117 06314050
|
|
BEGIN %117 06314100
|
|
FIRST := ELBAT[I].SBITF; %117 06314150
|
|
SECOND := 48 - (THIRD := ELBAT[I].NBITF); %117 06314200
|
|
IF STEPI ! RTBRKET THEN %117 06314250
|
|
BEGIN %117 06314300
|
|
ERR(94); %117 06314350
|
|
GO TO EXIT; %117 06314400
|
|
END; %117 06314450
|
|
GO TO SKIP1; %117 06314500
|
|
END %117 06314550
|
|
ELSE %117 06314600
|
|
IF ELCLASS ! LITNO THEN % PREPARE FOR DYNAMIC DIAL %117 06314650
|
|
GO TO L1; %117 06314700
|
|
FIRST ~ C; 06315000
|
|
IF TABLE(I+1) = COLON THEN 06315500
|
|
BEGIN 06316000
|
|
STEPIT; 06316500
|
|
IF FIRST {0 THEN FLAG(92); 06317000
|
|
END ELSE 06317500
|
|
BEGIN 06318000
|
|
L1: EMITO(MKS); 06318500
|
|
AEXP; 06319000
|
|
P1 ~ TRUE; 06319500
|
|
IF ELCLASS ! COLON THEN BEGIN ERR(91); GO TO EXIT END; 06320000
|
|
END; 06320500
|
|
IF STEPI ! LITNO THEN GO TO L2; 06321000
|
|
06321100
|
|
SECOND ~ C ; 06321500
|
|
IF GT1 ~ TABLE(I+1) = COLON THEN 06322000
|
|
BEGIN 06322500
|
|
STEPIT; 06323000
|
|
IF SECOND {0 THEN FLAG(092); 06323500
|
|
END ELSE 06324000
|
|
BEGIN 06324500
|
|
IF GT1 = RTBRKET THEN 06325000
|
|
BEGIN 06325500
|
|
STEPIT; 06326000
|
|
SECOND ~ 48 - (THIRD ~ SECOND); 06326500
|
|
GO TO SKIP2; 06327000
|
|
END; 06327500
|
|
L2: IF NOT P1 THEN BEGIN EMITO(MKS);EMITL(FIRST) END; 06328000
|
|
AEXP; 06328500
|
|
P1 ~ P2 ~ TRUE; 06329000
|
|
IF ELCLASS = COLON THEN 06329100
|
|
06329200
|
|
06329300
|
|
ELSE 06329350
|
|
IF ELCLASS = RTBRKET THEN 06329400
|
|
BEGIN 06329450
|
|
EMITO(DUP); 06329500
|
|
EMITL(48) ;EMITO(SUB); 06329550
|
|
EMITO(CHS);EMITO(XCH); 06329600
|
|
P3 ~ TRUE; 06329700
|
|
GO TO SKIP1; 06329800
|
|
END ELSE BEGIN ERR(91);GO TO EXIT END; 06329900
|
|
END; 06330000
|
|
IF STEPI ! LITNO THEN GO L3 ; 06330500
|
|
THIRD ~ C; 06330600
|
|
IF TABLE(I+1) = RTBRKET THEN 06330700
|
|
BEGIN 06330800
|
|
STEPIT; 06331000
|
|
SKIP2: IF THIRD { 0 OR THIRD > 47 THEN FLAG(95); 06331100
|
|
END ELSE 06331200
|
|
BEGIN 06331300
|
|
L3: IF NOT P2 THEN 06331500
|
|
BEGIN 06331600
|
|
IF NOT P1 THEN BEGIN EMITO(MKS);EMITL(FIRST) END; 06331700
|
|
EMITL(SECOND); 06331800
|
|
END; 06332000
|
|
AEXP; 06332100
|
|
P1~ P2~P3 ~TRUE; 06332200
|
|
IF ELCLASS ! RTBRKET THEN BEGIN ERR(94);GO TO EXIT END; 06332300
|
|
END; 06332400
|
|
SKIP1: IF P1 THEN 06332500
|
|
BEGIN 06333000
|
|
IF NOT P2 THEN EMITL(SECOND); 06333500
|
|
IF NOT P3 THEN 06334000
|
|
BEGIN 06334100
|
|
EMITL(THIRD);EMITL(1); 06334200
|
|
EMITV(GNAT(DIALER)); 06334500
|
|
EMIT(TRB & THIRD[36:42:6]); 06334600
|
|
END ELSE 06334700
|
|
BEGIN 06335000
|
|
EMITL(0); 06335100
|
|
EMITV(GNAT(DIALER)); 06335200
|
|
EMITO(DEL); 06335500
|
|
END; 06335700
|
|
END ELSE 06336000
|
|
BEGIN 06336100
|
|
IF FIRST + THIRD > 48 OR SECOND + THIRD > 48 THEN FLAG(095); 06336200
|
|
EMITD(SECOND,FIRST,THIRD); 06336300
|
|
END; 06336400
|
|
STEPIT; 06336500
|
|
EXIT: STACKCT ~ 1; 06336600
|
|
END PARSE; 06336700
|
|
COMMENT DOT COMPILES CODE FOR PARTIAL WORD DESIGNATORS,EXCEPT FOR 06337000
|
|
THOSE CASES HANDLED BY THE VARIABLE ROUTINE ; 06337100
|
|
PROCEDURE DOTIT; 06338000
|
|
BEGIN INTEGER FIRST,SECOND; LABEL EXIT; 06339000
|
|
IF DOTSYNTAX(FIRST,SECOND) THEN GO TO EXIT; 06340000
|
|
%A 06342000
|
|
EMITI(0,FIRST,SECOND); %A 06343000
|
|
%A 06344000
|
|
STEPIT; 06345000
|
|
EXIT: END DOTIT; 06346000
|
|
COMMENT GENGO CONSTRUCTS THE CALL ON AN INTRINSIC PROCEDURE WHICH 06347000
|
|
PREPARES A LABEL DESCRIPTOR FOR THE MCP. THE MCP EXPECTS 06348000
|
|
THE F-REGISTER AND THE BLOCKCTR TO BE IN THIS DESCRIPTOR, 06349000
|
|
SO THAT STORAGE CAN BE PROPERLY RETURNED. THE BLOCKCTR 06350000
|
|
IS AN OBJECT TIME COUNTER IN A FIXED CELL IN THE PRT. IT 06351000
|
|
IS INCREMENTED AND DECREMENTED AT ENTRY AND EXIT FROM 06352000
|
|
BLOCKS,IF NECESSARY. THE CODE TO DO THIS IS COMPILED BY 06353000
|
|
THE BLOCK ROUTINE. IN A PROCEDURE, THE BLOCKCTR AT ENTRY 06354000
|
|
IS ALSO STORED IN F+1; 06355000
|
|
PROCEDURE GENGO(ELBATWORD); VALUE ELBATWORD; REAL ELBATWORD; 06356000
|
|
BEGIN INTEGER TLEVEL; 06357000
|
|
EMITO(MKS); 06358000
|
|
IF TLEVEL ~ ELBATWORD.LVL > JUMPCTR THEN 06359000
|
|
JUMPCTR ~ TLEVEL; 06360000
|
|
COMMENT JUMPCTR IS USED BY THE BLOCK ROUTINE TO THINK ABOUT 06361000
|
|
INCREMENTING AND DECREMENTING THE BLOCKCTR. HERE WE TELL 06362000
|
|
BLOCK ROUTINE ABOUT THE LEVEL TO WHICH OUR BAD GO TO IS 06363000
|
|
JUMPING; 06364000
|
|
IF TLEVEL < FRSTLEVEL OR MODE = 0 06365000
|
|
THEN BEGIN 06366000
|
|
COMMENT OUR BAD GO TO IS JUMPING OUTSIDE OF ALL PROCEDURES; 06367000
|
|
EMIT(0); 06368000
|
|
EMIT(TLEVEL); END 06369000
|
|
ELSE BEGIN 06370000
|
|
EMITN(512); 06371000
|
|
EMITV(513); COMMENT PICK UP BLOCKCTR AT ENTRY 06372000
|
|
FROM F+1; 06373000
|
|
IF TLEVEL ~ TLEVEL - SUBLEVEL -1 ! 0 06374000
|
|
THEN BEGIN 06375000
|
|
EMITL(TLEVEL); 06376000
|
|
EMITO(ADD) COMMENT IF JUMP IS NOT TO SAME LEVEL 06377000
|
|
AS AT ENTRY TIME, FUDGE THE COUNTER; 06378000
|
|
END END; 06379000
|
|
EMITV(GNAT(GOTOSOLVER)) COMMENT CALL THE INTRINSIC; 06380000
|
|
END GENGO; 06381000
|
|
COMMENT DEXP COMPILES DESIGNATIONAL EXPRESSIONS. FOR THE MOST PART 06382000
|
|
IT ASSUMES THAT A COMMUNICATE IS GOING TO BE USED AGAINST 06383000
|
|
THE LABEL DESCRIPTOR IN ORDER TO OBTAIN GO TO ACTION, 06384000
|
|
STORAGE RETURN, AND STACK CUT BACK. HOWEVER IF IT NEVER 06385000
|
|
SETS GOTOG TO TRUE THEN THE LABELS ARE ALL LOCAL AND NO 06386000
|
|
COMMUNICATE WILL BE DONE; 06387000
|
|
PROCEDURE DEXP; 06388000
|
|
BEGIN 06389000
|
|
LABEL EXIT; 06390000
|
|
BOOLEAN S,F; 06391000
|
|
REAL ELBW; 06392000
|
|
IF (S ~ ELCLASS = SWITCHID) OR ELCLASS = LABELID 06393000
|
|
THEN BEGIN 06394000
|
|
CHECKER(ELBW ~ ELBAT[I]); 06395000
|
|
SCATTERELBAT; 06396000
|
|
IF LEVEL ! LEVELF OR F ~ FORMALF THEN GOTOG ~ TRUE; 06397000
|
|
IF FAULTOG THEN 06397100
|
|
IF S OR F THEN FAULTLEVEL~1 ELSE 06397200
|
|
IF FAULTLEVEL>LEVELF THEN FAULTLEVEL~LEVELF; 06397300
|
|
IF S THEN BEGIN 06398000
|
|
BANA; EMITPAIR(JUNK,ISD); 06399000
|
|
EMITV(GNAT(ELBW)); 06400000
|
|
IF F THEN GO TO EXIT; END 06401000
|
|
ELSE BEGIN 06402000
|
|
STEPIT; 06403000
|
|
IF F THEN BEGIN EMITV(ADDRSF); GO TO EXIT END; 06404000
|
|
EMITL(GNAT(ELBW)) END; 06405000
|
|
GENGO(ELBW); 06406000
|
|
END ELSE IF EXPRSS ! DTYPE THEN ERR(115); 06407000
|
|
EXIT: END DEXP; 06408000
|
|
PROCEDURE IFCLAUSE; 06409000
|
|
BEGIN STEPIT; STACKCT ~ 0; BEXP; %A 06410000
|
|
IF ELCLASS ! THENV THEN ERR(116)ELSE STEPIT END IFCLAUS;06411000
|
|
COMMENT PANA COMPILES THE CONSTRUCT: (<ARIT. EXP.>); 06412000
|
|
PROCEDURE PANA; 06413000
|
|
BEGIN 06414000
|
|
IF STEPI ! LEFTPAREN THEN ERR(105) 06415000
|
|
ELSE BEGIN STEPIT; AEXP; IF ELCLASS ! RTPAREN THEN 06416000
|
|
ERR(104) ELSE STEPIT END END PANA; 06417000
|
|
COMMENT BANA COMPILES THE CONSTRUCT: [<ARITH. EXP.>]; 06418000
|
|
PROCEDURE BANA; 06419000
|
|
BEGIN 06420000
|
|
IF STEPI ! LFTBRKET THEN ERR(117) 06421000
|
|
ELSE BEGIN STEPIT; AEXP; IF ELCLASS ! RTBRKET THEN 06422000
|
|
ERR(118) ELSE STEPIT END END BANA ; 06423000
|
|
PROCEDURE MAKEALABEL; 06500000
|
|
BEGIN LABEL EXIT; REAL I; 06501000
|
|
STREAMTOG~FALSE; 06502000
|
|
EMITO(MKS); PASSFILE; 06503000
|
|
IF ELCLASS!WITHV THEN 06504000
|
|
BEGIN ERR(301); GO TO EXIT END; 06505000
|
|
FOR I~1 STEP 1 UNTIL 6 DO 06506000
|
|
BEGIN IF STEPI=FACTOP THEN 06507000
|
|
BEGIN EMIT(4); EMITO(CHS); STEPIT END 06508000
|
|
ELSE AEXP; 06509000
|
|
IF ELCLASS!COMMA THEN GO TO EXIT; 06510000
|
|
END; 06511000
|
|
EXIT: FOR I:=I STEP 1 UNTIL 5 DO 06512000
|
|
BEGIN EMIT(4);EMITO(CHS) END; 06512100
|
|
EMITL(11); 06512200
|
|
EMITV(5); 06513000
|
|
END; 06514000
|
|
COMMENT THIS SECTION CONTAINS THE STATEMENT ROUTINES; 07000000
|
|
COMMENT COMPOUNDTAIL COMPILES COMPOUNDTAILS. IT ALSO ELIMINATES 07001000
|
|
COMMENTS FOLLOWING ENDS. AFTER ANY ERROR, ERROR MESSAGES 07002000
|
|
ARE SUPPRESSED. COMPOUNDTAIL IS PARTIALLY RESPONSIBLE 07003000
|
|
FOR RESTORING THE ABILITY TO WRITE ERROR MESSAGES. SOME 07004000
|
|
CARE IS ALSO TAKEN TO PREVENT READING BEYOND THE "END."; 07005000
|
|
PROCEDURE COMPOUNDTAIL; 07006000
|
|
BEGIN LABEL ANOTHER; 07007000
|
|
I ~ I-1; BEGINCTR ~ BEGINCTR+1; 07008000
|
|
ANOTHER: ERRORTOG ~ TRUE; COMMENT ALLOW ERROR MESSAGES; 07009000
|
|
STEPIT; 07010000
|
|
IF STREAMTOG THEN STREAMSTMT ELSE STMT; 07011000
|
|
IF ELCLASS = SEMICOLON THEN GO TO ANOTHER; 07012000
|
|
IF ELCLASS ! ENDV 07013000
|
|
THEN BEGIN 07014000
|
|
ERR(119); GO TO ANOTHER END; 07015000
|
|
ENDTOG~TRUE; 07016000
|
|
DO STOPDEFINE~TRUE UNTIL 07017000
|
|
STEPI{ENDV AND ELCLASS}UNTILV 07018000
|
|
OR NOT ENDTOG; 07019000
|
|
ENDTOG~FALSE; 07020000
|
|
IF BEGINCTR ~ BEGINCTR-1 ! 0 EQV ELCLASS = PERIOD 07021000
|
|
THEN BEGIN 07022000
|
|
IF BEGINCTR = 0 THEN 07023000
|
|
BEGIN FLAG(143); BEGINCTR ~ 1; GO ANOTHER END; 07024000
|
|
FLAG (120); %104-07025000
|
|
FCR:= (LCR:=MKABS(CBUFF[9]))-9; %104-07025010
|
|
IF LISTER THEN PRINTCARD; %104-07025020
|
|
FCR:= (LCR:=MKABS(TBUFF[9]))-9 END; %104-07025030
|
|
IF ELCLASS = PERIOD THEN 07026000
|
|
BEGIN 07027000
|
|
GT5 ~ "ND;END."&"E"[1:43:5]; 07028000
|
|
MOVE(1,GT5,CBUFF[0]); 07029000
|
|
LASTUSED~4; 07030000
|
|
ELBAT[I~I-2] ~SPECIAL[20]; 07031000
|
|
ELCLASS ~ SEMICOLON END 07032000
|
|
END COMPOUNDTAIL; 07033000
|
|
COMMENT ACTUAPARAPART IS RESPONSIBLE FOR CONSTRUCTING ALL CALLS ON 07034000
|
|
PARAMETERS. IT HANDLES THE ENTIRE PARAMETER LIST WITH 07035000
|
|
ONE CALL. IT IS ALSO RESPONSIBLE FOR CHECKING FOR 07036000
|
|
NON-CORRESPONDENCE OF THE ACTUAL AND FORMAL PARAMETERS. 07037000
|
|
CONCERNING THE PARAMETERS: 07038000
|
|
FBIT TELLS IF THE PROCEDURE BEING CALLED IS FORMAL 07039000
|
|
OR NOT. 07040000
|
|
SBIT TELLS IF THE PROCEDURE BEING CALLED IS A STREAM 07041000
|
|
PROCEDURE OR NOT. 07042000
|
|
INDEX IS THE INDEX INTO INFO OF THE ADDITIONAL 07043000
|
|
INFORMATION; 07044000
|
|
PROCEDURE ACTUALPARAPART(FBIT,SBIT,INDEX); 07045000
|
|
VALUE FBIT,SBIT,INDEX; 07046000
|
|
BOOLEAN FBIT,SBIT; 07047000
|
|
INTEGER INDEX; 07048000
|
|
BEGIN 07049000
|
|
INTEGER PCTR,ACLASS,SCLASS; 07050000
|
|
COMMENT 07051000
|
|
PCTR IS A COUNT OF THE NUMBER OF PARAMETERS 07052000
|
|
COMPILED. 07053000
|
|
ACLASS IS THE CLASS OF THE ACTUAL PARAMETER- 07054000
|
|
SCLASS IS THE CLASS OF THE FORMAL PARAMETER. 07055000
|
|
THEY ARE PUT IN A NORMALIZED FORM IN ORDER 07056000
|
|
TO ALLOW INTEGER, REAL, AND ALPHA TO HAVE 07057000
|
|
SIMILAR MEANINGS; 07058000
|
|
REAL WHOLE; 07059000
|
|
COMMENT WHOLE CONTAINS THE ELBAT WORD OF THE ACTUAL 07060000
|
|
PARAMETERS; 07061000
|
|
BOOLEAN VBIT; 07062000
|
|
COMMENT VBIT TELLS WHETHER OR NOT THE PARAMETER IS TO07063000
|
|
BE CALLED BY VALUE OR BY NAME; 07064000
|
|
LABEL ANOTHER,NORMAL,VE,STORE,LRTS,LOWBD,FINISHBOO, 07065000
|
|
LODPOINT,NSBS,BS,COMMON,LP,GOBBLE,BSXX,BSX,EXIT, 07066000
|
|
CERR,FGEN; 07067000
|
|
LABEL 07068000
|
|
L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15,L16,L17, 07069000
|
|
L18,L19,L20,L21,L22,L23,L24,L25,L26,L27,L28,L29,L30, 07070000
|
|
L31,L32,L33; 07071000
|
|
SWITCH S ~ 07072000
|
|
L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15,L16,L17, 07073000
|
|
L18,L19,L20,L21,L22,L23,L24,L25,L26,L27,L28,L29,L30, 07074000
|
|
L31,L32,L33; 07075000
|
|
REAL T1,T2,T3,T4,T5,T6; COMMENT EXAMINE LATER WITH EYE 07076000
|
|
TO REDUCING TOTAL NUMBER; 07077000
|
|
PCTR ~ 1; 07078000
|
|
ANOTHER: ACLASS ~ STEPI; WHOLE ~ ELBAT[I]; SCATTERELBAT; 07079000
|
|
STACKCT ~ 0; %A 07079500
|
|
COMMENT SETUP FIELDS OF AN ACTUAL PARAMETER; 07080000
|
|
IF FBIT THEN BEGIN VBIT ~ FALSE; SCLASS ~ LOCLID END 07081000
|
|
COMMENT IF PROCEDURE IS FORMAL ALL CALLS ARE BY NAME AND NO CHECK 07082000
|
|
IS MADE FOR CORRESPONDENCE OF ACTUAL AND FORMAL PARA 07083000
|
|
METERS SETTING SCLASS TO LOCID HELPS TO COMPRESS CHECK 07084000
|
|
ELSE BEGIN 07085000
|
|
VBIT ~ BOOLEAN(GT1~ TAKE(INDEX+PCTR)).VO; 07086000
|
|
IF SCLASS ~GT1.CLASS { INTARRAYID AND 07087000
|
|
SCLASS } BOOSTRPROCID 07088000
|
|
THEN IF GT1 ~ (SCLASS - BOOSTRPROCID) MOD 4 ! 0 07089000
|
|
THEN SCLASS ~ SCLASS-GT1+1 07090000
|
|
COMMENT IF PROCEDURE IS NOT FORMAL WE OBTAIN VBIT FROM THE ADDITION-07091000
|
|
AL INFO FOR THE PROCEDURE. WE ALSO GET SCLASS FROM THIS 07092000
|
|
SOURCE. HOWEVER SCLASS IS NORMALIZED TO REAL, IF NEEDED; 07093000
|
|
END; 07094000
|
|
IF T1 ~ TABLE(I+1) ! COMMA THEN 07095000
|
|
IF T1 ! RTPAREN THEN 07096000
|
|
COMMENT THE ACTUAL PARAMETER HAS MORE THAN ONE LOGICAL QUANTITY - 07097000
|
|
HENCE A DIFFERENT ANALYSIS IS REQUIRED; 07098000
|
|
BEGIN IF ACLASS { IDMAX OR ACLASS = SUPERLISTID THEN 07099000
|
|
CHECKER(WHOLE); 07099500
|
|
IF ACLASS < BOOARRAYID OR ACLASS > INTARRAYID 07100000
|
|
THEN BEGIN 07101000
|
|
COMMENT THE ACTUAL PARAMETER DOES NOT START WITH AN ARRAY NAME - 07102000
|
|
HENCE THE PARAMETER IS AN EXPRESSION, A SUPERFORMAT, A 07103000
|
|
SUPERFILE, AN INDEXED FILE OR SUPERLIST; 07104000
|
|
IF ACLASS = SUPERFRMTID THEN 07105000
|
|
BEGIN ACLASS ~ FRMTID; GO TO FGEN END; 07106000
|
|
IF ACLASS = SUPERFILEID OR ACLASS = FILEID 07107000
|
|
THEN BEGIN 07108000
|
|
T4~L; EMITO(NOP) ;%MAY NEED FOR FILEATTRIBUTES. 07108500
|
|
IF NOT VBIT THEN EMITO(NOP) ; % DITTO. 07108505
|
|
ACLASS ~ FILEID; 07109000
|
|
COMMENT IT IS EITHER AN INDEXED FILE OR A SUPERFILE (OR BOTH); 07110000
|
|
PASSFILE; 07111000
|
|
IF ELCLASS=PERIOD THEN % THEN FILE ATTRIBUTE 07111200
|
|
BEGIN 07111210
|
|
IF VBIT THEN 07111220
|
|
BEGIN 07111225
|
|
T5~L; L~T4; EMITO(MKS); L~T5; T5~0 ; 07111230
|
|
END ; 07111235
|
|
ACLASS~IF FILEATTRIBUTEHANDLER(FA)=ATYPE 07111240
|
|
THEN REALID ELSE BOOID ; 07111250
|
|
IF ELCLASS!COMMA AND ELCLASS!RTPAREN THEN 07111255
|
|
IF ACLASS=BOOID THEN SIMPBOO ELSE 07111260
|
|
BEGIN 07111265
|
|
SIMPARITH ; 07111270
|
|
IF ELCLASS=RELOP THEN 07111275
|
|
BEGIN 07111280
|
|
ACLASS~BOOID; RELATION ; 07111285
|
|
SIMPBOO ; 07111290
|
|
END ; 07111295
|
|
END ; 07111300
|
|
IF NOT VBIT THEN 07111303
|
|
BEGIN 07111307
|
|
EMITPAIR(JUNK,STD); EMITN(JUNK) ; 07111310
|
|
EMITO(RTS); ADJUST; CONSTANTCLEAN ; 07111315
|
|
EMITO(MKS); EMITB(BBW,BUMPL,T4+2) ; 07111320
|
|
EMITB(BFW,T4+2,L) ; 07111325
|
|
STUFFF(PROGDESCBLDR(0,L-3,0)) ; 07111330
|
|
END ; 07111335
|
|
GO BS ; 07111340
|
|
END OF FILE ATTRIBUTE PARAMETER EXPRESSION;07111345
|
|
IF ELCLASS ! LEFTPAREN THEN GO TO BS; 07112000
|
|
I ~ I-1; 07113000
|
|
COMMENT IF WE ARE HERE IT IS INDEXED; 07114000
|
|
CHECKPRESENCE; 07115000
|
|
EMITO(LOD); PANA; EMITO(CDC); 07116000
|
|
IF SCLASS = FILEID OR NOT SBIT OR VBIT 07117000
|
|
THEN BEGIN ERR(121); GO TO CERR END 07118000
|
|
COMMENT AN INDEXED FILE MAY BE PASSED BY NAME ONLY AND ONLY TO A 07119000
|
|
STREAM PROCEDURE THE STREAM PROCEDURE MAY NOT DO A 07120000
|
|
RELEASE ON THIS DESCRIPTOR 07121000
|
|
ELSE GO TO COMMON END ; 07122000
|
|
IF ACLASS = SUPERLISTID THEN BEGIN BANA; 07122500
|
|
EMITV(WHOLE.ADDRESS); 07122510
|
|
IF WHOLE.ADDRESS>1023 THEN EMITO(PRTE); 07122520
|
|
EMITO(LOD); 07122530
|
|
ACLASS~LISTID; GO TO BS END; 07122540
|
|
COMMENT NORMAL IS REACHED ONLY IF THE PARAMETER IS AN EXPRESSION; 07123000
|
|
NORMAL: IF VBIT THEN 07124000
|
|
VE: T1 ~ EXPRSS COMMENT VALUE CALL EXPRESSION; 07125000
|
|
ELSE BEGIN COMMENT NAME CALL EXPRESSION; 07126000
|
|
IF SBIT THEN BEGIN FLAG(122); GO TO CERR END; 07127000
|
|
COMMENT STREAM PROCEDURES MAY NOT HAVE EXPRESSIONS PASSED BY NAME;07128000
|
|
T2 ~ BAE; 07129000
|
|
T3 ~ PROGDESCBLDR(0,L,0); 07130000
|
|
COMMENT BUILD DESCRIPTOR FOR ACCIDENTAL ENTRY AND PREPARE JUMP 07131000
|
|
AROUND CODE FOR EXPRESSION; 07132000
|
|
T1 ~ EXPRSS; COMMENT COMPILE EXPRESSION; 07133000
|
|
STORE: EMITPAIR(JUNK,STD); EMITN(JUNK); 07134000
|
|
COMMENT THIS PROVIDES FOR PROTECTION IF ONE ATTEMPTS INSIDE OF A 07135000
|
|
PROCEDURE TO STORE INTO AN EXPRESSION - THE STORE GOES 07136000
|
|
INTO JUNK; 07137000
|
|
LRTS: EMITO(RTS); CONSTANTCLEAN; EMITB(BFW,T2,L); STUFFF(T3) 07138000
|
|
COMMENT LRTS IS RESPONSIBLE FOR THE CLEANUP ASSOCIATED WITH ALL 07139000
|
|
THE ACCIIDENTAL ENTRIES COMPILED BY ACTUALPARAPART. IT 07140000
|
|
EMITS THE RETURN SPECIAL, DOES A CONSTANTCLEAN, FINISHES 07141000
|
|
THE BRANCH OPERATION AND PROVIDES FOR THE POSSIBILITY 07142000
|
|
OF STUFFING F INTO THE ACCIDENTAL ENTRY DESCRIPTOR; 07143000
|
|
END OF NAME CALL EXPRESSIONS; 07144000
|
|
ACLASS ~ IF T1 = ATYPE THEN REALID ELSE IF T1 = BTYPE 07145000
|
|
THEN BOOID ELSE LABELID; GO TO BS; 07146000
|
|
END OF EXPRESSION CALL CODE; 07147000
|
|
COMMENT IF WE REACH THIS POINT THE ACTUAL PARAMETER STARTS WITH AN 07148000
|
|
ARRAY NAME FOLLOWED BY SOMETHING ELSE; 07149000
|
|
IF SCLASS } BOOARRAYID THEN 07150000
|
|
IF SCLASS {INTARRAYID THEN 07151000
|
|
BEGIN T2 ~ TAKE(INDEX+PCTR).INCR; 07152000
|
|
COMMENT THE FORMAL PARAMETER CALLS FOR AN ARRAY AS ACTUAL PARAMETER.07153000
|
|
THUS WE MUST HAVE A ROW DESIGNATOR; 07154000
|
|
IF ACLASS ! BOOARRAYID THEN ACLASS ~ REALARRAYID; 07155000
|
|
COMMENT NORMALISE ACLASS FOR LATER COMPARISON; 07156000
|
|
VARIABLE(FA); IF TABLE(I-2) ! FACTOP 07157000
|
|
THEN BEGIN ERR(123); GO TO EXIT END; 07158000
|
|
COMMENT IT MUST BE A ROW DESIGNATOR - OTHERWISE IT IS AN ERROR; 07159000
|
|
COMMENT VARIABLE EMITS LOWER BOUNDS FOR EACH ASTERISK SUBSCRIPT. 07163000
|
|
STLB IS THE NUMBER OF SUCH SUBSCRIPTS; 07164000
|
|
LOWBD: IF T2 ! STLB THEN BEGIN FLAG(124); GO TO CERR END 07165000
|
|
THE FORMAL PARAMETER MUST BE AN ARRAY OF ONE DIMENSION 07166000
|
|
ELSE GO TO BS END; 07167000
|
|
IF VBIT THEN GO TO VE; 07168000
|
|
COMMENT IF THE FORMAL PARAMETER DOES NOT CALL FOR AN ARRAY AND 07169000
|
|
VBIT IS SET WE MUST HAVE A VALUE CALL EXPRESSION; 07170000
|
|
IF SBIT 07171000
|
|
THEN BEGIN 07172000
|
|
T6 ~ FL; VARIABLE(T6); 07173000
|
|
IF T6 ! 0 THEN GO TO BS; 07174000
|
|
FLAG(122);GO TO CERR END; 07175000
|
|
COMMENT IF PROCEDURE IS A STREAM PROCEDURE THEN WE COMPILE NAME 07176000
|
|
CALL EXPRESSION. IT MUST BE SIMPLY A SUBSCRIPTED 07177000
|
|
VARIABLE OR A ROW DESIGNATOR. IF VARIABLE DOES MORE 07178000
|
|
THAN THIS IT SETS T6 TO ZERO; 07179000
|
|
COMMENT IF THIS PLACE IS REACHED WE HAVE A NON-STREAM PROCEDURE. 07180000
|
|
WE HAVE NOT YET DECEIDED WHETHER WE HAVE 07181000
|
|
1) A ROW DESIGNATOR WITH FORMAL PROCEDURE. 07182000
|
|
2) A SUBSCRIPTED VARIABLE, OR 07183000
|
|
3) A GENUINE NAME CALL EXPRESSION; 07184000
|
|
IF TABLE(I+2) = LITNO AND 07185000
|
|
( GT1 ~ TABLE(I+4) = COMMA OR GT1 = RTPAREN) 07186000
|
|
THEN BEGIN 07187000
|
|
COMMENT WE HAVE HERE A ONE DIMENSIONAL SUBCRIPTED VARIABLE WITH 07188000
|
|
CONSTANT LOWER BOUNDS. WE MAKE A SPECIAL CASE TO AVOID 07189000
|
|
ACCIDENTAL ENTRY AND ADDITIONAL PRT CELL; 07190000
|
|
VARIABLE(FL); 07191000
|
|
ACLASS ~ IF ACLASS = BOOARRAYID THEN BOOID ELSE 07192000
|
|
REALID; GO TO BS END; 07193000
|
|
T2 ~ BAE; T3 ~ L; 07194000
|
|
COMMENT WE PREPARE FOR ACCIDENTAL ENTRY EVEN THOUGH WE KNOW NOT YET 07195000
|
|
IF WE HAVE ROW DESIGNATOR; 07196000
|
|
T6 ~ FA; VARIABLE(T6); 07197000
|
|
IF TABLE(I-2) = FACTOP 07198000
|
|
THEN BEGIN 07199000
|
|
COMMENT WE HAVE A ROW DESIGNATOR AFTER ALL; 07200000
|
|
EMITB(BFW,T2,T3); T2 ~ STLB; GO TO LOWBD END; 07201000
|
|
COMMENT WE NOW KNOW WE NEED ACCIDENTAL ENTRY; 07202000
|
|
T3 ~ PROGDESCBLDR(0,T3,0); 07203000
|
|
T1 ~ IF BOOARRAYID = ACLASS THEN BTYPE ELSE ATYPE; 07204000
|
|
IF ELCLASS = COMMA OR ELCLASS = RTPAREN THEN 07205000
|
|
COMMENT WE ARE AT END OF PARAMETER; 07206000
|
|
IF T6 = 0 THEN COMMENT MORE THAN SUBSCRIPTED VARIABLE; 07207000
|
|
GO TO STORE ELSE COMMENT SUBSCRIPTED VARIABLE; 07208000
|
|
GO TO LRTS; 07209000
|
|
IF T1 = BTYPE THEN GO TO FINISHBOO; SIMPARITH; 07210000
|
|
IF ELCLASS = RELOP THEN BEGIN T1 ~ BTYPE; RELATION; 07211000
|
|
FINISHBOO: SIMPBOO END; GO TO STORE END; 07212000
|
|
COMMENT WHEN WE GET HERE WE HAVE THE CASE OF A SINGLE QUANTITY 07213000
|
|
ACTUAL PARAMETER; 07214000
|
|
IF ACLASS { IDMAX OR ACLASS = SUPERLISTID THEN 07215000
|
|
CHECKER(WHOLE); STEPIT; 07215500
|
|
GO TO S[ACLASS-3]; 07216000
|
|
IF ACLASS = 0 THEN FLAG(100) ELSE 07217000
|
|
IF ACLASS= SUPERLISTID THEN 07217500
|
|
BEGIN EMITPAIR(ADDRSF,LOD); GO TO BS END; 07217510
|
|
FLAG(126); 07217520
|
|
CERR: 07218000
|
|
L12:L13:L14:L15:L16: 07219000
|
|
COMMENT STREAM PROCEDURES MAY NOT BE PASSED AS PARAMETERS; 07220000
|
|
FLAG(125); ERRORTOG ~ TRUE; GO TO COMMON; 07221000
|
|
LODPOINT: 07222000
|
|
L4:L8: 07223000
|
|
COMMENT LIST, SUPERLIST OR SUPERFILE; 07224000
|
|
EMITPAIR(ADDRSF,LOD); 07225000
|
|
NSBS: IF SBIT THEN BEGIN FLAG(127); GO TO CERR END; 07226000
|
|
COMMENT ITEMS WHICH FIND THEIR WAY HERE MAY NOT BE PASSED TO 07227000
|
|
STREAM PROCEDURES; 07228000
|
|
BS: IF SCLASS ! ACLASS THEN 07229000
|
|
IF SCLASS ! LOCLID THEN 07230000
|
|
COMMENT IF WE ARRIVE HERE THE ACTUAL AND FORMAL PARAMETERS DO NOT 07231000
|
|
AGREE; 07232000
|
|
BEGIN FLAG(123); GO TO CERR END; 07233000
|
|
COMMON: 07234000
|
|
COMMENT ARRIVAL HERE CAUSES THE NEXT PARAMETER TO BE EXAMINED; 07235000
|
|
PCTR ~ PCTR+1; 07236000
|
|
IF ELCLASS = COMMA THEN GO TO ANOTHER; 07237000
|
|
IF ELCLASS ! RTPAREN 07238000
|
|
THEN BEGIN ERROR(129); GO TO EXIT END; 07239000
|
|
IF NOT FBIT THEN 07240000
|
|
IF TAKE(INDEX).NODIMPART+1 ! PCTR 07241000
|
|
THEN BEGIN COMMENT WRONG NUMBER OF PARAMETERS; 07242000
|
|
ERR(128); GO TO EXIT END; 07243000
|
|
STEPIT; GO TO EXIT; 07244000
|
|
L5: 07245000
|
|
COMMENT FORMATS; 07246000
|
|
I~I-1; 07247000
|
|
FGEN: PASSFORMAT; 07248000
|
|
IF SBIT THEN BEGIN EMITO(XCH); EMITO(CDC) END; 07249000
|
|
I~I+1; 07250000
|
|
GO TO BS; 07251000
|
|
L6: 07252000
|
|
COMMENT SUPERFORMAT; 07253000
|
|
IF FBIT 07254000
|
|
THEN BEGIN EMITV(ADDRSF); ADDRSF ~ ADDRSF-1 END 07255000
|
|
ELSE BEGIN I ~ I -1; EMITL(TAKEFRST); I ~ I+1 END; 07256000
|
|
GO TO LODPOINT; 07257000
|
|
L7: 07258000
|
|
COMMENT FILE; 07259000
|
|
I ~ I-1; ELCLASS ~ FILEID; 07260000
|
|
PASSFILE; GO TO BS; 07261000
|
|
L9: 07262000
|
|
COMMENT SWITCH; 07263000
|
|
IF FORMALF THEN GO TO LODPOINT; 07264000
|
|
COMMENT OTHERWISE WE BUILD ACCIDENTAL ENTRY AND SET UP SO THAT 07265000
|
|
MCP HANDLES LABEL PROPERLY. SEE IN PARTICULAR OTHER 07266000
|
|
DISCUSSIONS OF GO TO PROBLEM. IT SHOULD BE NOTED THAT 07267000
|
|
ALL BUT VERY SIMPLE SWITCHES ARE MARKED FORMAL, WHETHER 07268000
|
|
THEY ARE OR NOT; 07269000
|
|
T2 ~ BAE; T3~PROGDESCBLDR(0,L,0); EMITV(GNAT(WHOLE)); 07270000
|
|
GENGO(WHOLE); 07271000
|
|
EMITO(RTS); EMITB(BFW,T2,L); STUFFF(T3); GO TO NSBS; 07272000
|
|
L10: 07273000
|
|
COMMENT PROCEDURE; 07274000
|
|
TB1 ~ TRUE; IF FORMALF THEN GO LODPOINT; 07275000
|
|
LP: IF T1 ~ TAKE(WHOLE ~ GIT(WHOLE)).[40:8] = 0 07276000
|
|
THEN BEGIN 07277000
|
|
COMMENT THE PRCOEDURE BEING PASSED HAS ZERO PARAMETERS; 07278000
|
|
IF TB1 THEN GO TO LODPOINT; 07279000
|
|
COMMENT IF THE PROCEDURE IS NOT A FUNCTION, WE PASS THE PROCEDURE 07280000
|
|
DESCRIPTOR ITSELF (IN BOTH CASES THE PARAMETER PROCEDURE);07281000
|
|
IF NOT FBIT THEN 07281900
|
|
IF SCLASS { INTPROCID THEN SCLASS ~ SCLASS+4; 07282000
|
|
I ~ I-2; STEPIT; 07283000
|
|
GO TO NORMAL; COMMENT WE LET OUT NORMAL MECHANISM FOR 07284000
|
|
EXPRESSIONS HANDLE THIS CASE; 07285000
|
|
END THE CASE OF ZERO PARAMETERS; 07286000
|
|
TB1 ~ TRUE; 07287000
|
|
FOR T2 ~ 1 STEP 1 UNTIL T1 07288000
|
|
DO BEGIN 07289000
|
|
IF BOOLEAN(T3~TAKE(WHOLE+T2)).VO 07290000
|
|
THEN 07291000
|
|
IF T4 ~ T3.CLASS < BOOARRAYID OR T4 > INTARRAYID 07292000
|
|
THEN BEGIN 07293000
|
|
COMMENT THE T2-TH PARAMETER TO THE PROCEDURE BEING PASSED IS VALUE; 07294000
|
|
IF TB1 THEN 07295000
|
|
BEGIN 07296000
|
|
COMMENT THIS IS THE FIRST VALUE PARAMETER. IF ANY PARAMETERS ARE 07297000
|
|
VALUE WE BUILD A THINK WHICH SEES THAT WHEN THIS 07298000
|
|
PROCEDURE IS CALLED FORMALLY, ITS PARAMETERS THAT ARE 07299000
|
|
VALUE GET CALLED BY VALUE. SINCE THIS IS FIRST VALUE 07300000
|
|
PARAMETER WE CONSTRUCT THUNK HERE AND INHIBIT FUTURE THUNK07301000
|
|
CONSTRUCTIONS; 07302000
|
|
GOBBLE: 07303000
|
|
TB1 ~ FALSE; T5 ~ BAE; 07304000
|
|
T6 ~ PROGDESCBLDR(1,L,0) END; 07305000
|
|
EMITV(T4 ~ T3.ADDRESS); EMITPAIR(T4,STD)END END;07306000
|
|
COMMENT THIS CALLS THE T2-TH PARAMETER BY VALUE; 07307000
|
|
IF NOT TB1 07308000
|
|
THEN BEGIN 07309000
|
|
COMMENT THERE WERE VALUE CALLS SO FINISH CONSTRUCTION OF THINK; 07310000
|
|
EMITPAIR(ADDRSF,LOD); EMITO(BFW); 07311000
|
|
CONSTANTCLEAN; EMITB(BFW,T5,L); ADDRSF ~ T6 END; 07312000
|
|
GO TO LODPOINT; COMMENT IN ANY CASE LOAD A DESCRIPTOR; 07313000
|
|
L11: 07314000
|
|
COMMENT INTRINSIC PROCEDURE; 07315000
|
|
ADDRSF ~ GNAT(WHOLE); 07316000
|
|
COMMENT GET PRT SPACE IF NOT ASSIGNED; 07317000
|
|
ACLASS ~ REALPROCID; 07318000
|
|
T3.ADDRESS ~ 897; T2~T1~1; GO TO GOBBLE; 07319000
|
|
COMMENT THIS MAKES THE INTRINSICS LOOK LIKE ORDINARY 07320000
|
|
PROCEDURES; 07321000
|
|
L19:L20: 07322000
|
|
COMMENT ALFAPROC AND INTPROC; 07323000
|
|
ACLASS ~ REALPROCID; 07324000
|
|
L17:L18: 07325000
|
|
COMMENT BOOPROC AND REAL PROC; 07326000
|
|
IF FORMALF 07327000
|
|
THEN BEGIN 07328000
|
|
COMMENT THE PROCEDURE BEING PASSED IS ACTUALLY A FORMAL PARAMETER; 07329000
|
|
IF SCLASS > INTPROCID THEN ACLASS ~ ACLASS+4; 07330000
|
|
COMMENT CHANGE ACLASS SO THAT IT LOOKS LIKE WE ARE PASSING AN 07331000
|
|
EXPRESSION. THE FORMAL PARAMETER DOES NOT CALL FOR A 07332000
|
|
PROCEDURE SO IT MUST CALL FOR AN EXPRESSION; 07333000
|
|
IF VBIT 07334000
|
|
THEN BEGIN EMITV(ADDRSF); GO TO BS END 07335000
|
|
ELSE GO TO LODPOINT; 07336000
|
|
COMMENT IF VBIT WE DO VALUE CALL. OTHERWISE WE PASS PROCEDURE 07337000
|
|
DESCRIPTOR ALONG; 07338000
|
|
END; 07339000
|
|
TB1 ~ FALSE; GO TO LP; 07340000
|
|
L23:L24: 07341000
|
|
COMMENT INTEGER AND ALPHA IDS; 07342000
|
|
ACLASS ~ REALID; 07343000
|
|
L21:L22: 07344000
|
|
COMMENT BOOLEAN AND REAL IDS; 07345000
|
|
IF VBIT THEN EMITV(ADDRSF) 07346000
|
|
ELSE IF NOT(SBIT OR VONF) AND FORMALF 07347000
|
|
THEN GO TO LODPOINT ELSE EMITN(ADDRSF); 07348000
|
|
COMMENT JUST PASS THE DESCRIPTOR ALONG IF PROCEDURE IS NOT STREAM 07349000
|
|
AND ACTUAL PARAMETER IS A NAME CALL FORMAL PARAMETER. IF 07350000
|
|
THESE CONDITIONS ARE NOT MET DO DESCRIPTOR CALL; 07351000
|
|
GO TO BS; 07352000
|
|
L27:L28: 07353000
|
|
COMMENT INTEGER AND ALPHA ARRAYS; 07354000
|
|
ACLASS ~ REALARRAYID; 07355000
|
|
L25:L26: 07356000
|
|
COMMENT BOOLEAN AND REAL ARRAYS; 07357000
|
|
EMITPAIR(ADDRSF,LOD); 07358000
|
|
IF SBIT THEN GO TO BS; 07359000
|
|
COMMENT LOWER BOUNDS ARE NOT PASSED TO STREAM PROCEDURES; 07360000
|
|
T1 ~ TAKE(WHOLE ~ GIT(WHOLE)).NODIMPART; 07361000
|
|
FOR T2 ~ 1 STEP 1 UNTIL T1 07362000
|
|
DO BEGIN 07363000
|
|
IF T3 ~ (STLB ~ TAKE(WHOLE+T2)).[35:11] >1023 07364000
|
|
THEN EMITV(T3) ELSE EMIT(STLB); 07365000
|
|
IF STLB.[23:10] = ADD THEN EMITO(CHS) END; 07366000
|
|
COMMENT THIS CODE EMITTED CALLS ON LOWER BOUNDS; 07367000
|
|
IF FBIT THEN GO TO BS; 07368000
|
|
IF TAKE(INDEX+PCTR).INCR ! T1 THEN FLAG(124); GO TO BS; 07369000
|
|
COMMENT ERROR IF ACTUAL AND FORMAL ARRAY DO NOT HAVE SAME NUMBER 07370000
|
|
OF DIMENSIONS; 07371000
|
|
L29: 07372000
|
|
COMMENT LABEL; 07373000
|
|
ELCLASS ~ TABLE(I~I-1); DEXP; GO TO NSBS; 07374000
|
|
L30: 07375000
|
|
COMMENT TRUTH VALUE; 07376000
|
|
EMITL(ADDRSF); ACLASS ~ BOOID; GO TO BSX; 07377000
|
|
L32: 07378000
|
|
COMMENT LITERAL; 07379000
|
|
EMITL(ADDRSF); 07380000
|
|
BSXX: ACLASS ~ REALID; 07381000
|
|
BSX: IF SBIT AND NOT VBIT THEN FLAG(150); GO TO BS; 07382000
|
|
L31:L33: 07383000
|
|
EMITNUM(C); GO TO BSXX; 07384000
|
|
EXIT: STACKCT ~ 0 END OF ACTUALPARAPART; %A 07385000
|
|
COMMENT PROCSTMT COMPILES CODE FOR ALL PROCEDURE STATEMENTS AND 07386000
|
|
FUNCTION CALLS (EXCEPT FOR STREAM PROCEDURES). THE 07387000
|
|
PARAMETERS, FROM, TELLS WHO CALLED. IF STMT CALLED FROM 07388000
|
|
IS TRUE, PROCSTMT ALSO HANDLES FUNCTION NAME ASSIGNMENT 07389000
|
|
OPERATIONS; 07390000
|
|
PROCEDURE PROCSTMT(FROM); VALUE FROM; BOOLEAN FROM; 07391000
|
|
BEGIN 07392000
|
|
REAL HOLE,ADDRESS; 07393000
|
|
LABEL EXIT; 07394000
|
|
SCATTERELBAT; 07395000
|
|
HOLE~ ELBAT[I]; 07396000
|
|
ADDRESS ~ ADDRSF; 07397000
|
|
CHECKER(HOLE); 07398000
|
|
IF ELCLASS ! PROCID THEN 07399000
|
|
IF NOT FORMALF THEN 07400000
|
|
IF TABLE(I+1) = ASSIGNOP THEN 07401000
|
|
BEGIN VARIABLE(2-REAL(FROM)); GO TO EXIT END; 07402000
|
|
COMMENT CALL VARIABLE TO HANDLE THIS ASSIGNMENT OPERATION; 07403000
|
|
IF ELCLASS ! PROCID EQV FROM 07404000
|
|
THEN BEGIN ERR(159); GO TO EXIT END; 07405000
|
|
COMMENT IT IS PROCEDURE IF AND ONLY WE COME FROM STMT; 07406000
|
|
STEPIT; 07407000
|
|
EMITO(MKS); 07408000
|
|
IF ELCLASS = LEFTPAREN 07409000
|
|
THEN ACTUALPARAPART(FORMALF,FALSE,GIT(HOLE)) 07410000
|
|
ELSE IF FORMALF THEN 07411000
|
|
IF FROM THEN ELSE L~L-1 07411100
|
|
ELSE IF TAKE(GIT(HOLE)).NODIMPART!0 THEN ERR(128); 07412000
|
|
EMITV(ADDRESS); 07413000
|
|
COMMENT MONITOR CODE GOES HERE; 07414000
|
|
IF HOLE < 0 07415000
|
|
THEN BEGIN COMMENT THIS IS A MONITORED FUNCTION DESIGNATOR07416000
|
|
; 07417000
|
|
EMITL(JUNK); EMITO(SND); EMITO(MKS); 07418000
|
|
EMITL(JUNK); EMITL(PASSTYPE(HOLE)); 07419000
|
|
EMITPAIR(GNAT(POWERSOFTEN),LOD);PASSALPHA(HOLE);07420000
|
|
EMITPAIR(GNAT(CHARI ),LOD); PASSMONFILE(TAKE07421000
|
|
(GIT(HOLE)).FUNCMONFILE); %109-07422000
|
|
EMITNUM(1&CARDNUMBER[1:4:44]); %109-07422100
|
|
EMITV(GNAT(PRINTI)); 07423000
|
|
END; 07424000
|
|
EXIT: END PROCSTMT; 07425000
|
|
COMMENT STRMPROCSTMT COMPILES CODE FOR CALLS ON ALL STREAM PROCEDURES;07426000
|
|
PROCEDURE STRMPROCSTMT; 07427000
|
|
BEGIN 07428000
|
|
INTEGER ADDRS; 07429000
|
|
IF ADDRS ~ ELBAT[I].ADDRESS = 0 07430000
|
|
THEN BEGIN 07431000
|
|
UNKNOWNSTMT; 07432000
|
|
END 07433000
|
|
07434000
|
|
07435000
|
|
07436000
|
|
07437000
|
|
07438000
|
|
07439000
|
|
ELSE BEGIN 07440000
|
|
IF ELCLASS ! STRPROCID THEN EMIT(0); EMITO(MKS); STEPIT; 07441000
|
|
GT1 ~ (GT2 ~ TAKE(GT3 ~ GIT(ELBAT[I-1]))).[14:10]; 07442000
|
|
GT4 ~ GT1-GT2.[7:6]; 07443000
|
|
FOR GT1 ~ GT1-1 STEP -1 UNTIL GT4 07444000
|
|
DO EMITV(IF GT1 } 512 THEN GT1+1024 ELSE GT1); 07445000
|
|
COMMENT THIS CODE CALLS LABELS FROM PRT WHICH ARE NEEDED FOR LONG 07446000
|
|
JUMPS INSIDE OF STREAM PROCEDURES; 07447000
|
|
GT4 ~ GT2.[1:6]; 07448000
|
|
FOR GT1 ~ 1 STEP 1 UNTIL GT4 DO EMIT(0); 07449000
|
|
COMMENT THIS CODE CALLS ZERO LISTS TO MAKE SPACE FOR LOCALS INSIDE07450000
|
|
OF STREAM PROCEDURES; 07451000
|
|
IF ELCLASS ! LEFTPAREN THEN ERR(128) 07452000
|
|
ELSE BEGIN 07453000
|
|
ACTUALPARAPART(FALSE,TRUE,GT3); EMITV(ADDRS) END; 07454000
|
|
END END STRMPROCSTMT; 07455000
|
|
COMMENT BAE BUILDS AN ACCIDENTAL ENTRY ( OR AT LEAST PREPARES FOR 07456000
|
|
ONE TO BE BUILT). IT RETURNS VALUE OF L AT ENTRY; 07457000
|
|
INTEGER PROCEDURE BAE; 07458000
|
|
BEGIN BAE ~ BUMPL; CONSTANTCLEAN; ADJUST END BAE; 07459000
|
|
COMMENT RELSESTMT COMPILES THE RELEASE STATEMENT: 07460000
|
|
RELEASE(<MEMORY DESIGNATOR>) % AUXMEM RELEASE STATEMENT. 07460250
|
|
RELEASE(<TERMINAL BUFFER SPECIFIER>) % DATACOM RELEASE STATEMENT. 07460500
|
|
RELEASE(<FILE PART>) % FILE RELEASE STATEMENT. 07460750
|
|
; 07461000
|
|
PROCEDURE RELSESTMT; 07461250
|
|
BEGIN 07461500
|
|
LABEL DCR,PARENCHECK,EXIT; 07461750
|
|
IF STEPI!LEFTPAREN THEN 07462000
|
|
BEGIN ERR(105); GO EXIT END; 07462250
|
|
IF STEPI=UNKNOWNID THEN 07462500
|
|
BEGIN ERR(100); GO EXIT END; 07462750
|
|
IF ELCLASS=PROCID OR RANGE(BOOPROCID,INTPROCID) THEN 07463000
|
|
BEGIN 07463250
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); EMITPAIR(38,COM); 07463500
|
|
EMITO(DEL); STEPIT; GO PARENCHECK; 07463750
|
|
END; 07464000
|
|
IF RANGE(BOOARRAYID,INTARRAYID) THEN 07464250
|
|
BEGIN 07464500
|
|
REL:=TRUE;AEXP; REL:=FALSE; 07464750
|
|
IF TABLE(I-2) = FACTOP THEN 07465000
|
|
BEGIN STACKCT:=STACKCT-1; 07465250
|
|
EMITPAIR(38,COM); EMITO(DEL); GO PARENCHECK; 07465500
|
|
END 07465750
|
|
ELSE BEGIN % DATACOM RELEASE. 07466000
|
|
DCR: 07466250
|
|
EMITL(2); EMITO(XCH); EMITL(0); EMITO(XCH); 07466500
|
|
EMITL(0); EMITPAIR(32,COM); EMITO(DEL); 07466750
|
|
EMITO(DEL); EMITO(DEL); EMITO(DEL); GO PARENCHECK; 07467000
|
|
END; 07467250
|
|
END; 07467500
|
|
IF ELCLASS!FILEID AND ELCLASS!SUPERFILEID THEN % DATACOM RELEASE. 07467750
|
|
BEGIN AEXP; GO DCR; END; 07468000
|
|
CHECKER(ELBAT[I]); PASSFILE; 07468250
|
|
IF ELCLASS = COMMA THEN EMITO(DUP); 07468500
|
|
COMMENT THIS WILL FETCH DESCRIPTOR POINTING TO I/O DESCRIPTOR; 07468750
|
|
CHECKPRESENCE; 07469000
|
|
COMMENT THIS WILL CAUSE PRESENCE BIT INTERRUPT IF PREVIOUS I/O IS 07469250
|
|
NOT COMPLETED; 07469500
|
|
EMITO(DUP); EMITO(LOD); EMITO(XCH); 07469750
|
|
IF ELCLASS = COMMA THEN 07470000
|
|
BEGIN 07470250
|
|
EMITO(DUP); EMITO(LOD); STEPIT; AEXP; 07470500
|
|
EMITD(38,8,10); EMITO(XCH); EMITO(STD); EMITO(XCH); 07470750
|
|
END; 07471000
|
|
EMITO(PRL); EMITO(DEL); 07471250
|
|
PARENCHECK: 07471500
|
|
IF ELCLASS=RTPAREN THEN STEPIT ELSE ERR(104); 07471750
|
|
EXIT: 07472000
|
|
END RELSESTMT; 07472250
|
|
COMMENT DOSTMT HANDLES THE DO STATEMENT; 07481000
|
|
PROCEDURE DOSTMT; 07482000
|
|
BEGIN INTEGER TL; 07483000
|
|
DIALA ~ DIALB ~ 0; 07484000
|
|
ADJUST; 07484100
|
|
STEPIT; TL~L; STMT; IF ELCLASS ! UNTILV THEN ERR(131)07485000
|
|
ELSE BEGIN 07486000
|
|
STEPIT; BEXP; EMITB(BBC,BUMPL,TL) END 07487000
|
|
END DOSTMT; 07488000
|
|
COMMENT WHILESTMT COMPILES THE WHILE STATEMENT; 07489000
|
|
PROCEDURE WHILESTMT; 07490000
|
|
BEGIN INTEGER BACK,FRONT; 07491000
|
|
DIALA ~ DIALB ~ 0; 07492000
|
|
ADJUST; 07492100
|
|
STEPIT; BACK ~ L; BEXP; FRONT ~ BUMPL; 07493000
|
|
IF ELCLASS ! DOV THEN ERR(132) ELSE 07494000
|
|
BEGIN STEPIT; STMT; EMITB(BBW,BUMPL,BACK); 07495000
|
|
CONSTANTCLEAN; EMITB(BFC,FRONT,L) END END WHILESTMT; 07496000
|
|
COMMENT GOSTMT COMPILES GO TO STATEMENTS. GOSTMT LOOKS AT THE 07497000
|
|
EXPRESSION. IF IT IS SIMPLE ENOUGH WE GO DIRECTLY. 07498000
|
|
OTHERWISE A CALL ON THE MCP IS GENERATED IN ORDER TO GET 07499000
|
|
STORAGE RETURNED. SEE DEXP AND GENGO; 07500000
|
|
PROCEDURE GOSTMT; 07501000
|
|
BEGIN 07502000
|
|
REAL ELBW; 07503000
|
|
LABEL GOMCP,EXIT; 07504000
|
|
IF STEPI = TOV THEN STEPIT; 07505000
|
|
IF ELCLASS = LABELID THEN TB1 ~ TRUE 07506000
|
|
ELSE IF ELCLASS = SWITCHID THEN TB1 ~ FALSE ELSE GO GOMCP;07507000
|
|
IF NOT LOCAL(ELBAT[I]) THEN GO GOMCP; 07508000
|
|
IF TB1 THEN BEGIN GOGEN(ELBAT[I],BFW); STEPIT; 07509000
|
|
CONSTANTCLEAN; GO EXIT END; 07510000
|
|
ELBW ~ ELBAT[I]; 07511000
|
|
IF ELBW < 0 07512000
|
|
THEN BEGIN COMMENT THIS IS A MONITORED SWITCH; 07513000
|
|
EMITO(MKS); PASSALPHA(ELBW);EMITPAIR(GNAT( 07514000
|
|
CHARI),LOD); PASSMONFILE(TAKE(GIT(ELBW)). 07515000
|
|
SWITMONFILE); %109-07516000
|
|
EMITNUM(0&CARDNUMBER[1:4:44]); %109-07516100
|
|
EMITV(GNAT( %109-07516200
|
|
PRINTI)); 07517000
|
|
END; 07518000
|
|
BANA; EMITPAIR(JUNK,ISD); 07519000
|
|
IF (GT1 ~ TAKE(GT2 ~ GIT(ELBW))).[24:12] = 0 07520000
|
|
AND ELBW.ADDRESS = 0 THEN BEGIN 07521000
|
|
PUT(GT1&(BUMPL)[24:36:12],GT2); 07522000
|
|
EMITB(BBW,L,GT4~GT1.[36:12]); 07523000
|
|
EMITB(BFW,GT4+13,L+3); 07524000
|
|
EMITO(NOP); EMITO(NOP); EMITO(NOP) END 07525000
|
|
ELSE BEGIN CALLSWITCH(ELBW); EMITO(BFW) END; 07526000
|
|
GO EXIT; 07527000
|
|
GOMCP: GOTOG ~ FALSE; DEXP; 07528000
|
|
IF GOTOG THEN 07529000
|
|
BEGIN EMITO(MKS); EMITL(9); EMITV(5); EMITO(BFW) END 07529100
|
|
ELSE BEGIN EMITO(PRTE); EMITO(LOD); EMITO(BFW) END; 07529200
|
|
EXIT:END GOSTMT; 07530000
|
|
COMMENT GOGEN GENERATES CODE TO GO TO A LABEL, GIVEN THAT LABEL AS A 07531000
|
|
PARAMETER. GOGEN ASSUMES THAT THE LABEL IS LOCAL. THE 07532000
|
|
PARAMETER BRANCH TYPE TELL WHETHER THE JUMP IS CONDITIONAL07533000
|
|
OR NOT; 07534000
|
|
PROCEDURE GOGEN(LABELBAT,BRANCHTYPE); 07535000
|
|
VALUE LABELBAT,BRANCHTYPE; 07536000
|
|
REAL LABELBAT,BRANCHTYPE; 07537000
|
|
BEGIN 07538000
|
|
IF BOOLEAN(GT1~TAKE(GT2~GIT(LABELBAT))).[1:1] 07539000
|
|
THEN EMITB(BRANCHTYPE,BUMPL,GT1.[36:12]) 07540000
|
|
COMMENT LABELR SETS THE SIGN OF THE ADDITIONAL INFO FOR A LABEL 07541000
|
|
NEGATIVE WHEN THE LABEL IS ENCOUNTERED. SO THIS MEANS 07542000
|
|
THAT WE NOW KNOW WHERE TO GO; 07543000
|
|
ELSE BEGIN EMIT(GT1); EMIT(BRANCHTYPE); 07544000
|
|
PUT(GT1&L[36:36:12],GT2) END END GOGEN; 07545000
|
|
COMMENT SIMPGO IS USED ONLY BY THE IF STMT ROUTINE. IT DETERMINES IF 07546000
|
|
A STATEMENT IS A SIMPLE GO TO STATEMENT; 07547000
|
|
BOOLEAN PROCEDURE SIMPGO; 07548000
|
|
BEGIN LABEL EXIT; 07549000
|
|
IF ELCLASS = GOV 07550000
|
|
THEN BEGIN 07551000
|
|
IF STEPI = TOV THEN STEPIT; 07552000
|
|
IF ELCLASS = LABELID THEN 07553000
|
|
IF LOCAL(ELBAT[I]) THEN 07554000
|
|
BEGIN SIMPGO ~ TRUE; GO EXIT END; 07555000
|
|
I ~ I-1; ELCLASS ~ GOV END; 07556000
|
|
EXIT: END SIMPGO; 07557000
|
|
COMMENT IFSTMT COMPILES IF STATEMENTS. SPECIAL CARE IS TAKEN TO 07558000
|
|
OPTIMIZE CODE IN THE NEIGHBORHOOD OF THE JUMPS. TO SOME 07559000
|
|
EXTENT SUPPERFULOUS BRANCHING IS AVOIDED; 07560000
|
|
PROCEDURE IFSTMT; 07561000
|
|
BEGIN REAL T1,T2; LABEL EXIT; 07562000
|
|
IFCLAUSE; 07563000
|
|
IF SIMPGO 07564000
|
|
THEN BEGIN 07565000
|
|
T1 ~ ELBAT[I]; 07566000
|
|
IF STEPI = ELSEV 07567000
|
|
THEN BEGIN 07568000
|
|
STEPIT; 07569000
|
|
IF SIMPGO 07570000
|
|
THEN BEGIN 07571000
|
|
GOGEN(ELBAT[I],BFC); GOGEN(T1,BFW); 07572000
|
|
STEPIT; GO TO EXIT END ELSE BEGIN EMITLNG;GOGEN(T1,BFC); 07573000
|
|
STMT ; GO TO EXIT END END ; 07574000
|
|
EMITLNG; GOGEN(T1,BFC); 07575000
|
|
GO EXIT END; 07576000
|
|
T1 ~ BUMPL; STMT; 07577000
|
|
IF ELCLASS ! ELSEV THEN 07578000
|
|
BEGIN DIALA ~ DIALB ~ 0; EMITB(BFC,T1,L); GO EXIT END; 07579000
|
|
STEPIT; 07580000
|
|
IF SIMPGO 07581000
|
|
THEN BEGIN 07582000
|
|
T2 ~ L; L ~T1-2;GOGEN(ELBAT[I],BFC); L ~ T2; 07583000
|
|
STEPIT; GO EXIT END; 07584000
|
|
T2 ~ BUMPL; CONSTANTCLEAN; 07585000
|
|
EMITB(BFC,T1,L); STMT; EMITB(BFW,T2,L); 07586000
|
|
EXIT: END IFSTMT; 07587000
|
|
COMMENT LABELR HANDLES LABELED STATEMENTS. IT PUTS L INTO THE 07588000
|
|
ADDITIONAL INFO AND MAKES ITS SIGN NEGATIVE. IT COMPILES 07589000
|
|
AT THE SAME TIME ALL THE PREVIOUS FORWARD REFERENCES SET 07590000
|
|
UP FOR IT BY GOGEN. (THE ADDITIONAL INFO LINKS TO A LIST 07591000
|
|
IN THE CODE ARRAY OF ALL FORWARD REFERENCES); 07592000
|
|
PROCEDURE LABELR; 07593000
|
|
BEGIN LABEL EXIT, ROUND; 07594000
|
|
DEFINE ELBATWORD=RR9#,LINK=GT2#,INDEX=GT3#,ADDITIONAL 07595000
|
|
=GT4#,NEXTLINK=GT5#; 07596000
|
|
DO BEGIN ADJUST; IF STEPI ! COLON THEN 07597000
|
|
BEGIN ERR(133); GO TO EXIT END; 07598000
|
|
XMARK(LBLREF); % THIS WILL SORT AHEAD OF DECLARATION %116-07598100
|
|
% WHEN WE GET AROUND TO THE XREF. %116-07598200
|
|
IF NOT LOCAL(ELBATWORD ~ ELBAT[I-1]) 07599000
|
|
THEN BEGIN FLAG(134); GO TO ROUND END; 07600000
|
|
LINK ~ (ADDITIONAL ~ TAKE(INDEX ~ GIT(ELBATWORD))) 07601000
|
|
.[36:12]; 07602000
|
|
IF ADDITIONAL < 0 THEN 07603000
|
|
BEGIN FLAG(135); GO TO ROUND END; 07604000
|
|
WHILE LINK ! 0 07605000
|
|
DO BEGIN 07606000
|
|
NEXTLINK ~ GET(LINK-2); 07607000
|
|
EMITB(GET(LINK-1),LINK,L); 07608000
|
|
LINK ~ NEXTLINK; 07609000
|
|
IF LASTENTRY } 126 THEN % DONT LET EMITNUM DO IT 07609100
|
|
BEGIN REAL C; % HOLD L FOR A WHILE 07609200
|
|
COMMENT THIS IS TO ALLOW FOR MORE THAN 56 LONG 07609300
|
|
(>1023 WORD) FORWARD REFERENCES TO A LABEL;07609400
|
|
C ~ BUMPL; 07609500
|
|
CONSTANTCLEAN; 07609600
|
|
EMITB(BFW,C,L) END;END; 07609700
|
|
PUT(-ADDITIONAL&L[36:36:12],INDEX); 07610000
|
|
IF ELBATWORD < 0 07611000
|
|
THEN BEGIN COMMENT THIS LABEL IS EITHER APPEARS IN A DUMP 07612000
|
|
OR MONITOR DECLARATION; 07613000
|
|
IF RR1~ADDITIONAL.LABLMONFILE ! 0 07614000
|
|
THEN BEGIN COMMENT THIS CODE IS FOR MONITORED 07615000
|
|
LABELS; 07616000
|
|
EMITO(MKS); PASSALPHA(ELBATWORD); 07617000
|
|
EMITPAIR(GNAT(CHARI),LOD); 07618000
|
|
PASSMONFILE(RR1); %109-07619000
|
|
EMITNUM(0&CARDNUMBER[1:4:44]); %109-07619100
|
|
EMITV(GNAT(PRINTI)); 07620000
|
|
END; 07621000
|
|
IF RR1~ADDITIONAL.DUMPEE ! 0 07622000
|
|
THEN BEGIN COMMENT EMIT CODE TO INCREMENT THE 07623000
|
|
LABEL COUNTER; 07624000
|
|
EMITV(RR1); EMITL(1); EMITO(ADD); 07625000
|
|
EMITPAIR (RR1,STD); 07626000
|
|
IF RR1~ADDITIONAL.DUMPOR ! 0 07627000
|
|
THEN BEGIN COMMENT EMIT CODE TO CALL 07628000
|
|
THE DUMP ROUTINE; 07629000
|
|
07630000
|
|
07631000
|
|
07632000
|
|
STUFFF(RR1); EMITO07633000
|
|
(XCH);EMITO(COC); 07634000
|
|
07635000
|
|
07636000
|
|
07637000
|
|
07638000
|
|
07639000
|
|
07640000
|
|
EMITO(DEL); 07641000
|
|
END; 07642000
|
|
END; 07643000
|
|
END; 07644000
|
|
ROUND: ERRORTOG ~ TRUE END UNTIL STEPI ! LABELID; 07645000
|
|
EXIT: END LABELR; 07646000
|
|
PROCEDURE CASESTMT; 07646100
|
|
BEGIN COMMENT THE CASE STATEMENT HAS THE FOLLOWING FORM: 07646110
|
|
CASE <ARITH EXP> OF BEGIN <COMPOUND TAIL> 07646120
|
|
AT EXECUTION THE CASE STATEMENT SELECTS ONE OF THE STATEMENTS 07646130
|
|
IN THE <COMPOUND TALE>, DEPENDING ON THE VALUE OF THE <ARITH EXP>, 07646140
|
|
ONLY THE SELECTED STATEMENT IS EXECUTED AND CONTROL RESUMES AFTER 07646150
|
|
THE <COMPOUND TAIL>. IF THERE ARE N STATEMENTS IN THE 07646160
|
|
<COMPOUND TAIL>, THEY MAY BE CONSIDERED NUMBERED 0,1,...,N-1. 07646170
|
|
AND THE <ARITH EXP> MUST TAKE ON ONLY THESE VALUES. OTHER VALUES 07646180
|
|
WILL RESULT IN AN INVALID INDEX TERMINATION OF THE OBJECT PROGRAM. 07646190
|
|
THE STATEMENTS IN THE <COMPOUND TAIL> MAY BE ANY EXECUTABLE 07646200
|
|
STATEMENTS, INCLUDING COMPOUND STATEMENTS, BLOCKS, CASE STATEMENTS 07646210
|
|
AND NULL STATEMENTS. THE CODE GENERATED IS AS FOLLOWS: 07646220
|
|
<ARITH EXP> 07646230
|
|
OPDC ARRAY 07646240
|
|
BFW 07646250
|
|
STMT 0 07646260
|
|
BRANCH TO RESUME 07646270
|
|
STMT 1 07646280
|
|
BRANCH TO RESUME 07646290
|
|
. 07646300
|
|
. 07646310
|
|
. 07646320
|
|
STMT N-1 07646330
|
|
RESUME: 07646340
|
|
"ARRAY" IS COMPILED AS A TYPE-2 SEGMENT OF N WORDS AND IS 07646350
|
|
CHANGED TO A DATA ARRAY AT THE FIRST REFERENCE. IT IS SUBSCRIPTED 07646360
|
|
BY THE VALUE OF <ARITH EXP> AND CONTAINS SYLLABLE COUNTS 07646370
|
|
FOR THE BRANCH TO EACH OF THE N STATEMENTS. THE BRANCH TO RESUME 07646375
|
|
IS OMITTED FOR A NULL STATEMENT. INSTEAD, THE INITIAL BRANCH 07646380
|
|
TRANSFERS TO RESUME DIRECTLY; 07646385
|
|
REAL LINK, TEMP, N, ADR, PRT, NULL; 07646390
|
|
BOOLEAN GOTOG; 07646395
|
|
REAL ARRAY TEDOC[0:7, 0:127]; 07646400
|
|
LABEL LOOP, XIT; 07646410
|
|
LINK ~ N ~ NULL ~ 0; 07646420
|
|
STEPIT; AEXP; 07646430
|
|
IF STEPI ! BEGINV THEN BEGIN ERR( 70); GO TO XIT END; 07646440
|
|
EMITV(PRT:=GETSPACE(TRUE,-3)); % CASE STMNT. DESCR. 07646450
|
|
EMITO(BFW); ADR ~ L; 07646460
|
|
LOOP: 07646470
|
|
ERRORTOG ~ TRUE; 07646475
|
|
IF STEPI = SEMICOLON THEN 07646480
|
|
BEGIN COMMENT NULL STATEMENT; 07646485
|
|
TEDOC[N.[38:3], N.[41:7]] ~ NULL; 07646490
|
|
NULL ~ N ~ N+1; GO TO LOOP; 07646495
|
|
END; 07646500
|
|
TEDOC[N.[38:3], N.[41:7]] ~ L-ADR; N ~ N + 1; 07646510
|
|
IF GOTOG := SIMPGO THEN ELBAT[I~I-1] ~ ELCLASS ~ GOV; 07646515
|
|
STMT; 07646520
|
|
IF ELCLASS = SEMICOLON THEN 07646525
|
|
BEGIN IF NOT GOTOG THEN 07646530
|
|
BEGIN EMIT(LINK);LINK ~ L ~ L+1; END; 07646533
|
|
GO TO LOOP; 07646535
|
|
END ELSE IF ELCLASS = ENDV THEN 07646538
|
|
BEGIN IF NOT GOTOG THEN 07646540
|
|
BEGIN EMIT(LINK); LINK ~ L ~ L+1; END; 07646543
|
|
TEDOC[N.[38:3], N.[41:7]]~ L-ADR; 07646545
|
|
N ~ N+1; 07646548
|
|
END; 07646550
|
|
IF ELCLASS ! ENDV THEN BEGIN ERR( 71); GO TO LOOP END; 07646555
|
|
N := N-1 ; 07646556
|
|
WHILE NULL ! 0 DO 07646560
|
|
BEGIN TEMP ~ TEDOC[(NULL~NULL-1).[38:3], NULL.[41:7]]; 07646565
|
|
TEDOC[NULL.[38:3], NULL.[41:7]] ~ L-ADR; 07646570
|
|
NULL ~ TEMP; 07646575
|
|
END; 07646580
|
|
ENDTOG ~ TRUE; 07646585
|
|
COMMENT SKIP ANY COMMENTS AFTER "END"; 07646590
|
|
DO STOPDEFINE ~ TRUE UNTIL STEPI { ENDV AND ELCLASS }UNTILV 07646595
|
|
OR NOT ENDTOG; 07646600
|
|
ENDTOG ~ FALSE; 07646610
|
|
COMMENT DEFINE TEDOC AS TYPE-2 SEGMENT; 07646620
|
|
MOVECODE(TEDOC, EDOC); 07646630
|
|
BUILDLINE ~ BOOLEAN(2|REAL(BUILDLINE)) ; 07646635
|
|
TEMP := SGNO; IF LISTER OR SEGSTOG THEN SEGMENTSTART; 07646640
|
|
SGNO ~ SGAVL; 07646650
|
|
Z ~ PROGDESCBLDR(LDES, 0, PRT); 07646660
|
|
SEGMENT(-N, SGNO, TEMP); 07646670
|
|
SGAVL ~ SGAVL + 1; SGNO ~ TEMP; 07646680
|
|
BUILDLINE ~ BUILDLINE.[46:1] ; 07646685
|
|
MOVECODE(TEDOC, EDOC); 07646690
|
|
COMMENT FIX UP BRANCHES TO RESUME POINT; 07646700
|
|
IF (L-ADR)>1019 THEN ADJUST;% 07646705
|
|
WHILE LINK ! 0 DO 07646710
|
|
BEGIN TEMP ~ GET(LINK-2); 07646720
|
|
EMITB(BFW, LINK, L); 07646730
|
|
LINK ~ TEMP; 07646740
|
|
IF LASTENTRY } 126 THEN 07646750
|
|
BEGIN REAL C; 07646760
|
|
COMMENT PERMITS SEVERAL LONG BRANCHES IF NECESSARY; 07646770
|
|
C ~ BUMPL; 07646780
|
|
CONSTANTCLEAN; 07646790
|
|
EMITB(BFW, C, L); 07646800
|
|
END; 07646810
|
|
END; 07646820
|
|
XIT: 07646830
|
|
END CASESTMT; 07646840
|
|
COMMENT THE FOLLOWING PROCEDURE HANDLES THE FILL STATEMENT. 07647000
|
|
IT EMITS CODE TO PASS THE ROW TO BE FILLED AND TO PASS 07647500
|
|
THE INDEX IN THE SEGMENT DICTIONARY OF THE FILL SEGMENT. 07648000
|
|
THESE SEGMENTS LOOK LIKE ANY OTHER SEGMENT TO THE MCP. 07648500
|
|
NO FILL SEGMENT IS EVER BROUGHT INTO CORE.THE SEGMENT 07649000
|
|
RESIDES ON THE DISK AND IS READ INTO THE ROW DESIGNATED 07649500
|
|
BY THE FILL STATEMENT EVERY TIME THE FILL STATEMENT IS 07650000
|
|
EXECUTED.STRINGCONSTANTS,LITERAL ,AND NONLITERAL NUMBERS 07650500
|
|
ARE ALL CONVERTED BY THE SCANNER AND NUMBER BUILDER.OCTAL 07651000
|
|
NUMBERS LOOK LIKE IDENITIFERS TO FILLSTMT AND ARE CONVERTED 07651500
|
|
BY OCTIZE.AFTER BUILDING THE SEGMENT AN ENTRY IS MADE IN 07652000
|
|
PDPRT TO SUPPLY INFO TO BUILD A DISK DESCRIPTOR IN THE 07652500
|
|
SEGMENT DICTIONARY.THE COMMUNICATE LITERAL IS 7; 07653000
|
|
PROCEDURE FILLSTMT; 07653500
|
|
BEGIN 07654000
|
|
LABEL EXIT; 07654500
|
|
DEFINE PARENCOUNTER = RR1#, 07655000
|
|
T = RR2#, 07655500
|
|
J = RR3#; 07656000
|
|
ARRAY TEDOC[0:7,0:127], FILLTEMP[0:1022]; 07656500
|
|
BOOLEAN PROCEDURE FILLIT(A); ARRAY A[0]; 07657000
|
|
BEGIN 07657500
|
|
REAL T1, T2, T3; 07658000
|
|
BOOLEAN BOO; 07658500
|
|
LABEL CHECK, GOOFUP, EXIT; 07659000
|
|
PARENCOUNTER:=PARENCOUNTER+1; 07659500
|
|
WHILE T<1023 DO 07660000
|
|
BEGIN 07660500
|
|
IF STEPI>IDMAX THEN 07661000
|
|
BEGIN 07661500
|
|
IF ELCLASS=LITNO THEN 07662000
|
|
IF TABLE(I+1)=LEFTPAREN THEN 07662500
|
|
BEGIN 07663000
|
|
T1:=ELBAT[I].ADDRESS; T2:=T; 07663500
|
|
STEPIT; IF FILLIT(A) THEN GO GOOFUP; 07664000
|
|
IF T1=0 THEN T:=T2 07664500
|
|
ELSE BEGIN 07665000
|
|
IF (T3:=(T1-1)|(T-T2))+T>1022 THEN 07665500
|
|
BEGIN ERROR(305); GO GOOFUP END;%>102307666000
|
|
MOVE(T3,A[T2],A[T]); T:=T+T3; 07666500
|
|
END; 07667000
|
|
GO CHECK; 07667500
|
|
END REPEAT PART; 07668000
|
|
IF (BOO:=ELCLASS=ADOP) THEN STEPIT; 07668500
|
|
IF ELCLASS!LITNO AND ELCLASS!NONLITNO THEN 07669000
|
|
IF ELCLASS!STRING AND(ELCLASS!STRNGCON OR BOO) THEN07669500
|
|
BEGIN ERROR(302); GO GOOFUP END; % WHATISIT. 07670000
|
|
IF BOO THEN C:=C&ELBAT[I-1][1:21:1]; 07670500
|
|
IF ELCLASS=STRING THEN 07671000
|
|
BEGIN 07671500
|
|
IF (T2:=T+(COUNT+7)DIV 8-1)>1022 THEN 07672000
|
|
BEGIN ERROR(305); GO GOOFUP END; % > 1023. 07672500
|
|
T3:=" "; MOVE(1,T3,A[T2]); 07673000
|
|
MOVECHARACTERS(COUNT,ACCUM[1],3,A[T],0); 07673500
|
|
T:=T2; 07674000
|
|
END 07674500
|
|
ELSE MOVE(1,C,A[T]); 07675000
|
|
END 07675500
|
|
ELSE IF COUNT{19 AND ACCUM[1].[18:18]="OCT" THEN 07676000
|
|
BEGIN % GET RID OF "OCT" FOR OCTIZE. 07676500
|
|
MOVECHARACTERS(COUNT-3,ACCUM[1],6,ACCUM[1],3); 07677000
|
|
IF OCTIZE(ACCUM[1],A[T],19-COUNT,COUNT-3) THEN 07677500
|
|
FLAG(303); % NON-OCTAL CHARACTER. 07678000
|
|
END 07678500
|
|
ELSE BEGIN ERROR(302); GO GOOFUP END; % WHATISIT. 07679000
|
|
T:=T+1; 07679500
|
|
CHECK: 07680000
|
|
IF STEPI!COMMA THEN GO EXIT; 07680500
|
|
END T LOOP; 07681000
|
|
ERROR(305); % > 1023 ITEMS IN LIST. 07681500
|
|
GOOFUP: 07682000
|
|
FILLIT:=TRUE; 07682500
|
|
EXIT: 07683000
|
|
PARENCOUNTER:=PARENCOUNTER-REAL(ELCLASS=RTPAREN); 07683500
|
|
END RECURSIVE FILLIT; 07684000
|
|
IF STEPI<BOOARRAYID OR ELCLASS>INTARRAYID THEN 07684500
|
|
BEGIN 07685000
|
|
IF ELCLASS=FILEID OR ELCLASS=SUPERFILEID THEN 07685500
|
|
MAKEALABEL ELSE ERROR(300); % NO ARRAY ID. 07686000
|
|
GO EXIT; 07686500
|
|
END; 07687000
|
|
VARIABLE(FL); IF TABLE(I-2)!FACTOP THEN FLAG(304); % NOT ARR. ROW. 07687500
|
|
XMARK(ASSIGNREF); % FILL STATEMENT %116-07687600
|
|
IF ELCLASS!WITHV THEN 07688000
|
|
BEGIN ERROR(301); GO EXIT END; % MISSING "WITH". 07688500
|
|
STREAMTOG:=TRUE; 07689000
|
|
IF TABLE(I+1){IDMAX THEN 07689500
|
|
IF Q="7INQUI" THEN 07690000
|
|
BEGIN 07690500
|
|
STREAMTOG:=FALSE; I:=I+1; STEPIT; 07691000
|
|
EMITPAIR(9,COM); EMITO(DEL); 07691500
|
|
GO EXIT; 07692000
|
|
END; 07692500
|
|
EMITNUM(SGAVL); EMITPAIR(7,COM); EMITO(DEL); EMITO(DEL); 07693000
|
|
IF LISTER OR SEGSTOG THEN SEGMENTSTART; 07693500
|
|
MOVECODE(TEDOC,EDOC); PARENCOUNTER:=T:=0; 07694000
|
|
BUILDLINE:=BOOLEAN(2|REAL(BUILDLINE)) ; 07694500
|
|
IF FILLIT(FILLTEMP) THEN % DO NOTHING. 07695000
|
|
ELSE IF PARENCOUNTER!1 THEN ERROR(306) % ODD # OF PARENS. 07695500
|
|
ELSE BEGIN 07696000
|
|
FOR J:=0 STEP 32 UNTIL T DO 07696500
|
|
MOVE(32,FILLTEMP[J],EDOC[J.[38:3],J.[41:7]]); 07697000
|
|
SEGMENT(T,SGAVL,SGNO); 07697500
|
|
END; 07698000
|
|
MOVECODE(TEDOC,EDOC); STREAMTOG:=FALSE; 07698500
|
|
BUILDLINE:=BUILDLINE.[46:1] ; SGAVL:=SGAVL+1; 07699000
|
|
EXIT: 07699500
|
|
END FILLSTMT; 07700000
|
|
COMMENT STMT DIRECTS TRAFFIC TO THE VARIOUS STATEMENT ROUTINES. SOME 07710000
|
|
CARE IS TAKEN TO PICK UP EXTRANEOUS DECLARATIONS. THIS 07711000
|
|
WILL SOMETIMES CAUSE ADDITIONAL ERROR MESSAGES. THIS IS 07712000
|
|
AN IMPERFECT ANALYSIS OF BEGIN-END PAIRS; 07713000
|
|
PROCEDURE STMT ; 07714000
|
|
BEGIN 07715000
|
|
LABEL AGAIN,LERR,LDEC,LPROC,LSPROC,LVAR,LAB,LREAD,LWRITE, 07716000
|
|
LSPACE,LCLOSE,LLOCK,LRWND,LDBL,LFOR,LWHILE,LDO,LFILL,LIF, 07717000
|
|
LGO, LRELSE, LBEG, LBRK, EXIT; 07718000
|
|
SWITCH S ~ 07719000
|
|
LPROC, LERR, LSPROC,LERR, LERR, LERR, LERR, 07720000
|
|
LPROC, LPROC, LPROC, LPROC, LVAR, LVAR, LVAR, 07721000
|
|
LVAR, 07722000
|
|
LVAR, LVAR, LVAR, LVAR, LAB, LERR, LERR, 07723000
|
|
LERR, LERR, LERR, LDEC, LREAD, LWRITE,LSPACE, 07724000
|
|
LCLOSE,LLOCK, LRWND, LDBL, LFOR, LWHILE,LDO, 07725000
|
|
EXIT, EXIT, EXIT, LFILL, EXIT, LIF, LGO, 07726000
|
|
LRELSE,LBEG; 07727000
|
|
COMMENT THESE ADDITIONS ARE BEING MADE TO FORCE 07727010
|
|
CONSTANTCLEAN ACTION WHEN IT APPEARS THAT CONSTANTS WILL BE 07727020
|
|
GENERATED IN THE STACK WHICH ARE TOO FAR AWAY AND CREL 07727030
|
|
ADDRESSING IS NOT POSSIBLE; 07727040
|
|
IF LASTENTRY !0 THEN 07727050
|
|
BEGIN GT2 ~ INFO [0,255]; 07727055
|
|
DO GT1 ~ GT2 UNTIL GT2~GET(GT1) = 4095; 07727060
|
|
IF L- GT1 > 400 THEN 07727065
|
|
BEGIN GT1 ~ BUMPL; 07727070
|
|
CONSTANTCLEAN; 07727075
|
|
EMITB(BFW, GT1,L); 07727080
|
|
END; 07727085
|
|
END; 07727090
|
|
STACKCT ~ 0; %A 07727100
|
|
AGAIN: GO TO S[ELCLASS-SWITCHID]; 07728000
|
|
IF ELCLASS = 0 THEN 07728500
|
|
BEGIN UNKNOWNSTMT; GO TO EXIT END; 07729000
|
|
IF ELCLASS=FAULTID THEN BEGIN FAULTSTMT; GO EXIT END; 07729100
|
|
IF ELCLASS=FILEID OR ELCLASS=SUPERFILEID THEN 07729190
|
|
BEGIN GT1~FILEATTRIBUTEHANDLER(FS); GO EXIT END ; 07729200
|
|
FLAG(145); 07729500
|
|
LERR: ERR(144); GO TO EXIT; 07730000
|
|
LDEC: FLAG(146); 07731000
|
|
IF TABLE(I-2) = ENDV AND MODE > 0 07732000
|
|
THEN BEGIN I ~ I-2; ELCLASS ~ ENDV; GO TO EXIT END; 07733000
|
|
I ~ I-1; ERRORTOG ~ TRUE; BLOCK(FALSE); 07734000
|
|
ELCLASS ~ TABLE(I~I-1); GO TO EXIT; 07735000
|
|
07735500
|
|
07735510
|
|
07735520
|
|
LPROC: PROCSTMT(TRUE); GO TO EXIT; 07736000
|
|
LSPROC: STRMPROCSTMT; GO TO EXIT; 07737000
|
|
LVAR: VARIABLE(FS); GO TO EXIT; 07738000
|
|
LAB: LABELR; GO TO AGAIN; 07739000
|
|
LREAD: READSTMT; GO TO EXIT; 07740000
|
|
LWRITE: WRITESTMT; GO TO EXIT; 07741000
|
|
LSPACE: SPACESTMT; GO TO EXIT; 07742000
|
|
LCLOSE: CLOSESTMT; GO TO EXIT; 07743000
|
|
LLOCK: LOCKSTMT; GO TO EXIT; 07744000
|
|
LRWND: RWNDSTMT; GO TO EXIT; 07745000
|
|
LDBL: DBLSTMT; GO TO EXIT; 07746000
|
|
LFOR: FORSTMT; GO TO EXIT; 07747000
|
|
LWHILE: WHILESTMT; GO TO EXIT; 07748000
|
|
LDO: DOSTMT; GO TO EXIT; 07749000
|
|
LFILL: FILLSTMT; GO TO EXIT; 07750000
|
|
LIF: IFSTMT; GO TO EXIT; 07751000
|
|
LGO: GOSTMT; GO TO EXIT; 07752000
|
|
LRELSE: RELSESTMT; GO TO EXIT; 07753000
|
|
LBEG: IF STEPI = DECLARATORS 07754000
|
|
THEN BEGIN I ~ I-1; BLOCK(FALSE) END 07755000
|
|
ELSE COMPOUNDTAIL; 07756000
|
|
EXIT: END STMT; 07757000
|
|
PROCEDURE CMPLXSTMT; FORWARD ; 07777777
|
|
PROCEDURE UNKNOWNSTMT; 07800000
|
|
BEGIN LABEL XXX,E; 07801000
|
|
REAL J,N,C; 07802000
|
|
IF Q = "5BREAK" THEN 07803000
|
|
BEGIN EMIT(0); 07804000
|
|
EMIT(48); 07805000
|
|
EMITO(COM); 07806000
|
|
EMITO(DEL); 07807000
|
|
STEPIT; 07808000
|
|
GO TO XXX; 07809000
|
|
END; 07810000
|
|
IF Q="7COMPL" THEN BEGIN CMPLXSTMT; GO XXX END ; 07810100
|
|
IF Q = "3ZIP00" THEN 07811000
|
|
BEGIN IF TABLE(I+1) = WITHV THEN 07812000
|
|
BEGIN STEPIT; 07813000
|
|
IF STEPI < BOOARRAYID OR ELCLASS > 07814000
|
|
INTARRAYID THEN 07814100
|
|
IF ELCLASS=FILEID OR 07814200
|
|
ELCLASS=SUPERFILEID THEN 07814300
|
|
PASSFILE ELSE 07814400
|
|
GO E ELSE 07814500
|
|
BEGIN 07814600
|
|
VARIABLE(FL); 07815000
|
|
IF TABLE(I-2) ! FACTOP THEN GO TO E; 07816000
|
|
END; 07816100
|
|
EMIT(16); EMITO(COM); EMITO(DEL); 07817000
|
|
GO TO XXX; 07818000
|
|
END; 07819000
|
|
N ~ 1; C ~ 8 07820000
|
|
END ELSE 07821000
|
|
IF Q = "5CHAIN" THEN 07821100
|
|
BEGIN N ~ 1; C ~ 37 END ELSE 07821200
|
|
IF Q = "4WHEN0" THEN 07822000
|
|
BEGIN N ~ 0; C ~ 6 END ELSE 07823000
|
|
IF Q = "4WAIT0" THEN 07824000
|
|
BEGIN N ~ 1; C ~ 2 END ELSE 07825000
|
|
IF Q = "4CASE0" THEN BEGIN CASESTMT; GO TO XXX END ELSE 07825500
|
|
IF Q = "4SORT0" THEN BEGIN SORTSTMT; GO XXX END ELSE 07826000
|
|
IF Q = "5MERGE" THEN BEGIN MERGESTMT; GO XXX END ELSE 07827000
|
|
IF Q = "6SEARC" THEN 07828000
|
|
BEGIN IF STEPI!LEFTPAREN THEN 07829000
|
|
BEGIN ERR(105); GO TO XXX END; 07830000
|
|
IF STEPI=FILEID OR ELCLASS=SUPERFILEID THEN 07831000
|
|
PASSFILE ELSE GO TO E; 07832000
|
|
IF ELCLASS!COMMA THEN GO TO E; 07833000
|
|
IF STEPI<BOOARRAYID OR ELCLASS>INTARRAYID THEN 07834000
|
|
GO TO E; 07835000
|
|
XMARK(ASSIGNREF); % SEARCH STATEMENT %116-07835500
|
|
VARIABLE(FL); 07836000
|
|
IF TABLE(I-2)!FACTOP THEN GO TO E; 07837000
|
|
IF ELCLASS!RTPAREN THEN 07838000
|
|
BEGIN ERR(104); GO TO XXX END; 07839000
|
|
EMITPAIR(30,COM); EMITO(DEL); EMITO(DEL); 07840000
|
|
STEPIT; GO TO XXX; 07841000
|
|
END ELSE 07842000
|
|
IF Q="4SEEK0" THEN 07843000
|
|
BEGIN IF STEPI!LEFTPAREN THEN 07844000
|
|
BEGIN ERR(105); GO TO XXX; END; 07845000
|
|
IF STEPI!FILEID AND ELCLASS!SUPERFILEID THEN 07846000
|
|
GO TO E ELSE 07847000
|
|
BEGIN EMITL(0); EMITL(0); PASSFILE; 07848000
|
|
IF ELCLASS!LEFTPAREN THEN 07849000
|
|
BEGIN ERR(105); GO TO XXX; END; 07850000
|
|
STEPIT; AEXP; EMITO(XCH); 07851000
|
|
IF ELCLASS!RTPAREN THEN 07852000
|
|
BEGIN ERR(104); GO TO XXX; END; 07853000
|
|
IF STEPI!RTPAREN THEN 07854000
|
|
BEGIN ERR(104); GO TO XXX; END; 07855000
|
|
EMITPAIR(32,COM); EMITO(DEL); EMITO(DEL); 07856000
|
|
EMITO(DEL); EMITO(DEL); STEPIT; 07857000
|
|
END; GO TO XXX; 07858000
|
|
END ELSE 07859000
|
|
IF Q="6UNLOC" THEN 07859010
|
|
BEGIN IF STEPI!LEFTPAREN THEN 07859020
|
|
BEGIN ERR(105); GO TO XXX END; 07859030
|
|
STEPIT; VARIABLE(FL); L ~ L-1; 07859040
|
|
IF TABLE(I-2)!FACTOP THEN FLAG(208); 07859050
|
|
EMITO(DUP); EMITO(LOD); EMITL(0); 07859060
|
|
EMITD(43,3,5); EMITO(XCH); EMITO(STD); 07859070
|
|
IF ELCLASS=RTPAREN THEN STEPIT ELSE ERR(104); 07859080
|
|
GO TO XXX 07859090
|
|
END ELSE 07859100
|
|
$ SET OMIT = NOT TSPOL 07859900
|
|
$ POP OMIT % [NOT IN ORIGINAL LISTING] 07899000
|
|
BEGIN ERROR(100); GO TO XXX END; 07900000
|
|
IF STEPI ! LEFTPAREN THEN 07901000
|
|
BEGIN ERR(105); GO TO XXX END; 07902000
|
|
STEPIT; AEXP; 07903000
|
|
FOR J ~ 1 STEP 1 UNTIL N DO 07904000
|
|
BEGIN IF ELCLASS ! COMMA THEN 07905000
|
|
E: BEGIN ERR(164); GO TO XXX END; 07906000
|
|
STEPIT; AEXP; 07907000
|
|
END; 07908000
|
|
IF ELCLASS ! RTPAREN THEN 07909000
|
|
BEGIN ERR(104); GO TO XXX END; 07910000
|
|
EMITL(C); EMITO(COM); 07911000
|
|
FOR J ~ 0 STEP 1 UNTIL N DO EMITO(DEL); 07912000
|
|
STEPIT; 07913000
|
|
XXX: END; 07914000
|
|
PROCEDURE FAULTSTMT; COMMENT THIS IS WHAT HAPPENS FOR THE"<FAULTYPE>~" 07920000
|
|
KIND OF STATEMENT. FOR THE RUN-TIME ERROR MESS; 07921000
|
|
BEGIN REAL ELBW,STR; DEFINE ADRES=ELBW.ADDRESS#; 07922000
|
|
CHECKER(ELBW~ELBAT[I]); STR~IF FAULTOG THEN SND ELSE STD; 07923000
|
|
FAULTOG ~ BOOLEAN(1) OR FAULTOG; COMMENT TELLS DEXP TO MESS 07923100
|
|
WITH FAULTLEVEL; 07923150
|
|
IF STEPI!ASSIGNOP THEN ERR (60) ELSE 07924000
|
|
IF STEPI=LITNO THEN BEGIN EMIT(0); STEPIT END ELSE 07925000
|
|
IF ELCLASS=FAULTID THEN FAULTSTMT ELSE DEXP; 07925100
|
|
EMITPAIR(ADRES,STR); 07926000
|
|
FAULTOG~FALSE&(ELBW.LVL<LEVEL OR FAULTOG.[46:1])[46:47:1]; 07926100
|
|
END FAULTSTMT NOW WASNT THAT SIMPLE; 07927000
|
|
PROCEDURE KLUDGE(T); VALUE T; INTEGER T; 07930000
|
|
BEGIN COMMENT KLUDGE HANDLES ARRAY-ROW READS AND WRITES FOR 07931000
|
|
THOSE CASES WHICH DO NOT NEED TO GO THROUGH THE 07932000
|
|
FORMATTING INTRINSICS. A NEW MCP INTRINSIC IS 07933000
|
|
USED, TO FURTHER IMPROVE SPEED/DECREASE CORE USE; 07934000
|
|
LABEL EXIT; 07935000
|
|
L ~ ABS(T); 07936000
|
|
AEXP; 07937000
|
|
IF ELCLASS!COMMA THEN BEGIN ERR(426); GO TO EXIT; END; 07938000
|
|
IF STEPI<BOOARRAYID OR ELCLASS>INTARRAYID THEN 07939000
|
|
BEGIN ERR(429); GO TO EXIT; END; 07940000
|
|
VARIABLE(FL); IF TABLE(I-2)!FACTOP THEN 07941000
|
|
BEGIN ERR(427); GO TO EXIT; END; 07942000
|
|
IF ELCLASS!RTPAREN THEN BEGIN ERR(428); GO TO EXIT; END; 07943000
|
|
EMITO(XCH); 07944000
|
|
IF T<0 THEN COMMENT FROM WRITE...(<0 IS FROM READ); 07945000
|
|
BEGIN EMITPAIR(JUNK,STD); EMITO(XCH); EMITV(JUNK); END; 07946000
|
|
IF T>0 THEN IF TABLE(I+1)=LFTBRKET THEN 07947000
|
|
BEGIN GOGOGO ~ FALSE;% JUST TO MAKE SURE... 07948000
|
|
HANDLETHETAILENDOFAREADORSPACESTATEMENT;% 07949000
|
|
L ~ L-1;% REMOVE THE OPDC ON INPUTINT... 07950000
|
|
EMITO(DEL); EMITO(DEL);% REMOVE LABEL WORDS... 07951000
|
|
END ELSE STEPIT ELSE STEPIT;% WALTZ ON BY... 07952000
|
|
EMITV(GNAT(SUPERMOVER));% BET YOU THOUGHT I"D NEVER DO IT 07953000
|
|
EXIT: END THIS HAIRY KLUDGE;% 07954000
|
|
COMMENT FORSTMT IS RESPONSIBLE FOR THE COMPILATION OF FOR STATEMENTS. 08000000
|
|
IF THE FOR STATEMENT HAS A SINGLE STEP-UNTIL ELEMENT SUCH 08001000
|
|
THAT THE INITIAL VALUE, THE STEP AND THE FINAL VALUE ARE 08002000
|
|
ALL OF THE FORM V,+V, OR -V WHERE V IS A VARIABLE OR A 08003000
|
|
CONSTANT, THEN THE CODE TAKES ON MORE EFFICIENT FORM. 08004000
|
|
IN OTHER CASES THE CODE IS SOMEWHAT LESS EFFICIENT, SINCE 08005000
|
|
THE BODY OF THE FOR STATEMENT BECOMES A SUBROUTINE. THE 08006000
|
|
STEP ALSO BECOMES A SUBROUTINE IF IT IS NOT SIMPLE; 08007000
|
|
PROCEDURE FORSTMT; 08008000
|
|
BEGIN 08009000
|
|
OWN REAL B,STMTSTART,REGO,RETURNSTORE,ADDRES,V,VRET, 08010000
|
|
BRET; 08011000
|
|
OWN BOOLEAN SIGNA,SIGNB,SIGNC, INT, 08012000
|
|
CONSTANA,CONSTANB,CONSTANC; 08013000
|
|
DEFINE SIMPLEB = SIGNC#, FORMALV = SIGNA#, 08014000
|
|
SIMPLEV = CONSTANA#, A = V#, Q = REGO#, 08015000
|
|
OPDC = TRUE#, DESC = FALSE#, K = BRET#; 08016000
|
|
LABEL EXIT; 08017000
|
|
COMMENT FORCLASS CHECKS FOR THE APPROPRIATE WORD STEP, UNTIL, OR DO-- 08017100
|
|
IF A CONSTANT IS FOUND, IT STORES OFF THE VALUE (FROM C) AT 08017200
|
|
INFO[0,K] AND STUFFS K INTO THE ELBAT WORD, SO THAT TABLE CAN 08017300
|
|
RECONSTRUCT THE CONSTANT EHEN WE SCAN ELBAT AGAIN; 08017400
|
|
BOOLEAN PROCEDURE FORCLASS(CLSS); VALUE CLSS; INTEGER CLSS; 08017500
|
|
IF STEPI = CLSS THEN FORCLASS ~ TRUE ELSE 08017600
|
|
IF ELCLASS } NONLITNO AND ELCLASS { STRNGCON THEN 08017700
|
|
BEGIN INFO[0,K~K+1] ~ C; 08017800
|
|
ELBAT[I] ~ 0&COMMENTV[2:41:7]&K[16:37:11] 08017900
|
|
END FORCLASS; 08017950
|
|
COMMENT PLUG EMITS EITHER AN OPERAND CALL ON A VARIABLE OR A CALL ON A 08018000
|
|
CONSTANT DEPENDING ON THE REQUIREMENTS; 08019000
|
|
PROCEDURE PLUG(C,A); VALUE C,A; REAL A; BOOLEAN C; 08020000
|
|
IF C THEN EMITNUM (A) ELSE BEGIN 08021000
|
|
CHECKER (A); 08021100
|
|
EMITV(A.ADDRESS) END; 08021200
|
|
COMMENT SIMPLE DETERMINES IF AN ARITHMETIC EXPRESSION IS + OR - A 08022000
|
|
CONSTANT OR A SIMPLE VARIABLE. IT MAKES A THROUGH REPORT 08023000
|
|
ON ITS ACTIVITY. IT ALSO MAKES PROVISION FOR THE RESCAN 08024000
|
|
OF ELBAT (THIS IS THE ACTION WITH K - SEE CODE IN THE 08025000
|
|
TABLE ROUTINE FOR FURTHER DETAILS); 08026000
|
|
BOOLEAN PROCEDURE SIMPLE(B,A,S); BOOLEAN B,S; REAL A; 08027000
|
|
BEGIN 08028000
|
|
S ~ IF STEPI ! ADOP THEN FALSE ELSE ELBAT[I].ADDRESS 08029000
|
|
= SUB; 08030000
|
|
IF ELCLASS = ADOP THEN STEPIT; 08031000
|
|
IF ELCLASS } NONLITNO AND ELCLASS { STRNGCON 08032000
|
|
THEN BEGIN K ~ K+1; SIMPLE ~ TRUE; 08033000
|
|
ELBAT[I] ~ 0&COMMENTV[2:41:7]&K[16:37:11]; 08034000
|
|
INFO[0,K] ~ A ~ C; B ~ TRUE END 08035000
|
|
ELSE BEGIN 08036000
|
|
B ~ FALSE; A ~ ELBAT[I]; 08037000
|
|
SIMPLE ~ REALID { ELCLASS AND ELCLASS { INTID END; 08038000
|
|
END SIMPLE; 08038100
|
|
COMMENT TEST EMITS THE STEP-UNTIL ELEMENT TEST; 08040000
|
|
PROCEDURE TEST; 08041000
|
|
BEGIN 08042000
|
|
IF NOT CONSTANB THEN 08043000
|
|
BEGIN EMITO(SUB); IF SIMPLEB THEN EMITV(B.ADDRESS) 08044000
|
|
ELSE BEGIN 08045000
|
|
EMITL(2+L-BRET); 08046000
|
|
EMITB(BBW,BUMPL,B); 08047000
|
|
END; 08048000
|
|
EMITO(MUL); EMIT(0) END; 08049000
|
|
EMITO(IF SIGNB THEN GEQ ELSE LEQ); EMIT (0); L~L-1 08050000
|
|
END TEST; 08051000
|
|
BOOLEAN PROCEDURE SIMPI(ALL); VALUE ALL; REAL ALL; 08052000
|
|
BEGIN 08053000
|
|
CHECKER(VRET~ALL); 08054000
|
|
ADDRES ~ ALL.ADDRESS; 08055000
|
|
FORMALV ~ ALL.[9:2] = 2; 08056000
|
|
IF T ~ ALL.CLASS > INTARRAYID OR T < BOOID OR 08057000
|
|
GT1 ~ (T-BOOID) MOD 4 < 1 THEN 08058000
|
|
ERR(REAL(T ! 0) | 51 + 100); 08059000
|
|
INT ~ GT1 = 3; 08060000
|
|
SIMPI ~ T { INTID END SIMPI; 08061000
|
|
COMMENT STORE EMITS THE CODE FOR THE STORE INTO THE FOR INDEX; 08062000
|
|
PROCEDURE STORE(S); VALUE S; BOOLEAN S; 08063000
|
|
BEGIN 08064000
|
|
IF FORMALV THEN BEGIN EMITO(XCH); S ~ FALSE END 08065000
|
|
ELSE BEGIN 08066000
|
|
EMITL(ADDRES); 08067000
|
|
IF ADDRES > 1023 THEN EMITO(PRTE) END; 08068000
|
|
T ~ (REAL(S)+1)|16; 08069000
|
|
EMITO((IF INT THEN T+512 ELSE 4|T)+4) END STORE; 08070000
|
|
COMMENT CALL EFFECTS A CALL ON THE INDEX; 08071000
|
|
PROCEDURE CALL(S); VALUE S; BOOLEAN S; 08072000
|
|
BEGIN 08073000
|
|
IF SIMPLEV 08074000
|
|
THEN IF S THEN EMITV(ADDRES) ELSE EMITN(ADDRES) 08075000
|
|
ELSE BEGIN 08076000
|
|
EMITL(2+L-VRET); 08077000
|
|
EMITB(BBW,BUMPL,V); 08078000
|
|
IF S THEN EMITO(LOD) END END CALL; 08079000
|
|
PROCEDURE FORLIST(NUMLE); VALUE NUMLE; BOOLEAN NUMLE; 08080000
|
|
BEGIN 08081000
|
|
PROCEDURE FIX(STORE,BACK,FORWART,START); 08082000
|
|
VALUE STORE,BACK,FORWART,START; 08083000
|
|
REAL STORE,BACK,FORWART,START; 08084000
|
|
BEGIN 08085000
|
|
EMITB(GET(FORWART-1),FORWART,START); 08086000
|
|
IF RETURNSTORE ! 0 08087000
|
|
THEN BEGIN 08088000
|
|
L ~ STORE; EMITNUM(B-BACK); 08089000
|
|
EMITPAIR(RETURNSTORE,STD) END END FIX; 08090000
|
|
INTEGER BACKFIX, FORWARDBRANCH, FOOT, STOREFIX; 08091000
|
|
LABEL BRNCH,EXIT; 08092000
|
|
STOREFIX ~ L; Q ~ REAL(MODE=0)+3; 08093000
|
|
FOR K ~ 1 STEP 1 UNTIL Q DO EMITO(NOP); 08094000
|
|
IF NUMLE 08095000
|
|
THEN BEGIN 08096000
|
|
BACKFIX ~ L; 08097000
|
|
IF FORMALV THEN CALL(DESC) END 08098000
|
|
ELSE BACKFIX ~ V + REAL(SIMPLEV)-1; 08099000
|
|
DIALA ~ DIALB ~ 0; 08100000
|
|
AEXP; DIALA ~ DIALB ~ 0; 08101000
|
|
COMMENT PICK UP FIRST ARITHMETIC EXPRESSION; 08102000
|
|
IF ELCLASS = STEPV 08103000
|
|
THEN BEGIN 08104000
|
|
COMMENT HERE WE HAVE A STEP ELEMENT; 08105000
|
|
BACKFIX ~ BUMPL; 08106000
|
|
COMMENT LEAVE ROOM FOR FORWARD JUMP; 08107000
|
|
IF FORMALV THEN CALL(DESC); CALL(OPDC); 08108000
|
|
COMMENT FETCH INDEX; 08109000
|
|
IF I > 70 THEN BEGIN NXTELBT ~ 1; I ~ 0 END 08110000
|
|
ELSE REGO ~ I; 08111000
|
|
IF SIMPLEB ~ SIMPLE(CONSTANB,B,SIGNB) AND 08112000
|
|
(STEPI = UNTILV OR ELCLASS = WHILEV) 08113000
|
|
THEN BEGIN 08114000
|
|
COMMENT WE HAVE A SIMPLE STEP FUNCTION; 08115000
|
|
PLUG(CONSTANB ,B); 08116000
|
|
END ELSE BEGIN 08117000
|
|
COMMENT THE STEP FUNCTION IS NOT SIMPLE: WE CONSTRUCT A 08118000
|
|
SUBROUTINE; 08119000
|
|
I ~ IF I < 4 THEN 0 ELSE REGO; STEPIT; 08120000
|
|
SIGNB ~ CONSTANB ~ FALSE; 08121000
|
|
EMIT(0); B ~ L; 08122000
|
|
AEXP; EMITO(XCH); 08123000
|
|
BRET ~ L; 08124000
|
|
EMITO(BFW) END; 08125000
|
|
EMITO(REAL(SIGNB)|32+ADD); 08126000
|
|
EMITB(BFW,BACKFIX,L); 08127000
|
|
IF ELCLASS = UNTILV 08128000
|
|
THEN BEGIN COMMENT STEP-UNTIL ELEMENT; 08129000
|
|
STORE(TRUE); IF FORMALV THEN CALL(OPDC); 08130000
|
|
STEPIT; AEXP; TEST END 08131000
|
|
ELSE BEGIN COMMENT STEP-WHILE ELEMENT; 08132000
|
|
IF ELCLASS ! WHILEV THEN 08133000
|
|
BEGIN ERR(153); GO TO EXIT END; 08134000
|
|
STEPIT; STORE(FALSE); BEXP END END 08135000
|
|
ELSE BEGIN 08136000
|
|
COMMENT WE DO NOT HAVE A STEP ELEMENT; 08137000
|
|
STORE(FALSE); 08138000
|
|
IF ELCLASS = WHILEV 08139000
|
|
THEN BEGIN 08140000
|
|
COMMENT WE HAVE A WHILE ELEMENT; 08141000
|
|
STEPIT; BEXP END 08142000
|
|
ELSE BEGIN 08143000
|
|
COMMENT ONE EXPRESSION ELEMENT; 08144000
|
|
IF ELCLASS ! COMMA THEN BEGIN 08145000
|
|
EMITB(BFW,BUMPL,L+2); BACKFIX ~ L END 08146000
|
|
ELSE BACKFIX ~ L + 2; 08147000
|
|
L ~ L+1; EMIT(BFW); GO TO BRNCH END END; 08148000
|
|
COMMENT THIS IS THE COMMON POINT; 08149000
|
|
IF ELCLASS = COMMA THEN EMITLNG; L ~ L+1; 08150000
|
|
EMIT(BFC); 08151000
|
|
BRNCH: FORWARDBRANCH ~ L; DIALA ~ DIALB ~ 0; 08152000
|
|
IF ELCLASS = COMMA 08153000
|
|
THEN BEGIN 08154000
|
|
STEPIT; 08155000
|
|
FORLIST(TRUE); 08156000
|
|
FIX(STOREFIX,BACKFIX,FORWARDBRANCH,STMTSTART) END 08157000
|
|
ELSE BEGIN 08158000
|
|
IF ELCLASS ! DOV 08159000
|
|
THEN BEGIN ERR(154); REGO~L; GO EXIT END; 08160000
|
|
STEPIT; 08161000
|
|
IF NUMLE THEN FOOT := GETSPACE(FALSE,-1); % TEMP. 08162000
|
|
IF LISTMODE THEN LISTELEMENT ELSE STMT; 08163000
|
|
08164000
|
|
IF NUMLE THEN BEGIN 08165000
|
|
EMITV(RETURNSTORE ~ FOOT); EMITO(BBW) END 08166000
|
|
ELSE BEGIN 08167000
|
|
EMITB(BBW,BUMPL,BACKFIX); RETURNSTORE ~ 0 END; 08168000
|
|
STMTSTART ~ FORWARDBRANCH; B ~ L; 08169000
|
|
CONSTANTCLEAN; REGO ~ L; 08170000
|
|
FIX(STOREFIX,BACKFIX,FORWARDBRANCH,L) END; 08171000
|
|
EXIT: END FORLIST; 08172000
|
|
REAL T1,T2,T3,T4; 08173000
|
|
NXTELBT ~ 1; I ~ 0; 08174000
|
|
STEPIT; 08175000
|
|
IF SIMPI(VRET~ELBAT[I]) 08176000
|
|
THEN BEGIN 08177000
|
|
IF STEPI ! ASSIGNOP THEN BEGIN ERR(152); GO EXIT END;08178000
|
|
XMARK(ASSIGNREF); % FOR STATEMENT %116-08178100
|
|
T1 ~ L; IF FORMALV THEN EMITN(ADDRES); 08179000
|
|
K ~ 0; 08180000
|
|
IF SIMPLE(CONSTANA,A,SIGNA) THEN 08181000
|
|
IF FORCLASS(STEPV) THEN 08182000
|
|
IF SIMPLE(CONSTANB,B,SIGNB) THEN 08183000
|
|
IF FORCLASS(UNTILV) THEN 08184000
|
|
IF SIMPLE(CONSTANC,Q,SIGNC) THEN 08185000
|
|
IF FORCLASS(DOV) THEN 08186000
|
|
BEGIN 08187000
|
|
PLUG(CONSTANA,A); 08188000
|
|
IF SIGNA THEN EMITO(CHS); 08189000
|
|
RETURNSTORE ~ BUMPL; ADJUST; CONSTANTCLEAN; 08190000
|
|
STMTSTART ~ L; 08191000
|
|
STEPIT; 08192000
|
|
T1 ~ ((((4096 | RETURNSTORE+STMTSTART)|2+ 08193000
|
|
REAL(CONSTANB))|2+ 08194000
|
|
REAL(CONSTANC))|2+ 08195000
|
|
REAL(SIGNB))|2+ 08196000
|
|
REAL(SIGNC); 08197000
|
|
T2 ~ VRET; 08198000
|
|
T3 ~ B; 08199000
|
|
T4 ~ Q; 08200000
|
|
IF LISTMODE THEN LISTELEMENT ELSE STMT; 08201000
|
|
SIGNC ~ BOOLEAN(T1.[47:1]); 08202000
|
|
SIGNB ~ BOOLEAN(T1.[46:1]); 08203000
|
|
CONSTANC ~ BOOLEAN(T1.[45:1]); 08204000
|
|
CONSTANB ~ BOOLEAN(T1.[44:1]); 08205000
|
|
STMTSTART ~ T1.[32:12]; 08206000
|
|
RETURNSTORE ~ T1.[20:12]; 08207000
|
|
VRET ~ T2; 08208000
|
|
B ~ T3; 08209000
|
|
Q ~ T4; 08210000
|
|
SIMPLEV~ SIMPI(VRET); 08211000
|
|
IF FORMALV THEN EMITN(ADDRES); EMITV(ADDRES); 08212000
|
|
PLUG(CONSTANB,B); 08213000
|
|
EMITO(IF SIGNB THEN SUB ELSE ADD); 08214000
|
|
EMITB(BFW,RETURNSTORE,L); 08215000
|
|
STORE(TRUE); 08216000
|
|
IF FORMALV THEN CALL(OPDC); 08217000
|
|
PLUG(CONSTANC,Q); 08218000
|
|
IF SIGNC THEN EMITO(CHS); 08219000
|
|
SIMPLEB ~ TRUE; TEST; EMITLNG; 08220000
|
|
EMITB(BBC,BUMPL,STMTSTART); 08221000
|
|
GO TO EXIT END; 08222000
|
|
I ~ 2; K ~ 0; 08223000
|
|
SIMPLEV ~ SIMPI(VRET); 08224000
|
|
V ~ T1 END 08225000
|
|
ELSE BEGIN 08226000
|
|
EMIT(0); V ~ L; SIMPLEV ~ FALSE; FORMALV ~ TRUE; 08227000
|
|
VARIABLE(FR); EMITO(XCH); VRET ~ L; EMITO(BFW); 08228000
|
|
IF ELCLASS!ASSIGNOP THEN BEGIN ERR(152); GO EXIT END;08229000
|
|
END; 08230000
|
|
STEPIT; FORLIST(FALSE); L ~ REGO; 08231000
|
|
EXIT: K ~ 0 END FORSTMT; 08232000
|
|
PROCEDURE HANDLETHETAILENDOFAREADORSPACESTATEMENT; 08233000
|
|
BEGIN COMMENT THIS ROUTINE CHECK FOR ACTION LABELS IN READ AND 08234000
|
|
SPACE STATEMENTS AND GENERATES THE APPROPRIATE CODE; 08235000
|
|
LABEL PASSPARLABL; COMMENT WHEN I REACH THIS LABEL A 08236000
|
|
COLON HAS JUST BEEN DETECTED; 08237000
|
|
LABEL EXIT; COMMENT THE LABEL EXIT APPEARS AFTER THE LAST08238000
|
|
EXECUTABLE STATEMENT IN THIS ROUTINE; 08239000
|
|
IF STEPI = LFTBRKET 08240000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES PARITY AND END OF 08241000
|
|
FILE LABELS; 08242000
|
|
IF STEPI ! COLON THEN DEXP ELSE EMIT(0); 08243000
|
|
IF ELCLASS ! COLON THEN EMIT(0) ELSE 08244000
|
|
BEGIN STEPIT; DEXP END; 08245000
|
|
08246000
|
|
08247000
|
|
08248000
|
|
08249000
|
|
08250000
|
|
08251000
|
|
08252000
|
|
08253000
|
|
08254000
|
|
08255000
|
|
08256000
|
|
08257000
|
|
08258000
|
|
08259000
|
|
08260000
|
|
08261000
|
|
08262000
|
|
08263000
|
|
08264000
|
|
08265000
|
|
08266000
|
|
08267000
|
|
08268000
|
|
08269000
|
|
08270000
|
|
08271000
|
|
08272000
|
|
08273000
|
|
08274000
|
|
08275000
|
|
08276000
|
|
IF CHECK(RTBRKET,433) 08277000
|
|
THEN GO TO EXIT; 08278000
|
|
COMMENT ERROR 433 MEANS MISSING RIGHT BRACKET 08279000
|
|
IN READ OR SPACE STATEMENT; 08280000
|
|
STEPIT; 08281000
|
|
END 08282000
|
|
ELSE BEGIN COMMENT THERE ARE NOT ANY ACTION LABELS IN THIS08283000
|
|
CASE; 08284000
|
|
EMITL(0); EMITL(0); 08285000
|
|
END; 08286000
|
|
IF GOGOGO THEN BEGIN EMIT(0); EMIT(0); EMIT(0); 08287000
|
|
EMITV(13) 08287100
|
|
END ELSE EMITV(GNAT(INTERPTI)); 08287200
|
|
GOGOGO ~ FALSE;% 08287300
|
|
EXIT:; 08288000
|
|
END HANDLETHETAILENDORAREADORSPACESTATEMENT; 08289000
|
|
DEFINE EMITNO(EMITNO1)=BEGIN EMITL(0); EMITL(EMITNO1)END#,08289010
|
|
EMITTIME=BEGIN EMITN(2); EMITO(259); AEXP ; 08289020
|
|
EMITPAIR(JUNK,ISN); EMITO(965) END#;08289030
|
|
PROCEDURE READSTMT; 08290000
|
|
BEGIN COMMENT READSTMT GENERATES CODE TO CALL INTERPTI)WHICH IS08291000
|
|
SHORT FOR INTERPRET INPUT) AN INTRINSIC PROCEDURE ON THE 08292000
|
|
DRUM, PASSING TO IT PARAMETERS DETERMINED BY THE FORMAT OF08293000
|
|
THE READ OR SPACE STATEMENT. 08294000
|
|
THE SPACE STATEMENT IS HANDLED AS A SPECIAL CASE OF READ08295000
|
|
STATEMENT WHERE ZERO WORDS ARE READ IN A FORWARD OR 08296000
|
|
REVERSE DIRECTION DEPENDING ON THE SIGN OF THE ARITHMETIC 08297000
|
|
EXPRESSION IN THE SPACE STATEMENT. 08298000
|
|
I HAVE LISTED BELOW THE VARIOUS CASES CONSIDERED BY THE 08299000
|
|
READSTMT PROCEDURE AND THE CORRESPONDING PARAMETERS WHICH 08300000
|
|
ARE PASSED TO INTERPTI. 08301000
|
|
**********************************************************08302000
|
|
<DIRECTION INDICATOR>::=REVERSE/<EMPTY> 08303000
|
|
<FILE PART>::=<FILE IDENTIFIER>/<SUPERFILE DESIGNATOR> 08304000
|
|
<RELEASE INDICATOR>::=[NO]/<EMPTY> 08305000
|
|
<ACTION LABELS>::=[<END OF FILE LABEL>:<PARITY LABEL>]/ 08306000
|
|
[<END OF FILE LABEL>]/[:<PARITY LABEL>]/08307000
|
|
<EMPTY> 08308000
|
|
CIMI IS THE CHARACTER MODE INPUT EDITING ROUTINE. 08309000
|
|
POWERSOFTEN IS A TABLE OF POWERS OF TEN USED FOR 08310000
|
|
CONVERSION. 08311000
|
|
FILE IS A DATA DESCRIPTOR DESCRIBING THE I/O DESCRIPTOR. 08312000
|
|
ACTION TYPE IS A FOUR VALUED PARAMETER. IT MAY BE + OR-, 08313000
|
|
1 OR 2. THE SIGN OF THE VALUE INDICATES FORWARD OR 08314000
|
|
REVERSE DIRECTION FOR + AND - RESPECTIVELY. THE 08315000
|
|
VALUE IS ONE MORE THAN THE NUMBER OF RECORDS TO BE 08316000
|
|
PROCESSED. 08317000
|
|
END OF FILE LABEL IS A DATA DESCRIPTOR POINTING TO A LABEL08318000
|
|
DESCRIPTOR FOR THE END OF FILE JUMPS. 08319000
|
|
PARITY LABEL IS A DATA DESCRIPTOR POINTING TO A LABEL 08320000
|
|
DESCRIPTOR FOR PARITY CONDITION JUMPS. 08321000
|
|
+ OR - N IS SIMILAR TO ACTION TYPE. IT CONTAINS THE EXACT08322000
|
|
DISTANCE AND DIRECTION TO SPACE RATHER THAN ONE08323000
|
|
GREATER THAN THE NUMBER OF RECORDS TO BE SPACED AS08324000
|
|
IN ACTION TYPE. 08325000
|
|
LIST ROUTINE DESCRIPTOR IS AN ACCIDENTAL ENTRY PROGRAM 08326000
|
|
DESCRIPTRO WHICH WILL EITHER RETURN08327000
|
|
AN ADDRESS OR VALUE DEPENDING ON 08328000
|
|
THE CALL. 08329000
|
|
N IS THE VALUE OF THE ARITHMETIC EXPRESSION IN READ STMT. 08330000
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>) 08331000
|
|
<ACTION LABELS> 08332000
|
|
- - - - - - - - - - - - - - 08333000
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,0,0,0,END OF FILE LABEL08334000
|
|
,PARITY LABEL) 08335000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08336000
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 08337000
|
|
<FORMAT PART>)<ACTION LABELS> 08338000
|
|
- - - - - - - - - - - - - - 08339000
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,FORMAT INDEX,FORMAT 08340000
|
|
ARRAY DESCRIPTOR,0,END OF FILE LABEL,PARITY LABEL) 08341000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08342000
|
|
SPACE(<FILE PART>,<ARITHMETIC EXPRESSION>)<ACTION LABELS> 08343000
|
|
- - - - - - - - - - - - - - 08344000
|
|
(CIMI,POWERSOFTEN,FILE,+ OR - N,0,0,1,END OF FILE LABEL, 08345000
|
|
PARITY LABEL) 08346000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08347000
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 08348000
|
|
<FORMAT PART>,<LIST>)<ACTION LABELS> 08349000
|
|
- - - - - - - - - - - - - - 08350000
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,FORMAT INDEX,FORMAT 08351000
|
|
ARRAY DESCRIPTOR,LIST ROUTINE DESCRIPTOR,END OF FILE 08352000
|
|
LABEL,PARITY LABEL) 08353000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08354000
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 08355000
|
|
*,<LIST>)<ACTION LABELS> 08356000
|
|
- - - - - - - - - - - - - - 08357000
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,0,0,LIST ROUTINE 08358000
|
|
DESCRIPTOR,END OF FILE LABEL,PARITY LABEL) 08359000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08360000
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 08361000
|
|
<ARITHMETIC EXPRESSION>,<ROW DESIGNATOR>)<ACTION 08362000
|
|
LABELS> 08363000
|
|
- - - - - - - - - - - - - - 08364000
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,0,N,ROW DESCRIPTOR, 08365000
|
|
END OF FILE LABEL,PARITY LABEL) 08366000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08367000
|
|
READ<DIRECTION INDICATOR>(<FILE PART><RELEASE INDICATOR>, 08368000
|
|
<MULTIPLYING OPERATOR>,<LIST>)<ACTION LABELS> 08369000
|
|
- - - - - - - - - - - - - - 08370000
|
|
(CIMI,POWERSOFTEN,FILE,ACTION TYPE,1,0,LIST ROUTINE 08371000
|
|
DESCRIPTOR,END OF FILE LABEL,PARITY LABEL) 08372000
|
|
*********************************************************;08373000
|
|
DEFINE REVERSETOG = RRB1#; COMMENT REVERSETOG IS SET TRUE08374000
|
|
IF THE STATEMENT BEING COMPILED08375000
|
|
IS A READ REVERSE, OTHERWISE IT08376000
|
|
IS SET FALSE; 08377000
|
|
LABEL EXIT; COMMENT EXIT APPEARS AFTER THE LAST 08378000
|
|
EXECUTABLE STATEMENT IN READSTMT; 08379000
|
|
LABEL CHKACTIONLABELS; COMMENT THE CODE AT THIS LABEL 08380000
|
|
ASSUMES I IS POINTING AT THE RIGHT 08381000
|
|
PARENTHESIS; 08382000
|
|
LABEL PASSLIST; COMMENT THE CODE AT PASSLIST EXPECTS I TO08383000
|
|
BE POINTING AT THE LAST QUANTITY IN THE 08384000
|
|
SECOND PARAMETER; 08385000
|
|
LABEL READXFORM; 08385100
|
|
INTEGER LISTADDRESS; COMMENT TEMP TO HOLD LIST ADD DESC; 08385500
|
|
BOOLEAN SEEKTOG,LOCKTOG,GRABTOG;% 08385600
|
|
BOOLEAN MAYI; COMMENT TRUE IF "FILE" IS ARRAY ROW; 08385700
|
|
INTEGER HOLD; COMMENT L MAY GET CUT BACK TO HERE; 08385800
|
|
IF STEPI = LEFTPAREN 08386000
|
|
THEN REVERSETOG~SEEKTOG~FALSE 08387000
|
|
ELSE BEGIN COMMENT THIS HAD BETTER SAY REVERSE; 08388000
|
|
REVERSETOG~ACCUM[1]="7REVER"; 08389000
|
|
LOCKTOG~ELCLASS=LOCKV; 08390000
|
|
SEEKTOG~ACCUM[1]="4SEEK0"; 08390500
|
|
IF REVERSETOG OR LOCKTOG OR SEEKTOG THEN STEPIT 08391000
|
|
ELSE BEGIN ERR(420); 08392000
|
|
GO TO EXIT; 08393000
|
|
END; 08394000
|
|
IF CHECK(LEFTPAREN,421) 08395000
|
|
THEN GO TO EXIT; 08396000
|
|
COMMENT ERROR 421 MEANS MISSING LEFT 08397000
|
|
PARENTHESIS IN READ REVERSE STATEMENT; 08398000
|
|
END; 08399000
|
|
EMITO(MKS); 08400000
|
|
IF STEPI } BOOARRAYID AND ELCLASS { INTARRAYID THEN 08401000
|
|
BEGIN VARIABLE(FL); 08401020
|
|
IF TABLE(I-2) ! FACTOP THEN 08401030
|
|
BEGIN ERR(422); GO TO EXIT END; 08401040
|
|
MAYI ~ TRUE; HOLD ~ L; 08401045
|
|
EMIT(11); EMIT(4); EMITO(280); 08401050
|
|
EMITPAIR(GNAT(POWERSOFTEN),LOD); 08401060
|
|
EMITO(XCH); EMITL(0); EMITL(1); 08401070
|
|
END ELSE 08401080
|
|
BEGIN 08401090
|
|
EMITPAIR(GNAT(POWERSOFTEN),LOD); 08402000
|
|
IF NOT RANGE(FILEID,SUPERFILEID) 08403000
|
|
THEN BEGIN COMMENT ERROR 422 MEANS MISSING FILE IN READ 08404000
|
|
STATEMENT; 08405000
|
|
ERR(422); GO TO EXIT; 08406000
|
|
END; 08407000
|
|
PASSFILE; 08408000
|
|
IF ELCLASS = LFTBRKET 08409000
|
|
THEN BEGIN %%% COMPILES CODE FOR [NS],[NS,*],[NS,<AEXP>], 08410000
|
|
%%% [*],[*,*],[*,<AEXP>],[<AEXP>],[<AEXP>,*], 08410010
|
|
%%% AND [<AEXP>,<AEXP>]. THE FIRST (LEFTMOST) 08410020
|
|
%%% <AEXP> IS THE READSEEKDISTADDRESS, RESIDING 08410030
|
|
%%% IN THE C-FIELD OF THE DSKADDR. THE SECOND 08411000
|
|
%%% <AEXP> IS THE WAIT-TIME, RESIDING IN THE 08411010
|
|
%%% F-FIELD OF THE DSKADDR, AND ALSO TURNING-ON 08411020
|
|
%%% THE EXP-SIGN BIT OF DSKADDR,X"S ARE EMPTIES 08411030
|
|
%%% IN THE ABOVE, NS = NO OR STOP. 08411040
|
|
STEPIT; %%% STEP OVER [, AND POINT AT NEXT ITEM. 08412000
|
|
IF RR1~IF ACCUM[1]="2NO000" THEN 1 ELSE 08412010
|
|
IF ACCUM[1]="4STOP0" THEN 2 ELSE 08412020
|
|
0 ! 0 THEN %%% HAVE [NS 08412030
|
|
IF STEPI=COMMA THEN %%% HAVE [NS, 08412040
|
|
IF STEPI=FACTOP THEN %%% HAVE [NS,* 08412050
|
|
BEGIN 08412060
|
|
IF RR1=1 THEN EMITNO(1) 08412070
|
|
ELSE BEGIN EMITL(1); EMITL(2) END ; 08412080
|
|
STEPIT ; 08412090
|
|
END 08413000
|
|
ELSE 08413010
|
|
IF ACCUM[1]="4LOCK0" THEN 08413012
|
|
BEGIN %%% [NS,LOCK 08413014
|
|
EMITL(1); EMITD(47,4,1); 08413016
|
|
STEPIT; 08413018
|
|
END ELSE 08413020
|
|
BEGIN %%% HAVE [NS,AEXP 08413022
|
|
IF RR1=2 THEN EMITL(1) ; 08413030
|
|
EMITTIME ; 08413040
|
|
IF RR1=2 THEN 08413050
|
|
BEGIN EMITO(LOR); EMITL(2) END 08413060
|
|
ELSE EMITL(1) ; 08413080
|
|
END 08413090
|
|
ELSE IF RR1=1 THEN EMITNO(1) %%% ONLY HAVE [NS 08413100
|
|
ELSE BEGIN EMITL(1); EMITL(2) END 08413110
|
|
ELSE IF ELCLASS=FACTOP THEN %%% HAVE [* 08413120
|
|
IF STEPI=COMMA THEN %%% HAVE [*, 08413130
|
|
IF STEPI=FACTOP THEN %%% HAVE [*,* 08414000
|
|
BEGIN EMITNO(2); STEPIT END 08414010
|
|
ELSE IF ACCUM[1]="4LOCK0" THEN 08414012
|
|
BEGIN %%% [*,LOCK 08414014
|
|
EMITL(1); EMITD(47,4,1); 08414016
|
|
STEPIT; 08414018
|
|
END ELSE 08414020
|
|
BEGIN EMITTIME; EMITL(2); END % [*,A 08414022
|
|
ELSE EMITNO(2) %%% HAVE ONLY [* 08414030
|
|
ELSE BEGIN %%% HAVE [AEXP 08415000
|
|
AEXP;EMITO(SSP);EMITL(1);EMITO(ADD); 08415010
|
|
IF SEEKTOG THEN EMITO(CHS) ; 08415020
|
|
EMITPAIR(JUNK,ISN) ; 08415030
|
|
IF ELCLASS=COMMA THEN %%% HAVE [AEXP, 08416000
|
|
IF STEPI=FACTOP THEN STEPIT %%%[AEXP,* 08416010
|
|
ELSE IF ACCUM[1]="4LOCK0" THEN 08416012
|
|
BEGIN %%% [AEXP,LOCK 08416014
|
|
EMITL(1); EMITD(47,4,1); 08416016
|
|
STEPIT; 08416018
|
|
END ELSE 08416020
|
|
BEGIN EMITTIME; EMITO(LOR) END ; 08416022
|
|
EMITL(2) ; %%% ABOVE ELSE WAS [AEXP,AEXP 08416030
|
|
END ; 08417000
|
|
IF CHECK(RTBRKET,424) THEN GO EXIT ELSE STEPIT ; 08417010
|
|
END 08418000
|
|
ELSE IF ELCLASS=LEFTPAREN THEN 08418100
|
|
BEGIN STEPIT; AEXP; IF ELCLASS=COMMA THEN 08418200
|
|
IF STEPI!FACTOP THEN% 08418250
|
|
BEGIN AEXP; EMITPAIR(JUNK,ISN) END ELSE% 08418300
|
|
BEGIN EMITL(1); GRABTOG~TRUE; STEPIT END ELSE 08418350
|
|
EMITPAIR(0,LNG); 08418400
|
|
EMITD(33,33,15); 08418500
|
|
EMITO(IF LOCKTOG THEN SSN ELSE SSP); 08418600
|
|
EMITL(REAL(SEEKTOG)); EMITD(33,18,15); 08418650
|
|
IF CHECK(RTPAREN,104) THEN GO EXIT; 08418700
|
|
EMITL(REAL(GRABTOG)+2); STEPIT;% 08418800
|
|
END 08418900
|
|
ELSE BEGIN EMITL(0); EMITL(2); END; 08419000
|
|
IF REVERSETOG 08420000
|
|
THEN EMITO(CHS); 08421000
|
|
END; 08421500
|
|
IF ELCLASS = RTPAREN 08422000
|
|
THEN BEGIN COMMENT NO FORMAT,NO LIST CASE; 08423000
|
|
EMITL(0); EMITL(0); EMITL(0); 08424000
|
|
GOGOGO ~ NOT MAYI;% 08424100
|
|
GO CHKACTIONLABELS; 08425000
|
|
END; 08426000
|
|
IF CHECK(COMMA,424) 08427000
|
|
THEN GO TO EXIT; 08428000
|
|
COMMENT ERROR 424 MEANS IMPROPER FILE DELIMITER IN READ 08429000
|
|
STATEMENT; 08430000
|
|
IF STEPI = FACTOP 08431000
|
|
THEN BEGIN COMMENT *,LIST CASE; 08432000
|
|
EMITL(0); EMITL(0); GO PASSLIST; 08433000
|
|
END; 08434000
|
|
IF ELCLASS = MULOP 08435000
|
|
THEN BEGIN COMMENT FREE FIELD FORMAT CASE; 08436000
|
|
IF STEPI=MULOP THEN EMITL(2) ELSE 08437000
|
|
BEGIN EMITL(1); I~I-1; END ; 08437050
|
|
EMITL(0); GO TO PASSLIST ; 08437075
|
|
END; 08438000
|
|
IF RANGE(FRMTID,SUPERFRMTID) 08439000
|
|
THEN BEGIN COMMENT THE SECOND PARAMETER IS A FORMAT; 08440000
|
|
PASSFORMAT; 08441000
|
|
READXFORM: IF TABLE(I+1) = COMMA 08442000
|
|
THEN GO PASSLIST; 08443000
|
|
STEPIT; 08444000
|
|
IF CHECK(RTPAREN,425) 08445000
|
|
THEN GO TO EXIT; 08446000
|
|
COMMENT ERROR 425 MEANS IMPROPER FORMAT 08447000
|
|
DELIMITER IN READ STATEMENT; 08448000
|
|
EMITL(0); GO CHKACTIONLABELS; 08449000
|
|
END; 08450000
|
|
IF Q:=ACCUM[1]="1<0000" THEN 08450010
|
|
BEGIN EXPLICITFORMAT; GO TO READXFORM; END; 08450020
|
|
IF MAYI THEN 08450100
|
|
BEGIN KLUDGE(HOLD); 08450200
|
|
GO TO EXIT; 08450300
|
|
END ARRAY TO ARRAY CASE; 08450400
|
|
EMITL(0); AEXP; 08451000
|
|
IF CHECK(COMMA,426) 08452000
|
|
THEN GO TO EXIT; 08453000
|
|
COMMENT ERROR 426 MEANS IMPROPER DELIMITER FOR SECOND 08454000
|
|
PARAMETER; 08455000
|
|
STEPIT; 08456000
|
|
IF RANGE(BOOARRAYID,INTARRAYID) 08457000
|
|
THEN BEGIN COMMENT THIS IS THE ROW DESIGNATOR CASE; 08458000
|
|
VARIABLE(FL); 08459000
|
|
IF TABLE(I-2) ! FACTOP 08460000
|
|
THEN BEGIN COMMENT ERROR 427 MEANS IMPROPER 08461000
|
|
ROW DESIGNATOR IN READ; 08462000
|
|
ERROR(427); GO TO EXIT; 08463000
|
|
END; 08464000
|
|
IF CHECK(RTPAREN,428) 08465000
|
|
THEN GO TO EXIT; 08466000
|
|
COMMENT ERROR 428 MEANS IMPROPER ROW DESIGNATOR08467000
|
|
DELIMITER IN READ STATEMENT; 08468000
|
|
GOGOGO ~ TRUE;% 08468100
|
|
GO CHKACTIONLABELS; 08469000
|
|
END 08470000
|
|
ELSE BEGIN COMMENT ERROR 429 MEANS MISSING ROW DESIGNATOR;08471000
|
|
ERROR(429); GO TO EXIT; 08472000
|
|
END; 08473000
|
|
PASSLIST:STEPIT; 08474000
|
|
IF CHECK(COMMA,430) 08475000
|
|
THEN GO TO EXIT; 08476000
|
|
COMMENT ERROR 430 MEANS IMPROPER DELIMITER PRECEEDING 08477000
|
|
THE LIST IN A READ STATEMENT; 08478000
|
|
IF STEPI ! LISTID AND ELCLASS ! SUPERLISTID 08479000
|
|
THEN BEGIN 08480000
|
|
RR1~LISTGEN; 08481000
|
|
I~I-1; 08482000
|
|
GO TO CHKACTIONLABELS 08483000
|
|
END; 08484000
|
|
CHECKER(ELBAT[I]); 08484500
|
|
IF ELCLASS = SUPERLISTID THEN 08485000
|
|
BEGIN COMMENT SUBSCRIPTED SWITCH LIST ID; 08486000
|
|
LISTADDRESS ~ELBAT[I].ADDRESS; 08488000
|
|
BANA; 08489000
|
|
EMITV(LISTADDRESS); 08489500
|
|
IF LISTADDRESS > 1023 THEN EMITO(PRTE); 08489510
|
|
EMITO(LOD); I~I-1 END 08489520
|
|
ELSE BEGIN COMMENT A COMMON LIST; 08489530
|
|
EMITPAIR (ELBAT[I].ADDRESS,LOD); 08489550
|
|
END; 08489560
|
|
STEPIT; 08489570
|
|
IF CHECK(RTPAREN,449) THEN GO TO EXIT; 08489580
|
|
COMMENT 449 IS IMPROPER LIST DELIMETER IN READ STATEMENT; 08489590
|
|
08490000
|
|
CHKACTIONLABELS:HANDLETHETAILENDOFAREADORSPACESTATEMENT; 08491000
|
|
EXIT:; 08492000
|
|
END READSTMT; 08493000
|
|
REAL PROCEDURE FILEATTRIBUTEINDX(T) ; % RETURNS A ZERO IF THE NEXTSCANND08493010
|
|
VALUE T; BOOLEAN T ; % ITEM IS NOT A FILE ATTRIBUTE. 08493015
|
|
BEGIN % RETURNS THE ASSOCIATED INDEX IF 08493020
|
|
REAL I ; % IT IS A FILE ATTRIBUTE. 08493030
|
|
LABEL EXIT ; 08493040
|
|
STOPDEFINE~T ; % MAY DISALLOW DEFINES IN FILE-ATTRIBUTE PART. 08493050
|
|
STEPIT ; % NOW POINTED AT ATTRIBUTE (STEPIT TURNS OFF STOP DEFINE). 08493060
|
|
IF I~FILEATTRIBUTES[0]=0 THEN 08493070
|
|
BEGIN 08493080
|
|
FILL FILEATTRIBUTES[*] WITH % NON-ASSGNBL ATTRBTS HAVE .[1:1]=108493090
|
|
% BOOLEAN ATTRIBUTES HAVE .[2:1]=1,08493091
|
|
% ALPHA ATTRIBUTES HAVE .[3:1]=1. 08493092
|
|
% THIS NEXT NUMBER IS THE CURRENT # OF FILE ATTRIBUTES: 08493093
|
|
17 08493094
|
|
,"6ACCES"%***ANY ADDITIONAL ATTRIBUTES MUST BE INSERTED***08493095
|
|
,"5MYUSE"%******IMMEDIATELY AFTER THE LAST ATTRIBUTE******08493096
|
|
,"4SAVE0" 08493097
|
|
,"8OTHER" % "OTHERUSE". 08493098
|
|
,"404MFID0" 08493099
|
|
,"403FID00" 08493100
|
|
,"4REEL0" 08493101
|
|
,"4DATE0" 08493102
|
|
,"5CYCLE" 08493103
|
|
,"4TYPE0" 08493104
|
|
,"5AREAS" 08493105
|
|
,"8AREAS" % "AREASIZE". 08493106
|
|
,"2EU000" 08493107
|
|
,"5SPEED" 08493108
|
|
,"9TIMEL" % "TIMELIMIT" 08493109
|
|
,"+08IOSTA" % "IOSTATUS" 08493110
|
|
,"9SENSI" % "SENSITIVE" 08493111
|
|
% THIS CARD MERELY OCCUPIES A SEQUENCE NUMBER. 08493120
|
|
; % END OF FILL STATEMENT. 08493130
|
|
I~FILEATTRIBUTES[0] ; 08493140
|
|
END ; 08493150
|
|
FOR I~I STEP -1 UNTIL 1 DO IF FILEATTRIBUTES[I].[12:36]=Q THEN 08493160
|
|
BEGIN FILEATTRIBUTEINDX~I; GO EXIT END ; 08493170
|
|
EXIT: 08493180
|
|
END OF FILEATTRIBUTEINDX ; 08493190
|
|
COMMENT FILEATTRIBUTEHANDLER HANDLES FILE ATTRIBUTE STUFF. IT CONSTRUCTS08493200
|
|
A CALL ON FILEATTRIBUTES INTRINSIC.IT IS CALLED BY 5 PROCEDURES:08493210
|
|
1. STMT: PASSES N=FS, AND TELLS FAH TO EXPECT AN ASSIGNOP. 08493220
|
|
FAH WILL TELL FILEATTRIBUTES TO CHANGE THE ATTRIBUTE08493230
|
|
AND XIT. 08493240
|
|
2. ACTUALPARAPART: 08493250
|
|
PASSES N=FA, AND TELLS FAH THAT THE FILE DESC HAS 08493260
|
|
ALREADY BEEN EMITTED. IT ALSO TELLS FAH TO LEAVE 08493270
|
|
THE VALUE OF THE ATTRIBUTE IN THE TOP OF THE STACK. 08493280
|
|
3. PRIMARY: 08493290
|
|
PASSES N=FP, AND TELLS FAH TO HANDLE AN ASSIGNOP 08493300
|
|
IF THERE IS ONE (BY CALLING AEXP OR BEXP, DEPENDING 08493310
|
|
ON THE TYPE OF ATTRIBUTE) OR JUST TO EMIT A ZERO. IF08493320
|
|
THERE IS AN ASSIGNOP, THEN FAH TELLS FILEATTRIBUTES 08493330
|
|
TO BOTH CHANGE THE ATTRIBUTE AND LEAVE THE VALUE 08493340
|
|
IN THE TOP OF THE STACK. OTHERWISE, FAH TELLS FILE- 08493350
|
|
ATTRIBUTES TO ONLY LEAVE THE VALUE OF THE REQUIRED 08493360
|
|
ATTRIBUTE IN THE TOP OF THE STACK. IN ALL CASES, 08493370
|
|
FAH WILL RETURN THE TYPE OF ATTRIBUTE COMPILED 08493380
|
|
(ATYPE OR BTYPE). 08493390
|
|
4. BOOPRIM: 08493400
|
|
PASSES N=FP, AND DOES THE SAME AS #3 (ABOVE). 08493410
|
|
5. IODEC: 08493420
|
|
PASSES N=FIO, AND TELLS FAH THAT A MKS & FILE DESC 08493430
|
|
HAVE ALREADY BEEN EMITTED, THE ATTRIBUTEINDX IS 08493440
|
|
DETERMINED BY IODEC, AND IS PASSED VIA GT1. 08493450
|
|
END OF COMMENT ; 08493460
|
|
INTEGER PROCEDURE FILEATTRIBUTEHANDLER(N); VALUE N; REAL N ; 08493470
|
|
BEGIN 08493480
|
|
REAL ATTRIBUTEINDX ; 08493490
|
|
BOOLEAN ASSOP ; 08493500
|
|
LABEL DONESOME,DONEMORE,EXIT ; 08493510
|
|
IF N=FA THEN GO TO DONESOME ELSE IF N=FIO THEN 08493520
|
|
BEGIN ATTRIBUTEINDX~GT1; IF STEPI!RELOP THEN I~I-1; ASSOP~TRUE;08493530
|
|
EMITL(0); EMITL(0); %%% DUM1 PARAMETER...FOR POSSIBLE FUTR USE.08493540
|
|
GO TO DONEMORE ; 08493550
|
|
END ; 08493560
|
|
EMITO(MKS); PASSFILE ; % MARK THE STACK & STACK A FILE DESCRIPTOR. 08493570
|
|
IF ELCLASS!PERIOD THEN ERR(290) ELSE 08493580
|
|
BEGIN 08493590
|
|
DONESOME: 08493600
|
|
IF ATTRIBUTEINDX~FILEATTRIBUTEINDX(TRUE)=0 THEN ERR(291) ELSE 08493610
|
|
BEGIN 08493620
|
|
STEPIT;IF FALSE THEN BEGIN COMMENT$$DELETE THIS CARD TO GET ACTION LABEL08493625
|
|
IF STEPI=LFTBRKET THEN 08493630
|
|
BEGIN 08493640
|
|
STEPIT;DEXP;IF CHECK(RTBRKET,433)THEN GO EXIT;STEPIT;08493650
|
|
END 08493660
|
|
ELSE EMITL(0) ; 08493670
|
|
EMITL(0) ; %%% DUM1 PARAMETER...FOR POSSIBLE FUTURE USE. 08493675
|
|
IF ASSOP~ELCLASS=ASSIGNOP THEN 08493680
|
|
BEGIN 08493700
|
|
IF N!FS THEN FLAG(295);%**DELETE THIS CARD TO ALLOW GENRL FILATT ASSGNMT08493705
|
|
DONEMORE: IF BOOLEAN(FILEATTRIBUTES[ATTRIBUTEINDX].[1:1]) 08493710
|
|
THEN FLAG(293) ; 08493720
|
|
STEPIT ; 08493730
|
|
IF BOOLEAN(FILEATTRIBUTES[ATTRIBUTEINDX].[2:1]) 08493740
|
|
THEN BEXP ELSE AEXP ; 08493750
|
|
END 08493760
|
|
ELSE IF N=FS THEN BEGIN ERR(292); GO EXIT END 08493770
|
|
ELSE EMITL(0) ; 08493780
|
|
EMITNUM(IF ATTRIBUTEINDX= 1 THEN "6ACCESS" ELSE 08493790
|
|
IF ATTRIBUTEINDX= 4 THEN "6OTHRUS" ELSE 08493795
|
|
IF ATTRIBUTEINDX=12 THEN "6ARASIZ" ELSE 08493800
|
|
IF ATTRIBUTEINDX=15 THEN "6TIMLMT" ELSE 08493805
|
|
IF ATTRIBUTEINDX=16 THEN "6IOSTAT" ELSE 08493810
|
|
IF ATTRIBUTEINDX=17 THEN "6SNSTIV" ELSE 08493812
|
|
0 & FILEATTRIBUTES[ATTRIBUTEINDX][6:12:36] 08493820
|
|
& FILEATTRIBUTES[ATTRIBUTEINDX][1:3:1]) ; 08493830
|
|
EMITL((ATTRIBUTEINDX-1) & REAL(N=FP OR N=FA)[39:47:1] 08493840
|
|
& REAL(ASSOP)[38:47:1]) ; 08493850
|
|
EMITPAIR(GNAT(POWERSOFTEN),LOD); EMITV(GNAT(FILATTINT)) ;08493860
|
|
FILEATTRIBUTEHANDLER~ 08493870
|
|
IF BOOLEAN(FILEATTRIBUTES[ATTRIBUTEINDX].[2:1]) 08493880
|
|
THEN BTYPE ELSE ATYPE ; 08493890
|
|
END ; 08493900
|
|
END ; 08493910
|
|
EXIT: 08493920
|
|
END OF FILEATTRIBUTEHANDLER ; 08493930
|
|
PROCEDURE SPACESTMT; 08494000
|
|
BEGIN COMMENT THE SPACE STATEMENT IS BEST THOUGHT OF AS A 08495000
|
|
SUBSET OF THE READ STATEMENT WHERE ZERO WORDS ARE READ. 08496000
|
|
FOR THE EXACT SYNTAX FOR THE SPACE STATEMENT AND THE 08497000
|
|
PARAMETERS PASSED TO THE INTERPTI ROUTINE SEE THE COMMENTS08498000
|
|
FOR THE READ STATEMENT; 08499000
|
|
LABEL EXIT; COMMENT EXIT APPEARS AFTER THE LAST 08500000
|
|
EXECUTABLE STATEMENT IN SPACESTMT; 08501000
|
|
STEPIT; 08502000
|
|
IF CHECK(LEFTPAREN,434) 08503000
|
|
THEN GO TO EXIT; 08504000
|
|
COMMENT ERROR 434 MEANS MISSING LEFT PARENTHESIS IN 08505000
|
|
SPACE STATEMENT; 08506000
|
|
STEPIT; 08507000
|
|
IF NOT RANGE(FILEID,SUPERFILEID) 08508000
|
|
THEN BEGIN COMMENT ERROR 435 MEANS IMPROPER FILE 08509000
|
|
IDENTIFIER IN SPACE STATEMENT; 08510000
|
|
ERROR(435); GO TO EXIT; 08511000
|
|
END; 08512000
|
|
EMITO(MKS); 08513000
|
|
EMITPAIR(GNAT( 08514000
|
|
POWERSOFTEN),LOD); PASSFILE; 08515000
|
|
EMITL(0); 08515100
|
|
IF CHECK(COMMA,436) 08516000
|
|
THEN GO TO EXIT; 08517000
|
|
COMMENT ERROR 436 MEANS MISSING COMMA IN SPACE STATEMENT;08518000
|
|
STEPIT; AEXP; 08519000
|
|
IF CHECK(RTPAREN,437) 08520000
|
|
THEN GO TO EXIT; 08521000
|
|
COMMENT ERROR 437 MEANS MISSING RIGHT PARENTHESIS IN 08522000
|
|
SPACE STATEMENT; 08523000
|
|
EMITL(0); EMITL(0); EMITL(1); 08524000
|
|
HANDLETHETAILENDOFAREADORSPACESTATEMENT; 08525000
|
|
EXIT:; 08526000
|
|
END SPACESTMT; 08527000
|
|
PROCEDURE WRITESTMT; 08528000
|
|
BEGIN COMMENT WRITESTMT GENERATES CODE TO CALL INTERPTO, AN 08529000
|
|
INTRINSIC PROCEDURE ON THE DRUM, PASSING TO IT PARAMETERS 08530000
|
|
DETERMINED BY THE FORMAT OF THE WRITE STATEMENT. 08531000
|
|
I HAVE LISTED BELOW THE VARIOUS CASES CONSIDERED BY THE 08532000
|
|
WRITESTMT PROCEDURE AND THE CORRESPONDING PARAMETERS WHICH08533000
|
|
ARE PASSED TO INTERPTO. 08534000
|
|
**********************************************************08535000
|
|
FOR AN EXPLANATION OF THE PARAMETERS AND SYNTACTICAL 08536000
|
|
UNITS NOT DESCRIBED HERE, SEE THE COMMENTS FOR THE 08537000
|
|
READSTMT ROUTINE. 08538000
|
|
<CARRIAGE CONTROL>::= [DBL]/[PAGE]/[NO]/<ARITHMETIC 08539000
|
|
EXPRESSION>/<EMPTY> 08540000
|
|
CHARI IS THE CHARACTER MODE OUTPUT EDITING ROUTINE SIMILAR08541000
|
|
TO CIMI FOR INPUT. 08542000
|
|
<CARRIAGE> <EMPTY> [DBL] [PAGE] [NO] <ARITHMETIC EXP> 08543000
|
|
CHANNEL SKIP 0 0 0 0 EXPRESSIONS VALUE 08544000
|
|
LINESKIP 1 2 4 8 0 08545000
|
|
WRITE(<FILE PART><CARRIAGE CONTROLS>)/ 08546000
|
|
- - - - - - - - - - - - - - 08547000
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,0,0,0) 08548000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08549000
|
|
WRITE(<FILE PART><CARRIAGE CONTROL>,<FORMAT PART>)/ 08550000
|
|
- - - - - - - - - - - - - - 08551000
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,FORMAT 08552000
|
|
INDEX,FORMAT ARRAY DESCRIPTOR,0) 08553000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08554000
|
|
WRITE(<FILE PART><CARRIAGE CONTROL>,<FORMAT PART>,<LIST>)/08555000
|
|
- - - - - - - - - - - - - - 08556000
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,FORMAT 08557000
|
|
INDEX,FORMAT ARRAY DESCRIPTOR,LIST ROUTINE DESCRIPTOR) 08558000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08559000
|
|
WRITE(<FILE PART><CARRIAGE CONTROL>,*,<LIST>)/ 08560000
|
|
- - - - - - - - - - - - - - 08561000
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,0,0,LIST 08562000
|
|
ROUTINE DESCRIPTOR) 08563000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08564000
|
|
WRITE(<FILE PART>(CARRIAGE CONTROL>,<ARITHMETIC EXPRESSION08565000
|
|
>,<ROW DESIGNATOR>) 08566000
|
|
- - - - - - - - - - - - - - 08567000
|
|
(CHARI,POWERSOFTEN,FILE,CHANNEL SKIP,LINE SKIP,0,N,ARRAY 08568000
|
|
ROW DESCRIPTOR) 08569000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** **; 08570000
|
|
LABEL EXIT; COMMENT EXIT APPEARS AFTER THE LAST 08571000
|
|
EXECUTABLE STATEMENT IN WRITESTMT; 08572000
|
|
LABEL CHKSECOND; COMMENT I IS NOW POINTING AT THE COMMA 08573000
|
|
SEPARATING THE FIRST AND SECOND 08574000
|
|
PARAMETERS; 08575000
|
|
LABEL ONEPARENSH; COMMENT I IS POINT AT THE RIGHT 08576000
|
|
PARENTHESIS AT THIS POINT AND I HAVE 08577000
|
|
JUST DISCOVERED THAT THIS IS THE ONE 08578000
|
|
PARAMETER CASE; 08579000
|
|
DEFINE ACCUM1 = RR1#; COMMENT ACCUM1 IS USED AS A 08580000
|
|
TEMPORARY CELL FOR ACCUM[1]; 08581000
|
|
%VOID 08582000
|
|
%VOID 08583000
|
|
%VOID 08584000
|
|
%VOID 08585000
|
|
LABEL PASSLIST; COMMENT I IS POINTING AT THE COMMA 08586000
|
|
PRECEEDING THE LIST WHEN THIS LABEL IS 08587000
|
|
REACHED; 08588000
|
|
LABEL EMITCALL; COMMENT I IS POINTING AT THE STATEMENT 08589000
|
|
DELIMITER. THE CODE AT EMITCALL EMITS THE08590000
|
|
CODE TO CALL INTERPTO; 08591000
|
|
LABEL CHKRTPAREN; 08591100
|
|
LABEL WRITXFORM; 08591200
|
|
INTEGER LISTADDRESS; COMMENT TEMP TO HOLD LIST ADD DESC; 08591500
|
|
BOOLEAN LOCKTOG,ARC; 08591600
|
|
INTEGER HOLD;% 08591700
|
|
IF (LOCKTOG~STEPI=LOCKV) THEN STEPIT; 08592000
|
|
IF CHECK(LEFTPAREN,438) 08593000
|
|
THEN GO TO EXIT; 08594000
|
|
COMMENT ERROR 438 MEANS MISSING LEFT PARENTHESIS IN A 08595000
|
|
WRITE STATEMENT; 08596000
|
|
EMITO(MKS); 08597000
|
|
IF STEPI } BOOARRAYID AND ELCLASS { INTARRAYID THEN 08597100
|
|
BEGIN VARIABLE(FL); 08597200
|
|
IF TABLE(I-2) ! FACTOP THEN 08597300
|
|
BEGIN ERR(439); GO TO EXIT END; 08597400
|
|
ARC ~ TRUE; HOLD ~ L; 08597450
|
|
EMIT(11); EMIT(4); EMITO(280); 08597500
|
|
EMITPAIR(GNAT(POWERSOFTEN),LOD); 08597600
|
|
EMITO(XCH); 08597700
|
|
END ELSE 08597800
|
|
BEGIN 08597900
|
|
IF NOT RANGE(FILEID,SUPERFILEID) 08598000
|
|
THEN BEGIN COMMENT ERROR 439 MEANS IMPROPER FILE 08599000
|
|
IDENTIFIER IN A WRITE STATEMENT; 08600000
|
|
ERR(439); GO TO EXIT; 08601000
|
|
END; 08602000
|
|
08603000
|
|
EMITPAIR(GNAT( 08604000
|
|
POWERSOFTEN),LOD); PASSFILE; 08605000
|
|
END; 08605500
|
|
IF(RRB1~ELCLASS = COMMA) OR ELCLASS = RTPAREN 08606000
|
|
THEN BEGIN COMMENT STANDARD CARRIAGE CONTROL CASE; 08607000
|
|
EMITL(0); EMITL(1); 08608000
|
|
IF RRB1 08609000
|
|
THEN GO CHKSECOND; 08610000
|
|
ONEPARENSH:STEPIT; EMITL(0); EMITL(0); 08611000
|
|
GOGOGO ~ NOT ARC;% 08611100
|
|
EMITL(0); GO EMITCALL; 08612000
|
|
END; 08613000
|
|
IF ELCLASS=LEFTPAREN THEN 08613100
|
|
BEGIN STEPIT; AEXP; EMITO(IF LOCKTOG THEN SSN ELSE SSP); 08613200
|
|
IF ELCLASS=COMMA THEN BEGIN STEPIT; AEXP END ELSE 08613300
|
|
EMITPAIR(0,LNG); 08613400
|
|
EMITD(33,33,15); EMIT(0); 08613500
|
|
IF CHECK(RTPAREN,104) THEN GO EXIT ELSE GO CHKRTPAREN08613600
|
|
END; 08613700
|
|
IF CHECK(LFTBRKET,440) 08614000
|
|
THEN GO TO EXIT; 08615000
|
|
COMMENT ERROR 440 MEANS IMPROPER DELIMITER FOR FIRST 08616000
|
|
PARAMETER IN A WRITE STATEMENT; 08617000
|
|
STEPIT; 08618000
|
|
%%% THE FOLLOWING CODE COMPILES CODE FOR [DPN],[DPN,*], 08619000
|
|
%%% [DPN,<AEXP>],[*],[*,*],[*,<AEXP>],[<AEXP>],[<AEXP>,*] 08619010
|
|
%%% AND [<AEXP>,<AEXP>], WHERE DPN IN STOP, DBL, PAGE, OR 08619020
|
|
%%% NO. THE FIRST (LEFTMOST) <AEXP> IS THE CHANNELSKIP, 08619030
|
|
%%% RIGHT JUSTIFIED TO ITS C-FIELD. THE SECOND <AEXP> IS 08619040
|
|
%%% THE WAIT-TIME, RESIDING IN THE F-FIELD OF CHANNELSKIP,08619050
|
|
%%% AND ALSO TURNING ON THE EXP-SIGN BIT OF CHANNELSKIP, 08619060
|
|
%%% *"S ARE CONSIDERED TO BE EMPTIES. 08619070
|
|
IF ACCUM1~IF ACCUM1~ACCUM[1]="3DBL00" THEN 2 ELSE 08619080
|
|
IF ACCUM1="4PAGE0" THEN 4 ELSE 08619090
|
|
IF ACCUM1="4STOP0" THEN 16 ELSE 08619095
|
|
IF ACCUM1="2NO000" THEN 8 ELSE 0!0 THEN %%% [DPN08620000
|
|
IF STEPI=COMMA THEN %%% HAVE [DPN, 08620010
|
|
IF STEPI=FACTOP THEN %%% HAVE [DPN,* 08620020
|
|
BEGIN EMITNO(ACCUM1); STEPIT END 08621000
|
|
ELSE IF ACCUM[1]="6UNLOC" THEN %%% [NS,UNLOCK 08621002
|
|
BEGIN EMITL(1); EMITD(47,4,1); STEPIT END 08621004
|
|
ELSE BEGIN EMITTIME; EMITL(ACCUM1) END%[DPN,AEXP08621010
|
|
ELSE EMITNO(ACCUM1) %%% HAVE ONLY [DPN 08621020
|
|
ELSE IF ELCLASS=FACTOP THEN %%% HAVE [* 08622000
|
|
IF STEPI=COMMA THEN %%% HAVE [*, 08622010
|
|
IF STEPI=FACTOP THEN %%% HAVE [*,* 08623000
|
|
BEGIN EMITNO(1); STEPIT END 08624000
|
|
ELSE IF ACCUM[1]="6UNLOC" THEN %%% [*,UNLOCK 08624002
|
|
BEGIN EMITL(1); EMITD(47,4,1); STEPIT END 08624004
|
|
ELSE BEGIN EMITTIME; EMITL(1) END %[*,AEXP 08625000
|
|
ELSE EMITNO(1) %%% HAVE ONLY [* 08626000
|
|
ELSE BEGIN AEXP; EMITO(SSP); EMITPAIR(JUNK,ISN); 08627000
|
|
%% HAVE [AEXP 08627100
|
|
IF ELCLASS=COMMA THEN %%% HAVE [AEXP, 08628000
|
|
IF STEPI=FACTOP THEN STEPIT %%%HAVE [AEXP,*08629000
|
|
ELSE IF ACCUM[1]="6UNLOC" THEN %%% [AEXP,UNLOCK 08629002
|
|
BEGIN EMITL(1); EMITD(47,4,1); STEPIT END 08629004
|
|
ELSE BEGIN EMITTIME; EMITO(LOR)END;%[AEXP,A08630000
|
|
EMITL(0) ; %%% 0 IS NO DPN. 08631000
|
|
END ; 08632000
|
|
IF CHECK(RTBRKET,441) 08633000
|
|
THEN GO TO EXIT; 08634000
|
|
COMMENT ERROR 441 MEANS MISSING RIGHT BRACKET IN CARRIAGE08635000
|
|
CONTROL PART; 08636000
|
|
CHKRTPAREN:IF STEPI = RTPAREN 08637000
|
|
THEN GO TO ONEPARENSH; 08638000
|
|
IF CHECK(COMMA,442) 08639000
|
|
THEN GO TO EXIT; 08640000
|
|
COMMENT ERROR 442 MEANS ILLEGAL CARRIAGE CONTROL 08641000
|
|
DELIMITER IN A WRITE STATEMENT; 08642000
|
|
CHKSECOND:STEPIT; 08643000
|
|
IF RANGE(FRMTID,SUPERFRMTID) 08644000
|
|
THEN BEGIN COMMENT THIS IS THE FORMAT FORM OF THE WRITE; 08645000
|
|
PASSFORMAT; 08646000
|
|
WRITXFORM: IF STEPI = RTPAREN 08647000
|
|
THEN BEGIN COMMENT THIS IS THE TWO PARAMETER 08648000
|
|
CASE OF THE WRITE; 08649000
|
|
STEPIT; EMITL(0); GO EMITCALL; 08650000
|
|
END; 08651000
|
|
GO PASSLIST; 08652000
|
|
END; 08653000
|
|
IF ELCLASS=LFTBRKET THEN %%% FREE FIELD AT LEAST = [AEXP]/. 08653100
|
|
BEGIN I~I-1; BANA; EMITO(SSP); EMITPAIR(1,ADD); 08653110
|
|
IF ELCLASS!MULOP THEN ERR(443) 08653120
|
|
ELSE IF STEPI=MULOP THEN BEGIN EMITO(SSN); STEPIT END ; 08653125
|
|
IF ELCLASS=LFTBRKET THEN %%% FREE FIELD = [AEXP]/[AEXP]. 08653130
|
|
BEGIN I~I-1; BANA; EMITO(SSP); EMITPAIR(1,ADD) END08653140
|
|
ELSE EMITL(1) ; %%% FREE FIELD = [AEXP]/. 08653150
|
|
GO TO PASSLIST ; 08653160
|
|
END 08653170
|
|
ELSE IF ELCLASS=MULOP THEN %%% FREE FIELD AT LEAST = /. 08653180
|
|
BEGIN EMITL(1) ; 08653190
|
|
IF STEPI=MULOP THEN BEGIN EMITO(SSN); STEPIT END ; 08653195
|
|
IF ELCLASS=LFTBRKET THEN %%% FREE FIELD = /[AEXP]. 08653200
|
|
BEGIN I~I-1; BANA; EMITO(SSP); EMITPAIR(1,ADD) END08653210
|
|
ELSE EMITL(1) ; %%% FREE FIELD = /. 08653220
|
|
GO TO PASSLIST ; 08653230
|
|
END OF SCANNING FOR FREE FIELD FORMAT ; 08653240
|
|
IF ELCLASS = FACTOP 08654000
|
|
THEN BEGIN COMMENT THIS IS THE ASTERISK FORM OF THE WRITE;08655000
|
|
EMITL(0); EMITL(0); STEPIT; 08656000
|
|
GO PASSLIST; 08657000
|
|
END; 08658000
|
|
IF ACCUM[1]="1<0000" THEN 08658010
|
|
BEGIN EXPLICITFORMAT; GO TO WRITXFORM; END; 08658020
|
|
IF ARC THEN 08658100
|
|
BEGIN KLUDGE(-HOLD); 08658200
|
|
GO TO EXIT; 08658300
|
|
END ARRAY TO ARRAY CASE; 08658400
|
|
EMITL(0); AEXP; 08659000
|
|
IF CHECK(COMMA,443) 08660000
|
|
THEN GO TO EXIT; 08661000
|
|
COMMENT ERROR 443 MEANS IMPROPER DELIMITER FOR SECOND 08662000
|
|
PARAMETER IN WRITE STATEMENT; 08663000
|
|
STEPIT; 08664000
|
|
IF RANGE(BOOARRAYID,INTARRAYID) 08665000
|
|
THEN BEGIN COMMENT THIS IS THE ROW DESIGNATOR CASE; 08666000
|
|
VARIABLE(FL); 08667000
|
|
IF TABLE(I-2) ! FACTOP 08668000
|
|
THEN BEGIN COMMENT ERROR 444 MEANS IMPROPER ROW 08669000
|
|
DESIGNATOR IN A WRITE STATEMENT; 08670000
|
|
ERROR(444); GO TO EXIT; 08671000
|
|
END; 08672000
|
|
IF CHECK(RTPAREN,445) 08673000
|
|
THEN GO TO EXIT; 08674000
|
|
COMMENT ERROR 445 MEANS MISSING RIGHT 08675000
|
|
PARENTHESIS AFTER A ROW DESIGNATOR IN A WRITE 08676000
|
|
STATEMENT; 08677000
|
|
GOGOGO ~ TRUE;% 08677100
|
|
STEPIT; GO EMITCALL; 08678000
|
|
END 08679000
|
|
ELSE BEGIN COMMENT ERROR 446 MEANS MISSING ROW DESIGNATOR;08680000
|
|
ERROR(446); GO TO EXIT; 08681000
|
|
END; 08682000
|
|
PASSLIST:IF CHECK(COMMA,447) 08683000
|
|
THEN GO TO EXIT; 08684000
|
|
COMMENT ERROR 447 MEANS IMPROPER DELIMITER PRECEEDING A 08685000
|
|
LIST IN A WRITE STATEMENT; 08686000
|
|
IF STEPI ! LISTID AND ELCLASS ! SUPERLISTID 08687000
|
|
THEN BEGIN RR1~LISTGEN; GO TO EMITCALL END; 08688000
|
|
CHECKER(ELBAT[I]); 08688500
|
|
IF ELCLASS = SUPERLISTID THEN 08689000
|
|
BEGIN COMMENT SUBSCRIPTED SWITCH LIST ID; 08690000
|
|
LISTADDRESS~ELBAT[I].ADDRESS; 08692000
|
|
BANA; 08693000
|
|
EMITV(LISTADDRESS); 08694000
|
|
IF LISTADDRESS > 1023 THEN EMITO(PRTE); 08694500
|
|
EMITO(LOD); 08695000
|
|
I~I-1; COMMENT STEP DOWN THE&I FROM BANA; 08695500
|
|
END ELSE 08696000
|
|
BEGIN COMMENT A COMMON LIST ID; 08696500
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); 08696520
|
|
END; 08696530
|
|
STEPIT; 08696540
|
|
IF CHECK(RTPAREN,448) THEN GO TO EXIT; 08696550
|
|
COMMENT 448 IS IMPROPER LIST DELMETER IN WRITE STATEMENT; 08696560
|
|
STEPIT; 08697000
|
|
EMITCALL: IF ELCLASS=LFTBRKET AND NOT ARC THEN 08698000
|
|
BEGIN EMITO(MKS); 08698100
|
|
IF STEPI ! COLON THEN DEXP ELSE EMIT(0); 08698200
|
|
IF ELCLASS!COLON THEN EMIT(0) ELSE 08698300
|
|
BEGIN STEPIT; DEXP END; 08698400
|
|
IF CHECK(RTBRKET,433) THEN GO EXIT; 08698500
|
|
EMITL(15); EMITV(5); STEPIT; 08698600
|
|
END;% 08698700
|
|
IF GOGOGO THEN% 08698750
|
|
BEGIN EMIT(0); EMIT(0); EMIT(0);% 08698800
|
|
EMIT(0); EMIT(0); EMITV(12);% 08698850
|
|
END ELSE EMITV(GNAT(INTERPTO));% 08698900
|
|
GOGOGO ~ FALSE;% 08698950
|
|
EXIT:; 08699000
|
|
END WRITESTMT; 08700000
|
|
PROCEDURE LOCKSTMT; 08701000
|
|
BEGIN COMMENT THE LOCK STATEMENT ROUTINE GENERATES CODE THAT 08702000
|
|
CALLS ON THE FILE CONTROL ROUTINE PASSING TO IT THE 08703000
|
|
FOLLOWING PARAMETERS FOR THE CORRESPONDING CASES. 08704000
|
|
**********************************************************08705000
|
|
<LOCK STATEMENT>::=LOCK(<FILE PART>,SAVE)/ 08706000
|
|
- - - - - - - - - - - - - - 08707000
|
|
(2,0,FILE,4) 08708000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08709000
|
|
LOCK(<FILE PART>,RELEASE) 08710000
|
|
- - - - - - - - - - - - - - 08711000
|
|
(6,0,FILE,4); 08712000
|
|
LABEL EXIT; COMMENT THE LABEL EXIT APPEARS AFTER THE LAST08713000
|
|
EXECUTABLE STATEMENT IN THE LOCK ROUTINE; 08714000
|
|
DEFINE THISL = RR1#; COMMENT THISL IS A TEMP CELL 08715000
|
|
FOR THE CURRENT L REGISTER; 08716000
|
|
DEFINE LTEMP = RR2#; COMMENT LTEMP CONTAINS THE 08717000
|
|
L REGISTER SETTING FOR THE 08718000
|
|
SAVE OR RELEASE LITERAL THAT 08719000
|
|
GETS PASSED TO KEN MEYERS; 08720000
|
|
STEPIT; 08721000
|
|
IF CHECK(LEFTPAREN,450) 08722000
|
|
THEN GO TO EXIT; 08723000
|
|
COMMENT ERROR NUMBER 450 MEANS MISSING LEFT PARENTHESIS 08724000
|
|
IN A LOCK STATEMENT; 08725000
|
|
STEPIT; 08726000
|
|
IF NOT RANGE(FILEID,SUPERFILEID) 08727000
|
|
THEN BEGIN COMMENT MUST BE READ-ONLY ARRAY TYPE LOCK; 08728000
|
|
IF NOT RANGE(BOOARRAYID,INTARRAYID) THEN 08728100
|
|
BEGIN ERR(451); GO TO EXIT END; 08728200
|
|
VARIABLE(FL); L ~ L-1; 08728300
|
|
IF TABLE(I-2)!FACTOP THEN FLAG(208); 08728400
|
|
EMITO(DUP); EMITO(LOD); EMITL(24); 08728500
|
|
EMITD(43,3,5); EMITO(XCH); EMITO(STD); 08728600
|
|
IF ELCLASS=RTPAREN THEN STEPIT ELSE ERR(104); 08729000
|
|
GO TO EXIT 08730000
|
|
END; 08731000
|
|
PASFILE; 08732000
|
|
IF ELCLASS=RTPAREN THEN ELBAT[(I~I-2)+1].CLASS~ 08732100
|
|
RELEASEV ELSE 08732200
|
|
IF CHECK(COMMA,452) 08733000
|
|
THEN GO TO EXIT; 08734000
|
|
COMMENT ERROR 452 MEANS MISSING COMMA IN A LOCK STATEMENT08735000
|
|
; 08736000
|
|
THISL~L; L~LTEMP; 08737000
|
|
IF(RRB1~STEPI = RELEASEV) OR ELCLASS = DECLARATORS AND 08738000
|
|
ELBAT[I].ADDRESS=SAVEV OR ELCLASS=FACTOP 08739000
|
|
THEN EMITL(IF RRB1 08740000
|
|
THEN 6 08741000
|
|
ELSE IF ELCLASS=FACTOP THEN 8 ELSE 2) 08742000
|
|
ELSE BEGIN COMMENT ERROR 453 MEANS IMPROPER UNIT 08743000
|
|
DISPOSITION PART; 08744000
|
|
ERROR(453); GO TO EXIT; 08745000
|
|
END; 08746000
|
|
L~THISL; 08747000
|
|
STEPIT; 08748000
|
|
IF CHECK(RTPAREN,454) 08749000
|
|
THEN GO TO EXIT; 08750000
|
|
COMMENT ERROR 454 MEANS MISSING RIGHT PARENTHESIS IN A 08751000
|
|
LOCK STATEMENT; 08752000
|
|
STEPIT; 08753000
|
|
EXIT:; 08754000
|
|
END LOCKSTMT; 08755000
|
|
PROCEDURE CLOSESTMT; 08756000
|
|
BEGIN COMMENT THE CLOSE STATEMENT ROUTINE GENERATES CODE THAT 08757000
|
|
CALLS ON THE FILE CONTROL ROUTINE PASSING TO IT THE 08758000
|
|
FOLLOWING PARAMETERS FOR THE CORRESPONDING CASES. 08759000
|
|
**********************************************************08760000
|
|
<CLOSE STATEMENT>::=CLOSE(<FILE PART>,SAVE)/ 08761000
|
|
- - - - - - - - - - - - - - 08762000
|
|
(3,0,FILE,4) 08763000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08764000
|
|
CLOSE(<FILE PART>,RELEASE)/ 08765000
|
|
- - - - - - - - - - - - - - 08766000
|
|
(7,0,FILE,4) 08767000
|
|
** ** ** ** ** ** ** ** ** ** ** ** ** ** 08768000
|
|
CLOSE(<FILE PART>,*) 08769000
|
|
- - - - - - - - - - - - - - 08770000
|
|
(1,0,FILE,4) 08771000
|
|
<CLOSE STATEMENT> ::= CLOSE(<FILE PART>, PURGE) 08771100
|
|
-- -- -- -- -- --- -- -- -- -- -- -- 08771200
|
|
(4,0,FILE,4) 08771300
|
|
** ** ** ** ** ** *** ** ** ** ** ** ; 08771400
|
|
LABEL EXIT; COMMENT THE LABEL EXIT APPEARS AFTER THE LAST 08772000
|
|
EXECUTABLE STATEMENT IN THE CLOSESTMT ROUTINE; 08773000
|
|
DEFINE THISL = RR1#; COMMENT THISL IS A TEMP CELL 08774000
|
|
FOR THE CURRENT LREGISTER; 08775000
|
|
DEFINE LTEMP = RR2#; COMMENT LTEMP CONTAINS THE 08776000
|
|
L REGISTER SETTING FOR THE 08777000
|
|
SAVE OR RELEASE LITERAL THAT 08778000
|
|
GETS PASSED TO KEN MEYERS; 08779000
|
|
LABEL EMITREST; COMMENT I IS POINTING AT THE UNIT 08780000
|
|
DISPOTION PART AND CODE FOR THE LAST THREE08781000
|
|
PARAMETERS TO THE FILE CONTROL ROUTINE 08782000
|
|
MUST NOW BE GENERATED; 08783000
|
|
STEPIT; 08784000
|
|
IF CHECK(LEFTPAREN,455) 08785000
|
|
THEN GO TO EXIT; 08786000
|
|
COMMENT ERROR 455 MEANS MISSING LEFT PARENTHESIS IN A 08787000
|
|
CLOSE STATEMENT; 08788000
|
|
STEPIT; 08789000
|
|
IF NOT RANGE(FILEID,SUPERFILEID) 08790000
|
|
THEN BEGIN COMMENT ERROR 456 MEANS IMPROPER FILE PART IN A08791000
|
|
CLOSE STATEMENT; 08792000
|
|
ERROR(456); GO TO EXIT; 08793000
|
|
END; 08794000
|
|
PASFILE; 08795000
|
|
IF ELCLASS=RTPAREN THEN ELBAT[(I~I-2)+1].CLASS~ 08795100
|
|
RELEASEV ELSE 08795200
|
|
IF CHECK(COMMA,457) 08796000
|
|
THEN GO TO EXIT; 08797000
|
|
COMMENT ERROR 457 MEANS MISSING COMMA IN A CLOSE 08798000
|
|
STATEMENT; 08799000
|
|
THISL~L; L~LTEMP; 08800000
|
|
IF STEPI = RELEASEV 08801000
|
|
THEN BEGIN COMMENT RELEASE UNIT DISPOSITION PART CASE; 08802000
|
|
EMITL(7); GO EMITREST; 08803000
|
|
END; 08804000
|
|
IF ELCLASS = FACTOP 08805000
|
|
THEN BEGIN COMMENT ASTERISK UNTI DISPOSITION PART CASE; 08806000
|
|
EMITL(1); GO EMITREST; 08807000
|
|
END; 08808000
|
|
IF ELCLASS = DECLARATORS AND ELBAT[I].ADDRESS = SAVEV 08809000
|
|
THEN BEGIN COMMENT SAVE UNIT DISPOSITION PART CASE; 08810000
|
|
EMITL(3); GO EMITREST; 08811000
|
|
END; 08812000
|
|
IF ACCUM[1] ="5PURGE" THEN BEGIN COMMENT FILE PURGE; 08812100
|
|
EMITL(4); GO EMITREST; 08812200
|
|
END; 08812300
|
|
ERROR(458); GO TO EXIT; 08813000
|
|
COMMENT ERROR 458 MEANS IMPROPER UNIT DISPOSITION PART 08814000
|
|
IN A CLOSE STATEMENT; 08815000
|
|
EMITREST:STEPIT; 08816000
|
|
L~THISL; 08817000
|
|
IF CHECK(RTPAREN,459) 08818000
|
|
THEN GO TO EXIT; 08819000
|
|
COMMENT ERROR 459 MEANS MISSING RIGHT PARENTHESIS IN A 08820000
|
|
CLOSE STATEMENT; 08821000
|
|
STEPIT; 08822000
|
|
EXIT:; 08823000
|
|
END CLOSESTMT; 08824000
|
|
PROCEDURE RWNDSTMT; 08825000
|
|
BEGIN COMMENT THE REWIND STATEMENT ROUTINE GENERATES CODE THAT 08826000
|
|
CALLS ON THE FILE CONTROL ROUTINE PASSING TO IT THE 08827000
|
|
FOLLOWING PARAMETERS. 08828000
|
|
**********************************************************08829000
|
|
<REWIND STATEMENT>::=REWIND(<FILE PART>) 08830000
|
|
- - - - - - - - - - - - - - 08831000
|
|
(0,0,FILE,4); 08832000
|
|
LABEL EXIT; COMMENT THE LABEL EXIT APPEARS AFTER THE LAST08833000
|
|
EXECUTABLE STATEMENT IN THE REWIND ROUTINE; 08834000
|
|
DEFINE THISL = RR1#; COMMENT THISL IS A TEMP CELL 08835000
|
|
FOR THE CURRENT L REGISTER; 08836000
|
|
DEFINE LTEMP = RR2#; COMMENT LTEMP SETTING FOR THE08837000
|
|
L REGISTER SETTING FOR THE 08838000
|
|
SAVE OR RELEASE LITERAL THAT 08839000
|
|
GETS PASSED TO KEN MEYERS; 08840000
|
|
STEPIT; 08841000
|
|
IF CHECK(LEFTPAREN,460) 08842000
|
|
THEN GO TO EXIT; 08843000
|
|
COMMENT ERROR 460 MEANS MISSING LEFT PARENTHESIS IN A 08844000
|
|
REWIND STATEMENT; 08845000
|
|
STEPIT; 08846000
|
|
IF NOT RANGE(FILEID,SUPERFILEID) 08847000
|
|
THEN BEGIN COMMENT ERROR 461 MEANS IMPROPER FILE PART IN A08848000
|
|
REWIND STATEMENT; 08849000
|
|
ERROR(461); GO TO EXIT; 08850000
|
|
END; 08851000
|
|
PASFILE; 08852000
|
|
IF CHECK(RTPAREN,462) 08853000
|
|
THEN GO TO EXIT; 08854000
|
|
COMMENT ERROR 462 MEANS MISSING RIGHT PARENTHESIS IN A 08855000
|
|
REWIND STATEMENT; 08856000
|
|
STEPIT; THISL~L; L~LTEMP; 08857000
|
|
EMITL(0); L~THISL; 08858000
|
|
EXIT:; 08859000
|
|
END RWNDSTMT; 08860000
|
|
PROCEDURE EXPLICITFORMAT; 08860050
|
|
BEGIN INTEGER PRT; ARRAY TEDOC[0:7,0:127]; 08860100
|
|
MOVECODE(TEDOC,EDOC); 08860150
|
|
GT5:=SGNO; GT1:=(2|SGAVL-1)&2[4:46:2]; SGNO:=SGAVL; 08860200
|
|
F := 0; PRT := GETSPACE(TRUE,-4); % FORMAT DESCR. 08860250
|
|
PRT := PROGDESCBLDR(LDES,0,PRT); 08860300
|
|
ELCLASS := "<"; TB1 := FORMATPHRASE; 08860350
|
|
SEGMENT(-F,SGNO,GT5); SGAVL := SGAVL+1; 08860400
|
|
SGNO := GT5; MOVECODE(TEDOC,EDOC); 08860450
|
|
IF LASTELCLASS ! ">" THEN ERR(136); 08860500
|
|
IF ELCLASS = "," THEN ELBAT[I].CLASS := COMMA ELSE 08860600
|
|
IF ELCLASS = ")" THEN ELBAT[I].CLASS := RTPAREN ELSE 08860650
|
|
ELBAT[I].CLASS := 0; I:=I-1; 08860700
|
|
EMITL(0); EMITPAIR(PRT,LOD); 08860750
|
|
END EXPLICITFORMAT; 08860800
|
|
COMMENT SORTSTMT AND MERGESTMT ANALYZE THEIR APPROPRIATE SYNTAXES 08861000
|
|
AND CALL SORTI, PASSING THE FOLLOWING: 08862000
|
|
SORT: MERGE: 08863000
|
|
<AEXP> 0 DISK SIZE,IF SPECIFIED 08864000
|
|
<AEXP> 0 CORE SIZE,IF SPECIFIED 08865000
|
|
0 0 ALFA FLAG 08866000
|
|
<AEXP> <AEXP> RECORD SIZE 08867000
|
|
PROG.DESC. PROG.DESC. DESCRIPTOR TO COMPARE PROCEDURE 08868000
|
|
PROG.DESC. PROG.DESC. DESCRIPTOR TO HIVALUE PROCEDURE 08869000
|
|
... 2,3,4,5,6,7 NUMBER OF FILES TO MERGE, OR 08870000
|
|
0,3,4,5 ... NUMBER OF SORTTAPES TO USE 08871000
|
|
TP5 FL7 SCRATCH TAPES FOR SORT, 08872000
|
|
TP4 FL6 OR MERGE FILES, POINTERS TO 08873000
|
|
TP3 FL5 TOP I/O DESCRIPTORS, OR ZERO 08874000
|
|
TP2 FL4 IF NOT USED. 08875000
|
|
TP1 FL3 08876000
|
|
0 FL2 DISK FILES FOR SORT 08877000
|
|
DK0 FL1 08878000
|
|
0/1 0 TRUE IF INPUT PROCEDURE 08879000
|
|
0/1 0/1 TRUE IF OUTPUT PROCEDURE 08880000
|
|
INF 0 POINTER TO I/O DESC FOR INPUT 08881000
|
|
OUTF OUTF OR OUTPUT FILE, OR MOTHER 08882000
|
|
OF WORK ARRAY. 08883000
|
|
PD/0 0 INPUT PROCEDURE DESCRIPTOR 08884000
|
|
PD/0 PD/0 OUTPUT PROCEDURE 08885000
|
|
0 0 08886000
|
|
0 0 08887000
|
|
0 0 08888000
|
|
LIT LIT PRT INDEX OF MERGE INTRINSIC 08889000
|
|
0 0 08890000
|
|
0 1 SORT/MERGE FLAG 08891000
|
|
... MSCW 08892000
|
|
0 SORT-FILE MOTHER 08893000
|
|
0 DESCRIPTORS 08894000
|
|
0 . 08895000
|
|
0 . 08896000
|
|
0 . 08897000
|
|
0 . 08898000
|
|
MSCW; 08900000
|
|
PROCEDURE MERGESTMT; 08901000
|
|
BEGIN INTEGER J,K,FILER,FILEND; 08902000
|
|
BOOLEAN OPTOG; 08903000
|
|
LABEL QUIT; 08904000
|
|
STEPIT; IF CHECK(LEFTPAREN,367) THEN GO QUIT; 08905000
|
|
EMITO(MKS); EMITL(1); EMIT(0); EMITL(GNAT(MERGEI)); 08906000
|
|
EMIT(0); EMIT(0); EMIT(0); 08907000
|
|
IF OPTOG~(STEPI=FILEID OR ELCLASS=SUPERFILEID) THEN EMIT(0) 08908000
|
|
ELSE IF NOT OUTPROCHECK(ELBAT[I]) THEN GO QUIT ELSE 08909000
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); 08910000
|
|
EMIT(0);IF OPTOG THEN BEGIN PASSFILE; I~I-1 END ELSE 08911000
|
|
EMITN(GNAT(SORTA)); 08911100
|
|
IF NOT COMMACHECK THEN GO QUIT; 08912000
|
|
EMIT(0); EMITL(REAL(TRUE AND NOT OPTOG)); EMIT(0); 08913000
|
|
FILER~BUMPL; IF NOT HVCHECK(ELBAT[I]) THEN GO QUIT; 08914000
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); IF NOT COMMACHECK THEN GO QUIT;08915000
|
|
IF NOT EQLESCHECK(ELBAT[I]) THEN GO QUIT; 08916000
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); IF NOT COMMACHECK THEN GO QUIT;08917000
|
|
AEXP; EMITB(BFW,FILER,FILEND~BUMPL); 08918000
|
|
FOR J~1 STEP 1 WHILE ELCLASS=COMMA DO 08919000
|
|
BEGIN STEPIT; PASSFILE END; 08920000
|
|
FOR K~J STEP 1 UNTIL 7 DO EMIT(0); J~J-1; 08921000
|
|
IF J>7 OR J<2 THEN BEGIN ERR(368); GO QUIT END; 08922000
|
|
EMITL(J); EMITB(BBW,BUMPL,FILER); EMITB(BFW,FILEND,L); 08923000
|
|
IF CHECK(RTPAREN,369) THEN GO QUIT; STEPIT; EMITO(SSN); 08924000
|
|
EMIT(0); EMIT(0); EMIT(0); 08925000
|
|
QUIT: EMITV(GNAT(SORTI)); 08926000
|
|
END MERGESTMT; 08927000
|
|
PROCEDURE SORTSTMT; 08928000
|
|
BEGIN BOOLEAN INPRO,OUTPRO; 08929000
|
|
INTEGER A,J; 08930000
|
|
LABEL QUIT; DEFINE RDS=1,280#; 08931000
|
|
STREAM PROCEDURE STUFFILE(IDLOC,FN, SFN); 08932000
|
|
VALUE FN, SFN ; 08933000
|
|
BEGIN DI~IDLOC; DI~DI+5; DI~DC; 08934000
|
|
SI~LOC FN; SI~SI+5; DS~3 CHR; SI~SI+7; 08935000
|
|
DS~11 LIT"0000000DSRT"; DS~CHR; SI~SI-1; 08936000
|
|
DS~7 LIT" 5DSRT"; DS~CHR; SFN~DI; SI~LOC SFN; 08937000
|
|
DI~IDLOC; DI~DI+5; SI~SI+5; DS~3 CHR; 08938000
|
|
END STUFFILE; 08939000
|
|
BOOLEAN PROCEDURE INPROCHECK(ELBW); VALUE ELBW; REAL ELBW; 08940000
|
|
IF ELBW.CLASS!BOOPROCID THEN ERR(363) ELSE 08941000
|
|
IF BOOLEAN(ELBW.FORMAL) THEN INPROCHECK~TRUE ELSE 08941100
|
|
IF TAKE(GT1~GIT(ELBW))!1 THEN ERR(364) ELSE 08942000
|
|
IF ARRAYCHECK(TAKE(GT1+1)) THEN ERR(365) ELSE 08943000
|
|
INPROCHECK~TRUE; 08944000
|
|
IF SFILENO=0 THEN 08945000
|
|
BEGIN SFILENO~FILENO; 08946000
|
|
FOR J~1 STEP 1 UNTIL 7 DO 08947000
|
|
IF MKABS(IDARRAY[127])<IDLOC.[33:15]+3 THEN FLAG(40) ELSE 08948000
|
|
BEGIN STUFFILE(IDLOC,(IF J{2 THEN 12 ELSE 2)&FILENO 08949000
|
|
[30:36:12],J); 08950000
|
|
FILENO~FILENO+1; 08951000
|
|
END; END; 08952000
|
|
EMITO(MKS); EMITV(BLOCKCTR); EMITPAIR(1,ADD); 08953000
|
|
EMITPAIR(BLOCKCTR,STD); EMIT(0); EMIT(0); 08954000
|
|
EMITN(2); EMITPAIR(RDS); EMITPAIR(A~GNAT(SORTA),STD); 08955000
|
|
EMITO(MKS); EMITL(20); EMITL(1000); EMITL(3); EMITL(SFILENO); 08956000
|
|
EMIT(0); EMITO(LNG); EMITN(A); EMITO(INX); EMITL(2); 08957000
|
|
EMITL(1); EMITL(10); EMIT(0); EMIT(0); EMITL(10); 08958000
|
|
EMITL(8); EMITV(5); 08959000
|
|
EMIT(0); EMIT(0); EMIT(0); EMIT(0); EMIT(0); EMIT(0); 08964000
|
|
EMITL(GNAT(MERGEI)); EMIT(0); EMIT(0); EMIT(0); STEPIT; 08965000
|
|
IF CHECK(LEFTPAREN,355) THEN GO QUIT; 08966000
|
|
% OUTPUT OPTION. 08966500
|
|
IF STEPI=FILEID OR ELCLASS=SUPERFILEID THEN 08967000
|
|
BEGIN EMIT(0); PASSFILE; I~I-1 END ELSE 08968000
|
|
BEGIN IF NOT(OUTPRO~OUTPROCHECK(ELBAT[I]))THEN GO QUIT; 08969000
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); EMITL(A);EMITN(10) 08970000
|
|
END; 08971000
|
|
IF NOT COMMACHECK THEN GO QUIT; 08972000
|
|
% INPUT OPTION. 08972500
|
|
IF ELCLASS=FILEID OR ELCLASS=SUPERFILEID THEN 08973000
|
|
BEGIN EMITPAIR(0,XCH); PASSFILE; I~I-1 END ELSE 08974000
|
|
IF NOT(INPRO~INPROCHECK(ELBAT[I])) THEN GO QUIT ELSE 08975000
|
|
BEGIN EMITPAIR(ELBAT[I].ADDRESS,LOD); EMITO(XCH); 08976000
|
|
IF OUTPRO THEN EMITO(DUP) ELSE BEGIN EMITL(A); 08977000
|
|
EMITN(10) END; END INPUT PRO; 08978000
|
|
EMITL(REAL(OUTPRO)); EMITL(REAL(INPRO)); EMIT(0); 08979000
|
|
EMITO(LNG); EMITN(A); EMITO(INX); EMITO(LOD); 08980000
|
|
EMITPAIR(5,CDC); EMIT(0); 08981000
|
|
IF NOT COMMACHECK THEN GO QUIT; 08983000
|
|
% NUMBER OF TAPES. 08983500
|
|
EMIT(0); EMIT(0); EMIT(0); EMIT(0); EMIT(0); 08984000
|
|
EMITO(MKS); EMITN(A); EMITL(SFILENO+2); AEXP; I~I-1; 08985000
|
|
EMITL(14); EMITV(5); 08986000
|
|
IF NOT COMMACHECK THEN GO QUIT; 08987000
|
|
% HIVALUE PROCEDURE. 08987500
|
|
IF NOT HVCHECK(ELBAT[I]) THEN GO QUIT; 08988000
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); 08989000
|
|
IF NOT COMMACHECK THEN GO QUIT; 08990000
|
|
% COMPARE PROCEDURE. 08990500
|
|
IF NOT EQLESCHECK(ELBAT[I]) THEN GO QUIT; 08991000
|
|
EMITPAIR(ELBAT[I].ADDRESS,LOD); 08992000
|
|
% RECORD LENGTH. 08992500
|
|
IF NOT COMMACHECK THEN GO QUIT; AEXP; EMITO(SSN); 08993000
|
|
EMIT(0); EMITPAIR(A,SND); 08993500
|
|
% CORE SIZE. 08993900
|
|
IF ELCLASS=COMMA THEN 08994000
|
|
BEGIN 08994010
|
|
STEPIT; 08994020
|
|
CORESZ:= 08994030
|
|
MAX(IF ELCLASS=NONLITNO THEN C ELSE 12000,CORESZ); 08994040
|
|
AEXP; 08994060
|
|
END 08994070
|
|
ELSE IF ELCLASS=RTPAREN THEN 08994080
|
|
BEGIN 08994090
|
|
IF CORESZ<1023 THEN CORESZ:=12000; 08994500
|
|
EMIT(0); 08994510
|
|
END 08994520
|
|
ELSE ERR(366); 08994530
|
|
% DISK SIZE. 08994900
|
|
IF ELCLASS=COMMA THEN BEGIN STEPIT; AEXP END ELSE 08995000
|
|
IF ELCLASS=RTPAREN THEN EMIT(0) ELSE ERR(366); 08995500
|
|
IF ELCLASS!RTPAREN THEN ERR(366) ELSE STEPIT; 08996000
|
|
QUIT: EMITV(GNAT(SORTI)); 08997000
|
|
END SORTSTMT; 08998000
|
|
COMMENT THE PROGRAM ROUTINE DOES THE INITIALIZATION AND THE WRAPUP 09000000
|
|
FOR THE REST OF THE COMPILER. THE MAIN PROGRAM OF THE COMPILER09001000
|
|
IS SIMPLY A CALL ON THE PROGRAM ROUTINE; 09002000
|
|
PROCEDURE PROGRAM; 09003000
|
|
BEGIN 09004000
|
|
STREAM PROCEDURE MDESC(WD,TOLOC);VALUE WD; 09005000
|
|
BEGIN DI~LOC WD; DS~ SET;SI~ LOC WD; DI~TOLOC;DS~WDS END; 09006000
|
|
COMMENT THE FOLLOWING PROCEDURE PRINTS OUT THE PRT, NAME, AND 09007000
|
|
SEGMENT NUMBER OF THE INTRINSIC PROCEDURES USED IN THE 09008000
|
|
OBJECT PROGRAM; 09009000
|
|
STREAM PROCEDURE WRTINTRSC(SGNO,ALFA,PRT,FIL); 09010000
|
|
VALUE SGNO,PRT; 09011000
|
|
BEGIN LOCAL COUNT,DEST; 09012000
|
|
DI:=FIL; DS:=4 LIT"PRT("; SI:=LOC PRT; SI:=SI+4; TALLY:=4; 09013000
|
|
3(IF SC="0" THEN % DONT PRINT LEADING ZEROES. 09014000
|
|
BEGIN SI:=SI+1; TALLY:=TALLY+63 END ELSE JUMP OUT); 09015000
|
|
COUNT:=TALLY; DS:=COUNT CHR; DS:=4 LIT") = "; 09016000
|
|
SI:=ALFA; SI:=SI+2; DEST:=DI; % SAVE DI. 09017000
|
|
DI:=LOC COUNT; DS:=7 LIT"0"; DS:=CHR; % NO OF CHARS IN NAME. 09018000
|
|
DI:=DEST; DS:=COUNT CHR; % INT. NAME. 09019000
|
|
DS:=29 LIT" INTRINSIC, SEGMENT NUMBER = "; 09020000
|
|
SI:= LOC SGNO; DS:=4 DEC; DS:=LIT"."; 09021000
|
|
DI:=DI-5; DS:=4 FILL; % JUNK LEADING BLANKS. 09022000
|
|
END WRTINTRSC; 09023000
|
|
DEFINE STARTINTRSC=426#; 09024000
|
|
LABEL L1; 09025000
|
|
IDLOC~MKABS(IDARRAY[0]); 09026000
|
|
IDLOCTEMP ~ IDLOC; 09027000
|
|
FILL OPTIONS[*] WITH "5CHECK",0, % 0, 1 09027002
|
|
"6DEBUG",0, % 2, 3 09027004
|
|
"4DECK0",0, % 4, 5 09027006
|
|
"6FORMA",0, % 6, 7 09027008
|
|
"9INTRI",0, % 8, 9 09027010
|
|
"5LISTA",0, % 10, 11 09027012
|
|
"4LIST0",0, % 12, 13 09027014
|
|
"5LISTP",0, % 14, 15 09027016
|
|
"3MCP00",0, % 16, 17 09027018
|
|
"4TAPE0",0, % 18, 19 09027020
|
|
"4NEST0",0, % 20, 21 09027022
|
|
"3NEW00",0, % 22, 23 09027024
|
|
"7NEWIN",0, % 24, 25 09027026
|
|
"4OMIT0",0, % 26, 27 09027028
|
|
"1$0000",0, % 28, 29 09027030
|
|
"3PRT00",0, % 30, 31 09027032
|
|
"5PUNCH",0, % 32, 33 09027034
|
|
"5PURGE",0, % 34, 35 09027036
|
|
"4SEGS0",0, % 36, 37 09027038
|
|
"3SEQ00",0, % 38, 39 09027040
|
|
"6SEQER",0, % 40, 41 09027042
|
|
"6SINGL",0, % 42, 43 09027044
|
|
"5STUFF",0, % 44, 45 09027046
|
|
"4VOID0",0, % 46, 47 09027048
|
|
"5VOIDT",0, % 48, 49 09027050
|
|
"4BEND0",0, % 50, 51 09027052
|
|
"4XREF0",0, % 52, 53 09027054
|
|
"7INCLU",0, % 54,55 %107-09027056
|
|
"8CODEF",0, % 56,57 %106-09027058
|
|
0; 09027100
|
|
LISTOG:=LISTER:=BOOLEAN(1-ERRORCOUNT.[46:1]); 09028000
|
|
OPTIONS[13] := REAL(LISTER); 09028005
|
|
COMMENT LISTOG IS NOT SET BY DEFAULT ON TIMESHARING; 09028010
|
|
NOHEADING := TRUE; 09028050
|
|
BUILDLINE.[47:1]~SEQXEQTOG~REMOTOG~ 09028100
|
|
BOOLEAN(ERRORCOUNT.[47:1]); 09028150
|
|
ERRORCOUNT := 0; 09028900
|
|
ERRMAX:=999; % MAY BE CHANGED IN DOLLARCARD. 09028910
|
|
BASENUM:=10000; ADDVALUE:=1000; NEWBASE:=TRUE; 09028920
|
|
COMMENT DEFAULT VALUES FOR "$SEQ" OPTION; 09028930
|
|
LASTUSED := 4; % FOR INITIALIZATION. 09029000
|
|
SGNO~1;SGAVL~2;PDINX~0; 09030000
|
|
FILENO:=DA:=1; 09031000
|
|
FILETHING ~ 4095; 09031100
|
|
MAXSTACK ~ 513; 09032000
|
|
NEXTINFO ~ LASTINFO ~ LASTSEQROW|256+LASTSEQUENCE+1; 09033000
|
|
PUTNBUMP(0); 09034000
|
|
BLANKET(0,INFO[LASTSEQROW,LASTSEQUENCE]); % FOR "$ CHECK".09034500
|
|
READACARD; % INITIALIZATION OF NCR,FCR, AND LCR, AND 09035000
|
|
% READS FIRST CARD INTO CARD BUFFER. 09036000
|
|
LASTUSED := 1; % ASSUMES CARD ONLY UNTIL TOLD DIFFERENTLY.09037000
|
|
NXTELBT~1; FAULTLEVEL~32; 09038000
|
|
PRTI ~ PRTIMAX ~ 18; 09039000
|
|
MRCLEAN ~ TRUE; 09040000
|
|
COMMENT START FILLING TABLES NEEDED TO COMPILE A PROGRAM; 09040100
|
|
FILL TEN[*] WITH 09041000
|
|
09042000
|
|
09043000
|
|
09044000
|
|
09045000
|
|
09046000
|
|
09047000
|
|
09048000
|
|
09049000
|
|
09050000
|
|
09051000
|
|
09052000
|
|
09053000
|
|
09054000
|
|
09055000
|
|
09056000
|
|
OCT1141000000000000, OCT1131200000000000, 09057000
|
|
OCT1121440000000000, OCT1111750000000000, OCT1102342000000000, 09058000
|
|
OCT1073032400000000, OCT1063641100000000, OCT1054611320000000, 09059000
|
|
OCT1045753604000000, OCT1037346545000000, OCT1011124027620000, 09060000
|
|
OCT0001351035564000, OCT0011643245121000, OCT0022214116345200,09061000
|
|
OCT0032657142036440, OCT0043432772446150, OCT0054341571157602,09062000
|
|
OCT0065432127413543, OCT0076740555316473, OCT0111053071060221,09063000
|
|
OCT0121265707274266, OCT0131543271153343, OCT0142074147406234, 09064000
|
|
OCT0152513201307703, OCT0163236041571663, OCT0174105452130240, 09065000
|
|
OCT0205126764556310, OCT0216354561711772, OCT0231004771627437, 09066000
|
|
OCT0241206170175347, OCT0251447626234641, OCT0261761573704011, 09067000
|
|
OCT0272356132665013, OCT0303051561442216, OCT0313664115752661, 09068000
|
|
OCT0324641141345435, OCT0336011371636745, OCT0347413670206536, 09069000
|
|
OCT0361131664625027, OCT0371360241772234, OCT0401654312370703, 09070000
|
|
OCT0412227375067064, OCT0422675274304701, OCT0433454553366062, 09071000
|
|
OCT0444367706263476, OCT0455465667740415, OCT0467003245730521, 09072000
|
|
OCT0501060411731665, OCT0511274514320242, OCT0521553637404312, 09073000
|
|
OCT0532106607305375, OCT0542530351166674, OCT0553256443424453, 09074000
|
|
OCT0564132154331566, OCT0575160607420123, OCT0606414751324150, 09075000
|
|
OCT0621012014361120, OCT0631214417455344, OCT0641457523370635, 09076000
|
|
OCT0651773450267005, OCT0662372362344606, OCT0673071057035747, 09077000
|
|
OCT0703707272645341, OCT0714671151416632, OCT0726047403722400, 09078000
|
|
OCT0737461304707100, OCT0751137556607072, OCT0761367512350710, 09079000
|
|
OCT0771665435043073; 09080000
|
|
COMMENT THIS IS THE FILL FOR THE SECOND ROW OF INFO: 09081000
|
|
THE FIRST ITEMS ARE STREAM RESERVED WORDS, 09082000
|
|
THEN ORDINARY RESERVED WORDS, 09083000
|
|
THEN INTRINSIC FUNCTIONS; 09084000
|
|
FILL INFO[1,*] WITH 09085000
|
|
OCT0670000600000400, "2SI000", COMMENT 256;09086000
|
|
OCT0700001040000402, "2DI000", COMMENT 258;09087000
|
|
OCT0710001460000404, "2CI000", COMMENT 260;09088000
|
|
OCT0720001630000406, "5TALLY", COMMENT 262;09089000
|
|
OCT0730000530000410, "2DS000", COMMENT 264;09090000
|
|
OCT0740000150000412, "4SKIP0", COMMENT 266;09091000
|
|
OCT0750001620000414, "4JUMP0", COMMENT 268;09092000
|
|
OCT0760000740000416, "2DB000", COMMENT 270;09093000
|
|
OCT0770000500000420, "2SB000", COMMENT 272;09094000
|
|
OCT1010000730000422, "2SC000", COMMENT 274;09095000
|
|
OCT1020001160000424, "3LOC00", COMMENT 276;09096000
|
|
OCT1030001170000426, "2DC000", COMMENT 278;09097000
|
|
OCT1040001430000430, "5LOCAL", COMMENT 280;09098000
|
|
OCT1050000340000432, "3LIT00", COMMENT 282;09099000
|
|
OCT1060001036400434, "3SET00", COMMENT 284;09100000
|
|
OCT1060001066500436, "5RESET", COMMENT 286;09101000
|
|
OCT1060001020500440, "3WDS00", COMMENT 288;09102000
|
|
OCT1060001357700442, "3CHR00", COMMENT 290;09103000
|
|
OCT1060001057300444, "3ADD00", COMMENT 292;09104000
|
|
OCT1060001617200446, "3SUB00", COMMENT 294;09105000
|
|
OCT1060000727600450, "3ZON00", COMMENT 296;09106000
|
|
OCT1060000417500452, "3NUM00", COMMENT 298;09107000
|
|
OCT1060000766700454, "3OCT00", COMMENT 300;09108000
|
|
OCT1060000176600456, "3DEC00", COMMENT 302;09109000
|
|
OCT1004000260000460, "6TOGGL", "E0000000", COMMENT 304;09110000
|
|
OCT0430000050000000, "5ALPHA", COMMENT 307;09111000
|
|
OCT1330001030000000, "3AND00", COMMENT 309;09112000
|
|
OCT0430000170000525, "5ARRAY", COMMENT 311;09113000
|
|
OCT0660000000000000, "5BEGIN", COMMENT 313;09114000
|
|
OCT0430000030000503, "7BOOLE", "AN000000", COMMENT 315;09115000
|
|
OCT0470000000000000, "5CLOSE", COMMENT 318;09116000
|
|
OCT1070000000000655, "7COMME", "NT000000", COMMENT 320;09117000
|
|
OCT0430000230000000, "6DEFIN", "E0000000", COMMENT 323;09118000
|
|
OCT1360006000000000, "3DIV00", COMMENT 326;09119000
|
|
OCT0550000000000000, "2DO000", COMMENT 328;09120000
|
|
OCT0520000000000000, "6DOUBL", "E0000000", COMMENT 330;09121000
|
|
OCT0430000100000000, "4DUMP0", COMMENT 333;09122000
|
|
OCT0570000000000000, "4ELSE0", COMMENT 335;09123000
|
|
OCT0600000000000000, "3END00", COMMENT 337;09124000
|
|
OCT1300002030000000, "3EQV00", COMMENT 339;09125000
|
|
OCT0360000000000644, "5FALSE", COMMENT 341;09126000
|
|
OCT0430000210000000, "4FILE0", COMMENT 343;09127000
|
|
OCT0610000001200000, "4FILL0", %A 09128000
|
|
OCT0530000000000000, "3FOR00", COMMENT 347;09129000
|
|
OCT0430000200000554, "6FORMA", "T0000000", COMMENT 349;09130000
|
|
OCT1100000000000000, "7FORWA", "RD000000", COMMENT 352;09131000
|
|
OCT0640000000000604, "2GO000", COMMENT 355;09132000
|
|
OCT0630000000000000, "2IF000", COMMENT 357;09133000
|
|
OCT0430000130000000, "2IN000", COMMENT 359;09134000
|
|
OCT0430000060000000, "7INTEG", "ER000000", COMMENT 361;09135000
|
|
OCT1310000000000000, "3IMP00", COMMENT 364;09136000
|
|
OCT0430000070000000, "5LABEL", COMMENT 366;09137000
|
|
OCT0430000110000613, "4LIST0", COMMENT 368;09138000
|
|
OCT0500000000000000, "4LOCK0", COMMENT 370;09139000
|
|
OCT1360016000000000, "3MOD00", COMMENT 372;09140000
|
|
OCT0430000140000000, "7MONIT", "OR000000", COMMENT 374;09141000
|
|
OCT1250000000000000, "3NOT00", COMMENT 377;09142000
|
|
OCT1320000430000624, "2OR000", COMMENT 379;09143000
|
|
OCT0430000120000000, "3OUT00", COMMENT 381;09144000
|
|
OCT0430000010000476, "3OWN00", COMMENT 383;09145000
|
|
OCT0430000160000463, "9PROCE", "DURE0000", COMMENT 385;09146000
|
|
OCT0440000000000000, "4READ0", COMMENT 388;09147000
|
|
OCT0430000040000000, "4REAL0", COMMENT 390;09148000
|
|
OCT0650000000000000, "7RELEA", "SE000000", COMMENT 392;09149000
|
|
OCT0510000000000000, "6REWIN", "D0000000", COMMENT 395;09150000
|
|
OCT0430000020000773, "4SAVE0", COMMENT 398;09151000
|
|
OCT0460000000000000, "5SPACE", COMMENT 400;09152000
|
|
OCT1110000000000000, "4STEP0", COMMENT 402;09153000
|
|
OCT0430000220000000, "6STREA", "M0000000", COMMENT 404;09154000
|
|
OCT0430000150000562, "6SWITC", "H0000000", COMMENT 407;09155000
|
|
OCT1120000000000000, "4THEN0", COMMENT 410;09156000
|
|
OCT1130000000000000, "2TO000", COMMENT 412;09157000
|
|
OCT0360000010000000, "4TRUE0", COMMENT 414;09158000
|
|
OCT0560000000000000, "5UNTIL", COMMENT 416;09159000
|
|
OCT1140000000000000, "5VALUE", COMMENT 418;09160000
|
|
OCT0540000000000540, "5WHILE", COMMENT 420;09161000
|
|
OCT1150000000000000, "4WITH0", COMMENT 422;09162000
|
|
OCT0450000000000531, "5WRITE", COMMENT 424;09163000
|
|
OCT0130000000140673, "3ABS00", OCT0000000000700000,%426 09164000
|
|
OCT0130000000060000, "6ARCTA", "N0000000", OCT0000000001600000,%429;09165000
|
|
OCT0130000000040000, "3COS00", OCT0000000001500000,%433;09166000
|
|
OCT0130000000360000, "6ENTIE", "R0000000", OCT0000000001100000,%436 09167000
|
|
OCT0130000000040000, "3EXP00", OCT0000000002000000,%440;09168000
|
|
OCT0130000000040000, "2LN000", OCT0000000001700000,%443;09169000
|
|
OCT0130000000240000, "4SIGN0", OCT0000000001000000,%446 09170000
|
|
OCT0130000000040000, "3SIN00", OCT0000000001400000,%449;09171000
|
|
OCT0130000000040515, "4SQRT0", OCT0000000001300000,%452;09172000
|
|
OCT0130000000440000, "4TIME0", OCT0000000001200000,%455 09173000
|
|
OCT0140000000040000, "3ZIP00", 0, COMMENT 455;09174000
|
|
OCT0130000000060000, "9OUTPU", "T(W)0000", OCT0000000000100000,%461;09175000
|
|
OCT0130000050060000, ":BLOCK", " CONTROL", OCT0000000000200000,%465;09176000
|
|
OCT0130000000060000, "8INPUT", "(W)00000", OCT0000000000300000,%469;09177000
|
|
OCT0000000000060000, "4SORT0", 0, OCT0000000000400000,% 473 09178000
|
|
OCT0130000000040000, "4DUMP0", OCT0000000000500000,%477;09179000
|
|
OCT0130000000060000, "#X TO ", "THE I000", OCT0000000000600000,%480;09180000
|
|
OCT0130000000060000, ":GO TO", " SOLVER ", OCT0000000002100000,%484;09181000
|
|
OCT0130000140060000, ":ALGOL", " WRITE ", OCT0000000002200000,%488;09182000
|
|
OCT0130000150060000, ":ALGOL", " READ ", OCT0000000002300000,%492;09183000
|
|
OCT0130000160060000, ":ALGOL", " SELECT ", OCT0000000002400000,%496;09184000
|
|
OCT0000000000040000, "5MERGE", OCT0000000002700000,% 500 09184100
|
|
OCT0130000000560652, "6STATU", "S0000000", OCT0000000003000000,%503 09184200
|
|
OCT0130000000640000, "3MAX00", OCT0000000003100047,%507 09184300
|
|
OCT0430000240000000, "6AUXME", "M0000000"; %510 09185000
|
|
09185100
|
|
09186000
|
|
COMMENT THIS IS THE FILL FOR STACKHEAD; 09187000
|
|
FILL STACKHEAD[*] WITH 09188000
|
|
320,359,313,458,385, 0,337,347,383,361,379,412, 0, 0, 0,372, 09189000
|
|
355,309, 0, 0,368, 0,446, 0, 0,549,311,410, 0, 0,400, 0, 09190000
|
|
0, 0, 0, 0,503,315, 0, 0,330, 0, 0, 0, 0, 0, 0,440, 09191000
|
|
390,449,349, 0,414, 0, 0, 0,452, 0, 0, 0, 0, 0, 0, 0, 09192000
|
|
381,328, 0, 0, 0, 0, 0, 0, 0, 0, 0,436, 0,402,407, 0, 09193000
|
|
0, 0,377, 0, 0, 0,416,455,355, 0, 0,357, 0,552,374, 0, 09194000
|
|
0, 0,433, 0,418,398,343, 0, 0,326,339, 0, 0, 0,366, 0, 09195000
|
|
0, 0, 0, 0, 0,422, 0,392, 0, 0, 0,424, 0; 09196000
|
|
FILL SUPERSTACK[*] WITH %WF 09196100
|
|
0, 0,313, 0,307, 0,337,347,383, 0,379,412, 0, 0, 0,372, %WF 09196200
|
|
335,309, 0, 0, 0, 0, 0, 0, 0, 0,420,410, 0, 0, 0, 0, %WF 09196300
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, %WF 09196400
|
|
390, 0,364, 0,414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, %WF 09196500
|
|
0,328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,402, 0, 0, %WF 09196600
|
|
0, 0,377, 0,510, 0,416, 0,355, 0, 0,357, 0, 0, 0, 0, 09196700
|
|
0, 0, 0, 0, 0,398, 0, 0, 0,326,339, 0, 0, 0,366, 0, %WF 09196800
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,424, 0; %WF 09196900
|
|
COMMENT THIS IS THE FILL FOR THE SPECIAL CHARACTORS; 09197000
|
|
FILL SPECIAL[*] WITH 09198000
|
|
OCT1200000000200000, COMMENT #; OCT0000000000100000, COMMENT @; 09199000
|
|
OCT0000000000000000, OCT1160000000120000, COMMENT :; 09200000
|
|
OCT1340000450002763, COMMENT >; OCT1340000250002662, COMMENT }; 09201000
|
|
OCT1350000200000000, COMMENT +; OCT0000000000000000, 09202000
|
|
OCT1220000000060000, COMMENT .; OCT1210000000000000, COMMENT [; 09203000
|
|
OCT1270000000000000, COMMENT &; OCT0420000000000000, COMMENT (; 09204000
|
|
OCT1340010450003571, COMMENT <; OCT1260000000000000, COMMENT ~; 09205000
|
|
OCT1360001000000000, COMMENT |; OCT0000000000000000, 09206000
|
|
OCT0000000000040000, COMMENT $; OCT1370000000000000, COMMENT *; 09207000
|
|
OCT1350000600000000, COMMENT -; OCT1240000000160000, COMMENT ); 09208000
|
|
OCT0620000000000000, COMMENT .,; OCT1340010250003470, COMMENT {; 09209000
|
|
OCT0000000000000000, OCT1360002000000000, COMMENT /; 09210000
|
|
OCT1170000000000000, COMMENT ,; OCT0000000000020000, COMMENT %; 09211000
|
|
OCT1340001050002561, COMMENT !; OCT1340011050002460, COMMENT =; 09212000
|
|
OCT1230000000000000, COMMENT ]; OCT0000000000140000, COMMENT "; 09213000
|
|
0,0; 09214000
|
|
COMMENT THIS IS THE FILL FOR THE REALLY SPECIAL CHARACTERS FOR DATACOM;09214100
|
|
FILL INFO[2,*] WITH OCT0030000120000000, "2LB000", % THESE ENTRIES ARE 09214105
|
|
OCT0030000130000000, "2RB000", % DESIGNED TO LOOK 09214110
|
|
OCT0030000140000000, "3GTR00", % LIKE DEFINE 09214115
|
|
OCT0030000150000000, "3GEQ00", % DECLARATIONS AT 09214120
|
|
OCT0030000160000000, "3EQL00", % BLOCK LEVEL 0. 09214125
|
|
OCT0030000170000000, "3NEQ00", 09214130
|
|
OCT0030000200000000, "3LEQ00", 09214135
|
|
OCT0030000210000000, "3LSS00", 09214140
|
|
OCT0030000220000000, "5TIMES", 09214145
|
|
OCT0030000230000000, "5INPUT", 09214150
|
|
OCT0030000240000000, "2IO000", 09214155
|
|
OCT0030000250000000, "6SERIA","L0000000", 09214160
|
|
OCT0030000260000000, "6RANDO","M0000000", 09214165
|
|
OCT0030000270000000, "6UPDAT","E0000000", 09214170
|
|
OCT0030000300000000, "6OUTPU","T0000000", 09214180
|
|
OCT0030000310000000, "7CANTU","SE000000", 09214190
|
|
OCT0130000000740000, "3MIN00", OCT0000000003200000,%549 09214200
|
|
OCT0130000001040000, "5DELAY", OCT0000000003300000,%552 09214210
|
|
OCT0000000000060000, ":SUPER", " MOVER ", OCT0000000003400000,%555 09214220
|
|
OCT0000000000060000, ":DYNAM", "IC DIALS", OCT0000000004000000,%559 09214230
|
|
OCT0130000000060000, ":FILE ", "ATTRBUTS", OCT0000000015000000,%563 09214240
|
|
OCT0000000000040000, "5DCPWR", OCT0000000005600000,%567 09214250
|
|
OCT0000000000040000, "5DCMTH", OCT0000000005500000,%570 09214255
|
|
OCT0130000001140000, "5DSQRT", OCT0000000012300000,%573 09214260
|
|
OCT0130000001240000, "4CEXP0", OCT0000000010000000,%576 09214270
|
|
OCT0130000001340000, "3CLN00", OCT0000000010200000,%579 09214295
|
|
OCT0130000001440000, "4CSIN0", OCT0000000010600000,%582 09214300
|
|
OCT0130000001540000, "4CCOS0", OCT0000000011000000,%585 09214305
|
|
OCT0130000001640000, "5CSQRT", OCT0000000012400000,%588 09214310
|
|
OCT0130000001740000, "4DEXP0", OCT0000000007700000,%591 09214315
|
|
OCT0130000002040000, "3DLN00", OCT0000000010100000,%594 09214320
|
|
OCT0130000002140000, "4DSIN0", OCT0000000010500000,%597 09214325
|
|
OCT0130000002240000, "4DCOS0", OCT0000000010700000,%600 09214330
|
|
OCT0130000002360000, "7DARCT","AN0000000", OCT0000000011300000,%603 09214340
|
|
OCT0130000002460000, "6DLOG1","000000000", OCT0000000010400000,%607 09214345
|
|
OCT0130000002560000, "8DARCT","AN2000000", OCT0000000011500000,%611 09214350
|
|
OCT0130000002640000, "4DMOD0", OCT0000000006500000,%615 09214355
|
|
OCT0130000002740000, "4CABS0", OCT0000000005300000,%618 09214360
|
|
OCT0130000003060000, "7ARCTA","N20000000", OCT0000000011400000,%621 09214365
|
|
OCT0130000003160000, "6DROUN","D00000000", OCT0000000006100000,%625 09214370
|
|
OCT0130000000040000, "5LOG10", OCT0000000010300000,%629 09214375
|
|
OCT0130000000040000, "5COTAN", OCT0000000011200000,%632 09214380
|
|
OCT0130000000060000, "6ARCSI","N00000000", OCT0000000011600000,%635 09214385
|
|
OCT0130000000040000, "5ARCOS", OCT0000000011700000,%639 09214390
|
|
OCT0130000000040000, "4SINH0", OCT0000000012000000,%642 09214395
|
|
OCT0130000000040000, "4COSH0", OCT0000000012100000,%645 09214400
|
|
OCT0130000000040000, "4TANH0", OCT0000000012200000,%648 09214405
|
|
OCT0130000000040000, "3ERF00", OCT0000000012500000,%651 09214410
|
|
OCT0130000000040000, "5GAMMA", OCT0000000012600000,%654 09214415
|
|
OCT0130000000040000, "5LNGAM", OCT0000000012700000,%657 09214420
|
|
OCT0130000000040000, "3TAN00", OCT0000000011100007,%660 09214425
|
|
OCT0130000260000000, "4FAST0", %663 09214426
|
|
OCT0130000270000000, "4SLOW0", %665 09214427
|
|
OCT0130000240000000, "7PROTE", "CT000000", %667 09214428
|
|
OCT2000000000004050, COMMENT POWERS OF TEN ; %670 09214430
|
|
OCT0430000250000000, "5FIELD", %671 09214432
|
|
0, ">SORT ", "TEMPORAR", "Y0000000", % SORTA %673 09214435
|
|
" " ; COMMENT LASTSEQUENCE,LASTSEQROW ; %674 09214440
|
|
COMMENT NOW LINK THESE ENTRIES INTO STACKHEAD; 09214500
|
|
FOR NEXTINFO~512 STEP 2 UNTIL 534,537 STEP 3 UNTIL 546 09214510
|
|
,567STEP 3UNTIL 603,607STEP 4UNTIL 615,618,621STEP 4UNTIL 629,632,635, 09214515
|
|
639 STEP 3 UNTIL 660,663 STEP 2 UNTIL 667, 671 %117-09214516
|
|
DO PUT(TAKE(NEXTINFO)&STACKHEAD[GT2~TAKE(NEXTINFO+1)MOD 125][35:35:13], 09214520
|
|
LASTINFO~STACKHEAD[GT2]~NEXTINFO); 09214530
|
|
NEXTINFO ~ LASTINFO ~ LASTSEQROW | 256 + LASTSEQUENCE + 1; 09214980
|
|
BUILDLINE.[45:1]~TRUE ; 09214985
|
|
PUTNBUMP(0); 09214990
|
|
FILL MACRO[*] WITH 09215000
|
|
OCT0131, COMMENT SFS A 00 ; 09216000
|
|
OCT0116, COMMENT SFD A 01 ; 09217000
|
|
OCT0000, COMMENT SYNTAX ERROR02 ; 09218000
|
|
OCT0140, COMMENT INC A 03 ; 09219000
|
|
OCT0130, COMMENT SRS A 04 ; 09220000
|
|
OCT0117, COMMENT SRD A 05 ; 09221000
|
|
OCT0000, COMMENT SYNTAX ERROR06 ; 09222000
|
|
OCT0000, COMMENT SYNTAX ERROR07 ; 09223000
|
|
OCT00310143, COMMENT CRF A, SFS 008 ; 09224000
|
|
OCT00160143, COMMENT CRF A, SFD 009 ; 09225000
|
|
OCT00470143, COMMENT CRF A, JFW 0 10 ; 09226000
|
|
OCT00400143, COMMENT CRF A, INC 011 ; 09227000
|
|
OCT00300143, COMMENT CRF A, SRS 012 ; 09228000
|
|
OCT00170143, COMMENT CRF A, SRD 013 ; 09229000
|
|
OCT0000, COMMENT SYNTAX ERROR14 ; 09230000
|
|
OCT0000, COMMENT SYNTAX ERROR15 ; 09231000
|
|
OCT0153, COMMENT RSA A 16 ; 09232000
|
|
OCT0104, COMMENT RDA A 17 ; 09233000
|
|
OCT0150, COMMENT RCA A 18 ; 09234000
|
|
OCT004201430042, COMMENT SEC 0, CRF A, SEC 0 19 ; 09235000
|
|
OCT0122, COMMENT SES A 20 ; 09236000
|
|
OCT0106, COMMENT SED A 21 ; 09237000
|
|
OCT0000, COMMENT SYNTAX ERROR22 ; 09238000
|
|
OCT0000, COMMENT SYNTAX ERROR23 ; 09239000
|
|
OCT0056, COMMENT TSA 0 24 ; 09240000
|
|
OCT0000, COMMENT SYNTAX ERROR25 ; 09241000
|
|
OCT0000, COMMENT SYNTAX ERROR26 ; 09242000
|
|
OCT0000, COMMENT SYNTAX ERROR27 ; 09243000
|
|
OCT0000, COMMENT SYNTAX ERROR28 ; 09244000
|
|
OCT0007, COMMENT TDA 0 29 ; 09245000
|
|
OCT0000, COMMENT SYNTAX ERROR30 ; 09246000
|
|
OCT0000, COMMENT SYNTAX ERROR31 ; 09247000
|
|
OCT0115, COMMENT SSA A 32 ; 09248000
|
|
OCT0114, COMMENT SDA A 33 ; 09249000
|
|
OCT0154, COMMENT SCA A 34 ; 09250000
|
|
OCT0141; COMMENT STC A 35 ; 09251000
|
|
FILL TEXT[0,*] WITH 0,0,0,0,0,0,0,0,0,0, 09251010
|
|
"[# ", 09251020
|
|
"]# ", 09251030
|
|
"># ", 09251040
|
|
"}# ", 09251050
|
|
"=# ", 09251060
|
|
"!# ", 09251070
|
|
"{# ", 09251080
|
|
"<# ", 09251090
|
|
"|# ", 09251100
|
|
"1# ", 09251101
|
|
"3# ", 09251102
|
|
"0# ", 09251103
|
|
"1# ", 09251104
|
|
"2# ", 09251105
|
|
"2# ", 09251106
|
|
"0# " 09251107
|
|
; 09251200
|
|
NEXTTEXT~26 ; 09251300
|
|
DO UNTIL STEPI = BEGINV; 09252000
|
|
BUILDLINE.[45:1]~FALSE; 09252050
|
|
09252100
|
|
COMMENT THE FOLLOWING IS THE FIRST CODE EXECUTED IN ANY PROGRAM. 09253000
|
|
THE OUTER BLOCK(NUMBER 1) CONSISTS OF THE FOLLOWING CODE: 09254000
|
|
LITC 0 --- THIS PUTS A BOTTOM ON THE STACK 09255000
|
|
AND IS ALSO USED AS A ONE SYLLABLE 09256000
|
|
CHARACTER MODE PROGRAM TO CAUSE AN EXIT. 09257000
|
|
ITS PRIMARY FUNCTION IS TO CUT BACK 09258000
|
|
THE STACK AFTER A COMMUNICATE OPERATOR. 09259000
|
|
MKS --- THIS SETS THE PROGRAM UP FOR RUNNING 09260000
|
|
IN SUBPROGRAM LEVEL.THIS IS TO ALLOW 09261000
|
|
C-RELATIVE ADDRESSING FOR CONSTANTS 09262000
|
|
IN THE PROGRAM STREAM 09263000
|
|
OPDC XXXX--- THIS ACCESSES A PROGRAM DESCRIPTOR 09264000
|
|
THAT GETS THE PROGRAM INTO SUBPROGRAM 09265000
|
|
LEVEL. XXXX IS THE FIRST AVAILABLE PRT 09266000
|
|
CELL.AT THE START OF COMPILATION XXXX IS 09267000
|
|
ASSUMED TO CONTAIN A LABEL DESCRIPTOR 09268000
|
|
IT IS CHANGED BEFORE COMPILATION IS 09269000
|
|
COMPLETE TO LOOK LIKE A WORD MODE 09270000
|
|
PROGRAM DESCRIPTOR; 09271000
|
|
EMITL(0);EMITO(MKS); 09272000
|
|
GT1~PROGDESCBLDR(3,0,0); 09273000
|
|
GT1 := GETSPACE(TRUE,-5); % SEG.#2 DESCR. 09274000
|
|
INSERTCOP:=1; %107-09274100
|
|
ERRORTOG~TRUE; BLOCK(FALSE); 09275000
|
|
COMMENT THIS CODE WILL PUT AN EXTRA CARD ON OCRDIMG TAPE 09275100
|
|
THUS AVOIDING E.O.F. NO LABEL CONDITION WHEN PATCHING 09275200
|
|
THE END. CARD OFF AN INPUT TAPE; 09275250
|
|
IF NEWTOG THEN 09275300
|
|
BEGIN FILL LIBARRAY[*] WITH "END;END."," ","LAST CAR", 09275350
|
|
"D ON OCR","DING TAPE","E ", " "," ", 09275400
|
|
" ","999999999"; 09275450
|
|
WRITE(NEWTAPE,10,LIBARRAY[*]) 09275500
|
|
END; 09275550
|
|
09275600
|
|
09275650
|
|
09275700
|
|
09275750
|
|
09275800
|
|
09275850
|
|
09275900
|
|
09275950
|
|
09276000
|
|
COMMENT THE FOLLOWING CODE SEARCHES THROUGH INFO TO DETERMINE 09277000
|
|
WHICH INTRINSICS HAVE BEEN USED.IF AN INTRINSIC HAS BEEN 09278000
|
|
USED THEN A PRT ADDRESS WILL HAVE BEEN ASSIGNED AND 09279000
|
|
THIS INDICATES THAT A DESCRIPTOR MUST BE BUILT FOR PLACING 09280000
|
|
IN THE PRT.POWERSOFTEN IS ENTERED IN THE OBJECT PROGRAM 09281000
|
|
PRT AS AN ABSENT DATA DESCRIPTOR.IT MAY BE RECOGNIZED IN 09282000
|
|
INFO BECAUSE IT IS MINUS. THE FIRST WORD IN EACH OF THESE 09283000
|
|
ENTRIES LOOKS LIKE THE REST OF INFO EXCEPT THAT THE INCR 09284000
|
|
FIELD IS BROKEN INTO 2 PARTS, [33:2] IS USED TO ADD TO THE 09285000
|
|
INDEX OF CURRENT WORD TO LINK TO NEXT ENTRY.THE REST OF 09286000
|
|
THE INCR FIELD IS USED BY IMPFUN. THE ADDITIONAL INFO 09287000
|
|
PORTION INDICATES AN INDEX THAT ALLOWS THE MCP TO ASSIGN 09288000
|
|
DRUM ADDRESSES TO THE INTRINSICS; 09289000
|
|
09290000
|
|
GT1 ~ GT3 ~ STARTINTRSC; 09291000
|
|
L1: GT1 ~ GT1 + (GT2 ~ INFO[GT1.LINKR,GT1.LINKC]).[33:2]; 09292000
|
|
IF GT2 } 0 THEN % NOT POWERS OF TEN TABLE 09293000
|
|
BEGIN IF GT2.ADDRESS ! 0 THEN % IT WAS USED 09294000
|
|
BEGIN SGNO ~ SGAVL; SGAVL ~ SGAVL + 1; 09295000
|
|
GT2 ~ PROGDESCBLDR(INFO[GT1.LINKR,GT1.LINKC].[1:1] 09296000
|
|
| 2 + 1, 0, GT2.ADDRESS); 09296100
|
|
PDPRT[PDINX.[37:5],PDINX.[42:6]] ~ 09297000
|
|
1 & INFO[GT1.LINKR,GT1.LINKC][13:18:15] 09298000
|
|
& SGNO[28:38:10] & 1[2:47:1]; 09298100
|
|
PDINX ~ PDINX + 1; 09299000
|
|
IF PRTOG THEN % WRITE OUT INTRINSICS USED. 09300000
|
|
BEGIN GT3 ~ GT3 + 1; 09300100
|
|
BLANKET(14,LIN); % BLANK BUFFER. 09300150
|
|
WRTINTRSC(SGNO, INFO[GT3.LINKR,GT3.LINKC], 09300200
|
|
B2D(GT2.[38:10]), LIN); 09301000
|
|
IF NOHEADING THEN DATIME; WRITELINE; 09302000
|
|
END 09303000
|
|
END; 09304000
|
|
GT3 ~ GT1 ~ GT1 + INFO[GT1.LINKR,GT1.LINKC].[33:15] + 1; 09305000
|
|
GO TO L1; 09305100
|
|
END; 09306000
|
|
L~L-1; COMMENT WIPES OUT EXTRANEOUS BFW EMITTED BY BLOCK; 09306100
|
|
EMITL(5);EMITO(COM); 09307000
|
|
ENIL[0,1] ~ 1023 & 99999999[10:20:28]; ENILPTR ~ 1; 09307100
|
|
SEGMENT((L+3) DIV 4,1,0); 09308000
|
|
COMMENT IF THE POWERS-OF-TEN TABLE HAS BEEN USED, IT IS WRITTEN OUT 09309000
|
|
AT THIS TIME AS A TYPE 2 SEGMENT; 09310000
|
|
IF GT1~GT2.ADDRESS!0 THEN 09311000
|
|
BEGIN SGAVL~(SGNO~SGAVL)+1; 09312000
|
|
GT2~PROGDESCBLDR(2,0,GT2.ADDRESS); 09313000
|
|
MOVE(69,TEN,EDOC[0,0]); 09314000
|
|
BUILDLINE ~ BOOLEAN(2|REAL(BUILDLINE)); 09314100
|
|
SEGMENT(-69, SGNO,0); 09315000
|
|
BUILDLINE ~ BUILDLINE.[46:1] ; 09315100
|
|
END; 09316000
|
|
BEGIN ARRAY PRT[0:7,0:127],SEGDICT[0:7,0:127]; 09317000
|
|
INTEGER PRTADR,SEGMNT,LINK; 09318000
|
|
COMMENT THE PRT AND SEGMENT DICTIONARY ARE NOW BUILT; 09333000
|
|
09334000
|
|
09335000
|
|
09336000
|
|
09337000
|
|
09338000
|
|
09339000
|
|
09340000
|
|
09341000
|
|
09342000
|
|
09343000
|
|
09344000
|
|
09345000
|
|
09346000
|
|
09347000
|
|
FOR I~0 STEP 1 UNTIL PDINX-1 DO 09348000
|
|
IF (GT1~PDPRT[I.[37:5],I.[42:6]]).[38:10]=0 THEN 09349000
|
|
BEGIN PRTADR~GT1.[8:10]; SEGMNT~GT1.[28:10]; 09350000
|
|
LINK~SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]].[8:10]; 09351000
|
|
MDESC(GT1.[18:10]&SEGMNT[18:33:15] 09352000
|
|
&(IF LINK=0 THEN SEGMNT+2048 ELSE LINK) 09353000
|
|
[6:36:12]>1[4:4:2]&5[1:45:3], 09354000
|
|
PRT[PRTADR DIV 128,PRTADR MOD 128]); 09354100
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]].[8:10]~PRTADR; 09355000
|
|
END ELSE 09356000
|
|
BEGIN SEGMNT~GT1.[28:10]; 09357000
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]]~ 09358000
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]]>1[23:38:10] 09359000
|
|
& GT1[33:13:15] & GT1[4:3:1] & GT1[1:1:2]; 09360000
|
|
END; 09361000
|
|
COMMENT SET UP NEWINX = TOTAL SEGMENT SIZE; NEWINX~AKKUM; 09361005
|
|
COMMENT CODE TO ADD IN CORE STORAGE REQUIREMENTS; 09361010
|
|
GTI1~0; 09361020
|
|
COMMENT ADD IN ARRAYS; 09361030
|
|
GTI1~GTI1+( IF NOOFARRAYS =0 THEN 0 ELSE IF NOOFARRAYS {4 09361040
|
|
THEN 2000 ELSE IF NOOFARRAYS { 8 THEN 3500 09361050
|
|
ELSE 5000); 09361060
|
|
COMMENT ADD IN SEGMENT SIZE REQUIREMENTS; 09361070
|
|
GTI1~GTI1+ (IF NEWINX { 1000 THEN NEWINX ELSE IF NEWINX {2000 09361080
|
|
THEN 1000 ELSE NEWINX/2); 09361100
|
|
COMMENT ADD IN STACK AND PRT; 09361110
|
|
GTI1~GTI1+ 512 + PRTIMAX; 09361120
|
|
COMMENT ADD IN JRT; 09361130
|
|
GTI1~GTI1 + ( (FILENO +1)| 5); 09361140
|
|
COMMENT ADD IN I/O BUFFER REQUIREMENTS; 09361150
|
|
GTI1~GTI1+IOBUFFSIZE; COMMENT I/O SIZE CAL. IN P.IODEC; 09361160
|
|
COMMENT ADD SEGMENT DICT.SIZE; 09361170
|
|
GTI1~GTI1+ SGAVL-1; 09361180
|
|
COMMENT ADD IN CORE ESTIMATE FOR SORT; 09361181
|
|
GTI1:=GTI1+CORESZ; 09361182
|
|
COMMENT CHECK IF TOTAL IS MORE THAN 8 MODS; 09361190
|
|
IF GTI1 } 32000 THEN GTI1~ 32000; 09361200
|
|
COMMENT AT THIS POINT GTI1 HAS THE NEEDED TOTAL CORE REQD; 09361210
|
|
COMMENT WRITE OUT FILE PARAMETER BLOCK; 09393000
|
|
GT1~MIN((IDLOC-IDLOCTEMP).[33:15]+1, 128);% AHA 09394000
|
|
MOVE(GT1,IDARRAY[0],EDOC[0,0]); 09395000
|
|
ZEROUT(IDARRAY[0],0,30); 09395500
|
|
IDARRAY[4]:=MOVEANDBLOCK(EDOC,GT1,0); %106-09396000
|
|
IDARRAY[5]~GT1; 09397000
|
|
COMMENT WRITE OUT SEGMENT DICTIONARY; 09398000
|
|
IDARRAY[0]:=MOVEANDBLOCK(SEGDICT,SGAVL,1); %106-09399000
|
|
IF BUILDLINE THEN IDARRAY[0]~IDARRAY[0]&MOVEANDBLOCK 09399100
|
|
(LDICT,SGAVL,2)[18:33:15]; %106-09399150
|
|
IDARRAY[1]~SGAVL; 09400000
|
|
COMMENT WRITE OUT PRT; 09401000
|
|
IDARRAY[2]:=MOVEANDBLOCK(PRT,PRTIMAX,3); %106-09402000
|
|
IDARRAY[3]~PRTIMAX; 09403000
|
|
COMMENT MARK FIRST EXECUTABLE SEGMENT; 09404000
|
|
IDARRAY[6]~1; 09405000
|
|
COMMENT PASS NUMBER OF FILES; 09405100
|
|
IDARRAY[7] ~ (FILENO-1)>I1[18:27:15]; 09405200
|
|
COMMENT WRITE DISK SEGMENT ZERO; 09406000
|
|
GT1:=DA; DA:=0; MOVE(30,IDARRAY[0],PRT[0,0]); %106-09407000
|
|
GT2:=MOVEANDBLOCK(PRT,30,6); DA:=GT1; %106-09407010
|
|
IF CODEFILE THEN WRITE(LINE); %106-09407020
|
|
IF SAVETIME } 0 AND ERRORCOUNT = 0THEN 09407050
|
|
LOCK(CODE,SAVE); 09407100
|
|
CLOSE(CARD,RELEASE); % RELEASE PRIMARY INPUT FILE. %119-09407200
|
|
CLOSE(TAPE,RELEASE); % RELEASE SECONDARY INPUT FILE. %119-09407300
|
|
LOCK(NEWTAPE,*); % CLOSE WITH CRUNCH. %119-09407400
|
|
IF LISTER OR NOT NOHEADING THEN 09408000
|
|
BEGIN FORMAT PAN("NUMBER OF ERRORS DETECTED =",I4,". COMPILAT"09409000
|
|
,"ION TIME = ",I5," SECONDS."X22,2A4/ 09410000
|
|
"PRT SIZE =",I4,"; TOTAL SEGMENT SIZE =",I6, 09411000
|
|
" WORDS; DISK SIZE =",I4," SEGS; NO. PGM. SEGS =", 09412000
|
|
I4/"ESTIMATED CORE STORAGE REQUIRED =",I6," WORDS.", 09413000
|
|
/"ESTIMATED AUXILIARY MEMORY REQUIRED =",I6," WORDS.", 09414000
|
|
/"NUMBER OF CARD-IMAGES PROCESSED =",F7.0); 09414100
|
|
FORMAT SERR("THERE WERE ",V8," SEQUENCE ERRORS"); 09414101
|
|
MOVECHARACTERS(4,INFO[LASTSEQROW,LASTSEQUENCE-1],0,GT1,4);09415000
|
|
MOVECHARACTERS(4,INFO[LASTSEQROW,LASTSEQUENCE-1],4,GT2,4);09416000
|
|
IF CHECKTOG THEN 09416001
|
|
WRITE(LINE[DBL] ,SERR,IF NUMSEQUENCEERRORS = 0 09416002
|
|
THEN "A" ELSE "I", IF NUMSEQUENCEERRORS = 0 09416004
|
|
THEN " NO" ELSE NUMSEQUENCEERRORS); 09416006
|
|
WRITE(LINE[DBL],PAN,ERRORCOUNT,(TIME(1)-TIME1)/60,GT1,GT2,09417000
|
|
PRTIMAX,AKKUM,IF DA{CHUNK THEN DA ELSE ((DA+CHUNK-1) 09418000
|
|
DIV CHUNK)|CHUNK,SGAVL-1,GTI1,AUXMEMREQ,CARDCOUNT); 09419000
|
|
END END END PROGRAM; 09420000
|
|
COMMENT THIS SECTION CONTAINS GENERATORS USED BY THE BLOCK ROUTINE; 10000000
|
|
COMMENT FORMATPHRASE COMPILES A PSEUDO CODE USED BY THE OBJECT TIME 10001000
|
|
FORMATING ROUTINES TO PRODUCE DESIRED I/O. THERE IS ONE 10002000
|
|
WORD OF PSEUDO CODE PRODUCED FOR EACH EDITING PHRASE. IN 10003000
|
|
ADDITION ONE WORD IS PRODUCED FOR EACH LEFT PARENTHESIS, 10004000
|
|
RIGHT PARENTHESIS, AND STROKE. EACH SIX CHARACTERS OF 10005000
|
|
STRING ALSO PRODUCES ONE WORD. IN ADDITION THERE IS ONE 10006000
|
|
EXTRA WORD FOR EACH LEFT PARENTHESIS WITH NO REPEAT PART. 10007000
|
|
THIS IS AN IMPLIED STROKE TO CONTROL END OF LINE CONDI- 10008000
|
|
TIONS. THE WORD IS BROKEN UP INTO NINE FIELDS: 10009000
|
|
S = [1:1], 10010000
|
|
REPEAT = [38:10], 10011000
|
|
SKIP = [32:6], 10012000
|
|
CODE = [2:4], 10013000
|
|
W = [6:6], 10014000
|
|
W1 = [28:4], W2 = [24:4], D1 = [20:4], D2 = [16:4], 10015000
|
|
S IS A DISTINGUISHER BETWEEN EDITING PHRASES AND OTHER 10016000
|
|
TYPE WORDS. CODE IS THE INTERNAL CODE TO DISTINGUISH 10017000
|
|
BETWEEN THE VARIOUS EDITING PHRASES OR BETWEEN THE OTHER 10018000
|
|
WORDS. GIVEN S = 1 WE HAVE: 10019000
|
|
IF CODE = 0 THEN RIGHTPAREN, 10020000
|
|
IF CODE = 2 THEN STRING, 10021000
|
|
IF CODE = 4 THEN LEFTPAREN, 10022000
|
|
IF CODE = 6 THEN STROKE, 10023000
|
|
IF CODE = 8 THEN SCALE. 10023100
|
|
GIVEN S = 0 WE HAVE 10024000
|
|
IF CODE = 0 THEN D, 10025000
|
|
IF CODE=1 THEN T, 10025010
|
|
IF CODE = 2 THEN X, 10026000
|
|
IF CODE = 4 THEN A, 10027000
|
|
IF CODE = 6 THEN I, 10028000
|
|
IF CODE = 8 THEN F, 10029000
|
|
IF CODE =10 THEN E, 10030000
|
|
IF CODE = 11 THEN U, 10030100
|
|
IF CODE =12 THEN O, 10031000
|
|
IF CODE = 13 THEN V, 10031100
|
|
IF CODE =14 THEN L, 10032000
|
|
IF CODE = 15 THEN R, 10032100
|
|
W IS THE FIELD WIDTH. 10033000
|
|
FOR STRINGS [12:36] IS W CHARACTORS OF ALPHA, RIGHT 10034000
|
|
ADJUSTED. THE REST OF THE FIELDS ARE MEANINGLESS. 10035000
|
|
REPEAT IS THE REPEAT FIELD - FOR LEFTPARENS WITH NO 10036000
|
|
REPEAT FIELD, REPEAT = 0. FOR RIGHTPARENS, REPEAT TELLS 10037000
|
|
HOW MANY WORDS BACK THE CORRESPONDING LEFTPAREN IS. 10038000
|
|
IMPLIED STROKES ARE DISTINGUISHED FROM VISIBLE STROKES BY 10039000
|
|
A NON-ZERO REPEAT FIELDS. 10040000
|
|
THE DESCRIPTION OF W1,W2, D1, AND D2 APPLIES ONLY TO 10041000
|
|
FORMATING TYPES. FOR THE PURPOSES OF DESCRIPTION LET 10042000
|
|
D BE THE DECIMAL PART. W IS, OF COURSE, THE WIDTH, 10043000
|
|
THEN FOR D, W1=W2=D1=D2=SKIP=0. 10044000
|
|
FOR X, W = SKIP = WIDTH MOD 64 AND W1 = WIDTH DIV 64. 10045000
|
|
W2 = D1 = D2 =0. 10046000
|
|
FOR T, W=(WIDTH-1) MOD 64, W1=(WIDTH-1) DIV 64, AND 10046010
|
|
W2=D1=D2=0. 10046020
|
|
FOR A, W1 = W, SKIP = 0 IF W < 6, OTHERWISE 10047000
|
|
W1 = 6, SKIP = W-6, W2=D1=D2=0. 10048000
|
|
FOR I: SKIP = IF W > 16 THEN W-16 ELSE 0. 10049000
|
|
IF W > 8 THEN W1 = 8, W2 = W-SKIP-8. 10050000
|
|
IF W < 8 THEN W1 = W, W2 = 0, ALWAYS D1=D2=0. 10051000
|
|
FOR F IF D < 8 THEN D1 = D, D2=0, 10052000
|
|
IF D > 8 THEN D1 = 8, D2=D-8, 10053000
|
|
IF D >16 THEN ERROR. 10054000
|
|
IF W-D-1 > 16 THEN SKIP = W-D-17, OTHERWISE 10055000
|
|
SKIP=0. 10056000
|
|
IF W-D-1 > 8 THEN W1=8, W2=W-D-1-SKIP-8, 10057000
|
|
IF W-D-1 < 8 THEN W1=W-D-1,W2=0. 10058000
|
|
FOR E D1 AND D2 ARE CALCULATED AS IN F EXCEPT THAT WE 10059000
|
|
D+1 FOR D, SKIP = W-D-6, W1=W2=0. 10060000
|
|
FOR O, W1=W2=D1=D2=SKIP=0, 10061000
|
|
FOR L, W2=D1=D2=0, IF W > 5 THEN W1=5 ELSE W1 = W, 10062000
|
|
SKIP = W-W1, 10063000
|
|
FOR U: SKIP = W1 = W2 = D1 = D2 = 0. 10063100
|
|
FOR B: SEE U-PHRASE DESCRIPTION. 10063110
|
|
FOR R: SEE ABOVE F-PHRASE DESCRIPTION. 10063200
|
|
FOR V: SKIP = W1 = W2 = UNSET, D1,D2 AS IN ABOVE 10063300
|
|
F-PHRASE DESCRIPTION. 10063400
|
|
FORMATPHRASE USES RECURSION TO DO ANALYSIS OF SYNTAX. THE10064000
|
|
WORDS ARE GENERATED AND PLACED DIRECTLY INTO THE CODE 10065000
|
|
BUFFER. FORMATPHRASE IS A BOOLEAN PROCEDURE WHICH REPORTS10066000
|
|
IF IT NOTICES AN ERROR; 10067000
|
|
PROCEDURE WHIPOUT(W); VALUE W; REAL W; 10068000
|
|
BEGIN 10069000
|
|
10070000
|
|
MOVE(1,W,EDOC[F.[38:3],F.[41:7]]); 10071000
|
|
IF DEBUGTOG 10072000
|
|
THEN BEGIN 10073000
|
|
DEBUGWORD(B2D(F),W,LIN); 10074000
|
|
WRITELINE END; 10075000
|
|
IF (F~F+1) > 1024 THEN FLAG(307); 10076000
|
|
10077000
|
|
10078000
|
|
10079000
|
|
10080000
|
|
10081000
|
|
END WHIPOUT; 10082000
|
|
BOOLEAN PROCEDURE FORMATPHRASE; 10083000
|
|
BEGIN 10084000
|
|
LABEL EL,EX,EXIT,L1,L2,L3; 10085000
|
|
PROCEDURE EMITFORMAT(S,CODE,REPEAT,SKIP,W,W1,W2,D1,D2); 10086000
|
|
VALUE S,CODE,REPEAT,SKIP,W,W1,W2,D1,D2 ; 10087000
|
|
REAL CODE,REPEAT,SKIP,W,W1,W2,D1,D2 ; 10088000
|
|
BOOLEAN S; 10089000
|
|
BEGIN IF W > 63 THEN FLAG(163); 10090000
|
|
W ~ REPEAT & W [ 6:42:6] 10091000
|
|
& SKIP [32:42:6] 10092000
|
|
& W1 [28:44:4] 10093000
|
|
& W2 [24:44:4] 10094000
|
|
& D1 [20:44:4] 10095000
|
|
& D2 [16:44:4] 10096000
|
|
& CODE [ 2:44:4] 10097000
|
|
& REAL(S) [ 1:47:1]; 10098000
|
|
WHIPOUT(W) END EMITFORMAT; 10099000
|
|
STREAM PROCEDURE PACKALPHA(PLACE,LETTER,CTR); 10100000
|
|
VALUE LETTER, CTR; 10101000
|
|
BEGIN DI ~ PLACE; DS ~ LIT "B"; 10102000
|
|
SI ~ LOC CTR; SI ~ SI+7; DS ~ CHR; 10103000
|
|
SI ~ PLACE; SI ~ SI+3; DS ~ 5 CHR; 10104000
|
|
SI ~ LOC LETTER; SI ~ SI+7; DS ~ CHR END PACKALPHA; 10105000
|
|
INTEGER REPEAT,SKIP,W,W1,W2,D1,D2,CODE; BOOLEAN S; 10106000
|
|
DEFINE RRIGHT = 0#, 10107000
|
|
RLEFT = 4#, 10108000
|
|
RSTROKE = 6#; 10109000
|
|
DEFINE RSCALE = 8 #, RU = 11 #, RV = 13 #, RR = 15 # ; 10109500
|
|
DEFINE RD = 0#, RX = 2#, RA = 4#, RI = 6#, 10110000
|
|
RT=1 #, 10110010
|
|
RF = 8#, RE = 10#, RO = 12#, RL = 14#; 10111000
|
|
IF ELCLASS < 0 THEN BEGIN REPEAT ~ -ELCLASS;NEXTENT; 10112000
|
|
IF ELCLASS="," OR ELCLASS=")" THEN GO EX END 10112100
|
|
ELSE BEGIN REPEAT:=REAL(ELCLASS!"<"); 10113000
|
|
IF ELCLASS="*" THEN BEGIN REPEAT.[12:1]~1; 10113100
|
|
NEXTENT; 10113200
|
|
END END; 10113300
|
|
IF ELCLASS="(" OR ELCLASS="<" 10114000
|
|
THEN BEGIN 10115000
|
|
SKIP ~ F; 10116000
|
|
EMITFORMAT(TRUE,RLEFT,REPEAT,1,0,0,0,0,0); 10117000
|
|
DO BEGIN NEXTENT; 10118000
|
|
EL: IF FORMATPHRASE THEN GO TO EX END 10119000
|
|
UNTIL ELCLASS ! ","; 10120000
|
|
WHILE ELCLASS = "/" 10121000
|
|
DO BEGIN EMITFORMAT(TRUE,RSTROKE,0,1,0,0,0,0,0); 10122000
|
|
NEXTENT END; 10123000
|
|
IF ELCLASS ! ")" AND ELCLASS ! ">" 10124000
|
|
THEN GO TO EL; 10124100
|
|
IF LASTELCLASS = "," THEN GO TO EX; 10124200
|
|
IF REPEAT = 0 THEN 10125000
|
|
EMITFORMAT(TRUE,RSTROKE,1,0,0,0,0,0,0); 10126000
|
|
REPEAT~F-SKIP; F~SKIP; 10127000
|
|
WHIPOUT(EDOC[F.[38:3],F.[41:7]]&REPEAT[28:38:10]); 10127100
|
|
F~SKIP+REPEAT; S~TRUE; CODE~RRIGHT END 10127200
|
|
ELSE IF ELCLASS = "O" 10128000
|
|
THEN BEGIN CODE~RO; W~8 END 10129000
|
|
ELSE IF ELCLASS = "D" 10130000
|
|
THEN BEGIN CODE~RD; W~8 END 10131000
|
|
ELSE IF ELCLASS = "," THEN GO TO L2 10132000
|
|
ELSE IF ELCLASS = "/" THEN GO TO EXIT 10133000
|
|
ELSE IF ELCLASS=")" OR ELCLASS=">" THEN 10134000
|
|
IF LASTELCLASS="," THEN GO EX ELSE GO EXIT 10134100
|
|
ELSE IF ELCLASS = "S" THEN 10134500
|
|
BEGIN 10134510
|
|
NEXTENT; 10134520
|
|
W ~ IF ELCLASS = "-" THEN 1 ELSE 0; 10134530
|
|
IF ELCLASS="+" OR ELCLASS="-" THEN NEXTENT; 10134540
|
|
IF ELCLASS="*" THEN REPEAT.[12:1]~1 ELSE 10134545
|
|
IF ELCLASS > 0 THEN BEGIN ERR(136); 10134550
|
|
GO TO EXIT 10134560
|
|
END 10134570
|
|
ELSE REPEAT ~ - ELCLASS; 10134580
|
|
EMITFORMAT(TRUE,RSCALE,REPEAT,0,W,0,0,0,0); 10134590
|
|
GO TO L2 10134600
|
|
END 10134610
|
|
ELSE IF ELCLASS = """ 10135000
|
|
THEN BEGIN 10136000
|
|
IF REPEAT ! 1 THEN FLAG(136); 10136500
|
|
CODE ~ 100; 10137000
|
|
DO BEGIN 10138000
|
|
SKIP ~ 1; 10139000
|
|
DO BEGIN RESULT ~ 5; COUNT ~ 0; SCANNER; 10140000
|
|
IF ELCLASS ~ ACCUM[1].[18:6] = CODE 10141000
|
|
THEN BEGIN 10142000
|
|
IF SKIP ! 1 THEN WHIPOUT(W); 10143000
|
|
GO TO L2 END; 10144000
|
|
CODE ~ """; 10145000
|
|
PACKALPHA(W,ELCLASS,SKIP); 10146000
|
|
END UNTIL SKIP ~ SKIP+1 = 7; 10147000
|
|
WHIPOUT(W) 10148000
|
|
END UNTIL FALSE END 10149000
|
|
ELSE BEGIN CODE~ELCLASS; 10150000
|
|
IF CODE = "U" OR CODE = "B" THEN 10150100
|
|
BEGIN %%% ALL OF COMPILER CODE TO HANDLE U-PHRASE. 10150110
|
|
NEXTENT ; 10150120
|
|
SKIP ~ 0 ; 10150125
|
|
IF ELCLASS = "*" OR ELCLASS { 0 THEN 10150130
|
|
BEGIN %%% PHRASE IS AT LEAST UW OR U*. 10150135
|
|
IF ELCLASS = "*" THEN REPEAT.[13:1] ~ 1 10150140
|
|
ELSE W ~ -ELCLASS ; 10150145
|
|
NEXTENT ; 10150150
|
|
IF ELCLASS = "." THEN 10150155
|
|
BEGIN %%% PHRASE IS AT LEAST UW. OR U*.. 10150160
|
|
NEXTENT ; 10150165
|
|
IF ELCLASS = "*" OR ELCLASS { 0 THEN 10150170
|
|
BEGIN %%% PHRASE IS UW<OR>*.D<OR>*. 10150175
|
|
IF ELCLASS = "*" THEN REPEAT.[14:1]~1 10150185
|
|
ELSE SKIP ~ -ELCLASS ; 10150190
|
|
NEXTENT ; 10150195
|
|
END 10150200
|
|
ELSE GO TO EX 10150205
|
|
END 10150210
|
|
END 10150215
|
|
ELSE W ~-63 ; %%% PHRASE IS D. 10150220
|
|
EMITFORMAT(FALSE,RD,REPEAT,SKIP,W,REAL(CODE="B"), 10150225
|
|
REAL(W<0),0,0) ; 10150230
|
|
GO TO EXIT ; 10150260
|
|
END OF U PHRASE HANDLER ; 10150270
|
|
IF GETINT THEN BEGIN W~11; REPEAT.[13:1]~1 END 10150280
|
|
ELSE ELCLASS := -(W := ELCLASS); 10150290
|
|
IF CODE = "I" 10151000
|
|
THEN BEGIN 10152000
|
|
SKIP ~ DIVIDE(W,W1,W2); CODE ~ RI END 10153000
|
|
ELSE IF CODE = "F" 10154000
|
|
THEN BEGIN CODE ~ RF; GO TO L1 END 10155000
|
|
ELSE IF CODE = "R" THEN BEGIN CODE ~ RR; GO TO L1 END 10155500
|
|
ELSE IF CODE = "E" 10156000
|
|
THEN BEGIN CODE ~ RE; D1~1; 10157000
|
|
L1: NEXTENT; 10158000
|
|
IF ELCLASS!"." THEN GO EX; 10159000
|
|
IF GETINT THEN BEGIN ELCLASS~3; REPEAT.[14:1]~1 END; 10159100
|
|
IF DIVIDE(ELCLASS+D1,D1,D2) > 0 THEN GO TO EX; 10160000
|
|
IF CODE = RF OR CODE = RR THEN 10161000
|
|
SKIP ~ DIVIDE(W-ELCLASS-1,W1,W2) 10161500
|
|
ELSE IF SKIP ~ W-ELCLASS-6 < 0 THEN GO TO EX END 10162000
|
|
ELSE IF CODE = "X" 10163000
|
|
THEN BEGIN CODE ~ RX; W1 ~ W.[38:4]; 10164000
|
|
SKIP ~ W ~ W.[42:6] END 10165000
|
|
ELSE IF CODE="T" THEN IF W~ABS(W)-1<0 THEN FLAG(136) 10165500
|
|
ELSE BEGIN CODE~RT; W1~W.[38:4]; W~W.[42:6] END 10165505
|
|
ELSE IF CODE = "A" 10166000
|
|
THEN BEGIN CODE ~ RA; W1 ~6; GO TO L3 END 10167000
|
|
ELSE IF CODE="V" THEN 10167100
|
|
BEGIN CODE ~ RV ; 10167200
|
|
COUNT~ACCUM[1]~0; 10167300
|
|
IF EXAMIN(NCR)=" " THEN 10167400
|
|
BEGIN RESULT~7; SCANNER END; 10167500
|
|
IF EXAMIN(NCR)="." THEN 10167600
|
|
BEGIN NEXTENT; 10167700
|
|
IF GETINT THEN REPEAT.[14:1]~1 ELSE 10167800
|
|
GT1~DIVIDE(ELCLASS,D1,D2); 10167900
|
|
ELCLASS :=-ELCLASS; 10167910
|
|
END; END ELSE IF CODE="L" 10168000
|
|
THEN BEGIN CODE ~ RL; W1 ~ 5; 10169000
|
|
L3: IF W<W1 THEN W1~W; SKIP ~ W-W1 END ELSE GO EX END; 10170000
|
|
EMITFORMAT(S,CODE,REPEAT,SKIP,W,W1,W2,D1,D2); 10171000
|
|
L2: NEXTENT; GO TO EXIT; 10172000
|
|
EX: FORMATPHRASE ~ TRUE; ERR(136); 10173000
|
|
EXIT: END FORMATPHRASE; 10174000
|
|
COMMENT GETINT DOES A CALL ON NEXTENT AND CHECKS TO SEE IF AN INTEGER 10175000
|
|
WAS THE RESULT: IF NOT ERROR - OTHERWISE MAKE SIGN PLUS; 10176000
|
|
BOOLEAN PROCEDURE GETINT; 10177000
|
|
BEGIN NEXTENT; IF ELCLASS ~ - ELCLASS < 0 THEN 10178000
|
|
IF ELCLASS=-("*") THEN GETINT~TRUE ELSE 10178100
|
|
BEGIN FLAG(137); ELCLASS ~ 0 END 10179000
|
|
END GETINT; 10180000
|
|
COMMENT DIVIDE PARTIONS THE PARAMETER NUMBER INTO THREE PARTS. THE 10181000
|
|
RESULT IS PASSED BACK THROUGH P1,P2, AND THE FUNCTION 10182000
|
|
IDENTIFIER. SEE CODE FOR DETAILS; 10183000
|
|
INTEGER PROCEDURE DIVIDE(NUMBER,P1,P2); 10184000
|
|
VALUE NUMBER; INTEGER P1,P2,NUMBER; 10185000
|
|
BEGIN 10186000
|
|
IF NUMBER < 0 THEN BEGIN FLAG(138); ERRORTOG~TRUE; 10187000
|
|
NUMBER ~ 0 END; 10188000
|
|
P1 ~ IF NUMBER < 8 THEN NUMBER ELSE 8; 10189000
|
|
NUMBER ~ NUMBER-P1; 10190000
|
|
P2 ~ IF NUMBER < 8 THEN NUMBER ELSE 8; 10191000
|
|
DIVIDE ~ NUMBER-P2 END DIVIDE; 10192000
|
|
COMMENT DEFINEGEN PACKS THE ALPHA FOR A DEFINE INTO INFO. DEFINEGEN 10193000
|
|
PRINCIPALLY ELIMINATES BLANKS AND COMMENTS. PUTOGETHER 10194000
|
|
ACTUALLY DOES THE MECHANICAL WORK OF PROCESSING THE 10195000
|
|
CHARACTORS FROM ACCUM TO INFO. THE FINAL TRANSFER IS DONE10196000
|
|
IN PACKINFO. THE OTHER FUNCTION SERVED BY DEFINEGEN IS 10197000
|
|
THAT OF COUNTING DEFINES AND CROSSHATCHES IN ORDER TO 10198000
|
|
ALLOW NESTED DEFINES. 10199000
|
|
A WORD ON THE OVERALL PLAN OF ATTACK ON HANDLEING 10200000
|
|
DEFINES: 10201000
|
|
THERE ARE FOUR PLACES THAT THERE IS CODE WRITTEN 10202000
|
|
EXPLICITLY FOR THE DEFINE. 10203000
|
|
FIRST IS DEFINEGEN WHICH LOADS THE ALPHA INTO INFO. 10204000
|
|
SECOND IS IN THE TABLE ROUTINE AFTER A DEFINED ID IS 10205000
|
|
NOTICED. HERE A SETUP IS PERFORMED SO THAT THE SCANNER 10206000
|
|
WILL SCAN INFO. SINCE INFO (UNLIKE I/O BUFFERS) IS NOT 10207000
|
|
A SAVE ARRAY, WE CAN NOT DIRECTLY SCAN INFO. INSTEAD WE 10208000
|
|
FOOL READACARD SO THAT THE ALPHA IS FETCHED FROM INFO AND 10209000
|
|
PLACED INTO A SMALL SAVE ARRAY (DEFINEARRAY) INSTEAD OF 10210000
|
|
BEING FETCHED FROM AN I/O DEVICE. NATURALLY WE MUST HAVE 10211000
|
|
NESTING WHICH IS OBTAINED BY USING DEFINEARRAY AS A SMALL 10212000
|
|
STACK. THE QUANTITIES SAVED ARE LCR,NCR, AND LASTUSED. 10213000
|
|
LASTUSED DOUBLES AS A DEVICE FOR DIRECTING THE FLOW OF 10214000
|
|
INFORMATION FROM I/O GEAR AND FROM INFO DURING ANALYSIS OF10215000
|
|
DEFINES. THIS STACKING IS DONE HERE BY THE TABLE ROUTINE.10216000
|
|
THIRD IS READACARD WHICH HAS NOW BEEN FAIRLY WELL 10217000
|
|
DESCRIBED. THE ONLY ADDITIONAL COMMENT NECESSARY IS THAT 10218000
|
|
LASTUSED SERVES AS AN INDEX TO FETCH NEXT WORD OF ALPHA 10219000
|
|
FROM INFO. READACARD FETCHES ONLY ONE WORD AT A TIME. 10220000
|
|
FOURTH IS ALSO IN THE TABLE ROUTINE. IT IS AT THE 10221000
|
|
PLACE THAT A CROSSHATCH IS NOTICED. IT CAUSES AN UNSETUP 10222000
|
|
SO THAT THE SCANNER WILL STOP SCANNING THAT PART OF INFO 10223000
|
|
AND RESUME ITS PREVIOUS TASKS. A DISTINCTION IS MADE 10224000
|
|
BETWEEN CROSSHATCHES SCANNED AFTER A DEFINE DECLARATION 10225000
|
|
AND THOSE SCANNED DURING THE RECALL PROCESS. THE LATER 10226000
|
|
ONLY CAUSES AN UNSETUP; 10227000
|
|
PROCEDURE DEFINEGEN(MACRO,J); VALUE MACRO,J; BOOLEAN MACRO; REAL J; 10228000
|
|
BEGIN 10229000
|
|
OWN INTEGER CHARCOUNT, REMCOUNT; 10230000
|
|
COMMENT CHARCOUNT CONTAINS NUMBER OFCHARACTORS OF THE DEFINE THAT WE10231000
|
|
HAVE PUT INTO INFO. REMCOUNT CONTAINS NUMBER OF CHARACT- 10232000
|
|
ORS REMAINING IN THIS ROW OF INFO; 10233000
|
|
PROCEDURE PUTOGETHER(CHAR); REAL CHAR; 10234000
|
|
BEGIN 10235000
|
|
STREAM PROCEDURE PACKINFO(INFO,ISKIP,COUNT,ASKIP,ACCUM); 10236000
|
|
VALUE ISKIP,COUNT,ASKIP; 10237000
|
|
BEGIN DI ~ INFO; DI ~ DI+ISKIP; 10238000
|
|
SI ~ ACCUM;SI ~ SI+ASKIP; SI ~ SI+3; 10239000
|
|
DS ~ COUNT CHR END PACKINFO; 10240000
|
|
INTEGER COUNT,SKIPCOUNT; 10241000
|
|
IF (COUNT ~ CHAR.[12:6]) + CHARCOUNT > 2047 10242000
|
|
THEN BEGIN FLAG(142); TB1~ TRUE END 10243000
|
|
ELSE BEGIN 10244000
|
|
IF COUNT > REMCOUNT 10245000
|
|
THEN BEGIN 10246000
|
|
SKIPCOUNT ~ COUNT-(COUNT~REMCOUNT); 10247000
|
|
REMCOUNT ~ 2048 END 10248000
|
|
ELSE REMCOUNT ~ REMCOUNT-COUNT; 10249000
|
|
GT1 ~ CHARCOUNT DIV 8 + NEXTTEXT; 10250000
|
|
PACKINFO(TEXT[GT1.LINKR,GT1.LINKC], CHARCOUNT.[45:3],10251000
|
|
COUNT,0,CHAR); 10252000
|
|
IF SKIPCOUNT ! 0 THEN 10253000
|
|
PACKINFO(TEXT[NEXTTEXT.LINKR+1,0],0,SKIPCOUNT, 10254000
|
|
COUNT,CHAR); 10255000
|
|
CHARCOUNT ~ CHARCOUNT+SKIPCOUNT+COUNT END 10256000
|
|
END PUTOGETHER; 10257000
|
|
INTEGER LASTRESULT; 10258000
|
|
REAL K,N,ELCLASS; 10258100
|
|
DEFINE I=NXTELBT#; 10258200
|
|
LABEL FINAL,PACKIN; 10258300
|
|
LABEL BACK,SKSC,EXIT; 10259000
|
|
REAL DINFO; 10259200
|
|
BOOLEAN TSSTREAMTOG; % 1289 10259400
|
|
DINFO ~ J.[18:15]; 10259600
|
|
J ~ J.[33:15]; 10259700
|
|
TB1~ FALSE; 10260000
|
|
TSSTREAMTOG~ STREAMTOG; % 1289 10260050
|
|
STREAMTOG~TRUE; 10260100
|
|
CHARCOUNT ~ 0; 10261000
|
|
DEFINECTR ~ 1; LASTRESULT ~ 2; 10262000
|
|
REMCOUNT ~ (256-NEXTTEXT.LINKC)|8; 10263000
|
|
K~0; 10263200
|
|
BACK: STOPDEFINE~TRUE; 10263300
|
|
ELCLASS~TABLE(NXTELBT); 10263400
|
|
SKSC: NXTELBT~NXTELBT-1; 10263500
|
|
IF MACRO THEN 10263600
|
|
BEGIN IF ELCLASS=COMMA THEN 10263700
|
|
IF K=0 THEN 10263800
|
|
FINAL: BEGIN PUTOGETHER("1#0000"); GO TO EXIT END 10263900
|
|
ELSE GO PACKIN; 10264000
|
|
IF ELCLASS=LEFTPAREN OR ELCLASS=LFTBRKET THEN 10264100
|
|
BEGIN K~K+1; GO TO PACKIN END; 10264200
|
|
IF ELCLASS=RTPAREN OR ELCLASS=RTBRKET THEN 10264300
|
|
IF K~K-1<0 THEN GO FINAL ELSE GO PACKIN; 10264400
|
|
IF ELCLASS=SEMICOLON THEN 10264410
|
|
BEGIN FLAG(142); GO TO FINAL END ELSE GO PACKIN 10264420
|
|
END; 10264500
|
|
IF RESULT = 1 THEN IF J ! 0 THEN 10264600
|
|
FOR N ~ 1 STEP 1 UNTIL J DO 10264650
|
|
BEGIN 10264700
|
|
IF EQUAL(ACCUM[1].[12:6]+3, ACCUM[1], 10264750
|
|
DEFINFO[(N-1)|10]) THEN 10264760
|
|
BEGIN 10264800
|
|
DEFINEPARAM(DINFO+1, N); 10264810
|
|
GO PACKIN; 10264820
|
|
END; 10264830
|
|
END; 10264900
|
|
PACKIN: 10264910
|
|
IF RESULT = 4 10265000
|
|
THEN BEGIN 10266000
|
|
COMMENT INSERT " MARKS - 2130706432 IS DECIMAL FOR 1"0000; 10267000
|
|
PUTOGETHER(2130706432); 10268000
|
|
PUTOGETHER(ACCUM[1]); 10269000
|
|
PUTOGETHER(2130706432) END 10270000
|
|
ELSE BEGIN 10271000
|
|
IF BOOLEAN(RESULT) AND BOOLEAN(LASTRESULT) 10272000
|
|
THEN PUTOGETHER("1 0000"); COMMENT INSERT BLANK; 10273000
|
|
PUTOGETHER(ACCUM[1]) END; 10274000
|
|
IF TB1 THEN GO TO EXIT; 10275000
|
|
LASTRESULT ~ RESULT; 10276000
|
|
IF MACRO THEN GO BACK; 10276500
|
|
IF ELCLASS=DECLARATORS AND ELBAT[I].ADDRESS = DEFINEV10277000
|
|
THEN BEGIN DEFINECTR ~ DEFINECTR+1; GO BACK END; 10278000
|
|
IF ELCLASS ! CROSSHATCH THEN GO BACK; 10279000
|
|
IF DEFINECTR ! 1 10280000
|
|
THEN BEGIN STOPDEFINE ~ TRUE; 10281000
|
|
IF ELCLASS~TABLE(I)!COMMA THEN 10282000
|
|
DEFINECTR~DEFINECTR-1; GO SKSC END; 10283000
|
|
EXIT: DEFINECTR := 0; STREAMTOG~TSSTREAMTOG; % 1289 10284000
|
|
NEXTTEXT ~ (CHARCOUNT+7) DIV 8 + NEXTTEXT; 10285000
|
|
END DEFINEGEN; 10286000
|
|
COMMENT LISTELEMENT IS RESPONSIBLE FOR THE GENERATION OF CODE FOR LIST10287000
|
|
ELEMENTS; 10288000
|
|
PROCEDURE LISTELEMENT; 10289000
|
|
BEGIN 10290000
|
|
REAL T1,T2,T3; 10291000
|
|
LABEL BOOFINISH,STORE,LRTS; 10292000
|
|
DIALA ~ DIALB ~ 0; 10293000
|
|
IF ELCLASS= FORV THEN FORSTMT COMMENT FORCLAUSE; 10294000
|
|
ELSE IF ELCLASS = LFTBRKET 10295000
|
|
THEN BEGIN COMMENT GORUP OF LIST ELEMENTS; 10296000
|
|
DO BEGIN STEPIT; LISTELEMENT END UNTIL ELCLASS!COMMA;10297000
|
|
IF ELCLASS = RTBRKET THEN STEPIT ELSE ERR(158) END 10298000
|
|
ELSE BEGIN COMMENT THE MEAT OF THE MATTER: 10299000
|
|
VARIABLES AND EXPRESSIONS; 10300000
|
|
L ~ (T1~L)+1; COMMENT SAVE L FOR LATER FIXUP; 10301000
|
|
EMITPAIR(LSTRTN,STD); COMMENT PREPARE LSTRTN FOR 10302000
|
|
NEXT TIME AROUND; 10303000
|
|
IF(GT1 ~ TABLE(I+1) = COMMA 10304000
|
|
OR GT1 = RTPAREN 10305000
|
|
OR GT1 = RTBRKET) 10306000
|
|
AND ELCLASS } BOOID AND ELCLASS { INTID 10307000
|
|
THEN BEGIN COMMENT SIMPLE VARIABLES; 10308000
|
|
CHECKER(ELBAT[I]); 10308100
|
|
EMITN(ELBAT[I].ADDRESS); STEPIT END 10309000
|
|
ELSE BEGIN IF ELCLASS } BOOARRAYID 10310000
|
|
AND ELCLASS { INTARRAYID 10311000
|
|
THEN BEGIN COMMENT IS EITHER A SUBCRIPTED VARIABLE 10312000
|
|
OR THE BEGINNING OF AN EXPRESSION. THIS10313000
|
|
SITUATION IS VERY SIMILAR TO THAT IN 10314000
|
|
ACTUALPARAPART (SEE COMMENTS THERE FOR 10315000
|
|
FURTHER DETAILS); 10316000
|
|
T2 ~ FL; T3 ~ ELCLASS; VARIABLE(T2); 10317000
|
|
IF TABLE(I-2)=FACTOP AND TABLE(I-1)=RTBRKET THEN ERR(157);10318000
|
|
IF ELCLASS = COMMA OR 10319000
|
|
ELCLASS = RTPAREN OR 10320000
|
|
ELCLASS = RTBRKET THEN 10321000
|
|
IF T2 = 0 THEN GO TO STORE ELSE GO TO LRTS; 10322000
|
|
IF T3 = BOOARRAYID THEN GO TO BOOFINISH; 10323000
|
|
SIMPARITH; 10324000
|
|
IF ELCLASS = RELOP THEN BEGIN RELATION; 10325000
|
|
BOOFINISH: SIMPBOO END END 10326000
|
|
ELSE IF EXPRSS = DTYPE THEN ERR(156); 10327000
|
|
STORE: EMITPAIR(JUNK,STD); EMITN(JUNK) END; 10328000
|
|
LRTS: EMITO(RTS); CONSTANTCLEAN; 10329000
|
|
T2 ~ L; L ~ T1; EMITNUM(T2-LSTR); L~T2 END END LSTELMT; 10330000
|
|
COMMENT LISTGEN COMPILES ALL THE CODE FOR A LIST. LISTGEN CALLS 10331000
|
|
LISTELEMENT WHICH IS RESPONSIBLE FOR EACH INDIVIDUAL 10332000
|
|
LIST ELEMENT. LIST ELEMENT ALSO TAKES CARE TO GENERATE 10333000
|
|
CODE WHICH UPDATES LSTRTN AFTER EACH CALL ON THE LIST. 10334000
|
|
LISTGEN GENERATES THE CHANGING OF LSTRTN TO -1, THE END 10335000
|
|
FLAG FOR A LIST, THE CODE TO JUMP AROUND THE LIST, 10336000
|
|
THE INITIAL JUMP OF THE LIST, THE OBTAINING OF A PRT CELL 10337000
|
|
FOR THE LIST, THE OBTAINING OF AN ACCIDENTAL PROGRAM 10338000
|
|
DESCRIPTOR, THE STUFFING OF F INTO THIS DESCRIPTOR, 10339000
|
|
LISTGEN EXPECTS I TO POINT AT FIRST LIST ELEMENT AND 10340000
|
|
LEAVES I POINTING AT FIRST ITEM BEYOND RIGHTPAREN. THE 10341000
|
|
VALUE RETURNED BY LISTGEN IS THE LOCATION OF THE 10342000
|
|
ACCIDENTAL ENTRY DESCRIPTOR IN THE PRT; 10343000
|
|
REAL PROCEDURE LISTGEN; 10344000
|
|
BEGIN 10345000
|
|
INTEGER JUMPLACE,LISTPLACE; 10346000
|
|
JUMPLACE ~ BAE; 10347000
|
|
LISTGEN ~ LISTPLACE ~ PROGDESCBLDR(0,L,0); 10348000
|
|
COMMENT BUILDS ACCIDENTAL ENTRY FOR LIST; 10349000
|
|
EMITV(LSTRTN); EMITO(BFW); LSTR ~ L; 10350000
|
|
COMMENT INITIAL JUMP OF A LIST; 10351000
|
|
LISTMODE ~ TRUE; 10352000
|
|
COMMENT CAUSES FORSTMT TO RECOGNIZE THAT WE ARE COMPILING LISTS; 10353000
|
|
I~I-1; 10354000
|
|
DO BEGIN 10355000
|
|
STEPIT; 10356000
|
|
LISTELEMENT 10357000
|
|
END UNTIL ELCLASS ! COMMA; 10358000
|
|
EMITL(1); EMITO(CHS); 10359000
|
|
EMITPAIR(LSTRTN,SND); 10360000
|
|
EMITO(RTS); 10361000
|
|
COMMENT SET END FLAG OF -1; 10362000
|
|
CONSTANTCLEAN; 10363000
|
|
DIALA ~ DIALB ~ 0; 10364000
|
|
LISTMODE ~ FALSE; 10365000
|
|
ADJUST; 10365100
|
|
EMITB(BFW,JUMPLACE,L); 10366000
|
|
STUFFF(LISTPLACE); 10367000
|
|
IF ELCLASS ! RTPAREN THEN ERR(104) ELSE STEPIT 10368000
|
|
END LISTGEN; 10369000
|
|
BOOLEAN PROCEDURE MERRIMAC; 10370000
|
|
BEGIN COMMENT THIS TIME THE MERRIMAC WILL HANDLE THE MONITOR. 10371000
|
|
03 JULY 1963 10372000
|
|
THERE ARE SIX TYPES OF MONITOR LIST ELEMENTS. THEY ARE 10373000
|
|
LABELS, SWITCHES, SIMPLE VARIABLES, SUBSCRIPTED VARIABLES,10374000
|
|
ARRAYS, AND FUNCTION DESIGNATORS. 10375000
|
|
WITH ONE EXCEPTION, THE MERRIMAX ROUTINES ONLY FUNCTION 10376000
|
|
IS TO SAVE INFORMATION SO THAT OTHER ROUTINES, SUCH AS THE10377000
|
|
VARIABLE ROUTINE, CAN GENERATE THE ACTUAL CODE THAT CALLS 10378000
|
|
THE PRINTI ROUTINE AT OBJECT TIME. THE ONE EXCEPTION IS 10379000
|
|
THE CASE OF A SUBSCRIPTED VARIABLE WITH AN EXPRESSION FOR 10380000
|
|
A SUBSCRIPT. THE CODE FOR THE EXPRESSION IS GENERATED, AN10381000
|
|
ACCIDENTAL ENTRY PROGRAM DESCRIPTOR IS CREATED, AND THE 10382000
|
|
ADDRESS OF THE DESCRIPTOR IS REMEMBERED. 10383000
|
|
THE PRINTI ROUTINE IS AN INTRINSIC WHICH PRINTS THE 10384000
|
|
INFORMATION IT RECEIVES ACCORDING TO A SPECIFIED FORMAT 10385000
|
|
FOR BOTH MONITORING AND DUMPING. THE FOLLOWING CHART 10386000
|
|
EXPLAINS THE VARIOUS ACTIONS TAKEN BY THE PRINTI ROUTINE 10387000
|
|
AND THE PARAMETERS THAT MUST BE PASSED FOR THE FIVE 10388000
|
|
POSSIBLE CALLS ON PRINTI. 10389000
|
|
ID IS DEFINED TO MEAN THE FIRST SEVEN CHARACTERS OF 10390000
|
|
THE IDENTIFIER TO BE PRINTED. 10391000
|
|
N IS DEFINED TO MEAN THE NUMBER OF DIMENSIONS OF AN 10392000
|
|
ARRAY OR SUBSCRIPTED VARIABLE. 10393000
|
|
V IS DEFINED TO MEAN THE VALUE TO BE PRINTED. 10394000
|
|
S1---SN IS DEFINED TO MEAN THE SUBSCRIPT TO BE 10395000
|
|
PRINTED. 10396000
|
|
S1*---SN* IS DEFINED TO MEAN THE SUBSCRIPT TO BE 10397000
|
|
MONITORED. PRINTI COMPARES SN* TO SN AND PRINTS 10398000
|
|
ONLY IF THEY ARE EQUAL. 10399000
|
|
FORMAT TYPE MONITOR DUMP 10400000
|
|
----------- ------- ---- 10401000
|
|
0 LABELS 10402000
|
|
SWITCHES 10403000
|
|
--------- ----- -- 10404000
|
|
1 SIMPLE VARIABLES LABELS 10405000
|
|
FUNCTION SIMPLE VARIABLES 10406000
|
|
--------- ----- -- 10407000
|
|
2 ARRAYS SUBSCRIPTED VARS 10408000
|
|
--------- ----- -- 10409000
|
|
3 SUBSCRIPTED VARS 10410000
|
|
--------- ----- -- 10411000
|
|
4 ARRAYS 10412000
|
|
********* ***** ** 10413000
|
|
FORMAT TYPE PRINTOUT 10414000
|
|
----------- -------- 10415000
|
|
0 ID 10416000
|
|
--------- ----- 10417000
|
|
1 ID=V 10418000
|
|
--------- ----- 10419000
|
|
2 ID[S1---SN]=V 10420000
|
|
--------- ----- 10421000
|
|
3 ID[S1---SN]=V 10422000
|
|
--------- ----- 10423000
|
|
4 ID=V1---VN 10424000
|
|
*********** ******** 10425000
|
|
THE FORMAT THAT V IS PRINTED IN WILL BE DETERMINED BY10426000
|
|
THE TYPE OF V. THE FOLLOWING CONVENTIONS APPLY FOR 10427000
|
|
PASSING THE TYPEV TO PRINTI. 10428000
|
|
TYPE TYPEV 10429000
|
|
---- ----- 10430000
|
|
BOOLEAN 0 10431000
|
|
-- --- 10432000
|
|
REAL 1 10433000
|
|
-- --- 10434000
|
|
ALPHA 2 10435000
|
|
-- --- 10436000
|
|
INTEGER 3 10437000
|
|
**** ***** 10438000
|
|
POWERSOFTEN IS A TABLE OF POWERS OF TEN THAT PRINTI 10439000
|
|
AND OTHER ROUTINES USE FOR CONVERSION PURPOSES. 10440000
|
|
FORMAT TYPE ACTUAL PARAMETERS TO PRINTI 10441000
|
|
----------- --------------------------- 10442000
|
|
0 <ID,CHARI,FILE,0> 10443000
|
|
--------- ------------------------- 10444000
|
|
1 (V,TYPEV,POWERSOFTEN,ID,CHARI,FILE,1) 10445000
|
|
--------- ------------------------- 10446000
|
|
2 (S1---SN,V,N,TYPEV,POWERSOFTEN,ID,CHARI,10447000
|
|
FILE,2) 10448000
|
|
--------- ------------------------- 10449000
|
|
3 (S1*---SN*,S1---SN,V,N,TYPEV,POWERSOFTEN10450000
|
|
,ID,CHARI,FILE,3) 10451000
|
|
--------- ------------------------- 10452000
|
|
4 (DESCRIPTOR FOR THE ARRAY,N,TYPEV, 10453000
|
|
POWERSOFTEN,ID,CHARI,FILE,4) 10454000
|
|
*********** *************************** 10455000
|
|
SINCE THE RESTRICTION EXISTS THAT THE SCOPE OF THE 10456000
|
|
MONITOR FOR A LABEL OR SWITCH MUST BE THE SAME AS 10457000
|
|
THE SCOPE OF THE LABEL OR SWITCH, THE INFORMATION 10458000
|
|
THAT IS GATHERED BY THE MONITOR IS STORED IN THE 10459000
|
|
ORIGIONAL ENTRY IN INFO. IN THE CASES OF VARIABLES, 10460000
|
|
ARRAYS, AND FUNCTION DESIGNATORS,THE MONITORS SCOPE 10461000
|
|
MAY BE DIFFERENT THAN THE SCOPE OF THE ITEM BEING 10462000
|
|
MONITORED, THEREFORE, A NEW ENTRY IS MADE IN INFO 10463000
|
|
WITH THE CURRENT LEVEL COUNTER AND THE ADDITIONAL 10464000
|
|
MONITORING INFORMATION. 10465000
|
|
*********FORMAT OF INFO FOR MONITORED ITEMS**********10466000
|
|
ALL MONITORED ITEMS- MONITOR BIT [1:1] IN THE ELBAT 10467000
|
|
WORD WILL BE SET. 10468000
|
|
SIMPLE VARIABLES- A NEW ENTRY IS MADE IN INFO WITH 10469000
|
|
ONE EXTRA WORD WHICH CONTAINS THE ADDRESS OF 10470000
|
|
THE MONITOR FILE IN [37:11], I WILL HAVE A 10471000
|
|
DEFINE SVARMONFILE = [37:11]#. 10472000
|
|
ARRAYS- A NEW ENTRY IS MADE IN INFO WITH THE SAME 10473000
|
|
NUMBER OF WORDS AS THE ORIGIONAL ENTRY. THE 10474000
|
|
MONITOR FILE IS REMEMBERED IN [27:11] OF THE 10475000
|
|
FIRST WORD OF ADDITIONAL INFO. I WILL HAVE A 10476000
|
|
DEFINE ARRAYMONFILE = [27:11]#. 10477000
|
|
SUBSCRIPTED VARIABLES- THE TECHNIQUE FOR HANDLING 10478000
|
|
SUBSCRIPTED VARIABLES IS IDENTICLE TO THE 10479000
|
|
TECHNIQUE FOR ARRAYS EXCEPT THAT EACH WORD10480000
|
|
OF INFO CONTAINING LOWER BOUND INFORMATION10481000
|
|
ALSO CONTAINS MONITOR INFORMATION. EITHER10482000
|
|
A LITERAL OR AN ADDRESS WILL BE CONTAINED 10483000
|
|
IN BITS [12:11]. IN [11:1] IS A BIT THAT 10484000
|
|
DESIGNATES WHETHER AN OPDC OR A LITC 10485000
|
|
SHOULD BE GENERATED USING [12:11]. IF THE10486000
|
|
BIT IS 1 THEN AN OPDC WILL BE GENERATED, 10487000
|
|
ELSE A LITC. IF AN OPDC IS GENERATED IT 10488000
|
|
MAY BE ON A SIMPLE VARIABLE, OR ON AN 10489000
|
|
ACCIDENTAL ENTRY PROGRAM DESCRIPTOR. THE 10490000
|
|
PURPOSE OF THE LITC OR OPDC IS TO PASS 10491000
|
|
SI* TO THE PRINTI ROUTINE. 10492000
|
|
LABELS- THE FIRST WORD OF ADDITIONAL INFO CONTAINS 10493000
|
|
THE ADDRESS OF THE FILE DESCRIPTOR IN THE 10494000
|
|
ORIGIONAL ENTRY IN BITS [13:11]. I WILL HAVE A10495000
|
|
DEFINE LABLMONFILE = [13:11]#. 10496000
|
|
SWITCHES- THE MONITOR IS THE SAME AS THAT FOR LABELS.10497000
|
|
I WILL HAVE A DEFINE SWITMONFILE = [13:11]#. 10498000
|
|
FUNCTION DESIGNATORS- A NEW ENTRY IS MADE IN INFO 10499000
|
|
WITH THE SAME NUMBER OF WORDS AS THE 10500000
|
|
ORIGIONAL ENTRY. THE MONITOR FILE IS 10501000
|
|
REMEMBERED IN [27:11] OF THE FIRST WORD OF 10502000
|
|
ADDITIONAL INFO. I WILL HAVE A DEFINE 10503000
|
|
FUNCMONFILE = [27:11]#; 10504000
|
|
DEFINE FILEIDENT = RR7#; COMMENT FILEIDENT CONTAINS THE 10505000
|
|
ADDRESS OF THE MONITOR FILE; 10506000
|
|
DEFINE SUBSCRIPT = RR1#; COMMENT SUBSCRIPT IS USED TO 10507000
|
|
SAVE THE ADDRESS OR VALUE OF A 10508000
|
|
SUBSCRIPT. ONE ADDITIONAL BIT IS10509000
|
|
USED TO TELL WHETHER TO EMIT AN 10510000
|
|
OPDC OR A LITC ON THIS ADDRESS OR10511000
|
|
VALUE; 10512000
|
|
DEFINE NODIM = RR2#; COMMENT NODIM CONTAINS THE NUMBER OF10513000
|
|
DIMENSIONS OF AN ARRAY OR SUBSCRIPTED10514000
|
|
VARIABLE APPEARING IN A MONITOR LIST;10515000
|
|
DEFINE INC = RR3#; COMMENT INC CONTAINS THE LINK TO 10516000
|
|
ADDITIONAL INFO AND IS USED WHEN MAKING10517000
|
|
A NEW ENTRY IN INFO FOR ARRAYS; 10518000
|
|
DEFINE ELBATWORD = RR4#; COMMENT ELBATWORD CONTAINS THE 10519000
|
|
ELBAT WORD FOR A MONITOR LIST 10520000
|
|
ELEMENT; 10521000
|
|
DEFINE OPLIT = RR4#; COMMENT OPLIT IS USED FOR MARKING10522000
|
|
SUBSCRIPTED VARIABLES TO TELL ME 10523000
|
|
WHETHER TO EMIT AN OPDC OR A LITC.10524000
|
|
0 IS USED FOR OPDC, 1 FOR LITC; 10525000
|
|
DEFINE TESTVARB = RR5#; COMMENT TESTVARB CONTAINS A LINK 10526000
|
|
POINTING AT THE END OF ADDITIONAL 10527000
|
|
INFO AND IS USED TO TELL WHEN TO 10528000
|
|
STOP MOVING INFO FOR THE NEW ENTRY10529000
|
|
FOR MONITORED ARRAYS; 10530000
|
|
DEFINE NXTINFOTEMP = RR6#; COMMENT NXTINFOTEMP CONTAINS A10531000
|
|
LINK POINTING AT THE FIRST 10532000
|
|
ADDITIONAL WORD OF INFO FOR 10533000
|
|
MONITORED ARRAYS; 10534000
|
|
DEFINE INSERTFILE = 27:37:11#; COMMENT INSERTFILE IS THE 10535000
|
|
CONCATENATE DEFINE FOR 10536000
|
|
STUFFING THE MONITOR FILE 10537000
|
|
ADDRESS INTO THE FIRST 10538000
|
|
ADDITIONAL INFO WORD FOR 10539000
|
|
ARRAYS AND FUNCTIONS; 10540000
|
|
DEFINE NOPARPART = NODIMPART#; COMMENT NOPARPART IS A 10541000
|
|
PARTIAL WORD DESIGNATOR [4010542000
|
|
:8] USED TO EXTRACT THE 10543000
|
|
NUMBER OF PARAMETERS FOR A 10544000
|
|
GIVEN PROCEDURE FROM INFO; 10545000
|
|
DEFINE NOPAR = NODIM#; COMMENT NOPAR CONTAINS THE NUMBER 10546000
|
|
OF PARAMETERS FOR A FUNCTION 10547000
|
|
DESIGNATOR APPEARING IN A MONITOR 10548000
|
|
LIST; 10549000
|
|
LABEL START; COMMENT WHEN START IS REACHED, I MUST BE 10550000
|
|
POINTING AT THE FILE IDENTIFIER IN THE 10551000
|
|
MONITOR DECLARATION; 10552000
|
|
LABEL MARKMONITORED; COMMENT THE CODE AT MARKMONITORED 10553000
|
|
TURNS ON THE MONITOR BIT OF THE ELBAT10554000
|
|
WORD IN THE MONITOR LIST AND STORES 10555000
|
|
IT IN ACCUM[0] FOR THE E ROUTINE; 10556000
|
|
LABEL STORESUBS; COMMENT STORESUBS IS THE CODE THAT 10557000
|
|
REMEMBERS ALL THAT IS NECESSARY ABOUT 10558000
|
|
EACH SUBSCRIPT EXPRESSION; 10559000
|
|
LABEL CHKCOMMA; COMMENT CHKCOMMA REQUIRES THAT I BE 10560000
|
|
POINTING THE LAST LOGICAL QUANTITY OF THE 10561000
|
|
MONITOR LIST ELEMENT THAT HAS JUST BEEN 10562000
|
|
PROCESSED; 10563000
|
|
LABEL EXIT; COMMENT EXIT EXITS THE MERRIMAC PROCEDURE; 10564000
|
|
START:IF ELCLASS!FILEID THEN 10565000
|
|
BEGIN IF Q="5INDEX" OR Q="4FLAG0" OR Q="6INTOV" OR Q= 10565100
|
|
"6EXPOV" OR Q="4ZERO0"THEN MERRIMAC~TRUE ELSE 10565200
|
|
ERR(400); GO EXIT; 10565300
|
|
END 10566000
|
|
COMMENT ERROR 400 IS MISSING FILE ID IN MONITOR DEC; 10567000
|
|
CHECKER(ELBAT[I]); 10568000
|
|
FILEIDENT~ELBAT[I].ADDRESS; I~I+1; 10569000
|
|
IF CHECK(LEFTPAREN,401) 10570000
|
|
THEN GO TO EXIT; 10571000
|
|
COMMENT ERROR 401 IS MISSING LEFT PARENTHSIS IN MONITOR; 10572000
|
|
MARKMONITORED:STEPIT; ACCUM[0]~-ABS(ELBAT[I]); 10573000
|
|
IF RANGE(BOOID,INTID) 10574000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES SIMPLE VARIABLES; 10575000
|
|
E; PUTNBUMP(FILEIDENT); 10576000
|
|
GO CHKCOMMA; 10577000
|
|
END; 10578000
|
|
IF RANGE(BOOARRAYID,INTARRAYID) 10579000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES ARRAYS AND 10580000
|
|
SUBSCRIPTED VARIABLES; 10581000
|
|
E; NXTINFOTEMP~NEXTINFO; 10582000
|
|
PUTNBUMP(NODIM~TAKEFRST&FILEIDENT[INSERTFILE]); 10583000
|
|
TESTVARB~(NODIM~NODIM. NODIMPART )+(INC~( 10584000
|
|
ELBATWORD~ELBAT[I]).LINK+ELBATWORD.INCR); 10585000
|
|
DO PUTNBUMP(TAKE(INC~INC+1)) 10586000
|
|
UNTIL INC } TESTVARB; 10587000
|
|
IF TABLE(I+1) ! LFTBRKET 10588000
|
|
THEN GO CHKCOMMA; 10589000
|
|
TESTVARB~NODIM+NXTINFOTEMP; 10590000
|
|
STEPIT; 10591000
|
|
STORESUBS:IF(RR3~TABLE(I+2) = COMMA OR RR3 = RTBRKET) AND 10592000
|
|
STEPI ! NONLITNO 10593000
|
|
THEN BEGIN COMMENT THIS IS THE SIMPLE CASE OF 10594000
|
|
SUBSCRIPTED VARIABLES. EITHER A LITC 10595000
|
|
OR AN OPDC ON A VARIABLE IS ALL THAT 10596000
|
|
IS NEEDED TO CALL THE SUBSCRIPT; 10597000
|
|
SUBSCRIPT~ELBAT[I].ADDRESS; 10598000
|
|
OPLIT~0; 10598500
|
|
IF NOT RANGE( INTRNSICPROCID,INTID) 10599000
|
|
THEN IF CHECK(LITNO,402) 10600000
|
|
THEN GO TO EXIT 10601000
|
|
ELSE COMMENT MARK FOR LITC; 10602000
|
|
OPLIT~1; 10603000
|
|
COMMENT ERROR 402 IS BAD 10604000
|
|
SUBSCRIPT IN MONITOR DECLARATION;10605000
|
|
STEPIT; 10606000
|
|
END 10607000
|
|
ELSE BEGIN COMMENT THIS IS THE SPECIAL CASE OF 10608000
|
|
SUBSCRIPTED VARIABLES. CODE FOR THIS 10609000
|
|
SUBSCRIPT EXPRESSION MUST BE GENERATED10610000
|
|
AND JUMPED AROUND, AN ACCIDENTAL ENTRY10611000
|
|
PROGRAM DESCRIPTOR CREATED AND THE 10612000
|
|
ADDRESS SAVED IN SUBSCRIPT. SUBSCRIPT10613000
|
|
MUST BE MARKED FOR AN OPDC; 10614000
|
|
JUMPCHKNX; SUBSCRIPT~PROGDESCBLDR( 10615000
|
|
ADES,L,0); AEXP; EMITO(RTS); 10616000
|
|
JUMPCHKX; 10616500
|
|
OPLIT~0; 10617000
|
|
IF MODE > 0 10618000
|
|
THEN BEGIN COMMENT STUFF F AT THIS 10619000
|
|
POINT IF MODE > 0; 10620000
|
|
STUFFF(SUBSCRIPT);EMITPAIR( 10621000
|
|
SUBSCRIPT,STD); 10622000
|
|
END; 10623000
|
|
END; 10624000
|
|
PUT(TAKE(NXTINFOTEMP~NXTINFOTEMP+1) & 10625000
|
|
SUBSCRIPT[12:37:11] & OPLIT[11:47:01], 10626000
|
|
NXTINFOTEMP); 10627000
|
|
IF ELCLASS = COMMA 10628000
|
|
THEN GO TO STORESUBS; 10629000
|
|
IF CHECK(RTBRKET,403) 10630000
|
|
THEN GO TO EXIT; 10631000
|
|
COMMENT ERROR 403 IS IMPROPER SUBSCRIPT 10632000
|
|
EXPRESSION DELIMITER IN MONITOR LIST ELEMENT; 10633000
|
|
IF NXTINFOTEMP ! TESTVARB 10634000
|
|
THEN BEGIN COMMENT ERROR 404 MONITOR LIST 10635000
|
|
ELEMENT HAS IMPROPER NUMBER OF 10636000
|
|
SUBSCRIPTS; 10637000
|
|
I~I-1; ERROR(404); GO TO EXIT; 10638000
|
|
END; 10639000
|
|
GO CHKCOMMA; 10640000
|
|
END; 10641000
|
|
IF ELCLASS = LABELID OR ELCLASS = SWITCHID 10642000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES LABELS AND SWITCHES; 10643000
|
|
IF(ELBATWORD~ELBAT[I]).LVL ! LEVEL 10644000
|
|
THEN BEGIN COMMENT ERROR 405 MEANS LABEL OR 10645000
|
|
SWITCH MONITORED AT IMPROPER LEVEL; 10646000
|
|
ERROR(405); GO TO EXIT; 10647000
|
|
END; 10648000
|
|
PUT(TAKEFRST & FILEIDENT[13:37:11],GIT(ELBAT[I])10649000
|
|
); 10650000
|
|
PUT(TAKE(ELBATWORD)&(0-ABS(ELBATWORD))[1:1:34], 10651000
|
|
ELBATWORD); GO CHKCOMMA; 10652000
|
|
END; 10653000
|
|
IF RANGE(BOOPROCID,INTPROCID) 10654000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES FUNCTIONS; 10655000
|
|
E ;% 10656000
|
|
IF LEVEL=(RR2~ELBAT[I]).LVL THEN 10656010
|
|
BEGIN 10656011
|
|
%%% COPY FORWARD BIT FROM ELBAT[I] INFO ENTRY INTO MONITOR"S INFO 10656012
|
|
%%% ENTRY, AND THEN TURN OFF THE ELBAT[I] INFO ENTRY"S FORWARD BIT. 10656013
|
|
PUT(TAKE(LASTINFO+1) & TAKE(RR2.LINK+1)[1:1:1],LASTINFO+1) ; 10656014
|
|
PUT(ABS(TAKE(RR2.LINK+1)),RR2.LINK+1) ; 10656015
|
|
END ; 10656016
|
|
PUTNBUMP(NOPAR ~ TAKEFRST & 10656030
|
|
FILEIDENT[INSERTFILE]); TESTVARB~(NOPAR10657000
|
|
~NOPAR. NOPARPART )+(INC~(ELBATWORD~ELBAT[I]). 10658000
|
|
LINK+ELBATWORD.INCR); 10659000
|
|
DO PUTNBUMP(TAKE(INC~INC+1)) 10660000
|
|
UNTIL INC } TESTVARB; 10661000
|
|
GO CHKCOMMA; 10662000
|
|
END; 10663000
|
|
ERROR(406); GO TO EXIT; 10664000
|
|
COMMENT ERROR 406 IS IMPROPER MONITOR LIST ELEMENT; 10665000
|
|
CHKCOMMA:IF STEPI = COMMA 10666000
|
|
THEN GO MARKMONITORED; 10667000
|
|
IF CHECK(RTPAREN,407) 10668000
|
|
THEN GO TO EXIT; 10669000
|
|
COMMENT ERROR 407 IS MISSING RIGHT PARENTHESIS IN MONITOR10670000
|
|
DECLARATION; 10671000
|
|
IF STEPI = SEMICOLON 10672000
|
|
THEN GO TO EXIT; 10673000
|
|
IF CHECK(COMMA,408) 10674000
|
|
THEN GO TO EXIT; 10675000
|
|
COMMENT ERROR 408 MEANS IMPROPER MONITOR DECLARATION 10676000
|
|
DELIMITER; 10677000
|
|
STEPIT; GO TO START; 10678000
|
|
EXIT:; 10679000
|
|
END MERRIMAC; 10680000
|
|
PROCEDURE DMUP; 10681000
|
|
BEGIN COMMENT 15 JULY 1963 10682000
|
|
THERE ARE FOUR TYPES OF DUMP LIST ELEMENTS. THERE 10683000
|
|
ARE LABELS, SIMPLE VARIABLES, SUBSCRIPTED VARIABLES, AND 10684000
|
|
ARRAYS. 10685000
|
|
THE DMUP ROUTINE GENERATES CODE AND SAVES INFORMATION. 10686000
|
|
THE INFORMATION THAT IS SAVED IS OF TWO TYPES. FOR EASE 10687000
|
|
OF REFERENCE I WOULD LIKE TO DEFINE THE DUMP LABEL OUTSIDE10688000
|
|
THE PARENTHESES AS THE DUMPOR, AND ANY LABEL APPEARING AS 10689000
|
|
A DUMP LIST ELEMENT A DUMPEE. BOTH DUMPORS AND DUMPEES 10690000
|
|
HAVE A COUNTER ASSOCIATED WITH THEM WHICH IS INCREMENTED 10691000
|
|
BY ONE EACH TIME THE LABEL IS PASSED. THE ADDRESS OF THIS10692000
|
|
COUNTER IS KEPT IN BITS [2:11] OF THE FIRST ADDITIONAL 10693000
|
|
WORD OF INFO. THE ADDRESS OF THE PROGRAM DESCRIPTOR FOR 10694000
|
|
THE CODE GENERATED BY DMUP IS KEPT IN BITS [24:11] OF THE 10695000
|
|
FIRST ADDITIONAL WORD OF INFO FOR THE DUMPOR. 10696000
|
|
THE CODE THAT IS GENERATED IS OF TWO TYPES. CODE TO 10697000
|
|
INITIALIZE THE COUNTERS MENTIONED ABOVE IS EXECUTED UPON 10698000
|
|
ENTRY TO THE BLOCK CONTAINING THE DUMP DECLARATION. THE 10699000
|
|
OTHER TYPE CODE IS ONLY EXECUTED WHEN THE DUMPOR IS PASSED10700000
|
|
. THIS CODE THEN COMPARES THE DUMPORS COUNTER WITH THE 10701000
|
|
DUMP INDICATOR, IF THEY ARE NOT EQUAL IT JUMPS TO EXIT. 10702000
|
|
IF THEY ARE EQUAL IT THEN PROCEEDS TO CALL PRINTI ONCE 10703000
|
|
FOR EACH DUMP LIST ELEMENT. FOR A DESCRIPTION OF PRINTI 10704000
|
|
SEE THE COMMENTS FOR THE MERRIMAC ROUTINE; 10705000
|
|
LABEL START; COMMENT WHEN START IS REACHED, I MUST BE 10706000
|
|
POINTING AT THE FILE IDENTIFIER IN THE DUMP 10707000
|
|
DECLARATION; 10708000
|
|
LABEL EXIT; COMMENT EXIT APPEARS AT THE END OF THE DMUP 10709000
|
|
ROUTINE. NO STATMENTS ARE EXECUTED AFTER IT 10710000
|
|
IS REACHED; 10711000
|
|
DEFINE FILEIDENT = RR1#; COMMENT FILEIDENT CONTAINS THE 10712000
|
|
ADDRESS OF THE MONITOR FILE; 10713000
|
|
LABEL STARTCALL; COMMENT THE CODE AT STARTCALL GENERATES 10714000
|
|
CODE TO CALL THE PRINTI ROUTINE. WHEN 10715000
|
|
STARTCALL IS REACHED, I MUST BE POINTING 10716000
|
|
AT THE CHARACTER IMMEDIATELY BEFORE THE 10717000
|
|
DUMP LIST ELEMENT TO BE PASSED TO PRINTI;10718000
|
|
DEFINE NODIM = RR2#; COMMENT NODIM CONTAINS THE NUMBER OF10719000
|
|
DIMENSIONS OF AN ARRAY OR A 10720000
|
|
SUBSCRIPTED VARIABLE APPEARING IN A 10721000
|
|
DUMP LIST; 10722000
|
|
DEFINE LEXIT = RR3#; COMMENT LEXIT CONTAINS THE PROGRAM 10723000
|
|
COUNTER SETTING AT WHICH CODE IS 10724000
|
|
GENERATED TO EXIT THE ROUTINE EMITTED10725000
|
|
BY DMUP; 10726000
|
|
DEFINE DUMPETEMP = RR2#; COMMENT DUMPETEMP HOLDS THE 10727000
|
|
LOCATION OF THE COUNTER 10728000
|
|
ASSOCIATED WITH THIS LABEL IF 10729000
|
|
SPACE HAS BEEN ASSIGNED FOR IT; 10730000
|
|
DEFINE DIMCTR = RR3#; COMMENT DIMCTR IS INITIALIZED TO 10731000
|
|
NODIM. IT IS THEN COUNTED DOWN TO 10732000
|
|
ZERO AS SUBSCRIPT CODE IS GENERATED;10733000
|
|
LABEL PASSN; COMMENT THE CODE AT PASSN PASSES N (THE 10734000
|
|
NUMBER OF DIMENSIONS) TO THE PRINTI ROUTINE; 10735000
|
|
LABEL SUBSLOOP; COMMENT THE CODE AT SUBLOOP PASSES 10736000
|
|
SUBSCRIPTS TO PRINTI; 10737000
|
|
ARRAY LABELCTR[0:100]; COMMENT LABELCTR IS AN ARRAY THAT 10738000
|
|
HOLDS THE ADDRESSES OF ALL LABEL 10739000
|
|
COUNTERS FOR LABELS APPEARING IN 10740000
|
|
THIS DUMP DECLARATION. IT IS 10741000
|
|
NECESSARY TO RETAIN THIS 10742000
|
|
INFORMATION SO THAT CODE MAY BE 10743000
|
|
GENERATED AT THE END OF THE 10744000
|
|
DECLARATION TO INITIALIZE THE 10745000
|
|
COUNTERS; 10746000
|
|
DEFINE LABELCTRINX = RR4#; COMMENT LABELCTRINX IS THE 10747000
|
|
VARIABLE USED TO INDEX INTO THE10748000
|
|
LABELCTR ARRAY; 10749000
|
|
DEFINE DUMPE = 2:37:11#; COMMENT DUMPE IS THE 10750000
|
|
CONCATENATE DEFINE FOR INSERTING10751000
|
|
THE COUNTER ASSOCIATED WITH THIS10752000
|
|
LABEL INTO THE FIRST ADDITIONAL 10753000
|
|
WORD OF INFO; 10754000
|
|
DEFINE LWRBND = RR5#; COMMENT LWRBND CONTAINS THE LOWER 10755000
|
|
BOUND FOR MONITORED SUBSCRIPTED 10756000
|
|
VARIABLES; 10757000
|
|
DEFINE FORMATTYPE = RR5#; COMMENT FORMATTYPE IS THE 10758000
|
|
FORMAT TYPE REFERRED TO IN THE 10759000
|
|
COMMENTS FOR THE MERRIMAC 10760000
|
|
ROUTINE DESCRIBING PRINTI; 10761000
|
|
DEFINE FINALL = RR5#; COMMENT FINALL IS A TEMPORARY CELL 10762000
|
|
USED TO HOLD L WHILE THE DUMP 10763000
|
|
INDICATOR TEST CODE IS BEING 10764000
|
|
GENERATED; 10765000
|
|
DEFINE TESTLOC = RR6#; COMMENT TESTLOC CONTAINS THE 10766000
|
|
LOCATION OF THE CODE THAT MUST BE 10767000
|
|
GENERATED TO MAKE THE TEST TO 10768000
|
|
DETERMINE WHETHER OR NOT DUMPING 10769000
|
|
SHOULD OCCUR; 10770000
|
|
DEFINE DUMPR = 24:37:11#; COMMENT DUMPR IS THE 10771000
|
|
CONCATENATE DEFINE USED TO 10772000
|
|
INSERT THE ADDRESS OF THE 10773000
|
|
PROGRAM DESCRIPTOR FOR THE CODE 10774000
|
|
GENERATED FROM THE DUMP 10775000
|
|
DECLARATION; 10776000
|
|
DEFINE DUMPLOC = RR7#; COMMENT DUMPLOC CONTAINS THE 10777000
|
|
ADDRESS OF THE PROGRAM DESCRIPTOR 10778000
|
|
THAT DESCRIBES THE CODE GENERATED 10779000
|
|
BY DMUP; 10780000
|
|
DEFINE ELBATWORD = RR8#; COMMENT ELBATWORD CONTAINS THE 10781000
|
|
ELBAT WORD FOR THE DUMP LIST 10782000
|
|
ELEMENT CURRENTLY BEING OPERATED 10783000
|
|
ON; 10784000
|
|
LABEL CALLPRINTI; COMMENT CALLPRINTI FINISHES THE CALL 10785000
|
|
ON PRINTI. IT GENERATES THE CODE TO 10786000
|
|
PASS TYPEV, POWERSOFTEN, ID, CHARI, 10787000
|
|
FILE, AND FORMAT TYPE; 10788000
|
|
DEFINE SUBSCTR = RR9#; COMMENT SUBSCTR CONTAINS THE 10789000
|
|
DIMENSION NUMBER THAT IS CURRENTLY 10790000
|
|
BEING WORKED ON; 10791000
|
|
START:IF CHECK(FILEID,409) 10792000
|
|
THEN GO TO EXIT; 10793000
|
|
COMMENT ERROR 409 MEANS MISSING FILE ID IN DUMP DEC; 10794000
|
|
CHECKER(ELBAT[I]); 10795000
|
|
FILEIDENT~ELBAT[I].ADDRESS; STEPIT; 10796000
|
|
IF CHECK(LEFTPAREN,410) 10797000
|
|
THEN GO TO EXIT; 10798000
|
|
COMMENT ERROR 410 MEANS MISSING LEFT PAREN IN DUMP DEC; 10799000
|
|
JUMPCHKNX; ADJUST; DUMPLOC~PROGDESCBLDR10800000
|
|
(ADES,L,0); TESTLOC~L; L~L+3; 10801000
|
|
LABELCTRINX~-1; EMITO(NOP); BUMPL; 10802000
|
|
STARTCALL:EMITO(MKS); STEPIT; ELBATWORD~-ABS(ELBAT10803000
|
|
[I]); 10804000
|
|
IF RANGE(BOOARRAYID,INTARRAYID) 10805000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES ARRAYS AND 10806000
|
|
SUBSCRIPTED VARIABLES; 10807000
|
|
NODIM~DIMCTR~TAKEFRST.NODIMPART; 10808000
|
|
IF STEPI = LFTBRKET 10809000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES SUBSCRIPTED10810000
|
|
VARIABLES; 10811000
|
|
STEPIT; AEXP; EMITO(DUP); 10812000
|
|
SUBSCTR~1; 10813000
|
|
IF(LWRBND~TAKE(GIT(ELBATWORD)+SUBSCTR)10814000
|
|
).[35:13] ! 0 10815000
|
|
THEN BEGIN COMMENT SUBTRACT OFF THE 10816000
|
|
LOWER BOUND BEFORE INDEXING;10817000
|
|
IF LWRBND.[46:2] = 0 10818000
|
|
THEN EMIT(LWRBND) 10819000
|
|
ELSE EMITV(LWRBND.[35:11]); 10820000
|
|
EMIT(LWRBND.[23:12]); 10821000
|
|
END; 10822000
|
|
IF DIMCTR-SUBSCTR = 0 10823000
|
|
THEN BEGIN COMMENT PASS SUBSCRIPT, 10824000
|
|
VALUE,N; 10825000
|
|
EMITV(ELBATWORD.ADDRESS); 10826000
|
|
PASSN:EMITL(NODIM); 10827000
|
|
IF CHECK(RTBRKET,411) 10828000
|
|
THEN GO TO EXIT; 10829000
|
|
COMMENT ERROR 411 MEANS 10830000
|
|
DUMP LIST ELEMENT HAS WRONG 10831000
|
|
NUMBER OF SUBSCRIPTS; 10832000
|
|
FORMATTYPE~2; GO CALLPRINTI10833000
|
|
END; 10834000
|
|
EMITN(ELBATWORD.ADDRESS); 10835000
|
|
SUBSLOOP:EMITO(LOD); STEPIT; AEXP; 10836000
|
|
EMITL(JUNK); EMITO(SND); 10837000
|
|
SUBSCTR~SUBSCTR+1; 10838000
|
|
IF(LWRBND~TAKE(GIT(ELBATWORD)+SUBSCTR)10839000
|
|
).[35:13] ! 0 10840000
|
|
THEN BEGIN COMMENT SUBTRACT OFF THE 10841000
|
|
LOWER BOUND BEFORE INDEXING;10842000
|
|
IF LWRBND.[46:2] = 0 10843000
|
|
THEN EMIT(LWRBND) 10844000
|
|
ELSE EMITV(LWRBND.[35:11]); 10845000
|
|
EMIT(LWRBND.[23:12]); 10846000
|
|
END; 10847000
|
|
IF DIMCTR-SUBSCTR = 0 10848000
|
|
THEN BEGIN COMMENT EMIT COC; 10849000
|
|
EMITO(COC); EMITV(JUNK10850000
|
|
); EMITO(XCH); 10851000
|
|
GO PASSN; 10852000
|
|
END; 10853000
|
|
EMITO(CDC); EMITV(JUNK);EMITO(XCH); 10854000
|
|
IF CHECK(COMMA,412) 10855000
|
|
THEN GO TO EXIT 10856000
|
|
ELSE GO TO SUBSLOOP; 10857000
|
|
COMMENT ERROR 412 MEANS DUMP LIST 10858000
|
|
ELEMENT HAS WRONG NUMBER OF SUBSCRIPTS10859000
|
|
; 10860000
|
|
END; 10861000
|
|
COMMENT THIS CODE HANDLES ARRAYS; 10862000
|
|
IF ELCLASS ! COMMA AND ELCLASS ! RTPAREN 10863000
|
|
THEN BEGIN COMMENT ERROR 413 MEANS IMPROPER 10864000
|
|
ARRAY DUMP LIST ELEMENT; 10865000
|
|
ERR(413); GO TO EXIT; 10866000
|
|
END; 10867000
|
|
EMITPAIR(ELBATWORD.ADDRESS,LOD);EMITL(NODIM); 10868000
|
|
FORMATTYPE~4; I~I-1; GO CALLPRINTI; 10869000
|
|
END; 10870000
|
|
FORMATTYPE~1; 10871000
|
|
IF RANGE(BOOID,INTID) 10872000
|
|
THEN BEGIN COMMENT THIS CODE HANDLES SIMPLE VARIABLES; 10873000
|
|
EMITV(ELBATWORD.ADDRESS); GO CALLPRINTI; 10874000
|
|
END; 10875000
|
|
IF CHECK(LABELID,414) 10876000
|
|
THEN GO TO EXIT; 10877000
|
|
COMMENT ERROR 414 MEANS ILLEGAL DUMP LIST ELEMENT. THIS 10878000
|
|
CODE HANDLES LABELS; 10879000
|
|
PUT(TAKEFRST & (LABELCTR[LABELCTRINX~LABELCTRINX+1]~ 10880000
|
|
IF DUMPETEMP~TAKEFRST.DUMPEE = 0 10881000
|
|
THEN GETSPACE(FALSE,-7) % LABEL DESCRIPTOR. 10882000
|
|
ELSE DUMPETEMP)[DUMPE],GIT(ELBATWORD)); 10883000
|
|
EMITV(LABELCTR[ 10884000
|
|
LABELCTRINX]); PUT(TAKE(ELBATWORD) & ELBATWORD[1:1:34]10885000
|
|
,ELBATWORD); 10886000
|
|
EMITL(3); IF FALSE THEN 10887000
|
|
CALLPRINTI:EMITL(PASSTYPE(ELBATWORD)); EMITPAIR(GNAT( 10888000
|
|
POWERSOFTEN),LOD); PASSALPHA(ELBATWORD); 10889000
|
|
EMITPAIR(GNAT(CHARI),LOD); PASSMONFILE( 10890000
|
|
FILEIDENT); %109-10891000
|
|
EMITNUM(FORMATTYPE&CARDNUMBER[1:4:44]); %109-10891100
|
|
EMITV(GNAT(PRINTI)); %109-10891200
|
|
IF STEPI = COMMA 10892000
|
|
THEN BEGIN COMMENT GO AROUND ONE MORE TIME; 10893000
|
|
IF LABELCTRINX = 100 10894000
|
|
THEN BEGIN COMMENT ERROR 415 MEANS LABELCTR IS 10895000
|
|
ABOUT TO OVERFLOW WITH LABEL 10896000
|
|
INFORMATION; 10897000
|
|
ERR(415); GO TO EXIT; 10898000
|
|
END; 10899000
|
|
GO STARTCALL; 10900000
|
|
END; 10901000
|
|
IF CHECK(RTPAREN,416) 10902000
|
|
THEN GO TO EXIT; 10903000
|
|
COMMENT ERROR 416 MEANS ILLEGAL DUMP LIST ELEMENT 10904000
|
|
DELIMETER; 10905000
|
|
LEXIT~L; EMITL(0); EMITO(RTS); 10906000
|
|
JUMPCHKX; STEPIT; 10907000
|
|
IF CHECK(LABELID,417) 10908000
|
|
THEN GO TO EXIT; 10909000
|
|
COMMENT ERROR 417 MEANS MISSING DUMP LABEL; 10910000
|
|
PUT(TAKE(ELBATWORD~-ABS(ELBAT[I])) & ELBATWORD[1:1:34], 10911000
|
|
ELBATWORD); 10912000
|
|
IF NOT LOCAL(ELBATWORD) THEN FLAG(417); 10912100
|
|
PUT(TAKEFRST & (LABELCTR[LABELCTRINX~LABELCTRINX+1]~ 10913000
|
|
IF DUMPETEMP~TAKEFRST.DUMPEE = 0 10914000
|
|
THEN DUMPETEMP:=GETSPACE(FALSE,-7) % LABEL DESCR. 10915000
|
|
ELSE DUMPETEMP)[DUMPE],GIT(ELBATWORD)); 10916000
|
|
EMITL(0); 10917000
|
|
DO BEGIN COMMENT THIS CODE INITIALIZES THE LABEL COUNTERS;10918000
|
|
EMITPAIR(LABELCTR[LABELCTRINX],SND) 10919000
|
|
END 10920000
|
|
UNTIL LABELCTRINX~LABELCTRINX-1 < 0; 10921000
|
|
L~L-1; EMITO(STD); STEPIT; 10922000
|
|
IF CHECK(COLON,418) 10923000
|
|
THEN GO TO EXIT; 10924000
|
|
COMMENT ERROR 418 MEANS MISSING COLON IN DUMP DEC; 10925000
|
|
FINALL~L; L~TESTLOC; STEPIT; 10926000
|
|
IF (GT1 ~ TABLE(I) ! NONLITNO AND GT1 ! LITNO 10926500
|
|
AND GT1 < REALID AND GT1 > INTID) OR (GT1 ~ TABLE(I+1) 10926510
|
|
! COMMA AND GT1 ! SEMICOLON) 10926520
|
|
THEN BEGIN COMMENT ERROR 465-DUMP INDICATOR MUST BE 10926530
|
|
UNSIGNED INTEGER OR SIMPLE VARIABLE; 10926540
|
|
FLAG(465); GO TO EXIT; 10926550
|
|
END; 10926560
|
|
PRIMARY; EMITV(DUMPETEMP); 10927000
|
|
EMITO(EQL); EMITB(BFC,TESTLOC+6,LEXIT); 10928000
|
|
L~FINALL; PUT(TAKE(GIT(ELBAT[I-3])) & DUMPLOC[ 10929000
|
|
DUMPR],GIT(ELBAT[I-3])); 10930000
|
|
IF ELCLASS = COMMA 10931000
|
|
THEN BEGIN COMMENT GO AROUND ONE MORE TIME; 10932000
|
|
STEPIT; GO TO START; 10933000
|
|
END; 10934000
|
|
IF CHECK(SEMICOLON,419) 10935000
|
|
THEN; 10936000
|
|
COMMENT ERROR 419 MEANS IMPROPER DUMP DEC DELIMITER; 10937000
|
|
EXIT:; 10938000
|
|
END DMUP; 10939000
|
|
COMMENT CODE FOR SWITCHES IS COMPILED FROM TWO PLACES - IN SWITCHGEN 10940000
|
|
AND IN PURGE. COMPLEX SWITCHES (I.E. SWITCHES CONTAINING 10941000
|
|
OTHER THAN LOCAL LABELS) ARE COMPILED HERE. SIMPLE 10942000
|
|
SWITCHES ARE COMPILED AT PURGE TIME. THIS IS FOR REASONS 10943000
|
|
OF EFFICIENCY. IF A SWITCH IS ONLY CALLED ONE THE CODE 10944000
|
|
IS QUITE A BIT BETTER. AFTER SWITCHGEN GOTOG IS TRUE IF 10945000
|
|
A COMMUNICATE MUST BE USED. THE BLOCK ROUTINE MARKS SUCH 10946000
|
|
SWITCHES FORMAL. THIS IS, OF COURSE, A FICTION, FOR 10947000
|
|
SIMPLE SWITCHES SWITCHGEN LEAVES THE INDEX TO INFO IN EDOC10948000
|
|
SO THAT PURGE CAN FIND THE LABELS. IT SHOULD BE NOTED 10949000
|
|
THAT A SWITCH EXPECTS THE SWITCH INDEX TO BE FOUND IN 10950000
|
|
JUNK. THE RESULT RETURNED BY SWITCHGEN IS WHETHER OR NOT 10951000
|
|
TO STUFF F INOT A SWITCH DESCRIPTOR, SINCE A SWITCH DE- 10952000
|
|
SCRIPTOR IS AN ACCIDENTAL ENTRY DESCRIPTOR; 10953000
|
|
BOOLEAN PROCEDURE SWITCHGEN(BEFORE,PD); %113-10954000
|
|
VALUE BEFORE; BOOLEAN BEFORE; REAL PD; %113-10954100
|
|
BEGIN 10955000
|
|
LABEL LX,EXIT,BEF; 10956000
|
|
REAL K,N,T1,TL; 10957000
|
|
TL ~ L; 10958000
|
|
EMIT(0); EMITV(JUNK); EMITO(GEQ); EMITV(JUNK); 10959000
|
|
L ~ L+1; EMITO(GTR); EMITO(LOR); EMITV(JUNK); 10960000
|
|
EMITO(DUP); EMITO(ADD); COMMENT WE HAVE GENERATED TEST 10961000
|
|
AND PREPARATION FOR SWITCH-JUMP; 10962000
|
|
GOTOG ~ FALSE; COMMENT IF WE COMPILE JUMP OUT WE KNOW; 10963000
|
|
IF BEFORE THEN BEGIN STEPIT; GO TO BEF END; 10964000
|
|
LX: IF STEPI = LABELID AND ELBAT[I].LVL = LEVEL 10965000
|
|
THEN BEGIN 10966000
|
|
INFO[0,N] ~ ELBAT[I]; 10967000
|
|
IF N ~ N+1 = 256 10968000
|
|
THEN BEGIN ERR(147); GO TO EXIT END; 10969000
|
|
IF STEPI = COMMA THEN GO TO LX; 10970000
|
|
EMITO(BFC); L ~ BUMPL; N ~ N-1; 10971000
|
|
FOR K ~ 0 STEP 1 UNTIL N 10972000
|
|
DO BEGIN COMMENT SAVE LINKS TO LABELS IN EDOC; 10973000
|
|
EMIT((GT1~INFO[0,K]).[35:1]); 10974000
|
|
EMIT(GT1) END; 10975000
|
|
SWITCHGEN ~ FALSE END 10976000
|
|
ELSE BEGIN 10977000
|
|
BEF: L ~ BUMPL; N ~ N-1; 10978000
|
|
PUT(TAKE(LASTINFO)&(PD:=PROGDESCBLDR(ADES,TL,PD)) 10978500
|
|
[16:37:11],LASTINFO); % GET PRT LOC AND SAVE 10978600
|
|
FOR K ~ 0 STEP 1 UNTIL N 10979000
|
|
DO BEGIN COMMENT EMIT CODE FOR SIMPLE LABELS SEEN; 10980000
|
|
ADJUST; T1 ~ L; 10981000
|
|
EMITL(GNAT(GT1~INFO[0,K])); 10982000
|
|
GENGO(GT1); 10983000
|
|
INFO[0,K] ~ T1; 10984000
|
|
EMITO(RTS); 10985000
|
|
CONSTANTCLEAN END; 10986000
|
|
I ~ I-1; N ~ N+1; 10987000
|
|
DO BEGIN ADJUST; 10988000
|
|
STEPIT; INFO[0,N] ~ L; 10989000
|
|
IF N ~ N+1 = 256 10990000
|
|
THEN BEGIN ERR(147); GO TO EXIT END; 10991000
|
|
DEXP; EMITO(RTS) END 10992000
|
|
UNTIL ELCLASS ! COMMA; ADJUST; 10993000
|
|
EMITB(BFW,TL+12,L); EMITO(BFC); 10994000
|
|
EMIT(0); EMITO(RTS); N ~ N-1; 10995000
|
|
FOR K ~ 0 STEP 1 UNTIL N 10996000
|
|
DO EMITB(BBW,BUMPL,INFO[0,K]); 10997000
|
|
SWITCHGEN ~ TRUE END; 10998000
|
|
T1 ~ L; 10999000
|
|
L ~ TL+4; 11000000
|
|
EMITL(N+1); 11001000
|
|
L ~ T1; 12000000
|
|
EXIT: END SWITCHGEN; 12001000
|
|
PROCEDURE DBLSTMT; 12002000
|
|
BEGIN 12003000
|
|
REAL S,T; 12004000
|
|
BOOLEAN B ; 12004100
|
|
LABEL L1,L2,L3,L4,EXIT ; 12005000
|
|
S~0; 12006000
|
|
IF STEPI!LEFTPAREN THEN ERR(281) 12007000
|
|
ELSE 12008000
|
|
L1: BEGIN 12009000
|
|
IF STEPI=COMMA THEN 12010000
|
|
BEGIN 12011000
|
|
DPTOG~TRUE; 12012000
|
|
IF STEPI=ADOP THEN STEPIT; 12013000
|
|
EMITNUM(NLO); 12014000
|
|
EMITNUM(IF ELBAT[I-1].ADDRESS =SUB THEN -NHI ELSE NHI); 12015000
|
|
DPTOG~FALSE; 12016000
|
|
STEPIT; 12017000
|
|
GO TO L2; 12018000
|
|
END; 12019000
|
|
IF TABLE(I+1)=COMMA THEN 12020000
|
|
BEGIN 12021000
|
|
IF ELCLASS=ADOP OR ELCLASS=MULOP THEN 12022000
|
|
BEGIN 12023000
|
|
EMITO(ELBAT[I].ADDRESS+1); 12024000
|
|
L4: IF (S~S-1){0 THEN FLAG(282); STEPIT ; 12025000
|
|
GO TO L3; 12026000
|
|
END; 12027000
|
|
IF ELCLASS=ASSIGNOP THEN 12028000
|
|
BEGIN 12029000
|
|
IF S~S-1<0 THEN FLAG(285); T~0; STEPIT ; 12030000
|
|
DO 12031000
|
|
BEGIN 12032000
|
|
IF ELCLASS !COMMA THEN BEGIN ERR(284);GO EXIT END; 12033000
|
|
STEPIT; 12034000
|
|
B~ELCLASS=INTID OR ELCLASS=INTARRAYID 12034100
|
|
OR ELCLASS=INTPROCID ; 12034110
|
|
IF ELCLASS{INTID AND ELCLASS}REALID THEN 12035000
|
|
BEGIN EMITN(ELBAT[I].ADDRESS); STEPIT END 12036000
|
|
ELSE IF ELCLASS{INTPROCID AND ELCLASS}REALPROCID THEN12036100
|
|
IF ELBAT[I].LINK ! PROINFO.LINK THEN FLAG(211) 12036200
|
|
ELSE BEGIN EMITL(514); STEPIT END 12036300
|
|
ELSE IF ELCLASS>INTARRAYID OR ELCLASS<REALARRAYID 12036400
|
|
THEN ERR(286) 12036500
|
|
ELSE VARIABLE(FL); 12037000
|
|
EMITO(IF B THEN ISD ELSE STD) END UNTIL T~T+1=2;12038000
|
|
IF ELCLASS!RTPAREN THEN GO L3 ; 12039000
|
|
IF S!0 THEN FLAG(283) 12039100
|
|
ELSE BEGIN STEPIT; GO EXIT END ; 12040000
|
|
END; 12041000
|
|
IF ELCLASS=FACTOP THEN 12041100
|
|
BEGIN 12041110
|
|
EMITO(MKS); EMITL(4); EMITV(GNAT(POWERALL)) ; 12041130
|
|
EMITO(DEL); EMITO(DEL); GO L4 ; 12041140
|
|
END ; 12041160
|
|
IF ELCLASS{INTID AND ELCLASS}BOOID THEN 12042000
|
|
BEGIN 12043000
|
|
CHECKER(T~ELBAT[I]); 12044000
|
|
STEPIT;STEPIT; 12045000
|
|
AEXP; 12046000
|
|
EMITV(T.ADDRESS); 12047000
|
|
GO TO L2; 12048000
|
|
END; 12049000
|
|
END ; 12050000
|
|
AEXP; 12051000
|
|
IF ELCLASS!COMMA THEN BEGIN ERR(284);GO EXIT 12052000
|
|
END; 12053000
|
|
STEPIT; AEXP; EMITO(XCH); 12054000
|
|
L2: S~S+1; 12055000
|
|
L3: IF ELCLASS!COMMA THEN BEGIN ERR(284);GO TO EXIT END; 12056000
|
|
GO TO L1; 12057000
|
|
EXIT:END 12058000
|
|
END DBLSTMT; 12059000
|
|
PROCEDURE CMPLXSTMT ; 12060000
|
|
BEGIN 12060100
|
|
REAL S,T ; 12060200
|
|
BOOLEAN B ; 12060250
|
|
LABEL L1,L2,L3,L4,L5,EXIT,ERROR ; 12060300
|
|
DEFINE ERRX(ERRX1) = BEGIN T~ERRX1; GO ERROR END #; 12060400
|
|
IF STEPI!LEFTPAREN THEN ERRX(381) ; 12060500
|
|
L1: STEPIT ; 12060550
|
|
IF TABLE(I+1)=COMMA THEN 12060600
|
|
BEGIN 12060700
|
|
IF ELCLASS=ADOP THEN 12060800
|
|
BEGIN 12060900
|
|
T~ELBAT[I].ADDRESS ; 12061000
|
|
EMITPAIR(9,STD); EMITO(XCH); EMITV(9); EMITO(T) ; 12061100
|
|
EMITPAIR(9,STD); EMITO(T); EMITV(9) ; 12061200
|
|
L4: IF S~S-1<1 THEN FLAG(382); STEPIT; GO L1 ; 12061300
|
|
END ; 12061400
|
|
IF ELCLASS=MULOP THEN 12061500
|
|
BEGIN 12061600
|
|
EMITO(MKS) ; 12061700
|
|
EMITL(IF ELBAT[I].ADDRESS=MUL THEN 26 ELSE 35) ; 12061725
|
|
EMITV(GNAT(SPECIALMATH)) ; 12061750
|
|
L5: EMITO(DEL); EMITO(DEL); GO L4 ; 12061800
|
|
END ; 12061900
|
|
IF ELCLASS=ASSIGNOP THEN 12062000
|
|
BEGIN 12062100
|
|
IF S~S-1<0 THEN FLAG(385); T~0; STEPIT ; 12062200
|
|
B~ELCLASS=INTID OR ELCLASS=INTPROCID 12062250
|
|
OR ELCLASS=INTARRAYID ; 12062255
|
|
DO BEGIN 12062300
|
|
IF ELCLASS!COMMA THEN ERRX(384); STEPIT ; 12062400
|
|
IF ELCLASS>BOOID AND ELCLASS<BOOARRAYID THEN 12062500
|
|
BEGIN EMITN(ELBAT[I].ADDRESS); STEPIT END 12062600
|
|
ELSE IF ELCLASS>BOOPROCID AND ELCLASS<BOOID THEN 12062700
|
|
IF ELBAT[I].LINK!PROINFO.LINK THEN FLAG(211)12062800
|
|
ELSE BEGIN EMITL(514); STEPIT END 12062900
|
|
ELSE IF ELCLASS<LABELID AND ELCLASS>BOOARRAYID 12063000
|
|
THEN VARIABLE(FL) 12063100
|
|
ELSE ERRX(386) ; 12063200
|
|
EMITO(IF B THEN ISD ELSE STD) ; 12063300
|
|
END 12063400
|
|
UNTIL T~T+1=2 ; 12063500
|
|
IF ELCLASS!RTPAREN THEN GO L3 ; 12063600
|
|
IF S!0 THEN FLAG(383) ELSE BEGIN STEPIT; GO EXIT END ; 12063610
|
|
END ; 12063700
|
|
IF ELCLASS=FACTOP THEN 12063800
|
|
BEGIN 12063900
|
|
EMITO(MKS); EMITL(8); EMITV(GNAT(POWERALL)); GO L5 ; 12064000
|
|
END ; 12064100
|
|
IF ELCLASS>BOOID AND ELCLASS<BOOARRAYID THEN 12064200
|
|
BEGIN 12064300
|
|
CHECKER(T~ELBAT[I]); STEPIT; STEPIT; AEXP ; 12064400
|
|
EMITV(T.ADDRESS); GO L2 ; 12064500
|
|
END ; 12064600
|
|
END ; 12064700
|
|
AEXP; IF ELCLASS!COMMA THEN ERRX(384); STEPIT; AEXP; EMITO(XCH);12064800
|
|
L2: S~S+1 ; 12064900
|
|
L3: IF ELCLASS=COMMA THEN GO L1; T~384 ; 12065000
|
|
ERROR: 12065100
|
|
ERR(T) ; 12065200
|
|
EXIT: 12065300
|
|
END OF CMPLXSTMT ; 12065400
|
|
REAL PROCEDURE FIXDEFINEINFO(T); VALUE T; REAL T; 12101000
|
|
BEGIN REAL K,S,P,J,EL; 12102000
|
|
MACROID~TRUE; 12107000
|
|
P ~ GIT(FIXDEFINEINFO ~ T); 12108000
|
|
STOPDEFINE~TRUE; 12111000
|
|
EL~TABLE(NXTELBT); 12112000
|
|
NXTELBT~NXTELBT-1; 12113000
|
|
IF EL!LEFTPAREN AND EL!LFTBRKET THEN 12114000
|
|
FLAG(175) % [ OR ( EXPECTED. 12115000
|
|
ELSE DO BEGIN J~J+1; 12116000
|
|
TEXT[NEXTTEXT.LINKR,NEXTTEXT.LINKC] := TAKE(P); %122- 12117000
|
|
NEXTTEXT := NEXTTEXT + 1; %122- 12118000
|
|
PUT(TAKE(P) & NEXTTEXT[11:32:16] & 12121000
|
|
DEFSTACKHEAD[35:35:13], P); 12122000
|
|
DEFSTACKHEAD ~ P.LINK; 12123000
|
|
P ~ GIT(K~P); 12123500
|
|
DEFINEGEN(TRUE,0); 12124000
|
|
END UNTIL EL ~ ELBAT[NXTELBT].CLASS ! COMMA OR K = P; 12125000
|
|
IF EL!RTPAREN AND EL!RTBRKET OR K!P THEN 12126000
|
|
FLAG(174);%INCORRECT # OF PARAMS IN DEFINE INVOCATION. 12126100
|
|
MACROID~FALSE; 12127000
|
|
END; 12128000
|
|
PROCEDURE DEFINEPARAM(DINFO, N); 12150000
|
|
COMMENT DEFINEPARAM GENERATES EVERYTHING (EXCEPT THE ELBAT 12150100
|
|
WORD) FOR AN INFO TABLE ENTRY FOR A PARAMETER OF A 12150200
|
|
PARAMETRIC DEFINE. 12150300
|
|
; 12150400
|
|
VALUE DINFO, N; INTEGER DINFO, N; 12151000
|
|
BEGIN 12152000
|
|
INTEGER J; 12153000
|
|
STREAM PROCEDURE MAKEPARAM(INF, ACC, C, Q, N); VALUE C, Q, N; 12154000
|
|
BEGIN 12155000
|
|
DI ~ ACC; DI ~ DI+3; 12156000
|
|
SI ~ INF; SI ~ SI+3; DS ~ C CHR; 12157000
|
|
SI ~ LOC N; SI ~ SI+7; DS ~ 1 CHR; 12158000
|
|
SI ~ LOC Q; SI ~ SI+6; DS ~ 1 CHR; 12159000
|
|
DI ~ ACC; DI ~ DI+2; DS ~ 1 CHR; 12160000
|
|
END MAKEPARAM; 12161000
|
|
ACCUM[1] ~ 0; 12161500
|
|
MAKEPARAM(INFO[DINFO.LINKR,DINFO.LINKC], ACCUM[1], 12162000
|
|
J ~ INFO[DINFO.LINKR,DINFO.LINKC].[12:6], 770+J, N); 12163000
|
|
SCRAM ~ ACCUM[1] MOD 125; 12164000
|
|
COUNT ~ J+2; 12165000
|
|
END DEFINEPARAM; 12166000
|
|
COMMENT THIS SECTION CONTAINS THE PROCEDURES USED BY THE BLOCK ROUTINE;13000000
|
|
PROCEDURE IODEC(IOT); 13001000
|
|
VALUE IOT; 13002000
|
|
INTEGER IOT; 13003000
|
|
BEGIN 13004000
|
|
STREAM PROCEDURE GET7(ACCUM,RESULT); 13005000
|
|
BEGIN 13006000
|
|
LOCAL T,T1; LABEL EXIT; 13007000
|
|
SI~ACCUM; SI~SI+2; DI~ LOC T; DI~DI+7; 13008000
|
|
DS~ CHR; T1~SI; SI~LOC T; SI~SI+7; 13009000
|
|
DI~ RESULT; DS~ 8 LIT "0 "; DI~DI-7; 13010000
|
|
IF SC}"0" 13011000
|
|
THEN IF SC<"8" 13012000
|
|
THEN 13013000
|
|
BEGIN 13014000
|
|
SI~T1; DS~ T CHR;GO TO EXIT 13015000
|
|
END; 13016000
|
|
SI~T1;DS ~ 7 CHR; 13017000
|
|
EXIT: 13018000
|
|
END; 13019000
|
|
STREAM PROCEDURE ENTERID(IDLOC,FILENO,TYPE,MULFID,FILID,FILID1,N); 13020000
|
|
VALUE FILENO,TYPE,MULFID,FILID,N; 13021000
|
|
BEGIN 13022000
|
|
DI~IDLOC; DI~DI+5;DI~DC; 13023000
|
|
SI~LOC FILENO; SI~SI+6; 13024000
|
|
DS~ 2 CHR; SI~LOC TYPE; 13025000
|
|
SI~ SI+7; DS~ CHR; 13026000
|
|
SI~ LOC MULFID;SI~SI+1; 13027000
|
|
DS~ 7 CHR; 13028000
|
|
SI~ LOC FILID;SI~SI+1; 13029000
|
|
DS~ 7 CHR; 13030000
|
|
SI~ LOC N; SI~SI+7; 13031000
|
|
DS~ CHR; 13032000
|
|
SI~ FILID1; SI~SI+3; 13033000
|
|
DS~ N CHR; N~DI; 13034000
|
|
DI~ IDLOC; DI~DI+5; 13035000
|
|
SI~ LOC N; SI~SI+5; 13036000
|
|
DS~ 3 CHR 13037000
|
|
END; 13038000
|
|
REAL MULFID,FILID,TYPE,M,K; 13039000
|
|
DEFINE CALL5=EMITL(0); EMITL(IOT); EMITL(8); EMITV(5) # ; 13039400
|
|
REAL SAVADDRSF ; 13039450
|
|
REAL ACCUM1; 13039500
|
|
INTEGER CURRENT, IOTEMP, IOTEMPO; 13039550
|
|
LABEL START; 13040000
|
|
JUMPCHKX; 13041000
|
|
IF G~GTA1[J~J-1]=FILEV 13042000
|
|
THEN 13043000
|
|
BEGIN 13044000
|
|
IF G~GTA1[J~J-1]=SWITCHV 13045000
|
|
THEN 13046000
|
|
BEGIN 13047000
|
|
STOPENTRY~NOT SPECTOG; 13048000
|
|
ENTRY(SUPERFILEID); 13049000
|
|
IF SPECTOG THEN GO TO START; 13050000
|
|
IF ELCLASS!ASSIGNOP 13051000
|
|
THEN FLAG(34); 13052000
|
|
EMITO(MKS); 13053000
|
|
CHECKDISJOINT(ADDRSF); 13054000
|
|
G~L;L~L+1; 13055000
|
|
EMITL(1); 13056000
|
|
EMITL(1); 13057000
|
|
EMITL(1); 13058000
|
|
EMITV(5) ; 13059000
|
|
13060000
|
|
J~-1; STOPENTRY~FALSE; 13061000
|
|
DO 13062000
|
|
BEGIN 13063000
|
|
IF STEPI ! FILEID% 13064000
|
|
THEN FLAG(35); 13065000
|
|
PASSFILE; 13066000
|
|
EMITL(J~J+1); 13067000
|
|
EMITN(ADDRSF); 13068000
|
|
EMITO(STD); 13069000
|
|
END 13070000
|
|
UNTIL ELCLASS!COMMA; 13071000
|
|
GT2~L;L~G; EMITL(J+1); L~GT2; GO TO START 13072000
|
|
END; 13073000
|
|
I~I-1;M~1; 13074000
|
|
IF G=ALFAV 13075000
|
|
THEN M~0 13076000
|
|
ELSE J~J+1;K~J; STOPENTRY~NOT SPECTOG; 13077000
|
|
DO 13078000
|
|
BEGIN 13079000
|
|
STOPDEFINE := TRUE ; 13079500
|
|
STEPIT; J:=K;P2:=P3:=P4:=FALSE;GTA1[0]:=0; GET7(ACCUM[1],FILID);13080000
|
|
MULFID~0;TYPE~2; ENTER(FILEID); 13081000
|
|
SAVADDRSF~ADDRSF ; 13081500
|
|
IF SPECTOG THEN GO TO START; 13082000
|
|
EMITO(MKS);EMITL(0);EMITL(0); 13082500
|
|
IF ELCLASS=LITNO 13083000
|
|
THEN 13084000
|
|
BEGIN 13085000
|
|
TYPE~ELBAT[I].ADDRESS; 13086000
|
|
STEPIT 13087000
|
|
END; 13088000
|
|
IF ELCLASS{IDMAX THEN 13088010
|
|
BEGIN 13088020
|
|
% TO VOID A CARD 13088025
|
|
IF ACCUM1~ACCUM[1]="5PRINT" THEN TYPE~1 ELSE 13088030
|
|
IF ACCUM1="6REMOT" THEN TYPE ~ 19 ELSE 13088035
|
|
IF ACCUM1="5PUNCH" THEN TYPE~0 ELSE 13088040
|
|
IF ACCUM1="4DISK0" THEN BEGIN STOPDEFINE~TRUE ; 13088050
|
|
TYPE:=12; IF STEPI { IDMAX THEN BEGIN IF ACCUM1 := ACCUM[1] ! 13088060
|
|
"6SERIA" THEN BEGIN IF ACCUM1 = "6RANDO" THEN 13088070
|
|
TYPE:=TYPE-2 ELSE IF ACCUM1 = "6UPDAT" THEN 13088075
|
|
TYPE:=TYPE+1 ELSE 13088080
|
|
IF ACCUM1="7PROTE" THEN TYPE~26 ELSE 13088082
|
|
FLAG(43);END;STEPIT; END; IF ELCLASS=LFTBRKET THEN 13088085
|
|
BEGIN STEPIT;L~L-2;AEXP;IF ELCLASS=COLON THEN BEGIN 13088090
|
|
STEPIT; AEXP END ELSE FLAG(30); 13088100
|
|
IF ELCLASS!RTBRKET THEN FLAG(44);END ELSE I~I-1; 13088105
|
|
END; 13088110
|
|
STEPIT 13088120
|
|
END; 13088130
|
|
IF ELCLASS=STRNGCON THEN 13089000
|
|
BEGIN 13090000
|
|
GET7(ACCUM[1],G); 13091000
|
|
IF STEPI=STRNGCON 13092000
|
|
THEN 13093000
|
|
BEGIN 13094000
|
|
GET7(ACCUM[1],FILID); 13095000
|
|
STEPIT; 13096000
|
|
MULFID~G 13097000
|
|
END 13098000
|
|
ELSE 13099000
|
|
FILID~G; 13100000
|
|
END; 13101000
|
|
IF MKABS(IDARRAY[127]) - IDLOC.[33:15] < (26 + KOUNT).[41:4] 13101100
|
|
THEN FLAG(040) ELSE 13101200
|
|
ENTERID(IDLOC,FILENO ,TYPE,MULFID,FILID,INFO[(LASTINFO+1). 13102000
|
|
LINKR,(LASTINFO+1).LINKC],KOUNT); 13103000
|
|
IF ELCLASS!LEFTPAREN 13104000
|
|
THEN FLAG(26); 13105000
|
|
ARRAYFLAG~BOOLEAN(3) ; 13106000
|
|
13107000
|
|
EMITL(REAL(NOT(P2 OR P3)).[46:2]); 13108000
|
|
EMITL(FILENO);FILENO~FILENO+1; 13109000
|
|
CHECKDISJOINT(TAKE(LASTINFO).ADDRESS); 13110000
|
|
STEPIT;AEXP;EMITL(M); 13111000
|
|
COMMENT GUESS AT THE NO. OF BUFFERS DECLARED; 13112000
|
|
IF (IOTEMP~GET(L-2)).[46:2] = 0 THEN CURRENT ~ IOTEMP 13113000
|
|
DIV 4 ELSE CURRENT~2; 13114000
|
|
13115000
|
|
13116000
|
|
13117000
|
|
13118000
|
|
13119000
|
|
13120000
|
|
13121000
|
|
13122000
|
|
13123000
|
|
13124000
|
|
13125000
|
|
13126000
|
|
13127000
|
|
13128000
|
|
13129000
|
|
13130000
|
|
13131000
|
|
13132000
|
|
13133000
|
|
13134000
|
|
13135000
|
|
13136000
|
|
13137000
|
|
13138000
|
|
13139000
|
|
13140000
|
|
13141000
|
|
13142000
|
|
13143000
|
|
13144000
|
|
IF ELCLASS ! COMMA THEN BEGIN FLAG(27); GO TO START END 13145000
|
|
ELSE 13146000
|
|
BEGIN 13147000
|
|
STEPIT; AEXP; 13148000
|
|
; 13148100
|
|
IF (IOTEMP~GET(L-1)).[46:2] = 0 THEN IOTEMP~IOTEMP DIV 4 13148200
|
|
ELSE IOTEMP~ 256; 13148300
|
|
IF ELCLASS!COMMA 13149000
|
|
THEN 13150000
|
|
BEGIN 13151000
|
|
EMITL(0); 13152000
|
|
CALL5 ; 13153000
|
|
END 13154000
|
|
ELSE 13155000
|
|
BEGIN 13156000
|
|
IF GT1~FILEATTRIBUTEINDX(FALSE)=0 THEN 13157000
|
|
BEGIN AEXP; 13157010
|
|
IF (IOTEMPO:=GET(L-1)).[46:2] = 0 THEN 13157020
|
|
IF IOTEMPO DIV 4 > IOTEMP THEN 13157030
|
|
IOTEMP:=IOTEMPO DIV 4; CALL5; END 13157040
|
|
ELSE BEGIN 13158000
|
|
EMITL(0); CALL5; EMITO(MKS); EMITL(5) ; 13159000
|
|
EMITN(SAVADDRSF); GT1~FILEATTRIBUTEHANDLER(FIO);13160000
|
|
END ; 13161000
|
|
WHILE ELCLASS=COMMA DO 13162000
|
|
IF GT1~FILEATTRIBUTEINDX(TRUE)=0 THEN 13163000
|
|
BEGIN ERR(291); GO START END 13164000
|
|
ELSE BEGIN 13165000
|
|
EMITO(MKS); EMITL(5); EMITN(SAVADDRSF) ; 13166000
|
|
GT1~FILEATTRIBUTEHANDLER(FIO); 13167000
|
|
END ; 13168000
|
|
END ; 13169000
|
|
END ; 13170000
|
|
ARRAYFLAG~FALSE ; 13181000
|
|
IF ELCLASS!RTPAREN THEN FLAG(29); 13182000
|
|
COMMENT TOTAL UP THE BUFFER REQ. PER FILE DECLARATION; 13183000
|
|
IOBUFFSIZE~IOBUFFSIZE + 50 + ( CURRENT | IOTEMP); 13184000
|
|
% VOID 13185000
|
|
% VOID 13186000
|
|
END 13187000
|
|
UNTIL STEPI!COMMA; 13188000
|
|
STOPENTRY~FALSE; 13189000
|
|
END ELSE 13190000
|
|
BEGIN 13191000
|
|
IF G!FORMATV THEN FLAG(33) ELSE 13192000
|
|
IF SPECTOG THEN ENTRY(FRMTID+REAL(GTA1[J-1]=SWITCHV))ELSE FORMATGEN13193000
|
|
END; 13194000
|
|
START: 13195000
|
|
END; 13196000
|
|
PROCEDURE HANDLESWLIST; 13196300
|
|
BEGIN 13196310
|
|
LABEL OVER; 13196320
|
|
13196330
|
|
JUMPCHKX; 13196340
|
|
STOPENTRY~ NOT SPECTOG; 13196350
|
|
ENTRY(SUPERLISTID); 13196360
|
|
IF SPECTOG THEN GO TO OVER; 13196370
|
|
IF ELCLASS ! ASSIGNOP THEN FLAG(41); 13196380
|
|
COMMENT MISSING ~; 13196390
|
|
EMITO(MKS); 13196400
|
|
CHECKDISJOINT(ADDRSF); 13196410
|
|
G~L; L~L+1; 13196420
|
|
EMITL(1); 13196430
|
|
EMITL(1); 13196440
|
|
EMITL(1); 13196450
|
|
EMITV(5); COMMENT CREATE AN ARRAY TO HOLD 13196460
|
|
LIST DESCRIPTORS FOR SWITCH LIST; 13196470
|
|
COMMENT USED TO USE EMITN(XITR), DOESN"T ANYMORE; 13196480
|
|
J~-1; STOPENTRY ~ FALSE; 13196490
|
|
DO 13196500
|
|
BEGIN 13196510
|
|
IF STEPI ! LISTID AND ELCLASS ! SUPERLISTID 13196520
|
|
THEN BEGIN ERR(42); GO TO OVER END; 13196530
|
|
PASSLIST; 13196540
|
|
EMITL(J~J+1); 13196550
|
|
EMITN(ADDRSF); 13196560
|
|
EMITO(STD); COMMENT STORE LIST DESC IN ARRAY;13196570
|
|
END 13196580
|
|
UNTIL ELCLASS ! COMMA; 13196590
|
|
GT2~L; L~G; EMITL(J+1); L~GT2; 13196600
|
|
OVER: END OF HANDLESWLIST; 13196610
|
|
PROCEDURE SCATTERELBAT; 13197000
|
|
BEGIN 13198000
|
|
REAL T; 13199000
|
|
T ~ ELBAT[I]; 13200000
|
|
KLASSF ~ T.CLASS; 13201000
|
|
FORMALF ~ BOOLEAN(T.FORMAL); 13202000
|
|
VONF ~ BOOLEAN(T.VO); 13203000
|
|
LEVELF ~ T.LVL; 13204000
|
|
ADDRSF ~ T.ADDRESS; 13205000
|
|
INCRF ~ T.INCR; 13206000
|
|
LINKF ~ T.LINK; 13207000
|
|
END SCATTERELBAT; 13208000
|
|
PROCEDURE CHKSOB; 13209000
|
|
IF GTA1[J~J-1]!0 THEN FLAG(23); 13210000
|
|
DEFINE SUBOP=48#, 13211000
|
|
ADDC=532480#, 13212000
|
|
SUBC=1581056#, 13213000
|
|
EMITSTORE=EMITPAIR#; 13214000
|
|
PROCEDURE PURGE(STOPPER); 13215000
|
|
VALUE STOPPER; 13216000
|
|
REAL STOPPER; 13217000
|
|
BEGIN 13218000
|
|
INTEGER POINTER; 13219000
|
|
LABEL RECOV; DEFINE ELCLASS = KLASSF#; 13220000
|
|
REAL J,N,OCR,TL,ADD; 13221000
|
|
POINTER~LASTINFO; 13222000
|
|
WHILE POINTER } STOPPER 13223000
|
|
DO 13224000
|
|
BEGIN 13225000
|
|
IF ELCLASS~(GT1~TAKE(POINTER)).CLASS=NONLITNO 13226000
|
|
THEN BEGIN 13227000
|
|
NCII~NCII-1; 13228000
|
|
EMITNUM(TAKE(POINTER+1)); 13229000
|
|
EMITSTORE(MAXSTACK,STD); 13230000
|
|
MAXSTACK~(G~MAXSTACK)+1; 13231000
|
|
J~L; L~GT1.LINK; 13232000
|
|
DO 13233000
|
|
BEGIN 13234000
|
|
GT4~GET(L); 13235000
|
|
EMITV(G) 13236000
|
|
END 13237000
|
|
UNTIL (L~GT4)=4095; 13238000
|
|
L~J; 13239000
|
|
POINTER~POINTER-GT1.INCR 13240000
|
|
END 13241000
|
|
ELSE 13242000
|
|
BEGIN 13243000
|
|
IF NOT BOOLEAN(GT1.FORMAL) 13244000
|
|
THEN BEGIN 13245000
|
|
IF ELCLASS = LABELID 13246000
|
|
THEN BEGIN 13247000
|
|
ADD ~ GT1.ADDRESS; 13248000
|
|
IF NOT BOOLEAN(OCR~TAKE(GIT(POINTER))).[1:1] 13249000
|
|
THEN IF OCR.[36:12] ! 0 OR ADD ! 0 13250000
|
|
THEN BEGIN GT1 ~ 160; GO TO RECOV END; 13251000
|
|
IF ADD ! 0 THEN GT1~PROGDESCBLDR(2,OCR,ADD) END 13252000
|
|
ELSE IF ELCLASS = SWITCHID 13253000
|
|
THEN BEGIN 13254000
|
|
IF TAKE(POINTER+1) < 0 13255000
|
|
THEN BEGIN GT1 ~ 162; GO TO RECOV END; 13256000
|
|
OCR ~(J ~ TAKE(GIT(POINTER))).[24:12]; 13257000
|
|
N ~ GET( (J~J.[36:12])+4); TL ~ L; 13258000
|
|
IF ADD ~ GT1.ADDRESS ! 0 13259000
|
|
THEN BEGIN 13260000
|
|
GT5 ~ PROGDESCBLDR(0,J,ADD); 13261000
|
|
IF OCR ! 0 13262000
|
|
THEN BEGIN L~OCR-2; CALLSWITCH(POINTER); EMITO(BFW);END; 13263000
|
|
L~J+11; EMITL(15); EMITO(RTS); 13264000
|
|
FOR J ~ 4 STEP 4 UNTIL N 13265000
|
|
DO BEGIN 13266000
|
|
EMITL(GNAT(GET(L)|4096+GET(L+1))); 13267000
|
|
EMITO(RTS) END END 13268000
|
|
ELSE BEGIN 13269000
|
|
L ~ J+13; 13270000
|
|
FOR J ~ 4 STEP 4 UNTIL N 13271000
|
|
DO BEGIN 13272000
|
|
GT1 ~ GET(L)|4096+GET(L+1); 13273000
|
|
GOGEN(GT1,BFW) END;END; 13274000
|
|
13275000
|
|
13276000
|
|
L ~ TL END 13277000
|
|
ELSE IF ELCLASS } PROCID AND ELCLASS { INTPROCID 13278000
|
|
THEN IF TAKE(POINTER+1) < 0 13279000
|
|
THEN BEGIN GT1 ~ 161; 13280000
|
|
RECOV: MOVE(9,INFO[POINTER.LINKR,POINTER.LINKC],ACCUM);13281000
|
|
Q ~ ACCUM[1]; FLAG(GT1); ERRORTOG ~ TRUE END 13282000
|
|
END; 13283000
|
|
XREFDUMP(POINTER); % DUMP XREF INFO %116-13283500
|
|
GT2~TAKE(POINTER+1); 13284000
|
|
GT3~GT2.PURPT; 13285000
|
|
STACKHEAD[(0>2[12:12:36])MOD 125]~TAKE(POINTER).LINK; 13286000
|
|
POINTER~POINTER-GT3 13287000
|
|
END 13288000
|
|
END ; 13289000
|
|
LASTINFO~POINTER; 13290000
|
|
NEXTINFO~STOPPER 13291000
|
|
END; 13292000
|
|
PROCEDURE E; 13293000
|
|
COMMENT 13294000
|
|
E IS THE PROCEDURE WHICH PLACES AN ENTRY IN INFO AND 13295000
|
|
HOOKS IT INTO STACKHEAD. THE PREVIOUS STACKHEAD LINK 13296000
|
|
IS SAVED IN THE LINK OF THE ELBAT WORD IN THE NEW ENTRY 13297000
|
|
E PREVENTS AN ENTRY FROM OVERFLOWING A ROW,STARTING AT THE 13298000
|
|
BEGINNING OF THE NEXT ROW IF NECESSARY ;13299000
|
|
BEGIN 13300000
|
|
REAL WORDCOUNT,RINX; 13301000
|
|
IF RINX~(NEXTINFO+WORDCOUNT~(COUNT+18)DIV 8 ).LINKR ! 13302000
|
|
NEXTINFO.LINKR 13303000
|
|
THEN BEGIN PUT(0&(RINX|256-NEXTINFO)[27:40:8],NEXTINFO); 13304000
|
|
NEXTINFO~256|RINX END; 13305000
|
|
IF SPECTOG THEN 13305100
|
|
IF NOT MACROID THEN 13305200
|
|
UNHOOK; 13305300
|
|
KOUNT~COUNT; 13306000
|
|
ACCUM[0].INCR~WORDCOUNT; 13307000
|
|
ACCUM[0].LINK ~STACKHEAD[SCRAM];STACKHEAD[SCRAM]~NEXTINFO; 13308000
|
|
ACCUM[1].PURPT~NEXTINFO-LASTINFO; 13309000
|
|
MOVE(WORDCOUNT,ACCUM,INFO[NEXTINFO.LINKR,NEXTINFO.LINKC]); 13310000
|
|
IF XREF THEN % MAKE DECLARATION REFERENCE %116-13310050
|
|
IF (ACCUM[0].CLASS ! DEFINEDID OR NOT %116-13310075
|
|
BOOLEAN(ACCUM[0].FORMAL)) THEN % NOT DEFINE PARAMETER%116-13310080
|
|
BEGIN %116-13310100
|
|
XREFINFO[NEXTINFO] := %116-13310200
|
|
IF SPECTOG THEN %116-13310300
|
|
XREFINFO[ELBAT[I]] %116-13310350
|
|
ELSE %116-13310400
|
|
((XLUN := XLUN + 1) & SGNO SEGNOF); %116-13310450
|
|
IF SPECTOG THEN % JUST GO BACK AND FIX UP XREF ENTRY %116-13310500
|
|
XMARK(DECLREF) %116-13310525
|
|
ELSE %116-13310550
|
|
XREFIT(NEXTINFO,CARDNUMBER,IF PTOG AND NOT STREAMTOG%116-13310575
|
|
THEN NORMALREF ELSE DECLREF); %116-13310580
|
|
END %116-13310600
|
|
ELSE % DEFINE PARAMETERS - DONT CROSS REF. %116-13310700
|
|
XREFINFO[NEXTINFO] := 0 %116-13310750
|
|
ELSE %116-13310800
|
|
IF DEFINING.[1:1] THEN % WE ARE DOING XREFING %116-13310900
|
|
XREFINFO[NEXTINFO] := 0; %116-13310950
|
|
LASTINFO~NEXTINFO; 13311000
|
|
IF NEXTINFO ~ NEXTINFO+WORDCOUNT } 8192 THEN 13312000
|
|
BEGIN FLAG(199); GO TO ENDOFITALL END; 13312500
|
|
END; 13313000
|
|
PROCEDURE ENTRY(TYPE); 13314000
|
|
VALUE TYPE; 13315000
|
|
REAL TYPE; 13316000
|
|
COMMENT 13317000
|
|
ENTRY ASSUMES THAT I IS POINTING AT AN IDENTIFIER WHICH 13318000
|
|
IS BEING DECLARED AND MAKES UP THE ELBAT ENTRY FOR IT 13319000
|
|
ACCORD TO TYPE .IF THE ENTRY IS AN ARRAY AND NOT 13320000
|
|
A SPECIFICATION THEN A DESCRIPTOR IS PLACED IN THE STACK 13321000
|
|
FOR THE UPCOMING COMMUNICATE TO GET STORAGE FOR THE ARRAY(S) ;13322000
|
|
BEGIN 13323000
|
|
BOOLEAN SVTOG;% 13323010
|
|
J~0;I~I-1; 13324000
|
|
DO 13325000
|
|
BEGIN 13326000
|
|
STOPDEFINE ~TRUE; STEPIT; SCATTERELBAT; 13327000
|
|
IF FORMALF~SPECTOG 13328000
|
|
THEN 13329000
|
|
BEGIN 13330000
|
|
IF TYPE{INTARRAYID AND TYPE}BOOARRAYID THEN% 13330550
|
|
IF VONF THEN BEGIN SVTOG ~ ERRORTOG; FLAG(15);% 13330600
|
|
SPECTOG ~ ERRORTOG ~ SVTOG; END;% 13330650
|
|
IF ELCLASS!SECRET 13331000
|
|
THEN FLAG(002); 13332000
|
|
BUP~BUP+1 13333000
|
|
END 13334000
|
|
ELSE 13335000
|
|
BEGIN 13336000
|
|
IF ELCLASS>IDMAX AND ELCLASS{FACTOP 13337000
|
|
THEN FLAG(003); 13338000
|
|
IF ELCLASS = DEFINEDID THEN % CHECK IF NEW DECLARATION 13339000
|
|
IF NOT (PTOG OR STREAMTOG) AND LINKF } GLOBALNINFOO 13339100
|
|
THEN FLAG(1) %118-13339200
|
|
ELSE %118-13339300
|
|
ELSE %118-13339400
|
|
IF LEVELF = LEVEL THEN % DUPLICATE DECLARATION %118-13339500
|
|
FLAG(1); %118-13340000
|
|
VONF~P2; 13341000
|
|
IF ((FORMALF~PTOG)OR (STREAMTOG AND NOT STOPGSP)) AND NOT P2 13342000
|
|
THEN ADDRSF ~ PJ ~PJ+1 13343000
|
|
ELSE IF STOPGSP THEN ADDRSF ~ 0 13344000
|
|
ELSE ADDRSF:=GETSPACE(P2,1); % ID IN ACCUM[1]. 13345000
|
|
IF TYPE{INTARRAYID AND TYPE}BOOARRAYID 13346000
|
|
THEN IF P2 THEN BEGIN COMMENT OWN ARRAY; 13347000
|
|
EMITL(ADDRSF); EMITN(10); 13347500
|
|
END 13347510
|
|
ELSE CHECKDISJOINT(ADDRSF); 13347520
|
|
END; 13348000
|
|
IF XREF AND NOT SPECTOG THEN % ERASE PREVIOUS XREF ENTRY. 13348100
|
|
XREFPT~XREFPT-REAL(ELBAT[I]!0); % GET RID OF LAST CREF 13348200
|
|
KLASSF~TYPE; MAKEUPACCUM;E; J~J+1; 13349000
|
|
END 13350000
|
|
UNTIL STEPI!COMMA OR STOPENTRY; GTA1[0]~J 13351000
|
|
END; 13352000
|
|
PROCEDURE UNHOOK; 13353000
|
|
COMMENT 13354000
|
|
UNHOOK ASSUMES THAT THE WORD IN ELBAT[I] POINTS TO A PSUEDO ENTRY 13355000
|
|
FOR APARAMETER.ITS JOB IS TO UNHOOK THAT FALSE ENTRY SO THAT 13356000
|
|
E WILL WORK AS NORMAL. ;13357000
|
|
BEGIN 13358000
|
|
REAL LINKT,A,LINKP; 13359000
|
|
LABEL L; 13360000
|
|
LINKT~STACKHEAD[SCRAM] ; LINKP~ELBAT[I].LINK; 13361000
|
|
IF LINKT=LINKP THEN STACKHEAD[SCRAM]~TAKE(LINKT).LINK 13362000
|
|
ELSE 13363000
|
|
L: IF A~TAKE(LINKT).LINK=LINKP 13364000
|
|
THEN PUT((TAKE(LINKT))&(TAKE(A))[35:35:13],LINKT) 13365000
|
|
ELSE BEGIN LINKT~A; GO TO L END; 13366000
|
|
END; 13367000
|
|
PROCEDURE MAKEUPACCUM; 13368000
|
|
BEGIN 13369000
|
|
IF PTOG 13370000
|
|
THEN GT1~LEVELF ELSE GT1~LEVEL; 13371000
|
|
ACCUM[0]~ ABS(ELBAT[I] & KLASSF[2:41:7] & REAL(FORMALF)[9:47:1] 13372000
|
|
& REAL(VONF)[10:47:1] & GT1[11:43:5] &ADDRSF[16:37:11]13373000
|
|
) 13374000
|
|
END; 13375000
|
|
PROCEDURE ARRAE; 13376000
|
|
COMMENT 13377000
|
|
ARRAE ENTERS INFO ABOUT ARRAYS AND THEIR LOWER BOUNDS. 13378000
|
|
IT ALSO EMITS CODE TO COMMUNICATE WITH THE MCP TO OBTAIN 13379000
|
|
STORAGE FOR THE ARRAY AT OBJECT TIME.SPECIAL ANALYSIS IS 13380000
|
|
MADE TO GENERATE EFFICIENT CODE WHEN DETERMING THE SIZE OF 13381000
|
|
EACH DIMENSION.FOLLOWING ARE A FEW EXAMPLES OF CODE EMITTED: 13382000
|
|
ARRAY A[0:10], 13383000
|
|
MKS (THIS MARKS STACK TO CUT BACK AFTER COM)13384000
|
|
DESC A (THIS FORMS A DESCRITOR POINTING TO 13385000
|
|
THE ADDRESS OF A) 13386000
|
|
LITC 11 (SIZE OF ARRAY) 13387000
|
|
LITC 1 (NUMBER OF DIMENSIONS) 13388000
|
|
LITC 1 (NUMBER OF ARRAYS) 13389000
|
|
LITC ARCOM (COMMUNICATE LITERAL FOR NON SAVE, 13390000
|
|
NON OWN ARRAYS) 13391000
|
|
COM (COMMUNICATE TO MCP TO GET STORAGE) 13392000
|
|
DESC XITR (XITR JUST EXITS,THUS CUTTING BACK 13393000
|
|
STACK) 13394000
|
|
OWN ARRAY B,C[0:X,-1:10], 13395000
|
|
MKS 13396000
|
|
DESC B 13397000
|
|
DESC C 13398000
|
|
LITC 0 (LOWER BOUND MUST BE PASSED FOR OWN) 13399000
|
|
OPDC X 13400000
|
|
LITC JUNK (JUNK CELL) 13401000
|
|
ISN (INTEGERIZE UPPER BOUND) 13402000
|
|
LITC 1 (COMPUTE SIZE 13403000
|
|
ADD OF DIMENSION 13404000
|
|
LITC 1 (LOWER BOUND,SECOND DIMENSION) 13405000
|
|
CHS 13406000
|
|
LITC 12 (SIZE SECOND DIMENSION) 13407000
|
|
LITC 2 (NUMBER DIMENSIONS) 13408000
|
|
LITC 2 (NUMBER ARRAYS) 13409000
|
|
LITC OWNCOM (OWN ARRAY COMMUNICATE) 13410000
|
|
COM 13411000
|
|
DESC XITR 13412000
|
|
SAVE OWN ARRAY D,E,F[X:Y,M+N:T|V], 13413000
|
|
MKS 13414000
|
|
DESC D 13415000
|
|
DESC E 13416000
|
|
DESC F 13417000
|
|
OPDC X 13418000
|
|
LITC XT (CELL OBTAINED TO KEEP LOWER BOUND) 13419000
|
|
ISN (PUT INTEGERIZED LOWER BOUND AWAY) 13420000
|
|
DUP (MUST PASS LOWER BOUND FOR OWN) 13421000
|
|
OPDC Y (INTEGERIZE 13422000
|
|
LITC JUNK UPPER 13423000
|
|
ISN BOUND) 13424000
|
|
XCH (COMPUTE SIZE OF FIRST DIMENSION 13425000
|
|
SUB UPPER 13426000
|
|
LITC 1 -LOWER 13427000
|
|
ADD +1) 13428000
|
|
OPDC M (COMPUTER LOWER BOUND 13429000
|
|
OPDC N SECOND DIM) 13430000
|
|
ADD 13431000
|
|
LITC MNT (GET CELL FOR SECOND LOWER BOUND) 13432000
|
|
ISN (INTEGERIZE) 13433000
|
|
DUP (PASS LOWER BOUND FOR OWN) 13434000
|
|
OPDC T 13435000
|
|
MUL V 13436000
|
|
LITC JUNK (INTEGERIZE 13437000
|
|
ISN UPPER) 13438000
|
|
XCH (COMPUTE 13439000
|
|
SUB SIZE 13440000
|
|
LITC 1 13441000
|
|
ADD ) 13442000
|
|
LITC 2 (NUMBER DIMENSIONS) 13443000
|
|
LITC 3 (NUMBER ARRAYS) 13444000
|
|
LITC SAVON (SAVE OWN LITERAL FOR COM) 13445000
|
|
COM 13446000
|
|
DESC XITR ; 13447000
|
|
BEGIN 13448000
|
|
REAL T1,T2,T3,K,LBJ,ARPROGS,SAVEDIM,T,T4,SAVEINFO,SAVEINFO2; 13449000
|
|
BOOLEAN LLITOG,ULITOG; 13450000
|
|
REAL ADDCON; 13451000
|
|
LABEL CSZ,BETA1,TWO,START,SLB,BETA2; 13452000
|
|
ARRAYFLAG ~ TRUE; 13452100
|
|
TYPEV~REALARRAYID; 13453000
|
|
IF T1~GTA1[J~J-1]=0 THEN J~J+1 13454000
|
|
ELSE 13455000
|
|
IF T1=OWNV THEN 13456000
|
|
BEGIN P2:=TRUE;IF SPECTOG THEN FLAG(13) END 13457000
|
|
ELSE 13458000
|
|
IF T1= SAVEV THEN 13459000
|
|
BEGIN 13460000
|
|
P3:=TRUE; 13461000
|
|
IF SPECTOG THEN FLAG(13); 13462000
|
|
% IF REMOTOG THEN FLAG(508); % NOT ALLOWED IN XALGOL ON TSS. 13463000
|
|
END 13464000
|
|
ELSE 13465000
|
|
IF T1= AUXMEMV THEN 13466000
|
|
BEGIN P4:=TRUE; IF SPECTOG THEN FLAG(13) END 13467000
|
|
ELSE 13468000
|
|
TYPEV :=REALID+T1; 13469000
|
|
IF NOT SPECTOG THEN EMITO(MKS); SAVEINFO~NEXTINFO; 13470000
|
|
ENTER(TYPEV); SAVEINFO2~NEXTINFO~NEXTINFO+1; 13471000
|
|
BETA1: 13472000
|
|
IF ELCLASS!LFTBRKET THEN FLAG(016); LBJ~0;SAVEDIM~1; 13473000
|
|
TWO:IF STEPI=ADOP THEN 13474000
|
|
BEGIN 13475000
|
|
T1~ELBAT[I].ADDRESS; I~I+1 13476000
|
|
END 13477000
|
|
ELSE T1~0;IF SPECTOG THEN GO TO BETA2; 13478000
|
|
ARPROGS~L; 13479000
|
|
IF TABLE(I+1)=COLON AND TABLE(I)=LITNO THEN 13480000
|
|
BEGIN 13481000
|
|
LLITOG~TRUE; 13482000
|
|
IF T3~ELBAT[I].ADDRESS!0 13483000
|
|
THEN 13484000
|
|
BEGIN 13485000
|
|
EMITL(T3); 13486000
|
|
IF T1=SUBOP THEN 13487000
|
|
BEGIN 13488000
|
|
EMITO(CHS); 13489000
|
|
ADDCON~ADDC 13490000
|
|
END ELSE 13491000
|
|
ADDCON~SUBC 13492000
|
|
END; 13493000
|
|
T2~T3|4+ADDCON 13494000
|
|
END 13495000
|
|
ELSE 13496000
|
|
BEGIN 13497000
|
|
LLITOG~FALSE; 13498000
|
|
IF T1!0 THEN I~I-1; 13499000
|
|
T2:=GETSPACE(P2,-1);%TEMP. 13500000
|
|
AEXP;EMITSTORE(T2,ISN); 13501000
|
|
T2~T2|4+SUBC+2; 13502000
|
|
IF ELCLASS!COLON THEN 13503000
|
|
FLAG(017);I~I-1 13504000
|
|
END; 13505000
|
|
IF P2 THEN 13506000
|
|
BEGIN 13507000
|
|
IF LLITOG AND T3=0 THEN EMITL(0);13508000
|
|
ARPROGS~L;EMITO(DUP); 13509000
|
|
END; 13510000
|
|
IF ELCLASS~TABLE(I~I+2)=LITNO THEN 13511000
|
|
BEGIN 13512000
|
|
IF T~TABLE(I~I+1)=COMMA OR 13513000
|
|
T=RTBRKET 13514000
|
|
THEN 13515000
|
|
BEGIN 13516000
|
|
EMITL(T4~ELBAT[I-1].ADDRESS);13517000
|
|
ULITOG~TRUE;GO TO CSZ 13518000
|
|
END 13519000
|
|
ELSE 13520000
|
|
I~I-1 13521000
|
|
END; 13522000
|
|
ULITOG~FALSE; 13523000
|
|
AEXP; 13524000
|
|
EMITL(JUNK); 13525000
|
|
EMITO(ISN); 13526000
|
|
CSZ: IF LLITOG AND ULITOG THEN 13527000
|
|
BEGIN 13528000
|
|
L~ARPROGS; 13529000
|
|
IF(T~IF ADDCON=ADDC THEN T4+T3+1 ELSE 13530000
|
|
T4-T3+1){0 OR T>1023 THEN FLAG(59); 13531000
|
|
EMITL(T); 13531100
|
|
IF P3 THEN BEGIN SAVEDIM~SAVEDIM|T; 13532000
|
|
IF SAVEDIM>MAXSAVE 13533000
|
|
THEN MAXSAVE~SAVEDIM 13534000
|
|
END 13535000
|
|
ELSE 13536000
|
|
IF T>MAXROW THEN MAXROW~T; 13537000
|
|
END 13538000
|
|
ELSE 13539000
|
|
BEGIN IF NOT(LLITOG AND T3=0) 13540000
|
|
OR P2 13541000
|
|
THEN 13542000
|
|
BEGIN 13543000
|
|
EMITO(XCH);EMITO(SUB) 13544000
|
|
END;EMITL(1);EMITO(ADD) 13545000
|
|
END; 13546000
|
|
SLB:PUTNBUMP(T2);LBJ~LBJ+1;IF T~TABLE(I)=COMMA THEN GO TO TWO 13547000
|
|
ELSE 13548000
|
|
IF T!RTBRKET THEN FLAG(018); 13549000
|
|
IF NOT SPECTOG THEN 13550000
|
|
BEGIN 13551000
|
|
COMMENT KEEP COUNT OF NO. OF ARRAYS DECLARED; 13551400
|
|
NOOFARRAYS:=NOOFARRAYS + GTA1[0]; 13551500
|
|
EMITL(LBJ);EMITL(GTA1[0]); 13552000
|
|
IF P3 AND P4 THEN FLAG(14); % SAVE AND AUXMEM MUTUALLY EXCL. 13552500
|
|
EMITL(REAL(P3)+2|REAL(P2)+REAL(P4)|64); 13553000
|
|
EMITV(5) 13554000
|
|
END; 13555000
|
|
PUT(LBJ,SAVEINFO2-1); 13556000
|
|
DO BEGIN 13557000
|
|
T~TAKE(SAVEINFO); 13558000
|
|
K~T.INCR; 13559000
|
|
T.INCR~SAVEINFO2-SAVEINFO-1; 13560000
|
|
PUT(T,SAVEINFO); 13561000
|
|
END 13562000
|
|
UNTIL SAVEINFO~SAVEINFO+K=SAVEINFO2-1; 13563000
|
|
IF STEPI!COMMA THEN GO TO START; 13564000
|
|
IF NOT SPECTOG THEN EMITO(MKS); 13565000
|
|
SAVEINFO~NEXTINFO; 13566000
|
|
I~I+1;ENTRY(TYPEV);SAVEINFO2~NEXTINFO~NEXTINFO+1;GO TO BETA1; 13567000
|
|
BETA2: 13568000
|
|
IF T~ TABLE(I~I+1)=COMMA OR T=RTBRKET 13569000
|
|
THEN 13570000
|
|
BEGIN 13571000
|
|
IF ELCLASS~TABLE(I-1)=LITNO 13572000
|
|
THEN 13573000
|
|
BEGIN 13574000
|
|
T3~ELBAT[I-1].ADDRESS; 13575000
|
|
IF T1= SUBOP THEN 13576000
|
|
ADDCON ~ADDC 13577000
|
|
ELSE 13578000
|
|
ADDCON ~SUBC; 13579000
|
|
T2~T3|4+ADDCON; GO TO SLB; 13580000
|
|
END; 13581000
|
|
IF ELCLASS=FACTOP THEN 13582000
|
|
BEGIN 13583000
|
|
T2~-SUBC; GO TO SLB 13584000
|
|
END 13585000
|
|
END; 13586000
|
|
FLAG(019); 13587000
|
|
START: ARRAYFLAG ~ FALSE END; 13588000
|
|
PROCEDURE PUTNBUMP(X); 13589000
|
|
VALUE X; 13590000
|
|
REAL X; 13591000
|
|
BEGIN 13592000
|
|
INFO[NEXTINFO.LINKR,NEXTINFO.LINKC]~X; 13593000
|
|
NEXTINFO~NEXTINFO+1 13594000
|
|
END ; 13595000
|
|
PROCEDURE JUMPCHKX; 13596000
|
|
COMMENT THIS PROCEDURE IS CALLED AT THE START OF ANY EXECUTABLE CODE 13597000
|
|
WHICH THE BLOCK MIGHT EMIT.IT DETERMINES WHETHER ANY JUMPS 13598000
|
|
ARROUND NONEXECUTABLE CODE MAY BE WAITING AND WHETHER IT 13599000
|
|
IS THE FIRST EXECUTABLE CODE; 13600000
|
|
IF NOT SPECTOG THEN 13601000
|
|
BEGIN 13602000
|
|
IF AJUMP 13603000
|
|
THEN 13604000
|
|
BEGIN ADJUST; 13605000
|
|
EMITB(BFW,SAVEL,L) 13606000
|
|
END ELSE 13607000
|
|
IF FIRSTX=4095 13608000
|
|
THEN 13609000
|
|
BEGIN 13610000
|
|
ADJUST; 13611000
|
|
FIRSTX~L; 13612000
|
|
END; 13613000
|
|
AJUMP~FALSE 13614000
|
|
END; 13615000
|
|
PROCEDURE JUMPCHKNX; 13616000
|
|
COMMENT JUMPCHKNX DETERMINES WHETHER ANY EXECUTABLE CODE HAS BEEN 13617000
|
|
EMITTED AND IF SO WHETHER IT WAS JUST PREVIOUS TO THE 13618000
|
|
NON EXECUTABLE ABOUT TO BE EMITTED.IF BOTH THEN L IS BUMPED 13619000
|
|
AND SAVED FOR A LATER BRANCH; 13620000
|
|
IF NOT SPECTOG THEN 13621000
|
|
BEGIN 13622000
|
|
IF FIRSTX!4095 13623000
|
|
THEN 13624000
|
|
BEGIN 13625000
|
|
IF NOT AJUMP 13626000
|
|
THEN 13627000
|
|
SAVEL~BUMPL; 13628000
|
|
AJUMP~TRUE 13629000
|
|
END;ADJUST 13630000
|
|
END; 13631000
|
|
PROCEDURE SEGMENTSTART; 13632000
|
|
BEGIN 13632100
|
|
IF NOHEADING THEN DATIME; 13633000
|
|
IF SINGLTOG THEN WRITE(LINE,PRINTSEGNO,SGAVL) 13633100
|
|
ELSE WRITE(LINE[DBL],PRINTSEGNO,SGAVL); 13633200
|
|
END SEGMENTSTART; 13633300
|
|
PROCEDURE SEGMENT(SIZE,NO,NOO); %106-13634000
|
|
VALUE SIZE,NO,NOO; %106-13635000
|
|
REAL SIZE,NO,NOO; %106-13636000
|
|
BEGIN %106-13637000
|
|
INTEGER DUMMY; % THIS IS HERE SO THAT OUR CODE SEGMENT %106-13637100
|
|
% IS NOT TOO BIG %106-13637200
|
|
PDPRT[PDINX.[37:5],PDINX.[42:6]] := %106-13638000
|
|
SIZE & NO[28:38:10] & %106-13639000
|
|
MOVEANDBLOCK(EDOC,ABS(SIZE),-ABS(NO))[13:33:15] & %106-13640000
|
|
REAL(SAVEPRTOG)[3:47:1]; %106-13641000
|
|
PDINX:=PDINX+1; SIZE:=ABS(SIZE); %106-13642000
|
|
IF SIZE>SEGSIZEMAX THEN SEGSIZEMAX:=SIZE; %106-13643000
|
|
AKKUM:=AKKUM+SIZE; %106-13644000
|
|
IF SAVEPRTOG THEN AUXMEMREQ:=AUXMEMREQ+16|(SIZE.[38:6]+1); %106-13645000
|
|
IF LISTER OR SEGSTOG THEN %106-13646000
|
|
BEGIN %106-13647000
|
|
IF NOHEADING THEN DATIME; %106-13648000
|
|
IF SINGLTOG THEN WRITE(LINE,PRINTSIZE,NO,SIZE,NOO) %106-13649000
|
|
ELSE WRITE(LINE,PRINTSIZE,NO,SIZE,NOO); %106-13650000
|
|
END; %106-13651000
|
|
LDICT[NO.[38:3],NO.[41:7]] := %106-13652000
|
|
IF BUILDLINE THEN %106-13653000
|
|
MOVEANDBLOCK(ENIL,ENILPTR+1,4) & SIZE[18:33:15] %106-13654000
|
|
ELSE -1; %106-13655000
|
|
END OF SEGMENT; %106-13656000
|
|
13697000
|
|
13698000
|
|
13699000
|
|
13700000
|
|
13701000
|
|
13702000
|
|
13703000
|
|
13704000
|
|
13705000
|
|
13706000
|
|
13707000
|
|
13708000
|
|
13709000
|
|
13710000
|
|
13711000
|
|
13712000
|
|
13713000
|
|
PROCEDURE ENTER(TYPE); VALUE TYPE; INTEGER TYPE; 13714000
|
|
BEGIN 13715000
|
|
G:=GTA1[J:=J-1]; 13716000
|
|
IF NOT SPECTOG THEN 13717000
|
|
BEGIN 13718000
|
|
IF NOT P2 THEN 13719000
|
|
IF P2:=(G=OWNV) THEN G:=GTA1[J:=J-1]; 13720000
|
|
IF NOT P3 THEN 13721000
|
|
IF P3:=(G=SAVEV) THEN G:=GTA1[J:=J-1]; 13722000
|
|
IF NOT P4 THEN 13723000
|
|
IF P4:=(G=AUXMEMV) THEN G:=GTA1[J:=J-1]; 13724000
|
|
END; 13725000
|
|
IF G!0 THEN FLAG(25) ELSE ENTRY(TYPE) 13726000
|
|
END ENTER; 13727000
|
|
13728000
|
|
13729000
|
|
13730000
|
|
PROCEDURE HTTEOAP(GOTSTORAGE,RELAD,STOPPER,PRTAD); 13731000
|
|
VALUE GOTSTORAGE,RELAD,STOPPER,PRTAD; 13732000
|
|
BOOLEAN GOTSTORAGE; 13733000
|
|
REAL RELAD,STOPPER,PRTAD; 13734000
|
|
BEGIN 13735000
|
|
BOOLEAN BT; 13736000
|
|
REAL K,LS; 13737000
|
|
LS~RELAD; 13738000
|
|
BT~JUMPCTR=LEVEL; 13739000
|
|
IF FUNCTOG 13740000
|
|
THEN 13741000
|
|
BEGIN 13742000
|
|
EMITV(514); 13743000
|
|
EMITO(RTN) 13744000
|
|
END 13745000
|
|
ELSE 13746000
|
|
EMITO(XIT); 13747000
|
|
IF STACKCTR>MAXSTACK THEN MAXSTACK~STACKCTR; 13748000
|
|
CONSTANTCLEAN; 13749000
|
|
IF K~MAXSTACK-514>0 OR GOTSTORAGE OR BT OR NCII>0 OR FAULTOG.[46:1] 13750000
|
|
THEN 13751000
|
|
BEGIN ADJUST;LS~L; 13752000
|
|
IF BT OR GOTSTORAGE OR FAULTOG.[46:1] 13753000
|
|
THEN 13754000
|
|
BEGIN 13755000
|
|
% 13755500
|
|
EMITV(BLOCKCTR); 13756000
|
|
EMITL(1); 13757000
|
|
EMITO(ADD); 13758000
|
|
IF GOTSTORAGE OR FAULTOG.[46:1] 13759000
|
|
THEN 13760000
|
|
EMITSTORE(BLOCKCTR,SND) 13761000
|
|
END 13762000
|
|
% 13762500
|
|
ELSE EMITL(0); 13763000
|
|
K~K+NCII; 13764000
|
|
WHILE K~K-1}0 13765000
|
|
DO EMITL(0); 13766000
|
|
PURGE(STOPPER); 13767000
|
|
IF FAULTLEVEL{LEVEL THEN 13767100
|
|
BEGIN IF FAULTLEVEL=LEVEL THEN FAULTLEVEL~32; 13767200
|
|
EMITPAIR(0,MDS); EMITO(CHS); 13767300
|
|
END OF THIS PART OF ERROR KLUDGE; 13767400
|
|
EMIT(0); % DC & DISK 13767500
|
|
BUMPL; 13768000
|
|
13768100
|
|
EMITB(BBC,L,IF RELAD=4095 THEN 0 ELSE RELAD) ; % DC & DISK 13769000
|
|
CONSTANTCLEAN 13770000
|
|
END ELSE PURGE(STOPPER); 13771000
|
|
Z~PROGDESCBLDR(PDES,IF LS=4095 THEN 0 ELSE LS,PRTAD); 13772000
|
|
END HTTEOAP; 13773000
|
|
PROCEDURE FORMATGEN; 13774000
|
|
BEGIN 13775000
|
|
INTEGER PRT;LABEL L; 13776000
|
|
BOOLEAN TB2; 13777000
|
|
ARRAY TEDOC[0:7,0:127]; 13777500
|
|
MOVECODE(TEDOC,EDOC); 13777600
|
|
BUILDLINE ~ BOOLEAN(2|REAL(BUILDLINE)) ; 13777700
|
|
TB2~GTA1[J-1]=SWITCHV; 13778000
|
|
GT5~SGNO; 13779000
|
|
L: GT1:=(2|SGAVL-1)&2[4:46:2]; STOPENTRY:=TRUE; 13780000
|
|
IF LISTER OR SEGSTOG THEN SEGMENTSTART; 13780002
|
|
SGNO~SGAVL; 13781000
|
|
13782000
|
|
F:=0; PRT:=GETSPACE(TRUE,1);STOPGSP:=TRUE; % FORMAT. 13783000
|
|
Z~PROGDESCBLDR(LDES,0,PRT); 13784000
|
|
IF TB2 THEN 13785000
|
|
BEGIN 13786000
|
|
ENTRY(SUPERFRMTID);IF ELCLASS!ASSIGNOP THEN FLAG(36); 13787000
|
|
PUT(TAKE(LASTINFO)&PRT[16:37:11],LASTINFO); 13788000
|
|
RR4~NEXTINFO;PUTNBUMP(0); 13789000
|
|
DO 13790000
|
|
BEGIN PUTNBUMP(F); IF STEPI=LEFTPAREN THEN FLAG(37); 13791000
|
|
ELCLASS:="<"; 13791050
|
|
TB1~FORMATPHRASE; 13792000
|
|
END 13793000
|
|
UNTIL ELCLASS!","; 13794000
|
|
RR3~NEXTINFO-1;NEXTINFO~RR4;PUTNBUMP(F); 13795000
|
|
DO 13796000
|
|
WHIPOUT(TAKE(RR4~RR4+1)) 13797000
|
|
UNTIL RR4=RR3; IF F>1022 THEN FLAG(38); 13798000
|
|
13799000
|
|
END ELSE 13800000
|
|
BEGIN 13801000
|
|
I~I-1; 13802000
|
|
DO 13803000
|
|
BEGIN 13804000
|
|
STOPDEFINE~TRUE;STEPIT ; 13805000
|
|
ENTRY(FRMTID); IF ELCLASS!LEFTPAREN THEN FLAG(32); ELCLASS:="<";13806000
|
|
PUT(TAKE(LASTINFO)&PRT[16:37:11]&F[27:40:8],LASTINFO); 13807000
|
|
TB1~FORMATPHRASE; 13808000
|
|
END 13809000
|
|
UNTIL ELCLASS!"," OR TB1~F}256 ; 13810000
|
|
13811000
|
|
13812000
|
|
END; 13813000
|
|
SEGMENT(-F,SGNO,GT5);SGAVL~SGAVL+1; 13814000
|
|
IF TB1 AND ELCLASS="," THEN BEGIN I~I+1;GO TO L END; 13815000
|
|
IF ELCLASS!";" THEN ELBAT[I]~0 ELSE ELBAT[I].CLASS~SEMICOLON; 13816000
|
|
STOPGSP~STOPENTRY~FALSE; 13817000
|
|
SGNO~GT5; 13818000
|
|
MOVECODE(TEDOC,EDOC); 13818500
|
|
BUILDLINE ~ BUILDLINE.[46:1] ; 13818600
|
|
END FORMATGEN; 13819000
|
|
PROCEDURE CHECKBOUNDLVL ; 13819100
|
|
COMMENT CHECK DYNAMIC ARRAY BOUND: MUST NOT BE 13819200
|
|
DECLARED AT SAME LEVEL; 13819300
|
|
IF NOT SPECTOG AND ELBAT[I].LVL=LEVEL 13819400
|
|
THEN FLAG(IF REAL(ARRAYFLAG)=3 THEN 509 ELSE 46) ; 13819410
|
|
COMMENT 46-ARRAE NON-LITERAL ARRAY BOUND NOT GLOBAL TO 13819500
|
|
ARARY DECLARATION; 13819600
|
|
PROCEDURE FAULTDEC; COMMENT FAULTDEC HANDLES THE MONITOR <FAULT LIST> 13900000
|
|
THING, FOR THE RUN-TIME ERROR BUSINESS. IT GETS STACK OR 13901000
|
|
PRT SPACE AND PASSES SOME STUFF TO THE BLOCK CONTROL 13902000
|
|
INTRINSIC, WHO WILL BUILD AIT ENTRIES; 13903000
|
|
BEGIN INTEGER TP; REAL A; 13903100
|
|
J~0; JUMPCHKX; EMITO(MKS); 13904000
|
|
IF FAULTLEVEL>LEVEL THEN FAULTLEVEL~LEVEL; 13905000
|
|
IF MODE=0 THEN FAULTLEVEL~1; 13906000
|
|
DO BEGIN IF J>0 THEN STEPIT; J~J+1; 13907000
|
|
SCATTERELBAT; A~ACCUM[1]; 13908000
|
|
IF TP~REAL((Q="6INTOV")&(Q="6EXPOV")[46:47:1]&(Q="5INDEX" 13909000
|
|
)[45:47:1]&(Q="4ZERO0")[44:47:1]&(Q="4FLAG0")[43:47:1])=0 13910000
|
|
THEN ERR (61) ELSE 13911000
|
|
BEGIN IF TABLE(I+1)=ASSIGNOP THEN 13911100
|
|
BEGIN STEPIT; COMMENT OVER THE ~; 13911200
|
|
IF GT1~STEPI>IDMAX AND GT1<FAULTID THEN ERR(3);13911300
|
|
LEVELF~ELBAT[I].LVL; 13911400
|
|
END ELSE COUNT~(ACCUM[1]~A).[12:6]; 13911500
|
|
IF LEVELF=LEVEL THEN ERR (1) ELSE 13912000
|
|
BEGIN KLASSF:=FAULTID; ADDRSF:=GETSPACE(FALSE,1); 13913000
|
|
FORMALF~VONF~FALSE; 13913100
|
|
EMITL(TP); IF MODE=0 THEN BEGIN EMITL(0); 13914000
|
|
EMITPAIR(ADDRSF,STD);END; EMITN(ADDRSF); 13915000
|
|
EMIT ("!E"); COMMENT C-TO-F; 13916000
|
|
MAKEUPACCUM; E; STEPIT 13917000
|
|
END; END; END UNTIL ELCLASS!COMMA; 13918000
|
|
EMITL(J); EMITL(13); EMITV(5); 13919000
|
|
END FAULTDEC; 13920000
|
|
COMMENT THIS SECTION CONTAINS THE BLOCK ROUTINE ; 14000000
|
|
PROCEDURE BLOCK(SOP); 14001000
|
|
VALUE SOP; 14002000
|
|
BOOLEAN SOP; 14003000
|
|
COMMENT SOP IS TRUE IF THE BLOCK WAS CALLED BY ITSELF THROUGH THE 14004000
|
|
PROCEDURE DECLARATION-OTHERWISE IT WAS CALLED BY STATEMENT. 14005000
|
|
THE BLOCK ROUTINE IS RESPONSIBLE FOR HANDLING THE BLOCK 14006000
|
|
STRUCTURE OF AN ALGOL PROGRAM-SEGMENTING EACH BLOCK,HANDLING 14007000
|
|
ALL DECLARATIONS,DOING NECESSARY BOOKKEEPING REGARDING EACH 14008000
|
|
BLOCK, AND SUPPLYING THE SCANNER WITH ALL NECESSARY INFORMATION 14009000
|
|
ABOUT DECLARED IDENTIFIERS. 14010000
|
|
IT ALSO WRITES EACH SEGMENT ONTO THE PCT; 14011000
|
|
BEGIN 14012000
|
|
LABEL OWNERR,SAVERR,BOOLEANDEC,REALDEC,ALPHADEC,INTEGERDEC, 14013000
|
|
LABELDEC,DUMPDEC,LISTDEC,OUTDEC,INDEC,MONITORDEC, 14014000
|
|
SWITCHDEC,PROCEDUREDEC,ARRAYDEC,FORMATDEC,FILEDEC, 14015000
|
|
GOTSCHK,FIELDDEC,AUXMEMERR, %117-14016000
|
|
STREAMERR,DEFINEDEC,CALLSTATEMENT,HF,START; 14017000
|
|
SWITCH DECLSW~ OWNERR,SAVERR,BOOLEANDEC,REALDEC,ALPHADEC,INTEGERDEC, 14018000
|
|
LABELDEC,DUMPDEC,LISTDEC,OUTDEC,INDEC,MONITORDEC, 14019000
|
|
SWITCHDEC,PROCEDUREDEC,ARRAYDEC,FORMATDEC,FILEDEC, 14020000
|
|
STREAMERR,DEFINEDEC,AUXMEMERR,FIELDDEC; %117-14021000
|
|
DEFINE NLOCS=10#,LOCBEGIN=PRTI#, 14022000
|
|
LBP=[36:12]#, 14023000
|
|
SPACEITDOWN = BEGIN WRITE(LINE[DBL]); WRITE(LINE[DBL]) END#; 14023100
|
|
ARRAY TEDOC[0:7,0:127],LOCALS[0:NLOCS]; 14024000
|
|
ARRAY TENIL[0:7,0:127]; 14024100
|
|
INTEGER OLDLASTADDRESS; 14024200
|
|
INTEGER OLDENILPTR; 14024300
|
|
BOOLEAN GOTSTORAGE; 14025000
|
|
BOOLEAN FWDTOG; COMMENT PREVIOUS FORWARD DECLARATION INDICATOR; 14025100
|
|
INTEGER PINFOO,BLKAD; 14026000
|
|
COMMENT LOCAL TO BLOCK TO SAVE WHERE A PROCEDURE IS EMTERED 14027000
|
|
IN INFO; 14028000
|
|
REAL MAXSTACKO,LASTINFOT,RELAD,LO,TSUBLEVEL,STACKCTRO; 14029000
|
|
INTEGER SGNOO,LOLD,SAVELO,PRTIO,NINFOO; 14030000
|
|
INTEGER NCIIO; 14031000
|
|
INTEGER PROAD ; 14032000
|
|
INTEGER NTEXTO; 14032500
|
|
INTEGER FIRSTXO; 14033000
|
|
BOOLEAN FUNCTOGO,AJUMPO,FAULTOGO; 14034000
|
|
BOOLEAN SAVEPRTOGO, NEXTSAVE; 14034100
|
|
BEGINCTR~BEGINCTR+1; 14035000
|
|
IF SOP THEN BLKAD~PROADO 14036000
|
|
14037000
|
|
14038000
|
|
14039000
|
|
14040000
|
|
14041000
|
|
14042000
|
|
14043000
|
|
ELSE BEGIN BLKAD:=GETSPACE(TRUE,-6); % SEG. DESCR. 14044000
|
|
EMITV(BLKAD); 14045000
|
|
EMITO(BFW); 14046000
|
|
CONSTANTCLEAN 14047000
|
|
END; 14048000
|
|
MOVECODE(TEDOC,EDOC); MOVECODE(TENIL,ENIL); 14049000
|
|
OLDLASTADDRESS ~ LASTADDRESS; LASTADDRESS ~ -1; 14049100
|
|
OLDENILPTR ~ ENILPTR; ENILPTR ~ 0; 14049200
|
|
ENILSPOT~0&CARDNUMBER[10:20:28] ; ENILPTR~1 ; 14049300
|
|
MOVE(NLOCS,LOCBEGIN,LOCALS); 14050000
|
|
FIRSTXO~FIRSTX; 14051000
|
|
FIRSTX~4095; 14052000
|
|
IF LEVEL < 31 THEN LEVEL ~ LEVEL + 1 14053000
|
|
ELSE FLAG(039); 14053100
|
|
LOLD~L;FUNCTOGO~FUNCTOG;AJUMPO~AJUMP;PRTIO~PRTI;SGNOO~SGNO; 14054000
|
|
SAVELO := SAVEL; %118-14055000
|
|
AJUMP := FALSE; % NO PENDING JUMPS IN THIS BLOCK YET. %118-14055100
|
|
L := 0; % START GENERATING CODE AT WORD 0, SYLLABLE 0. 14055200
|
|
OLDNINFOO := GLOBALNINFOO; % REMEMBER WHERE PREVIOUS BLOCKS %118-14055250
|
|
% SYMBOLS BEGAN IN SYMBOL TABLE. %118-14055260
|
|
GLOBALNINFOO := NINFOO := NEXTINFO; % REMEMBER WHERE THE SYMBOLS 14055300
|
|
% FROM THIS BLOCK WILL GO%118-14055400
|
|
% IN THE SYMBOL TABLE. %118-14055450
|
|
NTEXTO ~ NEXTTEXT; 14055500
|
|
NCIIO~NCII; 14056000
|
|
NCII~0; 14057000
|
|
STACKCTRO~STACKCTR; 14058000
|
|
FAULTOGO~FAULTOG; FAULTOG~ 14058100
|
|
GOTSTORAGE~FALSE; 14059000
|
|
SAVEPRTOG := (SAVEPRTOGO := SAVEPRTOG) OR SOP.[46:1]; 14059100
|
|
IF LISTER OR SEGSTOG THEN SEGMENTSTART; 14060000
|
|
SGNO~SGAVL; SGAVL~SGAVL+1; 14061000
|
|
ELBAT[I].CLASS~SEMICOLON; 14062000
|
|
START: IF TABLE(I)!SEMICOLON 14063000
|
|
THEN 14064000
|
|
BEGIN 14065000
|
|
FLAG(0); 14066000
|
|
I~I-1 14067000
|
|
END; 14068000
|
|
GTA1[0]~J~0; 14069000
|
|
IF SPECTOG 14070000
|
|
THEN 14071000
|
|
BEGIN 14072000
|
|
IF BUP=PJ 14073000
|
|
THEN 14074000
|
|
BEGIN 14075000
|
|
BEGIN LABEL GETLP; 14076000
|
|
IF STREAMTOG THEN F~0 ELSE 14077000
|
|
F~FZERO; 14078000
|
|
BUP~LASTINFO; 14079000
|
|
DO 14080000
|
|
BEGIN 14081000
|
|
IF NOT STREAMTOG THEN 14082000
|
|
BUP~LASTINFO; 14083000
|
|
GETLP: G~TAKE(BUP); 14084000
|
|
IF K~G.ADDRESS!PJ 14085000
|
|
THEN 14086000
|
|
BEGIN 14087000
|
|
IF BUP ! BUP:=BUP- TAKE(BUP + 1).PURPT THEN %102-14088000
|
|
GO TO GETLP 14089000
|
|
END; 14090000
|
|
IF TYPEV~G.CLASS=FRMTID OR TYPEV=SUPERFRMTID THEN 14091000
|
|
G.ADDRESS~F~F+2 14092000
|
|
ELSE 14093000
|
|
IF TYPEV~G.CLASS{INTARRAYID AND 14094000
|
|
TYPEV}BOOARRAYID 14095000
|
|
THEN 14096000
|
|
BEGIN 14097000
|
|
T1~G.INCR; 14098000
|
|
GT1 ~N~TAKE(BUP+T1); 14099000
|
|
G.ADDRESS~F~F+N+1; 14100000
|
|
WHILE N!0 14101000
|
|
DO 14102000
|
|
BEGIN 14103000
|
|
IF T2~TAKE(BUP+T1+N)<0 14104000
|
|
THEN 14105000
|
|
BEGIN 14106000
|
|
T2~-T2; 14107000
|
|
T2.LBP~4|(F-N)+2; 14108000
|
|
PUT(T2,BUP+T1+N) 14109000
|
|
END; 14110000
|
|
N~N-1 14111000
|
|
END 14112000
|
|
END 14113000
|
|
ELSE 14114000
|
|
G.ADDRESS~F~F+1; 14115000
|
|
PUT(G,BUP); G.INCR~GT1; 14116000
|
|
IF FWDTOG THEN COMMENT CHECK CORRESPONDENCE W/ FWD; 14116100
|
|
BEGIN 14116200
|
|
IF(GT1~TAKE(MARK+PJ)).CLASS ! G.CLASS 14116300
|
|
COMMENT CLASS ERROR; THEN FLAG(49); 14116400
|
|
COMMENT VALUE ERROR; IF GT1.VO ! G.VO THEN FLAG(50) 14116500
|
|
END ELSE 14116600
|
|
PUT(G,MARK+PJ) 14117000
|
|
;BUP~BUP-TAKE(BUP+1).PURPT 14118000
|
|
END 14119000
|
|
UNTIL PJ~PJ-1=0 14120000
|
|
END; 14121000
|
|
SPECTOG~FALSE; 14122000
|
|
GO TO HF 14123000
|
|
END 14124000
|
|
END; 14125000
|
|
STACKCT ~ 0; %A 14125500
|
|
WHILE STEPI=DECLARATORS 14126000
|
|
DO 14127000
|
|
BEGIN 14128000
|
|
STOPDEFINE~(GTA1[J~J+1]~ELBAT[I].ADDRESS)!MONITORV AND 14129000
|
|
GTA1[J]!DUMPV;ERRORTOG~TRUE; 14130000
|
|
END; 14131000
|
|
IF J =0 THEN GO TO CALLSTATEMENT; 14132000
|
|
P2:=P3:=P4:=FALSE; 14133000
|
|
GO TO DECLSW[GTA1[J]]; 14134000
|
|
OWNERR:FLAG(20);J~J+1;GO TO REALDEC; 14135000
|
|
SAVERR:FLAG(21);J~J+1;GO TO REALDEC; 14136000
|
|
AUXMEMERR:FLAG(618);J:=J+1;GO TO REALDEC; %117-14136100
|
|
STREAMERR:FLAG(22);J~J+1;GO TO PROCEDUREDEC; 14137000
|
|
REALDEC:P3~TRUE;ENTER(REALID);GO TO START; 14138000
|
|
ALPHADEC:P3~TRUE;ENTER(ALFAID);GO TO START; 14139000
|
|
BOOLEANDEC:P3~TRUE;ENTER(BOOID);GO TO START; 14140000
|
|
INTEGERDEC:P3~TRUE;ENTER(INTID);GO TO START; 14141000
|
|
MONITORDEC:IF SPECTOG 14142000
|
|
THEN BEGIN COMMENT ERROR 463 MEANS THAT A MONITOR 14143000
|
|
DECLARATION APPEARS IN THE SPECIFICATION 14144000
|
|
PART OF A PROCEDURE; 14145000
|
|
FLAG(463); 14146000
|
|
END; 14147000
|
|
IF MERRIMAC THEN BEGIN FAULTDEC; GO GOTSCHK END; GO START;14148000
|
|
DUMPDEC:IF SPECTOG 14149000
|
|
THEN BEGIN COMMENT ERROR 464 MEANS A DUMP DECLARATION 14150000
|
|
APPEARS IN THE SPECIFICATION PART OF A 14151000
|
|
PROCEDURE; 14152000
|
|
FLAG(464); 14153000
|
|
END; 14154000
|
|
DMUP; GO TO START; 14155000
|
|
ARRAYDEC:JUMPCHKX;ARRAE;GO TO GOTSCHK; 14156000
|
|
FILEDEC:J~J+1;IODEC(11);GO TO GOTSCHK; 14157000
|
|
INDEC: IODEC(9); IF G!FORMATV THEN GO GOTSCHK; GO START;% 14158000
|
|
OUTDEC: IODEC(10); IF G=FORMATV THEN GO TO START; 14159000
|
|
GOTSCHK:GOTSTORAGE~ NOT SPECTOG OR GOTSTORAGE;GO TO START; 14160000
|
|
FORMATDEC:IF SPECTOG THEN ENTRY(FRMTID+REAL(GTA1[J-1]=SWITCHV)) ELSE 14161000
|
|
FORMATGEN; GO TO START; 14162000
|
|
LISTDEC: 14163000
|
|
BEGIN 14164000
|
|
REAL SAVEINFO; 14165000
|
|
LABEL START; 14166000
|
|
IF G:=GTA1[J]=LISTV AND G:=GTA1[J-1]=SWITCHV THEN 14167000
|
|
BEGIN HANDLESWLIST; GO TO GOTSCHK END; 14168000
|
|
IF SPECTOG THEN 14169000
|
|
BEGIN ENTRY(LISTID); GO TO START END; 14170000
|
|
STOPENTRY:=STOPGSP:=TRUE; I:=I-1; 14171000
|
|
DO BEGIN 14172000
|
|
I:=I+1; JUMPCHKX; 14173000
|
|
ENTRY(LISTID); IF ELCLASS!LEFTPAREN THEN FLAG(31) ELSE STEPIT; 14174000
|
|
SAVEINFO:=LASTINFO; % IN CASE C-RELATIVE CONSTANTS ARE 14175000
|
|
% EMITTED B4 DOING THE PUT-TAKE BELOW. 14176000
|
|
F:=LISTGEN; 14177000
|
|
PUT(TAKE(SAVEINFO)&(IF MODE=0 THEN F 14178000
|
|
ELSE F:=GETSPACE(FALSE,SAVEINFO+1)) % LIST DESCR. 14179000
|
|
[16:11],SAVEINFO); 14180000
|
|
EMITSTORE(F,STD); 14181000
|
|
END UNTIL ELCLASS! COMMA; 14182000
|
|
STOPENTRY:=STOPGSP:=FALSE; 14183000
|
|
START: 14184000
|
|
END LISTDEC; 14185000
|
|
GO TO START; 14186000
|
|
LABELDEC:IF SPECTOG AND FUNCTOG THEN FLAG(24); 14187000
|
|
STOPENTRY~STOPGSP~TRUE; 14188000
|
|
I~I-1; 14189000
|
|
DO 14190000
|
|
BEGIN 14191000
|
|
STOPDEFINE~TRUE; 14192000
|
|
STEPIT; 14193000
|
|
ENTRY(LABELID); 14194000
|
|
PUTNBUMP(0) 14195000
|
|
END 14196000
|
|
UNTIL ELCLASS!COMMA; 14197000
|
|
STOPENTRY~STOPGSP~FALSE; 14198000
|
|
GO TO START; 14199000
|
|
SWITCHDEC: 14200000
|
|
BEGIN 14201000
|
|
LABEL START; 14202000
|
|
INTEGER GT1,GT2,GT4,GT5; 14203000
|
|
BOOLEAN TB1; 14204000
|
|
STOPENTRY~NOT SPECTOG;STOPGSP~TRUE; 14205000
|
|
SCATTERELBAT; GT1~0; TB1~FALSE; 14206000
|
|
IF LEVELF=LEVEL 14207000
|
|
THEN 14208000
|
|
BEGIN 14209000
|
|
IF TAKE(LINKF+1)}0 14210000
|
|
THEN FLAG(1); PUT(-TAKE(LINKF+1),LINKF+1); 14211000
|
|
TB1~TRUE;GT2~ADDRSF; 14212000
|
|
GT1~ TAKEFRST; GT4~LASTINFO; LASTINFO~LINKF; 14213000
|
|
STEPIT;GT5~NEXTINFO;NEXTINFO~LINKF+INCRF 14214000
|
|
END 14215000
|
|
ELSE 14216000
|
|
ENTRY(SWITCHID); STOPGSP~STOPENTRY~FALSE;IF SPECTOG THEN GO TO 14217000
|
|
START; 14218000
|
|
IF ELCLASS=ASSIGNOP 14219000
|
|
THEN 14220000
|
|
BEGIN 14221000
|
|
JUMPCHKNX;PUTNBUMP(L);G~L; 14222000
|
|
IF FORMALF := SWITCHGEN(TB1,GT1) %113-14223000
|
|
THEN 14224000
|
|
BEGIN 14225000
|
|
JUMPCHKX; 14227000
|
|
STUFFF(GT1); 14228000
|
|
IF MODE>0 14229000
|
|
THEN 14230000
|
|
IF TB1 THEN GT1~GT2 ELSE 14231000
|
|
GT1:=GETSPACE(FALSE,LASTINFO+1); % SWITCH. 14232000
|
|
EMITSTORE(GT1,STD) 14233000
|
|
END; 14234000
|
|
END 14235000
|
|
ELSE 14236000
|
|
BEGIN 14237000
|
|
IF ELCLASS!FORWARDV THEN FLAG(33); 14238000
|
|
PUT(-TAKE(LASTINFO+1),LASTINFO+1); 14239000
|
|
PUTNBUMP(GT1:=GETSPACE(TRUE,LASTINFO+1));%SWITCH. 14240000
|
|
IF MODE >0 THEN GT1:=GETSPACE(FALSE,-1);%TEMP. STOR. 14241000
|
|
STEPIT; 14242000
|
|
FORMALF~TRUE 14243000
|
|
END; 14244000
|
|
PUT(TAKE(LASTINFO)&REAL(FORMALF)[9:47:1]>1[16:37:11],LASTINFO); 14245000
|
|
IF TB1 THEN 14246000
|
|
BEGIN 14247000
|
|
NEXTINFO~GT5; 14248000
|
|
LASTINFO~GT4; 14249000
|
|
END; 14250000
|
|
START: 14251000
|
|
END SWITCHDEC; 14252000
|
|
GO TO START; 14253000
|
|
DEFINEDEC: 14254000
|
|
BEGIN LABEL START; 14254050
|
|
REAL J,K,DINFO,LINKA,LINKB; %118 14254100-
|
|
STOPENTRY~STOPGSP~TRUE;I~I-1; 14255000
|
|
DEFINING := BOOLEAN(REAL(DEFINING) & 1[47:47:1]); 14255500
|
|
DO 14256000
|
|
BEGIN 14257000
|
|
STOPDEFINE:=TRUE; 14258000
|
|
STEPIT; MOVE(9,ACCUM[1],GTA1); 14259000
|
|
K~COUNT+1; J~GTA1[0]; ENTRY(DEFINEDID); 14259010
|
|
GTA1[0]~J+"100000"; J~0; 14259015
|
|
DINFO ~ LASTINFO; 14259017
|
|
IF ELCLASS=LEFTPAREN OR ELCLASS=LFTBRKET THEN 14259020
|
|
BEGIN 14259030
|
|
IF K > 62 THEN BEGIN ERR(141); GO START END; 14259040
|
|
DO BEGIN STOPDEFINE~TRUE; 14259060
|
|
STEPIT; 14259070
|
|
IF (J~J+1) > 9 THEN BEGIN ERR(172); GO START END; 14259075
|
|
MOVE(9, ACCUM[1], DEFINFO[(J-1)|10]); 14259080
|
|
DEFINEPARAM(DINFO+1, J); 14259085
|
|
ACCUM[0] := 0 & DEFINEDID CLASS & 1 FORMAL; %116-14259090
|
|
LINKA ~ LASTINFO; LINKB ~ NEXTINFO; 14259094
|
|
E; 14259096
|
|
IF LASTINFO ! LINKB THEN % NEW INFO ROW ENTERED. 14259098
|
|
PUT(TAKE(LINKA)&(LASTINFO-LINKA)[27:40:8], LINKA); 14259100
|
|
STACKHEAD[SCRAM] ~ TAKE(LASTINFO).LINK; 14259102
|
|
STOPDEFINE ~ TRUE; 14259104
|
|
END UNTIL STEPI!COMMA; 14259110
|
|
IF ELCLASS!RTPAREN AND ELCLASS!RTBRKET THEN ERR(173); 14259120
|
|
STOPDEFINE~TRUE; 14259130
|
|
STEPIT; 14259140
|
|
PUT(-TAKE(DINFO), DINFO); % MARK AS PARAMETRIC 14259150
|
|
PUT(TAKE(LASTINFO) & 0[27:40:8], LASTINFO); 14259155
|
|
END; 14259160
|
|
IF ELCLASS!RELOP OR ACCUM[1]!"1=0000" 14260000
|
|
THEN 14261000
|
|
BEGIN 14262000
|
|
FLAG(45); 14263000
|
|
COMMENT ERROR 45 IS NO = FOLLOWING DEFINE ID; 14263100
|
|
I~I-1; 14264000
|
|
END; 14265000
|
|
MACROID~TRUE; 14265900
|
|
LASTINFO ~ DINFO; 14265930
|
|
PUT(TAKE(DINFO) & NEXTTEXT[11:32:16], DINFO); 14265950
|
|
DEFINEGEN(FALSE, J & DINFO[18:33:15]); 14266000
|
|
MACROID~FALSE; 14266100
|
|
END 14267000
|
|
UNTIL STEPI!COMMA; 14268000
|
|
DEFINING := BOOLEAN(REAL(DEFINING) & 0[47:47:1]); 14268500
|
|
START: STOPENTRY~STOPGSP~FALSE; END; GO TO START; 14269000
|
|
FIELDDEC: %117-14269020
|
|
BEGIN %117-14269040
|
|
REAL SAVEINFO, SB, NB; %117-14269060
|
|
BOOLEAN FOUNDLB; % TRUE IF LEFT-BRACKET WAS USED IN FIELD SPEC.%117-14269080
|
|
LABEL EXIT, SAVEIT; %117-14269100
|
|
STOPENTRY := STOPGSP := TRUE; %117-14269120
|
|
I := I - 1; %117-14269140
|
|
DO %117-14269160
|
|
BEGIN %117-14269180
|
|
STOPDEFINE := TRUE; %117-14269200
|
|
STEPIT; %117-14269220
|
|
ENTRY(FIELDID); %117-14269240
|
|
SAVEINFO := LASTINFO; %117-14269260
|
|
IF ELCLASS = RELOP AND ACCUM[1] = "1=0000" THEN %117-14269280
|
|
BEGIN %117-14269300
|
|
IF STEPI = LFTBRKET THEN % REMEMBER THIS %117-14269320
|
|
BEGIN %117-14269340
|
|
FOUNDLB := TRUE; %117-14269360
|
|
STEPIT; %117-14269380
|
|
END %117-14269400
|
|
ELSE %117-14269420
|
|
FOUNDLB := FALSE; %117-14269440
|
|
IF ELCLASS = FIELDID THEN %117-14269442
|
|
BEGIN %117-14269444
|
|
SB := ELBAT[I].SBITF; %117-14269446
|
|
NB := ELBAT[I].NBITF; %117-14269448
|
|
GO TO SAVEIT; %117-14269450
|
|
END; %117-14269452
|
|
IF ELCLASS = LITNO THEN %117-14269460
|
|
IF STEPI = COLON THEN %117-14269480
|
|
IF STEPI = LITNO THEN %117-14269500
|
|
IF (SB := ELBAT[I-2].ADDRESS) | %117-14269520
|
|
(NB := ELBAT[I].ADDRESS) ! 0 AND %117-14269540
|
|
SB + NB { 48 THEN %117-14269560
|
|
BEGIN %117-14269580
|
|
SAVEIT: %117-14269590
|
|
PUT(TAKE(SAVEINFO) & SB SBITF & NB NBITF, %117-14269600
|
|
SAVEINFO); %117-14269620
|
|
STEPIT; %117-14269640
|
|
IF FOUNDLB THEN % BETTER HAVE RIGHT BRACKET. %117-14269660
|
|
IF ELCLASS = RTBRKET THEN %117-14269680
|
|
BEGIN %117-14269700
|
|
STEPIT; %117-14269705
|
|
GO TO EXIT; %117-14269710
|
|
END %117-14269715
|
|
ELSE %117-14269720
|
|
ELSE %117-14269740
|
|
GO TO EXIT; %117-14269760
|
|
END; %117-14269780
|
|
END; %117-14269800
|
|
FLAG(114); %117-14269820
|
|
DO STEPIT UNTIL ELCLASS = COMMA OR ELCLASS = SEMICOLON; %117-14269840
|
|
EXIT: %117-14269860
|
|
END %117-14269880
|
|
UNTIL %117-14269900
|
|
ELCLASS ! COMMA; %117-14269920
|
|
STOPENTRY := STOPGSP := FALSE; %117-14269940
|
|
END; %117-14269960
|
|
GO TO START; %117-14269980
|
|
PROCEDUREDEC: 14270000
|
|
BEGIN 14271000
|
|
LABEL START,START1; 14272000
|
|
LABEL START2, DOITANYWAY; 14273000
|
|
COMMENT FWDTOG NOW GLOBAL TO BLOCK; 14274000
|
|
IF NOT SPECTOG THEN FUNCTOG~FALSE; 14275000
|
|
FWDTOG := NEXTSAVE := FALSE; 14276000
|
|
IF LASTENTRY!0 THEN BEGIN JUMPCHKNX;CONSTANTCLEAN END; 14276500
|
|
MAXSTACKO~ MAXSTACK; 14277000
|
|
IF G~GTA1[J~J-1]=STREAMV 14278000
|
|
THEN 14279000
|
|
BEGIN STREAMTOG~TRUE; 14280000
|
|
IF G~GTA1[J~J-1]=0 THEN TYPEV~STRPROCID 14281000
|
|
ELSE 14282000
|
|
BEGIN 14283000
|
|
IF TYPEV~PROCID +G>INTSTRPROCID OR 14284000
|
|
TYPEV <BOOSTRPROCID 14285000
|
|
THEN FLAG(004); 14286000
|
|
IF NOT SPECTOG THEN 14287000
|
|
FUNCTOG~TRUE; 14288000
|
|
CHKSOB 14289000
|
|
END END 14290000
|
|
ELSE 14291000
|
|
IF G=0 THEN TYPEV~PROCID 14292000
|
|
ELSE 14293000
|
|
IF (TYPEV:=REALSTRPROCID+G)=INTSTRPROCID THEN 14294000
|
|
BEGIN NEXTSAVE:=TRUE; TYPEV:=PROCID END ELSE 14294100
|
|
IF TYPEV<BOOPROCID OR TYPEV>INTPROCID THEN FLAG(005) 14295000
|
|
ELSE BEGIN IF (NEXTSAVE:=GTA1[J-1]=SAVEV) THEN J:=J-1; 14295100
|
|
IF NOT SPECTOG THEN FUNCTOG:=TRUE; CHKSOB 14296000
|
|
END; 14297000
|
|
IF SPECTOG 14298000
|
|
THEN 14299000
|
|
BEGIN 14300000
|
|
ENTRY(TYPEV); GO TO START2 14301000
|
|
END; 14302000
|
|
MODE~MODE+1; 14303000
|
|
LO~PROINFO; 14304000
|
|
SCATTERELBAT; 14305000
|
|
COMMENT CHECK TO SEE IF DECLARED FORWARD PREVIOUSLY ;14306000
|
|
IF LEVELF=LEVEL 14307000
|
|
THEN IF KLASSF!TYPEV THEN BEGIN FLAG(6); GO DOITANYWAY END ELSE14308000
|
|
BEGIN 14309000
|
|
IF G ~ TAKE(LINKF+1) } 0 THEN FLAG(006) ELSE PUT(-G,LINKF+1) ; 14310000
|
|
XMARK(DECLREF); % PROCEDURE DECLARED FORWARD. MARK LAST %116-14310500
|
|
% XREF ENTRY AS A DECLARATION. %116-14310501
|
|
IF REAL(NEXTSAVE)!G.[3:1] THEN FLAG(051); 14311100
|
|
FWDTOG~TRUE; 14312000
|
|
PROAD~ADDRSF; 14313000
|
|
PROINFO~ELBAT[I];MARK~LINKF+INCRF;STEPIT 14314000
|
|
END 14316000
|
|
ELSE 14317000
|
|
DOITANYWAY: BEGIN STOPENTRY~P2~TRUE; 14318000
|
|
ENTRY(TYPEV); MARK~NEXTINFO;PUTNBUMP(0); 14319000
|
|
PROINFO~TAKE(LASTINFO)& LASTINFO[35:35:13];PROAD~ADDRSF; 14320000
|
|
P2~STOPENTRY~FALSE 14321000
|
|
END; 14322000
|
|
IF LEVEL < 31 THEN LEVEL ~ LEVEL + 1 14323000
|
|
ELSE FLAG(039); 14323100
|
|
PJ ~ 0; 14323200
|
|
IF STREAMTOG THEN STREAMWORDS; 14324000
|
|
IF ELCLASS=SEMICOLON THEN GO TO START1; 14325000
|
|
IF ELCLASS!LEFTPAREN THEN FLAG(007); 14326000
|
|
COMMENT: THE FOLLOWING 8 STATEMENTS FOOL THE SCANNER AND BLOCK,PUTTING 14327000
|
|
FORMAL PARAMETER ENTRIES IN THE ZERO ROW OF INFO; 14328000
|
|
RR1~NEXTINFO; 14329000
|
|
LASTINFOT~LASTINFO; LASTINFO~NEXTINFO~1; 14330000
|
|
PUTNBUMP(0); 14331000
|
|
PTOG~TRUE; I~I+1; 14332000
|
|
ENTRY(SECRET); 14333000
|
|
IF FWDTOG THEN BEGIN IF GT1 ~ TAKE(MARK).[40:8] ! PJ THEN% 14333100
|
|
FLAG(48); COMMENT WRONG NUMBER OF PARAMETERS; 14333200
|
|
COMMENT SO THAT WE DONT CLOBBER INFO; END ELSE 14333300
|
|
PUT(PJ,MARK); 14334000
|
|
P~PJ; 14335000
|
|
IF ELCLASS!RTPAREN 14336000
|
|
THEN FLAG(008); 14337000
|
|
IF STEPI!SEMICOLON 14338000
|
|
THEN FLAG(009); 14339000
|
|
COMMENT MARK PARAMETERS VALUE IF THERE IS A VALUE PART; 14340000
|
|
IF STEPI=VALUEV 14341000
|
|
THEN 14342000
|
|
BEGIN 14343000
|
|
DO 14344000
|
|
IF STEPI!SECRET 14345000
|
|
THEN FLAG(010) 14346000
|
|
ELSE 14347000
|
|
BEGIN 14348000
|
|
IF G~ELBAT[I].ADDRESS=0 OR G>PJ 14349000
|
|
THEN 14350000
|
|
FLAG(010); 14351000
|
|
G~TAKE(ELBAT[I]); 14352000
|
|
PUT(G&1[10:47:1],ELBAT[I]) 14353000
|
|
END 14354000
|
|
UNTIL 14355000
|
|
STEPI!COMMA; 14356000
|
|
IF ELCLASS!SEMICOLON 14357000
|
|
THEN FLAG(011) 14358000
|
|
ELSE STEPIT 14359000
|
|
END;I~I-1; 14360000
|
|
IF STREAMTOG 14361000
|
|
THEN 14362000
|
|
BEGIN 14363000
|
|
BUP~PJ; SPECTOG~TRUE;GO TO START1 14364000
|
|
END 14365000
|
|
ELSE 14366000
|
|
BEGIN 14367000
|
|
SPECTOG~TRUE; 14368000
|
|
BUP~0; 14369000
|
|
IF ELCLASS!DECLARATORS 14370000
|
|
THEN FLAG(012) 14371000
|
|
END; 14372000
|
|
START:PTOG~FALSE;LASTINFO~LASTINFOT;NEXTINFO~IF FWDTOG THEN RR1 ELSE 14373000
|
|
MARK+PJ+1; 14374000
|
|
START1:PINFOO~NEXTINFO; 14375000
|
|
START2: END; 14376000
|
|
IF SPECTOG OR STREAMTOG 14377000
|
|
THEN 14378000
|
|
GO TO START; 14379000
|
|
COMMENT IF SPECTOG IS ON THEN THE BLOCK WILL PROCESS THE SPECIFICATION 14380000
|
|
PART SIMILARY TO DECLARATIONS WITH A FEW NECESSARY VARIATIONS; 14381000
|
|
HF: 14382000
|
|
BEGIN 14383000
|
|
LABEL START,STOP; 14384000
|
|
IF STREAMTOG 14385000
|
|
THEN BEGIN 14386000
|
|
JUMPCHKNX;G~PROGDESCBLDR(CHAR,L,PROAD);PJ~P; 14387000
|
|
PTOG~FALSE; 14388000
|
|
IF FUNCTOG 14389000
|
|
THEN 14390000
|
|
PUT((Z~TAKE(PROINFO))&LOCLID[2:41:7]&(PJ~PJ+1)[16:37:11] 14391000
|
|
, PROINFO); 14392000
|
|
IF STEPI=BEGINV 14393000
|
|
THEN 14394000
|
|
BEGIN 14395000
|
|
WHILE STEPI=DECLARATORS OR ELCLASS=LOCALV 14396000
|
|
DO 14397000
|
|
BEGIN 14398000
|
|
IF ELBAT[I].ADDRESS=LABELV 14399000
|
|
THEN 14400000
|
|
BEGIN 14401000
|
|
STOPDEFINE~STOPGSP~STOPENTRY~TRUE; 14402000
|
|
DO BEGIN STOPDEFINE~TRUE;STEPIT;ENTRY(STLABID);PUTNBUMP(0) END UNTIL14403000
|
|
ELCLASS!COMMA;STOPGSP~STOPENTRY~FALSE 14404000
|
|
END 14405000
|
|
ELSE 14406000
|
|
BEGIN 14407000
|
|
I~I+1; 14408000
|
|
ENTRY(LOCLID) 14409000
|
|
END 14410000
|
|
END; 14411000
|
|
COMPOUNDTAIL 14412000
|
|
END 14413000
|
|
ELSE 14414000
|
|
STREAMSTMT ; 14415000
|
|
COMMENT THE FOLLOWING BLOCK CONSTITUTES THE STREAM PROCEDURE PURGE; 14416000
|
|
BEGIN 14417000
|
|
REAL NLOC,NLAB; 14418000
|
|
DEFINE SES=18#,SED=6#,TRW=5#; 14419000
|
|
DEFINE RSA = 43 #; 14419100
|
|
DEFINE LOC=[36:12]#,LASTGT=[24:12]#; 14420000
|
|
J~ LASTINFO; 14421000
|
|
NLOC~NLAB~0; 14422000
|
|
DO 14423000
|
|
BEGIN 14424000
|
|
IF(GT1~TAKE(J)).CLASS=LOCLID THEN 14425000
|
|
BEGIN 14426000
|
|
IF BOOLEAN(GT1.FORMAL) THEN 14427000
|
|
BEGIN 14428000
|
|
IF GT1<0 THEN 14429000
|
|
PUT(TAKE(GT2~MARK+P-GT1.ADDRESS+1)&FILEID[2:41:7] 14430000
|
|
,GT2); 14431000
|
|
END 14432000
|
|
ELSE NLOC~NLOC+1; 14433000
|
|
END 14434000
|
|
ELSE 14435000
|
|
BEGIN 14436000
|
|
IF GT1.ADDRESS!0 THEN NLAB~NLAB+1; 14437000
|
|
IF(GT3~TAKE(GIT(J))).LASTGT!0 AND GT3.LOC =0 THEN 14438000
|
|
BEGIN 14439000
|
|
MOVE(9,INFO[0,J],ACCUM[0]); 14440000
|
|
Q~ACCUM[1]; 14441000
|
|
FLAG(267); 14442000
|
|
ERRORTOG~TRUE; 14443000
|
|
END; 14444000
|
|
END; 14445000
|
|
XREFDUMP(J); % DUMP XREF INFO %116-14445100
|
|
G~(GT2~TAKE(J+1)).PURPT; 14446000
|
|
IF GT1.[2:8] ! STLABID|2+1 THEN 14447000
|
|
STACKHEAD[(0>2[12:12:36])MOD 125]~TAKE(J).LINK; 14448000
|
|
END UNTIL J~J-G{1; 14449000
|
|
PUT( P&NLAB[7:42:6]&(NLOC+REAL(FUNCTOG))[1:42:6]&(LPRT+1) 14450000
|
|
[13:37:11],MARK); 14451000
|
|
GT1~ L; L ~ FILETHING ; 14451100
|
|
WHILE L ! 4095 DO 14451200
|
|
BEGIN FILETHING ~ GET(L); 14451300
|
|
EMITC(PJ+1,RSA); 14451400
|
|
L ~ FILETHING; 14451500
|
|
END; 14451600
|
|
L ~ GT1; FILETHING ~ 4095 ; 14451700
|
|
IF FUNCTOG THEN 14452000
|
|
BEGIN 14453000
|
|
EMITC(TAKE( PROINFO).ADDRESS,SES); 14454000
|
|
EMITC(PJ+2,SED); 14455000
|
|
EMITC(1,TRW); 14456000
|
|
PUT(Z, PROINFO); 14457000
|
|
END; 14458000
|
|
EMIT(0); 14459000
|
|
STREAMWORDS; 14460000
|
|
STREAMTOG~FALSE; 14461000
|
|
IF LISTER AND FORMATOG THEN SPACEITDOWN; 14461500
|
|
END; 14462000
|
|
LASTINFO~LASTINFOT;NEXTINFO~MARK+P+1; 14463000
|
|
END 14464000
|
|
ELSE 14465000
|
|
BEGIN 14466000
|
|
IF STEPI=FORWARDV 14467000
|
|
THEN 14468000
|
|
BEGIN 14469000
|
|
XREFIT(PROINFO,0,FORWARDREF); % WE NEED THIS SO WE CAN FIND 14469100
|
|
% THE FORWARD DECL. DURING XREF 14469101
|
|
PUT(-TAKE(G:=PROINFO.LINK+1) & REAL(NEXTSAVE)[3:47:1],G); 14470000
|
|
PURGE(PINFOO); 14471000
|
|
STEPIT 14472000
|
|
END 14473000
|
|
ELSE 14474000
|
|
BEGIN 14475000
|
|
PROADO~PROAD; 14476000
|
|
TSUBLEVEL~SUBLEVEL;SUBLEVEL~LEVEL ;STACKCTRO~STACKCTR; 14477000
|
|
% 14478000
|
|
COMMENT ADDITIONS MADE TO COMPILER TO INSURE THAT STACKCELLS 14478010
|
|
COUNTER DOES NOT OVERFLOW FOR PROCEDURE DECLARATIONS; 14478020
|
|
IF MODE = 1 THEN FRSTLEVEL ~LEVEL; 14478030
|
|
MAXSTACK~STACKCTR~514 + REAL(FUNCTOG); 14478040
|
|
IF ELCLASS = BEGINV THEN 14479000
|
|
IF TABLE(I+1) = DECLARATORS THEN 14480000
|
|
BEGIN 14481000
|
|
BLOCK(TRUE & NEXTSAVE[46:47:1]); 14482000
|
|
; PURGE(PINFOO); 14483000
|
|
GO TO STOP END; 14484000
|
|
BEGIN 14485000
|
|
JUMPCHKNX; 14486000
|
|
RELAD~L ; 14487000
|
|
IF NEXTSAVE THEN FLAG(052); 14487010
|
|
STMT; 14488000
|
|
IF FAULTOG.[46:1] THEN BEGIN EMITL(10); EMITO(COM); END;14488500
|
|
HTTEOAP(FALSE,RELAD,PINFOO,PROAD); 14489000
|
|
END; 14490000
|
|
STOP: 14491000
|
|
SUBLEVEL~TSUBLEVEL; 14492000
|
|
STACKCTR~STACKCTRO; 14493000
|
|
IF LISTER AND FORMATOG THEN SPACEITDOWN; 14493500
|
|
END; 14494000
|
|
END; 14495000
|
|
PROINFO~LO; 14496000
|
|
IF JUMPCTR=LEVEL 14497000
|
|
THEN 14498000
|
|
JUMPCTR~LEVEL-1; 14499000
|
|
LEVEL~LEVEL-1; 14500000
|
|
MODE~MODE-1; 14501000
|
|
MAXSTACK~MAXSTACKO; 14502000
|
|
START:END; 14503000
|
|
GO TO START; 14504000
|
|
CALLSTATEMENT: 14505000
|
|
JUMPCHKX; 14506000
|
|
IF SPECTOG THEN BEGIN 14507000
|
|
IF (PJ ! BUP) THEN 14507010
|
|
BEGIN 14507020
|
|
INTEGER II,SSCRAM,SCOUNT; 14507030
|
|
MOVE(10,ACCUM,INFO[31,240]); 14507040
|
|
II :=I;SSCRAM:=SCRAM;SCOUNT:=COUNT; 14507050
|
|
FOR SCRAM := 0 STEP 1 UNTIL 124 14507060
|
|
DO IF((I~STACKHEAD[SCRAM]) < 256) 14507070
|
|
THEN IF I ! 0 THEN 14507080
|
|
BEGIN ELBAT[76]:=INFO[0,I]&I[35:35:14507090
|
|
13]; 14507095
|
|
COUNT:=INFO[0,I+1].[12:6]; 14507100
|
|
MOVE(COUNT,INFO[0,I],ACCUM); 14507105
|
|
I:=76; SCATTERELBAT; 14507110
|
|
FORMALF := TRUE; 14507120
|
|
KLASSF := REALID; 14507130
|
|
MAKEUPACCUM; E; 14507140
|
|
END; 14507150
|
|
I~II;SCRAM~SSCRAM;COUNT~SCOUNT; 14507160
|
|
MOVE(10,INFO[31,240],ACCUM); 14507170
|
|
BUP~PJ; FLAG(12);SPECTOG~TRUE; 14507180
|
|
GO TO START; 14507190
|
|
END ; 14507200
|
|
FLAG(12);GO TO HF 14508000
|
|
END; 14509000
|
|
BEGINCTR ~ BEGINCTR-1; 14510000
|
|
IF ERRORTOG 14511000
|
|
THEN COMPOUNDTAIL 14512000
|
|
ELSE 14513000
|
|
BEGIN 14514000
|
|
STMT; 14515000
|
|
IF ELCLASS~TABLE(I+1)=DECLARATORS 14516000
|
|
THEN 14517000
|
|
BEGIN 14518000
|
|
ELBAT[I].CLASS~SEMICOLON; 14519000
|
|
BEGINCTR~BEGINCTR+1; 14520000
|
|
GO TO START 14521000
|
|
END 14522000
|
|
ELSE 14523000
|
|
COMPOUNDTAIL 14524000
|
|
END; 14525000
|
|
BEGIN 14526000
|
|
RELAD~FIRSTX; 14534000
|
|
IF STACKCTR>MAXSTACK 14535000
|
|
THEN MAXSTACK~STACKCTR; 14536000
|
|
IF GOTSTORAGE OR JUMPCTR=LEVEL OR FAULTOG.[46:1] 14537000
|
|
THEN 14538000
|
|
IF NOT(GOTSTORAGE OR FAULTOG.[46:1]) 14539000
|
|
THEN 14540000
|
|
BEGIN 14541000
|
|
EMITV(BLOCKCTR); 14542000
|
|
EMITL(1); 14543000
|
|
EMITO(SUB); 14544000
|
|
EMITSTORE(BLOCKCTR,STD); 14545000
|
|
GOTSTORAGE~TRUE 14546000
|
|
END 14547000
|
|
ELSE 14548000
|
|
BEGIN 14549000
|
|
EMITL(10); 14550000
|
|
EMITO(COM) 14551000
|
|
END; 14552000
|
|
FUNCTOG~FUNCTOGO; 14553000
|
|
IF SOP 14554000
|
|
THEN HTTEOAP(GOTSTORAGE,FIRSTX,NINFOO,BLKAD) 14555000
|
|
ELSE 14556000
|
|
BEGIN 14557000
|
|
IF LEVEL = 1 THEN EMITO(XIT) 14557500
|
|
ELSE BEGIN 14557600
|
|
EMITV(ADDRSF := GETSPACE(TRUE,-6)); % SEG. DESCR. 14558000
|
|
EMITO(BFW); 14558500
|
|
END; 14558600
|
|
CONSTANTCLEAN; 14559000
|
|
IF GOTSTORAGE OR NCII>0 OR LEVEL=1 14560000
|
|
OR FAULTOG.[46:1] THEN 14561000
|
|
BEGIN 14562000
|
|
ADJUST; RELAD~L; 14563000
|
|
IF GOTSTORAGE OR FAULTOG.[46:1] 14564000
|
|
THEN BEGIN EMITV(BLOCKCTR); EMITL(1); 14564100
|
|
EMITO(ADD);EMITSTORE(BLOCKCTR,STD); 14565000
|
|
END; 14566000
|
|
IF LEVEL=1 THEN IF G~NCII+MAXSTACK-512>0 THEN DO EMITL(0) UNTIL G~G-1 14567000
|
|
=0; 14568000
|
|
PURGE(NINFOO); 14569000
|
|
IF LEVEL=1 THEN IF FAULTLEVEL=1 THEN 14569100
|
|
BEGIN EMITPAIR(0,MDS); EMITO(CHS); END; 14569200
|
|
BUMPL; 14570000
|
|
EMITB(BBW,L,IF FIRSTX=4095 THEN 0 ELSE FIRSTX); 14571000
|
|
CONSTANTCLEAN 14572000
|
|
END ELSE PURGE(NINFOO); 14573000
|
|
IF RELAD =4095 THEN RELAD~0; 14574000
|
|
NEXTTEXT ~ NTEXTO; 14574500
|
|
G~PROGDESCBLDR(LDES-REAL(LEVEL=1),RELAD,BLKAD) 14575000
|
|
END; 14576000
|
|
ENILSPOT ~ 1023 & CARDNUMBER[10:20:28]; 14576100
|
|
SEGMENT((L+3)DIV 4,SGNO,SGNOO); 14577000
|
|
14578000
|
|
14579000
|
|
14580000
|
|
14581000
|
|
14582000
|
|
14583000
|
|
14584000
|
|
14585000
|
|
14586000
|
|
14587000
|
|
14588000
|
|
14589000
|
|
14590000
|
|
14591000
|
|
14592000
|
|
ENILPTR ~ OLDENILPTR; LASTADDRESS ~ OLDLASTADDRESS; 14593000
|
|
MOVECODE(TENIL,ENIL); 14594000
|
|
MOVECODE(TEDOC,EDOC);L~LOLD; 14595000
|
|
DOUBLE(SGNO,SGNOO,~,SGNOO,SGNO); 14596000
|
|
IF NOT SOP AND LEVEL ! 1 14597000
|
|
THEN 14598000
|
|
BEGIN 14599000
|
|
ADJUST; 14600000
|
|
G~PROGDESCBLDR(LDES,L,ADDRSF); 14601000
|
|
IF ELCLASS = FACTOP THEN 14601100
|
|
BEGIN COMMENT SPECIAL CASE FOR COBOL ONLY; 14601200
|
|
14601300
|
|
14601400
|
|
14601500
|
|
14601600
|
|
14601610
|
|
STEPIT; 14601700
|
|
END; 14601800
|
|
END; 14602000
|
|
IF JUMPCTR=LEVEL THEN JUMPCTR~LEVEL-1; 14603000
|
|
LEVEL~LEVEL-1; 14604000
|
|
FUNCTOG~FUNCTOGO; 14605000
|
|
AJUMP~AJUMPO; 14606000
|
|
GLOBALNINFOO := OLDNINFOO; %118-14606100
|
|
PRTI~PRTIO; 14607000
|
|
FIRSTX~FIRSTXO; 14608000
|
|
SAVEL~SAVELO; 14609000
|
|
STACKCTR~STACKCTRO; 14610000
|
|
SAVEPRTOG := SAVEPRTOGO; 14610100
|
|
NCII~NCIIO; FAULTOG~FAULTOGO AND(FALSE&FAULTLEVEL<LEVEL[46:47:1]); 14611000
|
|
END; 14612000
|
|
END BLOCK; 14613000
|
|
COMMENT THIS SECTION CONTAINS THE VARIABLE ROUTINE AND ITS SIDEKICKS; 15000000
|
|
PROCEDURE CLSMPMN(ELBATWORD,TYPEDPROC) ; 15001000
|
|
VALUE ELBATWORD,TYPEDPROC ; 15002000
|
|
REAL ELBATWORD ; 15003000
|
|
BOOLEAN TYPEDPROC ; 15003010
|
|
BEGIN COMMENT CALL SIMPLE MONITOR IS USED TO CALL PRINTI FOR 15004000
|
|
SIMPLE VARIABLES. SEE THE MERRIMAC ROUTINE FOR A 15005000
|
|
DESCRIPTION OF PRINTI; 15006000
|
|
EMITPAIR(JUNK,SND);EMITO(MKS); EMITV(JUNK); 15007000
|
|
EMITL(PASSTYPE(ELBATWORD)); EMITPAIR(GNAT( 15008000
|
|
POWERSOFTEN),LOD); PASSALPHA(ELBATWORD); 15009000
|
|
EMITPAIR(GNAT(CHARI),LOD) ; 15010000
|
|
IF TYPEDPROC THEN PASSMONFILE(TAKE(GIT(ELBATWORD)).[27:11]) ELSE 15010010
|
|
PASSMONFILE(TAKE(GIT(ELBATWORD)).SVARMONFILE) ; 15010020
|
|
EMITNUM(1&CARDNUMBER[1:4:44]); %109-15011000
|
|
EMITV(GNAT(PRINTI)); 15012000
|
|
END CLSMPMN; 15013000
|
|
INTEGER PROCEDURE PASSTYPE(ELBATWORD); 15014000
|
|
VALUE ELBATWORD ; 15015000
|
|
REAL ELBATWORD ; 15016000
|
|
COMMENT PASSTYPE IS USED TO PASS THE TYPE OF VARIABLE BEING 15017000
|
|
MONITORED TO PRINTI; 15018000
|
|
PASSTYPE~(ELBATWORD.CLASS-BOOPROCID) MOD 4; 15019000
|
|
PROCEDURE PASSALPHA(ELBATWORD); 15020000
|
|
VALUE ELBATWORD ; 15021000
|
|
REAL ELBATWORD ; 15022000
|
|
BEGIN COMMENT PASSALPHA GENERATES CODE THAT PASSES THE ID 15023000
|
|
PARAMETER TO PRINTI; 15024000
|
|
DEFINE SIZEALPHA = RR9#; COMMENT SIZEALPHA CONTAINS THE 15025000
|
|
LENGTH OF THE ALPHA FOR THE 15026000
|
|
VARIABLE DESCRIBED BY ELBATWORD; 15027000
|
|
DEFINE INDEX = RR10#; COMMENT INDEX CONTAINS THE INDEX 15028000
|
|
INTO INFO FOR ID. INFO[INDEX] = ID; 15029000
|
|
DEFINE LTEMP = RR11#; COMMENT LTEMP IS A TEMP FOR L; 15030000
|
|
EMITV(IF BOOLEAN(L.[46:1]) 15031000
|
|
THEN CPLUS2 15032000
|
|
ELSE CPLUS1);LTEMP~BUMPL; EMITWORD(GETALPHA( 15033000
|
|
INFO[(INDEX~ELBATWORD.LINK+1).LINKR,INDEX.LINKC], 15034000
|
|
IF SIZEALPHA~TAKE(INDEX).ALPHASIZE > 7 15035000
|
|
THEN 7 15036000
|
|
ELSE SIZEALPHA)); EMITB(BFW,LTEMP,L); 15037000
|
|
END PASSALPHA; 15038000
|
|
COMMENT THE FOLLOWING BLOCK HANDLES THE FOLLOWING CASES 15039000
|
|
OF SIMPLE VARIABLES: 15040000
|
|
1. V ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 15041000
|
|
2. V ~ EXP ,ALL V EXCEPT FORMAL-NAME. 15042000
|
|
3. V.[S:L] ~ EXP ,WHERE V IS FORMAL-CALL BY NAME. 15043000
|
|
4. V.[S:L] ~ EXP ,ALL V EXCEPT FORMAL-NAME. 15044000
|
|
5. V.[S:L] ,ALL V. 15045000
|
|
6. V ,ALL V. 15046000
|
|
CODE EMITED FOR THE ABOVE CASES IS AS FOLLOWS: 15047000
|
|
1. VN,EXP,M*,XCH,~. 15048000
|
|
2. EXP,M*,VL,~. 15049000
|
|
3. VN,DUP,COC,EXP,T,M*,XCH,~. 15050000
|
|
4. VV,EXP,T,M*,VL,~. 15051000
|
|
5. ZEROL,VV,T . 15052000
|
|
6. VV . 15053000
|
|
WHERE VN = DESC V 15054000
|
|
EXP= ARITH, OR BOOLEAN EXPRESSION,AS REQUIRED. 15055000
|
|
M* = CALL ON MONITOR ROUTINE,IF REQUIRED. 15056000
|
|
VL = LITC V 15057000
|
|
VV = OPDC V 15058000
|
|
~ = STORE INSTRUCTION(ISD,ISN,SND OR STD). 15059000
|
|
T = BIT TRANSFER CODE(DIA,DIB,TRB). 15060000
|
|
ZEROL = LITC 0 15061000
|
|
DUP,COC,XCH = THE INSTRUCTIONS DUP,COC,AND XCH. 15062000
|
|
OF COURSE, EXP WILL CAUSE RECURSION,IN GENERAL,AND THUS 15063000
|
|
THE PARAMETER P1 AND THE LOCALS CAN NOT BE HANDLED IN A 15064000
|
|
GLOBAL FASHION. 15065000
|
|
THE PARAMETER P1 IS USED TO TELL THE VARIABLE ROUTINE 15066000
|
|
WHO CALLED IT. SOME OF THE CODE GENERATION AND SOME 15067000
|
|
SYNTAX CHECKS DEPEND UPON A PARTICULAR VALUE OF P1 . 15068000
|
|
; 15069000
|
|
PROCEDURE VARIABLE(P1); REAL P1; 15070000
|
|
BEGIN 15071000
|
|
REAL TALL, COMMENT ELBAT WORD FOR VARIABLE; 15072000
|
|
T1 , COMMENT 1ST INTEGER OF PARTIAL WORD SYNTAX; 15073000
|
|
T2 , COMMENT 2ND INTEGER OF PARTIAL WORD SYNTAX; 15074000
|
|
J ; COMMENT SUBSCRIPT COUNTER ; 15075000
|
|
REAL X, Z; 15075500
|
|
REAL REMEMBERSEQNO; % REMEMBERS SEQUENCE NUMBER OF VARIABLE %116-15075550
|
|
% ON LEFT HAND SIDE OF ASSIGNMENT SO WE %116-15075551
|
|
% CAN XREF IT CORRECTLY. %116-15075552
|
|
LABEL EXIT; 15076000
|
|
TALL~ELBAT[I] ; 15077000
|
|
IF ELCLASS { INTPROCID THEN 15078000
|
|
BEGIN 15079000
|
|
IF TALL.LINK !PROINFO.LINK THEN 15080000
|
|
BEGIN ERR(211); GO TO EXIT END; 15081000
|
|
COMMENT 211 VARIABLE-FUNCTION IDENTIFIER USED OUTSIDE OF ITS SCOPE*; 15082000
|
|
TALL ~ TALL & (ELCLASS+4) [2:41:7] & 514 [16:37:11]; 15083000
|
|
END 15084000
|
|
ELSE CHECKER(TALL); 15085000
|
|
REMEMBERSEQNO := CARDNUMBER; %116-15085100
|
|
IF TALL.CLASS { INTID THEN 15086000
|
|
BEGIN 15087000
|
|
LABEL L1, EXIT ; 15088000
|
|
DEFINE FORMALNAME=[9:2]=2 #; 15089000
|
|
J ~ ELCLASS ; 15089010
|
|
IF STEPI= ASSIGNOP THEN 15090000
|
|
BEGIN STACKCT ~ 1; %A 15091000
|
|
XMARK(ASSIGNREF); % ASSIGNMENT TO SIMPLE VARIABLE. %116-15091100
|
|
L1: 15092000
|
|
IF TALL.FORMALNAME THEN 15092020
|
|
BEGIN 15093000
|
|
EMITN(TALL.ADDRESS); 15094000
|
|
IF T1!0 THEN BEGIN EMITO(DUP);EMITO(COC) END; 15095000
|
|
END 15096000
|
|
ELSE IF T1!0 THEN EMITV(TALL.ADDRESS) 15097000
|
|
; STACKCT ~ REAL(T1!0); STEPIT; %A 15098000
|
|
IF TALL.CLASS =BOOID THEN BEXP ELSE AEXP; 15099000
|
|
EMITD(48-T2 ,T1 ,T2); 15100000
|
|
IF TALL<0 THEN CLSMPMN(TALL,J}BOOPROCID AND J{INTPROCID) ; 15101000
|
|
STACKCT ~ 0; %A 15101500
|
|
GT1 ~ IF TALL.CLASS =INTID THEN IF P1= FS 15102000
|
|
THEN ISD ELSE ISN ELSE 15103000
|
|
IF P1 = FS THEN STD ELSE SND ; 15104000
|
|
IF TALL.FORMALNAME THEN 15105000
|
|
BEGIN EMITO(XCH); EMITO(GT1) END 15106000
|
|
ELSE EMITPAIR(TALL.ADDRESS,GT1); 15107000
|
|
END 15108000
|
|
ELSE 15109000
|
|
BEGIN 15110000
|
|
IF ELCLASS= PERIOD THEN 15111000
|
|
BEGIN IF DOTSYNTAX(T1,T2) THEN GO TO EXIT ; 15112000
|
|
IF STEPI=ASSIGNOP THEN 15113000
|
|
BEGIN %116-15113100
|
|
IF P1! FS THEN 15114000
|
|
BEGIN %116-15115000
|
|
ERR(201); % PARTIAL WORD NOT LEFT-MOST 15115100
|
|
GO TO EXIT; %116-15115200
|
|
END; %116-15115300
|
|
XREFIT(TALL,REMEMBERSEQNO,ASSIGNREF); %116-15116000
|
|
GO TO L1; %116-15116100
|
|
END; %116-15116200
|
|
%A 15117000
|
|
END ; 15118000
|
|
IF P1! FP THEN BEGIN ERR(202); GO TO EXIT END; 15119000
|
|
COMMENT 202 VARIABLE- A VARIABLE APPEARS WHICH IS NOT FOLLOWED * 15120000
|
|
BY A LEFT ARROW OR PERIOD *;15121000
|
|
COMMENT 201 VARIABLE- A PARTIAL WORD DESIGNATOR IS NOT THE * 15122000
|
|
LEFT-MOST OF A LEFT PART LIST *;15123000
|
|
EMITI(TALL,T1,T2); %A 15124000
|
|
%A 15125000
|
|
END ; 15126000
|
|
EXIT: END OF BLOCK OF SIMPLE VARIABLES 15127000
|
|
ELSE 15128000
|
|
COMMENT THE FOLLOWING BLOCK HANDLES THESE CASES OF SUBSCRIPTED 15129000
|
|
VARIABLES: 15130000
|
|
1. V[*] ,ROW DESIGNATOR FOR SINGLE-DIMENSION. 15131000
|
|
2. V[R,*] ,ROW DESIGNATOR FOR MULTI-DIMENSION. 15132000
|
|
3. V[R] ,ARRAY ELEMENT,NAME OR VALUE. 15133000
|
|
4. V[R].[S:L] ,PARTIAL WORD DESIGNATOR, VALUE. 15134000
|
|
5. V[R] ~ ,ASSIGNMENT TO ARRAY ELEMENT. 15135000
|
|
6. V[R].[S:L] ~ ,ASSIGNMENT TO PARTIAL WORD,LEFT-MOST. 15136000
|
|
R IS A K-ORDER SUBSCRIPT LIST,I.E. R= R1,R2,...,RK. 15137000
|
|
IN THE CASE OF NO MONITORING ON V, THE FOLLOWING CODE 15138000
|
|
IS EMITTED FOR THE ABOVE CASES: 15139000
|
|
1. CASE #1 IS A SPECIAL CASE OF #2,NAMELY,SINGLE 15140000
|
|
DIMENSION. THE CODE EMITTED IS: 15141000
|
|
VL,LOD . 15142000
|
|
EXECUTION: PLACES ARRAY DESCRIPTER IN REG A. 15143000
|
|
2. THIS CODE IS BASIC TO THE SUBSCRIPTION PROCESS.15144000
|
|
EACH SUBSCRIPT GENERATES THE FOLLOWING SEQUENCE15145000
|
|
OF CODE: 15146000
|
|
AEXP,L*,IF FIRST SUBSCRIPT THEN VN ELSE CDC 15147000
|
|
,LOD. 15148000
|
|
FOR A K-ORDER SUBSCRIPTION,K-1 SEQUENCE ARE 15149000
|
|
PRODUCED. THE AEXP IN EACH SEQUENCE REFERS TO 15150000
|
|
THE CODE PRODUCED BY THE ARITHMETIC EXPRESSION 15151000
|
|
PROCEDURE FOR THE ACTUAL SUBSCRIPT EXPRESSIONS,15152000
|
|
[* REFERS TO THE CODE PRODUCED FOR SUBTRACTING 15153000
|
|
NON-ZERO LOWER BOUNDS FROM THE SUBSCRIPT 15154000
|
|
EXPRESSION(L* YIELDS NO CODE FOR ZERO BOUNDS). 15155000
|
|
EXECUTION: PLACES ARRAY ROW DESCRIPTOR IN REG A15156000
|
|
. THE SPECIFIC ROW DEPENDS UPON THE 15157000
|
|
VALUES OF THE K-1 SUBSCRIPTS. 15158000
|
|
FOR THE REMAINING CASES, 15159000
|
|
SEQUENCES OF CODE ARE EMITED AS IN CASE #2. 15160000
|
|
HOWEVER,THE ACTUAL SEQUENCES ARE: 15161000
|
|
ONE SEQUENCE ,(AEXP,L*),FOR THE 1ST SUBSCRIPT.15162000
|
|
K-1 SEQUENCES,(IF FIRST SUBSCRIPT THEN VN 15163000
|
|
ELSE CDC,LOD,AEXP,L*), FOR THE REMAINING 15164000
|
|
SUBSCRIPTS,IF K>1. 15165000
|
|
AT THIS POINT, CASES #3-6 ARE DIFFERENTIATED 15166000
|
|
AND ADDITION CODE,PARTICULAR TO EACH CASE,IS 15167000
|
|
EMITTED. 15168000
|
|
3. ADD THE SEQUENCE: 15169000
|
|
IF FIRST SUBSCRIPT THEN VV ELSE COC. 15170000
|
|
EXECUTION: THE ARRAY ELEMENT IS PUT IN REG A. 15171000
|
|
4. ADD THE SEQUENCE: 15172000
|
|
IF FIRST SUBSCRIPT THEN VV ELSE COC,ZEROL. 15173000
|
|
XCH,T. 15174000
|
|
5. ADD THE SEQUENCE: 15175000
|
|
IF FIRST SUBSCRIPT THEN VN ELSE CDC,EXP, 15176000
|
|
XCH,~. 15177000
|
|
6. ADD THE SEQUENCE: 15178000
|
|
IF FIRST SUBSCRIPT THEN VN ELSE CDC,DUP,LOD, 15179000
|
|
EXP,T, XCH,~. 15180000
|
|
EXP,T,~,ZEROL,ETC. HAVE SAME MEANINGS AS DEFINED IN 15181000
|
|
SIMPLE VARIABLE BLOCK. ; 15182000
|
|
BEGIN 15183000
|
|
LABEL EXIT,LAST,NEXT ; 15184000
|
|
INTEGER THENUMBEROFDECLAREDDIMENSIONS; 15184100
|
|
DEFINE NODIM = RR1#; COMMENT NODIM CONTAINS THE NUMBER OF15185000
|
|
DIMENSIONS OF A MONITORED SUBSCRIPTED 15186000
|
|
VARIABLE; 15187000
|
|
DEFINE TESTVARB = RR2#; COMMENT TESTVARB CONTAINS THE 15188000
|
|
INDEX OF THE LAST ENTRY IN INFO 15189000
|
|
FOR A MONITORED SUBSCRIPTED 15190000
|
|
VARIABLE; 15191000
|
|
DEFINE INC = RR3#; COMMENT INC IS A COUNTER USED TO INDEX15192000
|
|
INTO INFO TO PICK OUT SPECIAL MONITOR 15193000
|
|
INFORMATION; 15194000
|
|
DEFINE SPMON = [11:12]#; COMMENT SPMON DESIGNATES THE BIT15195000
|
|
POSITION OF THE SPECIAL MONITOR 15196000
|
|
INFORMATION FOR SUBSCRIPTED 15197000
|
|
VARIABLES; 15198000
|
|
DEFINE OPBIT = [11: 1]#; COMMENT OPBIT TELLS WHETHER TO 15199000
|
|
EMIT AN OPDC OR LITC FOR PASSING 15200000
|
|
THE SUBSCRIPTS FOR MONITORED 15201000
|
|
SUBSCRIPTED VARIABLES.1 MEANS 15202000
|
|
LITC, 0 MEANS OPDC; 15203000
|
|
DEFINE LWRBND = RR4#; COMMENT LWRBND HOLDS THE LOWER 15204000
|
|
BOUND WORD FROM INFO FOR MONITORED 15205000
|
|
SUBSCRIPTED VARIABLES; 15206000
|
|
DEFINE SPMONADR = [12:11]#; COMMENT SPMONADR CONTAINS 15207000
|
|
THE ADDRESS THAT WILL BE 15208000
|
|
EMITTED IN AN OPDC OR LITC 15209000
|
|
DEPENDING ON OPBIT; 15210000
|
|
BOOLEAN SPCLMON; COMMENT SPCLMON IS A BOOLEAN THAT15211000
|
|
IS SET TRUE IF THE VARIABLE IN 15212000
|
|
TALL IS SPECIAL MONITORED. 15213000
|
|
; 15214000
|
|
PROCEDURE M4(TALL,J); 15215000
|
|
VALUE TALL,J ; 15216000
|
|
REAL TALL,J ; 15217000
|
|
BEGIN STACKCT ~ 1; %A 15217500
|
|
IF J = 1 15218000
|
|
THEN BEGIN COMMENT FIRST TIME AROUND; 15219000
|
|
IF TALL < 0 15220000
|
|
THEN BEGIN COMMENT TALL IS MONITORED; 15221000
|
|
EMITV(JUNK); EMITO(XCH); 15222000
|
|
END; 15223000
|
|
EMITN(TALL.ADDRESS ) 15224000
|
|
END 15225000
|
|
ELSE BEGIN COMMENT NOT THE FIRST TIME AROUND; 15226000
|
|
EMITO(CDC); 15227000
|
|
IF TALL < 0 15228000
|
|
THEN BEGIN COMMENT CALL SUBSCRIPT; 15229000
|
|
EMITV(JUNK); EMITO(XCH); 15230000
|
|
END; 15231000
|
|
END; END; %A 15232000
|
|
IF STEPI ! LFTBRKET THEN BEGIN ERR(207);GO TO EXIT END; 15233000
|
|
THENUMBEROFDECLAREDDIMENSIONS ~ TAKE(GIT(TALL)).[40:8]; 15233100
|
|
J ~ 0; 15234000
|
|
STACKCT ~ 0; %A 15234500
|
|
COMMENT 207 VARIABLE-MISSING LEFTBRACKET ON SUBSCRIPTED VARIABLE *; 15235000
|
|
IF P1 > FP THEN TALL ~ ABS(TALL) ELSE 15236000
|
|
IF TALL < 0 THEN 15237000
|
|
COMMENT **** MONITOR FUNCTION M1 GOES HERE ; 15238000
|
|
BEGIN COMMENT THIS MAY BE A MONITORED SUBSCRIPTED 15239000
|
|
VARIABLE; 15240000
|
|
EMITO(MKS); 15241000
|
|
IF SPCLMON~TAKE(GIT(TALL)+1).SPMON ! 0 15242000
|
|
THEN BEGIN COMMENT THIS IS SPECIAL MONITORED; 15243000
|
|
TESTVARB~(NODIM~TAKE(INC~GIT(TALL)) 15244000
|
|
.NODIMPART)+INC; 15245000
|
|
DO IF BOOLEAN(LWRBND~TAKE(INC~INC+1)).15246000
|
|
OPBIT 15247000
|
|
THEN EMITL(LWRBND.SPMONADR) 15248000
|
|
ELSE EMITV(LWRBND.SPMONADR) 15249000
|
|
UNTIL INC } TESTVARB 15250000
|
|
END; 15251000
|
|
END; 15252000
|
|
NEXT: IF STEPI = FACTOP THEN 15253000
|
|
BEGIN 15254000
|
|
STLB ~ 1; 15254400
|
|
WHILE TABLE(I+1) = COMMA DO 15254500
|
|
BEGIN STEPIT; 15254600
|
|
IF STEPI = FACTOP THEN STLB ~ STLB+1 ELSE 15254700
|
|
BEGIN ERR(204); GO TO EXIT END; 15254800
|
|
END; 15254900
|
|
IF J+STLB ! THENUMBEROFDECLAREDDIMENSIONS THEN 15255000
|
|
BEGIN ERR(203);GO EXIT END; 15256000
|
|
COMMENT 203 VARIABLE- THE NUMBER OF SUBSCRIPTS USED IN A ROW * 15257000
|
|
ROW DESIGNATER DOES NOT MATCH THE ARRAY * 15258000
|
|
DECLARATION. *;15259000
|
|
IF STEPI ! RTBRKET THEN 15260000
|
|
BEGIN ERR(204);GO EXIT END; 15261000
|
|
COMMENT 204 VARIABLE- COMPILER EXPECTS A ] IN A ROW DESIGNATER *;15262000
|
|
IF P1 ! FA THEN 15262500
|
|
IF STLB > 1 THEN FLAG(212) ELSE 15262600
|
|
IF P1!FI AND P1!FL THEN 15263000
|
|
IF P1 = FP AND REL THEN ELSE 15263050
|
|
BEGIN ERR(205); GO TO EXIT; END; 15263100
|
|
COMMENT 205 VARIABLE- A ROW DESIGNATER APPEARS OUTSIDE OF A FILL * 15264000
|
|
STATEMENT OR ACTUAL PARAMETER LIST. *;15265000
|
|
IF J=0 THEN 15266000
|
|
EMITPAIR(TALL.ADDRESS,LOD); 15267000
|
|
COMMENT ***** MONITOR FUNCTION M2 GOES HERE ; 15268000
|
|
IF TALL < 0 THEN 15269000
|
|
BEGIN COMMENT DO NOT MONITOR AFTER ALL; 15270000
|
|
EMITNUM(5&CARDNUMBER[1:4:44]); %109-15271000
|
|
EMITN(GNAT(PRINTI)); %109-15271100
|
|
END; 15272000
|
|
IF P1 = FA THEN 15272900
|
|
FOR X ~ 1 STEP 1 UNTIL STLB DO 15273000
|
|
BEGIN IF (Z~TAKE(GIT(TALL)+J+X)).[35:11] > 1023 15273100
|
|
THEN EMITV(Z) ELSE EMIT(Z); 15273200
|
|
IF Z.[23:10] = ADD THEN EMITO(CHS); 15273300
|
|
END; 15273400
|
|
STEPIT; 15274000
|
|
GO TO EXIT; 15275000
|
|
END OF ROW DESIGNATOR PORTION ; 15276000
|
|
AEXP; 15277000
|
|
COMMENT ***** MONITOR FUNCTION M3 GOES HERE ; 15278000
|
|
IF TALL < 0 THEN EMITPAIR(JUNK,ISN); 15279000
|
|
J ~ J + 1; 15280000
|
|
IF(GT1 ~ TAKE( GIT(TALL)+ J)).[35:13] ! 0 THEN 15281000
|
|
BEGIN 15282000
|
|
IF GT1.[46:2] = 0 THEN EMIT(GT1) 15283000
|
|
ELSE EMITV(GT1.[35:11]) ; 15284000
|
|
EMIT(GT1.[23:12]); 15285000
|
|
END OF LOWER BOUND ADJUSTMENT ; 15286000
|
|
IF ELCLASS = COMMA THEN 15287000
|
|
BEGIN 15288000
|
|
COMMENT ***** MONITOR FUNCTION M4 GOES HERE ; 15289000
|
|
M4 (TALL,J); 15290000
|
|
EMITO(LOD) ; 15291000
|
|
IF J+1 > THENUMBEROFDECLAREDDIMENSIONS THEN 15291100
|
|
BEGIN ERR(208); GO TO EXIT END; 15291200
|
|
COMMENT 208 VARIABLE- NUMBER OF SUBSCRIPTS DOES NOT MATCH ARRAY * 15291300
|
|
DECLARATION *;15291400
|
|
GO TO NEXT; 15292000
|
|
END OF SUBSCRIPT COMMA HANDLER ; 15293000
|
|
IF ELCLASS ! RTBRKET THEN BEGIN ERR(206);GO EXIT END; 15294000
|
|
COMMENT 206 VARIABLE- MISSING RIGHT BRACKET ON SUBSCRIPTED VARIABLE*; 15295000
|
|
IF J ! THENUMBEROFDECLAREDDIMENSIONS THEN 15296000
|
|
BEGIN ERR(208); GO TO EXIT END; 15297000
|
|
15298000
|
|
15299000
|
|
STACKCT ~ 0; %A 15299500
|
|
IF STEPI = ASSIGNOP THEN 15300000
|
|
BEGIN 15301000
|
|
XREFIT(TALL,REMEMBERSEQNO,ASSIGNREF); % ASSIGNMENT TO15301100
|
|
% SUBSCRIPTED VARIABLE. %116-15301200
|
|
COMMENT ***** MONITOR FUNCTION M4 GOES HERE ; 15302000
|
|
LAST: M4(TALL,J); 15303000
|
|
IF T1= 0 THEN 15304000
|
|
BEGIN IF P1= FR THEN GO TO EXIT END 15305000
|
|
ELSE BEGIN EMITO(DUP); EMITO(COC) END; STEPIT; %WF 15306000
|
|
IF TALL.CLASS = BOOARRAYID THEN BEXP ELSE AEXP ; 15307000
|
|
EMITD(48-T2,T1,T2) ; 15308000
|
|
EMITO(XCH); 15309000
|
|
COMMENT ***** MONITOR FUNCTION M6 GOES BEFORE EMITO(XCH); 15310000
|
|
IF TALL < 0 15311000
|
|
THEN BEGIN COMMENT STORE THE VALUE OF THE EXPRESSION 15312000
|
|
IN JUNK AND CALL PRINTI, THEN RECALL THE 15313000
|
|
VALUE FROM JUNK; 15314000
|
|
EMITO( 15315000
|
|
IF TALL.CLASS = INTARRAYID 15316000
|
|
THEN ISN 15317000
|
|
ELSE SND); 15318000
|
|
IF P1 ! FS 15319000
|
|
THEN EMITPAIR(JUNK,SND); 15320000
|
|
EMITL(J); EMITL(PASSTYPE(TALL)); 15321000
|
|
EMITPAIR(GNAT(POWERSOFTEN),LOD); 15322000
|
|
PASSALPHA(TALL); EMITPAIR(GNAT( 15323000
|
|
CHARI),LOD); PASSMONFILE(TAKE(GIT(TALL)). 15324000
|
|
ARRAYMONFILE); 15325000
|
|
EMITNUM((IF SPCLMON THEN 3 ELSE 2) %109-15326000
|
|
&CARDNUMBER[1:4:44]); %109-15327000
|
|
EMITV(GNAT(PRINTI)); %109-15328000
|
|
IF P1 ! FS 15329000
|
|
THEN EMITV(JUNK); 15330000
|
|
P1~0; GO TO EXIT; 15331000
|
|
END; 15332000
|
|
EMITO(IF TALL.CLASS = INTARRAYID THEN 15333000
|
|
IF P1 = FS THEN ISD ELSE ISN ELSE 15334000
|
|
IF P1=FS THEN STD ELSE SND); 15335000
|
|
P1~0 ; 15336000
|
|
GO TO EXIT ; 15337000
|
|
END OF ASSIGNMENT STATEMENT SUBSCRIPTED VARIABLES; 15338000
|
|
IF ELCLASS=PERIOD THEN 15339000
|
|
BEGIN 15340000
|
|
IF DOTSYNTAX(T1,T2) THEN GO TO EXIT; 15341000
|
|
IF STEPI = ASSIGNOP THEN %116-15342000
|
|
IF P1 = FS THEN % PARTIAL WORD IS LEFT-MOST %116-15342100
|
|
BEGIN %116-15342200
|
|
XREFIT(TALL,REMEMBERSEQNO,ASSIGNREF); % PARTIAL15342300
|
|
% WORD ASSIGNMENT TO SUBSCR. VAR. 15342400
|
|
GO TO LAST; %116-15342500
|
|
END %116-15342600
|
|
ELSE BEGIN ERR(209); GO EXIT END; 15343000
|
|
IF J=1 THEN EMITV(TALL.ADDRESS)ELSE EMITO(COC); 15344000
|
|
END 15345000
|
|
ELSE 15346000
|
|
COMMENT ***** MONITOR FUNCTION M10 GOES HERE ; 15347000
|
|
BEGIN COMMENT MONITOR FUNCTION M10; 15348000
|
|
SPCLMON~P1 = FP OR ELCLASS } AMPERSAND; 15349000
|
|
IF J = 1 15350000
|
|
THEN IF SPCLMON 15351000
|
|
THEN EMITV(TALL.ADDRESS) 15352000
|
|
ELSE EMITN(TALL.ADDRESS) 15353000
|
|
ELSE EMITO(IF SPCLMON 15354000
|
|
THEN COC 15355000
|
|
ELSE CDC); 15356000
|
|
IF TALL < 0 15357000
|
|
THEN BEGIN COMMENT DO NOT MONITOR AFTER ALL; 15358000
|
|
EMITNUM(5&CARDNUMBER[1:4:44]); %109-15359000
|
|
IF SPCLMON 15360000
|
|
THEN EMITV(GNAT(PRINTI)) 15361000
|
|
ELSE EMITN(GNAT(PRINTI)) 15362000
|
|
END; 15363000
|
|
IF P1 =FS THEN ERR(210); 15364000
|
|
IF P1 = FI THEN P1~0; 15364500
|
|
GO TO EXIT; 15365000
|
|
END; 15366000
|
|
IF P1=FS THEN BEGIN ERR(210); GO TO EXIT END ; 15367000
|
|
COMMENT 210 VARIABLE-MISSING LEFT ARROW OR PERIOD. *;15368000
|
|
IF T1!0 THEN BEGIN EMITI(0,T1,T2); 15369000
|
|
IF P1!FI THEN P1~0; 15369100
|
|
END; 15369200
|
|
IF P1=FI THEN 15369300
|
|
IF ELCLASS!COMMA AND ELCLASS!RTPAREN 15369400
|
|
THEN SIMPARITH; 15369500
|
|
IF P1=FI THEN P1~0;% 15369600
|
|
%A 15370000
|
|
COMMENT ***** MONITOR FUNCTION M9 ; 15371000
|
|
IF TALL < 0 15372000
|
|
THEN BEGIN COMMENT MONITOR FUNCTION M9; 15373000
|
|
EMITNUM(5&CARDNUMBER[1:4:44]); %109-15374000
|
|
EMITV(GNAT(PRINTI)); %109-15374100
|
|
END ; 15375000
|
|
EXIT: STACKCT ~ 0 END OF SUBSCRIPTED BLOCK; %A 15376000
|
|
EXIT : END OF THE VARIABLE ROUTINE; 15377000
|
|
COMMENT THIS SECTION GENERATES CODE FOR STREAM PROCEDURES; 16000000
|
|
PROCEDURE STREAMSTMT ; 16001000
|
|
BEGIN 16002000
|
|
DEFINE LFTPAREN=LEFTPAREN#,LOC=[36:12]#,LASTGT=[24:12]#, 16003000
|
|
LOCFLD=36:36:12#,LGTFLD=24:24:12#; 16004000
|
|
DEFINE LEVEL=LVL#,ADDOP=ADOP#; 16005000
|
|
DEFINE 16006000
|
|
JFW = 39#, COMMENT 7.5.5.1 JUMP FORWARD UNCONDITIONAL ; 16007000
|
|
RCA = 40#, COMMENT 7.5.7.6 RECALL CONTROL ADDRESS ; 16008000
|
|
JRV = 47#, COMMENT 7.5.5.2 JUMP REVERSE UNCONDITIONAL ; 16009000
|
|
CRF = 35#, COMMENT 7.5.10.6 CALL REPEAT FIELD ; 16010000
|
|
BNS = 42#, COMMENT 7.5.5.5 BEGIN LOOP ; 16011000
|
|
NOP = 1#, COMMENT ; 16012000
|
|
ENS = 41#, COMMENT 7.5.5.6 END LOOP ; 16013000
|
|
TAN = 30#, COMMENT 7.5.3.7 TEST FOR ALPHAMERIC ; 16014000
|
|
BIT = 31#, COMMENT 7.5.3.8 TEST BIT ; 16015000
|
|
JFC = 37#, COMMENT 7.5.5.3 JUMP FORWARD CONDITIONAL ; 16016000
|
|
SED = 06#, COMMENT 7.5.7.8 SET DESTINATION ADDRESS ; 16017000
|
|
RSA = 43#, COMMENT 7.5.7.4 RECALL SOURCE ADDRESS ; 16018000
|
|
TRP = 60#, COMMENT 7.5.2.2 TRANSFER PROGRAM CHARACTERS ; 16019000
|
|
BSS = 3#, COMMENT 7.5.6.6 SKIP SOURCE BIT ; 16020000
|
|
BSD = 2#, COMMENT 7.5.6.5 SKIP DESTINATION BITS ; 16021000
|
|
SEC = 34#, COMMENT 7.5.10.1 SET COUNT ; 16022000
|
|
JNS = 38#; COMMENT 7.5.5.7 JUMP OUT LOOP ; 16023000
|
|
COMMENT FIXC EMITS BASICLY FORWARD JUMPS. HOWEVER IN THE CASE 16024000
|
|
OF INSTRUCTIONS INTERPTED AS JUMPS BECAUSE OF A CRF ON 16025000
|
|
A VALUE = 0 AND THE JUMP } 64 SYLLABLES A JFW 1 AND 16026000
|
|
A RCA L (L IS STACK ADDRESS OF A PSEUDO LABEL WHICH 16027000
|
|
MUST ALSO BE MANUFACTURED) IS EMITTED. ; 16028000
|
|
PROCEDURE FIXC(S); VALUE S; REAL S; 16029000
|
|
BEGIN 16030000
|
|
REAL SAVL,D,F; 16031000
|
|
SAVL~L; 16032000
|
|
F~GET( S); 16033000
|
|
IF D ~ L -( L~S) -1{63 THEN 16034000
|
|
BEGIN 16035000
|
|
IF F=BNS THEN 16036000
|
|
BEGIN 16037000
|
|
S~GET(L~L-1);EMIT(NOP);EMIT(NOP);EMIT(S);D~D-2; 16038000
|
|
END; 16039000
|
|
EMITC(D,F); L ~ SAVL 16040000
|
|
END 16041000
|
|
ELSE BEGIN 16042000
|
|
IF F!JFW THEN BEGIN 16043000
|
|
EMITC(1,F); 16044000
|
|
EMITC(1,JFW) END ; 16045000
|
|
EMITC(PJ~PJ+1,RCA); 16046000
|
|
L ~ SAVL; 16047000
|
|
ADJUST; 16048000
|
|
LPRT ~ PROGDESCBLDR(2,L,0); 16049000
|
|
COMMENT NOW ENTER PSEUDO LABEL INTO INFO WITH ADDRESS=PJ-1; 16050000
|
|
PUTNBUMP(0&(STLABID|2+1) 16051000
|
|
[2:40:8]&PJ[16:37:11]&2[27:40:8]); 16052000
|
|
PUTNBUMP(0&(NEXTINFO-LASTINFO-1)[4:40:8]); 16053000
|
|
PUTNBUMP(0); 16054000
|
|
LASTINFO ~ NEXTINFO-3; 16055000
|
|
END; 16056000
|
|
END FIXC ; 16057000
|
|
COMMENT EMITJUMP IS CALLED BY GOTOS AND JUMPCHAIN. 16058000
|
|
THIS ROUTINE WILL EMIT A JUMP IF THE DISTANCE IS { 63 16059000
|
|
SYLLABLES ,OTHERWISE, IT GETS A PRT CELL AND STUFFS THE 16060000
|
|
STACK ADDRESS INTO THE LABEL ENTRY IN INFO AND EMITS AN 16061000
|
|
RCA ON THIS STACK CELL. AT EXECUTION TIME ACTUAL PARAPART 16062000
|
|
INSURES US THAT THIS CELL WILL CONATIN A LABEL DESCRIPTOR 16063000
|
|
POINTING TO OUR LABEL IN QUESTION. ; 16064000
|
|
PROCEDURE EMITJUMP( E); VALUE E; REAL E; 16065000
|
|
BEGIN 16066000
|
|
REAL T,D; 16067000
|
|
REAL ADDR; 16068000
|
|
IF ABS( 16069000
|
|
D~(T~TAKE(GIT(E)).LOC)-L-1)}64 THEN 16070000
|
|
BEGIN 16071000
|
|
IF ADDR~TAKE(E).ADDRESS=0 THEN 16072000
|
|
BEGIN 16073000
|
|
PUT(TAKE(E)&(ADDR~PJ~PJ+1)[16:37:11],E); 16074000
|
|
LPRT ~ PROGDESCBLDR(2,T,0); 16075000
|
|
END ; 16076000
|
|
EMITC(ADDR,RCA); 16077000
|
|
END 16078000
|
|
ELSE EMITC(D,IF D <0 THEN JRV ELSE JFW); 16079000
|
|
END EMIT JUMP; 16080000
|
|
COMMENT WHEN JUMPCHAIN IS CALLED THERE IS A LINKEDLIST IN THE CODE16081000
|
|
ARRAY WHERE JFWS MUST BE PLACED. THE 1ST LINK IS POINTED 16082000
|
|
TO BY THE LOC FIELD OF EACH LABEL ENTRY IN INFO. THE LAST 16083000
|
|
LINK IS = 4096. ; 16084000
|
|
PROCEDURE JUMPCHAIN( E); VALUE E;REAL E; 16085000
|
|
BEGIN 16086000
|
|
REAL SAVL ,LINK; 16087000
|
|
SAVL ~ L; 16088000
|
|
L ~ TAKE(GIT(E)).LASTGT ; 16089000
|
|
WHILE L ! 4095 DO 16090000
|
|
BEGIN 16091000
|
|
LINK ~ GET(L); 16092000
|
|
EMITJUMP( E); 16093000
|
|
L ~ LINK 16094000
|
|
END; 16095000
|
|
L~SAVL; 16096000
|
|
END JUMPCHAIN ; 16097000
|
|
COMMENT NESTS COMPILES THE NEST STATEMENT. 16098000
|
|
A VARIABLE NEST INDEX CAUSES THE CODE, 16099000
|
|
CRF V, BNS 0 ,NOP,NOP, TO BE GENERATED INITIALLY. 16100000
|
|
AT THE RIGHT PAREN THE BNS IS FIXED WITH THE LENGTH OF 16101000
|
|
THE NEST (NUMBER OF SYLLABLES) IF THE LENGTH{63,OTHERWISE 16102000
|
|
IT IS FIXED WITH A 1 AND THE NOPS REPLACED WITH JFW 1, 16103000
|
|
RCA P. THIS IS DONE BECAUSE THE VALUE OF V AT EXECUTION 16104000
|
|
MAY = 0 AND THIS CODE CAUSES A JUMP AROUND THE NEST. 16105000
|
|
JUMPOUT INFO IS REMEMBERED IN A RECURSIVE CELL AND 16106000
|
|
NEST LEVEL INCREASED BY ONE. 16107000
|
|
WHEN THE RIGHT PAREN IS REACHED,(IF THE STATEMENTS IN 16108000
|
|
THE NEST COMPILED), JOINFO IS CHECKED FOR THE EXISTANCE 16109000
|
|
OF JUMPOUT STATEMENTS IN THE NEST,IF SO,THE THE JUMPS 16110000
|
|
ARE FIXED BY FAKING TOTOS INTO COMPILING THE REQUIRED 16111000
|
|
JUMPS. 16112000
|
|
FINALLY THE BNS IS FIXED,IF REQUIRED,AND NEST LEVEL 16113000
|
|
AND JOINFO RESTORED TO THEIR ORIGINAL VALUES. ; 16114000
|
|
PROCEDURE NESTS; 16115000
|
|
BEGIN 16116000
|
|
LABEL EXIT; 16117000
|
|
REAL JOINT,BNSFIX; 16118000
|
|
IF ELCLASS!LITNO THEN 16119000
|
|
BEGIN 16120000
|
|
EMITC(ELBAT[I].ADDRESS,CRF); BNSFIX~ L; 16121000
|
|
EMIT ( BNS); EMIT(NOP);EMIT(NOP); 16122000
|
|
END 16123000
|
|
ELSE EMITC(ELBAT[I].ADDRESS,BNS); 16124000
|
|
IF STEPI ! LFTPAREN THEN BEGIN ERR(262); GO TO EXIT END; 16125000
|
|
NESTLEVEL~NESTLEVEL + 1; 16126000
|
|
JOINT ~ JOINFO; 16127000
|
|
JOINFO ~ 0; 16128000
|
|
DO BEGIN 16129000
|
|
STEPIT; ERRORTOG ~ TRUE; STREAMSTMT 16130000
|
|
END UNTIL ELCLASS ! SEMICOLON ; 16131000
|
|
IF ELCLASS ! RTPAREN THEN BEGIN ERR(262);GO TO EXIT END; 16132000
|
|
EMIT ( ENS); 16133000
|
|
IF JOINFO ! 0 THEN 16134000
|
|
BEGIN 16135000
|
|
COMMENT PREPARE TO CALL JUMPCHAIN FORJUMPOUTS; 16136000
|
|
ADJUST; 16137000
|
|
PUT(TAKE(GIT(JOINFO))&L[LOCFLD],GIT(JOINFO)); 16138000
|
|
JUMPCHAIN(TAKE(JOINFO)&JOINFO[35:35:13]); 16139000
|
|
END; 16140000
|
|
IF BNSFIX ! 0 THEN FIXC(BNSFIX); 16141000
|
|
NESTLEVEL ~ NESTLEVEL-1; 16142000
|
|
JOINFO ~ JOINT ; 16143000
|
|
EXIT: END NESTS ; 16144000
|
|
COMMENT LABELS HANDLES STREAM LABELS. 16145000
|
|
ALL LABELS ARE ADJUSTED TO THE BEGINING OF THE NEXT 16146000
|
|
WORD (IN THE PROGRAMSTREAM). 16147000
|
|
IF A GO TO HAS NOT BEEN ENCOUNTERED BEFORE THE LABEL 16148000
|
|
THEN THE NEST LEVEL FIELD IS ENTERED AND THE DEFINED BIT, 16149000
|
|
[1:1], SET TO ONE. FOR DEFINED LABELS,IF WHERE A GO TO 16150000
|
|
HAS APPEARED, A CHECK IS MADE THAT THE CURRENT NEST LEVEL 16151000
|
|
MATCHES THE LEVEL OF THE LABEL. 16152000
|
|
MULTIPLE OCCURANCES ARE ALSO CHECKED FOR AND FLAGGED. 16153000
|
|
FINALLY,JUMPCHAIN IS CALLED TO FIX UP ANY FORWARD GO TOS 16154000
|
|
AND GET A PRT LOCATION FOR ANY JUMPS }64 SYLLABLES. ; 16155000
|
|
PROCEDURE LABELS; 16156000
|
|
BEGIN 16157000
|
|
ADJUST; 16158000
|
|
GT1 ~ ELBAT[I]; 16159000
|
|
XMARK(LBLREF); % MARK LABEL OCCURENCE FOR XREF %116-16159100
|
|
IF STEPI ! COLON THEN ERR(258) 16160000
|
|
ELSE 16161000
|
|
BEGIN 16162000
|
|
IF TAKE(GT2~GIT(GT1)).LOC ! 0 THEN FLAG(259) ELSE 16163000
|
|
IF GT1>0 THEN 16164000
|
|
BEGIN 16165000
|
|
PUT(-(TAKE(GT1)&NESTLEVEL[11:43:5]),GT1); 16166000
|
|
PUT(-L,GT2) 16167000
|
|
END 16168000
|
|
ELSE 16169000
|
|
BEGIN 16170000
|
|
IF GT1.LEVEL!NESTLEVEL THEN FLAG(257); 16171000
|
|
PUT((-L)&TAKE(GT2)[LGTFLD],GT2); 16172000
|
|
JUMPCHAIN(GT1); 16173000
|
|
END; 16174000
|
|
END 16175000
|
|
; STEPIT; 16176000
|
|
END LABELS ; 16177000
|
|
COMMENT IFS COMPILES IF STATEMENTS. 16178000
|
|
FIRST THE TEST IS COMPILED. NOTE THAT IN THE 16179000
|
|
CONSTRUCTS "SC RELOP DC" AND "SC RELOP STRING" THAT 16180000
|
|
THE SYLLABLE EMITTED IS FETCHED FROM ONE OF TWO FIELDS 16181000
|
|
IN THE ELBAT WORD FOR THE RELATIONAL OPERATOR. OTHERWISE 16182000
|
|
THE CODE IS EMITTED STRAIGHTAWAY. 16183000
|
|
A TEST IS MADE TO SEE WHETHER THE STATEMENT AFTER THE 16184000
|
|
"THEN" COULD POSSIBLY BE LONGER THAN 63 SYLLABLES,AND IF 16185000
|
|
SO, Z NOPS ARE EMITTED FOR FIXC IN CASE A RCA WILL HAVE 16186000
|
|
TO BE GENERATED. 16187000
|
|
THIS PROCEDURE DOES NO OPTIMAZATION IN THE CASES 16188000
|
|
IF THEN GO TO L,IF THEN STATEMENT ELSE GO TO L, OR 16189000
|
|
IF THEN GO TO L1 ELSE GO TO L2 ; 16190000
|
|
PROCEDURE IFS; BEGIN 16191000
|
|
DEFINE COMPARECODE =[42:6]#,TESTCODE=[36:6]#,EQUALV=48#; 16192000
|
|
LABEL IFSB,IFTOG,IFSC,EXIT; 16193000
|
|
SWITCH IFSW ~ IFSB,IFTOG,IFSC; 16194000
|
|
REAL ADDR,FIX1,FIX2 ; 16195000
|
|
ADDR~1 ; 16196000
|
|
GO TO IFSW[STEPI -SBV+1] ; 16197000
|
|
IF ELCLASS=LOCLID THEN 16198000
|
|
BEGIN 16199000
|
|
EMITC(ELBAT[I].ADDRESS,CRF); 16200000
|
|
ADDR~0; 16201000
|
|
END 16202000
|
|
ELSE 16203000
|
|
IF ELCLASS=LITNO THEN ADDR ~ ELBAT[I].ADDRESS 16204000
|
|
ELSE BEGIN ERR(250); GO TO EXIT END; 16205000
|
|
IF STEPI ! SCV THEN BEGIN ERR(263);GO TO EXIT END; 16206000
|
|
IFSC: 16207000
|
|
IF STEPI!RELOP THEN BEGIN ERR(264);GO EXIT END; 16208000
|
|
IF STEPI=DCV THEN EMITC(ADDR,ELBAT[I-1].COMPARECODE) 16209000
|
|
ELSE IF ELCLASS=STRNGCON THEN 16210000
|
|
BEGIN 16211000
|
|
IF ACCUM[1].[12:6]!1 OR ELBAT[I-3].CLASS!IFV THEN 16211100
|
|
BEGIN ERR(271); GO EXIT END 16211200
|
|
ELSE EMITC(ACCUM[1].[18:6],ELBAT[I-1].TESTCODE) 16211300
|
|
END 16211400
|
|
ELSE IF ELCLASS=LOCLID THEN 16212000
|
|
BEGIN 16212100
|
|
IF ELBAT[I-3].CLASS!IFV THEN 16212200
|
|
BEGIN ERR(271); GO EXIT END 16212300
|
|
ELSE BEGIN 16212400
|
|
EMITC(0,ELBAT[I-1].TESTCODE); % RESET TFFF. 16212500
|
|
EMITC(ELBAT[I].ADDRESS,CRF); 16212600
|
|
EMITC(0,ELBAT[I-1].TESTCODE); % COMPARE. 16212700
|
|
END 16212800
|
|
END 16212900
|
|
ELSE IF ACCUM[1]!"5ALPHA" THEN 16213000
|
|
BEGIN ERR(265);GO EXIT END 16213100
|
|
ELSE IF ELBAT[I-1].COMPARECODE=EQUALV THEN EMITC(17,TAN) 16214000
|
|
ELSE BEGIN FLAG(270); ERRORTOG:=TRUE END; 16214100
|
|
GO IFTOG; 16215000
|
|
IFSB: EMITC(1,BIT); 16216000
|
|
IFTOG: IF STEPI!THENV THEN BEGIN ERR(266); GO EXIT END; 16217000
|
|
FIX1 ~ L; 16218000
|
|
EMIT(JFC); 16219000
|
|
STEPIT; 16220000
|
|
IF ELCLASS = BEGINV OR 16221000
|
|
ELCLASS = IFV OR 16222000
|
|
ELCLASS = LITNO OR 16223000
|
|
ELCLASS = STLABID OR 16224000
|
|
ELCLASS = LOCLID AND TABLE(I+1) = LFTPAREN THEN 16225000
|
|
BEGIN 16226000
|
|
EMIT (NOP); EMIT (NOP) 16227000
|
|
END; 16228000
|
|
IF ELCLASS= ELSEV THEN ELSE 16228500
|
|
STREAMSTMT; 16229000
|
|
IF ELCLASS= ELSEV THEN 16230000
|
|
BEGIN 16231000
|
|
FIX2 ~ L; EMIT(JFW); 16232000
|
|
FIXC(FIX1); 16233000
|
|
STEPIT; 16234000
|
|
STREAMSTMT; 16235000
|
|
FIXC(FIX2); 16236000
|
|
END 16237000
|
|
ELSE FIXC(FIX1); 16238000
|
|
EXIT:END IFS ; 16239000
|
|
COMMENT GOTOS HANDLES GO TO AND THE LAST PART OF JUMP OUT TO 16240000
|
|
STATEMENTS. 16241000
|
|
IF THE LABEL HAS BEEN ENCOUNTERED THEN EMITJUMP IS CALLED 16242000
|
|
AN PRODUCES A JRV OR RCA IN THE CASE OF JUMPS}64 SYLLABL 16243000
|
|
ES. OTHERWISE, A LINK IS EMITTED POINTING ANY PREVIOUS 16244000
|
|
GO TOS IN THE CASE OF FORWARD JUMPS. 16245000
|
|
FINALLY, IF THE NEST LEVEL IS DEFINED THEN IT IS CHECKED 16246000
|
|
AGAINST THE CURRENT LEVEL MINUS THE NUMBER OF LEVELS TO 16247000
|
|
BE JUMPED OUT. OTHERWISE,NEST LEVEL IS DEFINED. ; 16248000
|
|
PROCEDURE GOTOS; 16249000
|
|
BEGIN 16250000
|
|
LABEL EXIT; 16251000
|
|
IF STEPI !TOV THEN I~I-1 ; 16252000
|
|
IF STEPI ! STLABID THEN BEGIN ERR(260); GO TO EXIT END; 16253000
|
|
IF(GT2~TAKE(GIT(GT1~ELBAT[I]))).MON=1 16254000
|
|
OR GT2.LOC!0 THEN EMITJUMP(GT1) 16255000
|
|
ELSE 16256000
|
|
BEGIN PUT(0&L[24:36:12],GIT(GT1)); 16257000
|
|
IF GT1>0 THEN 16258000
|
|
BEGIN 16259000
|
|
PUT(-(TAKE(GT1)&(NESTLEVEL-JUMPLEVEL)[11:43:5]),GT1);16260000
|
|
EMITN(1023); 16261000
|
|
END 16262000
|
|
ELSE 16263000
|
|
BEGIN 16264000
|
|
IF GT1.LEVEL ! NESTLEVEL-JUMPLEVEL THEN FLAG(257); 16265000
|
|
EMIT(GT2.LASTGT); 16266000
|
|
END; 16267000
|
|
END; 16268000
|
|
JUMPLEVEL~0 ; 16269000
|
|
EXIT: END GOTOS ; 16270000
|
|
COMMENT RELEASES COMPILES THE STREAM RELEASE STATEMENT. 16271000
|
|
THE CODE GENERATED IS : 16272000
|
|
SED FILE 16273000
|
|
RSA 0. 16274000
|
|
AT EXECUTION TIME THIS CAUSES AN INVALID ADDRESS WHICH IS 16275000
|
|
INTERPETED BY THE MCP TO MEAN RELEASE THE FILE POINTED TO 16276000
|
|
BY THE DESTINATION ADDRESS. 16277000
|
|
THE MONITOR BIT IS SET IN INFO FOR THE LOCAL VARIABLE SO 16278000
|
|
THAT ACUTAL PARAPART MAY BE INFORMED LATER THAT A FILE 16279000
|
|
MUST BE PASSED FOR THIS FORMAL PARAMETER; 16280000
|
|
PROCEDURE RELEASES; 16281000
|
|
IF STEPI ! LFTPAREN OR STEPI!LOCLID OR STEPI ! RTPAREN OR 16282000
|
|
(GT1~ELBAT[I-1]).FORMAL=0 16283000
|
|
THEN ERR(256) ELSE 16284000
|
|
BEGIN 16285000
|
|
EMITC( GT1.ADDRESS,SED); 16286000
|
|
EMIT(FILETHING); FILETHING~L-1; 16287000
|
|
INFO[GT1.LINKR,GT1.LINKC].MON ~ 1; 16288000
|
|
END RELEASES; 16289000
|
|
COMMENT INDEXS COMPILE STATEMENTS BEGINING WITH SI,DI,CI,TALLY 16290000
|
|
OR LOCALIDS . 16291000
|
|
THREE CASES PRESENT THEMSELVES, 16292000
|
|
LETING X BE EITHER OF SI,DI,CI OR TALLY, THEY ARE: 16293000
|
|
CASE I LOCLID ~ X 16294000
|
|
CASE II X ~ X ... 16295000
|
|
CASE III X ~ EITHER LOC,LOCLID,SC OR DC. 16296000
|
|
THE VARIABLE "INDEX" IS COMPUTED,DEPENDING UPON WHICH 16297000
|
|
CASE EXISTS,SUCH THAT ARRAY ELEMENT "MACRO[INDEX]"CONTAINS16298000
|
|
THE CODE TO BE EMITTED. 16299000
|
|
EACH ELEMENT OF MACRO HAS 1-3 SYLLABLES ORDERED FROM 16300000
|
|
RIGHT TO LEFT, UNUSED SYLLABLES MUST = 0. EACH MACRO 16301000
|
|
MAY REQUIRE AT MOST ONE REPEAT PART. 16302000
|
|
IN THIS PROCEDURE,INDEXS,THE VARIABLE "ADDR" CONTAINS THE 16303000
|
|
PROPER REPEAT PART BY THE TIME THE LABEL "GENERATE" IS 16304000
|
|
ENCOUNTERED. THE SYLLABLES ARE FETCHED FROM MACRO[TYPE] 16305000
|
|
ONE AT A TIME AND IF THE REPEAT PART ! 0 THEN"ADDR" IS 16306000
|
|
USED AS THE REPEAT PART,THUS BUILDING A SYLLABLE WITH 16307000
|
|
THE PROPER ADDRESS AND OPERATOR . 16308000
|
|
NOTE: IF MACRO[TYPE] = 0 THEN THIS SIGNIFIES A SYNTAX 16309000
|
|
ERROR. ; 16310000
|
|
PROCEDURE INDEXS; 16311000
|
|
BEGIN 16312000
|
|
LABEL EXIT,GENERATE,L,L1; 16313000
|
|
INTEGER TCLASS,INDEX,ADDR,J; 16314000
|
|
TCLASS ~ ELCLASS ; 16315000
|
|
IF STEPI ! ASSIGNOP THEN BEGIN ERR(251); GO TO EXIT END; 16316000
|
|
IF TCLASS = LOCLID THEN 16317000
|
|
BEGIN 16318000
|
|
XMARK(ASSIGNREF); %116-16318500
|
|
IF SIV>STEPI OR ELCLASS>TALLYV THEN GO TO L; 16319000
|
|
INDEX ~ 32 + ELCLASS-SIV; 16320000
|
|
ADDR ~ ELBAT[I-2].ADDRESS; 16321000
|
|
GO TO GENERATE; 16322000
|
|
END; 16323000
|
|
IF TCLASS = STEPI THEN 16324000
|
|
BEGIN 16325000
|
|
IF STEPI!ADDOP THEN BEGIN ERR(252); GO EXIT END ELSE 16326000
|
|
IF STEPI!LITNO AND ELCLASS!LOCLID THEN 16326100
|
|
BEGIN ERR(253); GO EXIT END; 16327000
|
|
INDEX ~ TCLASS-SIV 16328000
|
|
+REAL(ELBAT[I-1].ADDRESS=SUB) | 4 16329000
|
|
+ REAL(ELCLASS =LOCLID) | 8; 16330000
|
|
END 16331000
|
|
ELSE 16332000
|
|
BEGIN 16333000
|
|
INDEX ~ TCLASS -SIV 16334000
|
|
+ ( IF ELCLASS = LOCLID THEN 16 ELSE 16335000
|
|
IF ELCLASS = LOCV THEN 20 ELSE 16336000
|
|
IF ELCLASS = SCV THEN 24 ELSE 16337000
|
|
IF ELCLASS= DCV THEN 28 ELSE 25); 16338000
|
|
IF ELCLASS = LOCV THEN 16339000
|
|
IF STEPI ! LOCLID THEN GO TO L; 16340000
|
|
IF ELCLASS = LITNO AND TCLASS = TALLYV THEN 16341000
|
|
BEGIN EMITC(ELBAT[I].ADDRESS,SEC); GO TO EXIT END; 16342000
|
|
END ; 16343000
|
|
ADDR ~ ELBAT[I].ADDRESS; 16344000
|
|
GENERATE: 16345000
|
|
IF MACRO[INDEX]= 0 THEN 16346000
|
|
L: BEGIN ERR(250);GO TO EXIT END; 16347000
|
|
J ~ 8; TCLASS ~0 ; 16348000
|
|
L1: MOVECHARACTERS(2,MACRO[INDEX],J~J-2,TCLASS,6 ); 16349000
|
|
IF TCLASS!0 THEN 16350000
|
|
BEGIN 16351000
|
|
EMITC(IF TCLASS}64 THEN ADDR ELSE 0,TCLASS); 16352000
|
|
GO TO L1 16353000
|
|
END; 16354000
|
|
EXIT:END INDEXS ; 16355000
|
|
COMMENT DSS COMPILES DESTINATION STREAM STATEMENTS. 16356000
|
|
DS~ LIT"STRING" IS HANDLED AS A SPECIAL CASE BECAUE THE 16357000
|
|
STRING MUST BE SCANED FROM RIGHT TO LEFT,REPEATEDLY IF 16358000
|
|
NECESSARY, AND EMITTED TO THE PROGRAM STREAM. IN 16359000
|
|
ALL OTHER CASES,THE ELBAT WORD CONTAINS THE OPERATOR IN 16360000
|
|
THE OPCODE FIELD ; 16361000
|
|
PROCEDURE DSS; 16362000
|
|
BEGIN 16363000
|
|
INTEGER ADDR,J,K,L,T; 16364000
|
|
LABEL EXIT,L1; 16365000
|
|
DEFINE OPCODE=[27:6]#; 16366000
|
|
IF STEPI ! ASSIGNOP THEN BEGIN ERR(251); GO TO EXIT END; 16367000
|
|
IF STEPI = LOCLID THEN 16368000
|
|
BEGIN 16369000
|
|
EMITC(ELBAT[I].ADDRESS,CRF); 16370000
|
|
ADDR~ 0; 16371000
|
|
IF STEPI = LITV THEN GO TO L1 16372000
|
|
END 16373000
|
|
ELSE IF ELCLASS= LITNO THEN 16374000
|
|
BEGIN 16375000
|
|
ADDR ~ ELBAT[I].ADDRESS; STEPIT ; 16376000
|
|
END 16377000
|
|
ELSE ADDR ~ 1 ; 16378000
|
|
IF ELCLASS = TRNSFER OR ELCLASS = FILLV THEN %A 16379000
|
|
EMITC(ADDR,ELBAT[I].OPCODE) %A 16379500
|
|
ELSE 16380000
|
|
IF ELCLASS = LITV THEN 16381000
|
|
BEGIN 16382000
|
|
EMITC(ADDR,TRP); 16383000
|
|
IF STEPI!STRING AND ELCLASS!STRNGCON AND %111-16384000
|
|
ELCLASS ! LITNO AND ELCLASS ! NONLITNO THEN %111-16384100
|
|
BEGIN ERR(255);GO TO EXIT END; 16384500
|
|
IF ELCLASS = LITNO OR ELCLASS = NONLITNO THEN %111-16384700
|
|
MOVECHARACTERS(COUNT:=IF ADDR < 8 THEN ADDR ELSE 8, 16384800
|
|
C,8-COUNT,ACCUM[1],3); %111-16384900
|
|
IF ADDR MOD 2 ! 0 THEN 16385000
|
|
BEGIN 16386000
|
|
EMIT(ACCUM[1].[18:6]); J ~ 1; 16387000
|
|
END ; 16388000
|
|
FOR K ~J+2 STEP 2 UNTIL ADDR DO 16389000
|
|
BEGIN 16390000
|
|
FOR L ~6,7 DO 16391000
|
|
MOVECHARACTERS(1,ACCUM[1],2+(IF J~J+1>COUNT THEN J~1 16392000
|
|
ELSE J),T,L ); 16393000
|
|
EMIT(T); 16394000
|
|
END END 16395000
|
|
ELSE 16396000
|
|
L1: ERR(250); 16397000
|
|
EXIT:END DSS ; 16398000
|
|
COMMENT SKIPS COMPILES THE SKIP BIT STATEMENT. 16399000
|
|
IF THE REPEAT INDEX IS A LOCALID THEN A CRF IS EMITTED. 16400000
|
|
A BSS OR BSD IS THEN EMITTED FOR SKIP SOURCE BITS (SB) 16401000
|
|
OR SKIP DESTINATION BITS (DB) RESPECTIVELY ; 16402000
|
|
PROCEDURE SKIPS ; 16403000
|
|
BEGIN 16404000
|
|
REAL ADDR; 16405000
|
|
IF STEPI = LOCLID THEN 16406000
|
|
BEGIN 16407000
|
|
EMITC(ELBAT[I].ADDRESS,CRF); ADDR~0; STEPIT; 16408000
|
|
END 16409000
|
|
ELSE IF ELCLASS = LITNO THEN 16410000
|
|
BEGIN 16411000
|
|
ADDR~ ELBAT[I].ADDRESS; STEPIT 16412000
|
|
END 16413000
|
|
ELSE ADDR ~ 1 ; 16414000
|
|
IF ELCLASS =SBV THEN EMITC(ADDR,BSS) 16415000
|
|
ELSE 16416000
|
|
IF ELCLASS =DBV THEN EMITC(ADDR,BSD) 16417000
|
|
ELSE ERR(250); 16418000
|
|
END SKIPS ; 16419000
|
|
COMMENT JUMPS COMPILES JUMP OUT AND JUMP OUT TO STATEMENTS. 16420000
|
|
JUMP OUT TO STATEMENTS CAUSE JUMP LEVEL TO BE SET TO 16421000
|
|
THE NUMBER OF LEVELS SPECIFIED. THEN THIS NUMBER OF 16422000
|
|
JNS ARE EMITTED AND GOTOS IS CALLED TO COMPILE THE 16423000
|
|
JUMP INSTRUCTION. 16424000
|
|
SIMPLE JUMP OUTS ARE HANDLED BY EMITTING ONE JNS,ENTERING 16425000
|
|
A PSEUDO STLABID IN INFO AND SETTING ELBAT[I] SUCH THAT 16426000
|
|
THE GOTOS PROCEDURE WILL PERFORM THE ACTION OF SETTING 16427000
|
|
UP THE LINKS FOR LATER FIX UPS. THE NEST STATEMENT CAUSES 16428000
|
|
THESE FIX UPS(IF EMITTING OF JUMP INSTRUCTIONS) BY CALLING16429000
|
|
GO TOS WHEN THE RIGHT PAREN IS ENCOUNTERED. ; 16430000
|
|
PROCEDURE JUMPS; 16431000
|
|
BEGIN 16432000
|
|
JUMPLEVEL~1; 16433000
|
|
IF STEPI!DECLARATORS THEN FLAG(261); 16434000
|
|
IF STEPI = LITNO THEN JUMPLEVEL~ ELBAT[I].ADDRESS 16435000
|
|
ELSE BEGIN 16436000
|
|
IF ELCLASS! TOV AND ELCLASS! STLABID THEN 16437000
|
|
BEGIN 16438000
|
|
COMMENT SIMPLE JUMP OUT STATEMENT; 16439000
|
|
IF JOINFO = 0 THEN 16440000
|
|
BEGIN 16441000
|
|
JOINFO ~ NEXTINFO ; 16442000
|
|
PUTNBUMP(0&(STLABID|2+1) 16443000
|
|
[2:40:8]&2[27:40:8 ]); 16444000
|
|
PUTNBUMP(0&(JOINFO-LASTINFO )[ 4:40:8]); 16445000
|
|
PUTNBUMP (0); 16446000
|
|
LASTINFO ~ JOINFO; 16447000
|
|
END; 16448000
|
|
ELBAT[I~ I-1]~ TAKE(JOINFO)&JOINFO[35:35:13]; 16449000
|
|
END; I~I-1 ; 16450000
|
|
END; 16451000
|
|
FOR GT1~ 1 STEP 1 UNTIL JUMPLEVEL DO 16452000
|
|
EMIT( JNS); 16453000
|
|
GOTOS; 16454000
|
|
END JUMPS; 16455000
|
|
COMMENT STREAMSTMT ENVOKES THE APPROPRIATE PROCEDURE TO HANDLE 16456000
|
|
THE VARIOUS AND SUNDRY STREAM PROCEDURE STATEMENTS. 16457000
|
|
THE STATEMENTS ARE BROKEN DOWN AS FOLLOWS: 16458000
|
|
IDENTIFIED BY PROCEDURE ENVOKED 16459000
|
|
END GO TO FINI 16460000
|
|
SEMICOLON GO TO FINI 16461000
|
|
) GO TO FINI 16462000
|
|
IF IFS 16463000
|
|
GO GOTOS 16464000
|
|
RELEASE RELEASES 16465000
|
|
BEGIN COMPOUNDTAIL 16466000
|
|
SI,DI,CI,TALLY,LOCALID INDEXS 16467000
|
|
DS DSS 16468000
|
|
SKIP SKIPS 16469000
|
|
JUMP JUMPS 16470000
|
|
LABELID LABELS 16471000
|
|
LITERAL NO.,LOCALID( NESTS 16472000
|
|
UPON EXITING,STREAMSTMT ASSURES THAT "I" POINTS TO 16473000
|
|
THE SEMICOLON ,END OR ) IN SYNTACICALLY CORRECT PROGRAMS; 16474000
|
|
LABEL L,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,EXIT,FINI,START; 16475000
|
|
SWITCH TYPE ~ FINI,L,FINI,L3,L4,L5,L6,L7,L7,L7,L7,L8,L9,L10; 16476000
|
|
START: GO TO TYPE[ ELCLASS-ENDV+1]; 16477000
|
|
IF ELCLASS= RTPAREN THEN GO TO FINI ; 16478000
|
|
IF ELCLASS = LITNO OR ELCLASS=LOCLID AND TABLE(I+1) 16479000
|
|
= LFTPAREN THEN GO TO L1; 16480000
|
|
IF ELCLASS= STLABID THEN GO TO L2 ; 16481000
|
|
IF ELCLASS= LOCLID THEN GO TO L7 ; 16482000
|
|
L: ERR( 250 ); GO TO FINI ; 16483000
|
|
L1: NESTS; GO TO EXIT; 16484000
|
|
L2: LABELS; GO TO START; 16485000
|
|
L3: IFS; GO TO FINI; 16486000
|
|
L4: GOTOS; GO TO EXIT; 16487000
|
|
L5: RELEASES; GO TO EXIT; 16488000
|
|
L6: I~I+1 ; COMPOUNDTAIL; GO TO FINI; 16489000
|
|
L7: INDEXS; GO TO EXIT; 16490000
|
|
L8: DSS; GO TO EXIT; 16491000
|
|
L9: SKIPS; GO TO EXIT; 16492000
|
|
L10: JUMPS; GO TO EXIT; 16493000
|
|
EXIT: STEPIT; 16494000
|
|
FINI: END STREAMSTMT; 16495000
|
|
16496000
|
|
TIME1 ~ TIME(1); PROGRAM; 17000000
|
|
ENDOFITALL: 17000100
|
|
IF (XREF OR DEFINING.[1:1]) AND XLUN > 0 THEN %116-17001000
|
|
BEGIN DEFINE LSS= <#,GTR=>#,NEQ = !#,LEQ={#; %DFB 17002000
|
|
DEFINE XREFINFO[INDEX] = INFO[((INDEX).CF DIV 2).[33:7], %116-17002005
|
|
((INDEX).CF DIV 2).LINKC]#, %116-17002006
|
|
CF = [33:15]#, %116-17002007
|
|
FF = [18:15]#, %116-17002008
|
|
NEWID[INDEX] = (IF BOOLEAN(INDEX) THEN XREFINFO[INDEX].FF 17002009
|
|
ELSE XREFINFO[INDEX].CF)#; %116-17002010
|
|
ARRAY TIMINGS[0:2,0:3]; %116-17002012
|
|
PROCEDURE SAVETIMES(I); %116-17002015
|
|
VALUE I; INTEGER I; %116-17002020
|
|
BEGIN %116-17002025
|
|
INTEGER J; %116-17002030
|
|
FOR J := 1 STEP 1 UNTIL 3 DO %116-17002035
|
|
TIMINGS[I,J] := TIME(J); %116-17002040
|
|
END; %116-17002045
|
|
PROCEDURE UPDATETIMES(I); %116-17002050
|
|
VALUE I; INTEGER I; %116-17002055
|
|
BEGIN %116-17002060
|
|
INTEGER J; %116-17002065
|
|
FOR J := 1 STEP 1 UNTIL 3 DO %116-17002070
|
|
TIMINGS[I,J] := TIME(J) - TIMINGS[I,J]; %116-17002075
|
|
END; %116-17002080
|
|
WRITE(LINE[PAGE]); 17002520
|
|
SAVETIMES(0); % SAVE TIMES FOR START OF IDENTIFIER SORT. %116-17002525
|
|
LASTADDRESS~0; 17002530
|
|
FOR XREFPT:=XREFPT STEP 1 UNTIL 29 DO XREFAY2[XREFPT]:=100000000; 17003000
|
|
WRITE(DSK2,30,XREFAY2[*]); %DFB17004000
|
|
TOTALNO := XLUN; % REMEMBER NUMBER OF IDENTIFIERS. %116-17004500
|
|
XREFPT~XLUN~0; %DFB17004600
|
|
FOR I:= 0 STEP 1 UNTIL 8191 DO %116-17004700
|
|
XREFINFO[I] := 0; %116-17004710
|
|
BEGIN %DFB17005000
|
|
BOOLEAN PROCEDURE INPUT1(A); %DFB17006000
|
|
ARRAY A[0]; %DFB17007000
|
|
BEGIN %DFB17008000
|
|
LABEL L,EOF; %DFB17009000
|
|
READ(DSK1,10,A[*])[EOF]; %DFB17010000
|
|
GO TO L; %DFB17011000
|
|
EOF: INPUT1:=TRUE; %DFB17012000
|
|
REWIND(DSK1); %DFB17013000
|
|
L: %DFB17014000
|
|
END; %DFB17015000
|
|
PROCEDURE OUTPUT1(B,A); %DFB17016000
|
|
VALUE B; %DFB17017000
|
|
BOOLEAN B; %DFB17018000
|
|
ARRAY A[0]; %DFB17019000
|
|
BEGIN %DFB17020000
|
|
IF B THEN %DFB17021000
|
|
BEGIN %116-17022000
|
|
REWIND(DSK1); %116-17022100
|
|
UPDATETIMES(0); % UPDATE TIMES FOR IDENTIFIER SORT. 17022200
|
|
TIMINGS[0,0] := XLUN; % NUMBER OF IDENTIFIERS SORTED. 17022300
|
|
END %116-17022400
|
|
ELSE %DFB17023000
|
|
BEGIN %DFB17024000
|
|
IF BOOLEAN(A[8]) THEN %116-17025000
|
|
XREFINFO[A[8]].FF := XLUN := XLUN + 1 %116-17025100
|
|
ELSE %116-17025200
|
|
XREFINFO[A[8]].CF := XLUN := XLUN + 1; %116-17025300
|
|
A[8].IDNOF := XLUN; %116-17025400
|
|
WRITE(DSK1,10,A[*]); %DFB17026000
|
|
END; %DFB17027000
|
|
END; %DFB17028000
|
|
BOOLEAN STREAM PROCEDURE COMPS1(A,B); %DFB17029000
|
|
BEGIN %DFB17030000
|
|
SI:=A; %DFB17031000
|
|
DI:=B; %DFB17032000
|
|
IF 63 SC < DC THEN %116-17033000
|
|
TALLY := 1 %116-17033100
|
|
ELSE %116-17033200
|
|
BEGIN %116-17033300
|
|
SI := A; %116-17033400
|
|
DI := B; %116-17033500
|
|
IF 63 SC = DC THEN %116-17033600
|
|
TALLY := 2; %116-17033700
|
|
END; %116-17033800
|
|
COMPS1:=TALLY; %DFB17034000
|
|
END; %DFB17035000
|
|
STREAM PROCEDURE HVS1(A); %DFB17036000
|
|
BEGIN %DFB17037000
|
|
DI:=A; %DFB17038000
|
|
DS:=8 LIT "9"; %DFB17039000
|
|
SI:=A; %DFB17040000
|
|
DS:= 7 WDS; %DFB17041000
|
|
DS := 8 LIT 3"777777777"; % ID,NO, AND SEG.NO. FIELDS %116-17041100
|
|
END; %DFB17042000
|
|
BOOLEAN PROCEDURE COMP1(A,B); %DFB17042100
|
|
ARRAY A,B[0]; %DFB17042200
|
|
IF REAL(COMP1:=COMPS1(A,B)) = 2 THEN % IDS EQUAL %116-17042300
|
|
COMP1 := A[8].IDNOF < B[8].IDNOF; %116-17042350
|
|
PROCEDURE HV1(A); %DFB17042400
|
|
ARRAY A[0]; %DFB17042500
|
|
HVS1(A); %DFB17042600
|
|
XLUN:=0; %DFB17043000
|
|
REWIND(DSK1); %DFB17044000
|
|
SORT(OUTPUT1,INPUT1,0,HV1,COMP1,10,IF TOTALNO < 1000 THEN %116-17045000
|
|
7000 ELSE 10000); %116-17045100
|
|
END; %DFB17046000
|
|
BEGIN %DFB17047000
|
|
ARRAY IDTYPE[0:(IDMAX+4)|4-1]; %117-17047100
|
|
STREAM PROCEDURE SETUPHEADING(S,D,SEG,SEQNO,FWDTOG,LBLTOG, %116-17047200
|
|
FWDSEQNO,TYPE,OWNTOG,PARAMTOG, %116-17047300
|
|
VALTOG); %116-17047350
|
|
VALUE SEG,SEQNO,FWDTOG,LBLTOG,FWDSEQNO,OWNTOG,PARAMTOG, %116-17047400
|
|
VALTOG; %116-17047450
|
|
BEGIN %116-17047500
|
|
SI := S; %116-17047700
|
|
DI := D; %116-17047800
|
|
63 (IF SC = " " THEN JUMP OUT ELSE DS := CHR); %116-17047900
|
|
DS := 6 LIT " -- "; %116-17048000
|
|
OWNTOG (DS := 4 LIT "OWN "); %116-17048100
|
|
SI := TYPE; %116-17049300
|
|
32 (IF SC = "." THEN JUMP OUT ELSE DS := CHR); %116-17049400
|
|
PARAMTOG (DS := 6 LIT " -- "; %116-17049410
|
|
DS := 4 LIT "NAME"; %116-17049420
|
|
VALTOG (DI := DI - 4; DS := 5 LIT "VALUE"); %116-17049430
|
|
DS := 10 LIT " PARAMETER"); %116-17049440
|
|
DS := 26 LIT " -- DECLARED IN SEGMENT "; %116-17049500
|
|
SI := LOC SEG; %116-17049600
|
|
S := DI; %116-17049700
|
|
DS := 4 DEC; DI := DI - 4; DS := 3 FILL; % CONV AND ZERO SUPPR 17049800
|
|
DI := DI + 8; % TO FORCE STORE OF LAST WORD %116-17049900
|
|
SI := S; %116-17050000
|
|
DI := S; %116-17050100
|
|
4(IF SC ! " " THEN DS:= CHR ELSE SI := SI + 1); %116-17050200
|
|
DS := 4 LIT " AT "; %116-17050300
|
|
SI := LOC SEQNO; %116-17050400
|
|
DS := 8 DEC; %116-17050500
|
|
FWDTOG (DS := 17 LIT " -- FORWARD AT "; %116-17050600
|
|
SI := LOC FWDSEQNO; %116-17050700
|
|
DS := 8 DEC); %116-17050800
|
|
LBLTOG (DS := 16 LIT " -- OCCURS AT "; %116-17050900
|
|
SI := LOC FWDSEQNO; %116-17051000
|
|
DS := 8 DEC); %116-17051100
|
|
END OF SETUPHEADING; %116-17051200
|
|
%116-17051300
|
|
STREAM PROCEDURE ADDASEQNO(SEQNO,N,STARS,D); %116-17051400
|
|
VALUE SEQNO,N,STARS; %116-17051500
|
|
BEGIN %116-17051600
|
|
DI := D; %116-17051700
|
|
DI := DI + 8; %116-17051800
|
|
N (DI := DI + 10); %116-17051900
|
|
STARS(DI := DI - 1; DS := LIT "*"); %116-17052000
|
|
SI := LOC SEQNO; %116-17052100
|
|
DS := 8 DEC; %116-17052200
|
|
DS := LIT " "; %116-17052300
|
|
STARS (DI := DI - 1; DS := LIT "*"); %116-17052400
|
|
END; %116-17052500
|
|
STREAM PROCEDURE BLANKET(D); %116-17052600
|
|
BEGIN %116-17052700
|
|
DI := D; %116-17052800
|
|
DS := 8 LIT " "; %116-17052900
|
|
SI := D; %116-17053000
|
|
DS := 16 WDS; %116-17053100
|
|
END OF BLANKET; %116-17053200
|
|
PROCEDURE PRINTXREFSTATISTICS; %116-17053300
|
|
BEGIN %116-17053400
|
|
SWITCH FORMAT STATS := %116-17053500
|
|
(///, "CROSS REFERENCE STATISTICS", /, %116-17053600
|
|
"----- --------- ----------", /), %116-17053700
|
|
("PHASE ONE - SORT",I6," IDENTIFIERS"), %116-17053800
|
|
("PHASE TWO - SORT",I7," REFERENCES"), %116-17053900
|
|
("PHASE THREE - PRINT CROSS REFERENCE (",I7," LINES)"), %116-17054000
|
|
(X5,I4,":",2I1," ELAPSED TIME (MIN:SEC)"), %116-17054100
|
|
(X5,I4,":",2I1," PROCESSOR TIME"), %116-17054200
|
|
(X5,I4,":",2I1," I/O TIME",/); %116-17054300
|
|
INTEGER I,J,K; %116-17054400
|
|
WRITE(LINE,STATS[0]); %116-17054500
|
|
FOR I := 0 STEP 1 UNTIL 2 DO %116-17054600
|
|
BEGIN %116-17054700
|
|
WRITE(LINE,STATS[I+1],TIMINGS[I,0]); %116-17054800
|
|
FOR J := 1 STEP 1 UNTIL 3 DO %116-17054900
|
|
BEGIN %116-17055000
|
|
K := (TIMINGS[I,J] + 30) DIV 60; % ROUND TO NEAREST SECON17055010
|
|
WRITE(LINE,STATS[J+3],K DIV 60,(K:=K MOD 60) DIV 10,%116-17055020
|
|
K MOD 10); %116-17055025
|
|
END; %116-17055030
|
|
END; %116-17055100
|
|
END PRINTXREFSTATISTICS; %116-17055200
|
|
DEFINE REFCOUNT = TIMINGS[1,0]#; % NUMBER OF REFERENCES SORTED.17069300
|
|
BOOLEAN FIRSTTIME; % TRUE ON FIRST CALL OF OUTPUT PROCEDURE. 17069400
|
|
ARRAY PAY[0:17]; %DFB17069500
|
|
REAL LASTADDRESS; %116-17069600
|
|
BOOLEAN PROCEDURE INPUT2(A); %DFB17070000
|
|
ARRAY A[0]; %DFB17071000
|
|
BEGIN %DFB17072000
|
|
LABEL L,EOF; %DFB17073000
|
|
DEFINE I = LASTADDRESS#; %116-17073100
|
|
IF XREFPT:=XREFPT+1=30 THEN %DFB17074000
|
|
BEGIN %DFB17075000
|
|
READ(DSK2,30,XREFAY2[*])[EOF]; %DFB17076000
|
|
XREFPT:=0; %DFB17077000
|
|
END; %DFB17078000
|
|
IF ( I :=XREFAY2[XREFPT]).[21:27] GTR 99999999 THEN GO TO EOF;17079000
|
|
A[0] := I & NEWID[I.REFIDNOF] REFIDNOF; %116-17080000
|
|
REFCOUNT := REFCOUNT + 1; %116-17080100
|
|
GO TO L; %DFB17081000
|
|
EOF: INPUT2:=TRUE; %DFB17082000
|
|
BLANKET(PAY); %DFB17083000
|
|
XREFAY1[8] := XREFPT := LASTADDRESS := 0; %116-17084000
|
|
FILL IDTYPE[*] WITH %116-17084010
|
|
"UNKNOWN. ", % 0 %116-17084020
|
|
"STREAM LABEL. ", % 1 %116-17084030
|
|
"STREAM VARIABLE. ", % 2 %116-17084040
|
|
"DEFINE. ", % 3 %116-17084050
|
|
"LIST. ", % 4 %116-17084060
|
|
"FORMAT. ", % 5 %116-17084070
|
|
"SWITCH FORMAT. ", % 6 %116-17084080
|
|
"FILE. ", % 7 %116-17084090
|
|
"SWITCH FILE. ", % 8 %116-17084100
|
|
"SWITCH LABEL. ", % 9 %116-17084110
|
|
"PROCEDURE. ", % 10 %116-17084120
|
|
"INTRINSIC. ", % 11 %116-17084130
|
|
"STREAM PROCEDURE. ", % 12 %116-17084140
|
|
"BOOLEAN STREAM PROCEDURE. ", % 13 %116-17084150
|
|
"REAL STREAM PROCEDURE. ", % 14 %116-17084160
|
|
"ALPHA STREAM PROCEDURE. ", % 15 %116-17084170
|
|
"INTEGER STREAM PROCEDURE. ", % 16 %116-17084180
|
|
"BOOLEAN PROCEDURE. ", % 17 %116-17084182
|
|
"REAL PROCEDURE. ", % 18 %116-17084184
|
|
"ALPHA PROCEDURE. ", % 19 %116-17084186
|
|
"INTEGER PROCEDURE. ", % 20 %116-17084188
|
|
"BOOLEAN. ", % 21 %116-17084190
|
|
"REAL. ", % 22 %116-17084200
|
|
"ALPHA. ", % 23 %116-17084210
|
|
"INTEGER. ", % 24 %116-17084220
|
|
"BOOLEAN ARRAY. ", % 25 %116-17084230
|
|
"REAL ARRAY. ", % 26 %116-17084240
|
|
"ALPHA ARRAY. ", % 27 %116-17084250
|
|
"INTEGER ARRAY. ", % 28 %116-17084260
|
|
"LABEL. ", % 29 %116-17084270
|
|
"FIELD. ", % 30 (CLASS = 125) %117-17084275
|
|
"FAULT. ", % 32 (CLASS = 126) %117-17084280
|
|
"SWITCH LIST. "; % 31 (CLASS = 127) %117-17084290
|
|
L: %DFB17085000
|
|
END; %DFB17086000
|
|
PROCEDURE OUTPUT2(B,A); %DFB17087000
|
|
VALUE B; %DFB17088000
|
|
BOOLEAN B; %DFB17089000
|
|
ARRAY A[0]; %DFB17090000
|
|
BEGIN DEFINE PRINTER=LINE#; %DFB17091000
|
|
LABEL EOF2, SKIP; %116-17091100
|
|
OWN BOOLEAN B2, FWDTOG, LBLTOG, WAITINGFORFWDREF; %116-17091110
|
|
DEFINE MATCH(A,B) = REAL(BOOLEAN(A) EQV BOOLEAN(B)) = %116-17091115
|
|
REAL(NOT FALSE)#; %116-17091116
|
|
REAL I; %116-17091120
|
|
DEFINE LINECOUNT = TIMINGS[2,0]#; % NUMBER OF LINES PRINTED. 17091140
|
|
OWN REAL FWDSEQNO; %116-17091150
|
|
IF FIRSTTIME THEN % PRINT HEADINGS AND SAVE TIMINGS. %116-17091155
|
|
BEGIN %116-17091160
|
|
FIRSTTIME := FALSE; %116-17091162
|
|
TIME1 := TIME(1); %116-17091165
|
|
DATIME; %116-17091170
|
|
UPDATETIMES(1); %116-17091175
|
|
SAVETIMES(2); % SAVE TIMES FOR START OF XREF PRINT. %116-17091180
|
|
END; %116-17091200
|
|
IF NOT B2 THEN %116-17091210
|
|
IF B THEN % END OF SORT - LIST OUT REST OF SEQ. NO. %116-17091300
|
|
IF XREFPT ! 0 THEN % WE GOT SOME TO LIST OUT %116-17091400
|
|
BEGIN %116-17091500
|
|
WRITE(LINE[DBL],15,PAY[*]); %116-17091510
|
|
LINECOUNT := LINECOUNT + 1; %116-17091520
|
|
END %116-17091530
|
|
ELSE % NOTHING TO LIST OUT %116-17091600
|
|
ELSE % NOT END OF SORT %116-17091700
|
|
IF NOT MATCH(LASTADDRESS,A[0]) AND A[0].REFIDNOF ! 0 AND 17091800
|
|
A[0].REFIDNOF } XREFAY1[8].IDNOF THEN %116-17091900
|
|
IF A[0].TYPEREF = FORWARDREF THEN % %116-17092000
|
|
WAITINGFORFWDREF := TRUE %116-17092100
|
|
ELSE %116-17092200
|
|
IF A[0].TYPEREF = LBLREF THEN % %116-17092300
|
|
BEGIN %116-17092400
|
|
LBLTOG := TRUE; %116-17092500
|
|
FWDSEQNO := A[0].SEQNOF; %116-17092600
|
|
END %116-17092700
|
|
ELSE %116-17092800
|
|
IF A[0].TYPEREF = DECLREF THEN %116-17092900
|
|
IF WAITINGFORFWDREF THEN % THIS MUST BE IT %116-17093000
|
|
BEGIN %116-17093100
|
|
WAITINGFORFWDREF := FALSE; %116-17093200
|
|
FWDTOG := TRUE; %116-17093300
|
|
FWDSEQNO := A[0].SEQNOF; %116-17093400
|
|
END %116-17093500
|
|
ELSE % ITS A NORMAL DECLARATION - NOT FORWARD%116-17093600
|
|
BEGIN %116-17093700
|
|
IF A[0].REFIDNOF > XREFAY1[8].IDNOF THEN %116-17093850
|
|
DO %116-17093900
|
|
READ(DSK1,10,XREFAY1[*]) [EOF2] %116-17093950
|
|
UNTIL %116-17094000
|
|
A[0].REFIDNOF { XREFAY1[8].IDNOF; %116-17094050
|
|
IF A[0]. REFIDNOF < XREFAY1[8].IDNOF THEN%116-17094100
|
|
GO TO SKIP; %116-17094150
|
|
IF XREFPT > 0 THEN % THERE IS STUFF TO PRINT 17094200
|
|
BEGIN %116-17094240
|
|
IF SINGLTOG THEN %116-17094250
|
|
WRITE(LINE,15,PAY[*]) %116-17094300
|
|
ELSE %116-17094350
|
|
WRITE(LINE[DBL],15,PAY[*]); %116-17094400
|
|
LINECOUNT := LINECOUNT + 1; %116-17094410
|
|
END %116-17094420
|
|
ELSE %116-17094450
|
|
IF NOT SINGLTOG THEN %116-17094500
|
|
WRITE(LINE); %116-17094550
|
|
XREFPT := 0; %116-17094600
|
|
BLANKET(PAY[*]); %116-17094650
|
|
SETUPHEADING(XREFAY1[*],PAY[*],XREFAY1[8]. 17094700
|
|
SEGNOF,A[0].SEQNOF,FWDTOG,LBLTOG, %116-17094800
|
|
FWDSEQNO,IDTYPE[(IF (I := %116-17094900
|
|
XREFAY1[9].CLASS) } FIELDID THEN %117-17095000
|
|
(IDMAX + I - FIELDID + 1) ELSE %117-17095100
|
|
IF I > IDMAX THEN 0 ELSE I) | 4], %116-17095200
|
|
REAL(I } BOOID AND XREFAY1[9].[9:2] = 1), 17095300
|
|
REAL((I } BOOID OR I = LOCLID) AND BOOLEAN 17095310
|
|
(XREFAY1[9].[9:1])), XREFAY1[9].[10:1]); 17095320
|
|
FWDTOG := LBLTOG := FALSE; %116-17095400
|
|
WRITE(LINE,15,PAY[*]); %116-17095500
|
|
LINECOUNT := LINECOUNT + 1; %116-17095510
|
|
BLANKET(PAY[*]); %116-17095550
|
|
END %116-17095600
|
|
ELSE % IT MUST BE A NORMAL REFERENCE %116-17095700
|
|
IF A[0].SEQNOF ! LASTADDRESS.SEQNOF THEN %116-17095750
|
|
BEGIN %116-17095800
|
|
ADDASEQNO(A[0].SEQNOF,XREFPT,A[0].[5:1], 17095900
|
|
PAY[*]); %116-17096000
|
|
IF (XREFPT := XREFPT + 1) = 11 THEN %FULL 17096100
|
|
BEGIN %116-17096200
|
|
WRITE(LINE,15,PAY[*]); %116-17096300
|
|
LINECOUNT := LINECOUNT + 1; %116-17096350
|
|
XREFPT := 0; %116-17096400
|
|
BLANKET(PAY[*]); %116-17096450
|
|
END %116-17096500
|
|
END %116-17096550
|
|
ELSE % REFERENCE TO SAME SEQ. NO. SKIP IT %116-17096575
|
|
ELSE % THIS IS A REFERENCE TO THE SAME SEQ. NO. - SKIP 17096600
|
|
ELSE % HIT END OF IDENTIFIER FILE - JUST SKIP OVER REFERENCES 17096700
|
|
EOF2: B2 := TRUE; % SO SORT CAN GO TO NORMAL EOJ %116-17096800
|
|
IF NOT B THEN SKIP: LASTADDRESS := A[0]; %116-17096850
|
|
END OF OUTPUT2; %116-17096900
|
|
PROCEDURE HV2(A); %DFB17112000
|
|
ARRAY A[0]; %DFB17113000
|
|
A[0] := 3"777777777777777"; % BIGGEST FLOATING PT. NO. %116-17114000
|
|
BOOLEAN PROCEDURE COMP2(A,B); %DFB17115000
|
|
ARRAY A,B[0]; %DFB17116000
|
|
COMP2 := IF A[0].REFIDNOF < B[0].REFIDNOF THEN % DIF IDS 17117000
|
|
TRUE %116-17117100
|
|
ELSE %116-17117200
|
|
IF A[0].REFIDNOF = B[0].REFIDNOF THEN %116-17117300
|
|
IF A[0].[1:4] LSS B[0].[1:4] THEN %116-17117400
|
|
TRUE %116-17117500
|
|
ELSE %116-17117600
|
|
IF A[0].[1:4] = B[0].[1:4] THEN %116-17117700
|
|
IF A[0].SEQNOF < B[0].SEQNOF THEN %116-17117702
|
|
TRUE %116-17117704
|
|
ELSE %116-17117706
|
|
IF A[0].SEQNOF = B[0].SEQNOF THEN%116-17117708
|
|
BOOLEAN(A[0].[5:1]) %116-17117710
|
|
ELSE %116-17117712
|
|
FALSE %116-17117714
|
|
ELSE %116-17117720
|
|
FALSE %116-17117730
|
|
ELSE %116-17117800
|
|
FALSE; %116-17117900
|
|
SAVETIMES(1); % SAVE TIMES FOR START OF REFERENCES SORT %116-17117910
|
|
FIRSTTIME := TRUE; % LET OUTPUT PROCEDURE KNOW ABOUT FIRST CAL 17117920
|
|
XREFPT:=29; REWIND(DSK2); %DFB17118000
|
|
SORT(OUTPUT2,INPUT2,0,HV2,COMP2,1,6000); %116-17119000
|
|
UPDATETIMES(2); % UPDATE TIMES FOR PRINTING CROSS REFERENCE%116-17119100
|
|
PRINTXREFSTATISTICS; %116-17119200
|
|
END; %DFB17120000
|
|
END; %DFB17121000
|
|
END OF MAIN BLOCK; 17121500
|
|
END. %DFB17122000
|
|
%NUMBER OF ERRORS DETECTED = 1. COMPILATION TIME = 532 SECONDS. 99990000
|
|
%NUMBER OF CARD-IMAGES PROCESSED = 12712. 99991000
|