1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-03 01:47:56 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

19762 lines
1.5 MiB

% G T L C O M P I L E R M A R K X I I I . 3 6 10/11/71 %T9300000000
% 00000001
% WRITTEN BY MARTIN ALEXANDER GA TECH RECC 00000002
T03 $PUSH,POP,INCLUDE,OMIT, CHANGE PRINT LINE, CHECK CONSTRUCTS. %T0300000003
T07 CHANGE HEADER AND TRAILER PRINTOUTS. %T0700000007
T11 FIX SINGLE SPACING AND DISK FILE SIZE %T1100000011
T14 PRINT ERROR MESSAGE, NOT ERROR NUMBER %T1400000014
T29 COMMUNICATE STATEMENTS %T2900000029
T60 IMPLEMENT READ [V1,V2,...VN] FOR LIST-DIRECTED PRINT-READ. %T6000000060
T89 FIX USE OF PARAMETRIC DEFINES IN STREAMS. %T8900000089
T90 CHANGE FILE REMOTE TO TYPE 19 AND FIX OTHER GTL ERRORS %T9000000090
T91 ALLOW ARRAYS TO BE USED IN BOOLEAN STRING RELATION SYNTAX %T9100000091
T92 MAKE CHANGES TO GTL TO ACCEPT MARK XI & XII ALGOL PATCHES %T9200000092
T93 BRING GTL IN ACCORDS WITH MANUAL AND ADD MARK XIII PATCHES %T9300000093
T98 LIMIT MAX NUMBER OF ERRORS %T9800000098
RESTRICTED VERSION. DATE OF LATEST MODIFICATION: %M00000100
03/23/70 %T9000000101
W27 STEPI AND STEPIT DEFINES. %W2700000127
%09000000200
%#######################################################################00001000
% 00001010
% B-5700 G T L COMPILER %T9300001020
% MARK XIII.36 %T9300001030
% OCTOBER 11, 1971 %T9300001040
% 00001050
%#######################################################################00001060
% 00001070
COMMENT#################################################################00001110
G T L ERROR MESSAGES %T9300001120
########################################################################00001130
% 00001140
ERROR NUMBER ROUTINE:ERROR MESSAGE 00002000
000 BLOCK: DECLARATION NOT FOLLOWED BY SEMICOLON. 00003000
001 BLOCK: IDENTIFIER DECLARED TWICE IN SAME BLOCK. 00004000
002 PROCEDUREDEC: SPECIFICATION PART CONTAINS 00005000
IDENTIFIER NOT APPEARING IN 00006000
FORMAL PARAMETER PART. 00007000
003 BLOCK: NON-IDENTIFIER APPEARS IN IDENTIFIER 00008000
LIST OF DECLARATION. 00009000
004 PROCEDUREDEC: STREAM PROCEDURE DECLARATION 00010000
PRECEDED BY ILLEGAL DECLARATOR. 00011000
005 PROCEDUREDEC: PROCEDURE DECLARATION PRECEDED 00012000
BY ILLEGAL DECLARATOR. 00013000
006 PROCEDUREDEC: PROCEDURE IDENTIFIER USED BEFORE 00014000
IN SAME BLOCK(NOT FORWARD). 00015000
007 PROCEDUREDEC: PROCEDURE IDENTIFIER NOT FOLLOWED 00016000
BY ( OR SEMICOLON IN PROCEDURE 00017000
DECLARATION. 00018000
008 PROCEDUREDEC: FORMAL PARAMETER LIST NOT FOLLOWED 00019000
BY ). 00020000
009 PROCEDUREDEC: FORMAL PARAMETER PART NOT FOLLOWED 00021000
BY SEMICOLON. 00022000
010 PROCEDUREDEC: VALUE PART CONTAINS IDENTIFIER 00023000
WHICH DID NOT APPEAR IN FORMAL 00024000
PARAPART. 00025000
011 PROCEDUREDEC: VALUE PART NOT ENDED BY SEMICOLON. 00026000
012 PROCEDUREDEC: MISSING OR ILLEGAL SPECIFICATION 00027000
PART. 00028000
013 PROCEDUREDEC: OWN USED IN ARRAY SPECIFICATION. 00029000
014 PROCEDUREDEC: SAVE USED IN ARRAY SPECIFICATION. 00030000
015 ARRAYDEC: ARRAY CALL-BY-VALUE NOT IMPLEMENTED. %D00030500
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. %P00058000
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,SIMPBOO, 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 LISTELEMENT 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
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
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
275 STRMSTMT: JUMP LONGER THAN 63 SYLLABLES %W1100206500
281 DBLSTMT: MISSING (. 00207000
282 DBLSTMT: TOO MANY OPERATORS. 00208000
283 DBLSTMT: TOO MANY OPERANDS. 00209000
284 DBLSTMT: MISSING , . 00210000
285 DBLSTMT: MISSING ) . 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 INDNTIFIER FOLLOWING THE WORD 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. THE THREE 00216000
LOW ORDER BITS ARE CONVERTED AND COMPILATION 00217000
CONTINUES. 00218000
304 FILLSTMT: IMPROPER ROW DESIGNATOR. 00218100
305 FILLSTMT: STRING FILL: STRING EXCEEDS 1023 CHARACTERS %M00218150
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 PARAMETER 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
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
475 FOR LISTNAME NOT FOLLOWED BY DO %W3300305006
476 LISTGEN: LISTGEN MAY NOT BE CALLED RECURSIVELY. %W3300305007
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. %B0200305095
510 FORSTLIST: FOR <LIST> DO <STATEMENT> IN PROC BODY ONLY %73 %W3300305100
600 ARRAYDEC: ARRAY SIZE TOO LARGE %T9300306000
601 FORMALARRAY: NUMBER OF DIMENSIONS EXCEEDS 7 %A00307000
602 NEWINTRINSIC: RECALL CANNOT BE USED WITHOUT %A00308000
REMEMBER AND VICE VERSA %A00309000
603 EMIT: LOCAL STRING SEGMENT TOO LARGE %A00310000
604 EMIT: INTERNAL STRING EXPRESSION JUMP TOO FAR %A00311000
605 LIT: MISSING NUMBER OR NUMBER TOO LARGE %A00312000
606 ANYWHERE: MISSING COMMA %A00313000
607 ANYWHERE: MISSING RIGHT BRACKET %A00314000
608 RPROP: MISSING RECORD TYPE %A00315000
609 CONVAL: MISSING OR ILLEGAL NUMBER %A00316000
610 ARAY: ARRAY ROW NOT ALLOWED HERE %A00317000
611 DBLPRIM: DOUBLE PRIMARY MAY NOT BEGIN WITH QUANTITY %A00318000
OF THIS TYPE %A00319000
612 REXP: ILLEGAL RECORD EXPRESSION %A00320000
613 REXP: RECORD CLASSES DO NOT AGREE %A00321000
614 FIELDINDEX: MISSING RIGHT BRACKET %A00322000
615 GENQUOTE: ILLEGAL LIST ITEM %A00323000
616 GENQUOTE: TOO MANY RIGHT PARENTHESES IN LIST %A00324000
617 CHAINOP: MISSING ~ IN ASSIGNMENT STATEMENT %A00325000
618 SYMBOLEXP: ILLEGAL SYMBOL EXPRESSION %A00326000
619 RETURN: USED OUTSIDE OF SCOPE %A00327000
620 EXIT: USED OUTSIDE OF SCOPE %A00328000
621 RECLAIM: SYMBOL REFERENCES CANNOT BE EXPLICITLY RECLAIMED %A00329000
WHEN USING AUTOMATIC STORAGE RECLAMATION %A00330000
622 RECALL-REMEMBER: ILLEGAL FILE IDENTIFIER %A00331000
623 PRINT: PRINT STRING TOO LARGE %A00332000
624 IOSTMT: ILLEGAL FILE OR PROCEDURE IDENTIFIER IN %A00333000
INPUT OR OUTPUT STATEMENT %A00334000
625 IOSTMT: ILLEGAL STRING IDENTIFIER IN %A00335000
INPUT OR OUTPUT STATEMENT %A00336000
626 NOGO: THIS DESIGNATIONAL EXPRESSION NOT PERMITTED %A00337000
WHEN USING AUTOMATIC STORAGE RECLAMATION %A00338000
627 RECORDGEN: UNDEFINED FIELD IDENTIFIER IN RECORD GENERATOR %A00339000
628 FIELDGEN: A FIELD CANNOT BE A FORMAL PARAMETER %A00340000
629 FIELDGEN: ILLEGAL FIELD DECLARATION %A00341000
630 FIELDGEN: FIELD PREVIOUSLY DECLARED IN SAME BLOCK %A00342000
631 FIELDGEN: MISSING COLON %A00343000
632 FIELDGEN: FIELD TOO SMALL FOR REFERENCE VALUE %A00344000
633 RECORDGEN: NUMBER OF RECORD CLASSES EXCEEDS 30 %A00345000
634 STRINGEN: DECLARED STRING LENGTH EXCEEDS 8184 CHARACTERS %A00346000
635 RECORDGEN: ACTUAL NUMBER OF SUBSCRIPTS OF INDEXED FIELD %A00347000
IS NOT EQUAL TO DECLARED NUMBER %A00348000
636 FIELDC: FIELD NOT CONTAINED IN GIVEN RECORD CLASS %A00349000
637 GENQUOTE: MISSING " IN QUOTED SYMBOL EXPRESSION %A00350000
638 PRINT: UNPRINTABLE EXPRESSION %A00351000
639 SYMBOLDEFINE: ILLEGAL PROPERTY LIST ELEMENT %A00351100
640 SYMBOLDEFINE: MISSING ] %A00351200
641 SYMBOLDEFINE: ATOMIC SYMBOL MUST PRECEDE PROPERTY LIST PART %A00351300
642 SYMBOLDEFINE: MISSING : %A00351400
643 LISTELEMENT: ILLEGAL LIST ELEMENT %A00351410
644 IOSTMT: MISSING INPUT STATEMENT %A00351420
645 IOSTMT: MISSING OUTPUT STATEMENT %A00351430
700 AMONG: MISSING STRING %A00352000
701 BITXP: REPEAT INDICATOR TOO LARGE IN BIT EXPRESSION %A00353000
702 BITXP: BIT1 OR BIT0 EXPECTED %A00354000
703 STRINGINT: REPEAT INDICATOR NOT PERMITTED HERE %A00355000
704 STRINGXP: STRING EXPRESSION (LENGTH) OVERFLOW %A00356000
705 STRINGXP: QUOTED STRING TOO LONG %A00357000
706 STRINGLOOP: MISSING COLON %A00358000
707 STRINGLOOP: STRING EXPRESSION TOO LARGE %A00359000
708 STRINGXP: STRING EXPRESSION CANNOT CANTAIN %A00360000
THIS TYPE QUANTITY %A00361000
709 STRINGXP: REPEAT INDICATOR TOO LARGE %A00362000
710 STRINGVAR: SUBSTRING NOT IN DESIGNATED STRING OR %A00363000
MISSING OR FORMAL STRING IDENTIFIER %A00364000
711 STRINGVAR: ARRAY ROW DESIGNATOR NOT PERMITTED HERE %A00365000
712 STRINGVAR: STRING DESIGNATOR NOT PERMITTED HERE %A00366000
713 STRINGVAR: STARTING POSITION PLUS SUBSTRING LENGTH %A00367000
EXCEEDS LENGTH OF MAIN STRING %A00368000
714 STRINGXP: MISSING RELATIONAL OPERATOR IN STRING %A00369000
COMPARISON EXPRESSION %A00370000
715 STRINGLOOP: MISSING ] %A00371000
716 STRINGXP: STRINGS ON LEFT AND RIGHT HAND SIDES OF %A00372000
RELATIONAL OPERATOR KNOWN TO BE OF UNEQUAL %A00373000
LENGTH %A00374000
717 STRINGSEC: MISSING ~ %A00375000
; %M00499000
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; 00504100
INTEGER LASTADDRESS; 00504200
INTEGER ERRORMAX; % %T9800504250
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
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
01000700
INTEGER LASTELCLASS; %SAVES ELCLASS %W4001000713
BOOLEAN CHECKTOG; 01000800
BOOLEAN GOGOGO;% TRUE FOR SPECIAL WRITES AND READS 01000810
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
BOOLEAN SEQTOG, NEWBASE; COMMENT SEQTOG INDICATES SEQUENCING IS 01000910
REQD. NEWBASE INDICATES A NEW BASENUM IS FOUND ON A NEW $ CRD;01000920
BOOLEAN LASTCRDPATCH; COMMENT NORMALLY FALSE, SET TO 01000960
TRUE WHEN THE LAST CARD FROM SYMBOLIC LIBRARY 01000970
READ IS PATCHED FROM THE CARD READER; 01000980
BOOLEAN LISTOG,PRTOG,DEBUGTOG,NEWTOG,PUNCHTOG,VOIDTAPE; 01001000
BOOLEAN SINGLTOG; 01001010
BOOLEAN NOTPNTED; 01001020
BOOLEAN REMOTERR; ARRAY BITS[0:22]; % %T1401001050
DEFINE NOHEADING=LISTOG.[46:1]# ; %%% TRUE IFF DATIME HAS NOT BEEN CALLD01001100
DEFINE XREFINFO[XREFINFO1,XREFINFO2]= 01001750
XINFO[XREFINFO1,(XREFINFO2)DIV 2]#, 01001760
XMARK= IF XREF THEN XREFAY2[XREFPT-1].[1:1]~1#; 01001770
COMMENT THESE TOGGLES SPECIFY THE ACTION REQUIRED BY A CONTROL CARD;01002000
REAL SEQERRORCOUNT ; BOOLEAN SEQERRORTOG ; % %T0301002010
BOOLEAN ARRAY OPTHOLD[0:31]; ARRAY BASHOLD,TOTHOLD,ADDHOLD[0:31]; % %T0301002020
INTEGER ZOPT; ARRAY L1N[0:9]; % %T0301002030
BOOLEAN GOTCHA,STREAMER; % %T0301002040
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
ARRAY XREFAY2[0:29],XREFAY1[0:10],XINFO[0:31,0:127]; 01007100
INTEGER XREFPT,XLUN; %DFB01007200
BOOLEAN XREF; %DFB01007500
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 CHARACTORS 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 PARAMATER 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
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 NINFOO. 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 =000#, COMMENT 000; %M01177000
STLABID =001#, COMMENT 001; %M01178000
LOCLID =002#, COMMENT 002; %M01179000
DEFINEDID =003#, COMMENT 003; %M01180000
FAULTID =004#, COMMENT 004; %M01180100
LISTID =005#, COMMENT 005; %M01181000
SUPERLISTID =006#, COMMENT 006; %M01181010
FRMTID =007#, COMMENT 007; %M01182000
SUPERFRMTID =008#, COMMENT 010; %M01183000
FILEID =009#, COMMENT 011; %M01184000
SUPERFILEID =010#, COMMENT 012; %M01185000
SWITCHID =011#, COMMENT 013; %M01186000
PROCID =012#, COMMENT 014; %M01187000
STRPROCID =013#, COMMENT 015; %M01187100
FIELDID =014#, COMMENT 016; %M01187200
STRTRNS =015#, COMMENT 017; %M01187300
DBLPLXTRNS =016#, COMMENT 020; %M01187400
SYMTRNS =017#, COMMENT 021; %M01187500
RECTRNS =018#, COMMENT 022; %M01187600
BOOTRNS =019#, COMMENT 023; %M01187700
INTRNSICPROCID =020#, COMMENT 024; %M01188000
ALFATRNS =021#, COMMENT 025; %M01189000
INTRNS =022#, COMMENT 026; %M01189100
STRINGSTRPROCID =023#, COMMENT 027; %M01189200
DBLPLXSTRPROCID =024#, COMMENT 030; %M01189300
SYMSTRPROCID =025#, COMMENT 031; %M01189400
RECSTRPROCID =026#, COMMENT 032; %M01189500
BOOSTRPROCID =027#, COMMENT 033; %M01190000
REALSTRPROCID =028#, COMMENT 034; %M01191000
ALFASTRPROCID =029#, COMMENT 035; %M01192000
INTSTRPROCID =030#, COMMENT 036; %M01193000
STRINGPROCID =031#, COMMENT 037; %M01193100
DBLPLXPROCID =032#, COMMENT 040; %M01193200
SYMPROCID =033#, COMMENT 041; %M01193300
RECPROCID =034#, COMMENT 042; %M01193400
BOOPROCID =035#, COMMENT 043; %M01194000
REALPROCID =036#, COMMENT 044; %M01195000
ALFAPROCID =037#, COMMENT 045; %M01196000
INTPROCID =038#, COMMENT 046; %M01197000
STRINGID =039#, COMMENT 047; %M01197100
DBLPLXID =040#, COMMENT 050; %M01197200
SYMID =041#, COMMENT 051; %M01197300
RECID =042#, COMMENT 052; %M01197400
BOOID =043#, COMMENT 053; %M01198000
REALID =044#, COMMENT 054; %M01199000
ALFAID =045#, COMMENT 055; %M01200000
INTID =046#, COMMENT 056; %M01201000
STRINGARRAYID =047#, COMMENT 057; %M01201100
DBLPLXARRAYID =048#, COMMENT 060; %M01201200
SYMARRAYID =049#, COMMENT 061; %M01201300
RECARRAYID =050#, COMMENT 062; %M01201400
BOOARRAYID =051#, COMMENT 063; %M01202000
REALARRAYID =052#, COMMENT 064; %M01203000
ALFAARRAYID =053#, COMMENT 065; %M01204000
INTARRAYID =054#, COMMENT 066; %M01205000
LABELID =055#, COMMENT 067; %M01206000
COMMENT CLASSES FOR PRIMARY BEGINNERS; 01207000
TRUTHV =056#, COMMENT 070; %M01208000
NONLITNO =057#, COMMENT 071; %M01209000
LITNO =058#, COMMENT 072; %M01210000
STRNGCON =059#, COMMENT 073; %M01211000
LEFTPAREN =060#, COMMENT 074; %M01212000
NILV =061#, COMMENT 075; %M01212100
QUOTEOP =062#, COMMENT 076; %M01212200
CHAINOP =063#, COMMENT 077; %M01212300
COMMENT CLASS FOR ALL DECLARATORS; 01213000
DECLARATORS =064#, COMMENT 100; %M01214000
COMMENT CLASSES FOR STATEMENT BEGINNERS; %M01215000
READV =065#, COMMENT 101; %M01216000
WRITEV =066#, COMMENT 102; %M01217000
SPACEV =067#, COMMENT 103; %M01218000
CLOSEV =068#, COMMENT 104; %M01219000
LOCKV =069#, COMMENT 105; %M01220000
REWINDV =070#, COMMENT 106; %M01221000
CASEV =071#, COMMENT 107; %M01222000
FORV =072#, COMMENT 110; %M01223000
WHILEV =073#, COMMENT 111; %M01224000
DOV =074#, COMMENT 112; %M01225000
UNTILV =075#, COMMENT 113; %M01226000
ELSEV =076#, COMMENT 114; %M01227000
ENDV =077#, COMMENT 115; %M01228000
FILLV =078#, COMMENT 116; %M01229000
SEMICOLON =079#, COMMENT 117; %M01230000
IFV =080#, COMMENT 120; %M01231000
GOV =081#, COMMENT 121; %M01232000
RELEASEV =082#, COMMENT 122; %M01233000
BEGINV =083#, COMMENT 123; %M01234000
COMMENT CLASSES FOR STREAM RESERVED WORDS; 01235000
SIV =084#, COMMENT 124; %M01236000
DIQ =085#, COMMENT 125; %M01237000
CIV =086#, COMMENT 126; %M01238000
TALLYV =087#, COMMENT 127; %M01239000
DSV =088#, COMMENT 130; %M01240000
SKIPV =089#, COMMENT 131; %M01241000
JUMPV =090#, COMMENT 132; %M01242000
DBV =091#, COMMENT 133; %M01243000
SBV =092#, COMMENT 134; %M01244000
TOGGLEV =093#, COMMENT 135; %M01245000
SCV =094#, COMMENT 136; %M01246000
LOCV =095#, COMMENT 137; %M01247000
DCV =096#, COMMENT 140; %M01248000
LOCALV =097#, COMMENT 141; %M01249000
LITV =098#, COMMENT 142; %M01250000
TRNSFER =099#, COMMENT 143; %M01251000
COMMENT CLASSES FOR VARIOUS MISCELLANEOUS QUANTITIES; 01252000
COMMENTV =100#, COMMENT 144; %M01253000
FORWARDV =101#, COMMENT 145; %M01254000
STEPV =102#, COMMENT 146; %M01255000
THENV =103#, COMMENT 147; %M01256000
TOV =104#, COMMENT 150; %M01257000
VALUEV =105#, COMMENT 151; %M01258000
WITHV =106#, COMMENT 152; %M01259000
COLON =107#, COMMENT 153; %M01260000
COMMA =108#, COMMENT 154; %M01261000
CROSSHATCH =109#, COMMENT 155; %M01262000
LFTBRKET =110#, COMMENT 156; %M01263000
PERIOD =111#, COMMENT 157; %M01264000
RTBRKET =112#, COMMENT 160; %M01265000
RTPAREN =113#, COMMENT 161; %M01266000
COMMENT CLASSES FOR OPERATORS; 01267000
NOTOP =114#, COMMENT 162; %M01268000
ASSIGNOP =115#, COMMENT 163; %M01269000
AMPERSAND =116#, COMMENT 164; %M01270000
EQVOP =117#, COMMENT 165; %M01271000
IMPOP =118#, COMMENT 166; %M01272000
OROP =119#, COMMENT 167; %M01273000
ANDOP =120#, COMMENT 170; %M01274000
RELOP =121#, COMMENT 171; %M01275000
LRELOP =122#, COMMENT 172; %M01275100
DOTOP =123#, COMMENT 173; %M01275200
ADOP =124#, COMMENT 174; %M01276000
MULOP =125#, COMMENT 175; %M01277000
FACTOP =126#, COMMENT 176; %M01278000
%M01278100
%M01278500
COMMENT SUBCLASSES FOR DECLARATORS (KEPT IN ADDRESS); 01279000
OWNV =001#, COMMENT 001; %M01280000
SAVEV =002#, COMMENT 002; %M01281000
STRINGV =003#, COMMENT 003; %M01281100
DOUBLEV =004#, COMMENT 004; %M01281200
SYMV =005#, COMMENT 005; %M01281300
RECORDV =006#, COMMENT 006; %M01281400
BOOV =007#, COMMENT 007; %M01282000
REALV =008#, COMMENT 010; %M01283000
ALFAV =009#, COMMENT 011; %M01284000
INTV =010#, COMMENT 012; %M01285000
LABELV =011#, COMMENT 013; %M01286000
DUMPV =012#, COMMENT 014; %M01287000
LISTV =013#, COMMENT 015; %M01288000
OUTV =014#, COMMENT 016; %M01289000
INV =015#, COMMENT 017; %M01290000
MONITORV =016#, COMMENT 020; %M01291000
SWITCHV =017#, COMMENT 021; %M01292000
PROCV =018#, COMMENT 022; %M01293000
ARRAYV =019#, COMMENT 023; %M01294000
FORMATV =020#, COMMENT 024; %M01295000
FILEV =021#, COMMENT 025; %M01296000
STREAMV =022#, COMMENT 026; %M01297000
COMPLEXV =023#, COMMENT 027; %M01297100
DEFINEV =024#, COMMENT 030; %M01298000
FIELDV =025#; COMMENT 031; %M01298100
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
SAVE ARRAY ACCUM[0:11]; % %M01304000
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 SUPERSTACK, 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:75]; INTEGER IZ, NXTELBT; DEFINE I=IZ#; %W2701319000
COMMENT ELBAT IS AN ARRAY HOLDING ELBAT WORDS FOR RECENTLY SCANNED 01320000
QUANTITIES. THE TABLE ROUTINE MAINTAINS THIS ARRAY. 01321000
(ELBAT IS TABLE SPELLED BACKWARDS.) THE TABLE ROUTINE 01322000
GUARANTIES THAT ELBAT ALWAYS CONTAINS THE ELBAT WORDS 01323000
FOR THE LAST 10 QUANTITIES SCANNED. NXTELBT IS AN INDEX 01324000
POINTING TO THE NEXT AVAILABLE WORD IN ELBAT. I IS AN 01325000
INDEX USED BY THE REST OF THE COMPILER TO FETCH THINGS 01326000
FROM ELBAT. I IS ALSO MAINTAINED BY THE TABLE ROUTINE; 01327000
INTEGER ELCLASS; 01328000
COMMENT ELCLASS USUALLY CONTAINS ELBAT[I].CLASS; 01329000
INTEGER FCR, NCR, LCR,TLCR,CLCR; 01330000
INTEGER MAXTLCR; 01331000
COMMENT FCR CONTAINS ABSOLUTE ADDRESS OF THE FIRST CHARACTOR OF 01332000
THE CARD IMAGE CURRENTLY BEING SCANNED, NCR THE ADDRESS 01333000
OF THE NEXT CHARACTOR TO BE SCANNED, AND LCR THE LAST 01334000
CHARACTOR (COLUMN 73). TLCR AND CLCR CONTAIN ADDRESS OF 01335000
THE LAST CHARACTER IN THE TAPE AND CARD BUFFERS. MAXTLCR 01336000
IS THE MAXIMUM OF TLCR WHEN THE INPUT IS BLOCKED; 01337000
DEFINE BUFFSIZE = 56#; 01338000
01339000
INTEGER GTIX; 01339050
ARRAY TEN[0:139]; %A01340000
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 A 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. ID BITS 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
IF LASTUSED = 1 THEN READ CARDS ONLY 01395000
IF LASTUSED = 2 THEN LAST CARD IMAGE FROM READER (MERGING)01396000
IF LASTUSED = 3 THEN LAST CARD IMAGE FROM TAPE (MERGING) 01397000
IF LASTUSED = 4 THEN READ NO CARD (FOR INITIALIZATION); 01398000
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 SLABTOG; COMMENT USED TO SUPPRESS STREAM NOPS; %W1401411600
BOOLEAN ERRORTOG; 01412000
COMMENT ERRORTOG IS TRUE IF MESSAGES ARE CURRENTLY ACCEPTABLE TO THE01413000
ERROR ROUTINES. ERRORCOUNT IS THE COUNT OF ERROR MSSGS; 01414000
BOOLEAN ENDTOG; COMMENT ENDTOG TELLS THE TABLE TO ALLOW 01415000
COMMENT TO BE PASSED BACK TO COMPOUNDTAIL; 01416000
BOOLEAN STREAMTOG; 01417000
COMMENT STREAMTOG IS TRUE IF WE ARE COMPILING STREAM STATEMENT. IT 01418000
IS USED TO CONTROL COUMPOUNDTAIL; 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 LL; DEFINE L = LL#; % %T4001428000
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 BLOCK01460000
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 TALLIED01465000
IF LEVEL = JUMPCTR; 01466000
BOOLEAN GOTOG; 01467000
COMMENT GOTOG IS SET FALSE BY GOSTMT. DEXP SETS GOTOG TRUE IF ANY01468000
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
% %A01556300
FILE IN CARD (RR1,10,RR2); %M01557000
DEFINE LINESIZE = 900 # ; % SMALLER DISK AREA %T1101558000
SAVE FILE OUT LINE DISK SERIAL [20:LINESIZE] (RR3,15,RR4,SAVE 5) ; %T1101559000
SAVE ARRAY LIN[0:20];% PRINT OUTPUT BUILT IN LIN %T1101559010
INTEGER DA; 01559020
DEFINE WRITELINE = IF SINGLTOG THEN WRITE(LINE,15,LIN[*]) ELSE 01559030
WRITE(LINE[DBL],15,LIN[*])#; 01559039
SAVE FILE OUT NEWTAPE DISK SERIAL [20:LINESIZE](RR5,RR6,RR7,SAVE 5);%T1101560000
FILE IN TAPE "0CRDIMG" (2,RR8,RR9); 01561000
SAVE FILE OUT PNCH DISK SERIAL [20:2400](2,10,RR10,SAVE 1); 01561005
FILE IN ERMDF DISK RANDOM "ALGOL ""ERRORS " (1,15,30) ; % %T1401561006
ARRAY ERARA [0:14] ; % %T1401561007
REAL PERR ; % %T1401561008
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
FILE IN CASTD DISK SERIAL "CASTD""LIBRARY" (1,BUFFSIZE); % %T0301561042
FILE IN CASTE DISK SERIAL "CASTE""LIBRARY" (1,BUFFSIZE); % %T0301561044
FILE IN CASTF DISK SERIAL "CASTF""LIBRARY" (1,BUFFSIZE); % %T0301561045
FILE IN CASTG DISK SERIAL "CASTG""LIBRARY" (1,BUFFSIZE); % %T0301561046
FILE IN CASTH DISK SERIAL "CASTH""LIBRARY" (1,BUFFSIZE); % %T0301561047
FILE IN RETNE DISK SERIAL (1,BUFFSIZE); % %T0301561048
SWITCH FILE LIBRARY ~ CASTA,CASTB,CASTC,CASTD,CASTE,CASTF,CASTG,%T0301561050
CASTH,RETNE; % %T0301561051
FILE OUT REMOTE 19 (2,9); % %T1401561055
BOOLEAN REMOTOG; 01561056
ARRAY LIBARRAY[0:24]; COMMENT LIBARRAY IS USED TO KEEP INFORMATION 01561060
AS TO LAST COMPILED LIBRARY SEQUENCE NUMBERS. 01561070
EACH ENTRY CONSISTS OF THREE WORDS CONTAINING; 01561080
FILE DSK1 DISK SERIAL[20:150](2,10,30); %DFB01561085
FILE DSK2 DISK SERIAL [20:300](2,30,30); %DFB01561087
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 LIBARRAY 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 NOPATCH ; % %T0301561212
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
DEFINE NOTAPES = 9 #;%NUMBER OF SOURCE LIBRARY TAPES %T0301561240
ARRAY DIRECTORY[0:NOTAPES|NOROWS-1,0:55]; COMMENT IS THE ACTUAL %T0301561245
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 THEN 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
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; %A 01568500
DEFINE LOGI =443#, 01569000
EXPI =440#, 01570000
XTOTHEI =480#, 01571000
GOTOSOLVER =484#, 01572000
PRINTI =477#, 01573000
MERGEI =500#, 01573100
POWERSOFTEN =792#, %T9201574000
LASTSEQUENCE = 30#, %T9301575000
LASTSEQROW =3#, %A01576000
INTERPTO =461#, 01577000
SUPERMOVER =545#, %T9201577500
CHARI =465#, 01578000
INTERPTI =469#, 01579000
SORTI =473#, 01579100
SWAPPER =768#, %T9201579200
DIALER =763#, %T9201579300
FORTRANERR = 772#, %A01579400
MATDID =776#, %A01579500
MATINV = 780#, %A01579600
MATTRN =784#, %A01579700
MATMUL =788#, %A01579800
FILATTINT =535#, %T9201579900
SORTA =793#; %T9201580000
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
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
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
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 EQIVALENCE; 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 STEPI = (ELCLASS ~ TABLE(IZ~IZ+1))#; % %60 %W2701709400
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
BEGIN % START SEGMENT HERE..... 01715001
PROCEDURE CHECKBOUNDLVL; FORWARD; % 01715010
PROCEDURE UNHOOK; FORWARD; % 01715020
PROCEDURE MAKEUPACCUM; FORWARD; % 01715030
PROCEDURE LISTPARA; FORWARD; %W3301715500
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
%T0301727000
%T0301728000
PROCEDURE SCANNER; FORWARD; 01730000
COMMENT MKABS CONVERTS A DESCRIPTOR TO AN ABSOLUTE 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
DEFINE STEPIT= ELCLASS ~ TABLE(IZ~IZ+1)#; % %W2701741000
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 SEQERR(L); BEGIN DI~L;DI~DI+3;DS~LIT"S";END; % %T0301742100
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 RUN-TIME 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); VALUE NCR; 01756000
BEGIN 01757000
LABEL L,TRANS; 01758000
LOCAL N; 01759000
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-8 . 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 GETV6ID. 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 OCTCON(F,R); VALUE F; BOOLEAN F; REAL R; BEGIN %W0301810810
COMMENT OCTCON SETS FLAG BIT ONLY IF CALLED FROM FILLSTMT(I.E. IF %W0301810820
F IS FALSE); %W0301810830
BOOLEAN STREAM PROCEDURE OC(AC,C1,C2,B,F,R); VALUE C1,C2,B,F; %W0301810840
BEGIN %W0301810850
SI ~ AC; SI ~ SI+C1; DI ~ R; SKIP B DB; %W0301810860
C2(IF SC>"7"THEN TALLY~1; IF SC<"0"THEN TALLY~1;SKIP 3SB; %W0301810870
3(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB)); %W0301810880
DI ~ R; DS ~ F RESET; OC ~ TALLY %W0301810890
END OC; %W0301810900
INTEGER C1,C2; %W0301810910
IF COUNT>16 THEN BEGIN C1 ~ COUNT-13; C2 ~ 16 END %W0301810920
ELSE BEGIN C1 ~ 3; C2 ~ COUNT END; %W0301810930
R ~ 0; %W0301810940
IF OC(ACCUM[1],C1,C2,48-3|C2,F,R) THEN FLAG( 303) %W0301810950
END OCTCON; %W0301810960
PROCEDURE DATIME; 01820000
BEGIN 01821000
INTEGER H,MIN,Q; 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
WRITE(LINE[DBL], 01829000
<X16,"RECC B-5700 GEORGIA TECH LANGUAGE COMPILER MARK ", %T9301830000
"XIII.36" %T9301831000
," ",A6,"DAY, ",O,", ",I2,":",A2,X1,A1,"M."//>, 01832000
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 "P" ELSE "A"); 01835000
NOHEADING:=FALSE; 01836000
WRITE (LINE,<" *** ** **"X80" **** ******** * ****:* * ***"/ % %T0701837000
" E B L "X80" L N S N S A S S S "/ % %T0701838320
" R E E "X80" I U E U O D Y E E "/ % %T0701838330
" R G V "X80" N M Q M U D L Q G "/ % %T0701838340
" O I E "X80" E B U B R R L M "/ % %T0701838350
" R N L "X80" * E E E C E A E E "/ % %T0701838360
" S S * "X80" * R N R E S B R N "/ % %T0701838370
" * * * "X80" * * C * * S L R T "/ % %T0701838380
" * * * "X80" * * E * * * E * * "/ % %T0701838390
" *** ** **"X80" **** ******** * ****:* * ***">); END;%T0701838400
DEFINE DOT = BEGIN IF ELCLASS=PERIOD THEN DOTIT END#; %D01841000
% %A01842000
% %A01842100
COMMENT THE FOLLOWING DECLARATIONS ARE FOR GTL; %A01842200
REAL ARRAY %A01842300
DAC[0:22], % USED FOR REMOTE TERMINAL FILE INFO %T9001842350
DPI[0:107], % USED FOR OBJECT PROGRAM PRT ASSIGNMENTS %A01842400
% - SEE GNATA GNATP, AND GNATI %A01842500
FRD[0:31], % CONTAINS PRT AND STACK ADDRESS FOR %A01842600
%TEMPORARY FOR AND STRING PARAMETERS - SEE FORAD %A01842700
EDC[0:3,0:127], % TEMPORARY CODE ARRAY FOR STRING STUFF %A01842800
LNK[0:7,0:512], % CONTAINS COMPILE TIME SYMBOL CONSTANTS %A01842900
RECARRAY[30:60], % CONTAINS ADDITIONAL INFORMATION ABOUT %A01843000
% RECORD TYPES %A01843100
SYMSTACK[0:124]; % STACKHEAD FOR COMPILE TIME %A01843200
% SYMBOL CONSTANTS %A01843300
REAL %A01843500
INOUTUSED, %A01843550
DACP, % DATA-COMM POINTERS %A01843560
FORLEVEL, %A01843600
GPBV, %A01843650
JMPCH, %A01843700
LC, %A01843800
RECORDLINK, %A01843900
RECTYPE, %A01844000
RETLIST; %T9201844050
PROCEDURE PERMLINE(B); VALUE B; BOOLEAN B; 01844100
BEGIN 01844110
INTEGER LT; % %T1101844115
NOTPNTED ~ FALSE; 01844120
IF LT:=LINE.TYPE=10 OR LT=12 OR LT=13 % %T1101844130
THEN BEGIN 01844140
IF LT ! 12 THEN LINE.TYPE := 12; % %T1101844145
WRITE(LINE); LOCK(LINE); 01844150
LINE.AREAS ~ 0; LINE.AREASIZE ~ 0; 01844160
END; 01844170
IF B THEN DATIME; 01844180
END PERMLINE ; 01844190
REAL %T9201844195
SAVEQ, %A01844200
SFPL, % %A01844210
SFTRC, % SYMBOL FORMAT TRACE TOG %A01844220
HOLDFR, %A01844250
XITLIST; %A01844300
INTEGER %A01844400
DP, %A01844700
DL, %A01844800
DR, %A01844900
LFINAL, %A01845000
LNKNDX, %A01845100
MOREWORDS, %A01845200
NEWPART, %A01845300
STK, %A01845400
STRINGMAX, %A01845500
SYMFORM, %A01845600
SYMLOC, %A01845700
TABLEMARKV, %A01845800
SP, %A01845810
SL, %A01845820
WTYPE; %A01845900
BOOLEAN %A01846000
SPT, %A01846100
SLT, %A01846200
DPT, %A01846300
DLT, %A01846350
DRT, %A01846400
INTDEBUGTOG, %IF TRUE THEN DEBUGN ON GTL INTRINSICS %T9001846450
MARKSYM, %A01846500
PRINTOG, %A01846600
PRINFORM, %A01846650
QUOTETOG, %A01846700
RECLAIMTOG, %A01846800
SMT, %A01846900
SOPG, %A01847000
SYMFORMAT, %A01847050
SYMQUOTE, %A01847100
SYMSTK, % SYMBOL PLEX OPTION FLAG %A01847150
SYMSEC; %A01847200
% %A01847300
COMMENT ADDITIONAL INFORMATION FOR RECORD DECLARATORS: %A01847400
1ST WORD: [40:8] = NUMBER OF FIELDS %A01847500
OTHERS: [35:13] = LINK TO FIELDID, %A01847600
IN RECARRAY[R], WHERE R IS THE RECORD TYPE NUMBER,: %A01847700
[35:13] = LINK TO RECORD, %A01847800
[24:11] = ADDRESS OF ARRAY, %A01847900
[13:11] = ADDRESS OF FREELIST (COL, ROW), %A01848000
[10:3] = LENGTH OF RECORD (AS POWER OF 2), %A01848100
[3:7] = LENGTH OF RECORD; %A01848200
COMMENT ADDITIONAL WORDS IN INFO FOR FIELD IDENTIFIER: %A01848300
[1:1] = ON IF INDEXED, %A01848400
[8:7] = STARTING WORD, %A01848500
[15:7] = ENDING WORD, %A01848600
[22:13] = STARTING POSITION, %A01848700
[35:13] = NO OF POSITIONS; %A01848800
COMMENT SUBCLASS FOR RECID IN (18+COUNT)DIV 8,WHERE %A01848900
COUNT IS NO OF CHARACTERS IN IDENTIFIER %A01849000
[2:7] = ID NUMBER IF ID FIELD %A01849100
[1:1] = IF USED AS ID FIELD; %A01849200
COMMENT ADDITIONAL STRING INFO - IF NOT FORMAL: %A01849300
STRINGID: IF [1:1] =1 THEN SUBSTRING - %A01849400
[35:13]= LINK TO MAIN STRING, %A01849500
[22:13]= STARTING POSITION, %A01849600
[9:13] = STRING LENGTH IN CHAR, %A01849700
ELSE [35:13] = LENGTH %A01849800
STRING ARRAY: [35:13] = LENGTH AT %A01849900
INDEX + INCR + DIMENSION +1; %A01850000
% %A01850100
% %A01850200
DEFINE %A01850300
TRS = 63#, %A01850400
TRP = 60#, %A01850500
TRW = 05#, %A01850600
TGR = 23#, %A01850700
TEG = 22#, %A01850800
TEQ = 20#, %A01850900
TEL = 28#, %A01851000
TLS = 29#, %A01851100
TNE = 21#, %A01851200
TAN = 30#, %A01851300
BIT = 31#, %A01851400
TIB = BIT#, %A01851450
CGR = 51#, %A01851500
CEG = 50#, %A01851600
CEQ = 48#, %A01851700
CEL = 56#, %A01851800
CLS = 57#, %A01851900
CNE = 49#, %A01852000
JFW = 39#, %A01852100
JFC = 37#, %A01852200
BNS = 42#, %A01852300
ENS = 41#, %A01852400
JNS = 38#, %A01852500
JNC = 36#, %A01852600
SFS = 25#, %A01852700
SRS = 24#, %A01852800
SFD = 14#, %A01852900
SRD = 15#, %A01853000
BSD = 02#, %A01853100
BSS = 03#, %A01853200
SSA = 13#, %A01853300
SDA = 12#, %A01853400
SCA = 44#, %A01853500
RSA = 43#, %A01853600
RDA = 04#, %A01853700
RCA = 40#, %A01853800
SES = 18#, %A01853900
SED = 06#, %A01854000
TSA = 46#, %A01854100
TDA = 07#, %A01854200
FAD = 59#, %A01854300
FSV = 58#, %A01854400
ICV = 55#, %A01854500
OCV = 54#, %A01854600
SEC = 34#, %A01854700
INC = 32#, %A01854800
STC = 33#, %A01854900
BIR = 53#, %A01855000
BIS = 52#, %A01855100
CRF = 35#; %A01855200
DEFINE %A01855300
DATAN = GNATP( 0)#, %A01855400
DCOS = GNATP( 1)#, %A01855500
DXP = GNATP( 2)#, %A01855600
DLOG = GNATP( 3)#, %A01855700
DSIN = GNATP( 4)#, %A01855800
DSQRT = GNATP( 5)#, %A01855900
DLG10 = GNATP( 6)#, %A01856000
DATN2 = GNATP( 7)#, %A01856100
CABS = GNATP( 8)#, %A01856200
CCOS = GNATP( 9)#, %A01856300
CEXP = GNATP(10)#, %A01856400
CLOG = GNATP(11)#, %A01856500
CSIN = GNATP(12)#, %A01856600
CSQRT = GNATP(13)#, %A01856700
DMOD = GNATP(14)#; %A01856800
DEFINE NEWLINK = LNK[(LNKNDX~LNKNDX+1).[33:6],LNKNDX.[39:9]]#; %A01856900
DEFINE FRLEVEL = FORLEVEL+REAL(MARKSYM)#; %A01857000
DEFINE NEWFLD = [2:2]#; %A01857100
DEFINE DTV = 128#, %A01857200
TS = [41:2]#, %A01857300
NS = [43:2]#; %A01857400
% %A01857500
% %A01857600
DEFINE FCE = 61#, FCL = 57#, CBD = 3#, %A01857700
CBN = 1#, CFD = 2#, CFN = 0#; %A01857800
DEFINE %A01857900
SEXPN = SDNORM(SEXP)#, %A01857950
TEMP1 = TEMP(1)#, %A01858000
TEMP2 = TEMP(2)#, %A01858100
ECM = 584#, %A01858200
CTF = 965#, %A01858300
CTC = 709#, %A01858400
FTF = 453#, %A01858500
ML2 = 065#, %A01858600
AD2 = 017#, %A01858700
SB2 = 049#, %A01858800
DV2 = 129#, %A01858900
MOP = 259#, %A01859000
TOP = 262#, %A01859100
TIMEI = 455#, %A01859200
STKC = STK ~ STK + 1#, %A01859300
DCRFR = FORLEVEL ~ FORLEVEL -1 - REAL(RECLAIMTOG)#, %A01859400
TABR = CP#, %A01859500
COLR = CPI#, %A01859600
SINI = 449#, %A01859700
COSI = 433#; %A01859800
DEFINE %A01859900
PRTFL = 147#, %A01860000
ST1 = 148#, %A01860100
ST2 = 149#, %A01860200
ST3 = 150#, %A01860300
TMP = 141#, %A01860400
LNKA = GNATA(0)#, %A01860500
PTABLE = GNATA(1)#, %A01860600
SYMSTACKA = GNATA(1)#, %A01860700
INSTR = GNATA(2)#, %A01860800
OUTSTR = GNATA(3)#, %A01860900
TABLEMARK = GNATA(4)#, %A01861000
RND = GNATA(5)#, %A01861100
ADDPROPA = GNATI( 0)#, %A01861200
ALFPRINT = GNATI( 1)#, %A01861300
APPEND = GNATI( 2)#, %A01861400
ARITHPRINT = GNATI( 3)#, %A01861500
ATCON = GNATI( 4)#, %A01861600
ATN = GNATI( 5)#, %A01861700
ATSTRV = GNATI( 6)#, %A01861800
BOOPRINT = GNATI( 7)#, %A01861900
CHARPRINT = GNATI( 8)#, %A01862000
COLLECT = GNATI( 9)#, %A01862100
DBLFACT = GNATI(10)#, %A01862200
DBLPLXFACT = GNATI(11)#, %A01862300
DBLPLXPRINT = GNATI(12)#, %A01862400
DBLPRINT = GNATI(13)#, %A01862500
ERRPRO = GNATI(14)#, %A01862600
GENLINK = GNATI(15)#, %A01862700
GENSYM = GNATI(16)#, %A01862800
LENGTHV = GNATI(17)#, %A01862900
MRK = GNATI(18)#, %A01863000
MARKD = GNATI(19)#, %A01863100
MARKER = GNATI(20)#, %A01863200
MARKOB = GNATI(21)#, %A01863300
MEMBER = GNATI(22)#, %A01863400
MKATM = GNATI(23)#, %A01863500
MONPRO = GNATI(24)#, %A01863600
MONSYM = GNATI(25)#, %A01863700
NCONC = GNATI(26)#, %A01863800
NTA = GNATI(27)#, %A01863900
NTSER = GNATI(28)#, %A01864000
PLXFACT = GNATI(29)#, %A01864100
PLXPRINT = GNATI(30)#, %A01864200
PROPA = GNATI(31)#, %A01864300
RANDNO = GNATI(32)#, %A01864400
RANDOM = GNATI(33)#, %A01864500
READER = GNATI(34)#, %A01864600
READ1 = GNATI(35)#, %A01864700
READCON = GNATI(36)#, %A01864800
READN = GNATI(37)#, %A01864900
READSYM = GNATI(38)#, %A01865000
RECALL = GNATI(39)#, %A01865100
TWXLOOP = GNATI(40)#, %A01865200
RECLINK = GNATI(41)#, %A01865300
REMEMBER = GNATI(42)#, %A01865400
REMOB = GNATI(43)#, %A01865500
REMPROPER = GNATI(44)#, %A01865600
RITELINE = GNATI(45)#, %A01865700
SCANR = GNATI(46)#, %A01865800
SPACEPRINT = GNATI(47)#, %A01865900
STRINGPRINT = GNATI(48)#, %A01866000
SYMEQ = GNATI(49)#, %A01866100
SYMEQA = GNATI(50)#, %A01866200
SYMFIX = GNATI(51)#, %A01866300
SYMPRINT = GNATI(52)#, %A01866400
TERPRIN = GNATI(53)#, %A01866500
DACOMI = DPI[104]#, %A01866600
DACOMO = DPI[105]#, %A01866610
ARSTV = DPI[106]~104#, %A01866620
FORTERR = DPI[107] ~ 24#, %A01866630
POWERSOFTENI = 105#, %A01866700
SNGLSIG = 106#, %A01866800
DBLSIG = 107#, %A01866900
WSIGN = 108#, %A01867000
FREEN = 109#, %A01867100
FREENL = 110#, %A01867200
FREETIME = 111#, %A01867300
FREELIST = 112#, %A01867400
LNKCOL = 113#, %A01867500
LNKROW = 114#, %A01867600
CP = 115#, %A01867700
CPI = 116#, %A01867800
LMARG = 117#, %A01867900
LMARGI = 118#, %A01868000
RMARG = 119#, %A01868100
RMARGI = 120#, %A01868200
OUTOG = 121#, %A01868300
INITI = 122#, %A01868400
LGO = 123#, %A01868500
LGI = 124#, %A01868600
PROTOG = 125#, %A01868700
PROI = 126#, %A01868800
NSTR = 127#, %A01868900
COUNTI = 128#, %A01869000
FILPRO = 129#, %A01869100
FILPROI = 130#, %A01869200
STRP = 131#, %A01869300
STRI = 132#, %A01869400
GENOK = 133#, %A01869500
GENU = 134#, %A01869600
CPM = 135#, %A01869700
GENNO = 136#, %A01869800
COLSET = 142#, %A01869850
INSYM = 137#, %A01869900
INDBL = 138#, %A01870000
INREAL = 139#; %A01870100
DEFINE RTPARN = IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104)#; %A01870200
% %A01870300
DEFINE TPR = TRP#; %A01870400
% %A01870500
STREAM PROCEDURE CHAINFORM(A,B); %A01870600
BEGIN %A01870700
LOCAL T,R; LABEL OTHERS; %A01870800
SI ~ A; SI ~ SI + 2; DI ~ LOC T; DI ~ DI + 7; DS ~ CHR; %A01870900
IF SC ! "C" THEN GO TO OTHERS; SI ~ SI + T; SI ~ SI - 1; %A01871000
IF SC ! "R" THEN GO TO OTHERS; TALLY ~ T; %A01871100
2(TALLY ~ TALLY + 63); T ~ TALLY; DI ~ LOC R; DI ~ DI + 6; %A01871200
SI ~ SI - T; %A01871300
T(IF SC = "D" THEN SKIP 2 DB ELSE %A01871400
IF SC = "A" THEN BEGIN SKIP DB; DS ~ SET END ELSE %A01871500
IF SC = "T" THEN BEGIN DS ~ SET; SKIP DB END ELSE %A01871600
JUMP OUT TO OTHERS; SI ~ SI + 1); %A01871700
DI ~ B; SKIP 3 DB; DS ~ 6 SET; %A01871800
SI ~ LOC R; SI ~ SI + 6; DS ~ 2 SET; %A01871900
2(T(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB)); %A01872000
DS ~ 2 SET; %A01872100
OTHERS: END OF CHAINFORM; %A01872200
% %A01872300
% %A01872400
% %A01872500
% FIX RECORD CODE %A01872600
% 0 READ & SET POINTER PLUS %A01872700
% 1 READ & SET POINTER MINUS %A01872800
% 2 GENERATE RECORD %A01872900
% 4 RECLAIM RECORD %A01873000
% 5 WRITE IF NEGATIVE %A01873100
COMMENT RECARRAY[R] %A01873200
[35:13] = LINK TO RECORD %A01873300
[22:13] = LINK TO FILE %A01873400
[11:11] = ADDRESS OF ROW POINTER,(BUFF1 ADR,BUFF2 ADR) %A01873500
[6 : 5] = NO OF STARTING ROW %A01873600
[1 : 1] = 1 IF FIELDS NO CHECKED ; %A01873700
% ADDL INFO FOR RECORD DISK FILES %A01873800
% [37:11] = ADR OF ARRAY %A01873900
% [26:11] = ADR OF FREELIST,NXT AVL REC %A01874000
% [16:10] = BUFFER SIZE %A01874100
% [7 : 9] = NO OF INFO WORDS IN FILE %A01874200
% [2 : 5] = NO OF RECORD CLASSES %A01874300
% [1 : 1] = 1 IF ARRAY DECLARED %A01874400
% EL+1: [2:2]= 1 IF LOCAL %A01874500
% 2 IF NEW %A01874600
% 3 IF OLD %A01874700
% INFO IN DAC %A01874800
% 0 READ TO CLEAR TOG %A01874900
% 1 REMOTE IN TOG %A01875000
% 2 TOGGLE SET BY READ-CLEARED BY WRITE-SUPPRESS EXTRA LF %T9001875100
% 3 OWN J %A01875200
% 4 OWN K %A01875300
% 5 MAIN IN-STRING ADR %A01875400
% 6 MAIN STRING LENGTH - EQUAL TO FILE LENGTH %T9001875500
% 7 IN-FILE ADR %A01875600
% 8 REMOTE OUT-TOG %A01875700
% 9 AUX OUT-ARRAY ADR %A01875800
% 10 STATEWORD ADR %A01875900
% 11 BRKTOG ADR %A01876000
% 12 IMPTOG ADR %A01876100
% 13 OUT FILE ADR - SAME AS IN-FILE ADR %T9001876200
% 14 MAIN OUT-STRING ADR %A01876300
% 15 RMARG - LENGTH OF OUT STRING EQUALS FILE LENGTH %T9001876400
% 16 READ WAIT TIME IF ! 0 %A01876500
% 17 REMOTE NO INPUT LABEL IF ! 0 %A01876600
% 18 REMOTE ABNORMAL CONDITIONN LABLE IF ! 0 %A01876700
% 19 REMOTE INPUT EOF IF ! 0 %T9001876730
% 20 REMOTE INPUT PARITY IF ! 0 %T9001876760
% 21 REMOTE INPUT BUFFER OVERFLOW IF ! 0 %T9001876790
% %A01876800
% 22 RETURN END OF FILE TOG - IF FALSE THEN RETURN END OF FILE%T9001876900
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; 02001360
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 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
02001750
02001760
02001763
02001765
02001770
02001780
02001790
02001800
02001810
02001820
02001825
02001826
02001827
02001828
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 ZOT INSERTS THE CHARACTOR CHAR INTO THE POSITION GIVEN BY 02002000
LCR. IT RETURNS THE CHARACTOR PREVIOUSLY IN LCR THROUGH 02003000
RET. THE PRIMARY PURPOSE OF THE ROUTINE IS TO INSERT A 02004000
PERCENT SIGN IN COLUMN 73 AS AN END OF CARD SENTINEL FOR 02005000
THE SCANNER AND TO REMEMBER THE PREVIOUS CHARACTOR IN CASE02006000
IT IS NEEDED BY THE ERROR ROUTINES; 02007000
STREAM PROCEDURE ZOT(RET,CHAR,LCR); VALUE CHAR,LCR; 02008000
BEGIN DI ~ RET; SI ~ LCR; DS ~ WDS; 02009000
COMMENT BRING OUT THE CHARACTOR IN COLUMN 73; 02010000
DI~LCR; SI~LOC LCR; SI~SI-1; DS~CHR; 02011000
COMMENT CHANGE CHARACTOR IN COLUMN 73 TO CHAR; 02012000
END ZOT; 02013000
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 LIBRAY CALL IF TRUE, ELSE WE ARE EXITING.; 02013160
PROCEDURE SEARCHLIB(DOLLAR); 02013165
VALUE DOLLAR; BOOLEAN DOLLAR; 02013170
BEGIN 02013175
REAL R1 ; % %3002013176
LABEL EXIT,EXITOUT, NOPARTIAL; 02013180
BOOLEAN TEMPLISTOG; 02013183
NOPATCH ~ REAL (DOLLAR) = 5; % %T0302013184
IF DOLLAR THEN 02013185
BEGIN COMMENT WE ARE ON A DOUBLE DOLLAR CARD; 02013190
IF NOT NOPATCH THEN BEGIN % %T0302013193
IF REAL(DOLLAR) = 3 THEN BEGIN % %T0302013194
RESULT~COUNT~ACCUM[1] ~0; SCANNER; 02013195
END; % %T0302013196
RESULT~COUNT~ACCUM[1] ~0; SCANNER; 02013200
END; % %T0302013201
FILEINX~IF NOPATCH THEN NOTAPES-1 ELSE ACCUM[1].[18:6]; % %T0302013203
IF IF NOPATCH THEN FALSE ELSE % %T0302013205
FILEINX ~ FILEINX - 17 < 0 OR FILEINX>NOTAPES-2 THEN BEGIN %T0302013210
COMMENT ERROR 500 - ILLEGAL LIBRARY NAME; 02013219
TEMPLISTOG~LISTOG; LISTOG~FALSE; Q~ACCUM[1]; 02013220
FLAG(500); LISTOG~TEMPLISTOG; GO TO EXIT; 02013222
END; 02013225
% %T0302013230
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 PROG.ID.; 02013290
IF LOOK(ACCUM[1],DIRECTORY,3|FILEINX, GT1,GT2) THEN 02013295
BEGIN COMMENT ERROR 501 - ITEM NOT IN DIRECTORY; 02013300
TEMPLISTOG~LISTOG; LISTOG~FALSE; Q~ACCUM[1]; 02013303
FLAG(501); LISTOG~TEMPLISTOG; GO TO EXIT; 02013305
END; 02013310
WHILE LCR.[33:15] - NCR.[33:15] ! 1 OR NCR.[30:3] ! 7 02013313
DO BEGIN 02013315
RESULT ~ 5; SCANNER; % %T0302013316
% %T0302013317
IF NOT NOPATCH THEN NOPATCH ~ EXAMIN(NCR) = "N"; % %T0302013318
END; 02013319
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
MOVE(1,INFO[LASTSEQROW,LASTSEQUENCE],LIBARRAY[LIBINDEX+1]); 02013520
IF NOPATCH THEN SEQSUM ~ 0 ELSE % %T0302013522
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 LASTUSED~5; 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 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 NCR~MKABS(CARD(0)) ELSE 02013617
NCR ~ LIBARRAY[LIBINDEX+2].NCRLINK; 02013620
IF LASTUSED{2 OR LASTUSED=5 THEN LCR~MKABS(CARD(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
ZOT(GT1, "%", LCR); 02013716
END; 02013717
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
DEFINE WRITNEW(WRITNEW1,WRITNEW2)=WRITENEW(WRITNEW1,WRITNEW2,NEWTOG)%T1102015500
#; % %T1102015600
BOOLEAN STREAM PROCEDURE WRITENEW(NEW,FCR,N);VALUE FCR,N; % %T1102016000
BEGIN SI ~ FCR; IF SC ! "$" THEN TALLY ~ 1 ELSE BEGIN % %T0302017000
L: SI ~ SI + 1; IF SC = " " THEN GO TO L; % %T0302017100
IF SC = "I" THEN TALLY ~ 1 ELSE % %T0302017200
IF SC = "O" THEN TALLY ~ 1 ELSE % %T0302017300
IF SC = "S" THEN TALLY ~ 1 ELSE % %T0302017400
IF SC = "G" THEN TALLY ~ 1 ELSE % %T0302017500
IF SC = "P" THEN TALLY ~ 1 ELSE % %T0302017600
IF SC = "E" THEN TALLY ~ 1 ELSE % %T0302017700
% OTHER OPTIONS GO HERE %T0302017880
; SI ~ FCR; % %T0302017890
END; % %T0302017900
N(DI~NEW; DS~10WDS; SI~SI-8; %T1102018000
7(IF SC!"9" THEN JUMP OUT ELSE SI~SI+1); %T1102019000
IF SC="9"THEN TALLY~0);WRITENEW~TALLY; END; % WRITENEW%T1102020000
DEFINE PRINT(PRINT1,PRINT2,PRINT3,PRINT4) = % %T0302021000
PRINTLINE (ERRORCOUNT,BEGINCTR,LEVEL,LINENUMBER,L.[46:2],SGNO, % %T0302021500
PRINT1,PRINT2,PRINT4,L.[36:10])#; % %T0302022000
INTEGER LINENUMBER; BOOLEAN USELINO; % %T0302022500
STREAM PROCEDURE PRINTLINE (E,B,L,C,S,G, % %T0302023000
LINE,NCR,SYMBOL,R); % %T0302023500
VALUE E,B,L,C,S,G, % %T0302024000
NCR,SYMBOL,R ; % %T0302024500
BEGIN LOCAL Z; % %T0302025000
SI ~ LINE; DI ~ LINE; DS ~ 8 LIT " "; DS ~ 14 WDS; % %T0302025500
DI ~ LINE; SI ~ LOC E; % %T0302026000
DS ~ 4 DEC; Z ~ DI; DI ~ DI - 4; DS ~ 4 FILL; DI ~ Z; %%T0302026500
DS ~ 3 DEC; Z ~ DI; DI ~ DI - 3; DS ~ 3 FILL; DI ~ Z; %%T0302027000
DS ~ 3 DEC; Z ~ DI; DI ~ DI - 3; DS ~ 3 FILL; DI ~ Z; %%T0302027500
DI ~ DI + 5; % %T0302028000
DS ~ LIT "*";SI ~ NCR; DS ~ 9 WDS; DS ~ LIT "*"; DI ~ DI + 1; % %T0302028500
NCR ~ SI; SI ~ LOC C; % %T0302028700
DS ~ 5 DEC; Z ~ DI; DI ~ DI - 5; DS ~ 5 FILL; DI ~ Z; %%T0302028800
SI ~ NCR; DI ~ DI + 1; DS ~ WDS; % %T0302028900
DI ~ DI + 1; SI ~ LOC SYMBOL; SI ~ SI + 7; DS ~ CHR; % %T0302029000
DI ~ DI + 2; DS ~ 4 DEC; SI ~ LOC S; SI ~ SI + 7; % %T0302029500
DS ~ LIT ":"; DS ~ CHR; Z ~ DI; DI ~ DI - 6; DS ~ 6 FILL; DI ~ Z; %%T0302030000
DI ~ DI + 2; DS ~ 4 DEC; Z ~ DI; DI ~ DI - 4; DS ~ 4 FILL; DI ~ Z; %%T0302030100
END; % PRINTLINE %T0302030200
% %T0302030300
% %T0302030400
% %T0302031000
COMMENT COMPARE COMPARES SEQUENCE NUMBERS OF TAPE AND CARD. IF 02032000
TAPE IS SMALLER THEN RESULT = 0 ELSE IF CARD IS SMALLER 02033000
RESULT = 1 ELSE RESULT = 2; 02034000
REAL STREAM PROCEDURE COMPARE(TAPE,CARD); VALUE TAPE,CARD; 02035000
BEGIN SI ~ TAPE; DI ~ CARD; 02036000
IF 8 SC } DC THEN 02037000
BEGIN SI ~ SI-8; DI ~ DI-8; TALLY ~ 1; 02038000
IF 8 SC = DC THEN TALLY ~ 2 END; 02039000
COMPARE ~ TALLY END COMPARE; 02040000
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 CHARACTORS LOCATED AT A AND B FOR 02061000
EQUALITY. THIS ROUTINE IS USED IN THE LOOK-UP OF ALPHA 02062000
QUANTITIES IN THE DIRECTORY; 02063000
BOOLEAN STREAM PROCEDURE EQUAL(COUNT,A,B); VALUE COUNT; 02064000
BEGIN TALLY ~ 1; SI~A; DI~B; 02065000
IF COUNT SC = DC THEN EQUAL ~ TALLY END; 02066000
PROCEDURE READACARD; FORWARD; %WF 02067000
PROCEDURE SCANNER; %WF 02068000
BEGIN %WF 02069000
02070000
COMMENT SCAN IS THE STREAM PROCEDURE WHICH DOES THE ACTUAL SCANNING.02071000
IT IS DRIVEN BY A SMALL WORD MODE PROCEDURE CALLED SCAN- 02072000
NER, WHICH CHECKS FOR A QUANTITY BEING BROKEN ACROSS A 02073000
CARD. SCAN IS CONTROLED BY A VARIABLE CALLED RESULT. 02074000
SCAN ALSO INFORMS THE WORLD OF ITS ACTION BY MEANS OF THE 02075000
SAME VARIABLE. HENCE THE VARIABLE, RESULT, IS PASSED BY 02076000
BOTH NAME AND VALUE. 02077000
THE MEANING OF RESULT AS INPUT IS: 02078000
0: INITIAL CODE - DEBLANK AND START TO FETCH THE 02079000
NEXT QUANTITY. 02080000
1: CONTINUE BUILDING AN IDENTIFIER (INTERRUPTED BY 02081000
END OF CARD BREAK). 02082000
2: LAST QUANTITY BUILT WAS SPECIAL CHARACTOR. HENCE 02083000
EXIT (INTERRUPTION BY END OF CARD BREAK IS NOT 02084000
IMPORTANT). 02085000
3: CONTINUE BUILDING A NUMBER (INTERRUPTED BY END OF 02086000
CARD BREAK). 02087000
4: LAST THING WAS AN ERROR (COUNT EXCEEDED 63). HENCE02088000
EXIT (INTERRUPTION BY END OF CARD BREAK NOT 02089000
IMPORTANT). 02090000
5: GET NEXT CHARACTOR AND EXIT. 02091000
6: SCAN A COMMENT. 02092000
7: DEBLANK ONLY. 02093000
THE MEANING OF RESULT AS OUTPUT IS: 02094000
1: AN IDENTIFIER WAS BUILT. 02095000
2: A SPECIAL CHARACTOR WAS OBTAINED. 02096000
3: A NUMBER (INTEGER) WAS BUILT. 02097000
SCAN PUTS ALL STUFF SCANNED (EXCEPT FOR COMMENTS AND 02098000
BLANK ELIMINATED) INTO ACCUM (CALLED ACCUMULATOR FOR REST 02099000
OF THIS DISCUSSION). 02100000
COUNT IS THE VARIABLE THAT GIVES THE NUMBER OF CHARAC- 02101000
TORS SCAN HAS PUT IN THE ACCUMULATOR. SINCE SCAN NEEDS 02102000
THE VALUE SO THAT IT CAN PUT MORE CHARACTORS IN THE ACCUM-02103000
ULATOR AND NEEDS TO UPDATE COUNT FOR THE OUTSIDE WORLD, 02104000
COUNT IS PASSED BY BOTH NAME AND VALUE. IT IS ALSO 02105000
CONVENIENT TO HAVE 63-COUNT. THIS IS CALLED COMCOUNT. 02106000
NCR (NEXT CHARACTOR TO BE SCANNED) IS ALSO PASSED BY 02107000
NAME AND VALUE SO THAT IT MAY BE UPDATED. 02108000
ST1 AND ST2 ARE TEMPORARY STORAGES WHICH ARE EXPLICITLY 02109000
PASSED TO SCAN IN ORDER TO OBTAIN THE MOST USEFULL STACK 02110000
ARRANGEMENT; 02111000
STREAM PROCEDURE SCAN(NCR,COUNTV,ACCUM,COMCOUNT,RESULT,RESULTV, 02112000
COUNT,ST2,NCRV,ST1); 02113000
VALUE COUNTV, COMCOUNT,RESULTV,ST2,NCRV,ST1; 02114000
BEGIN 02115000
LABEL DEBLANK,NUMBERS,IDBLDR,GNC,K,EXIT,FINIS,L,ERROR, 02116000
COMMENTS,COMMANTS; 02117000
DI ~ RESULT; DI ~ DI+7; 02118000
SI ~ NCRV; 02119000
COMMENT SETUP DI FOR A CHANGE IN RESULT AND SI FOR A LOOK AT BUFFER;02120000
CI ~ CI+RESULTV; COMMENT SWITCH ON VALUE OF RESULT; 02121000
GO TO DEBLANK; COMMENT 0 IS INITIAL CODE; 02122000
GO TO IDBLDR; COMMENT 1 IS ID CODE; 02123000
GO TO FINIS; COMMENT 2 IS SPECIAL CHARACTER CODE; 02124000
GO TO NUMBERS; COMMENT 3 IS NUMBER CODE; 02125000
GO TO FINIS; COMMENT 4 IS ERROR CODE; 02126000
GO TO GNC; COMMENT 5 IS GET NEXT CHARACTOR CODE; 02127000
GO TO COMMANTS; COMMENT 6 IS COMMENT CODE; 02128000
COMMENT 7 IS DEBLANK ONLY CODE; 02129000
IF SC=" " THEN 02130000
BEGIN K: SI~SI+1; 02131000
IF SC =" " THEN GO TO K 02132000
END; 02133000
GO TO FINIS; 02134000
DEBLANK: IF SC = " " THEN 02135000
BEGIN L: SI~SI+1; IF SC = " " THEN GO TO L END; 02136000
COMMENT IF WE ARRIVE HERE WE HAVE A NON-BLANK CHARACTOR; 02137000
NCRV ~ SI; 02138000
IF SC } "0" THEN GO TO NUMBERS; 02139000
IF SC = ALPHA THEN GO TO IDBLDR; 02140000
COMMENT IF WE ARRIVE HERE WE HAVE A SPECIAL CHARACTOR (OR GNC); 02141000
GNC: DS ~ LIT "2"; 02142000
TALLY ~ 1; SI ~ SI +1; GO TO EXIT; 02143000
COMMANTS: IF SC ! ";" THEN BEGIN 02144000
COMMENTS: SI ~ SI+1; 02145000
IF SC > "%" THEN GO TO COMMENTS; 02146000
IF SC < ";" THEN GO TO COMMENTS; 02147000
COMMENT CHARACTORS BETWEEN % AND SEMICOLON ARE HANDLED BY WORD 02148000
MODE PART OF COMMENT ROUTINE; 02149000
END; 02150000
GO TO FINIS; 02151000
IDBLDR: TALLY ~ 63; DS ~ LIT "1"; 02152000
COMCOUNT( TALLY~ TALLY+1; 02153000
IF SC = ALPHA THEN SI~SI+1 ELSE JUMP OUT TO EXIT); 02154000
TALLY ~ TALLY+1; IF SC = ALPHA THEN BEGIN 02155000
ERROR: DI~DI-1; DS ~ LIT "4"; GO TO EXIT; 02156000
END ELSE GO TO EXIT; 02157000
COMMENT IF WE ARRIVE AT ERROR WE HAVE MORE THAN 63 CHARACTORS 02158000
IN AN IDENTIFIER OR NUMBER; 02159000
NUMBERS: TALLY ~ 63; DS ~ LIT "3"; 02160000
COMCOUNT( TALLY~ TALLY+1; 02161000
IF SC <"0"THEN JUMP OUT TO EXIT; SI~SI+1); 02162000
GO TO ERROR; 02163000
EXIT: ST1 ~ TALLY; COMMENT ST1 CONTAINS NUMBER OF CHAR- 02164000
ACTORS WE ARE GOING TO MOVE INTO THE 02165000
ACCUMULATOR; 02166000
TALLY ~ TALLY+COUNTV; ST2 ~ TALLY; 02167000
DI ~ COUNT; SI ~ LOC ST2; DS ~ WDS; 02168000
COMMENT THIS CODE UPDATED COUNT; 02169000
DI ~ ACCUM; SI ~ SI-3; DS ~ 3 CHR; 02170000
COMMENT THIS CODE PLACES COUNT IN ACCUM AS WELL; 02171000
DI ~ DI+COUNTV; COMMENT POSITION DI PAST CHARACTORS 02172000
ALREADY IN THE ACCUMULATOR, IF ANY; 02173000
SI ~ NCRV; DS ~ ST1 CHR; 02174000
COMMENT MOVE CHARACTORS INTO ACCUM; 02175000
FINIS: DI ~ NCR; ST1 ~ SI; SI ~ LOC ST1; DS ~ WDS; 02176000
COMMENT RESET NCR TO LOCATION OF NEXT CHARACTOR TO BE SCANNED; 02177000
END OF SCAN; 02178000
LABEL L;% %WF 02178100
L: SCAN(NCR, COUNT, ACCUM[1], 63-COUNT, RESULT, %WF 02178200
RESULT, COUNT, 0, NCR, 0); %WF 02178300
IF NCR=LCR THEN %WF 02178400
BEGIN READACARD; %WF 02179000
IF LIBINDEX!0 THEN %WF 02179100
IF RECOUNT=FINISHPT THEN %WF 02179200
BEGIN SEARCHLIB(FALSE); %WF 02179300
READACARD; %WF 02179400
NORELEASE ~ FALSE; %WF 02180000
END; %WF 02180100
GO TO L; %WF 02180200
END; %WF 02180300
END SCANNER; %WF 02180400
PROCEDURE READACARD; 02181000
COMMENT READACARD READS CARDS FROM EITHER THE CARD READER OR THE 02182000
TAPE MERGING AS REQUESTED AND CREATING A NEW TAPE AND 02183000
LISTING IF REQUESTED. READACARD ALSO INSERTS A PERCENT 02184000
SIGN AS AN END OF CARD SENTINEL IN COLUMN 73 AND SETS 02185000
FCR,NCR,LCR,TLCR, AND CLCR; 02186000
BEGIN 02187000
PROCEDURE READTAPE(LCR,MAXLCR,LIB); 02188000
VALUE LIB; 02189000
BOOLEAN LIB; 02190000
REAL LCR, MAXLCR; 02191000
IF LIB THEN 02192000
BEGIN RECOUNT~RECOUNT+1; 02193000
IF LCR~LCR+11>MAXLCR THEN 02194000
BEGIN READ(LIBRARY[FILEINX]); 02195000
MAXLCR~46+LCR~MKABS(LIBRARY[FILEINX](0))+10; 02196000
END; 02196010
ADDER(SEQSUM,LCR,TRUE,TRUE); 02196015
END ELSE 02196030
BEGIN READ(TAPE); 02196040
MAXLCR~LCR~MKABS(TAPE(9)) 02196050
END READTAPE; 02196060
02196070
02196080
02196090
02196100
02196110
02196120
02196130
02196140
02196141
02196142
PROCEDURE SEQCOMPARE(TLCR,CLCR, LIB); 02196150
VALUE LIB; 02196160
BOOLEAN LIB; 02196170
REAL TLCR, CLCR ; 02196180
BEGIN 02196190
IF IF NOPATCH THEN TRUE ELSE GT1 ~ COMPARE (TLCR,CLCR) = 0 THEN % %T0302196200
BEGIN 02196210
LCR:=TLCR; LASTUSED:=IF LIB THEN 6 ELSE 3; 02196220
END 02196230
ELSE BEGIN 02196240
IF GT1 ! 1 THEN % TAPE AND CARD HAVE SAME SEQ 02196250
BEGIN 02196260
IF EXAMIN(GT1:=CLCR-9) = "$" % %T0302196270
IMP (EXAMIN(GT1+65536)="E" OR GT1~EXAMIN(GT1+32768)="$" OR GT1="E")%T0302196272
THEN % %T0302196273
BEGIN 02196275
IF LIB THEN 02196280
BEGIN 02196290
IF FINISHPT-RECOUNT=1 THEN 02196300
LASTCRDPATCH:=TRUE 02196305
ELSE READTAPE(LTLCR,MAXLTLCR,TRUE) 02196310
END 02196320
ELSE READTAPE(TLCR,MAXTLCR,FALSE); 02196330
END 02196340
ELSE IF LIB THEN READTAPE(LTLCR,MAXTLCR,TRUE) 02196345
ELSE READTAPE(TLCR,MAXTLCR,FALSE) 02196350
END; 02196360
LCR:=CLCR; 02196370
LASTUSED:=IF LIB THEN 5 ELSE 2; 02196380
END; 02196390
END OF SEQCOMPARE; 02196400
LABEL CARDONLY, CARDLAST, TAPELAST, FIRSTIME, EXIT, 02197000
EOF, USETHESWITCH, %D02197100
COMPAR,XIT,LIBEND, LIBTLAST,LIBCLAST; 02198000
SWITCH USESWITCH ~ CARDONLY,CARDLAST,TAPELAST,FIRSTIME, 02199000
LIBCLAST, LIBTLAST; 02199010
USETHESWITCH: %D02199900
GO TO USESWITCH[LASTUSED]; 02200000
MOVE(1,TEXT[LASTUSED.LINKR,LASTUSED.LINKC], 02201000
DEFINEARRAY[DEFINEINDEX-2]); 02202000
LASTUSED ~ LASTUSED + 1; 02203000
NCR ~ LCR-1; 02204000
GO TO XIT; 02205000
CARDONLY: IF NORELEASE THEN GO TO EXIT; READ(CARD); 02206000
FIRSTIME: LCR ~ MKABS(CARD(9)); 02207000
GO TO EXIT; 02208000
COMMENT THIS RELEASES CARD FROM READER AND SETS LCR; 02209000
CARDLAST: IF NORELEASE THEN GO TO EXIT; READ(CARD)[EOF]; 02210000
CLCR ~ MKABS(CARD(9)); 02211000
GO COMPAR; 02212000
EOF: DEFINEARRAY[25]~"ND;END."&"E"[1:43:5]; 02212100
DEFINEARRAY[34]~"9999"&"9999"[1:25:23]; 02212200
CLCR~MKABS(DEFINEARRAY[34]); 02212300
ZOT(DEFINEARRAY[33],"%",CLCR-8); 02212400
GO COMPAR; 02212700
COMMENT THIS RELEASES THE PREVIOUS CARD FROM CARD READER AND SETS 02213000
UP CLCR; 02214000
TAPELAST: READTAPE(TLCR,MAXTLCR,FALSE); GO TO COMPAR; 02215000
COMMENT THIS RELEASES THE PREVIOUS CARD FROM TAPE AND SETS UP TLCR; 02216000
LIBCLAST: IF FIRSTIMEX THEN BEGIN FIRSTIMEX~FALSE; 02217000
GO TO COMPAR END; 02217100
READ(CARD)[EOF]; 02217200
CLCR ~ MKABS(CARD(9)); 02218000
IF LASTCRDPATCH THEN BEGIN 02218100
LASTCRDPATCH~FALSE; 02218200
RECOUNT~RECOUNT+1; 02218300
GO TO XIT END; 02218400
GO TO COMPAR; 02219000
LIBTLAST: 02220000
IF FIRSTIMEX THEN BEGIN FIRSTIMEX~FALSE; GO TO COMPAR END; 02220500
READTAPE(LTLCR,MAXLTLCR,TRUE); 02221000
IF RECOUNT=FINISHPT THEN GO TO XIT; 02221100
02222000
02223000
02224000
02225000
02226000
COMPAR: IF LASTUSED = 2 OR LASTUSED = 3 THEN 02227000
SEQCOMPARE(TLCR,CLCR,FALSE) 02228000
ELSE SEQCOMPARE(LTLCR,CLCR,TRUE); 02229000
EXIT: NCR ~ FCR~ LCR - 9; 02229010
COMMENT SETS UP NCR AND FCR; 02230000
IF VOIDCR ! 0 THEN 02230010
BEGIN IF COMPARE(LCR,VOIDCR) = 0 THEN 02230020
BEGIN % %T0302230021
IF VOIDTAPE AND LASTUSED=3 OR NOT VOIDTAPE THEN BEGIN % %T0302230022
GO USETHESWITCH; % %T0302230030
END; % %T0302230032
END ELSE BEGIN 02230035
VOIDCR ~ VOIDPLACE ~ 0; 02230040
VOIDTAPE ~ FALSE; % %T0302230045
END; END; % %T0302230050
IF(IF SEQTOG THEN NONBLANK(FCR) ELSE TRUE) THEN 02230100
IF WRITNEW (L1N,FCR) THEN BEGIN % %T0302231000
IF NOTPNTED THEN PERMLINE(REAL(LISTOG)=3); 02231050
IF SEQTOG THEN BEGIN IF TOTALNO = -10 OR NEWBASE THEN 02231100
BEGIN NEWBASE ~ FALSE; GTI1~ TOTALNO~BASENUM END ELSE 02231200
GTI1~ TOTALNO~ TOTALNO + ADDVALUE; 02231300
IF NEWTOG THEN CHANGESEQ(GTI1,MKABS(L1N[9])); % %T0302231350
CHANGESEQ(GTI1,LCR); END; 02231400
LINENUMBER ~ LINENUMBER + 1; % %T0302231450
IF LISTOG OR (IF CHECKTOG THEN GT1~ 02231500
COMPARE(MKABS(INFO[LASTSEQROW,LASTSEQUENCE]),LCR) = 1 02231600
ELSE FALSE) THEN 02232000
BEGIN PRINT(LIN,FCR,L.[36:10],IF LASTUSED=6 THEN FILEINX 02233000
+17 ELSE IF LASTUSED=3 THEN "T" ELSE IF LASTUSED02233100
=2 OR LASTUSED=5 THEN "R" ELSE 48); 02234000
IF CHECKTOG AND GT1 = 1 THEN BEGIN % %T0302235000
% %T0302235005
SEQERRORCOUNT ~ SEQERRORCOUNT + 1; % %T0302235010
SEQERR(LIN[14]); % %T0302235020
ERRORCOUNT ~ ERRORCOUNT + REAL(SEQERRORTOG); % %T0302235030
END; % %T0302235040
IF NOTPNTED THEN PERMLINE(NOHEADING); 02235100
WRITELINE; 02236000
END; 02237000
IF NEWTOG THEN 02238000
% %T0302239000
WRITE (NEWTAPE,10,L1N[*]); % %T0302240000
02241000
02242000
COMMENT WRITES NEW TAPE IF NECESSARY; 02243000
END; 02244000
ZOT(INFO[LASTSEQROW,LASTSEQUENCE],"%",LCR); 02245000
COMMENT PUTS % IN COLUMN 73 AND SEQUENCE NUMBER IN INFO; 02246000
IF USELINO THEN CARDNUMBER ~ LINENUMBER ELSE %T0302246050
CARDNUMBER ~ CONV(INFO[LASTSEQROW,LASTSEQUENCE-1], 5, 8); 02246100
IF BUILDLINE THEN 02246200
IF LASTADDRESS ! (LASTADDRESS ~ L) THEN 02246300
BEGIN ENILSPOT ~ L.[36:10] & CARDNUMBER[10:20:28]; 02246400
IF (ENILPTR ~ ENILPTR+1)}1023 THEN 02246500
BEGIN FLAG(80); ENILPTR ~ 512; END; 02246600
END; 02246700
XIT: END READACARD; 02247000
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
%T0302261500
LABEL ENDOFITALL; % %T1402261600
REAL STREAM PROCEDURE FETCH(F); VALUE F; %WF 02262000
BEGIN SI~F; SI~SI-8; DI~LOC FETCH; DS~WDS; END FETCH; %WF 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 NOTPNTED THEN PERMLINE(NOHEADING);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
COMMENT TABLE IS THE ROUTINE THAT MOST CODE IN THE COMPILER 02277000
USES WHEN IT IS DESIRED TO SCAN ANOTHER LOGICAL QUANTITY. 02278000
THE RESULT RETURNED IS THE CLASS OF THE ITEM DESIRED. 02279000
TABLE MAINTAINS THE VARIABLES I AND NXTELBT AND THE ARRAY 02280000
ELBAT. ELBAT AND I ARE PRINCIPAL VARIABLES USED FOR 02281000
COMUNICATION BETWEEN TABLE AND THE OUTSIDE WORLD. NXTELBT02282000
IS ALMOST EXCLUSIVELY USED BY TABLE, ALTHOUGH AN OCCASION-02283000
AL OTHER USE IS MADE IN ORDER TO FORGET THAT SOMETHING WAS02284000
SCANNED. (SEE FOR EXAMPLE COMPOUNDTAIL). FOR FURTHER 02285000
GENERAL DISCUSSION SEE THE DECLARATION OF THESE VARIABLES.02286000
THE PARAMETER P IS THE ACTUAL INDEX OF THE QUANTITY 02287000
DESIRED (USUALLY I-1,I, OR I+1). 02288000
THE GENERAL PLAN OF TABLE IS THIS: 02289000
I) IF P < NXTELBAT GO ON TO III). 02290000
II) PROCESS ONE QUANTITY. 02291000
A) SCAN. 02292000
B) TEST FOR IDENTIFIER, NUMBER, 3R SPECIAL CHARACTOR.02293000
1) IDENTIFIER - LOOKUP IN DIRECTORY AND PROCESS 02294000
IN SPECIAL MANNER IF COMMENT OR DEFINED ID. 02295000
2) NUMBER - PROCESS INTEGER PART, FRACTIONAL PART, 02296000
AND EXPONENT PART. 02297000
3) TEST IF SPECIAL CHARACTOR REQUIRES SPECIAL 02298000
PROCESSING - OTHERWISE GET ELBAT WORD FROM 02299000
SPECIAL. 02300000
C) LOAD ELBAT AND INCREMENT NXTELBT. 02301000
D) IF ELBAT IS FULL ADJUST ELBAT, NXTELBT, I, AND P. 02302000
E) GO BACK TO I). 02303000
III) RETURN WITH CLASS OF ELBAT[P]. 02304000
FURTHER DETAILS ARE GIVEN IN BODY OF TABLE; 02305000
INTEGER PROCEDURE TABLE(P); VALUE P; INTEGER P; 02306000
BEGIN 02307000
LABEL PERCENT,SPECIALCHAR,COMPLETE,COLON,DOT,ATSIGN,QUOTE, 02308000
STRNGXT, MOVEIT, 02308100
SCANAGAIN,FPART,EPART,IPART,IDENT,ROSE,COMPOST,DOLLAR,RTPAREN,ARGH, 02309000
CROSSHATCH,DBLDOLLAR,LESSTHAN; %W0302310000
SWITCH SPECIALSWITCH ~ PERCENT,DOLLAR,DOT,ATSIGN,COLON,QUOTE,RTPAREN, 02311000
CROSSHATCH,DBLDOLLAR,LESSTHAN; %W0302312000
SWITCH RESULTSWITCH~ IDENT, SPECIALCHAR,IPART; 02313000
WHILE P } NXTELBT 02314000
DO BEGIN 02315000
SCANAGAIN: COUNT ~ RESULT ~ ACCUM[1] ~ 0; SCANNER; 02316000
GO TO RESULTSWITCH[RESULT]; 02317000
ARGH: Q ~ ACCUM[1]; FLAG(141); GO TO SCANAGAIN; 02318000
SPECIALCHAR: GT1 ~ (Q ~ ACCUM[1]).[18:6] - 2; %T9002319000
ENDTOG ~ (GT1 = 57 OR GT1 = 24) AND ENDTOG; %M02320000
COMMENT OBTAIN ACTUAL CHARACTOR FROM ACCUM; 02321000
T ~ SPECIAL[GT1&GT1[42:41:3]]; 02322000
COMMENT NOTICE COMPRESSION TECHNIQUE USED TO SHORTEN TABLE OF 02323000
ELBAT WORDS FOR SPECIAL CHARACTORS; 02324000
IF GT1 ~ T.INCR = 0 THEN GO TO COMPLETE; 02325000
GO TO SPECIALSWITCH[GT1]; 02326000
COMMENT INCR FIELD OF SPECIAL CHARACTOR IS NON-ZERO FOR SPECIAL 02327000
CHARACTORS REQUIRING SPECIAL HANDELING. INCR IS SWITCHED 02328000
ON TO OBTAIN DISCRIMINATION; 02329000
COLON: RESULT ~ 7; SCANNER; COMMENT ELIMINATE BLANKS - CHECKING 02330000
FOR := IN PLACE OR ~ ; 02331000
IF NOT SYMQUOTE THEN %M02331500
IF EXAMIN (NCR) = "=" THEN BEGIN RESULT ~0; SCANNER; 02332000
T ~ SPECIAL[13] END; 02333000
RESULT ~ 2; GO TO COMPLETE; 02334000
LESSTHAN: IF REAL(STOPDEFINE) ! 0 THEN GO TO COMPLETE; % %W0302334100
RESULT~7; SCANNER; %W0302334105
COUNT ~ 0; RESULT ~ 3; SCANNER; %W0302334110
RESULT~7; SCANNER; %W0302334115
IF EXAMIN(NCR)!">" THEN BEGIN %W0302334120
IF COUNT=0 THEN BEGIN ACCUM[1]~"1<0000"; %W0302334130
GO TO COMPLETE END; %W0302334140
ELBAT[NXTELBT] ~ T; NXTELBT ~ NXTELBT+1; %W0302334150
GO TO IPART END; %W0302334160
IF REAL(STREAMTOG)=2 THEN OCTCON(FALSE,ACCUM[0]) ELSE %W0302334170
OCTCON(TRUE,C); T ~ 0&TRUTHV[2:41:7]&2[25:46:2]; %W0302334180
RESULT ~ 0; SCANNER; GO TO COMPLETE; %W0302334190
DOT: IF ENDTOG THEN BEGIN ENDTOG ~ FALSE; GO TO COMPLETE END; %M02335000
IF EXAMIN(NCR)>9 THEN BEGIN RESULT ~ 7; SCANNER; %M02335100
IF QUOTETOG THEN %A02335150
IF EXAMIN(NCR)!"[" THEN T ~ 0&DOTOP[2:41:7]; %M02335200
GO TO COMPLETE END; %M02335300
NHI~NLO~0; 02336000
C~0; FSAVE~0; GO TO FPART; 02337000
ATSIGN: IF QUOTETOG THEN BEGIN T ~ PERIOD; GO TO COMPLETE END; %A02338000
NHI ~ C ~ 1; NLO ~ FSAVE ~ 0; GO TO EPART; %A02338500
COMMENT DOT AND ATSIGN ENTER NUMBER CONVERSION AT CORRECT SPOT; 02339000
02340000
QUOTE: IF QUOTETOG THEN BEGIN T~0&QUOTEOP[2:41:7]; %M02341000
GO TO COMPLETE END; %M02341100
COUNT ~ 0; T ~ IF STREAMTOG THEN 63 ELSE IF STREAMTOG.[2:1] %M02341200
THEN 16 ELSE 7+REAL(STREAMTOG.[46:1]); 02342000
DO BEGIN 02343000
RESULT ~ 5; SCANNER; 02344000
IF COUNT=T THEN IF EXAMIN(NCR) ! """ 02345000
THEN GO TO ARGH; 02345100
END UNTIL EXAMIN(NCR) = """; 02346000
Q ~ ACCUM[1]; RESULT ~ 5; SCANNER; COUNT~COUNT-1; 02347000
IF COUNT<0 THEN COUNT~COUNT+64; 02347100
ACCUM[1] ~ Q; RESULT ~ 4; 02348000
STRNGXT: T~C~0; 02349000
IF COUNT < 8 THEN 02350000
MOVEIT: 02350100
MOVECHARACTERS(COUNT,ACCUM[1],3,C,8-COUNT); 02351000
T.CLASS ~ STRNGCON; GO TO COMPLETE; 02352000
COMMENT CROSSHATCH HANDLES TWO SITUATIONS: 02353000
THE CROSSHATCH AT END OF DEFINE DECLARATIONS AND 02354000
THE CROSSHATCH AT END OF ALPHA REPRESENTING DEFINED IDS. 02355000
THE TWO CASES ARE PROCESSED DIFERENTLY. THE FIRST CASE 02356000
MERELY PLACES THE CROSSHATCH IN ELBAT. THE SECOND CASE 02357000
CAUSES AN EXIT FROM SCANNING THE ALPHA FOR THE DEFINED ID.02358000
FOR A FULL DISCUSSION SEE DEFINEGEN; 02359000
CROSSHATCH: IF DEFINECTR!0 THEN GO TO COMPLETE; 02360000
IF SYMQUOTE THEN GO TO COMPLETE; %M02360500
% %M02361000
IF DEFINEINDEX=0 THEN IF PRINTOG OR SYMFORMAT THEN GO TO COMPLETE ELSE%M02362000
GO TO ARGH; %M02362500
ZOT(GT1,0,LCR); %M02362600
LCR ~ (GT1 ~ DEFINEARRAY[DEFINEINDEX-1]) DIV 262144; 02363000
NCR ~ GT1 - LCR | 262144; % %T0302364000
GT2~0&(T~DEFINEARRAY[DEFINEINDEX~DEFINEINDEX-3]) 02365000
[33:18:15]; 02365100
LASTUSED~T.[33:15]; 02365200
IF GT2 ! 0 THEN 02365300
BEGIN 02365400
NEXTTEXT ~ (GT2 ~ TAKE(GT2)).DYNAM; 02365500
DEFSTACKHEAD ~ GT2.LINK; 02365600
END; 02365700
GO TO SCANAGAIN; 02366000
DOLLAR: COMMENT THIS CODE HANDLES CONTROL CARDS; 02367000
IF SYMQUOTE THEN GO TO COMPLETE; %M02367005
BEGIN LABEL SEGMENT; SEGMENT: % %T0302367010
COUNT ~ RESULT ~ ACCUM[1] ~ 0; SCANNER; 02368000
IF Q ~ ACCUM[1] = "1X0000" THEN GO SEGMENT; % %T0302369000
IF Q = "4VOID0" THEN 02369100
BEGIN GETVOID(VOIDPLACE,NCR,VOIDCR,LCR); 02369200
%T0302369300
GO TO PERCENT %T0302369400
END; 02369500
IF Q="5VOIDT" THEN BEGIN 02369600
VOIDTAPE~TRUE; 02369700
GETVOID(VOIDPLACE,NCR,VOIDCR,LCR); 02369800
READACARD;GO SCANAGAIN END; 02369900
%T0302369950
%T0302369960
IF Q = "4TAPE0" THEN 02370000
BEGIN 02371000
LASTUSED ~ 2; COMMENT NEXT CARD READ IS FROM RDR; 02372000
IF MAXTLCR = 0 THEN 02373000
BEGIN INTEGER STREAM PROCEDURE FEJ(F,T); VALUE T; 02374000
BEGIN SI~F; DI~LOC T; DS~WDS; SI~T; SI~SI-16; 02375000
DI~LOC FEJ; DS~WDS END FEJ; 02376000
STREAM PROCEDURE FIX(F,T); VALUE T; 02377000
BEGIN SI~F; SI~SI-24; DI~LOC T; DS~WDS; DI~T; 02378000
DI~DI+47; SKIP 4 DB; DS~2 RESET; DI~DI+48; 02379000
DI~DI+48; DS~8 LIT "00#01+0#"; END FIX; 02379100
IF GT1~FEJ(TAPE,0)=10 THEN 02379200
BEGIN REWIND(TAPE); FIX(TAPE,0) END; 02379300
MAXTLCR~GT1+TLCR~9+MKABS(TAPE(0)); 02379400
LASTUSED~2; 02379500
END; END 02380000
ELSE IF Q="3POP00" THEN BEGIN % %T0302380205
LISTOG.[47:1] ~ OPTHOLD[ZOPT ~ ZOPT - 1]; %%T0302380210
PRTOG ~ OPTHOLD[ZOPT].[46:1]; % %T0302380215
CHECKTOG ~ OPTHOLD[ZOPT].[45:1]; % %T0302380220
NEWTOG ~ OPTHOLD[ZOPT].[44:1]; % %T0302380225
SEQTOG ~ OPTHOLD[ZOPT].[43:1]; % %T0302380230
BASENUM ~ BASHOLD[ZOPT]; % %T0302380235
TOTALNO ~ TOTHOLD[ZOPT]; % %T0302380240
NEWBASE ~ OPTHOLD[ZOPT].[42:1]; % %T0302380245
ADDVALUE ~ ADDHOLD[ZOPT]; % %T0302380250
DEBUGTOG ~ OPTHOLD[ZOPT].[41:1]; % %T0302380255
PUNCHTOG ~ OPTHOLD[ZOPT].[40:1]; % %T0302380260
SEQERRORTOG ~ OPTHOLD[ZOPT].[39:1]; % %T0302380265
LASTUSED ~ REAL( % %T0302380270
OPTHOLD[ZOPT].[18:15]); % %T0302380275
STREAMER ~ OPTHOLD[ZOPT].[38:1]; % %T0302380280
SINGLTOG ~ OPTHOLD[ZOPT].[37:1]; % %T0302380390
GO TO PERCENT; % %T0302380400
END ELSE % %T0302380405
IF Q="4PUSH0" THEN BEGIN % %T0302380410
OPTHOLD[ZOPT] ~ LISTOG; % %T0302380415
OPTHOLD[ZOPT].[46:1] ~ PRTOG; % %T0302380420
OPTHOLD[ZOPT].[45:1] ~ CHECKTOG; % %T0302380425
OPTHOLD[ZOPT].[44:1] ~ NEWTOG; % %T0302380430
OPTHOLD[ZOPT].[43:1] ~ SEQTOG; % %T0302380435
BASHOLD[ZOPT] ~ BASENUM; % %T0302380440
TOTHOLD[ZOPT] ~ TOTALNO; % %T0302380445
OPTHOLD[ZOPT].[42:1] ~ NEWBASE; % %T0302380450
ADDHOLD[ZOPT] ~ ADDVALUE; % %T0302380455
OPTHOLD[ZOPT].[41:1] ~ DEBUGTOG; % %T0302380460
OPTHOLD[ZOPT].[40:1] ~ PUNCHTOG; % %T0302380465
OPTHOLD[ZOPT].[39:1] ~ SEQERRORTOG; % %T0302380470
OPTHOLD[ZOPT].[18:15] ~ BOOLEAN(LASTUSED); % %T0302380475
OPTHOLD[ZOPT].[38:1] ~ STREAMER; % %T0302380480
OPTHOLD[ZOPT].[37:1] ~ SINGLTOG; % %T0302380590
ZOPT ~ ZOPT + 1; % %T0302380600
GO TO PERCENT; % %T0302380605
END ELSE % %T0302380610
IF Q="5ENTER" THEN BEGIN % %T0302380620
GT1 ~ 5; % %T0302380630
GO TO DBLDOLLAR; % %T0302380640
END ELSE % %T0302380650
IF Q="1$0000" THEN BEGIN % %T0302380660
GT1 ~ 1; % %T0302380670
GO TO DBLDOLLAR; % %T0302380680
END % %T0302380690
ELSE BEGIN IF Q! "4CARD0" THEN GO TO PERCENT; 02381000
IF LASTUSED } 5 THEN ELSE LASTUSED ~1 END; 02382000
CHECKTOG~FALSE; 02382100
LISTOG.[47:1]~FALSE; 02382200
PRTOG~NEWTOG~DEBUGTOG~PUNCHTOG~FALSE; 02383000
SEQERRORTOG ~ FALSE ; % %T0302383010
% %T1102383100
DO BEGIN 02384000
COUNT ~ RESULT ~ ACCUM[1] ~ 0; SCANNER; Q ~ ACCUM[1];02385000
IF Q = "1%0000" THEN GO TO PERCENT ELSE 02385100
IF Q = "4XREF0" THEN XREF := %HCG190 02385200
XREF OR BUILDLINE.[45:1] ELSE %HCG190 02385201
IF Q = "6SEQXE" THEN % 02385400
BUILDLINE.[47:1] ~ TRUE ELSE %HCG190 02385600
IF Q = "4LIST0" THEN LISTOG.[47:1]~TRUE ELSE 02386000
IF Q = "6SINGL" OR Q = "3SGL00" THEN 02386100
%T9302386105
LISTOG.[47:1]:=SINGLTOG:=TRUE ELSE 02386110
IF Q = "6DOUBL" OR Q = "3DBL00" THEN SINGLTOG := FALSE ELSE %T9302386115
02386120
02386130
02386140
02386150
02386160
02386170
02386180
02386190
02386200
02386210
IF Q = "3PRT00" THEN PRTOG:=TRUE ELSE 02387000
IF Q= "5CHECK" THEN CHECKTOG~TRUE ELSE 02387100
IF Q = "4INFO0" THEN DUMPINFO ELSE 02387200
IF Q.[18:18]="NEW" THEN NEWTOG~TRUE ELSE %T1102388000
IF Q = "5NOSEQ" THEN SEQTOG~FALSE ELSE 02388100
IF Q = "3SEQ00" THEN SEQTOG~ TRUE ELSE 02388200
IF RESULT = 3 THEN BEGIN 02388300
BASENUM~ CONV(ACCUM[1],0,ACCUM[1].[12:6]); 02388400
TOTALNO~-10; 02388450
NEWBASE ~ TRUE 02388500
END ELSE 02388600
IF RESULT = 2 THEN BEGIN 02388700
IF ACCUM[1]= "1+0000" THEN 02388800
BEGIN RESULT~ COUNT~ ACCUM[1]~0; 02388900
SCANNER; IF RESULT = 3 THEN 02388910
ADDVALUE~CONV(ACCUM[1],0,ACCUM[1].[12:6]); 02388920
END END ELSE 02388930
IF Q = "6DEBUG" OR Q = "7IDEBU" THEN %T9002389000
BEGIN LISTOG.[47:1] := PRTOG := TRUE; %T9302390000
IF Q="6DEBUG" THEN DEBUGTOG~TRUE ELSE %T9002390050
INTDEBUGTOG ~ TRUE; %T9002390080
FILL WOP[*] WITH 02391000
"LITC"," ", 02392000
"OPDC","DESC", 02393000
10,"DEL ", 11,"NOP ", 12,"XRT ", 16,"ADD ", 17,"AD2 ", 18,"PRL ", 02394000
19,"LNG ", 21,"GEQ ", 22,"BBC ", 24,"INX ", 35,"LOR ", 37,"GTR ", 02395000
38,"BFC ", 39,"RTN ", 40,"COC ", 48,"SUB ", 49,"SB2 ", 64,"MUL ", 02396000
65,"ML2 ", 67,"LND ", 68,"STD ", 69,"NEQ ", 71,"XIT ", 72,"MKS ", 02397000
128,"DIV ",129,"DV2 ",130,"COM ",131,"LQV ",132,"SND ",133,"XCH ", 02398000
134,"CHS ",167,"RTS ",168,"CDC ",197,"FTC ",260,"LOD ",261,"DUP ", 02399000
278,"LBC ",280,"SSF ",294,"LFC ",322,"ZP1 ",384,"IDV ",453,"FTF ", 02400000
515,"MDS ",532,"ISD ",533,"LEQ ",534,"BBW ",548,"ISN ",549,"LSS ", 02401000
550,"BFW ",581,"EQL ",582,"SSP ",584,"ECM ",709,"CTC ",790,"LBU ", 02401100
806,"LFU ",896,"RDV ",965,"CTF ", 02401200
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1023; 02402000
FILL COP[*] WITH % CHARACTER MODE MNEMONICS 02403000
"EXC ","NOP ","BSD ","BSS ","RDA ","TRW ","SED ","TDA ", 02404000
" "," ","TBN "," ","SDA ","SSA ","SFD ","SRD ", 02405000
" "," ","SES "," ","TEQ ","TNE ","TEG ","TGR ", 02406000
"SRS ","SFS "," "," ","TEL ","TLS ","TAN ","BIT ", 02407000
"INC ","STC ","SEC ","CRF ","JNC ","JFC ","JNS ","JFW ", 02408000
"RCA ","ENS ","BNS ","RSA ","SCA ","JRC ","TSA ","JRV ", 02409000
"CEQ ","CNE ","CEG ","CGR ","BIS ","BIR ","OCV ","ICV ", 02410000
"CEL ","CLS ","FSU ","FAD ","TRP ","TRN ","TRZ ","TRS "; 02411000
02412000
FILL POP[*] WITH 02412100
"ZFN ","ZBN ","ZFD ","ZBD ","ISO ",0,"DIA ","DIB ","TRB ","CFL ","CFE "02412200
; 02412300
END ELSE 02413000
IF Q = "5PUNCH" THEN PUNCHTOG ~ TRUE ELSE 02414000
IF Q = "5ERROR" THEN SEQERRORTOG ~ TRUE ELSE % STXERR FOR SEQERR %T0302414100
IF Q = "7LIBLI" THEN LISTOG.[47:1] ~ LISTOG.[18:15] ELSE % %T0302414200
% %T0302414600
IF Q="6UNSAF" THEN STREAMER ~% %T0302414700
(LASTUSED}5 AND FILEINX=NOTAPES-1) ELSE % %T0302414800
IF Q="7LISTL" THEN LISTOG.[18:15] ~ TRUE ELSE % %T0302414850
IF Q="4SAFE0" THEN STREAMER ~ FALSE ELSE % %T0302414900
IF Q="6ERROR" THEN BEGIN % %T9802414910
COUNT ~ RESULT ~ ACCUM[1] ~ 0; SCANNER; % %T9802414920
IF RESULT ! 3 THEN GO PERCENT; % %T9802414930
ERRORMAX ~ CONV(ACCUM[1],0,ACCUM[1].[12:6]); % %T9802414940
IF ERRORMAX < ERRORCOUNT THEN GO ENDOFITALL; % %T9802414945
END ELSE % %T9802414950
END UNTIL FALSE; 02415000
END; % %T0302415900
PERCENT: IF SYMQUOTE THEN IF NCR.[33:15] ! LCR.[33:15] THEN %T9202416000
GO TO COMPLETE; %T9202416100
IF NCR ! FCR THEN READACARD; %T9202416150
IF LIBINDEX!0 THEN 02416200
IF RECOUNT=FINISHPT THEN 02416400
BEGIN SEARCHLIB(FALSE); READACARD; NORELEASE~FALSE END; 02416600
GO TO SCANAGAIN; 02417000
COMMENT MOST PERCENT SIGNS ACTING AS END OF CARD SENTINELS GET TO 02418000
PERCENT. PERCENT READS THE NEXT CARD AND STARTS OVER. A 02419000
SIDE AFFECT IS THAT ALL CHARACTORS ON A CARD ARE IGNORED 02420000
AFTER A FREE PERCENT SIGN (ONE NOT IMBEDDED IN A STRING OR02421000
COMMENT; 02422000
COMMENT MIGHT BE FUNNY COMMA - HANDEL HERE; 02423000
RTPAREN: RESULT ~ 7; SCANNER; 02424000
IF SYMQUOTE THEN GO TO COMPLETE; %M02424500
IF EXAMIN(NCR) = """ 02425000
THEN BEGIN 02426000
RESULT ~ 0; SCANNER; 02427000
DO BEGIN RESULT ~ 5; SCANNER END UNTIL EXAMIN(NCR) 02428000
= """; 02429000
RESULT ~ 0; SCANNER; 02430000
RESULT ~ 7; SCANNER; 02431000
IF EXAMIN(NCR) ! "(" THEN 02432000
GO TO ARGH; 02433000
RESULT ~ 0; SCANNER; Q ~ ACCUM[1]; 02434000
T ~ SPECIAL[24] 02435000
END; 02436000
RESULT ~ 2; GO TO COMPLETE; 02437000
IPART: TCOUNT~0; 02438000
FSAVE~0; 02438500
C~CONVERT; 02439000
IF DPTOG THEN BEGIN NHI~THI; NLO~TLO; END; 02440000
IF EXAMIN(NCR)="." THEN 02441000
BEGIN RESULT~0; 02442000
SCANNER; 02443000
C ~ 1.0| C; 02444000
FPART: TCOUNT~COUNT; 02445000
IF EXAMIN(NCR){9 THEN 02446000
BEGIN RESULT~0; 02447000
SCANNER; 02448000
IF DPTOG THEN 02449000
BEGIN 02450000
DOUBLE(CONVERT,TLO,TEN[(COUNT-TCOUNT)MOD 12], 02451000
0,/,~,THI,TLO); 02452000
FOR T~12 STEP 12 UNTIL COUNT - TCOUNT DO 02453000
DOUBLE(THI,TLO,TEN[12],0,/,~,THI,TLO); 02454000
DOUBLE(THI,TLO,NHI,NLO,+,~,NHI,NLO); 02455000
C~NHI END ELSE 02456000
C~CONVERT+C|TEN[FSAVE~COUNT-TCOUNT]; 02457000
END 02458000
END; 02459000
RESULT ~7; SCANNER; 02460000
IF EXAMIN(NCR)="@" THEN 02461000
BEGIN RESULT~0; 02462000
SCANNER; 02463000
EPART: TCOUNT~COUNT; 02464000
C~C|1.0; 02465000
RESULT ~7; SCANNER; 02466000
IF T~EXAMIN(NCR)>9 THEN 02467000
IF T="-" OR T = "+" THEN 02467100
BEGIN RESULT~0; 02468000
SCANNER; 02469000
TCOUNT~COUNT; 02470000
END ELSE FLAG(47); RESULT ~ 0; 02471000
SCANNER; 02472000
IF RESULT ! 3 THEN FLAG (47);COMMENT NOT A NUMBER; 02472100
Q~ACCUM[1]; 02473000
IF GT1~T~(IF T="-"THEN -CONVERT ELSE CONVERT)<-46 OR T>69 02474000
THEN 02475000
FLAG(269) 02476000
ELSE BEGIN T~TEN[ABS(GT3~T-FSAVE)]; 02477000
IF ABS(0&C[42:3:6]&C[1:2:1]+0&T[42:3:6]&GT3[1:1:1] + 12) 02478000
>63 THEN 02479000
FLAG(269) ELSE 02480000
IF DPTOG THEN 02481000
IF GT1<0 THEN 02482000
BEGIN 02483000
GT1~-GT1; 02484000
DOUBLE(NHI,NLO,TEN[GT1 MOD 12],0,/,~,NHI,NLO); 02485000
FOR GT2~12 STEP 12 UNTIL GT1 DO 02486000
DOUBLE(NHI,NLO,TEN[12],0,/,~,NHI,NLO); 02487000
END ELSE 02488000
BEGIN 02489000
DOUBLE(NHI,NLO,TEN[GT1 MOD 12],0,|,~,NHI,NLO); 02490000
FOR GT2~12 STEP 12 UNTIL GT1 DO 02491000
DOUBLE( NHI,NLO,TEN[12],0,|,~,NHI,NLO); 02492000
END ELSE C~IF GT3<0 THEN C/T ELSE C|T; 02493000
END; 02494000
END ELSE IF FSAVE ! 0 THEN C~C/TEN[FSAVE]; 02495000
Q ~ ACCUM[1]; RESULT ~ 3; 02496000
T~0; 02497000
IF REAL(BOOLEAN(C)AND NOT BOOLEAN(1023))=0 THEN 02498000
BEGIN T.CLASS~LITNO ; T.ADDRESS~C.[38:10] END 02499000
ELSE T.CLASS~NONLITNO ; 02500000
GO TO COMPLETE; 02501000
COMMENT THE CODE BETWEEN IDENT AND COMPOST DOES A LOOKUP IN INFO. 02502000
IF QUANTITY IS NOT FOUND THE ELBAT WORD EXPECTS TO BE 02503000
ZERO. THE SCRAMBLE FOR APPROPRIATE STACK IS FIRST THING 02504000
TO BE DONE. THEN A CHECK IS MADE, USING SUPERSTACK, %WF 02505000
TO DETERMINE WHETHER THE IDENTIFIER IS ONE OF OUR %WF 02505100
COMMON RESERVED WORDS. IF IT IS, EXIT IS MADE TO %WF 02505200
COMPLETE, OTHERWISE THE LOOP BETWEEN COMPOST AND %WF 02506000
ROSE IS ENTERED. THE LAST THING DONE FOR ANY %WF 02506100
IDENTIFIER WHICH IS FOUND IS TO STUFF THE LOCATION %WF 02506200
OF THE ELBATWORD IN INFO INTO THE LINK FIELD. THIS %WF 02507000
ALLOWS REFERENCE BACK TO INFO FOR ADDITIONAL DATA, %WF 02507100
SHOULD THIS BE REQUIRED. ; %WF 02507200
IDENT: IF T ~ SUPERSTACK[SCRAM ~ (Q ~ ACCUM[1]) MOD 125]!0 02508000
THEN BEGIN %WF 02508100
IF INFO[GT1 ~ T.LINKR,(GT2 ~ T.LINKC)+1]=Q %WF 02508200
THEN BEGIN %WF 02508300
T ~ INFO[GT1,GT2]&T[35:35:13]; %WF 02508400
GO TO COMPLETE %WF 02508500
END %WF 02508600
END; %WF 02508700
IF EXAMINELAST(ACCUM[1], COUNT+2) = 12 THEN 02508730
T ~ DEFSTACKHEAD ELSE 02508770
T ~ STACKHEAD[SCRAM]; %WF 02508800
ROSE : GT1 ~ T.LINKR; 02509000
IF(GT2 ~ T.LINKC)+GT1= 0 THEN 02510000
BEGIN T ~ 0; IF COUNT { 13 AND COUNT } 3 AND NOT %M02511000
SYMQUOTE THEN CHAINFORM(ACCUM[1],T); GO TO COMPLETE END; %M02511500
T ~ INFO[GT1,GT2]; 02512000
IF INFO[GT1,GT2+1]&0[1:1:11] ! Q THEN GO TO ROSE; 02513000
IF COUNT { 5 THEN GO TO COMPOST ; 02514000
IF NOT EQUAL(COUNT-5,ACCUM[2],INFO[GT1,GT2+2]) 02515000
THEN GO TO ROSE; 02516000
COMPOST: T ~ T&GT1[35:43:5]&GT2[40:40:8]; 02517000
IF XREF THEN %DFB02517100
IF GT1 !1 THEN 02517150
IF GT1!1 OR GT2}LASTSEQUENCE THEN 02517170
BEGIN %DFB02517200
IF XREFPT=30 THEN %DFB02517300
BEGIN %DFB02517400
WRITE(DSK2,30,XREFAY2[*]); %DFB02517500
XREFPT:=0; %DFB02517600
END; %DFB02517700
XREFAY2[XREFPT]:=CARDNUMBER&XREFINFO[GT1,GT2] %DFB02517800
[10:37:11]; %DFB02517820
XREFPT:=XREFPT+1; %DFB02517840
END; %DFB02517860
COMMENT CHECK HERE FOR COMMENTS AND DEFINED IDS; 02518000
IF SYMQUOTE THEN GO TO COMPLETE; %M02518500
IF NOT ENDTOG THEN BEGIN 02519000
IF GT1 ~ T.CLASS = COMMENTV THEN BEGIN 02520000
WHILE EXAMIN(NCR) ! ";" DO 02521000
BEGIN RESULT ~ 6; COUNT ~ 0; SCANNER END; 02522000
RESULT~0;SCANNER;GO TO SCANAGAIN END END; 02523000
IF STOPDEFINE THEN GO TO COMPLETE; 02524000
IF GT1 ! DEFINEDID THEN GO TO COMPLETE; 02525000
COMMENT SETUP FOR DEFINED IDS - SEE DEFINEGEN FOR MORE DETAILS; 02526000
IF BOOLEAN(T.MON) THEN % THIS IS A PARAMETRIC DEFINE 02526500
GT1 ~ GIT(T ~ FIXDEFINEINFO(T)) ELSE GT1 ~ 0; 02526600
IF DEFINEINDEX = 24 THEN BEGIN FLAG(139);GO TO ARGH END; 02527000
DEFINEARRAY[DEFINEINDEX] ~ LASTUSED & GT1[18:33:15]; 02528000
LASTUSED ~ T.DYNAM; 02529000
DEFINEARRAY[DEFINEINDEX+2] ~ 262144|LCR+NCR; 02530000
LCR ~ (NCR ~ MKABS(DEFINEARRAY[DEFINEINDEX+1]))+1; 02531000
ZOT(GT4,"%",LCR); DEFINEINDEX ~ DEFINEINDEX+3; 02532000
GO TO PERCENT; 02533000
DBLDOLLAR: CARDCALL ~ LASTUSED = 5; % %T0302533010
SEARCHLIB(BOOLEAN(GT1)); GO SCANAGAIN; % %T0302533500
COMPLETE: ELBAT[NXTELBT] ~ T; 02534000
STOPDEFINE ~ FALSE; COMMENT ALLOW DEFINES AGAIN; 02535000
IF NXTELBT ~ NXTELBT+1 > 74 02536000
THEN IF NOT MACROID 02536500
THEN BEGIN 02537000
COMMENT ELBAT IS FULL: ADJUST IT; 02538000
MOVE(11,ELBAT[65],ELBAT); %W0302539000
I~ I-65; 02540000
P~ P-65; 02541000
NXTELBT ~ NXTELBT-65 END END; %W0302542000
IF TABLE ~ ELBAT[P].CLASS = COMMENTV 02543000
THEN IF NOT SYMQUOTE %A02543500
THEN BEGIN 02544000
COMMENT SPECIAL HANDLING OF CONSTANTS FOR SAKE OF FOR STATEMENTS; 02545000
C ~ INFO[0,ELBAT[P].ADDRESS]; 02546000
ELBAT[P].CLASS ~ TABLE ~ NONLITNO END; 02547000
STOPDEFINE ~ FALSE; COMMENT ALLOW DEFINE; 02547500
END TABLE ; 02548000
COMMENT NEXTENT IS THE PROCEDURE WHICH SCANS FOR THE FORMAT GENERATOR. 02549000
IT USED THE SAME SCANNER AS THE TABLE ROUTINE. NEXTENT 02550000
PLACES EITHER A CHARACTOR OR A CONVERTED NUMBER WITH A 02551000
NEGATIVE SIGN IN ELCLASS. NEXTENT SUPPRESS BLANKS; 02552000
PROCEDURE NEXTENT; 02553000
BEGIN LABEL DEBLANK; 02554000
COUNT:=ACCUM[1]:=0; LASTELCLASS:=ELCLASS; 02555000
DEBLANK: 02556000
IF EXAMIN(NCR)=" " THEN 02557000
BEGIN 02558000
RESULT:=7; SCANNER; 02559000
END; 02560000
IF EXAMIN(NCR) { 9 THEN % WE HAVE A NO. (WORD MODE COLLATING SEQ.) 02561000
BEGIN 02562000
RESULT:=3; SCANNER; TCOUNT:=0; Q:=ACCUM[1]; 02563000
IF COUNT>4 THEN FLAG(140) % INTEGER > 1023. 02564000
ELSE IF ELCLASS:=-CONVERT < -1023 THEN FLAG(140) % INTEGER > 1023. 02565000
END 02566000
ELSE IF EXAMIN(NCR)="%" THEN 02567000
BEGIN 02568000
READACARD; GO DEBLANK; 02569000
END 02570000
ELSE BEGIN 02571000
RESULT:=5; SCANNER; % GET NEXT CHARACTER. 02572000
Q:=ACCUM[1]; ELCLASS:=ACCUM[1].[18:6] 02573000
END 02574000
END OF NEXTENT; 02575000
%T0302579000
COMMENT THIS SECTION CONTAINS FORWARD DECLARATIONS; 03000000
PROCEDURE EMITL(LITERAL); VALUE LITERAL; INTEGER LITERAL; FORWARD; %T9203000002
PROCEDURE EMITO(OPERATOR); VALUE OPERATOR; INTEGER OPERATOR; FORWARD; 03000005
PROCEDURE EMITC(REPEAT,OPERATOR); VALUE OPERATOR,REPEAT; %T9203000010
INTEGER REPEAT,OPERATOR; FORWARD; %T9203000015
PROCEDURE EMITV(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; FORWARD; %T9203000020
PROCEDURE EMITN(ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; FORWARD; %T9203000025
PROCEDURE EMITPAIR(ADDRESS,OPERATOR); VALUE ADDRESS,OPERATOR; %T9203000030
INTEGER ADDRESS,OPERATOR; FORWARD; %T9203000035
PROCEDURE EMITUP; FORWARD; %T9203000040
PROCEDURE EMITLNG; FORWARD; %T9203000045
PROCEDURE EMITWORD(WORD); VALUE WORD; REAL WORD; FORWARD; %T9203000050
PROCEDURE %T9203000058
EMITDIAL(A,B); VALUE A,B; INTEGER A,B; %T9203000060
FORWARD; %T9203000062
PROCEDURE %T9203000064
EMITFC(A,B); VALUE A,B; INTEGER A,B; %T9203000066
FORWARD; %T9203000068
PROCEDURE %T9203000070
EMITFB(TYPE,LENGTH,FROM,TOWARDS); %T9203000072
VALUE TYPE,LENGTH,FROM,TOWARDS; %T9203000074
INTEGER TYPE,LENGTH,FROM,TOWARDS; %T9203000076
FORWARD; %T9203000078
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; %D03015000
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
BOOLEAN PROCEDURE EXPLICITFORMAT; FORWARD; %W4003056500
BOOLEAN PROCEDURE FORMATPHRASE; FORWARD; %W4003056600
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(R); VALUE R; REAL R; FORWARD; %M03083000
PROCEDURE HANDLETHETAILENDOFAREADORSPACESTATEMENT; FORWARD; 03084000
ALPHA PROCEDURE BUGGER(S); VALUE S; INTEGER S; FORWARD; 03100000
% %A03200000
% %A03201000
% %A03202000
PROCEDURE GENLIST; FORWARD; %A03203000
PROCEDURE SYMINT; FORWARD; %A03204000
PROCEDURE CONSIT; FORWARD; %A03205000
PROCEDURE PANSYM(MARK,TWOARG); VALUE MARK,TWOARG; BOOLEAN %A03206000
MARK,TWOARG; FORWARD; %A03207000
REAL PROCEDURE SYMPRIM(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03208000
REAL PROCEDURE SEXP; FORWARD; %A03209000
PROCEDURE SYMVAR(FROM); VALUE FROM; BOOLEAN FROM; FORWARD; %A03210000
REAL PROCEDURE MKCHAIN(FROM); VALUE FROM; BOOLEAN FROM; FORWARD; %A03211000
REAL PROCEDURE GENQUOTE(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03212000
REAL PROCEDURE MKNUM(R); VALUE R; REAL R; FORWARD; %A03213000
REAL PROCEDURE RSEXP; FORWARD; %A03214000
REAL PROCEDURE PORV; FORWARD; %A03215000
REAL PROCEDURE SNORM(R); VALUE R; REAL R; FORWARD; %A03216000
PROCEDURE SDNORM(R); VALUE R; REAL R; FORWARD; %A03217000
PROCEDURE FIELDC(EL,PR,FROM); VALUE EL,PR,FROM; REAL EL,PR; %A03218000
BOOLEAN FROM; FORWARD; %A03219000
PROCEDURE RECOM(R); VALUE R; REAL R; FORWARD; %A03220000
PROCEDURE GENRECORD(R,B); VALUE R,B; REAL R; BOOLEAN B; FORWARD; %A03222000
PROCEDURE RECVAR(FROM); VALUE FROM; BOOLEAN FROM; FORWARD; %A03223000
PROCEDURE REXP; FORWARD; %A03224000
REAL PROCEDURE PLXPRIM(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03225000
PROCEDURE PLXNORM(R,BV); %A03226000
VALUE R,BV; %A03227000
REAL R; %A03228000
BOOLEAN BV; FORWARD; %A03229000
REAL PROCEDURE PLXINT(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03230000
REAL PROCEDURE PANPLX(V,A); VALUE V,A; BOOLEAN V,A; FORWARD; %A03231000
INTEGER PROCEDURE PLXSEC(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03232000
INTEGER PROCEDURE PLXP(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03233000
PROCEDURE DBLPLXP(TYPE); VALUE TYPE; REAL TYPE; FORWARD; %A03234000
PROCEDURE PLXPN(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03235000
PROCEDURE PANDBL(V); VALUE V; BOOLEAN V; FORWARD; %A03236000
PROCEDURE EMITCONVAL; FORWARD; %A03237000
PROCEDURE IFXP(R); VALUE R; REAL R; FORWARD; %A03238000
PROCEDURE GENEXP(R); VALUE R; REAL R; FORWARD; %A03239000
BOOLEAN PROCEDURE ARAY(TALL,WDS,ROWTOG); %A03240000
VALUE TALL,WDS,ROWTOG; %A03241000
REAL TALL,WDS; BOOLEAN ROWTOG; FORWARD; %A03242000
REAL PROCEDURE GNATI(R); VALUE R; REAL R; FORWARD; %A03243000
REAL PROCEDURE GNATA(R); VALUE R; REAL R; FORWARD; %A03244000
REAL PROCEDURE TEMP(R); VALUE R; REAL R; FORWARD; %A03245000
REAL PROCEDURE GNATP(K); VALUE K; REAL K; FORWARD; %A03246000
REAL PROCEDURE GNATR(T); VALUE T; REAL T; FORWARD; %A03247000
PROCEDURE DBLPLXVAR(FROM); VALUE FROM; BOOLEAN FROM; FORWARD; %A03248000
PROCEDURE DBLPRIM; FORWARD; %A03249000
PROCEDURE DBLSEC; FORWARD; %A03250000
PROCEDURE DBLINT; FORWARD; %A03251000
PROCEDURE DBLXP; FORWARD; %A03252000
BOOLEAN PROCEDURE RECRELATION(TYPE); VALUE TYPE; REAL TYPE; %A03253000
FORWARD; %A03254000
BOOLEAN PROCEDURE DBLRELATION; FORWARD; %A03255000
BOOLEAN PROCEDURE PLXRELATION; FORWARD; %A03256000
BOOLEAN PROCEDURE DBLPLXRELATION; FORWARD; %A03257000
BOOLEAN PROCEDURE SYMRELATION(TYPE); VALUE TYPE; REAL TYPE;FORWARD; %A03258000
PROCEDURE BOOINT; FORWARD; %A03259000
PROCEDURE NVALINT; FORWARD; %A03260000
PROCEDURE STRINGSEC(FROM); VALUE FROM; REAL FROM; FORWARD; %A03261000
PROCEDURE STRINGVAR(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03262000
PROCEDURE STRINGXP(DSV,NLP); VALUE DSV,NLP; %A03263000
BOOLEAN NLP; REAL DSV; FORWARD; %A03264000
PROCEDURE PUTADR(P,R); VALUE P,R; REAL R,P; FORWARD; %A03265000
PROCEDURE DBLSTO(BV,J,OPER); VALUE BV,J,OPER; BOOLEAN BV; %A03266000
INTEGER J,OPER; FORWARD ; %A03267000
PROCEDURE SIMPDBL; FORWARD; %A03268000
INTEGER PROCEDURE SIMPLX(R,BV); VALUE R,BV; INTEGER R; BOOLEAN BV; %A03269000
FORWARD; %A03270000
PROCEDURE CHKSOB; FORWARD; %A03271000
PROCEDURE EMITDACOM(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03272000
PROCEDURE FIXRECORD(R,A); VALUE R,A; REAL R,A; FORWARD; %A03273000
REAL PROCEDURE SFTERM(BV); VALUE BV; BOOLEAN BV; FORWARD; %A03274000
PROCEDURE SFEXP(TOP,FT,BL) ; VALUE TOP,FT,BL;% %A03275000
BOOLEAN TOP,FT; REAL BL; FORWARD;% %A03276000
PROCEDURE EMITNONX; FORWARD; %A03277000
PROCEDURE ACTUALPARAPART(FBIT,SBIT,INDEX); %A03278000
VALUE FBIT,SBIT,INDEX; BOOLEAN FBIT,SBIT; INTEGER INDEX; %A03279000
FORWARD; %A03280000
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
(APROXIMATELY 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; 3(DS:=8LIT" "); SI:=LOC SEQ; SI:=SI+4; DS:=4 CHR; %T9304132000
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
37(DS:= 2 LIT " "); %T9304137000
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 REAL(BOOLEAN(INFO[0,255-N])EQV BOOLEAN(C)) %W0304209000
= REAL(NOT FALSE) THEN GO TO FOUND; %W0304209500
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
04249000
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
BEGIN %B04278100
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B04278200
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,BUG,B2D(L),COP[S.[42:6]],B2D(S.[36:6]),B2D(S)) 04280000
%0104281000
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,BUG,B2D(L),IF T1~S.[46:2]!1THEN WOP[T1] ELSE 04285000
BUGGER(S.[36:10]),IF T1=1THEN WOP[T1] ELSE 04286000
B2D(S.[36:10]),B2D(S));% %0104287000
END; %B04287500
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 <4093 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 COMPUTE 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
04557000
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 04609010
IF LEVEL > SUBLEVEL+1 THEN 04609020
BEGIN 04609030
EMIT(0); 04609040
EMITPAIR(A, STD); 04609050
END; 04609060
EMITN(A); 04609070
END CHECKDISJOINT; 04609080
PROCEDURE EMITDIAL(A,B); VALUE A,B; INTEGER A,B; %A04610000
EMIT(B~A + (B DIV 6)|512 + (B MOD 6)|64); %A04611000
% %A04612000
PROCEDURE EMITFC(A,B); VALUE A,B; INTEGER A,B; %A04613000
EMIT(B ~ A + 64|B); %A04614000
% %A04615000
PROCEDURE EMITFB(TYPE,LENGTH,FROM,TOWARDS); %A04616000
VALUE TYPE,LENGTH,FROM,TOWARDS; %A04617000
INTEGER TYPE,LENGTH,FROM,TOWARDS; %A04618000
BEGIN INTEGER TL; TL ~ L; %A04619000
L ~ FROM - 2; %A04620000
EMITNUM(ABS(TOWARDS-FROM)); %A04621000
EMIT(TYPE~ LENGTH|256 + TYPE|64 + 41); L ~ TL END; %A04622000
% %A04623000
PROCEDURE DBLTSNGL(R); VALUE R; REAL R; %A04624000
BEGIN %A04625000
DEFINE STARTBLOCK = #; 04625500
EMIT(0); EMITNUM(1.0); EMITO( ML2); EMITO(XCH); EMITO(DEL); %A04626000
IF R > 4 THEN BEGIN EMITPAIR(JUNK,STD); EMIT(0); EMITNUM(1.0); %A04627000
EMITO(ML2); EMITO(XCH); EMITO(DEL); EMITV(JUNK) END; %A04628000
END; %A04629000
% %A04630000
PROCEDURE DBLNORM; %A04631000
BEGIN EMIT(0); EMITNUM(1.0); EMITO( ML2) END; %A04632000
% %A04633000
PROCEDURE MARKDESC(N); VALUE N; REAL N; %A04634000
BEGIN DEFINE STARTBLOCK = #; 04634500
IF RECLAIMTOG THEN BEGIN %A04635000
EMIT(11); EMIT(4); EMITO(280);% %A04636000
EMITV(TABLEMARK); %A04637000
IF N ! 0 THEN BEGIN %A04638000
EMITL(ABS(N)); %A04639000
EMITO(IF N < 0 THEN SUB ELSE ADD); %A04640000
EMITPAIR(TABLEMARK,SND); %A04641000
END; %A04642000
EMITN(PTABLE); EMITO(STD); END; %A04643000
END; % 04643500
% %A04644000
PROCEDURE MARKSYMNCR(N); VALUE N; REAL N; %A04645000
BEGIN DEFINE STARTBLOCK = #; 04645500
IF RECLAIMTOG THEN BEGIN IF N ! 0 THEN BEGIN %A04646000
EMITV(TABLEMARK); EMITL(ABS(N)); %A04647000
EMITO(IF N < 0 THEN SUB ELSE ADD); %A04648000
EMITPAIR(TABLEMARK,SND) END ELSE EMITV(TABLEMARK); %A04649000
EMITN(PTABLE); EMITO(SND); END; %A04650000
END; % 04650500
% %A04651000
PROCEDURE MARKSYMDCR(N); VALUE N; REAL N; %A04652000
BEGIN DEFINE STARTBLOCK = #; 04652500
IF N ! 0 AND RECLAIMTOG THEN BEGIN %A04653000
EMITV(TABLEMARK); EMITL(ABS(N)); %A04654000
EMITO(IF N < 0 THEN SUB ELSE ADD); %A04655000
EMITPAIR(TABLEMARK,STD); END; %A04656000
END; % 04656500
% %A04657000
PROCEDURE GETCONTENTS(R,V); VALUE R,V; REAL R; BOOLEAN V; %A04658000
BEGIN INTEGER K; %A04659000
STACKCT ~ 1; %A04660000
EMITO(DUP); EMITI(0,K~39-R|15,9); EMITO(XCH); %A04661000
EMITI(0,K~33-R|15,6); EMITN(LNKA); EMITO(LOD); EMITO(XCH); %A04662000
EMITO(IF V THEN CDC ELSE COC) END; %A04663000
% %A04664000
PROCEDURE EMITERR(SG,RELAD,NO); VALUE SG,RELAD,NO ; %A04665000
INTEGER SG,RELAD,NO; %A04666000
BEGIN RELAD ~ (RELAD + 3) DIV 4; %A04667000
EMITPAIR(5,BFC); EMITO(MKS); %A04668000
EMITL(SG); EMITL(RELAD); EMITL(NO); %A04669000
EMITV(ERRPRO); END; %A04670000
% %A04671000
PROCEDURE EMITREL(X); VALUE X; REAL X; %A04672000
BEGIN REAL T; %A04673000
EMITV(IF BOOLEAN(L.[46:1]) THEN CPLUS2 ELSE CPLUS1); %A04674000
T ~ BUMPL; %A04675000
EMITWORD(X); %A04676000
EMITB(BFW,T,L); %A04677000
END OF EMITREL; %A04678000
% %A04679000
PROCEDURE EMITCREL(N,T); VALUE N,T; REAL T,N; %A04680000
BEGIN %A04681000
INTEGER J,TL; %A04682000
EMITWORD(N); %A04683000
TL ~ L - 4; %A04684000
L ~ T - 1; %A04685000
EMITV(J~((L-TL+3) DIV 4) + 768); %A04686000
L ~ TL + 4; %A04687000
END OF EMITCREL; %A04688000
% %A04689000
PROCEDURE EMITARRAY(ADR,S,R,SAVETOG); VALUE ADR,S,R,SAVETOG; %A04690000
REAL ADR,S,R; BOOLEAN SAVETOG; %A04691000
BEGIN %A04692000
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B04692500
NOOFARRAYS ~ NOOFARRAYS + 1; %A04693000
EMITO(MKS); %A04694000
EMITN(ADR); %A04695000
EMITL(S); %A04696000
IF R ! 0 THEN EMITL(R); %A04697000
EMITL(REAL(R!0) + 1); %A04698000
EMITL(1); %A04699000
EMITL(REAL(SAVETOG)); %A04700000
EMITV(5); %A04701000
END OF EMITARRAY; %A04702000
% %A04703000
PROCEDURE EMITATN; %A04704000
BEGIN EMITO(MKS); EMITV(ATN) END; %A04705000
% %A04706000
PROCEDURE TRPRI; %A04707000
BEGIN EMITO(MKS); EMITV(TERPRIN); END; %A04708000
% %A04709000
PROCEDURE GENSYMLINK; %A04710000
BEGIN EMITO(MKS); EMITV(GENLINK); END ; %A04711000
% %A04712000
REAL PROCEDURE GETPC(R); VALUE R; REAL R; %A04713000
GETPC ~ IF BOOLEAN (R) THEN %A04714000
EDC[R.[36:4],R.[40:7]].[30:18] ELSE %A04715000
EDC[R.[36:4],R.[40:7]].[12:18]; %A04716000
% %A04717000
PROCEDURE EMT(X); VALUE X; REAL X; %A04718000
BEGIN %A04719000
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B04719500
IF BOOLEAN(LC) THEN %A04720000
EDC[LC.[36:4],LC.[40:7]].[30:18] ~ X ELSE %A04721000
EDC[LC.[36:4],LC.[40:7]].[12:18] ~ X; %A04722000
IF LC ! 2046 THEN IF LC ~ LC + 1 = 2046 THEN BEGIN %A04723000
FLAG(603); %A04724000
ERRORTOG~ TRUE END; END OF EMT; %A04725000
% %A04726000
PROCEDURE EC(X,Y); VALUE X,Y; REAL X,Y; EMT(Y&X[36:42:6]); %A04727000
% %A04728000
PROCEDURE ECR(X,Y); VALUE X,Y; REAL X,Y; %A04729000
BEGIN %A04730000
EMT(Y&X[36:42:6] & 1 [30:42:6]); %A04731000
IF X > 63 THEN BEGIN %A04732000
FLAG(604); %A04733000
ERRORTOG~ TRUE END END OF ECR; %A04734000
% %A04735000
PROCEDURE EMD(A,B); VALUE A,B; REAL A,B; %A04736000
BEGIN EMIT(0); ECR(B,SES); %A04737000
EC(6,SFS); ECR(A,SED); EC(7,SFD); EC(1,TRS); %A04738000
END OF EMD; %A04739000
% %A04740000
PROCEDURE EJ(T); VALUE T; REAL T; %A04741000
BEGIN EMT(JMPCH & T [30:42:6]); JMPCH ~ LC END; %A04742000
% %A04743000
PROCEDURE EMITJUMP(BV); VALUE BV; BOOLEAN BV; %A04744000
BEGIN LABEL EXIT; %A04745000
REAL JF; %A04745500
REAL R,P,T; %A04746000
T ~ P ~ LC; %A04747000
WHILE JMPCH ! 0 DO BEGIN %A04748000
R ~ GETPC(LC ~ JMPCH - 1); %A04749000
JF ~ R .[30:6]; %A04750000
IF BV THEN JF ~ IF JF=JFW THEN JNS ELSE JNC; %A04751000
IF T - JMPCH > 63 THEN %A04752000
IF T - P > 63 THEN BEGIN %A04753000
FLAG(604); %A04754000
ERRORTOG ~ TRUE; GO EXIT END ELSE %A04755000
EC(T-P,JF) ELSE EC(T-JMPCH,JF); %A04756000
P ~ LC - 1; %A04757000
JMPCH ~ R.[36:12]; END; %A04758000
LC ~ T; %A04759000
EXIT: %A04760000
END OF EMITJUMP ; %A04761000
% %A04762000
PROCEDURE EMTC; %A04763000
BEGIN REAL T,R; %A04764000
LC ~ LC - 1; STK ~ STK + 1; %A04765000
IF GET(L-1) = 289 THEN BEGIN % MKS %A04765100
EMIT(0); STK ~ STK + 1 END; %A04765200
EMITO(ECM); STREAMTOG ~ TRUE; %A04766000
FOR R ~ 0 STEP 1 UNTIL LC DO BEGIN %A04767000
IF BOOLEAN((T~GETPC(R)).[35:1]) THEN %A04768000
EMIT(T & (STK - T.[36:6])[36:42:6]) ELSE EMIT(T) %A04769000
END; %A04770000
EMITC(1,0); STREAMTOG ~ FALSE; %A04771000
END OF EMTC; %A04772000
% %A04773000
PROCEDURE MKALF(EL); VALUE EL; REAL EL; %A04774000
BEGIN REAL T,R,S; %A04775000
MOVECHARACTERS(IF S~TAKE(R~EL.LINK+1).[12:6]>7 THEN S~7 ELSE S, %A04776000
INFO[R.LINKR,R.LINKC],3,T,8-S); EMITNUM(T) %A04777000
END; %A04778000
COMMENT THIS SECTION CONTAINS MISCELLANEOUS SERVICE ROUTINES; 05000000
COMMENT STEPI AND STEPIT ARE SHORT CALLS ON TABLE; 05001000
COMMENT TO HANDLE PARA DEFINES MOVE STEPI W27; %60 %W2705002000
%W2705003000
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 SUPPRESS 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 (P,C,A,E1,N,M,R,D,L); % %T1405016000
VALUE C, N,M,R,D ; % %T1405017000
BEGIN % %T1405018000
SI~P ; DI~P ; DS~8 LIT " " ; DS~14 WDS ; % %T1405019000
SI~LOC R;DI~DI-3;DS~3DEC;DI~DI+1;SI~L;DS~WDS;% %T1405019500
DI~P ; DS~13 LIT "ERROR IN COL "; SI~LOC C ; DS~2 DEC ; DS~LIT ":" ;%T1405020000
DI~DI+32 ; DI~DI+40 ; SI~L ; SI~SI-8 ; DS~WDS ; % %T1405021000
DI~L ; DI~DI-8 ; DS~WDS ; % %T1405022000
% %T1405023000
DI~E1 ; DI~DI+M ; % %T1405025000
SI ~ A; SI ~ SI + 3; D(N( IF SC=ALPHA THEN DS~CHR ELSE %T1405026000
IF SC="}" THEN BEGIN DS~LIT "$";SI~SI+1;END ELSE %T1405026010
IF SC="!" THEN BEGIN DS~LIT "$";SI~SI+1;END ELSE %T1405026020
IF SC="~" THEN BEGIN DS~LIT "$";SI~SI+1;END ELSE %T1405026030
IF SC="{" THEN BEGIN DS~LIT "$";SI~SI+1;END ELSE %T1405026040
IF SC="<" THEN BEGIN DS~LIT "$";SI~SI+1;END ELSE %T1405026050
IF SC=">" THEN BEGIN DS~LIT "$";SI~SI+1;END ELSE %T1405026060
DS ~ CHR); JUMP OUT TO LL1); DS~N CHR; LL1: %T1405026500
D(DS :=2LIT" #"; SI:= LOC R; DS := 3 DEC; % %T1405026900
DS ~ LIT "~"; SI ~ L; DI ~ P; DS ~ WDS; DS ~ LIT ":"); % %T1405027000
END WRITERROR; % %T1405028000
DEFINE TESTIT = IF LISTOG OR NOT(REMOTOG OR REMOTERR) THEN BEGIN#; %T1405028990
REAL R1,R2,R3,R4,R5; % %T1405029000
BOOLEAN STREAM PROCEDURE TESTBIT(B,V); VALUE V; % %T1405030000
BEGIN SI:=B; SKIP V SB; IF SB THEN TALLY := 1 ELSE BEGIN % %T1405031000
DI:=B; SKIP V DB; DS:=SET; END; TESTBIT:=TALLY; END; % TESTBIT %T1405031100
IF ERRORTOG 05032000
THEN BEGIN COMMENT DO NOTHING IF WE SUPPRESS MSSGS;05033000
SPECTOG ~ FALSE; 05034000
ERRORCOUNT ~ ERRORCOUNT+1; COMMENT COUNT ERRORS; 05035000
IF NOT LISTOG AND NOT (REMOTOG OR REMOTERR) % %T1405036000
THEN BEGIN 05037000
PRINT(LIN,FCR," ",IF LASTUSED=6 THEN FILEINX+17 05038000
ELSE IF LASTUSED=3 THEN"T"ELSE IF LASTUSED=2 OR 05038500
LASTUSED=5 THEN"R"ELSE 48); 05039000
MOVE(1,INFO[LASTSEQROW,LASTSEQUENCE],LIN[12]); 05039500
IF NOTPNTED THEN PERMLINE(NOHEADING) ; 05039600
WRITELINE; 05040000
END; 05041000
COMMENT PRINT CARDIMAGE IF WE ARE NOT LISTING; 05042000
ACCUM[1] ~ Q; COMMENT RESTORE ACCUMULATOR; 05043000
% %T1405043100
% %T1405043200
% %T1405043300
% %T1405043400
IF DEFINEINDEX = 0 THEN R2 ~ NCR ELSE % %T1405044000
MOVECHARACTERS(3,DEFINEARRAY[2],5,R2,5);% %T1405044050
R1 ~ R2.[33:15] - FCR ; % %T1405044100
R2 ~ R2.[30:3] ; % %T1405044200
IF R3 ~ R1 | 8 + R2 } 72 THEN R3 ~ 71 ; % %T1405044400
R5 ~ MIN (Q.[12:6],31) ; % %T1405044450
IF NOT (REMOTOG OR REMOTERR) THEN % %T1405044475
R4 ~ IF R3+R5 { 71 THEN R3 ELSE R3-R5; % %T1405044500
R3 ~ R3 + 1 ; % %T1405044550
WRITERROR (LIN,R3,ACCUM[1],LIN[R4 DIV 8 + 2],R5,R4.[45:3],ERRNUM, % %T1405044900
(REMOTOG OR REMOTERR) AND TRUE, % %T1405044950
INFO[LASTSEQROW,LASTSEQUENCE]); 05045000
% %T1405045100
% %T1405045200
% %T1405045300
% %T1405045400
IF REMOTOG OR REMOTERR THEN WRITE(REMOTE[*,9],9,LIN[*])[ENDOFITALL];%T1405045900
TESTIT WRITELINE; END; % %T1405046000
IF ERRNUM ! PERR THEN READ (ERMDF[PERR ~ ERRNUM],15,ERARA [*]); % %T1405046400
TESTIT WRITE(LINE,15,ERARA[*]); END; % %T1405046600
IF REMOTOG OR REMOTERR THEN IF NOT TESTBIT(BITS[ERRNUM DIV 48], % %T1405046650
ENTIER(ERRNUM MOD 48)) THEN WRITE(REMOTE[*,9],9,ERARA[*]) % %T1405046700
[ENDOFITALL]; % %T1405046705
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
05061000
05062000
05063000
05064000
05065000
05066000
05067000
05068000
05069000
05070000
05071000
05072000
05073000
05074000
05075000
05076000
05077000
05078000
05079000
05080000
05081000
05082000
05083000
05084000
05085000
05086000
05087000
05088000
05089000
05090000
05091000
05092000
05093000
05094000
05095000
05096000
05097000
05098000
05099000
05100000
; IF ERRORCOUNT > ERRORMAX THEN GO ENDOFITALL; % %T9805100005
END END FLAG; 05101000
% %T1405101100
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=200THEN AKKUM~AKKUM+1024+L~0;% %0705107100
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 L = XTOTHEI THEN PUTADR(XTOTHEI,GNAT~140) ELSE %M05130050
IF L = POWERSOFTEN THEN PUTADR(POWERSOFTEN,GNAT~105) ELSE %A05130100
IF (A ~ TAKE(L)).CLASS = 20 AND A.[33:2] ! 0 THEN BEGIN %M05130200
IF GNAT ~ A.ADDRESS = 0 THEN BEGIN %M05130300
IF A ~ TAKE(L.LINK + A.[33:2]).[3:6] = 0 THEN %M05130400
A:=GETSPACE(TRUE,L.LINK+1); PUTADR(L,GNAT:=A) END END ELSE%M05130500
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 MEYERS; 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 DESC 05187500
TO TOP OF STACK FOR A SUBSCRIPTED LIST ID OR SIMPLE ID; 05187510
PROCEDURE PASTOLIST; 05187520
BEGIN 05187530
INTEGER LISTADDRESS; 05187540
COMMENT PASSLIST ASSUMES I POINTING AT LIST ID; 05187550
CHECKER(ELBAT[I]); 05187560
LISTADDRESS~ELBAT[I].ADDRESS; 05187570
IF ELCLASS = SUPERLISTID 05187580
THEN BEGIN COMMENT SUBSCRIPTED LIST ID; 05187590
BANA; EMITN(LISTADDRESS); EMITO(LOD); 05187600
END 05187610
ELSE BEGIN 05187620
IF LISTADDRESS<512 OR 05187630
LISTADDRESS>1023 THEN 05187640
BEGIN EMITL(LISTADDRESS); 05187650
EMITN(10); 05187660
END 05187670
ELSE BEGIN 05187680
IF LISTADDRESS<896 THEN 05187690
EMITL(LISTADDRESS-512) 05187700
ELSE BEGIN EMITL(LISTADDRESS- 05187710
897); EMITO(LNG) 05187720
END; 05187730
EMITN(512); EMITO(INX); 05187800
END; 05187810
STEPIT; 05187820
END; 05187830
END OF PASSTOLIST; 05187840
DEFINE % %4105188000
TAKEFRST = TAKE(ELBAT[I].LINK+ELBAT[I].INCR)#; %T9305189000
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
DEFINE STREAMWORDS = % %4105230000
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. %4105236000
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 = LFTBRKET THEN 05274000
IF STEPI = LITNO THEN 05275000
IF STEPI = COLON THEN 05276000
IF STEPI = LITNO THEN 05277000
IF STEPI = RTBRKET THEN 05278000
COMMENT IF TESTS ARE PASSED THEN SYNTAX IS CORRECT; 05279000
IF (FIRST ~ ELBAT[I-3].ADDRESS) | 05280000
(SECOND ~ ELBAT[I-1].ADDRESS)!0 THEN 05281000
IF FIRST + SECOND { 48 THEN 05282000
COMMENT IF TESTS ARE PASSED THEN RANGES OF LITERALS ARE O.K.; 05283000
GO TO EXIT; 05284000
ERR(114); COMMENT ERROR IF SYNTAX OR RANGE FAILS; 05285000
DOTSYNTAX ~ TRUE; EXIT: END DOTSYNTAX; 05286000
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 NOTPNTED THEN PERMLINE(REAL(LISTOG)=3); WRITELINE; %T9305325490
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
LABEL L3; %M05334100
REAL GSO,CONSEC; %M05334200
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
COMMENT MOREWORDS =1 IF DOUBLE OR COMPLEX %M05344100
=3 IF DOUBLE COMPLEX; %M05344200
IF PERMANENT 05345000
THEN BEGIN 05346000
IF PRTIMAX+MOREWORDS>1023 THEN FLAG(148); %M05347000
SPRT[GS~PRTIMAX.[38:5]] ~ MASK(PRTIMAX.[43:5]-35) 05348000
OR SPRT[GS]; 05349000
PRTIMAX~(GS~PRTIMAX)+MOREWORDS+1 END %M05350000
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 L3: %M05356000
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 MOREWORDS!0 THEN BEGIN %M05367650
IF CONSEC=0 THEN BEGIN GSO~GS; CONSEC ~ 1; GO TO L3 END; %M05367700
IF GS-GSO! 1 THEN BEGIN CONSEC~0; GO TO L3 END; %M05367750
IF CONSEC<MOREWORDS THEN BEGIN CONSEC~CONSEC+1; %M05367800
GSO~GS; GO TO L3 END; %M05367850
GS ~ GS - MOREWORDS END; %M05367900
IF PRTI > PRTIMAX THEN PRTIMAX ~ PRTI END 05368000
ELSE BEGIN 05369000
IF STACKCTR+MOREWORDS>767 THEN FLAG(149); %M05370000
STACKCTR~(GS~STACKCTR)+MOREWORDS+1; Q ~FALSE; %M05371000
GO TO EXIT END; 05372000
L2: IF GS } 512 THEN GS ~ GS+1024; 05373000
Q ~ TRUE; 05374000
EXIT: GETSPACE ~ GS; 05375000
IF MARKSYM THEN BEGIN JUMPCHKX; EMITN(GS); %M05375100
IF NOT (PERMANENT OR SOPG) THEN BEGIN EMITO(DUP); %M05375125
EMIT(0); EMITO(XCH); EMITO(STD) END; %M05375150
IF PERMANENT THEN EMITNUM(TABLEMARKV~TABLEMARKV+1) ELSE %M05375200
BEGIN EMITV(TABLEMARK); EMITL(1); EMITO(ADD); %M05375300
EMITPAIR(TABLEMARK,SND); END; EMITN(PTABLE); %M05375400
EMITO(STD); %A05375500
IF NOT PERMANENT THEN SYMLOC ~ SYMLOC + 1 END; %A05375600
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 PARAMETER-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
BEGIN %B05389100
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B05389200
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
END; %B05393500
COMMENT OUTPROCHECK CHECKS SORT/MERGE OUTPUT PROCEDURE; 05394000
BOOLEAN PROCEDURE OUTPROCHECK(ELBW); VALUE ELBW; REAL ELBW; 05395000
BEGIN %B05395100
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B05395200
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
END; %B05400500
COMMENT EQLESCHECK CHECKS THE COMPARE ROUTINE FOR SORT/MERGE; 05401000
BOOLEAN PROCEDURE EQLESCHECK(ELBW); VALUE ELBW; REAL ELBW; 05402000
BEGIN %B05402100
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B05402200
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
END; %B05407500
PROCEDURE ALFP(V); VALUE V ; REAL V; %A05408000
BEGIN REAL T; %A05409000
EMITO(MKS); %A05410000
EMITV(IF BOOLEAN(L.[46:1]) THEN CPLUS2 %A05411000
ELSE CPLUS1); %A05412000
T ~ BUMPL; %A05413000
EMITWORD(V); %A05414000
EMITB(BFW,T,L); %A05414500
EMITV(ALFPRINT); %A05415000
END OF ALFP; %A05416000
% %A05417000
PROCEDURE ARGLIST(TALL); VALUE TALL; REAL TALL; %A05418000
BEGIN REAL N,J,S,T; INTEGER R,K; %A05419000
DEFINE FP2 = 514#; %A05419500
EMITO(MKS); %A05420000
IF N ~ TAKE(J~ GIT(TALL)) ! 0 THEN BEGIN %A05421000
R ~ 2 | N + 3; %A05422000
FOR S ~ 1 STEP 1 UNTIL N DO %A05423000
IF BOOLEAN((T~TAKE(J+S)).VO) AND %A05424000
(K ~ T.CLASS = SYMID OR %A05425000
K = REALID OR K = BOOID) THEN BEGIN %A05426000
EMITL(T.ADDRESS + R); %A05427000
EMITL(IF K = REALID THEN 0 ELSE %A05428000
IF K = BOOID THEN 2 ELSE 4) END %A05429000
ELSE BEGIN EMITL(FP2); EMITL(6); END; %A05430000
END; %A05431000
MKALF(TALL); %A05432000
EMITL(N); %A05433000
EMITV(MONPRO); %A05434000
END OF ARGLIST; %A05435000
% %A05436000
PROCEDURE CHKND; %A05437000
IF NCR = LCR THEN BEGIN %A05438000
READACARD; %A05439000
IF LIBINDEX ! 0 THEN %A05440000
IF RECOUNT = FINISHPT THEN BEGIN %A05441000
SEARCHLIB(FALSE); READACARD; %A05442000
NORELEASE ~ FALSE END END; %A05443000
% %A05444000
BOOLEAN PROCEDURE DECLCHECK; %A05445000
DECLCHECK ~ IF ELBAT[I].ADDRESS=DOUBLEV AND %A05446000
ELCLASS = DECLARATORS THEN %A05446500
TABLE(I+1)! LEFTPAREN ELSE TRUE; %A05447000
% %A05448000
REAL PROCEDURE FORAD; %A05449000
BEGIN REAL VRET; %A05450000
FORLEVEL ~ FORLEVEL + 1 + REAL(RECLAIMTOG); %A05450500
IF MODE = 0 OR MARKSYM THEN BEGIN %A05451000
IF FORAD ~ FRD[ FRLEVEL].[11:11] = 0 THEN %A05452000
FRD[FRLEVEL].[11:11] := (FORAD:=GETSPACE(TRUE,-1)) END ELSE %T9305453000
BEGIN IF FORAD ~ (VRET ~ FRD[ FRLEVEL]).[22:11] = 0 OR %A05454000
VRET.[33:15] ! SGNO THEN %A05455000
FRD[ FRLEVEL] ~ VRET & SGNO[33:33:15] & %A05456000
(FORAD := GETSPACE(FALSE,-1))[22:37:11] END; %T9305457000
END OF FORAD; %A05458000
% %A05459000
INTEGER PROCEDURE GETLIT(B); VALUE B; REAL B; %A05460000
IF STEPI = LITNO OR ELCLASS = NONLITNO THEN BEGIN %A05461000
IF GETLIT ~ C > B THEN FLAG(605); STEPIT END ELSE ERR(605); %A05462000
% %A05463000
REAL PROCEDURE GETYPE(T); VALUE T; REAL T; %A05464000
GETYPE ~ TAKE(((TAKE((T ~ T.LINK)+1).[12:6]+18) DIV 8) + T); %A05465000
% %A05466000
PROCEDURE LITF(B); VALUE B; REAL B; %A05467000
BEGIN %A05468000
REAL R; %T9005468500
SLT ~ FALSE; %A05469000
IF STEPI = LEFTPAREN THEN BEGIN %A05470000
QUOTETOG~FALSE; STEPIT; R~ACCUM[1]; %T9005471000
IF ELCLASS=LITNO AND TABLE(I+1)=RTPAREN THEN BEGIN %T9005472000
IF SL ~ ELBAT[I].ADDRESS > B OR SL = 0 THEN BEGIN %A05473000
FLAG(605); %A05474000
ERRORTOG ~ TRUE; SL ~ 1 END; %A05475000
STEPIT; STEPIT END ELSE %A05476000
BEGIN %A05477000
ACCUM[1] ~ R; %T9005477500
AEXP; EMITO(SSP); EMITPAIR(JUNK,ISN); %A05478000
SLT ~ TRUE; %A05479000
RTPARN END; %A05480000
QUOTETOG ~ TRUE; END ELSE SL ~ 1; %A05481000
END OF LITF; %A05482000
% %A05483000
BOOLEAN PROCEDURE LITP(T); INTEGER T; %A05484000
BEGIN REAL R,S; %A05485000
IF (ELCLASS = LITNO OR ELCLASS = NONLITNO %A05486000
OR ELCLASS = STRNGCON) THEN %A05487000
IF (S ~ C).[1:37] = 0 THEN %A05488000
IF LITP ~ R ~ TABLE(I+1) = COMMA OR R = RTPAREN THEN %A05489000
BEGIN T ~ S; STEPIT END ELSE C ~ S; END; %A05490000
% %A05491000
BOOLEAN PROCEDURE MAKEROW; %A05492000
IF ELCLASS < BOOARRAYID THEN STRINGVAR( TRUE) ELSE %A05493000
BEGIN VARIABLE(FL); %A05494000
MAKEROW ~ TABLE(I-2)! FACTOP END; %A05495000
% %A05496000
REAL PROCEDURE NEWP(T); VALUE T; REAL T; %A05497000
NEWP ~ IF TAKE(T.LINK+1).[2:2]=2 THEN 3 ELSE 1; %A05498000
% %A05499000
PROCEDURE NOGO; %A05500000
IF RECLAIMTOG THEN BEGIN FLAG(626); ERRORTOG ~ TRUE END; %A05501000
%A05502000
BOOLEAN PROCEDURE NOTCOMMA; %A05503000
IF NOTCOMMA ~ ELCLASS ! COMMA THEN %A05504000
ERR(606) ELSE STEPIT; %A05505000
% %A05506000
PROCEDURE PROPER(V); VALUE V; REAL V; %A05507000
BEGIN LABEL EXIT; %A05508000
% MEANING OF V: 0 - SYMBOL, 1 - RECORD, 2 - NUMBER %A05509000
IF STEPI ! LEFTPAREN THEN BEGIN %A05510000
ERR(105); GO EXIT END; %A05511000
QUOTETOG~ TRUE; %A05512000
EMITO(MKS); STEPIT; SEXPN; %A05513000
IF ELCLASS ! COMMA AND V < 2 THEN BEGIN %A05514000
ERR(606); GO EXIT END; %A05515000
IF V=0 THEN BEGIN EMITL(2); QUOTETOG ~ TRUE; %A05516000
STEPIT; SEXPN; QUOTETOG ~ FALSE END ELSE %A05517000
IF V = 1 THEN BEGIN EMIT(0); QUOTETOG ~ FALSE; %A05518000
IF STEPI ! DECLARATORS OR %A05519000
RECTYPE ~ ELBAT[I].ADDRESS < 30 THEN %A05520000
BEGIN RECTYPE ~ 0; %A05521000
ERR(608); GO EXIT END; %A05522000
EMITNUM(RECTYPE&1[32:47:1]); END ELSE %A05523000
BEGIN EMITL(1); EMITL(3); QUOTETOG ~ FALSE END; %A05524000
IF ELCLASS ! RTPAREN THEN ERR(104) ELSE STEPIT; %A05525000
EXIT: QUOTETOG ~ FALSE; RECTYPE ~ 0; %A05526000
EMITV(PROPA); %A05527000
END OF PROPER; %A05528000
% %A05529000
PROCEDURE PUTADR(P,R); VALUE P,R; REAL R,P; %A05530000
PUT(TAKE(P)&R[16:37:11],P); %A05531000
% %A05532000
PROCEDURE RCH(R,A,BV,B,T,OP); %A05533000
VALUE R,A,BV,B,T,OP; BOOLEAN R,BV; %A05534000
REAL A,B,T,OP; %A05535000
BEGIN %B05535100
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B05535200
IF R THEN BEGIN %A05536000
ECR(A,CRF); EC(0,OP); %A05537000
IF BV THEN BEGIN ECR(B,CRF); %A05538000
EC(3,BNS); EC(32,OP); %A05539000
EC(32,OP); EC(0,ENS); END END ELSE %A05540000
BEGIN %A05541000
IF B ~ T.[42:6] ! 0 THEN EC(B,OP); %A05542000
IF B ~ T.[36:6] ! 0 THEN BEGIN EC(B,BNS); EC(32,OP); EC(32,OP);%A05543000
EC(0,ENS) END %A05544000
END; %B05544500
END OF RCH; %A05545000
% %A05546000
BOOLEAN PROCEDURE ROWD(BV); VALUE BV; BOOLEAN BV; %A05547000
BEGIN IF BV THEN STEPIT; %A05548000
IF ELCLASS = RECARRAYID OR ELCLASS=SYMARRAYID THEN BEGIN %A05548100
ROWD ~ TRUE; %A05548150
ELBAT[I].CLASS ~ ELCLASS ~ REALARRAYID END ELSE %A05548200
ROWD ~ (ELCLASS} BOOARRAYID AND ELCLASS { INTARRAYID) %A05549000
OR ELCLASS= STRINGID OR ELCLASS = STRINGARRAYID END; %A05550000
% %A05551000
PROCEDURE SYMAC; %A05552000
BEGIN REAL T; %A05553000
I ~ I - 1; %A05554000
DO BEGIN %A05555000
IF STEPI = SYMID OR ELCLASS = SYMARRAYID OR %A05556000
ELCLASS = SYMPROCID THEN BEGIN %A05557000
PUT(-TAKE(T~ ELBAT[I]),T); %A05558000
PUTNBUMP(T & FACTOP [2:41:7] & (NEXTINFO-LASTINFO)[27:40:8]); %A05558100
LASTINFO ~ NEXTINFO - 1; %A05558150
STEPIT END %A05558200
ELSE ERR(406); %A05559000
END UNTIL ELCLASS ! COMMA; %A05560000
END OF SYMAC; %A05561000
% %A05562000
PROCEDURE SYMONITOR(BV,TALL,N,V); VALUE BV,TALL,N,V; %A05563000
BOOLEAN BV; REAL TALL,N,V; %A05564000
BEGIN %A05565000
% CALLS ON SYMONITOR: %A05566000
% SIMPLE VARIABLE SYMONITOR(TRUE,TALL,0,0) %A05567000
% SYMBOL PROCEDURE SYMONITOR(TRUE,TALL,0,5) %A05568000
% ARRAY SYMONITOR(FALSE,TALL,N,0) %A05569000
IF BV THEN EMITO(MKS); %A05570000
EMITV(JUNK); MKALF(TALL); %A05571000
EMITL(N); EMITL(V); %A05572000
EMITV(MONSYM); %A05573000
END OF SYMONITOR; %A05574000
% %A05575000
PROCEDURE CALLSF(R); VALUE R; REAL R; %A05586000
BEGIN REAL T,P; LABEL EXIT; %A05587000
CHECKER(R); EMITO(MKS); STEPIT; %A05587500
IF P ~ SFTRC.[15:11] ! 0 THEN BEGIN EMITV(P); %A05588000
T ~ BUMPL; EMITO(MKS); %A05589000
MKALF(R); EMIT(0); EMITV(MONPRO); %A05590000
EMITB(BFC,T,L) END; %A05590100
IF NOT BOOLEAN(R).FORMAL THEN %A05590200
IF TAKE(T~GIT(R)).[40:8]!0 THEN BEGIN %A05590300
IF ELCLASS ! LEFTPAREN THEN BEGIN ERR(128); GO EXIT END; %A05590400
ACTUALPARAPART(FALSE,FALSE,T); END; %A05590500
EMITV(R.ADDRESS); %A05591000
IF P!0 THEN BEGIN EMITV(P);T~BUMPL;EMITO(DUP);EMITI(0,46,2); %A05591500
EMITPAIR(JUNK,STD); SYMONITOR(TRUE,R,0,4); %T9305592000
EMITB(BFC,T,L) END; %A05593000
EXIT: %A05594000
END OF CALLSF; %A05595000
% %A05596000
PROCEDURE FIXCLASS(CL,AD,B); VALUE CL,AD,B; REAL CL,AD; %A05597000
BOOLEAN B; %A05598000
BEGIN REAL T;% %A05599000
IF B THEN% %A05601000
IF B.[46:1] THEN% %A05601100
IF STEPI ! LEFTPAREN THEN ERR(105) ELSE BEGIN% %A05601150
IF STEPI = FILEID THEN BEGIN% %A05601200
IF TAKE((T~ELBAT[I]).LINK+1).[2:2] = 0 THEN FLAG(662)% %A05601250
ELSE ADDRSF ~ TAKE(GIT(T)).[26:11];% %A05601300
AD ~ ADDRSF ~ IF AD = "8FREEL" THEN ADDRSF ELSE ADDRSF+1;% %A05601350
END ELSE% %A05601400
IF ELCLASS = DECLARATORS AND ELBAT[I].ADDRESS = SYMV% %A05601450
AND AD ! "8FREEL" AND SYMSTK THEN ADDRSF ~ AD ~ LNKROW% %A05601500
ELSE BEGIN ERR(662); I ~ I - 1 END;% %A05601550
IF STEPI ! RTPAREN THEN ERR(104) END ELSE% %A05601600
IF (T ~ ACCUM[1]).[12:6] = 5 THEN% %A05601650
IF T ~ T.[18:6] = "L" THEN AD ~ LMARG ELSE %A05602000
IF T = "R" THEN AD ~ RMARG ELSE ERR(100) ELSE %A05603000
IF T.[12:6] = 6 THEN %A05604000
IF T ~ T.[18:6] = "L" THEN AD ~ LMARGI ELSE %A05605000
IF T = "R" THEN AD ~ RMARGI ELSE ERR(100) %A05606000
ELSE ERR(100); %A05607000
ELCLASS ~ CL;% %A05607500
ELBAT[I] ~ ELBAT[I] & CL[2:41:7] & AD[16:37:11] %A05608000
END OF FIXCLASS; %A05609000
% %A05610000
PROCEDURE GTLSTAT; %A05611000
BEGIN REAL R; %A05612000
IF DACOMO = 0 THEN DACOMO := GETSPACE(TRUE,-6); %T9305613000
IF DAC[9] = 0 THEN BEGIN DAC[9] := GETSPACE(TRUE,-1); %T9305614000
IF DACP.LINK = 0 THEN FLAG(653); % %T9005619000
% %T9005620000
END; %A05620500
END OF GTLSTAT; %A05621000
% %A05622000
BOOLEAN PROCEDURE BASICMATRIX; %A05623000
BEGIN REAL A,B,T; LABEL LC,LR,EXIT; BASICMATRIX ~ TRUE; %A05624000
IF TAKE(GIT(A~ELBAT[I])).[40:8] = 2 THEN BEGIN %A05625000
EMITO(MKS); EMITPAIR(A.ADDRESS,LOD); BASICMATRIX ~ FALSE; %A05626000
IF STEPI ! ASSIGNOP THEN BEGIN ERR(717); GO EXIT END; %A05627000
IF STEPI = REALARRAYID THEN BEGIN %A05628000
IF TAKE(GIT(A~ELBAT[I])).[40:8] ! 2 THEN GO LR; %A05629000
EMITPAIR(A.ADDRESS,LOD); END ELSE %A05630000
IF ELCLASS = LITNO THEN T ~ MATINV ELSE BEGIN % %A05631000
EMIT (0); % %A05631100
IF T ~ ACCUM[0] = "3ZER00" THEN B ~ 64 ELSE % %A05631200
IF T = "3CON00" THEN B ~ 68 ELSE % %A05631300
IF T = "3IDN00" THEN B ~ 72 ELSE GO LR; % %A05631400
EMIT (B); % %A05631500
EMITV (5); % %A05631600
STEPIT; % %A05631700
GO EXIT; % %A05631800
END; % %A05631900
IF STEPI < ADOP THEN BEGIN EMIT(4); EMITO(XCH); B ~ 2; %T9005632000
IF T ! 0 THEN GO LR; T ~ MATDID; GO LC END; %A05633000
IF ELCLASS = FACTOP THEN T ~ MATTRN ELSE BEGIN %A05634000
IF ELCLASS = ADOP THEN BEGIN B ~ ELBAT[I].[21:1]; %A05635000
T ~ MATDID END ELSE %A05636000
IF BOOLEAN(ELBAT[I].[20:1]) THEN T ~ MATMUL ELSE %A05637000
IF T ! MATINV THEN GO LR; %A05638000
IF STEPI = REALARRAYID AND TABLE(I+1) ! LFTBRKET THEN BEGIN %A05639000
IF TAKE(GIT(A~ELBAT[I])).[40:8] ! 2 THEN GO LR; %A05640000
EMITPAIR(A.ADDRESS,LOD) END ELSE %A05641000
IF T = MATMUL THEN BEGIN PRIMARY; T ~ MATDID; B ~ 2; %A05642000
EMITO(XCH); GO LC END ELSE GO LR END; %A05643000
STEPIT; %A05644000
LC: IF T = MATDID THEN EMITL(B); EMITV(GNAT(T)); %A05645000
GO EXIT; %A05646000
LR: ERR(725) END; %A05647000
EXIT: END OF BASICMATRIX; %A05648000
% %A05649000
COMMENT ROUTINES IN THIS SECTION COMPILE CODE FOR ALL EXPRESSIONS;06000000
COMMENT AEXP IS THE ARITHMETIC EXPRESSION ROUTINE; 06001000
PROCEDURE AEXP; 06002000
BEGIN 06003000
IF ELCLASS=CROSSHATCH THEN BEGIN %W5206003200
STEPIT; SIMPARITH END ELSE %W5206003400
IF ELCLASS=CASEV THEN CASESTMT(7) ELSE %M06003500
IF ELCLASS = IFV 06004000
THEN IFXP(ATYPE) %M06005000
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; %A 06053500
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; 06059000
REAL R; DEFINE PUT = PUTADR#; %M06059500
LABEL ABS, SIGN, ENTIER, TIME, STATUS,% 06060000
L11,L12,L13,L14,L15,L16,L17,L20,L21,L22,L23,L24,L25,L26, %M06060025
L27,L30,L31,L32,L33,L34,L35,L36,RP,L37, %M06060050
MAXANDMIN, DELAY, OTHERS, EXIT;% 06060100
SWITCH S ~ ABS, SIGN, ENTIER, TIME, STATUS,% 06061000
MAXANDMIN,MAXANDMIN,DELAY,L11,L12,L13,L14,L15,L16,L17,L20, %M06061100
L21,L22,L23,L24,L25,L26,L27,L30,L31,L32,L33,L34,L35,L36,L37; %M06061150
DEFINE MAXV = 6#;% 06061200
GO TO S[ELBAT[I].[27:6]];% 06062000
OTHERS: T1 ~ ELBAT[I]; 06063000
EMITO(MKS); 06064000
PANA; 06065000
IF R ~ T1.ADDRESS = 0 THEN BEGIN %M06065100
IF R:=TAKE(T1.LINK+T1.[33:2]).[3:6] = 0 THEN %T9306065200
R := GETSPACE(TRUE,T1.LINK+1); %T9306065250
PUTADR(T1,R) END; %M06065300
EMITV(R); GO TO EXIT; %M06066000
ABS: IF STEPI! LEFTPAREN THEN BEGIN ERR(105);GO EXIT END ELSE STEPIT; %M06067000
T1 ~L; EMITO(NOP); IF PLXP(FALSE) <4 THEN EMITO(SSP) ELSE %M06067100
BEGIN R ~ L; L ~ T1; EMITO(MKS); L ~ R; EMITV(GNATP(8)); %M06067200
END; GO RP; %M06067300
SIGN: PANA; 06068000
EMITO(DUP); EMITL(0); EMITO(NEQ); EMITO(XCH); 06069000
EMITD(1,1,1); GO TO EXIT; 06070000
L11: IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %M06070010
EMITO(MKS); PLXPN(FALSE); EMITV(36); PUTADR(551,36); %M06070020
PUTADR(429,31); %M06070030
RP: IF ELCLASS! RTPAREN THEN ERR(104) ELSE STEPIT; GO EXIT; %M06070040
L12: EMITO(MKS); PANA; EMITV(26); FORTERR; PUT(554,26); PUT(452,25); %A06070050
GO TO EXIT; % %A06070055
L13: EMITO(MKS); PANA; EMITV(32); PUT(561,32); PUT(449,28); %A06070060
FORTERR; GO TO EXIT; % %A06070065
L14: EMITO(MKS);PANA; EMITV(GNAT(564));PUT(558,30); %M06070070
GO EXIT; %M06070080
L15: EMITO(MKS);PANA;FORTERR;PUT(554,26);EMITV(GNAT(567));GO EXIT; %A06070090
L16: T1 ~ ELBAT[I]; EMITO(MKS); PANA; PUT(440,27); %M06070100
FORTERR; %A06070105
EMITV(GNAT(T1)); GO EXIT; %M06070110
L17: EMITO(MKS);PANA;FORTERR;PUT(443,29);EMITV(GNAT(583));GO EXIT; %A06070120
L20: PANDBL(TRUE); EMITV(GNATP(6)); EMITO(DEL); EMITV(JUNK); %M06070130
GO EXIT; %M06070140
L21: IF R ~ PANPLX(FALSE,FALSE) < 4 THEN %M06070150
IF BOOLEAN(R) THEN BEGIN %M06070160
IF BOOLEAN(R.[46:1]) THEN EMITO(CHS) END %M06070170
ELSE BEGIN EMITO(DEL); EMIT(0) END ELSE %M06070180
IF BOOLEAN(R.[42:1]) THEN BEGIN EMITO(XCH); %M06070190
EMITO(DEL); IF BOOLEAN(R.[41:1]) THEN EMITO(CHS) END %M06070200
ELSE BEGIN EMITO(DEL); %M06070210
IF BOOLEAN(R.[43:1]) THEN EMITO(CHS) END; GO EXIT; %M06070220
L22: IF R ~ PANPLX(FALSE,FALSE) < 4 THEN %M06070230
IF BOOLEAN(R) THEN BEGIN EMITO(DEL); EMIT(0) END ELSE %M06070240
BEGIN IF BOOLEAN(R.[46:1]) THEN EMITO(CHS) END ELSE %M06070250
IF BOOLEAN(R.[42:1]) THEN BEGIN EMITO(DEL); %M06070260
IF BOOLEAN(R.[43:1]) THEN EMITO(CHS) END ELSE %M06070270
BEGIN EMITO(XCH); EMITO(DEL); %M06070280
IF BOOLEAN(R.[41:1]) THEN EMITO(CHS) END; GO EXIT; %M06070290
L23: PANDBL(FALSE); EMITO(XCH); EMITO(DEL); GO EXIT; %M06070300
L24: PANDBL(FALSE); EMITO(DEL); GO EXIT; %M06070310
L25: FIXCLASS(INTID,TABR,FALSE); %A06070320
VARIABLE(FP); GO EXIT; %A06070325
L26: FIXCLASS(INTID,COLR,FALSE); %A06070330
VARIABLE(FP); GO EXIT; %A06070335
L27: FIXCLASS(REALID,INREAL,FALSE); VARIABLE(FP); GO EXIT; %A06070340
L30: EMITO(MKS); EMITN(JUNK); EMITV(STRI); %M06070350
EMITO(PRTE); EMITO(LOD); EMITV(FILPROI); EMITO(PRTE); %M06070355
EMITO(LOD); EMITV(SCANR); STEPIT; GO EXIT; %M06070357
L31: IF STEPI! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %M06070360
EMITO(MKS); STEPIT; %M06070365
EMITPAIR(GNAT(POWERSOFTEN),LOD); BEXP; EMITV(READCON); %M06070370
IF ELCLASS=RTPAREN THEN STEPIT ELSE ERR(104); GO EXIT; %M06070380
L32: IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A06070390
QUOTETOG ~ TRUE; IF STEPI = STRTRNS AND ELBAT[I].INCR } 8 THEN %M06070400
BEGIN %M06070405
EMITV(IF BOOLEAN(ELBAT[I].[34:1]) THEN COUNTI ELSE NSTR); %M06070410
STEPIT END ELSE %M06070420
IF (ELCLASS = STRINGID OR ELCLASS=STRINGARRAYID) %M06070425
AND BOOLEAN(ELBAT[I].FORMAL) THEN BEGIN %M06070430
EMITV(ELBAT[I].ADDRESS - REAL(ELCLASS=STRINGID AND %M06070435
NOT BOOLEAN(ELBAT[I].VO))-1); STEPIT END ELSE %A06070436
BEGIN EMITO(MKS); SEXPN; EMITV(LENGTHV) END; %M06070437
QUOTETOG ~ FALSE; IF ELCLASS! RTPAREN THEN ERR(104) ELSE STEPIT; %M06070438
GO EXIT; %M06070440
L33: PROPER(2); GO EXIT; %M06070450
L34: PANSYM(FALSE,FALSE); QUOTETOG~FALSE; GO EXIT; %M06070460
L35: IF STEPI!LEFTPAREN THEN %M06070470
BEGIN ERR(105); GO EXIT END; %M06070472
QUOTETOG~TRUE; STEPIT; GETCONTENTS(SNORM(SEXP),FALSE); %M06070474
QUOTETOG~FALSE; IF ELCLASS=RTPAREN THEN %M06070476
STEPIT ELSE ERR(104); GO EXIT; %M06070478
L36: EMITCONVAL; GO EXIT; %M06070480
L37: EMITO(MKS); IF STEPI = LEFTPAREN THEN BEGIN STEPIT; %A06070490
IF Q ~ ACCUM[1] = "3TWX00" THEN EMITL(5) ELSE %A06070510
IF Q = "4TWXA0" THEN EMITL(10) ELSE FLAG(665); %A06070520
IF STEPI! RTPAREN THEN ERR(104) ELSE STEPIT END ELSE EMIT(0); %A06070530
EMIT(0); EMITV(READN); GO EXIT; %A06070540
ENTIER: PANA; EMITNUM(.5); EMITO(SUB); 06071000
EMITPAIR(JUNK,ISN); GO TO EXIT; 06072000
MAXANDMIN:% 06072010
T1 ~ ELBAT[I].[27:6];% 06072020
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 T1=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;% 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 IF DACP ! 0 THEN %A06073200
IF DAC[10]!0 THEN BEGIN EMITV(DAC[10]); GO EXIT END; %A06073210
ERR(105); GO EXIT END; %A06073220
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
REAL R; DEFINE V = IF ARRAYFLAG THEN CHECKBOUNDLVL#; %M06080500
LABEL 06081000
LSTR,LSYM,LDP,LE, LF, %M06081500
LTR, %M06081600
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 SF ~ LE,LE,LSTR,LDP,LSYM,LE,LE,LF,LF,LF; %M06084500
SWITCH S ~ 06085000
LSYM,LE,LE, %A06085500
L11,LSYM,LTR,LSTR,LDP,LSYM,LE,L13,L14,L15,L16,LSTR,LDP,LSYM, %M06086000
LE,L17,L18,L19,L20,LSTR,LDP,LSYM,LE,L21,L22,L23,L24,LSTR, %M06087000
LDP,LSYM,LE,L25,L26,L27,L28,L29,L30,L31,L32,L33,L34,LE,LE, %M06088000
LSYM,L35,LSYM; %M06088500
COMMENT LN IS THE LABEL FOR THE CLASS N; 06089000
INTEGER SL; %W5206089500
LABEL EXIT,RP,LDOT,LAMPER; 06090000
IF ELCLASS=FIELDID THEN BEGIN %M06090100
IF R ~ ELBAT[I].ADDRESS > 10 THEN GO LE; %M06090200
GO TO SF[R] END; %M06090300
GO TO S[ELCLASS-16]; %A06091000
IF ELCLASS=RELOP THEN BEGIN QUOTETOG ~ TRUE; STEPIT; %A06091100
EMITNUM(SFTERM(FALSE)); GO TO LAMPER END; %A06091150
IF ELCLASS=FACTOP THEN %W5206091200
IF LINKTOG THEN % LAST SYLLABLE IS NOT A LINK %W5206091300
IF (SL~GET(L-1)).[46:2]=3 OR SL=673 THEN BEGIN %LOOK FOR DESC OR CDC%W5206091400
ELBAT[I].CLASS~ELCLASS~CROSSHATCH; STEPIT; %W5206091500
EMITO(DUP); EMITO(LOD); GO EXIT END; %W5206091600
%T9206092000
IF ELCLASS=FILEID OR ELCLASS=SUPERFILEID THEN 06092005
BEGIN 06092010
IF FILEATTRIBUTEHANDLER(FP)!ATYPE THEN FLAG(294) ; 06092015
GO TO LAMPER ; 06092020
END ; 06092025
IF ELCLASS = UNKNOWNID THEN %T9206092099
IF (R ~ ACCUM[1]).[24:24] = "MARG" THEN BEGIN% %A06092100
FIXCLASS(INTID,0,TRUE); VARIABLE(FP); GO TO LDOT END %A06092200
ELSE IF R = "4JUNK0" THEN BEGIN STEPIT; EMITV(JUNK);GO LDOT END %T2906092201
ELSE IF R = "#LINEN" THEN BEGIN C~CARDNUMBER;GO L33 END %T9306092205
ELSE IF R = "3TEN00" THEN BEGIN BANA; EMITPAIR(JUNK,ISN); %T9306092210
EMITV(GNAT(POWERSOFTEN)) %T9306092213
; GO LDOT; % %A06092215
END ELSE %T9206092220
IF R = "6SERIA" OR R = "7CANTU" THEN %T9206092222
BEGIN C ~ 0; GO L33; END ELSE %T9206092224
IF R = "6UPDAT" THEN BEGIN C~2; GO L33; END ELSE %T9206092226
IF R = "6RANDO" THEN BEGIN C ~1;GO L33; END ELSE %T9206092228
IF R = "2IO000" THEN BEGIN C~3; GO L33; END %T9206092230
ELSE IF R = "6SEARC" THEN BEGIN STRINGSEC(9); GO LDOT END 06092250
ELSE IF R = "8FREEL" OR R = "7NEXTA" THEN BEGIN% %A06092300
FIXCLASS (INTID,R,BOOLEAN(3)); VARIABLE(FP);% %A06092400
GO LDOT END ELSE ERR (100);% %A06092450
LTR: IF R ~ ACCUM[1] = "5INPUT" OR R = "6OUTPU" THEN %T9206092500
BEGIN C ~ 1 + REAL(R = "6OUTPU"); GO L33; END; %T9206092550
LE: %T9206092600
L12: L13: L17: L21: L25: L29: L30: 06093000
COMMENT NO PRIMARY MAY BEGIN WITH QUANTITIES WITH THESE CLASSES; 06094000
ERR(103); GO TO EXIT; 06095000
LDP: IF TAKE(ELBAT[I].LINK+1).[2:2] =0 THEN BEGIN V; %M06095100
DBLPRIM; DBLTSNGL(0); GO TO LDOT END; GO LE; %M06095150
LSTR: STRINGSEC(5); GO TO LDOT; %M06095200
LSYM: IF GT1 ~ SYMPRIM(TRUE) = 5 THEN GO LE ELSE %M06095250
IF GT1 = 4 THEN EMITNUM(SAVEQ) ELSE %M06095300
IF GT1 < 3 THEN BEGIN SDNORM(GT1); EMITO(MKS); EMITV(ATN); %M06095350
END; QUOTETOG ~ FALSE; GO TO LDOT; %M06095550
LF: V; FIELDC(ELBAT[I],0,FALSE); GO TO LAMPER; %M06095600
L11: 06096000
COMMENT INTRINSIC FUNCTIONS; 06097000
IMPFUN; STACKCT ~ STACKCT-1; GO TO LDOT; %A 06098000
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 = INTV THEN BEGIN PANA; %M06116100
EMITPAIR(JUNK,ISN); GO TO LDOT END; %M06116200
IF ELBAT[I].ADDRESS = REALV THEN BEGIN 06117000
IF STEPI ! LEFTPAREN 06118000
THEN BEGIN ERR(105); GO TO EXIT END; 06119000
IF STEPI = STRINGPROCID OR ELCLASS = STRINGID OR %M06120000
(ELCLASS = STRTRNS AND ELBAT[I].INCR } 8) OR %A06120050
(ELCLASS=FIELDID AND ELBAT[I].ADDRESS=STRINGV) OR %A06120070
(ELCLASS } BOOARRAYID AND ELCLASS { INTARRAYID %T9006120080
AND TABLE(I+1) ! LFTBRKET) OR %T9106120090
ELCLASS = STRINGARRAYID THEN STRINGSEC(6) ELSE %A06120100
IF ELCLASS = RECID THEN BEGIN RECVAR(FALSE);% %A06120110
RECTYPE ~ 0 END ELSE BEXP;% %A06120120
GO TO RP END; %M06120200
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 ELCLASS= CASEV THEN CASESTMT(3) ELSE %M06133000
IF ELCLASS= IFV THEN IFXP(BTYPE) ELSE %M06133250
IF EXPRSS! BTYPE THEN ERR(107); %M06133500
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
IF ELCLASS=CROSSHATCH THEN GT4~BOOSEC~BTYPE ELSE %W5206152500
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
EMIT(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
LSFP,LE,LSFM, %A06215100
LR1,LR2,LR3,LR4,LR5, %M06215250
LFIELD,LSTR,LDP,LDBL,LPLX,LDPX,LSYM,LREC,LBTRN,LBF,LR, %M06215500
BAS,LAS, % %T9106215750
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,L12,LFIELD,LSTR,LDBL,LSYM,LREC,LBTRN,L11,LSYM,LE,LSTR, %M06220000
LDP,LSFP,LSFM,L13,L14,L15,L16,LSTR,LDP,LSYM,LREC,L17,L18, %A06221000
% %M06222000
L19,L20,LSTR,LDP,LSYM,LREC,L21,L22,L23,L24,LSTR,LDP,LSYM, %M06222100
LREC,L25,LAS,LAS,LAS,L29,L30,L31,L32,L33,L34,LR,LSYM,LSYM, %T9106222200
L35,LSYM; %M06222300
SWITCH SF ~ LPLX,LDPX,LSTR,LDBL,LSYM,LREC,LBF,L33,L33,L33; %M06222400
DEFINE V = IF ARRAYFLAG THEN CHECKBOUNDLVL#; REAL R; %M06222500
COMMENT LN IS THE LABEL FOR THE CLASS N; 06223000
LABEL EXIT,D,TD,T; %M06224000
LABEL FAH ; 06224500
GO TO S[ELCLASS-SUPERFILEID]; 06225000
IF ELCLASS = ADOP THEN GO TO L11; 06226000
IF ELCLASS = COLON THEN %M06226500
IF DPTOG THEN GO TO LDPX ELSE GO TO LPLX; %M06226600
IF ELCLASS = UNKNOWNID THEN %A06227000
IF ACCUM[1].[24:24] = "MARG" THEN BEGIN %A06227100
FIXCLASS(INTID,0,TRUE); GO L33 END ELSE %A06227200
IF ACCUM[1] = "6TWXNU" THEN BEGIN STEPIT; EMITO(MKS); %A06227210
EMITL(15); EMIT(0); EMITV(READN); GO TD END ELSE %A06227220
IF ACCUM[1] = "5SEARC" THEN GO L33 ELSE ERR(100); %A06227300
IF ELCLASS = RELOP THEN GO L33; %A06227400
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= SYMV OR GT1 = LISTV THEN GO TO LSYM; %M06233100
IF GT1= INTV THEN GO L33; %M06233200
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
IF DPTOG THEN GO TO LDBL; %M06237500
AEXP; 06238000
D: IF ELCLASS ! RELOP THEN BEGIN BOOPRIM ~ ATYPE;GO EXIT END;06239000
RELATION; 06240000
BOOPRIM ~ BTYPE; GO TO EXIT; 06241000
LFIELD: IF TYPE ~ ELBAT[I].ADDRESS > 29 THEN GO LREC; %M06241010
GO TO SF[TYPE]; %M06241020
COMMENT CHECK TO SEE IF AN ARRAY IS BEING USED IN STRING SYNTAX;%T9106241024
LAS: IF TABLE(I+1) ! LFTBRKET THEN GO BAS ELSE GO L26; % %T9106241025
LSTR: IF ELCLASS=STRTRNS AND ELBAT[I].INCR = 1 THEN BEGIN %A06241030
EMITI(0,33-15|PORV,15); QUOTETOG ~ FALSE; %A06241035
EMITO(DUP); EMITL(64); EMITO(LSS); TYPE ~ BUMPL; %A06241037
GETCONTENTS(0,FALSE); EMITI(0,18,15); EMITPAIR(2,BFW); %A06241040
EMITB(BFC,TYPE,L); EMITO(DEL); EMITL(1); END ELSE %A06241042
BAS: STRINGSEC(7); BOOPRIM ~ BTYPE; GO TD; % %T9106241044
LBTRN: BOOINT; BOOPRIM ~ BTYPE; GO TO TD; %M06241050
LR: IF QUOTETOG THEN GO TO LSYM ELSE GO TO LREC; %M06241060
LDP: IF TYPE ~ TAKE(ELBAT[I].LINK+1).[2:2] = 0 THEN GO LDBL ELSE %M06241070
IF TYPE=1 THEN GO LPLX ELSE GO LDPX; %M06241080
LBF: V; FIELDC(ELBAT[I],0,FALSE); BOOPRIM ~ BTYPE; GO TO T; %M06241090
LREC: REXP; LR1: TYPE ~ BOOPRIM ~ RECTYPE; RECTYPE~0; %M06241100
IF RECRELATION(TYPE) THEN GO EXIT; BOOPRIM~BTYPE; GO EXIT; %M06241110
LDBL: DPTOG ~ TRUE; DBLXP; DPTOG ~ FALSE; %M06241140
LR3: BOOPRIM~ 6; %M06241145
IF DBLRELATION THEN GO EXIT; BOOPRIM~BTYPE; GO EXIT; %M06241150
LPLX: IF DPTOG THEN GO TO LDPX; PLXNORM(PLXP(FALSE),FALSE); %NEW %M06241250
LR4: BOOPRIM ~ 7; %M06241255
IF PLXRELATION THEN GO EXIT; BOOPRIM~BTYPE; GO EXIT; %M06241260
LDPX: DPTOG ~ TRUE; PLXNORM(PLXP(TRUE),TRUE); DPTOG ~ FALSE; %M06241330
LR5: BOOPRIM~ 8; %M06241340
IF DBLPLXRELATION THEN GO EXIT; BOOPRIM~BTYPE; GO EXIT; %M06241350
LSYM: QUOTETOG ~ TRUE; TYPE ~ SEXP; %M06241440
LR2: BOOPRIM~ 5; %M06241450
IF SYMRELATION(TYPE) THEN GO EXIT; BOOPRIM~BTYPE; GO EXIT; %M06241460
LSFM: LSFP: CALLSF(ELBAT[I]); GO TO TD; %A06241500
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 BOOLEAN CONSTANT; %W0306255000
IF TYPE ~ 0&ELBAT[I][44:25:2]>7 THEN EMITNUM(C) %W0306255500
ELSE EMIT(TYPE); STEPIT; GO TO T; %W0306256000
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
IF TYPE > 29 THEN GO TO LR1; %M06262050
IF TYPE > 4 THEN %M06262100
CASE TYPE-5 OF BEGIN %M06262200
BEGIN SYMSEC ~ TRUE; TYPE ~ SEXP; %M06262300
GO TO LR2 END; %M06262400
BEGIN SIMPDBL; GO TO LR3 END; %T9206262500
BEGIN PLXNORM(SIMPLX(12,FALSE),FALSE); GO TO LR4 END; %M06262600
BEGIN PLXNORM(SIMPLX(12,TRUE),TRUE); GO TO LR5; END; END; %M06262700
FAH: %T9206262800
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 INTEGER OPERATOR; 06282000
BOOLEAN MULTIPLE; LABEL DOITAGAIN; %W5306282100
DOITAGAIN: %W5306282900
OPERATOR ~ 1 & ELBAT[I] [36:17:10]; 06283000
COMMENT THIS SETS UP THE OPERATOR WHICH WILL BE EMITTED. THE HIGH 06284000
ORDER TEN BITS OF THE OPERATOR ARE LOCATED IN [17:10] 06285000
OF THE ELBAT WORD; 06286000
STEPIT; AEXP; %W5306287000
IF ELCLASS=RELOP THEN BEGIN %W5306287100
EMITPAIR(JUNK,SND); EMIT (OPERATOR); %W5306287200
IF MULTIPLE THEN EMITO(LND); EMITV(JUNK); %W5306287300
MULTIPLE ~ TRUE; GO DOITAGAIN; %W5306287400
END; %W5306287500
EMIT (OPERATOR); %W5306287600
IF MULTIPLE THEN EMITO(LND); %W5306287700
STACKCT ~ 1; %W5306287900
EMIT(REAL(MULTIPLE)); L~L-1; %W5306288000
COMMENT THE LAST LINE IS PREPARATORY. EMITLNG USES THIS TO IMPROVE06289000
CODE LATER; 06290000
END RELATION; 06291000
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
GENEXP(TYPE); %M06303000
% REMOVED %M06304000
% REMOVED %M06305000
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 ! LFTBRKET THEN BEGIN ERR(90);GO TO EXIT END; 06314000
IF STEPI ! LITNO THEN GO TO L1; 06314500
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; %D06338000
BEGIN INTEGER FIRST,SECOND; LABEL EXIT; 06339000
% %D06340000
IF DOTSYNTAX(FIRST,SECOND) THEN GO TO EXIT; 06341000
%A 06342000
EMITI(0,FIRST,SECOND); %A 06343000
%A 06344000
STEPIT; 06345000
EXIT: END DOTIT; %D06346000
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
EMITL(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 X; %W2706501000
STREAMTOG~FALSE; 06502000
EMITO(MKS); PASSFILE; 06503000
IF ELCLASS!WITHV THEN 06504000
BEGIN ERR(301); GO TO EXIT END; 06505000
FOR X~1 STEP 1 UNTIL 6 DO %W2706506000
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 X:=X STEP 1 UNTIL 5 DO %W2706512000
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) END; 07025000
IF ELCLASS = PERIOD THEN 07026000
BEGIN 07027000
GT5 ~ "ND;END."&"E"[1:43:5]; 07028000
MOVE(1,GT5,CARD(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
INTEGER STYPE; LABEL LCH; BOOLEAN PART; LABEL M; %M07050500
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
BOOLEAN DPTOGO,QUOTETOGO; REAL T7; %M07059500
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
BOOLEAN PROCEDURE COMPCLASS(ACLASS,SCLASS,T,WHOLE); %M07064100
VALUE ACLASS,SCLASS,T,WHOLE; %M07064150
REAL ACLASS,SCLASS,T,WHOLE; %M07064200
IF ACLASS=SCLASS THEN BEGIN %M07064250
IF SCLASS= RECID THEN BEGIN %M07064300
IF COMPCLASS ~ (T.[27:5]+30)! GETYPE(WHOLE) THEN %M07064400
FLAG(123) END ELSE %M07064500
IF SCLASS= DBLPLXID THEN BEGIN %M07064600
IF COMPCLASS ~ T.[27:5] ! TAKE( WHOLE .LINK+1).[2:2] %M07064700
THEN FLAG(123) END END ELSE %M07064800
IF COMPCLASS ~ SCLASS!LOCLID OR ACLASS < SYMID THEN FLAG(123); %M07064900
LABEL ANOTHER,NORMAL,VE,STORE,LRTS,LOWBD,FINISHBOO, 07065000
LODPOINT,NSBS,BS,COMMON,LP,GOBBLE,BSXX,BSX,EXIT, 07066000
LFB, %M07066500
CERR,FGEN; 07067000
LABEL 07068000
A6,AER,A15,A21,A31,A32,A33,A34,A40,A41,A42,A47,A48,A49,A50, %M07068100
A61,A63, %M07068200
A25, %A07068300
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,A6,L5,L6,L7,L8,L9,L10,L12,AER,A15,AER,AER,AER,AER,L11, %M07073000
A21,AER,L12,L12,A25,L12,L13,L14,L15,L16,A31,A32,A33,A34,L17, %A07074000
L18,L19,L20,AER,A40,A41,A42,L21,L22,L23,L24,A47,A48,A49,A50, %M07075000
L25,L26,L27,L28,L29,L30,L31,L32,L33,AER,A61,AER,A63; %M07075500
REAL T1,T2,T3,T4,T5,T6; COMMENT EXAMINE LATER WITH EYE 07076000
TO REDUCING TOTAL NUMBER; 07077000
PCTR ~ 1; 07078000
DPTOGO ~ DPTOG; QUOTETOGO ~ QUOTETOG; DPTOG ~ QUOTETOG ~ FALSE; %M07078500
ANOTHER: DPTOG ~ QUOTETOG ~ FALSE; %M07079000
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
T7 ~ GT1; %M07086500
IF SCLASS ~GT1.CLASS { INTARRAYID AND 07087000
SCLASS } STRINGSTRPROCID %M07088000
THEN BEGIN IF GT1 ~ (SCLASS-STRINGSTRPROCID).[45:3]}5 %M07089000
THEN SCLASS ~ SCLASS - GT1 + 5; %M07090000
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
% DELETE %M07094000
IF GT1 {2 THEN IF BOOLEAN(GT1) THEN DPTOG ~ T7.[27:5]!1 ELSE %M07094100
QUOTETOG ~ TRUE; %M07094150
END; %M07094155
IF SBIT THEN IF ACLASS~TABLE(I+1)=39 OR ACLASS=47 THEN BEGIN %M07094160
STEPIT; %M07094165
STRINGSEC(IF VBIT THEN 8 ELSE 1); %M07094170
IF VBIT THEN EMITO(DEL) ELSE BEGIN IF SPT THEN EMITO(DEL); %M07094180
IF SLT THEN EMITO(DEL) END; GO BS END ELSE %A07094190
IF VBIT THEN BEGIN STEPIT; GO VE END; %A07094195
IF VBIT THEN IF SCLASS}STRINGID AND SCLASS{REALID THEN BEGIN %M07094200
STEPIT; CASE SCLASS-STRINGID OF BEGIN %M07094250
STRINGSEC(8); %M07094300
IF T7.[27:5]=0 THEN DBLXP ELSE PLXNORM(PLXP(DPTOG),DPTOG); %M07094350
BEGIN SEXPN; IF RECLAIMTOG THEN BEGIN %M07094380
EMIT(11); EMIT(4); EMITO(280); % MAKE DESC %M07094400
EMITV(TABLEMARK); EMITL(1); EMITO(ADD); %M07094410
EMITPAIR(TABLEMARK,SND); EMITN(PTABLE); EMITO(SND) END; %M07094430
END; %M07094440
RECOM(T7.[27:5]+30); BEXP; AEXP; END; %M07094450
GO TO COMMON END; %M07094460
% %A07094465
IF SCLASS=STRINGID THEN BEGIN %M07094470
STEPIT; %M07094471
STRINGSEC(1); %M07094472
IF SPT THEN BEGIN IF NOT SLT THEN EMITNUM(SL) END ELSE %M07094474
BEGIN EMITNUM(SP); IF SLT THEN EMITO(XCH) ELSE %M07094476
EMITNUM(SL) END; GO TO COMMON END; %M07094480
END; %M07094525
IF SCLASS=FRMTID THEN IF EXPLICITFORMAT THEN %W4007094560
BEGIN STEPIT; GO TO COMMON END; %W4007094570
ACLASS~STEPI; WHOLE~ELBAT[I];SCATTERELBAT; %W4007094580
IF SCLASS=LISTID THEN BEGIN LISTPARA;GO TO COMMON END; %W3307094700
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 THEN %M07099000
CHECKER(WHOLE); 07099500
IF ACLASS < STRINGARRAYID OR ACLASS > INTARRAYID %M07100000
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
EMITN(WHOLE.ADDRESS); 07122510
EMITO(LOD); 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
BEGIN VE: ACLASS~ IF T1 ~EXPRSS = ATYPE THEN REALID ELSE %M07125000
IF T1 = BTYPE THEN BOOID ELSE IF T1 = DTYPE THEN %M07125100
LABELID ELSE IF T1=5 THEN SYMID ELSE 0; %M07125200
IF ACLASS=0 THEN GO AER; %M07125300
GO TO BS END %M07125400
ELSE BEGIN COMMENT NAME CALL EXPRESSION; 07126000
IF FBIT THEN BEGIN %M07126100
IF(ACLASS} STRINGSTRPROCID AND ACLASS{INTARRAYID %M07126200
AND (ACLASS-STRINGSTRPROCID).[45:3]<4) OR ACLASS=COLON %M07126300
THEN GO TO LFB END; %M07126400
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
IF SCLASS = LABELID THEN BEGIN DEXP; ACLASS~ LABELID END ELSE %M07133000
IF FBIT THEN BEGIN IF EXPRSS>5 THEN GO AER END ELSE %M07133050
IF SCLASS} DBLPLXID AND SCLASS { REALID THEN BEGIN %M07133100
CASE SCLASS-DBLPLXID OF BEGIN %M07133200
BEGIN I~I-1; DBLPLXP( T7.[27:5]) END; %M07133300
SEXPN; %M07133400
RECOM(T7.[27:5]+30); %M07133500
BEXP; AEXP; END; END ELSE GO TO AER; %M07133600
STORE: IF SCLASS= DBLPLXID THEN BEGIN %M07134000
T7 ~ IF T7.[27:5]=2 THEN 4 ELSE 2; %M07134100
FOR STYPE ~T7 STEP -1 UNTIL 1 DO EMITPAIR(TEMP(STYPE),STD); %M07134200
EMITN(TEMP(1)) END ELSE %M07134300
BEGIN EMITPAIR(JUNK,STD); EMITN(JUNK) END; %M07134400
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
% REMOVE %M07145000
GO TO COMMON %M07146000
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 } STRINGARRAYID THEN %M07150000
IF SCLASS { INTARRAYID THEN 07151000
BEGIN T2 ~ TAKE(INDEX+PCTR).[32:3]; %M07152000
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; %M07155000
IF ACLASS = SCLASS THEN BEGIN %M07155100
IF SCLASS= RECARRAYID THEN BEGIN %M07155200
IF T7.[27:5]+30!GETYPE(ELBAT[I]) THEN BEGIN FLAG(123); %M07155300
ERRORTOG ~ TRUE END END ELSE %M07155400
IF SCLASS = DBLPLXARRAYID THEN BEGIN %M07155500
IF TAKE(ELBAT[I].LINK+1).[2:2]!T7.[27:5] THEN BEGIN %M07155600
FLAG(123); ERRORTOG ~ TRUE END END END ELSE %M07155700
BEGIN ERR(123); GO TO EXIT END; %M07155800
COMMENT NORMALISE ACLASS FOR LATER COMPARISON; 07156000
IF SCLASS < BOOARRAYID THEN BEGIN %M07157000
IF SCLASS = DBLPLXARRAYID THEN BEGIN %M07157100
IF NOT ARAY(ELBAT[I],IF T7.[27:5]=2 THEN 4 ELSE 2,BOOLEAN(5)) %M07157200
THEN BEGIN ERR(123); GO TO EXIT END END ELSE %M07157300
IF NOT ARAY(ELBAT[I],0,BOOLEAN(REAL(SCLASS=STRINGARRAYID)|2+5)) %M07157400
THEN BEGIN ERR(123); GO TO EXIT END END ELSE %M07157500
BEGIN VARIABLE(FA); IF TABLE(I-2) ! FACTOP THEN %M07157600
BEGIN ERR(123); GO EXIT END; END; %M07158000
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
; GO TO COMMON END; %M07167000
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 THEN %M07171000
IF ACLASS<BOOARRAYID THEN BEGIN %M07171100
GT1~ REAL(ARAY(WHOLE ,IF ACLASS=DBLPLXARRAYID THEN %M07171200
NEWP(WHOLE) +1 ELSE 0,TRUE)); GO BS END %M07171300
ELSE BEGIN %M07172000
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
IF COMPCLASS(ACLASS-8,SCLASS,T7,WHOLE) THEN GO TO AER; %M07191000
IF ARAY( WHOLE, IF ACLASS= DBLPLXARRAYID THEN %M07192000
NEWP(WHOLE) + 1 ELSE 0,TRUE) %M07192500
THEN BEGIN ERR(123); %M07192700
GO EXIT END; GO TO COMMON END; %M07193000
T2 ~ BAE; T3 ~ L; 07194000
COMMENT WE PREPARE FOR ACCIDENTAL ENTRY EVEN THOUGH WE KNOW NOT YET 07195000
IF WE HAVE ROW DESIGNATOR; 07196000
IF ACLASS~ACLASS-8 < BOOID THEN BEGIN T3 ~PROGDESCBLDR(0,T3,0); %M07197000
IF ARAY(WHOLE , IF ACLASS=DBLPLXID THEN %M07197200
NEWP(WHOLE) + 1 ELSE 0,BOOLEAN(4)) THEN BEGIN %M07197300
ERR(123); GO TO EXIT END; %M07197400
IF ELCLASS = COMMA OR ELCLASS=RTPAREN THEN %M07197500
IF COMPCLASS(ACLASS,SCLASS,T7,WHOLE) THEN GO TO CERR %M07197600
ELSE GO TO LRTS ELSE %M07197700
IF ELCLASS= ASSIGNOP THEN BEGIN PART ~ FALSE; %M07197800
IF ACLASS= SYMID THEN BEGIN QUOTETOG ~ TRUE; STEPIT; %M07197900
SEXPN; QUOTETOG ~ FALSE; EMITO(XCH); %M07198000
EMITO(SND); END ELSE %M07198100
IF ACLASS= DBLPLXID THEN %M07198200
DBLPLXVAR(BOOLEAN(2&(T6~TAKE(WHOLE.LINK+1).[2:2]) %M07198300
[44:46:2])) ELSE %M07198400
BEGIN STEPIT; RECOM(T6 ~ GETYPE(WHOLE));EMITO(XCH); %M07198500
EMITO(SND) END; GO LCH END; PART ~ TRUE; %M07198600
IF ACLASS = DBLPLXID THEN T6 ~ TAKE(WHOLE.LINK+1).[2:2] %M07198700
ELSE IF ACLASS=RECID THEN T6 ~ GETYPE(WHOLE); %M07198800
IF FBIT THEN GO TO M END ELSE %M07198900
BEGIN T6 ~ FA; VARIABLE(T6); %M07199000
IF TABLE(I-1) = FACTOP THEN BEGIN %M07199100
EMITB(BFW,T2,T3); GO TO BS END; %M07199200
T3 ~ PROGDESCBLDR(0,T3,0); %M07199300
IF ACLASS! BOOID THEN ACLASS ~ REALID; %M07199400
IF NOT (PART ~ ELCLASS!COMMA AND ELCLASS!RTPAREN) THEN %M07199500
IF T6!0 THEN %M07199600
IF COMPCLASS(ACLASS,SCLASS,T7,WHOLE) THEN GO CERR %M07199700
ELSE GO TO LRTS; %M07199800
END; %M07199900
LCH: IF SCLASS = LOCLID THEN SCLASS ~ ACLASS ELSE %M07200000
IF SCLASS>REALID OR SCLASS< DBLPLXID THEN GO M; %M07200100
CASE(IF SCLASS=DBLPLXID THEN T7.[27:5] ELSE %M07200200
SCLASS-38) OF BEGIN %M07200300
IF ACLASS = DBLPLXID THEN BEGIN %M07200400
IF T6!0 THEN GO M; IF PART THEN SIMPDBL; END ELSE %M07200500
IF ACLASS = REALID OR ACLASS= SYMID THEN BEGIN %M07200600
IF ACLASS = SYMID THEN EMITATN; EMIT(0); EMITO(XCH); %M07200700
IF PART THEN SIMPDBL END ELSE GO M; %M07200800
BEGIN IF ACLASS = DBLPLXID THEN BEGIN %M07200900
IF T6 ! 1 THEN DBLTSNGL(T6|4); %M07201000
IF T6 ! 0 THEN T6 ~ 12; END ELSE %M07201100
IF ACLASS = REALID THEN T6 ~ 0 ELSE %M07201200
IF ACLASS = SYMID THEN BEGIN EMITATN; T6 ~0; END %M07201300
ELSE GO TO M; %M07201400
PLXNORM(IF PART THEN SIMPLX(T6,FALSE) ELSE T6, FALSE) %M07201500
END; %M07201600
BEGIN IF ACLASS = DBLPLXID THEN BEGIN %M07201700
IF T6 = 1 THEN BEGIN EMITPAIR(JUNK,STD); EMIT(0); %M07201800
EMITO(XCH); EMIT(0); EMITV(JUNK); END ELSE %M07201900
IF T6 ! 0 THEN T6 ~ 12 END ELSE %M07202000
IF ACLASS = REALID OR ACLASS = SYMID THEN BEGIN %M07202100
IF ACLASS= SYMID THEN EMITATN; EMIT(T6~0); %M07202200
EMITO(XCH) END ELSE GO TO M; %M07202300
PLXNORM(IF PART THEN SIMPLX(T6,TRUE) ELSE T6,TRUE) %M07202400
END; %M07202500
BEGIN IF(ACLASS= DBLPLXID AND T6=0) OR ACLASS=REALID THEN %M07202600
BEGIN IF ACLASS ! REALID THEN DBLTSNGL(0); SDNORM(3) END %M07202700
ELSE IF ACLASS! SYMID THEN GO TO M; %M07202800
IF PART THEN BEGIN QUOTETOG ~ SYMSEC ~ TRUE; SDNORM(SEXP) %M07202900
END END; %M07203000
IF ACLASS ! RECID OR T7.[27:5]+30 ! T6 THEN GO TO M; %M07203100
BEGIN CASE IF ACLASS= DBLPLXID THEN T6 ELSE %M07203200
ACLASS-38 OF BEGIN %M07203300
BEGIN SIMPDBL; IF DBLRELATION THEN GO TO M END; %M07203400
BEGIN PLXNORM(SIMPLX(0,FALSE),FALSE); %M07203500
IF PLXRELATION THEN GO TO M; END; %M07203600
BEGIN PLXNORM(SIMPLX(0,TRUE),TRUE); %M07203700
IF DBLPLXRELATION THEN GO TO M END; %M07203800
BEGIN QUOTETOG ~ SYMSEC ~ TRUE; %M07204000
IF SYMRELATION(SEXP) THEN GO TO M END; %M07205000
IF RECRELATION(T6) THEN GO TO M; ; %M07206000
IF ELCLASS ! RELOP THEN GO TO M ELSE RELATION; END; %M07207000
FINISHBOO: SIMPBOO END; %M07208000
BEGIN IF ACLASS= SYMID THEN EMITATN ELSE %M07209000
IF ACLASS= DBLPLXID AND T6=0 THEN DBLTSNGL(0) ELSE %M07210000
IF ACLASS! REALID THEN GO TO M; SIMPARITH END; %M07211000
END; %M07211500
GO TO STORE END; %M07212000
COMMENT WHEN WE GET HERE WE HAVE THE CASE OF A SINGLE QUANTITY 07213000
ACTUAL PARAMETER; 07214000
IF ACLASS { IDMAX THEN CHECKER(WHOLE); %M07215000
STEPIT; IF VBIT THEN GO AER; GO TO S[ACLASS-4]; %M07215500
IF ACLASS=0 THEN FLAG(100) ELSE %M07216000
IF ACLASS = READV THEN BEGIN I ~ I - 1; GO TO NORMAL END; %M07216100
IF ACLASS = SPACEV THEN BEGIN EMITL(" "); ACLASS ~ SYMID; %M07216200
GO TO BSX END; %M07216300
FLAG(126); GO TO CERR; %M07217000
A6: EMITPAIR(ADDRSF,LOD); GO TO BS; %M07217500
M: FLAG(123); ERRORTOG ~ TRUE; GO TO COMMON; %M07217510
AER: FLAG(126); %M07217520
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 ACLASS=SCLASS THEN BEGIN %M07229000
IF SCLASS>23 AND SCLASS <51 THEN %M07229100
IF SCLASS ~(SCLASS-23).[45:3]=1 THEN BEGIN %M07229200
IF TAKE(WHOLE.LINK+1).[2:2]! T7.[27:5] THEN GO M END %M07229300
ELSE IF SCLASS=3 THEN BEGIN %M07229400
IF GETYPE(WHOLE)! T7.[27:5]+30 THEN GO M END END ELSE %M07229500
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
LFB: IF ACLASS~ EXPRSS}29 THEN ACLASS ~4; %M07244100
IF LISTOG THEN BEGIN %M07244200
STREAM PROCEDURE MSG(PCTR,ACLASS,LIN); VALUE PCTR,ACLASS; %M07244250
BEGIN LABEL L1,L2,L3,L4,L5,L6,L7,L8,L9; %M07244300
DI ~ LIN; DS ~ 8 LIT " "; SI ~ LIN; DS ~ 14 WDS; %M07244350
DI ~ LIN; DS ~18 LIT "WARNING: ARGUMENT "; SI ~ LOC PCTR; %M07244400
DS ~ 3DEC; DS~37 LIT " OF FORMAL PROCEDURE MUST BE OF TYPE "; %M07244450
CI ~CI + ACLASS; GO L1; GO L2; GO L3; GO L4; GO L5; GO L6; %M07244500
GO L7; GO L8; DS ~ 14 LIT "DOUBLE COMPLEX"; GO L9; %M07244550
L1: DS ~ 9 LIT "--ERROR--"; GO L9; L2: DS~7 LIT "BOOLEAN"; %M07244600
GO L9; L3: DS~13 LIT "DESIGNATIONAL"; GO L9; %M07244650
L4: DS ~ 4 LIT "REAL"; GO L9; L5: DS ~ 6 LIT "RECORD"; GO L9; %M07244700
L6: DS ~ 6 LIT "SYMBOL"; GO L9; L7: DS ~ 6 LIT "DOUBLE"; GO L9; %M07244750
L8: DS ~ 7 LIT "COMPLEX"; %M07244800
L9: DS ~ 16 LIT " CALLED BY VALUE"; END; %M07244850
IF ACLASS > 8 THEN ERR(123) ELSE BEGIN MSG(PCTR,ACLASS,LIN); %M07244900
WRITELINE END; END; GO TO COMMON; %M07244950
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
A25: IF FORMALF THEN GO LODPOINT; %A07257100
IF TAKE(LINKF+INCRF).[40:8]=0 THEN GO LODPOINT; %A07257200
ERR(731); GO EXIT; %A07257300
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 TO LODPOINT; 07275000
LP: IF T1 ~ TAKE(WHOLE ~ GIT(WHOLE)).[40:8] = 0 07276000
THEN BEGIN 07277000
COMMENT THE PROCEDURE 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 %R07281900
IF SCLASS { INTPROCID THEN SCLASS~ SCLASS + 8; %M07282000
I ~ I-2; STEPIT; 07283000
WHOLE ~ ELBAT[I]; %M07283500
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 ! DBLPLXID %M07292000
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(T3 ~ T3.ADDRESS); EMITPAIR(T3,STD); %M07306000
IF T4 = SYMID AND RECLAIMTOG THEN BEGIN EMITN(T3); %M07306100
EMITV(TABLEMARK); EMITL(1); EMITO(ADD); %M07306200
EMITPAIR( TABLEMARK,SND); EMITN(PTABLE); %M07306300
EMITO(STD) END END END; %M07306400
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
WHOLE ~ ELBAT[I-1]; %M07312500
GO TO LODPOINT; COMMENT IN ANY CASE LOAD A DESCRIPTOR; 07313000
L11: 07314000
COMMENT INTRINSIC PROCEDURE; 07315000
IF WHOLE.[27:6]!0 THEN IF LINKF>542 THEN GO AER; T4 ~ 0; %M07316000
IF ADDRSF = 0 THEN BEGIN %M07316100
IF ADDRSF ~ TAKE(LINKF+INCRF.[46:2]).[3:6]=0 %M07316200
THEN ADDRSF := GETSPACE(TRUE,LINKF.LINK+1); %T9307316300
PUTADR(LINKF,ADDRSF); END; %T9307316350
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
A31: A32: A34: IF FBIT THEN BEGIN I~I-2; STEPIT; GO TO LFB END; %M07321100
GO TO L17; %M07321200
L19:L20: 07322000
COMMENT ALFAPROC AND INTPROC; 07323000
ACLASS ~ REALPROCID; 07324000
A33: %M07324500
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 +8; %M07330000
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
A40: COMMENT DBLPLXID; %M07340100
A42: COMMENT RECID; IF FBIT THEN BEGIN I~I-2; STEPIT; GO LFB END; %M07340200
A41: COMMENT SYMID; GO TO L21; %M07340400
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
A47: COMMENT STRINGARRAYID; %M07352100
A48: COMMENT DBLPLXARRAYID; %M07352200
A50: COMMENT RECARRAYID; IF FBIT THEN GO AER; %M07352300
A49: COMMENT SYMARRAYID; GO TO L25; %M07352600
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
IF ACLASS= STRINGARRAYID THEN %M07361100
IF FORMALF THEN EMITV(ADDRSF-1) ELSE %M07361200
EMITNUM(TAKE(WHOLE+T1+1).NODIMPART); %M07361300
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 T7.[32:3]!T1 THEN FLAG(124); WHOLE~ELBAT[I-1]; GO BS; %M07369000
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 BOOLEAN CONSTANT; %W0307376000
IF T2 ~ 0 & WHOLE[44:25:2] > 7 THEN EMITNUM(C) %W0307377000
ELSE EMIT(T2); ACLASS ~ BOOID; GO TO BSX; %W0307377050
A15: IF INCRF!0 THEN GO AER; EMITL(12); ACLASS~ SYMID; GO BSX; %M07377100
A21: EMITNUM(TAKE(GIT(WHOLE))); ACLASS ~ SYMID; GO TO BSX; %M07377200
A63: COMMENT CHAINOP; I ~ I-1; T5 ~ BAE; %M07377300
T6 ~ PROGDESCBLDR(1,L,0); EMITV(897); SYMSEC ~ TRUE; %M07377400
SDNORM(MKCHAIN(FALSE)); EMITO(RTN); CONSTANTCLEAN; %M07377500
EMITB(BFW,T5,L); STEPIT; ACLASS~ SYMPROCID; GO TO BS; %M07377600
A61: COMMENT NIL; EMIT(0); ACLASS~ SYMID; %M07377700
IF SCLASS = RECID THEN SCLASS ~ SYMID; GO TO BSX; %M07377800
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; QUOTETOG~QUOTETOGO;DPTOG~DPTOGO END; %M07385000
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
REAL A,B; %M07393500
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 IF ELCLASS}BOOPROCID THEN VARIABLE(2-REAL(FROM)) ELSE %M07402000
IF HOLE.LINK!PROINFO.LINK THEN BEGIN ERR(211); %M07402100
GO EXIT END ELSE %M07402110
IF ELCLASS= STRINGPROCID THEN BEGIN STEPIT; QUOTETOG~TRUE; %M07402120
STEPIT; STRINGSEC(8); QUOTETOG ~ NOT FROM; EMITPAIR(514,STD); %M07402130
EMITPAIR(TAKE(GIT(PROINFO)).[30:10],IF FROM THEN STD ELSE SND); %M07402140
IF NOT FROM THEN EMITV(514) END ELSE %M07402150
IF ELCLASS=DBLPLXPROCID THEN DBLPLXVAR(FROM) ELSE %M07402200
BEGIN ELBAT[I] ~ABS(HOLE)&(ELCLASS+8)[2:41:7]&514[16:37:11]; %M07402300
IF ELCLASS=SYMPROCID THEN SYMVAR(FROM) ELSE RECVAR(FROM) %M07402400
END; GO TO EXIT END; %M07402500
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
IF ELCLASS=STRINGPROCID THEN B~1 ELSE %M07406100
IF ELCLASS=DBLPLXPROCID THEN B ~ NEWP(HOLE) ELSE B ~0; %M07406200
FOR A ~ 1 STEP 1 UNTIL B DO EMIT(0); %M07406300
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
IF HOLE.CLASS = SYMPROCID AND HOLE < 0 AND NOT %M07412100
BOOLEAN(HOLE.FORMAL) THEN %M07412150
ARGLIST(HOLE); %M07412200
EMITV(ADDRESS); 07413000
IF HOLE.CLASS=RECPROCID THEN RECTYPE ~ GETYPE(HOLE); %M07413500
COMMENT MONITOR CODE GOES HERE; 07414000
IF HOLE < 0 07415000
THEN IF HOLE.CLASS=SYMPROCID AND NOT BOOLEAN(HOLE.FORMAL) %M07416000
THEN BEGIN EMITPAIR(JUNK,SND); SYMONITOR(TRUE,HOLE,0,4);%T9307416500
END ELSE BEGIN %M07417000
EMITL(JUNK); EMITO(SND); EMITO(MKS); 07418000
EMITV(JUNK); EMITL(PASSTYPE(HOLE)); 07419000
EMITPAIR(GNAT(POWERSOFTEN),LOD);PASSALPHA(HOLE);07420000
EMITPAIR(GNAT(CHARI ),LOD); PASSMONFILE(TAKE07421000
(GIT(HOLE)).FUNCMONFILE); EMITL(1); 07422000
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
REAL HOLE; HOLE ~ ELBAT[I]; %M07429500
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 BEGIN %M07441000
GT2 ~ IF ELCLASS=DBLPLXSTRPROCID THEN NEWP(ELBAT[I])+1 ELSE 1; %M07441100
FOR GT1~1 STEP 1 UNTIL GT2 DO EMIT(0) END; EMITO(MKS); STEPIT; %M07441200
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 LITS TO MAKE SPACE FOR LOCALS INSIDE 07450000
OF STREAM PROCEDURES; 07451000
IF ELCLASS ! LEFTPAREN THEN ERR(128) 07452000
ELSE BEGIN 07453000
ACTUALPARAPART(FALSE,TRUE,GT3); EMITV(ADDRS) END; 07454000
IF HOLE.CLASS=RECSTRPROCID THEN RECTYPE ~ GETYPE(HOLE) %M07454500
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
VARIABLE(FL); 07464750
IF TABLE(I-2)=FACTOP THEN % A[*] = AUXMEM RELEASE. 07465000
BEGIN 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
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
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
REAL T,N; %A07503500
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); EMITL(0); EMITV(GNAT( 07516000
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 NOGO; %M07528500
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
XMARK; 07596500
DO BEGIN ADJUST; IF STEPI ! COLON THEN 07597000
BEGIN ERR(133); GO TO EXIT END; 07598000
IF NOT LOCAL(ELBATWORD ~ ELBAT[I-1]) 07599000
THEN BEGIN FLAG(134); GO TO ROUND END; 07600000
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); EMITL(0); 07619000
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(R); VALUE R; REAL R; %M07646100
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 TAIL>, 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
REAL T; %M07646393
LABEL LX; %M07646395
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 FLAG(70);I~I-1; COMPOUNDTAIL; GO XIT END;%T9007646440
EMITV(PRT:=GETSPACE(TRUE,-3)); % CASE STMNT. DESCR. 07646450
EMITO(BFW); ADR ~ L; 07646460
T ~ R.[41:6]; %M07646465
LOOP: 07646470
ERRORTOG ~ TRUE; 07646475
IF BOOLEAN(R) THEN BEGIN QUOTETOG ~ T = 5; %M07646476
DPTOG ~ T=6 OR T=8; IF STEPI = ENDV THEN BEGIN %M07646477
QUOTETOG ~ DPTOG ~ FALSE; GO LX END; I~ I -1 END ELSE BEGIN %M07646478
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; I ~ I-1 END; %M07646500
TEDOC[N.[38:3], N.[41:7]] ~ L-ADR; N ~ N + 1; 07646510
IF NOT BOOLEAN(R) THEN BEGIN STEPIT; %M07646512
IF SIMPGO THEN 07646515
BEGIN COMMENT SIMPLE GO TO. DO NOT EMIT BRANCH TO RESUME; 07646520
ELBAT[I~I-1] ~ ELCLASS ~ GOV; 07646525
STMT; IF ELCLASS = SEMICOLON THEN GO TO LOOP 07646530
ELSE GO TO LX %M07646532
END ELSE I ~ I-1 END; %M07646535
IF BOOLEAN(R) THEN GENEXP(R.[41:6]) ELSE BEGIN STEPIT; STMT END; %M07646540
IF ELCLASS = SEMICOLON THEN %M07646542
BEGIN EMIT (LINK); LINK ~ L ~ L+1; GO TO LOOP END 07646545
; LX: %M07646550
IF ELCLASS ! ENDV THEN BEGIN ERR( 71); GO TO LOOP END; 07646555
% %D9907646556
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; 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;% %D07646705
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
PROCEDURE FILLSTMT;BEGIN 07647000
COMMENT THE FOLLOWING PROCEDURE HANDLES THE FILL STATEMENT. 07648000
IT EMITS CODE TO PASS THE ROW TO BE FILLED AND TO PASS 07649000
THE INDEX IN THE SEGMENT DICTIONARY OF THE FILL SEGMENT. 07650000
THESE SEGMENTS LOOK LIKE ANY OTHER SEGMENT TO THE MCP. 07651000
NO FILL SEGMENT IS EVER BROUGHT INTO CORE.THE SEGMENT 07652000
RESIDES ON THE DRUM AND IS READ INTO THE ROW DESIGNATED 07653000
BY THE FILL STATEMENT EVERY TIME THE FILL STATEMENT IS 07654000
EXECUTED.STRINGCONSTANTS,LITERAL ,AND NONLITERAL NUMBERS 07655000
ARE ALL CONVERTED BY THE SCANNER AND NUMBER BUILDER.OCTAL 07656000
NUMBERS LOOK LIKE IDENTIFIERS TO FILLSTMT AND ARE CONVERTED 07657000
BY COCT.AFTER BUILDING THE SEGMENT AN ENTRY IS MADE IN PDPRT 07658000
TO SUPPLY INFO TO BUILD A DRUM DESCRIPTOR IN THE SEGMENT 07659000
DICTIONARY.THE COMMUNICATE LITERAL IS 7; 07660000
LABEL L2,L3,L4; %W0307675000
INTEGER LX,SG; % %W0307675500
REAL T1,T3; 07676000
BOOLEAN V; %M07676100
ARRAY TEDOC[0:7,0:127]; DEFINE T2=T3.[38:3],T3.[41:7]#; 07676500
LABEL L,L1,EXIT; 07677000
IF STEPI<BOOARRAYID OR ELCLASS>INTARRAYID THEN 07678000
IF ELCLASS=FILEID OR ELCLASS=SUPERFILEID THEN 07678100
BEGIN MAKEALABEL; GO TO EXIT END ELSE 07678200
BEGIN IF ELCLASS!STRINGID AND ELCLASS! STRINGARRAYID THEN %M07679000
BEGIN ERR(300); GO EXIT END END; %M07679500
IF ELCLASS < BOOARRAYID THEN %M07679600
STRINGVAR( TRUE) ELSE BEGIN %M07679700
VARIABLE(FL );COMMENT FL TELLS THE VARIABLE ROUTINE 07680000
IT IS COMING FROM THE FILL STATEMENT SO 07681000
IT MAY EXPECT A ROW DESIGNATOR.VARIABLE 07682000
THEN EMITS THE CODE; 07683000
IF TABLE(I - 2) ! FACTOP THEN FLAG(304); 07683100
END; %M07683150
IF ELCLASS!WITHV THEN BEGIN ERR(301); GO EXIT END; 07684000
STREAMTOG ~ BOOLEAN(2); 07684005
IF TABLE(I+1) { IDMAX THEN 07684010
IF Q = "7INQUI" THEN 07684020
BEGIN EMITL(9); EMITO(COM); EMITO(DEL); 07684030
STREAMTOG ~ FALSE; 07684035
I ~ I+1; STEPIT;GO TO EXIT END; 07684040
EMITNUM(SGAVL); T1 ~ 2|SGAVL-1; EMITL(7);T1~T1&1[5:47:1]; 07685000
EMITO(COM); EMITO(DEL); EMITO(DEL); SEGMENTSTART; 07686000
MOVECODE(TEDOC,EDOC); 07686500
BUILDLINE ~ BOOLEAN(2|REAL(BUILDLINE)); % 07686600
LX :=LL; SG := SGNO; SGNO := SGAVL; % %W0307686700
IF STEPI=DECLARATORS AND ELBAT[I].ADDRESS=STRINGV THEN BEGIN %M07687000
QUOTETOG~TRUE; STEPIT; QUOTETOG ~ FALSE; %M07687050
IF ELCLASS!QUOTEOP THEN BEGIN ERR(305); GO TO L1 END; T3~0; %M07687100
DO BEGIN %M07687200
COUNT ~ 0; %M07687300
DO BEGIN CHKND; RESULT~5; SCANNER; CHKND; %M07687400
END UNTIL (V ~ EXAMIN(NCR)=""") OR COUNT=8; %M07687500
MOVECHARACTERS(COUNT,ACCUM[1],3,EDOC[T2],0); %M07687600
END UNTIL T3 ~ T3 + 1 = 1022 OR V; %M07687700
IF V THEN BEGIN RESULT~5; SCANNER; STEPIT END ELSE ERR(305); %M07687800
GO TO L1 END ELSE I ~ I - 1; %M07687900
L:FOR T3~0 STEP 1 UNTIL 1022 DO 07688000
BEGIN LL:= T3 | 4; % %W0307688500
BEGIN IF STEPI=LITNO OR ELCLASS=NONLITNO THEN GO L2; %W0307689000
IF ELCLASS = STRNGCON THEN %W0307690000
IF COUNT=8 THEN BEGIN MOVECHARACTERS(8,ACCUM[1],3,%W0307690500
EDOC[T2],0); GO TO L3 END ELSE GO TO L2; %W0307691000
IF ELCLASS = ADOP THEN BEGIN %W0307691500
IF STEPI=LITNO OR ELCLASS=NONLITNO THEN BEGIN %W0307692000
C ~ C&ELBAT[I-1][1:21:1]; GO TO L2 END %W0307692500
END ELSE %W0307693000
IF ELCLASS{IDMAX THEN BEGIN %W0307693500
IF ACCUM[1].[18:18] ="OCT" THEN BEGIN %W0307694000
ACCUM[1].[18:18]~0; %W0307694500
OCTCON(FALSE,ACCUM[0]); GO TO L4 END %W0307695000
END ELSE %W0307695500
IF ELCLASS=TRUTHV THEN BEGIN %W0307696000
IF ELBAT[I].ADDRESS>1 THEN BEGIN %W0307697000
L4: MOVE(1,ACCUM[0],EDOC[T2]); GO TO L3 END END;%W0307698000
I ~ I-1; C ~ 0; COMMENT BLANK FIELD IS ZERO; %W0307699000
L2: MOVE(1,C,EDOC[T2]); %W0307700000
L3: C ~ 0; %W0307701000
IF STEPI!COMMA THEN GO TO L1 07702000
END; 07703000
END; % %W0307703500
L1: 07704000
07705000
LL:= LX; SGNO := SG; % %W0307705500
STREAMTOG~FALSE; 07706000
SEGMENT(T3+1,SGAVL,SGNO); 07707000
MOVECODE(TEDOC,EDOC); 07707500
BUILDLINE ~ BUILDLINE.[46:1] ; 07707650
SGAVL~SGAVL+1; 07708000
EXIT: END; 07709000
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
INTEGER T; %M07715500
LABEL AGAIN,LERR,LDEC,LPROC,LSPROC,LVAR,LAB,LREAD,LWRITE, 07716000
LFIELD,LSTRING,LINDBL,LINSYM,LATRNS,LTRN,LCHAIN,LSDCV,LSYMV,LDCA, %M07716500
LSPACE,LCLOSE,LLOCK,LRWND,LDBL,LFOR,LWHILE,LDO,LFILL,LIF, 07717000
LRV,LATE, %A07717500
LGO, LRELSE, LBEG, LBRK, EXIT; 07718000
SWITCH S ~ 07719000
LPROC,LSPROC,LFIELD,LSTRING,LINDBL,LINSYM,LERR,LERR,LATRNS,LERR , %M07720000
LTRN,LERR,LERR,LERR,LERR,LERR,LERR,LERR,LERR,LPROC, %M07720100
LPROC,LPROC,LPROC,LPROC,LPROC,LPROC,LPROC,LSTRING,LSDCV,LSYMV, %M07721000
LRV,LVAR,LVAR,LVAR,LVAR,LSTRING,LDCA,LSYMV,LRV,LATE, %A07722000
LATE,LATE,LATE,LAB,LERR,LERR,LERR,LERR,LERR,LERR, %A07723000
LERR,LCHAIN,LDEC,LREAD,LWRITE,LSPACE, %M07724000
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=LFTBRKET THEN BEGIN SFEXP(TRUE,TRUE,0); GO EXIT END; %A07729050
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
LATRNS: IF T ~ ELBAT[I].[27:6] <21 OR T >23 THEN GO TO LERR; %M07730100
IF T < 23 THEN BEGIN %M07730150
IF STEPI ! ASSIGNOP THEN GO LERR; %M07730160
STEPIT; AEXP; EMITO(SSP); %M07730180
EMITPAIR(IF T=21 THEN TABR ELSE COLR,ISD); GO TO EXIT END; %M07730200
FIXCLASS(REALID,INREAL,FALSE); GO TO LVAR; %A07730250
LCHAIN: GT1 ~ MKCHAIN(TRUE); GO TO EXIT; %M07730300
LFIELD: IF ELBAT[I].ADDRESS=STRINGV THEN GO LSTRING; %M07730350
FIELDC(ELBAT[I],0,TRUE); GO TO EXIT; %M07730375
LINDBL: IF NOT BOOLEAN(ELBAT[I].INCR) THEN GO TO LERR; %M07730400
FIXCLASS(DBLPLXID,INDBL,FALSE); %A07730450
LSDCV: LDCA: DBLPLXVAR(TRUE); GO TO EXIT; %M07730500
LRV: RECVAR(TRUE); GO TO EXIT; %M07730550
LSYMV: SYMVAR(TRUE); GO TO EXIT; %M07730600
LSTRING: STRINGSEC(2); GO TO EXIT; %M07730650
LTRN: NVALINT; GO TO EXIT; %M07730700
LINSYM: IF ELBAT[I].INCR ! 9 THEN GO TO LERR; %M07730750
ELBAT[I].CLASS ~ SYMID; ELBAT[I].ADDRESS ~ INSYM; GO TO LSYMV; %M07730800
LDEC: IF DECLCHECK THEN FLAG(146) ELSE BEGIN DBLSTMT; GO TO EXIT END; %M07731000
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
LATE: IF TABLE(I+1) ! LFTBRKET THEN BEGIN %A07735500
IF BASICMATRIX THEN STRINGSEC(2) END %A07735505
ELSE VARIABLE(FS); GO EXIT; %A07735510
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: CASESTMT(0); GO TO EXIT; %M07746000
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 IF DECLCHECK %M07754500
THEN BEGIN I ~ I-1; BLOCK(FALSE) END 07755000
ELSE COMPOUNDTAIL %M07755500
ELSE COMPOUNDTAIL; 07756000
EXIT: END STMT; 07757000
PROCEDURE UNKNOWNSTMT; 07800000
BEGIN LABEL XXX,E; 07801000
REAL J,N,C; 07802000
IF Q="5ERROR" THEN BEGIN EMITO(MKS); EMITL(SGNO); %M07802100
EMITL((L+3)DIV 4); PANA; EMITV(ERRPRO); GO TO XXX END; %M07802200
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 = "3ZIP00" THEN 07811000
BEGIN IF TABLE(I+1) = WITHV THEN 07812000
BEGIN STEPIT; IF ROWD(TRUE) THEN BEGIN %A07813000
IF MAKEROW THEN GO TO E END ELSE %A07814000
IF ELCLASS=FILEID OR ELCLASS = SUPERFILEID %A07814100
THEN PASSFILE ELSE GO E; %A07814200
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 = "4SWAP0" THEN 07825600
BEGIN ALPHA C, D; 07825610
EMITO(MKS); %A07825615
IF STEPI ! LEFTPAREN THEN 07825620
BEGIN ERR(105); GO TO XXX END; 07825630
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN 07825640
BEGIN ERR(171); GO TO XXX END; 07825650
IF TAKE(GIT(C~ELBAT[I])).[40:8] ! 2 THEN FLAG(171); 07825660
EMITPAIR(C.ADDRESS,LOD); %A07825670
CHECKER(C); ERRORTOG~TRUE; %T9007825675
IF STEPI ! COMMA THEN 07825680
BEGIN ERR(170); GO TO XXX END; 07825690
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN 07825700
BEGIN ERR(171); GO TO XXX END; 07825710
IF TAKE(GIT(D~ELBAT[I])).[40:8] ! 2 THEN FLAG(171); 07825720
EMITPAIR(D.ADDRESS,LOD); %A07825730
CHECKER(D); ERRORTOG~TRUE; %T9007825735
IF STEPI ! RTPAREN THEN ERR(104) ELSE STEPIT; 07825740
EMITV(GNAT(SWAPPER)); 07825750
GO TO XXX; 07825760
END ELSE 07825770
IF Q .[24:24]="MARG" THEN BEGIN FIXCLASS(INTID,0,TRUE); %A07825790
VARIABLE(FS); GO TO XXX END ELSE %A07825800
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
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
IF ROWD(TRUE) THEN BEGIN %T9207859040
IF MAKEROW THEN FLAG(208) ELSE L ~ L - 1; %T9207859050
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
END ELSE ERR(208); %T9207859085
GO TO XXX 07859090
END ELSE %T9207859095
IF Q = "7TWXLO" THEN BEGIN %T9207859100
IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO XXX END; %A07859200
QUOTETOG ~ TRUE; STEPIT; QUOTETOG ~ FALSE; %A07859300
IF ELCLASS ! QUOTEOP THEN BEGIN ERR(637); GO XXX END; %A07859400
QUOTETOG ~ TRUE; EMITNUM(SFTERM(FALSE)); %A07859500
IF ELCLASS ! COMMA THEN BEGIN ERR(606); GO XXX END;% %A07859600
IF STEPI ! SYMSTRPROCID THEN BEGIN ERR(680); GO XXX END;% %A07859700
IF NOT BOOLEAN(J~ELBAT[I]).FORMAL THEN %A07859710
IF TAKE(GIT(J)).[40:8]!0 THEN BEGIN ERR(732); GO XXX END; %A07859720
EMITPAIR(ELBAT[I].ADDRESS,LOD); EMITV(TWXLOOP); %A07859800
STEPIT; %A07859850
RTPARN; GO XXX END ELSE% %A07859900
IF Q = "8FREEL" OR Q = "7NEXTA" THEN BEGIN% %A07859910
FIXCLASS(INTID,Q,BOOLEAN(3)); VARIABLE(FS); GO XXX END ELSE %A07859920
IF Q="@COMMU" THEN BEGIN % %T2907860000
GOTCHA := GOTCHA AND NOT STREAMER; % %T0307860050
PANA; EMITO(COM); GO XXX END ELSE %T2907861000
%T9307862000
%T9307864000
%T9307865000
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
COMMENT FORSTLIST COMPILES THE CONSTRUCT FOR <LIST> DO <STATEMENT>; %W3307915000
PROCEDURE FORSTLIST(J); VALUE J; INTEGER J; %W3307915010
BEGIN %W3307915020
INTEGER LISTADDRESS,JUMPPLACE,LL,NAME; %W3307915030
REAL LINFO,TEMP,VOBIT; %W3307915040
CHECKER(ELBAT[I]); %W3307915050
COMMENT J=0 IF FORSTLIST CALLED BY FORSTMT %W3307915060
J!0 IF FORSTLIST CALLED BY FORSTLIST; %W3307915070
IF J=0 THEN %W3307915080
BEGIN %W3307915090
EMITL(0); ADJUST; JUMPPLACE ~ L; %W3307915100
END ELSE JUMPPLACE ~ J; %W3307915110
EMITPAIR(LSTRTN,SND); %W3307915120
LISTADDRESS ~ ELBAT[I].ADDRESS; %W3307915130
COMMENT SET UP THE LIST AS IF IT WERE A REAL VARIABLE; %W3307915140
TEMP ~ TAKE(LINFO ~ ELBAT[I].LINK); %W3307915150
IF MODE = 0 THEN FLAG(510) ELSE %73 %W3307915155
NAME ~ GETSPACE(FALSE,-1); %W3307915160
VOBIT ~ IF BOOLEAN(TEMP.FORMAL) THEN TEMP ELSE TEMP & 2[9:46:2];%W3307915170
PUT(VOBIT & LEVEL[11:43:5] & REALID[2:41:7] & NAME[16:37:11], %W3307915180
LINFO); %W3307915190
EMITN(LISTADDRESS); EMITPAIR(NAME,STD); %W3307915200
EMITV(LSTRTN); EMITPAIR(0,GEQ); LL ~ BUMPL; %W3307915210
IF STEPI = COMMA THEN %W3307915220
IF STEPI = LISTID THEN FORSTLIST(JUMPPLACE) ELSE ERR(475) %W3307915230
ELSE BEGIN %W3307915240
IF ELCLASS!DOV THEN ERR(475) ELSE STEPIT; EMITO(DEL); %W3307915250
COMMENT ERROR 475 INDICATES MISSING DO OR NON LIST ELEMENT; %W3307915260
DIALA ~ DIALB ~ 0; %W3307915270
STMT; %W3307915280
EMITL(5); EMITB(BBW,BUMPL,JUMPPLACE); %W3307915290
CONSTANTCLEAN; ADJUST; %W3307915300
EMITO(DEL); EMITL(5); %W3307915310
EMITPAIR(LSTRTN,STD); %W3307915320
END; %W3307915330
EMITB(BFC,LL,L-4); %W3307915340
COMMENT SET THE LIST BACK TO BE A LIST (NOW REAL); %W3307915350
PUT(TAKE(LINFO)& TEMP[1:1:34],LINFO); %W3307915360
DIALA ~ DIALB ~ 0; %W3307915370
END FORSTLIST; %W3307915380
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 := TRUE & (FAULTOG.[46:1]) [46:47:1]; % %D0107923100
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 NOT ROWD(TRUE) THEN %M07939000
BEGIN ERR(429); GO TO EXIT; END; 07940000
IF MAKEROW THEN %M07941000
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 REPONSIBLE 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 A 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,XIT; %W3308017000
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; 08039000
COMMENT TEST EMITS THE STEP-UNTIL ELEMENT TEST; 08040000
PROCEDURE TEST; 08041000
BEGIN 08042000
IF NOT CONSTANB THEN 08043000
BEGIN EMITO(SUB); IF SIMPLEB THEN EMITV(B.ADDRESS) 08044000
ELSE BEGIN 08045000
EMITL(2+L-BRET); 08046000
EMITB(BBW,BUMPL,B); 08047000
END; 08048000
EMITO(MUL); EMIT(0) END; 08049000
EMITO(IF SIGNB THEN GEQ ELSE LEQ); EMIT (0); L~L-1 08050000
END TEST; 08051000
BOOLEAN PROCEDURE SIMPI(ALL); VALUE ALL; REAL ALL; 08052000
BEGIN 08053000
CHECKER(VRET~ALL); 08054000
ADDRES ~ ALL.ADDRESS; 08055000
FORMALV ~ ALL.[9:2] = 2; 08056000
IF T ~ ALL.CLASS > INTARRAYID OR T< REALID OR %M08057000
(T > INTID AND T< REALARRAYID) THEN %M08058000
ERR(REAL(T ! 0) | 51 + 100); 08059000
INT ~ T= INTID OR T= INTARRAYID; %M08060000
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
LABEL NF; %M08173500
NXTELBT ~ 1; I ~ 0; 08174000
IF STEPI = LITNO OR ELCLASS = NONLITNO THEN BEGIN %M08175000
EMITNUM(C); %M08175050
NF: T1 ~ L; EMITPAIR(T3 ~FORAD,SND); EMIT(0); %M08175075
EMITO(GTR); T2 ~ BUMPL; %M08175100
IF STEPI= DOV THEN STEPIT ELSE BEGIN ERR(154); GO EXIT END; %M08175150
STMT; DCRFR; %M08175225
EMITV(T3); EMITL(1); EMITO(SUB); EMITB(BBW,BUMPL,T1); %M08175250
EMITB(BFC,T2,L); GO TO EXIT END; %M08175300
IF ELCLASS = SYMID THEN BEGIN CHECKER(VRET ~ ELBAT[I]); %M08175350
T4 ~ VRET.ADDRESS; FORMALV ~ VRET.[9:2]=2; %M08175400
IF (INT~ STEPI = DECLARATORS AND ELBAT[I].ADDRESS= INV) OR %M08175450
ACCUM[1] = "2ON000" THEN BEGIN QUOTETOG ~ TRUE; %M08175500
STEPIT; SEXPN; QUOTETOG ~ FALSE; %M08175510
IF INT THEN BEGIN MARKSYM ~ RECLAIMTOG; %M08175540
T3 ~ FORAD; MARKSYM ~ FALSE; %M08175550
T1 ~ L; GETCONTENTS(0,FALSE); %M08175560
EMITPAIR(T3,SND); EMIT(0); EMITO(GEQ); %M08175570
IF ELCLASS=WHILEV THEN BEGIN STEPIT; BEXP; EMITO(LND) END %M08175572
ELSE IF ELCLASS=UNTILV THEN BEGIN STEPIT; BEXP; EMITLNG; %M08175575
EMITO(LND) END; %M08175577
IF ELCLASS = DOV THEN STEPIT ELSE %M08175578
BEGIN ERR(154); GO EXIT END; %M08175579
T2 ~ BUMPL; EMITV(T3); EMITI(0,18,15); %M08175580
IF FORMALV THEN BEGIN EMITN(T4); EMITO(STD) END ELSE %M08175590
EMITPAIR(T4,STD); %M08175600
STMT; FORLEVEL ~ FORLEVEL-REAL(RECLAIMTOG)-1; EMITV(T3); %M08175610
EMITB(BBW,BUMPL,T1); EMITB(BFC,T2,L); %M08175620
IF RECLAIMTOG THEN BEGIN EMIT(0); EMITPAIR(T3,STD) END %M08175630
END ELSE %M08175640
BEGIN T1 ~ L; EMITI(0,33,15); %M08175650
IF FORMALV THEN BEGIN EMITN(T4); EMITO(SND) END ELSE %M08175660
EMITPAIR(T4,SND); EMIT(0); EMITO(NEQ); %M08175670
IF ELCLASS=WHILEV THEN BEGIN STEPIT; BEXP; EMITO(LND) END %M08175680
ELSE IF ELCLASS=UNTILV THEN BEGIN STEPIT; BEXP; EMITLNG; %M08175690
EMITO(LND) END; %M08175700
IF ELCLASS = DOV THEN STEPIT ELSE %M08175703
BEGIN ERR(154); GO EXIT END; %M08175705
T2 ~ BUMPL; %M08175710
STMT; %M08175720
EMITV(T4); GETCONTENTS(0,FALSE); %M08175730
EMITB(BBW,BUMPL,T1); %M08175740
EMITB(BFC,T2,L); %M08175750
END END ELSE ERR(151); %M08175760
GO TO EXIT END; %M08175780
IF ELCLASS = LISTID AND NOT LISTMODE THEN %W3308175785
BEGIN FORSTLIST(0); GO TO XIT END; %W3308175790
IF SIMPI(VRET~ELBAT[I]) 08176000
THEN BEGIN 08177000
IF STEPI!ASSIGNOP THEN BEGIN %M08178000
IF ELCLASS!DOV THEN BEGIN ERR(152); GO EXIT END; %M08178100
EMITV(ADDRES); I ~ I - 1; GO NF END; %M08178200
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; XIT: END FORSTMT; %W3308232000
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 LISTPARA; %W3308289100
BEGIN %W3308289200
INTEGER LISTADDRESS; %W3308289300
IF ELCLASS=LFTBRKET THEN %W3308289400
BEGIN %W3308289500
STEPIT; RR1 ~ LISTGEN; %W3308289600
IF ELCLASS ! RTBRKET THEN ERR(158) ELSE STEPIT %W3308289700
END %W3308289800
ELSE IF ELCLASS ! LISTID AND ELCLASS ! SUPERLISTID %W3308289810
THEN RR1 ~ LISTGEN %W3308289820
ELSE BEGIN %W3308289830
CHECKER(ELBAT[I]); %W3308289840
LISTADDRESS ~ ELBAT[I].ADDRESS; %W3308289850
IF ELCLASS = SUPERLISTID THEN %W3308289860
BEGIN COMMENT SUBSCRIPTED SWITCH LIST ID; %W3308289870
BANA;EMITN(LISTADDRESS); %B8-6 %67 %W3308289880
EMITO(LOD); %B8-6 %67 %W3308289884
EMITO(LOD); %W3308289886
END ELSE %W3308289890
BEGIN COMMENT A COMMON LIST ID; %W3308289900
EMITL(LISTADDRESS); IF LISTADDRESS > 1023 THEN EMITO(PRTE); %W3308289910
EMITO (LOD); STEPIT; %W3308289915
END %W3308289920
END %W3308289930
END LISTPARA; %W3308289940
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 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
INTEGER LISTADDRESS; COMMENT TEMP TO HOLD LIST ADD DESC; 08385500
LABEL EXPFORMR; %W4008385550
BOOLEAN SEEKTOG,LOCKTOG,GRABTOG; % %P08385600
BOOLEAN JR; LABEL REMT; %A08385650
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
IF JR ~ ACCUM[1] = "3TWX00" THEN BEGIN STEPIT; EMITO(MKS); %A08388100
GO REMT END; %A08388200
IF ELCLASS = LFTBRKET THEN BEGIN % %T6008388300
DO IF SYMID { STEPI AND ELCLASS { INTID THEN BEGIN % %T6008388350
CHECKER(RR9 ~ ELBAT[I]); % %T6008388400
EMITO(MKS); EMITV(TERPRIN); % %T6008388425
EMITO(MKS); MKALF(RR9); EMITV(ALFPRINT); % %T6008388450
EMITO(MKS); EMITL(" "); EMITV(CHARPRINT); % %T6008388475
EMITO(MKS); EMITL("="); EMITV(CHARPRINT); % %T6008388500
EMITO(MKS); EMITV(TERPRIN); % %T6008388525
EMITO(MKS); % %T6008388550
IF ELCLASS = SYMID THEN EMITV(READ1) ELSE BEGIN % %T6008388554
EMIT(IF ELCLASS = ALFAID THEN 40 ELSE 20); % %T6008388558
EMIT(0); EMITV(READN); END; % %T6008388560
EMITN(RR9.ADDRESS); % %T6008388650
EMITO(IF ELCLASS = INTID THEN ISD ELSE STD); % %T6008388700
RR8 ~ BUMPL; CONSTANTCLEAN; EMITB(BFW,RR8,L); % %T6008388725
END ELSE BEGIN ERR(638); GO EXIT; END % %T6008388750
UNTIL STEPI ! COMMA; % %T6008388800
IF ELCLASS ! RTBRKET THEN ERR(118) ELSE STEPIT; % %T6008388850
GO EXIT; % %T6008388900
END; % %T6008388950
REVERSETOG~ACCUM[1]="7REVER"; 08389000
LOCKTOG ~ ELCLASS=LOCKV; %R08390000
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 ROWD(TRUE) THEN %M08401000
BEGIN %M08401020
IF ELCLASS = STRINGID THEN %A08401021
IF ACCUM[1] = "5TWXS1" AND DACP ! 0 THEN BEGIN %A08401022
REMT: DACP ~ -ABS(DACP); %A08401023
IF DAC[4]=0 OR DAC[5]=0 OR DACOMI = 0 THEN %A08401024
BEGIN FLAG(880); DACOMI := 1; END; %T9308401025
EMIT(0); EMITPAIR(CPI,STD); EMITL(1); EMITPAIR(DAC[4],STD); %A08401026
EMITV(DACOMI); EMITO(DEL); %A08401027
IF JR THEN GO EXIT; %T9308401028
IF TABLE(I+1) = RTPAREN THEN BEGIN STEPIT; GO EXIT END; %T9308401029
EMITO(MKS); END; %T9308401030
IF MAKEROW THEN %T9308401035
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>], %B0208410000
%%% [*],[*,*],[*,<AEXP>],[<AEXP>],[<AEXP>,*], 08410010
%%% AND [<AEXP>,<AEXP>]. THE FIRST (LEFTMOST) 08410020
%%% <AEXP> IS THE READSEEKDISTADDRESS, RESIDING08410030
%%% 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-ON08411020
%%% THE EXP-SIGN BIT OF DSKADDR.X"S ARE EMPTIES08411030
%%% IN THE ABOVE, NS = NO OR STOP. %B0208411040
STEPIT; %%% STEP OVER [, AND POINT AT NEXT ITEM. 08412000
IF RR1~IF ACCUM[1]="2NO000" THEN 1 ELSE %B0208412010
IF ACCUM[1]="4STOP0" THEN 2 ELSE %B0208412020
0 ! 0 THEN %%% HAVE [NS %B0208412030
IF STEPI=COMMA THEN %%% HAVE [NS, %B0208412040
IF STEPI=FACTOP THEN %%% HAVE [NS,* %B0208412050
BEGIN %B0208412060
IF RR1=1 THEN EMITNO(1) %B0208412070
ELSE BEGIN EMITL(1); EMITL(2) END;%B0208412080
STEPIT ; %B0208412090
END %B0208413000
ELSE %B0208413010
BEGIN %%% HAVE [NS,AEXP %B0208413020
IF RR1=2 THEN EMITL(1) ; %B0208413030
EMITTIME ; %B0208413040
IF RR1=2 THEN %B0208413050
BEGIN EMITO(LOR); EMITL(2) END %B0208413060
ELSE EMITL(1) ; %B0208413080
END %B0208413090
ELSE IF RR1=1 THEN EMITNO(1) %%% ONLY HAVE [NS %B0208413100
ELSE BEGIN EMITL(1); EMITL(2) END %B0208413110
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 BEGIN EMITTIME; EMITL(2) END%[*,A08414020
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 BEGIN EMITTIME; EMITO(LOR) END ; 08416020
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 % %P08418250
BEGIN AEXP; EMITPAIR(JUNK,ISN) END ELSE % %P08418300
BEGIN EMITL(1); GRABTOG ~ TRUE; STEPIT END ELSE %P08418350
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 ; % %P08418800
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 EXPLICITFORMAT THEN GO TO EXPFORMR; %W4008430500
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 %B0208437000
BEGIN EMITL(1); I~I-1; END ; %B0208437050
EMITL(0); GO TO PASSLIST ; %B0208437075
END; 08438000
IF RANGE(FRMTID,SUPERFRMTID) 08439000
THEN BEGIN COMMENT THE SECOND PARAMETER IS A FORMAT; 08440000
PASSFORMAT; 08441000
EXPFORMR: %W4008441500
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 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 ROWD(FALSE) %M08457000
THEN BEGIN COMMENT THIS IS THE ROW DESIGNATOR CASE; 08458000
IF MAKEROW %M08459000
% %M08460000
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
STEPIT; LISTPARA; %W3308479000
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
12 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
% THIS CARD MERELY OCCUPIES A SEQUENCE NUMBER. 08493110
% 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 IF 08493790
ATTRIBUTEINDX=4 THEN "6OTHRUS" ELSE IF ATTRIBUTEINDX=12 08493800
THEN "6ARASIZ" ELSE 08493810
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 ONEPARFNSH; COMMENT I IS POINTING 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 EXPFORMW; %W4008591150
INTEGER LISTADDRESS; COMMENT TEMP TO HOLD LIST ADD DESC; 08591500
BOOLEAN LOCKTOG,ARC; 08591600
BOOLEAN REMOTE; %A08591650
INTEGER HOLD;% 08591700
IF (LOCKTOG~STEPI=LOCKV) THEN STEPIT; 08592000
IF REMOTE ~ ACCUM[1] = "3TWX00" THEN BEGIN STEPIT; GO EXIT END; %A08592500
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 ROWD(TRUE) THEN %M08597100
BEGIN %M08597200
IF ELCLASS = STRINGID THEN REMOTE ~ ACCUM[1] = "5TWXS2" %A08597250
AND DACP ! 0; %A08597260
IF MAKEROW THEN %M08597300
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
ONEPARFNSH: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
PARARAMETER 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 IS 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 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 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 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 ONEPARFNSH; 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: IF EXPLICITFORMAT THEN GO TO EXPFORMW ELSE STEPIT; %W4008643000
IF RANGE(FRMTID,SUPERFRMTID) 08644000
THEN BEGIN COMMENT THIS IS THE FORMAT FORM OF THE WRITE; 08645000
PASSFORMAT; 08646000
EXPFORMW: %W4008646500
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) %B0208653120
ELSE IF STEPI=MULOP THEN BEGIN EMITO(SSN); STEPIT END;%B0208653125
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 ; %B0208653195
IF ELCLASS=LFTBRKET THEN %%% FREE FIELD = /[AEXP]. %B0208653200
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 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 ROWD(FALSE) %M08665000
THEN BEGIN COMMENT THIS IS THE ROW DESIGNATOR CASE; 08666000
IF MAKEROW %M08667000
% %M08668000
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
%W3308687000
STEPIT; LISTPARA; %W3308688000
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
IF REMOTE THEN BEGIN EMITL(RMARG ); EMITPAIR(TABR,STD); %T9008699100
EMITO(MKS); EMITV(TERPRIN) END; %A08699200
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 ROWD(FALSE) THEN %T9208728100
BEGIN ERR(451); GO TO EXIT END; 08728200
IF MAKEROW THEN FLAG(208) ELSE L ~ L-1; %T9208728300
%T9208728400
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 LAST08772000
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 UNIT 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 DISPOSTION 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 CONTAINS THE 08837000
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
%T9308860250
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
DKO 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
PROCEDURE CHECKSTREAMS; BEGIN DEFINE SEGMENT=#; % %T0308999000
WRITE(LIN[*],<"RESTRICTED CONSTRUCTS WERE FOUND IN THIS PROGRAM.">);%T0308999200
IF LISTOG OR NOT(REMOTOG OR REMOTERR) THEN BEGIN % %T0308999300
IF NOHEADING THEN DATIME; WRITELINE; END; % %T0308999400
IF REMOTOG OR REMOTERR THEN WRITE(REMOTE[*,9],10,LIN[*])[ENDOFITALL]%T0308999500
; % %T0308999555
ERRORCOUNT := ERRORCOUNT + 1; % %T0308999600
END; % %T0308999700
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
LISTOG ~ BOOLEAN(3-ERRORCOUNT.[46:1]); 09028000
BUILDLINE ~ REMOTOG ~ BOOLEAN(ERRORCOUNT.[47:1]); 09028100
REMOTERR ~ BOOLEAN(ERRORCOUNT.[45:1]); %T1409028110
BUILDLINE ~ BUILDLINE OR BOOLEAN(ERRORCOUNT.[44:1]); %T1409028120
ERRORMAX ~ 99 - 79 | REAL(REMOTOG OR REMOTERR); % %T9809028800
ERRORCOUNT ~ 0; 09028900
LASTUSED ~ 4; 09029000
SGNO~1;SGAVL~2;PDINX~0; 09030000
FILENO~DA~1; 09031000
FILETHING ~ 4095; 09031100
MAXSTACK ~ 513; 09032000
09032100
NEXTINFO ~ LASTINFO ~ LASTSEQROW|256+LASTSEQUENCE+1; 09033000
PUTNBUMP(0); 09034000
FILL RETNE WITH "ENTER ","LIBRARY",*,*,*,12; % %T0309034100
NOTPNTED ~ TRUE; %T0309034900
READACARD; COMMENT THIS IS INITIALIZATION OF NCR,FCR, AND 09035000
LCR. SINCE LASTUSED = 4 NO CARDS ARE ACTUALLY READ; 09036000
LASTUSED ~ 1; COMMENT ASSUMES CARD ONLY UNTIL TOLD; 09037000
NXTELBT~1; FAULTLEVEL~32; 09038000
PRTI ~ PRTIMAX ~ 18; 09039000
MRCLEAN ~ TRUE; 09040000
%T0309040100
LNKNDX ~ 63; %M09041000
RECORDLINK ~ 29; %M09041500
TABLEMARKV ~ 127; %A09042000
% %A09043000
% %A09044000
09045000
09046000
09047000
09048000
09049000
09050000
09051000
09052000
09053000
09054000
09055000
FILL TEN[*] WITH %M09056000
OCT1141000000000000, OCT1131200000000000, OCT1121440000000000, %A09057000
OCT1111750000000000, OCT1102342000000000, OCT1073032400000000, %A09058000
OCT1063641100000000, OCT1054611320000000, OCT1045753604000000, %A09059000
OCT1037346545000000, OCT1011124027620000, OCT0001351035564000, %A09060000
OCT0011643245121000, OCT0022214116345200, OCT0032657142036440, %A09061000
OCT0043432772446150, OCT0054341571157602, OCT0065432127413542, %A09062000
OCT0076740555316473, OCT0111053071060221, OCT0121265707274265, %A09063000
OCT0131543271153342, OCT0142074147406233, OCT0152513201307702, %A09064000
OCT0163236041571663, OCT0174105452130240, OCT0205126764556310, %A09065000
OCT0216354561711772, OCT0231004771627437, OCT0241206170175346, %A09066000
OCT0251447626234640, OCT0261761573704010, OCT0272356132665012, %A09067000
OCT0303051561442215, OCT0313664115752660, OCT0324641141345435, %A09068000
OCT0336011371636744, OCT0347413670206535, OCT0361131664625026, %A09069000
OCT0371360241772234, OCT0401654312370703, OCT0412227375067064, %A09070000
OCT0422675274304701, OCT0433454553366061, OCT0444367706263475, %A09071000
OCT0455465667740415, OCT0467003245730520, OCT0501060411731664, %A09072000
OCT0511274514320241, OCT0521553637404312, OCT0532106607305374, %A09073000
OCT0542530351166673, OCT0553256443424452, OCT0564132154331565, %A09074000
OCT0575160607420123, OCT0606414751324147, OCT0621012014361120, %A09075000
OCT0631214417455344, OCT0641457523370635, OCT0651773450267004, %A09076000
OCT0662372362344605, OCT0673071057035747, OCT0703707272645341, %A09077000
OCT0714671151416631, OCT0726047403722377, OCT0737461304707077, %A09078000
OCT0751137556607071, OCT0761367512350710, OCT0771665435043072, %A09078100
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000, %A09078200
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000, %A09078300
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000, %A09078400
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000, %A09078500
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000, %A09078600
OCT0000000000000000, OCT0000000000000000, OCT0004000000000000, %A09078700
OCT0001000000000000, OCT0001720000000000, OCT0004304000000000, %A09078800
OCT0007365000000000, OCT0005262200000000, OCT0004536640000000, %A09078900
OCT0001666410000000, OCT0000244112000000, OCT0000315134400000, %A09079000
OCT0000400363500000, OCT0000450046042000, OCT0006562057452400, %A09079100
OCT0004316473365100, OCT0005402212262320, OCT0006702654737004, %A09079200
OCT0004463430126605, OCT0007600336154346, OCT0001540425607437, %A09079300
OCT0004070533151346, OCT0005106662003637, OCT0005033043640460, %A09079400
OCT0002241654610574, OCT0002712227752733, OCT0001474675745521, %A09079500
OCT0002014055337045, OCT0004417070626656, OCT0007522706774431, %A09079600
OCT0003447470573537, OCT0006361406732466, OCT0005005571052120, %A09079700
OCT0006207127264544, OCT0001650755141675, OCT0006223150372254, %A09079800
OCT0007670002470727, OCT0007646003207114, OCT0005617404050737, %A09079900
OCT0001163305063126, OCT0007420166277753, OCT0001732422375774, %A09080000
OCT0002321127075373, OCT0003005354714671, OCT0005606650100047, %A09080100
OCT0007150422120060, OCT0003002526544074, OCT0001603254275113, %A09080200
OCT0004144127354335, OCT0007175155247424, OCT0007034410521331, %A09080300
OCT0007664351264561, OCT0003641443541715, OCT0004611754472300; %A09080400
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
OCT1240000600000400, "2SI000", %256 %M09086000
OCT1250001040000402, "2DI000", %258 %M09087000
OCT1260001460000404, "2CI000", %260 %M09088000
OCT1270001630000406, "5TALLY", %262 %M09089000
OCT1300000530000410, "2DS000", %264 %M09090000
OCT1310000150000412, "4SKIP0", %266 %M09091000
OCT1320001620000414, "4JUMP0", %268 %M09092000
OCT1330000740000416, "2DB000", %270 %M09093000
OCT1340000500000420, "2SB000", %272 %M09094000
OCT1360000730000422, "2SC000", %274 %M09095000
OCT1370001160000424, "3LOC00", %276 %M09096000
OCT1400001170000426, "2DC000", %278 %M09097000
OCT1410001430000430, "5LOCAL", %280 %M09098000
OCT1420000340000432, "3LIT00", %282 %M09099000
OCT1430001036400434, "3SET00", %284 %M09100000
OCT1430001066500436, "5RESET", %286 %M09101000
OCT1430001020500440, "3WDS00", %288 %M09102000
OCT1430001357700442, "3CHR00", %290 %M09103000
OCT1430001057300444, "3ADD00", %292 %M09104000
OCT1430001617200446, "3SUB00", %294 %M09105000
OCT1430000727600450, "3ZON00", %296 %M09106000
OCT1430000417500452, "3NUM00", %298 %M09107000
OCT1430000766700454, "3OCT00", %300 %M09108000
OCT1430000176600456, "3DEC00", %302 %M09109000
OCT1354000260000460, "6TOGGL", "E0000000", %304 %M09110000
OCT1000000110001236, "5ALPHA", %307 %M09111000
OCT1700001030001360, "3AND00", %309 %M09112000
OCT1000000230000525, "5ARRAY", %311 %M09113000
OCT1230000000001067, "5BEGIN", %313 %M09114000
OCT1000000070000503, "7BOOLE", "AN000000", %315 %M09115000
OCT1040000000001122, "5CLOSE", %318 %M09116000
OCT1440000000000655, "7COMME", "NT000000", %320 %M09117000
OCT1000000300000000, "6DEFIN", "E0000000", %323 %M09118000
OCT1750006000000000, "3DIV00", %326 %M09119000
OCT1120000000000000, "2DO000", %328 %M09120000
OCT1000000040000000, "6DOUBL", "E0000000", %330 %M09121000
OCT1000000140001255, "4DUMP0", %333 %M09122000
OCT1140000000001300, "4ELSE0", %335 %M09123000
OCT1150000000001047, "3END00", %337 %M09124000
OCT1650002030001163, "3EQV00", %339 %M09125000
OCT0700000000000644, "5FALSE", %341 %M09126000
OCT1000000250000000, "4FILE0", %343 %M09127000
OCT1160000001200000, "4FILL0", %345 %M09128000
OCT1100000000000000, "3FOR00", %347 %M09129000
OCT1000000240000554, "6FORMA", "T0000000", %349 %M09130000
OCT1450000000000000, "7FORWA", "RD000000", %352 %M09131000
OCT1210000000000604, "2GO000", %355 %M09132000
OCT1200000000000000, "2IF000", %357 %M09133000
OCT1000000170000000, "2IN000", %359 %M09134000
OCT1000000120000000, "7INTEG", "ER000000", %361 %M09135000
OCT1660000000000000, "3IMP00", %364 %M09136000
OCT1000000130000000, "5LABEL", %366 %M09137000
OCT1000000150000613, "4LIST0", %368 %M09138000
OCT1050000000000000, "4LOCK0", %370 %M09139000
OCT1750016000001343, "3MOD00",%372 %M09140000
OCT1000000200000000, "7MONIT", "OR000000", %374 %M09141000
OCT1620000000000000, "3NOT00", %377 %M09142000
OCT1670000430000624, "2OR000", %379 %M09143000
OCT1000000160000000, "3OUT00", %381 %M09144000
OCT1000000010000476, "3OWN00", %383 %M09145000
OCT1000000220000463, "9PROCE", "DURE0000", %385 %M09146000
OCT1010000000000000, "4READ0", %388 %M09147000
OCT1000000100000000, "4REAL0", %390 %M09148000
OCT1220000000001215, "7RELEA", "SE000000", %392 %M09149000
OCT1060000000000000, "6REWIN", "D0000000", %395 %M09150000
OCT1000000020000773, "4SAVE0", %398 %M09151000
OCT1030000000000000, "5SPACE", %400 %M09152000
OCT1460000000000000, "4STEP0", %402 %M09153000
OCT1000000260000000, "6STREA", "M0000000", %404 %M09154000
OCT1000000210000562, "6SWITC", "H0000000", %407 %M09155000
OCT1470000000001275, "4THEN0", %410 %M09156000
OCT1500000000000000, "2TO000", %412 %M09157000
OCT0700000010000000, "4TRUE0", %414 %M09158000
OCT1130000000000000, "5UNTIL", %416 %M09159000
OCT1510000000000000, "5VALUE", %418 %M09160000
OCT1110000000000540, "5WHILE", %420 %M09161000
OCT1520000000000000, "4WITH0", %422 %M09162000
OCT1020000000000531, "5WRITE", %424 %M09163000
OCT0240000000140673, "3ABS00", OCT0000202000700000,%426 %M09164000
OCT0240000000061331, "6ARCTA", "N0000000", OCT0370100001600000,%429 %M09165000
OCT0240000000041100, "3COS00", OCT0531101001500000,%433 %M09166000
OCT0240000000360000, "6ENTIE", "R0000000", OCT0000000001100000,%436 %M09167000
OCT0240000000040000, "3EXP00", OCT0332111002000000,%440 %M09168000
OCT0240000000041352, "2LN000", OCT0353121001700000,%443 %M09169000
OCT0240000000240000, "4SIGN0", OCT0000000001000000,%446 %M09170000
OCT0240000000040000, "3SIN00", OCT0344131001400000,%449 %M09171000
OCT0240000000040515, "4SQRT0", OCT0315141001300000,%452 %M09172000
OCT0240000000441113,"4TIME0", OCT0000000001200000, %455 %M09173000
OCT0150000000040000, "3ZIP00", 0, % 455 %A09174000
OCT0130000000060000, "9OUTPU", "T(W)0000", OCT0000000000100000,%461;09175000
OCT0130000050060000, ":BLOCK", " CONTROL", OCT0000000000200000,%465;09176000
OCT0130000000060000, "8INPUT", "(W)00000", OCT0000000000300000,%469;09177000
OCT0000000000061226, "4SORT0", 0, OCT0000000000400000, % 473 %M09178000
OCT0130000000040000, "4DUMP0", OCT0000000000500000,%477;09179000
OCT0130000000060000, "#X TO ", "THE I000", OCT0000000000600000,%480;09180000
OCT0240000000060000, ":GO TO"," SOLVER ", OCT0570000002100000, %484 %A09181000
OCT0130000140060000, ":ALGOL", " WRITE ", OCT0000000002200000,%488;09182000
OCT0130000150060000, ":ALGOL", " READ ", OCT0000000002300000,%492;09183000
OCT0130000160060000, ":ALGOL", " SELECT ", OCT0000000002400000,%496;09184000
OCT0000000000040000, "5MERGE", OCT0000000002700000,% 500 09184100
OCT0240000000560652, "6STATU", "S0000000", OCT0000000003000000, %M09184200
OCT0240000000641126, "3MAX00", OCT0000000003100031; %T9209185000
FILL INFO[3,*] WITH % %A09185100
OCT0240000000060000,"#SWAP ","ARRAYS ",OCT0000000004500000,% 768 %A09185200
OCT0240000000060000,":FORTE","RR ",OCT0300000013400000,% 772 %A09185300
OCT0240000000060000,":MATRI","XDIDDLER",OCT0000000014100000,% 776 %A09185400
OCT0240000000060000,":MATRI","X INVERT",OCT0000000014200000,% 780 %A09185500
OCT0240000000060000,":MTX T","RANSPOSE",OCT0000000014300000,% 784 %A09185600
OCT0240000000060000,"#MATRI","X MULT ",OCT0000000014400000,% 788 %A09185700
OCT2000000000004050, COMMENT POWERS OF TEN; % 792 %A09185800
0, ":SORT ","TEMPORAR","Y ", COMMENT SORTA; %793 %T9309185900
" "; COMMENT LASTSEQROW, LASTSEQUENCE; % 794 %A09186000
COMMENT THIS IS THE FILL FOR STACKHEAD; 09187000
FILL STACKHEAD[*] WITH 09188000
320,673,678,458,385, 0,337,347,383,361,621,412, 0, 0,681,372, %M09189000
335,758,666, 0,368,695,446, 0, 0,539,311,410, 0, 0,400,721,%T9209190000
0,608,570, 0,630,741,664,606,330,690, 0,579, 0, 0,727,440, %M09191000
390,646,659, 0,414, 0,683,737,452, 0,698, 0, 0, 0,733,561, %M09192000
381,328, 0, 0, 0,750, 0, 0, 0, 0,760,436, 0,402,744,633, %M09193000
748,639,711,573,718,756,416,455,355,687, 0,357,564,542,610, 0,%T9209194000
716, 0,433,602,418,398,343,618,692,326,339,648,714,725,366, 0, %M09195000
0,558, 0, 0, 0,754,656,392, 0,636, 0,675,644; %M09196000
FILL SUPERSTACK[*] WITH %WF 09196100
0,359,313, 0,307, 0,337,347,383, 0,397,412, 0, 0, 0,372,%T9209196200
335,309, 0, 0, 0, 0, 0, 0, 0, 0,420,410, 0, 0, 0, 0, %M09196300
0, 0, 0, 0,630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, %M09196400
390, 0,364, 0,414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, %M09196500
0,328, 0, 0, 0, 0, 0, 0, 0, 0,760, 0, 0,402, 0,633, %M09196600
0, 0,377, 0, 0,756,416, 0,355, 0, 0,357, 0, 0, 0, 0, %M09196700
0, 0, 0, 0, 0,398, 0, 0, 0,326,339, 0, 0, 0,366, 0, %M09196800
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,424, 0; %M09196900
COMMENT THIS IS THE FILL FOR THE SPECIAL CHARACTORS; 09197000
FILL SPECIAL[*] WITH 09198000
OCT1550000000200000, COMMENT #; OCT0000000000100000, COMMENT @;%M09199000
OCT0000000000000000, OCT1530000000120000, COMMENT :;%M09200000
OCT1710000450002763, COMMENT >; OCT1710000250002662, COMMENT };%M09201000
OCT1740000200000000, COMMENT +; 0, %M09202000
OCT1570000000060000, COMMENT .; OCT1560000000000000, COMMENT [;%M09203000
OCT1640000000000000, COMMENT &; OCT0740000000000000, COMMENT (;%M09204000
OCT1710010450243571, COMMENT <; OCT1630000000000000, COMMENT ~; %M09205000
OCT1750001000000000, COMMENT |; 0, %M09206000
OCT0000000000040000, COMMENT $; OCT1760000000000000, COMMENT *; %M09207000
OCT1740000600000000, COMMENT -; OCT1610000000160000, COMMENT); %M09208000
OCT1170000000000000, COMMENT .,; OCT1710010250003470, COMMENT {;%M09209000
0, OCT1750002000000000, COMMENT/; %M09210000
OCT1540000000000000, COMMENT ,; OCT0000000000020000, COMMENT %;%M09211000
OCT1710001050002561, COMMENT !; OCT1710011050002460, COMMENT =;%M09212000
OCT1600000000000000, COMMENT ]; OCT0000000000140000, COMMENT ";%M09213000
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
0, %T9209214150
0, %T9209214155
0, %T9209214160
0, %T9209214165
0, %T9209214170
%T9209214180
OCT0240000000060000, ":FILE ", "ATTRBUTS", OCT0000000015000000, %T9209214190
OCT0240000000740000, "3MIN00",OCT0000000003200000, % 539 %T9209214200
OCT0240000001040000, "5DELAY", OCT0000000003300000, % 542 %T9209214210
OCT0000000000060000, ":SUPER", " MOVER ", OCT0000000003400002, %T9209214220
0, 0, % FILLER %M09214225
OCT0240000001140000, "3ARG00", OCT0447500011400000, %551 %T9209214230
OCT0240000001261116, "6ARCSI", "N0000000", OCT0320000011600000,%554 %M09214235
OCT0240000000041107, "3TAN00", OCT0360000011100000, %558 %T9209214240
OCT0240000001340000, "5GAMMA", OCT0400000012600000,%561 %M09214245
OCT0240000001440000, "5COTAN", OCT0000000011200000, %564 %T9209214250
OCT0240000001540000, "5ARCOS", OCT0000000011700000,%567 %M09214255
OCT0240000001640000, "4SINH0", OCT0000000012000000, %570 %T9209214260
OCT0240000001640000, "4COSH0", OCT0000000012100000,%573 %M09214265
OCT0240000001641161, "4TANH0", OCT0000000012200000, %576 %T9209214270
OCT0240000001660000, "6ERROR", "F0000000", OCT0000000012500000,%579 %M09214275
OCT0240000001760000,"7LNGAM","MA ",OCT0000000012700260,% 583 %A09214280
OCT0240000002040000, "3LOG00", OCT0006100000000000,%587 %M09214285
OCT0240000002160000, "8IMAGP", "ART00000", OCT0000300000000000,%590 %M09214290
OCT0240000002261213, "8REALP", "ART00000", OCT0000400000000000,%594 %M09214295
OCT0240000002360000, "6HIPAR", "T0000000", OCT0000000000000000,%598 %M09214300
OCT0240000002460000, "6LOPAR", "T0000000", OCT0000000000000000,%602 %M09214305
OCT0240000002500000, "3TAB00", %606 %M09214310
OCT0240000002600000, "3COL00", %608 %M09214315
OCT0240000002700566, "6INREA", "L0000000", %610 %M09214320
OCT0240000003000571, "4SCAN0", %613 %M09214325
OCT0240000003100000, "7READC" , "ON000000", % 615 %A09214330
OCT0240000003200000, "6LENGT", "H0000000", %618 %M09214335
OCT0240000003300573, "5NPROP", %621 %M09214340
OCT0240000003400000, "4SMTA0", %623 %M09214345
OCT0240000003500000, "4CTSM0", %625 %M09214350
OCT0240000003600000, "6CONVA", "L0000000", %627 %M09214355
OCT1000000030000767, "6STRIN", "G0000000", %630 %M09214360
OCT1000000050001147, "6SYMBO", "L0000000", % 633 %A09214365
OCT1000000060000000, "6RECOR", "D0000000", %636 %M09214370
OCT1000000270000000, "7COMPL", "EX000000", %639 %M09214375
OCT1000000310000650, "5FIELD", %642 %M09214380
OCT0210000000001323, "4CONS0", %644 %M09214385
OCT0750000000000701, "3NIL00", %646 %M09214390
OCT0210000000040000, "6APPEN", "D0000000", %648 %M09214395
OCT0210000000060000, "5NCONC", %651 %M09214400
OCT0210000000101337, "6GENSY", "M0000000", %653 %M09214405
OCT0210000000120000, "6RANDO", "M0000000", %656 %M09214410
OCT0210000000140535, "6MKATO", "M0000000", %659 %M09214415
OCT0210000000160000, "4PROP0", %662 %M09214420
OCT0210000000200000, "5READ1", %664 %M09214425
OCT0210000000220731, "5INSYM", %666 %M09214430
OCT0210000000240000, "4ATSM0", %668 %M09214435
OCT0210000000260000, "6OBLIS", "T0000000", %670 %M09214440
OCT0230000000000547, "4NULL0", %673 %M09214445
OCT0230000000021202, "6MEMBE", "R0000000", %675 %M09214450
OCT0230000000040471, "7NUMBE", "RP000000", %678 %M09214455
OCT0230000000061157, "4ATOM0", %681 %M09214460
OCT0230000000100000, "5ATCON", %683 %M09214465
OCT0230000000121333, "5ATSYM", %685 %M09214470
OCT0260000000000000, "6RETUR", "N0000000", %687 %M09214475
OCT0260000000021234, "4EXIT0", %690 %M09214480
OCT0260000000040000, "7RECLA", "IM000000", %692 %M09214485
OCT0260000000060000, "6RECAL", "L0000000", %695 %M09214490
OCT0260000000100000, "8REMEM", "BER00000", %698 %M09214495
OCT0260000000120000, "7ADDPR", "OP000000", %701 %M09214500
OCT0260000000140000, "7REMPR", "OP000000", %704 %M09214505
OCT0260000000160465, "5PRINT", %707 %T9209214510
OCT0260000000201303, "4PRIN0", %709 %M09214515
OCT0260000000221145, "6TERPR", "I0000000", %711 %T9209214520
OCT0260000000240000, "3NTS00", %714 %M09214525
OCT0260000000260000, "5INPUT", %716 %M09214530
OCT0260000000300000, "6OUTPU", "T0000000", %718 %M09214535
OCT0260000000320000, "5REMOB", %721 %M09214540
OCT0220000000000000, "5RPROP", %723 %M09214545
OCT0170000000000000, "5QMARK", %725 %M09214550
OCT0170000000020000, "3ALF00", %727 %M09214555
OCT0170000000040000, "3DGT00", %729 %M09214560
OCT0170000000060000, "3VWL00", %731 %M09214565
OCT0170000000100000, "3LTR00", %733 %M09214570
OCT0170000000120000, "4BIT10", %735 %M09214575
OCT0170000000140000, "4BIT00", %737 %M09214580
OCT0170000000160000, "5AMONG", %739 %M09214585
OCT0170000000200473, "6OUTST", "R0000000", %741 %M09214590
OCT0170000000220627, "5INSTR", %744 %M09214595
OCT0200000000000000, "4CONJ0", %746 %M09214600
OCT0200000000020000, "5INDBL", %748 %M09214605
OCT1720000000001052, "2EQ000", %750 %M09214610
OCT1720000000020000, "4NEQL0", %752 %M09214615
OCT1070000000000646, "4CASE0", %754 %M09214620
OCT0776700000000000, "3CAR00",%756 %M09214625
OCT0776300000001305, "3CDR00", %758 %M09214630
OCT0240000003740000, "5READN", OCT0000600000000000, % 760 %M09214633
OCT0240000000060000,":DYNAM","IC DIALS",OCT0000000004000001;% 763 %A09214635
COMMENT NOW LINK THESE ENTRIES INTO STACKHEAD; %M09214640
FOR NEXTINFO ~ 512 STEP 2 UNTIL 530 DO PUT((TAKE(NEXTINFO))& %T9209214645
STACKHEAD[GT2~TAKE(NEXTINFO+1)MOD 125][35:35:13], %M09214650
LASTINFO ~ STACKHEAD[GT2] ~ NEXTINFO); %M09214655
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
OCT0047, % JFW A 02 09218000
OCT0140, COMMENT INC A 03 ; 09219000
OCT0130, COMMENT SRS A 04 ; 09220000
OCT0117, COMMENT SRD A 05 ; 09221000
OCT0057, % JRV A 06 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
OCT00570143, % CRF A, JRV O 14 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
FILL DPI[*] WITH %T9209251310
OCT41113, OCT42107, OCT47077, OCT51101, OCT43105, %T9209251315
OCT50123, OCT00104, OCT52115, OCT45053, OCT00110, %T9209251320
OCT00100, OCT00102, OCT00106, OCT00124, OCT46065, %T9209251325
"5DATAN", "4DCOS0", "4DEXP0", "4DLOG0", "4DSIN0", %T9209251330
"5DSQRT", "5DLG10", "5DATN2", "4CABS0", "4CCOS0", %M09251350
"4CEXP0", "4CLOG0", "4CSIN0", "5CSQRT", "4DMOD0", %M09251400
COMMENT FOLLOWING ARE TEMPS 1 - 10; %M09251450
143,144,145,146; %A09251500
%T9309251550
PERR ~ -1 ; % INITIALIZE ERRORMESS NUMBER %T1409251600
SINGLTOG ~ TRUE; % %T1109251700
DO UNTIL STEPI = BEGINV; 09252000
BUILDLINE.[45:1]~FALSE; 09252050
IF NOT BUILDLINE THEN BUILDLINE ~ USELINO ~ TRUE; % %T0309252060
IF STEPI=DECLARATORS AND ELBAT[I].ADDRESS = SYMV %M09252100
THEN IF (RECLAIMTOG ~ STEPI=INTRNS AND ELBAT[I].INCR=2) %A09252200
OR (SYMSTK ~ ACCUM[1] = "4PLEX0") THEN BEGIN %A09252300
IF STEPI ! SEMICOLON THEN ERR(0); %M09252400
ELBAT[I].CLASS ~ BEGINV END ELSE I ~ I-2 ELSE I~I-1; %M09252500
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 FUNTION 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
% %M09274050
PRTIMAX ~ 23; %A09274100
ENDTOG ~ PRTOG; PRTOG ~ FALSE; %M09274150
FOR GT1 := 23 STEP 1 UNTIL 151 DO GT2 := GETSPACE(TRUE,-1); %T9309274200
PRTOG ~ ENDTOG; ENDTOG ~ FALSE; %M09274250
ERRORTOG~TRUE; BLOCK(FALSE); 09275000
COMMENT THIS CODE WILL PUT AN EXTRA CARD ON 0CRDIMG 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 0CR","DING TAP","E ", " "," ", 09275400
" ","99999999"; 09275450
WRITE(NEWTAPE,10,LIBARRAY[*]) 09275500
END; 09275550
IF INOUTUSED.[46:2]=1 THEN FLAG(645); %M09275600
ERRORTOG ~ TRUE; %A09275625
IF INOUTUSED.[44:2]=1 THEN FLAG(644); %M09275650
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
IF DPI[107] ! 0 THEN BEGIN SGNO ~ SGAVL; SGAVL ~ SGAVL + 1; %A09289100
GT2 ~ PROGDESCBLDR(1,0,24); %A09289200
PDPRT[PDINX.[37:5],PDINX.[42:6]] ~ % %A09289300
1 & 92 [19:39:9] & SGNO[28:38:10] & 1[2:47:1]; %A09289400
PDINX ~ PDINX + 1; END; %A09289500
FOR GT1 ~ 0 STEP 1 UNTIL 14 DO %M09290000
IF GT2 ~ (GT3 ~ DPI[GT1]).ADDRESS ! 0 THEN BEGIN %M09290100
SGNO ~ SGAVL; SGAVL ~ SGAVL + 1; %M09290200
GT2 ~ PROGDESCBLDR(1,0,GT2); %M09290300
PDPRT[PDINX.[37:5],PDINX.[42:6]] ~ %M09290400
1 & GT3[19:39:9] &SGNO[28:38:10] & 1[2:47:1]; %M09290500
PDINX ~ PDINX + 1; %M09290600
IF LISTOG THEN BEGIN WRTINTRSC(SGNO,DPI[GT1+15], %M09290700
B2D(GT2.[38:10]),LIN); WRITELINE END END; %M09290800
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][16:21:12] %M09298000
& SGNO[28:38:10] & 1[2:47:1]; 09298100
PDINX ~ PDINX + 1; 09299000
IF LISTOG AND PRTOG THEN % %T0709300000
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 NOTPNTED THEN PERMLINE(REAL(LISTOG)=3); WRITELINE; %T9309302000
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(128,TEN,EDOC[0,0]); MOVE(10,TEN[128],EDOC[1,0]); %A09314000
BUILDLINE ~ BOOLEAN(2|REAL(BUILDLINE)); 09314100
SEGMENT(-138,SGNO,0); %A09315000
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
INTEGER PROCEDURE MOVEANDBLOCK(FROM,SIZE); VALUE SIZE; 09319000
ARRAY FROM[0,0]; INTEGER SIZE; 09320000
BEGIN INTEGER NSEGS,I,J; 09321000
REAL T; 09322000
NSEGS~(SIZE+29) DIV 30; 09323000
IF DA DIV CHUNK<T~(DA+NSEGS) DIV CHUNK THEN 09324000
DA~CHUNK|T; 09325000
MOVEANDBLOCK~DA; 09326000
DO BEGIN FOR J~0 STEP 2 WHILE J<30 AND I<SIZE DO 09327000
BEGIN MOVE(2,FROM[I DIV 128,I MOD 128],CODE(J)); 09328000
I~I+2; END; 09329000
IF ERRORCOUNT = 0 AND SAVETIME } 0 THEN %A09329500
WRITE(CODE[DA]); DA~DA+1; 09330000
END UNTIL I}SIZE; 09331000
END MOVEAND BLOCK; 09332000
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]&GT1[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]]&GT1[23:38:10] 09359000
& GT1[33:13:15] & GT1[4:3:1] & GT1[1:1:2]; 09360000
END; 09361000
IF GOTCHA AND "RCC63YH"!TIME(-1)!"ACCSITE" THEN CHECKSTREAMS; % %T0309361001
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 %D09394000
MOVE(GT1,IDARRAY[0],EDOC[0,0]); 09395000
ZEROUT(IDARRAY[0],0,30); 09395500
IDARRAY[4]~MOVEANDBLOCK(EDOC,GT1); 09396000
IDARRAY[5]~GT1; 09397000
COMMENT WRITE OUT SEGMENT DICTIONARY; 09398000
IDARRAY[0]~MOVEANDBLOCK(SEGDICT,SGAVL); 09399000
IF BUILDLINE THEN IDARRAY[0]~IDARRAY[0]&MOVEANDBLOCK 09399100
(LDICT,SGAVL)[18:33:15] ; 09399150
IDARRAY[1]~SGAVL; 09400000
COMMENT WRITE OUT PRT; 09401000
IDARRAY[2]~MOVEANDBLOCK(PRT,PRTIMAX); 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)&GTI1[18:27:15]; 09405200
COMMENT WRITE DISK SEGMENT ZERO; 09406000
MOVE(30,IDARRAY[0],CODE(0)); WRITE(CODE[0]); 09407000
IF SAVETIME } 0 AND ERRORCOUNT = 0THEN 09407050
LOCK(CODE,SAVE); 09407100
IF LISTOG OR NOT NOHEADING THEN 09408000
BEGIN FORMAT PAN(" NUMBER OF SYNTAX ERRORS DETECTED =",I4,X6,2A4/" "%T0709409000
"NUMBER OF SEQUENCE ERRORS DETECTED = "U /" COMPILATION TIMES: " %T0709410000
"PROCESSOR = "U "SECONDS; IO = "U "SECONDS; ELAPSED = "U "SECONDS"/%T0709410100
" PRT SIZE = "U /" TOTAL SEGMENT SIZE = "U "WORDS"/" DISK SIZE = " %T0709411000
U"SEGMENTS"/" NUMBER OF PROGRAM SEGMENTS = "U/ % %T0709412000
" ESTIMATED CORE STORAGE REQUIREMENT = "U "WORDS"/ % %T0709413000
" ESTIMATED AUXILIARY MEMORY REQUIRMENT = "U"WORDS"///% %T0709413010
" * * * * * * * * L E G E N D * * * * * * * *"// %T0709413050
"ERRORS - THE NUMBER OF SYNTAX ERRORS DETECTED THUS FAR"/ %T0709413100
"BEGINS - THE NUMBER OF UNMATCHED BEGINS DETECTED THUS FAR"/ %T0709413200
"LEVEL - THE DECLARATION OF A LABEL AND ITS USE (FOLLOWED BY :)"%T0709413300
" MUST BE ON THE SAME LEVEL"/ %T0709413320
"LINE - THE NUMBER OF CARD IMAGES READ THUS FAR"/ %T0709413400
" NORMALLY ERROR TERMINATION MESSAGES REFERENCE " %T0709413440
"LINE NUMBER"/ %T0709413450
"SEQUENCE - THE CONTENTS OF COLUMNS 73 THRU 80 IN THE CARD IMAGE"/ %T0709413500
"SOURCE - THE INDICATION OF THE ORIGIN OF A CARD IMAGE:"/ %T0709413600
" BLANK - IMAGE FROM READER, NOT MERGING WITH TAPE"/ %T0709413620
" R - IMAGE FROM READER, MERGING WITH TAPE"/ %T0709413630
" T - IMAGE FROM TAPE, MERGING WITH READER"/ %T0709413640
" A - I - IMAGE FROM SOURCE LIBRARY"/ %T0709413650
" V - IMAGE VOIDED"/ %T0709413660
" O - IMAGE OMITTED"/ %T0709413670
"ADDRESS - THE NUMBER OF WORDS OF CODE GENERATED IN THE CURRENT " %T0709413700
"SEGMENT"/ %T0709413750
"SYLLABLE - THE NUMBER OF SYLLABLES OF CODE GENERATED IN THE " %T0709413800
"CURRENT WORD"/ %T0709413850
"SEQ ERR - NONBLANK IF SEQUENCE CHECKING IS PERFORMED AND A SEQUE"%T0709413900
"NCE ERROR OCCURS ON THAT LINE"/ %T0709413950
"SEGMENT - THE NUMBER OF THE CURRENT SEGMENT INTO WHICH CODE IS " %T0709414000
"BEING EMITTED"// %T0709414100
" THE ASTERISKS ON THE LINE BEFORE AND AFTER THE CARD IMAGE"/ %T0709414600
" REPRESENT FICTITIOUS COLUMNS 0 AND 73"); % %T0709414900
MOVECHARACTERS(4,INFO[LASTSEQROW,LASTSEQUENCE-1],0,GT1,4);09415000
MOVECHARACTERS(4,INFO[LASTSEQROW,LASTSEQUENCE-1],4,GT2,4);09416000
WRITE(LINE,PAN,ERRORCOUNT,GT1,GT2,SEQERRORCOUNT,TIME(2) DIV 60, % %T0709417000
TIME(3) DIV 60,(TIME(1)-TIME1) DIV 60, % %T0709417010
PRTIMAX,AKKUM,IF DA{CHUNK THEN DA ELSE ((DA+CHUNK-1) 09418000
DIV CHUNK)|CHUNK,SGAVL-1,GTI1,AUXMEMREQ); 09419000
% %A09419500
END END END PROGRAM; 09420000
BOOLEAN PROCEDURE EXPLICITFORMAT; %W4009500000
BEGIN INTEGER PRT,ITEM; LABEL DEBLANK; %W4009500010
ARRAY TEDOC[0:7,0:127]; %W4009500015
DEBLANK: % %W4009500020
STOPDEFINE~BOOLEAN(2); STEPIT; %W4009500030
IF Q:=ACCUM[1]="1<0000" OR Q="3LSS00" THEN % %W4009500040
BEGIN %W4009500050
EXPLICITFORMAT := TRUE; % %W4009500100
MOVECODE(TEDOC,EDOC); BUILDLINE~BUILDLINE.[2:46]; % %W4009500300
GT5~SGNO;GT1~(2|SGAVL-1)&2[4:46:2];SGNO~SGAVL; %NEW SEGMENT %W4009500400
F:=0;PRT:=GETSPACE(TRUE,-4);Z:=PROGDESCBLDR(LDES,0,PRT); %T9309500500
GT4 := LL; LL := 0; % %W4009500550
ELCLASS := "<"; TB1 := FORMATPHRASE; LL:= GT4; % %W4009500600
SEGMENT(-F,SGNO,GT5); % %W4009500650
SGAVL ~ SGAVL+1; SGNO ~ GT5; MOVECODE(TEDOC,EDOC); %W4009500700
IF LASTELCLASS ! ">" AND LASTELCLASS ! ")" THEN ERR(136); %%W4009500800
ELBAT[I].CLASS ~ IF ELCLASS = "," THEN COMMA %W4009500900
ELSE IF ELCLASS = ")" THEN RTPAREN ELSE 0; %W4009501000
I ~ I-1; BUILDLINE~BUILDLINE.[1:46]; %W4009501100
EMITL(0); EMITPAIR(PRT,LOD); %W4009501200
END ELSE I := I - 1; % %W4009501250
END EXPLICITFORMAT; %W4009501300
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 CHARACTORS 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
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B10070000
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
F ~ F+1; 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 ! "(" AND ELCLASS ! "<" ); %W4010113000
IF ELCLASS="*" THEN BEGIN REPEAT.[12:1]~1; 10113100
NEXTENT; 10113200
END END; 10113300
IF ELCLASS = "(" OR ELCLASS = "<" %W4010114000
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 ! ">" THEN GO TO EL; %W4010124000
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 GO TO EXIT %W4010134000
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 U. 10150220
EMITFORMAT(FALSE,RU,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
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B10186500
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
10257100
10257200
10257300
10257400
10257500
10257600
10257700
10257800
10257900
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 TSTREAMTOG; % %T8910259400
DINFO ~ J.[18:15]; 10259600
J ~ J.[33:15]; 10259700
TB1~ FALSE; 10260000
TSTREAMTOG := STREAMTOG; % %T8910260050
STREAMTOG~TRUE; 10260100
CHARCOUNT ~ 0; 10261000
DEFINECTR ~ 1; LASTRESULT ~ 2; 10262000
REMCOUNT ~ (256-NEXTTEXT.LINKC)|8; 10263000
10263100
10263110
K~0; 10263200
BACK: STOPDEFINE~TRUE; 10263300
ELCLASS~TABLE(NXTELBT); 10263400
SKSC: NXTELBT~NXTELBT-1; 10263500
IF MACRO THEN 10263600
BEGIN IF ELCLASS=COMMA THEN 10263700
IF K=0 THEN 10263800
FINAL: BEGIN PUTOGETHER("1#0000"); GO TO EXIT END 10263900
ELSE GO PACKIN; 10264000
IF ELCLASS=LEFTPAREN OR ELCLASS=LFTBRKET THEN 10264100
BEGIN K~K+1; GO TO PACKIN END; 10264200
IF ELCLASS=RTPAREN OR ELCLASS=RTBRKET THEN 10264300
IF K~K-1<0 THEN GO FINAL ELSE GO PACKIN; 10264400
IF ELCLASS=SEMICOLON THEN 10264410
BEGIN FLAG(142); GO TO FINAL END ELSE GO PACKIN 10264420
END; 10264500
IF 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 := TSTREAMTOG; % %T8910284000
NEXTTEXT ~ (CHARCOUNT+7) DIV 8 + NEXTTEXT; 10285000
END DEFINEGEN; 10286000
INTEGER TEMPCELL, LISTPTR; %W3310286500
BOOLEAN LISTLVFLAG; %W3310286600
COMMENT LISTELEMENT IS RESPONSIBLE FOR THE GENERATION OF CODE FOR LIST10287000
ELEMENTS; 10288000
PROCEDURE LISTELEMENT; 10289000
BEGIN 10290000
INTEGER LISTADDRESS; %W3310290500
REAL T1,T2,T3; 10291000
REAL T4; %M10291500
LABEL BOOFINISH,STORE,LRTS; 10292000
DIALA ~ DIALB ~ 0; 10293000
T4 ~ ACCUM[1];% %A10293100
LISTLVFLAG ~ LISTLVFLAG AND (ELCLASS = LISTID %W3310293200
OR ELCLASS = SUPERLISTID); %W3310293400
IF ELCLASS = FORV THEN BEGIN COMMENT FORCLAUSE; %W3310294000
FORSTMT; LISTLVFLAG ~ FALSE END %W3310294200
ELSE IF ELCLASS = LFTBRKET 10295000
THEN BEGIN COMMENT GROUP OF LIST ELEMENTS; 10296000
DO BEGIN STEPIT; LISTELEMENT END UNTIL ELCLASS!COMMA;10297000
IF ELCLASS = RTBRKET THEN STEPIT ELSE ERR(158) END 10298000
ELSE IF ELCLASS=LISTID OR ELCLASS=SUPERLISTID THEN %W3310298100
BEGIN %W3310298120
IF LISTLVFLAG THEN L ~ L-3; %W3310298160
CHECKER(ELBAT[I]); LISTADDRESS~ELBAT[I].ADDRESS;%W3310298200
EMITL(0);EMITPAIR(LSTRTN,STD); %W3310298240
EMITNUM(L+3-LSTR+REAL(LISTPTR>1023)); %W3310298260
EMITPAIR(LISTPTR,STD); %W3310298280
IF ELCLASS=SUPERLISTID THEN %W3310298300
BEGIN BANA;EMITN(LISTADDRESS);IF LISTADDRESS>1023THEN EMITO(PRTE); %W3310298400
EMITO(LOD); %72 %W3310298430
EMITO(LOD); EMITO(XCH); EMITO(CDC) END %W3310298480
ELSE BEGIN EMITN(LISTADDRESS);STEPIT END; %W3310298500
EMITV(LSTRTN); EMITL(0); EMITO(GEQ); %W3310298600
EMITL(1); EMITO(BFC); EMITO(RTS); %W3310298700
EMITO(DEL); EMITL(5); EMITPAIR(LSTRTN,STD); %W3310298850
LISTLVFLAG ~ TRUE; %W3310298870
END %W3310298900
ELSE IF GT1 ~ TABLE(I+1) = RTPAREN AND L=LSTR %W3310298910
AND ELBAT[I].ADDRESS { 1023 %W3310298915
AND ELCLASS } SYMID AND ELCLASS { INTID THEN %T9310298920
COMMENT LIST CONSISTS OF A SINGLE SIMPLE VAR.; %W3310298930
BEGIN L ~ L-4-REAL(LISTPTR>1023); %W3310298940
CHECKER(ELBAT[I]); %W3310298945
EMITN(ELBAT[I].ADDRESS); EMITO(RTS); %W3310298950
STEPIT; %W3310298960
END %W3310298970
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(LISTPTR,STD); COMMENT PREPARE LISTPTR FOR %W3310302000
NEXT TIME AROUND; 10303000
IF (GT1 = COMMA %W3310304000
OR GT1 = RTPAREN 10305000
OR GT1 = RTBRKET) 10306000
AND ELCLASS } SYMID AND ELCLASS { INTID %T9310307000
THEN BEGIN COMMENT SIMPLE VARIABLES; 10308000
CHECKER(ELBAT[I]); 10308100
EMITN(ELBAT[I].ADDRESS); STEPIT END 10309000
ELSE IF ELCLASS = 0 THEN% %A10309100
IF T4 = "8FREEL" OR T4 = "7NEXTA" THEN BEGIN% %A10309200
FIXCLASS(INTID,T4,BOOLEAN(3));EMITN(ADDRSF);STEPIT END % %A10309300
ELSE ERR(100)% %A10309400
ELSE BEGIN IF ELCLASS } SYMARRAYID %T9310310000
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 T4 ~ EXPRSS= DTYPE THEN ERR(156) ELSE %M10327000
IF T4 > 6 THEN ERR(643) ELSE %M10327100
IF T4 = 5 THEN BEGIN EMITO(MKS); EMITV(ATN) END ELSE %M10327200
IF T4 = 6 THEN DBLTSNGL(0); %M10327300
STORE: EMITPAIR(TEMPCELL,STD); EMITN(TEMPCELL) END; %W3310328000
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
COMMENT TEST TO INSURE LISTGEN NOT CALLED RECURSIVELY; %W3310346200
IF LISTMODE THEN ERR(476) ELSE %W3310346400
BEGIN %W3310346600
JUMPLACE ~ BAE; 10347000
LISTGEN ~ LISTPLACE ~ PROGDESCBLDR(0,L,0); 10348000
TEMPCELL~GETSPACE(FALSE,-1);LISTPTR~GETSPACE(FALSE,-1);%W3310348500
COMMENT BUILDS ACCIDENTAL ENTRY FOR LIST; 10349000
EMITV(LSTRTN); EMITO(BFW); %W3310349400
EMITL(5); EMITPAIR(LSTRTN,STD); %W3310349600
EMITPAIR(REAL(LISTPTR>1023)+2,BFW); %W3310349800
EMITV(LISTPTR); EMITO(BFW); LSTR ~ L; %W3310350000
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
IF LISTLVFLAG THEN BEGIN L~L-3; LISTLVFLAG~FALSE END; %W3310358500
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
END %W3310368000
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 MERRIMAC 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~(NOPAR 10657000
~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 INDENTIFIER 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 SUBSLOOP 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); EMITL(FORMATTYPE); EMITV(GNAT(PRINTI));10891000
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
DELIMITER; 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 INTO A SWITCH DESCRIPTOR, SINCE A SWITCH DE- 10952000
SCRIPTOR IS AN ACCIDENTAL ENTRY DESCRIPTOR; 10953000
BOOLEAN PROCEDURE SWITCHGEN(BEFORE); VALUE BEFORE; BOOLEAN BEFORE; 10954000
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 LOCAL(ELBAT[I]) %M10965000
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: NOGO; L ~ BUMPL; N ~ N-1; %M10978000
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; %M10999100
EMITL(N+1); %M10999200
L ~ T1; %M10999300
EXIT: END SWITCHGEN; %M10999400
PROCEDURE BOOINT; %A11000000
BEGIN REAL T; LABEL EXIT; %A11000100
CASE ELBAT[I].INCR OF BEGIN %A11000200
BEGIN IF T ~ TABLE(I+1)=RECID OR T=RECARRAYID %A11000300
OR T=RECPROCID THEN BEGIN STEPIT; REXP; RECTYPE~0 END ELSE %A11000400
EMITI(0,33-PORV|15,15); EMIT(0); EMITO(EQL); END; %A11000500
BEGIN EMITO(MKS);PANSYM(FALSE,TRUE); EMITV(MEMBER ) END; %A11000600
BEGIN GETCONTENTS(PORV,FALSE); EMITI(0,1,2); EMITL(3); %A11000700
EMITO(EQL); END; %A11000800
BEGIN GETCONTENTS(PORV,FALSE); EMIT(0); %A11000900
EMITO(LSS) END; %A11001000
BEGIN QUOTETOG ~ TRUE; %A11001100
IF STEPI = LEFTPAREN THEN BEGIN STEPIT; STRINGSEC(4); %A11001200
IF ELCLASS=RTPAREN THEN STEPIT ELSE ERR(104) END; %A11001300
EMITO(MKS); EMITV(ATCON) END; %A11001400
BEGIN GETCONTENTS(PORV,FALSE); EMITI(0,1,2); EMITL(2); EMITO(EQL); %A11001500
END; END; %A11001600
EXIT: QUOTETOG ~ FALSE END OF BOOINT; %A11001700
% %A11001800
% %A11001900
COMMENT RELATIONAL EXPRESSIONS; %A11002000
% %A11002100
BOOLEAN PROCEDURE SYMRELATION(TYPE); VALUE TYPE; REAL TYPE; %A11002200
BEGIN REAL R; LABEL EXIT; %A11002300
IF ELCLASS=LRELOP THEN BEGIN QUOTETOG ~ TRUE; %A11002400
TYPE ~ SNORM(TYPE); R ~ ELBAT[I].INCR; %A11002500
STEPIT; GT1 ~ SNORM(SEXP); %A11002600
EMITDIAL(DIA,33-15|GT1); EMITDIAL(DIB,33-15|TYPE); %A11002700
EMITFC(FCE,15); EMITO(XCH); EMITO(DEL); %A11002800
IF BOOLEAN(R) THEN EMITO(LNG); %A11002900
QUOTETOG ~ FALSE; GO TO EXIT END ELSE %A11003000
IF ELCLASS ! RELOP OR %A11003100
(R ~ ELBAT[I].ADDRESS ! 581 AND R ! 69) THEN BEGIN SDNORM(TYPE);%A11003200
SYMRELATION ~ TRUE; %A11003300
QUOTETOG ~ FALSE; GO EXIT END; QUOTETOG ~ TRUE; %A11003400
% %A11003500
IF TYPE {2 THEN SDNORM(TYPE) ELSE %A11003600
IF TYPE =5 THEN BEGIN EMITNUM(SAVEQ); TYPE ~0 END ELSE %A11003700
IF TYPE= 4 THEN BEGIN EMITNUM(SAVEQ); TYPE ~3 END; %A11003800
STEPIT; GT1 ~ SEXP; QUOTETOG ~ FALSE; %A11003900
IF GT1 { 2 THEN SDNORM(GT1) ELSE %A11004000
IF GT1}4 THEN BEGIN EMITNUM(SAVEQ); %A11004100
GT1 ~ IF GT1 = 5 THEN 0 ELSE 3 END; %A11004200
IF TYPE+GT1 = 6 THEN EMITO(R) ELSE BEGIN %A11004300
IF TYPE = 3 OR GT1 = 3 THEN BEGIN %A11004400
IF TYPE = 3 THEN EMITO(XCH); EMITO(MKS); %A11004500
EMITV(SYMEQA) END ELSE %A11004600
BEGIN EMITO(MKS); EMITV(SYMEQ); END; EMITO(DEL) END ; %A11004700
IF R = 69 THEN EMITO(LNG); %A11004800
EXIT: END OF SYMRELATION; %A11004900
BOOLEAN PROCEDURE DBLPLXRELATION; %A11005000
BEGIN LABEL EXIT; REAL R , TYPE; DBLPLXRELATION~TRUE; %A11005100
IF ELCLASS ! RELOP THEN GO EXIT; %A11005200
IF R ~ ELBAT[I].ADDRESS ! 581 AND R! 69 THEN GO EXIT; %A11005300
DPTOG ~ TRUE; STEPIT; PLXNORM(PLXP(TRUE),TRUE);%A11005400
FOR TYPE ~ 0 STEP 1 UNTIL 2 DO BEGIN %A11005500
DBLNORM; DBLSTO(TRUE,1+2|TYPE,STD)END; DBLNORM; %A11005600
TYPE ~ IF R=581 THEN LND ELSE LOR; DPTOG ~ FALSE; %A11005700
EMITV(TEMP(3)); EMITO(R); EMITO(XCH); EMITV(TEMP(4)); %A11005800
EMITO(R); EMITO(TYPE); EMITV(TEMP(5)); EMITV(TEMP(1)); %A11005900
EMITO(R); EMITO(TYPE); EMITV(TEMP(6)); EMITV(TEMP(2)); %A11006000
EMITO(TYPE); DBLPLXRELATION ~ FALSE; %A11006100
EXIT: END OF DBLPLXRELATION; %A11006200
% %A11006300
BOOLEAN PROCEDURE PLXRELATION; %A11006400
BEGIN REAL R; LABEL EXIT; PLXRELATION ~ TRUE; %A11006500
IF ELCLASS! RELOP THEN GO EXIT; %A11006600
IF R ~ ELBAT[I].ADDRESS ! 581 AND R ! 69 THEN GO EXIT; %A11006700
STEPIT; PLXNORM(PLXP(FALSE),FALSE); %A11006800
EMITPAIR(TEMP1,STD); EMITO(XCH); EMITPAIR(TEMP2,STD); %A11006900
EMITO(R); EMITV(TEMP1); EMITV(TEMP2); EMITO(R); %A11007000
EMITO(IF R=581 THEN LND ELSE LOR); PLXRELATION~FALSE; %A11007100
EXIT: END OF PLXRELATION; %A11007200
% %A11007300
BOOLEAN PROCEDURE DBLRELATION; %A11007400
BEGIN REAL R; LABEL EXIT; DBLRELATION ~ TRUE; %A11007500
IF ELCLASS ! RELOP THEN GO EXIT; %A11007600
R ~ ELBAT[I].ADDRESS; %A11007700
DBLNORM; %A11007800
DPTOG ~ TRUE; STEPIT; DBLXP; DPTOG ~ FALSE; DBLNORM; %A11007900
EMITPAIR(TEMP1,STD); EMITO(XCH); EMITPAIR(TEMP2,STD); EMITO(R); %A11008000
EMITV(TEMP2); EMITV(TEMP1); %A11008100
IF R = 581 THEN BEGIN EMITO(581); EMITO(LND); END ELSE %A11008200
IF R = 69 THEN BEGIN EMITO(69); EMITO(LOR); END ELSE %A11008300
BEGIN EMITO(581); EMITO(LND); EMITV(TEMP2); EMITV(TEMP1); %A11008400
EMITO(R); EMITO(LOR) END; DPTOG ~ FALSE; %A11008500
DBLRELATION ~ FALSE; %A11008600
EXIT: END OF DBLRELATION; %A11008700
% %A11008800
BOOLEAN PROCEDURE RECRELATION(TYPE); VALUE TYPE; REAL TYPE; %A11008900
BEGIN REAL R; LABEL EXIT; %A11009000
RECRELATION ~ TRUE; %A11009100
IF ELCLASS ! RELOP THEN GO TO EXIT; %A11009200
IF R ~ ELBAT[I].ADDRESS ! 581 AND R ! 69 THEN GO EXIT; %A11009300
STEPIT; RECOM(TYPE); EMITO(R); RECRELATION ~ FALSE; %A11009400
EXIT: END OF RECRELATION; %A11009500
% %A11009600
% %A11009700
% %A11009800
BOOLEAN PROCEDURE ARAY(TALL,WDS,ROWTOG); %A11009900
VALUE TALL,WDS,ROWTOG; %A11010000
REAL TALL,WDS; BOOLEAN ROWTOG; %A11010100
BEGIN LABEL LX,NEXT; %A11010200
REAL X,Z; %A11010300
INTEGER J,DM; %A11010400
BOOLEAN DPO,SM; %A11010500
BOOLEAN QO; QO ~ QUOTETOG; QUOTETOG ~ FALSE; %A11010600
DPO ~ DPTOG; IF SM~SMT THEN EMITO(MKS); %A11010700
DPTOG ~ SMT ~ FALSE; %A11010800
IF STEPI! LFTBRKET THEN BEGIN ERR(207); GO TO LX END; %A11010900
DM ~ TAKE(GIT(TALL)).[40:8]; J ~ 0; %A11011000
NEXT: IF ARAY ~ STEPI= FACTOP THEN BEGIN %A11011100
STLB ~ 1; %A11011200
WHILE TABLE(I+1) = COMMA DO %A11011300
BEGIN STEPIT; %A11011400
IF STEPI = FACTOP THEN STLB ~ STLB + 1 ELSE %A11011500
BEGIN ERR(204); GO TO LX END; END; %A11011600
IF J+STLB!DM THEN BEGIN ERR(203); GO TO LX END; %A11011700
IF STEPI!RTBRKET THEN BEGIN ERR(204); GO TO LX END; %A11011800
IF NOT ROWTOG.[45:1] THEN %A11011900
IF STLB > 1 THEN FLAG(212) ELSE %A11012000
IF NOT ROWTOG THEN BEGIN ERR(205); GO LX END; %A11012100
IF J=0 THEN EMITPAIR(TALL.ADDRESS,LOD); %A11012200
IF ROWTOG.[45:1] THEN BEGIN %A11012300
IF ROWTOG.[46:1] THEN BEGIN EMITNUM(TAKE(GIT(TALL)+DM+1).[35:13]) %A11012400
END; %A11012500
FOR X ~ 1 STEP 1 UNTIL STLB DO %A11012600
BEGIN IF (Z ~ TAKE(GIT(TALL)+J+X)).[35:11] > 1023 %A11012700
THEN EMITV(Z) ELSE EMIT(Z); %A11012800
IF Z.[23:10] = ADD THEN EMITO(CHS); END END; %A11012900
STEPIT; %A11013000
GO TO LX END; %A11013100
AEXP; IF SM THEN EMITPAIR(JUNK,SND); %A11013200
IF ELCLASS = RTBRKET THEN %A11013300
IF WDS!0 THEN BEGIN EMITL(WDS); EMITO(MUL) END; %A11013400
IF (GT1 ~ TAKE(GIT(TALL)+ J~J+1)).[35:13] ! 0 THEN BEGIN %A11013500
IF GT1.[46:2] =0 THEN EMIT(GT1) ELSE EMITV(GT1.[35:11]); %A11013600
EMIT(GT1.[23:12]) END; %A11013700
IF ELCLASS=COMMA THEN BEGIN %A11013800
IF J=1 THEN EMITN(TALL.ADDRESS) ELSE EMITO(CDC); %A11013900
EMITO(LOD); %A11014000
IF SM THEN BEGIN EMITV(JUNK); EMITO(XCH); END; %A11014100
IF J+1> DM THEN BEGIN ERR(206); GO TO LX END; %A11014200
GO TO NEXT END; %A11014300
IF ELCLASS!RTBRKET THEN BEGIN ERR(206); GO TO LX END; %A11014400
IF J!DM THEN ERR(208); %A11014500
ROWTOG ~ (STEPI=ASSIGNOP) OR ROWTOG OR %A11014600
((ELCLASS = COMMA OR ELCLASS = RTPAREN) AND ROWTOG.[45:1]); %A11014700
IF ROWTOG THEN BEGIN IF J =1 THEN %A11014800
EMITN(TALL.ADDRESS) ELSE EMITO(CDC); %A11014900
IF SM THEN BEGIN EMITV(JUNK); EMITO(XCH); END; END ELSE %A11015000
IF WDS ! 0 THEN BEGIN %A11015100
IF J = 1 THEN BEGIN EMITPAIR(TMP,SND); %A11015200
EMITV(J ~ TALL.ADDRESS); WDS ~ WDS - 1; %A11015300
FOR GT1 ~ 1 STEP 1 UNTIL WDS DO BEGIN %A11015400
EMITV(TMP); EMITL(GT1); EMITO(ADD); EMITV(J) END END ELSE %A11015500
BEGIN %A11015600
WDS ~ WDS -2; %A11015700
EMITPAIR(TMP,STD); EMITO(DUP); EMITV(TMP); %A11015800
EMITO(COC); EMITO(XCH); %A11015900
FOR GT1 ~ 1 STEP 1 UNTIL WDS DO BEGIN %A11016000
EMITO(DUP); EMITV(TMP); EMITL(GT1); EMITO(ADD); %A11016100
EMITO(COC); EMITO(XCH); END; %A11016200
EMITV(TMP); EMITL(WDS+1); EMITO(ADD); EMITO(COC) END %A11016300
END %A11016400
ELSE IF J = 1 THEN EMITV(TALL.ADDRESS) ELSE EMITO(COC); %A11016500
IF ROWTOG.[46:1] THEN BEGIN %A11016600
IF GT1 ~ TAKE(GIT(TALL) + DM + 1).[35:13] > 8 THEN EMITO(LOD); %A11016700
EMITNUM(GT1) END; %A11016800
LX: QUOTETOG ~ QO; DPTOG ~ DPO; %A11016900
END OF ARAY; %A11017000
% %A11017100
PROCEDURE GENEXP(R); VALUE R; REAL R; %A11017200
BEGIN %B11017300
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11017400
IF R > 29 THEN BEGIN STEPIT; RECOM(R) END ELSE %A11017500
CASE R-1 OF BEGIN %A11017600
BEGIN STEPIT; BEXP END; %A11017700
BEGIN STEPIT; DEXP END; %A11017800
BEGIN STEPIT; AEXP END; %A11017900
; BEGIN QUOTETOG ~ TRUE; STEPIT; SEXPN; QUOTETOG~FALSE END; %A11018000
DBLPLXP(0); %A11018100
DBLPLXP(1); %A11018200
DBLPLXP(2); END; %A11018300
END; %B11018400
% %A11018500
PROCEDURE IFXP(R); VALUE R; REAL R; %A11018600
BEGIN INTEGER B,S; %A11018700
QUOTETOG ~ DPTOG ~ FALSE; %A11018800
STEPIT; STACKCT ~ 0; BEXP; %A11018900
IF ELCLASS ! THENV THEN ERR(116); %A11019000
STACKCT ~ 0; B ~ BUMPL; GENEXP(R); STACKCT ~ 0; %A11019100
S ~ BUMPL; EMITB(BFC,B,L); %A11019200
IF ELCLASS ! ELSEV THEN ERR(155) ELSE %A11019300
BEGIN GENEXP(R); STACKCT ~1; EMITB(BFW,S,L); %A11019400
EMIT(1); L ~ L - 1 END %A11019500
END IFXP; %A11019600
% %A11019700
PROCEDURE EMITCONVAL; %A11019800
BEGIN LABEL EXIT,L; INTEGER T; %A11019900
IF STEPI ! LEFTPAREN THEN ERR(105) ELSE %A11020000
BEGIN %A11020100
IF STEPI ! LITNO THEN BEGIN %A11020200
L: ERR(609); GO EXIT END; %A11020300
IF T ~ ELBAT[I].ADDRESS } 40 THEN GO L; %A11020400
STEPIT; %A11020500
IF T > 1 AND T < 36 THEN EMITV(T+104) ELSE %A11020600
IF T = 37 THEN BEGIN EMITV(COLSET); %A11020700
IF ELCLASS = COMMA THEN BEGIN STEPIT; AEXP; %A11020800
EMITPAIR(COLSET,STD) END END ELSE %A11020900
IF T = 0 THEN BEGIN %A11021000
IF ELCLASS = COMMA THEN BEGIN %A11021100
STEPIT; AEXP; EMITPAIR(RND,STD) END; %A11021200
EMITO(MKS); EMITV(RANDNO); END ELSE %A11021300
IF T = 1 THEN EMITV(RND) ELSE %A11021400
IF T = 36 THEN EMITV(TABLEMARK) ELSE %A11021500
ERR(686);% %A11021600
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104); %A11022200
END; %A11022300
EXIT: %A11022400
END OF EMITCONVAL; %A11022500
% %A11022600
% %A11022700
% %A11022800
COMMENT DOUBLE EXPRESSIONS; %A11022900
BOOLEAN PROCEDURE DIVOP(OP); VALUE OP; REAL OP; %A11023000
DIVOP ~ OP.[40:8]=128; %A11023100
% %A11023200
PROCEDURE DBLXCH(BV,J); %A11023300
VALUE BV,J; %A11023400
BOOLEAN BV; INTEGER J; %A11023500
IF BV THEN BEGIN %A11023600
EMITPAIR(TEMP(J),STD); EMITO(XCH); EMITPAIR(TEMP(J+1),STD); %A11023700
EMITO(XCH); EMITV(TEMP(J)); EMITO(XCH); %A11023800
EMITV(TEMP(J+1)); END %A11023900
ELSE EMITO(XCH); %A11024000
% %A11024100
PROCEDURE DBLSTO(BV,J,OPER); %A11024200
VALUE BV,J,OPER; %A11024300
BOOLEAN BV; INTEGER J,OPER; %A11024400
IF BV THEN BEGIN %A11024500
EMITPAIR(TEMP(J),OPER); IF OPER=SND THEN EMITO(XCH); %A11024600
EMITPAIR(TEMP(J+1),OPER); IF OPER=SND THEN EMITO(XCH) %A11024700
END %A11024800
ELSE EMITPAIR(TEMP(J),OPER); %A11024900
% %A11025000
PROCEDURE DBLEMITV(BV,J); %A11025100
VALUE BV,J; %A11025200
BOOLEAN BV; INTEGER J; %A11025300
BEGIN IF BV THEN %A11025400
EMITV(TEMP(J+1)); %A11025500
EMITV(TEMP(J)) END; %A11025600
% %A11025700
PROCEDURE DBLDUP; %A11025800
IF DPTOG THEN %A11025900
BEGIN %A11026000
EMITPAIR(JUNK,STD); EMITO(DUP); %A11026100
EMITV(JUNK); EMITO(XCH); EMITV(JUNK) %A11026200
END %A11026300
ELSE EMITO(DUP); %A11026400
% %A11026500
PROCEDURE EMITDV(OP,BV); VALUE OP,BV; REAL OP; BOOLEAN BV; %A11026600
BEGIN %B11026700
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11026800
IF OP ~ OP.[38:2]=0 THEN EMITO(128+REAL(BV)) ELSE %A11026900
IF OP = 1 THEN IF BV THEN BEGIN %A11027000
DBLTSNGL(5); EMITO(384); EMIT(0); EMITO(XCH) END ELSE %A11027100
EMITO(384) ELSE %A11027200
IF BV THEN BEGIN DBLSTO(TRUE,5,STD); %A11027300
DBLSTO(TRUE,7,STD); EMITO(MKS); %A11027400
DBLEMITV(TRUE,7); DBLEMITV(TRUE,5); EMITV(GNATP(14)) %A11027500
; EMITV(JUNK); %A11027600
END ELSE EMITO(896); %A11027700
END; %B11027800
% %A11027900
PROCEDURE DBLPLXVAR(FROM); VALUE FROM; BOOLEAN FROM; %A11028000
BEGIN REAL TALL,STR,ADR,TYPE,ADS; %A11028100
REAL R; %A11028200
BOOLEAN ARTOG,V; LABEL EXIT,L; %A11028300
ADR ~ (TALL ~ ELBAT[I]).ADDRESS; CHECKER(TALL); %A11028400
TYPE ~ TAKE(TALL.LINK+1).[2:2]; %A11028500
IF ELCLASS=DBLPLXPROCID THEN BEGIN STEPIT; %A11028600
DBLPLXP(TYPE); EMITPAIR(514,STD); %A11028700
ADS ~ TAKE(TALL.LINK+ TALL.INCR).[30:10]; %A11028800
IF TYPE!2 THEN TYPE~0; %A11028900
FOR ADR ~ 1 STEP 1 UNTIL TYPE DO BEGIN %A11029000
EMITPAIR(ADS,STD); ADS~ADS+1 END; %A11029100
IF FROM THEN EMITPAIR(ADS,STD) ELSE %A11029200
BEGIN EMITPAIR(ADS,SND); %A11029300
FOR ADR~1 STEP 1 UNTIL TYPE DO EMITV(ADS~ADS-1); %A11029400
EMITV(514) END END ELSE %A11029500
BEGIN V ~ TALL.[9:2]=2; %A11029600
ADR ~ ADR & TALL[1:9:1]; %A11029700
IF ARTOG ~ ELCLASS = DBLPLXARRAYID THEN BEGIN %A11029800
IF ARAY(TALL,IF TYPE=2 THEN 4 ELSE 2,FALSE) THEN %A11029900
BEGIN ERR(610); GO EXIT END END ELSE %A11030000
BEGIN IF V THEN EMITN(ADR); STEPIT END; %A11030100
IF ELCLASS=ASSIGNOP THEN BEGIN L: DPTOG ~ TYPE ! 1; STEPIT; %A11030200
IF ARTOG OR V THEN BEGIN EMITO(DUP); EMITL(1); %A11030300
EMITO(XCH); EMITO(INX); %A11030400
IF TYPE = 2 THEN BEGIN EMITO(DUP); EMITL(1); EMITO(XCH); %A11030500
EMITO(INX); EMITO(DUP); EMITL(1); EMITO(XCH); EMITO(INX); %A11030600
END END; %A11030700
IF TYPE=0 THEN BEGIN R ~ 12; DBLXP; END ELSE R ~ PLXP(TYPE=2); %A11030800
DPTOG ~ FALSE; %A11030900
IF ARTOG OR V THEN BEGIN %A11031000
PLXNORM(R,TYPE=2); %A11031100
IF TYPE = 2 THEN BEGIN EMITPAIR(JUNK,STD); EMITPAIR(NSTR,STD); %A11031200
EMITPAIR(39,STD); EMITPAIR(40,STD); EMITV(JUNK); %A11031300
EMITO(XCH); EMITO(STD); EMITV(NSTR); EMITO(XCH); %A11031400
EMITO(STD); EMITV(39); EMITO(XCH); EMITO(STD); %A11031500
EMITV(40); EMITO(XCH); %A11031600
IF FROM THEN EMITO(STD) ELSE BEGIN EMITO(SND); %A11031700
EMITV(39); EMITV(NSTR); EMITV(JUNK); END END ELSE %A11031800
BEGIN EMITO(XCH); EMITPAIR(JUNK,STD); EMITO(XCH); %A11031900
IF FROM THEN EMITO(STD) ELSE BEGIN EMITO(SND); EMITO(XCH); %A11032000
END; EMITV(JUNK); EMITO(XCH); %A11032100
IF FROM THEN EMITO(STD) ELSE BEGIN EMITO(SND); %A11032200
EMITO(XCH); END END END ELSE %A11032300
BEGIN V~ TYPE=2; TYPE ~ IF FROM THEN STD ELSE SND; %A11032400
IF R<4 THEN BEGIN IF R}2 THEN EMITO(CHS); %A11032500
IF BOOLEAN(R) THEN BEGIN EMITPAIR(ADR+REAL(V),TYPE); %A11032600
IF V THEN BEGIN IF NOT FROM THEN EMITO(XCH); %A11032700
EMITPAIR(ADR,TYPE); IF NOT FROM THEN EMITO(XCH); END; %A11032800
EMIT(0); %A11032900
IF V THEN BEGIN EMITPAIR(ADR+3,SND); EMITPAIR(ADR+2,TYPE); %A11033000
IF NOT FROM THEN EMITO(DUP) END ELSE %A11033100
EMITPAIR(ADR+1,TYPE); END ELSE %A11033200
BEGIN IF V THEN EMITPAIR(ADR+3,STD); %A11033300
EMITPAIR(ADR+1+REAL(V),STD); EMIT(0); %A11033400
IF V THEN EMITPAIR(ADR+1,SND); EMITPAIR(ADR,TYPE); %A11033500
IF NOT FROM THEN BEGIN IF V THEN EMIT(0); %A11033600
EMITV(ADR+1+REAL(V)); %A11033700
IF V THEN EMITV(ADR+3) END END END ELSE %A11033800
BEGIN IF BOOLEAN(R.[41:1]) THEN EMITO(CHS); %A11033900
ADS~ IF BOOLEAN(R.[42:1]) THEN 0 ELSE 1; %A11034000
IF V THEN BEGIN EMITPAIR(ADR+1+2|ADS,STD); %A11034100
EMITPAIR(2|ADS+ADR,STD) END ELSE %A11034200
BEGIN EMITPAIR(ADR+ADS,TYPE); IF NOT FROM THEN EMITO(XCH) %A11034300
END; IF BOOLEAN(R.[43:1]) THEN EMITO(CHS); ADS ~ 1-ADS; %A11034400
IF V THEN BEGIN %A11034500
IF FROM OR BOOLEAN(ADS) THEN BEGIN %A11034600
EMITPAIR(ADR+1+2|ADS,STD); EMITPAIR(ADR+2|ADS,STD); %A11034700
IF NOT FROM THEN BEGIN EMITV(ADR); EMITV(ADR+1) END %A11034800
END ELSE BEGIN EMITPAIR(ADR+1,SND); EMITO(XCH); %A11034900
EMITPAIR(ADR,SND); EMITO(XCH) END; %A11035000
IF NOT FROM THEN BEGIN EMITV(ADR+2); EMITV(ADR+3) END %A11035100
END ELSE %A11035200
BEGIN EMITPAIR(ADR+ADS,TYPE); %A11035300
IF NOT FROM THEN %A11035400
IF NOT BOOLEAN(ADS) THEN EMITO(XCH) END %A11035500
END END END ELSE %A11035600
IF FROM THEN ERR(145) ELSE %A11035700
IF NOT ARTOG THEN BEGIN %A11035800
TYPE ~ IF TYPE =2 THEN 3 ELSE 1; %A11035900
IF V THEN BEGIN %A11036000
FOR TALL~ 1 STEP 1 UNTIL TYPE DO BEGIN EMITO(DUP); %A11036100
EMITL(1); EMITO(INX); EMITO(XCH); EMITO(LOD); %A11036200
EMITO(XCH); END; %A11036300
EMITO(LOD) END ELSE %A11036400
FOR TALL ~ 0 STEP 1 UNTIL TYPE DO EMITV(ADR+TALL); %A11036500
END END; %A11036600
EXIT: END DBLPLXVAR; %A11036700
% %A11036800
PROCEDURE DBLINT; %A11036900
BEGIN REAL T,R; LABEL EXIT; %A11037000
IF GT1 ~ (T ~ ELBAT[I]).[33:2] = 0 THEN BEGIN %A11037100
DPTOG ~ FALSE; %A11037200
EMIT(0); IMPFUN END ELSE %A11037300
CASE (T ~ TAKE(T.LINK+GT1)).[12:3] OF BEGIN %A11037400
BEGIN DPTOG ~ FALSE; EMIT(0); IMPFUN END; %A11037500
BEGIN PANDBL(TRUE); EMITV(GNATP(T.[9:3])); EMITV(JUNK) END; %A11037600
BEGIN T ~ L; EMITO(NOP); %A11037700
IF PANPLX(FALSE,TRUE) < 4 THEN EMITO(SSP) ELSE %A11037800
BEGIN R ~ L; L ~ T; EMITO(MKS); L ~ R; %A11037900
DBLSTO(TRUE,1,STD); DPTOG ~ TRUE; DBLDUP; EMITO(ML2); %A11038000
DBLEMITV(TRUE,1); DBLEMITV(TRUE,1); EMITO(ML2); %A11038100
EMITO(AD2); EMITV(DSQRT); EMITV(JUNK) END; %A11038200
END; %A11038300
IF R ~ PANPLX(FALSE,TRUE) < 4 THEN %A11038400
IF BOOLEAN(R) THEN BEGIN %A11038500
IF BOOLEAN(R.[46:1]) THEN EMITO(CHS) END ELSE %A11038600
BEGIN EMITO(DEL); EMITO(DEL); EMIT(0); EMIT(0) END ELSE %A11038700
IF BOOLEAN(R.[42:1]) THEN BEGIN EMITPAIR(JUNK,STD); %A11038800
EMITO(XCH); EMITO(DEL); EMITO(XCH); EMITO(DEL); EMITV(JUNK); %A11038900
IF BOOLEAN(R.[41:1]) THEN EMITO(CHS) END %A11039000
ELSE BEGIN EMITO(DEL); EMITO(DEL); %A11039100
IF BOOLEAN(R.[43:1]) THEN EMITO(CHS) END; %A11039200
IF R ~ PANPLX(FALSE,TRUE) < 4 THEN %A11039300
IF BOOLEAN(R) THEN BEGIN EMITO(DEL); EMITO(DEL); %A11039400
EMIT(0); EMIT(0) END ELSE %A11039500
BEGIN IF BOOLEAN(R.[46:1]) THEN EMITO(CHS) END ELSE %A11039600
IF BOOLEAN(R.[42:1]) THEN BEGIN EMITO(DEL); EMITO(DEL); %A11039700
IF BOOLEAN(R.[43:1]) THEN EMITO(CHS); END ELSE %A11039800
BEGIN EMITPAIR(JUNK,STD); EMITO(XCH); EMITO(DEL); %A11039900
EMITO(XCH); EMITO(DEL); EMITV(JUNK); %A11040000
IF BOOLEAN(R.[41:1]) THEN EMITO(CHS) END; %A11040100
BEGIN PLXNORM(PANPLX(TRUE,TRUE),TRUE); EMITV(GNATP(7)); %A11040200
EMITV(17) END; %A11040300
BEGIN EMIT(0); EMITO(MKS); %A11040400
IF STEPI = LEFTPAREN THEN BEGIN STEPIT; %A11040410
IF Q ~ ACCUM[1] = "3TWX00" THEN EMITL(5) ELSE %A11040420
IF Q = "4TWXA0" THEN EMITL(10) ELSE FLAG(665); %A11040430
IF STEPI! RTPAREN THEN ERR(104) ELSE STEPIT END ELSE EMIT(0); %A11040440
EMITL(1); EMITV(READN); END; END; %A11040450
EXIT: END OF DBLINT; %A11040500
% %A11040600
PROCEDURE DBLPRIM; %A11040700
BEGIN LABEL EXIT; %A11040800
REAL T; %A11040900
IF ELCLASS= INTRNSICPROCID THEN DBLINT ELSE BEGIN %A11041000
IF ELCLASS}DBLPLXTRNS AND ELCLASS{DBLPLXARRAYID THEN %A11041100
IF (T ~ ELCLASS - STRTRNS).[45:3]= 1 THEN %A11041200
IF TAKE(ELBAT[I].LINK+1).[2:2]=0 THEN BEGIN %A11041300
CASE T DIV 8 OF BEGIN %A11041400
IF BOOLEAN(ELBAT[I].[34:1]) THEN BEGIN %A11041500
ELBAT[I].ADDRESS ~ INDBL; %A11041600
ELBAT[I].CLASS~ DBLPLXID; DBLPLXVAR(FALSE) END %A11041700
ELSE ERR(611); %A11041800
STRMPROCSTMT; %A11041900
PROCSTMT(FALSE); DBLPLXVAR(FALSE); DBLPLXVAR(FALSE); END; %A11042000
GO EXIT END; %A11042100
IF ELCLASS=LEFTPAREN THEN BEGIN I~I-1; PANDBL(FALSE) END ELSE %A11042200
IF ELCLASS=NONLITNO THEN BEGIN EMITNUM(NLO); EMITNUM(NHI); %A11042300
STEPIT END ELSE %A11042400
IF ACCUM[1] = "3TEN00" THEN BEGIN BANA; EMITPAIR(JUNK,ISN); %T9311042500
EMITO(DUP); %T9311042550
EMITL(69); EMITO(ADD); EMITV(GNAT(POWERSOFTEN)); EMITO(XCH);%A11042600
EMITV(105) END ELSE %A11042650
BEGIN EMIT(0); DPTOG ~ FALSE; PRIMARY END END; %A11042700
EXIT: END OF DBLPRIM; %A11042800
% %A11042900
PROCEDURE DBLEXP; %A11043000
BEGIN EMITO(MKS); DBLPRIM; EMITV(DBLFACT); END; %A11043100
% %A11043200
PROCEDURE DBLSEC; %A11043300
BEGIN %B11043400
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11043500
IF ELCLASS = ADOP THEN %A11043600
BEGIN %A11043700
STEPIT; %A11043800
IF ELBAT[I-1].ADDRESS ! ADD THEN %A11043900
BEGIN %A11044000
DBLPRIM; %A11044100
WHILE ELCLASS = FACTOP DO %A11044200
BEGIN DPTOG ~ TRUE; STEPIT; DBLEXP END; %A11044300
ENDTOG~LINKTOG; EMITO(CHS); %A11044400
LINKTOG~ENDTOG; ENDTOG~FALSE %A11044500
END %A11044600
ELSE DBLPRIM %A11044700
END %A11044800
ELSE DBLPRIM; %A11044900
END; %B11045000
% %A11045100
PROCEDURE DBLCOMP; %A11045200
BEGIN REAL OPCLASS, OPERATOR; %A11045300
DO BEGIN %A11045400
OPERATOR~ ELBAT[I].ADDRESS; %A11045500
OPCLASS ~ ELCLASS; %A11045600
DPTOG ~TRUE; %A11045700
STEPIT; %A11045800
IF OPCLASS = FACTOP %A11045900
THEN DBLEXP %A11046000
ELSE BEGIN %A11046100
DBLPRIM; %A11046200
DPTOG ~ TRUE; %A11046300
WHILE OPCLASS < ELCLASS DO DBLCOMP; %A11046400
IF DIVOP(OPERATOR) THEN %A11046500
EMITDV(OPERATOR,TRUE) ELSE EMITO(OPERATOR+1) %A11046600
END %A11046700
END UNTIL OPCLASS ! ELCLASS; %A11046800
END DBLCOMP; %A11046900
% %A11047000
PROCEDURE SIMPDBL; %A11047100
WHILE ELCLASS } ADOP DO DBLCOMP; %A11047200
% %A11047300
PROCEDURE DBLXP; %A11047400
BEGIN %A11047500
DPTOG~TRUE; %A11047600
IF ELCLASS = CASEV %A11047700
THEN CASESTMT(13) ELSE %A11047800
IF ELCLASS = IFV %A11047900
THEN IFXP(6) ELSE %A11048000
BEGIN DBLSEC; SIMPDBL END; %A11048100
% %A11048200
END DBLXP; %A11048300
% %A11048400
PROCEDURE PANDBL(V); VALUE V; BOOLEAN V; %A11048500
BEGIN %B11048600
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11048700
IF STEPI ! LEFTPAREN THEN ERR(105) ELSE %A11048800
BEGIN IF V THEN EMITO(MKS); DPTOG ~ TRUE; %A11048900
STEPIT; DBLXP; %A11049000
IF ELCLASS!RTPAREN THEN ERR(104) ELSE STEPIT END; %A11049100
DPTOG ~ FALSE; %A11049200
END; %B11049300
COMMENT COMPLEX EXPRESSIONS; %A11049400
% %A11049500
INTEGER PROCEDURE PAIR(R1,R2); VALUE R1,R2; REAL R1,R2; %A11049600
PAIR~4 & R1[41:46:2] & R2[43:46:2]; %A11049700
% %A11049800
PROCEDURE PLXNORM(R,BV); %A11049900
VALUE R,BV; %A11050000
REAL R; %A11050100
BOOLEAN BV; %A11050200
BEGIN INTEGER T1,T2; %A11050300
IF R < 4 THEN %A11050400
BEGIN %A11050500
IF BOOLEAN(R.[46:1]) THEN EMITO(CHS); %A11050600
EMITL(0); %A11050700
IF BV THEN EMITL(0); %A11050800
IF BOOLEAN(R) THEN ELSE DBLXCH(BV,1); %A11050900
END ELSE %A11051000
BEGIN %A11051100
T1~R.TS; T2~R.NS; %A11051200
IF BOOLEAN(T1.[46:1]) THEN EMITO(CHS); %A11051300
IF BOOLEAN(T2.[46:1]) THEN %A11051400
BEGIN DBLXCH(BV,1); EMITO(CHS); %A11051500
IF BOOLEAN(T2) THEN DBLXCH(BV,1) END ELSE %A11051600
IF BOOLEAN(T1) THEN DBLXCH(BV,1) %A11051700
END %A11051800
END OF PLXNORM; %A11051900
% %A11052000
INTEGER PROCEDURE PLXOP(OP,R1,R2,BV); %A11052100
VALUE OP,R1,R2,BV; %A11052200
REAL OP,R1,R2; BOOLEAN BV; %A11052300
BEGIN %B11052400
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11052500
IF OP = MUL THEN BEGIN %A11052600
PLXOP~(R1+R2) MOD 4; %A11052700
EMITO(MUL + REAL(BV)) END ELSE %A11052800
IF DIVOP(OP) THEN BEGIN %A11052900
PLXOP~(4 + R1 - R2) MOD 4; %A11053000
EMITDV(OP,BV) END ELSE %A11053100
BEGIN PLXOP~R1; %A11053200
IF R1 = R2 THEN EMITO(OP + REAL(BV)) ELSE %A11053300
IF NOT BOOLEAN(R1 + R2) THEN %A11053400
EMITO(IF OP = ADD THEN (SUB + REAL(BV)) ELSE %A11053500
(ADD + REAL(BV))) ELSE %A11053600
PLXOP ~ PAIR(IF OP=ADD THEN R2 ELSE R2+2,R1) %A11053700
END; %A11053800
END; %B11053900
% %A11054000
INTEGER PROCEDURE PLXOP2(OPCLASS,R1,R2,BV); %A11054100
VALUE OPCLASS,R1,R2,BV; %A11054200
REAL OPCLASS,R1,R2; BOOLEAN BV; %A11054300
BEGIN %A11054400
REAL T1,T2,TS1,TS2,T; %A11054500
DEFINE OP= OPCLASS#, %A11054600
NS1 = T1#, %A11054700
NS2 = T2#; %A11054800
DPTOG ~ BV; %A11054900
IF R2 < 4 THEN %A11055000
IF R1 < 4 THEN %A11055100
PLXOP2~PLXOP(OP,R1,R2,BV) ELSE %A11055200
BEGIN %A11055300
T1~R1.TS; %A11055400
T2~R1.NS; %A11055500
IF OPCLASS = ADD OR OPCLASS = SUB THEN %A11055600
IF BOOLEAN(T1+R2) THEN %A11055700
BEGIN %A11055800
DBLXCH(BV,1); %A11055900
DBLSTO(BV,1,STD); %A11056000
PLXOP2~PAIR(T1,PLXOP(OP,T2,R2,BV)); %A11056100
DBLEMITV(BV,1) %A11056200
END %A11056300
ELSE PLXOP2~PAIR(PLXOP(OP,T1,R2,BV),T2) %A11056400
ELSE BEGIN %A11056500
DBLSTO(BV,1,SND); %A11056600
R1 ~ PLXOP(OP,T1,R2,BV); %A11056700
DBLXCH(BV,3); %A11056800
DBLEMITV(BV,1); %A11056900
PLXOP2~PAIR(PLXOP(OP,T2,R2,BV),R1) %A11057000
END %A11057100
END %A11057200
ELSE %A11057300
IF R1 < 4 THEN %A11057400
BEGIN %A11057500
T1~R2.TS; %A11057600
T2~R2.NS; %A11057700
IF OPCLASS = ADD OR OPCLASS = SUB THEN %A11057800
BEGIN %A11057900
IF BOOLEAN(T2+R1) THEN %A11058000
BEGIN %A11058100
DBLXCH(BV,1); %A11058200
T~T1; %A11058300
T1~T2; %A11058400
T2~T %A11058500
END; %A11058600
DBLSTO(BV,1,STD); %A11058700
IF OP = SUB THEN T1 ~ T1 + 2; %A11058800
PLXOP2~PAIR(T1,PLXOP(OP,R1,T2,BV)); %A11058900
DBLEMITV(BV,1) %A11059000
END %A11059100
ELSE BEGIN %A11059200
IF DIVOP(OP) THEN %A11059300
BEGIN %A11059400
T1~(4-T1) MOD 4; %A11059500
T2~(4-T2) MOD 4 %A11059600
END; %A11059700
DBLSTO(BV,1,STD); %A11059800
DBLSTO(BV,3,STD); %A11059900
DBLDUP; %A11060000
DBLEMITV(BV,3); %A11060100
R2~PLXOP(MUL,R1,T2,BV); %A11060200
DBLXCH(BV,5); %A11060300
DBLEMITV(BV,1); %A11060400
PLXOP2~PAIR(PLXOP(MUL,R1,T1,BV),R2); %A11060500
IF DIVOP(OP) THEN %A11060600
BEGIN %A11060700
DBLEMITV(BV,1); %A11060800
DBLDUP; %A11060900
EMITO(MUL + REAL(BV)); %A11061000
DBLEMITV(BV,3); %A11061100
IF BV THEN DBLEMITV(BV,3) ELSE EMITO(DUP); %A11061200
EMITO(MUL + REAL(BV)); %A11061300
EMITO(ADD + REAL(BV)); %A11061400
DBLSTO(BV,1,SND); %A11061500
EMITDV(OP,BV); %A11061600
DBLXCH(BV,5); %A11061700
DBLEMITV(BV,1); %A11061800
EMITDV(OP,BV); %A11061900
DBLXCH(BV,1) %A11062000
END %A11062100
END %A11062200
END %A11062300
ELSE BEGIN %A11062400
TS1~R1.TS; %A11062500
NS1~R1.NS; %A11062600
TS2~R2.TS; %A11062700
NS2~R2.NS; %A11062800
IF OPCLASS = ADD OR OPCLASS = SUB THEN %A11062900
BEGIN %A11063000
IF BOOLEAN(NS2 + TS1) THEN %A11063100
BEGIN %A11063200
DBLXCH(BV,1); %A11063300
T~TS2; %A11063400
TS2~NS2; %A11063500
NS2~T %A11063600
END; %A11063700
DBLSTO(BV,1,STD); %A11063800
R2~PLXOP(OP,TS1,NS2,BV); %A11063900
DBLXCH(BV,3); %A11064000
DBLEMITV(BV,1); %A11064100
PLXOP2~PAIR(PLXOP(OP,NS1,TS2,BV),R2) %A11064200
END %A11064300
ELSE BEGIN %A11064400
IF DIVOP(OP) THEN %A11064500
BEGIN %A11064600
TS2~(4-TS2) MOD 4; %A11064700
NS2~(4-NS2) MOD 4 %A11064800
END; %A11064900
DBLSTO(BV,1,STD); %A11065000
DBLSTO(BV,3,STD); %A11065100
DBLSTO(BV,5,STD); %A11065200
DBLDUP; %A11065300
DBLEMITV(BV,3); %A11065400
R2~PLXOP(MUL,NS1,NS2,BV); %A11065500
DBLEMITV(BV,5); %A11065600
DBLEMITV(BV,1); %A11065700
R1~PLXOP(MUL,TS1,TS2,BV); %A11065800
R1~PLXOP(ADD,R2,R1,BV); %A11065900
DBLXCH(BV,7); %A11066000
DBLEMITV(BV,1); %A11066100
R2~PLXOP(MUL,NS1,TS2,BV); %A11066200
DBLEMITV(BV,5); %A11066300
DBLEMITV(BV,3); %A11066400
R2~PLXOP(ADD,R2,PLXOP(MUL,TS1,NS2,BV),BV); %A11066500
IF OP = MUL THEN PLXOP2~PAIR(R2,R1) %A11066600
ELSE BEGIN %A11066700
DBLEMITV(BV,1); %A11066800
IF BV THEN DBLEMITV(BV,1) ELSE EMITO(DUP); %A11066900
EMITO(MUL + REAL(BV)); %A11067000
DBLEMITV(BV,3); %A11067100
IF BV THEN DBLEMITV(BV,3) ELSE EMITO(DUP); %A11067200
EMITO(MUL + REAL(BV)); %A11067300
EMITO(ADD + REAL(BV)); %A11067400
DBLSTO(BV,1,SND); %A11067500
EMITDV(OP,BV); %A11067600
DBLXCH(BV,3); %A11067700
DBLEMITV(BV,1); %A11067800
EMITDV(OP,BV); %A11067900
PLXOP2~PAIR(R1,R2) %A11068000
END %A11068100
END %A11068200
END; %A11068300
END OF PLXOP2; %A11068400
% %A11068500
REAL PROCEDURE PLXINT(BV); VALUE BV; BOOLEAN BV; %A11068600
BEGIN %A11068700
REAL K; LABEL EXIT; %A11068800
DPTOG ~ FALSE; %A11068900
IF K ~ ELBAT[I].[33:2]! 0 THEN BEGIN %A11069000
CASE (K ~ TAKE(ELBAT[I].LINK+K)).[18:3] OF BEGIN %A11069100
IF BV THEN DBLINT ELSE IMPFUN; %A11069200
BEGIN PLXNORM(PANPLX(TRUE,FALSE),FALSE); EMITV(GNATP(K.[15:3]+9)); %A11069300
IF BV THEN BEGIN EMIT(0); EMITO(XCH); EMIT(0) END; %A11069400
EMITV(JUNK); PLXINT ~ 12 END; %A11069500
IF BV THEN DBLINT ELSE IMPFUN; END; %A11069600
GO EXIT END; %A11069700
IF BV THEN DBLINT ELSE IMPFUN; %A11069800
EXIT: END OF PLXINT; %A11069900
% %A11070000
REAL PROCEDURE PLXPRIM(BV); VALUE BV; BOOLEAN BV; %A11070100
BEGIN REAL J,R,K; LABEL EXIT, L; %A11070200
REAL T; %A11070300
DPTOG ~ FALSE; %A11070400
WHILE ELCLASS= COLON DO BEGIN J~J+1; STEPIT END; %A11070500
IF ELCLASS= INTRNSICPROCID THEN R ~ PLXINT(BV) ELSE BEGIN %A11070600
IF ELCLASS= FIELDID AND K ~ ELBAT[I].ADDRESS{ 2 THEN %A11070700
BEGIN R ~ 12; FIELDC(ELBAT[I],0,FALSE); GO L END ELSE %A11070800
IF ELCLASS}DBLPLXTRNS AND ELCLASS{DBLPLXARRAYID THEN %A11070900
IF (T ~ ELCLASS-STRTRNS).[45:3] =1 THEN BEGIN %A11071000
IF K ~ TAKE(ELBAT[I].LINK+1).[2:2] =0 THEN R ~0 ELSE R ~ 12; %A11071100
CASE T DIV 8 OF BEGIN BEGIN IF BV THEN K~0 ELSE K~1; %A11071200
IF BOOLEAN(ELBAT[I].[34:1]) THEN %A11071300
IF BV THEN DBLPRIM ELSE PRIMARY ELSE %A11071400
BEGIN R ~ PANPLX(FALSE,BV); %A11071500
IF R < 4 THEN BEGIN IF BOOLEAN(R) THEN R ~ (R+2)MOD 4 %A11071600
END ELSE %A11071700
IF BOOLEAN(R.[42:1]) THEN R ~ R & (R.TS+2)[41:46:2] ELSE %A11071800
R ~ R & (R.NS+2) [43:46:2] END; %A11071900
END; %A11072000
STRMPROCSTMT; PROCSTMT(FALSE); %A11072100
DBLPLXVAR(FALSE); DBLPLXVAR(FALSE); END; %A11072200
L: IF BV AND K=1 THEN %A11072300
IF R<4 THEN BEGIN EMIT(0); EMITO(XCH) END ELSE %A11072400
BEGIN EMITPAIR(JUNK,STD); EMIT(0); EMITO(XCH); %A11072500
EMIT(0); EMITV(JUNK) END ELSE %A11072600
IF K!1 AND NOT BV THEN DBLTSNGL(R); %A11072700
GO TO EXIT END; %A11072800
IF ELCLASS=LEFTPAREN THEN BEGIN I~I-1; R ~ PANPLX(FALSE,BV); %A11072900
GO EXIT END ELSE %A11073000
IF BV THEN DBLPRIM ELSE PRIMARY; R ~ 0; END; %A11073100
EXIT: IF R < 4 THEN PLXPRIM ~ (R+J).[46:2]ELSE %A11073200
PLXPRIM ~ R & (R.TS+J)[41:46:2] %A11073300
& (R.NS+J)[43:46:2] %A11073400
END OF PLXPRIM; %A11073500
% %A11073600
REAL PROCEDURE PLEXP(R,BV); VALUE R,BV; REAL R; BOOLEAN BV; %A11073700
BEGIN %B11073800
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11073900
% %A11074000
IF R > 4 OR BOOLEAN(R) THEN BEGIN PLEXP ~ 12; %A11074100
PLXNORM(R,BV); EMITO(MKS); IF BV THEN DBLPRIM ELSE PRIMARY; %A11074200
EMITV(IF BV THEN DBLPLXFACT ELSE PLXFACT) END ELSE %A11074300
BEGIN IF R = 2 THEN EMITO(CHS); %A11074400
IF BV THEN DBLEXP ELSE %A11074500
BEGIN PRIMARY; EMITUP END END; %A11074600
% %A11074700
END OF PLEXP; %A11074800
% %A11074900
INTEGER PROCEDURE PLXCOMP(R1,BV); %A11075000
VALUE R1,BV; INTEGER R1; BOOLEAN BV; %A11075100
BEGIN REAL OPERATOR,R2,OPCLASS; %A11075200
DO BEGIN %A11075300
OPERATOR~ELBAT[I].ADDRESS; %A11075400
OPCLASS ~ ELCLASS; %A11075500
DPTOG ~ BV; %A11075600
STEPIT; %A11075700
IF OPCLASS = FACTOP THEN R1~ PLEXP(R1,BV) %A11075800
ELSE BEGIN R2~PLXPRIM(BV); %A11075900
WHILE OPCLASS < ELCLASS DO %A11076000
R2~PLXCOMP(R2,BV); %A11076100
R1~PLXOP2(OPERATOR,R1,R2,BV) %A11076200
END %A11076300
END UNTIL OPCLASS ! ELCLASS; %A11076400
PLXCOMP~R1; %A11076500
END OF PLXCOMP; %A11076600
% %A11076700
INTEGER PROCEDURE SIMPLX(R,BV); VALUE R,BV; INTEGER R; BOOLEAN BV; %A11076800
BEGIN WHILE ELCLASS } ADOP DO R~PLXCOMP(R,BV); %A11076900
SIMPLX~R END; %A11077000
% %A11077100
INTEGER PROCEDURE PLXSEC(BV); VALUE BV; BOOLEAN BV; %A11077200
BEGIN REAL R; %A11077300
IF ELCLASS = ADOP THEN BEGIN %A11077400
IF ELBAT[I].ADDRESS ! ADD THEN %A11077500
BEGIN %A11077600
STEPIT; %A11077700
R~PLXPRIM(BV); %A11077800
WHILE ELCLASS = FACTOP DO BEGIN DPTOG ~ BV; %A11077900
STEPIT; R ~ PLEXP(R,BV) END; %A11078000
PLXSEC~IF R < 4 THEN (R+2) MOD 4 %A11078100
ELSE 4 & (R.[43:2] + 2)[43:46:2] %A11078200
& (R.[41:2] + 2)[41:46:2] %A11078300
END %A11078400
ELSE BEGIN STEPIT; PLXSEC~PLXPRIM(BV) END %A11078500
END ELSE PLXSEC~PLXPRIM(BV) %A11078600
END OF PLXSEC; %A11078700
% %A11078800
REAL PROCEDURE PANPLX(V,A); VALUE V,A; BOOLEAN V,A; %A11078900
BEGIN %B11079000
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11079100
IF STEPI! LEFTPAREN THEN ERR(105) ELSE BEGIN %A11079200
IF V THEN EMITO(MKS); %A11079300
DPTOG ~ A; %A11079400
STEPIT; PANPLX ~ PLXP(A); %A11079500
DPTOG ~ FALSE; %A11079600
IF ELCLASS ! RTPAREN THEN ERR(104) ELSE STEPIT END; %A11079700
END; %B11079800
% %A11079900
PROCEDURE PLXPN(BV); VALUE BV; BOOLEAN BV; %A11080000
BEGIN DPTOG ~ BV; STEPIT; PLXNORM(PLXP(BV),BV); DPTOG ~ FALSE END; %A11080100
% %A11080200
PROCEDURE DBLPLXP(TYPE); VALUE TYPE; REAL TYPE; %A11080300
IF TYPE=0 THEN BEGIN DPTOG ~ TRUE; STEPIT; %A11080400
DBLXP; DPTOG ~ FALSE END ELSE PLXPN(TYPE=2); %A11080500
% %A11080600
INTEGER PROCEDURE PLXP(BV); VALUE BV; BOOLEAN BV; %A11080700
BEGIN %B11080800
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11080900
IF ELCLASS = CASEV %A11081000
THEN BEGIN PLXP~12; %A11081100
CASESTMT(1 & (7 + REAL(BV))[43:44:4]) %A11081200
END ELSE %A11081300
IF ELCLASS = IFV %A11081400
THEN BEGIN PLXP~12; %A11081500
IFXP(7 + REAL(BV)) END ELSE %A11081600
PLXP~SIMPLX(PLXSEC(BV),BV); %A11081700
END; %B11081800
% THE FOLLOWING FOR RECORD EXPRESSIONS %A11081900
% %A11082000
PROCEDURE FIELDC(EL,PR,FROM); VALUE EL,PR,FROM; REAL EL,PR; %A11082100
BOOLEAN FROM; %A11082200
BEGIN REAL T1,T2,T3,FCLASS; %A11082300
REAL T; BOOLEAN B; %A11082400
BOOLEAN PART; LABEL EXIT; REAL CR; %A11082500
LABEL LRX; BOOLEAN SYMTF; %A11082550
DEFINE TEMP1 = TMP#; %A11082600
BOOLEAN PROCEDURE CHECKTYPE(EL,RTYPE); VALUE EL,RTYPE; %A11082700
REAL EL,RTYPE; %A11082800
BEGIN REAL S; DEFINE T = RTYPE#; REAL R; %A11082900
LABEL EXIT; %A11083000
CHECKTYPE ~ TRUE; %A11083100
T ~ TAKE(R~GIT(RECARRAY[RTYPE])); %A11083200
FOR S ~ 1 STEP 1 UNTIL T DO %A11083300
IF TAKE(R+S) = EL THEN BEGIN CHECKTYPE~FALSE; GO EXIT END; %A11083400
EXIT: END OF CHECKTYPE; %A11083500
FCLASS ~ EL.ADDRESS; %A11083600
IF BOOLEAN(PR) THEN %A11083700
IF FCLASS=STRINGV THEN BEGIN EMITPAIR(TMP,SND); %A11083800
EMITO(MKS); EMITV(TMP); END %A11083900
ELSE EMITO(DUP); %A11084000
T1 ~ TAKE(GIT(EL)); %A11084100
IF BOOLEAN(PR) THEN BEGIN %A11084200
T3 ~ GNATR(PR.[26:6]); %A11084300
IF T ~ PR.[32:7] + T1.[8:7] > T1.[15:7] THEN %A11084400
BEGIN ERR(635); GO EXIT END; %A11084500
END ELSE %A11084600
BEGIN %A11084700
IF T1 < 0 THEN BEGIN BANA; EMITO(DUP); EMITO(DUP); %A11084800
EMITL(T1.[8:7]); EMITO(LSS); EMITO(XCH); %A11084900
EMITL(T1.[15:7]); EMITO(GTR); EMITO(LOR); %A11085000
B ~ TRUE; %A11085100
EMITERR(SGNO,L,"15") END ELSE %A11085200
BEGIN STEPIT; T ~ T1.[8:7] END; %A11085300
IF ELCLASS ! LEFTPAREN THEN BEGIN %A11085400
ERR(105); GO EXIT END ELSE %A11085500
STEPIT; IF NOT RECLAIMTOG THEN BEGIN% %A11085600
IF SYMTF ~ ELCLASS = SYMID OR ELCLASS = SYMARRAYID OR %A11085610
ELCLASS = CHAINOP OR %A11085612
ELCLASS = SYMTRNS OR %A11085615
(ELCLASS = FIELDID AND ELBAT[I].ADDRESS = SYMV) THEN %A11085620
BEGIN SEXPN; QUOTETOG ~ FCLASS=SYMV; %A11085630
IF B THEN EMITO(INX) ELSE %A11085635
IF T ! 0 THEN BEGIN EMITL(T); EMITO(INX) END; B~FALSE END %A11085640
ELSE GO LRX END ELSE BEGIN LRX: REXP; %A11085650
IF RECTYPE = 0 THEN BEGIN ERR(612); GO EXIT END; %A11085700
T3 ~ GNATR(WTYPE ~ RECTYPE); %A11085800
IF CHECKTYPE(EL.[35:13],RECTYPE) THEN BEGIN %A11085900
FLAG(636); ERRORTOG ~ TRUE END; %A11086000
END; %A11086050
IF ELCLASS ! RTPAREN THEN BEGIN %A11086100
ERR(104); GO EXIT END; %A11086200
STEPIT; END; %A11086300
IF NOT SYMTF THEN BEGIN %A11086350
T3 ~ TAKE(T3).ADDRESS; %A11086400
CR ~ REAL(ELCLASS=ASSIGNOP OR BOOLEAN(PR)).[47:1]; %A11086500
END; %A11086550
T2 ~ T1.[35:13]; PART ~ (T1~T1.[22:13])!0; %A11086600
IF FCLASS = STRINGV THEN BEGIN %A11086700
SLT ~ SPT ~ FALSE; SL ~ T2; %A11086800
IF SYMTF THEN BEGIN SYMSTK.[46:1] ~ TRUE; %A11086810
GETCONTENTS(0,TRUE); %A11086815
IF SL + (SP~T1) > 8 THEN FLAG(669) END ELSE %A11086820
BEGIN SP ~ T | 8 + T1; %A11086830
FIXRECORD(T3,CR); %A11086900
IF BOOLEAN(PR) THEN BEGIN QUOTETOG ~ TRUE; %A11087000
WTYPE ~ 4; %A11087100
ELCLASS~ ASSIGNOP; SYMSEC~ TRUE; STRINGSEC(2); %A11087200
QUOTETOG ~ FALSE END; %A11087300
END; %A11087400
GO EXIT END; %A11087500
% %A11087600
IF ELCLASS = ASSIGNOP OR BOOLEAN (PR) THEN BEGIN %A11087700
IF SYMTF THEN GETCONTENTS(0,TRUE); %A11087750
QUOTETOG ~ FCLASS = SYMV; STEPIT; %A11087800
IF FCLASS > INTV THEN RECOM(FCLASS) ELSE %A11087900
IF FCLASS = SYMV THEN SEXPN ELSE %A11088000
IF FCLASS = BOOV THEN BEXP ELSE AEXP; %A11088100
IF FROM THEN QUOTETOG ~ FALSE; %A11088200
IF PART OR B THEN EMITPAIR(TEMP1,STD) ELSE EMITO(XCH); %A11088300
IF NOT SYMTF THEN BEGIN %A11088350
FIXRECORD(T3,CR); %A11088400
IF B THEN EMITO(XCH) ELSE EMITL(T); EMITO(CDC); %A11088500
END; %A11088550
IF PART THEN BEGIN EMITO(DUP); EMITO(LOD); EMITV(TEMP1); %A11088600
EMITD(48-T2,T1,T2); EMITO(XCH); EMITO(STD); %A11088700
IF NOT FROM THEN EMITV(TEMP1) END ELSE %A11088800
BEGIN IF B THEN BEGIN EMITV(TEMP1); EMITO(XCH) END; %A11088900
EMITO(IF FROM THEN STD ELSE SND) END END ELSE %A11089000
IF FROM THEN ERR(685) ELSE% %A11089100
BEGIN IF SYMTF THEN GETCONTENTS(0,FALSE) ELSE %A11089150
BEGIN FIXRECORD(T3,CR); %A11089200
IF B THEN EMITO(XCH) ELSE EMITL(T); %A11089300
EMITO(COC); END; IF PART THEN EMITI(0,T1,T2); %A11089400
IF FCLASS > 29 THEN RECTYPE ~ FCLASS END; %A11089500
EXIT: IF FROM OR BOOLEAN(PR) THEN RECTYPE ~ 0; %A11089600
END OF FIELDC; %A11089700
% %A11089800
PROCEDURE FIXRECORD(R,A); VALUE R,A; REAL R,A; %A11089900
BEGIN REAL T,P; %A11090000
IF A = 2 THEN EMIT(0); EMITO(MKS); %A11090100
P ~ TAKE(GIT((T~RECARRAY[R]).[22:13])); %A11090200
IF A < 5 THEN BEGIN %A11090300
IF A = 2 THEN EMITN(P.[26:11]+1) ELSE EMIT(0); %A11090400
EMITN(P.[26:11]); END; %A11090500
EMITN(R~T.[11:11]); EMITN(R+1); EMITN(R+2); EMITL(P.[16:10]); %A11090600
EMITL(5); EMITN(TAKE(T.[22:13]).ADDRESS); %A11090700
EMITPAIR(P.[37:11],LOD); EMITL(A); EMITV(RECLINK); %A11090800
IF A = 4 THEN EMITO(DEL); END FIXRECORD; %A11090900
% %A11091000
PROCEDURE GENRECORD(R,B); VALUE R,B; REAL R; BOOLEAN B; %M11091100
BEGIN REAL A,S,T,P; %A11091200
IF B THEN WHILE R ~ R + 1 { RECORDLINK DO BEGIN %M11091300
EMITL(((A~ GNATR(R)).[6:5] - 1) | 2); EMITPAIR(A.[11:11],STD); %A11091400
S ~ A.[22:13]; %A11091500
IF T ~ TAKE(S~GIT(S)) > 0 THEN BEGIN %M11091600
EMITARRAY(T.[37:11],T.[2:5]|2,T.[16:10],FALSE);PUT(-T,S); %A11091700
BEGIN EMITL(T.[7:9]); EMITPAIR(T.[26:11]+1,STD) END END %A11092300
END ELSE WHILE R ~ R + 1 { RECORDLINK DO %A11092400
IF TAKE((S~(A~RECARRAY[R]).[22:13])+1).[2:2]!1 THEN BEGIN %A11092500
FIXRECORD(R,5); %A11092600
END;% %A11092700
END OF GENRECORD; %A11093400
% %A11093500
PROCEDURE RECVAR(FROM); VALUE FROM; BOOLEAN FROM; %A11093600
BEGIN REAL TALL,STR,ADR,TYPEV; %A11093700
BOOLEAN ARTOG; %A11093800
LABEL EXIT; %A11093900
ADR ~ (TALL ~ ELBAT[I]).ADDRESS; CHECKER(TALL); TYPEV ~ GETYPE(TALL);%A11094000
IF ARTOG ~ ELCLASS = RECARRAYID THEN BEGIN %A11094100
IF ARAY(TALL,0,FALSE) THEN GO EXIT END ELSE STEPIT; %A11094200
IF ELCLASS=ASSIGNOP THEN BEGIN %A11094300
STEPIT; RECOM(TYPEV); STR ~ IF FROM THEN STD ELSE SND; %A11094400
IF FROM THEN RECTYPE ~ 0; %A11094500
IF ARTOG THEN BEGIN EMITO(XCH); EMITO(STR) END ELSE %A11094600
IF TALL.[9:2]=2 THEN BEGIN EMITN(ADR); EMITO(STR) END ELSE %A11094700
EMITPAIR(ADR,STR) END ELSE %A11094800
IF FROM THEN ERR(202) ELSE BEGIN %A11094900
IF NOT ARTOG THEN EMITV(ADR); RECTYPE ~ TYPEV END; %A11095000
EXIT: END RECVAR; %A11095100
% %A11095200
PROCEDURE RECOM(R); VALUE R; REAL R; %A11095300
BEGIN REXP; IF R ! RECTYPE AND RECTYPE ! 0 THEN FLAG(613); %A11095400
ERRORTOG ~ TRUE END; %A11095500
% %A11095600
PROCEDURE REXP; %A11095700
BEGIN REAL T; %A11095800
LABEL EXIT; %A11095900
REAL R, JR; LABEL LR;% %A11096000
IF ELCLASS}RECTRNS AND ELCLASS{RECARRAYID AND ELCLASS!22 THEN %A11096100
IF (GT1 ~ ELCLASS-STRTRNS).[45:3]=3 THEN %A11096200
IF GT1 } 24 THEN RECVAR(FALSE) ELSE% %A11096300
IF GT1 = 19 THEN PROCSTMT(FALSE) ELSE% %A11096400
ERR(612) ELSE ERR(612) ELSE% %A11096500
IF ELCLASS=NILV THEN BEGIN RECTYPE ~ 0; STEPIT; %A11097000
EMITL(0); END ELSE %A11097100
IF ELCLASS = DECLARATORS AND % %A11097200
T ~ (JR ~ ELBAT[I]).ADDRESS > FIELDV THEN% %A11097300
IF STEPI = LFTBRKET THEN BEGIN I ~ I - 1 ; BANA;% %A11097350
LR: RECTYPE ~ T ; GO EXIT END ELSE% %A11097400
BEGIN FIXRECORD (T,2); %A11097450
IF ELCLASS ! LEFTPAREN THEN GO LR;% %A11097460
BEGIN REAL J,A,B,K,PR,S; %A11097500
LABEL EXIT;% %A11097600
PR ~ 1 & T [26:42:6];% %A11097700
B ~ TAKE (J ~ GIT (JR)).[40:8];% %A11097800
FOR A ~ 1 STEP 1 UNTIL B DO BEGIN %A11097900
QUOTETOG ~ K ~(R~TAKE((S~TAKE(J+A)).[35:13])&S[35:35:13]).ADDRESS %A11098000
= SYMV OR K = STRINGV; %A11098100
IF K ~ TABLE(I+1) = FACTOP THEN %A11098200
% %A11098300
% %A11098400
BEGIN STEPIT; STEPIT END ELSE %A11098500
IF K = LFTBRKET THEN BEGIN K ~ -1; %A11098600
STEPIT; %A11098700
DO IF TABLE(I+1)=FACTOP THEN BEGIN STEPIT; STEPIT; K~K+1 END %A11098800
ELSE FIELDC(R,PR&(K~K+1)[32:41:7],TRUE) UNTIL ELCLASS!COMMA; %A11098900
IF ELCLASS=RTBRKET THEN STEPIT ELSE %A11099000
BEGIN ERR(614); GO EXIT END END ELSE %A11099100
FIELDC(R,PR,TRUE); %A11099200
IF A=B THEN %A11099300
IF ELCLASS= RTPAREN THEN STEPIT ELSE %A11099400
BEGIN ERR(104); GO EXIT END ELSE %A11099500
IF ELCLASS ! COMMA THEN BEGIN %A11099600
ERR(606); GO EXIT END; %A11099700
QUOTETOG ~ FALSE; END; %A11099800
RECTYPE ~ T; %A11099900
EXIT: %A11100000
END END ELSE% %A11100100
IF ELCLASS = FIELDID AND T > FIELDV THEN% %A11100200
FIELDC(JR,0,FALSE) ELSE ERR(612);% %A11100300
EXIT: END REXP; %A11101300
% THE FOLLOWING FOR SYMBOL EXPRESSIONS %A11101400
% %A11101500
PROCEDURE CONSIT; %A11101600
BEGIN LABEL EXIT; BOOLEAN BV; %A11101700
REAL P,R,S,T; LABEL L; %A11101800
IF STEPI = LFTBRKET THEN BEGIN BV ~ TRUE; %A11101810
DO BEGIN %A11101820
IF STEPI ! FIELDID THEN BEGIN L: %A11101830
ERR(682);% %A11101900
GO EXIT END; %A11101910
IF T ~ TAKE(GIT(S~ELBAT[I])) < 0 THEN GO L; %A11101920
R ~ T.[22:13]; %A11101930
IF BV THEN BEGIN BV ~ FALSE; P ~ T.[8:7]; %A11102000
IF R ! 0 THEN EMIT(0); END ELSE %A11102010
IF R = 0 OR T.[8:7] ! P THEN GO L; %A11102020
IF STEPI ! COLON THEN BEGIN ERR(681); GO EXIT END;% %A11102030
QUOTETOG ~ S ~ S.ADDRESS = SYMV; STEPIT; %A11102100
IF S > INTV THEN RECOM(S) ELSE %A11102110
IF S = SYMV THEN SEXPN ELSE %A11102120
IF S = BOOV THEN BEXP ELSE AEXP; RECTYPE ~ 0; %A11102130
IF R ! 0 THEN EMITD(48 - (T~T.[35:13]),R,T); %A11102200
END UNTIL ELCLASS ! COMMA; %A11102210
IF ELCLASS=RTBRKET THEN STEPIT ELSE ERR(607); %A11102220
QUOTETOG ~ TRUE; GENSYMLINK; GO EXIT END ELSE %A11102230
IF ELCLASS ! LEFTPAREN THEN BEGIN EMIT(0); %A11102300
GENSYMLINK; GO EXIT END; %A11102310
STEPIT; %A11102320
BEGIN SEXPN; %A11102400
IF RECLAIMTOG THEN BEGIN EMITO(SSP); MARKSYMNCR(1) END END; %A11102500
IF NOTCOMMA THEN GO EXIT; %A11102600
EMIT(0); %A11102700
SEXPN; EMITO(CTC); %A11102800
MARKSYMNCR(1); %A11102900
EMITO(XCH); %A11103000
IF ELCLASS = RTPAREN THEN STEPIT ELSE BEGIN ERR(104); GO %A11103100
EXIT END; %A11103200
EMITO(CTF); %A11103500
GENSYMLINK; MARKSYMDCR(-2+REAL(BV)); %A11103600
EXIT: %A11103700
END OF CONSIT; %A11103800
% %A11103900
PROCEDURE GENLIST; %A11104000
BEGIN REAL DC,T; %A11104100
LABEL EXIT; %A11104200
REAL ARRAY DCT[0:15]; LABEL LR; %A11104300
IF STEPI! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11104400
LR: QUOTETOG~ TRUE; STEPIT; T ~ SEXP; %A11104500
% %A11104600
IF RECLAIMTOG THEN BEGIN %A11104700
IF T>2 THEN SDNORM(T) ELSE EMITI(0,33-15|T,15); %A11104800
MARKSYMNCR(1) END ELSE DCT[DC]~ SNORM(T); %A11104900
DC ~ DC + 1; %A11105000
IF ELCLASS = COMMA THEN GO LR; %A11105100
IF ELCLASS ! RTPAREN THEN BEGIN ERR(104); GO EXIT END ELSE STEPIT; %A11105200
EMIT(0); %A11105300
EMITO(XCH); %A11105400
EMITD(33-(IF RECLAIMTOG THEN 0 ELSE DCT[DC-1])|15,18,15); %A11105500
GENSYMLINK; T ~ DC; %A11105600
WHILE DC ~ DC -1 ! 0 DO BEGIN %A11105700
MARKSYMNCR(0); EMITO(XCH); %A11105800
EMITD(33-(IF RECLAIMTOG THEN 0 ELSE DCT[DC-1])|15,18,15); %A11105900
GENSYMLINK END; %A11106000
MARKSYMDCR(-T); %A11106100
EXIT: %A11106200
END OF GENLIST; %A11106300
% %A11106400
REAL PROCEDURE GENQUOTE(BV); VALUE BV; BOOLEAN BV; %A11106500
BEGIN %A11106600
BOOLEAN STREAM PROCEDURE COMP(LNK,SKP,AC,I); VALUE LNK,SKP,I; %A11106700
BEGIN SI ~ LOC LNK; SI ~ SI + 1; DI ~ AC; DI ~ DI + 3; %A11106800
DI ~ DI + SKP; %A11106900
IF I SC ! DC THEN TALLY ~ 1; COMP ~ TALLY; %A11107000
END OF COMP; %A11107100
STREAM PROCEDURE TRC(BV,ACN,SKP,ACCUM,PTR,LNK); %A11107200
VALUE BV,ACN,SKP,PTR; %A11107300
BEGIN DI ~ LNK; SI ~ LOC ACN; SI ~ SI + 7; DS ~ CHR; %A11107400
SI ~ ACCUM; SI ~ SI + 3; SI ~ SI + SKP; %A11107500
DS ~ 4 CHR; %A11107600
BV(SI ~ LOC PTR; SI ~ SI + 5); %A11107700
DS ~ 3 CHR END; %A11107800
PROCEDURE RPLACD(A,B); VALUE A,B; REAL A,B; %A11107900
LNK[A.[33:6],A.[39:9]].[33:15] ~ B; %A11108000
REAL PROCEDURE CONSF(A); VALUE A; REAL A; %A11108100
BEGIN NEWLINK ~ 0 & A [18:33:15]; CONSF ~ LNKNDX END; %A11108200
REAL PROCEDURE MKATOM(BV); VALUE BV; BOOLEAN BV; FORWARD; %A11108300
REAL PROCEDURE GENSYMLIST; %A11108400
IF ELCLASS = QUOTEOP THEN FLAG(615) ELSE %A11108500
BEGIN REAL X; LABEL EXIT; %A11108600
IF ELCLASS = RTPAREN THEN BEGIN STEPIT; GO EXIT END; %A11108700
GENSYMLIST ~ X ~ CONSF(MKATOM(TRUE)); %A11108800
WHILE ELCLASS ! RTPAREN DO BEGIN %A11108900
IF ELCLASS = QUOTEOP THEN BEGIN FLAG(615); GO EXIT END; %A11109000
IF ELCLASS = DOTOP THEN BEGIN STEPIT; %A11109100
RPLACD(X,MKATOM(TRUE)); %A11109200
IF ELCLASS ! RTPAREN THEN FLAG(104) ELSE STEPIT; %A11109300
GO EXIT END; %A11109400
IF ELCLASS = COMMA THEN STEPIT; %A11109500
RPLACD(X,X~CONSF(MKATOM(TRUE))); END; %A11109600
STEPIT; %A11109700
EXIT: END; %A11109800
REAL PROCEDURE MKATOM(BV); VALUE BV; BOOLEAN BV; %A11109900
BEGIN INTEGER N,J; REAL R; %A11110000
LABEL LS,EXIT; %A11110100
REAL P,K,S,B; LABEL L1,L2,L3; %A11110200
IF ELCLASS = LITNO OR ELCLASS = NONLITNO THEN %A11110300
BEGIN MKATOM ~ MKNUM(C); GO LS END; %A11110400
IF ELCLASS = ADOP THEN BEGIN %A11110500
IF EXAMIN(NCR) ! " " THEN BEGIN J ~ ACCUM[1].[18:6]; %A11110600
IF STEPI = LITNO OR ELCLASS = NONLITNO THEN BEGIN %A11110700
MKATOM ~ MKNUM(IF J = "-" THEN -C ELSE C); GO LS %A11110800
END; %A11110900
MKATOM ~ J; GO EXIT END END; %A11111000
IF ELCLASS = ALFATRNS THEN BEGIN MKATOM ~ TAKE(GIT(ELBAT[I])); %A11111100
GO TO LS END; %A11111200
IF N ~ (R ~ ACCUM[1]).[12:6] = 1 THEN BEGIN %A11111300
R ~ R.[18:6]; %A11111400
IF BV THEN %A11111500
IF R = "(" THEN BEGIN STEPIT; MKATOM ~ GENSYMLIST; %A11111600
GO EXIT END ELSE %A11111700
IF R = ")" OR R = "." OR R = "," THEN BEGIN FLAG(615); %A11111800
GO EXIT END; %A11111900
MKATOM ~ R END ELSE %A11112000
BEGIN %A11112100
K ~ SYMSTACK[R MOD 125]; %A11112200
L1: IF P ~ K { 1 THEN GO TO L3; %A11112300
S ~ LNK[(K~LNK[K.[33:6],K.[39:9]]).[18:6],K.[24:9]]; %A11112400
K ~ K.[3:15]; %A11112500
IF S.[1:5] ! N THEN GO L1; %A11112600
J ~ 0; %A11112700
L2: IF B ~ N-J > 7 THEN B ~ 4; %A11112800
IF COMP(S,J,ACCUM[1],B) THEN GO L1; %A11112900
IF J ~ J+B = N THEN BEGIN MKATOM ~ P; GO LS END; %A11113000
S ~ LNK[S.[33:6],S.[39:9]]; GO L2; %A11113100
L3: IF N {7 THEN J ~ N ELSE J ~ (N MOD 4) + 4; %A11113200
TRC(0,J,N-J,ACCUM[1],0,NEWLINK); %A11113300
WHILE J ! N DO TRC(1,J~J+4,N-J,ACCUM[1],LNKNDX,NEWLINK); %A11113400
NEWLINK ~ 0 & (LNKNDX-1)[18:33:15] %A11113500
& (IF R ~ SYMSTACK[J ~ R MOD 125] = 0 THEN 1 ELSE R) %A11113600
[3:33:15] & 2 [1:46:2]; %A11113700
SYMSTACK[J] ~ MKATOM ~ LNKNDX; END; %A11113800
LS: STEPIT; %A11113900
EXIT: END OF MKATOM; %A11114000
REAL PROCEDURE SCANB; %A11114100
BEGIN LABEL L1; %A11114200
IF STEPI=LITNO OR ELCLASS=NONLITNO THEN BEGIN %A11114300
NEWLINK ~ 0&C[4:19:29]&1[1:46:2]; SCANB ~ LNKNDX; %A11114400
IF STEPI=RTBRKET THEN STEPIT ELSE BEGIN %A11114500
L1: QUOTETOG ~ SYMQUOTE ~ FALSE; ERR(640); END END ELSE GO L1 %A11114600
END OF SCANB; %A11114700
PROCEDURE PROPLIST(X); VALUE X; REAL X; %A11114800
BEGIN REAL R,S; LABEL EXIT; %A11114900
STOPDEFINE ~ SYMQUOTE ~ FALSE; STEPIT; SYMQUOTE ~ TRUE; %A11114950
IF X > 63 OR X < 10 THEN %A11115000
IF LNK[X.[33:6],X.[39:9]].[1:2] ! 2 THEN BEGIN FLAG(641); %A11115100
ERRORTOG ~ TRUE END; %A11115200
IF ELCLASS=LFTBRKET THEN RPLACD(X,SCANB) ELSE %A11115300
IF ELCLASS=QUOTEOP THEN RPLACD(X,GENQUOTE(TRUE)) ELSE %A11115400
IF ELCLASS = LITNO THEN BEGIN RPLACD(X,ELBAT[I].ADDRESS); %A11115500
STEPIT END ELSE %A11115600
IF ELCLASS=LEFTPAREN THEN BEGIN DO %A11115700
IF STEPI= LFTBRKET THEN RPLACD(X,X~SCANB) ELSE %A11115800
BEGIN R~MKATOM(FALSE); %A11115900
IF ELCLASS!COLON THEN BEGIN QUOTETOG~SYMQUOTE~FALSE; %A11116000
ERR(642); GO EXIT END; STEPIT; S~ MKATOM(TRUE); %A11116100
NEWLINK ~ 0 & R[3:33:15]&S[18:33:15]; %A11116200
RPLACD(X,X~ LNKNDX) END UNTIL ELCLASS! COMMA; %A11116300
IF ELCLASS=RTPAREN THEN STEPIT ELSE BEGIN %A11116400
QUOTETOG ~ SYMQUOTE ~ FALSE; ERR(104) END END ELSE %A11116500
BEGIN QUOTETOG ~ SYMQUOTE ~ FALSE; ERR(639) END; %A11116600
EXIT: END OF PROPLIST; %A11116700
REAL S; %A11116800
SYMQUOTE ~ TRUE; %A11116900
IF STEPI = LEFTPAREN THEN %A11117000
IF STEPI = QUOTEOP THEN GENQUOTE ~ S ~ "(" ELSE %A11117100
BEGIN GENQUOTE ~ S ~ GENSYMLIST; %A11117200
IF ELCLASS = RTPAREN THEN BEGIN %A11117300
DO UNTIL STEPI ! RTPAREN; %A11117400
FLAG(616); END END ELSE %A11117500
GENQUOTE ~ S ~ MKATOM(FALSE); %A11117600
IF ELCLASS = QUOTEOP THEN BEGIN %A11117700
SYMQUOTE ~ FALSE; %A11117750
IF STEPI=COLON AND BV THEN PROPLIST(S); SYMQUOTE ~ FALSE %A11117800
END ELSE BEGIN SYMQUOTE ~ FALSE; ERR(637) END; %A11117900
END OF GENQUOTE; %A11118000
% %A11118100
REAL PROCEDURE MKCHAIN(FROM); VALUE FROM; BOOLEAN FROM; %A11118200
BEGIN INTEGER J,K,R,S; %A11118300
BOOLEAN V; %A11118400
LABEL L; %A11118500
J ~ ELBAT[I].[9:26]; %A11118600
DO BEGIN K ~ J.[46:2]; J ~ J DIV 4 END UNTIL K!0; %A11118700
K ~ J.[46:2]; J ~ J DIV 4; QUOTETOG ~ TRUE; S ~ J.[46:2]; %A11118800
IF SYMSEC THEN BEGIN SYMSEC ~ FALSE; R ~ 0 END ELSE R ~ PORV; %A11118900
V ~ ELCLASS = ASSIGNOP; %A11119000
IF FROM THEN QUOTETOG ~ TRUE; %A11119100
L: GETCONTENTS(R, S=3 AND V); R ~ K; %A11119200
IF K ~ S ! 3 THEN BEGIN %A11119300
J ~ J DIV 4; S ~ J.[46:2]; GO TO L END; %A11119400
IF V THEN BEGIN STEPIT; %A11119500
K ~ SNORM(SEXP); %A11119600
EMITPAIR(TEMP1,STD); EMITO(DUP); EMITO(LOD); EMITV(TEMP1); %A11119700
EMITD(33-K|15,33-R|15,15); EMITO(XCH); %A11119800
EMITO(IF FROM THEN STD ELSE SND); END ELSE %A11119900
IF FROM THEN ERR(617); %A11120000
MKCHAIN ~ R; QUOTETOG ~ NOT FROM; %A11120100
END OF MKCHAIN; %A11120200
% %A11120300
REAL PROCEDURE MKNUM(R); VALUE R; REAL R; %A11120400
BEGIN INTEGER I; LABEL L; %A11120500
IF ABS(R) < 10 THEN %A11120600
IF I ~ R } 0 AND I = R THEN BEGIN MKNUM ~ I; GO L END; %A11120700
NEWLINK ~ R; %A11120800
NEWLINK ~ ((MKNUM ~ LNKNDX)-1)& 3 [1:46:2]; %A11120900
L: END MKNUM; %A11121000
% %A11121100
PROCEDURE PANSYM(MARK,TWOARG); VALUE MARK,TWOARG; BOOLEAN %A11121200
MARK,TWOARG; %A11121300
BEGIN LABEL EXIT; %A11121400
IF STEPI = LEFTPAREN THEN BEGIN QUOTETOG~TRUE; STEPIT END ELSE %A11121500
BEGIN ERR(105); GO EXIT END; %A11121600
SEXPN; IF MARK THEN MARKSYMNCR(1); %A11121700
IF TWOARG THEN BEGIN QUOTETOG ~ TRUE; %A11121800
IF ELCLASS = COMMA THEN STEPIT ELSE %A11121900
BEGIN ERR(606); GO EXIT END; %A11122000
SEXPN; IF MARK THEN MARKSYMNCR(1) END; %A11122100
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104); %A11122200
EXIT: END OF PANSYM; %A11122300
% %A11122400
REAL PROCEDURE PORV; %A11122500
IF STEPI!LEFTPAREN THEN SYMVAR(BOOLEAN(2)) ELSE %A11122600
BEGIN QUOTETOG~TRUE; STEPIT; PORV~SNORM(SEXP); %A11122700
IF ELCLASS!RTPAREN THEN ERR(104) ELSE STEPIT END; %A11122800
% %A11122900
REAL PROCEDURE RSEXP; RSEXP ~ %A11123000
IF ELCLASS = IFV OR ELCLASS = CASEV THEN SEXP ELSE %A11123100
SYMPRIM(TRUE); %A11123200
% %A11123300
PROCEDURE SDNORM(R); VALUE R; REAL R; %A11123400
IF R ~ SNORM(R) ! 0 %A11123500
THEN EMITI(0,33 - 15|R,15); %A11123600
% %A11123700
REAL PROCEDURE SEXP; %A11123800
BEGIN REAL T,DC,TL; ARRAY DCT[0:15]; %A11123900
LABEL EXIT,LR; %A11124000
LABEL LD; %A11124050
T~0; QUOTETOG ~ TRUE; %A11124100
IF SYMSEC THEN SYMSEC ~ FALSE ELSE %A11124200
IF ELCLASS = IFV THEN IFXP(5) ELSE %A11124300
IF ELCLASS = CASEV THEN CASESTMT(11) ELSE %A11124400
LR: T ~ SYMPRIM(FALSE); %A11124500
IF ELCLASS > DOTOP OR ELCLASS = AMPERSAND THEN BEGIN %A11124600
IF T = 5 THEN BEGIN ERR(618); GO EXIT END; %A11124700
IF T = 4 THEN BEGIN T ~ 3; EMITNUM(SAVEQ); END ELSE %A11124800
IF T < 3 THEN BEGIN SDNORM(T); T ~ 3; %A11124900
EMITO(MKS); EMITV(ATN); END; %A11125000
QUOTETOG~FALSE; SIMPARITH; QUOTETOG ~ TRUE; END; %A11125100
IF ELCLASS = DOTOP THEN BEGIN %A11125200
LD: %A11125250
IF RECLAIMTOG THEN BEGIN %A11125300
IF T > 2 THEN SDNORM(T) ELSE %A11125400
EMITI(0,33-15|T,15);MARKSYMNCR(1) END ELSE %A11125500
DCT[DC] ~ SNORM(T); %A11125600
DC ~ DC + 1; QUOTETOG ~ TRUE; STEPIT; GO LR END; %A11125700
IF ELCLASS = PERIOD THEN BEGIN QUOTETOG ~ TRUE; %A11125710
IF TABLE(I+1) ! LFTBRKET THEN GO LD END; %A11125720
IF DC ! 0 THEN BEGIN %A11125800
IF T > 2 THEN SDNORM(T) ELSE EMITI(0,33-15|T,15); %A11125900
MARKSYMNCR(1); EMITO(XCH); %A11126000
EMITD(33-(IF RECLAIMTOG THEN 0 ELSE DCT[DC-1])|15,18,15); %A11126100
GENSYMLINK; T ~ DC; %A11126200
WHILE DC ~ DC - 1 ! 0 DO BEGIN %A11126300
MARKSYMNCR(0); EMITO(XCH); %A11126400
EMITD(33- (IF RECLAIMTOG THEN 0 ELSE DCT[DC-1])|15,18,15); %A11126500
GENSYMLINK END; %A11126600
MARKSYMDCR(-(T+1)); T ~ 0; END; %A11126700
IF T = 5 THEN BEGIN T ~ 0; EMITNUM(SAVEQ) END; %A11126800
SEXP ~ T; %A11126900
EXIT: END OF SEXP; %A11127000
% %A11127100
REAL PROCEDURE SNORM(R); VALUE R; REAL R; %A11127200
IF R <3 THEN SNORM ~ R ELSE %A11127300
IF R = 3 THEN BEGIN %A11127400
EMITO(MKS); EMITV(NTA); %A11127500
END ELSE %A11127600
IF R=4 THEN EMITNUM(MKNUM(SAVEQ)) ELSE %A11127700
EMITNUM(SAVEQ); %A11127800
% %A11127900
PROCEDURE SYMINT; %A11128000
BEGIN %B11128100
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11128200
CASE ELBAT[I].INCR OF BEGIN %A11128300
CONSIT; %A11128400
GENLIST; %A11128500
BEGIN EMITO(MKS); PANSYM(TRUE,TRUE); EMITV(APPEND ); %A11128600
MARKSYMDCR(-2) END; %A11128700
BEGIN EMITO(MKS); PANSYM(FALSE,TRUE); EMITV(NCONC ); END; %A11128800
BEGIN EMITO(MKS); EMITV(GENSYM); STEPIT END; %A11128900
BEGIN EMITO(MKS); PANSYM(FALSE,FALSE); EMITV(RANDOM) END; %A11129000
BEGIN IF STEPI = LEFTPAREN THEN BEGIN QUOTETOG ~ TRUE; %A11129100
STEPIT; STRINGSEC(4); QUOTETOG ~ FALSE; %A11129200
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104) END; %A11129300
EMITO(MKS); EMITV(ATCON); EMITPAIR(3,BFC); %A11129400
EMITV(INSYM); EMITPAIR(3,BFW); %A11129500
EMITO(MKS); %A11129600
IF ELCLASS = FACTOP THEN BEGIN EMIT(0); STEPIT END ELSE %A11129700
EMITL(1); EMITV(MKATM) END; %A11129800
PROPER(0); %A11129900
BEGIN EMITO(MKS); EMITV(READ1); STEPIT END; %A11130000
BEGIN FIXCLASS(SYMID,INSYM,FALSE); %A11130100
SYMVAR(FALSE) END; %A11130200
BEGIN QUOTETOG ~ FALSE; %A11130300
IF STEPI =LEFTPAREN THEN BEGIN STEPIT;AEXP; QUOTETOG ~ TRUE; %A11130310
IF ELCLASS = COMMA THEN BEGIN STEPIT; SEXPN; EMITO(INX); END; %A11130400
RTPARN END ELSE ERR(105) END; %A11130410
BEGIN QUOTETOG~FALSE; PANA ; QUOTETOG~TRUE; EMITV(SYMSTACKA) END; %A11130500
END; %B11130600
END; % END OF SYMINT %A11130700
% %A11130800
REAL PROCEDURE SYMPRIM(BV); VALUE BV; BOOLEAN BV; %A11130900
BEGIN LABEL EXIT, L57,L58,L59,L60,L61,L62,L63,L64,L65; %A11131000
LABEL LAE; %A11131050
SWITCH SW ~ L57,L58,L59,L60,L61,L62,L63,L64,L65; %A11131100
INTEGER T,R; %A11131200
IF ELCLASS > STRTRNS AND ELCLASS < RECARRAYID THEN BEGIN %A11131300
IF ELCLASS = ALFATRNS THEN BEGIN SAVEQ ~ TAKE(GIT(ELBAT[I])); %A11131400
STEPIT; SYMPRIM ~ 5; GO EXIT END; %A11131500
IF R ~(T~ELCLASS-STRTRNS).[45:3] = 2 THEN BEGIN %A11131600
CASE T DIV 8 OF BEGIN %A11131700
SYMINT; %A11131800
STRMPROCSTMT; %A11131900
PROCSTMT(FALSE); %A11132000
SYMVAR(FALSE); %A11132100
SYMVAR(FALSE); END; %A11132200
GO EXIT END ELSE %A11132300
IF R = 0 THEN BEGIN STRINGSEC(4); EMITO(MKS); EMITV(ATCON); %A11132400
EMITPAIR(3,BFC); EMITV(INSYM); EMITPAIR(3,BFW); %A11132500
EMITO(MKS); EMITL(1); EMITV(MKATM); %A11132600
GO EXIT END END ELSE %A11132700
IF ELCLASS = FIELDID THEN BEGIN %A11132800
IF ELBAT[I].ADDRESS = SYMV THEN BEGIN %A11132900
FIELDC(ELBAT[I],0,FALSE); GO EXIT END END ELSE %A11133000
IF ELCLASS > TRUTHV AND ELCLASS < WRITEV THEN %A11133100
GO TO SW[ELCLASS-TRUTHV]; %A11133200
IF ELCLASS=SPACEV THEN BEGIN SAVEQ ~" "; SYMPRIM ~5; %A11133300
STEPIT; GO EXIT END ELSE %A11133400
IF ELCLASS = STRTRNS THEN IF ELBAT[I].INCR=0 THEN %A11133500
BEGIN SAVEQ~12; SYMPRIM~5; STEPIT; GO EXIT END; %A11133600
IF BV THEN BEGIN ERR(618); GO TO EXIT END; %A11133700
LAE: %A11133750
QUOTETOG ~ FALSE; AEXP; QUOTETOG ~ TRUE; %A11133800
SYMPRIM ~ 3; GO EXIT; %A11133900
L57: L58: L59: SAVEQ ~ C; SYMPRIM ~ 4; STEPIT; GO EXIT; %A11134000
L60: STEPIT; %A11134100
SYMPRIM ~ IF BV THEN RSEXP ELSE SEXP; %A11134200
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104); GO EXIT; %A11134300
L61: SAVEQ ~ 0; SYMPRIM ~ 4; STEPIT; GO EXIT; %A11134400
L62: SAVEQ ~ GENQUOTE(FALSE); SYMPRIM ~ 5; GO EXIT; %A11134500
L63: SYMPRIM ~ MKCHAIN(FALSE); GO EXIT; %A11134600
L64: IF T ~ ELBAT[I].ADDRESS = LISTV THEN GENLIST %A11134700
ELSE IF T = SYMV THEN BEGIN %A11134800
IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11134900
STEPIT; BEXP; IF ELCLASS = RTPAREN THEN STEPIT ELSE %A11135000
BEGIN ERR(104); GO EXIT END; EMITI(0,47,1) END ELSE %A11135100
GO LAE; GO EXIT; %A11135200
L65: EMITO(MKS); EMITV(READER); STEPIT; %A11135300
EXIT: END OF SYMPRIM; %A11135400
% %A11135500
PROCEDURE SYMVAR(FROM); VALUE FROM; BOOLEAN FROM; %A11135600
BEGIN REAL TALL,STR,ADR; %A11135700
BOOLEAN ARTOG; LABEL EXIT; %A11135800
ADR ~ (TALL ~ ELBAT[I]).ADDRESS; CHECKER(TALL); %A11135900
IF ARTOG ~ ELCLASS= SYMARRAYID THEN BEGIN %A11136000
IF FROM THEN SMT ~ TALL < 0 ELSE TALL ~ ABS(TALL); %A11136100
IF ARAY(TALL,0,FALSE) THEN BEGIN ERR(205); GO EXIT END %A11136200
END ELSE STEPIT; %A11136300
IF ELCLASS=ASSIGNOP THEN %A11136400
IF FROM.[46:1] THEN %A11136500
IF ARTOG THEN BEGIN L~L-1; EMITO(COC) END %A11136600
ELSE EMITV(ADR) ELSE %A11136700
BEGIN %A11136800
QUOTETOG ~ TRUE; STEPIT; SEXPN; QUOTETOG ~ FALSE; %A11136900
STR ~ IF FROM THEN STD ELSE SND; %A11137000
IF TALL < 0 THEN EMITPAIR(JUNK,SND); %A11137100
IF ARTOG THEN BEGIN EMITO(XCH); EMITO(STR) END ELSE %A11137200
IF TALL.[9:2]=2 THEN BEGIN EMITN(ADR); EMITO(STR) %A11137300
END ELSE EMITPAIR(ADR,STR); %A11137400
IF TALL < 0 THEN SYMONITOR(NOT ARTOG,TALL, %A11137500
IF ARTOG THEN TAKE(GIT(TALL)) ELSE 0,0); END ELSE %A11137600
IF FROM THEN ERR(145) ELSE IF NOT ARTOG THEN %A11137700
EMITV(ADR);EXIT: QUOTETOG ~ NOT FROM; %A11137800
END OF SYMVAR; %A11137900
% THE FOLLOWING SECTION IS FOR STRING EXPRESSIONS %A11138000
PROCEDURE STRINGC(DSV,NLP); VALUE DSV,NLP; %A11138100
REAL DSV; BOOLEAN NLP; %A11138200
BEGIN REAL S; INTEGER R,T; BOOLEAN V; LABEL L1; %A11138300
LABEL EXIT; %A11138400
STRINGSEC(1); %A11138500
S ~ IF V ~ DSV > TRS THEN SFD ELSE SFS; %A11138600
ECR(STKC,IF V THEN RDA ELSE RSA); %A11138700
IF SPT THEN BEGIN %A11138800
ECR(STKC,CRF); EC(0,S); %A11138900
IF WTYPE = 1 THEN BEGIN %A11139000
IF SLT THEN EMITPAIR(ST1,STD); %A11139100
EMITO(DUP); %A11139200
EMITI(0,36,6); %A11139300
ECR(STKC,CRF); %A11139400
EC(3,BNS); %A11139500
EC(32,S); EC(32,S); EC(0,ENS); %A11139600
IF SLT THEN EMITV(ST1) END %A11139700
END ELSE %A11139800
RCH(FALSE,0,FALSE,0,SP,S); %A11139900
S ~ IF V THEN DSV.[42:6] ELSE TRS; %A11140000
IF V OR SPT OR DPT OR SLT OR DRT THEN BEGIN L1: %A11140100
IF SLT THEN BEGIN %A11140200
IF WTYPE ! 2 THEN BEGIN %A11140300
EMITO(DUP); EMITI(0,36,6); EMITO(XCH); %A11140400
STKC END; %A11140500
ECR(STKC,CRF); %A11140600
EC(0,S); %A11140700
IF V THEN EJ(JFC); %A11140800
IF WTYPE ! 2 THEN BEGIN ECR(STK-1,CRF); %A11140900
EC(3+4|REAL(V),BNS); %A11141000
EC(32,S); %A11141100
IF V THEN EC(4,JNC); %A11141200
EC(32,S); %A11141300
IF V THEN EC(2,JNC); %A11141400
EC(0,ENS); %A11141500
IF V THEN BEGIN EC(1,JFW); EJ(JFW) END; END; %A11141600
EMITO(DUP); END ELSE %A11141700
BEGIN % SLT FALSE %A11141800
IF R ~ SL.[42:6] ! 0 THEN BEGIN %A11141900
EC(R,S); IF V THEN EJ(JFC) END; %A11142000
IF R ~ SL.[36:6] ! 0 THEN BEGIN %A11142100
EC(R,BNS); EC(32,S); %A11142200
IF V THEN EC(4,JNC); %A11142300
EC(32,S); IF V THEN EC(2,JNC); %A11142400
EC(0,ENS); %A11142500
IF V THEN BEGIN EC(1,JFW); EJ(JFW) END %A11142600
END END; %A11142700
GO EXIT END; %A11142800
IF WTYPE } 3 AND NLP AND SL > 15 THEN %A11142900
IF DPT.[46:1] THEN %A11143000
IF R ~ (DP+DR).[45:3] = SP.[45:3] THEN BEGIN %A11143100
IF R ~ (8-R).[45:3] ! 0 THEN EC(R,TRS); %A11143200
IF R ~ (T~SL-R) DIV 8 ! 0 THEN %A11143300
RCH(FALSE,0,FALSE,0,R,TRW); %A11143400
IF T ~ T - R|8 ! 0 THEN EC(T,TRS); %A11143500
GO EXIT END; %A11143600
GO L1; %A11143700
EXIT: %A11143800
END OF STRINGC; %A11143900
% %A11144000
PROCEDURE STRINGPRIM(DSV,NLP); VALUE DSV,NLP; %A11144100
BOOLEAN NLP; REAL DSV; %A11144200
BEGIN LABEL L2,EXIT,L1; %A11144300
% %A11144400
PROCEDURE STRINGINT(V,DSV,NLP); VALUE V,DSV,NLP; %A11144500
BOOLEAN V,NLP; REAL DSV; %A11144600
BEGIN %A11144700
REAL STREAM PROCEDURE GITA(C,K); VALUE C,K; %A11144800
BEGIN DI ~ LOC GITA; DI ~ DI + 7; %A11144900
SI ~ LOC C; SI ~ SI + K; DS ~ CHR END; %A11145000
% %A11145100
PROCEDURE AMONG(BV); VALUE BV; BOOLEAN BV; %A11145200
BEGIN LABEL EXIT; %A11145300
REAL R,N,T,K; %A11145400
QUOTETOG~ FALSE; %A11145500
IF STEPI!STRNGCON THEN BEGIN %A11145600
ERR(700); GO EXIT END; %A11145700
R ~ C; N ~ COUNT; %A11145800
IF BV THEN STEPIT ELSE LITF(64); %A11145900
BV ~ QUOTETOG ~ TRUE; %A11146000
IF SLT THEN BEGIN %A11146100
ECR(STKC,CRF); %A11146200
T ~ LC ~ LC + 1 END ELSE %A11146300
IF SL ! 1 THEN EC(SL,BNS) ELSE BV ~ FALSE; %A11146400
K ~ 8 - N; %A11146500
WHILE K < 7 DO BEGIN %A11146600
EC(GITA(R,K),TNE); %A11146700
EC(2|(K-7),JFC); K ~ K+1 END; %A11146800
EC(R.[42:6],TEQ); %A11146900
IF BV THEN EC(3,JNC) ELSE EJ(JFC); %A11147000
EC(1,SFS); %A11147100
IF BV THEN BEGIN EC(0,ENS); %A11147200
EC(1,JFW); EJ(JFW); %A11147300
IF SLT THEN BEGIN R ~ LC; %A11147400
LC ~ T - 1; EC(R-T,BNS); LC ~ R END %A11147500
END; %A11147600
IF SLT THEN EMITO(DUP); %A11147700
EXIT: %A11147800
END OF AMONG; %A11147900
% %A11148000
PROCEDURE BITPRIM(BV,V,DSV); VALUE BV,V,DSV; %A11148100
BOOLEAN BV,V; REAL DSV; %A11148200
BEGIN LABEL EXIT; %A11148300
SP ~ 0; SPT ~ FALSE; %A11148400
IF BV THEN STEPIT ELSE %A11148500
IF STEPI ! LEFTPAREN THEN BEGIN %A11148600
SLT ~ FALSE; SL ~ 1 END ELSE %A11148700
BEGIN QUOTETOG ~ FALSE; STEPIT; %A11148800
IF LITP(SL) THEN BEGIN %A11148900
IF SL > 64 OR SL = 0 THEN BEGIN %A11149000
FLAG(701); ERRORTOG~TRUE; SL ~ 1 END ; %A11149100
SLT ~ FALSE END ELSE %A11149200
BEGIN AEXP; EMITO(SSP); EMITPAIR(JUNK,ISN); %A11149300
SLT ~ TRUE; END; %A11149400
IF ELCLASS = COMMA THEN BEGIN %A11149500
SPT ~ SLT; SP ~ SL; STEPIT; %A11149600
IF LITP(SL) THEN BEGIN SLT ~ FALSE; %A11149700
IF SL > 64 OR SL = 0 THEN BEGIN %A11149800
FLAG(701); ERRORTOG~ TRUE; SL~ 1 END; %A11149900
END ELSE %A11150000
BEGIN AEXP; EMITO(SSP); %A11150100
EMITPAIR(JUNK,IF SPT THEN ISD ELSE ISN); %A11150200
SLT ~ TRUE END END; %A11150300
QUOTETOG ~ TRUE; %A11150400
IF ELCLASS = RTPAREN THEN STEPIT ELSE BEGIN %A11150500
ERR(104); GO EXIT END; %A11150600
END; %A11150700
IF SPT THEN BEGIN EMITO(DUP); %A11150800
IF SLT THEN BEGIN EMITV(JUNK); EMITO(ADD); %A11150900
EMITV(JUNK); EMITO(XCH); %A11151000
END ELSE %A11151100
IF SL ! 0 THEN BEGIN %A11151200
EMITL(SL); EMITO(ADD); END %A11151300
END ELSE %A11151400
IF SLT THEN BEGIN EMITO(DUP); %A11151500
IF SP ! 0 THEN BEGIN EMITL(SP); EMITO(ADD) END ; %A11151600
END; %A11151700
IF SPT THEN BEGIN %A11151800
ECR(STKC,CRF); %A11151900
EC(0,IF DSV = TRS THEN BSD ELSE BSS); %A11152000
END ELSE %A11152100
IF SP ! 0 THEN %A11152200
EC(SP,IF DSV = TRS THEN BSD ELSE BSS); %A11152300
IF SLT THEN BEGIN %A11152400
ECR(STKC,CRF); %A11152500
IF DSV = TRS THEN EC(0,IF V THEN BIS ELSE BIR) ELSE %A11152600
BEGIN EC(6,BNS); %A11152700
EC(REAL(V),TIB); EC(3,JNC); %A11152800
EC(1,BSS); EC(0,ENS); %A11152900
EC(1,JFW); EJ(JFW); %A11153000
END END ELSE %A11153100
IF DSV = TRS THEN %A11153200
EC(SL,IF V THEN BIS ELSE BIR) ELSE %A11153300
BEGIN %A11153400
IF SL ! 1 THEN %A11153500
EC(SL,BNS); EC(REAL(V),TIB); %A11153600
IF SL = 1 THEN EJ(JFC) ELSE EC(3,JNC); %A11153700
EC(1,BSS); %A11153800
IF SL ! 1 THEN BEGIN EC(0,ENS); %A11153900
EC(1,JFW); EJ(JFW); END; %A11154000
END; %A11154100
IF DRT OR (SLT~ SLT OR SPT) THEN BEGIN %A11154200
IF NOT SLT THEN EMITL(SP+SL); %A11154300
IF DRT THEN BEGIN EMITV(DR); EMITO(ADD) END ELSE %A11154400
IF DR ! 0 THEN BEGIN EMITNUM(DR); EMITO(ADD) END; %A11154500
IF NOT DRT THEN DR ~ FORAD; DRT ~ TRUE; %A11154600
EMITPAIR(DR,ISD) END ELSE %A11154700
DR ~ DR + SP + SL; %A11154800
EXIT: %A11154900
END OF BITPRIM; %A11155000
% %A11155100
PROCEDURE BITXP(BV,V,DSV); VALUE BV,V,DSV; REAL DSV; %A11155200
BOOLEAN BV,V; %A11155300
BEGIN %A11155400
REAL DRO,R; BOOLEAN DRTO; LABEL EXIT; %A11155500
DRO~DR; DRTO~DRT; %A11155600
DRT ~ FALSE; DR ~ 0; %A11155700
BITPRIM(BV,V,DSV); %A11155800
WHILE ELCLASS = ADOP DO BEGIN %A11155900
SLT ~ FALSE; %A11156000
IF BV ~ STEPI = LITNO THEN BEGIN %A11156100
IF SL ~ ELBAT[I].ADDRESS > 64 OR SL = 0 THEN BEGIN %A11156200
FLAG(701); ERRORTOG ~ TRUE; SL ~ 1 END; %A11156300
STEPIT END; %A11156400
IF ELCLASS ! STRTRNS OR %A11156500
(R ~ ELBAT[I].INCR ! 5 AND R ! 6) THEN %A11156600
BEGIN ERR(702); GO EXIT END; %A11156700
BITPRIM(BV,R=5,DSV); %A11156800
END; %A11156900
IF SLT ~ DRT THEN %A11157000
BEGIN EMITV(DR); EMITL(5); EMITO(ADD); %A11157100
EMITL(6); EMITO(IDV); %A11157200
DCRFR END ELSE %A11157300
SL ~ (DR+5) DIV 6; %A11157400
DR ~ DRO; DRT ~ DRTO; %A11157500
EXIT: END IF BITXP; %A11157600
% %A11157700
REAL R,T; %A11157800
R ~ ELBAT[I].INCR; %A11157900
IF DSV = 1328 THEN BEGIN %A11158000
IF R < 5 THEN BEGIN %A11158100
NLP ~ TRUE; %A11158200
IF V THEN STEPIT ELSE LITF(64); %A11158300
IF SLT THEN BEGIN %A11158400
ECR(STKC,CRF); T ~ LC ~ LC + 1 END ELSE %A11158500
IF SL ! 1 THEN EC(SL,BNS) ELSE NLP ~ FALSE; %A11158600
CASE R OF BEGIN %A11158700
BEGIN %A11158800
EC(12,TEQ); IF NLP THEN EC(3,JNC) ELSE EJ(JFC) %A11158900
END; %A11159000
BEGIN %A11159100
EC("A",TAN); %A11159200
IF NLP THEN EC(3,JNC) ELSE EJ(JFC) %A11159300
END; %A11159400
BEGIN %A11159500
EC(0,TEG); %A11159600
IF NLP THEN EC(5,JNC) ELSE EJ(JFC); %A11159700
EC(9,TEL); %A11159800
IF NLP THEN EC(3,JNC) ELSE EJ(JFC); %A11159900
END; %A11160000
BEGIN %A11160100
EC("A",TNE); EC(8,JFC); %A11160200
EC("E",TNE); EC(6,JFC); %A11160300
EC("I",TNE); EC(4,JFC); %A11160400
EC("O",TNE); EC(2,JFC); %A11160500
EC("U",TEQ); %A11160600
IF NLP THEN EC(3,JNC) ELSE EJ(JFC) %A11160700
END; %A11160800
BEGIN %A11160900
EC("A",TAN); %A11161000
IF NLP THEN EC(5,JNC) ELSE EJ(JFC); %A11161100
EC(0,TLS); %A11161200
IF NLP THEN EC(3,JNC) ELSE EJ(JFC); %A11161300
END; %A11161400
END; %A11161500
EC(1,SFS); %A11161600
IF NLP THEN BEGIN %A11161700
EC(0,ENS); EC(1,JFW); EJ(JFW); %A11161800
IF SLT THEN BEGIN R ~ LC; %A11161900
LC ~ T - 1; %A11162000
EC(T ~ R - T,BNS); LC ~ R END; %A11162100
END; %A11162200
IF SLT THEN EMITO(DUP); END ELSE % END OF R<5 PART %A11162300
IF R > 7 THEN BEGIN %A11162400
IF V THEN FLAG(703); %A11162500
STRINGC(DSV,NLP) END ELSE %A11162600
IF R = 7 THEN AMONG(V) ELSE %A11162700
BITXP(V,R=5,1328) %A11162800
END ELSE % END OF = PART %A11162900
IF DSV ! TRS THEN BEGIN %A11163000
IF V OR R < 8 THEN ERR(703) ELSE %A11163100
STRINGC(DSV,NLP) END ELSE %A11163200
BEGIN % TRS PART %A11163300
IF R = 0 THEN BEGIN %A11163400
IF V THEN STEPIT ELSE LITF(64); %A11163500
IF SLT THEN BEGIN %A11163600
EC(STKC,CRF); EMITO(DUP); %A11163700
EC(3,BNS) END ELSE %A11163800
IF SL ! 1 THEN EC(SL,BNS); %A11163900
EC(1,TRP); EMT(12); %A11164000
IF SLT OR SL ! 1 THEN EC(0,ENS); %A11164100
END ELSE %A11164200
IF R = 5 OR R = 6 THEN BITXP(V,R=5,TRS) ELSE %A11164300
IF R < 8 OR V THEN ERR(703) ELSE %A11164400
STRINGC(TRS,NLP); %A11164500
END; %A11164600
END OF STRINGINT; %A11164700
% %A11164800
BOOLEAN PROCEDURE FACTER(BV,DSV,NLP,FACT,P); %A11164900
VALUE BV,DSV,NLP,FACT,P ; %A11165000
BOOLEAN BV,NLP,FACT; REAL DSV,P; %A11165100
BEGIN INTEGER K; %A11165200
LABEL L3,L1,L2,EXIT; %A11165300
QUOTETOG ~ FALSE; %A11165400
IF BV THEN STEPIT ELSE %A11165500
IF TABLE(I+1) = LEFTPAREN THEN LITF(4096) ELSE %A11165600
IF FACTER ~ STEPI ! AMPERSAND AND NLP THEN GO L3 ELSE %A11165700
BEGIN SLT ~ FALSE; SL ~ 1 END; %A11165800
NLP ~ FALSE; %A11165900
QUOTETOG ~ TRUE; %A11166000
IF FACT THEN BEGIN %A11166100
IF SLT THEN BEGIN EMITO(DUP); %A11166200
EMITI(0,36,6); EMITO(XCH); EMITO(DUP); %A11166300
STK ~ STK + 2 END; %A11166400
RCH(SLT,STK,TRUE,STK-1,SL, IF DSV = TRS THEN SFD ELSE SFS) %A11166500
END ELSE %A11166600
BEGIN L1: %A11166700
IF SLT THEN BEGIN %A11166800
IF NOT NLP THEN EMITPAIR(JUNK,SND); %A11166900
EMITO(DUP); %A11167000
EMITI(0,45,3); EMITO(XCH); %A11167100
EMITI(0,39,6); %A11167200
IF NOT NLP THEN EMITV(JUNK); %A11167300
STK ~ STK + 2 END; %A11167400
K ~ 0; %A11167500
IF SLT OR SL} 16 THEN BEGIN %A11167600
IF SLT THEN BEGIN %A11167700
ECR(STK,CRF); %A11167800
EC(IF DSV = TRS THEN 6 ELSE 10,BNS) END ELSE %A11167900
IF K ~ SL DIV 8 = 0 THEN GO L2 ELSE EC(K,BNS); %A11168000
IF DSV = TRS THEN BEGIN %A11168100
EC(8,TRP); EMT(P); EMT(P); EMT(P); EMT(P); %A11168200
END ELSE %A11168300
BEGIN EC(8,BNS); %A11168400
EC(P, DSV.[36:6]); EC(3,JNC); %A11168500
EC(1,SFS); EC(0,ENS); EC(1,JFW); EC(2,JNS); %A11168600
END; %A11168700
EC(0,ENS); %A11168800
IF DSV ! TRS THEN BEGIN %A11168900
EC(1,JFW); EJ( JFW) END; %A11169000
END; %A11169100
L2: %A11169200
IF SLT THEN BEGIN ECR(STK-1,CRF); %A11169300
EC(IF DSV = TRS THEN 3 ELSE 6, BNS); %A11169400
END ELSE %A11169500
IF K ~ SL - K|8 = 0 THEN GO EXIT ELSE %A11169600
EC(K,BNS); %A11169700
IF DSV = TRS THEN BEGIN EC(1,TRP); EMT(P) END ELSE %A11169800
BEGIN EC(P,DSV.[36:6]); EC(3,JNC); EC(1,SFS) END; %A11169900
EC(0,ENS); %A11170000
IF DSV ! TRS THEN BEGIN EC(1,JFW); EJ(JFW) END; %A11170100
END; %A11170200
GO EXIT; %A11170300
L3: %A11170400
IF SLT ~ DLT OR DRT THEN BEGIN %A11170500
IF DLT THEN EMITV(DL) ELSE EMITNUM(DL); %A11170600
IF DRT THEN EMITV(DR) ELSE EMITNUM(DR); %A11170700
EMITO(SUB); %A11170800
IF NOT FACT THEN EMITO(DUP); %A11170900
EMIT(0); EMITO(LSS); %A11171000
IF DSV = TRS THEN EMITERR(SGNO,L," 2"); %A11171100
SLT ~ TRUE; %A11171200
IF DRT EQV NOT DLT THEN BEGIN %A11171300
DRT ~ DLT; DLT ~ NOT DLT END ; %A11171400
END ELSE %A11171500
IF DL <DR THEN FLAG(704) ELSE SL ~ DL - DR; %A11171600
DR ~ DL; %A11171700
IF NOT FACT THEN GO L1; %A11171800
EXIT: QUOTETOG ~ TRUE; %A11171900
END OF FACTER; %A11172000
% %A11172100
PROCEDURE SCANQ(DSV); VALUE DSV; REAL DSV; %A11172200
BEGIN %A11172300
REAL T,R; INTEGER K; BOOLEAN V; %A11172400
R~SL~0; %A11172500
K ~ IF DSV = TRS THEN 63 ELSE 7; %A11172600
DO BEGIN %A11172700
COUNT ~ 0; %A11172800
DO BEGIN CHKND; %A11172900
RESULT ~ 5; SCANNER; CHKND; %A11173000
END UNTIL (V~EXAMIN(NCR)=""") OR COUNT = K; %A11173100
SL ~ SL + COUNT; %A11173200
IF DSV = TRS THEN BEGIN %A11173300
EC(COUNT,TRP); %A11173400
COUNT ~ (R~IF BOOLEAN(COUNT) THEN 2 ELSE 3) + COUNT; %A11173500
DO BEGIN T ~ 0; %A11173600
MOVECHARACTERS(2,ACCUM[1],R,T,6); EMT(T); %A11173700
END UNTIL R ~ R + 2 } COUNT; %A11173800
END ELSE %A11173900
IF COUNT = 1 THEN T ~ ACCUM[1].[18:6] ELSE %A11174000
BEGIN T ~ 0; %A11174100
IF COUNT = 7 THEN R ~ R + 1; %A11174200
MOVECHARACTERS(COUNT,ACCUM[1],3,T,1); %A11174300
EMITNUM(T) END %A11174400
END UNTIL V OR SL > 420; %A11174500
IF V THEN BEGIN COUNT ~ 0; %A11174600
RESULT ~ 5; SCANNER; STEPIT END ELSE BEGIN %A11174700
QUOTETOG ~ FALSE; ERR(705) END; %A11174800
IF DSV > TRS THEN %A11174900
BEGIN %A11175000
IF R = 1 THEN BEGIN %A11175100
ECR(STKC,SED); EC(1,SFD); %A11175200
EC(7,DSV.[42:6]); EJ(JFC) END ELSE %A11175300
IF R > 1 THEN BEGIN %A11175400
ECR(STK+1,SED); EC(R,BNS); %A11175500
EC(1,SFD); EC(7,DSV.[42:6]); %A11175600
EC(2,JNC); EC(0,ENS); EC(1,JFW); %A11175700
EJ(JFW); STK ~ STK + R; %A11175800
END; %A11175900
IF K ~ SL - R | 7 > 1 THEN BEGIN %A11176000
IF R = 0 THEN ECR(STKC,SED) ELSE STKC; %A11176100
EC(1,SFD); EC(K,DSV.[42:6]); %A11176200
EJ(JFC) END ELSE %A11176300
IF K = 1 THEN BEGIN %A11176400
EC(T,DSV.[36:6]); EJ(JFC) ; EC(1,SFS) END; %A11176500
END; %A11176600
SLT ~ FALSE; %A11176700
END OF SCANQ; %A11176800
% %A11176900
PROCEDURE BRKT(DSV); VALUE DSV; REAL DSV; %A11177000
BEGIN %A11177100
REAL DRO,JO,PC,T,R; %A11177200
BOOLEAN DRTO,PCT; %A11177300
LABEL L, EXIT; %A11177400
QUOTETOG~ FALSE; %A11177500
IF STEPI = LITNO THEN %A11177600
IF R ~ ELBAT[I].ADDRESS < 64 AND R > 0 THEN %A11177700
IF TABLE(I+1) = COLON THEN BEGIN %A11177800
STEPIT; PCT ~ FALSE; EC(PC~R,BNS); GO L END; %A11177900
AEXP; EMITO(SSP); %A11178000
PCT ~ TRUE; %A11178100
IF ELCLASS ! COLON THEN BEGIN ERR(706); GO EXIT END; %A11178200
EMITPAIR(PC~FORAD,ISN); %A11178300
ECR(STKC,CRF); R ~ LC ~ LC + 1; %A11178400
L: %A11178500
DRO ~ DR; DRTO ~ DRT; JO ~ JMPCH; %A11178600
DR ~ JMPCH ~ 0; DRT ~ FALSE; QUOTETOG ~ TRUE; %A11178700
STEPIT; STRINGXP(DSV,FALSE); %A11178800
EC(0,ENS); %A11178900
IF PCT THEN BEGIN T ~ LC; %A11179000
LC ~ R - 1; %A11179100
IF R ~ T - R > 63 THEN BEGIN %A11179200
FLAG(707); ERRORTOG~ TRUE;R ~ 1 END; %A11179300
EC(R,BNS); LC ~ T END; %A11179400
IF DSV > TRS THEN BEGIN %A11179500
EC(1,JFW); EMITJUMP(TRUE); %A11179600
JMPCH ~ JO; EJ(JFW) END ; %A11179700
IF SLT ~ DRT OR PCT THEN BEGIN %A11179800
IF DRT THEN BEGIN EMITV(DR); DCRFR END ELSE EMITNUM(DR); %A11179900
IF PCT THEN BEGIN EMITV(PC); DCRFR END ELSE EMITNUM(PC); %A11180000
EMITO(MUL); END ELSE %A11180100
SL ~ DR | PC; %A11180200
DR ~ DRO; %A11180300
DRT ~ DRTO; %A11180400
IF ELCLASS=RTBRKET THEN STEPIT ELSE ERR(715); %A11180500
EXIT: %A11180600
END OF BRKT; %A11180700
% %A11180800
PROCEDURE OTHERS(TR,DSV); VALUE TR,DSV; REAL DSV; %A11180900
BOOLEAN TR; %A11181000
BEGIN LABEL L1; REAL T; %A11181100
BOOLEAN CRFT; LABEL EXIT; %A11181150
QUOTETOG ~ FALSE; %A11181200
SLT ~ TRUE; %A11181300
IF TR THEN IF STEPI = LEFTPAREN THEN STEPIT ELSE ERR(105); %A11181400
IF T ~ EXPRSS = 5 THEN BEGIN %A11181500
FOR T ~ 0 STEP 1 UNTIL 4 DO EMIT(0); %A11181600
EMITO(MKS); EMITV(ATSTRV); %A11181700
ECR(STKC,IF DSV=TRS THEN SES ELSE SED); %A11181800
ECR(STK~STK+4,CRF); %A11181900
IF DSV = TRS THEN BEGIN %A11182000
EC(3,BNS); %A11182100
EC(1,SFS); EC(7,TRS); %A11182200
EC(0,ENS); EC(1,SFS); ECR(STKC,CRF); %A11182300
EC(0,TRS); END ELSE %A11182400
BEGIN EC(6,BNS); %A11182500
EC(1,SFD); EC(7,DSV.[42:6]); %A11182600
EC(2,JNC); EC(0,ENS); %A11182700
EC(1,JFW); EJ(JFW); %A11182800
EC(1,SFD); %A11182900
ECR(STKC,CRF); EC(0,DSV.[42:6]); %A11183000
EJ(JFC) END; %A11183100
END ELSE %A11183200
IF T = BTYPE AND NOT TR THEN BEGIN %A11183300
EMITPAIR(4,BFC); %A11183400
EMITNUM("TRUE000"); EMITL(4); %A11183500
EMITPAIR(2,BFW); %A11183600
EMITNUM("FALSE00"); EMITL(5); %A11183700
L1: %A11183800
EMITO(DUP); %A11183900
IF DSV = TRS THEN BEGIN %A11184000
ECR(STKC,SES); %A11184100
IF CRFT THEN BEGIN ECR(STKC,CRF); EC(0,SFS); END %A11184110
ELSE EC(1,SFS); %A11184120
ECR(STKC,CRF); EC(0,TRS); %A11184200
END ELSE %A11184300
BEGIN ECR(STKC,SED); %A11184400
IF CRFT THEN BEGIN ECR(STKC,CRF); EC(0,SFD); END %A11184410
ELSE EC(1,SFD); %A11184420
ECR(STKC,CRF); EC(0,DSV.[42:6]); %A11184500
EJ(JFC); END END ELSE %A11184600
IF T = ATYPE OR T = BTYPE THEN BEGIN %A11184700
IF ELCLASS = COMMA AND TR THEN BEGIN %A11184710
IF STEPI = LITNO THEN %A11184720
IF TABLE(I+1) = RTPAREN THEN BEGIN SLT ~ FALSE; %A11184730
SL ~ ELBAT[I].ADDRESS; STEPIT; STEPIT; %A11184740
IF SL > 8 THEN FLAG(697); T ~ 8 - SL; %A11184750
IF DSV = TRS THEN BEGIN ECR(STKC,SES); %A11184755
IF T ! 0 THEN EC(T,SFS); EC(SL,TRS) END ELSE %A11184760
BEGIN ECR(STKC,SED); IF T ! 0 THEN EC(T,SFD); %A11184765
EC(SL,DSV.[42:6]); EJ(JFC) END; GO EXIT END; AEXP; %A11184770
EMITL(7); EMITO(LND); EMITPAIR(JUNK,SND); EMITL(8); %A11184775
EMITO(XCH); EMITO(SUB); EMITV(JUNK); %A11184780
CRFT ~ TRUE; GO L1 END; %A11184785
EMIT(0); %A11184800
EMITO(MKS); %A11184900
EMITL(IF TR THEN 3 ELSE 0); %A11185000
EMITV(ARSTV); %A11185100
GO L1 END ELSE %A11185200
ERR(708); %A11185300
IF TR THEN RTPARN; %A11185400
EXIT: %A11185450
QUOTETOG ~ TRUE; %A11185500
END OF OTHERS; %A11185600
PROCEDURE TRANSFORM; %A11185700
BEGIN REAL J,N,LCO; LABEL LE,EXIT; QUOTETOG ~ FALSE; %A11185800
IF STEPI!LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11185900
IF STEPI!STRINGID AND ELCLASS!STRINGARRAYID THEN %A11186000
BEGIN ERR(689); GO EXIT END; STRINGVAR(FALSE);% %A11186100
IF SPT OR SLT THEN FLAG(690);% %A11186200
ECR(STKC,RSA); RCH(FALSE,0,FALSE,0,SP,SFS); %A11186300
IF SL > 63 THEN IF SL > 126 OR BOOLEAN(SL) THEN BEGIN %A11186400
ERR(691); GO EXIT END ELSE BEGIN EC(2,BNS);% %A11186500
EC(SL.[41:6],BNS); END ELSE EC(SL,BNS); %A11186600
IF ELCLASS = COMMA AND TABLE(I+1)=STRINGID THEN BEGIN STEPIT; %A11186610
J ~ SL; STRINGVAR(FALSE); EMIT(0); EMIT(0); %A11186620
IF SPT OR SLT OR SP!0 OR SL{63 THEN FLAG(721); %A11186630
ECR(STK~STK+2,SDA); ECR(STKC,SED); EC(7,SFD); %A11186640
EC(1,TRS); ECR(STK-1,RDA); ECR(STK-1,SSA); ECR(STK-2,RSA); %A11186650
ECR(STK,CRF); EC(0,SFS); EC(1,TRS); ECR(STK-1,RSA); EC(0,ENS); %A11186660
SL ~ J; IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104) END %A11186670
ELSE BEGIN % %A11186680
EC("A",TAN); EC(1,JFC); LCO ~ LC; LC ~ LC + 1; %A11186700
EC(" ",TEQ); EC(1,JFC); LC ~ LC + 1; %A11186800
WHILE ELCLASS = COMMA AND N ~ N + 1 { 12 DO BEGIN %A11186900
IF STEPI ! STRNGCON THEN BEGIN LE: ERR(692); GO EXIT END;% %A11187000
EC(C.[42:6],TEQ); EC(3,JFC); EC(1,TRP); %A11187100
IF STEPI ! COLON THEN GO LE; IF STEPI!STRNGCON THEN GO LE; %A11187200
EMT(C.[42:6]); LC ~ LC + 1; STEPIT END; %A11187300
IF ELCLASS=RTPAREN THEN STEPIT ELSE BEGIN ERR(104);GO EXIT END; %A11187400
N ~ N - 1; %A11187500
LC ~ LCO; EC(5 | N + 3,JFW); LC ~ LC + 2; EC(5 | N,JFW); %A11187600
WHILE J ~ J + 1 { N DO BEGIN LC ~ LC + 4; %A11187700
EC((N - J) | 5 + 2,JFW) END; %A11187800
EC(1,TRS); EC(1,JFW); EC(1,SFS); EC(0,ENS); %A11187900
END; % %A11187950
IF SL > 63 THEN EC(0,ENS); %A11188000
EXIT: QUOTETOG ~ TRUE; %A11188100
END OF TRANSFORM; %A11188200
% %A11188300
% %A11188400
REAL R; %A11188500
IF ELCLASS = STRINGID OR ELCLASS = STRINGARRAYID THEN %A11188600
STRINGC(DSV,NLP) ELSE %A11188700
IF ELCLASS = QUOTEOP THEN SCANQ(DSV) ELSE %A11188800
IF ELCLASS = STRINGPROCID THEN BEGIN PROCSTMT(FALSE); %A11188900
IF DSV = TRS THEN BEGIN ECR(STKC,SES); EC(1,SFS); %A11189000
ECR(STKC,CRF); EC(0,TRS) END ELSE %A11189100
BEGIN ECR(STKC,SED); EC(1,SFD); ECR(STKC,CRF); %A11189200
EC(0,DSV.[42:6]) END; EMITO(DUP); SLT ~ TRUE %A11189300
END ELSE %A11189400
IF ELCLASS=FIELDID AND R ~ ELBAT[I].ADDRESS= STRINGV %A11189500
THEN STRINGC(DSV,NLP) ELSE %A11189600
IF ELCLASS = LFTBRKET THEN BRKT(DSV) ELSE %A11189700
IF ELCLASS = LEFTPAREN THEN BEGIN %A11189800
STEPIT; STRINGXP(DSV,FALSE); %A11189900
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104); %A11190000
GO L1 END ELSE %A11190100
IF ELCLASS = STRTRNS THEN %A11190200
STRINGINT(FALSE,DSV,NLP) ELSE %A11190300
IF ELCLASS = SPACEV OR ELCLASS = NILV OR ELCLASS = FACTOP %A11190400
THEN BEGIN %A11190500
IF FACTER(FALSE,DSV,NLP,ELCLASS=FACTOP, %A11190600
IF ELCLASS = SPACEV THEN " " ELSE 0) THEN %A11190700
BEGIN IF REAL(NLP) = 3 THEN FLAG(698); GO EXIT END END ELSE %A11190800
IF ELCLASS}BOOARRAYID AND ELCLASS { INTARRAYID THEN %A11190900
STRINGC(DSV,NLP) ELSE %A11191000
IF ELCLASS = LITNO THEN BEGIN %A11191100
IF R ~ TABLE(I+1) = STRTRNS OR R = FACTOP %A11191200
OR R = SPACEV OR R = NILV THEN BEGIN %A11191300
SLT ~ FALSE; SL ~ ELBAT[I].ADDRESS; %A11191400
STEPIT; %A11191500
IF ELCLASS = STRTRNS THEN BEGIN %A11191600
IF SL > 64 OR SL = 0 THEN FLAG(709); %A11191700
STRINGINT(TRUE,DSV,NLP) END ELSE %A11191800
IF FACTER(TRUE,DSV,NLP,R = FACTOP, %A11191900
IF R = SPACEV THEN " " ELSE 0) THEN BEGIN %A11192000
IF REAL(NLP) = 3 THEN FLAG(698); GO EXIT END %A11192010
END ELSE GO L2 END ELSE %A11192100
IF ELCLASS = FILLV THEN BEGIN SLT ~ FALSE; %A11192110
IF DSV ! TRS THEN FLAG(720); %A11192115
IF STEPI = LITNO THEN BEGIN %A11192120
IF SL ~ C > 63 THEN FLAG(709); END ELSE %A11192125
IF ELCLASS=LEFTPAREN THEN BEGIN QUOTETOG ~ FALSE;STEPIT; %A11192130
AEXP; IF NOTCOMMA THEN GO EXIT; QUOTETOG ~ TRUE; %A11192135
EMITPAIR(JUNK,ISN); %T9311192138
IF ELCLASS ! LITNO OR SL ~ C > 8 THEN BEGIN ERR(709); GO %A11192140
EXIT END; ECR(STKC,SES); EC(SL,OCV); EC(SL,SRD); %A11192145
IF STEPI ! RTPAREN THEN FLAG(104) END ELSE %A11192150
FLAG(105); STEPIT; EMIT(0); ECR(STKC,SDA);EC(SL-1,10); %A11192155
ECR(STK,RDA); EC(SL,SFD) END ELSE %A11192160
IF ELCLASS = 0 THEN %A11192200
IF ACCUM[1] = "5OCTAL" THEN BEGIN SLT ~ FALSE; SL ~ 16; %A11192300
IF DSV!TRS THEN BEGIN ERR(687); GO EXIT END;% %A11192400
QUOTETOG ~ SPT ~ FALSE; %A11192500
IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11192510
IF (R ~ TABLE(I+1) { INTARRAYID AND R } BOOARRAYID %T9111192515
AND TABLE(I+2) ! LFTBRKET) OR %T9111192520
(R = STRINGID OR R = STRINGARRAYID) THEN BEGIN STEPIT; %T9111192525
STRINGVAR(FALSE); %A11192530
IF SPT OR SLT OR SL ! 8 OR SP!0 THEN FLAG(719); SL~16 END ELSE %A11192535
BEGIN I ~ I - 1; PANA; SPT ~ TRUE END; QUOTETOG ~ TRUE; %A11192540
ECR(STKC,IF SPT THEN SES ELSE RSA); %A11192545
IF NOT SPT THEN IF ELCLASS=RTPAREN THEN STEPIT ELSE %A11192550
BEGIN ERR(104); GO EXIT END; %A11192555
EC(16,BNS); EC(3,BIR); EC(3,BNS); EC(1,TIB); EC(2,JFC); %A11192600
EC(1,BIS); EC(1,JFW); EC(1,BIR); EC(1,BSS); EC(0,ENS); %A11192700
EC(0,ENS) END ELSE %A11192800
IF ACCUM[1] = "5SUBST" AND DSV = TRS THEN TRANSFORM ELSE %A11192900
BEGIN ERR(100); GO EXIT END ELSE %A11193000
IF ELCLASS = DECLARATORS AND R = STRINGV THEN %A11193100
OTHERS(TRUE,DSV) ELSE %A11193200
L2: OTHERS(FALSE,DSV); %A11193300
IF DRT OR SLT THEN BEGIN %A11193400
IF DRT THEN EMITV(DR) ELSE IF DR!0 THEN EMITNUM(DR); %A11193500
IF SLT OR SL!0 THEN BEGIN %A11193600
IF NOT SLT THEN EMITNUM(SL); %A11193700
IF DRT OR DR!0 THEN EMITO(ADD); END; %A11193800
IF NOT DRT THEN BEGIN DRT ~ TRUE; DR ~ FORAD END; %A11193900
END ELSE DR ~ DR + SL; %A11194000
L1: %A11194100
IF NLP AND ELCLASS ! AMPERSAND THEN BEGIN %A11194200
IF DRT OR DLT THEN BEGIN %A11194300
IF DRT THEN EMITPAIR(DR,SND) ELSE EMITNUM(DR); %A11194400
IF DLT THEN EMITV(DL) ELSE EMITNUM(DL); %A11194500
IF REAL(NLP) = 3 THEN BEGIN EMITO(XCH); EMITO(SUB); EMITO(DUP); %A11194510
EMIT(0); EMITO(LSS); EMITERR(SGNO,L," 2") END ELSE %A11194520
IF DSV = TRS THEN BEGIN EMITO(GTR); %A11194600
EMITERR(SGNO,L," 2") END ELSE %A11194700
EMITO(IF DSV=1328 THEN EQL ELSE LEQ) END ELSE %A11194800
IF DSV = TRS THEN BEGIN %A11194900
IF DR > DL THEN ERR(704) END ELSE %A11195000
IF REAL(NLP) ! 3 THEN %A11195050
IF DR ! DL THEN ERR(716); %A11195100
END ELSE IF DRT THEN EMITPAIR(DR,STD); %M11195200
EXIT: %A11195300
END OF STRINGPRIM; %A11195400
% %A11195500
PROCEDURE STRINGXP(DSV,NLP); VALUE DSV,NLP; %A11195600
BOOLEAN NLP; REAL DSV; %A11195700
BEGIN %A11195800
REAL R; %A11195900
IF NLP AND DSV = TRS THEN BEGIN %T9311196000
IF ELCLASS = INTRNSICPROCID THEN %T9311196050
IF R := ELBAT[I].[27:6] } 21 AND R { 23 THEN %T9311196100
FIXCLASS(INTID, %T9311196120
IF R = 21 THEN TABR ELSE %T9311196130
IF R = 22 THEN COLR ELSE INREAL , %T9311196140
FALSE); %T9311196150
IF ELCLASS } REALID AND ELCLASS { INTID THEN %T9311196160
IF TABLE(I+1) = COLON THEN BEGIN %A11196200
CHECKER(R~ELBAT[I]); %A11196300
STEPIT; STEPIT END; END; %T9311196400
I ~ I - 1; %A11196500
DO BEGIN QUOTETOG ~ TRUE; STEPIT; %A11196600
STRINGPRIM(DSV,NLP); %A11196700
END UNTIL ELCLASS ! AMPERSAND; %A11196800
IF NLP THEN %A11196900
IF R ! 0 THEN BEGIN %A11197000
IF DRT THEN EMITV(DR) ELSE EMITNUM(DR); %A11197100
IF R.[9:2] = 2 THEN BEGIN %A11197200
EMITN(R.ADDRESS); EMITO(STD); END ELSE %A11197300
EMITPAIR(R.ADDRESS,STD); END; %A11197400
END OF STRINGXP; %A11197500
% %A11197600
PROCEDURE STRINGVAR(BV); VALUE BV; BOOLEAN BV; %A11197700
BEGIN %A11197800
LABEL L1,L2,L3,L4,EXIT; %A11197900
REAL SPTEMP,SLTEMP,WTYPEO,SLTO,SPTO; %A11197950
BOOLEAN RB; REAL RTYPE; %A11198000
REAL R,T,S,ADR; %A11198100
BOOLEAN NPT,NLT,QO; %A11198200
ADR ~ (R ~ ELBAT[I]).ADDRESS; %A11198300
QO ~ QUOTETOG; QUOTETOG ~ FALSE; %A11198400
IF SYMSEC THEN SYMSEC ~ FALSE ELSE BEGIN %A11198500
IF ELCLASS = STRINGID THEN %A11198600
BEGIN % STRINGID %A11198700
IF BOOLEAN(R.FORMAL) THEN %A11198800
BEGIN % FORMAL %A11198900
IF BOOLEAN(R.VO) THEN %A11199000
BEGIN % FORMAL-VALUE %A11199100
WTYPE ~ 2; SP ~ 1; %A11199200
SPT ~ FALSE; SLT ~ TRUE; %A11199300
EMITN(ADR); EMITV(ADR-1) %A11199400
END ELSE %A11199500
BEGIN % FORMAL-NAME %A11199600
WTYPE ~ 1; EMITPAIR(ADR,LOD); %A11199700
EMITV(ADR-1); EMITV(ADR-2); %A11199800
SPT ~ SLT ~ TRUE %A11199900
END; %A11200000
STEPIT END ELSE %A11200100
IF T ~ TAKE(GIT(R)) < 0 THEN %A11200200
BEGIN % SUBSTRING %A11200300
STEPIT; %A11200400
IF ACCUM[1] = "2IN000" THEN %A11200500
BEGIN STEPIT; %A11200600
IF S ~ T.LINK ! 0 THEN %A11200700
IF S ! ELBAT[I].LINK THEN %A11200800
BEGIN %A11200900
L1: ERR(710); GO EXIT; %A11201000
END; %A11201100
L2: IF ELCLASS ! STRINGID AND ELCLASS ! STRINGARRAYID THEN GO L1; %A11201200
IF BOOLEAN((S ~ ELBAT[I]).FORMAL) THEN GO L1; %A11201300
SPT ~ FALSE; SP ~ 0; SLT ~ FALSE; %A11201400
IF ELCLASS = STRINGID THEN BEGIN %A11201500
IF SL ~ TAKE(GIT(S)) < 0 THEN GO L1; %A11201600
IF SL { 7 THEN BEGIN %A11201700
EMITN(S.ADDRESS); SP ~ 1; WTYPE ~ 2; %A11201800
END ELSE BEGIN %A11201900
EMITPAIR(S.ADDRESS,LOD); WTYPE ~ 4 END; %A11202000
STEPIT; %A11202100
END ELSE %A11202200
BEGIN % STRINGARRAY %A11202300
SL ~ TAKE(TAKE(SL ~ GIT(S)) + SL + 1); %A11202400
SLTEMP ~ SL; % WATCH OUT FOR RECURSION %A11202450
IF ARAY(S,0,TRUE) THEN BEGIN %A11202500
L3:ERR(711); GO EXIT END; %A11202600
SL~SLTEMP;SLT~FALSE; % WATCH OUT FOR RECURSION %A11202650
IF SL { 8 THEN WTYPE ~ 2 ELSE BEGIN %A11202700
EMITO(LOD); WTYPE ~ 4 END; %A11202800
END; %A11202900
IF T.[22:13] + T.[9:13] > SL THEN GO L1; %A11203000
SL ~ T.[9:13]; SP ~ T.[22:13] + SP; %A11203100
END ELSE %A11203200
IF S ~ T.LINK = 0 THEN BEGIN %A11203300
ERR(710); GO EXIT %A11203400
END ELSE BEGIN %A11203500
ELBAT[I ~ I-1] ~ S ~ TAKE(S)& S[35:35:13]; %A11203600
ELCLASS ~ S.CLASS; %A11203700
GO L2 END; %A11203800
END OF SUBSTRING PART ELSE %A11203900
BEGIN % NONFORMAL STRING %A11204000
SLT ~ SPT ~ FALSE; SP ~ 0; %A11204100
IF SL ~ T { 7 THEN BEGIN %A11204200
EMITN(ADR); SP ~ 1; %A11204300
WTYPE ~ 2 END ELSE BEGIN %A11204400
EMITPAIR(ADR,LOD); %A11204500
WTYPE ~ 4 END; %A11204600
STEPIT; %A11204700
END %A11204800
END OF STRING PART ELSE %A11204900
IF ELCLASS = STRINGARRAYID THEN %A11205000
BEGIN %A11205100
IF ARAY(R,0,TRUE) THEN %A11205200
BEGIN IF SL ~ TAKE(TAKE(SL ~ GIT(R)) + SL + 1) { 8 %A11205300
AND BV AND STLB=1 THEN BEGIN SLT~FALSE; GO EXIT END; %A11205400
GO L3 END; %A11205500
IF BOOLEAN(R.FORMAL) THEN %A11205600
BEGIN % FORMAL ARRAY %A11205700
WTYPE ~ 1; EMITV(ADR-1); %A11205800
SLT ~ TRUE; EMITL(8); %A11205900
EMITO(GTR); EMITPAIR(1,BFC); %A11206000
EMITO(LOD); EMITV(ADR-1); %A11206100
SPT ~ FALSE; SP ~ 0; %A11206200
END OF FORMAL PART ELSE %A11206300
BEGIN % NONFORMAL STRING ARRAY %A11206400
IF SL ~ TAKE(TAKE(SL ~ GIT(R)) + SL + 1) { 8 %A11206500
THEN WTYPE ~ 2 ELSE %A11206600
BEGIN %A11206700
EMITO(LOD); WTYPE ~ 4 %A11206800
END; %A11206900
SP ~ 0; %A11207000
SPT ~ SLT ~ FALSE; %A11207100
END %A11207200
END OF STRINGARRAY PART ELSE %A11207300
IF ELCLASS } BOOARRAYID AND ELCLASS { INTARRAYID %A11207400
AND TABLE(I+1) ! LFTBRKET THEN BEGIN %A11207450
IF TAKE (GIT(R))!1 THEN FLAG(684); SP~REAL(SPT~FALSE);% %A11207500
SLT ~ TRUE; EMITPAIR(ADR,LOD); EMITO(DUP); EMITO(MOP); %A11207600
EMITI(0,8,10); EMITL(8); EMITO(MUL); STEPIT; WTYPE~4 END ELSE %A11207700
IF ELCLASS = FIELDID AND ADR = STRINGV THEN %A11207800
BEGIN FIELDC(R,0,FALSE); %A11207900
IF SYMSTK.[46:1] THEN BEGIN WTYPE~2; SYMSTK.[46:1]~FALSE; %A11207950
END ELSE BEGIN RTYPE ~ WTYPE; WTYPE ~ 4; %A11208000
RB ~ ELCLASS ! ASSIGNOP END END %A11208050
ELSE %A11208100
IF ELCLASS = STRTRNS AND R ~ R.INCR > 7 THEN %A11208200
BEGIN %A11208300
IF BOOLEAN(R) THEN %A11208400
BEGIN %A11208500
EMITPAIR(INSTR,LOD); %A11208600
SP ~ 3; SL ~ 61; %A11208700
END ELSE %A11208800
BEGIN %A11208900
EMITPAIR(OUTSTR,LOD); SP ~ 0; %A11209000
SL ~ STRINGMAX ~ MAX(64,STRINGMAX); %A11209100
END; %A11209200
STEPIT; %A11209300
SLT ~ SPT ~ FALSE; WTYPE ~ 4 %A11209400
END ELSE %A11209500
BEGIN %A11209600
ERR(708); GO EXIT %A11209700
END; END; %A11209800
IF BV THEN BEGIN %A11209900
IF WTYPE ! 4 OR SL { 8 OR SP ! 0 %A11210000
OR SPT OR SLT THEN ERR(712); %A11210100
GO EXIT END; %A11210200
IF ELCLASS = LEFTPAREN THEN %A11210300
BEGIN STEPIT; %A11210400
IF NPT ~ LITP(S) THEN %A11210500
BEGIN %A11210600
IF SPT THEN %A11210700
BEGIN %A11210800
IF SLT THEN EMITO(XCH); %A11210900
IF WTYPE ! 4 THEN BEGIN %A11211000
IF S ! 0 THEN BEGIN %A11211100
EMITNUM(S); EMITO(ADD); %A11211200
END; END ELSE %A11211300
BEGIN %A11211400
SP ~ SP + S; %A11211500
IF SP.[35:10]! 0 THEN BEGIN %A11211600
EMITL(SP.[35:10]); EMITO(ADD); END; %A11211700
EMITO(CDC); WTYPE ~ 3; %A11211800
SP ~ SP.[45:3]; SPT ~ FALSE %A11211900
END; %A11212000
IF SLT THEN EMITO(XCH); %A11212100
END ELSE %A11212200
IF SP ~ SP + S } 8 AND WTYPE = 4 THEN %A11212300
BEGIN %A11212400
WTYPE ~ 3; IF SLT THEN EMITPAIR(ST1,STD); %A11212500
EMITL(SP.[35:10]); EMITO(CDC); %A11212600
SP ~ SP.[45:3]; IF SLT THEN EMITV(ST1) %A11212700
END; %A11212800
END ELSE %A11212900
BEGIN IF SLT THEN EMITPAIR(ST1,STD); %A11213000
MOVE(5,SP,SPTEMP); % %A11213050
AEXP; EMITO(SSP); %A11213100
MOVE(5,SPTEMP,SP); % %A11213150
EMITPAIR(JUNK,ISN); %A11213200
IF SPT THEN %A11213300
BEGIN %A11213400
IF WTYPE = 4 THEN %A11213500
BEGIN IF SP ! 0 THEN %A11213600
BEGIN EMITL(SP); EMITO(ADD); END; %A11213700
EMITPAIR(ST2,SND); %A11213800
EMITL(8); EMITO(IDV); %A11213900
EMITO(ADD); EMITO(CDC); %A11214000
WTYPE ~ 3; EMITV(ST2); %A11214100
EMITI(0,45,3); EMITV(JUNK); %A11214200
END ELSE BEGIN EMITO(ADD); %A11214300
IF SLT THEN EMITV(ST1); %A11214400
EMITV(JUNK) END %A11214500
END ELSE %A11214600
BEGIN %A11214700
IF WTYPE = 4 THEN EMITPAIR(ST2,SND) %A11214800
ELSE EMITO(DUP); %A11214900
IF SP ! 0 THEN %A11215000
BEGIN EMITNUM(SP); EMITO(ADD); END; %A11215100
IF WTYPE = 4 THEN %A11215200
BEGIN %A11215300
WTYPE ~ 3; EMITPAIR(ST3,SND); %A11215400
EMITL(8); EMITO(IDV); %A11215500
EMITO(CDC); EMITV(ST3); %A11215600
EMITI(0,45,3); %A11215700
IF SLT THEN EMITV(ST1); %A11215800
EMITV(ST2) %A11215900
END ELSE %A11216000
BEGIN %A11216100
EMITO(XCH); %A11216200
IF SLT THEN %A11216300
BEGIN EMITV(ST1); EMITO(XCH) END %A11216400
END %A11216500
END; %A11216600
SPT ~ TRUE %A11216700
END; %A11216800
IF ELCLASS = RTPAREN THEN %A11216900
BEGIN %A11217000
STEPIT; %A11217100
IF NPT AND S = 0 THEN GO EXIT; %A11217200
IF SLT THEN %A11217300
BEGIN %A11217400
IF NPT THEN EMITNUM(S); %A11217500
L4: EMITO(SUB); EMITO(DUP); %A11217600
EMIT(0); EMITO(LSS); %A11217700
EMITERR(SGNO,L," 1"); %A11217800
END ELSE %A11217900
IF NPT THEN BEGIN %A11218000
IF SL ~ SL-S < 0 THEN %A11218100
BEGIN ERR(713); GO EXIT END %A11218200
END ELSE %A11218300
BEGIN %A11218400
EMITNUM(SL); EMITO(XCH); %A11218500
SLT ~ TRUE; GO L4 %A11218600
END; %A11218700
GO EXIT %A11218800
END OF SP ONLY PART; %A11218900
IF NOTCOMMA THEN GO EXIT; %A11219000
IF NLT ~ LITP(T) THEN %A11219100
BEGIN %A11219200
IF NPT THEN %A11219300
BEGIN %A11219400
IF SLT THEN %A11219500
BEGIN %A11219600
EMITNUM(S + T); EMITO(LSS); %A11219700
EMITERR(SGNO,L," 1"); %A11219800
END ELSE %A11219900
IF T + S > SL THEN %A11220000
BEGIN FLAG(713); ERRORTOG ~ TRUE END %A11220100
END ELSE %A11220200
BEGIN %A11220300
EMITNUM(T); EMITO(ADD); %A11220400
IF SLT THEN EMITO(LSS) ELSE %A11220500
BEGIN EMITNUM(SL); EMITO(GTR) END; %A11220600
EMITERR(SGNO,L," 1"); %A11220700
END; %A11220800
SL ~ T; SLT ~ FALSE %A11220900
END ELSE %A11221000
BEGIN %A11221100
MOVE(5,SP,SPTEMP); % %A11221150
AEXP; EMITO(SSP); %A11221200
MOVE(5,SPTEMP,SP); % %A11221250
EMITPAIR(ST1,ISN); %A11221300
IF NPT THEN EMITNUM(S); EMITO(ADD); %A11221400
IF SLT THEN EMITO(LSS) ELSE %A11221500
BEGIN EMITNUM(SL); EMITO(GTR); END; %A11221600
EMITERR(SGNO,L," 1"); %A11221700
EMITV(ST1); SLT ~ TRUE %A11221800
END; %A11221900
RTPARN; %A11222000
GO EXIT %A11222100
END; %A11222200
IF WTYPE = 4 THEN %A11222300
IF SPT THEN %A11222400
BEGIN SPT ~ FALSE; EMITO(CDC) END ELSE %A11222500
IF SP > 7 THEN BEGIN %A11222600
EMITL(SP.[35:10]); EMITO(CDC); %A11222700
SP ~ SP.[45:3]; %A11222800
WTYPE ~ 3 END; %A11222900
EXIT: IF WTYPE = 3 AND SL < 8 AND NOT SLT %A11223000
THEN WTYPE ~ 2; %A11223100
QUOTETOG ~ QO; %A11223200
IF RB AND ELCLASS = ASSIGNOP THEN BEGIN %A11223300
EMITV(RTYPE ~ RECARRAY[RTYPE].[11:11]); %A11223400
EMITPAIR(6,BFC); EMITV(RTYPE+2); EMITO(SSN); EMITPAIR(RTYPE+2, %A11223500
STD); EMITPAIR(4,BFW); EMITV(RTYPE+1); EMITO(SSN); %A11223600
EMITPAIR(RTYPE+1,STD) END; %A11223700
END OF STRINGVAR; %A11223800
% %A11223900
PROCEDURE STRINGSEC(FROM); VALUE FROM; REAL FROM; %A11224000
BEGIN %A11224100
IF FROM = 1 THEN STRINGVAR(FALSE); %A11224200
IF FROM ! 1 OR ELCLASS = ASSIGNOP THEN %A11224300
BEGIN %A11224400
ARRAY TEDC[0:3,0:127]; %A11224500
BOOLEAN RV; %A11224600
BOOLEAN BV,DLTO,DRTO,DPTO; %A11224700
REAL T,DLO,DRO,DPO,STKO,LCO,WT,JMPCHO; %A11224800
REAL R; %A11224850
LABEL EXIT,L9, L1,L2,L3,L4,L5,L6,L7,L8; %A11224900
SWITCH SW ~ L1,L2,L3,L4,L5,L6,L7,L8; %A11225000
DLTO ~ DLT; DPTO ~ DPT; DRTO ~ DRT; JMPCHO~ JMPCH; %A11225100
STKO~STK; LCO~LC; DLO~DL;DRO~DR; %A11225200
DLT~DPT~DRT~FALSE; %A11225300
DPO~DP; %A11225400
JMPCH~STK~LC~DR~0; %A11225500
MOVECODE(TEDC,EDC); %A11225600
QUOTETOG ~ TRUE; %A11225700
IF FROM > 4 THEN EMITL(REAL(FROM=7)) ELSE %A11225800
IF FROM = 1 AND SLT THEN %A11225900
EMITPAIR(DL~FORAD,STD); %A11226000
IF FROM ! 3 AND NOT SYMSEC THEN EMITO(MKS); %A11226100
GO TO SW[FROM]; %A11226200
IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11226210
STEPIT; LC ~ 2; GO L7; %A11226220
L2: STRINGVAR(FALSE); %A11226300
IF SLT THEN EMITPAIR(DL~FORAD,STD); %A11226400
IF ELCLASS ! ASSIGNOP THEN BEGIN ERR(717); GO EXIT END; %A11226500
L1: IF NOT DLT~SLT THEN DL~SL; DP~SP; %A11226600
IF BV ~ (WT~WTYPE=1 AND DPT ~ SPT) THEN %A11226700
EMD(REAL(FROM=1) + 2,1); %A11226800
IF WTYPE > 2 AND NOT SPT THEN DPT ~ BOOLEAN(2); %A11226900
STK ~ REAL(FROM=1) + REAL(BV) + REAL(SPT); %A11227000
IF STEPI = ADOP THEN BEGIN %A11227100
T ~ REAL(DPT) & %A11227200
(STKC) [22:42:6] & %A11227300
(IF ELBAT[I].ADDRESS = ADD THEN FAD ELSE FSV) %A11227400
[41:42:6] & DP[28:35:13]; %A11227500
STEPIT; %A11227600
EMITPAIR(OUTSTR,LOD); %A11227700
ECR(STK,RDA); DP ~ 0; DPT ~ FALSE; %A11227800
STRINGXP(TRS,TRUE) END ELSE %A11227900
BEGIN T ~ 0; %A11228000
ECR(0,RDA); %A11228100
RCH(DPT,1,BV,STK,DP,SFD); %A11228200
IF NOT(DLT OR DPT OR WTYPE < 3 OR DL<32 ) THEN BEGIN %A11228300
IF ELCLASS=SPACEV OR ELCLASS = NILV THEN %A11228400
IF TABLE(I+1)!AMPERSAND AND TABLE(I+1)! LEFTPAREN THEN BEGIN %A11228500
INTEGER J,K,P; %A11228600
P ~ IF ELCLASS = SPACEV THEN " " ELSE 0; %A11228700
EC((T~(8-DP.[45:3]).[45:3])+8,BNS); %A11228800
EC(1,TRP); EMT(P); EC(0,ENS); %A11228900
ECR(0,RSA); %A11229000
IF T!0 THEN EC(0,SFS); %A11229100
J ~ (T~DL-T-8) DIV 8; %A11229200
T ~ T - J|8; %A11229300
IF K ~ J MOD 64 ! 0 THEN EC(K,TRW); %A11229400
IF J ~ J DIV 64 ! 0 THEN BEGIN %A11229500
EC(J,BNS); EC(32,TRW); EC(32,TRW); %A11229600
EC(0,ENS); END ; %A11229700
IF T ! 0 THEN BEGIN %A11229800
EC(T,BNS); EC(1,TRP); %A11229900
EMT(P); EC(0,ENS); END; %A11230000
T ~ 0; STEPIT; %A11230100
END ELSE STRINGXP(TRS,TRUE) ELSE %A11230200
STRINGXP(TRS,TRUE) END ELSE STRINGXP(TRS,TRUE) %A11230300
END; %A11230400
IF T ! 0 THEN BEGIN ECR(0,RDA); %A11230500
RCH(BOOLEAN(T),1,BV,REAL(FROM=1) + 2,T.[29:12],SFD); %A11230600
ECR(T.[22:6],RSA); %A11230700
IF DRT THEN BEGIN EMITV(DR); ECR(STKC,CRF); %A11230800
EC(0,T.[41:6]) END ELSE %A11230900
EC(DR.[42:6],T.[41:6]); END; %A11231000
EMTC; %A11231100
IF FROM = 1 AND DRT THEN EMITV(DR); %A11231200
SL ~ DR; SLT ~ DRT; %A11231300
WTYPE ~ WT; %A11231400
SPT ~ IF T ! 0 THEN BOOLEAN(T.[47:1]) ELSE DPT; %A11231500
SP ~ IF T ! 0 THEN T.[28:13] ELSE DP; %A11231600
GO EXIT; %A11231700
L3: EMIT(0); EMITO(MKS); %A11231800
STRINGSEC(1); %A11231900
IF BV ~ ELCLASS = RELOP THEN GO L9; %A11232000
IF SLT THEN BEGIN EMITPAIR(NSTR,SND); %A11232100
EMITO(DUP); EMITI(0,36,6); %A11232200
STK~ 3 END ELSE %A11232300
BEGIN EMITNUM(SL); EMITPAIR(NSTR,STD); STK ~ 1 END; %A11232400
IF BV ~ (WTYPE = 1 AND SPT) THEN BEGIN %A11232500
EMD(STK+1,1); STK ~ STK + 2; END ELSE %A11232600
STK ~ STK + REAL(SPT AND TRUE); %T9011232700
EMITPAIR(OUTSTR,LOD); %A11232800
ECR(0,RSA); %A11232900
RCH(SPT,1,BV,STK-1,SP,SFS); %A11233000
ECR(STK,RDA); %A11233100
IF SPT OR SP.[45:3] ! 0 OR SLT THEN %A11233200
RCH(SLT,STK-2-REAL(BV),TRUE,STK-1-REAL(BV),SL,TRS) ELSE %A11233300
BEGIN %A11233400
RCH(FALSE,0,FALSE,0,SL.[33:12],TRW); %A11233500
IF SL ~ SL.[45:3]!0 THEN EC(SL,TRS) END; %A11233600
EMTC; EMITV(STRINGPRINT); GO EXIT; %A11233700
L4: %A11233800
EMITPAIR(INSTR,LOD); %A11233900
ECR(0,RDA); %A11234000
EC(DP~3,SFD); %A11234100
DL ~ 31; STK ~ 0; %A11234200
STRINGXP(TRS,TRUE); %A11234300
ECR(0,RDA); EC(2,SFD); %A11234400
IF DRT THEN BEGIN %A11234500
EMITV(DR); %A11234600
EMITPAIR(COUNTI,SND); %A11234700
ECR(STKC,SES); %A11234800
EC(7,SFS); EC(1,TRS); END ELSE %A11234900
BEGIN %A11235000
EMITL(DR.[42:6]); EMITPAIR(COUNTI,STD); %A11235100
EC(1,TRP); EMT(DR.[42:6]) END; %A11235200
EMTC; GO TO EXIT; %A11235300
L5: %A11235400
EMITPAIR(OUTSTR,LOD); %A11235500
ECR(STK~2,RDA); %A11235600
DP ~ 0; DL ~ 8; %A11235700
STRINGXP(TRS,TRUE); %A11235800
ECR(0,SED); %A11235900
ECR(2,RSA); %A11236000
IF DRT THEN BEGIN %A11236100
EMITV(DR); %A11236200
ECR(STKC,CRF); %A11236300
EC(0,ICV); %A11236400
END ELSE %A11236500
EC(DR.[42:6],ICV); %A11236600
EMTC; GO TO EXIT; %A11236700
L6: %A11236800
EMIT(0); %A11236900
ECR(STK~ 2,SED); %A11237000
EC(1,SFD); DP ~ 1; DL ~ 7; %A11237100
STRINGXP(TRS,TRUE); %A11237200
ECR(0,SED); ECR(2,SES); %A11237300
EC(1,SFS); %A11237400
IF DRT THEN BEGIN %A11237500
EMITV(DR); %A11237600
EMITO(DUP); EMITL(8); EMITO(XCH); EMITO(SUB); %A11237700
ECR(STK~STK+2,CRF); %A11237800
EC(0,SFD); ECR(STK-1,CRF); %A11237900
EC(0,TRS); END ELSE %A11238000
BEGIN DR ~ DR.[45:3]; %A11238100
EC(8-DR,SFD); EC(DR,TRS) END; %A11238200
EMTC; GO EXIT; %A11238300
L7: BV ~ FALSE; %A11238400
STRINGSEC(1); %A11238500
IF ELCLASS ! RELOP THEN BEGIN %A11238600
ERR(714); GO EXIT END; %A11238700
L9: %A11238800
T ~ ELBAT[I].[36:12]; STEPIT; %A11238900
JMPCH ~ 0; %A11239000
IF DLT ~ SLT THEN EMITPAIR(DL~FORAD,STD) %A11239100
ELSE DL ~ SL; %A11239200
DP ~ SP; %A11239300
IF RV ~ (WTYPE=1 AND DPT ~ SPT) THEN EMD(4,3); %A11239400
ECR(2,RSA); %A11239500
RCH(DPT,3,RV,4,DP,SFS); %A11239600
IF NOT DPT AND WTYPE > 2 THEN DPT ~ BOOLEAN(2); %A11239700
STK ~ REAL(DPT.[47:1]) + REAL(RV) +2; %A11239800
IF FROM = 9 THEN BEGIN ECR(STKC,STC); EMIT(0); ECR(STK,CRF); %A11239810
EC(0,SFS); END; %A11239820
STRINGXP(IF T = 1393 THEN 1328 ELSE T,IF FROM = 9 THEN %A11239900
BOOLEAN(3) ELSE TRUE); %A11239910
IF FROM ! 9 THEN %A11239950
IF DLT OR DRT THEN DR ~ BUMPL; %A11240000
EMIT(0); L ~ L - 1; %A11240100
IF BV EQV T ! 1393 THEN BEGIN % ! %A11240200
IF FROM = 9 THEN BEGIN EC(1,INC); EC(1,JFW); END %A11240210
ELSE BEGIN EC(REAL(BV),SEC); ECR(0,STC) END; %A11240220
EMITJUMP(FALSE); %A11240230
IF FROM = 9 THEN EC(1,JNS) END ELSE %A11240240
BEGIN %A11240300
EC(2,IF FROM = 9 THEN JNS ELSE JFW); EMITJUMP(FALSE); %A11240400
IF FROM = 9 THEN EC(1,INC) ELSE %A11240500
BEGIN EC(REAL(BV),SEC); ECR(0,STC) END END; %A11240600
IF FROM = 9 THEN BEGIN EC(0,ENS); ECR(0,STC); R ~ LC; LC ~ 0; %A11240700
IF DRT OR DLT THEN BEGIN ECR(STKC,CRF); %A11240710
EMITL(1); EMITO(ADD); %A11240715
IF R > 61 THEN FLAG(604); EC(R-2,BNS) END ELSE %A11240720
BEGIN IF DL - DR > 62 THEN FLAG(699); EC(0,JFW); %A11240730
EC(DL - DR + 1,BNS);END; LC ~ R; %A11240740
IF ELCLASS = COMMA THEN BEGIN IF STEPI!REALID AND ELCLASS!ALFAID%A11240745
THEN BEGIN ERR(718); GO EXIT END; CHECKER(ELBAT[I]); %A11240750
% %A11240755
EMITN(ELBAT[I].ADDRESS); ECR(STKC,RDA); EC(7,SFD); %A11240760
EC(1,TRS); STEPIT END; %A11240765
IF ELCLASS=RTPAREN THEN STEPIT ELSE ERR(104) END; %A11240770
EMTC; %A11240800
IF FROM ! 9 THEN BEGIN %A11240850
IF DRT OR DLT THEN BEGIN %A11240900
DL ~ BUMPL; ADJUST; %A11241000
EMITB(BFC,DR,L); EMITV(XITR); %A11241100
IF BV EQV T = 1393 THEN BEGIN EMITO(DEL); %A11241200
EMITL(REAL(BV)); END; %A11241300
EMITB(BFW,DL,L) END; %A11241400
IF BV THEN EMITV(BOOPRINT); %A11241500
END; %A11241550
GO EXIT; %A11241600
L8: %A11241700
ECR(0,SED); %A11241800
EC(STK~DP~1,SFD); DL ~ 7; %A11241900
STRINGXP(TRS,TRUE); %A11242000
EMTC; %A11242100
IF DRT THEN EMITV(DR) ELSE EMITNUM(DR); %A11242200
EXIT: %A11242300
IF DLT THEN DCRFR; %A11242400
IF DRT THEN DCRFR; %A11242500
DLT ~ DLTO; DPT ~ DPTO; DRT ~ DRTO; %A11242600
JMPCH ~ JMPCHO; STK ~ STKO; LC ~ LCO; %A11242700
DL ~ DLO; DR ~ DRO; %A11242800
MOVECODE(TEDC,EDC); %A11242900
IF FROM ! 1 THEN QUOTETOG ~ FALSE; %A11243000
END %A11243100
END OF STRINGSEC; %A11243200
PROCEDURE NVALINT; %A11243300
BEGIN %A11243400
% %A11243500
PROCEDURE EMITRET; %A11243600
BEGIN REAL A,B,T; %A11243700
IF T ~ PROINFO.CLASS = PROCID THEN STEPIT ELSE %A11243800
IF T < 31 THEN ERR(619) ELSE %A11243900
CASE T - STRINGPROCID OF BEGIN %A11244000
BEGIN QUOTETOG ~ TRUE; STEPIT; STRINGSEC(8); %A11244100
QUOTETOG ~ FALSE; EMITO(XCH); %A11244200
EMITPAIR(TAKE(GIT(PROINFO)).[30:10],STD); END; %A11244300
BEGIN T ~ TAKE(PROINFO.LINK + 1).[2:2]; %A11244400
DBLPLXP(T); EMITPAIR(514,STD); %A11244500
A ~ TAKE(GIT(PROINFO)).[30:10]; %A11244600
T ~ IF T = 2 THEN 2 ELSE 0; %A11244700
FOR B ~ 0 STEP 1 UNTIL T DO EMITPAIR(A+B,STD); %A11244800
EMITV(514) END; %A11244900
BEGIN QUOTETOG ~ TRUE; STEPIT; SEXPN; %A11245000
QUOTETOG ~ FALSE END; %A11245100
BEGIN STEPIT; RECOM( GETYPE (PROINFO)) END; %A11245200
BEGIN STEPIT; BEXP END; %A11245300
BEGIN STEPIT; AEXP END; %A11245400
BEGIN STEPIT; AEXP END; %A11245500
BEGIN STEPIT; AEXP; EMITPAIR(514,ISN); END; END; %A11245600
IF MODE > 0 AND (LEVEL=SUBLEVEL OR SOPG) THEN BEGIN %A11245700
EMIT(RETLIST); EMITO(NOP); RETLIST ~ L; EMITO(NOP); %A11245800
EMITO(NOP); END ELSE %A11245900
BEGIN FLAG(619); ERRORTOG ~ TRUE END %A11246000
END OF EMITRET; %A11246100
% %A11246200
PROCEDURE EMITXIT; %A11246300
BEGIN IF SOPG THEN BEGIN FLAG(620); ERRORTOG ~ TRUE END ELSE %A11246400
BEGIN EMIT(XITLIST); EMITO(NOP); XITLIST ~ L END; %A11246500
STEPIT; END; %A11246600
% %A11246700
PROCEDURE RECLAIMIT; %A11246800
IF STEPI ! LEFTPAREN AND RECLAIMTOG THEN BEGIN %A11246900
EMITO(MKS); EMITV(MARKER); EMITO(MKS); EMITV(COLLECT); END ELSE %A11247000
IF ELCLASS ! LEFTPAREN THEN ERR(105) ELSE %A11247100
BEGIN REAL T,R,S; %A11247200
IF STEPI = RECID OR ELCLASS = RECARRAYID THEN %A11247300
BEGIN %A11247400
REXP; %A11247500
IF RECTYPE ! 0 THEN BEGIN %A11247600
FIXRECORD(RECTYPE,4); %A11247700
RECTYPE ~ 0 END ELSE %A11247800
ERR(612); %A11247900
END ELSE %A11248000
IF NOT RECLAIMTOG THEN BEGIN %A11248100
EMIT(0); SEXPN; %A11248200
EMITO(CTC); %A11248300
IF SYMSTK THEN EMITPAIR(LNKROW,STD) ELSE BEGIN EMITO(DUP); %A11248350
GETCONTENTS(0,TRUE); EMITV(FREELIST); %A11248400
EMITO(XCH); EMITO(STD); %A11248500
EMITPAIR(FREELIST,STD); END; QUOTETOG~FALSE END ELSE %A11248600
ERR(621); %A11248700
IF ELCLASS ! RTPAREN THEN ERR(104) ELSE STEPIT; %A11248800
END OF RECLAIMIT; %A11248900
PROCEDURE RECALLIT(ADR); VALUE ADR; REAL ADR; %A11249000
IF STEPI ! LEFTPAREN THEN ERR(105) ELSE %A11249100
IF STEPI ! FILEID OR BOOLEAN(ELBAT[I].FORMAL) THEN %A11249200
ERR(622) ELSE% %A11250000
BEGIN EMITO(MKS); %A11250100
EMITPAIR(ELBAT[I].ADDRESS,LOD); %A11250200
EMITV(IF BOOLEAN(ADR) THEN REMEMBER ELSE RECALL); %A11250300
IF STEPI = RTPAREN THEN STEPIT ELSE %T9311250400
IF ELCLASS = COMMA THEN BEGIN I:=I-3; %T9311250402
IF BOOLEAN(ADR) THEN WRITESTMT ELSE READSTMT END ELSE %T9311250404
ERR(104); %T9311250406
END OF RECALLIT; %A11250500
PROCEDURE ADDPROP; %A11250600
BEGIN LABEL EXIT; REAL T; %A11250700
LABEL L; %A11250800
IF STEPI! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11250900
EMITO(MKS); QUOTETOG ~ TRUE; %A11251000
STEPIT ; SEXPN; %A11251100
MARKSYMNCR(1); %A11251200
IF ELCLASS ! COMMA THEN BEGIN %A11251300
L: ERR(606); GO EXIT END; %A11251400
QUOTETOG ~ TRUE; %A11251500
IF STEPI = FACTOP THEN BEGIN %A11251600
EMITL(4); EMIT(0); QUOTETOG ~ FALSE; %A11251700
IF STEPI ! COMMA THEN GO L; %A11251800
STEPIT; AEXP; T~ 1 END ELSE %A11251900
IF ELCLASS = DECLARATORS AND %A11252000
T ~ ELBAT[I].ADDRESS > 29 THEN BEGIN %A11252100
IF STEPI ! COMMA THEN GO L; %A11252200
QUOTETOG ~ FALSE;EMITL(2); EMITL(T); %A11252300
STEPIT; RECOM(T); T ~ 1 END ELSE %A11252400
BEGIN EMIT(0); SEXPN; MARKSYMNCR(1); %A11252500
QUOTETOG ~ TRUE; %A11252600
IF ELCLASS ! COMMA THEN GO L; STEPIT; %A11252700
SEXPN; MARKSYMNCR(1); QUOTETOG~ FALSE; %A11252800
T ~ 3 END; %A11252900
EMITV(ADDPROPA); MARKSYMDCR(-T); %A11253000
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104); %A11253100
EXIT: QUOTETOG ~ FALSE; %A11253200
END OF ADDPROP; %A11253300
PROCEDURE REMPROP; %A11253400
BEGIN LABEL EXIT; %A11253500
REAL T; %A11253600
IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11253700
QUOTETOG ~ TRUE; %A11253800
EMITO(MKS); STEPIT; SEXPN; %A11253900
IF ELCLASS ! COMMA THEN BEGIN %A11254000
ERR(606); GO EXIT END; %A11254100
QUOTETOG ~ TRUE; %A11254200
IF STEPI = FACTOP THEN BEGIN %A11254300
EMITL(1); EMITL(3); QUOTETOG ~ FALSE; %A11254400
STEPIT; END ELSE %A11254500
IF ELCLASS = DECLARATORS AND %A11254600
T ~ ELBAT[I].ADDRESS > 29 THEN BEGIN %A11254700
EMIT(0); EMITNUM(T&1[32:47:1]); %A11254800
QUOTETOG ~ FALSE; STEPIT END ELSE %A11254900
BEGIN EMIT(0); SEXPN; QUOTETOG ~ FALSE END; %A11255000
EMITV(REMPROPER); %A11255100
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104); %A11255200
EXIT: QUOTETOG ~ FALSE %A11255300
END OF REMPROP; %A11255400
PROCEDURE PRINTER(TERPRI); VALUE TERPRI; BOOLEAN TERPRI; %A11255500
BEGIN LABEL NEXT,EXIT; %A11255600
LABEL L1; %A11255700
INTEGER TCOUNT,V,R,T; %A11255800
DEFINE FORMTOG = PRINFORM#; %A11255900
BOOLEAN BL,B,DP; %A11256000
PRINTOG ~ TRUE; %A11256100
PRINFORM ~ PRINFORM AND BOOLEAN(8188); %A11256200
IF STEPI = DECLARATORS THEN BEGIN %A11256300
IF T ~ ELBAT[I].ADDRESS=DOUBLEV THEN DP ~ DPTOG ~ TRUE ELSE %A11256400
IF T = FORMATV THEN FORMTOG ~ FORMTOG OR TRUE ELSE %A11256500
BEGIN ERR(638); GO EXIT END; STEPIT END; %A11256600
IF FORMTOG THEN %A11256700
BEGIN IF T ~REAL(PRINFORM.[35:11]) = 0 THEN %A11256800
PRINFORM.[36:11] := BOOLEAN(T:=GETSPACE(TRUE,-1)); %T9311256900
IF ELCLASS = LFTBRKET THEN BEGIN I ~ I - 1; BANA; %A11257000
EMITPAIR(T,STD); END; END; %A11257100
NEXT: IF ELCLASS = IFV THEN BEGIN IFCLAUSE; T ~ BUMPL; %A11257200
I~I-1;PRINTER(FALSE); IF ELCLASS=ELSEV THEN BEGIN %A11257300
EMITB(BFC,T,T~BUMPL); PRINTER(FALSE); EMITB(BFW,T,L) END ELSE %T9011257400
EMITB(BFC,T,L); END; EMITO(MKS); %A11257500
IF FORMTOG THEN IF FORMTOG.[46:1] THEN BEGIN %A11257600
IF TERPRI THEN %A11257605
IF (ELCLASS } UNTILV AND ELCLASS { ENDV) OR %A11257610
ELCLASS = RTBRKET OR ELCLASS = SEMICOLON THEN GO EXIT; %A11257620
EMITV(T~REAL(FORMTOG.[35:11])); EMITV(CP); EMITV(T); %A11257700
EMITO(RDV); EMITO(SUB); EMITV(SPACEPRINT); EMITO(MKS); END %A11257800
ELSE FORMTOG ~ FORMTOG OR BOOLEAN(2); %A11257900
IF ELCLASS=COMMA THEN BEGIN IF TABLE(I+1)=MULOP THEN BEGIN %A11258000
EMITV(TERPRIN); STEPIT END ELSE BEGIN EMITL(" "); %A11258100
EMITV(CHARPRINT); END; STEPIT; GO TO NEXT END; %A11258200
IF ELCLASS = CROSSHATCH THEN BEGIN %A11258300
TCOUNT ~ COUNT ~ 0; CHKND; RESULT ~ 5; %A11258400
SCANNER; %A11258500
IF V ~ EXAMIN(NCR) = "#" THEN BEGIN EMITL(ACCUM[1].[18:6]); %A11258600
RESULT ~ 5; SCANNER; STEPIT; %A11258700
EMITV(CHARPRINT); GO TO NEXT END; BL ~ FALSE; %A11258800
CHKND; EMITPAIR(OUTSTR,LOD); EMITO(ECM); STREAMTOG~TRUE; %A11258900
GO TO L1; %A11259000
DO BEGIN COUNT ~ 0; %A11259100
L1: DO BEGIN B~BL; RESULT ~ 5; SCANNER; CHKND; %A11259200
IF (BL ~ V ~ EXAMIN(NCR)=" ") AND B THEN BEGIN %A11259300
DO BEGIN RESULT ~ 5; SCANNER; CHKND; %A11259400
COUNT ~ COUNT -1 END UNTIL V ~ EXAMIN(NCR)!" "; %A11259500
BL ~ FALSE END %A11259600
END UNTIL V = "#" OR COUNT = 63; %A11259700
TCOUNT ~ TCOUNT + COUNT; %A11259800
EMITC(COUNT,TRP); %A11259900
COUNT~(R~IF BOOLEAN(COUNT) THEN 2 ELSE 3) + COUNT; %A11260000
DO BEGIN T ~ 0; %A11260100
MOVECHARACTERS(2,ACCUM[1],R,T,6); %A11260200
EMIT(T); END UNTIL R~R+2 } COUNT; %A11260300
END UNTIL V = "#" OR TCOUNT = 896; %A11260400
EMITC(1,0); STREAMTOG ~ FALSE; %A11260500
IF V = "#" THEN BEGIN COUNT~0; RESULT~5; SCANNER; STEPIT END %A11260600
ELSE BEGIN ERR(623); GO EXIT END; %A11260700
STRINGMAX ~ MAX(TCOUNT,STRINGMAX); %A11260800
EMITL(TCOUNT); EMITPAIR(NSTR,STD); EMITO(MKS); %A11260900
EMIT(0); EMITV(STRINGPRINT) END ELSE %A11261000
IF (ELCLASS = FIELDID AND ELBAT[I].ADDRESS = STRINGV) OR %A11261100
(ELCLASS= STRTRNS AND ELBAT[I].INCR>7) OR %A11261200
ELCLASS = STRINGV OR ELCLASS = FILLV OR %T9011261250
ELCLASS = STRINGID OR ELCLASS = STRINGARRAYID THEN %A11261300
STRINGSEC(3) ELSE %A11261400
IF ELCLASS = SPACEV THEN BEGIN %A11261500
IF STEPI = LEFTPAREN THEN BEGIN I ~ I-1; PANA; EMITV(SPACEPRINT) %A11261600
END ELSE BEGIN EMITL(" "); EMITV(CHARPRINT) END END ELSE %A11261700
IF Q ~ ACCUM[1] = "5QMARK" THEN BEGIN STEPIT; EMITL(12); %A11261800
EMITV(CHARPRINT); END ELSE %A11261900
IF Q = "4SKIP0" THEN BEGIN PANA; %A11262000
EMITV(CP); EMITO(SUB); EMITV(SPACEPRINT); END ELSE %A11262100
IF (ELCLASS } UNTILV AND ELCLASS { ENDV) OR %A11262200
ELCLASS = RTBRKET OR %A11262300
ELCLASS = SEMICOLON THEN GO EXIT ELSE %A11262400
IF ELCLASS = ALFAID OR ELCLASS = ALFAARRAYID OR ELCLASS = ALFAPROCID %A11262500
OR ELCLASS=STRNGCON THEN BEGIN AEXP; EMITV(ALFPRINT) END ELSE %A11262600
IF Q = "2RL000" THEN BEGIN EMITO(MKS); EMITNUM("{!"); %A11262610
EMITV(ALFPRINT); STEPIT END ELSE %A11262620
BEGIN %A11262700
IF T ~ EXPRSS > 29 THEN BEGIN EMITO(MKS); %A11262800
MKALF(RECARRAY[T]); EMITV(ALFPRINT); %A11262900
EMITO(MKS); EMITL("-"); EMITV(CHARPRINT); %A11263000
EMIT(0); EMITV(ARITHPRINT); %A11263050
RECTYPE ~ 0 END ELSE %A11263100
IF T = DTYPE THEN BEGIN ERR(638); GO EXIT END ELSE %A11263200
CASE T OF BEGIN ERR(638); %A11263300
EMITV(BOOPRINT); %A11263400
ERR(638); %A11263500
BEGIN EMITL(REAL(FORMTOG)); EMITV(ARITHPRINT) END; %A11263600
ERR(638); %A11263700
EMITV(SYMPRINT); %A11263800
BEGIN EMITL(REAL(FORMTOG)); EMITV(DBLPRINT) END; %A11263900
EMITV(PLXPRINT); %A11264000
EMITV(DBLPLXPRINT); END; END; %A11264100
QUOTETOG ~ FALSE; %A11264200
DPTOG ~ DP ; GO NEXT ; %A11264300
EXIT: DPTOG ~ PRINTOG~ FALSE; %A11264400
IF TERPRI THEN EMITV(TERPRIN) ELSE L ~ L - 1; %A11264500
END OF PRINTER; %A11264600
PROCEDURE DONTS; %A11264700
BEGIN LABEL L,EXIT; BOOLEAN BV; REAL ADR; %A11264800
DPTOG~ TRUE; %A11264900
IF STEPI ! LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11265000
IF STEPI = FACTOP THEN BEGIN %A11265100
IF STEPI = FACTOP THEN BEGIN STEPIT; ADR ~ DBLSIG END ELSE %A11265200
ADR ~ SNGLSIG; %A11265300
L: IF ELCLASS ! COMMA THEN BEGIN ERR(606); GO EXIT END; %A11265400
DPTOG ~ FALSE; STEPIT; %A11265500
AEXP; EMITO(SSP); EMITO(DUP); EMITL(1); %A11265600
EMITO(LSS); EMITPAIR(2,BFC); EMITO(DEL); %A11265700
EMITL(1); EMITPAIR(ADR,IF BV THEN ISN ELSE ISD); %A11265800
IF BV THEN BEGIN EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11265900
EMITV(NTSER) END END ELSE %A11266000
BEGIN EMITO(MKS); DBLXP; BV ~ TRUE; %A11266100
ADR ~ JUNK; GO L END; %A11266200
IF ELCLASS = RTPAREN THEN STEPIT ELSE ERR(104); %A11266300
EXIT: DPTOG ~ FALSE; %A11266400
END OF DONTS; %A11266500
PROCEDURE INPUTER; %A11266600
BEGIN LABEL EXIT,MARG,L1,LW,L2,L3; %A11266700
LABEL BF,SF; %BARRY FOLSOM LOVES SUSIE FOLSOM %T9311266750
BOOLEAN DACOM; %A11266800
REAL R; %A11266900
INOUTUSED.[44:1] ~1; % INPUT %A11267000
IF STEPI!LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11267100
IF STEPI = LABELID THEN BEGIN DAC[0] ~ GNAT(ELBAT[I]); %A11267200
IF ELBAT[I].LVL ! 1 THEN FLAG(650); STEPIT END ELSE BEGIN %A11267300
IF ELCLASS = BOOID THEN %T9011267310
BEGIN DAC[22] ~ ELBAT[I].ADDRESS; %T9011267320
IF ELBAT[I].LVL ! 1 THEN FLAG(650); %T9011267330
STEPIT; %T9011267340
GO BF; %T9011267345
END ELSE %T9011267350
IF ELCLASS = FACTOP THEN GO MARG ELSE %T9311267400
%T9311267500
%T9311267600
IF ELCLASS = MULOP THEN GO LW; %A11267700
EMITL(1); EMITPAIR(INITI,STD); %A11267800
IF ELCLASS =FILEID THEN %A11267900
IF DAC[1] ! 0 THEN %T9011268000
BEGIN IF DACOM ~ ELBAT[I].LINK = DACP.LINK THEN %T9011268010
BEGIN IF DACOMI = 0 THEN DACOMI := GETSPACE(TRUE,-6); %T9311268020
IF DAC[3] = 0 THEN %T9011268030
BEGIN DAC[3] := GETSPACE(TRUE,-1); %T9311268040
DAC[4] := GETSPACE(TRUE,-1); %T9311268050
END; %T9011268060
EMITL(1); %T9011268070
END ELSE EMITL(0); %T9011268100
EMITPAIR(DAC[8],SND); %T9011268200
END ELSE EMIT(0) ELSE %T9011268300
IF ELCLASS = BOOPROCID THEN BEGIN EMITL(1); %A11268400
IF TAKE(GIT(ELBAT[I])).[40:8] ! 0 THEN GO L1 %A11268500
END ELSE %A11268600
BEGIN L1: ERR(624); GO EXIT END; %A11268700
EMITPAIR(PROI,STD); %A11268800
IF ELBAT[I].LVL ! 1 THEN FLAG(624); %A11268900
ERRORTOG ~ TRUE; %A11269000
R ~ ELBAT[I].ADDRESS; %A11269100
IF DACOM THEN BEGIN DAC[7]~ R; EMITL(DACOMI) END ELSE EMITL(R); %A11269200
EMITPAIR(FILPROI,STD); %A11269300
STEPIT; %A11269400
IF NOTCOMMA THEN GO EXIT; %A11269500
IF ELCLASS ! STRINGID OR %A11269600
(R~ELBAT[I]).LVL ! 1 OR %A11269700
BOOLEAN(R.FORMAL) OR %A11269800
R ~ TAKE(GIT(R)) < 0 THEN %A11269900
BEGIN ERR(625); GO EXIT END; %A11270000
IF DACOM THEN BEGIN IF DAC[5]=0 THEN DAC[5]~ELBAT[I].ADDRESS %A11270100
ELSE IF DAC[5] ! ELBAT[I].ADDRESS THEN FLAG(694);% %A11270200
EMITL(DAC[5]); EMITPAIR(STRI,STD); %A11270300
END; IF FALSE THEN BEGIN %T9011270350
DAC[6] ~ IF R > 136 THEN 136 ELSE R; %T9011270400
IF STEPI=COMMA AND TABLE(I+1)= LITNO THEN BEGIN STEPIT; %A11270500
IF R{R ~ ELBAT[I].ADDRESS THEN FLAG(649); EMITL(R); %T9011270600
STEPIT END ELSE EMIT(0); EMITPAIR(LMARGI,SND); %A11270700
EMITPAIR(RMARGI,SND); EMITPAIR(CPI,STD) END ELSE BEGIN %A11270800
EMITL(ELBAT[I].ADDRESS); %A11270900
EMITPAIR(STRI,STD); STEPIT; %A11271000
IF NOTCOMMA THEN GO EXIT; AEXP; EMITO(SSP); %A11271100
EMITO(DUP); EMITNUM(R); %A11271200
EMITO(GTR); EMITERR(SGNO,L," 5"); %A11271300
IF ELCLASS=RTPAREN THEN BEGIN EMITPAIR(RMARGI,SND); %A11271400
EMITPAIR(CPI,SND); EMIT(0); EMITPAIR(LMARGI,STD) END; %A11271500
EMITL(7); EMITO(ADD); EMITL(8); %A11271600
EMITO(IDV); EMITPAIR(LGI,STD); %A11271700
IF ELCLASS = RTPAREN THEN GO L2; %A11271800
MARG: %A11271900
IF NOTCOMMA THEN GO EXIT; %A11272000
IF ELCLASS = MULOP THEN GO LW; %A11272100
AEXP; EMITO(SSP); EMITPAIR(LMARGI,ISN); %A11272200
IF DACOM THEN BEGIN EMITV(DAC[6]); EMITO(GTR); GO SF END; %T9311272250
IF NOTCOMMA THEN GO EXIT; %A11272300
AEXP; EMITO(SSP); EMITPAIR(RMARGI,ISN); %A11272400
EMITPAIR(CPI,SND); %A11272500
EMITO(GTR); EMITV(RMARGI); %A11272600
% %A11272700
EMITV(LGI); EMITL(8); EMITO(MUL); %A11272800
EMITO(GTR); EMITO(LOR); %A11272900
SF: EMITERR(SGNO,L," 7"); %T9311273000
IF DACP.LINK!0 THEN BEGIN EMIT(0); EMITPAIR(DAC[1],STD) %A11273100
END END END; %A11273200
IF ELCLASS = RTPAREN THEN GO L2; %A11273300
IF NOTCOMMA THEN GO EXIT; %A11273400
IF ELCLASS ! MULOP THEN GO L3; %A11273500
LW: STEPIT; BEXP; %A11273600
EMITPAIR(WSIGN,STD); %A11273700
BF: IF ELCLASS = RTPAREN THEN L2: STEPIT ELSE %T9011273800
L3: ERR(104); %A11273900
EXIT: %A11274000
END OF INPUTER; %A11274100
PROCEDURE OUTPUTER; %A11274200
BEGIN LABEL EXIT, MARG,L1,L2; %A11274300
LABEL BF; %T9011274350
BOOLEAN DACOM; %A11274400
REAL R; %A11274500
INOUTUSED.[46:1] ~1; %OUTPUT %A11274600
IF STEPI!LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11274700
IF STEPI = BOOID THEN BEGIN %A11274800
GPBV ~ ELBAT[I].ADDRESS; IF ELBAT[I].LVL!1 THEN FLAG(650); %A11274900
STEPIT; GO BF END ELSE BEGIN IF ELCLASS = FACTOP THEN %T9011275000
GO MARG; %T9311275100
%T9311275200
EMIT(0); EMITPAIR(OUTOG,STD); %A11275300
IF ELCLASS = FILEID THEN %A11275400
IF DAC[8] ! 0 THEN %T9011275500
BEGIN IF DACOM ~ ELBAT[I].LINK = DACP.[22:13] THEN %T9011275600
BEGIN GTLSTAT; EMITL(1); END ELSE EMITL(0); %T9011275700
EMITPAIR(DAC[8],SND); %T9011275800
END ELSE EMIT(0) ELSE %T9011276500
IF ELCLASS = PROCID THEN BEGIN EMITL(1); %A11276600
IF TAKE(GIT(ELBAT[I])).[40:8] ! 0 THEN %A11276700
GO L1 END ELSE %A11276800
BEGIN L1: ERR(624); GO EXIT END; %A11276900
EMITPAIR(PROTOG,STD); %A11277000
IF ELBAT[I].LVL ! 1 THEN FLAG(624); %A11277100
ERRORTOG ~ TRUE; %A11277200
R ~ ELBAT[I].ADDRESS; %A11277300
IF DACOM THEN BEGIN DAC[13]~R; EMITL(DACOMO) END ELSE EMITL(R); %A11277400
EMITPAIR(FILPRO,STD); %A11277500
STEPIT; %A11277600
IF NOTCOMMA THEN GO EXIT; %A11277700
IF ELCLASS ! STRINGID OR (R ~ ELBAT[I]).LVL ! 1 OR %A11277800
BOOLEAN(R.FORMAL) OR R ~ TAKE(GIT(R))<0 THEN %A11277900
BEGIN ERR(625); GO EXIT END; %A11278000
IF FALSE THEN BEGIN % IF DACOM THEN BEGIN %T9011278100
IF DAC[14]=0 THEN DAC[14] ~ ELBAT[I].ADDRESS ELSE %A11278200
IF DAC[14]! ELBAT[I].ADDRESS THEN FLAG(651); %A11278300
EMITL(DAC[14]); EMITPAIR(STRP,STD); %A11278400
DAC[15] ~ IF R > 136 THEN 136 ELSE R; % %T9011278500
IF DAC[2] = 0 THEN DAC[2] := GETSPACE(TRUE,-1); %T9311278530
EMIT(0); EMITPAIR(DAC[2],STD); % %T9011278560
EMITL(R); EMITPAIR(RMARG,STD); %A11278600
IF STEPI = COMMA AND TABLE(I+1)=LITNO THEN BEGIN STEPIT; %A11278700
IF R{R ~ ELBAT[I].ADDRESS THEN FLAG(693); STEPIT END ELSE% %A11278800
R ~ 0; EMITL(R); EMITPAIR(LMARG,SND); EMITPAIR(CP,STD); %A11278900
IF ELCLASS=COMMA THEN BEGIN %A11279000
IF STEPI ! LABELID OR ELBAT[I].LVL ! 1 THEN FLAG(654) ELSE %A11279100
BEGIN DAC[11] ~ GNAT(ELBAT[I]); STEPIT; GT1 ~ SCANR END; %A11279200
IF ELCLASS = COMMA THEN %A11279300
IF STEPI ! LABELID OR ELBAT[I].LVL ! 1 THEN FLAG(654) ELSE %A11279400
BEGIN DAC[12] ~ GNAT(ELBAT[I]); STEPIT END ELSE DAC[12] ~0 %A11279500
END ELSE DAC[11] ~ DAC[12] ~ 0; %A11279600
END ELSE BEGIN %A11279700
EMITL(ELBAT[I].ADDRESS); EMITPAIR(STRP,STD); %A11279800
STEPIT; %A11279900
IF NOTCOMMA THEN GO EXIT; AEXP; EMITO(SSP); %A11280000
EMITO(DUP); EMITNUM(R); %A11280100
EMITO(GTR); EMITERR(SGNO,L," 6"); %A11280200
IF ELCLASS=RTPAREN THEN BEGIN EMITPAIR(RMARG,SND); %A11280300
EMIT(0); EMITPAIR(CP,SND); EMITPAIR(LMARG,STD) END; %A11280400
EMITL(7); EMITO(ADD); EMITL(8); EMITO(IDV); %A11280500
EMITPAIR(LGO,ISD); %A11280600
IF ELCLASS = RTPAREN THEN GO L2; %A11280700
MARG: %A11280800
IF NOTCOMMA THEN GO EXIT; %A11280900
IF ELCLASS = BOOID THEN BEGIN GPBV ~ ELBAT[I].ADDRESS; %A11281000
IF ELBAT[I].LVL ! 1 THEN ERR(683);% %A11281100
IF STEPI=RTPAREN THEN GO L2; GO TO MARG END; %A11281200
AEXP; EMITO(SSP); %A11281300
EMITPAIR(LMARG,ISN); %A11281400
EMITPAIR(CP,SND); %A11281500
IF NOTCOMMA THEN GO EXIT; %A11281600
AEXP; EMITO(SSP); %A11281700
EMITPAIR(RMARG,ISN); %A11281800
EMITO(GTR); EMITV(RMARG); %A11281900
EMITV(LGO); EMITL(8); EMITO(MUL); %A11282000
EMITO(GTR); EMITO(LOR); %A11282100
EMITERR(SGNO,L," 8"); %A11282200
IF DACP.[22:13]!0 THEN BEGIN EMIT(0); EMITPAIR(DAC[8],STD); %A11282300
END END END; %A11282400
BF: IF ELCLASS = RTPAREN THEN L2: STEPIT ELSE %T9011282500
ERR(104); %A11282600
EXIT: %A11282700
END OF OUTPUTER; %A11282800
PROCEDURE REMOBIT; %A11282900
IF STEPI ! LEFTPAREN THEN BEGIN %A11283000
EMITO(MKS); EMIT(0); EMITN(SYMSTACKA); %A11283100
EMITO(ECM); STREAMTOG ~ TRUE; %A11283200
EMITC(8,TRP); EMIT(0); EMIT(0); EMIT(0); EMIT(0); %A11283300
EMITC(1,RSA); EMITC(2,BNS); %A11283400
EMITC(62,TRW); EMITC(0,ENS); %A11283500
EMITC(1,0); STREAMTOG ~ FALSE; %A11283600
END ELSE %A11283700
BEGIN EMITO(MKS); QUOTETOG ~ TRUE; %A11283800
STEPIT; %A11283900
SEXPN; QUOTETOG ~ FALSE; EMITV(REMOB); %A11284000
IF ELCLASS!RTPAREN THEN ERR(104) ELSE STEPIT END OF REMOBIT; %A11284100
CASE ELBAT[I].INCR OF BEGIN %A11284200
IF SYMFORMAT THEN ERR(660) ELSE EMITRET; %A11284300
EMITXIT; %A11284400
RECLAIMIT; %A11284500
RECALLIT(0); % %A11284600
RECALLIT(1); % %A11284700
ADDPROP; %A11284800
REMPROP; %A11284900
PRINTER(TRUE); %A11285000
PRINTER(FALSE); %A11285100
BEGIN TRPRI; STEPIT END; %A11285200
DONTS; %A11285300
INPUTER; %A11285400
OUTPUTER; %A11285500
REMOBIT; %A11285600
END END OF NVALINT; %A11285700
% %A11285800
% %A11285900
% %A11286000
PROCEDURE EMITNEWX; %A11286100
BEGIN REAL T,R,S; %A11286200
BOOLEAN STREAM PROCEDURE ALFTEST(V); VALUE V; %A11286300
BEGIN SI ~ LOC V; SI ~ SI + 7; IF SC = ALPHA THEN TALLY ~ 1; %A11286400
ALFTEST ~ TALLY END; %A11286500
PROCEDURE EMITFILL(A,N); VALUE N; INTEGER N; ARRAY A[0]; %A11286600
BEGIN %A11286700
INTEGER T,S; ARRAY TEDOC[0:7,0:127]; %A11286800
EMITNUM(SGAVL); EMITL(7); %A11286900
EMITO(COM); EMITO(DEL); EMITO(DEL); %A11287000
SEGMENTSTART; MOVECODE(TEDOC,EDOC); %A11287100
T ~ (N DIV 128) - 1; %A11287200
FOR S ~ 0 STEP 1 UNTIL T DO %A11287300
MOVE(128,A[S|128],EDOC[S,0]); % %A11287400
T ~ T + 1; %A11287500
MOVE(S ~ N MOD 128,A[T|128],EDOC[T,0]); %A11287600
SEGMENT(N,SGAVL,SGNO); %A11287700
MOVECODE(TEDOC,EDOC); %A11287800
SGAVL ~ SGAVL + 1; %A11287900
END OF EMITFILL; %A11288000
IF DACP ! 0 THEN BEGIN % REMOTE TERMINAL %T9011288100
IF DAC[1] = 0 THEN ERR(653) ELSE %T9011288200
IF DAC[9]!0THEN EMITARRAY(DAC[9],18,0,FALSE)ELSE FLAG(653);%T9011288300
END; % %T9011288400
IF DPI[44] ! 0 THEN BEGIN % LNK %A11288500
R ~ 32768 & 3 [1:46:2]; %A11288600
FOR T ~ 0 STEP 1 UNTIL 9 DO LNK[0,T] ~ R; %A11288700
R ~-32768; %A11288800
FOR T ~ 10 STEP 1 UNTIL 63 DO LNK[0,T] ~(IF ALFTEST(T) %A11288900
THEN R ELSE -65536) & LNK[0,T][33:33:15]; %A11289000
LNK[0,12] ~ -65536; % MAKE QMARK NON-ALF %A11289100
EMITARRAY(44,64,512,FALSE); %A11289200
IF RECLAIMTOG AND SFPL > LNKNDX THEN FLAG(667); %A11289250
R ~ LNKNDX.[33:6] - 1; %A11289300
FOR T ~ 0 STEP 1 UNTIL R DO BEGIN %A11289400
EMITL(T); EMITN(44); EMITO(LOD); %A11289500
EMITFILL(LNK[T,*],512) END; %A11289600
EMITL(R~R+1); EMITN(44); EMITO(LOD); %A11289700
EMITFILL(LNK[R,*], S ~ LNKNDX.[39:9] + 1); %A11289800
IF SYMSTK THEN BEGIN IF LNKNDX { 1023 THEN EMITL(LNKNDX) %A11289810
ELSE EMITREL(LNKNDX); EMITPAIR(LNKROW,STD) END ELSE BEGIN %A11289820
EMITL(R); EMITPAIR(LNKCOL,STD); %A11289900
IF DPI[59] !0 THEN BEGIN LNKNDX ~ LNKNDX + 1; %A11290000
IF S.[42:6] ! 0 THEN BEGIN S.[42:6] ~ 0; %A11290100
LNKNDX.[42:6] ~ 0; LNKNDX ~ LNKNDX + 64; S ~ S + 64 END; %A11290200
IF LNKNDX { 1023 THEN EMITL(LNKNDX) ELSE EMITREL(LNKNDX); %A11290210
EMITPAIR(FREENL,STD) END; %A11290220
EMITL(S); EMITPAIR(LNKROW,STD); END; %A11290300
END; %A11290350
IF DPI[45] ! 0 THEN BEGIN % SYMSTACK %A11290400
T ~ IF RECLAIMTOG THEN 256 ELSE %A11290500
IF DPI[89] ! 0 OR DPI[92] ! 0 THEN 128 ELSE 125; %A11290600
EMITARRAY(45,T,0,FALSE); %A11290700
EMITPAIR(45,LOD); EMITFILL(SYMSTACK[*],125); %A11290800
END; %A11290900
IF DPI[46] ! 0 THEN % INSTR %A11291000
EMITARRAY(46,8,0,FALSE); %A11291100
IF DPI[47] + DPI[107] ! 0 THEN BEGIN % OUTSTR %A11291200
%T9011291210
STRINGMAX ~ MAX (STRINGMAX,168) ; % %A11291220
%T9011291300
STRINGMAX ~ (STRINGMAX+7) DIV 8; %A11291400
EMITARRAY(23,STRINGMAX,0,TRUE); END; %A11291500
IF DPI[49] ! 0 OR DPI[82] ! 0 THEN BEGIN % RND %A11291600
EMITREL(.77712357123575); %A11291700
EMITPAIR(49,STD); END; %A11291800
IF REAL(PRINFORM.[35:11]) ! 0 THEN BEGIN EMITL(15); %A11291900
EMITPAIR(REAL(PRINFORM.[35:11]),STD); END; %A11292000
EMITL(1); EMITPAIR(OUTOG,SND); %A11292100
IF RECLAIMTOG THEN BEGIN EMITL(TABLEMARKV); %A11292200
EMITPAIR(TABLEMARK,STD) END; %A11292250
EMITPAIR(WSIGN,STD); %A11292300
EMITL(2); EMITPAIR(COLSET,STD); %A11292400
EMITL(5); EMITPAIR(SNGLSIG,STD); %A11292500
EMITL(22); EMITPAIR(DBLSIG,STD); %A11292600
END OF EMITNEWX; %A11292700
% %A11292800
PROCEDURE HANDLXIT; %A11292900
BEGIN REAL T; %A11293000
ADJUST; WHILE XITLIST ! 4095 DO BEGIN %A11293100
T ~ GET(XITLIST-2); %A11293200
EMITB(BFW,XITLIST,L); %A11293300
XITLIST ~ T END END; %A11293400
% %A11293500
PROCEDURE HANDLRET(BRANCH); VALUE BRANCH; BOOLEAN BRANCH; %A11293600
BEGIN REAL CL,T; CL ~ PROINFO.CLASS; %A11293700
IF BRANCH THEN BEGIN ADJUST; T ~ L; %A11293800
WHILE RETLIST ! 4095 DO BEGIN %A11293900
L ~ RETLIST; RETLIST ~ GET(RETLIST-2); %A11294000
IF CL = PROCID THEN EMITB(BFW,L,T) ELSE %A11294100
IF CL = DBLPLXPROCID THEN EMITB(BFW,L-1,T) ELSE %A11294200
BEGIN L ~ L-2; EMITPAIR(514,STD); %A11294300
EMITB(BFW,L+2,T) END END; %A11294400
L ~ T END ELSE %A11294500
BEGIN T ~ L; %A11294600
WHILE RETLIST ! 4095 DO BEGIN %A11294700
L ~ RETLIST - 2; RETLIST ~ GET(L); %A11294800
IF CL = PROCID THEN EMITO(XIT) ELSE EMITO(RTN) END; %A11294900
L ~ T END %A11295000
END OF HANDLRET; %A11295100
% %A11295200
% %A11295300
% %A11295400
REAL PROCEDURE TEMP(R); VALUE R; REAL R; %A11295500
DPI[R~R+29] ~ IF TEMP ~ ABS(DPI[R])!0 THEN -ABS(DPI[R]) ELSE %A11295600
-(TEMP:=GETSPACE(TRUE,-1)); %T9311295700
% %A11295800
REAL PROCEDURE GNATA(R); VALUE R; REAL R; %A11295900
DPI[R ~ R + 44] ~ GNATA ~ IF R = 47 THEN 23 ELSE R; %A11296000
% %A11296100
REAL PROCEDURE GNATP(K); VALUE K; REAL K; %A11296200
BEGIN %A11296300
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11296400
FORTERR; %A11296500
IF GNATP ~ DPI[K].ADDRESS = 0 THEN BEGIN %A11296600
IF GT1 := DPI[K].[33:6] = 0 THEN GT1 := GETSPACE(TRUE,-6); %T9311296700
DPI[K].ADDRESS ~ GNATP ~ GT1; %A11296800
CASE K OF BEGIN %A11296900
; % ARCTAN 113 %A11297000
GT1 ~ GNATP(4); % 107 %A11297100
; % 77 %A11297200
; % 101 %A11297300
GT1 ~ GNATP(14); % 105 %A11297400
PUTADR(452,25); % 123 DSQRT %A11297500
GT1 ~ GNATP(3); % 104 %A11297600
GT1 ~ GNATP(0); % 115 %A11297700
PUTADR(452,25); % 53 %A11297800
BEGIN PUTADR(452,25); PUTADR(440,27); PUTADR(449,28) END; % 110 %A11297900
BEGIN PUTADR(452,25); PUTADR(440,27); PUTADR(449,28) END; % 100 %A11298000
BEGIN PUTADR(452,25); PUTADR(443,29); PUTADR(551,36); %A11298100
GT1 ~ GNATP(8); END; % 102 %A11298200
BEGIN PUTADR(452,25); PUTADR(440,27); PUTADR(449,28) END; % 106 %A11298300
BEGIN PUTADR(452,25); GT1 ~ GNATP(8) END; % 124 %A11298400
; % 65 %A11298500
END; END; %A11298600
END OF GNATP; %A11298700
% %A11298800
REAL PROCEDURE GNATI(R); VALUE R; REAL R; %A11298900
BEGIN %A11298925
IF (R = 5 OR R = 27) AND LISTOG THEN %A11298950
WRITE(LINE,<"WARNING: IMPLICIT TRANSFER ENACTED">); %A11298960
IF DPI[GNATI ~ R ~ R + 50] = 0 THEN BEGIN %A11299000
DEFINE STBLK = #; % CONVERT PROCEDURE INTO BLOCK %B11299100
DPI[R] ~ R; %A11299200
CASE R - 50 OF BEGIN %A11299300
R ~ GENLINK; %0 %A11299400
R ~ STRINGPRINT; % 1 %A11299500
R ~ GENLINK; % 2 %A11299600
R ~ STRINGPRINT; % 3 %A11299700
BEGIN R~LNKA; R ~PTABLE; R~INSTR; R~GENLINK END; %4 %A11299800
R ~ ERRPRO; % 5 %A11299900
BEGIN R ~ OUTSTR; R ~ SYMFIX END; % 6 %A11300000
R ~ TERPRIN; % 7 %A11300100
R ~ RITELINE; % 8 %A11300200
; % 9 %A11300300
BEGIN R ~ DXP; R ~ DLOG END; % 10 %A11300400
BEGIN R ~ DBLFACT; R ~ DCOS; R ~ DSIN; R ~ DSQRT; %A11300500
R ~ DATN2 END ; % 11 %A11300600
BEGIN R ~ DBLPRINT; R ~ CHARPRINT END; % 12 %A11300700
BEGIN R ~ NTSER; R ~ STRINGPRINT END; % 13 %A11300800
; % 14 %A11300900
BEGIN R ~ LNKA; R ~ ERRPRO; %A11301000
IF RECLAIMTOG THEN BEGIN R~MARKER;R~COLLECT END END; %15 %A11301100
R ~ GENLINK; % 16 %A11301200
R ~ LNKA; % 17 %A11301300
BEGIN R ~ LNKA; R ~ PTABLE END; % 18 %A11301400
R ~ MRK; % 19 %A11301500
BEGIN R ~ MARKD; R ~ MARKOB END; % 20 %A11301600
R ~ MRK; % 21 %A11301700
BEGIN R ~ LNKA; R ~ SYMEQ END; %A11301800
BEGIN R~LNKA; R~PTABLE; R~INSTR; R~GENLINK; END; %23 %A11301900
BEGIN R ~ SYMPRINT; R ~ BOOPRINT END; % 24 %A11302000
BEGIN R ~ SYMPRINT; R ~ ALFPRINT END; %25 %A11302100
R ~ LNKA; % 26 %A11302200
R ~ GENLINK; % 27 %A11302300
R ~ OUTSTR; % 28 %A11302400
BEGIN R ~ GNAT(429); R~ GNAT(551); R ~ CABS; R ~ GNAT(EXPI); %A11302500
R ~ GNAT(COSI); %A11302600
R ~ GNAT(SINI); R ~ GNAT(LOGI); %A11302700
R ~ GNAT(XTOTHEI) END; % 29 %A11302800
BEGIN R ~ CHARPRINT; R ~ ARITHPRINT END; % 30 %A11302900
R ~ LNKA; % 31 %A11303000
R ~ RND; % 32 %A11303100
BEGIN R ~ RANDNO; R ~ LENGTHV END; % 33 %A11303200
R ~ READSYM; % 34 %A11303300
BEGIN R ~ READCON; R ~ NTA END; % 35 %A11303400
BEGIN R ~ SCANR; R ~ ATCON; R ~ MKATM END; % 36 %A11303500
BEGIN R ~ READCON; R ~ TERPRIN; R ~ CHARPRINT END; % 37 %A11303600
R ~ READ1; % 38 %A11303700
BEGIN R ~ ERRPRO; R ~ SYMSTACKA END; %A11303800
BEGIN R ~ TERPRIN; R ~ READCON END; % 40 %A11303900
; % 41 %A11304000
IF RECLAIMTOG THEN %A11304050
BEGIN R ~ MARKOB; R ~ COLLECT END; % 42 %A11304100
BEGIN R ~ LNKA; R ~ PTABLE END; % 43 %A11304200
R ~ LNKA; % 44 %A11304300
; % 45 %A11304400
R ~ INSTR; % 46 %A11304500
R ~ RITELINE; % 47 %A11304600
BEGIN R ~ OUTSTR; R ~ TERPRIN END; % 48 %A11304700
R ~ SYMEQA; % 49 %A11304800
R ~ LNKA; % 50 %A11304900
R ~ LNKA; % 51 %A11305000
BEGIN R ~ ARITHPRINT; R ~ CHARPRINT; %A11305100
R~ SYMFIX; R ~ STRINGPRINT END; % 52 %A11305200
R ~ SPACEPRINT; % 53 %A11305300
; % 54 %A11305400
END; %A11305500
END; %A11305550
END OF GNATI; %A11305600
% %A11305700
REAL PROCEDURE GNATR(T); VALUE T; REAL T; %A11305800
IF (GNATR ~ RECARRAY[T])<0 THEN %A11305900
BEGIN %A11306000
REAL S,R,J,K,B; %A11306100
REAL V; INTEGER P; %A11306200
RECARRAY[T]~ ABS(T ~ RECARRAY[T]); %A11306300
R ~ TAKE(J ~ GIT(T)); %A11306400
S ~ 0; %A11306450
FOR K ~ 1 STEP 1 UNTIL R DO BEGIN %A11306500
IF P ~ TAKE(B ~ TAKE(K+J)).ADDRESS = 0 THEN %A11306600
BEGIN Q ~ ACCUM[1]; ACCUM[1] ~ TAKE(B+1); %A11306700
FLAG(627); ERRORTOG ~ TRUE; ACCUM[1]~ Q END ELSE %A11306800
BEGIN V ~ TAKE(GIT(B)); %A11306900
IF P=3 THEN P ~((V.[22:13]+V.[35:13]+7) DIV 8)+ V.[8:7] ELSE %A11307000
P ~ V.[15:7] + 1; %A11307100
S ~ MAX(S,P) END END; %A11307200
IF TAKE(GIT(T.[22:13])).[16:10] < S THEN FLAG(659);% %A11307300
END OF GNATR; %A11307400
% %A11307500
% %A11307600
% %A11307700
PROCEDURE FIELDGEN; %A11307800
BEGIN REAL EL,G,K; LABEL EXIT,NEXT; INTEGER T1,T2; %A11307900
REAL T; %A11308000
IF SPECTOG THEN BEGIN ERR(628); GO EXIT END; %A11308100
IF G ~ GTA1[J ~J-1]=0 THEN G ~ REALV ELSE BEGIN %A11308200
IF G < STRINGV OR G = DOUBLEV OR (G{FIELDV AND G>INTV) THEN %A11308300
BEGIN ERR(629); GO EXIT END;% %A11308400
IF G = SYMV AND RECLAIMTOG THEN %A11308500
FLAG (629); %A11308600
CHKSOB; END; %A11308700
I ~ I - 1; %A11308800
NEXT: IF STEPI=FIELDID THEN BEGIN %A11308900
IF(EL ~ELBAT[I]).ADDRESS!0 AND EL.LVL= LEVEL THEN BEGIN %A11309000
ERR(630); GO EXIT END; %A11309100
T ~ GIT(EL); STEPIT; END ELSE BEGIN %A11309200
STOPENTRY ~ STOPGSP ~ TRUE; ENTRY(FIELDID); EL~ LASTINFO; %A11309300
STOPENTRY ~ STOPGSP ~ FALSE; T ~ NEXTINFO; PUTNBUMP(0); %A11309400
END; PUT(TAKE(EL)& G[16:37:11],EL); EL~0; %A11309500
IF ELCLASS = LEFTPAREN THEN BEGIN EL ~ GETLIT(127); %A11309600
IF ELCLASS=COMMA THEN K ~ GETLIT(127) ELSE K ~ EL; %A11309700
EL ~ 0&EL[8:41:7]&K[15:41:7]&REAL(EL!K)[1:47:1]; %A11309800
IF ELCLASS!RTPAREN THEN BEGIN ERR(104); GO EXIT END; STEPIT END; %A11309900
T1 ~ T2 ~ 0; %A11310000
IF G } STRINGV THEN BEGIN% %A11310100
IF ELCLASS= LFTBRKET THEN BEGIN %A11310200
T1 ~ GETLIT(IF G=STRINGV THEN 7 ELSE 47); %A11310300
IF ELCLASS!COLON THEN BEGIN ERR(631); GO EXIT END; %A11310400
T2 ~ GETLIT(IF G=STRINGV THEN 8183 ELSE 47); %A11310500
IF G=RECORDV OR G=SYMV THEN IF T2<15 THEN BEGIN ERR(632); GO EXIT END;%A11310600
IF ELCLASS!RTBRKET THEN BEGIN ERR(607); GO EXIT END; %A11310700
IF (IF G=STRINGV THEN 8184 ELSE 48)<T1+T2 THEN BEGIN %A11310800
ERR(629); GO EXIT END; %A11310900
IF G=STRINGV THEN STRINGMAX ~ MAX(STRINGMAX, T2); %A11311000
STEPIT END ELSE BEGIN %A11311100
IF G= STRINGV THEN BEGIN ERR(629); GO EXIT END; END; %A11311200
EL ~ EL&T1[22:35:13]&T2[35:35:13] END; %A11311300
PUT(EL,T); %A11311400
IF EL <0 THEN IF G{ DOUBLEV THEN BEGIN ERR(629); GO EXIT END; %A11311500
IF ELCLASS=COMMA THEN GO TO NEXT; %A11311600
EXIT: END FIELDGEN; %A11311700
% %A11311800
PROCEDURE RECORDGEN; %A11311900
BEGIN REAL SAVEN,IDCOUNT,FLD,T,SAVE2; %A11312000
LABEL NEXT,EXIT; %A11312100
DEFINE RECT = RECORDLINK#; %A11312200
% %A11312300
PROCEDURE FIELDLIST(SAVEN,FC); VALUE SAVEN,FC; REAL SAVEN,FC; %A11312400
BEGIN REAL T,R,S; %A11312500
IF STEPI=FIELDID THEN BEGIN T ~ ELBAT[I].LINK; STEPIT END ELSE %A11312600
BEGIN STOPENTRY~ STOPGSP ~ TRUE; ENTRY(FIELDID); %A11312700
STOPENTRY~ STOPGSP ~ FALSE; T ~ LASTINFO; %A11312800
PUTNBUMP(0); END; %A11312900
IF ELCLASS=COMMA THEN FIELDLIST(SAVEN,FC+1) ELSE %A11313000
IF ELCLASS=RTPAREN THEN BEGIN %A11313100
PUT(TAKE(SAVEN)&(NEXTINFO-SAVEN)[27:40:8],SAVEN); %A11313200
PUTNBUMP(FC); GT4~FC+1; NEXTINFO~NEXTINFO+FC END %A11313300
ELSE ERR(104); %A11313400
PUT(T,SAVEN~NEXTINFO+FC-GT4); %A11313500
END FIELDLIST; %A11313600
REAL P,R; %A11313700
I ~ I - 1; %A11313800
CHKSOB; NEXT: STEPIT; %A11313900
STOPENTRY ~ STOPGSP ~ TRUE; ENTRY(DECLARATORS); %A11314000
STOPENTRY ~ STOPGSP ~ FALSE; SAVEN ~ LASTINFO; %A11314100
IF RECORDLINK =60 THEN FLAG(633) ELSE RECT ~ RECT+1; %A11314200
IF ELCLASS=FILEID THEN %A11314300
IF TAKE((P~ELBAT[I]).LINK+1).[2:2]>0 THEN BEGIN %A11314400
IF P.LVL! LEVEL THEN FLAG(655); STEPIT END ELSE %A11314500
BEGIN P~SAVEN; FLAG(656) END ELSE %A11314600
BEGIN P~SAVEN; FLAG(657) END; %A11314700
IF ELCLASS!LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11314800
FIELDLIST(SAVEN,1); %A11314900
MOREWORDS ~2; %A11315000
RECARRAY[RECT]:=(-SAVEN)&P[22:35:13]&GETSPACE(FALSE,SAVEN +1) %T9311315100
[11:37:11]&(R:=TAKE(P:=GIT(P)).[2:5]+1)[6:43:5];MOREWORDS:=0; %T9311315200
PUT(TAKE(P)&R[2:43:5],P); IF R > 31 THEN FLAG(658); %A11315300
PUT(TAKE(SAVEN)&RECT[16:37:11] ,SAVEN); %A11315400
IF STEPI = COMMA THEN GO NEXT; %A11315500
EXIT: END OF RECORDGEN; %A11315600
% %A11315700
REAL PROCEDURE GETSTRINGLENGTH(MAIN,LS); VALUE MAIN,LS; REAL MAIN,LS; %A11315800
BEGIN REAL LG,N; INTEGER T; %A11315900
INTEGER S; %A11316000
LABEL EXIT,NEXT; %A11316100
IF STEPI!LEFTPAREN THEN BEGIN ERR(105); GO EXIT END; %A11316200
NEXT: IF STEPI =LITNO OR ELCLASS=NONLITNO THEN T ~ C ELSE %A11316300
BEGIN STOPENTRY ~ STOPGSP~ TRUE; ENTRY(STRINGID); %A11316400
STOPENTRY ~ STOPGSP ~ FALSE; N ~ NEXTINFO ~ NEXTINFO + 1; %A11316500
I~I-1; T~ GETSTRINGLENGTH(MAIN,LS); PUT((-MAIN)&LS[22:35:13] %A11316600
& T[9:35:13],N-1); END; %A11316700
LS ~ LS + T; %A11316800
S ~ S + T; %A11316900
IF STEPI=COMMA THEN GO NEXT; %A11317000
IF ELCLASS!RTPAREN THEN ERR(104) ELSE %A11317100
IF GETSTRINGLENGTH ~ T ~ S < 1 OR S > 8184 THEN ERR(634); %A11317200
EXIT: STRINGMAX ~ MAX(STRINGMAX,T) END; %A11317300
% %A11317400
BOOLEAN PROCEDURE STRINGEN; %A11317500
BEGIN INTEGER T,K; BOOLEAN RTOG; REAL R; LABEL EXIT; %A11317600
REAL N; %A11317700
REAL SAVEINFO, SAVE2; %A11317800
BOOLEAN STOG; %A11317900
LABEL NEXT; IF NOT SPECTOG THEN BEGIN %A11318000
IF P2 ~ GTA1[J-1]=OWNV THEN J~J-1; %A11318100
IF P3 ~ GTA1[J-1]=SAVEV THEN J~J-1; END; CHKSOB; NEXT: %A11318200
SAVEINFO ~ NEXTINFO; ENTRY(STRINGID); IF SPECTOG THEN GO EXIT; %A11318300
N ~ GTA1[0]; %A11318400
SAVE2 ~ NEXTINFO ~ NEXTINFO + 1; I ~ I-1; %A11318500
T ~ GETSTRINGLENGTH(IF J=1 THEN SAVEINFO ELSE 0,0); %A11318600
PUT(T,SAVE2-1); %A11318700
IF RTOG ~ T>7 THEN BEGIN JUMPCHKX; EMITO(MKS) END; %A11318800
DO BEGIN R ~ TAKE(SAVEINFO); K ~ R.INCR; %A11318900
R.INCR ~ SAVE2 - SAVEINFO - 1; PUT(R,SAVEINFO); IF RTOG THEN %A11319000
IF R.CLASS=STRINGID THEN IF P2 THEN BEGIN EMITL(R.ADDRESS); %A11319100
EMITN(10) END ELSE EMITN(R.ADDRESS); %A11319200
SAVEINFO ~ SAVEINFO + K END UNTIL SAVE2-1=SAVEINFO; %A11319300
IF RTOG THEN BEGIN IF P2 THEN EMIT(0); EMITL(T~(T+7)DIV 8); %A11319400
EMITL(1); EMITL(N); EMITL(REAL(P3)+2|REAL(P2)); %A11319500
EMITV(5) END; %A11319600
IF RTOG THEN NOOFARRAYS ~ NOOFARRAYS + GTA1[0]; %A11319700
STOG ~ STOG OR RTOG; %A11319800
IF STEPI=COMMA THEN BEGIN STEPIT; GO TO NEXT END; %A11319900
STRINGEN ~ STOG; EXIT: %A11320000
END OF STRINGEN; %A11320100
% %A11320200
%A11320300
PROCEDURE EMITNONX; %A11320400
BEGIN REAL T,R,LO,A; BOOLEAN LSTO; %A11320500
ARRAY TEDOC[0:7,0:127], PA[0:56]; %A11320600
STREAM PROCEDURE WRTINTRSC(SGNO,ALFA,PRT,FIL); %A11320700
VALUE SGNO,PRT; %A11320800
BEGIN LOCAL T; %A11320900
DI ~ LOC T; SI ~ ALFA; %A11321000
DI ~ DI + 7; DS ~ CHR; %A11321100
DI ~ FIL; DS ~ 8 LIT " "; %A11321200
SI ~ FIL; DS ~ 14 WDS; %A11321300
DI ~ FIL; DI ~ DI + 6; %A11321400
SI ~ ALFA; SI ~ SI + 1; %A11321500
DS ~ T CHR; %A11321600
DS ~ LIT ":"; DI ~ FIL; DI ~ DI + 24; % %T0711321650
DS ~ 12 LIT " SEGMENT = "; % %T0711321700
SI ~ LOC SGNO; DS ~ 4 DEC; %A11321800
DS ~ 8 LIT "; PRT = "; % %T0711321900
SI ~ LOC PRT; SI ~ SI + 6; %A11322000
4(DS ~ 3 RESET; 3(IF SB THEN DS ~ SET ELSE DS ~ RESET; %A11322100
SKIP SB)); %A11322200
END; %A11322300
DEFINE %A11322400
% %A11322500
P2 = 125#, % FREELIST %A11322600
P3 = 126#, % LNKROW %A11322700
P4 = 127#; % LNKCOL %A11322800
DEFINE %A11322900
MARK = MRK#, %A11323000
FM1 = 897#, %A11323100
FM2 = 898#, %A11323200
FM3 = 899#, %A11323300
FM4 = 900#, %A11323400
FM5 = 901#, %A11323500
FM6 = 902#, %A11323600
FM7 = 903#, %A11323700
FM8 = 904#, %A11323800
FM9 = 905#, %A11323900
FP1 = 513#, %A11324000
FP2 = 514#, %A11324100
FP3 = 515#, %A11324200
FP4 = 516#, %A11324300
FP5 = 517#, %A11324400
FP6 = 518#, %A11324500
FP7 = 519#, %A11324600
FP8 = 520#, %A11324700
FP9 = 521#; %A11324800
PROCEDURE CALLRITE; FORWARD; %A11324900
PROCEDURE PRINCH(X); VALUE X; REAL X; %A11325000
BEGIN EMITO(MKS); EMITL(X); EMITV(CHARPRINT); END; %A11325100
PROCEDURE CHKFIN; %A11325200
BEGIN REAL T; %A11325300
EMITV(CP); EMITO(ADD); %A11325400
EMITPAIR(CP,ISN); EMITV(RMARG); EMITO(GEQ); %A11325500
T ~ BUMPL; %A11325600
CALLRITE; %A11325700
EMITB(BFC,T,L); %A11325800
END OF CHKFIN; %A11325900
PROCEDURE LODSTR; %A11326000
BEGIN %A11326100
EMITV(CP); EMITL(7); %A11326200
EMITO(LND); %A11326300
EMITV(STRP); EMITO(PRTE); EMITO(LOD); %A11326400
EMITV(CP); EMITL(8); EMITO(IDV); %A11326500
EMITO(CDC); EMITO(ECM); STREAMTOG ~ TRUE; %A11326600
EMITC(2,CRF); EMITC(0,SFD); %A11326700
END; %A11326800
PROCEDURE CALLRITE; %A11326900
BEGIN EMITO(MKS); EMITV(FILPRO); %A11327000
EMITO(PRTE); EMITO(LOD); EMITV(RITELINE); END; %A11327100
PROCEDURE EMITRD(RD,LG,STA,LAB); VALUE RD,LG,STA,LAB; %A11327200
BOOLEAN RD; REAL LG,STA,LAB; %A11327300
BEGIN REAL T; %A11327400
DEFINE BV = RD#; %A11327500
EMITO(MKS); %A11327600
EMITL(GNAT(POWERSOFTEN)); %A11327700
EMITO(LOD); EMITL(5); EMITN(FM1); % FILE %A11327800
EMIT(0); EMITL(1 + REAL(BV)); EMIT(0); %A11327900
EMITV(LG); EMITV(STA); %A11328000
EMITO(PRTE); EMITO(LOD); %A11328100
IF BV THEN BEGIN EMITL(LAB); EMITO(MKS); %A11328200
EMITN(512); EMITV(513); %A11328300
EMITV(GNAT(GOTOSOLVER)); %A11328400
END; %A11328500
FOR T~1 + REAL(BV) STEP 1 UNTIL 5 DO EMIT(0); %A11328600
EMITV(12 + REAL(BV)); %A11328700
END OF EMITRD; %A11328800
PROCEDURE SETBIT; %A11328900
BEGIN EMITO(MKS); EMIT(0); EMITO(ECM); STREAMTOG ~ TRUE; %A11329000
EMITC(3,RDA); EMITC(1,BIS); EMITC(1,0); STREAMTOG ~ FALSE END; %A11329100
PROCEDURE EMITADDPROP; %A11329200
BEGIN REAL T; %A11329300
EMIT(0); EMITV(FM4); %A11329400
GETCONTENTS(0,TRUE); EMITO(DUP); %A11329500
EMITO(LOD); %A11329600
EMITL(2); EMITDIAL(DIA,46); %A11329700
EMITDIAL(DIB,1); %A11329800
EMITFC(FCE,2); EMITO(LNG); %A11329900
EMITPAIR(1,BFC); EMITO(XIT); %A11330000
EMITO(DUP); EMIT(0); %A11330100
EMITO(XCH); EMITO(CTC); %A11330200
EMITV(FM3); %A11330300
EMITO(BFW); %A11330400
T ~ L ~ L + 4; %A11330500
EMITL(3); EMITD(46,2,2); %A11330600
EMITV(FM1); EMITD(19,4,29); %A11330700
EMITPAIR(10,BFW); %A11330800
EMITB(BFW,T,L); EMITL(1); %A11330900
EMITD(46,2,2); %A11331000
EMITB(BFW,T-2,L); %A11331100
EMITV(FM1); EMITO(CTF); %A11331200
EMITV(FM2); EMITD(33,3,15); %A11331300
GENSYMLINK; EMITO(CTC); %A11331400
EMITO(XCH); EMITO(STD); %A11331500
EMITO(XIT); %A11331600
END OF EMITADDPROP; %A11331700
PROCEDURE EMITALFPRINT; %A11331800
BEGIN %A11331900
EMIT(0); %A11332000
EMITV(OUTOG); EMITPAIR(1,BFC); EMITO(XIT); %A11332100
EMIT(0); EMITL(8); EMIT(0); EMITO(MKS); %A11332200
EMITV(FM1); EMITO(ECM); %A11332300
STREAMTOG ~ TRUE; %A11332400
EMITC(1,SES); EMITC(0,SEC); %A11332500
EMITC(7,BNS); EMITC(0,TEQ); %A11332600
EMITC(3,JNC); EMITC(1,SFS); %A11332700
EMITC(1,INC); EMITC(0,ENS); EMITC(5,STC); %A11332800
EMITC(3,STC); EMITC(1,0); %A11332900
STREAMTOG ~ FALSE; %A11333000
EMITO(SUB); %A11333100
EMITO(DUP); EMITV(CP); EMITO(ADD); %A11333200
EMITV(RMARG); EMITO(GTR); %A11333300
EMITPAIR(2,BFC); EMITO(MKS); EMITV(TERPRIN); %A11333400
EMITO(MKS); EMITV(FM1); LODSTR; %A11333500
EMITC(3,SES); EMITC(6,CRF); %A11333600
EMITC(0,SFS); EMITC(5,CRF); %A11333700
EMITC(0,TRS); EMITC(1,0); %A11333800
STREAMTOG ~ FALSE; %A11333900
EMITV(CP); EMITO(ADD); EMITPAIR(CP,SND); %A11334000
EMITV(RMARG); EMITO(LSS); EMITPAIR(1,BFC); %A11334100
EMITO(XIT); CALLRITE; EMITO(XIT); %A11334200
END OF EMITALFPRINT; %A11334300
PROCEDURE EMITAPPEND; %A11334400
BEGIN REAL T; %A11334500
EMIT(0); %A11334600
EMIT(0); % FP2 %A11334700
EMIT(0); MARKDESC(1); %A11334800
EMITV(FM2); GETCONTENTS(0,FALSE); %A11334900
EMITO(DUP); EMIT(0); %A11335000
EMITO(LSS); %A11335100
T ~ BUMPL; %A11335200
MARKSYMDCR(-3); %A11335300
EMITV(FM1); EMITO(RTN); %A11335400
EMITB(BFC,T,L); %A11335500
T ~ L; %A11335600
EMITL(1); EMITV(FP2); %A11335700
EMITO(ADD); EMITPAIR(FP2,STD); %A11335800
EMITO(DUP); %A11335900
GETCONTENTS(0,FALSE); %A11336000
EMITO(DUP); EMIT(0); %A11336100
EMITO(LSS); %A11336200
EMITB(BBC,BUMPL,T); EMITO(DEL); %A11336300
EMITV(FM1); %A11336400
T ~ L; %A11336500
EMITO(CTC); %A11336600
GENSYMLINK; %A11336700
EMITPAIR(FP3,SND); %A11336800
EMITV(FP2); EMITL(1); EMITO(SUB); %A11336900
EMITPAIR(FP2,SND); EMIT(0); %A11337000
EMITO(EQL); %A11337100
EMITB(BBC,BUMPL,T); %A11337200
MARKSYMDCR(-3); EMITO(RTN); %A11337300
END OF EMITAPPEND; %A11337400
PROCEDURE EMITARITHPRINT(BV); VALUE BV; BOOLEAN BV; %A11337500
BEGIN COMMENT BV IS TRUE IS DOUBLE; %A11337600
EMIT(0); %A11337700
EMITO(MKS); %A11337800
IF BV THEN EMITV(FM3) ELSE EMIT(0); %A11337900
EMITV(FM2); %A11338000
EMITV(IF BV THEN DBLSIG ELSE SNGLSIG); %A11338100
EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11338200
EMITV(NTSER); %A11338300
EMITV(FM1); EMITPAIR(5,BFC); EMITO(MKS); %A11338400
EMITL(1); %A11338500
EMITV(JUNK); %A11338600
EMITO(SUB); %A11338700
EMITV(SPACEPRINT); %A11338800
EMITO(MKS); EMITL(1); EMITV(STRINGPRINT); %A11338900
EMITO(XIT); %A11339000
END OF EMITARITHPRINT; %A11339100
PROCEDURE EMITATCON; %A11339200
BEGIN REAL T,R,S,V; %A11339300
EMIT(0); %A11339400
EMIT(0); EMITV(INSTR); %A11339500
EMITV(COUNTI); EMITL(1); %A11339600
EMITO(LEQ); %A11339700
T ~ BUMPL; %A11339800
EMITI(0,18,6); EMITPAIR(INSYM,STD); %A11339900
EMITL(1); EMITO(RTN); %A11340000
EMITB(BFC,T,L); %A11340100
EMITL(125); %A11340200
EMITO(RDV); EMITV(SYMSTACKA); %A11340300
EMITO(DUP); EMITL(0); EMITO(EQL); %A11340400
EMITPAIR(2,BFC); EMIT(0); EMITO(RTN); %A11340500
S ~ L; %A11340600
EMITO(DUP); GETCONTENTS(0,FALSE); %A11340700
EMITO(DUP); GETCONTENTS(1,FALSE); EMITO(DUP); %A11340800
EMITI(0,1,5); EMITO(DUP); EMITV(COUNTI); %A11340900
EMITO(EQL); %A11341000
T ~ BUMPL; %A11341100
EMITO(DUP); EMITL(7); EMITO(GTR); %A11341200
EMITPAIR(3,BFC); %A11341300
EMITL(4); EMITPAIR(1,BFW); %A11341400
EMITO(DUP); EMIT(0); %A11341500
V ~ L; %A11341600
EMIT(0); EMITO(MKS); EMIT(0); EMITN(INSTR); %A11341700
EMITO(ECM); STREAMTOG ~ TRUE; %A11341800
EMITC(4,CRF); EMITC(0,SFD); %A11341900
EMITC(3,SFD); EMITC(7,SES); %A11342000
EMITC(1,SFS); EMITC(5,CRF); %A11342100
EMITC(0,CNE); EMITC(2,JFC); %A11342200
EMITC(1,SEC); EMITC(3,STC); %A11342300
EMITC(1,0); STREAMTOG ~ FALSE; %A11342400
R ~ BUMPL; %A11342500
EMITO(DEL); EMITO(DEL); %A11342600
EMITB(BFC,T,L); %A11342700
EMITO(DEL); EMITO(DEL); %A11342800
EMITI(0,3,15); EMITO(DUP); %A11342900
EMITL(1); EMITO(LEQ); %A11343000
EMITPAIR(2,BFC); %A11343100
EMIT(0); EMITO(RTN); %A11343200
EMITO(XCH); EMITO(DEL); %A11343300
EMITB(BBW,BUMPL,S); %A11343400
EMITB(BFC,R,L); %A11343500
EMITO(ADD); %A11343600
EMITO(DUP); EMITV(FP5); %A11343700
EMITO(XCH); EMITO(SUB); %A11343800
EMITO(DUP); EMIT(0); %A11343900
EMITO(EQL); %A11344000
EMITPAIR(5,BFC); %A11344100
EMITV(FP2); EMITPAIR(INSYM,STD); %A11344200
EMITL(1); EMITO(RTN); %A11344300
EMITO(DUP); EMITL(7); %A11344400
EMITO(GTR); %A11344500
EMITPAIR(2,BFC); EMITO(DEL); %A11344600
EMITL(4); EMITO(XCH); %A11344700
EMITV(FP4); GETCONTENTS(0,FALSE); %A11344800
EMITPAIR(FP4,STD); %A11344900
EMITB(BBW,BUMPL,V); %A11345000
END OF EMITATCON; %A11345100
PROCEDURE EMITATN; %A11345200
BEGIN %A11345300
EMIT(0); %A11345400
EMIT(0); EMITV(FM2); EMITO(CTC); %A11345500
EMITPAIR(FM2,SND); %A11345600
EMITL(10); EMITO(LSS); %A11345700
EMITPAIR(1,BFC); EMITO(XIT); %A11345800
EMITV(FM2); GETCONTENTS(0,FALSE); %A11345900
EMITO(DUP); EMITI(0,1,2); %A11346000
EMITL(3); EMITO(NEQ); %A11346100
EMITERR(SGNO,L,"11"); %A11346200
GETCONTENTS(0,FALSE); %A11346300
EMITPAIR(FM2,STD); EMITO(XIT); %A11346400
END OF EMITATN; %A11346500
PROCEDURE EMITATSTRV; %A11346600
BEGIN REAL T,R; %A11346700
EMIT(0); %A11346800
EMITV(FM7); EMITL(64); %A11346900
EMITDIAL(DIA,33); EMITDIAL(DIB,33); %A11347000
EMITFC(FCL,15); %A11347100
T ~ BUMPL; %A11347200
EMIT(0); EMITO(XCH); %A11347300
EMITD(42,6,6); EMITPAIR(FM7,STD); %A11347400
EMITL(1); EMITPAIR(FM2,SND); %A11347500
EMITO(RTN); %A11347600
EMITB(BFC,T,L); %A11347700
GETCONTENTS(0,FALSE); %A11347800
EMITL(2); EMITDIAL(DIA,46); %A11347900
EMITDIAL(DIB,1); %A11348000
EMITFC(FCE,2); %A11348100
R ~ BUMPL; %A11348200
EMITO(MKS); EMITV(SYMFIX); %A11348300
EMITO(DEL); EMITV(NSTR); %A11348400
EMITO(DUP); EMITL(7); %A11348500
EMITO(RDV); EMITPAIR(FM2, ISD); %A11348600
EMITO(DUP); EMITL(7); %A11348700
EMITO(IDV); EMITPAIR(FM3,ISD); %A11348800
EMITO(MKS); EMIT(0); %A11348900
EMITN(OUTSTR); EMITO(ECM); %A11349000
STREAMTOG ~ TRUE; %A11349100
EMITC(1,RSA); EMITC(12,SED); %A11349200
EMITC(8,CRF); EMITC(3,BNS); %A11349300
EMITC(1,SFD); EMITC(7,TRS); %A11349400
EMITC(0,ENS); %A11349500
EMITC(1,SFD); %A11349600
EMITC(7,CRF); EMITC(0,TRS); %A11349700
EMITC(1,0); STREAMTOG ~ FALSE; %A11349800
EMITO(RTN); %A11349900
EMITB(BFC,R,L); %A11350000
EMITL(12); %A11350100
EMITB(BBW,BUMPL,T); %A11350200
END OF EMITATSTRV; %A11350300
PROCEDURE EMITBOOPRINT; %A11350400
BEGIN %A11350500
EMIT(0); %A11350600
EMITV(FM1); EMITV(OUTOG); EMITPAIR(1,BFC); EMITO(XIT); %A11350700
EMITPAIR(3,BFC); EMITL(0); %A11350800
EMITPAIR(1,BFW); EMITL(1); %A11350900
EMITO(DUP); EMITL(4); %A11351000
EMITO(ADD); EMITO(DUP); %A11351100
EMITV(CP); EMITO(ADD); %A11351200
EMITV(RMARG); EMITO(GTR); %A11351300
EMITPAIR(2,BFC); %A11351400
EMITO(MKS); EMITV(TERPRIN); %A11351500
EMITO(MKS); LODSTR; %A11351600
EMITC(5,CRF); EMITC(0,JFW); EMITC(5,JFW); %A11351700
EMITC(5,TRP); EMIT(" F"); %A11351800
EMIT("AL"); EMIT("SE"); EMITC(3,JFW); %A11351900
EMITC(4,TRP); EMIT("TR"); EMIT("UE"); %A11352000
EMITC(1,0); STREAMTOG ~ FALSE; %A11352100
EMITV(CP); EMITO(ADD); %A11352200
EMITPAIR(CP,SND); EMITV(RMARG); %A11352300
EMITO(LSS); EMITPAIR(1,BFC); EMITO(XIT); %A11352400
CALLRITE; EMITO(XIT); %A11352500
END OF EMITBOOPRINT; %A11352600
PROCEDURE EMITCHARPRINT; %A11352700
BEGIN REAL T; %A11352800
EMIT(0); EMITV(OUTOG); %A11352900
EMITPAIR(1,BFC); EMITO(XIT); %A11353000
EMITV(CP); EMITL(1); EMITO(ADD); %A11353100
EMITV(RMARG); EMITO(GTR); %A11353200
T ~ BUMPL; %A11353300
CALLRITE; %A11353400
EMITB(BFC,T,L); %A11353500
EMITO(MKS); EMITV(FM1); LODSTR; %A11353600
EMITC(3,SES); EMITC(7,SFS); %A11353700
EMITC(1,TRS); EMITC(1,0); %A11353800
STREAMTOG ~ FALSE; %A11353900
EMITL(1); CHKFIN; %A11354000
EMITO(XIT); %A11354100
END OF EMITCHARPRINT; %A11354200
PROCEDURE EMITCOLLECT; %A11354300
BEGIN %A11354400
REAL L1; %A11354500
REAL L2; %A11354600
DEFINE DOIT = %A11354700
EMITC(1,BIT); EMITC(5,JFC); %A11354800
EMITC(1,BIR); EMITC(7,SFD); %A11354900
EMITC(1,INC); EMITC(8,SFS); %A11355000
EMITC(21,JFW); EMITC(3,STC); %A11355100
EMITC(2,RSA); EMITC(1,TRW); %A11355200
EMITC(2,RDA); EMITC(4,SES); %A11355300
EMITC(1,SFS); EMITC(7,TRS); %A11355400
EMITC(7,SFS); EMITC(1,TRS); %A11355500
EMITC(1,INC); EMITC(3,STC); %A11355600
EMITC(1,RSA); EMITC(1,RDA); %A11356000
EMITC(3,CRF); EMITC(2,BNS); %A11356100
EMITC(8,SFD); EMITC(0,ENS); %A11356200
EMITC(3,CRF); EMITC(2,BNS); %A11356300
EMITC(8,SFS); EMITC(0,ENS)#; %A11356400
DEFINE R = FP2#, C = FP3#, T = FP4#; %A11356500
EMIT(0); %A11356600
EMITV(FREENL); EMITI(0,39,3); % R %A11356700
EMITV(FREENL); EMITI(0,33,6); % C %A11356800
L1 ~L; %A11356900
EMITO(DUP); EMITV(LNKCOL); EMITO(GTR); %A11357000
L2 ~ BUMPL; %A11357100
EMITL(512); EMITPAIR(LNKROW,STD); %A11357200
EMITV(FREEN); EMITL(1); EMITO(ADD); %A11357300
EMITPAIR(FREEN,STD); EMITO(XIT); %A11357400
EMITB(BFC,L2,L); %A11357500
EMITO(DUP); EMITL(8); EMITO(MUL); %A11357600
EMITPAIR(JUNK,ISN); %A11357700
L2 ~ L; %A11357800
EMITO(MKS); %A11357900
EMITV(T); EMITV(R); EMITO(ADD); %A11358000
EMIT(0); EMITN(FREELIST); %A11358100
EMITV(C); EMITN(LNKA); EMITO(LOD); %A11358200
EMITV(R); EMITL(64); EMITO(MUL); %A11358300
EMITO(CDC); EMITO(ECM); %A11358400
STREAMTOG ~ TRUE; %A11358500
EMITC(1,RSA); EMITC(2,BNS); %A11358600
EMITC(32,BNS); DOIT; EMITC(0,ENS); %A11358700
EMITC(0,ENS); %A11358800
EMITC(1,0); STREAMTOG ~ FALSE; %A11358900
EMITV(R); EMITL(1); EMITO(ADD); %A11359700
EMITO(DUP); EMITL(8); EMITO(EQL); %A11359800
EMITPAIR(9,BFC); %A11359900
EMITO(DEL); EMITO(DEL); %A11360000
EMITL(1); EMITO(ADD); %A11360100
EMIT(0); EMITPAIR(R,STD); %A11360150
EMITB(BBW,BUMPL,L1); %A11360200
EMITPAIR(R,STD); %A11360300
EMITB(BBW,BUMPL,L2); %A11360400
END OF EMITCOLLECT; %A11360500
PROCEDURE EMITDBLFACT; %A11360600
BEGIN REAL T,R,S; %A11360700
DEFINE YLO = FM5#, YHI = FM4#, %A11360800
XLO = FM2#, XHI = FM1#, DLN = DLOG#; %A11360900
EMIT(0); %A11361000
EMITV(XLO); EMIT(0); EMITO(EQL); %A11361100
T ~ BUMPL; %A11361200
EMITV(XHI); EMIT(0); EMITO(EQL); %A11361300
R ~ BUMPL; %A11361400
EMIT(0); EMITPAIR(YLO,STD); %A11361500
EMITL(1); EMITPAIR(YHI,STD); EMITO(XIT); %A11361600
EMITB(BFC,R,L); %A11361700
EMITV(XHI); EMITI(0,2,36); %A11361800
EMIT(0); EMITO(EQL); %A11361900
R ~ BUMPL; %A11362000
EMIT(0); EMITV(XHI); EMITO(DUP); EMITO(SSP); %A11362100
EMITPAIR(XHI,STD); EMIT(0); %A11362200
EMITO(LSS); EMITO(DUP); %A11362300
EMITPAIR(2,BFC); EMIT(0); EMITL(1); %A11362400
EMITV(YLO); EMITV(YHI); %A11362500
EMITV(XHI); EMITL(1); EMITO(NEQ); %A11362600
S ~ BUMPL; %A11362700
EMITV(XHI); EMITPAIR(12,BFC); EMITV(FP2); EMITL(1); %A11362800
EMITO(ADD); EMITPAIR(FP2,STD); EMITPAIR(XLO,STD); %A11362900
EMITO(DUP); EMITV(XLO); EMITO(XCH); %A11363000
EMITPAIR(2,BFW); %A11363100
EMITPAIR(XLO,STD); %A11363200
EMITO(DUP); EMITV(XLO); EMITO(XCH); %A11363300
EMITV(XLO); EMITO(ML2); %A11363400
EMITV(XHI); EMITL(2); EMITO(IDV); %A11363500
EMITPAIR(XHI,ISN); EMITL(1); %A11363600
EMITO(EQL); %A11363700
EMITB(BBC,BUMPL,S); %A11363800
EMITB(BFC,S,L); %A11363900
EMITV(FP2); EMIT(0); EMITO(NEQ); %A11364000
S ~ BUMPL; %A11364100
EMITV(FP2); EMITL(1); EMITO(SUB); %A11364200
EMITPAIR(FP2,STD); %A11364300
EMITO(ML2); %A11364400
EMITB(BBW,BUMPL,S-5); %A11364500
EMITB(BFC,S,L); %A11364600
EMITV(FP3); EMITPAIR(1,BFC); EMITO(DV2); %A11364700
S ~ BUMPL; %A11364800
EMITB(BFC,T,L); %A11364900
EMITB(BFC,R,L); %A11365000
EMITO(MKS); %A11365100
EMITO(MKS); %A11365200
EMITV(YLO); EMITV(YHI); %A11365300
EMITV(DLN); EMITV(JUNK); EMITV(XLO); EMITV(XHI); %A11365400
EMITO(ML2); EMITV( DXP); %A11365500
EMITV(JUNK); %A11365600
EMITB(BFW,S,L); %A11365700
EMITPAIR(YHI,STD); EMITPAIR(YLO,STD); %A11365800
EMITO(XIT); %A11365900
END OF EMITDBLFACT; %A11366000
PROCEDURE EMITDBLPLXFACT; %A11366100
BEGIN REAL T; %A11366200
DEFINE XLO = FM2#, XHI = FM1#, REHI = FM4#, %A11366300
RELO = FM5#, IMHI = FM6#, IMLO = FM7#; %A11366400
EMIT(0); %A11366500
EMITV(IMLO); EMIT(0); EMITO(EQL); %A11366600
EMITV(IMHI); EMIT(0); EMITO(EQL); EMITO(LND); %A11366700
EMITV(REHI); EMIT(0); EMITO(GEQ); EMITO(LND); %A11366750
T ~ BUMPL; %A11366800
EMITV(RELO); EMITV(REHI); %A11366900
EMITO(MKS); EMITV(XLO); EMITV(XHI); %A11367000
EMITV(DBLFACT); %A11367100
EMITPAIR(REHI,STD); EMITPAIR(RELO,STD); %A11367200
EMITO(XIT); %A11367300
EMITB(BFC,T,L); %A11367400
EMITO(MKS); %A11367500
EMITV(IMLO); EMITV(IMHI); %A11367600
EMITV(RELO); EMITV(REHI); %A11367700
EMITV(DATN2); %A11367800
EMITV(JUNK); %A11367900
EMITV(XLO); EMITV(XHI); EMITO(ML2); % FP2, FP3 %A11368000
% %A11368100
EMITO(MKS); EMITV(IMLO); EMITV(IMHI); %A11368200
EMITV(IMLO); EMITV(IMHI); EMITO(ML2); %A11368300
EMITV(RELO); EMITV(REHI); %A11368400
EMITV(RELO); EMITV(REHI); %A11368500
EMITO(ML2); EMITO(AD2); %A11368600
EMITV(DSQRT); EMITV(JUNK); EMITO(MKS); %A11368700
EMITV(XLO); EMITV(XHI); EMITV(DBLFACT); %A11368800
EMITPAIR(RELO,STD); EMITO(DUP); %A11368900
EMITV(RELO); EMITO(XCH); %A11369000
EMITV(RELO); %A11369100
EMITO(MKS); EMITV(FP2); %A11369200
EMITV(FP3); EMITV(DCOS); EMITV(JUNK); EMITO(ML2); %A11369300
EMITPAIR(REHI,STD); EMITPAIR(RELO,STD); %A11369400
EMITO(MKS); %A11369500
EMITV(FP2); EMITV(FP3); %A11369600
EMITV(DSIN); EMITV(JUNK); EMITO(ML2); %A11369700
EMITPAIR(IMHI,STD); EMITPAIR(IMLO,STD); %A11369800
EMITO(XIT); %A11369900
END OF EMITDBLPLXFACT; %A11370000
PROCEDURE EMITPLXPRINT(BV); VALUE BV; BOOLEAN BV; %A11370100
BEGIN %A11370200
EMIT(0); %A11370300
EMITO(DUP); EMITV(FM2+REAL(BV)); EMITO(EQL); %A11370400
IF BV THEN BEGIN EMIT(0); %A11370500
EMITV(FM4); EMITO(EQL); %A11370600
EMITO(LND) END; %A11370700
EMITPAIR(5+REAL(BV),BFC); %A11370800
EMITO(MKS); %A11370900
IF BV THEN EMITV(FM2); EMITV(FM1); %A11371000
EMIT(0); %A11371100
EMITV(IF BV THEN DBLPRINT ELSE ARITHPRINT); %A11371200
EMITO(XIT); %A11371300
EMITV(FM1); EMIT(0); EMITO(NEQ); %A11371400
IF BV THEN BEGIN EMITV(FM2); EMIT(0); EMITO(NEQ); EMITO(LOR) %A11371500
END; %A11371600
EMITO(DUP); %A11371700
EMITPAIR(4+REAL(BV),BFC); %A11371800
EMITO(MKS); %A11371900
IF BV THEN EMITV(FM2); EMITV(FM1); %A11372000
EMIT(0); %A11372100
EMITV(IF BV THEN DBLPRINT ELSE ARITHPRINT); %A11372200
EMITV(FM2 + REAL(BV)); %A11372300
% %A11372400
EMIT(0); EMITO(LSS); %A11372500
EMITPAIR(5,BFC); %A11372600
EMITO(MKS); EMITL("-"); EMITV(CHARPRINT); %A11372700
EMITPAIR(6,BFW); EMITV(FP2); %A11372800
EMITPAIR(3,BFC); %A11372900
EMITO(MKS); EMITL("+"); EMITV(CHARPRINT); %A11373000
EMITO(MKS); EMITL(":"); EMITV(CHARPRINT); %A11373100
EMITO(MKS); %A11373200
IF BV THEN EMITV(FM4); %A11373300
EMITV(FM2+REAL(BV)); %A11373400
EMITO(SSP); EMIT(0); %A11373500
EMITV(IF BV THEN DBLPRINT ELSE ARITHPRINT); %A11373600
EMITO(XIT); %A11373700
END OF EMITPLXPRINT; %A11373800
PROCEDURE EMITERRPRO; %A11373900
BEGIN %A11374000
EMITV(BLOCKCTR); %A11374100
EMITL(1); EMITO(ADD); %A11374200
EMITPAIR(BLOCKCTR,SND); %A11374300
EMITO(MKS); EMITV(FM1); EMITV(FM3); EMITV(FM2); %A11374400
EMIT(0); EMITN(OUTSTR); EMITO(ECM); %A11374500
STREAMTOG ~ TRUE; %A11374600
EMITC(10,TRP); EMIT("GT"); EMIT("L "); %A11374700
EMIT("ER"); EMIT("RO"); %A11374800
EMIT("R "); EMITC(4,SES); %A11374900
EMITC(6,SFS); EMITC(2,TRS); %A11375000
EMITC(6,TRP); EMIT(", "); EMIT("S "); %A11375100
EMIT("= "); %A11375200
EMITC(4,OCV); EMITC(6,TRP); EMIT(", "); %A11375300
EMIT("A "); EMIT("= "); EMITC(4,OCV); %A11375400
EMITC(5,TRP); EMIT(" "); EMIT("--"); %A11375500
EMIT(" ~"); EMITC(1,0); STREAMTOG ~ FALSE; %A11375600
EMIT(0); EMITPAIR(OUTSTR,LOD); EMITO(CTC); %A11375700
EMITPAIR(34,COM); %A11375800
END OF EMITERRPRO; %A11375900
PROCEDURE EMITGENLINK; %A11376000
BEGIN REAL A,B,C,D; %A11376100
EMIT(0); %A11376200
EMITL(1); EMITPAIR(GENU,STD); %A11376300
EMITV(GENOK); EMITERR(SGNO,L,"12"); %A11376400
IF SYMSTK THEN BEGIN EMITV(LNKROW); EMITL(1); %A11376410
EMITO(INX); EMITPAIR(LNKROW,SND); %A11376420
GETCONTENTS(0,TRUE); EMITV(FM2); EMITO(XCH); %A11376430
EMITO(STD); EMITV(LNKROW) END ELSE BEGIN %A11376440
EMITV(LNKROW); EMITL(512); EMITO(EQL); %A11376500
A ~ BUMPL; %A11376600
EMITV(LNKCOL); EMITV(COLSET); %A11376700
EMITO(GTR); %A11376800
B ~ BUMPL; %A11376900
EMITV(FREELIST); EMIT(0); EMITO(EQL); %A11377000
C ~ BUMPL; %A11377100
IF RECLAIMTOG THEN BEGIN %A11377200
EMITO(MKS); EMITV(MARKER); EMITO(MKS); EMITV(COLLECT); %A11377300
EMITV(FREELIST); EMIT(0); EMITO(EQL); %A11377400
D ~ BUMPL; END; %A11377500
EMITB(BFC,B,L); %A11377600
EMIT(0); EMITPAIR(LNKROW,STD); %A11377700
EMITV(LNKCOL); EMITL(1); EMITO(ADD); %A11377800
EMITPAIR(LNKCOL,SND); EMITL(64); %A11377900
EMITO(EQL); EMITERR(SGNO,L,"10") ; % %A11378000
EMITB(BFC,A,L); %A11378100
EMITV(LNKCOL); EMITN(LNKA); EMITO(LOD); %A11378200
EMITV(LNKROW); EMITO(CDC); EMITV(FM2); %A11378300
EMITO(XCH); EMITO(STD); EMITV(LNKROW); %A11378400
EMITV(LNKCOL); EMITD(42,33,6); %A11378500
EMITPAIR(FM2,STD); %A11378600
EMITV(LNKROW); EMITL(1); EMITO(ADD); %A11378700
EMITPAIR(LNKROW,STD); EMITO(XIT); %A11378800
EMITB(BFC,C,L); IF RECLAIMTOG THEN EMITB(BFC,D,L); %A11378900
EMITV(FREELIST); %A11379000
EMITO(DUP); %A11379100
GETCONTENTS(0,TRUE); EMITO(DUP); %A11379200
EMITO(LOD); EMITPAIR(FREELIST,STD); %A11379300
EMITV(FM2); EMITO(XCH); EMITO(STD); %A11379400
END; %A11379450
EMITPAIR(FM2,STD); EMITO(XIT); %A11379500
END OF EMITGENLINK; %A11379600
PROCEDURE EMITGENSYM; %A11379700
BEGIN %A11379800
EMIT(0); %A11379900
EMIT(0); EMITO(MKS); EMITV(GENNO); %A11380000
EMITL(1); EMITO(ADD); EMITPAIR(GENNO,SND); %A11380100
EMITO(ECM); STREAMTOG ~ TRUE; %A11380200
EMITC(3,SED); EMITC(1,SES); %A11380300
EMITC(2,TPR); EMIT("4G"); %A11380400
EMITC(3,OCV); EMITC(1,0); %A11380500
STREAMTOG ~ FALSE; %A11380600
GENSYMLINK; %A11380700
IF RECLAIMTOG THEN BEGIN EMITO(SSN); %A11380800
MARKSYMNCR(1); END; %A11380900
EMIT(0); EMITO(XCH); %A11381000
EMITO(CTF); EMITO(SSN); %A11381100
GENSYMLINK; %A11381200
MARKSYMDCR(-1); %A11381300
EMITO(RTN); %A11381400
END OF EMITGENSYM; %A11381500
PROCEDURE EMITLENGTH; %A11381600
BEGIN REAL T; %A11381700
EMIT(0); %A11381800
EMITV(FM1); %A11381900
EMITI(0,33,15); EMITO(DUP); %A11382000
EMITL(9);EMITO(LEQ); %A11382100
EMITPAIR(2,BFC); EMIT(0); EMITO(RTN); %A11382200
EMITO(DUP); EMITL(64); EMITO(LSS); %A11382300
EMITPAIR(2,BFC); EMITL(1); EMITO(RTN); %A11382400
GETCONTENTS(0,FALSE); EMITL(2); %A11382500
EMITDIAL(DIA,46); EMITDIAL(DIB,1); EMITFC(FCE,2); %A11382600
T ~ BUMPL; %A11382700
GETCONTENTS(1,FALSE); EMITI(0,1,5); %A11382800
EMITO(RTN); %A11382900
EMITB(BFC,T,L); %A11383000
EMITO(DUP); EMIT(0); EMITO(LSS); %A11383100
EMITPAIR(2,BFC); EMIT(0); EMITO(RTN); %A11383200
EMITL(1); %A11383300
T ~ L; %A11383400
EMITO(XCH); %A11383500
GETCONTENTS(0,FALSE); %A11383600
EMITO(DUP); EMIT(0); EMITO(LSS); %A11383700
EMITPAIR(2,BFC); EMITO(XCH); EMITO(RTN); %A11383800
EMITO(XCH); EMITL(1); EMITO(ADD); %A11383900
EMITB(BBW,BUMPL,T); %A11384000
END OF EMITLENGTH; %A11384100
PROCEDURE EMITMARK; %A11384200
BEGIN REAL T,R; %A11384300
EMIT(0); %A11384400
T ~ L; %A11384500
EMITV(FM1); EMITO(DUP); %A11384600
EMITV(FREENL); %A11384700
EMITO(LSS); %A11384800
EMITPAIR(1,BFC); EMITO(XIT); %A11384900
GETCONTENTS(0,TRUE); EMIT(0); %A11385000
EMITO(MKS); EMIT(0); EMITO(ECM); STREAMTOG ~ TRUE; %A11385100
EMITC(4,RSA); EMITC(1,TIB); EMITC(2,JFC); %A11385200
EMITC(1,SEC); EMITC(3,STC); %A11385300
EMITC(1,0); %A11385400
STREAMTOG ~ FALSE; %A11385500
EMITPAIR(1,BFC); EMITO(XIT); %A11385600
EMITO(DUP); EMITO(LOD); EMITO(XCH); %A11385700
SETBIT; %A11385800
% %A11385900
EMITO(DEL); EMITO(DUP); %A11386000
EMITI(0,1,2); EMITO(DUP); EMITO(ADD); EMITO(BFW); %A11386100
R ~ BUMPL; L ~ L + 4; %A11386200
GETCONTENTS(0,TRUE); SETBIT; EMITO(XIT); %A11386300
EMITB(BFW,R,L); R ~ R + 2; %A11386400
EMITO(MKS); EMITV(FP2); EMITI(0,3,15); %A11386500
EMITV(MARK); EMITO(MKS); EMITV(FP2); %A11386600
EMITI(0,18,15); EMITV(MARK); EMITI(0,33,15); %A11386700
EMITB(BBW,BUMPL,T + 1); %A11386800
EMITB(BFW,R,L); R ~ R + 2; %A11386900
EMITI(0,33,15); %A11387000
EMITB(BBW,BUMPL,T+1); %A11387100
EMITB(BFW,R,L); %A11387200
EMITO(DUP); EMITI(0,3,15); %A11387300
EMITPAIR(FM1,STD); EMITO(MKS); %A11387400
EMITV(FP2); EMITI(0,33,15); %A11387500
EMITV(MARK); GETCONTENTS(1,TRUE); %A11387600
EMITO(DUP); EMITO(LOD); %A11387700
EMITO(XCH); SETBIT; EMITO(DEL); %A11387800
EMITO(DUP); EMITI(0,1,5); %A11387900
R ~ L; %A11388000
EMITO(DUP); EMITL(8); %A11388100
EMITO(LSS); EMITPAIR(4,BFC); %A11388200
EMITO(DEL); EMITO(DEL); %A11388300
EMITB(BBW,BUMPL,T); %A11388400
EMITL(4); EMITO(SUB); EMITO(XCH); %A11388500
GETCONTENTS(0,TRUE); EMITO(DUP); EMITO(LOD); %A11388600
EMITO(XCH); SETBIT; EMITO(DEL); %A11388700
EMITO(XCH); %A11388800
EMITB(BBW,BUMPL,R); %A11388900
END OF EMITMARK; %A11389000
PROCEDURE EMITMARKD; %A11389100
BEGIN REAL R,S; EMIT(0); %A11389200
EMITPAIR(FM1,LOD); EMITO(MOP); EMITO(DUP); %A11389300
EMITI(0,33,15); EMITL(3); %A11389400
EMITO(LEQ); EMITPAIR(1,BFC); EMITO(XIT); %A11389500
EMITI(0,8,10); % WORD COUNT FP2 %A11389600
EMIT(0); EMIT(0); % FP3 %A11389700
EMITN(FM1); EMITO(LOD); %A11389800
EMITO(TOP); EMITO(XCH); EMITO(DEL); %A11389900
R ~ BUMPL; %A11390000
EMITO(MKS); EMIT(0); %A11390100
EMITV(FP3); EMITV(FM1); %A11390200
EMITO(CTC); EMITV(MARK); %A11390300
EMITL(1); EMITO(ADD); %A11390400
EMITO(DUP); EMITV(FP2); %A11390500
EMITO(GEQ); %A11390600
EMITB(BBC,BUMPL,R); EMITO(XIT); %A11390700
EMITB(BFC,R, R ~ L); %A11390800
EMITO(MKS); EMITV(FP3); %A11390900
EMITN(FM1); EMITO(LOD); %A11391000
EMITV(MARKD);EMITL(1); %A11391100
EMITO(ADD); EMITO(DUP); %A11391200
EMITV(FP2); EMITO(GEQ); %A11391300
EMITB(BBC,BUMPL,R); %A11391400
EMITO(XIT); %A11391500
END OF EMITMARKD; %A11391600
PROCEDURE EMITMARKER; %A11391700
BEGIN REAL T,R,S; %A11391800
EMIT(0); %A11391900
% %A11392000
EMITO(MKS); EMITV(INSYM); EMITI(0,33,15); EMITV(MARK); %A11392100
EMITO(MKS); EMITV(MARKOB); %A11392200
EMITL(127); % FP2 %A11392400
T ~ L; %A11392500
EMITL(1); EMITO(ADD); EMITO(DUP); %A11392600
EMITV(TABLEMARK ); EMITO(GTR); %A11392700
EMITPAIR(1,BFC); EMITO(XIT); %A11392800
EMITO(DUP); EMITN(SYMSTACKA); %A11392900
EMITO(LOD); %A11393000
EMITO(TOP); %A11393100
R ~ BUMPL; %A11393200
EMITO(DUP); EMITPAIR(0,LSS); %A11393300
S ~ BUMPL; %A11393400
GETCONTENTS(0,TRUE); SETBIT; %A11393500
EMITB(BFC,R,R ~ BUMPL); %A11393600
EMITO(LOD); EMITO(TOP); %A11393700
EMITB(BFC,S,S ~ BUMPL); %A11393800
EMITO(MKS); EMIT(0); EMITV(FP3); EMITO(CTC); EMITV(MARK); %A11393900
EMITPAIR(4,BFW); %A11394000
EMITB(BFC,S,L); %A11394100
EMITO(MKS); EMITPAIR(FP3,LOD); EMITV(MARKD); %A11394200
EMITB(BFC,R,L); %A11394300
EMITO(DEL); %A11394400
EMITB(BBW,BUMPL,T); %A11394500
END OF EMITMARKER; %A11394600
PROCEDURE EMITMARKOB; %A11394700
BEGIN REAL T; %A11394800
EMIT(0); %A11395000
EMIT(0); %A11395300
T ~ L; %A11395400
EMITO(MKS); EMITV(FP2); %A11395500
GETCONTENTS(0,FALSE); EMITI(0,33,15); %A11395600
EMITV(MARK); EMITL(1); EMITO(ADD); %A11395700
EMITO(DUP); EMITL(64); EMITO(GEQ); %A11395800
EMITB(BBC,BUMPL,T); EMITO(DEL); EMIT(0); %A11395900
T ~ L; %A11396000
EMITO(MKS); EMITV(FP2); %A11396100
EMITV(SYMSTACKA); EMITI(0,33,15); %A11396200
EMITV(MARK); %A11396300
EMITL(1); EMITO(ADD); EMITO(DUP); %A11396400
EMITL(125); EMITO(GEQ); %A11396500
EMITB(BBC,BUMPL,T); %A11396600
EMITO(MKS); EMITV(FREELIST); EMITV(MARK); %A11396800
EMITO(XIT); %A11396900
END OF EMITMARKOB; %A11397000
PROCEDURE EMITMEMBER; %A11397100
BEGIN REAL T; %A11397200
EMIT(0); %A11397300
T ~ L; %A11397400
EMITV(FM1); %A11397500
GETCONTENTS(0,FALSE); EMITPAIR(FM1,SND); %A11397600
EMIT(0); EMITO(LSS); %A11397700
EMITPAIR(2,BFC); EMIT(0); EMITO(RTN); %A11397800
EMITV(FM2); EMITV(FM1); %A11397900
EMITI(0,18,15); %A11398000
EMITO(MKS); %A11398100
EMITV(SYMEQ); EMITO(DEL); %A11398200
EMITPAIR(2,BFC); EMITL(1); EMITO(RTN); %A11398300
EMITB(BBW,BUMPL,T); %A11398400
END OF EMITMEMBER; %A11398500
PROCEDURE EMITMKATOM; %A11398600
BEGIN REAL T,R; %A11398700
EMIT(0); %A11398800
EMITV(COUNTI); EMITO(DUP); %A11398900
EMITL(1); EMITO(EQL); %A11399000
T ~ BUMPL; %A11399100
EMIT(0); EMITV(INSTR); %A11399200
EMITI(0,18,6); EMITO(RTN); %A11399300
EMITB(BFC,T,L); EMITO(DUP); %A11399400
EMITL(7); EMITO(GTR); %A11399500
EMITPAIR(4,BFC); %A11399600
EMITL(3); EMITO(LND); EMITL(4); %A11399700
EMITO(ADD); EMITO(DUP); %A11399800
IF RECLAIMTOG THEN EMITL(1); %A11399900
EMIT(0); T ~ L; %A11400000
EMITO(MKS); EMITV(COUNTI); EMITO(DUP); EMITV(FP3); %A11400100
EMITO(SUB); EMITV(FP2); EMIT(0); %A11400200
EMITN(INSTR); EMITO(ECM); STREAMTOG ~ TRUE; %A11400300
EMITC(6,SED); EMITC(4,SES); %A11400400
EMITC(7,SFS); EMITC(1,TRS); %A11400500
EMITC(1,RSA); EMITC(3,CRF); %A11400600
EMITC(0,SFS); EMITC(3,SFS); EMITC(2,CRF); %A11400700
EMITC(0,TRS); EMITC(1,0); %A11400800
STREAMTOG ~ FALSE; %A11400900
GENSYMLINK; %A11401000
IF RECLAIMTOG THEN BEGIN EMITO(DUP); EMITO(SSN); %A11401100
MARKSYMNCR(1); L ~ L-1; EMITO(STD) END; %A11401200
EMITV(FP3); EMITV(COUNTI); %A11401300
EMITO(NEQ); %A11401400
R ~ BUMPL; %A11401500
EMITV(FP3); EMITL(4); EMITPAIR(FP2,SND); %A11401600
EMITO(ADD); EMITPAIR(FP3,STD); %A11401700
IF RECLAIMTOG THEN BEGIN EMITV(FP4); EMITL(1); %A11401800
EMITO(ADD); EMITPAIR(FP4,STD); END; %A11401900
EMITB(BBW,BUMPL,T); %A11402000
EMITB(BFC,R,L); %A11402100
EMIT(0); EMITO(XCH); EMITO(CTF); %A11402200
EMITO(SSN); %A11402300
EMITV(FM1); R ~ BUMPL; %A11402400
EMIT(0); EMITV(INSTR); EMITL(125); EMITO(RDV); %A11402500
EMITN(SYMSTACKA); EMITO(DUP); EMITO(LOD); %A11402600
EMITO(DUP); EMIT(0); EMITO(EQL); %A11402700
EMITPAIR(2,BFC); EMITO(DEL); EMITL(1); %A11402800
EMITV(IF RECLAIMTOG THEN FP5 ELSE FP4); %A11402900
EMITO(XCH); EMITD(33,3,15); %A11403000
EMITB(BFC,R,L); %A11403100
GENSYMLINK; %A11403200
IF RECLAIMTOG THEN BEGIN EMITV(TABLEMARK); %A11403300
EMITV(FP4); EMITO(SUB); %A11403400
EMITPAIR(TABLEMARK,STD); END; %A11403500
EMITV(FM1); EMITPAIR(2,BFC); %A11403600
EMITO(XCH); EMITO(SND); EMITO(RTN) %A11403700
END OF EMITMKATOM; %A11403800
PROCEDURE EMITMONPRO; %A11403900
BEGIN REAL T,R; %A11404000
REAL A1,A2,A3; %A11404100
EMIT(0); %A11404200
EMITL(12); %A11404300
EMITV(OUTOG); EMITPAIR(1,BFC); EMITO(XIT); %A11404400
TRPRI; %A11404500
EMITO(MKS); EMITV(CPM); EMITL(4); EMITO(ADD); %T9311404600
EMITPAIR(CPM,SND); %A11404700
EMITV(RMARG); EMITV(LMARG); EMITO(SUB); %A11404800
EMITO(RDV); EMITPAIR(JUNK,ISN); EMITV(SPACEPRINT); %A11404900
ALFP("CALL "); %A11405000
EMITO(MKS); EMITV(FM2); EMITV(ALFPRINT); %A11405100
TRPRI; %A11405200
EMITV(FM1); EMITO(DUP); %A11405300
EMIT(0); EMITO(EQL); %A11405400
EMITPAIR(1,BFC); EMITO(XIT); %A11405500
EMITO(DUP); EMITO(ADD); %A11405600
EMITL(FM2); EMITO(ADD); % FP3 %A11405700
R ~ L; %A11405800
EMITPAIR(JUNK,ISN); %A11405900
EMITO(MKS); EMITV(CPM); EMITV(RMARG); %A11406000
EMITV(LMARG); EMITO(SUB); EMITO(RDV); %A11406100
EMITPAIR(JUNK,ISN); EMITV(SPACEPRINT); %A11406200
EMITV(FP3); EMITO(LOD); %A11406300
EMITO(NOP); EMITO(LOD); %A11406400
EMITV(FP3); EMITL(1); %A11406500
EMITO(SUB); EMITPAIR(FP3,ISD); %A11406600
EMITV(FP3); EMITO(LOD); %A11406700
EMITO(BFW); %A11406800
T ~ L ~ L + 6; %A11406900
EMITO(MKS); EMITL(12); EMITV(CHARPRINT); A1 ~ BUMPL; %A11407000
EMITB(BFW,T - 4,L); %A11407100
EMITO(MKS); EMITV(FP4); EMIT(0); %A11407200
EMITV(ARITHPRINT); A2 ~ BUMPL; %A11407300
EMITB(BFW,T-2,L); %A11407400
EMITO(MKS); EMITV(FP4); EMITV(BOOPRINT); A3 ~ BUMPL; %A11407500
EMITB(BFW,T,L); %A11407600
EMITO(MKS); EMITV(FP4); EMITV(SYMPRINT); %A11407700
EMITB(BFW,A1,L); EMITB(BFW,A2,L); EMITB(BFW,A3,L); EMITO(DEL); %A11407800
TRPRI; %A11407900
EMITL(1); EMITO(SUB); EMITO(DUP); %A11408000
EMITL(FM2); EMITO(EQL); %A11408100
EMITB(BBC,BUMPL,R); %A11408200
EMITO(XIT); %A11408300
END OF EMITMONPRO; %A11408400
PROCEDURE EMITMONSYM; %A11408500
BEGIN REAL T,R; %A11408600
DEFINE ALF = FM3#, N = FM2#, VAL = FM4#; %A11408700
EMIT(0); %A11408800
EMITV(OUTOG); EMITPAIR(1,BFC); EMITO(XIT); %A11408900
TRPRI; %A11409000
EMITO(MKS); EMITV(CPM); %A11409100
EMITV(RMARG); EMITV(LMARG); %A11409200
EMITO(SUB); EMITO(RDV); %A11409300
EMITPAIR(JUNK,ISN); EMITV(SPACEPRINT); %A11409400
EMITO(MKS); EMITV(ALF); EMITV(ALFPRINT); %A11409500
% %A11409600
EMITV(N); EMIT(0); EMITO(NEQ); %A11409700
T ~ BUMPL; %A11409800
EMITV(N); EMITL(FM4); EMITO(ADD); % FP2 %A11409900
EMITPAIR(JUNK,ISN); %A11410000
PRINCH("["); EMITPAIR(3,BFW); %A11410100
R ~ L; %A11410200
PRINCH(","); EMITO(MKS); EMITV(FP2); EMITO(LOD); %A11410300
EMIT(0); %A11410400
EMITV(ARITHPRINT); EMITL(1); EMITO(SUB); %A11410500
EMITO(DUP); EMITL(FM4); %A11410600
EMITO(EQL); %A11410700
EMITB(BBC,BUMPL,R); %A11410800
PRINCH("]"); %A11410900
EMITB(BFC,T,L); %A11411000
PRINCH(" "); PRINCH("="); PRINCH(" "); %A11411100
EMITO(MKS); EMITV(VAL); %A11411200
EMITV(SYMPRINT); %A11411300
TRPRI; %A11411400
EMITV(CPM); EMITV(FM1); EMITO(SUB); %A11411500
EMITPAIR(CPM,STD); EMITO(XIT); %A11411600
END OF EMITMONSYM; %A11411700
PROCEDURE EMITNCONC; %A11411800
BEGIN REAL T; %A11411900
EMIT(0); EMITV(FM2); %A11412000
GETCONTENTS(0,TRUE); EMITO(DUP); EMITO(LOD); %A11412100
EMITO(DUP); EMIT(0); %A11412200
EMITO(LSS); %A11412300
EMITPAIR(2,BFC); EMITV(FM1); %A11412400
EMITO(RTN); %A11412500
T ~ L; %A11412600
EMITO(DUP); %A11412700
GETCONTENTS(0,TRUE); %A11412800
EMITO(DUP); EMITO(LOD); %A11412900
EMITO(DUP); EMIT(0); %A11413000
EMITO(LSS); %A11413100
EMITPAIR(8,BFC); %A11413200
EMITO(DEL); EMITO(DEL); %A11413300
EMITV(FM1); EMITO(CTC); EMITO(XCH); %A11413400
EMITO(STD); EMITV(FM2); EMITO(RTN); %A11413500
EMITPAIR(FP2,STD); EMITO(XCH); EMITO(DEL); %A11413600
EMITO(XCH); %A11413700
EMITB(BBW,BUMPL,T); %A11413800
END OF EMITNCONC; %A11413900
PROCEDURE EMITNTA; %A11414000
BEGIN %A11414100
EMIT(0); %A11414200
EMITV(FM2); EMITO(DUP); %A11414300
EMIT(0); EMITO(GEQ); EMITO(XCH); %A11414400
EMITL( 9); EMITO(LEQ); EMITO(LND); %A11414500
EMITPAIR(11,BFC); %A11414600
EMITV(FM2); EMITO(DUP); %A11414700
EMITPAIR(JUNK,ISN); EMITO(EQL); %A11414800
EMITPAIR(4,BFC); %A11414900
EMITV(JUNK); EMITPAIR(FM2,STD); EMITO(XIT); %A11415000
EMITV(FM2); %A11415100
GENSYMLINK; EMITL(3); %A11415200
EMITD(46,1,2); %A11415300
MARKSYMNCR(1); %A11415400
GENSYMLINK; EMITPAIR(FM2,STD); %A11415500
MARKSYMDCR(-1); EMITO(XIT); %A11415600
END OF EMITNTA; %A11415700
PROCEDURE EMITNTS; %A11415800
BEGIN REAL A,L1,L2; %A11415900
REAL B,C; %A11416000
DEFINE %A11416100
XLO = FM4#, %A11416200
XHI = FM3#, %A11416300
N = FM2#, %A11416400
TIN = FM1#, %A11416500
R = FP2#, % DIGITS IN %A11416600
EA = FP3#, %A11416700
SE = FP4#, %A11416800
E = FP5#, %A11416900
J = FP6#, %A11417000
SN = FP7#, %A11417100
T = FP8#, % DIGITS TO BE CONVERTED %A11417200
TN = FP9#; %A11417300
FOR A ~ 1 STEP 1 UNTIL 6 DO EMIT(0); %A11417400
EMITV(XHI); EMIT(0); EMITO(LSS); %A11417500
EMITV(XLO); EMITV(XHI); EMITO(SSP); %A11417600
EMIT(0); %A11417700
EMITL(1); %A11417800
EMITO(ML2); EMITO(XCH); %A11417900
EMITPAIR(XLO,STD); EMITPAIR(XHI,SND); %A11418000
EMITO(DUP); EMITL(6); EMITV(TIN); EMITO(LSS); %A11418100
L1 ~ BUMPL; %A11418200
EMITO(DUP); EMITO(DUP); %A11418300
EMITPAIR(J,ISN); EMITO(EQL); %A11418400
EMIT(0); EMITV(XLO); EMITO(EQL); %A11418500
EMITV(N); EMITL(6); EMITO(LSS); EMITO(LOR); EMITO(LND); %A11418600
L2 ~ BUMPL; %A11418700
EMIT(0); EMITO(MKS); EMIT(0); %A11418800
EMITN(OUTSTR); EMITO(ECM); STREAMTOG ~ TRUE; %A11418900
EMITC(1,SFD); EMITC(6,SES); %A11419000
EMITC(6,OCV); %A11419100
EMITC(1,RDA); EMITC(5,CRF); %A11419200
EMITC(0,JFW); EMITC(2,JFW); %A11419300
EMITC(1,TRP); EMIT("-"); %A11419400
EMITC(1,RSA); EMITC(1,SFS); %A11419500
EMITC(6,SEC); %A11419600
EMITC(5,BNS); %A11419700
EMITC(0,TEQ); EMITC(3,JNC); %A11419800
EMITC(63,INC); EMITC(1,SFS); %A11419900
EMITC(0,ENS); EMITC(3,STC); %A11420000
EMITC(3,CRF); EMITC(0,TRS); %A11420100
EMITC(5,CRF); EMITC(0,INC); %A11420200
EMITC(3,STC); EMITC(1,0); %A11420300
STREAMTOG ~ FALSE; %A11420400
EMITPAIR(NSTR,STD); %A11420500
EMITV(SN); EMITPAIR(JUNK,STD); %A11420600
EMITO(XIT); %A11420700
% %A11420800
EMITB(BFC,L1,L); %A11420900
EMITB(BFC,L2,L); %A11421000
EMITO(DUP); EMITI(0,3,6); %A11421100
EMITO(XCH); EMITD(2,1,1); EMITL(12); EMITO(ADD); %A11421200
EMITV(IF BOOLEAN(L.[46:1]) THEN CPLUS2 ELSE CPLUS1); %A11421300
A ~ BUMPL; %A11421400
EMITWORD(0.90309); %A11421500
EMITB(BFW,A,L); %A11421600
EMITO(MUL); EMITREL(0.5); EMITO(ADD); %A11421700
EMITPAIR(E,ISN); %A11421800
L1 ~L; %A11421900
EMITO(DUP); EMIT(0); EMITO(GEQ); %A11422000
EMITPAIR(4,BFC); %A11422100
EMITV(E); EMITV(TIN); EMITPAIR(5,BFW); %A11422200
EMITL(1); EMITV(E); EMITO(SSP); %A11422300
EMITV(TIN); EMITO(DTV); %A11422400
EMITV(XHI); EMITO(GTR); %A11422500
EMITPAIR(6,BFC); %A11422600
EMITL(1); EMITO(SUB); %A11422700
EMITPAIR(E,ISN); %A11422800
EMITB(BBW,BUMPL,L1); EMITO(DEL); %A11422900
EMITV(N); EMITL(1); EMITO(ADD); %A11422910
EMITO(DUP); EMITL(7); EMITO(GTR); %A11423000
EMITPAIR(2,BFC); EMITO(DEL); EMITL(7); %A11423100
EMITO(DUP); EMITV(E); EMITO(XCH); EMITO(SUB); EMITL(1); %A11423200
EMITO(ADD); EMITO(DUP); %A11423300
EMIT(0); EMITO(GTR); %A11423400
L1 ~ BUMPL; %A11423500
EMITV(XLO); EMITV(XHI); %A11423600
EMITV(TN); EMITL(69); EMITO(ADD); EMITV(TIN); %A11423700
EMITV(TN); EMITV(TIN); EMITO(DV2); %A11423800
EMITB(BFC,L1,L1 ~ BUMPL); %A11423900
EMITV(XLO); EMITV(XHI); %A11424000
EMITV(TN); EMITO(SSP); EMITO(DUP); %A11424100
EMITL(69); EMITO(ADD); EMITV(TIN); %A11424200
EMITO(XCH); EMITV(TIN); EMITO(ML2); %A11424300
EMITB(BFW,L1,L); %A11424400
EMITPAIR(XHI,STD); EMITPAIR(XLO,STD); %A11424500
EMITO(DEL); %A11424600
EMITL(1); EMITO(ADD); %A11424700
EMITV(N); EMITL(2); EMITO(ADD); %A11424800
EMIT(0); %A11424900
L1 ~ L; EMITV(XHI); EMITREL(.5); EMITO(SUB); EMITPAIR(J,ISD); %A11425000
EMITV(R); EMITV(T); EMITO(ADD); EMITV(TN); %A11425100
EMITO(EQL); EMITO(MKS); %A11425200
EMITPAIR(OUTSTR,LOD); EMITL(10); EMITN(OUTSTR); %A11425300
EMITO(ECM); STREAMTOG ~ TRUE; %A11425400
EMITC(13,CRF); EMITC(0,SFD); %A11425500
EMITC(9,SES); EMITC(7,CRF); %A11425600
EMITC(0,OCV); EMITC(4,CRF); %A11425700
EMITC(0,JFW); EMITC(18,JFW); %A11425800
EMITC(2,RDA); EMITC(6,CRF); %A11425900
EMITC(3,BNS); EMITC(1,TRP); %A11426000
EMIT(0); EMITC(0,ENS); %A11426100
EMITC(1,SRD); EMITC(1,TRP); %A11426200
EMIT(5); EMITC(2,RSA); %A11426300
EMITC(1,RDA); EMITC(6,CRF); %A11426400
EMITC(0,FAD); EMITC(1,RSA); %A11426500
EMITC(1,TEQ); EMITC(2,JFC); %A11426600
EMITC(1,SEC); EMITC(5,STC); %A11426700
EMITC(1,0); STREAMTOG ~ FALSE; %A11426800
L2 ~ BUMPL; %A11426900
EMITV(E); EMITO(ADD); %A11427000
EMITPAIR(E,STD); %A11427100
EMITB(BFC,L2,L2 ~ BUMPL); %A11427200
EMITV(R); EMITV(T); EMITO(ADD); %A11427300
EMITPAIR(R,SND); EMITV(TN); %A11427400
EMITO(XCH); EMITO(SUB); EMITO(DUP); %A11427500
EMITL(8); EMITO(GTR); EMITPAIR(2,BFC); %A11427600
% %A11427700
EMITO(DEL); EMITL(8); %A11427800
EMITPAIR(T,SND); EMITV(TIN); EMIT(0); %A11427900
EMITO(XCH); EMITV(XLO); EMITV(XHI); %A11428000
EMIT(0); EMITV(J); EMITO(SB2); EMITO(ML2); %A11428100
EMITPAIR(XHI,STD); EMITPAIR(XLO,STD); %A11428200
EMITB(BBW,BUMPL,L1); %A11428300
EMITB(BFW,L2,L); %A11428400
EMITV(E); EMITL(1); EMITO(ADD); EMITO(DUP); %A11428500
EMITO(DUP); EMIT(0); EMITO(EQL); %A11428600
EMITO(XCH); EMITO(DUP); EMITL(1); EMITO(EQL); %A11428700
EMITO(XCH); EMITO(DUP); EMIT(0); EMITO(GTR); %A11428800
EMITO(XCH); EMITV(N); EMITO(LEQ); EMITO(LND); %A11428900
EMITV(N); EMITL(6); EMITO(LSS); EMITO(LND); %A11429000
EMITO(LOR); EMITO(LOR); %A11429100
L1 ~ BUMPL; %A11429200
EMITPAIR(J,ISN); EMITV(N); EMITO(SUB); %A11429300
EMITPAIR(EA,STD); EMIT(0); EMITPAIR(E,SND); %A11429400
EMITB(BFC,L1,L1 ~ BUMPL); EMITO(DEL); %A11429500
EMITL(1); EMITPAIR(J,STD); %A11429600
EMITV(N); EMITL(1); EMITO(SUB); %A11429700
EMITPAIR(EA,STD); EMITV(E); %A11429800
EMITB(BFW,L1,L); %A11429900
EMITO(DUP); EMITO(SSP); EMITPAIR(E,STD); %A11430000
EMIT(0); EMITO(LSS); EMITPAIR(SE,STD); %A11430100
EMIT(0); EMITO(MKS); %A11430200
EMITV(SN); EMITV(J); EMITV(E); %A11430300
EMITV(SE); EMITV(EA); %A11430400
EMITV(EA); EMIT(0); EMITO(NEQ); %A11430500
EMITV(E); EMIT(0); EMITO(NEQ); %A11430600
EMITV(E); EMITL(10); EMITO(GEQ); %A11430700
EMITL(1); EMITO(ADD); %A11430800
EMITL(10); EMITN(OUTSTR); %A11430900
EMIT(0); EMITN(OUTSTR); %A11431000
EMITO(ECM); STREAMTOG ~ TRUE; %A11431100
EMITC(2,RSA); EMITC(10,CRF); %A11431200
EMITC(0,JFW); EMITC(3,JFW); %A11431300
EMITC(1,TRP); EMIT("-"); %A11431400
EMITC(1,INC); EMITC(0,TEQ); %A11431500
EMITC(1,JFC); EMITC(1,SFS); %A11431600
EMITC(9,CRF); %A11431700
EMITC(0,TRS); EMITC(9,CRF); %A11431800
EMITC(0,INC); EMITC(5,CRF); %A11431900
EMITC(0,JFW); EMITC(23,JFW); %A11432000
EMITC(1,TRP); EMIT("."); %A11432100
EMITC(1,INC); EMITC(6,CRF); %A11432200
EMITC(0,TRS); EMITC(6,CRF); %A11432300
EMITC(0,INC); EMITC(1,RDA); %A11432400
EMITC(1,RSA); EMITC(5,STC); %A11432500
EMITC(5,CRF); EMITC(0,SFS); %A11432600
EMITC(6,CRF); %A11432700
EMITC(5,BNS); EMITC(1,SRS); %A11432800
EMITC(0,TEQ); EMITC(3,JNC); %A11432900
EMITC(63,INC); EMITC(0,ENS); %A11433000
EMITC(63,INC); EMITC(5,STC); %A11433100
EMITC(5,CRF); EMITC(0,SFD); %A11433200
% %A11433300
EMITC(4,CRF); EMITC(0,JFW); %A11433400
EMITC(14,JFW); EMITC(1,TRP); %A11433500
EMIT("@"); EMITC(1,INC); %A11433600
EMITC(7,CRF); %A11433700
EMITC(0,JFW); EMITC(3,JFW); %A11433800
EMITC(1,TRP); EMIT("-"); %A11433900
EMITC(1,INC); %A11434000
EMITC(8,SES); EMITC(3,CRF); %A11434100
EMITC(0,OCV); EMITC(3,CRF); %A11434200
EMITC(0,INC); EMITC(12,STC); %A11434300
EMITC(1,0); STREAMTOG ~ FALSE; %A11434400
EMITPAIR(NSTR,STD); %A11434500
EMITV(SN); EMITPAIR(JUNK,STD); %A11434600
EMITO(XIT); %A11434700
END OF EMITNTS; %A11434800
PROCEDURE EMITPLXFACT; %A11434900
BEGIN REAL T; %A11435000
DEFINE X = FM1#, RE = FM3#, IM = FM4#; %A11435100
EMIT(0); %A11435200
EMITV(IM); EMIT(0); EMITO(EQL); %A11435300
EMITV(RE); EMIT(0); EMITO(GEQ); EMITO(LND); %A11435350
T ~ BUMPL; %A11435400
EMITV(RE); EMITV(X); %A11435500
EMITO(MKS); %A11435600
EMITPAIR(GNAT(LOGI),LOD); EMITPAIR(GNAT(EXPI),LOD); %A11435700
EMITV(GNAT(XTOTHEI)); EMITO(DEL); %A11435800
EMITPAIR(RE,STD); EMITO(XIT); %A11435900
EMITB(BFC,T,L); %A11436000
EMITO(MKS); EMITV(IM); EMITV(RE); EMITV(36); %A11436100
EMITV(X); EMITO(MUL); %A11436200
EMITO(MKS); EMITV(IM); EMITV(RE); EMITV(CABS); %A11436300
EMITV(X); EMITO(MKS); %A11436400
EMITPAIR(GNAT(LOGI),LOD); EMITPAIR(GNAT(EXPI),LOD); %A11436500
EMITV(GNAT(XTOTHEI)); EMITO(DEL); %A11436600
EMITO(DUP); %A11436700
EMITO(MKS); EMITV(FP2); EMITV(GNAT(COSI)); %A11436800
EMITO(MUL); EMITPAIR(RE,STD); %A11436900
EMITO(MKS); EMITV(FP2); EMITV(GNAT(SINI)); %A11437000
EMITO(MUL); EMITPAIR(IM,STD); %A11437100
EMITO(XIT); %A11437200
END OF EMITPLXFACT; %A11437300
PROCEDURE EMITPROP; %A11437400
BEGIN REAL T; %A11437500
REAL R; %A11437600
EMIT(0); %A11437700
EMITV(FM3); %A11437800
GETCONTENTS(0,FALSE); %A11437900
EMITL(2); EMITDIAL(DIA,46); %A11438000
EMITDIAL(DIB,1); EMITFC(FCE,2); %A11438100
EMITO(LNG); EMITPAIR(2,BFC); %A11438200
EMIT(0); EMITO(RTN); %A11438300
T ~ L; %A11438400
EMITPAIR(FM3,SND); %A11438500
GETCONTENTS(0,FALSE); EMITO(DUP); %A11438600
EMIT(0); EMITO(LSS); %A11438700
EMITPAIR(2,BFC); EMIT(0); EMITO(RTN); %A11438800
EMITV(FM1); %A11438900
EMITDIAL(DIB,2); EMITV(FM2); %A11439000
R ~ BUMPL; %A11439100
EMITDIAL(DIA,46); EMITFC(FCE,2); %A11439200
EMITB(BBC,BUMPL,T); %A11439300
EMIT(0); EMITO(XCH); EMITD(4,19,29); %A11439400
EMITO(RTN); %A11439500
EMITB(BFC,R,L); EMITDIAL(DIA,32); EMITFC(FCE,16); %A11439600
EMITB(BBC,BUMPL,T); %A11439700
EMITV(FM2); EMIT(0); EMITO(EQL); %A11439800
R ~ BUMPL; %A11439900
EMITI(0,18,15); %A11440000
EMITO(RTN); %A11440100
EMITB(BFC,R,L); EMITV(FM3); EMITO(RTN); %A11440200
END OF EMITPROP; %A11440300
PROCEDURE EMITRANDNO; %A11440400
BEGIN INTEGER A,B,D,E; %A11440500
DEFINE %A11440600
C = 549755813885#, %A11440700
Z = 8*13#; %A11440800
EMIT(0); EMIT(0); %A11440900
EMITV(RND); %A11441000
EMIT(0); %A11441100
EMITREL(C); %A11441200
EMITO(ML2); EMITO(DUP); %A11441300
EMITREL(.5); %A11441400
EMITO(SUB); %A11441500
EMITPAIR(JUNK,ISN); %A11441600
EMIT(0); EMITO(XCH); %A11441700
EMITO(SB2); EMITPAIR(RND,SND); %A11441800
EMITO(RTN); %A11441900
END OF EMITRANDNO; %A11442000
PROCEDURE EMITRANDOM; %A11442100
BEGIN REAL T,R; %A11442200
REAL P; %A11442300
EMIT(0); %A11442400
EMITV(FM1); GETCONTENTS(0,FALSE); %A11442500
EMIT(0); %A11442600
EMITDIAL(DIA,46); EMITDIAL(DIB,1); %A11442700
EMITFC(FCE,2); %A11442800
T ~ BUMPL; %A11442900
EMITO(MKS); EMITV(RANDNO); EMITO(MKS); %A11443000
EMITV(FM1); EMITV(LENGTHV); %A11443100
EMITO(MUL); EMITREL (.5); EMITO(SUB); %A11443200
EMITPAIR(JUNK,ISN); %A11443300
R ~ L; %A11443400
EMITO(DUP); EMIT(0); EMITO(EQL); %A11443500
P ~ BUMPL; %A11443600
EMITO(XCH); EMITI(0,18,15); EMITO(RTN); %A11443700
EMITB(BFC,P,L); %A11443800
EMITL(1); EMITO(SUB); EMITO(XCH); %A11443900
GETCONTENTS(0,FALSE); EMITO(XCH); %A11444000
EMITB(BBW,BUMPL,R); %A11444100
EMITB(BFC,T,L); %A11444200
EMIT(0); EMITO(RTN); %A11444300
END OF EMITRANDOM; %A11444400
PROCEDURE EMITREAD; %A11444500
BEGIN %A11444600
STREAM PROCEDURE TRA(A,B); VALUE B; %A11444700
BEGIN DI ~ A; DI ~ DI + B; %A11444800
DI ~ DI + B; %A11444900
DS ~ 26 LIT "READ: ILLEGAL LIST SYNTAX " END; %A11445000
REAL T; %A11445100
EMIT(0); %A11445200
EMITO(MKS); EMITV(READ1); EMITO(DUP); %A11445300
EMITL("("); EMITO(NEQ); EMITPAIR(1,BFC); %A11445400
EMITO(RTN); %A11445500
EMITO(MKS); EMITN(FP2); EMITV(READSYM); %A11445600
T ~ BUMPL; %A11445700
EMITO(MKS); EMITPAIR(OUTSTR,LOD); %A11445800
EMITO(ECM); STREAMTOG ~ TRUE; %A11445900
EMITC(26,TRP); %A11446000
TRA(EDOC[L.[36:3],L.[39:7]],L.[46:2]); %A11446100
L ~ L + 13; %A11446200
EMITC(1,0); STREAMTOG ~ FALSE; %A11446300
EMITL(26); EMITPAIR(NSTR,STD); %A11446400
TRPRI; EMITO(MKS); %A11446500
EMIT(0); EMITV(STRINGPRINT); %A11446600
TRPRI; EMITL(12); %A11446700
EMITPAIR(INSYM,STD); %A11446800
EMITV(FP2); EMITO(RTN); %A11446900
EMITB(BFC,T,L); %A11447000
EMITO(MKS); EMITV(READ1); EMITO(DUP); %A11447100
EMITL("$"); EMITO(EQL); %A11447200
EMITPAIR(5,BFC); EMIT(0); %A11447300
EMITPAIR(INSYM,STD); EMITV(FP2); %A11447400
EMITO(RTN); %A11447500
EMITO(DUP); %A11447600
EMITL(")"); EMITO(EQL); %A11447700
EMITB(BBC,BUMPL,T); %A11447800
EMITO(DEL); EMITO(MKS); EMITV(READ1); %A11447900
EMITPAIR(10,BBW); %A11448000
END OF EMITREAD; %A11448100
PROCEDURE EMITREAD1; %A11448200
BEGIN %A11448300
EMIT(0); %A11448400
EMITO(MKS); %A11448500
EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11448600
EMITL(1); EMITV(READCON); %A11448700
EMITO(DUP); EMITO(ADD); %A11448800
EMITO(BFW); %A11448900
EMITPAIR(6,BFW); %A11449000
EMITPAIR(4,BFW); %A11449100
EMITPAIR(4,BFW); %A11449200
EMITV(INSYM); EMITO(RTN); %A11449300
EMITL(12); EMITO(RTN); %A11449400
EMITV(INREAL); EMITO(MKS); EMITV(NTA); EMITO(RTN); %A11449500
END OF EMITREAD1; %A11449600
PROCEDURE EMITREADCON; %A11449700
BEGIN %A11449800
COMMENT RESULTS OF READCON: %A11449900
0 - EOF, %A11450000
1 - NUMBER ERROR, %A11450100
2 - NUMBER, %A11450200
3 - ATOMIC SYMBOL, %A11450300
4 - ALPHA STRING; %A11450400
INTEGER L1,L2,L3,L4,L5,L6,L7; %A11450500
DEFINE TYPE = FP4#, BV = FM1#, TEN = FM2#, %A11450600
FP = FP3#, SN = FP2#, %A11450700
XLO = INDBL#, XHI = INREAL#, %A11450800
CALLSCAN = % %A11450900
EMITO(MKS); EMITN(TYPE); EMITV(STRI); %A11451000
EMITO(PRTE); EMITO(LOD); EMITV(FILPROI); EMITO(PRTE); %A11451100
EMITO(LOD); EMITV(SCANR)#; %A11451200
% SCAN RESULTS: %A11451300
% 0 SPACES, %A11451400
% 1 ALPHA, %A11451500
% 2 NUMBER, %A11451600
% 3 SPECIAL CHARACTER, %A11451700
% 4 EOF %A11451800
EMIT(0); % %A11451900
EMIT(0); % SN %A11452000
EMITL(1); % FP %A11452100
EMIT(0); % TYPE FP4 %A11452200
L1 ~ L; %A11452300
CALLSCAN; EMITO(DUP); EMITO(ADD); %A11452400
EMITO(BFW); %A11452500
EMITB(BBW,BUMPL,L1); %A11452600
L1 ~ L ~ L + 6; %A11452700
EMIT(0); EMITO(RTN); % 4 EOF %A11452800
EMITB(BFW,L1 - 4,L); % 1 ALPHA %A11452900
EMITO(MKS); EMITV(ATCON); %A11453000
EMITPAIR(2,BFC); EMITL(3); EMITO(RTN); % ATOMIC SYM ON OBLIS%A11453100
EMITV(BV); EMITPAIR(7,BFC); %A11453200
EMITO(MKS); EMITL(1); EMITV(MKATM); %A11453300
EMITPAIR(INSYM,STD); EMITL(3); EMITO(RTN); % BV=FALSE NEXT %A11453400
EMITL(4); EMITO(RTN); %A11453500
EMITB(BFW,L1 - 2,L); % 2 NUMBER %A11453600
EMIT(0); EMITPAIR(XLO,SND);EMITPAIR(XHI,SND); % XLO ~ XHI ~ 0 %A11453700
L2 ~ L; %A11453800
EMITO(DUP); EMITV(COUNTI); EMITO(XCH); %A11453900
EMITO(SUB); EMITO(DUP); EMITL(8); %A11454000
EMITO(GTR); EMITPAIR(2,BFC); %A11454100
EMITO(DEL); EMITL(8); EMIT(0); %A11454200
EMITO(MKS); %A11454300
EMIT(0); EMITN(INSTR); %A11454400
EMITO(ECM); STREAMTOG ~ TRUE; %A11454500
EMITC(1,RSA); %A11454600
EMITC(5,CRF); % T %A11454700
EMITC(0,SFS); EMITC(3,SFS); %A11454800
EMITC(3,SED); %A11454900
EMITC(4,CRF); % R %A11455000
EMITC(0,ICV); EMITC(1,0); %A11455100
STREAMTOG ~ FALSE; %A11455200
EMIT(0); EMITO(XCH); EMITV(XLO); %A11455300
EMITV(XHI); EMIT(0); EMITV(FP6); %A11455400
EMITV(TEN); EMITO(ML2); EMITO(AD2); %A11455500
EMITPAIR(XHI,STD); EMITPAIR(XLO,STD); %A11455600
EMITO(ADD); EMITO(DUP); %A11455700
EMITV(COUNTI); EMITO(EQL); %A11455800
EMITB(BBC,BUMPL,L2); %A11455900
EMITO(DEL); %A11456000
EMITI(0,43,3); EMITO(DUP); %A11456100
EMIT(0); EMITO(NEQ); %A11456200
L3 ~ BUMPL; % GO TO FIN %A11456300
EMITO(DUP); EMITL(3); EMITO(GTR); %A11456400
EMITV(CPI); EMITO(ADD); EMITL(1); %A11456500
EMITO(ADD); EMITO(DUP); %A11456600
EMITV(RMARGI); EMITO(GEQ); %A11456700
EMITPAIR(3,BFC); EMITO(DEL); %A11456800
L4 ~ BUMPL; % GO TO FIN %A11456900
EMITPAIR(CPI,STD); EMITO(DUP); %A11457000
EMITL(2); EMITO(EQL); %A11457100
L5 ~ BUMPL; %A11457200
EMITV(FP); %A11457300
L6 ~ BUMPL; %A11457400
EMITO(XCH); EMITO(DEL); %A11457500
EMIT(0); %A11457600
EMITO(XCH); CALLSCAN; %A11457700
EMITO(DEL); EMIT(0); %A11457800
EMITB(BBW,BUMPL,L2); %A11457900
EMITB(BFC,L6,L); %A11458000
EMITV(CPI); EMITL(1); EMITO(SUB); %A11458100
EMITPAIR(CPI,STD); %A11458200
EMITB(BFC,L5,L5 ~ BUMPL); %A11458300
EMITO(DUP); %A11458400
EMITV(FP); EMITPAIR(3,BFC); %A11458500
EMIT(0); EMITPAIR(2,BFW); %A11458600
EMITV(COUNTI); EMITO(SSN); %A11458700
EMITO(XCH); EMITPAIR(FP,STD); %A11458800
L7 ~ BUMPL; % GO TO OLD L8 %A11458900
% FIN: %A11459000
EMITB(BFC,L3,L); %A11459100
EMITB(BFW,L4,L); %A11459200
EMITV(FP); EMITPAIR(2,BFC); %A11459300
L3 ~ BUMPL; % TO OLD L12 %A11459400
% OLD L14: %A11459500
EMITB(BFW,L5,L); %A11459600
EMITO(DEL); %A11459700
EMITL(1); %A11459800
EMITV(COUNTI); %A11459900
L4 ~ BUMPL; % TO OLD L25 %A11460000
% THE FOLLOWING SECTION OF CODE IS FOR THE SPECIAL %A11460100
% CHARACTER CASE %A11460200
EMITB(BFW,L1,L); % SPECIAL CHARACTER %A11460300
EMITO(DUP); EMITL(2); EMITO(LEQ); %A11460400
EMITV(CPI); EMITV(RMARGI); %A11460500
EMITO(EQL); EMITO(LOR); %A11460600
L1 ~ BUMPL; %A11460700
EMIT(0); EMITV(INSTR ); EMITI(0,18,6); %A11460800
EMITPAIR(INSYM,STD); EMITL(3); EMITO(RTN); %A11460900
EMITB(BFC,L1,L); %A11461000
EMITO(DUP); EMITL(3); EMITO(LND); %A11461100
EMITPAIR(SN,SND); EMIT(0); %A11461200
EMITO(NEQ); EMITO(DUP); %A11461300
EMITO(LNG); %A11461400
EMITV(WSIGN); EMITO(LOR); %A11461500
EMITB(BBC,BUMPL,L1); %A11461600
EMITO(XCH); EMITI(0,43,3); EMITO(DUP); %A11461700
EMITL(1); EMITO(EQL); %A11461800
L5 ~ BUMPL; %A11461900
EMITO(DEL); CALLSCAN; EMITO(DEL); %A11462000
EMITB(BBW,BUMPL,L2 - 5); %A11462100
EMITB(BFC,L5,L); %A11462200
EMITO(DUP); EMITL(3); EMITO(GTR); %A11462300
EMITV(CPI); EMITO(ADD); EMITV(FP4); %A11462400
EMITO(ADD); EMITO(DUP); %A11462500
EMITV(RMARGI); EMITO(LSS); %A11462600
EMITB(BBC,BUMPL,L1); %A11462700
EMITPAIR(CPI,STD); EMITO(XCH); EMITO(DEL); %A11462800
EMITO(DUP); EMITL(2);EMITO(EQL); %A11462900
EMITPAIR(7,BFC); EMIT(0); EMITPAIR(XLO,SND); EMITPAIR(XHI,STD); %A11463000
EMITB(BBW,BUMPL,L6); %A11463100
EMITPAIR(FP,SND); %A11463200
EMITL(1); EMITPAIR(XHI,STD); EMIT(0); EMITPAIR(XLO,SND); %A11463300
% OLD L8: %A11463400
EMITB(BFW,L7,L); %A11463500
CALLSCAN; EMITO(DEL); %A11463600
EMITV(COUNTI); EMITL(8); %A11463700
EMITO(GTR); EMITPAIR(2,BFC); %A11463800
EMITL(1); EMITO(RTN); % RETURN IMPROPER NUMBER %A11463900
EMITO(XCH); EMITO(DEL); EMIT(0); %A11464000
EMITV(FP); EMITO(MKS); %A11464100
EMITV(COUNTI); EMIT(0); %A11464200
EMITN(INSTR); EMITO(ECM); %A11464300
STREAMTOG ~ TRUE; %A11464400
EMITC(1,RSA); EMITC(5,SED); %A11464500
EMITC(3,SFS); %A11464600
EMITC(2,CRF); EMITC(0,ICV); %A11464700
EMITC(1,0); STREAMTOG ~ FALSE; %A11464800
EMITD(47,1,1); %A11464900
EMITO(SUB); EMITO(DUP); EMITO(DUP); %A11465000
EMITO(SSP); EMITO(DUP); EMITL(69); %A11465100
EMITO(GEQ); %A11465200
EMITPAIR(2,BFC); EMITL(1); %A11465300
EMITO(RTN); % RETURN IMPROPER NUMBER %A11465400
EMITV(TEN); EMITI(0,3,6); EMITO(XCH); %A11465500
EMITD(1,1,1); %A11465600
EMITV(XHI); EMITI(0,3,6); %A11465700
EMITV(XHI); EMITD(2,1,1); EMITO(ADD); %A11465800
EMITL(12); EMITO(ADD); %A11465900
EMITO(SSP); EMITL(63); %A11466000
EMITO(GTR); EMITPAIR(2,BFC); %A11466100
EMITL(1); EMITO(RTN); % IMPROPER NUMBER - EXP TOO LARGE %A11466200
EMITO(DUP);EMIT(0); %A11466300
EMITO(LSS); EMITO(XCH); EMITO(SSP); %A11466400
% OLD L25: %A11466500
EMITB(BFW,L4,L); %A11466600
EMITV(XLO); EMITV(XHI); %A11466700
EMITV(FP4); EMITPAIR(10,BFC); %A11466800
EMITV(FP5); EMITO(DUP); EMITL(69); EMITO(ADD); %A11466900
EMITV(TEN); EMITO(XCH); EMITV(TEN); EMITO(DV2); %A11467000
EMITPAIR(8,BFW); %A11467100
EMITV(FP5); EMITO(DUP); EMITL(69); EMITO(ADD); %A11467200
EMITV(TEN); EMITO(XCH); EMITV(TEN); EMITO(ML2); %A11467300
EMITPAIR(XHI,STD); %A11467400
EMITPAIR(XLO,STD); %A11467500
EMITB(BFW,L3,L); % OLD L12 %A11467600
EMITV(XHI); EMITV(SN); EMITD(47,1,1); %A11467700
EMITPAIR(XHI,STD); %A11467800
EMITL(2); EMITO(RTN); % RETURN NUMBER RESULT %A11467900
END OF EMITREADCON; %A11468000
PROCEDURE EMITREADN; %A11468100
BEGIN REAL LS,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11; %A11468200
EMIT(0); LS ~ L; %A11468300
EMITO(MKS); %A11468400
EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11468500
EMIT(0); EMITV(READCON); EMITV(FM2); EMITO(ADD); %A11468600
EMITO(DUP); EMITO(ADD); EMITO(BFW); %A11468700
L1 ~ BUMPL; L2 ~ BUMPL; L3 ~ BUMPL; L4 ~ BUMPL; %A11468800
L5 ~ BUMPL; L6 ~ BUMPL; EMITB(BBW,BUMPL,LS); %A11468900
L7 ~ BUMPL; EMITB(BBW,BUMPL,LS); EMITB(BBW,BUMPL,LS); %A11469000
L8 ~ BUMPL; EMITB(BBW,BUMPL,LS); EMITB(BBW,BUMPL,LS); %A11469100
L9 ~ BUMPL; L10 ~ BUMPL; L11~BUMPL;EMITB(BBW,BUMPL,LS); %A11469200
EMITL(1); EMITO(RTN); EMITO(NOP); EMITO(NOP); %A11469300
EMITB(BFW,L9,L); EMITB(BFW,L10,L); EMITPAIR(0,MKS); %A11469400
EMITV(COUNTI); EMITO(DUP); EMITL(7); EMITO(GTR); %A11469500
EMITPAIR(2,BFC); EMITO(DEL); EMITL(7); EMITO(DUP); %A11469600
EMITL(8); EMITO(XCH); EMITO(SUB); EMITPAIR(INSTR,LOD); %A11469700
EMITO(ECM); EMITC(5,SED); EMITC(1,RSA); %A11469800
EMITC(3,SFS); EMITC(2,CRF); EMITC(0,SFD); %A11469900
EMITC(3,CRF); EMITC(0,TRS); EMITC(1,0); %A11470000
EMITV(FM2); EMITL(15); EMITO(EQL); EMITPAIR(3,BFC); %A11470100
EMITPAIR(INREAL,STD); EMIT(0); EMITO(RTN); %A11470200
EMITB(BFW,L3,L); EMITB(BFW,L7,L); %A11470280
EMITV(FM1); EMITPAIR(3,BFC); EMITV(INDBL); %A11470290
EMITPAIR(FM4,STD); EMIT(0); EMITPAIR(INSYM,STD); %A11470300
EMITV(INREAL); EMITO(RTN); %A11470310
EMITB(BFW,L1,L); EMITB(BFW,L2,L); EMITB(BFW,L4,L); %A11470320
EMITB(BFW,L5,L); EMITL(12); EMITPAIR(INSYM,STD); %A11470330
EMITPAIR(0,RTN); %A11470340
EMITB(BFW,L6,L); EMITB(BFW,L8,L); EMITB(BFW,L11,L); %A11470350
EMITO(MKS); EMITL(12); EMITV(CHARPRINT); %A11470360
EMITO(MKS); EMITL(" "); EMITV(CHARPRINT); %A11470370
%T9011470380
EMITO(MKS); EMITV(TERPRIN); EMITB(BBW,BUMPL,LS); %A11470390
END OF EMITREADN; %A11470400
PROCEDURE EMITREADSYM; %A11470500
BEGIN %A11470600
REAL TL,R,S; %A11470700
EMIT(0); %A11470800
EMITL(1); % LT FP2 %A11470900
EMIT(0); %A11471000
EMITO(MKS); EMITV(READ1); %A11471100
EMITO(DUP); EMITL(")"); EMITO(EQL); %A11471200
EMITPAIR(4,BFC); %A11471300
EMIT(0); EMITN(FM1); EMITO(SND); %A11471400
EMITO(RTN); %A11471500
EMITO(DUP); %A11471600
EMITO(DUP); EMITO(DUP); %A11471700
EMITL("$"); EMITO(EQL); EMITO(XCH); %A11471800
EMITL("."); EMITO(EQL); EMITO(LOR); EMITO(XCH); %A11471900
EMITL(","); EMITO(EQL); EMITO(LOR); %A11472000
EMITPAIR(2,BFC); EMITL(1); EMITO(RTN); %A11472100
EMITO(DUP); EMITL("("); EMITO(EQL); %A11472200
EMITPAIR(7,BFC); EMITO(MKS); EMITN(FP4); %A11472300
EMITV(READSYM); EMITPAIR(2,BFC); EMITL(1); EMITO(RTN); %A11472400
MARKSYMNCR(1); EMITD(33,18,15); %A11472500
GENSYMLINK; %A11472600
EMITN(FM1); EMITO(SND); %A11472700
MARKSYMNCR(0); %A11472800
EMITO(MKS); EMITV(READ1); %A11472900
MARKSYMNCR(1); %A11473000
TL ~ L; %A11473100
EMITO(DUP); EMITL(")"); %A11473200
EMITO(EQL); %A11473300
R ~ BUMPL; %A11473400
MARKSYMDCR(-2); %A11473500
EMIT(0); EMITO(RTN); %A11473600
EMITB(BFC,R,L); %A11473700
EMITO(DUP); EMITL("$"); EMITO(EQL); %A11473800
EMITV(FP2); EMITO(LNG); EMITO(LOR); %A11473900
R ~ BUMPL; %A11474000
MARKSYMDCR(-2); EMITL(1); EMITO(RTN); %A11474100
EMITB(BFC,R,L); %A11474200
EMITO(DUP); EMITL(","); EMITO(EQL); %A11474300
EMITPAIR(5,BFC); EMITO(DEL); %A11474400
EMITO(MKS); EMITV(READ1); EMITPAIR(10,BFW); %A11474500
EMITO(DUP); EMITL("."); EMITO(EQL); %A11474600
EMITPAIR(5,BFC); EMIT(0); %A11474700
EMITPAIR(FP2,STD); EMITPAIR(15,BBW); %A11474800
EMITO(DUP); EMITO(DUP); %A11474900
EMITO(DUP); EMITO(DUP); %A11475000
EMITL("$"); EMITO(NEQ); EMITO(XCH); %A11475100
EMITL("."); EMITO(NEQ); EMITO(LND); EMITO(XCH); %A11475200
EMITL(","); EMITO(NEQ); EMITO(LND); EMITO(XCH); %A11475300
EMITL(12); EMITO(NEQ); EMITO(LND); %A11475400
EMITB(BBC,BUMPL,R); %A11475500
EMITO(DUP); EMITL("("); EMITO(EQL); %A11475600
EMITPAIR(6,BFC); % %A11475700
EMITO(MKS); EMITN(FP4);EMITV(READSYM); %A11475800
EMITO(LNG); %A11475900
EMITB(BBC,BUMPL,R); %A11476000
MARKSYMNCR(0); %A11476100
EMITV(FP2); %A11476200
R ~ BUMPL; %A11476300
EMIT(0); EMITO(XCH); %A11476400
EMITD(33,18,15); GENSYMLINK; %A11476500
MARKSYMNCR(0); EMITB(BFC,R,L); %A11476600
EMITV(FP3); GETCONTENTS(0,TRUE); %A11476700
EMITO(DUP); EMITO(LOD); EMITV(FP4); %A11476800
EMITO(CTC); %A11476900
EMITO(XCH); EMITO(STD); %A11477000
EMITO(XCH); EMITO(DEL); EMITO(MKS); %A11477100
EMITV(READ1); MARKSYMNCR(0); %A11477200
EMITB(BBW,BUMPL,TL); %A11477300
END OF EMITREADSYM; %A11477400
PROCEDURE EMITRECALL; %A11477500
BEGIN REAL T,R; %A11477600
EMIT(0); %A11477700
IF RECLAIMTOG THEN BEGIN% %A11477750
EMITV(GENU); %A11477800
EMITERR(SGNO,L,"13");% %A11477900
END; %A11477950
EMITO(MKS); %A11478000
EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11478100
EMITL(5); EMITN(FM1); %A11478200
EMIT(0); EMITL(2); EMIT(0); %A11478300
EMITL(128); %A11478400
EMITPAIR(SYMSTACKA,LOD); %A11478500
FOR T ~ 1 STEP 1 UNTIL 5 DO EMIT(0); %A11478600
EMITV(13); %A11478700
EMITL(P2); EMITV(SYMSTACKA); EMITPAIR(FREELIST,STD); %A11478800
EMITL(P3); EMITV(SYMSTACKA); EMITPAIR(LNKROW,STD); %A11478900
EMITL(P4); EMITV(SYMSTACKA); EMITPAIR(LNKCOL,STD); %A11479000
EMIT(0); %A11479100
T ~ L; %A11479200
EMITO(MKS); %A11479300
EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11479400
EMITL(5); EMITN(FM1); %A11479500
EMIT(0); EMITL(2); EMIT(0); %A11479600
EMITL(512); %A11479700
EMITV(FP2); EMITN(LNKA); EMITO(LOD); %A11479800
FOR R ~ 1 STEP 1 UNTIL 5 DO EMIT(0); %A11479900
EMITV(13); EMITL(1); EMITO(ADD); %A11480000
EMITO(DUP); EMITV(LNKCOL); EMITO(GTR); %A11480100
EMITB(BBC,BUMPL,T); EMITO(XIT); %A11480200
END OF EMITRECALL; %A11480300
PROCEDURE EMITRECLAIMER; %A11480400
BEGIN REAL T,R,S; %A11480500
EMIT(0); EMIT(0); %A11480550
T ~ L; %A11480600
EMITO(MKS); %A11481400
IF DAC[14] = 0 THEN FLAG(668); %A11481410
EMITPAIR(DAC[14],LOD); EMITO(ECM); %A11481420
EMITC(3,CRF); EMITC(0,JFW); %A11481430
EMITC(12,TRP); EMIT(" G"); %A11481440
EMIT("O "); EMIT("AH"); %A11481450
EMIT("EA"); EMIT("D."); %A11481460
EMIT("{!"); EMITC(12,SEC); %A11481470
EMITC(11,JFW); EMITC(17,TRP); EMIT(" "); %A11481480
EMIT("PL"); EMIT("EA"); EMIT("SE"); EMIT(" R"); %A11481490
EMIT("ET"); EMIT("YP"); EMIT("E."); EMIT("{!"); %A11481500
EMITC(17,SEC); EMITC(3,STC); EMITC(1,0); %A11481510
EMITPAIR(CP,STD); EMITO(MKS); EMITV(TERPRIN); %A11481520
IF DAC[4]=0 OR DAC[5]=0 OR DACOMI = 0 THEN FLAG(679); %A11481530
IF R~SFTRC.[37:11]=0 OR S~SFTRC.[26:11]=0 THEN FLAG(671); %A11481535
EMIT(0); EMITPAIR(CPI,STD); EMITL(1); EMITPAIR(DAC[4],STD); %A11481540
EMITO(MKS); EMITV(DACOMI); EMITO(DEL); EMITO(MKS); %A11481545
EMITV(R); EMITV(FM2); EMITV(S); EMITO(EQL); %A11481550
EMITPAIR(1,BFC); EMITO(XIT); EMITO(MKS); EMITV(FM1); %A11481555
EMITPAIR(3,BFC); EMIT(0); EMITPAIR(1,BFW); EMITL(9); %A11481560
EMITB(BBW,BUMPL,T); %A11481565
END OF EMITRECLAIMER; %A11481600
PROCEDURE EMITRECLINK; %A11481700
BEGIN REAL L1,L2,L3,L4,L5,L6; %A11481800
REAL L7;% %A11481850
DEFINE P = FP2#, A = FM1#, AR=FM2#, DF = FM3#, LF = FM4#, %A11481900
P2=FM5#,P1=FM6#, R = FM7#, FL =FM8#,NXT=FM9#,RA=907#, %A11482000
CA = EMITV(A);EMITO(DUP);EMIT(0);EMITO(GTR);EMITO(XCH); %A11482100
EMITL(5);EMITO(LSS);EMITO(LND);EMITPAIR(4,BFC)#, %A11482200
RO = EMITV(R);EMITL(126);EMITO(LND);EMITN(R);EMITO(STD)#, %A11482300
R1 =EMITV(R);EMITL(1);EMITO(LOR);EMITN(R);EMITO(STD)#; %A11482400
% %A11482500
EMIT(0); EMIT(0); EMITV(A); EMITO(DUP); EMITO(ADD); EMITO(BFW); %A11482600
L1 ~ BUMPL; % 0 %A11482700
L2 ~ BUMPL; % 1 %A11482800
L3 ~ BUMPL; % 2 %A11482900
BUMPL; % 3 %A11483000
L4 ~ BUMPL; % 4 %A11483100
EMITV(P1); EMIT(0); EMITO(LSS);% %A11483200
L5 ~ BUMPL; %A11483300
RO; EMITN(P1); EMITPAIR(P,STD); L7 ~ BUMPL;% %A11483400
ADJUST; EMITB(BFC,L5,L5~L); EMITV(P2);% %A11483500
EMIT(0); EMITO(GEQ); EMITPAIR(1,BFC); EMITO(XIT);% %A11483600
R1; EMITN(P2); EMITPAIR(P,STD); EMITL(6); %A11483700
EMITPAIR(A,STD); %A11483800
L6 ~ BUMPL; %A11483900
EMITB(BFW,L3,L); %A11484000
EMITV(FL); EMIT(0); EMITO(EQL); %A11484100
EMITPAIR(12,BFC); %A11484200
EMITV(NXT); EMITL(1); EMITO(ADD); EMITPAIR(RA,SND); %A11484300
EMITN(NXT); EMITO(STD); EMITL(3); EMITPAIR(A,STD); %A11484400
L3~BUMPL; %A11484500
EMITV(FL); EMITPAIR(RA,STD); %A11484600
EMITB(BFW,L1,L); EMITB(BFW,L2,L); EMITB(BFW,L4,L); %A11484700
EMITV(RA); EMITV(P1); EMITO(SSP); EMITO(EQL); %A11484800
EMITPAIR(21,BFC); %A11484900
RO; CA; EMITV(P1); EMITO(SSN); EMITN(P1); EMITO(STD); %A11485000
L1 ~ BUMPL; %A11485100
EMITV(RA); EMITV(P2); EMITO(SSP); EMITO(EQL); %A11485200
EMITPAIR(21,BFC); %A11485300
R1; CA; EMITV(P2); EMITO(SSN); EMITN(P2); EMITO(STD); %A11485400
L2~BUMPL; %A11485500
EMITB(BFW,L3,L); %A11485600
EMITV(R); EMITPAIR(10,BFC); %A11485700
RO; EMITN(P1); EMITPAIR(P,STD); EMITPAIR(8,BFW); %A11485800
R1; EMITN(P2); EMITPAIR(P,STD); %A11485900
EMITV(P); EMIT(0); EMITO(LSS); %A11486000
L3 ~ BUMPL; %A11486100
EMITB(BFW,L7,L); EMITB(BFW,L6,L);% %A11486200
EMITO(MKS); EMITPAIR(105,LOD); EMITN(DF); EMITV(P); %A11486300
EMITO(SSP); EMIT(0); EMIT(0); %A11486400
EMITV(LF); EMITV(R); EMITN(AR); EMITO(LOD); %A11486500
FOR L4 ~ 1 STEP 1 UNTIL 5 DO EMIT(0); EMITV(12); %A11486600
EMITB(BFC,L3,L); %A11486700
EMITV(A); EMITL(3); EMITO(LSS); L3 ~ BUMPL;% %A11486800
EMITV(RA); EMIT(0); EMITO(EQL); EMITERR(% %A11486900
SGNO,L,"14"); %A11487000
EMITO(MKS); EMITPAIR(105,LOD); EMITN(DF); EMITV(RA); %A11487100
EMITO(SSP); EMITL(1); EMITO(ADD); %A11487200
EMITL(2); EMIT(0); EMITV(LF); EMITV(R); EMITN(AR); EMITO(LOD); %A11487300
FOR L4 ~ 1 STEP 1 UNTIL 5 DO EMIT(0); EMITV(13); %A11487400
EMITB(BFC,L3,L); %A11487500
EMITV(A); EMIT(0); EMITO(EQL); %A11487600
EMITPAIR(6,BFC); %A11487700
EMITV(RA); EMITO(SSP); EMITN(P); EMITO(STD); %A11487800
L3 ~ BUMPL; %A11487900
EMITV(A); EMITL(5); EMITO(LSS); %A11488000
EMITPAIR(4,BFC); %A11488100
EMITV(RA); EMITO(SSN); EMITN(P); EMITO(STD); ADJUST; %A11488200
EMITB(BFW,L3,L); EMITB(BFW,L1,L); EMITB(BFW,L2,L); %A11488300
EMITV(A); EMITO(DUP); EMITO(ADD); EMITO(BFW); %A11488400
L1 ~ BUMPL; % 0 %A11488500
L2~BUMPL; % 1 %A11488600
L3 ~ BUMPL; % 2 %A11488700
L4 ~ BUMPL; % 3 %A11488800
L6 ~ BUMPL; % 4 %A11488900
EMITB(BBW,BUMPL,L5); % 5 %A11489000
EMITO(XIT); %A11489100
EMITB(BFW,L3,L); %A11489200
EMITV(R); EMITN(AR); EMITO(LOD); EMIT(0); EMITO(CDC); %A11489300
EMITO(DUP); EMITO(LOD); EMITN(FL); EMITO(STD); %A11489400
EMIT(0); EMITO(XCH); EMITO(STD); EMITO(XIT); %A11489500
EMITB(BFW,L4,L); EMITB(BFW,L6,L); %A11489600
EMITO(MKS); EMITV(A); EMITPAIR(3,BFC); EMIT(0); %A11489700
EMITPAIR(1,BFW); EMITV(FL); EMIT(0); EMITV(LF); %A11489800
EMITL(2); EMITO(SUB); EMITO(DUP); EMITL(64); EMITO(IDV); %A11489900
EMITPAIR(JUNK,ISN); EMITV(R); EMITN(AR); EMITO(LOD); %A11490000
EMIT(0); EMITO(CDC); EMITO(ECM); %A11490100
EMITC(5,SES); EMITC(2,TRW); %A11490200
EMITC(1,RSA); EMITC(8,SFS); %A11490300
EMITC(3,CRF); EMITC(0,TRW); %A11490400
EMITC(2,CRF); EMITC(3,BNS); %A11490500
EMITC(32,TRW); %A11490600
EMITC(32,TRW); %A11490700
EMITC(0,ENS); EMITC(1,0); %A11490800
EMITV(A); %A11490900
EMITPAIR(1,BFC); EMITO(XIT); %A11491000
EMITV(RA); EMITN(FL); EMITO(STD); EMITO(XIT); %A11491100
EMITB(BFW,L1,L); EMITB(BFW,L2,L); %A11491200
EMITV(R); EMITN(AR); EMITO(LOD); EMITPAIR(RA,STD); EMITO(XIT); %A11491300
END OF EMITRECLINK; %A11491400
PROCEDURE EMITREMEMBER; %A11491500
BEGIN REAL T,R; %A11491600
EMIT(0); %A11491700
IF RECLAIMTOG THEN BEGIN %A11491750
EMITL(1); EMITPAIR(GENOK,STD); %A11491800
EMITO(MKS); EMITV(MARKOB); %A11491900
EMITO(MKS); EMITV(COLLECT); %A11492000
END ELSE %A11492010
IF SYMSTK THEN BEGIN EMITV(LNKROW); EMITI(0,33,6); %A11492020
EMITPAIR(LNKCOL,STD); END; %A11492050
EMITV(FREELIST); EMITL(P2); EMITN(SYMSTACKA); %A11492100
EMITO(STD); %A11492200
EMITV(LNKROW); EMITL(P3); EMITN(SYMSTACKA); %A11492300
EMITO(STD); %A11492400
EMITV(LNKCOL); EMITL(P4); EMITN(SYMSTACKA); EMITO(STD); %A11492500
EMITO(MKS); %A11492600
EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11492700
EMITL(5); EMITN(FM1); %A11492800
EMIT(0); EMITL(1); EMIT(0); %A11492900
EMITL(128); EMITPAIR(SYMSTACKA,LOD); %A11493000
FOR R ~ 1 STEP 1 UNTIL 5 DO EMIT(0); %A11493100
EMITV(12); %A11493200
% %A11493300
EMIT(0); % FP2 %A11493400
T ~ L; %A11493500
EMITO(MKS); %A11493600
EMITPAIR(GNAT(POWERSOFTEN),LOD); %A11493700
EMITL(5); EMITN(FM1); %A11493800
EMIT(0); EMITL(1); EMIT(0); %A11493900
EMITL(512); EMITV(FP2); %A11494000
EMITN(LNKA); EMITO(LOD); %A11494100
FOR R ~ 1 STEP 1 UNTIL 5 DO EMIT(0); %A11494200
EMITV(12); %A11494300
EMITL(1); EMITO(ADD); EMITO(DUP); %A11494400
EMITV(LNKCOL); EMITO(GTR); %A11494500
EMITB(BBC,BUMPL,T); %A11494600
EMITO(XIT); %A11494700
END OF EMITREMEMBER; %A11494800
PROCEDURE EMITREMOB; %A11494900
BEGIN REAL T; %A11495000
EMIT(0); %A11495100
EMIT(0); %A11495200
EMITV(FM1); EMITO(CTC); EMITO(DUP); %A11495300
EMITL(64); EMITO(LSS); %A11495400
EMITPAIR(1,BFC); EMITO(XIT); %A11495500
EMITO(DUP); GETCONTENTS(0,FALSE); %A11495600
EMITO(DUP); EMITI(0,1,2); %A11495700
EMITL(2); EMITO(NEQ); %A11495800
EMITPAIR(1,BFC); EMITO(XIT); %A11495900
EMITO(DUP); %A11496000
GETCONTENTS(1,FALSE); %A11496100
EMITO(DUP); EMITI(0,1,35); EMITO(DUP); %A11496200
EMITI(0,12,6); EMITL(7); EMITO(GTR); %A11496210
T ~ BUMPL; %A11496220
EMITO(XCH); GETCONTENTS(0,FALSE); EMITD(6,42,6); %A11496230
EMITPAIR(2,BFW); EMITB(BFC,T,L); %A11496240
EMITO(XCH); EMITO(DEL); EMITL(125); %A11496250
EMITO(RDV); EMITN(SYMSTACKA); %A11496300
EMITO(DUP); EMITO(LOD); %A11496400
EMITO(DUP); EMITV(FP2); EMITO(EQL); %A11496500
T ~ BUMPL; %A11496600
EMITO(DEL); EMITO(XCH); %A11496700
EMITI(0,3,15); EMITO(DUP); EMITL(1); EMITO(LEQ); %A11496800
EMITPAIR(2,BFC); EMITO(DEL); EMIT(0); %A11496900
EMITO(XCH); EMITO(STD); EMITO(XIT); %A11497000
EMITB(BFC,T,L); %A11497100
T ~ L; %A11497200
EMITO(XCH); EMITO(DEL); EMITO(DUP); EMITL(1); EMITO(LEQ); %A11497300
EMITPAIR(1,BFC); EMITO(XIT); %A11497400
GETCONTENTS(0,TRUE); EMITO(DUP); %A11497500
EMITO(LOD); EMITO(DUP); %A11497600
EMITI(0,3,15); EMITO(DUP); %A11497700
EMITV(FP2); EMITO(NEQ); %A11497800
EMITPAIR(4,BFC); EMITO(XCH); EMITO(DEL); %A11497900
EMITB(BBW,BUMPL,T); %A11498000
EMITO(DEL); EMITV(FP3); EMITD(3,3,15); %A11498100
EMITO(XCH); EMITO(STD); %A11498200
EMITO(XIT); %A11498300
END OF EMITREMOB; %A11498400
PROCEDURE EMITREMPROP; %A11498500
BEGIN REAL T; %A11498600
EMIT(0); %A11498700
EMITV(FM3); %A11498800
GETCONTENTS(0,TRUE); EMITO(DUP); EMITO(LOD); %A11498900
EMITL(2); EMITDIAL(DIA,46); %A11499000
EMITDIAL(DIB,1); EMITFC(FCE,2); %A11499100
EMITO(LNG); EMITPAIR(1,BFC); EMITO(XIT); %A11499200
T ~ L; %A11499300
EMITO(DUP); %A11499400
GETCONTENTS(0,TRUE); EMITO(DUP); EMITO(LOD); %A11499500
EMITO(DUP); EMIT(0); EMITO(LSS); %A11499600
EMITPAIR(1,BFC); EMITO(XIT); %A11499700
EMITDIAL(DIB,2); EMITV(FM1); %A11499800
EMITV(FM2); EMITPAIR(4,BFC); %A11499900
EMITDIAL(DIA,46); EMITFC(FCE,2); %A11500000
EMITPAIR(2,BFW); %A11500100
EMITDIAL(DIA,32);EMITFC(FCE,16); %A11500200
EMITPAIR(6,BFC); %A11500300
EMITO(XCH); EMITO(DEL); EMITO(CTC); %A11500400
EMITO(XCH); EMITO(STD); EMITO(XIT); %A11500500
EMITPAIR(FP2,STD); EMITO(XCH); %A11500600
EMITO(DEL); EMITO(XCH); %A11500700
EMITB(BBW,BUMPL,T); %A11500800
END OF EMITREMPROP; %A11500900
PROCEDURE EMITRITE; %A11501000
BEGIN EMIT(0); %A11501100
EMITV(OUTOG); EMITPAIR(1,BFC); EMITO(XIT); %A11501200
IF GPBV!0 OR DACP!0 THEN BEGIN %A11501300
IF GPBV!0 THEN EMITV(GPBV); %A11501400
IF DACP!0 THEN BEGIN EMITV(DAC[8]); %A11501500
IF GPBV!0 THEN EMITO(LOR) END; %A11501600
EMITO(LNG); EMITPAIR(3,BFC); END; %A11501700
EMITV(LMARG); EMITPAIR(CP,STD); %A11501800
EMITV(PROTOG); %A11501900
EMITPAIR(3,BFC); %A11502000
EMITO(MKS); EMITV(FM1); EMITO(XIT); %A11502100
EMITRD(FALSE,LGO,STRP,0); %A11502200
EMITO(XIT); %A11502300
INOUTUSED.[47:1] ~1; % PRINT %A11502400
END; %A11502500
PROCEDURE EMITSCAN; %A11502600
BEGIN REAL T; %A11502700
REAL STREAM PROCEDURE GITSYL(A,B); VALUE B; %A11502800
BEGIN DI ~ LOC GITSYL; DI ~ DI + 6; %A11502900
SI ~ A; SI ~ SI + B; SI ~ SI + B; %A11503000
DS ~ 2 CHR END; %A11503100
DEFINE R = FP2#; %A11503200
REAL P,S; %A11503300
REAL J; %A11503400
REAL K; %A11503500
ARRAY A[0:27]; %A11503600
INOUTUSED.[45:1] ~1; % READ %A11503700
ADJUST; %A11503800
EMITV(BLOCKCTR); EMITL(1); EMITO(ADD); %A11503900
EMITPAIR(BLOCKCTR,SND); EMIT(0); %A11504000
EMITV(INITI); J ~ BUMPL; %A11504100
EMITV(CPI); % 9 %A11504200
EMITV(RMARGI); % 10 %A11504300
EMITO(GEQ); % 11 %A11504400
P ~ BUMPL; %A11504500
EMITV(PROI); % 17 %A11504600
K ~ BUMPL; %A11504700
% %A11504800
EMITO(MKS); % 20 %A11504900
EMITV(FM1); % 21 %A11505000
EMITV(LMARGI); EMITV(RMARGI); EMITO(GEQ); EMITO(LOR); %A11505100
S ~ BUMPL; %A11505200
ADJUST; %A11505300
EMITB(BFC,J,L); %A11505400
T ~ PROGDESCBLDR(LDES,L,PRTFL); %A11505500
EMITV(BLOCKCTR); % 24 %A11505600
EMITL(1); % 25 %A11505700
EMITO(SUB); % 26 %A11505800
EMITPAIR(BLOCKCTR,STD); % 27 %A11505900
EMITL(4); % 29 %A11506000
EMITO(RTN); % 30 %A11506100
EMITB(BFC,K,L); %A11506200
EMITRD(TRUE,LGI,STRI,T); % 31 %A11506300
EMITB(BFC,S,L); EMITV(LMARGI); EMITPAIR(CPI,STD); %A11506400
EMITB(BFC,P,L); %A11506500
EMIT(0); % 54 %A11506600
EMITO(MKS); EMITV(CPI); EMITL(8); %A11506700
EMITO(IDV); EMITN(FM2); EMITV(CPI); %A11506800
EMITI(0,45,3); EMITV(RMARGI); EMITV(CPI); %A11506900
EMITO(SUB); EMITL(1); EMITO(SUB); EMITO(DUP); %A11507000
EMITL(30); EMITO(GTR); %A11507100
EMITPAIR(2,BFC); EMITO(DEL); EMITL(30); %A11507200
EMIT(0); EMITN(INSTR); %A11507300
EMITO(DUP); EMIT(0); EMITO(XCH); EMITO(STD); %A11507400
EMITN(FM3); EMITN(FP2 ); EMITO(ECM); %A11507500
STREAMTOG ~ TRUE; %A11507600
FILL A[*] WITH %A11507700
OCT0653054300310304, OCT0316014200261545, %A11507800
OCT0177044305520026, OCT0344017701400051, %A11507900
OCT1041024204410042, OCT6047213614450177, %A11508000
OCT0443055221360344, OCT0177014000511041, %A11508100
OCT0142044140476024, OCT1445013104430552, %A11508200
OCT6024034401310140, OCT0051104100420441, %A11508300
OCT2347017710410342, OCT0441004201302024, %A11508400
OCT0245024203475424, OCT1045014201310026, %A11508500
OCT0445044035474047, OCT4447322405450131, %A11508600
OCT0026264510402447, OCT1324224501312025, %A11508700
OCT0345542501450147, OCT0131002611450130, %A11508800
OCT1440542402450440, OCT0347202401451040, %A11508900
OCT0541052202040105, OCT1022073103040216, %A11509000
OCT0177042201040105, OCT0100000000000000; %A11509100
FOR T ~ 0 STEP 1 UNTIL 108 DO %A11509200
EMIT(GITSYL(A[T DIV 4],T.[46:2])); %A11509300
STREAMTOG ~ FALSE; %A11509400
EMITPAIR(COUNTI,SND); %A11509500
EMITV(CPI); EMITO(ADD); %A11509600
EMITPAIR(CPI,STD); %A11509700
EMITV(BLOCKCTR); EMITL(1); %A11509800
EMITO(SUB); EMITPAIR(BLOCKCTR,STD); %A11509900
EMITV(FP2); EMITO(RTN); %A11510000
END OF EMITSCAN; %A11510100
PROCEDURE EMITSPACEPRINT; %A11510200
BEGIN REAL T; %A11510300
EMIT(0); %A11510400
EMITV(FM1); EMIT(0); EMITO(LSS); EMITV(OUTOG); %A11510500
EMITO(LOR); EMITPAIR(1,BFC); EMITO(XIT); %A11510600
EMITV(CP); EMITV( RMARG); EMITO(GEQ); %A11510700
T ~ BUMPL ; %A11510800
CALLRITE; EMITO(XIT); %A11510900
EMITB(BFC,T,L); %A11511000
EMITV(CP); EMITV(FM1); EMITO(ADD); %A11511100
EMITV(RMARG); EMITO(GEQ); %A11511200
EMITPAIR(5,BFC); %A11511300
EMITV(RMARG); EMITV(CP); EMITO(SUB); %A11511400
EMITPAIR(3,BFW); EMITV(FM1); %A11511500
EMITPAIR(FM1,ISN); %A11511600
EMITO(DUP); EMITL(46); EMITO(GEQ); %A11511700
T~BUMPL; %A11511800
EMITV(CP); EMITL(7); %A11511900
EMITO(LND); EMITL(16); %A11512000
EMITO(XCH); EMITO(SUB); %A11512100
EMITO(DUP); EMITV(FP2); %A11512200
EMITO(XCH); EMITO(SUB); %A11512300
EMITO(DUP); EMITL(7); %A11512400
EMITO(LND); EMITO(XCH); %A11512500
EMITL(8); EMITO(IDV); %A11512600
EMITPAIR(JUNK,ISN); EMITO(DUP); %A11512700
EMITL(64); EMITO(IDV); EMITPAIR(JUNK,ISN); %A11512800
EMITB(BFC,T,T~BUMPL); %A11512900
EMITO(DUP); EMIT(0); %A11513000
EMIT(0); EMIT(0); %A11513100
EMITB(BFW,T,L); %A11513200
EMITO(MKS); LODSTR; %A11513300
% %A11513400
EMITC(7,CRF); EMITC(3,BNS); %A11513500
EMITC(1,TRP); EMIT(" "); %A11513600
EMITC(0,ENS); EMITC(1,RSA); %A11513700
EMITC(2,CRF); EMITC(0,SFS); EMITC(5,CRF); %A11513800
EMITC(0,TRW); EMITC(4,CRF); %A11513900
EMITC(3,BNS); EMITC(32,TRW); %A11514000
EMITC(32,TRW); EMITC(0,ENS); %A11514100
EMITC(6,CRF); EMITC(3,BNS); %A11514200
EMITC(1,TRP); EMIT(" "); %A11514300
EMITC(0,ENS); EMITC(1,0); %A11514400
STREAMTOG~FALSE; %A11514500
EMITV(CP); EMITV(FP2); %A11514600
EMITO(ADD); %A11514700
EMITPAIR(CP,SND); EMITV(RMARG); %A11514800
EMITO(LSS); %A11514900
EMITPAIR(1,BFC); EMITO(XIT); %A11515000
CALLRITE; EMITO(XIT); %A11515100
END OF EMITSPACEPRINT; %A11515200
PROCEDURE EMITSTRINGPRINT; %A11515300
BEGIN REAL T,R,S; %A11515400
EMIT(0); %A11515500
EMITV(OUTOG); EMITPAIR(1,BFC); EMITO(XIT); %A11515600
EMIT(0); %A11515700
EMITV(NSTR); %A11515800
T ~ L; %A11515900
EMITO(DUP); EMITV(CP); EMITO(ADD); EMITV(RMARG); %A11516000
EMITO(LEQ); %A11516100
R ~ BUMPL; %A11516200
EMITO(MKS); EMITV(FP2); %A11516300
EMITO(DUP); EMITL(7); EMITO(LND); %A11516400
EMITO(XCH); EMITL(8); EMITO(IDV); %A11516500
EMITN(OUTSTR); %A11516600
EMITV(FP3); EMITO(DUP); %A11516700
EMITL(63); EMITO(LND); %A11516800
EMITO(XCH); EMITL(64); EMITO(IDV); %A11516900
EMITPAIR(JUNK,ISN); LODSTR; %A11517000
EMITC(5,RSA); EMITC(6,CRF); %A11517100
EMITC(0,SFS); EMITC(4,CRF); %A11517200
EMITC(0,TRS); EMITC(3,CRF); %A11517300
EMITC(3,BNS); EMITC(32,TRS); %A11517400
EMITC(32,TRS); EMITC(0,ENS); %A11517500
EMITC(1,0); STREAMTOG ~ FALSE; %A11517600
EMITO(DUP); EMITV(CP); EMITO(ADD); %A11517700
EMITPAIR(CP,SND); EMITV(RMARG); %A11517800
EMITO(GEQ); %A11517900
S ~ BUMPL; %A11518000
CALLRITE; %A11518100
EMITB(BFC,S,L); %A11518200
EMITO(ADD); %A11518300
EMITO(DUP); EMITV(NSTR); %A11518400
EMITO(EQL); EMITPAIR(1,BFC); EMITO(XIT); %A11518500
EMITO(DUP); EMITV(NSTR); %A11518600
EMITO(XCH); EMITO(SUB); %A11518700
EMITB(BBW,BUMPL,T); %A11518800
EMITB(BFC,R,L); %A11518900
EMITV(FM1); %A11519000
R ~ BUMPL; %A11519100
EMITO(DUP); EMITV(RMARG); %A11519200
EMITV(LMARG); EMITO(SUB); %A11519300
EMITO(LEQ); %A11519400
S ~ BUMPL; %A11519500
EMITV(CP); EMITV(LMARG); EMITO(NEQ); %A11519600
EMITPAIR(2,BFC); %A11519700
EMITO(MKS); EMITV(TERPRIN); %A11519800
EMITB(BBW,BUMPL,T); %A11519900
EMITB(BFC,S,L); %A11520000
EMITO(DEL); EMITV(RMARG); %A11520100
EMITV(CP); EMITO(SUB); %A11520200
EMITB(BBW,BUMPL,T); %A11520300
EMITB(BFC,R,L); %A11520400
EMITO(DEL); EMITV(RMARG); EMITV(CP); %A11520500
EMITO(SUB); %A11520600
EMIT(0); EMITO(MKS); EMIT(0); %A11520700
EMITV(FP3); EMITV(FP2); EMITO(ADD); %A11520800
EMITO(DUP); EMITL(7); EMITO(LND); %A11520900
EMITO(XCH); EMITL(8); EMITO(IDV); %A11521000
EMITN(OUTSTR); EMITV(FP3); EMITO(DUP); %A11521100
EMITL(63); EMITO(LND); EMITO(XCH); %A11521200
EMITL(64); EMITO(IDV); %A11521300
EMITPAIR(JUNK,ISN); EMITO(ECM); %A11521400
STREAMTOG ~ TRUE; %A11521500
EMITC(3,RSA); EMITC(4,CRF); %A11521600
EMITC(0,SFS); EMITC(" ",TNE); %A11521700
EMITC(33,JFC); %A11521800
EMITC(1,CRF); %A11521900
EMITC(18,BNS); EMITC(2,BNS); %A11522000
EMITC(32,BNS); EMITC(1,SRS); %A11522100
EMITC(" ",TNE); EMITC(3,JNC); %A11522200
EMITC(1,INC); EMITC(0,ENS); EMITC(1,JFW); %A11522300
EMITC(2,JNS); EMITC(0,ENS); %A11522400
EMITC(1,JFW); EMITC(13,JNS); %A11522500
EMITC(5,CRF); %A11522600
EMITC(0,SEC); EMITC(1,INC); %A11522700
EMITC(5,STC); EMITC(0,SEC); %A11522800
EMITC(0,ENS); %A11522900
EMITC(2,CRF); EMITC(5,BNS); %A11523000
EMITC(1,SRS); EMITC(" ",TNE); %A11523100
EMITC(2,JNC); EMITC(1,INC); %A11523200
EMITC(0,ENS); %A11523300
EMITC(7,STC); EMITC(5,SES); %A11523400
EMITC(7,SFS); EMITC(7,SED); %A11523500
EMITC(6,SFD); EMITC(1,TRS); %A11523600
EMITC(1,0); STREAMTOG ~ FALSE; %A11523700
EMITO(SUB); EMITO(DUP); %A11523800
EMIT(0); EMITO(EQL); %A11523900
EMITB(BBC,BUMPL,T); %A11524000
EMITO(DEL); EMITO(DUP); %A11524100
EMITV(NSTR); EMITO(XCH); %A11524200
EMITO(SUB); %A11524300
EMITB(BBW,BUMPL,R); %A11524400
END OF EMITSTRINGPRINT; %A11524500
PROCEDURE EMITSYMEQ; %A11524600
BEGIN REAL T,R,S; %A11524700
EMIT(0); %A11524800
S ~ L; %A11524900
EMITV(FM3); EMITV(FM2); %A11525000
EMITDIAL(DIA,33); EMITDIAL(DIB,33); %A11525100
EMITFC(FCE,15); %A11525200
EMITPAIR(4,BFC); EMITL(1); %A11525300
EMITPAIR(FM3,STD); EMITO(XIT); %A11525400
EMIT(0); EMITO(XCH); EMITO(CTC); %A11525500
EMITO(DUP); %A11525600
EMITL(10); EMITO(LSS); %A11525700
EMITPAIR(4,BFC);R ~ L; %A11525800
EMIT(0); EMITPAIR(FM3,STD); EMITO(XIT); %A11525900
GETCONTENTS(0,FALSE); EMITO(DUP); %A11526000
EMITI(0,1,2); EMITO(DUP); EMITO(ADD); %A11526100
EMITO(BFW); %A11526200
T ~ L ~ L + 6; %A11526300
GETCONTENTS(0,FALSE); EMITV(FM2); EMITO(XCH); %A11526400
EMITO(MKS); EMITV(SYMEQA); EMITO(DEL); %A11526500
EMITPAIR(FM3,STD); EMITO(XIT); %A11526600
EMITB(BFW,T-4,L); %A11526700
EMITPAIR(FM3,SND); %A11526800
EMITV(FM2); GETCONTENTS(0,FALSE); %T9311526900
EMIT(0); EMITDIAL(DIA,46); EMITDIAL(DIB,1); %A11527000
EMITFC(FCE,2); %A11527100
EMITB(BBC,BUMPL,R); %A11527200
EMITPAIR(FM2,SND); %A11527300
EMITI(0,18,15); EMITO(XCH); %A11527400
EMITI(0,18,15); %A11527500
EMITO(MKS); EMITV(SYMEQ); EMITO(DEL); %A11527600
EMITB(BBC,BUMPL,R); %A11527700
EMITB(BBW,BUMPL,S); %A11527800
EMITB(BFW,T-2,L); %A11527900
EMITPAIR(FM3,SND); EMITV(FM2); %A11528000
GETCONTENTS(0,FALSE); EMITPAIR(FM2,SND); %A11528100
EMITL(1); EMITDIAL(DIA,46); %A11528200
EMITDIAL(DIB,1); EMITFC(FCE,2); %A11528300
EMITB(BBC,BUMPL,R); %A11528400
EMITI(0,3,30); EMITO(XCH); %A11528500
EMITI(0,3,30); EMITO(EQL); %A11528600
EMITB(BBC,BUMPL,R); %A11528700
EMITB(BBW,BUMPL,S); %A11528800
EMITB(BBW,T,R); %A11528900
END OF EMITSYMEQ; %A11529000
PROCEDURE EMITSYMEQA; %A11529100
BEGIN REAL T; %A11529200
EMIT(0); %A11529300
EMITV(FM3); EMITL(10); %A11529400
EMITDIAL(DIA,33); EMITDIAL(DIB,33); %A11529500
EMITFC(FCL,15); %A11529600
EMITPAIR(8,BFC); %A11529700
EMIT(0); EMITO(XCH); EMITO(CTC); %A11529800
EMITV(FM2); %A11529900
EMITO(EQL); EMITPAIR(FM3,STD); EMITO(XIT); %A11530000
GETCONTENTS(0,FALSE); %A11530100
EMITL(3); EMITDIAL(DIA,46); %A11530200
EMITDIAL(DIB,1); EMITFC(FCE,2); %A11530300
T ~ BUMPL; %A11530400
GETCONTENTS(0,FALSE); %A11530500
EMITV(FM2); EMITO(EQL); %A11530600
EMITPAIR(FM3,STD); EMITO(XIT); %A11530700
EMITB(BFC,T,L); %A11530800
EMIT(0); EMITPAIR(FM3,STD); %A11530900
EMITO(XIT); %A11531000
END OF EMITSYMEQA; %A11531100
PROCEDURE EMITSYMFIX; %A11531200
BEGIN REAL T; %A11531300
EMIT(0); %A11531400
EMITV(FM2); GETCONTENTS(1,FALSE); EMITO(DUP); %A11531500
EMITI(0,1,5); EMITO(DUP); %A11531600
EMITPAIR(NSTR,SND); EMIT(0); EMITO(XCH); %A11531700
EMITO(DUP); EMITL(7); %A11531800
EMITO(GTR); EMITPAIR(2,BFC); %A11531900
EMITO(DEL); %A11532000
EMITL(4); %A11532100
T ~ L; %A11532200
EMITO(MKS); EMIT(0); EMITN(OUTSTR); %A11532300
EMITO(ECM); STREAMTOG ~ TRUE; %A11532400
EMITC(4,CRF); EMITC(0,SFD); %A11532500
EMITC(6,SES); EMITC(1,SFS); %A11532600
EMITC(3,CRF); EMITC(0,TRS); %A11532700
EMITC(1,0); STREAMTOG ~ FALSE; %A11532800
EMITO(ADD); EMITO(DUP); EMITV(FP3); %A11532900
EMITO(XCH); EMITO(SUB); EMITO(DUP); %A11533000
EMIT(0); EMITO(EQL); %A11533100
EMITPAIR(1,BFC); EMITO(XIT); %A11533200
EMITO(DUP); EMITL(7); %A11533300
EMITO(GTR); %A11533400
EMITPAIR(2,BFC); EMITO(DEL); EMITL(4); %A11533500
EMITV(FP2); GETCONTENTS(0,FALSE); EMITPAIR(FP2,STD); %A11533600
EMITB(BBW,BUMPL,T); %A11533700
% IN STACK: %A11533800
% FP1 0 %A11533900
% 6 FP2 ALPHA %A11534000
% 5 FP3 NUMBER OF CHARACTERS IN ATOMIC SYMBOL %A11534100
% 4 FP4 TOTAL NUMBER OF CHARACTERS TRANSFERRED %A11534200
% 3 FP5 NUMBER OF CHARACTERS TO TRANSFER %A11534300
END OF EMITSYMFIX; %A11534400
PROCEDURE EMITSYMPRINT; %A11534500
BEGIN REAL T,R,S; %A11534600
STACKCT ~ 1; %A11534700
EMIT(0); EMIT(0); %A11534800
EMITV(FM1); EMITO(CTC); %A11534900
EMITO(DUP); EMITL(64); %A11535000
EMITO(LSS); %A11535100
EMITPAIR(4,BFC); %A11535200
EMITO(MKS); EMITV(FP2); EMITV(CHARPRINT); EMITO(XIT); %A11535300
GETCONTENTS(0,FALSE); EMITO(DUP); %A11535400
EMITI(0,1,2); EMITO(DUP); EMITO(ADD); %A11535500
EMITO(BFW); %A11535600
T ~ L ~ L + 6; %A11535700
EMITO(MKS); EMITV(FP2); GETCONTENTS(0,FALSE); %A11535800
EMIT(0); %A11535900
EMITV(ARITHPRINT); EMITO(XIT); %A11536000
EMITB(BFW,T-2,L); EMITB(BFW,T-4,L); %A11536100
EMITO(MKS); EMITL("("); EMITV(CHARPRINT); %A11536200
EMITPAIR(3,BFW); %A11536300
S ~ L; %A11536400
EMITO(MKS); EMITL(" "); EMITV(CHARPRINT); %A11536500
EMITO(DUP); EMITI(0,1,2); EMITL(1); EMITO(EQL); %A11536600
EMITPAIR(7,BFC); %A11536700
EMITO(MKS); EMITV(FP2); EMITI(0,4,29); %A11536800
EMITV(ARITHPRINT); %A11536900
EMITPAIR(5,BFW); %A11537000
EMITO(MKS); EMITV(FP2); EMITI(0,18,15); %A11537100
EMITV(SYMPRINT); %A11537200
EMIT(0); EMITO(XCH); EMITO(CTC); %A11537300
EMITO(DUP); EMIT(0); EMITO(EQL); %A11537400
R ~ BUMPL; %A11537500
EMITO(MKS); EMITL(")"); EMITV(CHARPRINT); EMITO(XIT); %A11537600
EMITB(BFC,R,L); %A11537700
EMITO(DUP); %A11537800
GETCONTENTS(0,FALSE); EMITO(DUP); EMIT(0); %A11537900
EMITO(LSS); %A11538000
R ~ BUMPL; %A11538100
EMITO(MKS); EMITL(" "); EMITV(CHARPRINT); %A11538200
EMITO(MKS); EMITL("."); EMITV(CHARPRINT); %A11538300
EMITO(MKS); EMITL(" "); EMITV(CHARPRINT); %A11538400
EMITO(MKS); EMITV(FP2); EMITV(SYMPRINT); %A11538500
EMITO(MKS); EMITL(")"); EMITV(CHARPRINT); EMITO(XIT); %A11538600
EMITB(BFC,R,L); %A11538700
EMITO(XCH); EMITO(DEL); %A11538800
EMITB(BBW,BUMPL,S); %A11538900
EMITB(BFW,T,L); %A11539000
EMITO(MKS); EMITV(SYMFIX); %A11539100
EMITO(MKS); EMITL(1); EMITV(STRINGPRINT); %A11539200
EMITO(XIT); %A11539300
END OF EMITSYMPRINT; %A11539400
PROCEDURE EMITTERPRIN; %A11539500
BEGIN %A11539600
REAL T; %A11539700
EMIT(0); %A11539800
IF GPBV ! 0 THEN BEGIN EMITV(GPBV); %T9011540400
T ~ BUMPL; %A11540500
CALLRITE; EMITO(XIT); %A11540600
EMITB(BFC,T,L) END; %A11540700
EMITO(MKS); EMITV(RMARG); EMITV(CP); %A11540800
EMITO(SUB); EMITO(SSP); %A11540900
EMITV(SPACEPRINT); %A11541000
EMITO(XIT); %A11541100
END OF EMITTERPRIN; %A11541200
PROCEDURE EMITARSTV; %A11541300
BEGIN % THIS IS A CHAR MODE INTRINSIC %A11541400
STREAMTOG ~ TRUE; %A11541500
EMITC(1,CRF); EMITC(0,JFW); %A11541600
EMITC(4,SED); EMITC(4,SES); %A11541700
EMITC(8,OCV); EMITC(7,SEC); EMITC(4,SES); %A11541800
EMITC(1,SFS); EMITC(6,BNS); %A11541900
EMITC(0,TEQ); EMITC(3,JNC); %A11542000
EMITC(1,SFS); EMITC(63,INC); %A11542100
EMITC(0,ENS); EMITC(3,STC); %A11542200
EMITC(4,SED); EMITC(1,SFD); EMITC(3,CRF); %A11542300
EMITC(0,TRS); EMITC(0,0); %A11542400
STREAMTOG ~ FALSE %A11542500
END OF EMITARSTV; %A11542600
PROCEDURE EMITINT(N); VALUE N; REAL N; %A11542700
BEGIN %A11542800
CASE N OF BEGIN %A11542900
EMITADDPROP; %A11543000
EMITALFPRINT; %A11543100
EMITAPPEND; %A11543200
EMITARITHPRINT(FALSE); %A11543300
EMITATCON; %A11543400
EMITATN; %A11543500
EMITATSTRV; %A11543600
EMITBOOPRINT; %A11543700
EMITCHARPRINT; %A11543800
EMITCOLLECT; %A11543900
EMITDBLFACT; %A11544000
EMITDBLPLXFACT; %A11544100
EMITPLXPRINT(TRUE); %A11544200
EMITARITHPRINT(TRUE); %A11544300
EMITERRPRO; %A11544400
EMITGENLINK; %A11544500
EMITGENSYM; %A11544600
EMITLENGTH; %A11544700
EMITMARK; %A11544800
EMITMARKD; %A11544900
EMITMARKER; %A11545000
EMITMARKOB; %A11545100
EMITMEMBER; %A11545200
EMITMKATOM; %A11545300
EMITMONPRO; %A11545400
EMITMONSYM; %A11545500
EMITNCONC; %A11545600
EMITNTA; %A11545700
EMITNTS; %A11545800
EMITPLXFACT; %A11545900
EMITPLXPRINT(FALSE); %A11546000
EMITPROP; %A11546100
EMITRANDNO; %A11546200
EMITRANDOM; %A11546300
EMITREAD; %A11546400
EMITREAD1; %A11546500
EMITREADCON; %A11546600
EMITREADN; %A11546700
EMITREADSYM; %A11546800
EMITRECALL; %A11546900
EMITRECLAIMER; %A11547000
EMITRECLINK; %A11547100
EMITREMEMBER; %A11547200
EMITREMOB; %A11547300
EMITREMPROP; %A11547400
EMITRITE; %A11547500
EMITSCAN; %A11547600
EMITSPACEPRINT; %A11547700
EMITSTRINGPRINT; %A11547800
EMITSYMEQ; %A11547900
EMITSYMEQA; %A11548000
EMITSYMFIX; %A11548100
EMITSYMPRINT; %A11548200
EMITTERPRIN; %A11548300
EMITDACOM(TRUE); %A11548400
EMITDACOM(FALSE); %A11548500
END %A11548600
END OF EMITINT; %A11548700
ENDTOG ~ DEBUGTOG; DEBUGTOG ~ INTDEBUGTOG; %T9011548800
LO ~ L; %A11548900
MOVECODE(TEDOC,EDOC); %A11549000
FILL PA[*] WITH %A11549300
%A11549400
"7ADDPROP","5ALFPR00","6APPEND0", "7ARITHPR","5ATCON00", %A11549500
"3ATN0000","5ATSTR00","5BOOPR00","6CHARPR0","7COLLECT", %A11549600
"7DBLFACT","7DPXFACT","5DPXPR00","5DBLPR00","6ERRPRO0", %A11549700
"7GENLINK","6GENSYM0","6LENGTH0","4MARK000","5MARKD00", %A11549800
"6MARKER0","6MARKOB0","6MEMBER0","6MKATOM0","6MONPRO0", %A11549900
"6MONSYM0","5NCONC00","3NTA0000","3NTS0000","7PLXFACT", %A11550000
"5PLXPR00","4PROP000","6RANDNO0","6RANDOM0","5LREAD00", %A11550100
"5READ100","7READCON","5READN00","7READSYM","6RECALL0", %A11550200
"7TWXLOOP","7RECLINK","7REMEMBR","5REMOB00","7REMPROP", %P11550300
"6LWRITE0","4SCAN000","7SPACEPR","7STRINGP","6SYMEQL0", %A11550400
"7SYMEQLA","6SYMFIX0","5SYMPR00","6TERPRI0","7DACOM-I", %A11550500
"7DACOM-O","5ARSTV00"; %A11550600
FOR R~54 STEP 1 UNTIL 55,0 STEP 1 UNTIL 53 DO % %T9011550700
IF A ~ DPI[R+50] ! 0 THEN %A11550800
BEGIN %A11550900
L ~ 0; SGNO ~ SGAVL; SGAVL ~ SGAVL + 1; %A11551000
A ~ PROGDESCBLDR(1,0,A); %A11551100
EMITINT(R); LSTO ~ LISTOG; LISTOG ~ FALSE; %A11551200
SEGMENT((L+3) DIV 4,SGNO,2); LISTOG ~ LSTO; %A11551300
IF LISTOG THEN BEGIN %A11551400
WRTINTRSC(SGNO,PA[R],A,LIN); %A11551500
WRITELINE END; %A11551600
END; %A11551700
L~LO; SGNO ~ 2; MOVECODE(TEDOC,EDOC); %A11551800
IF DPI[106]!0 THEN BEGIN %A11551900
ADJUST; %A11552000
A ~ PROGDESCBLDR(3,L,104); %A11552100
EMITARSTV; %A11552200
IF LISTOG THEN BEGIN %A11552300
WRTINTRSC(2,PA[56],104,LIN); %A11552400
WRITELINE END; %A11552500
END; %A11552600
DEBUGTOG ~ ENDTOG; ENDTOG ~ FALSE; %TEMP %A11552700
END OF EMITNONX; %A11552800
PROCEDURE EMITDACOM (BV); VALUE BV; BOOLEAN BV; % %T9011552900
BEGIN % %T9011553000
REAL L0,L1,L2,L3,L4,L8,L9,M1,M2,M3,M4,GTS; % %T9011553100
REAL G1,G2 ; INTEGER TP;%T9011553150
DEFINE FP2=514#, FP3=515#, FP4=516#, FP5=517#; % %T9011553200
DEFINE WATE = IF DAC[16] { 0 THEN 300 ELSE MIN(DAC[16],1023)#;%T9011553250
PROCEDURE DACR(RD,B,A,GTS); VALUE RD,B,A,GTS; BOOLEAN RD; %T9011553300
REAL B,A,GTS; % %T9011553400
BEGIN % %T9011553500
BOOLEAN TP; TP := REAL(RD)>1; RD := RD AND TRUE; %T9011553550
EMITO(MKS); EMITPAIR(105,LOD); EMITL(5); % %T9011553600
EMITN(DAC[13-6|REAL(RD)]); IF RD THEN EMIT(4); %T9011553650
EMITN(2); EMITO(MOP); %T9011553700
EMITL(WATE); EMITPAIR(JUNK,ISN); %T9011553750
EMITO(CTF); IF RD THEN EMITO(LOR); %T9011553775
EMITL(IF RD THEN 2 ELSE 16-(15|REAL(TP))); EMIT(0); %T9011553800
EMITL(DAC[6] DIV 8); %T9011553850
EMITPAIR(IF RD THEN DAC[5] ELSE DAC[9],LOD); %T9011553900
%T9011553950
IF NOT RD THEN EMITO(MKS); EMITPAIR(A,MKS); % %T9011554000
EMITN(512); EMITV(513); EMITV(GTS); % %T9011554100
EMITPAIR(B,MKS); EMITN(512); EMITV(513); % %T9011554200
EMITV(GTS); % %T9011554300
IF NOT RD THEN BEGIN EMITL(15); EMITV(5); EMIT (0); EMIT (0); %T9011554400
END; % %T9011554500
EMIT (0); EMIT (0); EMIT (0); EMITV (12+REAL(RD)); % %T9011554600
END DACR; % %T9011554700
% %T9011554800
DEFINE LL1 = DAC[11] #, LL2 = DAC[17] #, LL3 = DAC[00] #; % %T9011554900
DEFINE LL4 = DAC[12] #, LL5 = DAC[18] #; % %T9011555000
DEFINE LL6 = DAC[19] #, LL7 = DAC[20] #, LL8 = DAC[21] #; %T9011555050
DEFINE BK(BK1) =EMITV(BLOCKCTR);EMITPAIR(1,BK1); % %T9011555100
EMITPAIR(BLOCKCTR,IF BK1 = ADD THEN SND ELSE STD) #; % %T9011555200
DEFINE J = DAC[3] #, GRP = DAC[4] #; % %T9011555300
DEFINE GOGO = EMITO(MKS);EMIT(0);EMITL(1);EMITV(GTS); % %T9011555400
EMITO(MKS);EMITL(9);EMITV(5);EMITO(BFW) #; % %T9011555500
GTS ~ GNAT(GOTOSOLVER); BK(ADD); % %T9011555600
IF BV THEN BEGIN % ***************** READ ******************* %T9011555700
LABEL SEGMENTR; % %T9011555750
EMIT (0); EMITPAIR(RMARGI,STD); EMITV(GRP); % %T9011555800
IF DAC[22] ! 0 THEN BEGIN EMITV(DAC[22]); EMITO(LOR); END; %T9011555850
M1 ~ BUMPL; % %T9011555900
%T9011555910
%T9011555920
%T9011555930
%T9011555940
EMIT (0); EMITPAIR(J,STD); % %T9011556000
L0 ~ M2 ~ L; % %T9011556100
DACR(TRUE,L1:=GETSPACE(TRUE,-7),L2:=GETSPACE(TRUE,-7),GTS); %T9311556200
M3 := L; %T9311556205
EMITL(DAC[6]); EMITO(MKS); %T9011556210
EMITL(DAC[6] DIV 64); % %T9011556220
EMITL((DAC[6] - 1) DIV 8); EMITN(DAC[5]); % %T9011556230
EMITO(ECM); STREAMTOG ~ TRUE; % %T9011556240
EMITC(1,RSA); EMITC(7,SFS); EMITC(4,RDA); % %T9011556250
EMITC(2,CRF); EMITC(9,BNS); % %T9011556260
EMITC(2,BNS); EMITC(32,BNS); % %T9011556270
EMITC(" ",TEQ); EMITC(12,JFC); % %T9011556280
EMITC(8,SRD); EMITC(1,SRS); EMITC(0,ENS); EMITC(0,ENS); % %T9011556290
EMITC(0,ENS); EMITC(4,CRF); EMITC(5,BNS); % %T9011556300
EMITC(" ", TEQ); EMITC(3,JNC); % %T9011556310
EMITC(8,SRD); EMITC(1,SRS); EMITC(0,ENS); % %T9011556320
EMITC(4,SDA); EMIT(64); STREAMTOG~FALSE; EMITO(DUP); EMITL(0);%T9011556330
EMITO(EQL); EMITO(ADD); EMITPAIR(RMARGI,STD); % %T9011556340
EMIT(0); EMITPAIR(DAC[2],STD); %T9011556350
BK(SUB); % %T9011556400
EMIT (0); EMITPAIR(GRP,SND); EMITO(RTN); % %T9011556500
EMITB(BFC,M1,L); BK(SUB); % %T9011556530
EMIT(4); EMITPAIR(GRP,SND); EMITO(RTN); % %T9011556560
ADJUST; L2 ~ PROGDESCBLDR(LDES,L,L2); % %T9011556600
IF TP ~ LL6 ! 0 THEN BEGIN EMITL(TP); GOGO END ELSE % %T9011556700
BEGIN EMITL(1); EMITERR(SGNO,L,"18"); END; % %T9011556800
ADJUST; L1 ~ PROGDESCBLDR(LDES,L,L1); % %T9011556900
EMITO(MKS); EMITPAIR(105,LOD); EMITL(5); % %T9011557000
EMITN(DAC[7]); EMIT(0); EMITL(2); EMIT(0); EMITL(1); % %T9011557100
EMITPAIR(DAC[9],LOD); EMIT(0); EMIT(0); EMIT(0); EMIT(0); %T9011557200
EMIT (0); EMITV(13); % %T9011557300
EMIT(0); EMITPAIR(TABR,STD); % %T9011557400
EMITPAIR(1,MKS); EMITPAIR(DAC[9],LOD); EMITNUM("BUFOV1 "); % %T9011557500
EMITO(ECM); STREAMTOG ~ TRUE; % %T9011557600
EMITC(2,RSA); EMITC(2,SFS); EMITC(1,SED); EMITC(1,SFD); % %T9011557700
EMITC(6,CEQ); EMITC(1,JFC); EMITC(2,JFW); EMITC(0,SEC); % %T9011557800
EMITC(4,STC); EMIT(64); STREAMTOG ~FALSE; G1 ~ BUMPL; % %T9011557900
IF TP ~ LL8 ! 0 THEN BEGIN EMITL(TP); GOGO END ELSE BEGIN %T9011557950
EMITO(MKS); EMITPAIR(OUTSTR,LOD); EMITO(ECM); STREAMTOG~TRUE; %T9011558000
EMITC(26,TRP); EMIT("BU"); EMIT("FF"); EMIT("ER"); EMIT(" O");%T9011558100
EMIT("VE"); EMIT("RF"); EMIT("LO"); EMIT("W."); EMIT(" R"); % %T9011558200
EMIT("ET"); EMIT("YP"); EMIT("E."); EMIT("{!"); EMIT(64); % %T9011558300
STREAMTOG ~ FALSE; EMITL(26); EMITPAIR(NSTR,STD); % %T9011558400
EMITO(MKS); EMIT(0); EMITV(STRINGPRINT); EMITO(MKS); % %T9011558500
EMITV(TERPRIN); EMITB(BBW,BUMPL,L0); CONSTANTCLEAN; % %T9011558600
END; % %T9011558650
EMITB(BFC,G1,L); % %T9011558700
EMITPAIR(1,MKS); EMITPAIR(DAC[9],LOD); EMITNUM("TOOLN2 "); % %T9011558800
EMITO(ECM); STREAMTOG ~ TRUE; % %T9011558900
EMITC(2,RSA); EMITC(2,SFS); EMITC(1,SED); EMITC(1,SFD); % %T9011559000
EMITC(6,CEQ); EMITC(1,JFC); EMITC(2,JFW); EMITC(0,SEC); % %T9011559100
EMITC(4,STC); EMIT(64); G1 ~ BUMPL; STREAMTOG ~ FALSE; % %T9011559200
IF TP ~ LL3 ! 0 THEN BEGIN EMITL(TP); GOGO END ELSE BEGIN % %T9011559300
%T9011559400
EMITO(MKS); EMITPAIR(OUTSTR,LOD); EMITO(ECM); STREAMTOG~TRUE; %T9011559500
EMITC(26,TRP); EMIT("IN"); EMIT("PU"); EMIT("T "); EMIT("TO");%T9011559510
EMIT("O "); EMIT("LO"); EMIT("NG"); EMIT(". "); EMIT("RE"); %T9011559520
EMIT("TY"); EMIT("PE"); EMIT(".{"); EMIT("!~"); EMIT(64); % %T9011559530
STREAMTOG ~ FALSE; EMITL(26); EMITPAIR(NSTR,STD); % %T9011559540
EMITO(MKS); EMIT(0); EMITV(STRINGPRINT); EMITO(MKS); % %T9011559550
EMITV(TERPRIN); EMITB(BBW,BUMPL,L0); CONSTANTCLEAN ; % %T9011559560
END; % %T9011559600
%T9011559610
%T9011559620
%T9011559630
%T9011559640
%T9011559650
%T9011559660
CONSTANTCLEAN; EMITB(BFC,G1,L); % %T9011559700
EMITPAIR(1,MKS); EMITPAIR(DAC[9],LOD); EMITNUM("TIME3 "); % %T9011559800
EMITO(ECM); STREAMTOG ~ TRUE; % %T9011559900
EMITC(2,RSA); EMITC(3,SFS); EMITC(1,SED); EMITC(1,SFD); % %T9011560000
EMITC(5,CEQ); EMITC(1,JFC); EMITC(2,JFW); EMITC(0,SEC); % %T9011560100
%T9011560110
%T9011560120
%T9011560130
%T9011560140
%T9011560145
EMITC(4,STC); EMIT(64); STREAMTOG ~ FALSE; G1 ~ BUMPL; % %T9011560150
%T9011560160
%T9011560170
%T9011560180
%T9011560190
IF TP ~ LL2 ! 0 THEN BEGIN EMITL(TP); GOGO END ELSE BEGIN % %T9011560200
%T9011560210
%T9011560220
%T9011560230
%T9011560240
EMITL(1); EMITERR(SGNO,L,"16") END; CONSTANTCLEAN; % %T9011560250
%T9011560260
%T9011560270
EMITB(BFC,G1,L); % %T9011560300
EMITPAIR(1,MKS); EMITPAIR(DAC[9],LOD); EMITNUM("WRTAB4 "); % %T9011560350
EMITO(ECM); STREAMTOG ~ TRUE; % %T9011560400
EMITC(2,RSA); EMITC(2,SFS); EMITC(1,SED); EMITC(1,SFD); % %T9011560450
EMITC(6,CEQ); EMITC(1,JFC); EMITC(2,JFW); EMITC(0,SEC); % %T9011560500
EMITC(4,STC); EMIT(64); STREAMTOG ~ FALSE; G1 ~ BUMPL; % %T9011560550
IF TP ~ LL5 ! 0 THEN BEGIN EMITL(TP); GOGO END ELSE BEGIN % %T9011560600
EMITL(1); EMITERR(SGNO,L,"17") END; CONSTANTCLEAN; % %T9011560650
EMITB(BFC,G1,L); % %T9011560700
IF TP ~ LL7 ! 0 THEN BEGIN EMITL(TP); GOGO END ELSE BEGIN %T9011560725
EMITO(MKS); EMITPAIR(OUTSTR,LOD); EMITO(ECM); % %T9011560750
STREAMTOG ~ TRUE; EMITC(22,TRP); EMIT("PA"); EMIT("RI"); % %T9011560800
EMIT("TY"); EMIT(" E"); EMIT("RR"); EMIT("OR"); EMIT(". "); % %T9011560850
EMIT("RE"); EMIT("TY"); EMIT("PE"); EMIT("{!"); EMIT(64); % %T9011560900
STREAMTOG ~ FALSE; EMITL(22); EMITPAIR(NSTR,STD); % %T9011560950
EMITO(MKS); EMIT(0); EMITV(STRINGPRINT); EMITO(MKS); % %T9011561000
EMITV(TERPRIN); EMITB(BBW,BUMPL,L0); CONSTANTCLEAN; % %T9011561050
END; % %T9011561100
%T9011561200
%T9011561300
%T9011561400
%T9011561500
%T9011561600
%T9011561700
%T9011561800
%T9011561900
END ELSE BEGIN % ******************* WRITE ****************** %T9011562000
LABEL SEGMENTR; % %T9011562006
EMITV(TABR); EMITL(DAC[15]); EMITO(GTR); EMITPAIR(3,BFC); %T9011562008
EMITL(DAC[15]); EMITPAIR(TABR,STD); %T9011562009
%T9011562010
EMITO(MKS); EMITPAIR(DAC[9],LOD); EMITO(ECM); STREAMTOG ~TRUE;%T9011562011
EMITC(8,TRP); EMIT(" "); EMIT(" "); EMIT(" "); EMIT(" "); %T9011562012
EMITC(1,RSA); EMITC(16,TRW); EMIT(64); STREAMTOG ~ FALSE; %T9011562013
%T9311562014
%T9011562015
EMITV(DAC[2]); G1~BUMPL; %T9011562016
DACR(BOOLEAN(2),L3:=GETSPACE(TRUE,-7),L4:=GETSPACE(TRUE,-7),GTS); 11562018
EMITB(BFC,G1,L); EMIT(4); EMITPAIR(DAC[2],STD); %T9011562020
EMITO(MKS); EMITV(TABR); EMITPAIR(DAC[14],LOD); %T9011562021
EMITPAIR(DAC[9],LOD); EMIT(0); EMITO(ECM); STREAMTOG ~ TRUE; %Y9011562023
EMITC(4,SES); EMITC(1,SED); EMITC(6,SFS); EMITC(7,SFD); %T9011562024
EMITC(1,TRS); EMITC(3,RSA); EMITC(2,RDA); EMITC(1,CRF); %T9011562025
EMITC(4,BNS); EMITC(32,TRS); EMITC(32,TRS); EMITC(0,ENS); %T9011562026
EMITC(4,TRS); EMIT(64); STREAMTOG ~ FALSE; %T9011562027
DACR(FALSE,L3,L4,GTS); %T9011562029
EMITV(LMARG); EMITPAIR(CP,STD); BK(SUB); EMITO(XIT); % %T9011562030
IF TP ~ LL1 ! 0 THEN BEGIN % %T9011562035
ADJUST; L3 ~ PROGDESCBLDR(LDES,L,L3); % %T9011562040
EMIT(0); EMITPAIR(RMARGI,STD); EMIT(4); EMITPAIR(GRP,STD); % %T9011562060
EMITL(TP); GOGO END; %T9011562070
IF TP ~ LL4 ! 0 THEN BEGIN % %T9011562073
ADJUST; L4 ~ PROGDESCBLDR(LDES,L,L4); % %T9011562075
EMITL(TP); GOGO END; % %T9011562078
IF LL1 = 0 THEN BEGIN ADJUST; L3 ~ PROGDESCBLDR(LDES,L,L3); % %T9011562080
EMIT(4); EMITERR(SGNO,L,"19"); END; %T9011562085
IF LL4 = 0 THEN BEGIN ADJUST; L4 ~ PROGDESCBLDR(LDES,L,L4); % %T9011562090
EMIT(4); EMITERR(SGNO,L," 9"); END; %T9011562095
%T9011562100
END; % WRITE %T9011562200
END EMITDACOM; % %T9011562300
%T9011562400
%T9011562500
%T9011562600
%T9011562700
%T9011562800
%T9011562900
%T9011563000
%T9011563100
%T9011563200
%T9011563300
%T9011563400
%T9011563500
%T9011563600
%T9011563700
%T9011563800
%T9011563900
%T9011563950
%T9011564000
%T9011564100
PROCEDURE SFHEAD; %A11564200
BEGIN REAL R,S,T; %A11564300
DO BEGIN QUOTETOG ~ TRUE; %A11564350
IF STEPI = QUOTEOP OR ELCLASS = LITNO OR ELCLASS = 0 THEN %A11564400
R ~ SFTERM(BOOLEAN(2)) ELSE %A11564500
BEGIN QUOTETOG ~ FALSE; %A11564600
IF ELBAT[I].LVL ! 1 THEN FLAG(663); %A11564700
R ~ ELBAT[I].ADDRESS; %A11564800
IF ELCLASS = BOOID THEN SFTRC.[15:11] ~ R ELSE %A11564900
IF ELCLASS = REALID OR ELCLASS = INTID THEN BEGIN %A11565000
IF SFTRC.[26:11] ! 0 THEN FLAG(664); %A11565100
SFTRC.[26:11] ~ R END ELSE %A11565200
IF ELCLASS = PROCID THEN BEGIN %A11565300
IF T ~ TAKE(S~GIT(ELBAT[I])).[40:8] = 0 THEN BEGIN %A11565400
IF SFTRC.[37:11] ! 0 THEN FLAG(665); %A11565500
SFTRC.[37:11] ~ R END ELSE %A11565600
IF T ! 1 OR TAKE(S+1).CLASS ! REALID THEN FLAG(666) %A11565700
ELSE SFTRC.[4:11] ~ R END ELSE %A11565800
FLAG(667); %A11565900
STEPIT %A11566000
END %A11566100
END UNTIL ELCLASS ! COMMA; %A11566200
END OF SFHEAD; %A11566300
% %A11566400
REAL PROCEDURE SFTERM(BV); VALUE BV; BOOLEAN BV; %A11566500
BEGIN LABEL START,EXIT; %A11566600
REAL R,S,FIRST,LAST; %A11566700
BOOLEAN EQTOG,FST,CONSEQ; %A11566800
STREAM PROCEDURE PUT(A,B); VALUE B; %A11566900
BEGIN DI ~ A; SI ~ LOC B; DS ~ 5 DEC; DS ~ LIT "#" END; %A11567000
FORMAT OUT DCA("DCA ",I4), %A11567100
RANGE("RANGE ",I4," TO ",I4); %A11567200
FST ~ CONSEQ ~ TRUE; %A11567300
START: %A11567400
IF ELCLASS = LITNO THEN BEGIN SFPL ~ C; STEPIT END ELSE %A11567500
IF ELCLASS = QUOTEOP THEN BEGIN %A11567600
IF (R~ LNK[(S~GENQUOTE(FALSE)).[33:6],S.[39:9]]).[1:2] !2 %A11567700
AND S > 63 THEN FLAG(668); %A11567800
IF R ~ R.[33:15] ! 0 THEN SFPL ~ R ELSE %A11567900
BEGIN %A11568000
IF NOT EQTOG THEN SFPL ~ SFPL + 1; %A11568100
LNK[S.[33:6],S.[39:9]].[33:15] ~ SFPL; %A11568200
IF NOT BV.[46:1] THEN %A11568300
IF LISTOG THEN WRITE(LINE,DCA,SFPL) %A11568400
END END ELSE %A11568500
IF ELCLASS = 0 AND LEVEL = 1 AND BV.[46:1] THEN BEGIN %A11568600
IF NOT EQTOG THEN SFPL ~ SFPL + 1; %A11568700
ACCUM[0] ~ ELBAT[I] & DEFINEDID[2:41:7] & NEXTTEXT[11:32:16]; %T9211568750
E; %T9211568800
PUT(TEXT[NEXTTEXT.LINKR,NEXTTEXT.LINKC],SFPL); %T9211568900
NEXTTEXT ~ NEXTTEXT + 1; STEPIT END ELSE %T9211569000
BEGIN ERR(669); GO EXIT END; %A11569100
IF FST THEN BEGIN FIRST ~ LAST ~ SFPL; FST ~ FALSE END ELSE %A11569200
BEGIN %A11569300
IF SFPL < LAST THEN FLAG(670); %A11569400
IF NOT EQTOG THEN CONSEQ ~ CONSEQ AND LAST + 1 = SFPL; %A11569500
LAST ~ SFPL %A11569600
END; %A11569700
IF ELCLASS = FACTOP OR EQTOG ~ ELCLASS = RELOP THEN %A11569800
BEGIN STEPIT; GO START END; %A11569900
IF BV THEN SFTERM ~ FIRST & LAST [18:33:15] %A11570000
& REAL(CONSEQ) [1:47:1] ELSE %A11570100
SFTERM ~ FIRST; %A11570200
IF BV.[46:1] THEN %A11570300
IF LISTOG THEN WRITE(LINE,RANGE,FIRST,LAST); %A11570400
EXIT: QUOTETOG ~ FALSE; %A11570500
END OF SFTERM; %A11570600
% %A11570700
PROCEDURE SFEXP(TOP,FT,BL); VALUE TOP,FT,BL; %A11570800
BOOLEAN TOP,FT; REAL BL; %A11570900
BEGIN LABEL EXIT,START,LS,L2,L3,L1; %A11571000
LABEL L4; %A11571050
BOOLEAN GNF,FST,SW,SFO,B; %A11571100
REAL TB,BLL,LF,R,S,T,P,CT,A,TC; %A11571200
ARRAY SWA[0:127]; %A11571300
DEFINE GETNEXT = EMITO(MKS); EMITV(SFTRC.[37:11])#, %A11571400
GNFT = IF GNF THEN BEGIN GNF ~ FALSE; GETNEXT END#; %A11571500
SFO ~ SYMFORMAT; SYMFORMAT ~ FST ~ TRUE; LF ~ LFINAL; LFINAL~0; %A11571600
IF SFTRC.[37:11] = 0 OR SFTRC.[26:11] = 0 THEN FLAG(671); %A11571700
TB ~ 4095; ADJUST; BLL ~ L; %A11571800
IF TOP THEN BEGIN %A11571900
HOLDFR ~ 4095; BL ~ BLL; %A11572000
IF ELCLASS ! LFTBRKET THEN BEGIN ERR(672); GO EXIT END END; %A11572100
QUOTETOG ~ TRUE; %A11572200
IF SW~STEPI=DECLARATORS AND ELBAT[I].ADDRESS = SWITCHV THEN %A11572300
BEGIN STEPIT; T ~ BUMPL; CONSTANTCLEAN END; %A11572400
START: %A11572500
IF ELCLASS = LITNO OR ELCLASS = QUOTEOP THEN BEGIN %A11572600
QUOTETOG ~ TRUE; GNFT; R ~ SFTERM(TRUE); %A11572700
IF B ~ FST AND SW THEN BEGIN %A11572800
IF R > 0 THEN FLAG(673); %A11572900
FST ~ FALSE; %A11572950
IF CT = 0 THEN A ~ R.[33:15] ELSE %A11573000
IF P + 1 ! R.[33:15] THEN FLAG(673); %A11573100
R ~ (P ~ R.[18:15]) - R.[33:15]; ADJUST; %A11573200
IF CT+R>127 OR R < 0 THEN BEGIN FLAG(674);R~CT~0 END; %A11573300
DO SWA[CT~CT+1] ~ L UNTIL R ~ R - 1 < 0 END; %A11573400
IF GNF ~ ELCLASS = COLON THEN STEPIT ; %A11573500
IF NOT B THEN BEGIN %A11573600
EMITV(SFTRC.[26:11]); EMITL(S~R.[33:15]); %A11573700
IF S = R ~ R.[18:15] THEN EMITO(EQL) ELSE %A11573800
BEGIN EMITO(GEQ); EMITV(SFTRC.[26:11]); EMITL(R); %A11573900
EMITO(LEQ); EMITO(LND) END; %A11574000
L4: %A11574050
IF B ~ GNF AND(ELCLASS= LITNO OR ELCLASS = FACTOP) THEN %A11574100
BEGIN EMITO(LNG); R ~ BUMPL; %A11574200
IF ELCLASS = LITNO THEN BEGIN %A11574300
IF SFTRC.[4:11] = 0 THEN FLAG(675); %A11574400
EMITO(MKS); EMITL(C); EMITV(SFTRC.[4:11]); %A11574500
STEPIT END ELSE %A11574600
BEGIN STEPIT; STMT END; %A11574700
EMIT(0); %A11574800
END; %A11574900
IF FST THEN BEGIN LFINAL ~ BUMPL; FST ~ FALSE END ELSE %A11575000
BEGIN EMIT(HOLDFR); HOLDFR ~ L ~ L + 1 END; %A11575100
IF B THEN BEGIN EMITB(BFC,R,L); %A11575200
IF ELCLASS = SEMICOLON THEN BEGIN %A11575300
LS: QUOTETOG ~ TRUE; STEPIT; GO START END END END; %A11575400
IF NOT GNF THEN BEGIN %A11575500
IF ELCLASS = COMMA THEN BEGIN GETNEXT ; GO LS END; %A11575600
GNF ~ TRUE END; %A11575700
GO TO L2 END; %A11575800
IF FST AND SW THEN BEGIN ERR(676); GO EXIT END; %A11575900
IF ELCLASS=LABELID THEN BEGIN GNFT; LABELR; GO START END; %A11575950
QUOTETOG ~ FALSE; %A11576000
IF ELCLASS = FACTOP THEN BEGIN GNFT; %A11576100
IF STEPI = TRUTHV THEN BEGIN %A11576200
B ~ BOOLEAN(ELBAT[I].[26:1]); STEPIT; %A11576300
IF FST THEN BEGIN FST ~ FALSE; %A11576400
IF NOT B THEN BEGIN EMIT(0);LFINAL ~ BUMPL END %A11576500
END ELSE %A11576600
IF NOT B THEN BEGIN EMIT(0); EMIT(HOLDFR); %A11576700
HOLDFR ~ L ~ L + 1 END END ELSE %A11576710
BEGIN BEXP; %A11576720
IF FST THEN BEGIN EMITO(DUP); EMIT(0); EMITO(NEQ); %A11576800
LFINAL ~ BUMPL; FST ~ FALSE END; %A11576900
EMIT(HOLDFR); HOLDFR ~ L ~ L + 1; %A11577000
END; %A11577010
L1: IF ELCLASS = COMMA THEN GO LS ELSE GO L2 %A11577100
END; %A11577200
IF ELCLASS = LFTBRKET THEN BEGIN GNFT; %A11577300
SFEXP(FALSE,FST,BL); FST ~ FALSE; GO L1 END; %A11577400
IF ELCLASS=PERIOD OR ELCLASS=DOTOP THEN BEGIN GNFT; %A11577500
IF STEPI!REALID AND ELCLASS!INTID THEN BEGIN ERR(730); %A11577510
GO EXIT END; CHECKER(ELBAT[I]); EMITV(ELBAT[I].ADDRESS); %A11577520
EMITV(SFTRC.[26:11]); EMITO(EQL); STEPIT; GO L4 END; %A11577530
L2: IF ELCLASS = MULOP OR ELCLASS = ELSEV THEN BEGIN %A11577600
GNFT; EMIT(TB); TB ~ L ~ L + 1; %A11577700
IF FST THEN FLAG(677); CONSTANTCLEAN; %A11577800
QUOTETOG ~ FST ~ TRUE; ADJUST; STEPIT; %A11577900
IF LFINAL ! 0 THEN BEGIN EMITB(BFC,LFINAL,L); %A11578000
LFINAL ~ 0 END; %A11578100
GO START END; %A11578200
IF ELCLASS = RTBRKET THEN BEGIN STEPIT; %A11578300
GNFT; %A11578350
IF SW THEN BEGIN EMIT(TB); TB ~ L ~ L + 1; CONSTANTCLEAN; %A11578400
ADJUST; EMITB(BFW,T,L);EMITV(SFTRC.[26:11]); %A11578500
EMITO(DUP); EMITL(A); EMITO(GEQ); EMITO(XCH); %A11578600
EMITL(P); EMITO(LEQ); EMITO(LND); LFINAL ~ BUMPL; %A11578700
EMITV(SFTRC.[26:11]); EMITL(A); EMITO(SUB); %A11578800
EMITO(DUP); EMITO(ADD); EMITO(BFW); %A11578900
IF P-A+1!CT THEN FLAG(673); % TEMP %A11579000
FOR T ~ 1 STEP 1 UNTIL CT DO EMITB(BBW,BUMPL,SWA[T]); %A11579100
END; %A11579200
IF NOT FT THEN BEGIN %A11579300
IF LFINAL ! 0 THEN BEGIN T ~ L; L ~ LFINAL - 2; %A11579400
EMIT(HOLDFR); HOLDFR ~ LFINAL; L ~ T END; %A11579500
LFINAL ~ LF END; %A11579600
IF NOT SFO THEN BEGIN %A11579700
IF ELCLASS = COLON THEN STEPIT; %A11579800
IF ELCLASS ! LABELID OR NOT LOCAL(S~ELBAT[I]) THEN %A11579900
BEGIN ERR(678); GO EXIT END; %A11580000
STEPIT END; %A11580100
ADJUST; %A11580200
IF ERRORCOUNT = 0 THEN %A11580300
BEGIN %A11580325
IF TB = L THEN %A11580330
BEGIN %A11580335
TB ~ GET (L ~ L - 2); %A11580340
EMITO(NOP); EMITO(NOP); %A11580345
END; %A11580350
WHILE TB ! 4095 DO %A11580375
BEGIN %A11580400
T ~ GET (TB - 2); %A11580425
EMITB(BFW,TB,L); %A11580450
TB ~ T; %A11580475
END; %A11580500
END; %A11580550
IF B ~ TOP AND SFO THEN BEGIN EMITL(1); %A11580600
T ~ BUMPL; ADJUST END; %A11580700
IF TOP THEN BEGIN CT ~ L; %A11580800
IF ERRORCOUNT =0 THEN WHILE HOLDFR ! 4095 DO BEGIN %A11580900
R ~ GET(P ~ HOLDFR - 2); %A11581000
IF SFO THEN EMITB(BFC,HOLDFR,CT) ELSE %A11581100
BEGIN L ~ P; GOGEN(S,BFC) END; %A11581200
HOLDFR ~ R END; %A11581300
IF SFO THEN BEGIN EMITL(2); %A11581400
IF LFINAL ! 0 THEN BEGIN P ~ BUMPL; %A11581500
ADJUST; EMITB(BFC,LFINAL,L); EMIT(0); %A11581600
EMITB(BFW,P,L) END; %A11581700
EMITB(BFW,T,L); EMITPAIR(514,STD); END ELSE %A11581800
BEGIN %A11581900
IF LFINAL ! 0 THEN BEGIN L ~ LFINAL - 2; %A11582000
GOGEN(S,BFC) END; L ~ CT; %A11582100
END END; %A11582200
GO EXIT END; %A11582300
IF ELCLASS = NILV THEN BEGIN FST ~ FALSE; GNFT; %A11582310
STEPIT; GO L1 END; %A11582320
IF ACCUM[1] = "6RETUR" THEN BEGIN GNFT; STEPIT; %A11582400
% %A11582500
IF B ~ ACCUM[1] = "5START" THEN STEPIT; %A11582600
IF GNF ~ ELCLASS =UNTILV THEN BEGIN STEPIT; BEXP END; %A11582700
EMITB(IF GNF THEN BBC ELSE BBW,BUMPL,IF B THEN BL ELSE BLL); %A11582800
GNF ~ FALSE; %A11582900
L3: IF ELCLASS = SEMICOLON THEN GO LS ELSE GO L2 END; %A11583000
SYMFORMAT ~ FALSE; TC ~ ERRORCOUNT; STMT; %A11583100
IF TC ! ERRORCOUNT THEN GO EXIT; %A11583200
SYMFORMAT ~ TRUE; %A11583300
IF ELCLASS = SEMICOLON THEN GO LS; %A11583310
IF ELCLASS = ELSEV THEN GO L2; FLAG(119); %A11583320
EXIT: SYMFORMAT ~ SFO; %A11583400
END OF SFEXP; %A11583500
% REMOVE %M12000000
% REMOVE %M12001000
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
DBLSTO(TRUE,7,STD); EMITO(MKS); %T9312041120
DBLEMITV(TRUE,7); EMITV(DBLFACT); %T9312041130
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
REAL PROCEDURE FIXDEFINEINFO(T); VALUE T; REAL T; 12101000
BEGIN REAL K,S,P,J,EL; 12102000
12103000
12104000
12105000
12106000
MACROID~TRUE; 12107000
P ~ GIT(FIXDEFINEINFO ~ T); 12108000
12109000
12110000
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
12117000
12118000
12119000
12120000
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
BOOLEAN RECTOG; REAL RFN,RFT; %M13039100
BOOLEAN REMOTE; %A13039200
DEFINE CALL5=EMITL(0); EMITL(IOT); EMITL(8); EMITV(5) # ; 13039400
REAL SAVADDRSF ; 13039450
REAL ACCUM1; 13039500
INTEGER CURRENT, IOTEMP; COMMENT TEMP. FOR CORE SIZE CALCUL; 13039550
LABEL START; 13040000
INTEGER REMT1,INLTH,OUTLTH; % %T9013040100
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 ELSE %M13073000
IF G = RECORDV AND NOT SPECTOG THEN BEGIN %M13073500
G ~ GTA1[J~J-1]; RECTOG ~ TRUE END; %M13073600
I~I-1;M~1; 13074000
IF G=ALFAV 13075000
THEN M~0 13076000
ELSE J~J+1;K~J; STOPENTRY~NOT SPECTOG; 13077000
RESULT:=7; SCANNER; %T9313077050
IF IOT = 11 AND LEVEL = 1 THEN %A13077100
IF REMOTE := ACCUM[1] = "6REMOT" AND NOT SPECTOG AND %T9313077200
(RR9:=EXAMIN(NCR) = ";" OR RR9 = "(") THEN %T9313077250
BEGIN M~ 0; IOT ~ 9; COUNT ~ 5; %A13077300
SCRAM ~ (ACCUM[1] ~ "5TWXF1") MOD 125 END; %A13077400
DO 13078000
BEGIN 13079000
STOPDEFINE := TRUE ; 13079500
STEPIT; J~K;P2~P3~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 REMOTE THEN BEGIN TYPE ~ 19; % %T9013082600
DAC[13] ~ DAC[7] ~ ADDRSF END ELSE BEGIN %T9013082700
IF ELCLASS=LITNO 13083000
THEN 13084000
BEGIN 13085000
TYPE~ELBAT[I].ADDRESS; 13086000
STEPIT 13087000
END ELSE % 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 ~ 10; IF STEPI{IDMAX THEN BEGIN IF RECTOG THEN BEGIN %T9213088060
IF ACCUM1~ACCUM[1]="5LOCAL" THEN RFT ~1 ELSE IF ACCUM1="3NEW00" %M13088061
THEN RFT~2 ELSE IF ACCUM1="3OLD00"THEN RFT ~3 ELSE BEGIN RFT~1; %M13088062
I ~ I - 1 ; END ; IF STEPI = LITNO THEN% %A13088063
RFN ~ C ELSE I ~ I - (RFN ~ 1) END ELSE % %A13088064
IF ACCUM1~ACCUM[1]! %M13088065
"6RANDO" THEN BEGIN IF ACCUM1="6SERIA" THEN TYPE~TYPE+2 ELSE 13088070
IF ACCUM1="6UPDAT" THEN TYPE~TYPE+3 ELSE 13088080
FLAG(43); END; STEPIT END ELSE IF RECTOG THEN FLAG(43); %M13088085
IF ELCLASS=LFTBRKET THEN %M13088087
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 ELSE IF RECTOG THEN BEGIN FLAG(695); RFN ~ RFT ~ 1 END;% %A13088130
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 END; %A13101000
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
AND NOT REMOTE %A13104500
THEN FLAG(26); 13105000
IF NOT REMOTE THEN % %T1113105500
ARRAYFLAG~BOOLEAN(3) ; %B0213106000
13107000
EMITL(REAL(NOT(P2 OR P3)).[46:2]); 13108000
EMITL(FILENO);FILENO~FILENO+1; 13109000
CHECKDISJOINT(TAKE(LASTINFO).ADDRESS); 13110000
IF REMOTE THEN BEGIN EMITL(CURRENT ~ 11 - IOT); EMIT(4); % %T9013110100
%T9013110150
%T9013110175
REMT1 ~ L; EMITL(IOTEMP ~ 17); % %T9013110200
EMIT(0); EMITO(DUP) END ELSE BEGIN % %T9013110300
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
IF STEPI=LITNO AND(IOTEMP~TABLE(I+1)=COMMA OR IOTEMP=RTPAREN) %M13148000
THEN BEGIN EMITL(IOTEMP ~ ELBAT[I].ADDRESS); %M13148100
STEPIT END ELSE %M13148150
BEGIN AEXP; IOTEMP ~ 256; IF RECTOG OR TYPE=14 THEN %M13148200
FLAG(648) END; %M13148300
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; CALL5 END 13157010
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
13171000
13172000
13173000
13174000
13175000
13176000
13177000
13178000
13179000
13180000
ARRAYFLAG~FALSE ; %B0213180900
IF RECTOG THEN BEGIN %M13181500
PUT(TAKE(LASTINFO+1)&RFT[2:46:2],LASTINFO+1); %M13181600
RFN:=GETSPACE(FALSE,LASTINFO+1)&IOTEMP[16:38:10]&(RFN-1)[7:39:9]; 13181700
MOREWORDS ~1; %M13181800
PUTNBUMP(RFN&GETSPACE(FALSE,LASTINFO+1)[26:37:11]); %T9313181900
MOREWORDS := 0; END; %T9313181950
IF ELCLASS!RTPAREN THEN FLAG(29); 13182000
END; %A13182500
COMMENT TOTAL UP THE BUFFER REQ. PER FILE DECLARATION; 13183000
IOBUFFSIZE~IOBUFFSIZE + 50 + ( CURRENT | IOTEMP); 13184000
% VOID 13185000
% VOID 13186000
IF REMOTE THEN BEGIN %A13186100
EMITL(IOT); EMITL(8); EMITV(5); %T9213186150
DACP.[22:13] ~ LASTINFO; DACP.[35:13] ~ LASTINFO; %T9013186200
SCRAM ~ (ACCUM[1] ~ "5TWXF2") MOD 125; COUNT ~ 5; %A13186300
KLASSF ~ FILEID; FORMALF ~ VONF ~ FALSE; ADDRSF ~ SAVADDRSF; %T9013186400
MAKEUPACCUM; E; I ~ I - 1; END %T9013186500
END 13187000
UNTIL STEPI!COMMA; 13188000
IF REMOTE THEN BEGIN INTEGER R; %A13188100
LABEL BACKTRACK; %T9013188101
LABEL ITSABOUTTIMEIPUTINAFUNNYLABEL; %A13188102
OUTLTH ~ INLTH ~ DAC[6] ~ 136; DAC[15] ~ 72; %T9013188103
IF LEVEL ! 1 THEN FLAG(696);% %A13188105
IF ELCLASS = LEFTPAREN THEN BEGIN %A13188110
%T9013188115
STEPIT; %T9013188116
IF ELCLASS = LITNO THEN BEGIN % %T9013188120
C ~ REAL(BOOLEAN(C+7) AND NOT BOOLEAN(7)); % %T9013188122
OUTLTH~INLTH~((DAC[6]~IF C}136 THEN 136 ELSE C)+7) DIV 8; %T9313188123
IF C ! 136 THEN BEGIN R ~ L; L~ REMT1; EMITL(INLTH); % %T9013188124
L ~ R; IOBUFFSIZE ~ IOBUFFSIZE + 17 - INLTH END; % %T9013188125
IF STEPI = COMMA THEN STEPIT END; %T9013188127
%T9013188128
IF ELCLASS = LITNO THEN BEGIN % %T9013188129
BACKTRACK: %T9013188130
DAC[5] := IF C } INLTH|8 THEN INLTH|8 ELSE C; %T9313188131
%T9013188132
%T9013188133
IF STEPI = COMMA THEN STEPIT END; % %T9013188134
IF ACCUM[1] = "4WAIT0" THEN BEGIN % %T9013188135
IF STEPI ! LITNO THEN FLAG(661) ELSE BEGIN % %T9013188136
DAC[16] ~ IF C } 300 THEN 300 ELSE C; % %T9013188137
IF STEPI = COMMA THEN STEPIT END END;% %A13188138
FOR R ~ 11,17,0,12,18,19,20,21 DO BEGIN %T9013188140
IF ELCLASS = 0 THEN BEGIN KLASSF ~ LABELID; %A13188142
FORMALF:=VONF:=FALSE; DAC[R] := ADDRSF:=GETSPACE(TRUE,1); %T9313188144
MAKEUPACCUM; E; PUTNBUMP(0); END ELSE %A13188146
IF ELCLASS = FACTOP THEN ELSE %A13188150
IF ELCLASS = LITNO AND R = 17 THEN GO BACKTRACK ELSE %T9013188155
IF ELCLASS = LABELID THEN DAC[R] ~ GNAT(ELBAT[I]) ELSE %A13188160
GO TO ITSABOUTTIMEIPUTINAFUNNYLABEL; %A13188165
IF STEPI = COMMA THEN STEPIT END; %A13188170
ITSABOUTTIMEIPUTINAFUNNYLABEL: %A13188180
IF ELCLASS ! RTPAREN THEN BEGIN ERR(104); GO START END ELSE %A13188230
STEPIT END; %A13188240
ELBAT[I~I-1].CLASS ~ 0; %A13188250
SCRAM ~ (ACCUM[1] ~ "5TWXS2") MOD 125; COUNT ~ 5; %A13188260
P2 ~ STOPENTRY ~ FALSE; ENTRY(STRINGID); I ~ I - 1; %A13188270
PUTNBUMP(DAC[15]); EMITL(DAC[14] ~ ADDRSF); % %T9013188280
EMITPAIR(STRP,STD); EMITARRAY(DAC[14],OUTLTH,0,FALSE); % %T9013188290
EMITL(DAC[15]); EMITPAIR(RMARG,STD); % %T9013188300
SCRAM ~ (ACCUM[1] ~ "5TWXS1") MOD 125; %A13188310
ENTRY(STRINGID); PUTNBUMP(DAC[6]); %A13188320
EMITL(DAC[5] ~ ADDRSF); EMITPAIR(STRI,STD); %A13188330
EMITARRAY(ADDRSF,R ~ INLTH,0,FALSE); % %T9013188340
INOUTUSED.[44:1] ~ 1; INOUTUSED.[46:1] ~ 1; %A13188350
EMITL(DACOMI:=GETSPACE(TRUE,-6));EMITPAIR(FILPROI,STD); %T9313188360
EMITL(1); EMITPAIR(PROI,SND); EMITPAIR(PROTOG,SND); %A13188370
EMITPAIR(DAC[1]:=GETSPACE(TRUE,-1),SND); %T9313188380
EMITPAIR(DAC[8]:=GETSPACE(TRUE,-1),STD); %T9313188390
GTLSTAT; EMITL(DACOMO); EMITPAIR(FILPRO,STD); %A13188400
FOR R:=2 STEP 1 UNTIL 4 DO DAC[R] := GETSPACE(TRUE,-1); %T9313188410
EMIT(0); EMITPAIR(OUTOG,STD); EMITL(1); EMITPAIR(INITI,STD); %A13188415
STRINGMAX ~ MAX(STRINGMAX,DAC[15],DAC[6]); % %T9013188416
P2 ~ FALSE; LEVEL ~ 1 END; %A13188420
STOPENTRY~FALSE; 13189000
END ELSE 13190000
BEGIN 13191000
IF G!FORMATV THEN FLAG(33) ELSE %B0113192000
IF SPECTOG THEN ENTRY(FRMTID+REAL(GTA1[J-1]=SWITCHV))ELSE FORMATGEN13193000
END; 13194000
ARRAYFLAG := FALSE ; % 13194500
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; %D13196480
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
PASTOLIST; 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
IF ELCLASS=FACTOP THEN BEGIN PUT(ABS(TAKE(GT1)),GT1); %M13242100
POINTER ~ POINTER - GT1.INCR; END ELSE %M13242200
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
OR ELCLASS = RECSTRPROCID %M13278500
THEN IF TAKE(POINTER+1) < 0 13279000
THEN BEGIN GT1 ~ 161; 13280000
RECOV: MOVE(9,INFO[POINTER.LINKR,POINTER.LINKC],ACCUM);13281000
Q ~ ACCUM[1]; FLAG(GT1); ERRORTOG ~ TRUE END 13282000
END; 13283000
GT2~TAKE(POINTER+1); 13284000
GT3~GT2.PURPT; 13285000
STACKHEAD[(0&GT2[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
STREAM PROCEDURE XREFMOVE(S,C,SN,SQ,L,D); %DFB13301100
VALUE C,L; %DFB13301130
BEGIN %DFB13301160
DI:=D; %DFB13301190
DS:= 8 LIT" "; %DFB13301220
SI:=D; %DFB13301250
DS:=8 WDS; %DFB13301280
DI:=D; %DFB13301310
SI:=S; %DFB13301340
SI:=SI+3; %DFB13301370
DS:=C CHR; %DFB13301400
DI:=D; %DFB13301430
DI~DI+60; %DFB13301460
SI:=SN; %DFB13301490
DS:=4 DEC; %DFB13301520
SI:=SQ; %DFB13301610
DS:=8 DEC; %DFB13301640
SI:=LOC L; %DFB13301670
DS:=WDS; %DFB13301700
END; %DFB13301730
IF RINX~(NEXTINFO+WORDCOUNT~(COUNT+8|REAL(RECTYPE!0)+18)DIV 8).LINKR! %M13302000
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[1].[2:2] ~ NEWPART; %M13307500
IF RECTYPE!0 THEN ACCUM[WORDCOUNT-1] ~ RECTYPE; %M13307700
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 IF NOT SPECTOG OR MACROID THEN %DFB13310100
BEGIN %DFB13310200
XREFMOVE(ACCUM[1],COUNT,SGNO ,CARDNUMBER, %DFB13310300
XREFINFO[NEXTINFO.LINKR,NEXTINFO.LINKC]:=XLUN:=XLUN+1, %DFB13310400
XREFAY1); 13310450
WRITE(DSK1,10,XREFAY1[*]); %DFB13310500
END; %DFB13310600
LASTINFO~NEXTINFO; 13311000
NEXTINFO~NEXTINFO+WORDCOUNT 13312000
END; 13313000
PROCEDURE ENTRY(TYPE); 13314000
VALUE TYPE; 13315000
REAL TYPE; 13316000
COMMENT 13317000
ENTRY ASSUMES THAT I IS POINTING AT AN IDENTIFIER WHICH 13318000
IS BEING DECLARED AND MAKES UP THE ELBAT ENTRY FOR IT 13319000
ACCORD TO TYPE .IF THE ENTRY IS AN ARRAY AND NOT 13320000
A SPECIFICATION THEN A DESCRIPTOR IS PLACED IN THE STACK 13321000
FOR THE UPCOMING COMMUNICATE TO GET STORAGE FOR THE ARRAY(S) ;13322000
BEGIN 13323000
BOOLEAN SVTOG;% %D13323010
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 } STRINGARRAYID THEN %D13330550
IF VONF THEN BEGIN SVTOG ~ ERRORTOG; FLAG(15);% %D13330600
SPECTOG ~ ERRORTOG ~ SVTOG; END; % %D13330650
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 FOR DUP. DECLS. 13339000
IF LEVELF=LEVEL THEN FLAG(1); % DECL. TWICE IN BLOCK. 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 } STRINGARRAYID %M13346000
THEN IF P2 THEN BEGIN COMMENT OWN ARRAY; 13347000
EMITL(ADDRSF); EMITN(10); 13347500
END 13347510
ELSE CHECKDISJOINT(ADDRSF); 13347520
END; 13348000
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
XREFINFO[NEXTINFO.LINKR,NEXTINFO.LINKC] ~ XREFINFO[LINKT.LINKR, 13366100
LINKT.LINKC]; 13366102
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 (COMPUTE 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
INTEGER T5; %M13450500
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 13457000
P2~TRUE;IF SPECTOG THEN 13458000
FLAG(013)13459000
END 13460000
ELSE 13461000
IF T1= SAVEV THEN 13462000
BEGIN 13463000
P3~TRUE; 13464000
IF SPECTOG THEN 13465000
FLAG(014) 13466000
END 13467000
ELSE 13468000
IF T1 >FIELDV THEN BEGIN TYPEV ~ RECARRAYID; RECTYPE ~ T1 END ELSE%M13469000
IF T1=COMPLEXV THEN BEGIN TYPEV ~ DBLPLXARRAYID; %M13469100
IF GTA1[J-1]=DOUBLEV THEN BEGIN J~J-1; NEWPART ~ 2 END ELSE %M13469200
NEWPART ~ 1 END ELSE %M13469300
IF TYPEV ~ REALID+T1 >INTARRAYID OR TYPEV < STRINGARRAYID %M13469400
THEN BEGIN FLAG(000); TYPEV ~ REALARRAYID END; %M13469500
T5~ IF TYPEV = DBLPLXARRAYID THEN REAL(NEWPART=2)|2+2 ELSE 0; %M13469600
IF NOT SPECTOG THEN EMITO(MKS); SAVEINFO~NEXTINFO; 13470000
MARKSYM ~ TYPEV=SYMARRAYID AND RECLAIMTOG; %M13470500
ENTER(TYPEV); SAVEINFO2~NEXTINFO~NEXTINFO+1; 13471000
BETA1: 13472000
MARKSYM ~ FALSE; %M13472500
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 T5!0 THEN BEGIN %M13549050
IF SPECTOG THEN BEGIN %M13549060
IF T2>0 THEN BEGIN %M13549070
IF T ~ T2.[36:10]|T5 >1023 THEN FLAG(600); %M13549080
PUT(T2&T[36:38:10],NEXTINFO-1) %M13549090
END END ELSE %M13549100
BEGIN %M13549110
IF T2.[46:2]=0 THEN BEGIN %M13549120
IF T ~ T2.[36:10]|T5 {1023 THEN T2.[36:10] ~ T ELSE %M13549130
BEGIN EMITNUM(IF T2.[23:10]= ADD THEN -T ELSE T); %M13549140
EMITPAIR(T2:=GETSPACE(P2,-1),ISD); T2:=T2|4+SUBC+2; %T9313549150
END; PUT(T2,NEXTINFO-1) END ELSE %M13549160
BEGIN EMITV(T2.[35:11]); EMITL(T5); EMITO(MUL); %M13549170
EMITPAIR(T2.[35:11],ISD) END; %M13549180
IF P2 THEN BEGIN EMITO(XCH); EMITL(T5); EMITO(MUL); %M13549190
EMITO(XCH) END; %M13549200
EMITL(T5);EMITO(MUL) %M13549210
END END; %M13549220
IF NOT SPECTOG THEN 13550000
BEGIN 13551000
COMMENT KEEP COUNT OF NO. OF ARRAYS DECLARED; 13551400
NOOFARRAYS~NOOFARRAYS + GTA1[0]; 13551500
IF TYPEV= STRINGARRAYID THEN BEGIN %M13552000
T ~ NEXTINFO ~ NEXTINFO+1; %M13552100
IF K ~ GETSTRINGLENGTH(IF GTA1[0]=1 THEN SAVEINFO ELSE 0,0) %M13552200
> 8 THEN %M13552250
BEGIN IF P2 THEN EMITL(0); EMITL(T5 ~(K+7)DIV 8); %M13552300
EMITL(LBJ+1) END ELSE EMITL(LBJ); %M13552400
PUT(K,T-1) END ELSE EMITL(LBJ); EMITL(GTA1[0]); %M13552500
EMITL(REAL(P3) +2|REAL(P2)); 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
MARKSYM ~ TYPEV=SYMARRAYID AND RECLAIMTOG; %M13566500
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; NEWPART~RECTYPE ~ 0 END; %M13588000
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
IF LISTOG AND PRTOG THEN % %T0313633000
IF SINGLTOG THEN WRITE(LINE,PRINTSEGNO,SGAVL) 13633100
ELSE WRITE(LINE[DBL],PRINTSEGNO,SGAVL); 13633200
PROCEDURE SEGMENT(SIZE,NO,NOO); 13657000
VALUE SIZE,NO,NOO; 13658000
REAL SIZE,NO,NOO; 13659000
BEGIN 13660000
STREAM PROCEDURE MOVE2(S,D); BEGIN SI~S; DI~D; DS~2 WDS; END; 13674000
13675000
13676000
INTEGER T,NSEGS,J,CNTR; 13677000
DEFINE POINTER = NO.[38:3], NO.[41:7]#; 13677100
NSEGS~(ABS(SIZE)+29) DIV 30; 13678000
IF DA DIV CHUNK<T~(DA+ NSEGS) DIV CHUNK THEN DA~CHUNK|T; 13679000
PDPRT[PDINX.[37:5],PDINX. [42:6]] := 13680000
SIZE & NO[28:38:10] & DA[13:33:15] 13680100
& REAL(SAVEPRTOG)[3:47:1]; 13680200
PDINX~PDINX+1; SIZE~ABS(SIZE); 13681000
IF SIZE>SEGSIZEMAX THEN SEGSIZEMAX~SIZE; 13682000
AKKUM~AKKUM+SIZE; 13683000
IF SAVEPRTOG THEN AUXMEMREQ := AUXMEMREQ+16|(SIZE. [38:6]+1); 13683010
IF LISTOG AND PRTOG THEN % %T0313684000
IF SINGLTOG THEN WRITE(LINE,PRINTSIZE,NO,SIZE,NOO) 13684100
ELSE WRITE(LINE[DBL],PRINTSIZE,NO,SIZE,NOO); 13684200
13685000
13686000
13687000
13688000
CNTR~0; 13689000
DO BEGIN 13690000
FOR J~0 STEP 2 WHILE J<30 AND CNTR<SIZE DO 13691000
BEGIN MOVE2(EDOC[CNTR.[38:3], CNTR.[41:7]], CODE(J)); 13692000
CNTR ~ CNTR+2; 13692100
END; 13692200
IF ERRORCOUNT = 0 AND SAVETIME } 0 THEN %A13692300
WRITE(CODE[DA]);DA~DA+1; 13693000
END 13694000
UNTIL CNTR}SIZE; 13695000
IF BUILDLINE THEN 13695050
BEGIN CNTR ~ 0; NSEGS ~ ENILPTR DIV 30 +1; SIZE ~ ENILPTR+1; 13695150
IF DA DIV CHUNK < T ~ (DA+NSEGS) DIV CHUNK THEN DA ~ CHUNK|T; 13695200
LDICT[POINTER] ~ DA&SIZE[18:33:15]; 13695250
DO BEGIN 13695300
FOR J~0 STEP 2 WHILE J<30 AND CNTR<SIZE DO 13695350
BEGIN MOVE2(ENIL[CNTR.[38:3], CNTR.[41:7]], CODE(J)); 13695400
CNTR ~ CNTR+2; 13695450
END; 13695500
WRITE(CODE[DA]); DA ~ DA+1; 13695550
END UNTIL CNTR}SIZE; 13695600
END ELSE LDICT[POINTER] ~ -1; 13695650
END SEGMENT; 13696000
13697000
13698000
13699000
13700000
13701000
13702000
13703000
13704000
13705000
13706000
13707000
13708000
13709000
13710000
13711000
13712000
13713000
PROCEDURE ENTER(TYPE); 13714000
VALUE TYPE; 13715000
INTEGER TYPE; 13716000
BEGIN 13717000
G~GTA1[J~J-1]; 13718000
IF NOT SPECTOG 13719000
THEN 13720000
BEGIN 13721000
IF NOT P2 13722000
THEN IF P2~(G=OWNV) 13723000
THEN G~GTA1[J~J-1]; 13724000
IF NOT P3 13725000
THEN IF P3~(G=SAVEV) 13726000
THEN G~GTA1[J~J-1] 13727000
END; 13728000
IF G!0 THEN FLAG(25) ELSE ENTRY(TYPE) 13729000
END; 13730000
PROCEDURE HTTEOAP(GOTSTORAGE,RELAD,STOPPER,PRTAD); 13731000
VALUE GOTSTORAGE,RELAD,STOPPER,PRTAD; 13732000
BOOLEAN GOTSTORAGE; 13733000
REAL RELAD,STOPPER,PRTAD; 13734000
BEGIN 13735000
BOOLEAN BT; 13736000
REAL R,S,J; %M13736500
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 13750000
OR FAULTOG.[46:1] % %D0113750010
THEN 13751000
BEGIN ADJUST;LS~L; 13752000
IF BT OR GOTSTORAGE OR FAULTOG.[46:1] % %D0113753000
THEN 13754000
BEGIN % %D0113755000
% 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;SEGMENTSTART; 13780000
SGNO~SGAVL; 13781000
GT4 := LL; LL := 0; % %W4013782000
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);ELCLASS~"(";13791000
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
LL := GT4; % %W4013813500
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 %B0213819400
THEN FLAG(IF REAL(ARRAYFLAG)=3 THEN 509 ELSE 46) ; %B0213819410
COMMENT 46-ARRAE NON-LITERAL ARRAY BOUND NOT GLOBAL TO 13819500
ARRAY 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, 14016000
STRINGDEC,DOUBLEDEC,COMPLEXDEC,SYMDEC,RECORDEC,FIELDEC, %M14016500
STREAMERR,DEFINEDEC,CALLSTATEMENT,HF,START; 14017000
SWITCH DECLSW~ OWNERR, SAVERR,STRINGDEC,DOUBLEDEC,SYMDEC,RECORDEC, %M14018000
BOOLEANDEC,REALDEC,ALPHADEC,INTEGERDEC, %M14018500
LABELDEC,DUMPDEC,LISTDEC,OUTDEC,INDEC,MONITORDEC, 14019000
SWITCHDEC,PROCEDUREDEC,ARRAYDEC,FORMATDEC,FILEDEC, 14020000
STREAMERR,COMPLEXDEC,DEFINEDEC,FIELDEC; %M14021000
DEFINE NLOCS=10#,LOCBEGIN=PRTI#; 14022000
DEFINE LBP=[36:12]#; 14023000
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
REAL XITLISTO,RETLISTO,SYMLOCO,SYMFORMO; BOOLEAN SOPGO; %M14030500
INTEGER NCIIO; 14031000
INTEGER PROAD ; 14032000
INTEGER NTEXTO; 14032500
INTEGER FIRSTXO; 14033000
REAL RECORDLINKO; %M14033100
BOOLEAN SYMFORMATO; %A14033200
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(LEVEL!0,-6); %T9314044000
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
SYMLOCO ~ SYMLOC; SYMLOC ~ 0; %M14052200
SOPGO ~ SOPG; SOPG ~ SOP; XITLISTO ~ XITLIST; XITLIST~4095; %M14052500
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;AJUMP~FALSE; L~0;NINFOO~NEXTINFO; 14055000
RECORDLINKO ~ RECORDLINK; %M14055100
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
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
INTEGER INC,TC; TC ~ 0; %M14076500
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
BUP~BUP-TAKE(BUP+1).PURPT; 14088000
GO TO GETLP 14089000
END; 14090000
INC ~ GT1 ~ 0; %M14091000
IF TYPEV ~ G.CLASS=SYMID THEN %M14091010
IF BOOLEAN(G.VO) AND RECLAIMTOG THEN SYMFORM ~ SYMFORM+1; %M14091020
IF TYPEV } DBLPLXSTRPROCID AND TYPEV { %M14091030
RECARRAYID THEN IF TC ~(TYPEV-STRINGSTRPROCID)MOD 8 = 1 THEN %M14091100
INC ~ TAKE(BUP+1).[2:2] ELSE %M14091200
IF TC = 3 THEN INC ~ TAKE(INC~((TAKE(BUP+1).[12:6]+18)DIV 8) %M14091300
+ BUP) - 30 ELSE INC ~ 0; %M14092000
IF TYPEV=FRMTID OR TYPEV= SUPERFRMTID THEN G.ADDRESS~F~F+2 ELSE %M14093000
IF TYPEV=DBLPLXID THEN G.ADDRESS~F~(IF BOOLEAN(G.VO) THEN (IF INC=2 %M14094000
THEN 4 ELSE 2)ELSE 1) + F ELSE %M14094500
IF TYPEV=STRINGID THEN G.ADDRESS~F~F+3 -G.VO ELSE %M14095000
IF TYPEV{INTARRAYID AND TYPEV}STRINGARRAYID THEN %M14096000
BEGIN 14097000
T1~G.INCR; 14098000
GT1 ~N~TAKE(BUP+T1); 14099000
G.ADDRESS ~F~ REAL(TYPEV=STRINGARRAYID) +F+N+1; %M14100000
F ~ F - REAL(TYPEV=STRINGARRAYID); %M14100500
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; F ~ F + REAL(TYPEV=STRINGARRAYID) %M14112000
END 14113000
ELSE 14114000
G.ADDRESS~F~F+1; 14115000
PUT(G,BUP); IF GT1>7 THEN FLAG(601); %M14116000
G ~ G & GT1[32:45:3] & INC[27:43:5]; %M14116100
IF FWDTOG THEN %M14116150
BEGIN 14116200
IF(GT1~TAKE(MARK+PJ)).CLASS ! G.CLASS 14116300
COMMENT CLASS ERROR; THEN FLAG(49); 14116400
IF TC=3 OR TC=1 THEN BEGIN IF GT1.[27:5]!INC THEN FLAG(49) END; %M14116450
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; %M14120000
IF PROINFO.CLASS=STRINGPROCID OR %M14120250
PROINFO.CLASS=DBLPLXPROCID THEN %M14120500
PUT(TAKE(MARK)&(F+2)[30:38:10],MARK); %M14120600
END; 14121000
SPECTOG~FALSE; 14122000
GO TO HF 14123000
END 14124000
END; 14125000
STACKCT ~ 0; %A 14125500
WHILE STEPI = DECLARATORS AND DECLCHECK %M14126000
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~FALSE; 14133000
IF GTA1[J] < 30 THEN GO TO DECLSW[GTA1[J]]; %M14134000
P3 ~ TRUE; RECTYPE ~ GTA1[J]; ENTER(RECID); RECTYPE ~0; GO TO START; %M14134500
OWNERR:FLAG(20);J~J+1;GO TO REALDEC; 14135000
SAVERR:FLAG(21);J~J+1;GO TO REALDEC; 14136000
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
DOUBLEDEC: MOREWORDS ~ 1; P3 ~ TRUE; ENTER(DBLPLXID); %M14139100
MOREWORDS ~ 0; GO TO START; %M14139150
COMPLEXDEC: MOREWORDS ~ 1;P3 ~ TRUE; NEWPART ~1; %M14139200
IF GTA1[J-1]=DOUBLEV THEN BEGIN J ~ J - 1; MOREWORDS ~ 3; %M14139250
NEWPART ~ 2 END; ENTER(DBLPLXID); %M14139300
MOREWORDS ~ NEWPART ~ 0; GO TO START; %M14139350
SYMDEC: P3 ~ TRUE; MARKSYM ~ RECLAIMTOG; ENTER(SYMID); %M14139400
MARKSYM ~ FALSE; GO TO START; %M14139450
FIELDEC: FIELDGEN; GO TO START; %M14139500
RECORDEC: RECORDGEN; GO TO GOTSCHK; %M14139550
STRINGDEC: IF STRINGEN THEN GO TO GOTSCHK ELSE GO TO START; %M14139600
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 GTA1[J-1] =SYMV THEN SYMAC ELSE %M14147500
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; %D14158000
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(IF G ~ GTA1[J-1] = SYMV %A14161000
THEN SYMSTRPROCID ELSE FRMTID + REAL(G = SWITCHV)) ELSE %A14161100
IF GTA1[J-1] = SYMV THEN IF ELCLASS = FACTOP THEN SFHEAD ELSE %A14161500
GO TO PROCEDUREDEC ELSE %A14161600
FORMATGEN; GO TO START; 14162000
LISTDEC: 14163000
BEGIN 14164000
LABEL START; 14165000
IF G~GTA1[J] = LISTV AND G~ GTA1[J-1]= SWITCHV 14165500
THEN BEGIN HANDLESWLIST; GO TO GOTSCHK END; 14165510
IF SPECTOG 14166000
THEN 14167000
BEGIN 14168000
ENTRY(LISTID); 14169000
GO TO START 14170000
END; 14171000
STOPENTRY~STOPGSP~TRUE; I~I-1; 14172000
DO 14173000
BEGIN I~I+1; 14174000
JUMPCHKX; 14175000
ENTRY(LISTID); IF ELCLASS!LEFTPAREN THEN FLAG(31) ELSE STEPIT; 14176000
F~LISTGEN; 14177000
IF ELCLASS!RTPAREN THEN ERR(104) ELSE STEPIT; %W3314177500
PUT(TAKE(LASTINFO)&(IF MODE=0 THEN F 14178000
ELSE F:=GETSPACE(FALSE,LASTINFO+1)) % LIST DESCR. 14178001
[16:37:11],LASTINFO); 14179000
EMITSTORE(F,STD); 14180000
END 14181000
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
IF SPECTOG THEN NOGO; %M14198500
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) 14223000
THEN 14224000
BEGIN 14225000
GT1~PROGDESCBLDR(ADES,G,GT1); 14226000
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]&GT1[16:37:11],LASTINFO); 14245000
IF TB1 THEN 14246000
BEGIN 14247000
NEXTINFO~GT5; 14248000
LASTINFO~GT4; 14249000
END; 14250000
START: IF SPECTOG THEN NOGO %M14251000
END SWITCHDEC; 14252000
GO TO START; 14253000
DEFINEDEC: 14254000
GT1 ~ GTA1[J-1]; %A14254030
BEGIN LABEL START; 14254050
REAL J,K,DINFO,LINKA,LINKB,T; 14254100
BOOLEAN BV; BV := GT1 = SYMV; %T9314254900
STOPENTRY~STOPGSP~TRUE;I~I-1; 14255000
DO 14256000
BEGIN 14257000
IF STEPI = FACTOP AND BV THEN BEGIN QUOTETOG ~ TRUE; %A14257100
IF STEPI ! QUOTEOP THEN FLAG(688);% %A14257150
GT1 ~ GENQUOTE(TRUE); QUOTETOG ~ FALSE; I ~ I-1 END ELSE BEGIN %A14257200
STOPDEFINE:=TRUE; 14258000
IF BV THEN ENTRY(ALFATRNS) ELSE BEGIN %A14258500
MOVE(9,ACCUM[1],GTA1); %A14259000
IF T:=ELBAT[NXTELBT-1].LINK!0 THEN % DEFINED B4 IN PROGRAM. 14259002
IF T}NINFOO THEN FLAG(1); % DEFINED B4 IN THIS BLOCK. 14259004
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; 14259090
ACCUM[0].CLASS ~ DEFINEDID; 14259092
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 END; %A14259160
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
%T9214265930
%T9214265950
IF BV THEN BEGIN QUOTETOG ~ TRUE; %T9214266000
IF STEPI ! QUOTEOP THEN FLAG(688); PUTNBUMP(GENQUOTE(TRUE));%%A14266050
I ~ I -1; %M14266200
QUOTETOG ~ FALSE END ELSE BEGIN %A14266500
MACROID~TRUE; 14266600
LASTINFO ~ DINFO; %T9214266630
PUT(TAKE(DINFO) & NEXTTEXT[11:32:16], DINFO); %T9214266660
DEFINEGEN(FALSE, J & DINFO[18:33:15]); %T9214266700
MACROID~FALSE; 14266800
END; %A14266900
END END %M14267000
UNTIL STEPI!COMMA; 14268000
% %A14268500
START: STOPENTRY~STOPGSP~FALSE; END; GO TO START; 14269000
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
GOTCHA := GOTCHA OR NOT STREAMER; % NOT FOR XALG %T0314280500
IF G~GTA1[J~J-1]=0 THEN TYPEV~STRPROCID 14281000
ELSE 14282000
BEGIN 14283000
%M14284000
IF G=COMPLEXV THEN BEGIN TYPEV ~ DBLPLXSTRPROCID; %M14284300
IF GTA1[J-1]= DOUBLEV THEN BEGIN J~J-1; NEWPART~2 END ELSE %M14284500
NEWPART ~ 1 END ELSE %M14285000
IF TYPEV ~INTRNSICPROCID+G>INTSTRPROCID OR %M14285500
TYPEV < STRINGSTRPROCID THEN FLAG(4); %M14286000
IF NOT SPECTOG THEN 14287000
FUNCTOG~TRUE; 14288000
CHKSOB 14289000
END END 14290000
ELSE 14291000
BEGIN %M14291500
IF G=0 THEN TYPEV~PROCID 14292000
ELSE 14293000
IF G > FIELDV THEN BEGIN TYPEV ~RECPROCID; RECTYPE ~ G END ELSE %T9214294000
IF G = COMPLEXV THEN BEGIN TYPEV ~ DBLPLXPROCID; %T9214294100
IF GTA1[J-1]=DOUBLEV THEN BEGIN J~J-1; NEWPART~ 2 END ELSE %M14294200
NEWPART ~ 1 END ELSE %M14294300
IF (TYPEV~REALSTRPROCID+G)=INTSTRPROCID THEN %T9214294400
BEGIN NEXTSAVE~TRUE; TYPEV ~ PROCID END ELSE %T9214294600
IF TYPEV > INTPROCID OR TYPEV < STRINGPROCID THEN FLAG(005); %T9214295000
IF GTA1[J+1]=FORMATV THEN TYPEV ~ SYMSTRPROCID; %T9214295100
IF TYPEV!PROCID THEN BEGIN %T9214296000
IF (NEXTSAVE ~ GTA1[J-1] = SAVEV) THEN J ~ J - 1; %T9214296500
IF NOT SPECTOG THEN FUNCTOG ~ TRUE; CHKSOB; END; %T9214297000
END; %M14297500
IF SPECTOG 14298000
THEN 14299000
BEGIN 14300000
ENTRY(TYPEV); NEWPART ~ RECTYPE ~ 0; GO TO START2; %M14301000
END; 14302000
MODE~MODE+1; 14303000
LO~PROINFO; 14304000
SYMFORMO ~ SYMFORM; SYMFORM ~ 0; %M14304500
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 14310000
XMARK; 14310500
PUT(-G,LINKF+1); 14311000
IF REAL (NEXTSAVE)!G.[3:1] THEN FLAG(051); %T9214311050
IF TYPEV = DBLPLXPROCID THEN BEGIN IF G.[2:2]!NEWPART THEN %T9214311100
BEGIN FLAG(6); GO DOITANYWAY END END ELSE %M14311200
IF TYPEV = RECPROCID THEN BEGIN %M14311300
IF TAKE(((G.[12:6]+18)DIV 8)+LINKF)! RECTYPE %M14311400
THEN BEGIN FLAG(6); GO DOITANYWAY END END; %M14311500
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
NEWPART ~ RECTYPE ~ 0; %M14322500
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; %A14325000
IF SLABTOG ~ ELCLASS!LFTBRKET THEN %W1414325500
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 IF ELCLASS!RTBRKET OR SLABTOG THEN FLAG(008); %W1414337000
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
G~(GT2~TAKE(J+1)).PURPT; 14446000
IF GT1.[2:8] ! STLABID|2+1 THEN 14447000
STACKHEAD[(0&GT2[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
END; 14462000
LASTINFO~LASTINFOT;NEXTINFO~MARK+P+1; 14463000
END 14464000
ELSE 14465000
BEGIN 14466000
IF STEPI=FORWARDV 14467000
THEN 14468000
BEGIN 14469000
PUT(-TAKE(G:=PROINFO.LINK+1) & REAL(NEXTSAVE)[3:47:1],G); 14470000
PURGE(PINFOO); 14471000
STEPIT 14472000
END 14473000
ELSE 14474000
BEGIN 14475000
PROADO~PROAD; 14476000
RETLISTO ~ RETLIST; RETLIST ~ 4095; %M14476500
SYMFORMATO ~ SYMFORMAT; SYMFORMAT ~ PROINFO.CLASS=SYMSTRPROCID; %A14476600
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
BEGIN %M14479500
IF STEPI=DECLARATORS THEN IF DECLCHECK THEN %M14480000
BEGIN I~I-1; %M14481000
BLOCK(TRUE & NEXTSAVE[46:47:1]); 14482000
; PURGE(PINFOO); 14483000
GO TO STOP END; I ~I-1; ELCLASS~BEGINV END; %M14484000
BEGIN 14485000
JUMPCHKNX; 14486000
RELAD~L ; 14487000
IF NEXTSAVE THEN FLAG(052); 14487010
IF SYMFORMAT THEN SFEXP(TRUE,TRUE,0) ELSE %A14487500
STMT; %M14488000
IF RETLIST ! 4095 THEN HANDLRET(SYMFORM ! 0 AND FAULTOG.[46:1]); %T9214488200
MARKSYMDCR(-SYMFORM); %T9214488300
IF FAULTOG.[46:1] THEN BEGIN EMIT(40); EMITO(COM); END; % %D0114488500
HTTEOAP(FALSE,RELAD,PINFOO,PROAD); 14489000
END; 14490000
STOP: 14491000
RETLIST ~ RETLISTO; %M14491500
SYMFORMAT ~ SYMFORMATO; %A14491600
SUBLEVEL~TSUBLEVEL; 14492000
STACKCTR~STACKCTRO; 14493000
END; 14494000
END; 14495000
PROINFO~LO; 14496000
SYMFORM ~ SYMFORMO; %M14496500
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
FLAG(12);GO TO HF 14508000
END; 14509000
BEGINCTR ~ BEGINCTR-1; 14510000
IF RECORDLINK ! RECORDLINKO THEN BEGIN %A14510500
GOTSTORAGE ~ TRUE; GENRECORD(RECORDLINKO,TRUE); END; %M14510600
IF SYMFORMAT THEN SFEXP(TRUE,TRUE,0); %A14510700
IF ERRORTOG 14511000
THEN COMPOUNDTAIL 14512000
ELSE 14513000
BEGIN 14514000
STMT; 14515000
IF STEPI= DECLARATORS AND DECLCHECK %M14516000
THEN 14517000
BEGIN I~I-1; %M14518000
ELBAT[I].CLASS~SEMICOLON; 14519000
BEGINCTR~BEGINCTR+1; 14520000
GO TO START 14521000
END 14522000
ELSE 14523000
BEGIN I~I-1;COMPOUNDTAIL END %M14524000
END; 14525000
BEGIN 14526000
RELAD~FIRSTX; 14534000
IF STACKCTR>MAXSTACK 14535000
THEN MAXSTACK~STACKCTR; 14536000
SYMLOC ~ SYMLOC + SYMFORM; %M14536400
IF XITLIST! 4095 THEN HANDLXIT; %M14536500
IF GOTSTORAGE OR JUMPCTR=LEVEL OR FAULTOG.[46:1] 14537000
THEN 14538000
BEGIN IF SOP AND RETLIST!4095 THEN HANDLRET(TRUE); %M14538500
MARKSYMDCR(-SYMLOC); %M14538600
IF RECORDLINKO! RECORDLINK THEN GENRECORD(RECORDLINKO,FALSE); %M14538700
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
END ELSE BEGIN IF SOP AND RETLIST!4095 THEN HANDLRET(SYMLOC!0); %M14552500
MARKSYMDCR(-SYMLOC) END; %M14552600
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 % %D0114561000
BEGIN 14562000
ADJUST; RELAD~L; 14563000
IF GOTSTORAGE OR FAULTOG.[46:1] THEN BEGIN EMITV(BLOCKCTR);EMIT(4); %D0114564000
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 ERRORCOUNT=0 THEN %M14569010
IF LEVEL = 1 THEN %A14569020
EMITNEWX; % DO THE RUN TIME INITIALIZATION %A14569050
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; IF LEVEL+ERRORCOUNT=1 THEN EMITNONX %M14572000
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
PRTI~PRTIO; 14607000
FIRSTX~FIRSTXO; 14608000
SOPG ~ SOPGO; XITLIST ~ XITLISTO; SYMLOC~ SYMLOCO; %M14608100
RECORDLINKO ~ RECORDLINK;% %A14608200
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
EMITL(1) ; 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-STRINGPROCID).[45:3]-4; %M15019000
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
% %M15073500
T2 , COMMENT 2ND INTEGER OF PARTIAL WORD SYNTAX; 15074000
J ; COMMENT SUBSCRIPT COUNTER ; 15075000
REAL X, Z; 15075500
LABEL EXIT; 15076000
BOOLEAN DPO; %M15076250
DPO ~ DPTOG; DPTOG ~ FALSE; %M15076500
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+8) [2:41:7] & 514 [16:37:11]; %M15083000
END 15084000
ELSE CHECKER(TALL); 15085000
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
L1: %W5215092000
XMARK; 15092010
STEPIT; %W5215092015
IF TALL.FORMALNAME THEN %W5215092020
BEGIN 15093000
EMITN(TALL.ADDRESS); 15094000
IF T1!0 OR ELCLASS=FACTOP THEN BEGIN EMITO(DUP); %W5215095000
EMITO(COC); IF T1!0 AND ELCLASS=FACTOP THEN %W5215095500
EMITO(DUP) END; %W5215095600
END 15096000
ELSE IF T1!0 OR ELCLASS=FACTOP THEN BEGIN %W5215097000
EMITV(TALL.ADDRESS);IF T1!0 AND ELCLASS=FACTOP %W5215097500
THEN EMITO(DUP) END; %W5215097600
STACKCT ~ REAL(T1!0); %W5215098000
IF ELCLASS=FACTOP THEN ELBAT[I].CLASS ~ %W5215098200
ELCLASS ~ CROSSHATCH; %W5215098400
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
IF P1! FS THEN 15114000
BEGIN ERR(201);GO TO EXIT END 15115000
ELSE GO TO L1 15116000
%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
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
EMITL(5); EMITN(GNAT(PRINTI)); 15271000
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
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 ELCLASS=FACTOP THEN BEGIN %W5215306200
ELBAT[I].CLASS~ELCLASS~CROSSHATCH; %W5215306400
EMITO(DUP); IF T1=0 THEN EMITO(LOD) END; %W5215306600
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
EMITL(IF SPCLMON 15326000
THEN 3 15327000
ELSE 2); EMITV(GNAT(PRINTI)); 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 IF P1=FS THEN GO TO LAST 15342000
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
EMITL(5); 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
EMITL(5); EMITV(GNAT(PRINTI)); 15374000
END ; 15375000
EXIT: STACKCT ~ 0 END OF SUBSCRIPTED BLOCK; %A 15376000
EXIT: DPTOG ~ DPO END OF VARIABLE; %M15377000
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
PROCEDURE DECLARELABEL; %W2516023100
COMMENT DO LABEL DECLARATION UPON FIRST APPEARANCE OF LABEL; %W2516023200
BEGIN %W2516023300
KLASSF ~ STLABID; %W2516023400
VONF ~ FORMALF ~ FALSE; %W2516023500
ADDRSF ~ 0; %W2516023600
MAKEUPACCUM; E; PUTNBUMP(0); %W2516023700
ELBAT[I] ~ ACCUM[0]&LASTINFO[35:35:13]; %W2516023800
END DECLARELABEL; %W2516023900
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 IF SLABTOG THEN %W1416036000
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
IF SLABTOG THEN BEGIN %W1416048000
ADJUST END %69 %W1416048001
ELSE BEGIN FLAG(275); ERRORTOG~TRUE END; %W1416048500
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
IF SLABTOG THEN %W1416077500
ELSE BEGIN FLAG(275); ERRORTOG~TRUE END; %W1416077700
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,OTHERWISE16102000
IT IS FIXED WITH A 1 AND THE NOPS REPLACED WITH JFW 1, 16103000
RCA P. THIS IS DONE BECAUSE THE VALUE OF V AT EXECUTION 16104000
MAY = 0 AND THIS CODE CAUSES A JUMP AROUND THE NEST. 16105000
JUMPOUT INFO IS REMEMBERED IN A RECURSIVE CELL AND 16106000
NEST LEVEL INCREASED BY ONE. 16107000
WHEN THE RIGHT PAREN IS REACHED,(IF THE STATEMENTS IN 16108000
THE NEST COMPILED), JOINFO IS CHECKED FOR THE EXISTANCE 16109000
OF JUMPOUT STATEMENTS IN THE NEST,IF SO,THE THE JUMPS 16110000
ARE FIXED BY FAKING TOTOS INTO COMPILING THE REQUIRED 16111000
JUMPS. 16112000
FINALLY THE BNS IS FIXED,IF REQUIRED,AND NEST LEVEL 16113000
AND JOINFO RESTORED TO THEIR ORIGINAL VALUES. ; 16114000
PROCEDURE NESTS; 16115000
BEGIN 16116000
LABEL EXIT; 16117000
REAL JOINT,BNSFIX; 16118000
IF ELCLASS!LITNO THEN 16119000
BEGIN 16120000
EMITC(ELBAT[I].ADDRESS,CRF); BNSFIX~ L; 16121000
EMIT(BNS); %W1416122000
IF SLABTOG THEN BEGIN EMIT(NOP); EMIT(NOP) END; %W1416122500
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
IF SLABTOG THEN ADJUST; %W1416137000
PUT(TAKE(GIT(JOINFO))&L[LOCFLD],GIT(JOINFO)); 16138000
JUMPCHAIN(TAKE(JOINFO)&JOINFO[35:35:13]); 16139000
END; 16140000
IF BNSFIX ! 0 THEN FIXC(BNSFIX); 16141000
NESTLEVEL ~ NESTLEVEL-1; 16142000
JOINFO ~ JOINT ; 16143000
EXIT: END NESTS ; 16144000
COMMENT LABELS HANDLES STREAM LABELS. 16145000
ALL LABELS ARE ADJUSTED TO THE BEGINING OF THE NEXT 16146000
WORD (IN THE PROGRAMSTREAM). 16147000
IF A GO TO HAS NOT BEEN ENCOUNTERED BEFORE THE LABEL 16148000
THEN THE NEST LEVEL FIELD IS ENTERED AND THE DEFINED BIT, 16149000
[1:1], SET TO ONE. FOR DEFINED LABELS,IF WHERE A GO TO 16150000
HAS APPEARED, A CHECK IS MADE THAT THE CURRENT NEST LEVEL 16151000
MATCHES THE LEVEL OF THE LABEL. 16152000
MULTIPLE OCCURANCES ARE ALSO CHECKED FOR AND FLAGGED. 16153000
FINALLY,JUMPCHAIN IS CALLED TO FIX UP ANY FORWARD GO TOS 16154000
AND GET A PRT LOCATION FOR ANY JUMPS }64 SYLLABLES. ; 16155000
PROCEDURE LABELS; 16156000
BEGIN 16157000
REAL GT1; %W1416157500
IF SLABTOG THEN ADJUST; %W1416158000
GT1 ~ ELBAT[I]; 16159000
IF STEPI ! COLON THEN ERR(258) 16160000
ELSE 16161000
BEGIN 16162000
IF TAKE(GT2~GIT(GT1)).LOC ! 0 THEN FLAG(259); 16163000
IF GT1>0 THEN 16164000
BEGIN 16165000
PUT(-(TAKE(GT1)&NESTLEVEL[11:43:5]),GT1); 16166000
PUT(-L,GT2) 16167000
END 16168000
ELSE 16169000
BEGIN 16170000
IF GT1.LEVEL!NESTLEVEL THEN FLAG(257); 16171000
PUT((-L)&TAKE(GT2)[LGTFLD],GT2); 16172000
JUMPCHAIN(GT1); 16173000
END; 16174000
END 16175000
; STEPIT; 16176000
END LABELS ; 16177000
COMMENT IFS COMPILES IF STATEMENTS. 16178000
FIRST THE TEST IS COMPILED. NOTE THAT IN THE 16179000
CONSTRUCTS "SC RELOP DC" AND "SC RELOP STRING" THAT 16180000
THE SYLLABLE EMITTED IS FETCHED FROM ONE OF TWO FIELDS 16181000
IN THE ELBAT WORD FOR THE RELATIONAL OPERATOR. OTHERWISE 16182000
THE CODE IS EMITTED STRAIGHTAWAY. 16183000
A TEST IS MADE TO SEE WHETHER THE STATEMENT AFTER THE 16184000
"THEN" COULD POSSIBLY BE LONGER THAN 63 SYLLABLES,AND IF 16185000
SO, Z NOPS ARE EMITTED FOR FIXC IN CASE A RCA WILL HAVE 16186000
TO BE GENERATED. 16187000
THIS PROCEDURE DOES NO OPTIMAZATION IN THE CASES 16188000
IF THEN GO TO L,IF THEN STATEMENT ELSE GO TO L, OR 16189000
IF THEN GO TO L1 ELSE GO TO L2 ; 16190000
PROCEDURE IFS; BEGIN 16191000
DEFINE COMPARECODE =[42:6]#,TESTCODE=[36:6]#,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: IF STEPI ! RELOP THEN BEGIN ERR(264);GO TO EXIT END; 16207000
IF STEPI = DCV THEN EMITC( ADDR,ELBAT[I-1].COMPARECODE) 16208000
ELSE 16209000
IF ELCLASS = STRNGCON THEN 16210000
BEGIN 16211000
IF ACCUM[1].[12:6] ! 1 OR ELBAT[I-3].CLASS ! IFV 16211100
THEN BEGIN ERR(271); GO TO EXIT END 16211200
ELSE EMITC(ACCUM[1].[18:6],ELBAT[I-1].TESTCODE) 16211300
END 16211400
ELSE 16212000
IF ACCUM[1] ! "5ALPHA" THEN 16213000
BEGIN ERR(265);GO TO EXIT END 16213100
ELSE IF ELBAT[I-1].COMPARECODE=EQUALV THEN EMITC(17,TAN) 16214000
ELSE BEGIN FLAG(270); ERRORTOG ~ TRUE END; 16214100
GO TO IFTOG ; 16215000
IFSB: EMITC(1,BIT); 16216000
IFTOG: IF STEPI ! THENV THEN BEGIN ERR(266); GO TO 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
IF SLABTOG THEN %W1416225500
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 %77 %W2516253000
IF (IF ELCLASS{IDMAX THEN ELCLASS!LOCLID ELSE %77 %W2516253025
(ELCLASS=SUPERLISTID OR ELCLASS=FAULTID) ) THEN %77 %W2516253050
DECLARELABEL ELSE BEGIN ERR(260); GO TO EXIT END; %W2516253100
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
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 ! STRNGCON THEN BEGIN ERR(255);GO TO EXIT END; 16384000
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=COLON THEN BEGIN ADJUST;STEPIT;GO START END; %W1416478200
IF ELCLASS=STLABID THEN GO TO L2; %W2516478400
IF (IF ELCLASS{IDMAX THEN ELCLASS!LOCLID ELSE %77 %W2516478600
(ELCLASS=SUPERLISTID OR ELCLASS=FAULTID) ) THEN %77 %W2516478700
BEGIN DECLARELABEL; GO TO L2 END; %W2516478800
IF ELCLASS = LITNO OR ELCLASS=LOCLID AND TABLE(I+1) 16479000
= LFTPAREN THEN GO TO L1; 16480000
%W2516481000
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
XREFPT~XLUN~0; %DFB16496000
TIME1 ~ TIME(1); PROGRAM; 17000000
% %A17000050
IF FALSE THEN ENDOFITALL: IF ERRORMAX < @10 THEN %T9317000100
BEGIN ERRORMAX:=@10; ERRORTOG:=TRUE; FLAG(999); END; %T9317000150
END; % END OF SEGMENT 17000200
IF XREF THEN %DFB17001000
BEGIN DEFINE LSS= <#,GTR=>#,NEQ= !#,LEQ={#; %DFB17002000
DEFINE XREFINFO=INFO#; 17002005
WRITE(LINE[PAGE]); 17002520
LASTADDRESS~0; 17002530
FOR XREFPT:=XREFPT STEP 1 UNTIL 29 DO XREFAY2[XREFPT]:=100000000; 17003000
WRITE(DSK2,30,XREFAY2[*]); %DFB17004000
TOTALNO~REAL(XLUN >500)|1000+3000; 17004500
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
REWIND(DSK1) %DFB17022000
ELSE %DFB17023000
BEGIN %DFB17024000
A[9]:=XREFINFO[A[9].LINKR,A[9].LINKC]:=XLUN:=XLUN+1;%DFB17025000
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 LSS DC THEN TALLY:=1; %DFB17033000
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
END; %DFB17042000
BOOLEAN PROCEDURE COMP1(A,B); %DFB17042100
ARRAY A,B[0]; %DFB17042200
COMP1:=COMPS1(A,B); %DFB17042300
PROCEDURE HV1(A); %DFB17042400
ARRAY A[0]; %DFB17042500
HVS1(A); %DFB17042600
XLUN:=0; %DFB17043000
REWIND(DSK1); %DFB17044000
SORT(OUTPUT1,INPUT1,0,HV1,COMP1,10,TOTALNO ); %DFB17045000
END; %DFB17046000
BEGIN %DFB17047000
STREAM PROCEDURE PUP(S,D); %DFB17048000
BEGIN %DFB17049000
SI:=S; %DFB17050000
DI:=D; %DFB17051000
DS:=8 WDS; %DFB17052000
DS:= LIT " "; %DFB17053000
DS~8 CHR; %DFB17054000
DS~ 7 LIT" "; 17054500
5(DS~8LIT" "); 17054550
END; %DFB17055000
STREAM PROCEDURE PUP2(STAR,S,C,D); 17056000
VALUE STAR,S,C; 17056500
BEGIN %DFB17057000
DI:=D; %DFB17058000
C(DI:=DI+9); %DFB17059000
STAR(DI~DI-1; DS~LIT"*"); 17059100
SI:=LOC S; %DFB17060000
DS:= 8 DEC; %DFB17061000
END; %DFB17062000
STREAM PROCEDURE BLANKET(A); %DFB17063000
BEGIN %DFB17064000
DI:=A; %DFB17065000
DS:= 8 LIT " "; %DFB17066000
SI:=A; %DFB17067000
DS:= 14 WDS; %DFB17068000
END; %DFB17069000
ARRAY PAY[0:17]; %DFB17069500
BOOLEAN PROCEDURE INPUT2(A); %DFB17070000
ARRAY A[0]; %DFB17071000
BEGIN %DFB17072000
LABEL L,EOF; %DFB17073000
DEFINE I=XLUN#; %DFB17073100
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&XREFINFO[I.[10:3],I.[13:8]][10:37:11]; %DFB17080000
GO TO L; %DFB17081000
EOF: INPUT2:=TRUE; %DFB17082000
BLANKET(PAY); %DFB17083000
XREFAY1[9]:=-1; XREFPT~0; %DFB17084000
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 LOOP; %DFB17091100
IF B THEN %DFB17092000
WRITE(PRINTER,15,PAY[*]) %DFB17093000
ELSE %DFB17094000
IF LASTADDRESS ! LASTADDRESS~A[0] AND LASTADDRESS.[10:11]! 0 THEN 17094100
BEGIN %DFB17095000
LOOP: %DFB17095050
IF A[0].[10:11] GTR XREFAY1[9] THEN %DFB17095100
BEGIN %DFB17095200
READ(DSK1,10,XREFAY1[*]); %DFB17096000
WRITE(PRINTER[DBL],15,PAY[*]); %DFB17097000
PUP(XREFAY1,PAY); %DFB17098000
XREFPT:=0; %DFB17099000
WRITE(PRINTER,10,PAY[*]); %DFB17100000
BLANKET(PAY); %DFB17101000
GO LOOP; %DFB17101100
END; %DFB17102000
PUP2(LASTADDRESS < 0,LASTADDRESS.[21:27],17103000
XREFPT,PAY[1]); 17103010
IF XREFPT:=XREFPT+1=12 THEN %DFB17103100
BEGIN %DFB17103200
XREFPT:=0; %DFB17103300
WRITE(PRINTER,15,PAY[*]); %DFB17103400
BLANKET(PAY); %DFB17103500
END; %DFB17103600
END; %DFB17110000
END; %DFB17111000
PROCEDURE HV2(A); %DFB17112000
ARRAY A[0]; %DFB17113000
A[0]:=549755813887; %DFB17114000
BOOLEAN PROCEDURE COMP2(A,B); %DFB17115000
ARRAY A,B[0]; %DFB17116000
COMP2~ ABS(A[0]) LEQ ABS(B[0]); 17117000
XREFPT:=29; REWIND(DSK2); %DFB17118000
SORT(OUTPUT2,INPUT2,0,HV2,COMP2,1,TOTALNO ); %DFB17119000
END; %DFB17120000
END; %DFB17121000
END MAIN BLOCK; 17121500
END. 17122000
END;END. LAST CARD ON 0CRDING TAPE 99999999