mirror of
https://github.com/pkimpel/retro-b5500.git
synced 2026-02-14 04:04:29 +00:00
8267 lines
670 KiB
Plaintext
8267 lines
670 KiB
Plaintext
00000000
|
|
% F O R T R A N C O M P I L E R XVI.0.00 10/01/74 00001000
|
|
COMMENT: | TITLE: B5500/B5700 MARK XVI SYSTEM RELEASE | 00001010
|
|
| FILE ID: SYMBOL/FORTRAN TAPE ID: SYMBOL1/FILE000 | 00001011
|
|
| THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION | 00001012
|
|
| AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED | 00001013
|
|
| EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON | 00001014
|
|
| WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF | 00001015
|
|
| BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 | 00001016
|
|
| | 00001017
|
|
| COPYRIGHT (C) 1971, 1972, 1974 | 00001018
|
|
| BURROUGHS CORPORATION | 00001019
|
|
| AA320206 AA393180 AA332366 |; 00001020
|
|
% BEWARE ALL YE WHO SEEK HEREIN: %997-00001100
|
|
% THIS COMPILER IS A MESS. THE CONCEPTS OF CHARACTER CONVERSION FROM 00001105
|
|
% HOLLERITH (= EBCDIC), SCANNING, AND PARSING ARE NOT CLEARLY SEPARATED 00001110
|
|
% IN THE CODE, FOR EXAMPLE, PROCEDURE "SCAN" TRIES TO DO ALL 3 AT ONCE.00001115
|
|
% DAN ROSS UCSC APRIL 12, 1977 %997-00001120
|
|
COMMENT 00001900
|
|
FORTRAN ERROR MESSAGES 00002000
|
|
000 SYNTAX ERROR 00003000
|
|
001 MISSING OPERATOR OR PUNCTUATION 00004000
|
|
002 CONFLICTING COMMON AND/OR EQUIVALENCE ALLOCATION 00005000
|
|
003 MISSING RIGHT PARENTHESIS 00006000
|
|
004 ENTRY STMT ILLEGAL IN MAIN PGM OR BLOCK DATA 00007000
|
|
005 MISSING END STATEMENT 00008000
|
|
006 ARITHMETIC EXPRESSION REQUIRED 00009000
|
|
007 LOGICAL EXPRESSION REQUIRED 00010000
|
|
008 TOO MANY LEFT PARENTHESES 00011000
|
|
009 TOO MANY RIGHT PARENTHESES 00012000
|
|
010 FORMAL PARAMETER ILLEGAL IN COMMON 00013000
|
|
011 FORMAL PARAMETER ILLEGAL IN EQUIVALENCE 00014000
|
|
012 THIS STATEMENT ILLEGAL IN BLOCK DATA SUBPROGRAM 00015000
|
|
013 INFO ARRAY OVERFLOW 00016000
|
|
014 IMPROPER DO NEST 00017000
|
|
015 DO LABEL PREVIOUSLY DEFINED 00018000
|
|
016 UNRECOGNIZED STATEMENT TYPE 00019000
|
|
017 ILLEGAL DO STATEMENT 00020000
|
|
018 FORMAT STATEMENT MUST HAVE LABEL 00021000
|
|
019 UNDEFINED LABEL 00022000
|
|
020 MULTIPLE DEFINITION 00023000
|
|
021 ILLEGAL IDENTIFIER CLASS IN THIS CONTEXT 00024000
|
|
022 UNPAIRED QUOTES IN FORMAT 00025000
|
|
023 NOT ENOUGH SUBSCRIPTS 00026000
|
|
024 TOO MANY SUBSCRIPTS 00027000
|
|
025 FUNCTION OR SUBROUTINE PREVIOUSLY DEFINED 00028000
|
|
026 FORMAL PARAMETER MULTIPLY DEFINED IN HEADING 00029000
|
|
027 ILLEGAL USE OF NAMELIST 00030000
|
|
028 NUMBER OF PARAMETERS INCONSISTENT 00031000
|
|
029 CANNOT BRANCH TO FORMAT STATEMENT 00032000
|
|
030 SUBROUTINE OR FUNCTION NOT DEFINED IN PROGRAM 00033000
|
|
031 IDENTIFIER ALREADY GIVEN TYPE 00034000
|
|
032 ILLEGAL FORMAT SYNTAX 00035000
|
|
033 INCORRECT USE OF FILE 00036000
|
|
034 INCONSISTENT USE OF IDENTIFIER 00037000
|
|
035 ARRAY IDENTIFIER EXPECTED 00038000
|
|
036 EXPRESSION VALUE REQUIRED 00039000
|
|
037 ILLEGAL FILE CARD SYNTAX 00040000
|
|
038 ILLEGAL CONTROL ELEMENT 00041000
|
|
039 DECLARATION MUST PRECEDE FIRST REFERENCE 00042000
|
|
040 INCONSISTENT USE OF LABEL AS PARAMETER 00043000
|
|
041 NO. OF PARAMS. DISAGREES WITH PREV. REFERENCE 00044000
|
|
042 ILLEGAL USE OF FORMAL PARAMETER 00045000
|
|
043 ERROR IN HOLLERITH LITERAL CHARACTER COUNT 00046000
|
|
044 ILLEGAL ACTUAL PARAMETER 00047000
|
|
045 TOO MANY SEGMENTS IN SOURCE PROGRAM 00048000
|
|
046 TOO MANY PRT ASSIGNMENTS IN SOURCE PROGRAM 00049000
|
|
047 LAST BLOCK DECLARATION HAD LESS THAN 1024 WORDS 00050000
|
|
048 ILLEGAL I/O LIST ELEMENT 00051000
|
|
049 LEFT SIDE MUST BE SIMPLE OR SUBSCRIPTED VARIABLE 00052000
|
|
050 VARIABLE EXPECTED 00053000
|
|
051 ILLEGAL USE OF .OR. 00054000
|
|
052 ILLEGAL USE OF .AND. 00055000
|
|
053 ILLEGAL USE OF .NOT. 00056000
|
|
054 ILLEGAL USE OF RELATIONAL OPERATOR 00057000
|
|
055 ILLEGAL MIXED TYPES 00058000
|
|
056 ILLEGAL EXPRESSION STRUCTURE 00059000
|
|
057 ILLEGAL PARAMETER 00060000
|
|
058 RECORD BLOCK GREATER THAN 1023 00061000
|
|
059 TOO MANY OPTIONAL FILES 00062000
|
|
060 FILE CARDS MUST PRECEDE SOURCE DECK 00063000
|
|
061 BINARY WRITE STATEMENT HAS NO LIST 00064000
|
|
062 UNDEFINED FORMAT NUMBER 00065000
|
|
063 ILLEGAL EXPONENT IN CONSTANT 00066000
|
|
064 ILLEGAL CONSTANT IN DATA STATEMENT 00067000
|
|
065 MAIN PROGRAM MISSING 00068000
|
|
066 PARAMETER MUST BE ARRAY IDENTIFIER 00069000
|
|
067 PARAMETER MUST BE EXPRESSION 00070000
|
|
068 PARAMETER MUST BE LABEL 00071000
|
|
069 PARAMETER MUST BE FUNCTION IDENTIFIER 00072000
|
|
070 PARAMETER MUST BE FUNCTION OR SUBROUTINE ID 00073000
|
|
071 PARAMETER MUST BE SUBROUTINE IDENTIFIER 00074000
|
|
072 PARAMETER MUST BE ARRAY IDENTIFIER OR EXPRESSION 00075000
|
|
073 ARITHMETIC - LOGICAL CONFLICT ON STORE 00076000
|
|
074 ARRAYID MUST BE SUBSCRIPTED IN THIS CONTEXT 00077000
|
|
075 MORE THAN ONE MAIN PROGRAM 00078000
|
|
076 ONLY COMMON ELEMENTS PERMITTED 00079000
|
|
077 TOO MANY FILES 00080000
|
|
078 FORMAT OR NAMELIST TOO LONG 00081000
|
|
079 FORMAL PARAMETER MUST BE ARRAY IDENTIFIER 00082000
|
|
080 FORMAL PARAMETER MUST BE SIMPLE VARIABLE 00083000
|
|
081 FORMAL PARAMETER MUST BE FUNCTION IDENTIFIER 00084000
|
|
082 FORMAL PARAMETER MUST BE SUBROUTINE IDENTIFIER 00085000
|
|
083 FORMAL PARAMETER MUST BE FUNCTION OR SUBROUTINE 00086000
|
|
084 DO OR IMPLIED DO INDEX MUST BE INTEGER OR REAL 00087000
|
|
085 ILLEGAL COMPLEX CONSTANT 00088000
|
|
086 ILLEGAL MIXED TYPE STORE 00089000
|
|
087 CONSTANT EXCEEDS HARDWARE LIMITS 00090000
|
|
088 PARAMETER TYPE CONFLICTS WITH PREVIOUS USE 00091000
|
|
089 COMPLEX EXPRESSION ILLEGAL IN IF STATEMENT 00092000
|
|
090 COMPLEX EXPRESSION ILLEGAL IN RELATION 00093000
|
|
091 TOO MANY FORMATS REFERENCED BUT NOT YET FOUND 00094000
|
|
092 VARIABLE ARRAY BOUND MUST BE FORMAL VARIABLE 00095000
|
|
093 ARRAY BOUND MUST HAVE INTEGER OR REAL TYPE 00096000
|
|
094 COMMA OR RIGHT PARENTHESIS EXPECTED 00097000
|
|
095 ARRAY ALREADY GIVEN BOUNDS 00098000
|
|
096 ONLY FORMAL ARRAYS MAY BE GIVEN VARIABLE BOUNDS 00099000
|
|
097 MISSING LEFT PARENTHESIS IN IMPLIED DO 00100000
|
|
098 SUBSCRIPT MUST BE INTEGER OR REAL 00101000
|
|
099 ARRAY SIZE CANNOT EXCEED 32767 WORDS 00102000
|
|
100 COMMON OR EQUIV BLOCK CANNOT EXCEED 32767 WORDS 00103000
|
|
101 THIS STATEMENT ILLEGAL IN LOGICAL IF 00104000
|
|
102 REAL OR INTEGER TYPE REQUIRED 00105000
|
|
103 ARRAY BOUND INFORMATION REQUIRED 00106000
|
|
104 REPLACEMENT OPERATOR EXPECTED 00107000
|
|
105 IDENTIFIER EXPECTED 00108000
|
|
106 LEFT PARENTHESIS EXPECTED 00109000
|
|
107 ILLEGAL FORMAL PARAMETER 00110000
|
|
108 RIGHT PARENTHESIS EXPECTED 00111000
|
|
109 STATEMENT NUMBER EXPECTED 00112000
|
|
110 SLASH EXPECTED 00113000
|
|
111 ENTRY STATEMENT CANNOT START PROGRAM UNIT 00114000
|
|
112 ARRAY MUST BE DIMENSIONED PRIOR TO EQUIV STMT 00115000
|
|
113 INTEGER CONSTANT EXPECTED 00116000
|
|
114 COMMA EXPECTED 00117000
|
|
115 SLASH OR END OF STATEMENT EXPECTED 00118000
|
|
116 FORMAT, ARRAY OR NAMELIST EXPECTED 00119000
|
|
117 END OF STATEMENT EXPECTED 00120000
|
|
118 IO STATEMENT WITH NAMELIST CANNOT HAVE IO LIST 00121000
|
|
119 COMMA OR END OF STATEMENT EXPECTED 00122000
|
|
120 STRING TOO LONG 00123000
|
|
121 MISSING QUOTE AT END OF STRING 00124000
|
|
122 ILLEGAL ARRAY BOUND 00125000
|
|
123 TOO MANY HANGING BRANCHES 00126000
|
|
124 TOO MANY COMMON OR EQUIVALENCE ELEMENTS 00127000
|
|
125 ASTERISK EXPECTED 00128000
|
|
126 COMMA OR SLASH EXPECTED 00129000
|
|
127 DATA SET TOO LARGE 00130000
|
|
128 TOO MANY ENTRY STATEMENTS IN THIS SUBPROGRAM 00131000
|
|
129 DECIMAL WIDTH EXCEEDS FIELD WIDTH 00132000
|
|
130 UNSPECIFIED FIELD WIDTH 00133000
|
|
131 UNSPECIFIED SCALE FACTOR 00134000
|
|
132 ILLEGAL FORMAT CHARACTER 00135000
|
|
133 UNSPECIFIED DECIMAL FIELD 00136000
|
|
134 DECIMAL FIELD ILLEGAL FOR THIS SPECIFIER 00137000
|
|
135 ILLEGAL LABEL 00138000
|
|
136 UNDEFINED NAMELIST 00139000
|
|
137 MULTIPLY DEFINED ACTION LABELS 00140000
|
|
138 TOO MANY NESTED DO STATEMENTS 00141000
|
|
139 STMT FUNCTION ID AND EXPRESSION DISAGREE IN TYPE 00142000
|
|
140 ILLEGAL USE OF STATEMENT FUNCTION 00143000
|
|
141 UNRECOGNIZED CONSTRUCT 00143001
|
|
142 RETURN, STOP OR CALL EXIT REQUIRED IN SUBPROGRAM 00143002
|
|
143 FORMAT NUMBER USED PREVIOUSLY AS LABEL 00143003
|
|
144 LABEL USED PREVIOUSLY AS FORMAT NUMBER 00143004
|
|
145 NON-STANDARD RETURN REQUIRES LABEL PARAMETERS 00143005
|
|
146 DOUBLE OR COMPLEX REQUIRES EVEN OFFSET 00143006
|
|
147 FORMAL PARAMETER ILLEGAL IN DATA STATEMENT 00143007
|
|
148 TOO MANY LOCAL VARIABLES IN SOURCE PROGRAM 00143008
|
|
149 A $FREEFORM SOURCE LINE MUST HAVE < 67 COLS 00143009
|
|
150 A HOL/STRING UNDER $FREEFORM MUST BE ON ONE LINE 00143010
|
|
151 THIS CONSTRUCT IS ILLEGAL IN TSS FORTRAN 00143011
|
|
152 ILLEGAL FILE CARD PARAMETER VALUE 00143012
|
|
153 RETURN IN MAIN PROGRAM NOT ALLOWED 00143013
|
|
154 NON-POSITIVE SUBSCRIPTS ARE ILLEGAL 00143014
|
|
155 NON-IDENTIFIER USED FOR NAME OF LIBRARY ROUTINE 00143015
|
|
156 HYPHEN EXPECTED 00143016
|
|
157 SEQUENCE NUMBER EXPECTED 00143017
|
|
158 TOO MANY RECURSIVE CALLS ON LIBRARY ROUTINES 00143018
|
|
159 ASTERISK NOT ALLOWED IN READ STATEMENT 00143019
|
|
160 ASTERISK ONLY ALLOWED IN FREE FIELD OUTPUT 00143020
|
|
161 TOO MANY *-ED LIST ELEMENTS IN OUTPUT 00143021
|
|
162 HOL OR QUOTED STRING GREATER THAN 7 CHARACTERS IN EXPRESSION 00143022
|
|
164 PLUS NOT ALLOWED IN THIS FORMAT PHRASE 00143023
|
|
165 K NOT ALLOWED IN THIS FORMAT PHRASE 00143024
|
|
166 $ NOT ALLOWED IN THIS FORMAT PHRASE 00143025
|
|
167 INTRINSICS-NAMED FUNCT MUST HAVE PREVIOUS EXTERNAL REFERENCE. 00143026
|
|
168 DATA STMT COMMON ELEM MUST BE IN BLK DATA SUBPRM 00143027
|
|
169 VARIABLE CANNOT BE A FORMAL PARAMETER OR IN COMMON 00143028
|
|
170 CURRENT SUBPROGRAM ID EXPECTED 00143029
|
|
171 SUBPROGRAM, EXTERNAL, OR ARRAY ID EXPECTED 00143030
|
|
172 REPEAT, WIDTH, AND DECIMAL PARTS MUST BE LESS THAN 4091 00143031
|
|
173 REPEAT PART MUST BE EMPTY OR >0 AND < 4091 00143032
|
|
174 IN SUBPRGM:VARBL IS USED PRIOR TO USE IN DATSTMT 00143033
|
|
175 SYNTATICAL TOKEN CONTAINS TOO MANY CHARACTERS 00143034
|
|
176 INTEGER VALUE OF 8 EXPECTED 00143035
|
|
177 INTEGER VALUE OF 4 EXPECTED 00143036
|
|
178 INTEGER VALUE OF 4 OR 8 EXPECTED 00143037
|
|
179 AN ALPHABETIC LETTER (A,B,C,...,Z) IS REQUIRED 00143038
|
|
180 SECOND RANGE LETTER MUST BE GREATER THAN FIRST 00143039
|
|
181 IMPLICIT MUST BE FIRST STATEMENT IN PROGRAM UNIT 00143040
|
|
182 REAL/INTEGER/LOGICAL/COMPLEX/DOUBLEPRECISION REQ 00143041
|
|
183 ILLEGAL USE OF ASTERISK FOR RUN-TIME EDITING %111-00143042
|
|
184 NO PROGRAM UNIT FOR THIS END STATEMENT %112-00143043
|
|
; 00143999
|
|
BEGIN 00144000
|
|
INTEGER ERRORCT; COMMENT MUST BE FIRST DECLARED VARIABLE; 00145000
|
|
INTEGER SAVETIME; COMMENT MUST BE 2 ND DECLARED VARIABLE; 00146000
|
|
INTEGER CARDCOUNT,ESTIMATE,SEQERRCT ; 00147000
|
|
INTEGER SWARYCT; 00147500
|
|
REAL TWODPRTX; 00148000
|
|
REAL INITIALSEGNO; 00149000
|
|
REAL NEXT, FNEXT, NAME, NUMTYPE; 00150000
|
|
REAL A, B, I, J, P, T, TS, Z; 00151000
|
|
REAL RTI; % START COMPILE TIME 00152000
|
|
REAL EXPVALUE, EXPRESULT, EXPLINK; 00153000
|
|
REAL SPLINK, FUNVAR; 00155000
|
|
REAL DATAPRT,DATASTRT,DATALINK,DATASKP; 00155100
|
|
BOOLEAN SCANENTER ; % TRUE IFF SCAN JUST DID AN ENTER ON AN ID. 00155110
|
|
DEFINE NUMINTM1= 00155210
|
|
83 00155211
|
|
#;% NUMINTM1 IS THE NUMBER OF INTRINSICS MINUS 1; FOR EACH NEW INTRINSIC00155212
|
|
% WHICH IS ADDED, ADD 1 TO THE VALUE ON SEQ# 00155211. 00155213
|
|
DEFINE MAXEL=15#; 00156000
|
|
REAL ARRAY ENTRYLINK[0:MAXEL]; 00157000
|
|
REAL ELX; 00158000
|
|
ALPHA FNEW, NNEW; 00159000
|
|
REAL LABELMOM; 00160000
|
|
INTEGER LOCALS,PARMS,PRTS,FLAGROUTINECOUNTER ; 00161000
|
|
REAL LIMIT, VOIDTSEQ; 00161010
|
|
REAL IDINFO, TYPE, NSEG; 00162000
|
|
REAL FX1, FX2, FX3, NX1, NX2, NX3; 00163000
|
|
INTEGER LENGTH, LOWERBOUND, GROUPPRT; 00164000
|
|
ALPHA EQVID, INTID, REALID; 00165000
|
|
INTEGER ROOT, ADR; 00166000
|
|
INTEGER LASTMODE ; %%% = 1 FOR $CARD; = 2 FOR $TAPE. 00166100
|
|
BOOLEAN ERRORTOG,%PREVIOUS LISTED RECORD. 00167000
|
|
EOSTOG,%END OF STMT TOGGLE. 00168000
|
|
CODETOG,%LIST CODE GENERATED.. 00168200
|
|
TAPETOG,%MERGE TAPE INPUT. 00168400
|
|
EODS,%END OF DECLRSTMTS, RESET BY ENDS. 00168500
|
|
FILETOG,%PROCESSING FILE CARDS. 00168600
|
|
DEBUGTOG,%TO LIST OUT ENTRING AND EXITING PROCEDURES. 00169000
|
|
DESCREQ,%DESCRIPTOR REQUIRED. 00169020
|
|
XREF,%TO CREATE XREF OF PROGRAM. 00169030
|
|
SAVETOG;%VARIOUS BOOLEANS. 00169050
|
|
DEFINE LIBTAPE = SAVETOG.[47:1]#,%USE TO SAVE NEW WHILE INCLUDE. 00169053
|
|
SAVEDEBUGTOG = SAVETOG.[46:1]#,%SAVE DEBUGTOG WHILE IN $INCLUDE.00169054
|
|
SAVECODETOG = SAVETOG.[45:1]#,%SAVE CODETOG WHILE IN $INCLUDE. 00169055
|
|
SAVEPRTTOG = SAVETOG.[44:1]#,%SAVE PRTOG WHILE IN $INCLUDE. 00169056
|
|
SAVELISTOG = SAVETOG.[43:1]#,%SAVE LISTOG WHILE IN $INCLUDE. 00169057
|
|
VOIDTOG = SAVETOG.[42:1]#,%TO VOID CARDS OR TAPE 00169058
|
|
DATASTMTFLAG = SAVETOG.[41:1]#,%WHILE IN DATA STMTS, 00169059
|
|
F2TOG = SAVETOG.[40:1]#,%ADDR REL TO F+2, 00169060
|
|
CHECKTOG = SAVETOG.[39:1]#,%SEQ # CHECK, 00169061
|
|
LISTOG = SAVETOG.[38:1]#,%TO LIST OUTPUT, 00169062
|
|
LISTLIBTOG = SAVETOG.[37:1]#,%TO LIST LIBRARY OUTPUT, 00169063
|
|
SEQTOG = SAVETOG.[36:1]#,%TO RESEQ INPUTS, 00169064
|
|
SEQERRORS = SAVETOG.[35:1]#,%IF SEQUENCE ERRORS. 00169065
|
|
TIMETOG = SAVETOG.[34:1]#,%TO LIST WRAPUP INFO ONLY. 00169066
|
|
PRTOG = SAVETOG.[33:1]#,%TO LIST STORAGE MAP. 00169067
|
|
NEWTPTOG = SAVETOG.[32:1]#,%CREATE NEW SYMBOLIC TAPE. 00169068
|
|
SINGLETOG = SAVETOG.[31:1]#,%TO LIST OUTPUT SINGLE SPACED. 00169069
|
|
SEGOVFLAG = SAVETOG.[30:1]#,%SEGMENT OVERFLOW. 00169070
|
|
FIRSTCALL = SAVETOG.[29:1]#,%TO LIST COMPILER HEADING. 00169071
|
|
RETURNFOUND = SAVETOG.[28:1]#,%RETURN,CALL EXIT,STOP FOUND. 00169072
|
|
ENDSEGTOG = SAVETOG.[27:1]#,%END OF SEGMENT. 00169073
|
|
LOGIFTOG = SAVETOG.[26:1]#,%PROCESSING LOGICAL IF STMT. 00169074
|
|
NOTOPIO = SAVETOG.[25:1]#, 00169075
|
|
DATATOG = SAVETOG.[24:1]#,%WHILE IN DATA STMTS. 00169076
|
|
FREEFTOG = SAVETOG.[23:1]#,%FREE FIELD INPUT. 00169077
|
|
SEGPTOG = SAVETOG.[22:1]#,%DONT PAGE AFTER SUBPRGM 00169078
|
|
GLOBALNAME = SAVETOG.[21:1]#,%TO WRITE ALL IDENTIFIERS. 00169079
|
|
NAMEDESC = SAVETOG.[20:1]#,%IF GLOBALNAME OR LOCALNAME TRUE 00169080
|
|
LOCALNAME = SAVETOG.[19:1]#,%TO WRITE AN IDENTIFIER. 00169081
|
|
TSSEDITOG = SAVETOG.[18:1]#,%TSSEDIT. 00169082
|
|
UNPRINTED = SAVETOG.[17:1]#,%TO LIST CARD,FALSE IF LISTED. 00169083
|
|
DCINPUT = SAVETOG.[16:1]#,%IF USING TSS FORTRAN. 00169084
|
|
SEGSW = SAVETOG.[15:1]#,%TO MAINTAIN LINEDICT/LINESEG. 00169085
|
|
TSSMESTOG = SAVETOG.[14:1]#,%TSSMES(ERRMES). 00169086
|
|
WARNED = SAVETOG.[13:1]#,%IS TSSEDIT WAS EVER EVOKED. 00169087
|
|
SEGSWFIXED = SAVETOG.[12:1]#,%IF SEGSW IS NOT TO BE ALTERED. 00169088
|
|
REMFIXED = SAVETOG.[11:1]#,%IF REMOTETOG ISNT TO BE ALTERED 00169089
|
|
REMOTETOG = SAVETOG.[10:1]#,%PRINT & READ STMTS = REMOTE 00169090
|
|
RANDOMTOG = SAVETOG.[10:1]#,%IF EXPR USED FOR RANDOM I/O. 00169091
|
|
VOIDTTOG = SAVETOG.[ 9:1]#,%TO VOID TAPE RECORDS ONLY. 00169092
|
|
DOLIST = SAVETOG.[ 8:1]#,%LIST DOLLAR CARDS. 00169093
|
|
HOLTOG = SAVETOG.[ 7:1]#,%INPUT IN HOLLERITH. 00169094
|
|
LISTPTOG = SAVETOG.[ 6:1]#,%LIST PATCHES ONLY. 00169095
|
|
PXREF = SAVETOG.[ 5:1]#,%TO LIST XREF OF PROGRAM. 00169096
|
|
LASTLINE = SAVETOG.[ 4:1]#,%TO DETR TO SKIP XREF. 00169097
|
|
XGLOBALS = SAVETOG.[ 3:1]#,%TO LET XREF KNOW OF DOING GLOBAL00169098
|
|
NTAPTOG = SAVETOG.[ 2:1]#,%TO CLOSE NEWTAPE IF EVER OPENED 00169099
|
|
SEENADOUB = SAVETOG.[40:1]#,%ARRAYDEC WONT BE USING THIS 00169100
|
|
%WHILE WE FIX DP COMMON ARRAY SZ 00169102
|
|
ENDSAVTOGDEF=#; 00169199
|
|
ARRAY SSNM[0:18] ; % THESE WORDS ARE USED FOR TEMP STORAGE AND STORING 00169200
|
|
% PERMANENT FLAGGED DATA. 00169201
|
|
DEFINE LASTSEQ=SSNM[0]#, LASTERR=SSNM[1]#, LINKLIST=SSNM[2]# ; 00169210
|
|
DEFINE VOIDSEQ=SSNM[3] # ; 00169220
|
|
ALPHA ARRAY ERRORBUFF,PRINTBUFF[0:14] ; 00169300
|
|
ARRAY INLINEINT[0:35] ; 00169310
|
|
DEFINE XRBUFF = 150#, XRBUFFDIV3=50 #; 00169320
|
|
ARRAY XRRY[0:XRBUFF-1] ; 00169330
|
|
INTEGER SEQBASE,SEQINCR; 00170000
|
|
INTEGER SCN,LABL,NEXTSCN,NEXTCARD; 00174000
|
|
INTEGER SAVECARD; % TO SAVE NEXTCART WHILE IN $ INCLUDE 00174100
|
|
INTEGER RESULT,INSERTDEPTH; 00174200
|
|
REAL INCLUDE; % CONTAINS "INCLUDE" 00174300
|
|
REAL DEBUGADR ; 00174310
|
|
ALPHA ACR0, CHR0, INITIALNCR; 00175000
|
|
ALPHA ACR, NCR ; 00176000
|
|
SAVE ARRAY TIPE[0:63] ; 00176500
|
|
REAL LASTNEXT ; 00176502
|
|
ALPHA NEXTACC, NEXTACC2; 00177000
|
|
ALPHA BLANKS; 00178000
|
|
ALPHA XTA; 00179000
|
|
ALPHA ARRAY EDOC[0:7, 0:127]; COMMENT HOLDS CODE EMITTED; 00180000
|
|
ALPHA ARRAY HOLDID[0:2]; 00181000
|
|
REAL NXAVIL,STRTSEG; 00182000
|
|
ALPHA ARRAY WOP[0:139]; % HOLDS NAME AND CODE OF WORD MODE OPERATORS 00183000
|
|
SAVE ALPHA ARRAY DB,TB,CB[0:9], 00184000
|
|
CRD[0:14]; 00185000
|
|
ALPHA ARRAY XR[0:32]; INTEGER XRI; 00185100
|
|
SAVE ARRAY ACCUM, EXACCUM[0:20] ; 00186000
|
|
REAL ACCUMSTOP, EXACCUMSTOP ; 00186100
|
|
REAL DBLOW; 00187000
|
|
REAL MAX; 00188000
|
|
ALPHA ACR1, CHR1; 00189000
|
|
ALPHA ARRAY PERIODWORD[0:10]; 00190000
|
|
REAL ARRAY MAP[0:7]; 00191000
|
|
REAL F1, F2; 00192000
|
|
INTEGER C1, C2; 00193000
|
|
DEFINE 00194000
|
|
RSP=14 #, RSP1=15 #, RWP=29 #, 00194020
|
|
RSH=41 #, RSH1=42 #, RWS=83 #; 00194040
|
|
ALPHA ARRAY RESERVEDWORDSLP[0:RWP], RESLENGTHLP,LPGLOBAL[0:RSP], 00195000
|
|
RESERVEDWORDS [0:RWS], RESLENGTH [0:RSH] ; 00195010
|
|
SAVE REAL ARRAY PR, OPST [0:25]; % USED IN EXPR ONLY 00196000
|
|
DEFINE PARMLINK = LSTT#; 00197000
|
|
ALPHA BUFF, BUFL, SYMBOL; 00198000
|
|
INTEGER TV, % INDEX INTO INFO FOR PRT OF LIST NAMES 00199100
|
|
SAVESUBS, % MAX NUMBER OF SUBSCRIPTS FOR NAMELIST IDENTIFIERS 00199120
|
|
NAMEIND ; % INDEX INTO NAMLIST IDENTIFIERS ARRAY 00199130
|
|
ARRAY NAMLIST[0:256]; % ARRAY TO STOKE NAMELIST IDENTIFIERS 00199200
|
|
ALPHA LISTID; 00199300
|
|
REAL ARRAY BDPRT[0:20]; REAL BDX; 00200000
|
|
DEFINE MAXSTRING = 49#; 00201000
|
|
ALPHA ARRAY STRINGARRAY[0:MAXSTRING]; 00202000
|
|
REAL STRINGSIZE; % NUMBER OF WORDS IN STRING 00203000
|
|
DEFINE LSTMAX = 256#; 00204000
|
|
REAL ARRAY LSTT, LSTP[0:LSTMAX]; 00205000
|
|
INTEGER LSTI,LSTS,LSTA; 00206000
|
|
DEFINE MAXOPFILES = 63#, BIGGESTFILENB = 99#; 00207000
|
|
ARRAY FILEINFO[0:3,0:MAXOPFILES]; 00208000
|
|
DEFINE % SOME FILE STUFF 00208100
|
|
SLOWV = 2#, 00208110
|
|
FASTV = 1#, 00208120
|
|
SENSPDEUNF= [1:8]#, 00208130
|
|
SENSE= [1:1]#, 00208135
|
|
SPDF = [2:2]#, 00208140
|
|
EUNF = [4:5]#, 00208150
|
|
FPBVERSION= 1#, 00208160
|
|
FPBVERSF = [1:8]#, 00208170
|
|
DKAREASZ = [9:39]#, 00208180
|
|
ENDFILDEF=#; 00208490
|
|
INTEGER MAXFILES; 00209000
|
|
ARRAY TEN[0:137]; 00210000
|
|
DEFINE LBRANCH = 50#; 00211000
|
|
REAL ARRAY BRANCHES[0:LBRANCH]; REAL LAX, BRANCHX; 00212000
|
|
INTEGER INXFIL,FILEARRAYPRT; 00213000
|
|
DEFINE MAXCOM=15 # ; 00214000
|
|
INTEGER SUPERMAXCOM; %%% SUPERMAXCOM = 128|(MAXCOM+1). 00214100
|
|
ALPHA ARRAY COM[0:MAXCOM,0:127] ; 00215000
|
|
REAL NEXTCOM; 00216000
|
|
ALPHA ARRAY INFO[0:31, 0:127]; 00217000
|
|
REAL ARYSZ; 00218000
|
|
ALPHA ARRAY EXTRAINFO[0:31, 0:127]; 00219000
|
|
REAL EXPT1, EXPT2, EXPT3; 00220000
|
|
DEFINE IR = [36:5]#, IC = [41:7]#; 00221000
|
|
REAL INFA,INFB,INFC; 00222000
|
|
INTEGER NEXTINFO, GLOBALNEXTINFO, NEXTEXTRA; 00223000
|
|
INTEGER NEXTSS; 00224000
|
|
DEFINE SHX=189#, GHX=61#; 00225000
|
|
REAL ARRAY STACKHEAD[0:SHX]; 00226000
|
|
REAL ARRAY GLOBALSTACKHEAD[0:GHX]; 00227000
|
|
REAL LA, DT, TEST; 00228000
|
|
ALPHA LADR1,LADR2,LADR3,LADR4,LADR5,LINFA; INTEGER LINDX,LADDR; 00229000
|
|
DEFINE MAXDOS=20#; 00230000
|
|
ALPHA ARRAY DOTEST, DOLAB[0:MAXDOS]; 00231000
|
|
ALPHA LISTART; 00232000
|
|
ALPHA ARRAY INT[0:NUMINTM1+NUMINTM1+2]; 00233000
|
|
ALPHA ARRAY TYPES[0:6], KLASS[0:14]; 00234000
|
|
INTEGER OP, PREC, IP, IT; 00235000
|
|
DEFINE DUMPSIZE=127 #; 00237000
|
|
ARRAY FNNHOLD[0:DUMPSIZE]; 00238000
|
|
INTEGER FNNINDEX,FNNPRT; 00239000
|
|
DEFINE MAXNBHANG = 30#; 00240000
|
|
ARRAY FNNHANG[0:MAXNBHANG]; 00241000
|
|
DEFINE INTCLASS=[6:3]#, INTPARMCLASS=[9:3]#, INTINLINE=[12:6]#, 00241010
|
|
INTPRT =[24:6]#, INTPARMS =[30:6]#, INTNUM =[36:12]#, 00241020
|
|
INAM =[12:36]#, INTX =[2:10]#, INTSEEN =[2:1]# ; 00241030
|
|
DEFINE 00241200
|
|
INSERTMAX = 20 #, % MAX NO OF RECURSIVE CALL ALLOW ON LIB ROUT 00241220
|
|
INSERTCOP = INSERTINFO[INSERTDEPTH,4] #, 00241240
|
|
INSERTMID = INSERTINFO[INSERTDEPTH,0] #, 00241260
|
|
INSERTFID = INSERTINFO[INSERTDEPTH,1] #, 00241280
|
|
INSERTINX = INSERTINFO[INSERTDEPTH,2] #, 00241300
|
|
INSERTSEQ = INSERTINFO[INSERTDEPTH,3] #; 00241320
|
|
ARRAY INSERTINFO[0:INSERTMAX,0:4]; 00241360
|
|
DEFINE MSRW=11 #; 00241900
|
|
ALPHA ARRAY MESSAGE[0:MSRW,0:96] ; 00242000
|
|
BOOLEAN ARRAY MSFL[0:MSRW]; 00242050
|
|
ALPHA ARRAY LINEDICT[0:7,0:127]; % LINE DICTIONARY ARRAY 00242100
|
|
ALPHA ARRAY LINESEG [0:11,0:127]; % LINE SEGMENT ARRAY 00242200
|
|
ARRAY TSSMESA[0:15] ; %%% BIT FLAGS PRNTD ERR MESSGS ({748). 00242220
|
|
INTEGER NOLIN; % NUMBER OF ENTRIES IN LINE SEGMENT 00242300
|
|
REAL LASTADDR; %%% STORES LAST ADR. 00242700
|
|
INTEGER WARNCOUNT; %%% COUNTS NUMBER OF TSS WARNINGS. 00242750
|
|
DEFINE CE = [2:1]#, %INFA %996-00243000
|
|
LASTC = [3:12]#, %INFA %996-00244000
|
|
SEGNO = [3:9]#, %INFA %996-00245000
|
|
CLASS = [15:5]#, %INFA %996-00246000
|
|
EQ = [20:1]#, %INFA %996-00246100
|
|
SUBCLASS = [21:3]#, %INFA %996-00247000
|
|
CLASNSUB = [14:10]#, %INFA %996-00248000
|
|
ADJ = [14:1]#, %INFA %996-00249000
|
|
TWOD = [14:1]#, %INFA %996-00250000
|
|
FORMAL = [13:1]#, %INFA %996-00251000
|
|
TYPEFIXED= [12:1]#, %INFA %996-00252000
|
|
ADDR = [24:12]#, %INFA %996-00253000
|
|
LINK = [36:12]#, %INFC %996-00254000
|
|
BASE = [18:15]#, %INFC %996-00255000
|
|
SIZE = [33:15]#, %INFC %996-00256000
|
|
BASENSIZE= [18:30]#, %INFC %996-00257000
|
|
NEXTRA = [2:6]#, %INFC %996-00258000
|
|
ADINFO = [8:10]#, %INFC %996-00259000
|
|
RELADD = [21:15]#, %INFA %996-00260000
|
|
TOCE = 2:47:1#, %INFA %996-00261000
|
|
TOSEGNO = 3:39:9#, %INFA %996-00262000
|
|
TOLASTC = 3:36:12#, %INFA %996-00262100
|
|
TOCLASS = 15:43:5#, %INFA %996-00263000
|
|
TOEQ = 20:47:1#, %INFA %996-00263100
|
|
TOSUBCL = 21:45:3#, %INFA %996-00264000
|
|
TOADJ = 14:47:1#, %INFA %996-00265000
|
|
TOFORMAL = 13:47:1#, %INFA %996-00266000
|
|
TOTYPE = 12:47:1#, %INFA %996-00267000
|
|
TOADDR = 24:36:12#, %INFA %996-00268000
|
|
TOLINK = 36:36:12#, %INFC %996-00269000
|
|
TOBASE = 18:33:15#, %INFC %996-00270000
|
|
TOSIZE = 33:33:15#, %INFC %996-00271000
|
|
TONEXTRA = 2:42:6#, %INFC %996-00272000
|
|
TOADINFO = 8:38:10#, %INFC %996-00273000
|
|
TORELADD = 21:33:15#, %INFA %996-00274000
|
|
%THE FOLLOWING CLASSES APPEAR IN THE 1ST WORD OF EACH 3-WORD ENTRY 00274998
|
|
%OF THE "INFO" ARRAY, AND MAY BE COPIED TO INFA.CLASS. %996-00274999
|
|
UNKNOWN = 0#, 00275000
|
|
ARRAYID = 1#, 00276000
|
|
VARID = 2#, 00277000
|
|
STMTFUNID= 3#, 00278000
|
|
NAMELIST = 4#, 00279000
|
|
FORMATID = 5#, 00280000
|
|
LABELID = 6#, 00281000
|
|
FUNID = 7#, 00282000
|
|
INTRFUNID= 8#, 00283000
|
|
EXTID = 9#, 00284000
|
|
SUBRID = 10#, 00285000
|
|
BLOCKID = 11#, 00286000
|
|
FILEID = 12#, 00287000
|
|
SUBSVAR = 13#, 00288000
|
|
EXPCLASS = 14#, 00289000
|
|
SBVEXP = 15#, 00290000
|
|
LISTSID = 16#, 00290050
|
|
JUNK = 17#, % NOT A GENUINE CLASS %996-00290055
|
|
DUMMY = 27#, 00290100
|
|
NUMCLASS = 28#, 00291000
|
|
RESERVED = 29#, 00292000
|
|
HEADER = 30#, 00293000
|
|
ENDCOM = 31#, 00294000
|
|
%THE FOLLOWING SUBCLASSES APPEAR IN THE 1ST WORD OF SOME 3-WORKD%996-00294998
|
|
%ENTRIES OF THE "INFO" ARRAY, AND MAY BE COPIED TO INFA.SUBCLASS. 00294999
|
|
INTYPE = 1#, 00295000
|
|
STRINGTYPE=2#, 00296000
|
|
REALTYPE = 3#, 00297000
|
|
LOGTYPE = 4#, 00298000
|
|
DOUBTYPE = 5#, 00299000
|
|
COMPTYPE = 6#; 00300000
|
|
DEFINE EOF= 500#, ID= 501#, NUM= 502#, PLUS= 503#, MINUS= 504#, 00301000
|
|
STAR= 505#, SLASH= 506#, LPAREN= 507#, RPAREN= 508#, 00302000
|
|
EQUAL= 509#, COMMA= 510#, SEMI= 511#, DOLLAR=0#, UPARROW=0# ; 00303000
|
|
DEFINE THRU = STEP 1 UNTIL #; %996-00316000
|
|
DEFINE 00317000
|
|
ADD = 16#, BBC = 22#, BBW = 534#, BFC = 38#, BFW = 550# 00318000
|
|
,CDC =168#, CHS =134#, COC = 40#, KOM =130#, DEL = 10# 00319000
|
|
,DUP =261#, EQUL=581#, GBC = 278#, GBW =790#, GEQL= 21# 00320000
|
|
,GFC =294#, GFW =806#, GRTR= 37#, IDV =384#, INX = 24# 00321000
|
|
,ISD =532#, ISN =548#, LEQL= 533#, LND = 67#, LNG = 19# 00322000
|
|
,LOD =260#, LOR = 35#, LQV = 131#, LESS=549#, MDS = 515# 00323000
|
|
,MKS = 72#, MUL = 64#, NEQL= 69#, NOP = 11#, PRL = 18# 00324000
|
|
,XRT = 12#, RDV =896#, RTN = 39#,RTS =167#, SND = 132# 00325000
|
|
, SSN = 70#, SSP = 582#, STD = 68#, SUB = 48#, XCH = 133# 00326000
|
|
,XIT = 71#, ZP1 =322#, DIU =128#, STN =132# 00327000
|
|
,DIA = 45#, DIB = 49#, TRB = 53#, ISO = 37# 00328000
|
|
,AD2 =17#, SB2 = 49#, ML2 = 65#, DV2 =129#, FTC = 197# 00329000
|
|
,SSF =280#, FTF =453#, CTC =709#, CTF = 965# 00330000
|
|
,TOP=262# 00330010
|
|
; 00331000
|
|
FORMAT FD(X100,"NEXT = ",I3,X2,2A6) ; 00332000
|
|
FORMAT SEGSTRT(X63, " START OF SEGMENT **********", I4), 00333000
|
|
FLAGROUTINEFORMAT(X41,A6,A2,X1,2A6," (",A1,I*,")"), 00333010
|
|
XHEDM(X40,"CROSS REFERENCE LISTING OF MAIN PROGRAM",X41,/, 00333050
|
|
X40,"----- --------- ------- -- ---- -------",X41), 00333055
|
|
XHEDS(X38, "CROSS REFERENCE LISTING OF SUBROUTINE ",A6,X38,/, 00333060
|
|
X38, "----- --------- ------- -- ---------- ",A6,X38), 00333065
|
|
XHEDF(X35,"CROSS REFERENCE LISTING OF ",A6,A1," FUNCTION ",A6, 00333070
|
|
X35,/,X35,"----- --------- ------- -- ",A6,A1," -------- ",A6, 00333075
|
|
X35), 00333076
|
|
XHEDG(X43,"CROSS REFERENCE LISTING OF GLOBALS",X43,/, 00333080
|
|
X43,"----- --------- ------- -- -------",X43), 00333085
|
|
XHEDB(X34,"CROSS REFERENCE LISTING OF BLOCK DATA SUBPROGRAM",X35,00333090
|
|
/,X34,"----- --------- ------- -- ----- ---- ----------",X35), 00333095
|
|
SEGEND (X70," SEGMENT",I5," IS",I5," LONG"); 00334000
|
|
ARRAY PDPRT [0:31,0:63]; 00335000
|
|
REAL PDINX; % INDEX OF LAST ENTRY IN PDPRT 00336000
|
|
REAL TSEGSZ; % RUNNING COUNT OF TOTAL SEGMENT SIZE; 00337000
|
|
COMMENT FORMAT OF PRT&SEGMENT ENTRIES, IN PDPRT; 00338000
|
|
DEFINE STYPF= [1:2]#, % 0 = PROGRAM SEGMENT-SEGMENT ENTRY ONLY 00339000
|
|
STYPC= 1:46:2#, % 1 = MCP INTRINSIC 00340000
|
|
% 2 = DATA SEGMENT 00341000
|
|
DTYPF= [4:2]#, % 0 = THUNK - PRT ENTRY ONLY 00342000
|
|
DTYPC= 4:46:2 #,% 1 = WORD MODE PROGRAM DESCRIPTOR 00343000
|
|
% 2 = LABEL DESCRIPTOR 00344000
|
|
% 3 = CHARACTER MODE PROGRAM DESCRIPTOR 00345000
|
|
PRTAF= [8:10]#, % ACTUAL PRT ADDRESS - PRT ENTRY 00346000
|
|
PRTAC= 8:38:10#, 00347000
|
|
RELADF = [18:10]#, % ADDRESS WITHIN SEGMENT -PRT ONLY 00348000
|
|
RELADC= 18:38:10#, 00349000
|
|
SGNOF= [28:10]#, % SEGMENT NUMBER - BOTH 00350000
|
|
SGNOC= 28:38:10#, 00351000
|
|
DKAI = [13:15]#, % RELATIVE DISK ADDRESS - SEGMENT ENTRY 00352000
|
|
DKAC = 13:33:15#, 00353000
|
|
SEGSZF =[38:10]#, % SEGMENT SIZE - SEGMENT ENTRY 00354000
|
|
SEGSZC =38:38:10#;% MUST BE 0 IF PRT ENTRY 00355000
|
|
DEFINE % SOME EXTERNAL CONSTANTS 00355100
|
|
BLKCNTRLINT = 5#, 00355110
|
|
FPLUS2 = 1538#, 00355120
|
|
ENDEXTCONDEF=#; 00355990
|
|
DEFINE PDIR = PDINX.[37:5]#, 00356000
|
|
PDIC = PDINX.[42:6]#; 00357000
|
|
DEFINE CIS = CRD[0]#, % CARD 00358000
|
|
TIS = CRD[1]#, % TAPE 00359000
|
|
TOS = CRD[2]#, % NEW TAPE 00360000
|
|
LOS = CRD[3]#; % PRINTER 00361000
|
|
DEFINE PWROOT=ROOT.IR,ROOT.IC #,PWI=I.IR,I.IC # ; 00362000
|
|
DEFINE GLOBALNEXT=NEXT#; 00363000
|
|
BEGIN % SCAN FPB TO SEE IF VARIOUS FILES ARE DISK OR TAPE 00364000
|
|
INTEGER STREAM PROCEDURE GETFPB(Q); VALUE Q; 00365000
|
|
BEGIN 00366000
|
|
SI ~ LOC GETFPB; SI ~ SI - 7; DI ~ LOC Q; DI ~ DI + 5; 00367000
|
|
SKIP 3 DB; 9(IF SB THEN DS ~ SET ELSE DS ~ RESET; 00368000
|
|
SKIP SB); 00369000
|
|
DI ~ LOC Q; SI ~ Q; DS ~ WDS; SI ~ Q; GETFPB ~ SI; 00370000
|
|
END; 00371000
|
|
INTEGER STREAM PROCEDURE GNC(Q); VALUE Q; 00372000
|
|
BEGIN SI ~ Q; SI ~ SI + 7; DI ~ LOC GNC; DI ~ DI +7; DS ~CHR END; 00373000
|
|
INTEGER FPBBASE; 00374000
|
|
FPBBASE ~ GETFPB(3); 00375000
|
|
TIS ~ TOS ~ 50; CIS ~ LOS ~ 0; 00376000
|
|
IF GNC(FPBBASE+3) =12 THEN CIS ~ 150; % CARD 00377000
|
|
IF GNC(FPBBASE+8) =12 THEN LOS ~ 150; % PRINTER 00378000
|
|
IF GNC(FPBBASE+13) = 12 THEN TOS ~ 150; % NEW TAPE; 00379000
|
|
IF GNC(FPBBASE+18) =12 THEN TIS ~ 150; % TAPE 00380000
|
|
END; 00381000
|
|
BEGIN COMMENT INNER BLOCK; 00382000
|
|
% *** DO NOT DECLARE ANY FILES PRIOR TO THIS POINT, DO NOT ALTER 00383000
|
|
% SEQUENCE OF FOLLOWING FILE DECLARATIONS 00384000
|
|
FILE CARD (5,10,CIS); 00385000
|
|
DEFINE LINESIZE = 900 #; 00386000
|
|
SAVE FILE LINE DISK SERIAL [20:LINESIZE] (2,15,LOS,SAVE 10); 00387000
|
|
SAVE FILE NEWTAPE DISK SERIAL [20:LINESIZE] "FORSYM" (2,10,TOS,SAVE 10);00388000
|
|
FILE TAPE "FORSYM" (2,10,TIS); 00389000
|
|
FILE REMOTE 19(2,10) ; 00389500
|
|
DEFINE CHUNK = 180#; 00390000
|
|
DEFINE PTR=LINE#,RITE=LINE#,CR=CARD#,TP=TAPE#; %515-00391000
|
|
FILE CODE DISK RANDOM [20:CHUNK] (4,30,SAVE ABS(SAVETIME)); 00392000
|
|
FILE LIBRARYFIL DISK RANDOM (2,10,150); 00392400
|
|
DEFINE LF = LIBRARYFIL#; 00392600
|
|
FILE XREFF DISK SERIAL[20:1500](2,XRBUFF) ; 00392700
|
|
FILE XREFG DISK SERIAL[20:1500](2,3,XRBUFF); 00392800
|
|
REAL DALOC; % DISK ADDRESS 00393000
|
|
LABEL POSTWRAPUP; 00393100
|
|
PROCEDURE EMITNUM(N); VALUE N; REAL N; FORWARD; 00394000
|
|
REAL PROCEDURE LOOKFORINTRINSIC(L); VALUE L; REAL L; FORWARD ; 00394500
|
|
PROCEDURE SEGOVF; FORWARD; 00395000
|
|
DEFINE BUMPADR= IF (ADR~ADR+1)=4089 THEN SEGOVF#; 00396000
|
|
DEFINE BUMPLOCALS = BEGIN IF LOCALS~LOCALS+1>255 THEN BEGIN FLAG(148); 00396500
|
|
LOCALS~2 END END#; 00396510
|
|
DEFINE BUMPPRT=BEGIN IF PRTS~PRTS+1>1023 THEN BEGIN FLAG(46); 00396600
|
|
PRTS~40 END END#; 00396610
|
|
DEFINE EDOCI = ADR.[36:3], ADR.[39:7]#; 00397000
|
|
DEFINE TWODPRT=IF TWODPRTX=0 THEN(TWODPRTX~PRTS~PRTS+1)ELSE TWODPRTX#; 00398000
|
|
REAL PROCEDURE SEARCH(E); VALUE E; REAL E; FORWARD; 00399010
|
|
PROCEDURE PRINTCARD; FORWARD; 00400000
|
|
INTEGER PROCEDURE FIELD(X); VALUE X; INTEGER X; FORWARD ; 00400010
|
|
ALPHA PROCEDURE NEED(T, C); VALUE T, C; ALPHA T, C; FORWARD; 00401000
|
|
ALPHA PROCEDURE GETSPACE(S); VALUE S; ALPHA S; FORWARD; 00402000
|
|
PROCEDURE EQUIV(R); VALUE R; REAL R; FORWARD; 00403000
|
|
PROCEDURE EXECUTABLE; FORWARD; 00403100
|
|
ALPHA PROCEDURE B2D(B); VALUE B; REAL B; FORWARD; 00404000
|
|
PROCEDURE DEBUGWORD (N); VALUE N; REAL N; FORWARD; 00405000
|
|
PROCEDURE EMITL(N); VALUE N; REAL N; FORWARD; 00406000
|
|
PROCEDURE ADJUST;FORWARD; 00407000
|
|
PROCEDURE DATIME; FORWARD; 00407500
|
|
PROCEDURE EMITB(A,C); VALUE A,C; REAL A; BOOLEAN C; FORWARD; 00408000
|
|
PROCEDURE FIXB(N); VALUE N; REAL N; FORWARD; 00408100
|
|
PROCEDURE EMITO(N); VALUE N; REAL N; FORWARD; 00409000
|
|
PROCEDURE EMITOPDCLIT(N); VALUE N; REAL N; FORWARD; 00410000
|
|
PROCEDURE EMITDESCLIT(N); VALUE N; REAL N; FORWARD; 00411000
|
|
PROCEDURE EMITPAIR(L,OP); VALUE L,OP; INTEGER L,OP; FORWARD; 00412000
|
|
PROCEDURE EMITN(N); VALUE N; REAL N; FORWARD; 00413000
|
|
PROCEDURE ARRAYDEC(I); VALUE I; REAL I; FORWARD; 00414000
|
|
INTEGER PROCEDURE ENTER(W, E); VALUE W, E; ALPHA W, E; FORWARD; 00415000
|
|
REAL PROCEDURE PRGDESCBLDR(A,B,C,D); VALUE A,B,C,D; REAL A,B,C,D; 00416000
|
|
FORWARD; 00417000
|
|
PROCEDURE WRITEDATA(A,B,C); VALUE A,B; REAL A,B; 00418000
|
|
ARRAY C[0]; FORWARD; 00419000
|
|
PROCEDURE SCAN; FORWARD; 00420000
|
|
PROCEDURE SEGMENT(A,B,C,D); VALUE A,B,C; 00421000
|
|
REAL A,B; BOOLEAN C; ARRAY D[0,0]; FORWARD; 00422000
|
|
STREAM PROCEDURE MOVESEQ(OLD,NEW); BEGIN DI~OLD; SI~NEW; DS~WDS END ; 00422010
|
|
PROCEDURE WRITAROW(N,ROW); VALUE N; INTEGER N; REAL ARRAY ROW[0] ; 00422100
|
|
IF SINGLETOG THEN WRITE(LINE,N,ROW[*]) ELSE WRITE(RITE,N,ROW[*]) ; 00422110
|
|
PROCEDURE WRITALIST(FMT,N,L1,L2,L3,L4,L5,L6,L7,L8); 00422120
|
|
VALUE N,L1,L2,L3,L4,L5,L6,L7,L8; INTEGER N; 00422130
|
|
REAL L1,L2,L3,L4,L5,L6,L7,L8; FORMAT FMT; 00422140
|
|
BEGIN 00422150
|
|
PRINTBUFF[1]~L1; 00422160
|
|
L1~1 ; 00422170
|
|
FOR L2~L2,L3,L4,L5,L6,L7,L8 DO PRINTBUFF[L1~L1+1]~L2 ; 00422180
|
|
IF SINGLETOG THEN WRITE(LINE,FMT,FOR L1~1 THRU N DO PRINTBUFF[L1]) 00422190
|
|
ELSE WRITE(RITE,FMT,FOR L1~1 THRU N DO PRINTBUFF[L1]) ; 00422200
|
|
END WRITALIST ; 00422210
|
|
STREAM PROCEDURE BLANKIT(A,N,P); VALUE N,P; 00422220
|
|
BEGIN DI~A; N(DS~8 LIT" "); P(DS~8 LIT"99999999") END ; 00422230
|
|
BOOLEAN STREAM PROCEDURE TSSMES(A,B); VALUE B; 00422235
|
|
BEGIN SI~A; SKIP B SB; IF SB THEN ELSE BEGIN TALLY~1; TSSMES~TALLY ; 00422240
|
|
DI~A; SKIP B DB; DS~SET END END OF TSSMES ; 00422250
|
|
STREAM PROCEDURE TSSEDIT(X,P1,P2,P3,P,N); VALUE P1,P2,P3,N ; 00422255
|
|
BEGIN DI~P;DS~16LIT"TSS WARNING: ";SI~X;SI~SI+2; DS~6CHR; DS~4LIT" ";00422260
|
|
P1(DS~48LIT"A TSS HOL OR QUOTED STRING MUST BE ON 1 LINE ") ; 00422262
|
|
P2(DS~48LIT"THIS CONSTRUCT IS ILLEGAL IN TSS FORTRAN ") ; 00422264
|
|
P3(DS~48LIT"THIS CONSTRUCT IS UNRESERVED IN TSS FORTRAN ") ; 00422266
|
|
DS~26LIT" "; DS~8LIT"*"; DS~LIT" "; SI~LOC N; DS~3DEC END TSSEDIT ; 00422268
|
|
PROCEDURE TSSED(X,N); VALUE X,N; ALPHA X; INTEGER N ; 00422270
|
|
BEGIN IF NOT (LISTOG OR SEQERRORS) THEN PRINTCARD ; UNPRINTED~FALSE ; 00422275
|
|
TSSEDIT(X,N=1,N=2,N=3,PRINTBUFF,WARNCOUNT~WARNCOUNT+1) ; 00422280
|
|
WRITAROW(14,PRINTBUFF) END OF TSSED; 00422285
|
|
PROCEDURE ERRMESS(N); VALUE N; INTEGER N; 00423000
|
|
BEGIN 00424000
|
|
00425000
|
|
STREAM PROCEDURE PLACE(D,N,X,S,E,L); VALUE N,E ; 00426000
|
|
BEGIN DI ~ D; DS ~ 6 LIT "ERROR "; 00427000
|
|
SI ~ LOC N; DS ~ 3 DEC; DS ~ 5 LIT ": "; 00428000
|
|
SI ~ X; SI ~ SI + 2; DS ~ 6 CHR; DS ~ 4 LIT " "; 00429000
|
|
SI~S; DS~6 WDS; DS~6 LIT" "; SI~L; DS~8 CHR; DS~14 LIT" " ; 00430000
|
|
DS ~ 8 LIT "X"; DS ~ LIT " "; 00431000
|
|
SI ~ LOC E; DS ~ 3 DEC; 00432000
|
|
END PLACE; 00433000
|
|
STREAM PROCEDURE DCPLACE(D,N,X,S,M,P); VALUE N,P; 00433100
|
|
BEGIN DI~D; DS~4LIT"ERR#"; SI~LOC N; DS~3 DEC; DS~3LIT" @ "; 00433200
|
|
SI~S; DS~8CHR; DS~2LIT": "; SI~X; SI~SI+2; DS~6CHR; DS~54LIT" " ; 00433300
|
|
END OF DCPLACE ; 00433400
|
|
ERRORCT~ERRORCT+1; 00433500
|
|
IF NOT MSFL[N DIV 16] THEN 00434000
|
|
BEGIN 00434020
|
|
MSFL[N DIV 16]~TRUE ; 00434030
|
|
CASE(N DIV 16)OF 00434040
|
|
BEGIN 00435000
|
|
FILL MESSAGE[0,*] WITH 00436000
|
|
"SYNTAX E","RROR "," "," "," "," ", %000 00437000
|
|
"MISSING ","OPERATOR"," OR PUNC","TUATION "," "," ", %001 00438000
|
|
"CONFLICT","ING COMM","ON AND/O","R EQUIVA","LENCE AL","LOCATION", %002 00439000
|
|
"MISSING ","RIGHT PA","RENTHESI","S "," "," ", %003 00440000
|
|
"ENTRY ST","MT ILLEG","AL IN MA","IN PGM O","R BLOCK ","DATA ", %004 00441000
|
|
"MISSING ","END STAT","EMENT "," "," "," ", %005 00442000
|
|
"ARITHMET","IC EXPRE","SSION RE","QUIRED "," "," ", %006 00443000
|
|
"LOGICAL ","EXPRESSI","ON REQUI","RED "," "," ", %007 00444000
|
|
"TOO MANY"," LEFT PA","RENTHESE","S "," "," ", %008 00445000
|
|
"TOO MANY"," RIGHT P","ARENTHES","ES "," "," ", %009 00446000
|
|
"FORMAL P","ARAMETER"," ILLEGAL"," IN COMM","ON "," ", %010 00447000
|
|
"FORMAL P","ARAMETER"," ILLEGAL"," IN EQUI","VALENCE "," ", %011 00448000
|
|
"THIS STA","TEMENT I","LLEGAL I","N BLOCK ","DATA SUB","PROGRAM ", %012 00449000
|
|
"INFO ARR","AY OVERF","LOW "," "," "," ", %013 00450000
|
|
"IMPROPER"," DO NEST"," "," "," "," ", %014 00451000
|
|
"DO LABEL"," PREVIOU","SLY DEFI","NED "," "," ", %015 00452000
|
|
0; 00453000
|
|
FILL MESSAGE[1,*] WITH 00454000
|
|
"UNRECOGN","IZED STA","TEMENT T","YPE "," "," ", %016 00455000
|
|
"ILLEGAL ","DO STATE","MENT "," "," "," ", %017 00456000
|
|
"FORMAT S","TATEMENT"," MUST HA","VE LABEL"," "," ", %018 00457000
|
|
"UNDEFINE","D LABEL "," "," "," "," ", %019 00458000
|
|
"MULTIPLE"," DEFINIT","ION "," "," "," ", %020 00459000
|
|
"ILLEGAL ","IDENTIFI","ER CLASS"," IN THIS"," CONTEXT"," ", %021 00460000
|
|
"UNPAIRED"," QUOTES ","IN FORMA","T "," "," ", %022 00461000
|
|
"NOT ENOU","GH SUBSC","RIPTS "," "," "," ", %023 00462000
|
|
"TOO MANY"," SUBSCRI","PTS "," "," "," ", %024 00463000
|
|
"FUNCTION"," OR SUBR","OUTINE P","REVIOUSL","Y DEFINE","D ", %025 00464000
|
|
"FORMAL P","ARAMETER"," MULTIPL","Y DEFINE","D IN HEA","DING ", %026 00465000
|
|
"ILLEGAL ","USE OF N","AMELIST "," "," "," ", %027 00466000
|
|
"NUMBER O","F PARAME","TERS INC","ONSISTEN","T "," ", %028 00467000
|
|
"CANNOT B","RANCH TO"," FORMAT ","STATEMEN","T "," ", %029 00468000
|
|
"SUBROUTI","NE OR FU","NCTION N","OT DEFIN","ED IN PR","OGRAM ", %030 00469000
|
|
"IDENTIFI","ER ALREA","DY GIVEN"," TYPE "," "," ", %031 00470000
|
|
0; 00471000 00472000 479000
|
|
FILL MESSAGE[2,*] WITH 00472000
|
|
"ILLEGAL ","FORMAT S","YNTAX "," "," "," ", %032 00473000
|
|
"INCORREC","T USE OF"," FILE "," "," "," ", %033 00474000
|
|
"INCONSIS","TENT USE"," OF IDEN","TIFIER "," "," ", %034 00475000
|
|
"ARRAY ID","ENTIFIER"," EXPECTE","D "," "," ", %035 00476000
|
|
"EXPRESSI","ON VALUE"," REQUIRE","D "," "," ", %036 00477000
|
|
"ILLEGAL ","FILE CAR","D SYNTAX"," "," "," ", %037 00478000
|
|
"ILLEGAL ","CONTROL ","ELEMENT "," "," "," ", %038 00479000
|
|
"DECLARAT","ION MUST"," PRECEDE"," FIRST R","EFERENCE"," ", %039 00480000
|
|
"INCONSIS","TENT USE"," OF LABE","L AS PAR","AMETER "," ", %040 00481000
|
|
"NO. OF P","ARAMS. D","ISAGREES"," WITH PR","EV. REFE","RENCE ", %041 00482000
|
|
"ILLEGAL ","USE OF F","ORMAL PA","RAMETER "," "," ", %042 00483000
|
|
"ERROR IN"," HOLLERI","TH LITER","AL CHARA","CTER COU","NT ", %043 00484000
|
|
"ILLEGAL ","ACTUAL P","ARAMETER"," "," "," ", %044 00485000
|
|
"TOO MANY"," SEGMENT","S IN SOU","RCE PROG","RAM "," ", %045 00486000
|
|
"TOO MANY"," PRT ASS","IGNMENTS"," IN SOUR","CE PROGR","AM ", %046 00487000
|
|
"LAST BLO","CK DECLA","RATION H","AD LESS ","THAN 102","4 WORDS ", %047 00488000
|
|
0; 00489000
|
|
FILL MESSAGE[3,*] WITH 00490000
|
|
"ILLEGAL ","I/O LIST"," ELEMENT"," "," "," ", %048 00491000
|
|
"LEFT SID","E MUST B","E SIMPLE"," OR SUBS","CRIPTED ","VARIABLE", %049 00492000
|
|
"VARIABLE"," EXPECTE","D "," "," "," ", %050 00493000
|
|
"ILLEGAL ","USE OF .","OR. "," "," "," ", %051 00494000
|
|
"ILLEGAL ","USE OF .","AND. "," "," "," ", %052 00495000
|
|
"ILLEGAL ","USE OF .","NOT. "," "," "," ", %053 00496000
|
|
"ILLEGAL ","USE OF R","ELATIONA","L OPERAT","OR "," ", %054 00497000
|
|
"ILLEGAL ","MIXED TY","PES "," "," "," ", %055 00498000
|
|
"ILLEGAL ","EXPRESSI","ON STRUC","TURE "," "," ", %056 00499000
|
|
"ILLEGAL ","PARAMETE","R "," "," "," ", %057 00500000
|
|
"RECORD B","LOCK GRE","ATER THA","N 1023 "," "," ", %058 00501000
|
|
"TOO MANY"," OPTIONA","L FILES "," "," "," ", %059 00502000
|
|
"FILE CAR","DS MUST ","PRECEDE ","SOURCE D","ECK "," ", %060 00503000
|
|
"BINARY W","RITE STA","TEMENT H","AS NO LI","ST "," ", %061 00504000
|
|
"UNDEFINE","D FORMAT"," NUMBER "," "," "," ", %062 00505000
|
|
"ILLEGAL ","EXPONENT"," IN CONS","TANT "," "," ", %063 00506000
|
|
0; 00507000
|
|
FILL MESSAGE[4,*] WITH 00508000
|
|
"ILLEGAL ","CONSTANT"," IN DATA"," STATEME","NT "," ", %064 00509000
|
|
"MAIN PRO","GRAM MIS","SING "," "," "," ", %065 00510000
|
|
"PARAMETE","R MUST B","E ARRAY ","IDENTIFI","ER "," ", %066 00511000
|
|
"PARAMETE","R MUST B","E EXPRES","SION "," "," ", %067 00512000
|
|
"PARAMETE","R MUST B","E LABEL "," "," "," ", %068 00513000
|
|
"PARAMETE","R MUST B","E FUNCTI","ON IDENT","IFIER "," ", %069 00514000
|
|
"PARAMETE","R MUST B","E FUNCTI","ON OR SU","BROUTINE"," ID ", %070 00515000
|
|
"PARAMETE","R MUST B","E SUBROU","TINE IDE","NTIFIER "," ", %071 00516000
|
|
"PARAMETE","R MUST B","E ARRAY ","IDENTIFI","ER OR EX","PRESSION", %072 00517000
|
|
"ARITHMET","IC - LOG","ICAL CON","FLICT ON"," STORE "," ", %073 00518000
|
|
"ARRAYID ","MUST BE ","SUBSCRIP","TED IN T","HIS CONT","EXT ", %074 00519000
|
|
"MORE THA","N ONE MA","IN PROGR","AM "," "," ", %075 00520000
|
|
"ONLY COM","MON ELEM","ENTS PER","MITTED "," "," ", %076 00521000
|
|
"TOO MANY"," FILES "," "," "," "," ", %077 00522000
|
|
"FORMAT O","R NAMELI","ST TOO L","ONG "," "," ", %078 00523000
|
|
"FORMAL P","ARAMETER"," MUST BE"," ARRAY I","DENTIFIE","R ", %079 00524000
|
|
0; 00525000
|
|
FILL MESSAGE[5,*] WITH 00526000
|
|
"FORMAL P","ARAMETER"," MUST BE"," SIMPLE ","VARIABLE"," ", %080 00527000
|
|
"FORMAL P","ARAMETER"," MUST BE"," FUNCTIO","N IDENTI","FIER ", %081 00528000
|
|
"FORMAL P","ARAMETER"," MUST BE"," SUBROUT","INE IDEN","TIFIER ", %082 00529000
|
|
"FORMAL P","ARAMETER"," MUST BE"," FUNCTIO","N OR SUB","ROUTINE ", %083 00530000
|
|
"DO OR IM","PLIED DO"," INDEX M","UST BE I","NTEGER O","R REAL ", %084 00531000
|
|
"ILLEGAL ","COMPLEX ","CONSTANT"," "," "," ", %085 00532000
|
|
"ILLEGAL ","MIXED TY","PE STORE"," "," "," ", %086 00533000
|
|
"CONSTANT"," EXCEEDS"," HARDWAR","E LIMITS"," "," ", %087 00534000
|
|
"PARAMETE","R TYPE C","ONFLICTS"," WITH PR","EVIOUS U","SE ", %088 00535000
|
|
"COMPLEX ","EXPRESSI","ON ILLEG","AL IN IF"," STATEME","NT ", %089 00536000
|
|
"COMPLEX ","EXPRESSI","ON ILLEG","AL IN RE","LATION "," ", %090 00537000
|
|
"TOO MANY"," FORMATS"," REFEREN","CED BUT ","NOT YET ","FOUND ", %091 00538000
|
|
"VARIABLE"," ARRAY B","OUND MUS","T BE FOR","MAL VARI","ABLE ", %092 00539000
|
|
"ARRAY BO","UND MUST"," HAVE IN","TEGER OR"," REAL TY","PE ", %093 00540000
|
|
"COMMA OR"," RIGHT P","ARENTHES","IS EXPEC","TED "," ", %094 00541000
|
|
"ARRAY AL","READY GI","VEN BOUN","DS "," "," ", %095 00542000
|
|
0; 00543000
|
|
FILL MESSAGE[6,*] WITH 00544000
|
|
"ONLY FOR","MAL ARRA","YS MAY B","E GIVEN ","VARIABLE"," BOUNDS ", %096 00545000
|
|
"MISSING ","LEFT PAR","ENTHESIS"," IN IMPL","IED DO "," ", %097 00546000
|
|
"SUBSCRIP","T MUST B","E INTEGE","R OR REA","L "," ", %098 00547000
|
|
"ARRAY SI","ZE CANNO","T EXCEED"," 32767 W","ORDS "," ", %099 00548000
|
|
"COMMON O","R EQUIV ","BLOCK CA","NNOT EXC","EED 3276","7 WORDS ", %100 00549000
|
|
"THIS STA","TEMENT I","LLEGAL I","N LOGICA","L IF "," ", %101 00550000
|
|
"REAL OR ","INTEGER ","TYPE REQ","UIRED "," "," ", %102 00551000
|
|
"ARRAY BO","UND INFO","RMATION ","REQUIRED"," "," ", %103 00552000
|
|
"REPLACEM","ENT OPER","ATOR EXP","ECTED "," "," ", %104 00553000
|
|
"IDENTIFI","ER EXPEC","TED "," "," "," ", %105 00554000
|
|
"LEFT PAR","ENTHESIS"," EXPECTE","D "," "," ", %106 00555000
|
|
"ILLEGAL ","FORMAL P","ARAMETER"," "," "," ", %107 00556000
|
|
"RIGHT PA","RENTHESI","S EXPECT","ED "," "," ", %108 00557000
|
|
"STATEMEN","T NUMBER"," EXPECTE","D "," "," ", %109 00558000
|
|
"SLASH EX","PECTED "," "," "," "," ", %110 00559000
|
|
"ENTRY ST","ATEMENT ","CANNOT B","EGIN PRO","GRAM UNI","T ", %111 00560000
|
|
0; 00561000
|
|
FILL MESSAGE[7,*] WITH 00562000
|
|
"ARRAY MU","ST BE DI","MENSIONE","D PRIOR ","TO EQUIV"," STMT ", %112 00563000
|
|
"INTEGER ","CONSTANT"," EXPECTE","D "," "," ", %113 00564000
|
|
"COMMA EX","PECTED "," "," "," "," ", %114 00565000
|
|
"SLASH OR"," END OF ","STATEMEN","T EXPECT","ED "," ", %115 00566000
|
|
"FORMAT, ","ARRAY OR"," NAMELIS","T EXPECT","ED "," ", %116 00567000
|
|
"END OF S","TATEMENT"," EXPECTE","D "," "," ", %117 00568000
|
|
"IO STATE","MENT WIT","H NAMELI","ST CANNO","T HAVE I","O LIST ", %118 00569000
|
|
"COMMA OR"," END OF ","STATEMEN","T EXPECT","ED "," ", %119 00570000
|
|
"STRING T","OO LONG "," "," "," "," ", %120 00571000
|
|
"MISSING ","QUOTE AT"," END OF ","STRING "," "," ", %121 00572000
|
|
"ILLEGAL ","ARRAY BO","UND "," "," "," ", %122 00573000
|
|
"TOO MANY"," HANGING"," BRANCHE","S "," "," ", %123 00574000
|
|
"TOO MANY"," COMMON ","OR EQUIV","ALENCE E","LEMENTS "," ", %124 00575000
|
|
"ASTERISK"," EXPECTE","D "," "," "," ", %125 00576000
|
|
"COMMA OR"," SLASH E","XPECTED "," "," "," ", %126 00577000
|
|
"DATA SET"," TOO LAR","GE "," "," "," ", %127 00578000
|
|
0; 00579000
|
|
FILL MESSAGE[8,*] WITH 00580000
|
|
"TOO MANY"," ENTRY S","TATEMENT","S IN THI","S SUBPRO","GRAM ", %128 00581000
|
|
"DECIMAL ","WIDTH EX","CEEDS FI","ELD WIDT","H "," ", %129 00582000
|
|
"UNSPECIF","IED FIEL","D WIDTH "," "," "," ", %130 00583000
|
|
"UNSPECIF","IED SCAL","E FACTOR"," "," "," ", %131 00584000
|
|
"ILLEGAL ","FORMAT C","HARACTER"," "," "," ", %132 00585000
|
|
"UNSPECIF","IED DECI","MAL FIEL","D "," "," ", %133 00586000
|
|
"DECIMAL ","FIELD IL","LEGAL FO","R THIS S","PECIFIER"," ", %134 00587000
|
|
"ILLEGAL ","LABEL "," "," "," "," ", %135 00588000
|
|
"UNDEFINE","D NAMELI","ST "," "," "," ", %136 00589000
|
|
"MULTIPLY"," DEFINED"," ACTION ","LABELS "," "," ", %137 00590000
|
|
"TOO MANY"," NESTED ","DO STATE","MENTS "," "," ", %138 00591000
|
|
"STMT FUN","CTION ID"," AND EXP","RESSION ","DISAGREE"," IN TYPE", %139 00592000
|
|
"ILLEGAL ","USE OF S","TATEMENT"," FUNCTIO","N "," ", %140 00593000
|
|
"UNRECOGN","IZED CON","STRUCT "," "," "," ", %141 00593001
|
|
"RETURN, ","STOP OR ","CALL EXI","T REQUIR","ED IN SU","BPROGRAM", %142 00593002
|
|
"FORMAT N","UMBER US","ED PREVI","OUSLY AS"," LABEL "," ", %143 00593003
|
|
0; 00594000
|
|
FILL MESSAGE[9,*] WITH 00595000
|
|
"LABEL US","ED PREVI","OUSLY AS"," FORMAT ","NUMBER "," ", %144 00595001
|
|
"NON-STAN","DARD RET","URN REQU","IRES LAB","EL PARAM","ETERS ", %145 00595002
|
|
"DOUBLE O","R COMPLE","X REQUIR","ES EVEN ","OFFSET "," ", %146 00595003
|
|
"FORMAL P","ARAMETER"," ILLEGAL"," IN DATA"," STATEME","NT ", %147 00595004
|
|
"TOO MANY"," LOCAL V","ARIABLES"," IN SOUR","CE PROGR","AM ", %148 00596000
|
|
"A $FREEF","ORM SOUR","CE LINE ","MUST HAV","E < 67 C","OLS ", %149 00596001
|
|
"A HOL/ST","RING UND","ER $FREE","FORM MUS","T BE ON ","ONE LINE", %150 00596002
|
|
"THIS CON","STRUCT I","S ILLEGA","L IN TSS","FORTRAN "," ", %151 00596003
|
|
"ILLEGAL ","FILE CAR","D PARAME","TER VALU","E "," ", %152 00596004
|
|
"RETURN I","N MAIN P","ROGRAM N","OT ALLOW","ED "," ", %153 00596005
|
|
"NON-POSI","TIVE SUB","SCRIPTS ","ARE ILLE","GAL "," ", %154 00596006
|
|
"NON-IDEN","TIFIER U","SED FOR ","NAME OF ","LIBRARY ","ROUTINE ", %155 00596007
|
|
"HYPHEN E","XPECTED "," "," "," "," ", %156 00596008
|
|
"SEQUENCE"," NUMBER ","EXPECTED"," "," "," ", %157 00596009
|
|
"TOO MANY"," RECURSI","VE CALLS"," ON LIBR","ARY ROUT","INE ", %158 00596010
|
|
"ASTERISK"," NOT ALL","OWED ID ","READ STA","TEMENT "," ", %159 00596011
|
|
0; 00596500
|
|
FILL MESSAGE[10,*] WITH 00596501
|
|
"ASTERISK"," ONLY AL","LOWED IN"," FREE FI","ELD OUTP","UT ", %160 00596510
|
|
"TOO MANY"," *-ED LI","ST ELEME","NTS IN O","UTPUT "," ", %161 00596511
|
|
"HOL OR Q","UOTED ST","RING > 7"," CHARACT","ERS IN E","XPRESSN ", %162 00596512
|
|
"DECIMAL ","FIELD GR","EATER TH","AN FIELD"," WIDTH-5"," ", %163 00596513
|
|
"PLUS NOT"," ALLOWED"," IN THIS"," FORMAT ","PHRASE "," ", %164 00596514
|
|
"K NOT AL","LOWED IN"," THIS FO","RMAT PHR","ASE "," ", %165 00596515
|
|
"$ NOT AL","LOWED IN"," THIS FO","RMAT PHR","ASE "," ", %166 00596516
|
|
"INTRNSCS","-NAMD FU","NCT MUST"," HAV PRE","V EXTRNL"," REFERNC", %167 00596517
|
|
"DATA STM","T COMMON"," ELEM MU","ST BE IN"," BLK DAT","A SUBPRG", %168 00596518
|
|
"VARIABLE"," CANNOT ","BE A FOR","MAL PARA","METER OR"," IN CMMN", %169 00596519
|
|
"CURRENT ","SUBPROGR","AM ID EX","PECTED "," "," ", %170 00596520
|
|
"SUBPROGR","AM, EXTE","RNAL, OR"," ARRAY I","D EXPECT","ED ", %171 00596521
|
|
"REPEAT, ","WIDTH, A","ND DECIM","AL PARTS"," MUST BE"," < 4091 ", %172 00596522
|
|
"REPEAT P","ART MUST"," BE EMPT","Y OR > 0"," AND < 4","091 ", %173 00596523
|
|
"IN SUBPR","GM:VARBL"," IS USED"," PRIOR T","O USE IN"," DATSTMT", %174 00596524
|
|
"SYNTATIC","AL TOKEN"," CONTAIN","S TOO MA","NY CHARA","CTERS. ", %175 00596525
|
|
0; 00596526
|
|
FILL MESSAGE[11,*] WITH 00596527
|
|
"INTEGER ","VALUE OF"," 8 EXPEC","TED "," "," ", %176 00596528
|
|
"INTEGER ","VALUE OF"," 4 EXPEC","TED "," "," ", %177 00596529
|
|
"INTEGER ","VALUE OF"," 4 OR 8 ","EXPECTED"," "," ", %178 00596530
|
|
"AN ALPHA","BETIC LE","TTER (A,","B,C,...,","Z) IS RE","QUIRED ", %179 00596531
|
|
"SECOND R","ANGE LET","TER MUST"," BE GREA","TER THAN"," FIRST ", %180 00596532
|
|
"IMPLICIT"," MUST BE"," FIRST S","TATEMENT"," IN PROG","RAM UNIT", %181 00596533
|
|
"REAL/INT","EGER/LOG","ICAL/COM","PLEX/DOU","BLEPRECI","SION REQ", %182 00596534
|
|
"ILLEGAL ","USE OF A","STERISK ","FOR RUN-","TIME EDI","TING ",%111-00596535
|
|
"NO PROGR","AM UNIT ","FOR THIS"," END STA","TEMENT "," ",%112-00596536
|
|
0; 00596599 00596538
|
|
END FILL STATEMENTS; 00597000
|
|
END ; 00597950
|
|
IF DCINPUT THEN 00598000
|
|
BEGIN 00598020
|
|
DCPLACE(ERRORBUFF,N,XTA,LASTSEQ,MESSAGE[N DIV 16,6|(N MOD 16)], 00598040
|
|
IF TSSMESTOG THEN TSSMES(TSSMESA[(N-1)DIV 48], 00598050
|
|
ENTIER((N-1) MOD 48)) ELSE FALSE) ; 00598060
|
|
WRITE(REMOTE,9,ERRORBUFF[*]) ; 00598080
|
|
END ; 00598100
|
|
IF LISTOG OR NOT DCINPUT THEN 00598120
|
|
BEGIN 00598140
|
|
PLACE(ERRORBUFF,N,XTA,MESSAGE[N DIV 16,6|(N MOD 16)],ERRORCT, 00598160
|
|
LASTERR) ; 00598180
|
|
WRITAROW(14,ERRORBUFF) ; 00598200
|
|
END; 00599000
|
|
MOVESEQ(LASTERR,LINKLIST) ; 00599500
|
|
END ERRMESS; 00600000
|
|
PROCEDURE FLAGROUTINE(NAME1,NAME2,ENTERING) ; 00600010
|
|
VALUE NAME1,NAME2,ENTERING ; 00600020
|
|
ALPHA NAME1,NAME2; 00600030
|
|
BOOLEAN ENTERING; 00600040
|
|
IF ENTERING THEN WRITALIST(FLAGROUTINEFORMAT,7,"ENTERI","NG",NAME1, 00600050
|
|
NAME2,"+",FIELD(FLAGROUTINECOUNTER~FLAGROUTINECOUNTER+1), 00600060
|
|
FLAGROUTINECOUNTER,0) ELSE 00600065
|
|
BEGIN 00600070
|
|
WRITALIST(FLAGROUTINEFORMAT,7,"LEAVIN","G ",NAME1,NAME2,"-", 00600080
|
|
FIELD(FLAGROUTINECOUNTER),FLAGROUTINECOUNTER,0) ; 00600090
|
|
FLAGROUTINECOUNTER~FLAGROUTINECOUNTER-1 ; 00600100
|
|
END ; 00600110
|
|
%END OF FLAGROUTINE 00600120
|
|
PROCEDURE FLAG(N); VALUE N; INTEGER N; 00601000
|
|
IF NOT ERRORTOG OR DEBUGTOG THEN 00602000
|
|
BEGIN 00603000
|
|
IF NOT (LISTOG OR SEQERRORS OR DCINPUT) THEN PRINTCARD ; 00604000
|
|
ERRMESS(N); 00606000
|
|
IF ERRORCT } LIMIT THEN GO TO POSTWRAPUP; 00606500
|
|
END; 00607000
|
|
PROCEDURE FLOG(N); VALUE N; INTEGER N; 00608000
|
|
IF NOT ERRORTOG OR DEBUGTOG THEN 00609000
|
|
BEGIN ERRORTOG ~ TRUE; 00610000
|
|
IF NOT (LISTOG OR SEQERRORS OR DCINPUT) THEN PRINTCARD; 00611000
|
|
ERRMESS(N); 00613000
|
|
IF ERRORCT } LIMIT THEN GO TO POSTWRAPUP; 00613500
|
|
END; 00614000
|
|
PROCEDURE FATAL(N); VALUE N; INTEGER N; 00615000
|
|
BEGIN 00616000
|
|
FORMAT FATALERR("XXXXXXXX", X18, 00617000
|
|
"PREVIOUS ERROR IS FATAL - REMAINDER OF SUBPROGRAM IGNORED", 00618000
|
|
X17, "XXXXXXXX"); 00619000
|
|
ERRORTOG ~ FALSE; 00620000
|
|
FLAG(N); 00621000
|
|
WRITALIST(FATALERR,0,0,0,0,0,0,0,0,0) ; 00622000
|
|
WHILE NEXT ! 11 DO % LOOK FOR END STMT 00623000
|
|
BEGIN 00624000
|
|
WHILE NEXT ! SEMI DO SCAN; 00625000
|
|
EOSTOG ~ TRUE; 00626000
|
|
SCAN; 00627000
|
|
END; 00628000
|
|
SEGMENT((ADR+4) DIV 4, NSEG, FALSE, EDOC); 00629000
|
|
SCAN; 00630000
|
|
END FATAL; 00631000
|
|
REAL STREAM PROCEDURE D2B(BCL); BEGIN SI~BCL; DI~LOC D2B; DS~8OCT END;00631100
|
|
REAL PROCEDURE GET(I); VALUE I; INTEGER I ; 00632000
|
|
BEGIN 00633000
|
|
GET ~ INFO[(I~I).IR,I.IC]; 00634000
|
|
END GET; 00635000
|
|
PROCEDURE PUT(I,VLU); VALUE I,VLU; INTEGER I; REAL VLU; 00636000
|
|
BEGIN 00637000
|
|
INFO[(I~I).IR,I.IC] ~ VLU; 00638000
|
|
END PUT; 00639000
|
|
PROCEDURE GETALL(I,INFA,INFB,INFC); 00640000
|
|
VALUE I; INTEGER I; REAL INFA,INFB,INFC; 00641000
|
|
BEGIN 00642000
|
|
INFA ~ INFO[(I~I).IR,I.IC] ; 00643000
|
|
INFB ~ INFO[(I~I+1).IR,I.IC]; 00644000
|
|
INFC ~ INFO[(I~I+1).IR,I.IC]; 00645000
|
|
END; 00646000
|
|
PROCEDURE PUTC(I,V); VALUE I,V; INTEGER I; REAL V; 00646100
|
|
IF I~I>SUPERMAXCOM THEN FATAL(124) ELSE COM[I.IR,I.IC]~V; 00646200
|
|
REAL PROCEDURE GETC(I); VALUE I; INTEGER I ; 00646300
|
|
GETC~COM[(I~I).IR,I.IC]; 00646400
|
|
PROCEDURE BAPC(V); VALUE V; REAL V; 00646500
|
|
IF NEXTCOM~NEXTCOM+1 > SUPERMAXCOM THEN FATAL(124) 00646600
|
|
ELSE COM[NEXTCOM.IR,NEXTCOM.IC]~V ; 00646700
|
|
STREAM PROCEDURE MOVEW(F,T,D,M); VALUE D,M; 00647000
|
|
BEGIN SI ~ F; DI ~ T; D(DS ~32 WDS; DS ~ 32 WDS); DS ~ M WDS; END; 00648000
|
|
PROCEDURE CALLEQUIV(I,B,G); VALUE I,B,G; INTEGER I; REAL G; BOOLEAN B ; 00649000
|
|
BEGIN REAL A,T,R,INFA,INFC; 00650000
|
|
REAL LAST,D; LABEL L; 00650100
|
|
PROCEDURE CORRECTINFO(R,A); VALUE R,A; INTEGER R,A; 00651000
|
|
COMMENT THIS PROCEDURE CORRECTS THE INFO TABLE FOR COMMON AND 00651010
|
|
EQUIVALENCE ELEMENTS. 00651020
|
|
IF ITEMS ARE IN COMMON THE INFA[EQ] BIT IS SET 00651030
|
|
THIS BIT IS USED TO TELL DATA STATEMENTS THAT THIS IS A 00651040
|
|
COMMON ELEMENT AND IF NOT IN BLOCK DATA SUBPROGRAM EMIT 00651050
|
|
SYNTAX ERROR 168. 00651060
|
|
THE INFA[CE] BIT IS SET TO TELL THAT IF THE CLASS IS VARID 00651070
|
|
EMIT CODE AS IF THIS ITEM WERE ARRAYID BUT DO NOT 00651080
|
|
ALLOW SUBSCRIPTING; 00651090
|
|
BEGIN 00652000
|
|
REAL T,I,LAST,L,REL,TWODBIT,INFA,INFB,INFC; 00653000
|
|
REAL CEBIT; 00654000
|
|
DEFINE LB = LOWERBOUND#; 00655000
|
|
TWODBIT ~ REAL(LENGTH > 1023); 00656000
|
|
CEBIT ~ REAL(LENGTH > 1); 00657000
|
|
T ~ R; 00658000
|
|
DO 00659000
|
|
BEGIN 00660000
|
|
LAST~GETC(T).LASTC-1 ; 00661000
|
|
FOR I ~ T+2 STEP 1 UNTIL LAST DO 00662000
|
|
BEGIN 00663000
|
|
IF GETC(I).CLASS = ENDCOM THEN I~GETC(I).LINK ; 00664000
|
|
INFA~GET(L~GETC(I).LINK); INFC~GET(L+2) ; 00665000
|
|
IF INFC > 0 AND LB ! 0 THEN 00666000
|
|
BEGIN 00667000
|
|
IF BOOLEAN(INFA.ADJ) THEN 00668000
|
|
REL ~ -INFC.BASE ELSE REL~INFC.BASE; 00669000
|
|
PUT(L+2,-(INFC&(REL-LB)[TOBASE])); 00670000
|
|
END; 00671000
|
|
PUT(L,INFA&TWODBIT[TOADJ]&CEBIT[TOCE]&A[TOEQ]); 00672000
|
|
END; 00673000
|
|
END UNTIL T~GETC(T).ADDR=R ; 00674000
|
|
END CORRECTINFO; 00675000
|
|
LABEL XIT; 00676000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" CALLE","QUIV ",TRUE ); 00676010
|
|
COMMENT THIS PROCEDURE MAKES THE DETERMINATION IF THIS GROUP 00676100
|
|
IS EQUIVALENCE OR COMMON IF BOTH TREATED AS COMMON; 00676110
|
|
T ~ I; 00677000
|
|
GROUPPRT ~ LENGTH ~ A ~ 0; 00678000
|
|
LOWERBOUND ~ 32000; 00679000
|
|
DO BEGIN IF GETC(T).CE=1 THEN 00680000
|
|
BEGIN IF GROUPPRT ! 0 THEN 00681000
|
|
BEGIN XTA~G; 00682000
|
|
FLAG(2); 00683000
|
|
END; 00684000
|
|
GROUPPRT~GET(A~GETC(T+1)).ADDR; 00685000
|
|
END; 00686000
|
|
IF T > R THEN R ~ T; 00687000
|
|
END UNTIL T~GETC(T).ADDR=I ; 00688000
|
|
IF GROUPPRT = 0 THEN 00689000
|
|
IF B THEN BEGIN BUMPPRT;GROUPPRT~PRTS END ELSE %OWN 00689100
|
|
BEGIN BUMPLOCALS; GROUPPRT~LOCALS + 1536 END; 00690000
|
|
T ~ R; 00691000
|
|
SWARYCT ~0; 00691500
|
|
SSNM[6]~LOCALS ; SSNM[7]~PARMS ; SSNM[8]~PRTS ; 00691510
|
|
SSNM[9]~LSTS ; SSNM[10]~LSTA ; SSNM[11]~TV ; 00691520
|
|
SSNM[12]~SAVESUBS; SSNM[13]~NAMEIND ; SSNM[14]~LSTI ; 00691530
|
|
SSNM[15]~FX1 ; SSNM[16]~FX2 ; SSNM[17]~FX3 ; 00691540
|
|
SSNM[18]~NX1 ; 00691550
|
|
SEENADOUB~FALSE;% 00691800
|
|
DO IF GETC(T+1) ! 0 THEN BEGIN EQUIV(T); T~R; END 00691900
|
|
ELSE T~GETC(T).ADDR UNTIL T = R; 00691950
|
|
IF GETC(T) > 0 THEN EQUIV(T); 00692000
|
|
LOCALS~SSNM[6]; PARMS~SSNM[7]; PRTS~SSNM[8]; LSTS~SSNM[9] ; 00692010
|
|
LSTA~SSNM[10]; TV~SSNM[11]; SAVESUBS~SSNM[12]; NAMEIND~SSNM[13] ;00692020
|
|
LSTI~SSNM[14]; FX1~SSNM[15]; FX2~SSNM[16]; FX3~SSNM[17]; 00692030
|
|
NX1~SSNM[18] ; 00692040
|
|
LENGTH ~ LENGTH - LOWERBOUND; 00693000
|
|
IF SEENADOUB THEN LENGTH~LENGTH+LENGTH.[47:1];% EVEN UP LENGTH 00693500
|
|
SEENADOUB~FALSE; 00693600
|
|
IF A = 0 THEN 00694000
|
|
BEGIN COMMENT THIS IS AN EQUIVALENCE GROUP; 00694100
|
|
IF SWARYCT } 1 AND LENGTH = 1 THEN LENGTH ~ 2; 00694150
|
|
IF LENGTH > 1 THEN 00694200
|
|
BEGIN 00694300
|
|
A ~ ENTER(-0 & ARRAYID[TOCLASS] & GROUPPRT[TOADDR], 00695000
|
|
EQVID ~ EQVID+1); 00696000
|
|
PUT(A+2,0 & LENGTH[TOSIZE]); 00696100
|
|
END; 00696200
|
|
CORRECTINFO(R,0); 00697100
|
|
GO TO XIT; 00697200
|
|
END; 00697300
|
|
COMMENT THIS IS A COMMON BLOCK; 00697400
|
|
IF T ~ (INFC ~ GET(A+2)).SIZE ! 0 THEN 00700000
|
|
IF T { 1023 AND LENGTH > 1023 THEN 00701000
|
|
BEGIN XTA ~ GET(A+1); FLAG(47) END; 00702000
|
|
IF T < LENGTH THEN PUT(A+2, INFC&LENGTH[TOSIZE]) ELSE LENGTH ~ T; 00702100
|
|
IF LENGTH = 1 THEN LENGTH ~ 2; 00703000
|
|
CORRECTINFO(R,1); 00704000
|
|
XIT: 00705000
|
|
IF LENGTH > 32767 THEN BEGIN XTA ~ GET(A+1); FLAG(100) END; 00705100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" CALLE","QUIV ",FALSE) ; 00705110
|
|
END CALLEQUIV; 00706000
|
|
STREAM PROCEDURE STOSEQ(XR,SEQ,ID); VALUE ID; 00706010
|
|
BEGIN LOCAL T; LABEL L1,L2 ; 00706015
|
|
SI ~ LOC ID; DI ~ XR; DS ~ 7LIT"0"; DS ~ CHR; SI ~ SI+1; 00706020
|
|
IF SC } "0" THEN 00706025
|
|
BEGIN SI~SI+4; DI~DI-2; 00706030
|
|
5(IF SC= " " THEN SI~SI-1 00706035
|
|
ELSE BEGIN DS~CHR; SI~SI-2; DI~DI-2; END); 00706040
|
|
END ELSE 00706045
|
|
BEGIN DI~DI-6; 00706050
|
|
6(IF SC=" " THEN BEGIN TALLY~TALLY+1; SI~SI+1 END 00706055
|
|
ELSE DS~CHR); 00706060
|
|
T~TALLY; 00706065
|
|
END; 00706070
|
|
DI~XR; DI~DI+8; SI~SEQ; 00706075
|
|
8(IF SC=" " THEN SI~SI+1 ELSE JUMP OUT TO L1); DS~8LIT"BLANKSEQ";00706080
|
|
GO L2; L1: SI~SEQ; DS~WDS; L2: 00706085
|
|
DI~DI+4; SI~LOC T; SI~SI+7; DS~CHR; 00706090
|
|
END; 00706095
|
|
PROCEDURE ENTERX(IDENT,ADINFO); VALUE IDENT, ADINFO; 00706120
|
|
REAL IDENT,ADINFO; 00706150
|
|
BEGIN REAL R,S; 00706200
|
|
IF ADINFO.CLASS>LABELID THEN 00706220
|
|
BEGIN 00706240
|
|
XR[2]~ADINFO; STOSEQ(XR,LINKLIST,IDENT); 00706260
|
|
IF ADINFO.CLASS=FUNID THEN XR[2].[26:1]~S~1 ; 00706280
|
|
WRITE(XREFG,3,XR[*]); XGLOBALS~TRUE; 00706300
|
|
END ; 00706320
|
|
IF R~XRI MOD XRBUFFDIV3=0 THEN 00706340
|
|
IF XRI!0 THEN WRITE(XREFF,XRBUFF,XRRY[*]) ; 00706350
|
|
XRRY[(R~R+R+R)+2]~ADINFO&S[26:47:1] ; 00706360
|
|
STOSEQ(XRRY[R],LINKLIST,IDENT) ; 00706380
|
|
IF XRI~XRI+1=1 THEN BEGIN XR[3]~IDENT; XR[4]~XRRY[2] END; 00706450
|
|
END ENTERX; 00706500
|
|
STREAM PROCEDURE TRANSFER(W2,B,K); VALUE K; 00706525
|
|
BEGIN DI~W2; SI~B; SI~SI+8; K(DS~WDS; SI~SI+16) END ; 00706530
|
|
BOOLEAN STREAM PROCEDURE CMPA(F,S); 00706560
|
|
BEGIN SI~F; DI ~ S; IF 8 SC { DC THEN TALLY ~ 1; CMPA~TALLY; END; 00706570
|
|
BOOLEAN PROCEDURE CMP(A,B); ARRAY A,B[0]; 00706600
|
|
BEGIN 00706610
|
|
CMP ~ IF A[0] < B[0] THEN TRUE ELSE IF A[0] = B[0] THEN 00706640
|
|
IF A[2].[26:4] < B[2].[26:4] THEN TRUE ELSE 00706650
|
|
IF A[2].[26:4] = B[2].[26:4] THEN CMPA(A[1],B[1]) ELSE FALSE 00706660
|
|
ELSE FALSE; 00706670
|
|
END; 00706680
|
|
PROCEDURE HV(V); ARRAY V[0]; 00706700
|
|
FILL V[*] WITH OCT777777777777777,OCT777777777777777,OCT777777777777777;00706720
|
|
BOOLEAN PROCEDURE INP(XR); ARRAY XR[0]; 00706730
|
|
BEGIN LABEL EOF; REAL R ; 00706733
|
|
IF EODS THEN READ(XREFG,3,XR[*])[EOF] ELSE 00706735
|
|
IF IT ~ IT+1 > XRI THEN 00706750
|
|
BEGIN EOF: INP~TRUE; IT~XRI~0; END 00706760
|
|
ELSE BEGIN 00706770
|
|
IF R~(IT-1) MOD XRBUFFDIV3=0 THEN READ(XREFF,XRBUFF,XRRY[*]) ; 00706780
|
|
XR[0]~XRRY[R~R+R+R]; XR[2]~XRRY[R+2]; TRANSFER(XR[1],XRRY[R],1) ; 00706800
|
|
END ; 00706810
|
|
END OF INP ; 00706820
|
|
PROCEDURE VARIABLEDIMS(A,C); VALUE A, C; REAL A, C; 00707000
|
|
BEGIN 00708000
|
|
REAL NSUBS, BDLINK, BOUND, I; 00709000
|
|
LABEL XIT; 00710000
|
|
IF DEBUGTOG THEN FLAGROUTINE("VARIAB","LEDIMS",TRUE); 00710010
|
|
IF NSUBS ~ C.NEXTRA = 1 AND A.SUBCLASS < DOUBTYPE THEN GO TO XIT; 00711000
|
|
BDLINK ~ C.ADINFO; 00712000
|
|
FOR I ~ 1 STEP 1 UNTIL NSUBS DO 00713000
|
|
BEGIN 00714000
|
|
IF BOUND ~ EXTRAINFO[BDLINK.IR,BDLINK.IC] < 0 THEN 00715000
|
|
EMITOPDCLIT(BOUND) ELSE EMITNUM(BOUND); 00716000
|
|
BDLINK ~ BDLINK -1; 00717000
|
|
IF I > 1 THEN EMITO(MUL); 00718000
|
|
END; 00719000
|
|
IF A.SUBCLASS } DOUBTYPE THEN EMITPAIR(2, MUL); 00720000
|
|
EMITPAIR( C.SIZE,STD); 00721000
|
|
XIT: 00722000
|
|
IF DEBUGTOG THEN FLAGROUTINE("VARIAB","LEDIMS",FALSE); 00722010
|
|
END VARIABLEDIMS; 00723000
|
|
PROCEDURE EMITD(R,OP); VALUE R,OP; REAL R,OP; FORWARD; 00723100
|
|
STREAM PROCEDURE SETPNT(W1,W2,PNT,CL,SUBC,STAR,POS,F,S,Q) ; 00723140
|
|
VALUE CL,SUBC,STAR,POS,F,S,Q ; 00723150
|
|
BEGIN F(SI~W1; SI~SI+2; DI~PNT ; 00723160
|
|
IF SC}"0" THEN 00723170
|
|
BEGIN DS~5CHR; DS~LIT" "; DI~DI-6; DS~5FILL ; 00723180
|
|
END ELSE BEGIN DS~6LIT" "; DI~PNT; DS~Q CHR END); 00723200
|
|
S(DI~PNT; DI~DI+6; DS~LIT" "; 00723210
|
|
SI ~ LOC SUBC; SI ~ SI+2; DS ~ 6 CHR; DS ~ LIT " "; 00723230
|
|
SI~LOC CL; SI~SI+2; DS~6CHR; DS~LIT" "); 00723240
|
|
DI~PNT; DI~DI+21; 00723250
|
|
POS(DI~DI+11); 00723255
|
|
SI ~ LOC STAR; SI ~ SI+7; DS ~ CHR; 00723265
|
|
SI ~ W2; DS~8CHR ; 00723280
|
|
SI ~ LOC STAR; SI ~ SI+7; DS ~ CHR; 00723295
|
|
END OF SETPNT; 00723325
|
|
PROCEDURE PT(EOF,REC); VALUE EOF; BOOLEAN EOF; ARRAY REC[0]; 00723450
|
|
BEGIN LABEL L6; REAL L; 00723470
|
|
IF EOF THEN WRITE(LINE,15,PRINTBUFF[*]) 00723520
|
|
ELSE 00723595
|
|
IF BOOLEAN(L~REAL(REC[0]~REC[0]&REC[2] [1:26:1]=XTA)) THEN 00723610
|
|
BEGIN 00723620
|
|
IF IT~IT+1=9 THEN 01855000
|
|
BEGIN LASTLINE~FALSE; WRITE(LINE,15,PRINTBUFF[*]) ; 01856000
|
|
L6: BLANKIT(PRINTBUFF,15,IT~0) ; 01857000
|
|
END; 01858000
|
|
SETPNT(REC[0],REC[1],PRINTBUFF,KLASS[REC[2].CLASS],TYPES[REC[2]01859000
|
|
.SUBCLASS],IF BOOLEAN(REC[2]) THEN "*" ELSE " ",IT,L-1, 01860000
|
|
LASTLINE,6-REC[2].[27:3]) ; 01861000
|
|
END 01862000
|
|
ELSE BEGIN 01863000
|
|
LASTLINE~TRUE; WRITE(RITE,15,PRINTBUFF[*]); XTA~REC[0] ;01864000
|
|
GO L6 ; 01865000
|
|
END ; 01866000
|
|
END OF PT ; 01867000
|
|
01868000
|
|
PROCEDURE CHECKINFO; 01869000
|
|
BEGIN REAL I, T, A; 01870000
|
|
REAL LASTF; 01871000
|
|
REAL INFB,INFC; 01872000
|
|
LABEL NXT; ALPHA N; 01873000
|
|
FORMAT INFOF( 3(A6, X2), 01874000
|
|
" ADDRESS = ", A2, A4, 01875000
|
|
", LENGTH = ", I5, 01876000
|
|
", OFFSET = ", I5), 01877000
|
|
INFOT( / "LOCAL IDENTIFIERS:"), 01878000
|
|
LABF(A6,X10,"LABEL REL-ADR = ",I6,", SEGMNT = ",I5); 01879000
|
|
IF PRTOG THEN 01880000
|
|
WRITALIST(INFOT,0,0,0,0,0,0,0,0,0) ; 01881000
|
|
IF I ~ SEARCH("ERR ") ! 0 THEN 01882000
|
|
IF GET(I).CLASS = UNKNOWN THEN PUT(I+1, "......"); 01883000
|
|
IF I ~ SEARCH("END ") ! 0 THEN 01884000
|
|
IF GET(I).CLASS = UNKNOWN THEN PUT(I+1, "......"); 01885000
|
|
IF NOT DCINPUT THEN IF I~SEARCH("ZIP ") ! 0 THEN 01886000
|
|
IF GET(I).CLASS=UNKNOWN THEN PUT(I+1,"......") ; 01887000
|
|
FOR I ~ 0 STEP 1 UNTIL NEXTCOM DO 01888000
|
|
IF GETC(I).CLASS=HEADER THEN 01889000
|
|
01890000
|
|
IF GETC(I).CE=1 THEN 01891000
|
|
PUT((T~GETC(I+1).LINK+2),GET(T)&0[TOADINFO]) ; 01892000
|
|
01893000
|
|
T ~ 2; WHILE T < NEXTINFO DO 01894000
|
|
BEGIN 01895000
|
|
GETALL(T,A,INFB,INFC); 01896000
|
|
IF I ~ A.CLASS > FILEID THEN GO TO NXT; 01897000
|
|
IF N ~ INFB = "......" THEN GO TO NXT; 01898000
|
|
XTA ~ N; 01899000
|
|
IF I = LABELID THEN 01900000
|
|
BEGIN 01901000
|
|
IF A > 0 THEN FLAG(19) ELSE 01902000
|
|
IF PRTOG THEN WRITALIST(LABF,3,N,A.ADDR DIV 4,A.SEGNO,0,0,0,0, 01903000
|
|
0) ; 01904000
|
|
GO TO NXT; 01905000
|
|
END; 01906000
|
|
IF I = FORMATID THEN 01907000
|
|
IF A > 0 THEN BEGIN FLAG(62); GO TO NXT END ; 01908000
|
|
IF I = NAMELIST THEN 01909000
|
|
IF A > 0 THEN BEGIN FLAG(136); GO TO NXT END; 01910000
|
|
IF I = ARRAYID THEN 01911000
|
|
IF BOOLEAN(A.CE) THEN BEGIN IF A>0 THEN T~GETSPACE(T) END 01912000
|
|
ELSE IF A<0 THEN 01913000
|
|
IF BOOLEAN(A.FORMAL) THEN 01914000
|
|
BEGIN IF SPLINK > 1 AND ELX > 1 THEN 01915000
|
|
BEGIN % THIS IS A FORMAL PARAMETER FOR A SUBROUTINE OR A 01916000
|
|
% FUNCTION THAT HAS ONE OR MORE ENTRY STATEMENT. THIS 01917000
|
|
% PARAMETER WILL BE INITIALIZED TO AN ARRAY DESCRIPTOR01918000
|
|
% TO 0 SO THAT IF THE PARAMETERS ARE NOT SET UP BY THE01919000
|
|
% CALL ANY REFERENCE TO THEM WILL CAUSE AN INVALID 01920000
|
|
% ADDRESS 01921000
|
|
IF LASTF = 0 THEN % FIRST TIME THRU 01922000
|
|
BEGIN LASTF ~ A.ADDR; 01923000
|
|
EMITDESCLIT(2); EMITL(1); 01924000
|
|
EMITD(50,DIA); EMITD(10,DIB); EMITD(10,TRB); 01925000
|
|
END ELSE EMITPAIR(LASTF,LOD); 01926000
|
|
EMITPAIR(A.ADDR,SND); 01927000
|
|
END 01928000
|
|
END 01929000
|
|
ELSE ARRAYDEC(T); 01930000
|
|
IF PRTOG THEN 01931000
|
|
WRITALIST(INFOF,7,INFB, 01932000
|
|
IF BOOLEAN(A.TYPEFIXED) THEN TYPES[A.SUBCLASS] ELSE " ", 01933000
|
|
KLASS[A.CLASS], 01934000
|
|
IF A.ADDR < 1024 AND A < 0 THEN "R+" ELSE " ", 01935000
|
|
IF A < 0 THEN B2D(A.[26:10]) ELSE "NULL", 01936000
|
|
INFC.SIZE, 01937000
|
|
INFC.BASE,0); 01938000
|
|
IF BOOLEAN(A.CE) THEN IF A.SUBCLASS } DOUBTYPE THEN 01939000
|
|
IF BOOLEAN(INFC.BASE) THEN FLAG(146); 01940000
|
|
NXT: 01941000
|
|
T ~ T+3; 01942000
|
|
END; 01943000
|
|
END CHECKINFO; 01944000
|
|
01945000
|
|
PROCEDURE SEGMENTSTART; 01946000
|
|
BEGIN 01947000
|
|
NSEG ~ NXAVIL ~ NXAVIL + 1; 01948000
|
|
IF LISTOG THEN WRITALIST(SEGSTRT,1,NSEG,0,0,0,0,0,0,0) ; 01949000
|
|
DEBUGADR~ADR~-1; 01950000
|
|
IF NOT SEGOVFLAG THEN 01951000
|
|
BEGIN 01952000
|
|
DATAPRT~DATASTRT~DATALINK~DATASKP~ 01953000
|
|
LABELMOM ~ BRANCHX ~ FUNVAR ~ 01954000
|
|
DT ~ SPLINK ~ NEXTCOM ~ ELX ~ 0; 01955000
|
|
NEXTSS ~ 1022; 01956000
|
|
INITIALSEGNO ~ NSEG; 01957000
|
|
FOR I ~ 0 STEP 1 UNTIL LBRANCH DO BRANCHES[I] ~ I+1; 01958000
|
|
FOR I~0 STEP 1 UNTIL SHX DO STACKHEAD[I] ~ 0; 01959000
|
|
NEXTINFO ~ LOCALS ~ 2; 01960000
|
|
F2TOG ~ FALSE; RETURNFOUND ~ FALSE; 01961000
|
|
END; 01962000
|
|
ENDSEGTOG ~ FALSE; 01963000
|
|
IF SEGSW THEN LINESEG[NOLIN~0,0]~0 & D2B(LASTSEQ)[10:20:28] ; 01964000
|
|
END SEGMENTSTART; 01965000
|
|
PROCEDURE FIXPARAMS(I); VALUE I; INTEGER I; 01966000
|
|
BEGIN 01967000
|
|
REAL FMINUS, NPARMS, ELINK, LABX; 01968000
|
|
REAL PLINKX, PLINK; 01969000
|
|
REAL PTYPEX, PTYPE; 01970000
|
|
REAL CL, INF; 01971000
|
|
LABEL ARRY, LOAD, INDX; 01972000
|
|
REAL EWORD; 01973000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FIXP","ARMS ",TRUE); 01974000
|
|
EWORD ~ ENTRYLINK[I]; 01975000
|
|
ELINK ~ EWORD.LINK; 01976000
|
|
IF LABX ~ EWORD.CLASS > 0 THEN 01977000
|
|
BEGIN 01978000
|
|
EMITO(MKS); 01979000
|
|
EMITDESCLIT(LABELMOM); 01980000
|
|
EMITL(LABX); 01981000
|
|
EMITL(1); EMITL(1); EMITL(0); 01982000
|
|
EMITOPDCLIT(BLKCNTRLINT); 01983000
|
|
EMITL(1); EMITPAIR(FPLUS2,STD);% F+2~TRUE FOR BLKXIT CALL 01984000
|
|
END; %106-01985000
|
|
FMINUS ~ 1920; 01986000
|
|
NPARMS ~ (J~GET(ELINK+2)).NEXTRA; 01987000
|
|
IF NPARMS > 0 THEN %106-01988000
|
|
BEGIN 01989000
|
|
PLINKX ~ EWORD.ADDR-NPARMS+1; 01990000
|
|
PTYPEX ~ J.ADINFO + NPARMS-1; 01991000
|
|
FOR J ~ 1 STEP 1 UNTIL NPARMS DO 01992000
|
|
BEGIN 01993000
|
|
PLINK ~ EXTRAINFO[PLINKX.IR,PLINKX.IC]; 01994000
|
|
PTYPE ~ EXTRAINFO[PTYPEX.IR,PTYPEX.IC].CLASS; 01995000
|
|
FMINUS ~ FMINUS+1; 01996000
|
|
IF PLINK = 0 THEN 01997000
|
|
BEGIN 01998000
|
|
EMITOPDCLIT(FMINUS); 01999000
|
|
EMITL(LABX ~ LABX-1); 01100000
|
|
EMITDESCLIT(LABELMOM); 01100100
|
|
EMITO(STD); 01100200
|
|
END ELSE 01100300
|
|
BEGIN 01100400
|
|
IF CL ~ (INF ~ GET(PLINK)).CLASS = UNKNOWN THEN CL ~ VARID; 01100500
|
|
XTA ~ GET(PLINK+1); 01100600
|
|
IF PTYPE = 0 THEN EXTRAINFO[PTYPEX.IR,PTYPEX.IC].CLASS 01100700
|
|
~ PTYPE ~ CL; 01100800
|
|
CASE PTYPE OF 01100900
|
|
BEGIN ; 01101000
|
|
IF CL ! ARRAYID THEN FLAG(79) ELSE 01101100
|
|
ARRY: 01101200
|
|
BEGIN 01101300
|
|
FMINUS ~ FMINUS+1; 01101400
|
|
IF INF < 0 THEN 01101500
|
|
BEGIN 01101600
|
|
EMITPAIR(FMINUS, LOD); 01101700
|
|
EMITPAIR(T~INF.ADDR, STD); 01101800
|
|
EMITOPDCLIT(FMINUS-1); 01101900
|
|
EMITPAIR(T-1, STD); 01102000
|
|
END; 01102100
|
|
END; 01102200
|
|
IF CL ! VARID THEN FLAG(80) ELSE 01102300
|
|
LOAD: 01102400
|
|
BEGIN 01102500
|
|
IF INF.SUBCLASS}DOUBTYPE AND CL=VARID THEN FMINUS~FMINUS+1; 01102600
|
|
IF INF<0 THEN 01102700
|
|
BEGIN 01102800
|
|
EMITPAIR(FMINUS, LOD); 01102900
|
|
EMITPAIR(T~INF.ADDR,STD); 01103000
|
|
IF INF.SUBCLASS}DOUBTYPE AND CL=VARID THEN %105-11103100
|
|
BEGIN EMITOPDCLIT(FMINUS-1); 01103200
|
|
EMITPAIR(T+1,STD); 01103300
|
|
END; 01103400
|
|
END ; 01103500
|
|
END; 01103600
|
|
; ; ; ; 01103700
|
|
IF CL = FUNID THEN GO TO LOAD ELSE FLAG(81); 01103800
|
|
01103900
|
|
; 01104000
|
|
IF CL = FUNID OR CL = SUBRID OR CL = EXTID THEN GO TO LOAD 01104100
|
|
ELSE FLAG(83); 01104200
|
|
IF CL = SUBRID THEN GO TO LOAD ELSE FLAG(82); 01104300
|
|
; ; 01104400
|
|
BEGIN 01104500
|
|
IF CL = ARRAYID THEN 01104600
|
|
BEGIN 01104700
|
|
EXTRAINFO[PTYPEX.IR,PTYPEX.IC].CLASS ~ CL; 01104800
|
|
GO TO ARRY; 01104900
|
|
END; 01105000
|
|
INDX: 01105100
|
|
IF CL ! VARID THEN FLAG(80); 01105200
|
|
FMINUS ~ FMINUS+1; 01105300
|
|
IF INF < 0 THEN 01105400
|
|
BEGIN 01105500
|
|
EMITOPDCLIT(FMINUS-1); 01105600
|
|
EMITDESCLIT(FMINUS); 01105700
|
|
EMITPAIR(INF.ADDR, STD); 01105800
|
|
END; 01105900
|
|
END; 01106000
|
|
IF CL = VARID THEN GO TO LOAD ELSE FLAG(80); 01106100
|
|
GO TO INDX; 01106200
|
|
END CASE STATEMENT; 01106300
|
|
01106400
|
|
01106500
|
|
A ~ INF.SUBCLASS; 01106600
|
|
IF T ~ EXTRAINFO[PTYPEX.IR,PTYPEX.IC].SUBCLASS = 0 OR 01106700
|
|
T = INTYPE AND A = REALTYPE THEN 01106800
|
|
EXTRAINFO[PTYPEX.IR,PTYPEX.IC].SUBCLASS ~ A ELSE 01106900
|
|
IF T ! A THEN 01107000
|
|
BEGIN XTA ~ GET(PLINK+1); FLAG(88) END; 01107100
|
|
END; 01107200
|
|
PLINKX ~ PLINKX+1; 01107300
|
|
PTYPEX ~ PTYPEX-1; 01107400
|
|
END; 01107500
|
|
PLINKX ~ PLINKX-NPARMS; 01107600
|
|
FOR J ~ 1 STEP 1 UNTIL NPARMS DO 01107700
|
|
BEGIN 01107800
|
|
PLINK ~ EXTRAINFO[PLINKX.IR,PLINKX.IC]; 01107900
|
|
IF PLINK ! 0 THEN 01108000
|
|
IF (A~GET(PLINK)).CLASS = ARRAYID THEN 01108100
|
|
IF T~GET(PLINK+2) <0 THEN VARIABLEDIMS(A, T); 01108200
|
|
PLINKX ~ PLINKX+1; 01108300
|
|
END; 01108400
|
|
END; 01108500
|
|
EMITB(GET(ELINK+2).BASE & (GET(ELINK).SEGNO)[TOSEGNO], FALSE); 01108600
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FIXP","ARMS ",FALSE) ; 01108700
|
|
END FIXPARAMS; 01108800
|
|
01108900
|
|
PROCEDURE XREFCORESORT ; 01109000
|
|
BEGIN 01109100
|
|
REAL F,G,H,J,K,L,T,TT,IJ,M,TN ; 01109200
|
|
SAVE ARRAY A[0:XRI-1], IL,IU[0:8]; 01109300
|
|
ARRAY W2,W3[0:XRI-1] ; 01109400
|
|
LABEL L1,L2,L3,L4,L5,L6,L11,L12,L13,L14 ; 01109500
|
|
DEFINE CMPARGT(A) = A.NAME=TN THEN IF (IF G~W3[H~A.[2:10]].[26:4] 01109600
|
|
=TT~W3[F~T.[2:10]].[26:4] THEN NOT CMPA(W2[H], 01109700
|
|
W2[F]) ELSE G>TT) #, 01109800
|
|
CMPARLS(A) = A.NAME=TN THEN IF (IF G~W3[H~T.[2:10]].[26:4] 01109900
|
|
=TT~W3[F~A.[2:10]].[26:4] THEN NOT CMPA(W2[H], 01110000
|
|
W2[F]) ELSE G>TT) #, 01110100
|
|
NAME = [12:36] # ; 01110200
|
|
J~XRI-1; G~XRI DIV K~XRBUFFDIV3; H~XRBUFF ; 01110300
|
|
FOR L~1 STEP 1 UNTIL G DO 01110400
|
|
BEGIN 01110500
|
|
L11: READ(XREFF,H,XRRY[*]); TRANSFER(W2[T~(L-1)|50],XRRY,K) ; 01110600
|
|
IJ~T+K-1; TN~-3; 01110700
|
|
FOR F~T STEP 1 UNTIL IJ DO 01110800
|
|
BEGIN A[F]~XRRY[TN~TN+3]&F[2:38:10]; W3[F]~XRRY[TN+2] END;01110900
|
|
END; 01111000
|
|
IF H=XRBUFF THEN IF K~XRI MOD K DIV 1!0 THEN BEGIN H~3|K;GO L11 END;01111100
|
|
GO L4 ; 01111200
|
|
L1: IF A[K~I].NAME>TN~(T~A[IJ~((L~J)+I+1).[37:10]]).NAME THEN 01111300
|
|
L12: BEGIN A[IJ]~A[I]; A[I]~T; TN~(T~A[IJ]).NAME END 01111400
|
|
ELSE IF CMPARGT(A[I]) THEN GO L12 ; 01111500
|
|
IF A[J].NAME<TN THEN 01111600
|
|
BEGIN 01111700
|
|
L14: A[IJ]~A[J]; A[J]~T ; 01111800
|
|
IF TN~(T~A[IJ]).NAME<A[I].NAME THEN 01111900
|
|
L13: BEGIN A[IJ]~A[I]; A[I]~T; TN~(T~A[IJ]).NAME END 01112000
|
|
ELSE IF CMPARGT(A[I]) THEN GO L13 ; 01112100
|
|
END 01112200
|
|
ELSE IF CMPARLS(A[J]) THEN GO L14 ; 01112300
|
|
L2: IF A[L~L-1].NAME>TN THEN GO L2; IF CMPARGT(A[L]) THEN GO L2; 01112400
|
|
L3: IF A[K~K+1].NAME<TN THEN GO L3; IF CMPARLS(A[K]) THEN GO L3; 01112500
|
|
IF K LEQ L THEN BEGIN DOUBLE(A[K],A[L],~,A[L],A[K]); GO L2 END ; 01112600
|
|
IF L+K>J+I THEN BEGIN IL[M]~I; IU[M]~L; I~K END 01112700
|
|
ELSE BEGIN IL[M]~K; IU[M]~J; J~L END ; 11112800
|
|
M~M+1 ; 01112900
|
|
L4: IF I+10<J THEN GO L1; 01113000
|
|
IF I=0 THEN IF I<J THEN GO L1; 01113100
|
|
FOR I~I+1 STEP 1 UNTIL J DO 01113200
|
|
IF A[K~I-1].NAME>TN~(T~A[I]).NAME THEN 01113300
|
|
BEGIN 01113400
|
|
L5: A[K+1]~A[K]; IF A[K~K-1].NAME>TN THEN GO L5 ; 01113500
|
|
IF CMPARGT(A[K]) THEN GO L5 ; 01113600
|
|
A[K+1]~T ; 01113700
|
|
END 01113800
|
|
ELSE IF CMPARGT(A[K]) THEN GO L5 ; 01113900
|
|
IF (M~M-1) GEQ 0 THEN BEGIN I~IL[M]; J~IU[M]; GO L4 END ; 01114000
|
|
G~XRI-1 ; 01114100
|
|
FOR I~ 0 STEP 1 UNTIL G DO 01114200
|
|
IF BOOLEAN(L~REAL(A[I]~A[I].NAME&(TN~W3[J~A[I].[2:10]])[1:26:1]01114300
|
|
=XTA)) THEN 01114400
|
|
BEGIN 01114500
|
|
IF IT~IT+1=9 THEN 01114600
|
|
BEGIN LASTLINE~FALSE; WRITE(LINE,15,PRINTBUFF[*]) ; 01114700
|
|
L6: BLANKIT(PRINTBUFF,15,IT~0) ; 01114800
|
|
END ; 01114900
|
|
SETPNT(A[I],W2[J],PRINTBUFF,KLASS[TN.CLASS],TYPES[TN. 01115000
|
|
SUBCLASS],IF BOOLEAN(TN) THEN "*" ELSE " ",IT,L-1, 01115100
|
|
LASTLINE,6-TN.[27:3]) ; 01115200
|
|
END 01115300
|
|
ELSE BEGIN 01115400
|
|
LASTLINE~TRUE; WRITE(RITE,15,PRINTBUFF[*]); XTA~A[I]; 01115500
|
|
GO L6; 01115600
|
|
END ; 01115700
|
|
WRITE(LINE,15,PRINTBUFF[*]); XRI~0; 01115800
|
|
END OF XREFCORESORT ; 01115900
|
|
01116000
|
|
PROCEDURE SETUPSTACK ; 01116100
|
|
BEGIN 01116200
|
|
REAL I; 01116300
|
|
EMITOPDCLIT(16); 01116400
|
|
EMITL(1); 01116500
|
|
EMITO(ADD); 01116600
|
|
EMITL(16); 01116700
|
|
EMITO(SND); 01116800
|
|
FOR I ~ 1 STEP 1 UNTIL LOCALS DO EMITL(0); 01116900
|
|
CHECKINFO; 01117000
|
|
IF DATAPRT ! 0 THEN 01117100
|
|
BEGIN ADJUST; EMITOPDCLIT(DATAPRT); EMITO(LNG); EMITB(-1,TRUE);01117200
|
|
DATASKP~LAX; EMITB(DATASTRT,FALSE); FIXB(DATALINK); 01117300
|
|
EMITL(1); EMITPAIR(DATAPRT,STD); FIXB(DATASKP); 01117400
|
|
END; 01117500
|
|
ADJUST; 01117600
|
|
END SETUPSTACK; 01117700
|
|
01117800
|
|
PROCEDURE BRANCHLIT(X,Y); VALUE X,Y; REAL X; BOOLEAN Y; 01117900
|
|
BEGIN 01118000
|
|
IF ADR } 4075 THEN 01118100
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01118200
|
|
ADJUST; 01118300
|
|
IF X.SEGNO!NSEG THEN BEGIN 01118400
|
|
IF(PRTS+1).[37:2]=1 AND Y THEN 01118500
|
|
EMITOPDCLIT(PRGDESCBLDR(2,0,(ADR+5) DIV 4+1,NSEG)) 01118600
|
|
ELSE EMITOPDCLIT(PRGDESCBLDR(2,0,(ADR+5) DIV 4,NSEG)) END 01118700
|
|
ELSE 01118800
|
|
EMITL((ADR+5) DIV 4 - X.LINK DIV 4) ; 01118900
|
|
END BRANCHLIT; 01119000
|
|
PROCEDURE SEGMENT(SZ,CURSEG,SEGTYP,EDOC); % WRITES OUT EDOC AS SEGMENT 01119100
|
|
VALUE SZ,CURSEG,SEGTYP; % UPDATES PDPRT WITH PSUEDO 01119200
|
|
REAL SZ,CURSEG; % UPDATES PDPRT WITH PSUEDO 01119300
|
|
BOOLEAN SEGTYP; % TRUE TO WRAP UP A SUBROUTINE BLOCK 01119400
|
|
% FALSE TO WRAP UP A SPLIT BLOCK 01119500
|
|
ARRAY EDOC[0,0]; % CONTAINS DATA TO WRITE; 01119600
|
|
BEGIN 01119700
|
|
STREAM PROCEDURE M1(F,T); BEGIN DI ~ T; SI ~ F; DS ~ 2 WDS END;01119800
|
|
REAL T; 01119900
|
|
REAL BEGINSUB, ENDSUB, HERE; 01120000
|
|
LABEL WRITEPGM; 01120100
|
|
INTEGER I, CNTR; 01120200
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SEGM","ENT ",TRUE ); 01120300
|
|
IF NOT SEGTYP THEN GO TO WRITEPGM; 01120400
|
|
IF SPLINK > 1 AND NOT RETURNFOUND THEN 01120500
|
|
BEGIN XTA ~ BLANKS; FLAG(142) END; 01120600
|
|
IF SPLINK < 0 THEN 01120700
|
|
BEGIN 01120800
|
|
ADJUST; 01120900
|
|
BDPRT[BDX~BDX+1] ~ PRGDESCBLDR(1, 0, (ADR+1) DIV 4, NSEG); 01121000
|
|
FOR I ~ 1 STEP 1 UNTIL LOCALS DO EMITL(0); 01121100
|
|
CHECKINFO; 01121200
|
|
01121300
|
|
EMITB(0&INITIALSEGNO[TOSEGNO], FALSE); 01121400
|
|
END 01121500
|
|
ELSE 01121600
|
|
IF SPLINK = 1 THEN % MAIN PROGRAM 01121700
|
|
BEGIN 01121800
|
|
ADJUST; 01121900
|
|
IF STRTSEG ! 0 THEN FLAG(75); 01122000
|
|
STRTSEG ~ NSEG & 01122100
|
|
PRGDESCBLDR(1, 0, (ADR+1) DIV 4, NSEG)[18:33:15]; 01122200
|
|
SETUPSTACK; 01122300
|
|
01122400
|
|
EMITB(0&INITIALSEGNO[TOSEGNO], FALSE); 01122500
|
|
END 01122600
|
|
ELSE 01122700
|
|
IF ELX { 1 THEN 01122800
|
|
BEGIN 01122900
|
|
ADJUST; 01123000
|
|
T ~ PRGDESCBLDR(1, GET(SPLINK).ADDR, (ADR+1) DIV 4, NSEG); 01123100
|
|
SETUPSTACK; 01123200
|
|
FIXPARAMS(0); 01123300
|
|
INFO[SPLINK.IR, SPLINK.IC].SEGNO ~ NSEG; 01123400
|
|
END 01123500
|
|
ELSE 01123600
|
|
BEGIN 01123700
|
|
ADJUST; 01123800
|
|
BEGINSUB ~ (ADR+1) & NSEG[TOSEGNO]; 01123900
|
|
EMITL(17); EMITO(STD); 01124000
|
|
SETUPSTACK; 01124100
|
|
EMITOPDCLIT(17); EMITO(GFW); 01124200
|
|
ENDSUB ~ ADR & NSEG[TOSEGNO]; 01124300
|
|
FOR I ~ 0 STEP 1 UNTIL ELX-1 DO 01124400
|
|
BEGIN 01124500
|
|
ADJUST; 01124600
|
|
HERE ~ (ADR+1) DIV 4; 01124700
|
|
T ~ ENTRYLINK[I].LINK; 01124800
|
|
%VOID 01124900
|
|
T ~ PRGDESCBLDR(1, GET(T).ADDR, HERE, NSEG); 01125000
|
|
BRANCHLIT(ENDSUB,FALSE); 01125100
|
|
EMITB(BEGINSUB, FALSE); 01125200
|
|
ADJUST; 01125300
|
|
FIXPARAMS(I); 01125400
|
|
INFO[(ENTRYLINK[I].LINK).IR,(ENTRYLINK[I].LINK).IC].SEGNO~NSEG;01125500
|
|
END; 01125600
|
|
END; 01125700
|
|
SZ ~ (ADR+4) DIV 4; 01125800
|
|
CNTR ~ 0; 01125900
|
|
CURSEG ~ NSEG; 01126000
|
|
WRITEPGM: 01126100
|
|
NSEG ~ ((T ~ SZ) + 29) DIV 30; 01126200
|
|
IF DALOC DIV CHUNK < I ~ (DALOC+NSEG) DIV CHUNK 01126300
|
|
THEN DALOC ~ CHUNK | I; % INSURE SEGMENT DONT BREAK 01126400
|
|
% ACROSS ROW 01126500
|
|
IF LISTOG THEN WRITALIST(SEGEND,2,CURSEG,T,0,0,0,0,0,0) ; 01126600
|
|
PDPRT[PDIR,PDIC] ~ % PDPRT ENTRY FOR SEGMENT 01126700
|
|
SZ&DALOC[DKAC] 01126800
|
|
& GET(SPLINK)[12:41:1] 01126900
|
|
&CURSEG[SGNOC]; 01127000
|
|
IF ERRORCT = 0 THEN 01127100
|
|
DO BEGIN 01127200
|
|
FOR I~0 STEP 2 WHILE I < 30 AND CNTR < SZ DO 01127300
|
|
BEGIN M1(EDOC[CNTR.[38:3],CNTR.[41:7]],CODE(I)); 01127400
|
|
CNTR ~ CNTR + 2; 01127500
|
|
END; 01127600
|
|
WRITE(CODE[DALOC]); 01127700
|
|
DALOC ~ DALOC +1; 01127800
|
|
END UNTIL CNTR } SZ; 01127900
|
|
PDINX ~ PDINX +1; 01128000
|
|
IF NOT SEGOVFLAG THEN 01128100
|
|
IF PXREF THEN 01128200
|
|
IF(EODS~(NEXT=EOF))AND NOT XGLOBALS THEN ELSE 01128300
|
|
BEGIN KLASS[6]~ "LABEL "; 01128400
|
|
WRITE(XREFF,XRBUFF,XRRY[*]) ; 01128500
|
|
IF FIRSTCALL THEN DATIME ELSE WRITE(PTR[PAGE]); 01128600
|
|
IF SPLINK<0 THEN 01128700
|
|
BEGIN WRITE(PTR,XHEDB);REWIND(XREFF);END 01128800
|
|
ELSE 01128900
|
|
IF EODS THEN BEGIN WRITE(PTR,XHEDG); REWIND(XREFG) END 01129000
|
|
ELSE BEGIN REWIND(XREFF); C2~(XR[4].SUBCLASS|2+5); 01129100
|
|
IF IT~XR[4].CLASS=FUNID THEN WRITE(PTR,XHEDF, 01129200
|
|
XR[C2],XR[C2+1],XR[3],XR[C2+12], 01129300
|
|
XR[C2+13],"------") 01129400
|
|
ELSE IF IT=SUBRID THEN WRITE(PTR,XHEDS,XR[3], 01129500
|
|
"------") ELSE WRITE(PTR,XHEDM); 01129600
|
|
END; 01129700
|
|
IT~XTA~0; 01129800
|
|
LASTLINE ~ FALSE; 01129900
|
|
BLANKIT(PRINTBUFF,15,0); 01130000
|
|
IF XRI>1023 OR EODS THEN SORT(PT,INP,0,HV,CMP,3,4000) 01130100
|
|
ELSE XREFCORESORT ; 01130200
|
|
REWIND(XREFF); 01130300
|
|
PXREF~IF XREF THEN TRUE ELSE FALSE; 01130400
|
|
KLASS[6] ~ "ERROR "; 01130500
|
|
IF (NOT SEGTYP AND EODS) OR (SEGTYP AND LISTOG AND 01130600
|
|
NOT SEGPTOG) THEN WRITE (PTR[PAGE]); 01130700
|
|
END; 01130800
|
|
IF LISTOG AND SEGTYP AND SEGPTOG THEN WRITE(PTR[PAGE]); 01130900
|
|
IF SEGTYP THEN 01131000
|
|
BEGIN 01131100
|
|
FOR I~12,17 STEP 1 UNTIL 24,39 STEP 1 UNTIL 41, 01131200
|
|
50 STEP 1 UNTIL 57 DO TIPE[I]~REALID ; 01131300
|
|
FOR I~25,33 STEP 1 UNTIL 37 DO TIPE[I]~INTID ; 01131400
|
|
LASTNEXT ~ 1000; 01131500
|
|
END; 01131600
|
|
ENDSEGTOG ~ TRUE; 01131700
|
|
TSEGSZ ~ TSEGSZ + SZ; 01131800
|
|
COMMENT IF SEGSW THEN LETS ALSO WRITE OUT THE LINE SEGMENTS 01131900
|
|
THAT WE VE GONE TO SUCH TROUBLE BUILDING. LINESEG 01132000
|
|
CONTAINS A CARD SEQUENCE NUMBER(BINARY) IN [10:28] 01132100
|
|
AND THE WORD BOUNDARY ADDRESS OF THE FIRST CODE 01132200
|
|
SYLLABLE IN [38:10]; 01132300
|
|
IF SEGSW THEN 01132400
|
|
IF NOLIN > 0 THEN 01132500
|
|
BEGIN 01132600
|
|
LINEDICT[CURSEG.IR,CURSEG.IC] ~ % UPDATE LINE DICTIONARY 01132700
|
|
0 & NOLIN[18:33:15] & DALOC[33:33:15];%FOR THIS SEGMENT 01132800
|
|
CNTR ~ 0; DO BEGIN 01132900
|
|
FOR I ~ 0 STEP 2 WHILE I<30 AND CNTR<NOLIN DO 01133000
|
|
BEGIN 01133100
|
|
M1(LINESEG[CNTR.[38:3],CNTR.[41:7]],CODE(I)); 01133200
|
|
CNTR~CNTR+2 01133300
|
|
END; 01133400
|
|
WRITE(CODE[DALOC]); 01133500
|
|
DALOC~DALOC+1; 01133600
|
|
END UNTIL CNTR } NOLIN; 01133700
|
|
END ; 01133800
|
|
IF NOT SEGOVFLAG THEN XRI ~ 0; 01133900
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SEGM","ENT ",FALSE) ; 01134000
|
|
END SEGMENT; 01134100
|
|
01134200
|
|
PROCEDURE WRITEDATA(SZ,SEG,ARY); % WRITES OUT TYPE 2 SEGMENTS 01134300
|
|
VALUE SZ,SEG; 01134400
|
|
REAL SZ,SEG; 01134500
|
|
ARRAY ARY[0]; 01134600
|
|
BEGIN 01134700
|
|
INTEGER T,NSEG,I,CNTR; 01134800
|
|
INTEGER TYPE; 01134900
|
|
STREAM PROCEDURE M30(F,T,SZ); VALUE SZ; 01135000
|
|
BEGIN 01135100
|
|
SI~F; DI~T; DS~SZ WDS; 01135200
|
|
END M30; 01135300
|
|
IF SZ } 0 THEN TYPE ~ 2 ELSE SZ ~ -SZ; 01135400
|
|
NSEG ~ (( T~SZ) +29) DIV 30; 01135500
|
|
IF DALOC DIV CHUNK < I ~ (DALOC+NSEG) DIV CHUNK 01135600
|
|
THEN DALOC ~ CHUNK | I; 01135700
|
|
PDPRT[PDIR,PDIC] ~ 01135800
|
|
SZ&DALOC[DKAC] 01135900
|
|
&TYPE[STYPC] 01136000
|
|
&SEG[SGNOC]; 01136100
|
|
PDINX ~ PDINX +1; 01136200
|
|
IF ERRORCT = 0 THEN 01136300
|
|
FOR I ~ 0 STEP 30 WHILE I < SZ DO 01136400
|
|
BEGIN 01136500
|
|
M30(ARY[I],CODE(0),IF (SZ-I) > 30 THEN 30 ELSE (SZ-I)); 01136600
|
|
WRITE(CODE[DALOC]); 01136700
|
|
DALOC ~ DALOC +1; 01136800
|
|
END; 01136900
|
|
IF LISTOG THEN WRITALIST(SEGEND,2,SEG,T,0,0,0,0,0,0) ; 01137000
|
|
TSEGSZ ~ TSEGSZ + SZ; 01137100
|
|
END WRITEDATA; 01137200
|
|
01137300
|
|
REAL PROCEDURE PRGDESCBLDR(DT,PRT,RELADR,SGNO); 01137400
|
|
VALUE DT,PRT,RELADR,SGNO; 01137500
|
|
REAL DT,PRT,RELADR,SGNO; 01137600
|
|
BEGIN 01137700
|
|
FORMAT FMT("PRT=",A4,", REL-ADR=",A4,", SEG=",I4,", TYPE=",A2); 01137800
|
|
IF PRT=0 THEN BEGIN BUMPPRT; PRT~PRTS END; 01137900
|
|
PDPRT[PDIR,PDIC] ~ 01138000
|
|
0&DT[DTYPC] 01138100
|
|
&PRT[PRTAC] 01138200
|
|
&RELADR[RELADC] 01138300
|
|
&SGNO[SGNOC]; 01138400
|
|
PDINX ~ PDINX +1; 01138500
|
|
IF CODETOG THEN WRITALIST(FMT,4,B2D(PRT),B2D(RELADR),SGNO, 01138600
|
|
IF DT=0 THEN "AE" ELSE IF DT=1 THEN "PD" ELSE "LD",0,0,0,0) ; 01138700
|
|
PRGDESCBLDR ~ PRT; 01138800
|
|
END PRGDESCBLDR; 01138900
|
|
01139000
|
|
PROCEDURE EQUIV(R); VALUE R; REAL R; 01139100
|
|
COMMENT THIS PROCEDURE FIXES UP THE INFO TABLE FOR THE EQUIV OR 01139200
|
|
COMMON RING. THE FIRST ELEMENT PAST HAS AN OFFSET (DO NOT 01139300
|
|
ALTER THIS) THE TYPE IS FIXED. THE OFFSET IS DETERMINED 01139400
|
|
FROM THE FIRST. CORRECTINFO ADJUST THE OFFSET IF THERE 01139500
|
|
IS A NEGATIVE OFFSET ON ANY ELEMENT. THE INFA[ADJ] BIT IS 01139600
|
|
SET IF THE ELEMENT HAS A NEGATIVE OFFSET. IF THE ELEMENT 01139700
|
|
APPEARED IN MORE THAN ONE EQUIVALENCE STATEMENT OR AN 01139800
|
|
EQUIVALENCE STATEMENT AND A COMMON STATEMENT THE ELEMENTS 01139900
|
|
ARE LINKED BY COM[LASTC] WHICH POINTS TO THE HEADER 01140000
|
|
OF THAT STATEMENT; 01140100
|
|
BEGIN 01140200
|
|
DEFINE BASS = LOCALS #, % THESE DEFINES ARE USED TO REDUCE THE01140300
|
|
REL = PARMS #, % STACKSIZE OF EQUIV FOR RECURSION 01140400
|
|
I = PRTS #, 01140500
|
|
T = LSTS #, 01140600
|
|
Q = LSTA #, 01140700
|
|
LAST = TV #, 01140800
|
|
B = SAVESUBS #, 01140900
|
|
P = NAMEIND #, 01141000
|
|
PRTX = LSTI #, 01141100
|
|
C = FX1 #, 01141200
|
|
INFA = FX2 #, 01141300
|
|
INFB = FX3 #, 01141400
|
|
INFC = NX1 #; 01141500
|
|
LABEL XIT, CHECK; 01141600
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EQU","IV ",TRUE) ; 01141700
|
|
IF GETC(R) <0 THEN GO TO XIT; 01141800
|
|
PUTC(R,-GETC(R)) ; 01141900
|
|
PRTX ~ GROUPPRT; 01142000
|
|
C~REAL(GETC(R).CE=1) ; 01142100
|
|
LAST~GETC(R).LASTC-1 ; 01142200
|
|
BASS~GETC(R+1); P~0 ; 01142300
|
|
FOR I ~ R+2 STEP 1 UNTIL LAST DO 01142400
|
|
BEGIN IF GETC(I).CLASS=ENDCOM THEN I~GETC(I).LINK ; 01142500
|
|
GETALL(T~GETC(I).LINK,INFA,INFB,INFC) ; 01142600
|
|
IF Q~INFC.SIZE=0 THEN % A SIMPLE VARIABLE 01142700
|
|
INFC.SIZE ~ Q ~ IF INFA.SUBCLASS { LOGTYPE THEN 1 ELSE 2; 01142800
|
|
PUT(T+2,INFC); 01142900
|
|
IF INFA.SUBCLASS>LOGTYPE THEN SEENADOUB~TRUE; 01143000
|
|
IF BOOLEAN(C) THEN 01143100
|
|
BEGIN COM[PWI].RELADD~REL~P ; 01143200
|
|
P ~ P + Q; 01143300
|
|
END ELSE COM[PWI].RELADD~REL~BASS-GETC(I).RELADD ; 01143400
|
|
IF INFA < 0 THEN IF INFA .ADJ = 1 THEN 01143500
|
|
B ~ -INFC.BASE - REL ELSE B ~ INFC.BASE - REL; 01143600
|
|
END; 01143700
|
|
FOR I ~ R+2 STEP 1 UNTIL LAST DO 01143800
|
|
BEGIN IF GETC(I).CLASS=ENDCOM THEN I~GETC(I).LINK ; 01143900
|
|
GETALL(T~GETC(I).LINK,INFA,INFB,INFC) ; 01144000
|
|
IF INFA.CLASS = 1 THEN SWARYCT ~ 1; 01144100
|
|
P~B+GETC(I).RELADD ; 01144200
|
|
Q ~ INFC .SIZE; 01144300
|
|
IF INFA < 0 THEN 01144400
|
|
BEGIN IF INFA .ADJ = 1 THEN BASS ~ -INFC .BASE ELSE 01144500
|
|
BASS ~ INFC.BASE; 01144600
|
|
IF P ! BASS THEN 01144700
|
|
BEGIN XTA ~ INFB ; FLAG(2) END; 01144800
|
|
GO TO CHECK; 01144900
|
|
END; 01145000
|
|
INFA ~ -INFA & PRTX[TOADDR]; 01145100
|
|
IF INFA .CLASS = UNKNOWN THEN INFA .CLASS ~ VARID; 01145200
|
|
INFA .TYPEFIXED ~ 1; 01145300
|
|
INFC.BASE ~ P; 01145400
|
|
PUT(T+2,INFC); 01145500
|
|
IF P < 0 THEN INFA .ADJ ~ 1; 01145600
|
|
PUT(T,INFA); 01145700
|
|
CHECK: 01145800
|
|
IF P+Q > LENGTH THEN LENGTH ~ P+Q; 01145900
|
|
IF P < LOWERBOUND THEN LOWERBOUND ~ P; 01146000
|
|
END; 01146100
|
|
FOR I ~ R+2 STEP 1 UNTIL LAST DO 01146200
|
|
BEGIN 01146300
|
|
IF GETC(I).CLASS=ENDCOM THEN I~GETC(I).LINK ; 01146400
|
|
IF T~GETC(I).LASTC!R THEN 01146500
|
|
IF GETC(T)}0 THEN 01146600
|
|
BEGIN R~R&LAST[3:33:15]&I[18:33:15] ; 01146700
|
|
EQUIV(T); LAST~R.[3:15]; I~R.[18:15]; R~R.[33:15] ; 01146800
|
|
END; 01146900
|
|
END; 01147000
|
|
XIT: 01147100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EQU","IV ",FALSE) ; 01147200
|
|
END EQUIV; 01147300
|
|
ALPHA PROCEDURE GETSPACE(S); VALUE S; ALPHA S; 01147400
|
|
BEGIN LABEL RPLUS, FMINUS, XIT; 01147500
|
|
LABEL DONE; 01147600
|
|
REAL A; 01147700
|
|
BOOLEAN OWNID; 01147800
|
|
IF OWNID ~ S < 0 THEN S~ -S; % IN DATA STMT, THUS OWN 01147900
|
|
IF A ~ GET(GETSPACE~S) < 0 THEN GO TO DONE; 01148000
|
|
IF A.CLASS GEQ 13 THEN FLAG(34) ELSE %104-01148100
|
|
CASE A.CLASS OF 01148200
|
|
BEGIN 01148300
|
|
BEGIN 01148400
|
|
PUT(S,A~A&VARID[TOCLASS]); 01148500
|
|
PUT(S+2,(GET(S+2) &(IF A.SUBCLASS { LOGTYPE 01148600
|
|
THEN 1 ELSE 2 )[TOSIZE])); 01148700
|
|
END; 01148800
|
|
IF BOOLEAN(A.FORMAL) THEN BUMPLOCALS; 01148900
|
|
; 01149000
|
|
BEGIN A.TYPEFIXED ~ 1; GO TO RPLUS END; 01149100
|
|
GO TO RPLUS; 01149200
|
|
GO TO RPLUS; 01149300
|
|
GO TO DONE; 01149400
|
|
BEGIN A.TYPEFIXED ~ 1; IF BOOLEAN(A.FORMAL) THEN GO TO FMINUS 01149500
|
|
ELSE GO TO RPLUS; 01149600
|
|
END; 01149700
|
|
BEGIN A.TYPEFIXED ~ 1; GO TO RPLUS END; 01149800
|
|
IF BOOLEAN(A.FORMAL) THEN GO TO FMINUS ELSE GO TO RPLUS; 01149900
|
|
IF BOOLEAN(A.FORMAL) THEN GO TO FMINUS ELSE GO TO RPLUS; 01150000
|
|
GO TO RPLUS; 01150100
|
|
GO TO RPLUS; 01150200
|
|
END OF CASE STATEMENT; 01150300
|
|
01150400
|
|
01150500
|
|
A.TYPEFIXED ~ 1; 01150600
|
|
IF BOOLEAN(A.FORMAL) THEN 01150700
|
|
GO TO FMINUS; 01150800
|
|
IF BOOLEAN(A.CE) OR BOOLEAN(A.EQ) THEN 01150900
|
|
BEGIN 01151000
|
|
PUT(S,A); 01151100
|
|
CALLEQUIV(A.ADDR,OWNID,GET(S+1)) ; 01151200
|
|
GO TO DONE; 01151300
|
|
END; 01151400
|
|
A.TWOD ~ REAL(GET(S+2).SIZE > 1023); 01151500
|
|
FMINUS: 01151600
|
|
IF OWNID THEN BEGIN BUMPPRT; A.ADDR~PRTS END ELSE 01151700
|
|
BEGIN BUMPLOCALS; A.ADDR ~ LOCALS +1536 END; 01151800
|
|
IF A.CLASS = VARID THEN IF A.SUBCLASS } DOUBTYPE THEN 01151900
|
|
IF OWNID THEN BUMPPRT ELSE 01152000
|
|
BUMPLOCALS; 01152100
|
|
GO TO XIT; 01152200
|
|
RPLUS: 01152300
|
|
BUMPPRT; A.ADDR~PRTS; 01152400
|
|
XIT: 01152500
|
|
PUT(S, -A); 01152600
|
|
DONE: 01152700
|
|
END GETSPACE; 01152800
|
|
INTEGER STREAM PROCEDURE LBLSHFT(S); VALUE S; 01152900
|
|
BEGIN 01153000
|
|
LOCAL T; 01153100
|
|
LABEL L; 01153200
|
|
DI ~ LOC LBLSHFT; DS ~ 8 LIT "00 "; 01153300
|
|
DI ~ DI - 6; SI ~LOC S; SI ~ SI + 2; 01153400
|
|
TALLY ~ 1; T ~ TALLY; 01153500
|
|
5(T(IF SC="0" THEN BEGIN SI~SI+1; JUMP OUT 1 TO L END 01153600
|
|
ELSE TALLY~0; T~TALLY); 01153700
|
|
IF SC}"0" THEN DS~CHR ELSE IF SC=" " THEN SI~SI+1 01153800
|
|
ELSE JUMP OUT; L: ) ; 01153900
|
|
IF SC ! " " THEN BEGIN DI ~ LOC LBLSHFT; DS ~ LIT "+" END; 01154000
|
|
END LBLSHFT; 01154100
|
|
COMMENT EMITTERS AND CODE CONTROL; 01154200
|
|
ALPHA PROCEDURE B2D(B); VALUE B; REAL B; 01154300
|
|
B2D ~ 0&B[45:45:3]&B[39:42:3]&B[33:39:3]&B[27:36:3]; 01154400
|
|
PROCEDURE DEBUG(S); % PRINTS OUT DEBUG CODE 01154500
|
|
VALUE S; REAL S; % IF S<0 THEN S IS FIELD TYPE OPERATOR 01154600
|
|
BEGIN 01154700
|
|
FORMAT FF(X35,*(33(".")),A4,":",A1,2(X2,A4),X4,A4) ; 01154800
|
|
ALPHA CODE,MNM,SYL; 01154900
|
|
REAL T; 01155000
|
|
PROCEDURE SEARCH(CODE,S); VALUE S; REAL S,CODE; 01155100
|
|
BEGIN % SEARCHS WOP TO FIND CODE FOR S 01155200
|
|
REAL N,I; 01155300
|
|
LABEL L; 01155400
|
|
N ~ 64; 01155500
|
|
FOR I ~ 66 STEP IF WOP[I] < S THEN N ELSE -N 01155600
|
|
WHILE N ~ N DIV 2 } 1 DO 01155700
|
|
IF WOP[I] =S THEN GO TO L; 01155800
|
|
I ~ 0; % NOT FOUND 01155900
|
|
L: CODE ~ WOP[I+1]; 01156000
|
|
END SEARCH; 01156100
|
|
01156200
|
|
IF S < 0 THEN 01156300
|
|
BEGIN % FIELD TYPE OPERATOR 01156400
|
|
SYL ~ S; 01156500
|
|
MNM ~ B2D(S.[36:6]); 01156600
|
|
IF (S ~ S.[42:6]) = 37 THEN CODE ~ "ISO " ELSE 01156700
|
|
IF S = 45 THEN CODE ~ "DIA " ELSE 01156800
|
|
IF S = 49 THEN CODE ~ "DIB " ELSE 01156900
|
|
IF S = 53 THEN CODE ~ "TRB "; 01157000
|
|
END 01157100
|
|
ELSE 01157200
|
|
BEGIN 01157300
|
|
IF (T ~ S.[46:2]) ! 1 THEN 01157400
|
|
BEGIN 01157500
|
|
SYL ~ S; 01157600
|
|
MNM ~ B2D(S.[36:10]); 01157700
|
|
IF T = 0 THEN CODE ~ "LITC" 01157800
|
|
ELSE IF T =2 THEN CODE ~ "OPDC" 01157900
|
|
ELSE CODE ~ "DESC"; 01158000
|
|
END 01158100
|
|
ELSE 01158200
|
|
BEGIN % SEARCH WOP FOR OPERATOR NAME 01158300
|
|
SYL ~ S; 01158400
|
|
MNM ~ " "; 01158500
|
|
SEARCH(CODE,S.[36:10]); 01158600
|
|
END; 01158700
|
|
END; 01158800
|
|
WRITALIST(FF,6,IF ADR{DEBUGADR THEN 1 ELSE -1,B2D(ADR.[36:10]),01158900
|
|
B2D(ADR.[46:2]),CODE,MNM,B2D(SYL),0,0) ; 01159000
|
|
IF DEBUGADR<ADR THEN DEBUGADR~ADR; 01159100
|
|
END DEBUG; 01159200
|
|
PROCEDURE DEBUGWORD(N); VALUE N; REAL N; %PRINTS OUT C+ CONSTANTS 01159300
|
|
BEGIN 01159400
|
|
STREAM PROCEDURE WB2D(F,T); 01159500
|
|
BEGIN 01159600
|
|
DI ~ T; 01159700
|
|
DI ~ DI+35; DS~10LIT"CONSTANT " ; 01159800
|
|
SI ~ F; 01159900
|
|
16(DS ~ 3 RESET; 3(IF SB THEN DS ~ SET 01160000
|
|
ELSE DS ~ RESET; 01160100
|
|
SKIP SB)); 01160200
|
|
END WB2D; 01160300
|
|
ARRAY A[0:14]; FORMAT F(X63,"(DEC ",B,")") ; 01160400
|
|
WRITE(A[*],F,N); WB2D(N,A) ; 01160500
|
|
WRITAROW(15,A) ; 01160600
|
|
END DEBUGWORD; 01160700
|
|
REAL PROCEDURE GIT(Z); % RETURNS OPERATOR IN SYLLABLE Z 01160800
|
|
VALUE Z; REAL Z; 01160900
|
|
BEGIN 01161000
|
|
INTEGER STREAM PROCEDURE GT(S,SKP); VALUE SKP; 01161100
|
|
BEGIN 01161200
|
|
SI ~ S; SKP(SI ~ SI + 2); 01161300
|
|
DI ~ LOC GT; DI ~ DI +6; DS ~ 2 CHR; 01161400
|
|
END GT; 01161500
|
|
GIT ~ GT(EDOC[Z.[36:3],Z.[39:7]],Z.[46:2]); 01161600
|
|
END GIT; 01161700
|
|
REAL STREAM PROCEDURE SPCLBIN2DEC(N); VALUE N ; 01161800
|
|
BEGIN LOCAL L; LABEL B1 ; 01161900
|
|
DI~LOC L; SI~LOC N; DS~8DEC; SI~LOC L; TALLY~8 ; 01162000
|
|
B1: IF SC="0" THEN BEGIN TALLY~TALLY+63; SI~SI+1; GO B1 END; 01162100
|
|
DI~LOC SPCLBIN2DEC; DI~DI+2; DS~6LIT" "; DI~DI-6; N~TALLY; DS~N CHR;01162200
|
|
END OF SPCLBIN2DEC; 01162300
|
|
STREAM PROCEDURE PACK(T,F,SKP); VALUE SKP,F; 01162400
|
|
BEGIN % PACKS OPERATORS INTO EDOC 01162500
|
|
SI ~ LOC F; SI ~ SI + 6;DI ~ T; SKP(DI ~ DI + 2); 01162600
|
|
DS ~ 2 CHR; 01162700
|
|
END PACK; 01162800
|
|
01162900
|
|
PROCEDURE EMITO(N); VALUE N; REAL N; 01163000
|
|
BEGIN 01163100
|
|
BUMPADR; 01163200
|
|
PACK(EDOC[EDOCI],(N~1&N[36:38:10]),ADR.[46:2]); 01163300
|
|
IF CODETOG THEN DEBUG(N); 01163400
|
|
END EMITO; 01163500
|
|
PROCEDURE EMITN(P); VALUE P; REAL P; 01163600
|
|
BEGIN LABEL XIT; 01163700
|
|
01163800
|
|
ALPHA S; 01163900
|
|
01164000
|
|
IF S~GET(P)>0 THEN S~GET(GETSPACE(P)); 01164100
|
|
IF S.CLASS = VARID THEN IF BOOLEAN(S.CE) THEN 01164200
|
|
IF BOOLEAN(S.TWOD) THEN 01164300
|
|
BEGIN 01164400
|
|
EMITL( (T~GET(P+2).BASE).[33:7]); 01164500
|
|
EMITDESCLIT(S.ADDR); 01164600
|
|
EMITO(LOD); 01164700
|
|
EMITL(T.[40:8]); 01164800
|
|
EMITO(CDC); 01164900
|
|
GO TO XIT; 01165000
|
|
END ELSE 01165100
|
|
EMITNUM(GET(P+2).BASE) 01165200
|
|
ELSE 01165300
|
|
IF NOT BOOLEAN(S.FORMAL) THEN IF NOT DESCREQ THEN 01165400
|
|
BEGIN 01165500
|
|
EMITL(S~S.ADDR); 01165600
|
|
IF S.[37:2]=1 THEN %REFERENCING 2ND HALF OF PRT; 01165700
|
|
BEGIN 01165800
|
|
IF ADR } 4087 THEN 01165900
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01166000
|
|
EMITO(XRT); 01166100
|
|
END; 01166200
|
|
GO TO XIT; 01166300
|
|
END; 01166400
|
|
EMITDESCLIT(S.ADDR); 01166500
|
|
XIT: 01166600
|
|
END EMITN; 01166700
|
|
01166800
|
|
PROCEDURE EMITV(P); VALUE P; ALPHA P; 01166900
|
|
BEGIN 01167000
|
|
ALPHA S; 01167100
|
|
IF S~ GET(P) > 0 THEN S ~ GET(GETSPACE(P)); 01167200
|
|
IF S.CLASS = VARID THEN 01167300
|
|
IF BOOLEAN(S.CE) THEN 01167400
|
|
IF BOOLEAN(S.TWOD) THEN 01167500
|
|
BEGIN 01167600
|
|
EMITL( (T~GET(P+2).BASE).[33:7]); 01167700
|
|
EMITDESCLIT(S.ADDR); 01167800
|
|
EMITO(LOD); 01167900
|
|
IF S.SUBCLASS } DOUBTYPE THEN 01168000
|
|
BEGIN 01168100
|
|
EMITO(DUP); 01168200
|
|
EMITPAIR(T.[40:8]+1, COC); 01168300
|
|
EMITO(XCH); 01168400
|
|
EMITPAIR(T.[40:8], COC); 01168500
|
|
END ELSE EMITPAIR(T.[40:8], COC); 01168600
|
|
END 01168700
|
|
ELSE 01168800
|
|
IF S.SUBCLASS } DOUBTYPE THEN 01168900
|
|
BEGIN 01169000
|
|
EMITNUM( (T~GET(P+2).BASE)+1); 01169100
|
|
EMITOPDCLIT(S.ADDR); 01169200
|
|
EMITNUM(T); 01169300
|
|
EMITOPDCLIT(S.ADDR); 01169400
|
|
END ELSE 01169500
|
|
BEGIN 01169600
|
|
EMITNUM(GET(P+2).BASE); 01169700
|
|
EMITOPDCLIT(S.ADDR); 01169800
|
|
END 01169900
|
|
ELSE 01170000
|
|
IF S.SUBCLASS } DOUBTYPE THEN 01170100
|
|
IF BOOLEAN(S.FORMAL) THEN 01170200
|
|
BEGIN 01170300
|
|
EMITDESCLIT(S.ADDR); 01170400
|
|
EMITO(DUP); 01170500
|
|
EMITPAIR(1, XCH); 01170600
|
|
EMITO(INX); 01170700
|
|
EMITO(LOD); 01170800
|
|
EMITO(XCH); 01170900
|
|
EMITO(LOD); 01171000
|
|
END ELSE 01171100
|
|
BEGIN 01171200
|
|
EMITOPDCLIT(S.ADDR+1); 01171300
|
|
EMITOPDCLIT(S.ADDR); 01171400
|
|
END 01171500
|
|
ELSE EMITOPDCLIT(S.ADDR) 01171600
|
|
ELSE EMITOPDCLIT(S.ADDR); 01171700
|
|
END EMITV; 01171800
|
|
01171900
|
|
PROCEDURE EMITL(N); VALUE N; REAL N; 01172000
|
|
BEGIN 01172100
|
|
BUMPADR; 01172200
|
|
PACK(EDOC[EDOCI],(N~0&N[36:38:10]),ADR.[46:2]); 01172300
|
|
IF CODETOG THEN DEBUG(N); 01172400
|
|
END EMITL; 01172500
|
|
PROCEDURE EMITD(R, OP); VALUE R, OP; REAL R, OP; 01172600
|
|
BEGIN 01172700
|
|
BUMPADR; 01172800
|
|
PACK(EDOC[EDOCI], (R ~ OP & R[36:42:6]), ADR.[46:2]); 01172900
|
|
IF CODETOG THEN DEBUG(-R); 01173000
|
|
END EMITD; 01173100
|
|
PROCEDURE EMITDDT(B,A,X); VALUE B,A,X; INTEGER B,A,X ; 01173200
|
|
BEGIN % DOES DIB B, DIA A, TRB X; HANDLES [B:A:X]. 01173300
|
|
EMITD(B~B MOD 6+B DIV 6|8,DIB); EMITD(A~A MOD 6+A DIV 6|8,DIA) ; 01173400
|
|
EMITD(X~X,TRB); 01173500
|
|
END OF EMITDDT ; 01173600
|
|
PROCEDURE EMITPAIR(L, OP); VALUE L, OP; INTEGER L, OP; 01173700
|
|
BEGIN 01173800
|
|
EMITL(L); 01173900
|
|
IF L.[37:2] = 1 THEN 01174000
|
|
BEGIN 01174100
|
|
IF ADR } 4087 THEN 01174200
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01174300
|
|
EMITO(XRT); 01174400
|
|
END; 01174500
|
|
EMITO(OP); 01174600
|
|
END EMITPAIR; 01174700
|
|
PROCEDURE ADJUST; 01174800
|
|
WHILE ADR.[46:2] ! 3 DO EMITO(NOP); 01174900
|
|
PROCEDURE EMITNUM(N); VALUE N; REAL N; 01175000
|
|
BEGIN 01175100
|
|
DEFINE CPLUS = 1792#; 01175200
|
|
IF N.[3:6] =0 AND ABS(N) < 1024 THEN 01175300
|
|
BEGIN 01175400
|
|
EMITL(N); 01175500
|
|
IF N < 0 THEN EMITO(SSN); 01175600
|
|
END ELSE 01175700
|
|
BEGIN 01175800
|
|
IF ADR } 4079 THEN 01175900
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01176000
|
|
EMITOPDCLIT(CPLUS + (ADR+1).[46:1] + 1); 01176100
|
|
EMITL(2); 01176200
|
|
EMITO(GFW); 01176300
|
|
ADJUST; 01176400
|
|
BUMPADR; 01176500
|
|
PACK(EDOC[EDOCI],N.[1:11],ADR.[46:2]); 01176600
|
|
BUMPADR; 01176700
|
|
PACK(EDOC[EDOCI],N.[12:12],ADR.[46:2]); 01176800
|
|
BUMPADR; 01176900
|
|
PACK(EDOC[EDOCI],N.[24:12],ADR.[46:2]); 01177000
|
|
BUMPADR; 01177100
|
|
PACK(EDOC[EDOCI],N.[36:12],ADR.[46:2]); 01177200
|
|
IF N.[36:12]=49 THEN %%% IF C-REL CONSTANT LOOKS LIKE AN XRT 01177300
|
|
EMITO(NOP); %%% THEN INSURE AGAINST P-BIT INTERRUPT. 01177400
|
|
IF CODETOG THEN DEBUGWORD(N); 01177500
|
|
END; 01177600
|
|
END EMITNUM; 01177700
|
|
01177800
|
|
PROCEDURE EMITNUM2(HI,LO);VALUE HI,LO; REAL HI,LO; 01177900
|
|
BEGIN 01178000
|
|
BOOLEAN B; REAL I,N; 01178100
|
|
LABEL Z,X; 01178200
|
|
DEFINE CPLUS = 1792#; 01178300
|
|
IF HI=0 OR LO=0 THEN BEGIN EMITNUM(LO); EMITNUM(HI); GO Z END; 01178400
|
|
ADJUST; 01178500
|
|
IF ADR } 4077 THEN 01178600
|
|
BEGIN ADR~ADR+1; SEGOVF; ADR~-1 END; 01178700
|
|
EMITOPDCLIT(CPLUS + 2); EMITOPDCLIT(CPLUS + 1); 01178800
|
|
EMITPAIR(3,GFW); 01178900
|
|
X: FOR I ~ 0 STEP 1 UNTIL 3 DO 01179000
|
|
BEGIN 01179100
|
|
CASE I OF BEGIN 01179200
|
|
N ~ HI.[ 1:11]; 01179300
|
|
N ~ HI.[12:12]; 01179400
|
|
N ~ HI.[24:12]; 01179500
|
|
N ~ HI.[36:12]; 01179600
|
|
END CASE; 01179700
|
|
BUMPADR; PACK(EDOC[EDOCI],N,ADR.[46:2]); 01179800
|
|
END; 01179900
|
|
IF CODETOG THEN DEBUGWORD(HI); 01180000
|
|
IF NOT B THEN BEGIN B~TRUE; HI~LO; GO TO X; END; 01180100
|
|
IF N=49 THEN %%% IF C-REL CONSTANT LOOKS LIKE AN XRT 01180200
|
|
EMITO(NOP) ; %%% THEN INSURE AGAINST P-BIT INTERRUPT. 01180300
|
|
Z: 01180400
|
|
END EMITNUM2; 01180500
|
|
01180600
|
|
PROCEDURE EMITLINK(N); VALUE N; REAL N; % EMITS LINKS 01180700
|
|
BEGIN 01180800
|
|
FORMAT FF(X35,*(33(".")),A4,":",A1," LINK",X10,A4,"******") ; 01180900
|
|
BUMPADR; 01181000
|
|
PACK(EDOC[EDOCI],N,ADR.[46:2]); 01181100
|
|
IF CODETOG THEN 01181200
|
|
WRITALIST(FF,4,IF ADR{DEBUGADR THEN 1 ELSE -1,B2D(ADR.[36:10]),01181300
|
|
B2D(ADR.[46:2]),B2D(N),0,0,0,0) ; 01181400
|
|
IF DEBUGADR<ADR THEN DEBUGADR~ADR ; 01181500
|
|
END EMITLINK; 01181600
|
|
01181700
|
|
PROCEDURE EMITSTORE(IX, EXP); VALUE IX, EXP; REAL IX, EXP; 01181800
|
|
BEGIN 01181900
|
|
REAL E, VT; 01182000
|
|
P ~ REAL(ERRORTOG); 01182100
|
|
ERRORTOG ~ FALSE; 01182200
|
|
E ~ GET(GETSPACE(IX)); 01182300
|
|
IF NOT( (VT ~ E.SUBCLASS) = LOGTYPE EQV EXP = LOGTYPE) OR 01182400
|
|
NOT(VT = COMPTYPE EQV EXP = COMPTYPE) THEN 01182500
|
|
BEGIN XTA ~ GET(IX+1); FLAG(86) END; 01182600
|
|
IF E.CLASS = VARID THEN 01182700
|
|
BEGIN 01182800
|
|
IF BOOLEAN(E.FORMAL) OR BOOLEAN(E.CE) THEN 01182900
|
|
BEGIN 01183000
|
|
IF VT { LOGTYPE THEN 01183100
|
|
BEGIN 01183200
|
|
IF VT = INTYPE AND EXP } REALTYPE THEN EMITPAIR(1, IDV); 01183300
|
|
EMITN(IX); 01183400
|
|
EMITO(IF VT = INTYPE THEN ISD ELSE STD); 01183500
|
|
IF EXP } DOUBTYPE THEN EMITO(DEL); 02183600
|
|
END ELSE 02183700
|
|
BEGIN 02183800
|
|
EMITN(IX); 02183900
|
|
EMITPAIR(JUNK, STN); 02184000
|
|
EMITO(STD); 02184100
|
|
IF EXP < DOUBTYPE THEN EMITL(0); 02184200
|
|
EMITL(1); 02184300
|
|
EMITPAIR(JUNK, LOD); 02184400
|
|
EMITO(INX); 02184500
|
|
EMITO(STD); 02184600
|
|
END 02184700
|
|
END ELSE 02184800
|
|
BEGIN 02184900
|
|
IF VT = INTYPE AND EXP } REALTYPE THEN EMITPAIR(1, IDV); 02185000
|
|
EMITPAIR(E.ADDR, IF VT = INTYPE THEN ISD ELSE STD); 02185100
|
|
IF VT { LOGTYPE THEN 02185200
|
|
IF EXP } DOUBTYPE THEN EMITO(DEL) ELSE ELSE 02185300
|
|
BEGIN 02185400
|
|
IF EXP < DOUBTYPE THEN EMITL(0); 02185500
|
|
EMITPAIR(E.ADDR+1, STD); 02185600
|
|
END 02185700
|
|
END 02185800
|
|
END ELSE 02185900
|
|
IF E.CLASS = ARRAYID THEN 02186000
|
|
BEGIN 02186100
|
|
IF VT { LOGTYPE THEN 02186200
|
|
BEGIN 02186300
|
|
IF VT = INTYPE AND EXP } REALTYPE THEN EMITPAIR(1, IDV); 02186400
|
|
IF EXP } DOUBTYPE THEN 02186500
|
|
BEGIN 02186600
|
|
EMITO(XCH); 02186700
|
|
EMITO(DEL); 02186800
|
|
END; 02186900
|
|
EMITO(XCH); 02187000
|
|
EMITO(IF VT = INTYPE THEN ISD ELSE STD); 02187100
|
|
END ELSE 02187200
|
|
BEGIN 02187300
|
|
IF EXP } DOUBTYPE THEN 02187400
|
|
BEGIN 00187500
|
|
EMITPAIR(JUNK, STD); 00187600
|
|
EMITO(XCH); 00187700
|
|
EMITOPDCLIT(JUNK); 00187800
|
|
EMITO(XCH); 00187900
|
|
EMITPAIR(JUNK, STN); 00188000
|
|
EMITO(STD); 00188100
|
|
EMITL(1); 00188200
|
|
EMITPAIR(JUNK, LOD); 00188300
|
|
EMITO(INX); 00188400
|
|
EMITO(STD); 00188500
|
|
END ELSE 00188600
|
|
BEGIN 00188700
|
|
EMITO(XCH); 00188800
|
|
EMITPAIR(JUNK, STN); 00188900
|
|
EMITO(STD); 00189000
|
|
EMITL(0); 00189100
|
|
EMITL(1); 00189200
|
|
EMITPAIR(JUNK, LOD); 00189300
|
|
EMITO(INX); 00189400
|
|
EMITO(STD); 00189500
|
|
END 00189600
|
|
END 00189700
|
|
END ELSE BEGIN XTA ~ GET(IX+1); FLAG(49) END; 00189800
|
|
ERRORTOG ~ ERRORTOG OR BOOLEAN(P); 00189900
|
|
END EMITSTORE; 00190000
|
|
00190100
|
|
PROCEDURE EMITB(A,C); VALUE A,C; REAL A; BOOLEAN C; 00190200
|
|
BEGIN COMMENT GENERATES LITC AND BRANCH FROM CURRENT ADR TO ADDRESS A. 00190300
|
|
IF THE BOOLEAN C IS TRUE THEN THE BRANCH IS CONDITIONAL. BEOREF IS 00190400
|
|
TRUE IF THE BRANCH IS BACKWARDS; 00190500
|
|
BOOLEAN BEOREF; 00190600
|
|
REAL SEG; 00190700
|
|
IF ADR } 4086 THEN 00190800
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 00190900
|
|
IF A < 0 THEN 00191000
|
|
BEGIN 00191100
|
|
IF BRANCHX>LBRANCH THEN FATAL(123); 00191200
|
|
BRANCHX ~ BRANCHES[LAX~BRANCHX]; 00191300
|
|
BRANCHES[LAX] ~ -(ADR+1); 00191400
|
|
EMITLINK(0); 00191500
|
|
EMITO(IF C THEN BFC ELSE BFW); 00191600
|
|
EMITO(NOP); 00191700
|
|
END ELSE 00191800
|
|
BEGIN 00191900
|
|
SEG ~ A.SEGNO; 00192000
|
|
A ~ A.LINK; 00192100
|
|
BEOREF ~ ADR > A; 00192200
|
|
IF A.[46:2] =0 THEN 00192300
|
|
BEGIN 00192400
|
|
IF SEG > 0 AND SEG ! NSEG THEN 00192500
|
|
EMITOPDCLIT(PRGDESCBLDR(2, 0, A.[36:10], SEG)) 00192600
|
|
ELSE 00192700
|
|
EMITL(ABS((ADR+2).[36:10] - A.[36:10])); 00192800
|
|
IF BEOREF THEN 00192900
|
|
EMITO( IF C THEN GBC ELSE GBW) ELSE 00193000
|
|
EMITO( IF C THEN GFC ELSE GFW); 00193100
|
|
END ELSE 00193200
|
|
BEGIN 00193300
|
|
EMITL(ABS(ADR + 3 - A)); 00193400
|
|
IF BEOREF THEN 00193500
|
|
EMITO(IF C THEN BBC ELSE BBW) ELSE 00193600
|
|
EMITO(IF C THEN BFC ELSE BFW); 00193700
|
|
END; 00193800
|
|
END; 00193900
|
|
END EMITB; 00194000
|
|
00194100
|
|
PROCEDURE EMITDESCLIT(N); VALUE N; REAL N; 00194200
|
|
BEGIN 00194300
|
|
IF N.[37:2] = 1 THEN 00194400
|
|
BEGIN 00194500
|
|
IF ADR } 4087 THEN 00194600
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 00194700
|
|
EMITO(XRT); 00194800
|
|
END; 00194900
|
|
BUMPADR; 00195000
|
|
PACK(EDOC[EDOCI],(N~3&N[36:38:10]),ADR.[46:2]); 00195100
|
|
IF CODETOG THEN DEBUG(N); 00195200
|
|
END EMITDESCLIT; 00195300
|
|
PROCEDURE EMITOPDCLIT(N); VALUE N; REAL N; 00195400
|
|
BEGIN 00195500
|
|
IF N.[37:2] = 1 THEN 00195600
|
|
BEGIN 00195700
|
|
IF ADR } 4087 THEN 00195800
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 00195900
|
|
EMITO(XRT); 00196000
|
|
END; 00196100
|
|
BUMPADR; 00196200
|
|
PACK(EDOC[EDOCI],(N~2&N[36:38:10]),ADR.[46:2]); 00196300
|
|
IF CODETOG THEN DEBUG(N); 00196400
|
|
END EMITOPDCLIT; 00196500
|
|
PROCEDURE EMITLABELDESC(N); VALUE N; ALPHA N; 00196600
|
|
BEGIN 00196700
|
|
LABEL XIT; 00196800
|
|
REAL T,B,C,D ; 00196900
|
|
IF N ~ LBLSHFT(XTA~N) = 0 OR N = BLANKS THEN 00197000
|
|
BEGIN FLAG(135); GO TO XIT END; 00197100
|
|
IF T ~ SEARCH(N) = 0 THEN 00197200
|
|
T ~ ENTER(0 & LABELID[TOCLASS], N) ELSE 00197300
|
|
IF GET(T).CLASS ! LABELID THEN 00197400
|
|
BEGIN FLAG(144); GO TO XIT END; 00197500
|
|
IF XREF THEN ENTERX(N,0&LABELID[TOCLASS]); 00197600
|
|
IF B ~(C~GET(T+2)).BASE =0 THEN 00197700
|
|
IF (D~GET(T)).SEGNO!0 THEN C.BASE~B~PRGDESCBLDR(2,0,D.ADDR DIV 4, 00197800
|
|
D.SEGNO) ELSE 00197900
|
|
BEGIN BUMPPRT; C.BASE~B~PRTS END; PUT(T+2,C); 00198000
|
|
EMITL(B); EMITO(MKS); 00198100
|
|
EMITDESCLIT(1536); % F+0 00198200
|
|
EMITOPDCLIT(1537); % F+1 00198300
|
|
EMITV(NEED(".LABEL", INTRFUNID)); 00198400
|
|
XIT: 00198500
|
|
END EMITLABELDESC; 00198600
|
|
00198700
|
|
COMMENT TRACEBACK, OFLOWHANGERS, AND PRTSAVER ARE 00198800
|
|
PROCEDURES USED TO ACCUMULATE FORMAT AND NAMELIST ARRAYS; 00198900
|
|
PROCEDURE TRACEBACK(M,DEX,PRT); VALUE M,DEX,PRT; INTEGER M,DEX,PRT; 00199000
|
|
BEGIN INTEGER I,J; REAL C; 00199100
|
|
IF (C~GET(M+2)).BASE ! 0 THEN 00199200
|
|
BEGIN I ~ ADR; ADR ~ C.BASE; 00199300
|
|
DO BEGIN J ~ GIT(ADR); 00199400
|
|
ADR ~ ADR - 1; 00199500
|
|
EMITL(DEX); 00199600
|
|
EMITPAIR(PRT,LOD); 00199700
|
|
END UNTIL ADR ~ J = 0; 00199800
|
|
ADR ~ I; 00199900
|
|
END; 00200000
|
|
INFO[M.IR,M.IC].ADDR ~ PRT; PUT(M+2,0&DEX[TOBASE]); 00200100
|
|
END TRACEBACK; 00200200
|
|
00200300
|
|
PROCEDURE OFLOWHANGERS(I); VALUE I; INTEGER I; 00200400
|
|
BEGIN INTEGER J; LABEL XIT; 00200500
|
|
FOR J ~ 1 STEP 1 UNTIL MAXNBHANG DO 00200600
|
|
IF FNNHANG[J] = 0 THEN % MAKE AN ENTRY 00200700
|
|
BEGIN FNNHANG[J] ~ I; 00200800
|
|
PUT(I+2,J); 00200900
|
|
GO TO XIT; 00201000
|
|
END; 00201100
|
|
XTA ~ MAXNBHANG; % IF WE REACH HERE WERE HURTIN 00201200
|
|
FLAG(91); 00201300
|
|
XIT: 00201400
|
|
END OFLOWHANGERS; 00201500
|
|
00201600
|
|
PROCEDURE PRTSAVER(M,SZ,ARY); VALUE M,SZ; 00201700
|
|
INTEGER M,SZ; ARRAY ARY[0]; 00201800
|
|
BEGIN INTEGER I; REAL INFA; 00201900
|
|
LABEL SHOW,XIT; 00202000
|
|
IF (INFA~GET(M)) < 0 THEN % PREVIOUSLY DEFINED 00202100
|
|
BEGIN XTA ~ GET(M+1); 00202200
|
|
FLAG(20); GO TO XIT; 00202300
|
|
END; 00202400
|
|
IF I ~ INFA .ADDR ! 0 THEN % PRT ASSIGNED AT OFLOW TIME 00202500
|
|
SHOW: 00202600
|
|
BEGIN I ~ PRGDESCBLDR(1,I,0,NXAVIL ~ NXAVIL + 1); 00202700
|
|
WRITEDATA(SZ,NXAVIL,ARY); 00202800
|
|
FNNHANG[GET(M+2).SIZE] ~ 0; 00202900
|
|
END ELSE % ADD THIS ARRAY TO HOLD 00203000
|
|
BEGIN IF FNNPRT=0 THEN BEGIN BUMPPRT; FNNPRT~PRTS END; 00203100
|
|
IF FNNINDEX + SZ > DUMPSIZE THEN % ARRAY WONT FIT 00203200
|
|
BEGIN BUMPPRT;FNNHANG[GET(M+2).SIZE]~0; TRACEBACK(M,0,I~PRTS); 00203300
|
|
GO TO SHOW; 00203400
|
|
END ELSE % DUMP OUT CURRENT HOLDINGS 00203500
|
|
BEGIN FNNPRT ~ PRGDESCBLDR(1,FNNPRT,0,NXAVIL ~ NXAVIL + 1); 00203600
|
|
WRITEDATA(FNNINDEX,NXAVIL,FNNHOLD); 00203700
|
|
FNNINDEX ~ 0; BUMPPRT; FNNPRT ~PRTS; 00203800
|
|
END; 00203900
|
|
FNNHANG[GET(M + 2).SIZE] ~0; 00204000
|
|
TRACEBACK(M,FNNINDEX,FNNPRT); 00204100
|
|
MOVEW(ARY,FNNHOLD[FNNINDEX],SZ.[36:6],SZ); 00204200
|
|
FNNINDEX ~ FNNINDEX + SZ; 00204300
|
|
END; 00204400
|
|
PUT(M,-GET(M)); % ID NOW ASSIGNED 00204500
|
|
XIT: 00204600
|
|
END PRTSAVER; 00204700
|
|
00204800
|
|
PROCEDURE SEGOVF; 00204900
|
|
BEGIN 00205000
|
|
REAL I, T, A, J, SADR, INFC, LABPRT; 00205100
|
|
REAL SAVINS; 00205200
|
|
FOR T ~ 1 STEP 1 UNTIL MAXNBHANG DO 00205300
|
|
IF J~FNNHANG[T]!0 THEN BEGIN BUMPPRT;TRACEBACK(J,FNNHANG[T]~0,PRTS) END;00205400
|
|
SEGOVFLAG ~ TRUE; 00205500
|
|
BUMPPRT; 00205600
|
|
IF PRTS.[37:2]=1 THEN BEGIN 00205700
|
|
PACK(EDOC[EDOCI],(T~1&XRT[36:38:10]),ADR.[46:2]); 00205800
|
|
IF CODETOG THEN DEBUG(T); ADR~ADR+1 END; 00205900
|
|
PACK(EDOC[EDOCI], (T~2&PRTS[36:38:10]), ADR.[46:2]); 00206000
|
|
IF CODETOG THEN DEBUG(T); 00206100
|
|
ADR ~ ADR+1; 00206200
|
|
PACK(EDOC[EDOCI], (T~1&BFW [36:38:10]), ADR.[46:2]); 00206300
|
|
IF CODETOG THEN DEBUG(T); 00206400
|
|
SADR ~ ADR; 00206500
|
|
T ~ PRGDESCBLDR(2, PRTS, 0, NXAVIL+1); 00206600
|
|
FOR I ~ 0 STEP 1 UNTIL SHX DO 00206700
|
|
BEGIN T ~ STACKHEAD[I]; 00206800
|
|
WHILE T ! 0 DO 00206900
|
|
BEGIN IF (A~ GET(T)).CLASS = LABELID THEN 00207000
|
|
IF A > 0 THEN 00207100
|
|
BEGIN 00207200
|
|
ADR ~ A.ADDR; 00207300
|
|
IF LABPRT ~ (INFC~GET(T+2)).BASE = 0 THEN 00207400
|
|
BEGIN 00207500
|
|
BUMPPRT; LABPRT~PRTS; 00207600
|
|
PUT(T+2, INFC & PRTS[TOBASE]); 00207700
|
|
END; 00207800
|
|
WHILE ADR ! 0 DO 00207900
|
|
BEGIN J ~ GIT(ADR); ADR ~ ADR-1; 00208000
|
|
SAVINS~GIT(ADR+2).[36:10]; 00208100
|
|
EMITOPDCLIT(LABPRT); 00208200
|
|
EMITO(SAVINS); 00208300
|
|
ADR ~ J; 00208400
|
|
END; 00208500
|
|
INFO[T.IR,T.IC].ADDR ~ 0; 00208600
|
|
END; 00208700
|
|
T ~ A.LINK; 00208800
|
|
END; 00208900
|
|
END; 00209000
|
|
FOR I ~ 0 STEP 1 UNTIL LBRANCH DO 00209100
|
|
IF T ~ - BRANCHES[I] > 0 AND T < 4096 THEN 00209200
|
|
BEGIN 00209300
|
|
ADR ~ T-1; 00209400
|
|
SAVINS~GIT(ADR+2).[36:10]; 00209500
|
|
BUMPPRT; EMITOPDCLIT(PRTS); 00209600
|
|
EMITO(SAVINS); 00209700
|
|
BRANCHES[I] ~ - (PRTS+4096); 00209800
|
|
END; 00209900
|
|
SEGMENT((SADR+4) DIV 4,NSEG,FALSE,EDOC); 00210000
|
|
SEGMENTSTART; 00210100
|
|
EMITO(NOP); EMITO(NOP); 00210200
|
|
SEGOVFLAG ~ FALSE; 00210300
|
|
END SEGOVF; 00210400
|
|
00210500
|
|
PROCEDURE ARRAYDEC(I); VALUE I; REAL I; 00210600
|
|
BEGIN % DECLARES ARRAYS WHOSE INFO INDEX IS I 00210700
|
|
REAL PRT,LNK,J; 00210800
|
|
LABEL XIT; 00210900
|
|
BOOLEAN OWNID; REAL X; 00211000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ARRA","YDEC ",TRUE ); 00211100
|
|
PRT ~ GET(I).ADDR; 00211200
|
|
IF LNK ~ GET(I+2).SIZE = 0 THEN GO TO XIT ; 00211300
|
|
IF (OWNID ~ PRT < 1536 AND DATAPRT ! 0) THEN 00211400
|
|
BEGIN 00211500
|
|
EMITOPDCLIT(DATAPRT); EMITO(LNG); 00211600
|
|
EMITB(-1, TRUE); X ~ LAX; 00211700
|
|
END; 00211800
|
|
EMITO(MKS); 00211900
|
|
EMITDESCLIT(PRT); % STACK OR PRT ADDRESS 00212000
|
|
IF LNK { 1023 THEN 00212100
|
|
BEGIN 00212200
|
|
IF OWNID THEN EMITL(0); % LOWER BOUND 00212300
|
|
EMITL(LNK); % ARRAY SIZE 00212400
|
|
EMITL(1); % ONE DIMENSION 00212500
|
|
END 00212600
|
|
ELSE 00212700
|
|
BEGIN 00212800
|
|
J ~ (LNK + 255) DIV 256; 00212900
|
|
LNK ~ 256; %INCLUDE ENTIRE ARRAY SIZE IN ESTIMATE %512- 00213000
|
|
IF OWNID THEN EMITL(0); % FIRST LOWER BOUND 00213100
|
|
EMITL(J); % NUMBER OF ROWS 00213200
|
|
IF OWNID THEN EMITL(0); % SECOND LOWER BOUND 00213300
|
|
EMITL(256); % SIZE OF EACH ROW 00213400
|
|
EMITL(2); % TWO DIMENSIONS 00213500
|
|
END; 00213600
|
|
EMITL(1); % ONE ARRAY 00213700
|
|
EMITL(IF OWNID THEN 2 ELSE 0); %OWN OR LOCAL 00213800
|
|
EMITOPDCLIT(5); % CALL BLOCK 00213900
|
|
ARYSZ ~ ARYSZ + J + LNK; 00214000
|
|
IF NOT(F2TOG OR OWNID) THEN 00214100
|
|
BEGIN 00214200
|
|
F2TOG ~ TRUE; 00214300
|
|
EMITL(1); 00214400
|
|
EMITPAIR(FPLUS2,STD);% F+2~TRUE 00214500
|
|
END; 00214600
|
|
IF OWNID THEN FIXB(X); 00214700
|
|
XIT: 00214800
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ARRA","YDEC ",FALSE) ; 00214900
|
|
END ARRAYDEC; 00215000
|
|
00215100
|
|
REAL PROCEDURE SEARCH(E); VALUE E; REAL E; 00215200
|
|
BEGIN REAL T; LABEL XIT; 00215300
|
|
T ~ STACKHEAD[E MOD SHX]; 00215400
|
|
WHILE T ! 0 DO 00215500
|
|
IF INFO[(T+1).IR,(T+1).IC] = E THEN GO TO XIT 00215600
|
|
ELSE T ~ INFO[T.IR,T.IC].LINK; 00215700
|
|
XIT: SEARCH ~ T; 00215800
|
|
END SEARCH; 00215900
|
|
00216000
|
|
INTEGER PROCEDURE GLOBALSEARCH(E); VALUE E; REAL E; 00216100
|
|
BEGIN REAL T; LABEL XIT; 00216200
|
|
T ~ GLOBALSTACKHEAD[E MOD GHX]; 00216300
|
|
WHILE T ! 0 DO 00216400
|
|
IF INFO[(T+1).IR,(T+1).IC] = E THEN GO TO XIT 00216500
|
|
ELSE T ~ INFO[T.IR,T.IC].LINK; 00216600
|
|
XIT: GLOBALSEARCH ~ T; 00216700
|
|
END GLOBALSEARCH; 00216800
|
|
00216900
|
|
PROCEDURE PURGEINFO; 00217000
|
|
BEGIN REAL J; 00217100
|
|
FLAG(13); 00217200
|
|
FOR J ~ 0 STEP 1 UNTIL SHX DO STACKHEAD[J] ~ 0; 00217300
|
|
NEXTINFO ~ 2; 00217400
|
|
NEXTCOM ~ 0; 00217500
|
|
END; 00217600
|
|
00217700
|
|
INTEGER PROCEDURE ENTER(W, E); VALUE W, E; ALPHA W, E; 00217800
|
|
BEGIN REAL J; 00217900
|
|
IF GLOBALNEXTINFO { NEXTINFO THEN PURGEINFO; 00218000
|
|
W.LINK ~ STACKHEAD[J ~ E MOD SHX]; 00218100
|
|
STACKHEAD[J] ~ ENTER ~ J ~ NEXTINFO; 00218200
|
|
INFO[J.IR,J.IC] ~ W; 00218300
|
|
INFO[(J~J+1).IR,J.IC] ~ E; 00218400
|
|
INFO[(J~J+1).IR,J.IC] ~ 0; 00218500
|
|
NEXTINFO ~ NEXTINFO + 3; 00218600
|
|
END ENTER; 00218700
|
|
00218800
|
|
INTEGER PROCEDURE GLOBALENTER(W, E); VALUE W, E; ALPHA W, E; 00218900
|
|
BEGIN REAL J; 00219000
|
|
IF GLOBALNEXTINFO { NEXTINFO THEN PURGEINFO; 00219100
|
|
W.LINK ~ GLOBALSTACKHEAD[J ~ E MOD GHX]; 00219200
|
|
GLOBALSTACKHEAD[J] ~ GLOBALENTER ~ J ~ GLOBALNEXTINFO; 00219300
|
|
INFO[J.IR,J.IC] ~ W; 00219400
|
|
INFO[(J~J+1).IR,J.IC] ~ E; 00219500
|
|
INFO[(J~J+1).IR,J.IC] ~ 0; 00219600
|
|
GLOBALNEXTINFO ~ GLOBALNEXTINFO - 3; 00219700
|
|
END GLOBALENTER; 00219800
|
|
00219900
|
|
PROCEDURE LABELBRANCH(K, C); VALUE K, C; REAL K; BOOLEAN C; 00220000
|
|
BEGIN REAL TS,T,I,X; 00220100
|
|
DEFINE LABL = K#; 00220200
|
|
COMMENT LABELBRANCH GENERATES A "LITC ..." AND "BRANCH" FROM THE 00220300
|
|
CURRENT ADDRESS TO LABEL K. IF THE BOOLEAN C IS TRUE 00220400
|
|
THE BRANCH IS CONDITIONAL. IF THE LABEL HAS NOT BEEN ENCOUNTERED 00220500
|
|
THEN THE APPROPRIATE LINKAGE IS MADE; 00220600
|
|
LABEL XIT; 00220700
|
|
IF ADR } 4086 THEN 00220800
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 00220900
|
|
IF LABL ~ LBLSHFT(XTA~LABL) { 0 OR LABL = BLANKS THEN 00221000
|
|
BEGIN FLAG(135); GO TO XIT END; 00221100
|
|
IF T ~ SEARCH(LABL) ! 0 THEN 00221200
|
|
BEGIN TS ~ (I ~ GET(T)).ADDR; 00221300
|
|
IF I.CLASS ! LABELID THEN BEGIN FLAG(144); GO TO XIT END; 00221400
|
|
IF I > 0 THEN 00221500
|
|
BEGIN EMITLINK(TS); 00221600
|
|
EMITO(IF C THEN BFC ELSE BFW); 00221700
|
|
PUT(T,I&(ADR-1)[TOADDR]); 00221800
|
|
EMITO(NOP); 00221900
|
|
END ELSE 00222000
|
|
IF I.SEGNO = NSEG THEN EMITB(TS, C) ELSE 00222100
|
|
BEGIN IF TS~(X~GET(T+2)).BASE = 0 THEN 00222200
|
|
X.BASE ~ TS ~ PRGDESCBLDR(2,0,(I.ADDR).[36:10],I.SEGNO); 00222300
|
|
PUT(T+2,X); 00222400
|
|
EMITOPDCLIT(TS); 00222500
|
|
EMITO(IF C THEN BFC ELSE BFW); 00222600
|
|
END; 00222700
|
|
END ELSE 00222800
|
|
BEGIN 00222900
|
|
IF ADR < 0 THEN EMITO(NOP); 00223000
|
|
EMITLINK(0); 00223100
|
|
EMITO( IF C THEN BFC ELSE BFW); 00223200
|
|
T ~ ENTER(0 & LABELID[TOCLASS] & (ADR-1)[TOADDR], LABL); 00223300
|
|
EMITO(NOP); 00223400
|
|
END; 00223500
|
|
IF XREF THEN ENTERX(LABL,0&LABELID[TOCLASS]); 00223600
|
|
XIT: 00223700
|
|
END LABELBRANCH; 00223800
|
|
00223900
|
|
PROCEDURE DATASET; % SCANS CONSTANTS IN BLOCK DATA 00224000
|
|
BEGIN 00224100
|
|
REAL LST,CUR,LTYP,CTYP,SIZ,RPT; 00224200
|
|
REAL CUD; 00224300
|
|
BOOLEAN SGN; 00224400
|
|
DEFINE TYP = GLOBALNEXT#, 00224500
|
|
TYPC = 18:33:15#; 00224600
|
|
LABEL XIT,ERROR,DPP,SPP,CPP,COMM,S; 00224700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DATA","SET ",TRUE) ; 00224800
|
|
DATATOG ~ TRUE; FILETOG ~ TRUE; 00224900
|
|
SCAN; 00225000
|
|
LSTS ~ -1; LTYP ~77; 00225100
|
|
S: IF TYP = PLUS OR (SGN ~ TYP = MINUS ) THEN SCAN; 00225200
|
|
IF TYP = NUM THEN 00225300
|
|
BEGIN 00225400
|
|
IF NUMTYPE = STRINGTYPE AND STRINGSIZE > 1 THEN 00225500
|
|
BEGIN 00225600
|
|
IF LTYP ! 77 THEN 00225700
|
|
BEGIN % NOT FIRST ENTRY-PUSH DOWN PRIOR NUMBER 00225800
|
|
IF LSTS+2 > LSTMAX THEN 00225900
|
|
BEGIN FLAG(127); GO TO ERROR END; 00226000
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 00226100
|
|
LSTT[LSTS~LSTS+1] ~ LST; 00226200
|
|
LTYP ~ 77; 00226300
|
|
END; 00226400
|
|
00226500
|
|
IF LSTS + STRINGSIZE > LSTMAX THEN 00226600
|
|
BEGIN FLAG(127); GO TO ERROR END; 00226700
|
|
LSTT[LSTS~LSTS+1] ~ STRINGSIZE & STRINGTYPE[TYPC] 00226800
|
|
& SIZ[3:33:15]; 00226900
|
|
MOVEW(STRINGARRAY,LSTT[LSTS~LSTS+1], 00227000
|
|
STRINGSIZE.[36:6],STRINGSIZE); 00227100
|
|
LSTS ~ LSTS + STRINGSIZE -1; 00227200
|
|
SCAN; 00227300
|
|
GO TO COMM; 00227400
|
|
END; 00227500
|
|
% GOT NUMBER 00227600
|
|
IF NUMTYPE = STRINGTYPE THEN 00227700
|
|
BEGIN 00227800
|
|
FNEXT ~ STRINGARRAY[0]; 00227900
|
|
NUMTYPE ~ INTYPE; 00228000
|
|
IF SIZ = 0 THEN SIZ ~ 1; 00228100
|
|
END; 00228200
|
|
CUR ~ IF SGN THEN -FNEXT ELSE FNEXT; 00228300
|
|
CTYP ~ NUMTYPE; CUD ~ DBLOW; 00228400
|
|
00228500
|
|
SCAN; 00228600
|
|
IF TYP = COMMA OR TYP = SLASH THEN 00228700
|
|
BEGIN 00228800
|
|
IF SIZ = 0 THEN SIZ ~ 1; 00228900
|
|
IF CTYP = DOUBTYPE THEN 00229000
|
|
BEGIN 00229100
|
|
DPP: IF LTYP ! 77 THEN 00229200
|
|
BEGIN 00229300
|
|
IF LSTS+2 > LSTMAX THEN 00229400
|
|
BEGIN FLAG(127); GO TO ERROR END; 00229500
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 00229600
|
|
LSTT[LSTS~LSTS+1] ~ LST; 00229700
|
|
LTYP ~ 77; 00229800
|
|
END; 00229900
|
|
IF LSTS+3 > LSTMAX THEN BEGIN FLAG(127); GO TO ERROR END; 00230000
|
|
LSTT[LSTS~LSTS+1] ~ SIZ&DOUBTYPE[TYPC]; 00230100
|
|
LSTT[LSTS~LSTS+1] ~ CUR; 00230200
|
|
LSTT[LSTS~LSTS+1] ~ CUD; 00230300
|
|
GO TO COMM; 00230400
|
|
END; 00230500
|
|
% SINGLE PRECISION 00230600
|
|
SPP: 00230700
|
|
IF LTYP = 77 THEN 00230800
|
|
BEGIN 00230900
|
|
LST ~ CUR; 00231000
|
|
LTYP ~ CTYP; 00231100
|
|
RPT ~ SIZ; 00231200
|
|
GO TO COMM; 00231300
|
|
END; 00231400
|
|
IF LTYP = CTYP THEN 00231500
|
|
IF REAL(BOOLEAN(CUR) EQV BOOLEAN(LST)) = REAL(NOT FALSE) THEN 00231600
|
|
BEGIN 00231700
|
|
RPT ~ RPT + SIZ; 00231800
|
|
GO TO COMM; 00231900
|
|
END; 00232000
|
|
IF LSTS+2 > LSTMAX THEN BEGIN FLAG(127); GO TO ERROR END; 00232100
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 00232200
|
|
LSTT[LSTS~LSTS+1] ~ LST; 00232300
|
|
RPT ~ SIZ; 00232400
|
|
LST ~ CUR; LTYP ~ CTYP; 00232500
|
|
GO TO COMM; 00232600
|
|
END; 00232700
|
|
% TYP ! COMMA - CHECK FOR * 00232800
|
|
IF TYP ! STAR THEN BEGIN FLAG(125); GO TO ERROR END; 00232900
|
|
IF CTYP ! INTYPE THEN BEGIN FLAG(113); GO TO ERROR END; 00233000
|
|
IF SIZ ! 0 OR SIZ ~ CUR { 0 THEN 00233100
|
|
BEGIN FLAG(64); GO TO ERROR END; 00233200
|
|
SCAN; GO TO S; 00233300
|
|
END; 00233400
|
|
% TYP ! NUM AT LABEL S 00233500
|
|
IF SIZ = 0 THEN SIZ ~ 1; 00233600
|
|
IF NAME = "T " OR NAME = "F " THEN 00233700
|
|
BEGIN 00233800
|
|
CUR ~ REAL(NAME = "T "); 00233900
|
|
CTYP ~ LOGTYPE; 00234000
|
|
SCAN; GO TO SPP; 00234100
|
|
END; 00234200
|
|
IF TYP ! LPAREN THEN BEGIN FLAG(64); GO TO ERROR END; 00234300
|
|
CPP: % COMPLEX 00234400
|
|
IF LTYP ! 77 THEN 00234500
|
|
BEGIN 00234600
|
|
IF LSTS+2 > LSTMAX THEN 00234700
|
|
BEGIN FLAG(127); GO TO ERROR END; 00234800
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 00234900
|
|
LSTT[LSTS~LSTS+1] ~ LST; 00235000
|
|
LTYP ~ 77; 00235100
|
|
END; 00235200
|
|
SCAN; 00235300
|
|
IF TYP = PLUS OR (SGN~TYP=MINUS) THEN SCAN; 00235400
|
|
IF TYP ! NUM OR NUMTYPE > REALTYPE THEN 00235500
|
|
BEGIN FLAG(64); GO TO ERROR END; 00235600
|
|
IF LSTS+2 > LSTMAX THEN BEGIN FLAG(127); GO TO ERROR END;00235700
|
|
LSTT[LSTS~LSTS+1] ~ SIZ&COMPTYPE[TYPC]; 00235800
|
|
LSTT[LSTS~LSTS+1] ~ IF SGN THEN -FNEXT ELSE FNEXT; 00235900
|
|
SCAN; 00236000
|
|
IF TYP ! COMMA THEN BEGIN FLAG(114); GO TO ERROR END; 00236100
|
|
SCAN; 00236200
|
|
IF TYP = PLUS OR (SGN ~ TYP = MINUS) THEN SCAN; 00236300
|
|
IF TYP ! NUM OR NUMTYPE > REALTYPE THEN 00236400
|
|
BEGIN FLAG(64); GO TO ERROR END; 00236500
|
|
LSTT[LSTS~LSTS+1]~IF SGN THEN - FNEXT ELSE FNEXT ; 00236600
|
|
SCAN; 00236700
|
|
IF TYP ! RPAREN THEN BEGIN FLAG(108); GO TO ERROR END; 00236800
|
|
SCAN; 00236900
|
|
COMM: 00237000
|
|
SIZ ~ 0; 00237100
|
|
IF TYP = COMMA THEN BEGIN SCAN; GO TO S; END; 00237200
|
|
IF TYP = SLASH THEN GO TO XIT; 00237300
|
|
FLAG(126); 00237400
|
|
ERROR: 00237500
|
|
LSTS ~ 0; 00237600
|
|
WHILE TYP ! COMMA AND TYP ! SLASH AND TYP ! SEMI DO SCAN;00237700
|
|
IF TYP = COMMA THEN GO TO COMM; 00237800
|
|
XIT: 00237900
|
|
IF LTYP ! 77 THEN 00238000
|
|
BEGIN 00238100
|
|
IF LSTS+2>LSTMAX THEN BEGIN FLAG(127); LSTS~0 END;00238200
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 00238300
|
|
LSTT[LSTS~LSTS+1] ~ LST; 00238400
|
|
END; 00238500
|
|
IF LSTS+1 > LSTMAX THEN BEGIN FLAG(127); LSTS~0 END; 00238600
|
|
LSTT[LSTS~LSTS+1]~0; 00238700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DATA","SET ",FALSE); 00238800
|
|
DATATOG ~ FALSE; FILETOG ~ FALSE; 00238900
|
|
END DATASET; 00239000
|
|
00239100
|
|
ALPHA PROCEDURE CHECKDO; 00239200
|
|
BEGIN ALPHA X, T; INTEGER N; 00239300
|
|
STREAM PROCEDURE CKDO(A, ID, LAB); 00239400
|
|
BEGIN 00239500
|
|
SI ~ A; SI ~ SI+4; DI ~ LAB; DI ~ DI+2; 00239600
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE JUMP OUT); 00239700
|
|
DI ~ ID; DI ~ DI+2; 00239800
|
|
6(IF SC = ALPHA THEN DS ~ CHR ELSE JUMP OUT); 00239900
|
|
END CKDO; 00240000
|
|
IF (XTA~HOLDID[0]).[12:24] = "FILE" THEN FLOG(37) ELSE 00240100
|
|
IF XTA.[12:12] ! "DO" THEN FLOG(17) ELSE 00240200
|
|
BEGIN 00240300
|
|
X ~ T ~ BLANKS; 00240400
|
|
CKDO(HOLDID[0], X, T); 00240500
|
|
IF X=BLANKS THEN FLOG(105); 00240600
|
|
IF T ~ LBLSHFT(T) < 0 OR T = BLANKS THEN FLOG(17) ELSE 00240700
|
|
TEST ~ NEED(T, LABELID); 00240800
|
|
DOLAB[DT]~ T; 00240900
|
|
IF XREF THEN ENTERX(T,0&LABELID[TOCLASS]); 00241000
|
|
IF GET(TEST) < 0 THEN % TEST FOR PREV DEFINITION 00241100
|
|
BEGIN 00241200
|
|
XTA ~ GET(TEST+1); 00241300
|
|
FLAG(15); 00241400
|
|
DT ~ DT-1; 00241500
|
|
END; 00241600
|
|
IF N ~ SEARCH(X) = 0 THEN 00241700
|
|
N~ENTER(TIPE[IF T~X.[12:6]!"0" THEN T ELSE 12],X); 00241800
|
|
CHECKDO ~ GETSPACE(N); 00241900
|
|
IF XREF THEN ENTERX(X,1&GET(N) [15:15:9]); 00242000
|
|
IF (X~GET(N)).SUBCLASS > REALTYPE OR X.CLASS ! VARID THEN 00242100
|
|
BEGIN XTA ~ GET(N+1); FLAG(84) END; 00242200
|
|
IF GET(FX1).CLASS = UNKNOWN THEN PUT(FX1+1, "......"); 00242300
|
|
END; 00242400
|
|
END CHECKDO; 00242500
|
|
00242600
|
|
PROCEDURE FIXB(N); VALUE N; REAL N; 00242700
|
|
BEGIN 00242800
|
|
REAL T, U, FROM; 00242900
|
|
LABEL XIT, BIGJ; 00243000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FI","XB ",TRUE); 00243100
|
|
IF N } 10000 THEN FROM ~ N-10000 ELSE 00243200
|
|
IF FROM ~ - BRANCHES[N] > 4095 THEN 00243300
|
|
BEGIN 00243400
|
|
ADJUST; 00243500
|
|
T ~ PRGDESCBLDR(2, FROM.LINK, (ADR+1).[36:10], NSEG); 00243600
|
|
GO TO XIT; 00243700
|
|
END; 00243800
|
|
T ~ ADR; ADR ~ FROM - 1; 00243900
|
|
IF (T + 1).[46:2] = 0 THEN GO TO BIGJ; 00244000
|
|
IF (U ~ T - 2 - ADR) { 1023 THEN EMITL(U) ELSE 00244100
|
|
BEGIN ADR ~ T; ADJUST; T ~ ADR; ADR ~ FROM - 1; 00244200
|
|
BIGJ: EMITL((T+1).[36:10] - (ADR+2).[36:10]); 00244300
|
|
EMITO(IF BOOLEAN(GIT(FROM + 1).[36:1]) THEN GFW ELSE GFC); 00244400
|
|
END; 00244500
|
|
ADR ~ T; 00244600
|
|
XIT: 00244700
|
|
IF N < 10000 THEN BEGIN 00244800
|
|
BRANCHES[N] ~ BRANCHX; 00244900
|
|
BRANCHX ~ N; 00245000
|
|
END; 00245100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FI","XB ",FALSE); 00245200
|
|
END FIXB; 00245300
|
|
00245400
|
|
PROCEDURE DATIME; % PRODUCES HEADING LINE FOR LISTING. 00245500
|
|
BEGIN 00245600
|
|
INTEGER D; 00245700
|
|
FORMAT T(X9,"B 5 7 0 0 F O R T R A N C O M P I L A T I O N ",00245800
|
|
"XVI.0" 00245900
|
|
,",",A2,",",A8,"DAY, ",2(A2,"/"),A2,",",A2,":",A2," H,"/); 00246000
|
|
WRITALIST(T,7, 00246100
|
|
"16" %999-00246200
|
|
,TIME(6),(D~TIME(5)).[12:12],D.[24:12],D.[36:12], 00246300
|
|
D~(D~RTI DIV 216000) MOD 10+D DIV 10|64, 00246400
|
|
D~(D~RTI DIV 3600 MOD 60) MOD 10+D DIV 10|64,0) ; 00246500
|
|
IF D~LINE.TYPE=10 OR D=12 OR D=13 THEN 00246600
|
|
BEGIN 00246700
|
|
LOCK(LINE); LINE.AREAS~0; LINE.AREASIZE~0 ; 00246800
|
|
IF D ! 12 THEN LINE.TYPE~12; SPACE(LINE,2) ; 00246900
|
|
END; 00247000
|
|
FIRSTCALL~FALSE ; 00247100
|
|
END DATIME; 00247200
|
|
00247300
|
|
PROCEDURE PRINTCARD; 00247400
|
|
BEGIN 00247500
|
|
STREAM PROCEDURE MOVE(P, Q, A); VALUE A, Q; 00247600
|
|
BEGIN 00247700
|
|
SI ~ Q; DI ~ P; 00247800
|
|
DS ~ CHR; 00247900
|
|
DI ~ DI+11; SI ~ LOC A; 00248000
|
|
DS ~ 4 DEC; 00248100
|
|
END MOVE; 00248200
|
|
STREAM PROCEDURE MOVEBACK(P); 00248300
|
|
BEGIN DI ~ P; DS ~ LIT "]" END; 00248400
|
|
MOVE (CRD[9],BUFL,(ADR+1).[36:10]); 00248500
|
|
IF FIRSTCALL THEN DATIME; 00248600
|
|
IF UNPRINTED THEN WRITAROW(15,CRD) ; 00248700
|
|
MOVEBACK(CRD[9]); 00248800
|
|
IF SEQERRORS THEN WRITAROW(14,ERRORBUFF) ; 00248900
|
|
END PRINTCARD; 00249000
|
|
00249100
|
|
BOOLEAN PROCEDURE READACARD; FORWARD; 00249200
|
|
PROCEDURE FILEOPTION; FORWARD; 00249300
|
|
BOOLEAN PROCEDURE LABELR; 00249400
|
|
BEGIN 00249500
|
|
LABEL XIT, LOOP; 00249600
|
|
BOOLEAN STREAM PROCEDURE CHECK(CD, LAB); 00249700
|
|
BEGIN LABEL XIT; LOCAL T1; 00249800
|
|
SI ~ CD; 00249900
|
|
IF SC ! " " THEN IF SC < "0" THEN 00250000
|
|
BEGIN DI ~ LAB; DI ~ DI + 2; 00250100
|
|
DS ~ 6 CHR; GO TO XIT; 00250200
|
|
END; 00250300
|
|
DI ~LOC T1; DS ~ 6 LIT " "; DI ~ DI -6; 00250400
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE SI ~ SI+1); 00250500
|
|
DI ~LAB; DI ~DI + 2; SI ~ LOC T1; 00250600
|
|
5(IF SC ! "0" THEN JUMP OUT; SI ~ SI + 1); 00250700
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE JUMP OUT); 00250800
|
|
TALLY ~ 1; 00250900
|
|
XIT: CHECK ~ TALLY; 00251000
|
|
END CHECK; 00251100
|
|
BOOLEAN STREAM PROCEDURE BLANKCARD(CD); 00251200
|
|
BEGIN LABEL XIT; 00251300
|
|
SI ~ CD; 00251400
|
|
2(36( IF SC ! " " THEN JUMP OUT 2 TO XIT ELSE SI ~ SI + 1)); 00251500
|
|
TALLY ~ 1; 00251600
|
|
XIT: BLANKCARD ~ TALLY; 00251700
|
|
END BLANKCARD; 00251800
|
|
LOOP: 00251900
|
|
LABL ~ BLANKS; 00252000
|
|
IF LABELR ~ NOT READACARD THEN GO TO XIT; 00252100
|
|
IF NOT CHECK(CRD[0],LABL) THEN 00252200
|
|
BEGIN IF LABL = "FILE " THEN FILEOPTION ELSE 00252300
|
|
BEGIN IF LISTOG THEN PRINTCARD; 00252400
|
|
IF (XTA ~ LABL).[12:6] ! "C" THEN FLAG(135); 00252500
|
|
END; 00252600
|
|
GO TO LOOP; 00252700
|
|
END; 00252800
|
|
IF ENDSEGTOG THEN IF BLANKCARD(CRD) THEN 00252900
|
|
BEGIN IF LISTOG THEN PRINTCARD; GO TO LOOP END ELSE 00253000
|
|
BEGIN SEGMENTSTART; 00253100
|
|
IF LISTOG THEN PRINTCARD; 00253200
|
|
IF LABL = BLANKS THEN GO TO XIT; 00253300
|
|
END ELSE 00253400
|
|
BEGIN 00253500
|
|
IF LABL = BLANKS THEN 00253600
|
|
BEGIN IF LISTOG THEN PRINTCARD; GO TO XIT END; 00253700
|
|
IF ADR > 0 THEN ADJUST; 00253800
|
|
IF LISTOG THEN PRINTCARD; 00253900
|
|
END; 00254000
|
|
XIT: 00254100
|
|
END LABELR; 00254200
|
|
00254300
|
|
PROCEDURE FILEOPTION; 00254400
|
|
BEGIN COMMENT THIS PROCEDURE PROCESSES THE OPTIONAL FILE CONTROL CARD. 00254500
|
|
THE WORD "FILE" APPEARS IN COL. 1 - 4. COL. 5 AND 6 ARE BLANK. 00254600
|
|
#1 BELOW IS REQUIRED, OTHER ENTRIES MAY BE AS SPARSE AS DESIRED. 00254700
|
|
1. FILE <NUM> = <MULTI-FILE ID> / <FILE ID> 00254800
|
|
OR 00254900
|
|
FILE <NUM> = <FILE ID> 00255000
|
|
THE FOLLOWING "/" IS A DOCUMMENTARY OR. 00255100
|
|
THE SEQUENCE OF RESERVED WORDS MUST BE MAINTAINED. 00255200
|
|
2. UNIT=PRINT/READER/PUNCH/DISK/TAPE7/TAPE9/REMOTE (UNIT DESIGNATE). 00255300
|
|
3. UNLABELED (FOR UNLABELED TAPES) 00255400
|
|
4. ALPHA (FOR ALPHA RECORDING MODE) 00255500
|
|
5. BCL (IGNORED, FOR 3500 USE) 00255600
|
|
6. FIXED (IGNORED, FOR 3500 USE) 00255700
|
|
7. SAVE = <NUM> (SAVE FACTOR IN DAYS) 00255800
|
|
8. LOCK (LOCK FILE AT EOJ) 00255900
|
|
9. RANDOM/SERIAL/UPDATE (DISK USE) 00256000
|
|
10. AREA = <NUM> (DISK RECORDS/ROW) 00256100
|
|
11. BLOCKING = <NUM> (RECORD PER BLOCK) 00256200
|
|
12. RECORD = <NUM> (RECORD SIZE) 00256300
|
|
13. BUFFER = <NUM> (# OF BUFFERS) 00256400
|
|
14. WORKAREA (IGNORED, FOR 3500) ; 00256500
|
|
ALPHA P,KEEP; BOOLEAN TOG,CA,TS; LABEL XIT; 00256600
|
|
COMMENT INXFIL = INFC.ADINFO, MULTI FILE ID = FILEINFO[1,INXFIL], 00256700
|
|
FILE ID = FILEINFO[2,INXFIL], DISK RECORDS = FILEINFO[3,INXFIL],00256800
|
|
FILEINFO[0,INXFIL] FROM RIGHT TO LEFT IS; 00256900
|
|
INTEGER % NAME USE BITS 00257000
|
|
BUFF, % # BUFFERS 6 00257100
|
|
RECORD, % RECORD SIZE 12 00257200
|
|
BLOCK, % BLOCK SIZE 12 00257300
|
|
SAVER, % SAVE FACTOR 12 00257400
|
|
SPIN, % REW & LOCK @ EOJ 2 00257500
|
|
ALPH; % RECORDING MODE 1 00257600
|
|
PROCEDURE FETCH; 00257700
|
|
BEGIN SCAN; XTA ~ SYMBOL; 00257800
|
|
IF NEXT=COMMA OR NEXT=MINUS THEN 00257900
|
|
BEGIN SCAN; XTA ~ SYMBOL; 00258000
|
|
IF NEXT ! ID THEN FLOG(37); 00258100
|
|
END; 00258200
|
|
END FETCH; 00258300
|
|
INTEGER STREAM PROCEDURE MAKEINT(XTA); 00258400
|
|
BEGIN LABEL LOOP; LOCAL T; 00258500
|
|
SI ~ XTA; SI ~ SI + 2; 00258600
|
|
LOOP: IF SC } "0" THEN 00258700
|
|
BEGIN TALLY ~ TALLY + 1; SI ~ SI + 1; GO TO LOOP END; 00258800
|
|
T ~ TALLY; SI ~ XTA; SI ~ SI + 2; DI ~ LOC MAKEINT; DS ~ T OCT; 00258900
|
|
END MAKEINT; 00259000
|
|
INTEGER PROCEDURE REPLACEMENT; 00259100
|
|
BEGIN 00259200
|
|
FETCH; IF NEXT = EQUAL THEN 00259300
|
|
BEGIN FETCH; IF XTA.[12:6] { 11 THEN BEGIN REPLACEMENT ~ MAKEINT(XTA); 00259400
|
|
FETCH END ELSE FLOG(37); 00259500
|
|
END ELSE FLOG(37); 00259600
|
|
END REPLACEMENT; 00259700
|
|
INTEGER STREAM PROCEDURE SRI7(S); 00259800
|
|
BEGIN SI ~ S; DI ~ LOC SRI7; 00259900
|
|
SI ~ SI + 2; DI ~ DI + 1; DS ~ 7 CHR; 00260000
|
|
END SRI7; 00260100
|
|
COMMENT * * * * * START OF CODE * * * * ; 00260200
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEO","PTION ", TRUE); 00260300
|
|
ERRORTOG ~ FALSE; 00260400
|
|
IF LISTOG THEN PRINTCARD; 00260500
|
|
XTA ~ "FILE "; 00260600
|
|
IF NSEG ! 0 THEN FLAG(60); 00260700
|
|
IF INXFIL ~ INXFIL + 1 > MAXOPFILES THEN 00260800
|
|
BEGIN FLAG(59); GO TO XIT END; 00260900
|
|
BUMPPRT; 00261000
|
|
MAXFILES ~ MAXFILES + 1; 00261100
|
|
FILETOG ~ TRUE; SCN ~ 1; % START SCAN MAINTAINENCE 00261200
|
|
FETCH; IF XTA.[12:6] > 11 THEN BEGIN FLAG(37); GO TO XIT END; 00261300
|
|
IF XTA.[12:6] = 0 THEN BEGIN FLOG(037); GO TO XIT END; 00261400
|
|
IF T ~ GLOBALSEARCH(P ~ 0&"."[12:42:6]&XTA[18:12:30]) ! 0 THEN FLAG(20) 00261500
|
|
ELSE BEGIN P~ GLOBALENTER(-0&PRTS[TOADDR]&FILEID[TOCLASS],P); 00261600
|
|
PUT(P+2,GET(P+2)&INXFIL[TOADINFO]); 00261700
|
|
IF XREF THEN ENTERX(XTA &1[TOCE],1&FILEID[TOCLASS]); 00261800
|
|
END; 00261900
|
|
INFC ~ GET(P + 2); 00262000
|
|
FETCH; IF NEXT = EQUAL THEN FETCH ELSE 00262100
|
|
BEGIN FLOG(37); GO TO XIT; END; 00262200
|
|
IF NEXT = SEMI THEN 00262300
|
|
BEGIN FLAG(37); GO TO XIT END 00262400
|
|
ELSE FILEINFO[2,INXFIL] ~ SRI7(ACCUM[1]); 00262500
|
|
FETCH; IF NEXT = SLASH THEN 00262600
|
|
BEGIN FILEINFO[1,INXFIL] ~ FILEINFO[2,INXFIL]; % MULTI FILE ID 00262700
|
|
FETCH; 00262800
|
|
IF NEXT = SEMI THEN BEGIN FLAG(37); GO TO XIT; END 00262900
|
|
ELSE FILEINFO[2,INXFIL] ~ SRI7(ACCUM[1]); 00263000
|
|
FETCH; 00263100
|
|
END; 00263200
|
|
IF XTA = "UNIT " THEN 00263300
|
|
BEGIN 00263400
|
|
FETCH; 00263500
|
|
IF NEXT = EQUAL THEN FETCH ELSE FLOG(37); 00263600
|
|
INFC.LINK ~ KEEP ~ (IF TOG ~ XTA = "PRINT " 00263700
|
|
OR XTA = "PRINTE" THEN 18 ELSE 00263800
|
|
IF CA ~ TOG ~ XTA = "READ " 00263900
|
|
OR XTA = "READER" THEN 2 ELSE 00264000
|
|
IF CA ~ TOG ~ XTA = "PUNCH " THEN 0 ELSE 00264100
|
|
IF TOG ~ XTA = "DISK " THEN 12 ELSE 00264200
|
|
IF TOG ~ XTA = "TAPE " 00264300
|
|
OR XTA = "TAPE7 " THEN 2 ELSE 00264400
|
|
IF TOG ~ XTA = "PAPER " THEN 8 ELSE 00264500
|
|
IF CA ~TOG~XTA= "REMOTE" THEN 19 ELSE 00264600
|
|
IF TOG ~ XTA = "TAPE9 " THEN 2 ELSE 2); 00264700
|
|
IF TOG THEN FETCH ELSE FLOG(37) 00264800
|
|
END ELSE INFC.LINK~KEEP~IF DCINPUT THEN 12 ELSE 2 ; 00264900
|
|
TS~KEEP=12 ; 00265000
|
|
IF XTA="BACKUP" THEN 00265100
|
|
BEGIN 00265200
|
|
FETCH; IF KEEP!0 AND KEEP!18 THEN FLAG(37); 00265300
|
|
IF TOG~XTA="DISK " THEN KEEP~IF KEEP=0 THEN 22 ELSE 15 00265400
|
|
ELSE IF TOG~XTA="TAPE " THEN KEEP~IF KEEP=0 THEN 20 ELSE 6 00265500
|
|
ELSE BEGIN 00265600
|
|
TOG~XTA="ALTERN"; KEEP~IF KEEP=0 THEN 25 ELSE 16 ; 00265700
|
|
END; 00265800
|
|
IF TOG THEN FETCH; INFC.LINK~KEEP ; 00265900
|
|
END ; 00266000
|
|
IF XTA = "UNLABE" THEN % FOR UNLABELED TAPES 00266100
|
|
BEGIN IF KEEP = 2 THEN INFC .LINK ~ 9; FETCH; END; 00266200
|
|
IF XTA = "ALPHA " THEN FETCH ELSE IF KEEP = 2 THEN ALPH ~ 1; % MODE 00266300
|
|
IF XTA = "BCL " THEN FETCH; % FOR B3500 00266400
|
|
IF XTA = "FIXED " THEN FETCH; % FOR B3500 00266500
|
|
IF XTA = "SAVE " THEN SAVER ~ REPLACEMENT; 00266600
|
|
IF XTA = "LOCK " THEN BEGIN SPIN ~ 2; FETCH END; % REW & LOCK AT EOJ 00266700
|
|
IF TOG ~ XTA = "RANDOM" THEN T ~ 10 ELSE 00266800
|
|
IF TOG ~ XTA = "SERIAL" THEN T ~ 12 ELSE 00266900
|
|
IF TOG ~ XTA = "UPDATE" THEN T ~ 13; 00267000
|
|
IF TOG THEN 00267100
|
|
BEGIN IF KEEP=12 THEN INFC.LINK~T ELSE FLAG(37); FETCH END; 00267200
|
|
IF XTA="AREA " THEN 00267300
|
|
BEGIN 00267400
|
|
IF KEEP!12 THEN FLAG(37); 00267500
|
|
T~REPLACEMENT; 00267600
|
|
IF XTA="EU " THEN 00267700
|
|
IF I~REPLACEMENT>19 THEN FLAG(37) 00267800
|
|
ELSE T.EUNF~I+1;% 0 MEANS EU NOT SPECIFIED 00267900
|
|
IF XTA="SPEED " THEN 00268000
|
|
BEGIN 00268100
|
|
FETCH; 00268200
|
|
IF NEXT=EQUAL THEN 00268300
|
|
BEGIN 00268400
|
|
FETCH; 00268500
|
|
IF XTA.[12:6]{SLOWV THEN 00268600
|
|
IF I~MAKEINT(XTA)>SLOWV THEN FLAG(37) 00268700
|
|
ELSE 00268800
|
|
ELSE IF XTA="FAST " THEN T.SPDF~FASTV 00268900
|
|
ELSE IF XTA="SLOW " THEN T.SPDF~SLOWV 00269000
|
|
ELSE FLOG(37); 00269100
|
|
FETCH; 00269200
|
|
END 00269300
|
|
ELSE FLOG(37); 00269400
|
|
END; 00269500
|
|
IF XTA="SENSIT" THEN 00269600
|
|
BEGIN 00269700
|
|
T.SENSE~1; 00269800
|
|
FETCH; 00269900
|
|
END; 00270000
|
|
FILEINFO[3,INXFIL]~T; 00270100
|
|
END; 00270200
|
|
IF XTA = "BLOCKI" THEN BLOCK ~ REPLACEMENT & 1[2:47:1]; 00270300
|
|
RECORD ~ IF XTA="RECORD" THEN REPLACEMENT ELSE IF CA THEN 10 ELSE IF TS 00270400
|
|
AND NOT (BOOLEAN(BLOCK.[2:1])) THEN 10 & 1[2:47:1] ELSE 17; 00270500
|
|
BUFF ~ IF XTA = "BUFFER" THEN REPLACEMENT ELSE 2; 00270600
|
|
IF XTA = "WORKAR" THEN FETCH; % IGNORED, FOR 3500 00270700
|
|
IF BUFF<1 OR BUFF>32 THEN BEGIN XTA~"BUFFER"; FLAG(152) END ; 00270800
|
|
IF RECORD<1 THEN BEGIN XTA~"RECORD"; FLAG(152)END ; 00270900
|
|
IF SAVER>999 THEN BEGIN XTA~"SAVE "; FLAG(152) END ; 00271000
|
|
IF T~INFC.LINK=10 OR T=12 OR T=13 THEN %%% ARE IN DISK FILE 00271100
|
|
BEGIN 00271200
|
|
IF BOOLEAN(RECORD.[2:1])THEN BLOCK ~ 300 00271300
|
|
ELSE 00271400
|
|
IF BLOCK~BLOCK|RECORD>1890 OR RECORD>1023 THEN 00271500
|
|
BEGIN XTA~"BK/REC"; FLAG(152) END 00271600
|
|
END 00271700
|
|
ELSE IF BLOCK~BLOCK|RECORD>1023 OR RECORD>1023 THEN IF KEEP ! 2 THEN 00271800
|
|
BEGIN XTA~"BK/REC"; FLAG(58 ) END ELSE BEGIN RECORD~257; BLOCK~0END;00271900
|
|
FILEINFO[0,INXFIL] ~ 0&BUFF[42:42:6]&RECORD[30:36:12]&BLOCK[18:36:12] 00272000
|
|
&SAVER[6:36:12]&SPIN[4:46:2]&ALPH[3:47:1]; 00272100
|
|
XIT: IF NEXT ! SEMI THEN 00272200
|
|
BEGIN FLOG(37); DO SCAN UNTIL NEXT = SEMI; END; 00272300
|
|
FILETOG ~ FALSE; % END SCAN MAINTAINENCE 00272400
|
|
PUT(P+2,INFC); 00272500
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEO","PTION ",FALSE) ; 00272600
|
|
END FILEOPTION; 00272700
|
|
00272800
|
|
PROCEDURE DOLOPT; 00272900
|
|
BEGIN 00273000
|
|
REAL STREAM PROCEDURE SCAN(BUF,ID); VALUE BUF; 00273100
|
|
BEGIN LABEL LP,LA,LE,XIT; 00273200
|
|
SI ~ BUF; DI ~ ID; DS ~ 2 LIT "0"; 00273300
|
|
LP: IF SC = " " THEN BEGIN SI~SI+1; GO TO LP; END; 00273400
|
|
IF SC = "," THEN BEGIN SI~SI+1; GO TO LP; END; 00273500
|
|
IF SC = "+" THEN BEGIN DS~CHR; GO TO XIT; END; 00273600
|
|
IF SC = "-" THEN BEGIN DS~CHR; GO TO XIT; END; 00273700
|
|
IF SC < "A" THEN BEGIN DI ~ ID; DS ~ 8 LIT "+0000001"; 00273800
|
|
LE: SI~SI+1; 00273900
|
|
GO TO XIT; 00274000
|
|
END; 00274100
|
|
IF SC="|" THEN GO TO LE;% THIS IS > "A" 00274200
|
|
IF SC="!" THEN GO TO LE;% THIS IS > "A" 00274300
|
|
6(IF SC = ALPHA THEN DS ~ CHR ELSE JUMP OUT); 00274400
|
|
LA: IF SC = ALPHA THEN BEGIN SI~SI+1; GO TO LA; END; 00274500
|
|
XIT: 00274600
|
|
SCAN ~ SI; 00274700
|
|
END SCAN; 00274800
|
|
REAL STREAM PROCEDURE GETVOID(BUF,VOIDSEQ,FR); VALUE BUF,FR; 00274900
|
|
BEGIN LABEL L,LC,LD,LE,XIT; LOCAL TA; 00275000
|
|
SI ~ BUF; DI~VOIDSEQ; DS~8LIT" "; DI~VOIDSEQ; 00275100
|
|
L: IF SC = " " THEN BEGIN SI~SI+1; GO TO L; END; 00275200
|
|
TA ~ SI; 00275300
|
|
IF SC = """ THEN 00275400
|
|
BEGIN 9(SI~SI+1; 00275500
|
|
IF SC = """ THEN BEGIN SI~SI+1; JUMP OUT TO LC; END 00275600
|
|
ELSE TALLY ~ TALLY + 1); 00275700
|
|
TALLY~TALLY+63; SI~TA; SI~SI+1; GO TO LE; 00275800
|
|
END; 00275900
|
|
IF SC < "0" THEN GO TO LD; 00276000
|
|
DS:=8LIT"0"; %115-00276100
|
|
8(SI:=SI+1; DI:=DI-1; TALLY:=TALLY+1; %115-00276200
|
|
IF SC LSS "0" THEN JUMP OUT); %115-00276300
|
|
LC: SI ~ TA; 00276400
|
|
LE: TA~TALLY; DS~TA CHR; GETVOID~SI; GO TO XIT; 00276500
|
|
LD: GETVOID~SI; 00276600
|
|
FR(DS~8LIT"9"); 00276700
|
|
XIT: 00276800
|
|
END GETVOID; 00276900
|
|
REAL STREAM PROCEDURE SEQNUM(BUF,VLU); VALUE BUF; 00277000
|
|
BEGIN LABEL L,LA,LC; LOCAL TA,TB; 00277100
|
|
SI ~ BUF; 00277200
|
|
L: IF SC = " " THEN BEGIN SI~SI+1; GO TO L; END; 00277300
|
|
IF SC = "," THEN BEGIN SI~SI+1; GO TO L; END; 00277400
|
|
TA ~ SI; 00277500
|
|
IF SC = "+" THEN 00277600
|
|
BEGIN SI~SI+1; 00277700
|
|
LA: IF SC = " " THEN BEGIN SI~SI+1; GO TO LA;END; 00277800
|
|
TB ~ SI; 00277900
|
|
IF SC < "0" THEN BEGIN SI~TA; GO TO LC; END; 00278000
|
|
DI~TB;TA~DI; 00278100
|
|
END; 00278200
|
|
8(IF SC < "0" THEN JUMP OUT TO LC; 00278300
|
|
TALLY~TALLY+1; SI~SI+1;); 00278400
|
|
LC: TB ~ TALLY; SEQNUM ~ SI; 00278500
|
|
SI ~ TA; DI ~ VLU; DS ~ TB OCT; 00278600
|
|
END SEQNUM; 00278700
|
|
REAL STREAM PROCEDURE MKABS(S); 00278800
|
|
BEGIN SI ~ S; SI~SI+1; MKABS ~ SI; 00278900
|
|
DI ~ S; 9(DI ~ DI + 8); DS ~ LIT "["; 00279000
|
|
END MKABS; 00279100
|
|
STREAM PROCEDURE MOVEW(P,Q); VALUE Q; 00279200
|
|
BEGIN SI~P; DI ~ Q; DS~CHR; END ; 00279300
|
|
REAL BUF,ID; 00279400
|
|
BOOLEAN VAL, SAVELISTOG; %511-00279500
|
|
LABEL LP,SET,RESET; 00279600
|
|
FORMAT WARN(X18,A6," ILLEGAL CONSTRUCT ON DALLAR CARD XXXX",X39, 00279700
|
|
"WARNING"); 00279800
|
|
DEFINE GETID = BEGIN ID~ " "; BUF ~ SCAN(BUF,ID) END#; 00279900
|
|
SAVELISTOG ~ LISTOG; %511- 00280000
|
|
MOVEW(CRD[9],BUFL); 00280100
|
|
BUF ~ MKABS(CRD[0]); 00280200
|
|
GETID; 00280300
|
|
IF ID = "VOID " THEN 00280400
|
|
BEGIN BUF ~ GETVOID(BUF, VOIDSEQ,0); VOIDTOG ~ TRUE 00280500
|
|
END ELSE 00280600
|
|
IF ID = "VOIDT " THEN 00280700
|
|
BEGIN BUF ~ GETVOID(BUF, VOIDTSEQ,0); VOIDTTOG ~ TRUE 00280800
|
|
END ELSE 00280900
|
|
BEGIN 00281000
|
|
TAPETOG.[47:1] ~ LASTMODE = 2; %517-00281100
|
|
IF ID = "SET " OR ID = "+ " THEN 00281200
|
|
SET: BEGIN GETID; VAL~ TRUE END 00281300
|
|
ELSE 00281400
|
|
IF ID = "RESET " OR ID = "- " THEN 00281500
|
|
RESET: BEGIN GETID; VAL ~ FALSE END 00281600
|
|
ELSE 00281700
|
|
BEGIN 00281800
|
|
TSSMESTOG ~ VAL; TSSEDITOG ~ VAL; CHECKTOG ~ VAL; %501-00281900
|
|
SINGLETOG~NOT VAL; HOLTOG~VAL; %501-00282000
|
|
LISTOG~VAL; CODETOG ~ DEBUGTOG ~ VAL; NEWTPTOG ~ VAL; 00282100
|
|
PRTOG~VAL; DOLIST~VAL; LIBTAPE~VAL; SEGPTOG~VAL; %501-00282200
|
|
LISTPTOG ~ VAL; FREEFTOG ~ XREF ~ VAL ; 00282300
|
|
VAL ~ TRUE; 00282400
|
|
END; 00282500
|
|
LP: IF ID > 0 THEN 00282600
|
|
BEGIN 00282700
|
|
IF ID = "TRACE " THEN 00282800
|
|
BEGIN PRTOG~VAL; LISTOG~VAL; CODETOG~DEBUGTOG~VAL; 00282900
|
|
END ELSE 00283000
|
|
IF ID = "CARD " THEN 00283100
|
|
BEGIN TAPETOG.[47:1]~NOT VAL; LASTMODE~2-REAL(VAL) END ELSE 00283200
|
|
IF ID = "TAPE " THEN 00283300
|
|
BEGIN TAPETOG.[47:1] ~ VAL; LASTMODE ~ REAL(VAL)+1; END ELSE00283400
|
|
IF ID = "NOSEQ " THEN SEQTOG ~ FALSE ELSE 00283500
|
|
IF ID = "SET " OR ID = "+ " THEN GO TO SET ELSE 00283600
|
|
IF ID = "RESET " OR ID = "- " THEN GO TO RESET ELSE 00283700
|
|
IF ID = "ONSITE" AND NOT REMFIXED THEN REMOTETOG ~ FALSE ELSE 00283800
|
|
IF ID = "REMOTE" AND NOT REMFIXED THEN REMOTETOG ~ VAL ELSE 00283900
|
|
IF ID = "FREEFO" THEN FREEFTOG ~ VAL ELSE 00284000
|
|
IF ID = "SINGLE" OR ID = "SGL " THEN 00284100
|
|
BEGIN SINGLETOG ~ VAL; LISTOG ~ TRUE; END ELSE 00284200
|
|
IF ID = "NEW " OR ID = "NEWTAP" THEN 00284300
|
|
BEGIN LIBTAPE~VAL; NEWTPTOG~VAL; NTAPTOG~TRUE; %501- 00284400
|
|
IF ID = "NEW " THEN %501-00284500
|
|
BEGIN %501-00284600
|
|
GETID; %501-00284700
|
|
IF ID ! "TAPE " THEN %501-00284800
|
|
GO TO LP; %501-00284900
|
|
END; %501-00285000
|
|
END ELSE %501-00285100
|
|
IF ID = "LIST " THEN LISTOG ~ VAL ELSE 00285200
|
|
IF ID = "SEQXEQ" AND NOT SEGSWFIXED THEN SEGSW ~ VAL ELSE 00285300
|
|
IF ID = "PRT " THEN PRTOG ~ VAL ELSE 00285400
|
|
IF ID = "DEBUGN" THEN 00285500
|
|
BEGIN LISTOG~VAL; CODETOG~VAL; PRTOG ~ VAL END ELSE 00285600
|
|
IF ID = "TIME " THEN TIMETOG ~ VAL ELSE 00285700
|
|
IF ID = "ERRMES" THEN TSSMESTOG ~ VAL ELSE 00285800
|
|
IF ID = "TSSEDI" THEN TSSEDITOG ~ VAL ELSE 00285900
|
|
IF ID = "LISTLI" THEN LISTLIBTOG ~ VAL ELSE 00286000
|
|
IF(ID = "SEGMEN" OR ID = "SEG ") AND VAL THEN 00286100
|
|
BEGIN ADR~ADR+1; SEGOVF; END ELSE 00286200
|
|
IF ID = "PAGE " AND VAL THEN WRITE(LINE[PAGE]) ELSE 00286300
|
|
IF ID = "VOID " THEN 00286400
|
|
BEGIN VOIDTOG ~ VAL; 00286500
|
|
IF VAL THEN BUF ~ GETVOID(BUF,VOIDSEQ,1); 00286600
|
|
END ELSE 00286700
|
|
IF ID = "VOIDT " THEN 00286800
|
|
BEGIN VOIDTTOG ~ VAL; 00286900
|
|
IF VAL THEN BUF ~ GETVOID(BUF,VOIDTSEQ,1); 00287000
|
|
END ELSE 00287100
|
|
IF ID = "LIMIT " THEN 00287200
|
|
BEGIN LIMIT ~ IF VAL THEN 0 ELSE @60; 00287300
|
|
BUF ~ SEQNUM(BUF,LIMIT); 00287400
|
|
IF LIMIT LEQ ERRORCT THEN GO TO POSTWRAPUP; 00287500
|
|
END ELSE 00287600
|
|
IF ID = "XREF " THEN 00287700
|
|
BEGIN 00287800
|
|
PXREF ~ TRUE; XREF ~ VAL; 00287900
|
|
END ELSE 00288000
|
|
IF ID = "SEQ " THEN 00288100
|
|
BEGIN SEQTOG ~ VAL; 00288200
|
|
IF VAL THEN 00288300
|
|
BEGIN SEQBASE ~ SEQINCR ~ 0; 00288400
|
|
BUF ~ SEQNUM(BUF,SEQBASE); 00288500
|
|
BUF ~ SEQNUM(BUF,SEQINCR); 00288600
|
|
IF SEQINCR { 0 THEN SEQINCR ~ 1000; 00288700
|
|
END END ELSE 00288800
|
|
IF ID = "LISTDO" THEN DOLIST ~ VAL ELSE 00288900
|
|
IF ID = "HOL " THEN HOLTOG ~ VAL ELSE 00289000
|
|
IF ID = "CHECK " THEN CHECKTOG ~ VAL ELSE 00289100
|
|
IF ID = "NEWPAG" THEN SEGPTOG ~ VAL ELSE %501-00289200
|
|
IF ID = "LISTP " THEN LISTPTOG ~ VAL ELSE 00289300
|
|
BEGIN IF FIRSTCALL THEN DATIME; 00289400
|
|
IF UNPRINTED THEN BEGIN PRINTCARD; UNPRINTED~FALSE END; 00289500
|
|
IF SINGLETOG THEN WRITE(LINE,WARN,ID) 00289600
|
|
ELSE WRITE(RITE,WARN,ID); 00289700
|
|
END 00289800
|
|
; 00289900
|
|
GETID; 00290000
|
|
GO TO LP; 00290100
|
|
END; 00290200
|
|
END; 00290300
|
|
IF DOLIST OR LISTOG OR SAVELISTOG THEN %511-00290400
|
|
IF UNPRINTED THEN PRINTCARD; %517-00290500
|
|
UNPRINTED ~ TRUE; 00290600
|
|
END DOLOPT; 00290700
|
|
00290800
|
|
STREAM PROCEDURE NEWSEQ(A,B); VALUE B; 00290900
|
|
BEGIN 00291000
|
|
SI ~ LOC B; DI ~ A; DS ~ 8 DEC; 00291100
|
|
END NEWSEQ; 00291200
|
|
INTEGER STREAM PROCEDURE SEQCHK(T,C); 00291300
|
|
BEGIN 00291400
|
|
SI ~ T; DI ~ C; 00291500
|
|
IF 8 SC < DC THEN TALLY ~ 4 ELSE 00291600
|
|
BEGIN 00291700
|
|
SI ~ SI - 8; DI ~ DI - 8; 00291800
|
|
IF 8 SC =DC THEN TALLY ~ 2 00291900
|
|
ELSE TALLY ~ 3; 00292000
|
|
END; 00292100
|
|
SEQCHK ~ TALLY; 00292200
|
|
END SEQCHK; 00292300
|
|
BOOLEAN PROCEDURE READACARD; 00292400
|
|
BEGIN 00292500
|
|
DEFINE FLAGI(FLAGI1) = BEGIN FLAG(FLAGI1); GO TO E4A;END #; 00292600
|
|
REAL STREAM PROCEDURE SCANINC(BUF,ID,RESULT,N,M); 00292700
|
|
VALUE BUF,M,N; 00292800
|
|
BEGIN 00292900
|
|
LOCAL TA; 00293000
|
|
LABEL LP,LQ,XIT; 00293100
|
|
DI := RESULT; DI := DI +7; 00293200
|
|
SI := BUF; 00293300
|
|
LP: IF SC = " " THEN BEGIN SI := SI + 1; GO TO LP; END; 00293400
|
|
IF SC = ALPHA THEN ELSE BEGIN DS:=LIT "1"; DI:=ID; DS~2LIT"0"; 00293500
|
|
DS := CHR; DS := 5LIT" ";GO TO XIT; END; 00293600
|
|
IF SC LSS "0" THEN DS:=LIT "2" ELSE DS:=LIT "3"; %400-00293700
|
|
N (DI:=ID; DS:=8 LIT "0 "; DI:=DI-7; %400-00293800
|
|
7(IF SC=ALPHA THEN DS~CHR ELSE JUMP OUT 2 TO XIT); 00293900
|
|
JUMP OUT TO XIT); 00294000
|
|
M ( 8 ( IF SC LSS "0" THEN JUMP OUT 2 TO LQ; %400-00294100
|
|
IF SC GTR "9" THEN JUMP OUT 2 TO LQ; %400-00294200
|
|
SI:=SI+1; TALLY:=TALLY+1)); %400-00294300
|
|
LQ: TA := TALLY; 00294400
|
|
SI := SI - TA; 00294500
|
|
DI := ID; 00294600
|
|
DS := TA OCT; 00294700
|
|
XIT: SCANINC := SI; 00294800
|
|
END SCANINC; 00294900
|
|
REAL STREAM PROCEDURE MKABS(S); 00295000
|
|
BEGIN SI := S; SI := SI + 1; MKABS := SI; END; 00295100
|
|
STREAM PROCEDURE MOVE(P, Q); VALUE Q; 00295200
|
|
BEGIN SI ~ P; DI ~ Q; DS ~ CHR; 00295300
|
|
DI ~ P; DS ~ LIT "]"; 00295400
|
|
END MOVE; 00295500
|
|
STREAM PROCEDURE MOVEC(C,B); VALUE B; 00295600
|
|
BEGIN SI~B; DI~C; DS~CHR; END; 00295700
|
|
BOOLEAN STREAM PROCEDURE GETCOL1(BUF); 00295800
|
|
BEGIN 00295900
|
|
SI ~ BUF; IF SC = "$" THEN TALLY ~ 1; 00296000
|
|
GETCOL1 ~ TALLY; 00296100
|
|
END; 00296200
|
|
STREAM PROCEDURE TSSEDITS(C,P); BEGIN SI~C; DI~P; DS~10WDS; SI~C ; 00296300
|
|
IF SC="C" THEN BEGIN DI~P; DI~DI+1; DS~LIT"-" END ELSE 00296400
|
|
IF SC!"$" THEN BEGIN SI~SI+5; IF SC!" " THEN IF SC!"0" THEN BEGIN DI~P;00296500
|
|
DS~6LIT"- " END END END OF TSSEDITS ; 00296600
|
|
STREAM PROCEDURE MOVEW(F,T,B,R); VALUE B, R; 00296700
|
|
BEGIN 00296800
|
|
LABEL XIT; 00296900
|
|
SI ~ F; DI ~ T; 00297000
|
|
B( 00297100
|
|
2(40( IF SC = ALPHA THEN DS ~ CHR ELSE 00297200
|
|
IF SC = " " THEN DS ~ CHR ELSE 00297300
|
|
IF SC = "%" THEN BEGIN DS ~ LIT "("; SI ~ SI+1 END ELSE 00297400
|
|
IF SC = "[" THEN BEGIN DS ~ LIT ")"; SI ~ SI+1 END ELSE 00297500
|
|
IF SC = "#" THEN BEGIN DS ~ LIT "="; SI ~ SI+1 END ELSE 00297600
|
|
IF SC = "&" THEN BEGIN DS ~ LIT "+"; SI ~ SI+1 END ELSE 00297700
|
|
IF SC = "@" THEN BEGIN DS ~ LIT """; SI ~ SI+1 END ELSE 00297800
|
|
IF SC = ":" THEN BEGIN DS ~ LIT """; SI ~ SI+1 END ELSE 00297900
|
|
IF SC = "<" THEN BEGIN DS ~ LIT "+"; SI ~ SI+1 END ELSE 00298000
|
|
IF SC = ">" THEN BEGIN DS ~ LIT "="; SI ~ SI+1 END ELSE 00298100
|
|
DS ~ CHR )); JUMP OUT TO XIT); 00298200
|
|
XIT: 00298300
|
|
SI~LOC R; SI~SI+7; DI~DI+1 ; 00298400
|
|
DS~CHR ; 00298500
|
|
END MOVEW; 00298600
|
|
ALPHA STREAM PROCEDURE DCMOVEW(F,T,B,FIL,R); VALUE B,FIL,R; 00298700
|
|
BEGIN LOCAL C; LABEL L1,L2,L3,L4 ; 00298800
|
|
SI~F; DI~T; 2(SI~SI+36; DS~36LIT" "); C~SI; DS~8CHR ; 00298900
|
|
SI~LOC R; SI~SI+6; DS~2CHR; DI~C; DS~8LIT"]";TALLY~33;SI~F; 00299000
|
|
IF SC = " " THEN %%% IT MIGHT BE A FILES CARD. 00299100
|
|
BEGIN SI~SI+1; IF SC="F" THEN 00299200
|
|
BEGIN DI~LOC FIL; DI~DI+2; IF 5SC=DC THEN 00299300
|
|
BEGIN DI~F; SI~LOC FIL; SI~SI+2; DS~6CHR ; GO TO L1; END 00299400
|
|
ELSE SI~F END ELSE SI~F END 00299500
|
|
ELSE IF SC = "F" THEN BEGIN DI~LOC FIL;DI~DI+2;IF 6SC=DC THEN GO L1 00299600
|
|
ELSE SI~F;END 00299700
|
|
ELSE IF SC="-" THEN 00299800
|
|
BEGIN %%% IT IS A CONTINUATION CARD. 00299900
|
|
SI~SI+1; DI~T; DS~6LIT" *" ; 00300000
|
|
5(IF SC=" " THEN SI~SI+1 ELSE JUMP OUT); GO TO L2 ; 00300100
|
|
END 00300200
|
|
ELSE IF SC="C" THEN 00300300
|
|
BEGIN %%% IT MIGHT BE A COMMENT CARD. 00300400
|
|
SI~SI+1; IF SC="-" THEN GO TO L1 ELSE SI~F ; 00300500
|
|
END ; 00300600
|
|
IF SC!"$" THEN %%% IT IS NOT A COMMENT CARD, NOR IS IT A $ CARD, 00300700
|
|
BEGIN %%% NOR A CONTINUATION CARD, NOR A FILES CARD. 00300800
|
|
2(33(IF SC=" " THEN SI~SI+1 ELSE JUMP OUT 2 TO L3)); L3: DI~T;00300900
|
|
5(IF SC=" " THEN SI~SI+1 ELSE IF SC}"0" THEN IF SC{"9" 00301000
|
|
THEN DS~CHR ELSE JUMP OUT ELSE JUMP OUT) ; 00301100
|
|
DI~T; DI~DI+6; IF SC=" " THEN SI~SI+1 ; 00301200
|
|
END 00301300
|
|
ELSE 00301400
|
|
BEGIN 00301500
|
|
L1: SI~F; DI~T; TALLY~36 ; 00301600
|
|
END ; 00301700
|
|
L2: C~TALLY ; 00301800
|
|
B(2(C(IF SC>">" THEN DS~CHR ELSE IF SC<"[" THEN DS~CHR ELSE 00301900
|
|
IF SC="%" THEN BEGIN DS~LIT"("; SI~SI+1 END ELSE 00302000
|
|
IF SC="#" THEN BEGIN DS~LIT"="; SI~SI+1 END ELSE 00302100
|
|
IF SC="&" THEN BEGIN DS~LIT"+"; SI~SI+1 END ELSE 00302200
|
|
IF SC="@" THEN BEGIN DS~LIT"""; SI~SI+1 END ELSE 00302300
|
|
IF SC=":" THEN BEGIN DS~LIT"""; SI~SI+1 END ELSE 00302400
|
|
IF SC="<" THEN BEGIN DS~LIT"+"; SI~SI+1 END ELSE 00302500
|
|
IF SC=">" THEN BEGIN DS~LIT"="; SI~SI+1 END ELSE 00302600
|
|
IF SC="[" THEN BEGIN DS~LIT")"; SI~SI+1 END ELSE 00302700
|
|
IF SC="]" THEN JUMP OUT 3 TO L4 ELSE DS~CHR));JUMP OUT TO L4);00302800
|
|
2(C(IF SC="]" THEN JUMP OUT 2 TO L4 ELSE DS~CHR)) ; 00302900
|
|
L4: DI~LOC DCMOVEW; DS~8LIT"00 "; DI~DI-6 ; 00303000
|
|
6(IF SC="]" THEN JUMP OUT ELSE DS~CHR) ; 00303100
|
|
END OF DCMOVEW ; 00303200
|
|
STREAM PROCEDURE SEQERR(BUFF, NEW, OLD); 00303300
|
|
BEGIN 00303400
|
|
DI ~ BUFF; DS ~ 18 LIT "SEQUENCE ERROR "; 00303500
|
|
SI ~ NEW; DS ~ LIT"""; 00303600
|
|
DS ~ 8 CHR; DS ~ LIT """; 00303700
|
|
DS ~ 3 LIT " < "; 00303800
|
|
SI ~ OLD; DS ~ LIT """; 00303900
|
|
DS ~ 8 CHR; DS ~ LIT """; 00304000
|
|
DS ~ 59 LIT " "; 00304100
|
|
DS ~ 8 LIT "X"; DS ~ 4 LIT " "; 00304200
|
|
END SEQERR; 00304300
|
|
STREAM PROCEDURE DCMOVE(E,C,A,N); VALUE A,N; 00304400
|
|
BEGIN SI~C; DI~E; DS~10WDS; DS~4CHR; SI~LOC A; DS~4DEC; 00304500
|
|
N(DS~8LIT" PATCH"); END; 00304600
|
|
REAL BUF,ID; 00304700
|
|
BOOLEAN NOWRI; LABEL ENDPB, E4B; 00304800
|
|
LABEL LIBADD, ENDPA, E4A, E4, STRTA; 00304900
|
|
LABEL E1,E2,E3,STRT,ENDP,XIT; 00305000
|
|
UNPRINTED~TRUE; 00305100
|
|
GO TO STRT; 00305200
|
|
LIBADD: 00305300
|
|
XTA := BLANKS; 00305400
|
|
IF INSERTDEPTH = -1 THEN SAVECARD ~ NEXTCARD; 00305500
|
|
MOVE (CRD[9],BUFL); 00305600
|
|
00305700
|
|
IF (INSERTDEPTH ~ INSERTDEPTH + 1) GTR INSERTMAX THEN 00305800
|
|
FLAG(158); 00305900
|
|
NEWTPTOG ~ FALSE; 00306000
|
|
INSERTINX ~ -1; 00306100
|
|
INSERTCOP ~ 0; 00306200
|
|
BLANKIT(SSNM[5],1,0); 00306300
|
|
BUF ~ SCANINC(BUF,INSERTMID,RESULT,1,0); 00306400
|
|
IF RESULT = 1 AND INSERTMID = "+ "THEN 00306500
|
|
BEGIN BUF~SCANINC(BUF,ID,RESULT,1,0); 00306600
|
|
IF ID = "COPY " THEN INSERTCOP ~ 1 00306700
|
|
ELSE FLAG(155); 00306800
|
|
BUF~SCANINC(BUF,INSERTMID,RESULT,1,0); 00306900
|
|
END; 00307000
|
|
IF RESULT NEQ 2 THEN FLAGI (155); 00307100
|
|
BUF := SCANINC(BUF,ID,RESULT,0,1); %107-00307200
|
|
IF RESULT = 1 THEN IF ID = "/ " THEN 00307300
|
|
BEGIN BUF := SCANINC(BUF,INSERTFID,RESULT,1,0); 00307400
|
|
IF RESULT NEQ 2 THEN FLAGI(155); 00307500
|
|
BUF := SCANINC(BUF,ID,RESULT,0,1); 00307600
|
|
END ELSE INSERTFID := TIME(-1) ELSE INSERTFID := TIME(-1); 00307700
|
|
IF RESULT = 3 THEN 00307800
|
|
BEGIN NEWSEQ(SSNM[5],ID); 00307900
|
|
BUF := SCANINC(BUF,ID,RESULT,0,1); 00308000
|
|
IF RESULT NEQ 1 THEN FLAGI(156); 00308100
|
|
IF ID = "] " THEN NEWSEQ (INSERTSEQ,99999999) %400-00308200
|
|
ELSE BEGIN %400-00308300
|
|
BUF ~ SCANINC(BUF,ID,RESULT,0,1); 00308400
|
|
IF RESULT NEQ 3 THEN FLAGI(157); 00308500
|
|
NEWSEQ (INSERTSEQ,ID); 00308600
|
|
END %400-00308700
|
|
END ELSE IF ID = "] " THEN NEWSEQ(INSERTSEQ,999999999) 00308800
|
|
ELSE FLAGI(157); 00308900
|
|
IF INSERTDEPTH > 0 THEN CLOSE (LF,RELEASE); 00309000
|
|
FILL LF WITH INSERTMID,INSERTFID; 00309100
|
|
DO BEGIN 00309200
|
|
READ (LF[INSERTINX ~ INSERTINX+1],10,DB[*])[E4]; 00309300
|
|
END UNTIL SEQCHK(SSNM[5],DB[9]) NEQ 3; 00309400
|
|
NEWTPTOG ~ BOOLEAN(INSERTCOP); 00309500
|
|
IF NOT NEWTPTOG THEN 00309600
|
|
BEGIN 00309700
|
|
IF SEQTOG THEN 00309800
|
|
BEGIN NEWSEQ(CRD[9],SEQBASE); MOVE(CRD[9],BUFL); 00309900
|
|
SEQBASE~SEQBASE+SEQINCR; 00310000
|
|
END; MOVEC(CRD[9],BUFL); 00310100
|
|
IF LIBTAPE AND(INSERTDEPTH = 0 ) THEN WRITE(NEWTAPE,10,CRD[*]); 00310200
|
|
END; %511- 00310300
|
|
IF LISTOG OR DOLIST THEN PRINTCARD; %511- 00310400
|
|
NEXTCARD~7; 00310500
|
|
GO TO STRT; 00310600
|
|
E1: IF NEXTCARD=1 THEN IF TAPETOG THEN 00310700
|
|
BEGIN 00310800
|
|
NEXTCARD~5; READ(TP,10,TB[*])[E2]; GO TO STRT ; 00310900
|
|
END 00311000
|
|
ELSE 00311100
|
|
BEGIN 00311200
|
|
NEXTCARD:=6; 00311300
|
|
IF GETCOL1(CRD[0]) THEN BEGIN BUF := MKABS(CRD[0]); 00311400
|
|
BUF:=SCANINC(BUF,ID,RESULT,1,0); IF ID NEQ INCLUDE 00311500
|
|
THEN BLANKIT(CRD,9,1); END; 00311600
|
|
GO TO ENDP ; 00311700
|
|
END ; 00311800
|
|
NEXTCARD ~ 5; GO TO ENDP; 00311900
|
|
E2: IF NEXTCARD = 5 THEN 00312000
|
|
BEGIN 00312100
|
|
NEXTCARD:=6; 00312200
|
|
IF GETCOL1(CRD[0]) THEN BEGIN BUF := MKABS(CRD[0]); 00312300
|
|
BUF:=SCANINC(BUF,ID,RESULT,1,0); IF ID NEQ INCLUDE 00312400
|
|
THEN BLANKIT(CRD,9,1); END; 00312500
|
|
END 00312600
|
|
ELSE IF NEXTCARD!2 THEN NEXTCARD~1 ELSE 00312700
|
|
BEGIN 00312800
|
|
NEXTCARD~1; TAPETOG~BOOLEAN(2); READ(CR,10,CB[*])[E1] ; 00312900
|
|
END ; 00313000
|
|
IF VOIDTTOG THEN IF SEQCHK(CRD[0],VOIDTSEQ) < 4 %114-01313100
|
|
THEN VOIDTTOG~FALSE %114-01313200
|
|
ELSE BEGIN VOIDTTOG~FALSE; GO TO STRT; END; %114-01313300
|
|
GO TO ENDP ; 00313400
|
|
E4B: NOWRI ~TRUE; 00313500
|
|
IF SEQTOG THEN NEWSEQ(CRD[9],SEQBASE); 00313600
|
|
IF NEWTPTOG THEN IF TSSEDITOG THEN 00313700
|
|
BEGIN TSSEDITS(CRD,PRINTBUFF); WRITE(NEWTAPE,10,PRINTBUFF[*]); 00313800
|
|
END ELSE WRITE(NEWTAPE,10,CRD[*]); 00313900
|
|
E4: CLOSE (LF,RELEASE); 00314000
|
|
NEWTPTOG~ SAVETOG; 00314100
|
|
IF (INSERTDEPTH := INSERTDEPTH - 1) = -1 THEN 00314200
|
|
BEGIN NEXTCARD ~ SAVECARD; GO TO ENDPA; END 00314300
|
|
ELSE NEWTPTOG ~ BOOLEAN(INSERTCOP); 00314400
|
|
FILL LF WITH INSERTMID,INSERTFID; 00314500
|
|
READ(LF[INSERTINX := INSERTINX + 1],10,DB[*])[E4]; 00314600
|
|
IF SEQCHK(INSERTSEQ,DB[9]) = 4 THEN GO TO E4; 00314700
|
|
GO TO ENDP; 00314800
|
|
E4A: 00314900
|
|
NEWTPTOG~SAVETOG; 00315000
|
|
IF (INSERTDEPTH ~ INSERTDEPTH-1) = -1 THEN NEXTCARD~SAVECARD 00315100
|
|
ELSE NEWTPTOG ~ BOOLEAN(INSERTCOP); 00315200
|
|
STRT: 00315300
|
|
STRTA: 00315400
|
|
IF NEXTCARD=6 THEN GO XIT ; 00315500
|
|
CARDCOUNT ~ CARDCOUNT+1; 00315600
|
|
IF NEXTCARD = 1 THEN 00315700
|
|
BEGIN % CARD ONLY 00315800
|
|
IF(NOT DCINPUT OR TSSEDITOG)AND NOT FREEFTOG 00315900
|
|
THEN MOVEW(CB,CRD,HOLTOG,IF DCINPUT THEN "D" ELSE "R") 00316000
|
|
ELSE IF SSNM[4]~DCMOVEW(CB,CRD,HOLTOG,"FILE ",IF FREEFTOG 00316100
|
|
THEN " R" ELSE " D") ! " " THEN 00316200
|
|
BEGIN XTA~SSNM[4] ; 00316300
|
|
MOVESEQ(SSNM[4],LASTSEQ); MOVESEQ(LASTSEQ,CRD[9]) ; 00316400
|
|
IF LISTOG THEN 00316500
|
|
BEGIN IF FIRSTCALL THEN DATIME ; 00316600
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],0); 00316700
|
|
WRITAROW(11,PRINTBUFF); UNPRINTED~FALSE ; 00316800
|
|
END ; 00316900
|
|
FLOG(149); MOVESEQ(LASTSEQ,SSNM[4]) ; 00317000
|
|
END ; 00317100
|
|
IF GETCOL1(CRD[0]) THEN 00317200
|
|
BEGIN 00317300
|
|
BUF := MKABS(CRD[0]); 00317400
|
|
BUF := SCANINC(BUF,ID,RESULT,1,0); 00317500
|
|
IF ID NEQ INCLUDE THEN 00317600
|
|
BEGIN 00317700
|
|
DOLOPT; 00317800
|
|
IF REAL(TAPETOG)=3 THEN READ(TP) ; 00317900
|
|
READ(CR,10,CB[*])[E1]; 00318000
|
|
IF NOT TAPETOG THEN GO TO STRT; 00318100
|
|
READ(TP,10,TB[*])[E2]; 00318200
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 00318300
|
|
GO TO STRT; 00318400
|
|
END; 00318500
|
|
END; 00318600
|
|
IF LISTPTOG THEN 00318700
|
|
BEGIN IF FIRSTCALL THEN DATIME; 00318800
|
|
IF SEQTOG THEN NEWSEQ(CRD[9],SEQBASE); 00318900
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],1); 00319000
|
|
WRITAROW (12,PRINTBUFF); UNPRINTED ~ FALSE; 00319100
|
|
END; 00319200
|
|
READ(CR,10,CB[*])[E1]; 00319300
|
|
GO TO ENDP; 00319400
|
|
END; 00319500
|
|
IF NEXTCARD = 5 THEN 00319600
|
|
BEGIN 00319700
|
|
MOVEW(TB,CRD,HOLTOG,"T") ; 00319800
|
|
READ(TP, 10, TB[*])[E2]; 00319900
|
|
IF VOIDTTOG THEN IF SEQCHK(CRD[9],VOIDTSEQ) < 4 THEN 00320000
|
|
VOIDTTOG ~ FALSE ELSE GO TO STRT; 00320100
|
|
GO TO ENDP; 00320200
|
|
END; 00320300
|
|
IF NEXTCARD { 3 THEN 00320400
|
|
BEGIN % CARD OVER TAPE 00320500
|
|
IF(NOT DCINPUT OR TSSEDITOG)AND NOT FREEFTOG 00320600
|
|
THEN MOVEW(CB,CRD,HOLTOG,IF DCINPUT THEN "D" ELSE "R") 00320700
|
|
ELSE IF SSNM[4]~DCMOVEW(CB,CRD,HOLTOG,"FILE ",IF FREEFTOG 00320800
|
|
THEN " R" ELSE " D") ! " " THEN 00320900
|
|
BEGIN XTA~SSNM[4] ; 00321000
|
|
MOVESEQ(SSNM[4],LASTSEQ); MOVESEQ(LASTSEQ,CRD[9] ); 00321100
|
|
IF LISTOG THEN 00321200
|
|
BEGIN IF FIRSTCALL THEN DATIME; 00321300
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],0); 00321400
|
|
WRITAROW(11,PRINTBUFF); UNPRINTED~FALSE ; 00321500
|
|
END; 00321600
|
|
FLOG(149); MOVESEQ(LASTSEQ,SSNM[4]) ; 00321700
|
|
END; 00321800
|
|
IF NEXTCARD =2 THEN READ(TP,10,TB[*])[E2]; 00321900
|
|
IF GETCOL1(CRD) THEN 00322000
|
|
BEGIN 00322100
|
|
BUF ~ MKABS(CRD[0]); 00322200
|
|
BUF ~ SCANINC(BUF,ID,RESULT,1,0); 00322300
|
|
IF ID NEQ INCLUDE THEN 00322400
|
|
BEGIN 00322500
|
|
DOLOPT; 00322600
|
|
READ(CR,10,CB[*])[E3]; 00322700
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 00322800
|
|
GO TO STRT; 00322900
|
|
E3: NEXTCARD~5; GO TO STRT; 00323000
|
|
END; 00323100
|
|
END; 00323200
|
|
IF LISTPTOG THEN 00323300
|
|
BEGIN IF FIRSTCALL THEN DATIME; 00323400
|
|
IF SEQTOG THEN NEWSEQ(CRD[9],SEQBASE); 00323500
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],1); 00323600
|
|
WRITAROW (12,PRINTBUFF); UNPRINTED ~ FALSE; 00323700
|
|
END; 00323800
|
|
READ(CR,10,CB[*])[E1]; 00323900
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 00324000
|
|
GO TO ENDP; 00324100
|
|
END; 00324200
|
|
% TAPE BEFORE CARD 00324300
|
|
IF NEXTCARD = 7 THEN 00324400
|
|
BEGIN 00324500
|
|
IF(NOT DCINPUT OR TSSEDITOG)AND NOT FREEFTOG 00324600
|
|
THEN MOVEW(DB,CRD,HOLTOG,"L") ELSE IF XTA~DCMOVEW(DB,CRD, 00324700
|
|
HOLTOG,"FILE ",IF FREEFTOG THEN " R" ELSE " D") 00324800
|
|
! " " THEN FLOG(149); 00324900
|
|
IF GETCOL1(CRD[0]) THEN 00325000
|
|
BEGIN 00325100
|
|
BUF ~ MKABS(CRD[0]); 00325200
|
|
BUF ~ SCANINC(BUF,ID,RESULT,1,0); 00325300
|
|
IF ID = INCLUDE THEN GO TO LIBADD; 00325400
|
|
END; 00325500
|
|
READ(LF[INSERTINX~INSERTINX+1],10,DB[*])[E4B]; 00325600
|
|
IF SEQCHK(INSERTSEQ,DB[9]) = 4 THEN GO TO E4B; 00325700
|
|
IF GETCOL1(CRD[0]) THEN BEGIN DOLOPT; GO TO STRT; END; 00325800
|
|
GO TO ENDP; 00325900
|
|
END; 00326000
|
|
MOVEW(TB,CRD,HOLTOG,"T") ; 00326100
|
|
READ(TP,10,TB[*])[E2]; 00326200
|
|
IF VOIDTTOG THEN IF SEQCHK(CRD[9],VOIDTSEQ) < 4 THEN 00326300
|
|
VOIDTTOG~FALSE ELSE BEGIN NEXTCARD~SEQCHK(TB[9],CB[9]); %114-00326400
|
|
GO TO STRT; END; %114-00326500
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 00326600
|
|
ENDP: 00326700
|
|
IF NEXTCARD NEQ 7 THEN 00326800
|
|
IF VOIDTOG THEN IF SEQCHK(CRD[9],VOIDSEQ) < 4 THEN 00326900
|
|
VOIDTOG ~ FALSE ELSE GO TO STRT; 00327000
|
|
IF GETCOL1(CRD[0]) THEN 00327100
|
|
BEGIN 00327200
|
|
BUF ~ MKABS(CRD[0]); 00327300
|
|
BUF ~ SCANINC(BUF,ID,RESULT,1,0); 00327400
|
|
IF ID = INCLUDE THEN GO TO LIBADD ELSE GO TO STRT; 00327500
|
|
END; 00327600
|
|
SEQERRORS ~ FALSE; 00327700
|
|
IF NEXTCARD = 7 THEN 00327800
|
|
BEGIN MOVESEQ(LASTSEQ,CRD[9]); GO TO ENDPA; END; 00327900
|
|
IF CHECKTOG AND SEQERRCT=0 THEN SEQERRCT~1 ; 00328000
|
|
IF CHECKTOG THEN IF SEQCHK(LASTSEQ,CRD[9])=3 THEN 00328100
|
|
BEGIN 00328200
|
|
SEQERR(ERRORBUFF,CRD[9],LASTSEQ) ; 00328300
|
|
MOVESEQ(LASTSEQ,CRD[9]) ; 00328400
|
|
IF SEQTOG THEN 00328500
|
|
BEGIN NEWSEQ(CRD[9],SEQBASE);SEQBASE~SEQBASE+SEQINCR END;00328600
|
|
MOVESEQ(LINKLIST,CRD[9]); 00328700
|
|
MOVE(CRD[9],BUFL) ; 00328800
|
|
SEQERRCT~SEQERRCT+1 ; 00328900
|
|
SEQERRORS~TRUE ; 00329000
|
|
IF NOT LISTOG THEN PRINTCARD ; 00329100
|
|
END 00329200
|
|
ELSE MOVESEQ(LASTSEQ,CRD[9]) ELSE MOVESEQ(LASTSEQ,CRD[9]) ; 00329300
|
|
00329400
|
|
00329500
|
|
00329600
|
|
00329700
|
|
00329800
|
|
00329900
|
|
00330000
|
|
00330100
|
|
ENDPA: 00330200
|
|
IF SEQTOG THEN 00330300
|
|
BEGIN 00330400
|
|
NEWSEQ(CRD[9],SEQBASE); 00330500
|
|
SEQBASE ~ SEQBASE + SEQINCR; 00330600
|
|
END; 00330700
|
|
IF NOWRI THEN GO TO ENDPB; 00330800
|
|
IF NEWTPTOG THEN IF TSSEDITOG THEN BEGIN TSSEDITS(CRD,PRINTBUFF) ; 00330900
|
|
WRITE(NEWTAPE,10,PRINTBUFF[*]) END ELSE WRITE(NEWTAPE,10,CRD[*]) ; 00331000
|
|
ENDPB: 00331100
|
|
IF NOT SEQERRORS THEN 00331200
|
|
BEGIN 00331300
|
|
MOVESEQ(LINKLIST,CRD[9]) ; 00331400
|
|
MOVE(CRD[9],BUFL) ; 00331500
|
|
END ; 00331600
|
|
NCR ~ INITIALNCR; 00331700
|
|
READACARD ~ TRUE; 00331800
|
|
XIT: 00331900
|
|
SEGSWFIXED ~ TRUE ; 00332000
|
|
REMFIXED~TRUE ; 00332100
|
|
IF TSSEDITOG THEN WARNED~TRUE ; 00332200
|
|
IF LISTOG AND FIRSTCALL THEN DATIME; 00332300
|
|
IF SEGSW THEN %%% ENTER SEQ# AND ADR TO LINESEG ARRAY. 00332400
|
|
BEGIN IF LASTADDR!ADR THEN BEGIN NOLIN~NOLIN+1; LASTADDR~ADR END;00332500
|
|
LINESEG[NOLIN.IR,NOLIN.IC]~0 & D2B(LASTSEQ)[10:20:28] & (ADR+3) 00332600
|
|
[38:36:10] ; 00332700
|
|
END ; 00332800
|
|
END READACARD; 00332900
|
|
00333000
|
|
INTEGER STREAM PROCEDURE CONVERT(NUB,SIZE,P,CHAR); VALUE P; 00333100
|
|
BEGIN 00333200
|
|
LOCAL T; 00333300
|
|
SI ~ P; 00333400
|
|
8(IF SC < "0" THEN JUMP OUT; 00333500
|
|
SI ~ SI + 1; TALLY ~ TALLY + 1); 00333600
|
|
CONVERT ~ SI; 00333700
|
|
DI ~ CHAR; DS ~ 7 LIT "0"; DS ~ CHR; 00333800
|
|
T ~ TALLY; 00333900
|
|
SI ~ P; DI ~ NUB; DS ~ T OCT; 00334000
|
|
DI ~ SIZE ; SI ~ LOC T; DS ~ WDS; 00334100
|
|
END CONVERT; 00334200
|
|
PROCEDURE SCAN; 00334300
|
|
BEGIN 00334400
|
|
BOOLEAN STREAM PROCEDURE ADVANCE(NCR, ACR, CHAR, NCRV, ACRV); 00334500
|
|
VALUE NCRV, ACRV, CHAR; 00334600
|
|
BEGIN LABEL LOOP; 00334700
|
|
LABEL DIG, ALPH, BK1, BK2, SPEC; 00334800
|
|
DI ~ ACRV; 00334900
|
|
SI ~ CHAR; SI ~ SI+8; 00335000
|
|
IF SC ! " " THEN 00335100
|
|
IF SC } "0" THEN BEGIN SI ~ NCRV; GO TO BK1 END ELSE 00335200
|
|
BEGIN SI ~ NCRV; GO TO BK2 END; 00335300
|
|
SI ~ NCRV; 00335400
|
|
LOOP: 00335500
|
|
IF SC = " " THEN BEGIN SI~SI+1; GO TO LOOP END; 00335600
|
|
IF SC } "0" THEN 00335700
|
|
BEGIN 00335800
|
|
DIG: DS ~ CHR; 00335900
|
|
BK1: IF SC = " " THEN BEGIN SI ~ SI+1; GO TO BK1 END; 00336000
|
|
IF SC } "0" THEN GO TO DIG; 00336100
|
|
GO TO SPEC; 00336200
|
|
END; 00336300
|
|
IF SC = ALPHA THEN 00336400
|
|
BEGIN 00336500
|
|
ALPH: DS ~ CHR; 00336600
|
|
BK2: IF SC = " " THEN BEGIN SI ~ SI+1; GO TO BK2 END; 00336700
|
|
IF SC = ALPHA THEN GO TO ALPH; 00336800
|
|
END; 00336900
|
|
SPEC: 00337000
|
|
ACRV ~ DI; 00337100
|
|
DS ~ 6 LIT " "; 00337200
|
|
IF SC = "]" THEN 00337300
|
|
BEGIN TALLY ~ 1; SI ~ LOC ACRV; 00337400
|
|
DI ~ ACR; DS ~ WDS; 00337500
|
|
DI ~ CHAR; DS ~ LIT ";"; 00337600
|
|
END ELSE 00337700
|
|
BEGIN DI ~ CHAR; DS ~ CHR; 00337800
|
|
ACRV ~ SI; SI ~ LOC ACRV; 00337900
|
|
DI ~ NCR; DS ~ WDS; 00338000
|
|
END; 00338100
|
|
ADVANCE ~ TALLY; 00338200
|
|
END ADVANCE; 00338300
|
|
BOOLEAN PROCEDURE CONTINUE; 00338400
|
|
BEGIN 00338500
|
|
LABEL LOOP; 00338600
|
|
00338700
|
|
BOOLEAN STREAM PROCEDURE CONTIN(CD); 00338800
|
|
BEGIN SI~CD; IF SC!"C" THEN IF SC!"$" THEN BEGIN SI~SI+5; IF SC!" " 00338900
|
|
THEN IF SC!"0" THEN BEGIN TALLY~1; CONTIN~TALLY END END END OF CONTIN ;00339000
|
|
BOOLEAN STREAM PROCEDURE COMNT(CD,T); VALUE T; 00339100
|
|
BEGIN LABEL L ; 00339200
|
|
SI ~ CD; IF SC = "C" THEN BEGIN T(SI~SI+1; IF SC="-" THEN TALLY~1 00339300
|
|
ELSE JUMP OUT TO L); TALLY~1; L: END; COMNT~TALLY ; 00339400
|
|
END COMNT; 00339500
|
|
BOOLEAN STREAM PROCEDURE DCCONTIN(CD); 00339600
|
|
BEGIN 00339700
|
|
SI ~ CD; IF SC = "-" THEN TALLY ~ 1; 00339800
|
|
DCCONTIN ~ TALLY; 00339900
|
|
END DCCONTIN; 00340000
|
|
LOOP: IF NOT(CONTINUE ~ 00340100
|
|
IF(DCINPUT AND NOT TSSEDITOG)OR FREEFTOG THEN 00340200
|
|
IF NEXTCARD < 4 THEN DCCONTIN(CB) 00340300
|
|
ELSE IF NEXTCARD = 7 THEN DCCONTIN(DB)ELSE CONTIN(TB) 00340400
|
|
ELSE IF NEXTCARD = 7 THEN CONTIN(DB) 00340500
|
|
ELSE IF NEXTCARD < 4 THEN CONTIN(DB) ELSE 00340600
|
|
CONTIN(TB)) THEN 00340700
|
|
IF(IF NEXTCARD < 4 THEN 00340800
|
|
COMNT(CB,(DCINPUT AND NOT TSSEDITOG) OR FREEFTOG) 00340900
|
|
ELSE IF NEXTCARD = 7 THEN 00341000
|
|
COMNT(CB,(DCINPUT AND NOT TSSEDITOG) OR FREEFTOG) 00341100
|
|
ELSE COMNT(TB,0) AND NEXTCARD ! 6) THEN 00341200
|
|
BEGIN 00341300
|
|
IF READACARD THEN IF LISTOG THEN PRINTCARD; 00341400
|
|
GO TO LOOP; 00341500
|
|
END; 00341600
|
|
END CONTINUE; 00341700
|
|
00341800
|
|
PROCEDURE SCANX(EOF1, EOF2, EOS1, EOS2, OK1, OK2); 00341900
|
|
VALUE EOF1, EOF2, EOS1, EOS2, OK1, OK2; 00342000
|
|
INTEGER EOF1, EOF2, EOS1, EOS2, OK1, OK2; 00342100
|
|
BEGIN LABEL LOOP, LOOP0 ; 00342200
|
|
LOOP0: 00342300
|
|
EXACCUM[1] ~ BLANKS; 00342400
|
|
ACR ~ ACR1; 00342500
|
|
LOOP: 00342600
|
|
IF ADVANCE(NCR, ACR, CHR1, NCR, ACR) THEN 00342700
|
|
IF CONTINUE THEN 00342800
|
|
IF READACARD THEN 00342900
|
|
BEGIN 00343000
|
|
IF LISTOG THEN PRINTCARD ; 00343100
|
|
IF ACR.[33:15]}EXACCUMSTOP THEN 00343200
|
|
BEGIN XTA~BLANKS; FLOG(175); GO LOOP0 END ; 00343300
|
|
GO LOOP ; 00343400
|
|
END 00343500
|
|
ELSE SCN ~ IF EXACCUM[1] = BLANKS THEN EOF1 ELSE EOF2 00343600
|
|
ELSE SCN ~ IF EXACCUM[1] = BLANKS THEN EOS1 ELSE EOS2 00343700
|
|
ELSE SCN ~ IF EXACCUM[1] = BLANKS THEN OK1 ELSE OK2; 00343800
|
|
END SCANX; 00343900
|
|
00344000
|
|
DEFINE CHAR = ACCUM[0]#; 00344100
|
|
DEFINE T=SYMBOL#; 00344200
|
|
INTEGER N; 00344300
|
|
BOOLEAN STREAM PROCEDURE CHECKEXP(NCR, NCRV, A); VALUE NCRV; 00344400
|
|
BEGIN 00344500
|
|
SI ~ NCRV; 00344600
|
|
IF SC = "*" THEN 00344700
|
|
BEGIN DI ~ A; DI ~ DI+2; DS ~ 2 LIT "*"; SI ~ SI+1; NCRV ~ SI; 00344800
|
|
TALLY ~ 1; CHECKEXP ~ TALLY; 00344900
|
|
SI ~ LOC NCRV; DI ~ NCR; DS ~ WDS END; 00345000
|
|
END CHECKEXP; 00345100
|
|
PROCEDURE CHECKRESERVED; 00345200
|
|
BEGIN LABEL RESWD, XIT, FOUND1, FOUND2, DONE; 00345300
|
|
BOOLEAN STREAM PROCEDURE COMPLETECHECK(A,B,N); VALUE N ; 00345400
|
|
BEGIN LABEL L ; 00345500
|
|
SI~A; SI~SI-2; DI~B; N(IF SC!DC THEN JUMP OUT TO L); TALLY~1; 00345600
|
|
L: COMPLETECHECK~TALLY ; 00345700
|
|
END OF COMPLETECHECK; 00345800
|
|
STREAM PROCEDURE XFER(FROM, T1, T2, N, M); VALUE FROM, N, M; 00345900
|
|
BEGIN SI ~ FROM; DI ~ T1; DI ~ DI+2; 00346000
|
|
DS ~ M CHR; 00346100
|
|
SI ~ FROM; SI ~ SI+N; 00346200
|
|
DI ~ T2; DI ~ DI+2; 00346300
|
|
DS ~ 6 CHR; 00346400
|
|
END XFER; 00346500
|
|
STREAM PROCEDURE XFERA(FROM, NEXT1, NEXT2); 00346600
|
|
VALUE FROM; 00346700
|
|
BEGIN SI ~ FROM; SI ~ SI+6; 00346800
|
|
DI ~ NEXT1; DI ~ DI+2; 00346900
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE JUMP OUT); 00347000
|
|
SI ~ SI+2; 00347100
|
|
DI ~ NEXT2; DI ~ DI+2; 00347200
|
|
6(IF SC = ALPHA THEN DS ~ CHR ELSE JUMP OUT); 00347300
|
|
END XFERA; 00347400
|
|
BOOLEAN STREAM PROCEDURE CHECKFUN(FROM, TOO, N); VALUE FROM, N; 00347500
|
|
BEGIN SI ~ FROM; SI ~ SI +N; 00347600
|
|
IF SC = "O" THEN 00347700
|
|
BEGIN SI ~ SI+1; 00347800
|
|
IF SC = "N" THEN 00347900
|
|
BEGIN SI ~ SI+1; TALLY ~ 1; 00348000
|
|
DI ~ TOO; DI ~ DI+2; 00348100
|
|
DS ~ 6 CHR; 00348200
|
|
END; 00348300
|
|
END; 00348400
|
|
CHECKFUN ~ TALLY; 00348500
|
|
END CHECKFUN; 00348600
|
|
BOOLEAN STREAM PROCEDURE MORETHAN6(P); 00348700
|
|
BEGIN SI ~ P; 00348800
|
|
IF SC ! " " THEN TALLY ~ 1; 00348900
|
|
MORETHAN6 ~ TALLY; 00349000
|
|
END MORETHAN6; 00349100
|
|
INTEGER I; ALPHA ID; 00349200
|
|
INTEGER STOR ; 00349300
|
|
IF ACCUM[1] = " " THEN 00349400
|
|
BEGIN XTA ~ CHAR; FLOG(16); GO TO XIT END; 00349500
|
|
IF CHAR = "= " OR CHAR = "# " THEN GO TO XIT; 00349600
|
|
IF CHAR = "~ " THEN GO TO XIT; 00349700
|
|
IF CHAR ! "( " AND CHAR ! "% " THEN GO TO RESWD; 00349800
|
|
IF MORETHAN6(ACCUM[2]) THEN GO TO RESWD; 00349900
|
|
COMMENT AT THIS POINT WE HAVE <ID> ( . 00350000
|
|
THIS MUST BE ONE OF THE FOLLOWING: 00350100
|
|
ASSIGNEMNT STATEMENT WITH SUBSCRIPTED VARIABLE AT THE LEFT. 00350200
|
|
STATEMENT FUNCTION DECLARATION. 00350300
|
|
CALL, REAL, ENTRY, GO TO, READ, WRITE, FORMAT, IF, DATA, CHAIN, PRINT OR00350400
|
|
PUNCH; 00350500
|
|
IF I ~ SEARCH(T) > 0 THEN 00350600
|
|
IF GET(I).CLASS = ARRAYID THEN GO TO XIT; 00350700
|
|
ID ~ T; ID.[36:12] ~ " "; 00350800
|
|
FOR I~0 THRU RSP DO IF RESERVEDWORDSLP[I]=ID THEN IF (IF STOR 00350900
|
|
~RESLENGTHLP[I]-4<1 THEN TRUE ELSE COMPLETECHECK(ACCUM[2], 00351000
|
|
RESERVEDWORDSLP[I+RSP1],STOR)) THEN GO FOUND1 ; 00351100
|
|
GO TO XIT; 00351200
|
|
FOUND1: 00351300
|
|
NEXT ~ LPGLOBAL[I]; 00351400
|
|
T ~ " "; 00351500
|
|
XFER(ACR0, T, NEXTACC, I~RESLENGTHLP[I], IF I> 6 THEN 6 ELSE I); 00351600
|
|
GO TO DONE; 00351700
|
|
RESWD: 00351800
|
|
COMMENT AT THIS POINT WE KNOW THE <ID> MUST BE A SPECIAL WORD 00351900
|
|
TO IDENTIFY THE STATEMENT TYPE; 00352000
|
|
ID ~ T; ID.[36:12] ~ " "; 00352100
|
|
IF T = "ASSIGN" THEN 00352200
|
|
BEGIN 00352300
|
|
NEXTSCN ~ SCN; SCN ~ 14; 00352400
|
|
NEXTACC ~ NEXTACC2 ~ " "; 00352500
|
|
XFERA(ACR0, NEXTACC, NEXTACC2); 00352600
|
|
NEXT ~ 1; 00352700
|
|
GO TO XIT; 00352800
|
|
END; 00352900
|
|
FOR I~1 THRU RSH DO IF RESERVEDWORDS[I]=ID THEN IF (IF STOR~ 00353000
|
|
RESLENGTH[I]-4<1 THEN TRUE ELSE COMPLETECHECK(ACCUM[2],RESERVEDWORDS00353100
|
|
[I+RSH1],IF STOR>8 THEN 8 ELSE STOR)) THEN GO FOUND2 ; 00353200
|
|
XTA ~ T; FLOG(16); GO TO XIT; 00353300
|
|
FOUND2: 00353400
|
|
NEXT ~ I+1; 00353500
|
|
T ~ " "; 00353600
|
|
XFER(ACR0, T, NEXTACC, I~RESLENGTH [I], IF I> 6 THEN 6 ELSE I); 00353700
|
|
DONE: NEXTSCN ~ SCN; 00353800
|
|
SCN ~ 6; 00353900
|
|
IF NEXTACC = "FUNCTI" THEN 00354000
|
|
IF CHECKFUN(ACR0, NEXTACC, I+6) THEN SCN ~ 13; 00354100
|
|
XIT: 00354200
|
|
EOSTOG~FALSE; 00354300
|
|
END CHECKRESERVED; 00354400
|
|
00354500
|
|
BOOLEAN PROCEDURE CHECKOCTAL; 00354600
|
|
BEGIN 00354700
|
|
INTEGER S, T; LABEL XIT; 00354800
|
|
INTEGER STREAM PROCEDURE COUNT(ACRV,T); VALUE ACRV,T ; 00354900
|
|
BEGIN 00355000
|
|
LOCAL A,B; SI~LOC T; SI~SI+7 ; 00355100
|
|
IF SC="1" THEN BEGIN SI~ACRV;IF SC="O" THEN SI~SI+1 END ELSE SI~ACRV;00355200
|
|
IF SC!" " THEN 00355300
|
|
BEGIN A~SI; 00355400
|
|
17(IF SC>"7" THEN BEGIN TALLY~17; JUMP OUT END ELSE IF SC < "0" THEN00355500
|
|
BEGIN IF SC!" " THEN TALLY~17; JUMP OUT END; SI~SI+1; 00355600
|
|
TALLY~TALLY+1) ; 00355700
|
|
B~TALLY; SI~LOC B; SI~SI+7 ; 00355800
|
|
IF SC="+" THEN BEGIN SI~A; IF SC>"3" THEN TALLY~17 END; 00355900
|
|
END ; 00356000
|
|
COUNT~TALLY ; 00356100
|
|
END OF COUNT ; 00356200
|
|
ALPHA STREAM PROCEDURE CONV(ACRV, S, T); VALUE ACRV, S, T; 00356300
|
|
BEGIN SI ~ ACRV; IF SC = "O" THEN SI ~ SI+1; 00356400
|
|
DI ~ LOC CONV; SKIP S DB; 00356500
|
|
T(SKIP 3 SB; 3(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP 1 SB)); 00356600
|
|
END CONV; 00356700
|
|
IF T~COUNT(ACR0,1) = 0 THEN 00356800
|
|
BEGIN S ~ 1; 00356900
|
|
IF T ~ CHAR ! "+ " AND T ! "& " THEN 00357000
|
|
IF T = "- " THEN S ~ -1 ELSE GO TO XIT; 00357100
|
|
SCANX(4, 4, 3, 3, 10, 10); 00357200
|
|
IF SCN ! 10 THEN GO TO XIT; 00357300
|
|
IF T~COUNT(ACR1,2) = 0 OR T > 16 THEN GO TO XIT ; 00357400
|
|
FNEXT ~ CONV(ACR1, (16-T)|3, T); 00357500
|
|
IF S < 0 THEN FNEXT ~ -FNEXT; 00357600
|
|
END ELSE IF T < 17 THEN FNEXT~CONV(ACR0,(16-T)|3,T) ELSE GO TO XIT ; 00357700
|
|
CHECKOCTAL ~ TRUE; 00357800
|
|
NEXT ~ NUM; 00357900
|
|
NUMTYPE ~ REALTYPE; 00358000
|
|
XIT: 00358100
|
|
END CHECKOCTAL; 00358200
|
|
00358300
|
|
PROCEDURE HOLLERITH; 00358400
|
|
BEGIN 00358500
|
|
REAL T, COL1, T2, ENDP; 00358600
|
|
LABEL XIT; 00358700
|
|
INTEGER STREAM PROCEDURE STRCNT(S,D,SZ); VALUE S,SZ; 00358800
|
|
BEGIN 00358900
|
|
SI ~ S; DI ~ D;DS ~ 8 LIT "00 "; DI ~ D; 00359000
|
|
DI ~ D; DI ~ DI + 2; DS ~SZ CHR; STRCNT ~ SI; 00359100
|
|
END STRCNT; 00359200
|
|
INTEGER STREAM PROCEDURE RSTORE(S,D,SKP,SZ); 00359300
|
|
VALUE S, SKP, SZ; 00359400
|
|
BEGIN 00359500
|
|
DI ~ D; 00359600
|
|
SI ~ S; DI ~DI + SKP; DS ~ SZ CHR; RSTORE ~ SI; 00359700
|
|
END RSTORE; 00359800
|
|
F1 ~ FNEXT; 00359900
|
|
NUMTYPE ~ STRINGTYPE; 00360000
|
|
T ~ 0 & NCR[30:33:15] & NCR[45:30:3]; 00360100
|
|
COL1 ~ 0 & INITIALNCR[30:33:15]; 00360200
|
|
ENDP ~ COL1 + 72; 00360300
|
|
STRINGSIZE ~ 0; 00360400
|
|
WHILE F1 >0 DO 00360500
|
|
BEGIN 00360600
|
|
T2 ~ IF F1 > 6 THEN 6 ELSE F1; 00360700
|
|
IF STRINGSIZE > MAXSTRING THEN 00360800
|
|
BEGIN FLAG(120); STRINGSIZE ~ 0 END; 00360900
|
|
IF T+T2> ENDP THEN IF DCINPUT OR FREEFTOG THEN 00361000
|
|
BEGIN XTA~BLANKS; FLOG(150); GO TO XIT END 00361100
|
|
ELSE BEGIN 00361200
|
|
IF TSSEDITOG THEN IF NOT DCINPUT THEN TSSED(BLANKS,1) ; 00361300
|
|
NCR ~ STRCNT(NCR, STRINGARRAY[STRINGSIZE], ENDP-T); 00361400
|
|
IF NOT CONTINUE THEN 00361500
|
|
BEGIN FLOG(43); GO TO XIT END; 00361600
|
|
IF READACARD THEN; 00361700
|
|
IF LISTOG THEN PRINTCARD; 00361800
|
|
NCR ~ RSTORE(NCR,STRINGARRAY[STRINGSIZE],ENDP-T+2,T2-(ENDP-T)); 00361900
|
|
STRINGSIZE ~ STRINGSIZE+1; 00362000
|
|
F1 ~ F1 - T2; 00362100
|
|
T ~ COL1 + 6 + T2 - (ENDP - T); 00362200
|
|
END ELSE 00362300
|
|
BEGIN 00362400
|
|
NCR ~ STRCNT(NCR, STRINGARRAY[STRINGSIZE], T2); 00362500
|
|
STRINGSIZE ~ STRINGSIZE +1; 00362600
|
|
T ~ T +T2; 00362700
|
|
F1 ~ F1 - T2; 00362800
|
|
END; 00362900
|
|
END; 00363000
|
|
NUMTYPE ~ STRINGTYPE; 00363100
|
|
SCN ~ 1; 00363200
|
|
XIT: 00363300
|
|
END HOLLERITH; 00363400
|
|
PROCEDURE QUOTESTRING; 00363500
|
|
BEGIN 00363600
|
|
REAL C; 00363700
|
|
LABEL XIT; 00363800
|
|
ALPHA STREAM PROCEDURE STRINGWORD(S,D,SKP,SZ,C); 00363900
|
|
VALUE S,SKP,SZ; 00364000
|
|
BEGIN 00364100
|
|
LABEL QT, XIT; 00364200
|
|
DI ~ D; SI ~ S; 00364300
|
|
DI ~ DI+SKP; DI ~ DI+2; 00364400
|
|
TALLY ~ SKP; 00364500
|
|
SZ( IF SC = """ THEN JUMP OUT TO QT; 00364600
|
|
IF SC = ":" THEN JUMP OUT TO QT; 00364700
|
|
IF SC = "@" THEN JUMP OUT TO QT; 00364800
|
|
IF SC = "]" THEN JUMP OUT TO XIT; 00364900
|
|
DS ~ CHR; TALLY ~ TALLY+1); 00365000
|
|
GO TO XIT; 00365100
|
|
QT: TALLY ~ TALLY+7; SI ~ SI+1; 00365200
|
|
XIT: STRINGWORD ~ SI; S ~ TALLY; 00365300
|
|
SI ~ LOC S; DI ~ C; DS ~ WDS; 00365400
|
|
END STRINGWORD; 00365500
|
|
STRINGSIZE ~ 0; 00365600
|
|
DO 00365700
|
|
BEGIN 00365800
|
|
IF STRINGSIZE > MAXSTRING THEN 00365900
|
|
BEGIN FLAG(120); STRINGSIZE ~ 0 END; 00366000
|
|
STRINGARRAY[STRINGSIZE] ~ BLANKS; 00366100
|
|
NCR ~ STRINGWORD(NCR, STRINGARRAY[STRINGSIZE], 0, 6, C); 00366200
|
|
IF C<6 THEN IF DCINPUT OR FREEFTOG 00366300
|
|
THEN BEGIN XTA~BLANKS; FLOG(150); GO TO XIT END 00366400
|
|
ELSE BEGIN 00366500
|
|
IF TSSEDITOG THEN IF NOT DCINPUT THEN TSSED(BLANKS,1) ; 00366600
|
|
IF NOT CONTINUE THEN 00366700
|
|
BEGIN FLOG(121); GO TO XIT END; 00366800
|
|
IF READACARD THEN; 00366900
|
|
IF LISTOG THEN PRINTCARD; 00367000
|
|
NCR ~ STRINGWORD(NCR, STRINGARRAY[STRINGSIZE ],C,6-C,C); 00367100
|
|
END; 00367200
|
|
STRINGSIZE ~ STRINGSIZE + 1; 00367300
|
|
END UNTIL C } 7; 00367400
|
|
IF C = 7 THEN STRINGSIZE ~ STRINGSIZE-1; 00367500
|
|
FNEXT ~ STRINGSIZE; 00367600
|
|
NEXT ~ NUM; 00367700
|
|
SYMBOL ~ NAME ~ STRINGARRAY[0]; 00367800
|
|
NUMTYPE ~ STRINGTYPE; 00367900
|
|
SCN ~ 1; 00368000
|
|
XIT: 00368100
|
|
END QUOTESTRING; 00368200
|
|
00368300
|
|
PROCEDURE CHECKPERIOD; 00368400
|
|
BEGIN 00368500
|
|
LABEL FRACTION, XIT, EXPONENT, EXPONENTSIGN; 00368600
|
|
LABEL NUMFINI, FPLP, CHKEXP; 00368700
|
|
ALPHA S, T, I, TS; 00368800
|
|
INTEGER C2; 00368900
|
|
BOOLEAN CON; 00369000
|
|
IF T ~ CHAR ! ". " THEN GO TO CHKEXP; 00369100
|
|
SCANX(4, 9, 3, 8, 10, 11); 00369200
|
|
IF T ~ EXACCUM[1] = " " THEN 00369300
|
|
BEGIN IF NUMTYPE ! DOUBTYPE THEN NUMTYPE ~ REALTYPE; GO TO XIT END; 00369400
|
|
IF T = "E " OR T = "D " THEN GO TO EXPONENTSIGN; 00369500
|
|
IF T.[12:6] { 9 THEN GO TO FRACTION; 00369600
|
|
IF T.[18:6] { 9 THEN 00369700
|
|
BEGIN 00369800
|
|
IF S ~ T.[12:6] ! "E" AND S ! "D" THEN 00369900
|
|
BEGIN XTA ~ T; FLOG(63); GO TO XIT END; 00370000
|
|
EXACCUM[1].[12:6] ~ 0; 00370100
|
|
I ~ 1; GO TO EXPONENT; 00370200
|
|
END; 00370300
|
|
IF EXACCUM[0] ! ". " THEN GO TO XIT; 00370400
|
|
FOR I ~ 0 STEP 1 UNTIL 10 DO 00370500
|
|
IF T = PERIODWORD[I] THEN 00370600
|
|
BEGIN EXACCUM[2] ~ I; SCN ~ 12; GO TO XIT END; 00370700
|
|
GO TO XIT; 00370800
|
|
FRACTION: NEXT ~ NUM; 00370900
|
|
IF NUMTYPE !DOUBTYPE THEN NUMTYPE ~ REALTYPE; XTA ~ ACR1; 00371000
|
|
FPLP: 00371100
|
|
F1 ~ 0; 00371200
|
|
XTA ~ CONVERT(F1,C1,XTA ,TS); 00371300
|
|
C2 ~ C2 + C1; 00371400
|
|
IF (F2 ~ FNEXT|TEN[C1]+F1) { MAX 00371500
|
|
THEN FNEXT ~ F2 00371600
|
|
ELSE BEGIN 00371700
|
|
NUMTYPE ~ DOUBTYPE; 00371800
|
|
CON ~ TRUE; 00371900
|
|
DOUBLE(FNEXT,DBLOW,TEN[C1],TEN[69+C1],|, 00372000
|
|
F1,0,+,~,FNEXT,DBLOW); 00372100
|
|
END; 00372200
|
|
IF TS { 9 THEN GO TO FPLP; 00372300
|
|
F1 ~ 0; 00372400
|
|
IF T ~ EXACCUM[0] ! "E " AND T ! "D " THEN 00372500
|
|
BEGIN IF SCN = 8 THEN SCN ~ 3 ELSE SCN ~ 10; 00372600
|
|
GO TO NUMFINI; 00372700
|
|
END; 00372800
|
|
CHKEXP: FNEXT ~ FNEXT | 1.0; 00372900
|
|
F1 ~ 0; 00373000
|
|
I ~ 1; 00373100
|
|
SCANX(4, 4, 3, 3, 20, 10); 00373200
|
|
IF SCN = 20 THEN 00373300
|
|
EXPONENTSIGN: 00373400
|
|
BEGIN IF S ~ EXACCUM[0] ! "+ " AND S ! "& " THEN 00373500
|
|
IF S = "- " THEN I ~ -1 ELSE 00373600
|
|
BEGIN XTA ~ S; FLOG(63); SCN ~ 10; GO TO XIT END; 00373700
|
|
SCANX(4, 4, 3, 3, 10, 10); 00373800
|
|
END; 00373900
|
|
IF (S ~ EXACCUM[1]).[12:6] > 9 THEN 00374000
|
|
BEGIN XTA ~ IF S ! BLANKS THEN S ELSE T; FLOG(63); GO TO XIT END; 00374100
|
|
EXPONENT: 00374200
|
|
IF NUMTYPE ! DOUBTYPE THEN NUMTYPE ~ REALTYPE; 00374300
|
|
IF T.[12:6] = "D" THEN NUMTYPE ~ DOUBTYPE; 00374400
|
|
IF SCN = 8 THEN SCN ~ 3 ELSE IF SCN = 11 THEN SCN ~ 10; 00374500
|
|
XTA ~ ACR1; 00374600
|
|
XTA ~ CONVERT(F1,C1,XTA ,TS); 00374700
|
|
IF I < 0 THEN F1 ~ -F1; 00374800
|
|
NUMFINI: 00374900
|
|
C1 ~ F1 - C2; 00375000
|
|
IF I ~ (ABS(C1+(FNEXT.[3:6]&FNEXT[1:2:1]))) > 63 OR((ABS(C1) = I OR 00375100
|
|
FNEXT } 5) AND ABS(F1) } 69) 00375200
|
|
THEN BEGIN XTA ~ T; FLOG(87); GO TO XIT; END; 00375300
|
|
IF NUMTYPE ! DOUBTYPE THEN 00375400
|
|
BEGIN 00375500
|
|
IF C1} 0 THEN FNEXT ~ FNEXT | TEN[C1] 00375600
|
|
ELSE FNEXT ~ FNEXT / TEN[-C1]; 00375700
|
|
END ELSE 00375800
|
|
BEGIN 00375900
|
|
IF C1 } 0 00376000
|
|
THEN DOUBLE(FNEXT,DBLOW,TEN[C1],TEN[69+C1],|,~,FNEXT,DBLOW) 00376100
|
|
ELSE DOUBLE(FNEXT,DBLOW,TEN[-C1],TEN[69-C1],/,~,FNEXT,DBLOW); 00376200
|
|
IF CON THEN IF DBLOW.[9:33] = MAX.[9:33] THEN 00376300
|
|
IF FNEXT.[3:6] LSS 14 00376400
|
|
THEN IF BOOLEAN(FNEXT.[2:1]) THEN 00376500
|
|
BEGIN DBLOW ~ 0; FNEXT ~ FNEXT + 1&FNEXT[2:2:7]; END; 00376600
|
|
END; 00376700
|
|
XIT: 00376800
|
|
END CHECKPERIOD; 00376900
|
|
00377000
|
|
LABEL LOOP0, NUMBER ; 00377100
|
|
LABEL L,XIT; 00377200
|
|
LABEL L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15,L16,L17, 00377300
|
|
L18,L19,L20,L21,BK ; 00377400
|
|
SWITCH CASEL~L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15, 00377500
|
|
L16,L17,L18,L19,L20,L21 ; 00377600
|
|
LABEL LOOP, CASESTMT; %994-00377700
|
|
LABEL CASE0,CASE1,CASE2,CASE3,CASE4,CASE5,CASE6,CASE7; %994-00377800
|
|
LABEL CASE8,CASE9,CASE10,CASE11,CASE12,CASE13,CASE14; %994-00377900
|
|
PREC~NEXT~FNEXT~REAL(SCANENTER~FALSE) ; 00378000
|
|
CASESTMT: 00378100
|
|
CASE SCN OF 00378200
|
|
BEGIN 00378300
|
|
CASE0: %994-00378400
|
|
GO TO IF LABELR THEN CASE5 ELSE CASE1; 00378500
|
|
CASE1: 00378600
|
|
BEGIN 00378700
|
|
LOOP0: 00378800
|
|
ACR ~ ACR0; 00378900
|
|
ACCUM[1] ~ BLANKS; 00379000
|
|
LOOP: 00379100
|
|
IF ADVANCE(NCR, ACR, CHR0, NCR, ACR) THEN 00379200
|
|
IF CONTINUE THEN 00379300
|
|
IF READACARD THEN 00379400
|
|
BEGIN 00379500
|
|
IF LISTOG THEN PRINTCARD ; 00379600
|
|
IF ACR.[33:15]}ACCUMSTOP THEN 00379700
|
|
BEGIN XTA~BLANKS; FLOG(175); GO LOOP0 END ; 00379800
|
|
GO LOOP ; 00379900
|
|
END 00380000
|
|
ELSE IF T ~ ACCUM[1] = " " THEN GO TO CASE5 ELSE SCN ~ 4 00380100
|
|
ELSE IF T ~ ACCUM[1] = " " THEN 00380200
|
|
GO TO CASE3 ELSE SCN ~ 3 00380300
|
|
ELSE IF T ~ ACCUM[1] = " " THEN GO TO CASE2 ELSE SCN ~ 2; 00380400
|
|
END; 00380500
|
|
CASE2: 00380600
|
|
BEGIN T ~ CHAR; SCN ~ 1 END; 00380700
|
|
CASE3: 00380800
|
|
BEGIN T ~ "; "; NEXT ~ SEMI; SCN ~ 0; 00380900
|
|
IF EOSTOG THEN IF LOGIFTOG THEN BEGIN LOGIFTOG ~ FALSE; XTA ~ T; 00381000
|
|
FLAG(101); END; 00381100
|
|
GO TO XIT; 00381200
|
|
END; 00381300
|
|
CASE4: %994-00381400
|
|
BEGIN T ~ "; "; NEXT ~ SEMI; SCN ~ 5; GO TO XIT END; 00381500
|
|
CASE5: 00381600
|
|
BEGIN T ~ "<EOF> "; NEXT ~ EOF; EOSTOG ~ FALSE; GO TO XIT END; 00381700
|
|
CASE6: %994-00381800
|
|
BEGIN T ~ ACCUM[1] ~ NEXTACC; SCN ~ NEXTSCN; 00381900
|
|
IF T = " " THEN GO TO CASESTMT; 00382000
|
|
END; 00382100
|
|
CASE7: %994-00382200
|
|
BEGIN EOSTOG ~ TRUE; 00382300
|
|
IF LABELR THEN GO TO CASE5 ELSE GO TO CASE1; 00382400
|
|
END; 00382500
|
|
CASE8: %994-00382600
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 3 END; 00382700
|
|
CASE9: %994-00382800
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 4 END; 00382900
|
|
CASE10: %994-00383000
|
|
BEGIN T ~ CHAR ~ EXACCUM[0]; SCN ~ 1 END; 00383100
|
|
CASE11: %994-00383200
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 10 END; 00383300
|
|
CASE12: %994-00383400
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 1; 00383500
|
|
IF N ~ EXACCUM[2] { 1 THEN 00383600
|
|
BEGIN NEXT ~ NUM; FNEXT ~ N; GO TO XIT END; 00383700
|
|
NEXT ~ 0; 00383800
|
|
OP ~ N-1; 00383900
|
|
PREC ~ IF N { 4 THEN N-1 ELSE 4; 00384000
|
|
GO TO XIT; 00384100
|
|
END; 00384200
|
|
CASE13: %994-00384300
|
|
BEGIN T ~ "FUNCTI"; NEXT ~ 16; SCN ~ 6; GO TO XIT END; 00384400
|
|
CASE14: %994-00384500
|
|
BEGIN T ~ ACCUM[1] ~ NEXTACC; 00384600
|
|
NEXTACC ~ NEXTACC2; SCN ~ 6; 00384700
|
|
END; 00384800
|
|
END OF CASE STATEMENT; 00384900
|
|
IF NOT FILETOG THEN 00385000
|
|
IF EOSTOG THEN 00385100
|
|
BEGIN 00385200
|
|
NEXT ~ 0; 00385300
|
|
IF T = "; " THEN GO TO CASESTMT; 00385400
|
|
CHECKRESERVED; 00385500
|
|
IF NEXT > 0 THEN GO TO XIT; 00385600
|
|
END; 00385700
|
|
IF (IDINFO~TIPE[T.[12:6]])>0 THEN 00385800
|
|
BEGIN 00385900
|
|
BK: NEXT~ID ; 00386000
|
|
IF NOT FILETOG THEN 00386100
|
|
IF SCANENTER~((FNEXT~SEARCH(T))=0) THEN FNEXT~ENTER(IDINFO,T) 00386200
|
|
ELSE IF GET(FNEXT).CLASS=DUMMY THEN FNEXT~GET(FNEXT+2).BASE ; 00386300
|
|
GO XIT ; 00386400
|
|
END ; 00386500
|
|
GO CASEL[-IDINFO]; % SEE INITIALIZATION OF "TIP". LINE 03433100%993- 00386600
|
|
L1: %DIGITS %993- 00386700
|
|
BEGIN NUMTYPE ~ INTYPE; NEXT ~ NUM; XTA ~ ACR0; 00386800
|
|
FNEXT ~ DBLOW ~ C1 ~ 0; 00386900
|
|
XTA ~ CONVERT(FNEXT,C1,XTA ,TS); 00387000
|
|
WHILE TS { 9 DO 00387100
|
|
BEGIN 00387200
|
|
XTA ~ CONVERT(F1,C1,XTA ,TS); 00387300
|
|
IF (F2 ~ FNEXT|TEN[C1]+F1) { MAX 00387400
|
|
THEN FNEXT ~ F2 00387500
|
|
ELSE BEGIN 00387600
|
|
NUMTYPE ~ DOUBTYPE; 00387700
|
|
DOUBLE(FNEXT,DBLOW,TEN[C1],TEN[69+C1],|, 00387800
|
|
F1,0,+,~,FNEXT,DBLOW); 00387900
|
|
END; 00388000
|
|
END; 00388100
|
|
IF CHAR = ". " OR CHAR = "E " OR CHAR = "D " THEN 00388200
|
|
CHECKPERIOD 00388300
|
|
ELSE IF CHAR = "H " THEN HOLLERITH; 00388400
|
|
GO TO XIT; 00388500
|
|
END; 00388600
|
|
L2: % > %993- 00388700
|
|
BEGIN PREC ~ 4; OP ~ 7; GO TO XIT END; 00388800
|
|
L3: % } %993- 00388900
|
|
BEGIN PREC ~ 4; OP ~ 8; GO TO XIT END; 00389000
|
|
L4: % & OR + %993- 00389100
|
|
BEGIN PREC ~ 5; OP ~ 10; NEXT ~ PLUS; GO TO XIT END; 00389200
|
|
L5: % . %993- 00389300
|
|
BEGIN 00389400
|
|
FNEXT ~ DBLOW ~ C1 ~ 0; NUMTYPE ~ REALTYPE; 00389500
|
|
CHECKPERIOD; 00389600
|
|
T ~ EXACCUM[1]; 00389700
|
|
IF SCN = 12 THEN 00389800
|
|
BEGIN SCN ~ 1; 00389900
|
|
IF N ~ EXACCUM[2] { 1 THEN 00390000
|
|
BEGIN 00390100
|
|
NEXT ~ NUM; FNEXT ~ N; 00390200
|
|
NUMTYPE ~ LOGTYPE; GO TO XIT; 00390300
|
|
END; 00390400
|
|
NEXT ~ 0; 00390500
|
|
OP ~ N-1; 00390600
|
|
PREC ~ IF N { 4 THEN N-1 ELSE 4; 00390700
|
|
GO TO XIT; 00390800
|
|
END; 00390900
|
|
IF NEXT ! NUM THEN BEGIN NEXT ~ NUM; XTA ~ T; FLOG(141) END; 00391000
|
|
GO TO XIT; 00391100
|
|
END; 00391200
|
|
L6: % % OR ( %993-00391300
|
|
BEGIN NEXT ~ LPAREN; GO TO XIT END; 00391400
|
|
L7: % < %993-00391500
|
|
BEGIN PREC ~ OP ~ 4; GO TO XIT END; 00391600
|
|
L8: % LETTER 0 %993-00391700
|
|
BEGIN IF DATATOG THEN IF CHECKOCTAL THEN GO TO XIT; 00391800
|
|
IDINFO~TIPE[12]; GO BK ; 00391900
|
|
END; 00392000
|
|
L9: % $ %993-00392100
|
|
BEGIN NEXT ~ DOLLAR; GO TO XIT END; 00392200
|
|
L10: % * %993-00392300
|
|
IF CHECKEXP(NCR, NCR, T) THEN 00392400
|
|
BEGIN PREC ~ 9; OP ~ 15; NEXT ~ UPARROW; GO TO XIT END ELSE 00392500
|
|
L11: 00392600
|
|
BEGIN PREC ~ 7; OP ~ 13; NEXT ~ STAR; GO TO XIT END; 00392700
|
|
L12: % - %993-00392800
|
|
BEGIN PREC ~ 5; OP ~ 11; NEXT ~ MINUS; GO TO XIT END; 00392900
|
|
L13: % ) OR [ %993-00393000
|
|
BEGIN NEXT ~ RPAREN; GO TO XIT END; 00393100
|
|
L14: % ; %993-00393200
|
|
BEGIN NEXT ~ SEMI; GO TO XIT END; 00393300
|
|
L15: % { %993-00393400
|
|
BEGIN PREC ~ 4; OP ~ 5; GO TO XIT END; 00393500
|
|
L16: % / %993-00393600
|
|
BEGIN PREC ~ 7; OP ~ 14; NEXT ~ SLASH; GO TO XIT END; 00393700
|
|
L17: % , %993-00393800
|
|
BEGIN NEXT ~ COMMA; GO TO XIT END; 00393900
|
|
L18: % ! %993-00394000
|
|
BEGIN PREC ~ 4; OP ~ 9; GO TO XIT END; 00394100
|
|
L19: % = OR ~ OR # %993- 00394200
|
|
BEGIN NEXT ~ EQUAL; GO TO XIT END; 00394300
|
|
L20: % ] %993-00394400
|
|
BEGIN XTA ~ T; FLAG(0); GO TO CASESTMT END; 00394500
|
|
L21: % " OR : OR @ %993-00394600
|
|
BEGIN QUOTESTRING; GO TO XIT END; 00394700
|
|
XIT: 00394800
|
|
IF DEBUGTOG THEN WRITALIST(FD,3,NEXT,T," ",0,0,0,0,0) ; 00394900
|
|
XTA ~ NAME ~ T; 00395000
|
|
END SCAN; 00395100
|
|
00395200
|
|
PROCEDURE WRAPUP; 00395300
|
|
COMMENT WRAPUP OF COMPILIATION; 00395400
|
|
BEGIN 00395500
|
|
ARRAY PRT[0:7,0:127], 00395600
|
|
SEGDICT[0:7,0:127], 00395700
|
|
SEG0[0:29]; 00395800
|
|
ARRAY FILES[0:BIGGESTFILENB]; 00395900
|
|
INTEGER THEBIGGEST; 00396000
|
|
SAVE ARRAY FPB[0:1022]; % FILE PARAMETER BLOCK 00396100
|
|
REAL FPS,FPE; % START AND END OF FPB 00396200
|
|
REAL GSEG,PRI,FID,MFID,IDNM,FILTYP,FPBI; 00396300
|
|
BOOLEAN ALF; 00396400
|
|
REAL PRTADR, SEGMNT, LNK, TSEGSZ, T1, I, FPBSZ; 00396500
|
|
DEFINE 00396600
|
|
SPDEUN= FPBSZ#, 00396700
|
|
ENDDEF=#; 00396800
|
|
ARRAY INTLOC[0:150]; 00396900
|
|
REAL J; 00397000
|
|
FORMAT SEGUS(A6, " IS SEGMENT ", I4, 00397100
|
|
", PRT IS ", A4, "."); 00397200
|
|
LIST SEGLS(IDNM,NXAVIL,T1); 00397300
|
|
LABEL LA, ENDWRAPUP; 00397400
|
|
LABEL QQQDISKDEFAULT; %503-00397500
|
|
COMMENT FORMAT OF SEGMENT DICTIONARY -RUN TIME ; 00397600
|
|
DEFINE SGTYPF= [1:2]#, %0 = PROGRAM SEGMENTS 00397700
|
|
SGTYPC= 1:46:2#,%1 = MCP INTRINSIC 00397800
|
|
%2 = DATA SEGMENT 00397900
|
|
PRTLINKF= [8:10]#, % LINK TO FIRT PRT ENTRY 00398000
|
|
PRTLINKC= 8:38:10#, 00398100
|
|
SGLCF = [18:15]#, % SEGMENT SIZE 00398200
|
|
SGLCC = 23:38:10#, 00398300
|
|
DKADRF = [33:15]#, % RELATIVE DISK ADDRESS OF SEGMENT 00398400
|
|
% OR MCP INTRINSIC NUMBER 00398500
|
|
DKADRC = 33:13:15#; 00398600
|
|
COMMENT FORMAT OF FIRST SEGMENT OF CODE FILE- RUN TIME; 00398700
|
|
COMMENT SEGO[0:29] 00398800
|
|
WORD CONTENTS 00398900
|
|
0 LOCATION OF SEGMENT DICTIONARY 00399000
|
|
1 SIZE OF SEGMENT DICTIONARY 00399100
|
|
2 LOCATION OF PRT 00399200
|
|
3 SIZE OF PRT 00399300
|
|
4 LOCATION OF FILE PARAMETER BLOCK 00399400
|
|
5 SIZE OF FILE PARAMETER BLOCK 00399500
|
|
6 STARTING SEGMENT NUMBER 00399600
|
|
7-[2:1] IND FORTRAN FAULT DEC 00399700
|
|
7-[18:15] NUMBER OF FILES 00399800
|
|
7-[33:15] CORE REQUIRED/64 00399900
|
|
; 00400000
|
|
COMMENT FORMAT OF PRT; 00400100
|
|
% FLGF = [0:4] = 1101 = SET BY STREAM 00400200
|
|
DEFINE MODEF =[4:2]#, % 0 = THUNK 00400300
|
|
MODEC=4:46:2#, % 1 = WORD MODE PROGRAM DESCRIPTOR 00400400
|
|
% 2 = LABEL DESCRIPTOR 00400500
|
|
% 3 = CHARACTER MODE PROGRAM DESCRIPTOR 00400600
|
|
STOPF =[6:1]#, % STOPPER = 1 FOR LAST DESCRIPTOR IN 00400700
|
|
STOPC=6:47:1#, % CHAIN OF SAME SEGMENT DESCRIPTORS 00400800
|
|
LINKF =[7:11]#, % IF STOP = 0 THEN PRTLINK 00400900
|
|
LINKC=7:37:11#, % ELSE LINK TO SEGDICT 00401000
|
|
FFF =[18:15]#,% INDEX INTO SEGMENT DICTIONARY 00401100
|
|
FFC =18:33:15#, 01401200
|
|
SINX = [33:15]#;% RELATIVE ADDRESS INTO SEGMENT 00401300
|
|
DEFINE PDR = [37:5]#, 00401400
|
|
PDC = [42:6]#; 00401500
|
|
REAL STREAM PROCEDURE MKABS(F); 00401600
|
|
BEGIN 00401700
|
|
SI ~ F; MKABS ~ SI; 00401800
|
|
END MKABS; 00401900
|
|
REAL STREAM PROCEDURE BUILDFPB(DEST,FILNUM,FILTYP,MFID,FID,IDSZ, 00402000
|
|
IDNM,SPDEUN); 00402100
|
|
VALUE DEST,IDSZ,SPDEUN; 00402200
|
|
BEGIN 00402300
|
|
DI ~ DEST; 00402400
|
|
SI ~ FILNUM; SI ~ SI + 6; DS ~ 2 CHR; 00402500
|
|
SI ~ FILTYP; SI ~ SI + 7; DS ~ CHR; 00402600
|
|
SI ~ MFID; SI ~ SI + 1; DS ~ 7 CHR; 00402700
|
|
SI ~ FID; SI ~ SI + 1; DS ~ 7 CHR; 00402800
|
|
SI ~ LOC IDSZ; SI ~ SI + 1; DS ~ IDSZ CHR; 00402900
|
|
SI~LOC SPDEUN;SI~SI+6;DS~2 CHR;% DISK SPEED & EU NUMBER+1 00403000
|
|
BUILDFPB ~ DI; 00403100
|
|
DS ~ 2 LIT "0"; 00403200
|
|
END BUILDFPB; 00403300
|
|
REAL STREAM PROCEDURE GITSZ(F); 00403400
|
|
BEGIN 00403500
|
|
SI ~ F; SI ~SI + 7; TALLY ~ 7; 00403600
|
|
3(IF SC ! " " THEN JUMP OUT; 00403700
|
|
SI ~SI - 1; TALLY ~ TALLY + 63;); 00403800
|
|
GITSZ ~ TALLY; 00403900
|
|
END GITSZ; 00404000
|
|
STREAM PROCEDURE MOVE(F,T,SZ); VALUE SZ; 00404100
|
|
BEGIN 00404200
|
|
SI ~ F; DI ~T; DS ~ SZ WDS; 00404300
|
|
END MOVE; 00404400
|
|
INTEGER PROCEDURE MOVEANDBLOCK(FROM,SIZE); VALUE SIZE; 00404500
|
|
ARRAY FROM[0,0]; INTEGER SIZE; 00404600
|
|
BEGIN 00404700
|
|
REAL T,NSEGS,J,I; 00404800
|
|
STREAM PROCEDURE M2(F,T); BEGIN SI~F; DI~T; DS ~ 2 WDS; END M2; 00404900
|
|
NSEGS ~ (SIZE+29) DIV 30; 00405000
|
|
IF DALOC DIV CHUNK < T ~ (DALOC + NSEGS) DIV CHUNK 00405100
|
|
THEN DALOC ~ CHUNK | T; 00405200
|
|
MOVEANDBLOCK ~ DALOC; 00405300
|
|
DO BEGIN FOR J ~ 0 STEP 2 WHILE J < 30 AND I<SIZE DO 00405400
|
|
BEGIN 00405500
|
|
M2(FROM[I.[36:5],I.[41:7]],CODE(J)); 00405600
|
|
I ~ I+2; 00405700
|
|
END; 00405800
|
|
WRITE(CODE[DALOC]); 00405900
|
|
DALOC ~ DALOC + 1; 00406000
|
|
END UNTIL I } SIZE; 00406100
|
|
END MOVEANDBLOCK; 00406200
|
|
STREAM PROCEDURE MDESC(VLU,PRT); VALUE VLU; 00406300
|
|
BEGIN 00406400
|
|
DI ~ LOC VLU; DS ~ SET; % FLAG BIT 00406500
|
|
DI ~ PRT; SI ~ LOC VLU; DS ~ WDS; 00406600
|
|
END MDESC; 00406700
|
|
INTEGER STREAM PROCEDURE MAKEINT(S); 00406800
|
|
BEGIN LABEL LOOP; LOCAL T; 00406900
|
|
SI ~ S; SI ~ SI + 3; 00407000
|
|
LOOP: IF SC } "0" THEN 00407100
|
|
BEGIN TALLY ~ TALLY + 1; SI ~ SI + 1; GO TO LOOP; END; 00407200
|
|
T ~ TALLY; SI ~ S; SI ~ SI + 3; DI ~ LOC MAKEINT; DS ~ T OCT; 00407300
|
|
END MAKEINT; 00407400
|
|
LABEL FOUND; 00407500
|
|
FORMAT 00407600
|
|
FILEF(A1, A6, X1, 00407700
|
|
"FILE IDENTIFIER, PRT IS ", A4, "."), 00407800
|
|
BLOKF(A6, X5, "COMMON BLOCK, PRT IS ", A4, 00407900
|
|
", LENGTH IS ", I5, " WORDS."); 00408000
|
|
00408100
|
|
COMMENT DUMP OUT ACCUMULATED FORMAT AND NAME ARRAYS; 00408200
|
|
IF FNNINDEX ! 0 THEN 00408300
|
|
BEGIN FNNPRT ~ PRGDESCBLDR(1,FNNPRT,0,NXAVIL ~ NXAVIL + 1); 00408400
|
|
WRITEDATA(FNNINDEX,NXAVIL,FNNHOLD); 00408500
|
|
END; 00408600
|
|
IF SAVESUBS > 0 THEN 00408700
|
|
BEGIN T1 ~ GET(T ~ GLOBALSEARCH(".SUBAR")+2); 00408800
|
|
PUT(T,T1~T1&SAVESUBS[TOSIZE]); 00408900
|
|
END; 00409000
|
|
T1~PRGDESCBLDR(1,23,0,NSEG~NXAVIL~NXAVIL+1) ; % BUILD TPAR 00409100
|
|
FILL LSTT[*] WITH 21(0),8(" ") ; % R+23 00409200
|
|
WRITEDATA(29,NXAVIL,LSTT) ; 00409300
|
|
PDPRT[(PDINX-1).[37:5],(PDINX-1).[42:6]].[6:1]~1 ; % SAVE BIT 00409400
|
|
T1 ~ PRGDESCBLDR(1,22,0,NSEG ~ NXAVIL ~ NXAVIL + 1); 00409500
|
|
WRITEDATA (138,NXAVIL,TEN); % POWERS OF TEN TABLE 00409600
|
|
IF LSTI > 0 THEN 00409700
|
|
BEGIN 00409800
|
|
WRITEDATA(LSTI, NXAVIL ~ NXAVIL+1, LSTP); 00409900
|
|
LSTA ~ PRGDESCBLDR(1, LSTA, 0, NXAVIL); 00410000
|
|
END; 00410100
|
|
IF TWODPRTX ! 0 THEN 00410200
|
|
BEGIN 00410300
|
|
FILL LSTT[*] WITH 00410400
|
|
OCT0000000421410010, 00410500
|
|
OCT0301001301412025, 00410600
|
|
OCT2021010442215055, 00410700
|
|
OCT2245400320211025, 00410800
|
|
OCT0106177404310415, 00410900
|
|
OCT1025042112350000; 00411000
|
|
T ~ PRGDESCBLDR(0, TWODPRTX, 0, NXAVIL ~ NXAVIL+1); 00411100
|
|
WRITEDATA(-6, NXAVIL, LSTT); 00411200
|
|
END; 00411300
|
|
COMMENT DECLARE GLOBAL FILES AND ARRAYS; 00411400
|
|
FPS ~ FPE ~ MKABS(FPB); 00411500
|
|
SEGMENTSTART; 00411600
|
|
F2TOG ~ TRUE; 00411700
|
|
GSEG ~ NSEG; 00411800
|
|
FPBI ~ 0; 00411900
|
|
EMITL(0); EMITL(2); EMITO(SSF); 00412000
|
|
EMITL(1); % SET BLOCK COUNTER TO 1 00412100
|
|
EMITL(16); EMITO(STD); 00412200
|
|
EMITL(0); EMITOPDCLIT(23); EMITO(DEL); 00412300
|
|
EMITL(REAL(HOLTOG)); EMITPAIR(21,STD); 00412400
|
|
I ~ GLOBALNEXTINFO; WHILE I < 4093 DO 00412500
|
|
BEGIN 00412600
|
|
I ~ I+3; 00412700
|
|
GETALL(I,INFA,INFB,INFC); 00412800
|
|
IF INFA.CLASS = FILEID THEN %SEE COMMENTS ON LINE 02118000 %992-00412900
|
|
BEGIN 00413000
|
|
FPBI ~ FPBI + 1; 00413100
|
|
PRI ~ INFA .ADDR; 00413200
|
|
IF (XTA ~ INFB ).[18:6] < 10 THEN 00413300
|
|
BEGIN 00413400
|
|
IF XTA ~ MAKEINT(XTA) > BIGGESTFILENB THEN FLAG(77) ELSE 00413500
|
|
FILES[XTA] ~ PRI; 00413600
|
|
IF XTA > THEBIGGEST THEN THEBIGGEST ~ XTA; 00413700
|
|
END; 00413800
|
|
EMITO(MKS); 00413900
|
|
IF J ~ INFC .ADINFO ! 0 THEN % OPTION FILE 00414000
|
|
BEGIN FILTYP ~ INFC .LINK; 00414100
|
|
IDNM ~ " "&"FILE"[6:24:24]&INFB[30:18:18]; 00414200
|
|
T1 ~ GITSZ(IDNM); 00414300
|
|
FID ~ FILEINFO[2,J]; 00414400
|
|
MFID ~ FILEINFO[1,J]; 00414500
|
|
IF FILTYP}10 AND (T~FILEINFO[3,J].DKAREASZ)!0 THEN 00414600
|
|
BEGIN %%% SET UP <DISK FILE DESCRIPTION>; 00414700
|
|
SPDEUN~FILEINFO[3,J].SENSPDEUNF; 00414800
|
|
B~IF (B~((J~FILEINFO[0,J]).[18:12])/(IF A~J.[30:12]{0 THEN00414900
|
|
1 ELSE A)){0 THEN 1 ELSE B ; 00415000
|
|
%%% B=ORIGINAL "BLOCKING" SIZE = # LOGRECS/PHYSREC. 00415100
|
|
A~ENTIER(B|ENTIER(T/(20|B)+.999999999)+.5) ; 00415200
|
|
%%% T="AREA" SIZE = # LOGRECS IN TOTAL FILE. 00415300
|
|
%%% A=# LOGRECS PER ROW. 00415400
|
|
B~ENTIER(T/A+.999999999) ; 00415500
|
|
%%% B = # ROWS IN FILE. 00415600
|
|
%%% EQUIVALENT ALGOL FILE DESCRIPTION = [B:A]. 00415700
|
|
%%% THE ABOVE LOGIC YIELDS: SHORTEST ROW CONTAINING 00415800
|
|
%%% AN INTEGER NUMBER OF PHYSICAL RECORDS AND WHICH 00415900
|
|
%%% REQUIRES 20 OR FEWER ROWS FOR THE TOTAL AREA, T.00416000
|
|
EMITNUM(B); EMITNUM(A) ; 00416100
|
|
END ELSE 00416200
|
|
BEGIN EMITL(0); EMITL(0); 00416300
|
|
J ~ FILEINFO[0,J]; % THIS ONE HAS ALL THE GOODIES 00416400
|
|
END; 00416500
|
|
QQQDISKDEFAULT: %503-00416600
|
|
ESTIMATE~ESTIMATE+(J.[42:6])|(IF A~J.[18:12]=0 THEN J.[30:12] 00416700
|
|
ELSE A) ; 00416800
|
|
EMITL(J.[4:2]); % LOCK 00416900
|
|
EMITL(FPBI); % FILE PARAM INDEX 00417000
|
|
EMITDESCLIT(PRI); % PRT OF FILE 00417100
|
|
EMITL(J.[42:6]); % # BUFFERS 00417200
|
|
EMITL(J.[3:1]); % RECORDING MODE 00417300
|
|
EMITNUM(J.[30:12]) ; % RECORD SIZE 00417400
|
|
EMITNUM(J.[18:12]) ; % BLOCK SIZE 00417500
|
|
EMITNUM(J.[ 6:12]) ; % SAVE FACTOR 00417600
|
|
END ELSE 00417700
|
|
BEGIN 00417800
|
|
ALF ~TRUE; 00417900
|
|
IF(FILTYP~INFC.LINK=2 OR FILTYP=12) AND INFB.[18:6]{9 THEN 00418000
|
|
IDNM ~ 0&"FILE"[6:24:24]&INFB[30:18:18] 00418100
|
|
ELSE 00418200
|
|
BEGIN 00418300
|
|
ALF ~ FALSE; 00418400
|
|
IF (IDNM ~ " "&INFB[6:18:30]) = "READR " THEN 00418500
|
|
IDNM ~ "READER "; 00418600
|
|
END; 00418700
|
|
IF IDNM="READER " OR IDNM="FILE5 " THEN IDNM~"CARD " ELSE %503-00418800
|
|
IF IDNM="FILE6 " THEN BEGIN IDNM~"PRINTER";FILTYP~18;END ELSE %503-00418900
|
|
BEGIN %503-00419000
|
|
EMITL(20); EMITL(600); FILTYP~12; %20 | 600 REC DISK %503-00419100
|
|
J~0&2[42:42:6]&10[30:36:12]&300[18:36:12]; %503-00419200
|
|
FID~IDNM; MFID~"FORTEMP"; T1~GITSZ(IDNM); %503-00419300
|
|
GO TO QQQDISKDEFAULT; %503-00419400
|
|
END; %503-00419500
|
|
T1 ~ GITSZ(IDNM); 00419600
|
|
FID ~ IDNM; 00419700
|
|
MFID ~ 0; 00419800
|
|
IF DCINPUT AND ALF THEN BEGIN 00419900
|
|
EMITL(20); % DISK ROWS 00420000
|
|
EMITL(100); % DISK RECORD PER ROW 00420100
|
|
EMITL(2); % REWIND AND LOCK 00420200
|
|
EMITL(FPBI); % FILE NUMBER 00420300
|
|
EMITDESCLIT(PRI); % PRT OF FILE 00420400
|
|
EMITL(2); % NUMBER OF BUFFERS 00420500
|
|
EMITL(1); % RECORDING MODE 00420600
|
|
EMITL(10); % RECORD SIZE 00420700
|
|
EMITL(30); % BLOCK SIZE 00420800
|
|
EMITL(1); % SAVE FACTOR 00420900
|
|
END ELSE 00421000
|
|
BEGIN 00421100
|
|
EMITL(0); % DISK ROWS 00421200
|
|
EMITL(0); % DISK RECORDS PER ROW 00421300
|
|
EMITL(0); % REWIND & RELEASE 00421400
|
|
EMITL(FPBI); % FILE NUMBER 00421500
|
|
EMITDESCLIT(PRI); % PRT OF FILE 00421600
|
|
EMITL(2); % 2 BUFFERS 00421700
|
|
EMITL(REAL(ALF)); 00421800
|
|
EMITL(IF FILTYP = 0 THEN 10 ELSE 17); 00421900
|
|
EMITL(0); % 15 WORD BUFFERS 00422000
|
|
EMITL(0); % SAVE FACTOR (SCRATCH BY DEFAULT) 00422100
|
|
END; 00422200
|
|
END; 00422300
|
|
EMITL(11); % INPUT OR OUTPUT 00422400
|
|
EMITL(8); % SWITCH CODE FOR BLOCK 00422500
|
|
EMITOPDCLIT(5); % CALL BLOCK 00422600
|
|
FPE~BUILDFPB(FPE,FPBI,FILTYP,MFID,FID,T1,IDNM,SPDEUN); 00422700
|
|
IF PRTOG THEN WRITALIST(FILEF,3,IDNM.[6:6],IDNM,B2D(PRI), 00422800
|
|
0,0,0,0,0) ; 00422900
|
|
END 00423000
|
|
ELSE 00423100
|
|
IF INFA.CLASS = BLOCKID THEN 00423200
|
|
BEGIN 00423300
|
|
IF PRTOG THEN WRITALIST(BLOKF,3,INFB,B2D(INFA.ADDR), 00423400
|
|
INFC.SIZE,0,0,0,0,0) ; 00423500
|
|
IF INFA < 0 THEN ARRAYDEC(I); 00423600
|
|
END; 00423700
|
|
IF (T1 ~ INFA .CLASS) } FUNID 00423800
|
|
AND T1 { SUBRID THEN 00423900
|
|
BEGIN 00424000
|
|
PRI ~ 0; 00424100
|
|
IF INFA .SEGNO = 0 THEN 00424200
|
|
BEGIN 00424300
|
|
A~0; B~NUMINTM1 ; 00424400
|
|
WHILE A+1 < B DO 00424500
|
|
BEGIN 00424600
|
|
PRI ~ REAL(BOOLEAN(A+B) AND BOOLEAN(1022)); 00424700
|
|
IF IDNM ~ INT[PRI] = INFB THEN GO TO FOUND; 00424800
|
|
IF INFB < IDNM THEN B ~ PRI.[36:11] ELSE A ~ PRI.[36:11]; 00424900
|
|
END; 00425000
|
|
IF IDNM ~ INT[PRI~(A+B)|2-PRI] = INFB THEN GO TO FOUND; 00425100
|
|
XTA ~ INFB; FLAG(30); 00425200
|
|
GO TO LA; 00425300
|
|
FOUND: 00425400
|
|
IF (T1~INT[PRI+1].INTPARMS)!0 00425500
|
|
AND INFC < 0 00425600
|
|
THEN IF T1 ! INFC.NEXTRA THEN 00425700
|
|
BEGIN XTA ~ INFB ; FLAG(28); END; 00425800
|
|
IF (FID~INTLOC[MFID~INT[PRI+1].INTNUM])=0 THEN 00425900
|
|
BEGIN 00426000
|
|
PDPRT[PDIR,PDIC] ~ 00426100
|
|
0&1[STYPC] 00426200
|
|
&(FID ~ INTLOC[MFID] ~ NXAVIL ~ NXAVIL + 1)[SGNOC] 00426300
|
|
&1[SEGSZC]; 00426400
|
|
PDINX ~ PDINX + 1; 00426500
|
|
END; 00426600
|
|
T1 ~ PRGDESCBLDR(1,INFA .ADDR,0,FID); 00426700
|
|
IF PRTOG THEN WRITALIST(SEGUS,3,IDNM,FID,B2D(T1),0,0,0,0,0) ; 00426800
|
|
IF INT[PRI+1] < 0 THEN 00426900
|
|
BEGIN 00427000
|
|
T1 ~ PRGDESCBLDR(1,INT[PRI+1].INTPRT,0,FID); 00427100
|
|
INT[PRI+1] ~ ABS(INT[PRI + 1]); 00427200
|
|
END; 00427300
|
|
END 00427400
|
|
ELSE IF PRTOG THEN WRITALIST(SEGUS,3,INFB, 00427500
|
|
INFA.SEGNO,B2D(INFA.ADDR),0,0,0,0,0) ; 00427600
|
|
END; 00427700
|
|
LA: 00427800
|
|
END; 00427900
|
|
COMMENT MUST FOLLOW THE FOR STATEMENT; 00428000
|
|
IF FILEARRAYPRT ! 0 THEN 00428100
|
|
BEGIN % BUILDING OBJECT TIME FILE SEARCH ARRAY 00428200
|
|
J ~ PRGDESCBLDR(1,FILEARRAYPRT,0,NXAVIL ~ NXAVIL + 1); 00428300
|
|
WRITEDATA(THEBIGGEST + 1,NXAVIL,FILES); 00428400
|
|
END; 00428500
|
|
XTA ~ BLANKS; 00428600
|
|
IF NXAVIL > 1023 THEN FLAG(45); 00428700
|
|
IF PRTS > 1023 THEN FLAG(46); 00428800
|
|
IF STRTSEG = 0 THEN FLAG(65); 00428900
|
|
PRI ~ 0; 00429000
|
|
WHILE (IDNM ~ INT[PRI]) ! 0 DO 00429100
|
|
IF INT[PRI+1] } 0 THEN PRI ~ PRI + 2 ELSE 00429200
|
|
BEGIN 00429300
|
|
IF (FID~INTLOC[MFID~INT[PRI+1].INTNUM])=0 THEN 00429400
|
|
BEGIN 00429500
|
|
PDPRT[PDIR,PDIC] ~ 00429600
|
|
0&1[STYPC] 00429700
|
|
&MFID[DKAC] 00429800
|
|
&(FID ~ INTLOC[MFID] ~ NXAVIL ~ NXAVIL + 1)[SGNOC] 00429900
|
|
&1[SEGSZC]; 00430000
|
|
PDINX ~ PDINX + 1; 00430100
|
|
END; 00430200
|
|
T1 ~ PRGDESCBLDR(1,INT[PRI + 1].INTPRT,0,FID); 00430300
|
|
PRI ~ PRI+2; 00430400
|
|
END; 00430500
|
|
FOR I ~ 1 STEP 1 UNTIL BDX DO 00430600
|
|
BEGIN EMITO(MKS); EMITOPDCLIT(BDPRT[I]) END; 00430700
|
|
EMITO(MKS); 00430800
|
|
EMITOPDCLIT(STRTSEG.[18:15]); 00430900
|
|
T ~ PRGDESCBLDR(1,0,0,NSEG); 00431000
|
|
SEGMENT((ADR+4) DIV 4,NSEG,FALSE,EDOC); 00431100
|
|
IF ERRORCT ! 0 THEN GO TO ENDWRAPUP; 00431200
|
|
FILL SEG0[*] WITH 00431300
|
|
OCT020005, % BLOCK 00431400
|
|
OCT220014, % WRITE 00431500
|
|
OCT230015, % READ 00431600
|
|
OCT240016; % FILE CONTROL 00431700
|
|
COMMENT INTRINSIC FUNCTIONS; 00431800
|
|
FOR I ~ 0 STEP 1 UNTIL 3 DO 00431900
|
|
BEGIN 00432000
|
|
T1 ~ PRGDESCBLDR(1,SEG0[I].[36:12],0, 00432100
|
|
NSEG ~ NXAVIL ~ NXAVIL + 1); 00432200
|
|
PDPRT[PDIR,PDIC] ~ 00432300
|
|
0&1[STYPC] 00432400
|
|
&(SEG0[I].[30:6])[DKAC] 00432500
|
|
&NXAVIL[SGNOC] 00432600
|
|
&1[SEGSZC]; 00432700
|
|
PDINX ~ PDINX + 1; 00432800
|
|
END; 00432900
|
|
COMMENT GENERATE PRT AND SEGMENT DICTIONARY; 00433000
|
|
PRT[0,41] ~ PDPRT[0,0] & 63[10:42:6]; % USED FOR FAULT OPTN 00433100
|
|
FOR I ~ 1 STEP 1 UNTIL PDINX-1 DO 00433200
|
|
IF (T1~PDPRT[I.PDR,I.PDC]).SEGSZF = 0 THEN 00433300
|
|
BEGIN % PRT ENTRY 00433400
|
|
PRTADR ~T1.PRTAF; 00433500
|
|
SEGMNT ~T1.SGNOF; 00433600
|
|
LNK ~ SEGDICT[SEGMNT.[36:5], SEGMNT.[41:7]].PRTAF; 00433700
|
|
MDESC(T1.RELADF&SEGMNT[FFC] 00433800
|
|
&(REAL(LNK=0))[STOPC] 00433900
|
|
&(IF LNK=0 THEN SEGMNT ELSE LNK)[LINKC] 00434000
|
|
&(T1.DTYPF)[MODEC] 00434100
|
|
&5[1:45:3], 00434200
|
|
PRT[PRTADR.[36:5],PRTADR.[41:7]]); 00434300
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]].PRTLINKF ~ PRTADR; 00434400
|
|
END 00434500
|
|
ELSE 00434600
|
|
BEGIN % SEGMENT DICTIONARY ENTRY 00434700
|
|
SEGMNT ~ T1.SGNOF; 00434800
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]]~ 00434900
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]] 00435000
|
|
&T1[SGLCC] 00435100
|
|
&T1[DKADRC] 00435200
|
|
& T1[4:12:1] 00435300
|
|
&T1[6:6:1] 00435400
|
|
&T1[1:1:2]; 00435500
|
|
TSEGSZ ~ TSEGSZ + T1.SEGSZF; 00435600
|
|
END; 00435700
|
|
COMMENT WRITE OUT FILE PARAMETER BLOCK; 00435800
|
|
FPBSZ ~ ((FPE.[33:15] - FPS) | 8 + FPE.[30:3] + 9) DIV 8; 00435900
|
|
I ~ (FPBSZ + 29) DIV 30; 00436000
|
|
IF DALOC DIV CHUNK < T1 ~ (DALOC +I) DIV CHUNK 00436100
|
|
THEN DALOC ~ CHUNK | T1; 00436200
|
|
SEG0[4] ~ DALOC; 00436300
|
|
SEG0[5] ~ FPBSZ; 00436400
|
|
SEG0[5].FPBVERSF~FPBVERSION; 00436500
|
|
FOR I ~ 0 STEP 30 WHILE I < FPBSZ DO 00436600
|
|
BEGIN 00436700
|
|
MOVE(FPB[I],CODE(0),IF (FPBSZ-I) } 30 00436800
|
|
THEN 30 ELSE (FPBSZ-I)); 00436900
|
|
WRITE(CODE[DALOC]); 00437000
|
|
DALOC ~ DALOC + 1; 00437100
|
|
END; 00437200
|
|
SEG0[2] ~ MOVEANDBLOCK(PRT,PRTS+1); % WRITES OUT PRT 00437300
|
|
% SAVES ADDRESS OF PRT 00437400
|
|
SEG0[3] ~ PRTS + 1; % SIZE OF PRT 00437500
|
|
SEG0[0] ~ MOVEANDBLOCK(SEGDICT,NXAVIL + 1); % WRITE SEG DICT 00437600
|
|
SEG0[1] ~ NXAVIL + 1; % SIZE OF SEGMENT DICTIONARY 00437700
|
|
SEG0[6] ~ -GSEG; % FIRST SEGMENT TO EXECUTE 00437800
|
|
SEG0[7].[33:15] ~ FPBI; % NUMBER OF FILES 00437900
|
|
SEG0[7].[18:15] ~ ESTIMATE ~ IF % CORE ESTIMATE 00438000
|
|
( I ~ 00438100
|
|
ESTIMATE+60+ %%% OPTION FILE BUFF SIZES + DEFAULT BUFF SIZES.00438200
|
|
PRTS + 512 % PRT AND STACK SIZE 00438300
|
|
+TSEGSZ % TOTAL SIZE OF CODE 00438400
|
|
+ 1022 % FOR INTRINSICS 00438500
|
|
+ARYSZ % TOTAL ARRAY SIZE 00438600
|
|
+ (MAXFILES | 28) % SIZE OF ALL FIBS 00438700
|
|
+FPBSZ % SIZE OF FILE PARAMETER BLOCK 00438800
|
|
+ (IF ESTIMATE = 0 THEN 0 ELSE (ESTIMATE + 1000)) 00438900
|
|
+ (NXAVIL + 1) % SIZE OF SEGMENT DICTIONARY 00439000
|
|
) > 32768 THEN 510 ELSE (I DIV 64); 00439100
|
|
COMMENT IF SEGSW THEN UPDATE LINDICT, SEG0[0] & WRITE IT ; 00439200
|
|
SEG0[7].[2:1] ~ 1; % USED FOR FORTRAN FAULT DEC; 00439300
|
|
IF SEGSW THEN 00439400
|
|
BEGIN 00439500
|
|
FOR I ~ NXAVIL + 1 STEP -1 UNTIL 1 DO 00439600
|
|
IF LINEDICT[I.IR,I.IC] = 0 THEN % INDICATE NO LINE SEGMENT 00439700
|
|
LINEDICT[I.IR,I.IC] ~ -1; % FOR THIS SEGMENT 00439800
|
|
SEG0[0] ~ SEG0[0] & (MOVEANDBLOCK(LINEDICT,NXAVIL+1))[TOBASE]; 00439900
|
|
END; 00440000
|
|
WRITE(CODE[0],30,SEG0[*]); 00440100
|
|
IF ERRORCT = 0 AND SAVETIME } 0 THEN LOCK(CODE); 00440200
|
|
ENDWRAPUP: 00440300
|
|
LOCK(TAPE); %RW/L TAPE FILE OR LOCK DISK %502-00440400
|
|
IF NTAPTOG THEN LOCK(NEWTAPE,*); %RW/L TAPE OR CRUNCH DISK%502-00440500
|
|
END WRAPUP; 00440600
|
|
PROCEDURE INITIALIZATION; 00440700
|
|
BEGIN COMMENT INITIALIZATION; 00440800
|
|
ALPHA STREAM PROCEDURE MKABS(P); 00440900
|
|
BEGIN SI ~ P; MKABS ~ SI END; 00441000
|
|
STREAM PROCEDURE BLANKOUT(CRD, N); VALUE N; 00441100
|
|
BEGIN DI ~ CRD; N(DS ~ LIT " ") END; 00441200
|
|
BLANKOUT(CRD[10], 40); 00441300
|
|
BLANKOUT(LASTSEQ, 8); 00441400
|
|
BLANKOUT(LASTERR, 8); 00441500
|
|
INITIALNCR ~ MKABS(CRD[0])&6[30:45:3]; 00441600
|
|
CHR0 ~ MKABS(ACCUM[0])& 2[30:45:3]; 00441700
|
|
ACR0 ~ CHR0+1; 00441800
|
|
ACR1 ~ (CHR1~MKABS(EXACCUM[0]) & 2[30:45:3]) +1; 00441900
|
|
ACCUMSTOP~MKABS(ACCUM[11]); EXACCUMSTOP~MKABS(EXACCUM[11]) ; 00442000
|
|
BUFL ~ MKABS(BUFF) & 2[30:45:3]; 00442100
|
|
NEXTCARD ~ 1; 00442200
|
|
GLOBALNEXTINFO ~ 4093; 00442300
|
|
PDINX ~ 1; 00442400
|
|
LASTNEXT~1000 ; 00442500
|
|
PRTS ~ 41; % CURRENTLY . . . . . LAST USED PRT 00442600
|
|
READ(CR, 10, CB[*]); 00442700
|
|
LISTOG~TRUE; SINGLETOG~TRUE; CHECKTOG ~ FALSE; %DEFAULT %501- 00442800
|
|
FIRSTCALL ~ TRUE; 00442900
|
|
IF BOOLEAN(ERRORCT.[46:1]) THEN LISTOG ~ FALSE; 00443000
|
|
IF BOOLEAN(ERRORCT.[47:1]) THEN DCINPUT ~ TRUE; 00443100
|
|
ERRORCT ~ 0; 00443200
|
|
IF DCINPUT THEN SEGSW ~ TRUE; 00443300
|
|
IF DCINPUT THEN REMOTETOG ~ TRUE; 00443400
|
|
LIMIT~IF DCINPUT THEN 20 ELSE 100 ; 00443500
|
|
IF SEGSW THEN SEGSWFIXED ~ TRUE; 00443600
|
|
EXTRAINFO[0,0] ~ 0 & EXPCLASS[TOCLASS]; 00443700
|
|
NEXTEXTRA ~ 1; 00443800
|
|
LASTMODE ~ 1; 00443900
|
|
DALOC ~ 1; 00444000
|
|
TYPE ~ -1; 00444100
|
|
MAP[0] ~ MAP[2] ~ MAP[4] ~ MAP[7] ~ -10; 00444200
|
|
MAP[5] ~ 1; MAP[6] ~ 2; 00444300
|
|
FILL XR[*] WITH 0,0,0,0,0,0,0, 00444400
|
|
"INTEGE","R R"," "," "," REAL "," ", 00444500
|
|
"LOGICA","L L","DOUBLE"," ","COMPLE","X X", 00444600
|
|
"------","- -"," "," "," ---- "," ", 00444700
|
|
"------","- -","------"," ","------","- -"; 00444800
|
|
FILL TYPES[*] WITH " ","INTGER"," ","REAL ", 00444900
|
|
"LOGCAL", "DOUBLE", "COMPLX"; 00445000
|
|
FILL KLASS[*] WITH 00445100
|
|
"NULL ", "ARRAY ", "VARBLE", "STFUN ", 00445200
|
|
"NAMLST", "FORMAT", "ERROR ", "FUNCTN", 00445300
|
|
"INTRSC", "EXTRNL", "SUBRTN", "COMBLK", 00445400
|
|
"FILE "; 00445500
|
|
FILL RESERVEDWORDSLP[*] WITH 00445600
|
|
"CALL ","ENTR ","FORM ","GOTO ","IF ","READ ", 00445700
|
|
"REAL ","WRIT ","DATA ","CLOS ","LOCK ","PURG ","CHAI ", 00445800
|
|
"PRIN ","PUNC ", 00445900
|
|
0,"Y ","AT ",0,0,0,0,"E ",0,"E ",0,"E ",00446000
|
|
"N ","T ","H "; 00446100
|
|
FILL RESERVEDWORDS[*] WITH 00446200
|
|
"ASSI ","BACK ","BLOC ","CALL ","COMM ","COMP ","CONT ", 00446300
|
|
"DATA ","DIME ","DOUB ","END ","ENDF ","ENTR ","EQUI ", 00446400
|
|
"EXTE ","FUNC ","GOTO ","INTE ","LOGI ","NAME ","PAUS ", 00446500
|
|
"PRIN ","PROG ","PUNC ","READ ","REAL ","RETU ","REWI ", 00446600
|
|
"STOP ","SUBR ","WRIT ", 00446700
|
|
"CLOS ","LOCK ","PURG ", 00446800
|
|
0,0,0, 00446900
|
|
"FIXF ","VARY ","AUXM ","RELE ", 00447000
|
|
"IMPL ", 00447100
|
|
"GN ","SPACE ","KDATA ",0,"ON ","LEX ","INUE ", 00447200
|
|
0,"NSION ","LEPRECIS",0,"ILE ","Y ","VALENCE ","RNAL " 00447300
|
|
,"TION ",0,"GER ","CAL ","LIST ","E ","T ",00447400
|
|
"RAM ","H ",0,0,"RN ","ND ",0,"OUTINE ", 00447500
|
|
"E ","E ",0,"E ",0,0,0,"D ","ING ", 00447600
|
|
"EM ","ASE " 00447700
|
|
,"ICIT " 00447800
|
|
; 00447900
|
|
FILL RESLENGTHLP[*] WITH 00448000
|
|
4,5,6,4,2,4,4,5,4,5,4,5,5,5,5; 00448100
|
|
FILL LPGLOBAL[*] WITH 00448200
|
|
4, 13, 36, 17, 35, 25, 00448300
|
|
26, 31, 8, 32, 33, 34, 37, 22, 24; 00448400
|
|
FILL RESLENGTH[*] WITH 00448500
|
|
0, 9, 9, 4, 6, 00448600
|
|
7, 8, 4, 9, 15, 00448700
|
|
3, 7, 5, 11, 8, 00448800
|
|
8, 4, 7, 7, 8, 00448900
|
|
5, 5, 7, 5, 4, 00449000
|
|
4, 6, 6, 4, 10, 5, 00449100
|
|
5, 4, 5, 0, 0, 0, 5, 7, 6, 7 00449200
|
|
,8 00449300
|
|
; 00449400
|
|
FILL WOP[*] WITH 00449500
|
|
"LITC"," ", 00449600
|
|
"OPDC","DESC", 00449700
|
|
10,"DEL ", 11,"NOP ", 12,"XRT ", 16,"ADD ", 17,"AD2 ", 18,"PRL ", 00449800
|
|
19,"LNG ", 21,"GEQ ", 22,"BBC ", 24,"INX ", 35,"LOR ", 37,"GTR ", 00449900
|
|
38,"BFC ", 39,"RTN ", 40,"COC ", 48,"SUB ", 49,"SB2 ", 64,"MUL ", 00450000
|
|
65,"ML2 ", 67,"LND ", 68,"STD ", 69,"NEQ ", 70,"SSN ", 71,"XIT ", 00450100
|
|
72,"MKS ", 00450200
|
|
128,"DIV ",129,"DV2 ",130,"COM ",131,"LQV ",132,"SND ",133,"XCH ", 00450300
|
|
134,"CHS ",167,"RTS ",168,"CDC ",197,"FTC ",260,"LOD ",261,"DUP ", 00450400
|
|
278,"GBC ",280,"SSF ",294,"GFC ",322,"ZP1 ",384,"IDV ",453,"FTF ", 00450500
|
|
515,"MDS ",532,"ISD ",533,"LEQ ",534,"BBW ",548,"ISN ",549,"LSS ", 00450600
|
|
550,"BFW ",581,"EQL ",582,"SSP ",584,"ECM ",709,"CTC ",790,"GBW ", 00450700
|
|
806,"GFW ",896,"RDV ",965,"CTF ", 00450800
|
|
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1023; 00450900
|
|
FILL TIPE[*] WITH 10(-1),-19,-21,OCT300000000,-21,-2,-3,-4, 00451000
|
|
8(OCT300000000),OCT100000000,-5,-13,-4,-6,-7,-19,-11, 00451100
|
|
5(OCT100000000),-8,3(OCT300000000),-9,-10,-12,-13,-14,00451200
|
|
-15,-100,-16,8(OCT300000000),-17,-6,-18,-19,-20,-21 ; 00451300
|
|
FILL PERIODWORD[*] WITH 00451400
|
|
"FALSE ", "TRUE ", "OR ", "AND ", "NOT ", 00451500
|
|
"LT ", "LE ", "EQ ", "GT ", "GE ", "NE "; 00451600
|
|
ACCUM[0] ~ EXACCUM[0] ~ "; "; 00451700
|
|
INCLUDE ~ "NCLUDE" & "I"[6:42:6]; 00451800
|
|
INSERTDEPTH ~ -1; 00451900
|
|
FILL TEN[*] WITH % POWERS OF TEN TO PRT 22 00452000
|
|
OCT1141000000000000, OCT1131200000000000, OCT1121440000000000,00452100
|
|
OCT1111750000000000, OCT1102342000000000, OCT1073032400000000,00452200
|
|
OCT1063641100000000, OCT1054611320000000, OCT1045753604000000,00452300
|
|
OCT1037346545000000, OCT1011124027620000, OCT0001351035564000,00452400
|
|
OCT0011643245121000, OCT0022214116345200, OCT0032657142036440,00452500
|
|
OCT0043432772446150, OCT0054341571157602, OCT0065432127413542,00452600
|
|
OCT0076740555316473, OCT0111053071060221, OCT0121265707274265,00452700
|
|
OCT0131543271153342, OCT0142074147406233, OCT0152513201307702,00452800
|
|
OCT0163236041571663, OCT0174105452130240, OCT0205126764556310,00452900
|
|
OCT0216354561711772, OCT0231004771627437, OCT0241206170175346,00453000
|
|
OCT0251447626234640, OCT0261761573704010, OCT0272356132665012,00453100
|
|
OCT0303051561442215, OCT0313664115752660, OCT0324641141345435,00453200
|
|
OCT0336011371636744, OCT0347413670206535, OCT0361131664625026,00453300
|
|
OCT0371360241772234, OCT0401654312370703, OCT0412227375067064,00453400
|
|
OCT0422675274304701, OCT0433454553366061, OCT0444367706263475,00453500
|
|
OCT0455465667740415, OCT0467003245730520, OCT0501060411731664,00453600
|
|
OCT0511274514320241, OCT0521553637404312, OCT0532106607305374,00453700
|
|
OCT0542530351166673, OCT0553256443424452, OCT0564132154331565,00453800
|
|
OCT0575160607420123, OCT0606414751324147, OCT0621012014361120,00453900
|
|
OCT0631214417455344, OCT0641457523370635, OCT0651773450267004,00454000
|
|
OCT0662372362344605, OCT0673071057035747, OCT0703707272645341,00454100
|
|
OCT0714671151416631, OCT0726047403722377, OCT0737461304707077,00454200
|
|
OCT0751137556607071, OCT0761367512350710, OCT0771665435043072,00454300
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,00454400
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,00454500
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,00454600
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,00454700
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,00454800
|
|
OCT0000000000000000, OCT0000000000000000, OCT0004000000000000,00454900
|
|
OCT0001000000000000, OCT0001720000000000, OCT0004304000000000,00455000
|
|
OCT0007365000000000, OCT0005262200000000, OCT0004536640000000,00455100
|
|
OCT0001666410000000, OCT0000244112000000, OCT0000315134400000,00455200
|
|
OCT0000400363500000, OCT0000450046042000, OCT0006562057452400,00455300
|
|
OCT0004316473365100, OCT0005402212262320, OCT0006702654737004,00455400
|
|
OCT0004463430126605, OCT0007600336154346, OCT0001540425607437,00455500
|
|
OCT0004070533151347, OCT0005106662003641, OCT0005033043640461,00455600
|
|
OCT0002241654610575, OCT0002712227752734, OCT0001474675745524,00455700
|
|
OCT0002014055337051, OCT0004417070626663, OCT0007522706774440,01455800
|
|
OCT0003447470573550, OCT0006361406732502, OCT0005005571052122,00455900
|
|
OCT0006207127264547, OCT0001650755141700, OCT0006223150372260,00456000
|
|
OCT0007670002470733, OCT0007646003207120, OCT0005617404050743,00456100
|
|
OCT0001163305063137, OCT0007420166277771, OCT0001732422375777,00456200
|
|
OCT0002321127075377, OCT0003005354714677, OCT0005606650100057,00456300
|
|
OCT0007150422120072, OCT0003002526544103, OCT0001603254275130,00456400
|
|
OCT0004144127354356, OCT0007175155247451, OCT0007034410521363,00456500
|
|
OCT0007664351264566, OCT0003641443541723, OCT0004611754472310;00456600
|
|
FILL INLINEINT[*] WITH % FILLS MUST BE IN ASCENDING ORDER FOR 00456700
|
|
% BINARY SEARCH IN FUNCTION AND DOITINLINE. 00456800
|
|
% INLINEINT[I].[1:1] = 1 ONCE CODE FOR INTRINSIC 00456900
|
|
% HAS BEEN EMITTED INLINE.00457000
|
|
% INLINEINT[I].[2:10]=INDEX INTO 2-ND WORD OF THE00457100
|
|
% CORR ENTRY IN INT. 00457200
|
|
% INLINEINT[I].[12:36]=NAME OF INTRINSIC. 00457300
|
|
%********FIRST FILL MUST BE NUMBER OF INTRINSICS ****************** 00457400
|
|
34, 00457500
|
|
"00ABS ", 00457600
|
|
"00AIMAG ", 00457700
|
|
"00AINT ", 00457800
|
|
"00AMAX0 ", 00457900
|
|
"00AMAX1 ", 00458000
|
|
"00AMIN0 ", 00458100
|
|
"00AMIN1 ", 00458200
|
|
"00AMOD ", 00458300
|
|
"00AND ", 00458400
|
|
"00CMPLX ", 00458500
|
|
"00COMPL ", 00458600
|
|
"00CONJG ", 00458700
|
|
"00DABS ", 00458800
|
|
"00DBLE ", 00458900
|
|
"00DIM ", 00459000
|
|
"00DSIGN ", 00459100
|
|
"00EQUIV ", 00459200
|
|
"00FLOAT ", 00459300
|
|
"00IABS ", 00459400
|
|
"00IDIM ", 00459500
|
|
"00IDINT ", 00459600
|
|
"00IFIX ", 00459700
|
|
"00INT ", 00459800
|
|
"00ISIGN ", 00459900
|
|
"00MAX0 ", 00460000
|
|
"00MAX1 ", 00460100
|
|
"00MIN0 ", 00460200
|
|
"00MIN1 ", 00460300
|
|
"00MOD ", 00460400
|
|
"00OR ", 00460500
|
|
"00REAL ", 00460600
|
|
"00SIGN ", 00460700
|
|
"00SNGL ", 00460800
|
|
"00TIME ", 00460900
|
|
0 ; 00461000
|
|
FILL INT [*] WITH 00461100
|
|
COMMENT THESE NAMES (1-ST WORD OF EACH TWO-WORD ENTRY) MUST BE IN 00461200
|
|
ASCENDING ORDER FOR BINARY LOOKUPS. 00461300
|
|
THE SECOND WORD HAS THE FOLLOWING FORMAT: 00461400
|
|
.[1:1] = 0 IF THE INTRINSIC DOES NOT HAVE A PERMANENT PRT 00461500
|
|
LOCATION, OTHERWISE = 1. MAY BE RESET BY 00461600
|
|
WRAPUP. SEE .[18:6] BELOW. 00461700
|
|
.[2:1] = .INTSEEN = 1 IFF INTRINSICS FUNCTION HAS BEEN SEEN. 00461800
|
|
.[6:3] = .INTCLASS = CLASS OF THE INTRINSIC. 00461900
|
|
.[9:3] = .INTPARMCLASS = CLASS OF PARAMETERS. 00462000
|
|
.[12:6] = .INTINLINE = INDEX FOR DOITINLINE IF !0, OTHERWISE 00462100
|
|
DO IT VIA INTRINSIC CALL. 00462200
|
|
.[24:6] = .INTPRT = FIXED PRT LOCATION. SEE .[1:1] ABOVE. 00462300
|
|
.[30:6] = .INTPARMS = NUMBER OF PARAMETERS REQUIRED BY THE INT.00462400
|
|
.[36:12] = .INTNUM = INTRINSICS NUMBER. 00462500
|
|
THE FIELDS .[3:3] AND .[18:6] ARE SO FAR UNUSED. 00462600
|
|
; 00462700
|
|
% 00462800
|
|
%***********************************************************************00462900
|
|
%********* IF YOU ADD AN INTRINSIC, BE SURE TO CHANGE NUMINTM1 *******00463000
|
|
%********* AT SEQUENCE NUMBER 00155211.......THANK YOU. *******00463100
|
|
%***********************************************************************00463200
|
|
% 00463300
|
|
"ABS ", OCT0033010000010007, 00463400
|
|
"AIMAG ", OCT0036020000010074, 00463500
|
|
"AINT ", OCT0033030000010054, 00463600
|
|
"ALGAMA", OCT0033000000010127, 00463700
|
|
"ALOG10", OCT0033000000010103, 00463800
|
|
"ALOG ", OCT2033000035010017, 00463900
|
|
"AMAX0 ", OCT0031250000000031, 00464000
|
|
"AMAX1 ", OCT0033250000000031, 00464100
|
|
"AMIN0 ", OCT0031250000000032, 00464200
|
|
"AMIN1 ", OCT0033250000000032, 00464300
|
|
"AMOD ", OCT0033040000020063, 00464400
|
|
"AND ", OCT0033050000020130, 00464500
|
|
"ARCOS ", OCT0033000000010117, 00464600
|
|
"ARSIN ", OCT2033000032010116, 00464700
|
|
"ATAN2 ", OCT2033000044020114, 00464800
|
|
"ATAN ", OCT2033000037010016, 00464900
|
|
"CABS ", OCT2036000045010053, 00465000
|
|
"CCOS ", OCT0066000000010110, 00465100
|
|
"CEXP ", OCT0066000000010100, 00465200
|
|
"CLOG ", OCT0066000000010102, 00465300
|
|
"CMPLX ", OCT0063060000020075, 00465400
|
|
"COMPL ", OCT0033070000010132, 00465500
|
|
"CONCAT", OCT0033000000050140, 00465600
|
|
"CONJG ", OCT0066110000010076, 00465700
|
|
"COSH ", OCT0033000000010121, 00465800
|
|
"COS ", OCT0033000000010015, 00465900
|
|
"COTAN ", OCT0033000000010112, 00466000
|
|
"CSIN ", OCT0066000000010106, 00466100
|
|
"CSQRT ", OCT0066000000010124, 00466200
|
|
"DABS ", OCT0055010000010052, 00466300
|
|
"DATAN2", OCT0055000000020115, 00466400
|
|
"DATAN ", OCT2055000041010113, 00466500
|
|
"DBLE ", OCT0053120000010062, 00466600
|
|
"DCOS ", OCT0055000000010107, 00466700
|
|
"DEXP ", OCT2055000047010077, 00466800
|
|
"DIM ", OCT0033100000020072, 00466900
|
|
"DLOG10", OCT0055000000010104, 00467000
|
|
"DLOG ", OCT2055000042010101, 00467100
|
|
"DMAX1 ", OCT0055000000000066, 00467200
|
|
"DMIN1 ", OCT0055000000000067, 00467300
|
|
"DMOD ", OCT2055000046020065, 00467400
|
|
"DSIGN ", OCT0055130000020071, 00467500
|
|
"DSIN ", OCT2055000043010105, 00467600
|
|
"DSQRT ", OCT2055000050010123, 00467700
|
|
"EQUIV ", OCT0033140000020133, 00467800
|
|
"ERF ", OCT0033000000010125, 00467900
|
|
"EXP ", OCT2033000033010020, 00468000
|
|
"FLOAT ", OCT0031150000010060, 00468100
|
|
"GAMMA ", OCT2033000040010126, 00468200
|
|
"IABS ", OCT0011010000010007, 00468300
|
|
"IDIM ", OCT0011100000020072, 00468400
|
|
"IDINT ", OCT0015240000010057, 00468500
|
|
"IFIX ", OCT0013030000010054, 00468600
|
|
"INT ", OCT0013030000010054, 00468700
|
|
"ISIGN ", OCT0011160000020070, 00468800
|
|
".ERR. ", OCT2000000030000134, 00468900
|
|
".FBINB", OCT0000000000000160, 00469000
|
|
".FINAM", OCT0000000000000154, 00469100
|
|
".FONAM", OCT0000000000000155, 00469200
|
|
".FREFR", OCT0000000000000146, 00469300
|
|
".FREWR", OCT0000000000000153, 00469400
|
|
".FTINT", OCT0000000000000050, 00469500
|
|
".FTNIN", OCT0000000000000156, 00469600
|
|
".FTNOU", OCT0000000000000157, 00469700
|
|
".FTOUT", OCT0000000000000051, 00469800
|
|
".LABEL", OCT0000000000000021, 00469900
|
|
".MATH ", OCT0000000000000055, 00470000
|
|
".MEMHR", OCT0000000000000164, 00470100
|
|
".XTOI ", OCT0000000000000056, 00470200
|
|
"MAX0 ", OCT0011250000000135, 00470300
|
|
"MAX1 ", OCT0013250000000135, 00470400
|
|
"MIN0 ", OCT0011250000000136, 00470500
|
|
"MIN1 ", OCT0013250000000136, 00470600
|
|
"MOD ", OCT0011170000020137, 00470700
|
|
"OR ", OCT0033200000020131, 00470800
|
|
"REAL ", OCT0036210000010073, 00470900
|
|
"SIGN ", OCT0033160000020070, 00471000
|
|
"SINH ", OCT0033000000010120, 00471100
|
|
"SIN ", OCT2033000034010014, 00471200
|
|
"SNGL ", OCT0035230000010061, 00471300
|
|
"SQRT ", OCT2033000031010013, 00471400
|
|
"TANH ", OCT0033000000010122, 00471500
|
|
"TAN ", OCT2033000036010111, 00471600
|
|
"TIME ", OCT0031220000010064, 00471700
|
|
0; 00471800
|
|
BLANKS~INLINEINT[MAX~0] ; 00471900
|
|
FOR SCN~1 STEP 1 UNTIL BLANKS DO 00472000
|
|
BEGIN 00472100
|
|
EQVID~INLINEINT[SCN]; WHILE INT[MAX]!EQVID DO MAX~MAX+2 ; 00472200
|
|
INLINEINT[SCN].INTX~MAX+1 ; 00472300
|
|
END ; 00472400
|
|
INTID.SUBCLASS ~ INTYPE; 00472500
|
|
REALID.SUBCLASS ~ REALTYPE; 00472600
|
|
EQVID ~ ".EQ000"; 00472700
|
|
LISTID ~ ".LI000"; 00472800
|
|
BLANKS ~ " "; 00472900
|
|
ENDSEGTOG ~ TRUE; 00473000
|
|
SCN ~ 7; 00473100
|
|
MAX ~ REAL(NOT FALSE).[9:39]; 00473200
|
|
SUPERMAXCOM~128|(MAXCOM+1) ; 00473300
|
|
SEGPTOG ~ FALSE; %INHIBIT PAGE SKIP AFTER SUBROUTINES %501- 00473400
|
|
END INITIALIZATION; 00473500
|
|
00473600
|
|
ALPHA PROCEDURE NEED(T, C); VALUE T, C; ALPHA T, C; 00473700
|
|
BEGIN INTEGER N; REAL ELBAT; 00473800
|
|
REAL X; 00473900
|
|
LABEL XIT, CHECK; 00474000
|
|
ALPHA INFA, INFB, INFC; 00474100
|
|
COMMENT NEED RETURNS THE ELBAT WORD FOR THE IDENTIFIER T. 00474200
|
|
IF THIS IS THE FIRST OCCURRENCE OF T THEN AN INFO WORD IS BUILT AND 00474300
|
|
GIVEN THEN CLASS C; 00474400
|
|
ELBAT.CLASS ~ C; 00474500
|
|
XTA ~ T; 00474600
|
|
IF C { LABELID THEN 00474700
|
|
BEGIN 00474800
|
|
IF N ~ SEARCH(T) = 0 THEN N ~ ENTER(ELBAT, T) ELSE 00474900
|
|
IF ELBAT ~ GET(N).CLASS = UNKNOWN 00475000
|
|
THEN PUT(N,GET(N)&C[TOCLASS]) 00475100
|
|
ELSE IF ELBAT ! C THEN FLOG(21); 00475200
|
|
GO TO XIT; 00475300
|
|
END; 00475400
|
|
IF N ~ SEARCH(T) = 0 THEN 00475500
|
|
BEGIN 00475600
|
|
IF N ~ GLOBALSEARCH(T) ! 0 THEN GO TO CHECK; 00475700
|
|
N ~ GLOBALENTER(ELBAT, T); 00475800
|
|
GO TO XIT; 00475900
|
|
END; 00476000
|
|
GETALL(N,INFA,INFB,INFC); 00476100
|
|
IF INFA.CLASS = DUMMY THEN BEGIN N ~ INFC.BASE; GO TO CHECK END; 00476200
|
|
IF BOOLEAN(INFA. FORMAL) THEN GO TO CHECK; 00476300
|
|
IF INFA.CLASS ! UNKNOWN THEN 00476400
|
|
BEGIN 00476500
|
|
IF N ~ GLOBALSEARCH(T) ! 0 THEN GO TO CHECK; 00476600
|
|
ELBAT.SUBCLASS ~ INFA.SUBCLASS; 00476700
|
|
N ~ GLOBALENTER(ELBAT, T); 00476800
|
|
GO TO XIT; 00476900
|
|
END; 00477000
|
|
PUT(N, INFA & DUMMY[TOCLASS]); 00477100
|
|
ELBAT.SUBCLASS ~ INFA .SUBCLASS; 00477200
|
|
IF X ~ GLOBALSEARCH(T) = 0 THEN X ~ GLOBALENTER(ELBAT, T); 00477300
|
|
PUT(N+2, INFC & X[TOBASE]); N ~ X; 00477400
|
|
CHECK: 00477500
|
|
INFA ~ GET(N); 00477600
|
|
IF ELBAT ~ INFA .CLASS = UNKNOWN THEN 00477700
|
|
BEGIN INFO[N.IR,N.IC].CLASS ~ C; GO TO XIT END; 00477800
|
|
IF ELBAT ! C THEN 00477900
|
|
IF ELBAT = EXTID AND 00478000
|
|
(C = SUBRID OR C = FUNID) THEN 00478100
|
|
INFO[N.IR,N.IC].CLASS ~ C 00478200
|
|
ELSE IF (ELBAT=SUBRID OR ELBAT= FUNID) AND C = EXTID THEN 00478300
|
|
ELSE FLOG(21); 00478400
|
|
XIT: NEED ~ GETSPACE(N); 00478500
|
|
XTA ~ NAME; % RESTORE XTA FOR DIAGNOSTIC PURPOSES 00478600
|
|
END NEED; 00478700
|
|
00478800
|
|
INTEGER PROCEDURE EXPR(B); VALUE B; BOOLEAN B; FORWARD; 00478900
|
|
00479000
|
|
PROCEDURE SPLIT(A); VALUE A; REAL A; 00479100
|
|
BEGIN 00479200
|
|
EMITPAIR(JUNK, ISN); 00479300
|
|
EMITD(40, DIA); 00479400
|
|
EMITD(18, ISO); 00479500
|
|
EMITDESCLIT(A); 00479600
|
|
EMITO(LOD); 00479700
|
|
EMITOPDCLIT(JUNK); 00479800
|
|
EMITPAIR(255,CHS); 00479900
|
|
EMITO(LND); 00480000
|
|
END SPLIT; 00480100
|
|
BOOLEAN PROCEDURE SUBSCRIPTS(LINK,FROM); VALUE LINK,FROM; 00480200
|
|
INTEGER LINK, FROM; 00480300
|
|
BEGIN INTEGER I, NSUBS, BDLINK; 00480400
|
|
LABEL CONSTRUCT, XIT; 00480500
|
|
REAL SUM, PROD, BOUND; 00480600
|
|
REAL INFA,INFB,INFC; 00480700
|
|
REAL SAVENSEG,SAVEADR ; 00480800
|
|
INTEGER INDX; 00480900
|
|
REAL INFD; 00481000
|
|
BOOLEAN TOG, VARF; 00481100
|
|
REAL SAVIT; 00481200
|
|
DEFINE SS = LSTT#; 00481300
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUBSC","RIPTS ",TRUE ) ; 00481400
|
|
SAVIT ~ IT; 00481500
|
|
LINK ~ GETSPACE(LINK); 00481600
|
|
GETALL(LINK,INFA,INFB,INFC); 00481700
|
|
IF INFA.CLASS ! ARRAYID THEN 00481800
|
|
BEGIN XTA ~ INFB; FLOG(35); GO TO XIT END; 00481900
|
|
NSUBS ~ INFC.NEXTRA; 00482000
|
|
IF FROM = 4 THEN 00482100
|
|
BEGIN IF NSUBS GTR SAVESUBS THEN SAVESUBS ~ NSUBS; 00482200
|
|
IF NSUBS GTR NAMLIST[0] THEN NAMLIST[0] ~ NSUBS; 00482300
|
|
NAMLIST[NAMEIND].[1:8] ~ NSUBS; 00482400
|
|
INFD ~ GET(NEED(".SUBAR",BLOCKID)).ADDR; 00482500
|
|
END; 00482600
|
|
BDLINK ~ INFC.ADINFO-NSUBS+1; 00482700
|
|
VARF ~ INFC < 0; 00482800
|
|
FOR I ~ 1 STEP 1 UNTIL NSUBS DO 00482900
|
|
BEGIN 00483000
|
|
IT~IT+1; SAVENSEG~NSEG; SAVEADR~ADR ; 00483100
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(98); 00483200
|
|
IF ADR=SAVEADR THEN FLAG(36) ; 00483300
|
|
IF VARF THEN 00483400
|
|
IF EXPRESULT=NUMCLASS AND NSEG=SAVENSEG THEN 00483500
|
|
BEGIN 00483600
|
|
ADR~SAVEADR ; 00483700
|
|
EMITNUM(EXPVALUE-1); 00483800
|
|
END ELSE EMITPAIR(1, SUB) 00483900
|
|
ELSE 00484000
|
|
IF EXPRESULT=NUMCLASS AND NSEG = SAVENSEG AND FROM NEQ 4 THEN 00484100
|
|
BEGIN 00484200
|
|
ADR~SAVEADR; IF SS[IT]~EXPVALUE{0 THEN FLAG(154) ; 00484300
|
|
END 00484400
|
|
ELSE SS[IT] ~ @9; 00484500
|
|
IF FROM = 4 THEN 00484600
|
|
BEGIN IF VARF THEN BEGIN EMITO(DUP); EMITPAIR(1,ADD); END; 00484700
|
|
EMITL(INDX); INDX ~ INDX+1; 00484800
|
|
EMITDESCLIT(INFD); 00484900
|
|
EMITO(IF VARF THEN STD ELSE STN); 00485000
|
|
END; 00485100
|
|
IF I < NSUBS THEN 00485200
|
|
BEGIN 00485300
|
|
IF GLOBALNEXT ! COMMA THEN 00485400
|
|
BEGIN XTA ~ INFB; FLOG(23) END; 00485500
|
|
SCAN; 00485600
|
|
END; 00485700
|
|
END; 00485800
|
|
IF GLOBALNEXT ! RPAREN THEN BEGIN XTA ~ INFB; FLOG(24); END 00485900
|
|
ELSE IF FROM < 2 THEN 00486000
|
|
BEGIN SCAN; IF PREC > 0 THEN FROM ~ 1; END; 00486100
|
|
SUM ~ 0; 00486200
|
|
TOG ~ VARF; 00486300
|
|
IF VARF THEN 00486400
|
|
FOR I ~ NSUBS-1 STEP -1 UNTIL 1 DO 00486500
|
|
BEGIN 00486600
|
|
IF BOUND ~ EXTRAINFO[(BDLINK~BDLINK+1).IR,BDLINK.IC] < 0 THEN 00486700
|
|
EMITOPDCLIT(BOUND) ELSE EMITNUM(BOUND); 00486800
|
|
EMITO(MUL); 00486900
|
|
EMITO(ADD); 00487000
|
|
END 00487100
|
|
ELSE 00487200
|
|
FOR I ~ NSUBS STEP -1 UNTIL 1 DO 00487300
|
|
BEGIN 00487400
|
|
IF I = 1 THEN BOUND ~ 1 ELSE 00487500
|
|
BOUND ~ EXTRAINFO[(BDLINK~BDLINK+1).IR,BDLINK.IC]; 00487600
|
|
IF T ~ SS[SAVIT+I] < @9 THEN 00487700
|
|
BEGIN 00487800
|
|
SUM ~ (SUM+T-1)|BOUND; 00487900
|
|
IF TOG THEN PROD ~ PROD|BOUND; 00488000
|
|
END 00488100
|
|
ELSE 00488200
|
|
BEGIN 00488300
|
|
IF TOG THEN BEGIN EMITNUM(PROD); EMITO(MUL); EMITO(ADD) END 00488400
|
|
ELSE TOG ~ TRUE; 00488500
|
|
PROD ~ BOUND; 00488600
|
|
SUM ~ (SUM-1)|BOUND; 00488700
|
|
END; 00488800
|
|
END; 00488900
|
|
IF VARF THEN T ~ @9; 00489000
|
|
IF INFA.SUBCLASS } DOUBTYPE THEN 00489100
|
|
BEGIN 00489200
|
|
IF TOG THEN 00489300
|
|
BEGIN 00489400
|
|
IF T < @9 THEN EMITNUM(2|PROD) ELSE EMITL(2); 00489500
|
|
EMITO(MUL); 00489600
|
|
END; 00489700
|
|
SUM ~ SUM|2; 00489800
|
|
END ELSE 00489900
|
|
IF T < @9 AND TOG THEN BEGIN EMITNUM(PROD); EMITO(MUL) END; 00490000
|
|
IF BOOLEAN(INFA.CE) THEN 00490100
|
|
SUM ~ SUM + INFC.BASE ELSE 00490200
|
|
IF BOOLEAN(INFA.FORMAL) THEN 00490300
|
|
BEGIN EMITOPDCLIT(INFA.ADDR-1); 00490400
|
|
IF TOG THEN EMITO(ADD) ELSE TOG ~ TRUE; 00490500
|
|
END; 00490600
|
|
IF BOOLEAN(INFA.TWOD) AND FROM > 0 THEN 00490700
|
|
BEGIN 00490800
|
|
IF SUM = 0 THEN 00490900
|
|
IF TOG THEN ELSE 00491000
|
|
BEGIN 00491100
|
|
EMITL(0); 00491200
|
|
EMITDESCLIT(INFA.ADDR); 00491300
|
|
EMITO(LOD); 00491400
|
|
EMITL(0); 00491500
|
|
GO TO CONSTRUCT; 00491600
|
|
END 00491700
|
|
ELSE 00491800
|
|
IF TOG THEN 00491900
|
|
BEGIN 00492000
|
|
EMITNUM(ABS(SUM)); 00492100
|
|
IF SUM < 0 THEN EMITO(SUB) ELSE EMITO(ADD); 00492200
|
|
END ELSE 00492300
|
|
BEGIN 00492400
|
|
EMITL(SUM.[33:7]); 00492500
|
|
EMITDESCLIT(INFA.ADDR); 00492600
|
|
EMITO(LOD); 00492700
|
|
EMITL(SUM.[40:8]); 00492800
|
|
GO TO CONSTRUCT; 00492900
|
|
END; 00493000
|
|
SPLIT(INFA.ADDR); 00493100
|
|
CONSTRUCT: 00493200
|
|
IF BOOLEAN(FROM) THEN 00493300
|
|
BEGIN 00493400
|
|
IF INFA.SUBCLASS } DOUBTYPE THEN 00493500
|
|
BEGIN 00493600
|
|
EMITO(CDC); 00493700
|
|
EMITO(DUP); 00493800
|
|
EMITPAIR(1, XCH); 00493900
|
|
EMITO(INX); 00494000
|
|
EMITO(LOD); 00494100
|
|
EMITO(XCH); 00494200
|
|
EMITO(LOD); 00494300
|
|
END ELSE EMITO(COC); 00494400
|
|
END ELSE 00494500
|
|
BEGIN 00494600
|
|
IF SUM = 0 THEN IF NOT TOG THEN EMITL(0) ELSE 00494700
|
|
ELSE 00494800
|
|
BEGIN 00494900
|
|
IF TOG THEN 00495000
|
|
BEGIN 00495100
|
|
EMITNUM(ABS(SUM)); 00495200
|
|
IF SUM < 0 THEN EMITO(SUB) ELSE EMITO(ADD); 00495300
|
|
END 00495400
|
|
ELSE EMITNUM(SUM); 00495500
|
|
END; 00495600
|
|
IF FROM > 0 THEN 00495700
|
|
IF BOOLEAN (FROM) THEN 00495800
|
|
IF INFA.SUBCLASS } DOUBTYPE THEN 00495900
|
|
BEGIN 00496000
|
|
EMITDESCLIT(INFA.ADDR); 00496100
|
|
EMITO(DUP); 00496200
|
|
EMITPAIR(1,XCH); 00496300
|
|
EMITO(INX); 00496400
|
|
EMITO(LOD); 00496500
|
|
EMITO(XCH); 00496600
|
|
EMITO(LOD); 00496700
|
|
END ELSE EMITV(LINK) ELSE 00496800
|
|
BEGIN DESCREQ ~ TRUE; EMITN(LINK); DESCREQ ~ FALSE END; 00496900
|
|
END; 00497000
|
|
XIT: 00497100
|
|
IT ~ SAVIT; 00497200
|
|
SUBSCRIPTS ~ BOOLEAN(FROM); 00497300
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUBSC","RIPTS ",FALSE) ; 00497400
|
|
END SUBSCRIPTS; 00497500
|
|
00497600
|
|
BOOLEAN PROCEDURE BOUNDS(LINK); VALUE LINK; REAL LINK; 00497700
|
|
BEGIN 00497800
|
|
COMMENT CALLED TO PROCESS ARRAY BOUNDS; 00497900
|
|
BOOLEAN VARF, SINGLETOG; %109-00498000
|
|
DEFINE FNEW = LINK#; 00498100
|
|
REAL T, NSUBS, INFA, INFB, INFC, FIRSTSS; 00498200
|
|
LABEL LOOP; 00498300
|
|
IF DEBUGTOG THEN FLAGROUTINE(" BOU","NDS ",TRUE ); 00498400
|
|
GETALL(FNEW, INFA, INFB, INFC); 00498500
|
|
FIRSTSS ~ NEXTSS; 00498600
|
|
IF LINK < 0 THEN BEGIN SINGLETOG ~ TRUE; LINK ~ ABS(LINK) END; %109-00498700
|
|
LOOP: 00498800
|
|
IF NEXT = ID THEN 00498900
|
|
BEGIN 00499000
|
|
T ~ GET(FNEXT ~ GETSPACE(FNEXT)); 00499100
|
|
IF T.CLASS ! VARID OR NOT BOOLEAN(T.FORMAL) THEN FLAG(92) ELSE 00499200
|
|
IF T.SUBCLASS > REALTYPE THEN FLAG(93); 00499300
|
|
T ~ -T.ADDR; 00499400
|
|
VARF ~ TRUE; 00499500
|
|
END ELSE 00499600
|
|
IF NEXT = NUM THEN 00499700
|
|
BEGIN 00499800
|
|
IF NUMTYPE!INTYPE THEN FLAG(113); 00499900
|
|
IF T~FNEXT=0 THEN FLAG(122) ; 00500000
|
|
IF NOT VARF THEN IF NSUBS = 0 THEN LENGTH ~ FNEXT ELSE 00500100
|
|
LENGTH ~ LENGTH|FNEXT; 00500200
|
|
END ELSE FLOG(122); 00500300
|
|
EXTRAINFO[NEXTSS.IR,NEXTSS.IC] ~ T; 00500400
|
|
NEXTSS ~ NEXTSS-1; 00500500
|
|
NSUBS ~ NSUBS+1; 00500600
|
|
SCAN; 00500700
|
|
IF NEXT = COMMA THEN BEGIN SCAN; GO TO LOOP END; 00500800
|
|
IF NEXT ! RPAREN THEN FLOG(94); 00500900
|
|
XTA ~ INFB; 00501000
|
|
IF INFA.CLASS = ARRAYID THEN FLAG(95); 00501100
|
|
INFA.CLASS ~ ARRAYID; 00501200
|
|
IF VARF THEN 00501300
|
|
BEGIN 00501400
|
|
IF NOT BOOLEAN(INFA.FORMAL) THEN FLAG(96); 00501500
|
|
IF NSUBS > 1 OR INFA .SUBCLASS } DOUBTYPE THEN 00501600
|
|
BEGIN BUMPLOCALS;LENGTH~LOCALS + 1536;BOUNDS~TRUE END ELSE 00501700
|
|
LENGTH ~-EXTRAINFO[FIRSTSS.IR,FIRSTSS.IC]; 00501800
|
|
END ELSE 00501900
|
|
IF NOT SINGLETOG AND INFA.SUBCLASS > LOGTYPE THEN %109-00502000
|
|
BEGIN LENGTH ~ 2 | LENGTH; BOUNDS ~ TRUE END; %109-00502100
|
|
IF LENGTH > 32767 THEN FLAG(99); 00502200
|
|
INFC ~ LENGTH & NSUBS[TONEXTRA] & FIRSTSS[TOADINFO]; 00502300
|
|
IF VARF THEN INFC ~ -INFC; 00502400
|
|
PUT(FNEW, INFA); PUT(FNEW+2, INFC); 00502500
|
|
SCAN; 00502600
|
|
IF DEBUGTOG THEN FLAGROUTINE(" BOU","NDS ",FALSE) ; 00502700
|
|
END BOUNDS; 00502800
|
|
00502900
|
|
PROCEDURE PARAMETERS(LINK); VALUE LINK; REAL LINK; 00503000
|
|
BEGIN 00503100
|
|
LABEL LOOP; 00503200
|
|
REAL NPARMS, EX, INFC, PTYPE; 00503300
|
|
ALPHA EXPNAME; 00503400
|
|
BOOLEAN CHECK, INTFID; 00503500
|
|
BOOLEAN NOTZEROP; 00503600
|
|
REAL SAVIT; 00503700
|
|
DEFINE PARMTYPE = LSTT#; 00503800
|
|
SAVIT ~ IT ~ IT+1; 00503900
|
|
IF DEBUGTOG THEN FLAGROUTINE(" PARAM","ETERS ",TRUE ) ; 00504000
|
|
INFC ~ GET(LINK+2); 00504100
|
|
IF CHECK ~ BOOLEAN(INFC.[1:1]) THEN 00504200
|
|
BEGIN 00504300
|
|
EX ~ INFC.ADINFO; 00504400
|
|
NOTZEROP ~ INFC.NEXTRA ! 0; 00504500
|
|
INTFID ~ INFC.[36:12] = 1; 00504600
|
|
END; 00504700
|
|
LOOP: 00504800
|
|
BEGIN SCAN; 00504900
|
|
EXPNAME ~ NAME; 00505000
|
|
IF GLOBALNEXT = 0 AND NAME = "$ " THEN 00505100
|
|
BEGIN EXPRESULT ~ LABELID; SCAN; 00505200
|
|
IF GLOBALNEXT ! NUM THEN FLAG(44); 00505300
|
|
EMITLABELDESC(NAME); 00505400
|
|
PTYPE ~ 0; 00505500
|
|
SCAN; 00505600
|
|
END 00505700
|
|
ELSE PTYPE ~ EXPR(CHECK AND EXTRAINFO[EX.IR,EX.IC].CLASS 00505800
|
|
= EXPCLASS AND INTFID); 00505900
|
|
IF EXPRESULT = NUMCLASS THEN 00506000
|
|
IF PTYPE = STRINGTYPE THEN 00506100
|
|
BEGIN 00506200
|
|
ADR ~ ADR - 1; 00506300
|
|
PTYPE ~ INTYPE; 00506400
|
|
EXPRESULT ~ SUBSVAR; 00506500
|
|
IF STRINGSIZE = 1 AND 00506600
|
|
(T ~ EXTRAINFO[EX.IR,EX.IC].CLASS = VARID OR 00506700
|
|
T = EXPCLASS) THEN 00506800
|
|
BEGIN 00506900
|
|
EXPRESULT ~ EXPCLASS; 00507000
|
|
EMITNUM(STRINGARRAY[0]); 00507100
|
|
END ELSE 00507200
|
|
BEGIN 00507300
|
|
EXPRESULT~ARRAYID; 00507400
|
|
EMITPAIR(PRGDESCBLDR(1,0,0,NXAVIL~NXAVIL+1), LOD); 00507500
|
|
EMITL(0); 00507600
|
|
WRITEDATA(STRINGSIZE, NXAVIL, STRINGARRAY); 00507700
|
|
END; 00507800
|
|
END ELSE EXPRESULT ~ EXPCLASS; 00507900
|
|
PARMTYPE[IT] ~ 0 & EXPRESULT[TOCLASS] & PTYPE[TOSUBCL]; 00508000
|
|
XTA ~ EXPNAME; 00508100
|
|
IF TSSEDITOG THEN IF (EXPRESULT=FUNID OR EXPRESULT=SUBRID OR 00508200
|
|
EXPRESULT=EXTID) AND NOT DCINPUT THEN TSSED(XTA,2); 00508300
|
|
IF DCINPUT THEN IF EXPRESULT=FUNID OR EXPRESULT=SUBRID 00508400
|
|
OR EXPRESULT=EXTID THEN FLAG(151) ; 00508500
|
|
IF CHECK THEN 00508600
|
|
BEGIN 00508700
|
|
IF T ~ EXTRAINFO[EX.IR,EX.IC].CLASS ! EXPRESULT THEN 00508800
|
|
CASE T OF 00508900
|
|
BEGIN 00509000
|
|
EXTRAINFO[EX.IR,EX.IC] ~ 0 & EXPRESULT[TOCLASS] 00509100
|
|
& PTYPE[TOSUBCL]; 00509200
|
|
IF EXPRESULT ! SUBSVAR THEN FLAG(66); 00509300
|
|
IF EXPRESULT = SUBSVAR THEN 00509400
|
|
IF NOT INTFID THEN 509500
|
|
BEGIN EMITO(CDC); 00509600
|
|
IF PTYPE } DOUBTYPE THEN EMITL(0); 00509700
|
|
END ELSE 00509800
|
|
ELSE 00509900
|
|
IF EXPRESULT = EXPCLASS THEN 00510000
|
|
BEGIN IF PTYPE } DOUBTYPE THEN EMITO(XCH); 00510100
|
|
EXTRAINFO[EX.IR,EX.IC].CLASS ~ EXPCLASS 00510200
|
|
END ELSE FLAG(67); 00510300
|
|
; ; ; 00510400
|
|
FLAG(68); 00510500
|
|
IF EXPRESULT = EXTID THEN 00510600
|
|
PUT(EXPLINK,GET(EXPLINK)&FUNID[TOCLASS]) ELSE 00510700
|
|
FLAG(69); 00510800
|
|
; 00510900
|
|
IF EXPRESULT = FUNID OR EXPRESULT = SUBRID THEN 00511000
|
|
EXTRAINFO[EX.IR,EX.IC] ~ EXPRESULT ELSE FLAG(70); 00511100
|
|
IF EXPRESULT = EXTID THEN 00511200
|
|
PUT(EXPLINK,GET(EXPLINK)&SUBRID[TOCLASS]) ELSE 00511300
|
|
FLAG(71); 00511400
|
|
; ; 00511500
|
|
IF EXPRESULT = ARRAYID THEN EXTRAINFO[EX.IR,EX.IC].CLASS 00511600
|
|
~ ARRAYID ELSE 00511700
|
|
IF EXPRESULT = VARID THEN 00511800
|
|
BEGIN 00511900
|
|
EXTRAINFO[EX.IR,EX.IC].CLASS ~ SBVEXP; 00512000
|
|
EMITL(0) 00512100
|
|
END ELSE 00512200
|
|
IF EXPRESULT = EXPCLASS THEN 00512300
|
|
BEGIN 00512400
|
|
EXTRAINFO[EX.IR,EX.IC].CLASS ~ SBVEXP; 00512500
|
|
IF PTYPE } DOUBTYPE THEN EMITO(XCH) ELSE EMITL(0); 00512600
|
|
END ELSE FLAG(72); 00512700
|
|
IF EXPRESULT = SUBSVAR THEN 00512800
|
|
IF NOT INTFID THEN 00512900
|
|
BEGIN EMITO(CDC); 00513000
|
|
IF PTYPE } DOUBTYPE THEN EMITL(0) 00513100
|
|
END 00513200
|
|
ELSE 00513300
|
|
ELSE IF EXPRESULT = VARID THEN 00513400
|
|
IF NOT INTFID THEN 00513500
|
|
IF PTYPE } DOUBTYPE THEN EMITL(0) ELSE ELSE 00513600
|
|
ELSE FLAG(67); 00513700
|
|
IF EXPRESULT = VARID THEN 00513800
|
|
EMITL(0) ELSE 00513900
|
|
IF EXPRESULT = EXPCLASS THEN 00514000
|
|
IF PTYPE } DOUBTYPE THEN EMITO(XCH) ELSE EMITL(0) 00514100
|
|
ELSE IF EXPRESULT ! SUBSVAR THEN FLAG(67); 00514200
|
|
END OF CASE STATEMENT 00514300
|
|
ELSE IF PTYPE } DOUBTYPE THEN 00514400
|
|
IF EXPRESULT = VARID THEN EMITL(0) 00514500
|
|
ELSE IF EXPRESULT = EXPCLASS AND NOT INTFID 00514600
|
|
THEN EMITO(XCH); 00514700
|
|
IF T ~ EXTRAINFO[EX.IR,EX.IC].SUBCLASS = 0 OR 00514800
|
|
(T = INTYPE AND PTYPE = REALTYPE AND 00514900
|
|
GET(LINK).SEGNO = 0) THEN 00515000
|
|
EXTRAINFO[EX.IR,EX.IC].SUBCLASS ~ PTYPE ELSE 00515100
|
|
IF NOT(T = PTYPE OR T = REALTYPE AND PTYPE = INTYPE ) THEN 00515200
|
|
FLAG(88); 00515300
|
|
END OF CHECK 00515400
|
|
ELSE IF PTYPE } DOUBTYPE THEN 00515500
|
|
IF EXPRESULT = VARID THEN EMITL(0) 00515600
|
|
ELSE IF EXPRESULT = EXPCLASS THEN EMITO(XCH); 00515700
|
|
IF NOTZEROP THEN EX ~ EX+1; 00515800
|
|
IT ~ IT+1; 00515900
|
|
END; 00516000
|
|
IF GLOBALNEXT = COMMA THEN GO TO LOOP; 00516100
|
|
NPARMS ~ IT - SAVIT; 00516200
|
|
IF GLOBALNEXT ! RPAREN THEN FLOG(108); 00516300
|
|
IF NOT CHECK THEN 00516400
|
|
BEGIN 00516500
|
|
INFC ~ GET(LINK+2); 00516600
|
|
INFC ~ -(INFC & NPARMS[TONEXTRA] 00516700
|
|
& NEXTEXTRA[TOADINFO]); 00516800
|
|
PUT(LINK+2,INFC); 00516900
|
|
FOR I ~ SAVIT STEP 1 UNTIL IT-1 DO 00517000
|
|
BEGIN 00517100
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC] ~ PARMTYPE[I]; 00517200
|
|
NEXTEXTRA ~ NEXTEXTRA+1; 00517300
|
|
END; 00517400
|
|
END 00517500
|
|
ELSE 00517600
|
|
IF T ~ GET(LINK+2).NEXTRA > 0 AND T ! NPARMS OR 00517700
|
|
T=0 AND INTFID AND NPARMS < 2 OR 00517800
|
|
T = 0 AND NOT INTFID THEN 00517900
|
|
BEGIN XTA ~ GET(LINK+1); FLAG(28) END; 00518000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" PARAM","ETERS ",FALSE) ; 00518100
|
|
IT ~ SAVIT-1; 00518200
|
|
END PARAMETERS; 00518300
|
|
00518400
|
|
PROCEDURE STMTFUNREF(LINK); VALUE LINK; REAL LINK; 00518500
|
|
BEGIN 00518600
|
|
REAL I, PARMLINK, NPARMS, SEG; 00518700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" STMTF","UNREF ",TRUE); 00518800
|
|
PARMLINK ~ GET(LINK+2).[36:12]; 00518900
|
|
DO 00519000
|
|
BEGIN 00519100
|
|
SCAN; 00519200
|
|
IF A~EXPR(TRUE) ! B~GET(PARMLINK).SUBCLASS THEN 00519300
|
|
IF A > REALTYPE OR B > REALTYPE THEN %108-00519400
|
|
BEGIN XTA ~ NNEW; FLAG(88) END; 00519500
|
|
PARMLINK ~ PARMLINK-3; 00519600
|
|
NPARMS ~ NPARMS+1; 00519700
|
|
END UNTIL NEXT ! COMMA; 00519800
|
|
IF NEXT ! RPAREN THEN FLAG(108); 00519900
|
|
SCAN; 00520000
|
|
GETALL(LINK, INFA, XTA, INFC); 00520100
|
|
IF NPARMS ! INFC.NEXTRA THEN FLAG(28); 00520200
|
|
SEG ~ INFA.SEGNO; 00520300
|
|
BRANCHLIT(INFC.BASE&SEG[TOSEGNO],FALSE); 00520400
|
|
EMITB(INFA.ADDR & SEG[TOSEGNO], FALSE); 00520500
|
|
ADJUST; 00520600
|
|
IF DEBUTOG THEN FLAGROUTINE(" STMTF","UNREF ",FALSE); 00520700
|
|
END STMTFUNREF; 00520800
|
|
00520900
|
|
BOOLEAN PROCEDURE DOITINLINE(LNK); VALUE LNK; REAL LNK ; 00521000
|
|
BEGIN 00521100
|
|
REAL C,I,C1,C2,C3,C4,C5 ; 00521200
|
|
LABEL HUNT,FOUND,XIT,AIMAG,AINT,CMPLX,LOOP,DDT111,SNGL ; 00521300
|
|
DEFINE OPTYPE=LSTT#, E0=EMITO#, EP=EMITPAIR#, EOL=EMITOPDCLIT# ;00521400
|
|
IF DEBUGTOG THEN FLAGROUTINE("DOITIN","LINE ",TRUE); 00521500
|
|
C1~1; C2~INLINEINT[0]; C3~GET(ABS(LNK)+1) ; 00521600
|
|
HUNT: 00521700
|
|
IF (C~INLINEINT[I~(C1+C2).[36:11]].INAM)<C3 THEN C1~I+1 00521800
|
|
ELSE IF C>C3 THEN C2~I-1 ELSE GO FOUND ; 00521900
|
|
IF C1<C2 THEN GO HUNT ; 00522000
|
|
IF INLINEINT[C1].INAM!C3 THEN 00522100
|
|
BEGIN 00522200
|
|
IF LNK<0 THEN DOITINLINE~BOOLEAN(LOOKFORINTRINSIC(-LNK)) ; 00522300
|
|
GO XIT ; 00522400
|
|
END ; 00522500
|
|
I~C1 ; 00522600
|
|
FOUND: 00522700
|
|
C1~(C~INT[C2~(C4~INLINEINT[I]).INTX]).INTPARMCLASS ; 00522800
|
|
IF LNK<0 THEN 00522900
|
|
BEGIN 00523000
|
|
I~-LNK; DOITINLINE~BOOLEAN(LNK~NEED(C3,FUNID)) ; 00523100
|
|
IF (C2~GET(LNK+2))<0 THEN GO XIT ; 00523200
|
|
PUT(LNK+2,-(C2&(I~C.INTPARMS)[TONEXTRA]&NEXTEXTRA[TOADINFO]));00523300
|
|
FOR I~I STEP -1 UNTIL 1 DO 00523400
|
|
BEGIN 00523500
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC]~0&EXPCLASS[TOCLASS] 00523600
|
|
&C1[TOSUBCL] ; 00523700
|
|
NEXTEXTRA~NEXTEXTRA+1 ; 00523800
|
|
END ; 00523900
|
|
INFO[LNK.IR,LNK.IC].SUBCLASS~C.INTCLASS ; 00524000
|
|
GO XIT ; 00524100
|
|
END ; 00524200
|
|
IF BOOLEAN(LNK.[2:1]) THEN 00524300
|
|
STACKHEAD[GET((NEXTINFO~NEXTINFO-3)+1) MOD SHX]~GET(NEXTINFO).LINK;00524400
|
|
LNK~C.INTINLINE; INT[C2].INTSEEN~1; DOITINLINE~TRUE ; 00524500
|
|
IF C4>0 THEN INLINEINT[I]~-C4; I~0 ; 00524600
|
|
IF XREF THEN ENTERX(C3,0&FUNID[TOCLASS]&C[21:6:3]); 00524700
|
|
IF GLOBALNEXT!LPAREN THEN BEGIN FLOG(106); GO XIT END ; 00524800
|
|
LOOP: SCAN; C5~XTA ; 00524900
|
|
IF I=0 THEN 00525000
|
|
IF LNK=10 THEN EMITL(0) ELSE IF LNK=21 THEN EMITDESCLIT(2) ; 00525100
|
|
IF (C4~EXPR(TRUE))!C1 AND (C1!REALTYPE OR C4!INTYPE) THEN 00525200
|
|
BEGIN XTA~C5; FLAG(88); C2~-2 END ; 00525300
|
|
I~I+1; IF GLOBALNEXT=COMMA THEN GO LOOP ; 00525400
|
|
IF GLOBALNEXT!RPAREN THEN BEGIN FLOG(108); C2~-2 END; SCAN ; 00525500
|
|
IF I!C.INTPARMS THEN IF C.INTPARMS!0 OR I<2 THEN 00525600
|
|
BEGIN XTA~C3; FLAG(28); C2~-2 END ; 00525700
|
|
OPTYPE[IT]~C.INTCLASS; IF C2<0 THEN GO XIT ; 00525800
|
|
CASE (LNK-1) OF 00525900
|
|
BEGIN 00526000
|
|
E0(SSP) ; % @1: ABS, DABS, IABS. 00526100
|
|
AIMAG: E0(DEL) ; % @2: AIMAG. 00526200
|
|
AINT: EP(1,IDV) ; % @3: AINT, IFIX, INT. 00526300
|
|
E0(RDV) ; % @4: AMOD. 00526400
|
|
E0(LND) ; % @5: LOGICAL AND. 00526500
|
|
CMPLX: E0(XCH) ; % @6: CMPLX. 00526600
|
|
E0(LNG) ; % @7: LOGICAL COMPLIMENT (NEGATION). 00526700
|
|
BEGIN % @10: DIM, IDIM. 00526800
|
|
E0(SUB); E0(DUP); EP(0,LESS) ; 00526900
|
|
IF ADR>4082 THEN BEGIN ADR~ADR+1; SEGOVF END ; 00527000
|
|
EP(2,BFC); E0(DEL); EMITL(0) ; 00527100
|
|
END ; 00527200
|
|
BEGIN E0(XCH); E0(CHS); GO CMPLX END ; % @11: CONJG. 00527300
|
|
; % @12: DBLE (SOME CODE ALREADY EMITTED ABOVE). 00527400
|
|
BEGIN E0(XCH); E0(DEL) ; % @13: DSIGN. 00527500
|
|
DDT111: EMITDDT(1,1,1) ; 00527600
|
|
END; 00527700
|
|
E0(LQV) ; % @14: LOGICAL EQUIVALENCE. 00527800
|
|
; % @15: FLOAT. 00527900
|
|
GO DDT111 ; % @16: ISIGN, SIGN. 00528000
|
|
BEGIN E0(RDV); GO AINT END ; % @17: MOD. 00528100
|
|
E0(LOR) ; % @20: LOGICAL OR. 00528200
|
|
BEGIN E0(XCH); GO AIMAG END ; % @21: REAL. 00528300
|
|
EP(1,KOM) ; % @22: TIME. 00528400
|
|
BEGIN % @23: SNGL. 00528500
|
|
SNGL: EP(9,SND); E0(XCH); EMITDDT(47,9,1); EMITL(0) ; 00528600
|
|
EMITDDT(9,9,38); EOL(9); EMITO(ADD); IF LNK=20 THEN GO AINT ; 00528700
|
|
END ; 00528800
|
|
GO SNGL ; % @24: IDINT. 00528900
|
|
00529000
|
|
BEGIN % @25: AMAX0,AMAX1,AMIN0,AMIN1,MAX0,MAX1,MIN0,MIN1. 00529100
|
|
% SOME CODE ALREADY EMITTED ABOVE. 00529200
|
|
IF ADR>4068 THEN BEGIN ADR~ADR+1; SEGOVF END ; 00529300
|
|
EP(9,STD); E0(DUP); EOL(9) ; 00529400
|
|
E0(IF C3.[24:6]="A" OR C3.[24:6]="X" THEN LESS ELSE GRTR) ; 00529500
|
|
EP(2,BFC); E0(DEL); EOL(9); E0(XCH); E0(TOP); E0(LNG) ; 00529600
|
|
EP(14,BBC); E0(DEL); IF C3="MIN1 " OR C3="MAX1 " THEN GO AINT00529700
|
|
END ; 00529800
|
|
00529900
|
|
END OF CASE STATEMENT ; 00530000
|
|
XIT: 00530100
|
|
IF DEBUGTOG THEN FLAGROUTINE("DOITIN","LINE ",FALSE) ; 00530200
|
|
END OF DOITINLINE ; 00530300
|
|
00530400
|
|
REAL PROCEDURE LOOKFORINTRINSIC(L); VALUE L; REAL L; 00530500
|
|
BEGIN 00530600
|
|
ALPHA ID, I, X, NPARMS; 00530700
|
|
REAL T; 00530800
|
|
LABEL FOUND, XIT; 00530900
|
|
IF DEBUGTOG THEN FLAGROUTINE("LOOKFO","RINTRN",TRUE); 00531000
|
|
LOOKFORINTRINSIC ~ L ~ NEED(ID ~ GET(L+1),FUNID); 00531100
|
|
IF GET(L+2) < 0 THEN GO TO XIT; % PARAMETER INFO KNOWN 00531200
|
|
COMMENT B MUST BE SET TO K/2, WHERE K IS THE INDEX OF THE LAST 00531300
|
|
INTRINSIC NAME IN THE ARRAY INT; 00531400
|
|
A~0; B~NUMINTM1 ; 00531500
|
|
WHILE A+1 < B DO 00531600
|
|
BEGIN 00531700
|
|
I ~ REAL(BOOLEAN(A+B) AND BOOLEAN(1022)); 00531800
|
|
IF Z ~ INT[I] = ID THEN GO TO FOUND; 00531900
|
|
IF ID < Z THEN B ~ I.[36:11] ELSE A ~ I.[36:11]; 00532000
|
|
END; 00532100
|
|
IF ID = INT[I~(A+B)|2-I] THEN GO TO FOUND; 00532200
|
|
GO TO XIT; 00532300
|
|
FOUND: 00532400
|
|
NPARMS~(X~INT[I+1]).INTPARMS; INT[I+1].INTSEEN~1 ; 00532500
|
|
INFO[L.IR,L.IC].SUBCLASS~X.INTCLASS ; 00532600
|
|
PUT(L+2,-(1&NEXTEXTRA[TOADINFO]&NPARMS[TONEXTRA])); 00532700
|
|
IF NPARMS = 0 THEN NPARMS ~ 1; 00532800
|
|
T~X.INTPARMCLASS ; 00532900
|
|
FOR I ~ 1 STEP 1 UNTIL NPARMS DO 00533000
|
|
BEGIN 00533100
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC] ~ 00533200
|
|
0 & EXPCLASS[TOCLASS] & T[TOSUBCL]; 00533300
|
|
NEXTEXTRA ~ NEXTEXTRA + 1; 00533400
|
|
END; 00533500
|
|
XIT: 00533600
|
|
IF DEBUGTOG THEN FLAGROUTINE("LOOKFO","RINTRN",FALSE ) ; 00533700
|
|
END LOOKFORINTRINSIC; 00533800
|
|
INTEGER PROCEDURE EXPR(VALREQ); VALUE VALREQ; BOOLEAN VALREQ; 00533900
|
|
BEGIN LABEL LOOP, STACK, XIT, NOSCAN; REAL T; 00534000
|
|
00534100
|
|
LABEL ARRY; 00534200
|
|
LABEL HERE ; 00534300
|
|
REAL SAVIT, SAVIP; 00534400
|
|
BOOLEAN CNSTSEENLAST; %FOR HANDLING CONSTANT %113-00534500
|
|
REAL SAVEADR; %EXPONENTS %113-00534600
|
|
DEFINE OPTYPE = LSTT#; 00534700
|
|
REAL EXPRESLT,EXPLNK; 00534800
|
|
REAL EXPV; 00534900
|
|
REAL TM ; 00535000
|
|
DEFINE E0=EMITO#, EP=EMITPAIR#, EOL=EMITOPDCLIT#, 00535100
|
|
ES1(OP)=BEGIN E0(XCH); EP(9,STD); E0(OP) END #, 00535200
|
|
ES2=BEGIN EP(9,STD); E0(XCH); EP(17,SND); E0(MUL) END # ; 00535300
|
|
LABEL CTYP, DTYP, RLESSC, DLESSC, CLESSD, CLESSC, RPLUSD, DTIMESC, 00535400
|
|
CTIMESR, CDIVBYD, CTIMESR1, CTIMESR2, DLESSC1 ; 00535500
|
|
LABEL SPECCHAR, RELATION; 00535600
|
|
REAL LINK; 00535700
|
|
DEFINE T1 = EXPT1#, T2 = EXPT2#, CODE = EXPT3#; 00535800
|
|
COMMENT THE FOLLOWING TABLE GIVES THE PRECEDENCE (PREC) AND 00535900
|
|
OPERATOR NUMBER (OP) OF THE ARITHMETIC AND LOGICAL OPERATORS. 00536000
|
|
OPERATOR PREC OP 00536100
|
|
** 9 15 00536200
|
|
UNARY - 8 12 00536300
|
|
/ 7 14 00536400
|
|
* 7 13 00536500
|
|
- 5 11 00536600
|
|
+ 5 10 00536700
|
|
.NE. 4 9 00536800
|
|
.GE. 4 8 00536900
|
|
.GT. 4 7 00537000
|
|
.EQ. 4 6 00537100
|
|
.LE. 4 5 00537200
|
|
.LT. 4 4 00537300
|
|
.NOT. 3 3 00537400
|
|
.AND. 2 2 00537500
|
|
.OR. 1 1 00537600
|
|
THE UNARY PLUS IS IGNORED; 00537700
|
|
PROCEDURE MATH(D, C, T); VALUE D, C, T; REAL D, C, T; 00537800
|
|
BEGIN 00537900
|
|
EMITO(MKS); 00538000
|
|
EMITL(C); 00538100
|
|
EMITV(NEED(".MATH ", INTRFUNID)); 00538200
|
|
EMITO(DEL); 00538300
|
|
IF D = 2 THEN EMITO(DEL); 00538400
|
|
OPTYPE[IT~IT-1] ~ T; 00538500
|
|
END MATH; 00538600
|
|
NNEW ~ NAME; 00538700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EXPRE","SSION ",TRUE ) ; 00538800
|
|
OPTYPE[SAVIT ~IT ~ IT+1] ~ 00538900
|
|
PR[SAVIP~IP~IP+1] ~ OPST[IP] ~ 0; 00539000
|
|
IF GLOBALNEXT = PLUS THEN GO TO LOOP; 00539100
|
|
IF GLOBALNEXT = MINUS THEN 00539200
|
|
BEGIN PREC ~ 8; OP ~ 12; GO TO STACK END; 00539300
|
|
IF PREC > 0 THEN GO TO STACK; 00539400
|
|
LINK~(EXPLNK~FNEXT)&REAL(SCANENTER)[2:47:1] ; 00539500
|
|
GO TO NOSCAN; 00539600
|
|
LOOP: SCAN; 00539700
|
|
LINK ~ FNEXT; 00539800
|
|
NOSCAN: 00539900
|
|
CNSTSEENLAST~FALSE; %113- 00540000
|
|
IF GLOBALNEXT = ID THEN 00540100
|
|
BEGIN 00540200
|
|
IF IP ! SAVIP THEN EXPRESLT ~ EXPCLASS; 00540300
|
|
OPTYPE[IT~IT+1] ~ (A~GET(LINK)).SUBCLASS; 00540400
|
|
SCAN; 00540500
|
|
IF NOT RANDOMTOG THEN 00540600
|
|
IF NEXT=EQUAL THEN BEGIN NEXT~0; OP~6; PREC~4 END ; 00540700
|
|
IF GLOBALNEXT = ID OR GLOBALNEXT = NUM THEN 00540800
|
|
BEGIN FLOG(1); GO TO XIT END; 00540900
|
|
IF NOT VALREQ AND PREC > 0 THEN VALREQ ~ TRUE; 00541000
|
|
IF GLOBALNEXT ! LPAREN THEN 00541100
|
|
BEGIN 00541200
|
|
LINK ~ GETSPACE(LINK); 00541300
|
|
T ~ (A~GET(LINK)).CLASS; 00541400
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&A[15:15:9]); 00541500
|
|
IF EXPRESLT = 0 THEN EXPRESLT ~ T; 00541600
|
|
IF VALREQ THEN 00541700
|
|
IF T = VARID THEN EMITV(LINK) ELSE 00541800
|
|
BEGIN XTA ~ GET(LINK+1); FLAG(50) END 00541900
|
|
ELSE 00542000
|
|
BEGIN 00542100
|
|
IF T = VARID THEN 00542200
|
|
IF GLOBALNEXT > SLASH AND EXPRESLT = VARID THEN 00542300
|
|
BEGIN 00542400
|
|
DESCREQ~TRUE; EMITN(LINK); DESCREQ ~ FALSE; 00542500
|
|
GO TO XIT; 00542600
|
|
END ELSE EMITV(LINK) 00542700
|
|
ELSE 00542800
|
|
BEGIN 00542900
|
|
IF T = ARRAYID THEN 00543000
|
|
BEGIN 00543100
|
|
IF BOOLEAN(A.CE) THEN 00543200
|
|
EMITNUM(GET(LINK+2).BASE) ELSE 00543300
|
|
IF BOOLEAN(A.FORMAL) THEN 00543400
|
|
EMITOPDCLIT(A.ADDR-1) ELSE 00543500
|
|
EMITL(0); 00543600
|
|
GO TO ARRY; 00543700
|
|
END ELSE EMITPAIR(A.ADDR,LOD); 00543800
|
|
GO TO XIT; 00543900
|
|
END; 00544000
|
|
END; 00544100
|
|
GO TO SPECCHAR; 00544200
|
|
END; 00544300
|
|
IF A.CLASS ! ARRAYID THEN 00544400
|
|
BEGIN COMMENT FUNCTION REFERENCE; 00544500
|
|
EXPRESLT ~ EXPCLASS; 00544600
|
|
IF A.CLASS = STMTFUNID THEN 00544700
|
|
BEGIN 00544800
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&A[15:15:9]); 00544900
|
|
STMTFUNREF(LINK) ; 00545000
|
|
IF NEXT=EQUAL THEN IF NOT RANDOMTOG THEN 00545100
|
|
BEGIN NEXT~0; OP~6; PREC~4 END ; 00545200
|
|
GO TO SPECCHAR ; 00545300
|
|
END ; 00545400
|
|
IF A.CLASS=EXTID OR GET(TM~GLOBALSEARCH(GET(LINK+1))).CLASS=00545500
|
|
EXTID THEN LINK~REAL(DOITINLINE(-LINK)) ELSE 00545600
|
|
IF A.CLASS<FUNID AND TM=0 THEN 00545700
|
|
IF DOITINLINE(LINK) THEN GO HERE ELSE 00545800
|
|
LINK ~ LOOKFORINTRINSIC(LINK) ELSE 00545900
|
|
LINK ~ NEED(GET(LINK+1),FUNID); 00546000
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&GET(LINK)[15:15:9]); 00546100
|
|
EMITO(MKS); 00546200
|
|
PARAMETERS(LINK); 00546300
|
|
IF ERRORTOG THEN GO TO XIT ELSE SCAN; 00546400
|
|
EMITV(LINK ); 00546500
|
|
IF OPTYPE[IT] ~ GET(LINK).SUBCLASS } DOUBTYPE THEN 00546600
|
|
EMITOPDCLIT(JUNK); 00546700
|
|
HERE: IF NEXT=EQUAL THEN 00546800
|
|
IF NOT RANDOMTOG THEN BEGIN NEXT~0; PREC~4; OP~6 END ; 00546900
|
|
END ELSE 00547000
|
|
BEGIN COMMENT ARRAY REFERENCE; 00547100
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&A[15:15:9]); 00547200
|
|
SCAN; 00547300
|
|
VALREQ ~ SUBSCRIPTS(LINK,REAL(VALREQ)); 00547400
|
|
IF ERRORTOG THEN GO TO XIT; 00547500
|
|
IF NEXT=EQUAL THEN IF NOT RANDOMTOG THEN 00547600
|
|
BEGIN NEXT~0; OP~6; PREC~4 END ; 00547700
|
|
IF EXPRESLT = 0 THEN EXPRESLT ~ SUBSVAR; 00547800
|
|
IF NOT VALREQ THEN 00547900
|
|
BEGIN 00548000
|
|
IF GLOBALNEXT > SLASH AND EXPRESLT = SUBSVAR THEN 00548100
|
|
BEGIN 00548200
|
|
ARRY: 00548300
|
|
IF BOOLEAN((A~GET(LINK)).TWOD) THEN 00548400
|
|
BEGIN 00548500
|
|
EMITPAIR(TWODPRT, LOD); 00548600
|
|
T ~ A.ADDR; 00548700
|
|
IF T { 1023 THEN 00548800
|
|
BEGIN 00548900
|
|
EMITL(T.[38:10]); 00549000
|
|
EMITDESCLIT(10); 00549100
|
|
END ELSE 00549200
|
|
BEGIN 00549300
|
|
EMITL(T.[40:8]); 00549400
|
|
EMITDESCLIT(1536); 00549500
|
|
EMITO(INX); 00549600
|
|
END; 00549700
|
|
EMITO(CTF); 00549800
|
|
END ELSE EMITPAIR(A.ADDR,LOD); 00549900
|
|
EMITO(XCH); 00550000
|
|
GO TO XIT; 00550100
|
|
END; 00550200
|
|
IF BOOLEAN((A~GET(LINK)).TWOD) THEN 00550300
|
|
BEGIN 00550400
|
|
SPLIT(A.ADDR); 00550500
|
|
IF A.SUBCLASS } DOUBTYPE THEN 00550600
|
|
BEGIN 00550700
|
|
EMITO(CDC); 00550800
|
|
EMITO(DUP); 00550900
|
|
EMITPAIR(1, XCH); 00551000
|
|
EMITO(INX); 00551100
|
|
EMITO(LOD); 00551200
|
|
EMITO(XCH); 00551300
|
|
EMITO(LOD); 00551400
|
|
END ELSE EMITO(COC); 00551500
|
|
END ELSE 00551600
|
|
EMITV(LINK); 00551700
|
|
END; 00551800
|
|
END ARRAY REFERENCE; 00551900
|
|
GO TO SPECCHAR; 00552000
|
|
END; 00552100
|
|
IF GLOBALNEXT = NUM THEN 00552200
|
|
BEGIN 00552300
|
|
IF NUMTYPE = STRINGTYPE THEN 00552400
|
|
IF VALREQ THEN 00552500
|
|
BEGIN 00552600
|
|
NUMTYPE~INTYPE ; 00552700
|
|
IF STRINGSIZE=1 THEN FNEXT~STRINGARRAY[0] 00552800
|
|
ELSE BEGIN 00552900
|
|
IF STRINGSIZE>2 OR STRINGARRAY[1].[18:30]!" " THEN 00553000
|
|
FLAG(162) ; 00553100
|
|
IF (FNEXT~STRINGARRAY[1].[12:6]&STRINGARRAY[0][6:12:36]) 00553200
|
|
.[6:6]>7 THEN NUMTYPE~REALTYPE ; 00553300
|
|
END ; 00553400
|
|
END; 00553500
|
|
SAVEADR~ADR; CNSTSEENLAST~TRUE; %113-00553600
|
|
IF NUMTYPE = DOUBTYPE THEN 00553700
|
|
EMITNUM2(FNEXT,DBLOW) ELSE EMITNUM (FNEXT); 00553800
|
|
OPTYPE[IT~IT+1] ~ NUMTYPE; 00553900
|
|
IF EXPRESLT = 0 THEN 00554000
|
|
BEGIN EXPRESLT ~ NUMCLASS; EXPV ~ FNEXT END; 00554100
|
|
SCAN; 00554200
|
|
IF NOT RANDOMTOG THEN 00554300
|
|
IF NEXT=EQUAL THEN BEGIN NEXT~0; OP~6; PREC~4 END; 00554400
|
|
IF NOT VALREQ AND PREC > 0 THEN VALREQ ~ TRUE; 00554500
|
|
IF GLOBALNEXT = ID OR GLOBALNEXT = NUM THEN 00554600
|
|
BEGIN FLOG(1); GO TO XIT END; 00554700
|
|
END; 00554800
|
|
SPECCHAR: 00554900
|
|
IF GLOBALNEXT = LPAREN THEN 00555000
|
|
BEGIN 00555100
|
|
SCAN; 00555200
|
|
OPTYPE[IT~IT+1] ~ EXPR(TRUE); 00555300
|
|
IF GLOBALNEXT = COMMA AND EXPRESULT = NUMCLASS THEN 00555400
|
|
BEGIN 00555500
|
|
IF OPTYPE[IT] > REALTYPE THEN FLAG(85); 00555600
|
|
SCAN; 00555700
|
|
IF EXPR(TRUE) > REALTYPE 00555800
|
|
OR EXPRESULT ! NUMCLASS THEN FLAG(85); 00555900
|
|
EMITO(XCH); 00556000
|
|
OPTYPE[IT] ~ COMPTYPE; 00556100
|
|
IF EXPRESLT = 0 THEN EXPRESLT ~ NUMCLASS; 00556200
|
|
END ELSE EXPRESLT ~ EXPCLASS; 00556300
|
|
IF GLOBALNEXT ! RPAREN THEN 00556400
|
|
BEGIN FLOG(108); GO TO XIT END; 00556500
|
|
GO TO LOOP; 00556600
|
|
END; 00556700
|
|
WHILE PR[IP] } PREC DO 00556800
|
|
BEGIN 00556900
|
|
IF IT { SAVIT THEN GO TO XIT; 00557000
|
|
CODE ~ MAP[T1~OPTYPE[IT-1]]|3 + MAP[T2~OPTYPE[IT]]; 00557100
|
|
CASE OPST[IP] OF 00557200
|
|
BEGIN 00557300
|
|
GO TO XIT; 00557400
|
|
BEGIN 00557500
|
|
IF T1 = LOGTYPE AND T2 = LOGTYPE THEN EMITO(LOR) 00557600
|
|
ELSE FLAG(51); 00557700
|
|
IT ~ IT-1; 00557800
|
|
END; 00557900
|
|
BEGIN 00558000
|
|
IF T1 = LOGTYPE AND T2 = LOGTYPE THEN EMITO(LND) 00558100
|
|
ELSE FLAG(52); 00558200
|
|
IT ~ IT-1; 00558300
|
|
END; 00558400
|
|
IF T2 = LOGTYPE THEN EMITO(LNG) ELSE FLAG(53); 00558500
|
|
BEGIN T ~ LESS; GO TO RELATION END; 00558600
|
|
BEGIN T ~ LEQL; GO TO RELATION END; 00558700
|
|
BEGIN T ~ EQUL; GO TO RELATION END; 00558800
|
|
BEGIN T ~ GRTR; GO TO RELATION END; 00558900
|
|
BEGIN T ~ GEQL; GO TO RELATION END; 00559000
|
|
BEGIN T ~ NEQL; 00559100
|
|
RELATION: 00559200
|
|
IF CODE < 0 THEN FLAG(54) ELSE 00559300
|
|
CASE CODE OF 00559400
|
|
BEGIN ; 00559500
|
|
BEGIN 00559600
|
|
E0(CHS); EP(9,STD); E0(XCH); EOL(9); E0(XCH); EP(0,XCH) ;00559700
|
|
E0(AD2) ; 00559800
|
|
END; 00559900
|
|
FLAG(90); 00560000
|
|
BEGIN EMITPAIR(0, XCH); EMITO(SB2) END; 00560100
|
|
EMITO(SB2); 00560200
|
|
FLAG(90); 00560300
|
|
FLAG(90); 00560400
|
|
FLAG(90); 05605000
|
|
IF T! EQUL AND T! NEQL THEN FLAG(54) %103-00560600
|
|
ELSE %103-00560700
|
|
BEGIN %103-00560800
|
|
EP(9,STD); E0(XCH); EOL(9); E0(T); %103-00560900
|
|
EP(9,STD ); E0(T); EOL(9); %103-00560910
|
|
T~(IF T=EQUL THEN LND ELSE LOR); CODE~0; %103-00561000
|
|
END; %103-00561100
|
|
END RELATION CASE STATEMENT; 00561200
|
|
IF CODE > 0 THEN 00561300
|
|
BEGIN EMITO(XCH); EMITO(DEL); EMITL(0) END; 00561400
|
|
EMITO(T); 00561500
|
|
OPTYPE[IT~IT-1] ~ LOGTYPE; 00561600
|
|
END; 00561700
|
|
IF CODE < 0 THEN BEGIN FLAG(53); IT ~ IT-1 END ELSE 00561800
|
|
CASE CODE OF 00561900
|
|
BEGIN 00562000
|
|
BEGIN 00562100
|
|
EMITO(ADD); 00562200
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 00562300
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 00562400
|
|
END; 00562500
|
|
BEGIN TM~AD2 ; 00562600
|
|
RPLUSD: EP(9,STD); E0(XCH); EOL(9); E0(XCH); EP(0,XCH); E0(TM) ; 00562700
|
|
DTYP: OPTYPE[IT~IT-1]~DOUBTYPE ; 00562800
|
|
END ; 00562900
|
|
BEGIN TM~ADD; GO RLESSC END ; 00563000
|
|
BEGIN 00563100
|
|
EMITPAIR(0, XCH); 00563200
|
|
EMITO(AD2); 00563300
|
|
IT ~ IT-1; 00563400
|
|
END; 00563500
|
|
BEGIN EMITO(AD2); IT ~ IT-1 END; 00563600
|
|
BEGIN TM~ADD; GO DLESSC END ; 00563700
|
|
BEGIN EMITO(ADD); IT ~ IT-1 END; 00563800
|
|
BEGIN TM~ADD; GO CLESSD END ; 00563900
|
|
BEGIN TM~ADD; GO CLESSC END ; 00564000
|
|
END ADD CASE STATEMENT; 00564100
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 00564200
|
|
CASE CODE OF 00564300
|
|
BEGIN 00564400
|
|
BEGIN 00564500
|
|
EMITO(SUB); 00564600
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 00564700
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 00564800
|
|
END; 00564900
|
|
BEGIN E0(CHS); TM~AD2; GO RPLUSD END; 00565000
|
|
BEGIN TM~SUB ; 00565100
|
|
RLESSC: ES1(TM); GO DLESSC1 ; 00565200
|
|
END ; 00565300
|
|
BEGIN 00565400
|
|
EMITPAIR(0, XCH); 00565500
|
|
EMITO(SB2); 00565600
|
|
IT ~ IT-1; 00565700
|
|
END; 00565800
|
|
BEGIN EMITO(SB2); IT ~ IT-1 END; 00565900
|
|
BEGIN TM~SUB ; 00566000
|
|
DLESSC: ES1(TM); E0(XCH); E0(DEL) ; 00566100
|
|
DLESSC1: EOL(9); IF TM=SUB THEN E0(CHS); GO CTIMESR2 ; 00566200
|
|
END ; 00566300
|
|
BEGIN EMITO(SUB); IT ~ IT-1 END; 00566400
|
|
BEGIN TM~SUB ; 00566500
|
|
CLESSD: E0(XCH); E0(DEL); E0(TM) ; 00566600
|
|
CTYP: OPTYPE[IT~IT-1]~COMPTYPE ; 00566700
|
|
END ; 00566800
|
|
BEGIN TM~SUB ; 00566900
|
|
CLESSC: ES1(TM); GO CTIMESR1 ; 00567000
|
|
END ; 00567100
|
|
END SUBTRACT CASE STATEMENT; 00567200
|
|
BEGIN % HANDLE NEGATIVE NUMBERS CASE STATEMENT. 00567300
|
|
EXPV~-EXPV ; 00567400
|
|
IF T2 { REALTYPE THEN EMITO(CHS) ELSE 00567500
|
|
IF T2 = LOGTYPE THEN FLAG(55) ELSE 00567600
|
|
IF T2 = DOUBTYPE THEN EMITO(CHS) ELSE 00567700
|
|
IF T2 = COMPTYPE THEN 00567800
|
|
BEGIN 00567900
|
|
EMITO(CHS); EMITO(XCH); 00568000
|
|
EMITO(CHS); EMITO(XCH); 00568100
|
|
END ELSE FLAG(55); 00568200
|
|
END OF NEG NUMBERS CASE STATEMNT ; 00568300
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 00568400
|
|
CASE CODE OF 00568500
|
|
BEGIN 00568600
|
|
BEGIN 00568700
|
|
EMITO(MUL); 00568800
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 00568900
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 00569000
|
|
END; 00569100
|
|
BEGIN TM~ML2; GO RPLUSD END ; 00569200
|
|
BEGIN ES2; GO DTIMESC END ; 00569300
|
|
BEGIN 00569400
|
|
EMITPAIR(0, XCH); 00569500
|
|
EMITO(ML2); 00569600
|
|
IT ~ IT-1; 00569700
|
|
END; 00569800
|
|
BEGIN EMITO(ML2); IT ~ IT-1 END; 00569900
|
|
BEGIN ES2; E0(XCH); E0(DEL) ; 00570000
|
|
DTIMESC: EOL(9); EOL(17); E0(MUL); GO CTYP ; 00570100
|
|
END ; 00570200
|
|
BEGIN TM~MUL ; 00570300
|
|
CTIMESR: EP(9,SND); E0(TM) ; 00570400
|
|
CTIMESR1:E0(XCH); EOL(9); E0(TM) ; 00570500
|
|
CTIMESR2:E0(XCH); GO CTYP ; 00570600
|
|
END ; 00570700
|
|
BEGIN TM~MUL; GO CDIVBYD END ; 00570800
|
|
MATH(2, 26, COMPTYPE); 00570900
|
|
END MULTIPLY CASE STATEMENT; 00571000
|
|
00571100
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 00571200
|
|
CASE CODE OF 00571300
|
|
BEGIN 00571400
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN 00571500
|
|
BEGIN EMITO(IDV); IT ~ IT-1 END ELSE 00571600
|
|
BEGIN EMITO(DIU); OPTYPE[IT~IT-1] ~ REALTYPE END; 00571700
|
|
BEGIN 00571800
|
|
EP(9,STD); EP(17,STD); EP(0,XCH); EOL(17); EOL(9); E0(DV2) ; 00571900
|
|
GO DTYP ; 00572000
|
|
END ; 00572100
|
|
MATH(1, 29, COMPTYPE); 00572200
|
|
BEGIN 00572300
|
|
EMITPAIR(0, XCH); 00572400
|
|
EMITO(DV2); 00572500
|
|
IT ~ IT-1; 00572600
|
|
END; 00572700
|
|
BEGIN EMITO(DV2); IT ~ IT-1 END; 00572800
|
|
MATH(2, 32, COMPTYPE); 00572900
|
|
BEGIN TM~DIU; GO CTIMESR END ; 00573000
|
|
BEGIN TM~DIU ; 00573100
|
|
CDIVBYD: E0(XCH); E0(DEL); GO CTIMESR ; 00573200
|
|
END ; 00573300
|
|
MATH(2, 35, COMPTYPE); 00573400
|
|
END OF DIVIDE CASE STATEMENT; 00573500
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 00573600
|
|
BEGIN 00573700
|
|
IF CODE = 0 AND T2 = INTYPE AND 00573800
|
|
CNSTSEENLAST THEN %113-00573900
|
|
BEGIN 00574000
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 00574100
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 00574200
|
|
EXPV~LINK; %113- 00574300
|
|
A~1; ADR~SAVEADR; %113- 00574400
|
|
WHILE EXPV DIV 2 ! 0 DO 00574500
|
|
BEGIN 00574600
|
|
EMITO(DUP); 00574700
|
|
IF BOOLEAN(EXPV) THEN BEGIN A~A+1; EMITO(DUP) END; 00574800
|
|
EMITO(MUL); 00574900
|
|
EXPV ~ EXPV DIV 2; 00575000
|
|
END; 00575100
|
|
IF EXPV = 0 THEN BEGIN EMITO(DEL); EMITL(1) END ELSE 00575200
|
|
WHILE A ~ A-1 ! 0 DO EMITO(MUL); 00575300
|
|
END ELSE 00575400
|
|
BEGIN 00575500
|
|
EMITO(MKS); 00575600
|
|
EMITL(CODE); 00575700
|
|
EMITV(NEED(".XTOI ", INTRFUNID)); 00575800
|
|
CASE CODE OF 00575900
|
|
BEGIN 00576000
|
|
BEGIN EMITO(DEL); OPTYPE[IT~IT-1]~IF (T1=INTYPE AND T2=INTYPE)00576100
|
|
THEN INTYPE ELSE REALTYPE END; 00576200
|
|
BEGIN EMITO(DEL); OPTYPE[IT~IT-1] ~ DOUBTYPE END; 00576300
|
|
BEGIN EMITO(DEL); OPTYPE[IT~IT-1]~COMPTYPE END ; 00576400
|
|
BEGIN EMITO(DEL); IT ~ IT-1 END; 00576500
|
|
BEGIN EMITO(DEL); EMITO(DEL); IT ~ IT-1 END; 00576600
|
|
BEGIN EMITO(DEL); EMITO(DEL); OPTYPE[IT~IT-1]~COMPTYPE END ; 00576700
|
|
BEGIN EMITO(DEL); IT ~ IT-1 END; 00576800
|
|
BEGIN EMITO(DEL); EMITO(DEL); IT ~ IT-1 END; 00576900
|
|
BEGIN EMITO(DEL); EMITO(DEL); IT~IT-1 END ; 00577000
|
|
END OF POWER CASE STATEMENT; 00577100
|
|
END; 00577200
|
|
END; 00577300
|
|
END; 00577400
|
|
IP ~ IP-1; 00577500
|
|
END; 00577600
|
|
EXPRESLT ~ EXPCLASS; 00577700
|
|
STACK: 00577800
|
|
PR[IP~IP+1] ~ PREC; 00577900
|
|
OPST[IP] ~ OP; 00578000
|
|
IF PREC > 0 AND PREC { 4 THEN 00578100
|
|
BEGIN 00578200
|
|
SCAN; LINK ~ FNEXT; 00578300
|
|
IF NEXT = PLUS THEN GO TO LOOP; 00578400
|
|
IF NEXT ! MINUS THEN GO TO NOSCAN; 00578500
|
|
PREC ~ 8; OP ~ 12; 00578600
|
|
GO TO STACK; 00578700
|
|
END; 00578800
|
|
GO TO LOOP; 00578900
|
|
XIT: IF IP ! SAVIP THEN FLOG(56); 00579000
|
|
IP ~ SAVIP-1; 00579100
|
|
EXPR ~ OPTYPE[IT]; 00579200
|
|
IF OPTYPE[IT-1] ! 0 THEN FLOG(56); 00579300
|
|
IT ~ SAVIT-1; 00579400
|
|
EXPRESULT ~ EXPRESLT; 00579500
|
|
EXPVALUE ~ EXPV; 00579600
|
|
EXPLINK ~ EXPLNK; 00579700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EXPRE","SSION ",FALSE) ; 00579800
|
|
END EXPR; 00579900
|
|
00580000
|
|
PROCEDURE FAULT (X); 00580100
|
|
VALUE X; 00580200
|
|
REAL X; 00580300
|
|
BEGIN REAL LINK; LABEL XIT; 00580400
|
|
SCAN; IF GLOBALNEXT ! LPAREN THEN BEGIN FLAG(106); GO XIT END; 00580500
|
|
SCAN; IF GLOBALNEXT ! ID THEN BEGIN FLAG(66); GO TO XIT END; 00580600
|
|
IF X = 1 THEN PDPRT[0,0] ~ PDPRT[0,0] & 1[44:47:1] ELSE 00580700
|
|
PDPRT[0,0] ~ PDPRT [0,0] & 1[43 :47:1]; 00580800
|
|
EMITOPDCLIT(41); EMITO(DUP); 00580900
|
|
IF X = 1 THEN BEGIN EMITL(2); EMITO(XCH); EMITL(1) END 00581000
|
|
ELSE EMITL(6); 00581100
|
|
EMITO(LND); 00581200
|
|
IF X = 2 THEN EMITL(3); 00581300
|
|
EMITO(SUB); 00581400
|
|
IF X = 2 THEN 00581500
|
|
BEGIN EMITO(DUP); EMITL(3); EMITO(SSN) ;EMITO(EQUL); EMITL(2)00581600
|
|
;EMITO(BFC) ; EMITO(DEL);EMITL(2); 00581700
|
|
END; 00581800
|
|
LINK ~ GET(GETSPACE(FNEXT)); EMITPAIR(LINK.ADDR,ISD); 00581900
|
|
IF X = 1 THEN EMITL(30) ELSE EMITL(25); 00582000
|
|
EMITO(LND); EMITL(41);EMITO(STD); 00582100
|
|
SCAN; IF GLOBALNEXT ! RPAREN THEN FLAG(108); 00582200
|
|
SCAN; 00582300
|
|
XIT: 00582400
|
|
END FAULT; 00582500
|
|
PROCEDURE SUBREF; 00582600
|
|
BEGIN REAL LINK,INFC; 00582700
|
|
REAL ACCIDENT; 00582800
|
|
LABEL XIT; 00582900
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUB","REF ",TRUE ) ; 00583000
|
|
IF TSSEDITOG THEN IF NAME="ZIP " AND NOT DCINPUT THEN TSSED(NAME,3) ; 00583100
|
|
IF NAME = "EXIT " THEN 00583200
|
|
BEGIN 00583300
|
|
RETURNFOUND ~ TRUE; 00583400
|
|
EMITL(1); 00583500
|
|
EMITPAIR(16,STD); 00583600
|
|
EMITPAIR(10,KOM); 00583700
|
|
EMITPAIR( 5, KOM); 00583800
|
|
PUT(FNEXT+1, "......"); 00583900
|
|
SCAN; 00584000
|
|
END ELSE IF NAME="ZIP " AND NOT DCINPUT THEN 00584100
|
|
BEGIN 00584200
|
|
EMITO(MKS); 00584300
|
|
EMITL(0); EMITL(0); % DUMMY FILE AND FORMAT 00584400
|
|
EMITPAIR(-1,SSN); 00584500
|
|
EMITB(-1,FALSE); LADR1~LAX; ADJUST; DESCREQ~FALSE; 00584600
|
|
IF ADR } 4085 THEN BEGIN ADR~ADR+1; SEGOVF END; 00584700
|
|
ACCIDENT~PRGDESCBLDR(0,0,ADR.[36:10]+1,NSEG); 00584800
|
|
EMITOPDCLIT(19); 00584900
|
|
EMITO(GFW); 00585000
|
|
LISTART ~ ADR&NSEG[TOSEGNO]; ADJUST;SCAN; 00585100
|
|
IF GLOBALNEXT!LPAREN THEN BEGIN FLAG(106);GO TO XIT END; 00585200
|
|
SCAN; IF GLOBALNEXT!ID THEN BEGIN FLAG(66); GO TO XIT END; 00585300
|
|
LINDX ~ FNEXT; SCAN; XTA ~ GET(LINDX+1); 00585400
|
|
IF GLOBALNEXT!RPAREN THEN BEGIN FLAG(108); GO TO XIT END; 00585500
|
|
LINDX ~ GETSPACE(LINDX); 00585600
|
|
IF T~(LINFA~GET(LINDX)).CLASS!ARRAYID THEN 00585700
|
|
BEGIN FLAG(66); GO TO XIT END; 00585800
|
|
IF XREF THEN ENTERX(XTA,0&LINFA[15:15:9]); 00585900
|
|
EMITPAIR(LADDR~LINFA.ADDR,LOD); 00586000
|
|
IF BOOLEAN(LINFA.FORMAL) THEN 00586100
|
|
BEGIN 00586200
|
|
IF T ~ GET(LINDX+2)<0 THEN EMITOPDCLIT(T.SIZE) 00586300
|
|
ELSE EMITNUM(T.SIZE); EMITOPDCLIT(LADDR-1); EMITO(CTF) END 00586400
|
|
ELSE EMITNUM(GET(LINDX+2).BASENSIZE); EMITL(18); EMITO(STD);; 00586500
|
|
EMITL(LINFA.CLASNSUB&0[44:47:1]); EMITL(19); EMITO(STD); 00586600
|
|
BRANCHLIT(LISTART,TRUE); EMITL(19); EMITO(STD); 00586700
|
|
EMITO(RTS); ADJUST; 00586800
|
|
EMITL(1); EMITO(CHS); EMITL(19); EMITO(STD); 00586900
|
|
EMITDESCLIT(19); EMITO(RTS); FIXB(LADR1); DESCREQ~FALSE; 00587000
|
|
EMITPAIR(ACCIDENT,LOD); EMITOPDCLIT(7); EMITO(FTF); 00587100
|
|
EMITL(6); % EDITCODE 6 FOR ZIP 00587200
|
|
EMITV(NEED(".FTOUT",INTRFUNID)); SCAN 00587300
|
|
END ELSE IF NAME = "OVERFL" THEN FAULT(2) 00587400
|
|
ELSE IF NAME = "DVCHK " THEN FAULT(1) 00587500
|
|
ELSE 00587600
|
|
BEGIN 00587700
|
|
LINK ~ NEED(NAME, SUBRID); 00587800
|
|
IF XREF THEN ENTERX(XTA,0&GET(LINK)[15:15:5]); 00587900
|
|
EMITO(MKS); 00588000
|
|
SCAN; 00588100
|
|
IF GLOBALNEXT = LPAREN THEN 00588200
|
|
BEGIN PARAMETERS(LINK); SCAN END ELSE 00588300
|
|
IF NOT BOOLEAN((INFC~GET(LINK+2)).[1:1]) THEN 00588400
|
|
PUT(LINK+2,-INFC) ELSE 00588500
|
|
IF INFC.NEXTRA ! 0 THEN 00588600
|
|
BEGIN XTA ~ GET(LINK+1); FLAG(28) END; 00588700
|
|
EMITV(LINK); 00588800
|
|
END; 00588900
|
|
XIT: 00589000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUB","REF ",FALSE) ; 00589100
|
|
END SUBREF; 00589200
|
|
00589300
|
|
PROCEDURE DECLAREPARMS(FNEW); VALUE FNEW; REAL FNEW; 00589400
|
|
BEGIN 00589500
|
|
REAL I, T, NLABELS, INFA, INFB, INFC; 00589600
|
|
IF DEBUGTOG THEN FLAGROUTINE("DECLAR","EPARMS",TRUE ) ; 00589700
|
|
INFA ~ GET(FNEW); 00589800
|
|
IF INFA.SEGNO ! 0 THEN BEGIN XTA ~ NNEW; FLAG(25) END; 00589900
|
|
INFA.SEGNO ~ NSEG; PUT(FNEW,INFA); 00590000
|
|
ENTRYLINK[ELX] ~ 0 & FNEW[TOLINK] & NEXTSS[TOADDR]; 00590100
|
|
FOR I ~ 1 STEP 1 UNTIL PARMS DO 00590200
|
|
BEGIN 00590300
|
|
EXTRAINFO[NEXTSS.IR,NEXTSS.IC] ~ PARMLINK[I]; 00590400
|
|
NEXTSS ~ NEXTSS-1; 00590500
|
|
IF T ~ PARMLINK[I] ! 0 THEN 00590600
|
|
BEGIN 00590700
|
|
GETALL(T,INFA,INFB,INFC); 00590800
|
|
IF BOOLEAN(INFA .FORMAL) THEN 00590900
|
|
BEGIN 00591000
|
|
IF INFA.SEGNO = ELX THEN 00591100
|
|
BEGIN XTA ~ INFB ; FLAG(26) END; 00591200
|
|
END ELSE IF (INFA < 0 AND INFA.ADDR < 1024) OR BOOLEAN(INFA.CE)00591300
|
|
THEN BEGIN XTA ~ INFB; FLAG(107) END; 00591400
|
|
INFA ~ INFA & 1[TOFORMAL] & ELX[TOSEGNO]; 00591500
|
|
INFC .BASE ~ I; 00591600
|
|
PUT(T,INFA); PUT(T+2,INFC); 00591700
|
|
END ELSE NLABELS ~ NLABELS+1; 00591800
|
|
END; 00591900
|
|
IF NLABELS > 0 THEN 00592000
|
|
BEGIN ENTRYLINK[ELX ].CLASS ~ NLABELS; 00592100
|
|
IF LABELMOM=0 THEN BEGIN BUMPLOCALS; LABELMOM~LOCALS+1536 END; 00592200
|
|
END; 00592300
|
|
GETALL(FNEW,INFA,INFB,INFC); 00592400
|
|
IF BOOLEAN(INFC.[1:1]) THEN 00592500
|
|
BEGIN 00592600
|
|
IF INFC.NEXTRA ! PARMS THEN 00592700
|
|
BEGIN XTA ~ INFB; FLOG(41); 00592800
|
|
PARMS ~ INFC.NEXTRA; 00592900
|
|
END; 00593000
|
|
T ~ INFC.ADINFO; 00593100
|
|
FOR I ~ 1 STEP 1 UNTIL PARMS DO 00593200
|
|
IF NOT(PARMLINK[I] = 0 EQV 00593300
|
|
EXTRAINFO[(T+I-1).IR,(T+I-1).IC].CLASS = LABELID) THEN 00593400
|
|
BEGIN IF PARMLINK[I] = 0 THEN XTA ~ "* " 00593500
|
|
ELSE XTA ~ GET(PARMLINK[I]+1); 00593600
|
|
FLAG(40); 00593700
|
|
END; 00593800
|
|
END 00593900
|
|
ELSE 00594000
|
|
BEGIN 00594100
|
|
IF PARMS = 0 THEN INFC ~ -INFC ELSE 00594200
|
|
INFC ~ -(INFC & PARMS[TONEXTRA] 00594300
|
|
& NEXTEXTRA[TOADINFO]); 00594400
|
|
PUT(FNEW+2,INFC); 00594500
|
|
FOR I ~ 1 STEP 1 UNTIL PARMS DO 00594600
|
|
BEGIN 00594700
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC] ~ 0 & 00594800
|
|
(IF PARMLINK[I] = 0 THEN LABELID ELSE 0)[TOCLASS]; 00594900
|
|
NEXTEXTRA ~ NEXTEXTRA+1; 00595000
|
|
END; 00595100
|
|
END; 00595200
|
|
IF ELX ~ ELX+1 > MAXEL THEN BEGIN FLAG(128); ELX ~ 0 END; 00595300
|
|
IF DEBUGTOG THEN FLAGROUTINE("DECLAR","EPARMS",FALSE) ; 00595400
|
|
END DECLAREPARMS; 00595500
|
|
PROCEDURE IOLIST(LEVEL); REAL LEVEL; 00595600
|
|
BEGIN ALPHA LADR2,T; 00595700
|
|
BOOLEAN A; 00595800
|
|
INTEGER INDX,I,BDLINK,NSUBS; 00595900
|
|
LABEL ROUND,XIT,ERROR,LOOP,SCRAM; 00596000
|
|
INTEGER STREAM PROCEDURE CNTNAM(IDEN); VALUE IDEN; 00596100
|
|
BEGIN LABEL XIT; 00596200
|
|
SI ~ LOC IDEN; SI ~ SI + 3; TALLY ~ 1; 00596300
|
|
5(IF SC = " " THEN JUMP OUT TO XIT;SI ~ SI+1;TALLY ~ TALLY+1); 00596400
|
|
XIT: CNTNAM ~ TALLY; 00596500
|
|
END CNTNAM; 00596600
|
|
IF DEBUGTOG THEN FLAGROUTINE(" IOL","IST ",TRUE ) ; 00596700
|
|
ROUND: DESCREQ ~ TRUE; 00596800
|
|
LOCALNAME ~ FALSE; 00596900
|
|
IF GLOBALNEXT = SEMI THEN GO TO XIT; 00597000
|
|
IF GLOBALNEXT = STAR THEN 00597100
|
|
BEGIN IF NOT NAMEDESC THEN 00597200
|
|
TV ~ ENTER(0&LISTSID[TOCLASS],LISTID~LISTID+1); 00597300
|
|
LOCALNAME ~ TRUE; NAMEDESC ~ TRUE; SCAN; 00597400
|
|
END; 00597500
|
|
IF GLOBALNEXT = ID THEN 00597600
|
|
BEGIN LINDX ~ FNEXT; 00597700
|
|
SCAN; XTA ~ GET(LINDX+1); 00597800
|
|
IF GLOBALNEXT = EQUAL THEN %RETURN TO CALLER 00597900
|
|
BEGIN IF (LINFA~GET(GETSPACE(LINDX))).CLASS ! VARID THEN FLAG(50);00598000
|
|
SCRAM: IF (LEVEL ~ LEVEL-1) < 0 THEN FLOG(97); 00598100
|
|
GO TO XIT; 00598200
|
|
END; 00598300
|
|
00598400
|
|
IF DATASTMTFLAG AND SPLINK } 0 THEN %DECLARE OWN 00598500
|
|
BEGIN 00598600
|
|
IF BOOLEAN(GET(LINDX).FORMAL) THEN FLAG(147); 00598700
|
|
IF SPLINK>1 THEN 00598800
|
|
IF GET(LINDX).ADDR>1023 THEN FLAG(174); 00598900
|
|
LINDX ~ GETSPACE(-LINDX); 00599000
|
|
IF BOOLEAN(GET(LINDX).EQ) THEN FLAG(168); 00599100
|
|
END ELSE LINDX ~ GETSPACE(LINDX); 00599200
|
|
IF T ~ (LINFA~GET(LINDX)).CLASS > VARID THEN FLAG(50); 00599300
|
|
IF XREF THEN ENTERX(XTA,C2&LINFA[15:15:9]); 00599400
|
|
IF GLOBALNAME OR LOCALNAME THEN 00599500
|
|
IF NAMEIND~ NAMEIND+1 GTR LSTMAX THEN FLOG(161) 00599600
|
|
ELSE NAMLIST[NAMEIND] ~ XTA & CNTNAM(XTA)[9:45:3]; 00599700
|
|
IF T = ARRAYID THEN 00599800
|
|
IF GLOBALNEXT ! LPAREN THEN 00599900
|
|
BEGIN IF SPLINK ! 1 THEN 00600000
|
|
BEGIN 00600100
|
|
EMITL(0); 00600200
|
|
EMITPAIR(LADDR ~ LINFA.ADDR,LOD); 00600300
|
|
EMITO(FTC); 00600400
|
|
EMITDESCLIT(2); 00600500
|
|
EMITO(INX); 00600600
|
|
EMITO(LOD); 00600700
|
|
END ELSE EMITPAIR(LADDR-LINFA.ADDR,LOD); 00600800
|
|
NSUBS ~ (T ~ GET (LINDX+2)).NEXTRA; 00600900
|
|
IF GLOBALNAME OR LOCALNAME THEN 00601000
|
|
BEGIN 00601100
|
|
IF NSUBS GTR SAVESUBS THEN SAVESUBS ~ NSUBS; 00601200
|
|
IF NSUBS GTR NAMLIST[0] THEN NAMLIST[0] ~ NSUBS; 00601300
|
|
NAMLIST[NAMEIND].[1:8] ~ NSUBS; 00601400
|
|
INDX ~ -1; 00601500
|
|
INFA ~ GET(NEED(".SUBAR",BLOCKID)).ADDR; 00601600
|
|
BDLINK ~ T.ADINFO+1; 00601700
|
|
END; 00601800
|
|
IF BOOLEAN (LINFA.FORMAL) THEN 00601900
|
|
BEGIN 00602000
|
|
IF T LSS 0 THEN EMITOPDCLIT(T.SIZE) 00602100
|
|
ELSE EMITNUM(T.SIZE); 00602200
|
|
EMITOPDCLIT(LADDR-1); 00602300
|
|
EMITO(CTF); 00602400
|
|
END ELSE EMITNUM(T.BASENSIZE); 00602500
|
|
IF GLOBALNAME OR LOCALNAME THEN 00602600
|
|
FOR I ~ 1 STEP 1 UNTIL NSUBS DO 00602700
|
|
BEGIN IF T ~ EXTRAINFO[(BDLINK~BDLINK-1).IR, 00602800
|
|
BDLINK.IC] LSS 0 THEN EMITOPDCLIT(T) 00602900
|
|
ELSE EMITNUM(T); 00603000
|
|
EMITNUM(INDX ~ INDX+1); 00603100
|
|
EMITDESCLIT(INFA); 00603200
|
|
EMITO(STD); 00603300
|
|
END; 00603400
|
|
EMITL(18); EMITO(STD); 00603500
|
|
END ELSE 00603600
|
|
BEGIN SCAN; 00603700
|
|
A ~(IF GLOBALNAME OR LOCALNAME 00603800
|
|
THEN SUBSCRIPTS(LINDX,4) ELSE SUBSCRIPTS(LINDX,2)); 00603900
|
|
SCAN; 00604000
|
|
END 00604100
|
|
ELSE EMITN(LINDX); 00604200
|
|
IF GLOBALNAME OR LOCALNAME THEN 00604300
|
|
BEGIN EMITOPDCLIT(18); EMITNUM(NAMEIND); 00604400
|
|
EMITD(43,DIA); EMITD(3,DIB); EMITD(15,TRB); 00604500
|
|
EMITL(18); EMITO(STD); 00604600
|
|
END; 00604700
|
|
EMITL(LINFA.CLASNSUB&0[44:47:1]); 00604800
|
|
EMITL(20); EMITO(STD); 00604900
|
|
IF ADR > 4083 THEN 00605000
|
|
BEGIN ADR~ADR+1; SEGOVF END ; 00605100
|
|
BRANCHLIT(LISTART,TRUE); 00605200
|
|
EMITL(19); EMITO(STD); 00605300
|
|
EMITO(RTS); ADJUST; 00605400
|
|
GO TO LOOP; 00605500
|
|
END; 00605600
|
|
IF GLOBALNEXT = LPAREN THEN % RECURSE ON ( 00605700
|
|
BEGIN EMITB(-1,FALSE); 00605800
|
|
ADJUST; 00605900
|
|
LADR2 ~ (ADR + 1)&LAX[TOADDR]&NSEG[TOSEGNO]; 00606000
|
|
SCAN; LEVEL ~ LEVEL + 1; 00606100
|
|
IOLIST(LEVEL); 00606200
|
|
IF GLOBALNEXT ! EQUAL THEN % PHONY IMP DO 00606300
|
|
BEGIN BRANCHES[T ~ LADR2.ADDR] ~ BRANCHX; 00606400
|
|
BRANCHX ~ T; 00606500
|
|
IF GLOBALNEXT ! RPAREN THEN GO TO ERROR; 00606600
|
|
SCAN; GO TO LOOP; 00606700
|
|
END; 00606800
|
|
IF XREF THEN ENTERX(GET(LINDX+1),1&LINFA[15:15:9]); 00606900
|
|
IF LINFA.SUBCLASS > REALTYPE THEN 00607000
|
|
BEGIN XTA ~ GET(LINDX + 1); 00607100
|
|
FLAG(84); 00607200
|
|
END; 00607300
|
|
EMITB(-1,FALSE); 00607400
|
|
LADR3 ~ LAX; 00607500
|
|
FIXB(LADR2.ADDR); 00607600
|
|
DESCREQ ~ FALSE; 00607700
|
|
SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(102); % INITIAL VALUE 00607800
|
|
EMITN(LINDX); EMITO(STD); 00607900
|
|
EMITB(LADR2,FALSE); 00608000
|
|
IF GLOBALNEXT ! COMMA THEN GO TO ERROR; 00608100
|
|
ADJUST; 00608200
|
|
LADR4 ~ (ADR + 1)&NSEG[TOSEGNO]; 00608300
|
|
SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(102) ELSE EMITO(GRTR); 00608400
|
|
EMITB(LADR2,TRUE); 00608500
|
|
EMITB(-1,FALSE); 00608600
|
|
LADR5 ~ LAX; 00608700
|
|
FIXB(LADR3); 00608800
|
|
IF GLOBALNEXT ! COMMA THEN EMITL(1) 00608900
|
|
ELSE BEGIN SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(102); END; 00609000
|
|
EMITV(LINDX); EMITO(ADD); 00609100
|
|
EMITN(LINDX); EMITO(SND); 00609200
|
|
EMITB(LADR4,FALSE); 00609300
|
|
FIXB(LADR5); 00609400
|
|
IF GLOBALNEXT = RPAREN THEN SCAN ELSE GO TO ERROR; 00609500
|
|
LOOP: IF GLOBALNEXT = SEMI OR GLOBALNEXT = SLASH THEN GO TO XIT; 00609600
|
|
IF GLOBALNEXT = RPAREN THEN GO TO SCRAM; 00609700
|
|
IF GLOBALNEXT = COMMA THEN 00609800
|
|
BEGIN SCAN; 00609900
|
|
IF GLOBALNEXT = SEMI THEN GO TO ERROR; 00610000
|
|
GO TO ROUND; 00610100
|
|
END; 00610200
|
|
ERROR: XTA ~ NAME; 00610300
|
|
FLAG(94); 00610400
|
|
IF GLOBALNEXT = SEMI THEN GO TO XIT; 00610500
|
|
SCAN; 00610600
|
|
IF GLOBALNEXT = ID THEN GO TO ROUND; 00610700
|
|
ERRORTOG ~ TRUE; GO TO XIT; 00610800
|
|
END; 00610900
|
|
IF GLOBALNEXT = RPAREN THEN GO TO SCRAM ELSE 00611000
|
|
IF GLOBALNEXT ! SLASH THEN GO TO ERROR; 00611100
|
|
XIT: IF DEBUGTOG THEN FLAGROUTINE(" IOL","IST ",FALSE) ; 00611200
|
|
END IOLIST; 00611300
|
|
INTEGER PROCEDURE FILECHECK(FILENAME,FILETYPE); 00611400
|
|
VALUE FILENAME,FILETYPE; ALPHA FILENAME; INTEGER FILETYPE; 00611500
|
|
BEGIN COMMENT THIS PROCEDURE RETURNS THE PRT CELL ALLOCATED TO 00611600
|
|
THE FILE FILENAME... A CELL IS CREATED IF NONE EXISTS; 00611700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEC","HECK ",TRUE); 00611800
|
|
EMITL(IF NOTOPIO THEN 2 ELSE 5); % FOR IO DESCRIPTOR 00611900
|
|
IF T ~ GLOBALSEARCH(FILENAME) = 0 THEN % FILE UNDECLARED 00612000
|
|
BEGIN MAXFILES ~ MAXFILES + 1; 00612100
|
|
BUMPPRT; 00612200
|
|
I ~ GLOBALENTER(-0&(FILECHECK~PRTS)[TOADDR] 00612300
|
|
&FILEID[TOCLASS],FILENAME)+2; 00612400
|
|
INFO[I.IR,I.IC]. LINK ~ FILETYPE; 00612500
|
|
END ELSE % FILE ALREADY EXISTS 00612600
|
|
FILECHECK ~ GET(T).ADDR; 00612700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEC","HECK ",FALSE) ; 00612800
|
|
END FILECHECK; 00612900
|
|
PROCEDURE INLINEFILE; 00613000
|
|
BEGIN COMMENT THIS PROCEDURE GENERATES THE CODE TO BRING UP THE FILE...00613100
|
|
IF THE FILE IS AN INTEGER THEN FILECHECK IS CALLED, IF THE FILE 00613200
|
|
IS NOT AN INTEGER THEN IN-LINE CODE IS GENERATED FOR OBJECT TIME 00613300
|
|
ANALYSIS; 00613400
|
|
REAL TEST; 00613500
|
|
COMMENT IF LAST INSTRUCTION WAS A LIT CALL THEN WE HAVE SEEN REFERENCE 00613600
|
|
TO AN INTEGER FILE ID; 00613700
|
|
IF DEBUGTOG THEN FLAGROUTINE(" INLIN","EFILE ",TRUE ) ; 00613800
|
|
TEST~ADR ; 00613900
|
|
IF EXPR(TRUE)>REALTYPE THEN FLAG(102) 00614000
|
|
ELSE IF EXPRESULT=NUMCLASS THEN 00614100
|
|
BEGIN XTA~NNEW ; 00614200
|
|
IF EXPVALUE}1.0@5 OR EXPVALUE{0.5 THEN FLAG(33) 00614300
|
|
ELSE BEGIN 00614400
|
|
IF ADR<TEST THEN % EXPR GOT SEGOVFL--ASSUME NO WRAPAROUND00614500
|
|
EMITO(DEL) 00614600
|
|
ELSE ADR~TEST; 00614700
|
|
TEST~SPCLBIN2DEC(C1~EXPVALUE); 00614800
|
|
IF XREF THEN ENTERX(TEST&1[TOCE],0&FILEID[TOCLASS]) ; 00614900
|
|
EMITDESCLIT(FILECHECK(0&"."[12:42:6]&TEST[18:12:30], 00615000
|
|
IF DCINPUT THEN 12 ELSE 2)) ; 00615100
|
|
END ; 00615200
|
|
END ELSE 00615300
|
|
COMMENT NOT INTEGER FILE... GENERATE OBJECT TIME CODE; 00615400
|
|
BEGIN EMITPAIR(17,ISN) ; 00615500
|
|
IF FILEARRAYPRT=0 THEN BEGIN BUMPPRT;FILEARRAYPRT~PRTS END; 00615600
|
|
EMITOPDCLIT(FILEARRAYPRT); 00615700
|
|
EMITO(DUP); EMITL(0); EMITO(EQUL); 00615800
|
|
COMMENT NEED 7 CONSECUTIVE SYLLABLES; 00615900
|
|
IF ADR } 4082 THEN 00616000
|
|
BEGIN ADR ~ ADR + 1; 00616100
|
|
SEGOVF; 00616200
|
|
END; 00616300
|
|
EMITL(3+FILEARRAYPRT.[38:1]);%CONSIDER POSSIBLE XRT 00616400
|
|
EMITO(BFC); % BRANCH AROUND TERMINATION CODE 00616500
|
|
EMITL(1); EMITO(CHS); EMITOPDCLIT(FILEARRAYPRT); % INV INDEX 00616600
|
|
EMITO(LOD); EMITL(IF NOTOPIO THEN 2 ELSE 5); EMITO(CDC); 00616700
|
|
END; 00616800
|
|
IF DEBUGTOG THEN FLAGROUTINE(" INLIN","EFILE ",FALSE) ; 00616900
|
|
END INLINEFILE; 00617000
|
|
PROCEDURE FILECONTROL(N); VALUE N; REAL N; 00617100
|
|
BEGIN COMMENT COMPILES ALL CALLS ON ALGOL FILE CONTROL; 00617200
|
|
EODS~TRUE ; 00617300
|
|
EXECUTABLE ; 00617400
|
|
SCAN; EMITO(MKS); 00617500
|
|
EMITL(N); EMITL(0); 00617600
|
|
NOTOPIO ~ TRUE; 00617700
|
|
INLINEFILE ; 00617800
|
|
EMITL(4); EMITOPDCLIT(14); 00617900
|
|
NOTOPIO ~ FALSE; 00618000
|
|
END FILECONTROL; 00618100
|
|
PROCEDURE FORMATER; 00618200
|
|
BEGIN 00618300
|
|
COMMENT FORMATER COMPILES A PSEUDO CODE USED BY THE OBJECT TIME 00618400
|
|
FORMATING ROUTINES TO PRODUCE DESIRED I/O. USUALLY, THERE IS 00618500
|
|
ONE WORD OF PSEUDO CODE PRODUCED FOR EACH EDITING PHRASE. IN 00618600
|
|
ADDITION ONE WORD IS PRODUCED FOR EACH RIGHT PARENTHESIS AND 00618700
|
|
SLASH GROUP. 00618800
|
|
THE 47TH BIT OF THE FIRST WORD IS SET IF THERE ARE LIST 00618900
|
|
ELEMENT PHRASES IN THE FORMAT STATEMENT. 00619000
|
|
THERE ARE FOUR GROUPS OF PHRASES: 00619100
|
|
GROUP 1 = F, E, D, G = REPEAT WIDTH DECIMAL 00619200
|
|
GROUP 2 = I, J, A, O, L, T, C, = REPEAT WIDTH 00619300
|
|
X, P 00619400
|
|
GROUP 3 = H = REPEAT SPECIAL PURPOSE 00619500
|
|
GROUP 4 = ), / = CONTROL REPEAT LINK 00619600
|
|
WORD FOR GROUP 1: 00619700
|
|
CODE = [ 1: 5] 00619800
|
|
REPEAT = [ 6:12] 00619900
|
|
WIDTH = [18:12] 00620000
|
|
DEDIMAL = [30:12] 00620100
|
|
WORD FOR GROUP 2: 00620200
|
|
CODE = [ 1: 5] 00620300
|
|
REPEAT = [ 6:12] 00620400
|
|
WIDTH = [18:12] 00620500
|
|
SIGN = [41: 1] 00620600
|
|
FOR P, X AND T REPEAT = 1 00620700
|
|
P: SIGN = SIGN OF SCALE 00620800
|
|
WORD FOR GROUP 3: 00620900
|
|
CODE = [ 1: 5] 00621000
|
|
REPEAT = [ 6:12] 00621100
|
|
H: STRING STARTS AT BIT 18 AND CONTINUES TO END OF STRING 00621200
|
|
REPEAT = NUMBER OF STRING CHARACTERS 00621300
|
|
WORD FOR GROUP 4: 00621400
|
|
CODE = [ 1: 5] 00621500
|
|
REPEAT = [ 6:12] 00621600
|
|
LINK = [18:12] 00621700
|
|
DECIMAL = [30:12] 00621800
|
|
CNTROL = [47: 1] 00621900
|
|
): LINK NUMBER OF WORD - 1 BACK TO 1ST PHRASE AFTER 00622000
|
|
LEFT PAREN 00622100
|
|
REPEAT = REPEAT OF ASSOCIATED LEFT PAREN 00622200
|
|
OUTER MOST RIGHT PAREN 00622300
|
|
A. DECIMAL ! 0 00622400
|
|
B. LINKS TO LEFT PAREN OF LAST PREVIOUS RIGHT PAREN 00622500
|
|
/: REPEAT = NUMBER OF SLASHES. 00622600
|
|
; 00622700
|
|
DEFINE APHASE = 6 #, 00622800
|
|
VPHRASE = 30 #, 00622900
|
|
LPPHRASE = 29 #, 00623000
|
|
CPHASE = 15 #, 00623100
|
|
DPHASE = 14 #, 00623200
|
|
EPHASE = 13 #, 00623300
|
|
FPHASE = 12 #, 00623400
|
|
GPHASE = 11 #, 00623500
|
|
HPHASE = 2 #, 00623600
|
|
IPHASE = 10 #, 00623700
|
|
JPHASE = 9 #, 00623800
|
|
LPHASE = 8 #, 00623900
|
|
OPHASE = 7 #, 00624000
|
|
PPHASE = 3 #, 00624100
|
|
TPHASE = 5 #, 00624200
|
|
XPHASE = 4 #, 00624300
|
|
RTPARN = 0 #, 00624400
|
|
SLASH = 1 #, 00624500
|
|
TOCODE = 1:43: 5 #, 00624600
|
|
TOREPEAT = 6:36:12 #, 00624700
|
|
TOWIDTH = 18:36:12 #, 00624800
|
|
TOLINK = 18:36:12 #, 00624900
|
|
TODECIMAL = 30:36:12 #, 00625000
|
|
TOCNTRL = 47:47: 1 #, 00625100
|
|
TONUM = 42:43: 1 #, 00625200
|
|
TOSIGN = 41:47: 1 #, 00625300
|
|
WSA = LSTT #; 00625400
|
|
REAL J, T; 00625500
|
|
LABEL KK,SL,FL ; 00625600
|
|
FORMAT FM(//"PHRASE# CODE REPEAT WIDTH DECIMAL",X2, 00625700
|
|
".[41:1] .[42:4] .[42:5] .[44:1] .[45:1]",X2, 00625800
|
|
".[46.1], .[46:2] .[47:1]"/) ; 00625900
|
|
INTEGER D,I, CODE,REPEAT,WIDTH,DECIMAL,TOTAL,SLCNT,SAVLASTLP, 00626000
|
|
PARENCT,SAVTOTAL; 00626100
|
|
BOOLEAN VRB,ASK ; 00626200
|
|
BOOLEAN LISTEL, HF, ZF, QF, PF, MINUSP, FIELD, STRINGF; 00626300
|
|
BOOLEAN COMMAS, DOLLARS, PLUSP, STR; 00626400
|
|
LABEL ROUND,NOPLACE,NUM,NUL,LP,RP,ENDER,NOEND,FALL,SEMIC,NUL1; 00626500
|
|
LABEL NEWWD, ROUND1; 00626600
|
|
ALPHA STREAM PROCEDURE GETCHAR(NCRV, T); VALUE NCRV; 00626700
|
|
BEGIN SI ~ NCRV; DI ~ T; DI ~ DI+7; DS ~ CHR; GETCHAR ~ SI; 00626800
|
|
END GETCHAR; 00626900
|
|
BOOLEAN PROCEDURE CONTINUE; 00627000
|
|
BEGIN 00627100
|
|
LABEL LOOP; 00627200
|
|
BOOLEAN STREAM PROCEDURE CONTIN(CD); 00627300
|
|
BEGIN SI~CD; IF SC ! "C" THEN IF SC ! "$" THEN BEGIN SI~SI+5; 00627400
|
|
IF SC ! " " THEN IF SC ! "0" THEN BEGIN TALLY~1; 00627500
|
|
CONTIN ~ TALLY END END 00627600
|
|
END OF CONTIN; 00627700
|
|
BOOLEAN STREAM PROCEDURE COMNT(CD,T); VALUE T; 00627800
|
|
BEGIN LABEL L; 00627900
|
|
SI~CD; IF SC = "C" THEN BEGIN T(SI~SI+1; IF SC="-" THEN 00628000
|
|
TALLY~1 ELSE JUMP OUT TO L); TALLY~1; L: END; COMNT~TALLY; 00628100
|
|
END COMNT; 00628200
|
|
BOOLEAN STREAM PROCEDURE DCCONTIN(CD); 00628300
|
|
BEGIN SI~CD; IF SC = "-" THEN TALLY ~ 1; DCCONTIN~TALLY; 00628400
|
|
END DCCONTIN; 00628500
|
|
LOOP: IF NOT(CONTINUE ~ 00628600
|
|
IF DCINPUT AND NOT TSSEDITOG OR FREEFTOG THEN 00628700
|
|
IF NEXTCARD<4 THEN DCCONTIN(CB) 00628800
|
|
ELSE IF NEXTCARD=7 THEN DCCONTIN(DB) ELSE CONTIN(TB) 00628900
|
|
ELSE IF NEXTCARD<4 THEN CONTIN(CB) 00629000
|
|
ELSE IF NEXTCARD=7 THEN CONTIN(DB) ELSE CONTIN(TB)) 00629100
|
|
THEN IF(IF NEXTCARD < 4 THEN 00629200
|
|
COMNT(CB,DCINPUT AND NOT TSSEDITOG OR FREEFTOG) 00629300
|
|
ELSE IF NEXTCARD = 7 THEN 00629400
|
|
COMNT(DB,DCINPUT AND NOT TSSEDITOG OR FREEFTOG) 00629500
|
|
ELSE COMNT(TB,0) AND NEXTCARD!6) THEN 00629600
|
|
BEGIN 00629700
|
|
IF READACARD THEN IF LISTOG THEN PRINTCARD; 00629800
|
|
GO TO LOOP; 00629900
|
|
END; 00630000
|
|
END CONTINUE; 00630100
|
|
STREAM PROCEDURE STORECHAR(ARY,POSIT,CHAR);VALUE POSIT; 00630200
|
|
BEGIN SI ~CHAR; SI ~ SI + 7; 00630300
|
|
DI ~ ARY; DI ~ DI + POSIT; 00630400
|
|
DS ~ CHR; 00630500
|
|
END STORECHAR; 00630600
|
|
ALPHA STREAM PROCEDURE BACKNCR(NCRV); VALUE NCRV; 00630700
|
|
BEGIN SI~NCRV; SI ~ SI-1; BACKNCR ~ SI; END BACKNCR; 00630800
|
|
COMMENT ******** START OF CODE **************; 00630900
|
|
IF XTA ~ LABL = BLANKS THEN FLAG(18) ELSE 00631000
|
|
IF D~ SEARCH(LABL) = 0 THEN 00631100
|
|
D~ ENTER(0 & FORMATID[TOCLASS], LABL) ELSE 00631200
|
|
IF GET(D).CLASS ! FORMATID THEN BEGIN D~0;FLAG(143) END; 00631300
|
|
IF XREF THEN ENTERX(LABL,1&FORMATID[TOCLASS]); 00631400
|
|
LABL ~ BLANKS; 00631500
|
|
NCR ~ BACKNCR(NCR); 00631600
|
|
WSA[0] ~ TOTAL ~ 1; 00631700
|
|
ROUND1: XTA ~ BLANKS; 00631800
|
|
ROUND: NCR ~ GETCHAR(NCR,T); 00631900
|
|
IF T = "]" THEN GO TO NOPLACE; 00632000
|
|
XTA ~ T & XTA[12:18:30]; 00632100
|
|
T~IF (T="&" OR T="<") AND 00632200
|
|
(HOLTOG OR NOT(HF OR STRINGF)) THEN "+" ELSE 00632300
|
|
IF (T="@" OR T=":") AND (HOLTOG OR NOT HF) THEN """ 00632400
|
|
ELSE T; 00632500
|
|
IF NOT (HF OR STRINGF) THEN 00632600
|
|
IF T = " " THEN GO TO ROUND 00632700
|
|
ELSE IF T="," THEN GO SL ; 00632800
|
|
IF HF THEN 00632900
|
|
BEGIN 00633000
|
|
STORECHAR(WSA[TOTAL],I,T); 00633100
|
|
IF HF ~ REPEAT ~ REPEAT - 1 ! 0 THEN 00633200
|
|
IF I ~ I+1 = 8 THEN 00633300
|
|
BEGIN IF TOTAL ~ TOTAL +1 > LSTMAX THEN GO TO NUL; 00633400
|
|
WSA[TOTAL] ~ I ~ 0; GO TO ROUND; 00633500
|
|
END ELSE GO TO ROUND ELSE GO TO NUL1; 00633600
|
|
END; 00633700
|
|
IF NOT STRINGF THEN 00633800
|
|
IF SLCNT > 0 THEN 00633900
|
|
IF T = "/" THEN BEGIN SLCNT ~ SLCNT+1; GO TO ROUND; END 00634000
|
|
ELSE 00634100
|
|
BEGIN WSA[TOTAL] ~ 0 & SLCNT[TOREPEAT] & SLASH[TOCODE]; 00634200
|
|
IF NOT STR THEN 00634300
|
|
IF REPEAT < 16 AND WSA[TOTAL-1].[42:6] = 0 THEN 00634400
|
|
WSA[TOTAL~TOTAL-1] ~ WSA[TOTAL] & SLCNT[42:44:4] 00634500
|
|
& 1[46:47:1]; 00634600
|
|
COMMAS~DOLLARS~BOOLEAN(SLCNT~0); NCR~BACKNCR(NCR) ; 00634700
|
|
GO TO NUL1; 00634800
|
|
END; 00634900
|
|
IF NOT QF THEN IF T = """ THEN IF STRINGF ~ NOT STRINGF THEN 00635000
|
|
BEGIN IF CODE > 4 THEN BEGIN STRINGF ~ FALSE; 00635100
|
|
NCR ~ BACKNCR(NCR); GO TO ENDER END; 00635200
|
|
SAVTOTAL ~ TOTAL; J~0; I~3; QF ~ TRUE; 00635300
|
|
WSA[TOTAL] ~ 0 & HPHASE[TOCODE]; 00635400
|
|
GO TO ROUND; 00635500
|
|
END ELSE 00635600
|
|
BEGIN 00635700
|
|
WSA[SAVTOTAL] ~ WSA[SAVTOTAL] & J[TOREPEAT]; 00635800
|
|
IF I = 0 THEN TOTAL ~ TOTAL - 1; 00635900
|
|
CODE ~ HPHASE; 00636000
|
|
GO TO ENDER; 00636100
|
|
END; 00636200
|
|
IF STRINGF THEN 00636300
|
|
BEGIN 00636400
|
|
STORECHAR(WSA[TOTAL],I,T); 00636500
|
|
J ~ J + 1; QF ~ FALSE; 00636600
|
|
IF I ~ I+1 = 8 THEN 00636700
|
|
BEGIN 00636800
|
|
IF TOTAL ~ TOTAL +1> LSTMAX THEN GO TO NUL; 00636900
|
|
I ~ WSA[TOTAL] ~ 0; 00637000
|
|
END; 00637100
|
|
GO TO ROUND; 00637200
|
|
END; 00637300
|
|
CASE T OF 00637400
|
|
BEGIN 00637500
|
|
BEGIN ZF ~ TRUE; % 0 00637600
|
|
NUM: DECIMAL ~ 10 | DECIMAL + T; 00637700
|
|
IF ASK THEN 00637800
|
|
BEGIN FLAG(183); %111-00637900
|
|
FL: DO BEGIN NCR~GETCHAR(NCR,T); XTA~T&XTA[12:18:30] END 00638000
|
|
UNTIL T!"*" AND T>9 AND T!" " ; 00638100
|
|
NCR~BACKNCR(NCR); XTA~BLANKS&XTA[18:12:30] ; 00638200
|
|
END 00638300
|
|
ELSE 00638400
|
|
IF DECIMAL>4090 THEN BEGIN FLAG(172); DECIMAL~1 END ; 00638500
|
|
IF CODE = 0 THEN REPEAT ~ DECIMAL 00638600
|
|
ELSE IF PF THEN BEGIN IF DECIMAL>WIDTH AND WIDTH!0 AND CODE! 00638700
|
|
VPHRASE THEN FLAG(129) END ELSE WIDTH~DECIMAL ; 00638800
|
|
GO TO ROUND; 00638900
|
|
END; 00639000
|
|
GO TO NUM; GO TO NUM; GO TO NUM; % 1 2 3 00639100
|
|
GO TO NUM; GO TO NUM; GO TO NUM; % 4 5 6 00639200
|
|
GO TO NUM; GO TO NUM; GO TO NUM; % 7 8 9 00639300
|
|
; ; ; ; ; ; % # @ Q : > } 00639400
|
|
BEGIN PLUSP ~ TRUE; GO TO ROUND; END; % + 00639500
|
|
BEGIN CODE ~ APHASE; GO TO NOEND END; % A 00639600
|
|
; % B 00639700
|
|
BEGIN CODE ~ CPHASE; GO TO NOEND END; % C 00639800
|
|
BEGIN CODE ~ DPHASE; GO TO NOEND END; % D 00639900
|
|
BEGIN CODE ~ EPHASE; GO TO NOEND END; % E 00640000
|
|
BEGIN CODE ~ FPHASE; GO TO NOEND END; % F 00640100
|
|
BEGIN CODE ~ GPHASE; GO TO NOEND END; % G 00640200
|
|
BEGIN IF REPEAT = 0 THEN FLOG(130); % H 00640300
|
|
IF ASK THEN BEGIN FLOG(32 ); GO SEMIC END ; 00640400
|
|
HF ~ TRUE; I ~ 3; CODE ~ HPHASE; 00640500
|
|
WSA[TOTAL] ~ 0 & HPHASE[TOCODE] & REPEAT[TOREPEAT]; 00640600
|
|
GO TO ROUND; 00640700
|
|
END; 00640800
|
|
BEGIN CODE ~ IPHASE; GO TO NOEND END; % I 00640900
|
|
BEGIN IF CODE < 11 OR CODE=15 THEN FLOG(134); % . 00641000
|
|
IF CODE=0 OR PF THEN FLOG(32) ; 00641100
|
|
PF~TRUE; DECIMAL~0; ASK~ZF~FALSE ; 00641200
|
|
GO TO ROUND; 00641300
|
|
END; 00641400
|
|
GO TO RP; % [ 00641500
|
|
; % & 00641600
|
|
LP: 00641700
|
|
BEGIN IF CODE ! 0 THEN FLOG(32); % ( 00641800
|
|
IF ASK THEN REPEAT~4095; IF REPEAT=0 AND ZF THEN FLAG(173) ;00641900
|
|
NAMLIST[SAVLASTLP ~ PARENCT ~ PARENCT+1] ~ 0 & TOTAL[TOWIDTH]00642000
|
|
&(IF REPEAT{0 AND PARENCT>1 THEN 1 ELSE REPEAT)[TOREPEAT] ; 00642100
|
|
IF ASK THEN 00642200
|
|
BEGIN ASK~VRB~FALSE ; 00642300
|
|
WSA[TOTAL]~32&LPPHRASE[TOCODE]&4095[TOREPEAT] ; 00642400
|
|
IF (TOTAL~TOTAL+1)>LSTMAX THEN GO NUL ; 00642500
|
|
END ; 00642600
|
|
ZF~BOOLEAN(REPEAT~DECIMAL~0) ; 00642700
|
|
STR ~ TRUE; 00642800
|
|
GO TO ROUND1; 00642900
|
|
END; 00643000
|
|
; ; ; % < ~ | 00643100
|
|
BEGIN CODE~JPHASE; WIDTH~-1; GO NOEND END ; % J 00643200
|
|
BEGIN % K 00643300
|
|
IF COMMAS OR CODE!0 THEN BEGIN FLAG(32); COMMAS~TRUE END 00643400
|
|
ELSE BEGIN COMMAS~TRUE ; 00643500
|
|
KK: DO BEGIN NCR~GETCHAR(NCR,T); XTA~T&XTA[12:18:30] END 00643600
|
|
UNTIL T!" " ; 00643700
|
|
IF (T<17 OR (T>25 AND T<33) OR (T>42 AND T<50) OR T>57) 00643800
|
|
THEN BEGIN FLAG(32) ; 00643900
|
|
IF T="*" OR T<10 THEN BEGIN DECIMAL~1; GO FL END ; 00644000
|
|
END ; 00644100
|
|
NCR~BACKNCR(NCR); XTA~BLANKS&XTA[18:12:30] ; 00644200
|
|
END ; 00644300
|
|
GO ROUND ; 00644400
|
|
END OF K ; 00644500
|
|
BEGIN CODE ~ LPHASE; GO TO NOEND; END; % L 00644600
|
|
; ; % M N 00644700
|
|
BEGIN CODE ~ OPHASE; GO TO NOEND; END; % O 00644800
|
|
BEGIN WSA[TOTAL] ~ 0 & PPHASE[TOCODE] % P 00644900
|
|
& REAL(VRB)[42:47:1] 00645000
|
|
& REAL(MINUSP)[TOSIGN] & REPEAT[TOWIDTH]&1[TOREPEAT]; 00645100
|
|
MINUSP ~ PLUSP ~ FALSE; 00645200
|
|
IF (DECIMAL = 0 AND NOT ZF) THEN FLOG(131); 00645300
|
|
GO TO NUL1; 00645400
|
|
END; 00645500
|
|
; ; % Q R 00645600
|
|
BEGIN IF DOLLARS OR CODE!0 THEN FLAG(32) % $ 00645700
|
|
ELSE BEGIN DOLLARS~TRUE; GO KK END ; 00645800
|
|
DOLLARS~TRUE; GO ROUND ; 00645900
|
|
END OF DOLLAR SIGN ; 00646000
|
|
IF NOT ASK THEN % * 00646100
|
|
BEGIN 00646200
|
|
IF ZF OR DECIMAL NEQ 0 THEN FLAG(183); DECIMAL:=4095; %111-00646300
|
|
IF CODE=0 THEN REPEAT~DECIMAL 00646400
|
|
ELSE IF NOT PF THEN WIDTH~DECIMAL ; 00646500
|
|
VRB := ASK := LISTEL := TRUE; GO ROUND; %101-00646600
|
|
END ELSE BEGIN DECIMAL:=4095; FLAG(183); GO FL END ; %111-00646700
|
|
BEGIN MINUSP ~ TRUE; GO TO ROUND; END; % - 00646800
|
|
RP: 00646900
|
|
BEGIN IF FIELD THEN BEGIN NCR ~ BACKNCR(NCR); % ) 00647000
|
|
GO TO ENDER; END; 00647100
|
|
IF DECIMAL ! 0 THEN FLAG(32); 00647200
|
|
I ~ IF PARENCT = 1 THEN IF SAVLASTLP > 1 THEN 2 ELSE 1 00647300
|
|
ELSE PARENCT; 00647400
|
|
WSA[TOTAL]~(J~NAMLIST[I])&(TOTAL+1-J~J.[18:12])[TOLINK] 00647500
|
|
& (IF PARENCT ~ PARENCT-1 = 0 THEN 77 ELSE 0)[TODECIMAL]; 00647600
|
|
IF WSA[J].[1:5]=LPPHRASE AND PARENCT!0 THEN 00647700
|
|
BEGIN WSA[J].[18:12]~TOTAL-J; WSA[TOTAL].[18:12]~TOTAL-J ;00647800
|
|
END ; 00647900
|
|
NAMLIST[I].[6:12] ~ 0; 00648000
|
|
CODE ~ HPHASE; 00648100
|
|
GO TO NUL1; 00648200
|
|
END; 00648300
|
|
; ; % ; LEQ 00648400
|
|
GO TO ROUND; % BLANKS 00648500
|
|
BEGIN SLCNT ~ 1; % / 00648600
|
|
SL: IF CODE=0 THEN IF ASK OR ZF OR DECIMAL!0 THEN 00648700
|
|
BEGIN FLAG(32); ASK~ZF~BOOLEAN(DECIMAL~0) END ; 00648800
|
|
IF CODE<5 THEN IF T="," THEN GO ROUND1 ELSE GO ROUND ELSE GO 00648900
|
|
ENDER ; 00649000
|
|
END; 00649100
|
|
; % S 00649200
|
|
BEGIN IF REPEAT ! 0 THEN FLAG(32); % T 00649300
|
|
CODE ~ TPHASE; 00649400
|
|
GO TO NOEND; 00649500
|
|
END; 00649600
|
|
; % U 00649700
|
|
BEGIN VRB~TRUE; CODE~VPHRASE; WIDTH~-1; GO NOEND END ; % V 00649800
|
|
; % W 00649900
|
|
BEGIN IF REPEAT = 0 THEN FLOG(130); % X 00650000
|
|
IF STR THEN 00650100
|
|
NEWWD: WSA[TOTAL] ~ 0 & XPHASE[TOCODE] & REPEAT[TOWIDTH] 00650200
|
|
& 1[TOREPEAT] 00650300
|
|
& REAL(VRB)[42:47:1] 00650400
|
|
ELSE 00650500
|
|
BEGIN 00650600
|
|
IF (J~WSA[TOTAL-1]).[42:6]>0 OR (I~J.[1:5])=RTPARN 00650700
|
|
OR (REPEAT}32 AND I!XPHASE) THEN GO NEWWD ; 00650800
|
|
IF I=XPHASE AND (I~J.[18:12]+REPEAT){4090 THEN 00650900
|
|
WSA[TOTAL~TOTAL-1] ~ J & I[TOWIDTH] 00651000
|
|
ELSE IF REPEAT } 32 THEN GO TO NEWWD 00651100
|
|
ELSE WSA[TOTAL~TOTAL-1] ~ J & REPEAT[TONUM] 00651200
|
|
& 1[TOCNTRL]; 00651300
|
|
END; 00651400
|
|
GO TO NUL1; 00651500
|
|
END; 00651600
|
|
; ; % Y Z 00651700
|
|
GO SL ; % , 00651800
|
|
GO TO LP; % % 00651900
|
|
; ; ; % ! = ] " 00652000
|
|
END OF CASE STATEMENT; 00652100
|
|
FLOG(132); % ILLEGAL CHARACTER; 00652200
|
|
GO TO FALL; 00652300
|
|
ENDER: IF CODE > 4 THEN 00652400
|
|
BEGIN IF WIDTH=0 THEN FLAG(130) ; 00652500
|
|
IF CODE=VPHRASE THEN 00652600
|
|
BEGIN 00652700
|
|
IF WIDTH=-1 THEN IF PF THEN FLAG(130)ELSE WIDTH~ 00652800
|
|
DECIMAL~4094 ELSE 00652900
|
|
IF NOT PF THEN DECIMAL~4094 ; 00653000
|
|
END 00653100
|
|
ELSE 00653200
|
|
IF CODE > 10 AND CODE ! 15 THEN 00653300
|
|
IF (DECIMAL = 0 AND NOT ZF) OR NOT PF THEN FLAG(133) 00653400
|
|
ELSE ELSE DECIMAL ~ 0; 00653500
|
|
IF REPEAT=0 THEN REPEAT~1 ; 00653600
|
|
IF WIDTH=-1 THEN WIDTH~0 ; 00653700
|
|
WSA[TOTAL] ~ 0 & CODE[TOCODE] & WIDTH[TOWIDTH] 00653800
|
|
& REPEAT[TOREPEAT] & DECIMAL[TODECIMAL] 00653900
|
|
& REAL(COMMAS) [44:47:1] 00654000
|
|
& REAL(VRB)[42:47:1] 00654100
|
|
& REAL(DOLLARS)[45:47:1]; 00654200
|
|
END ELSE IF DECIMAL ! 0 THEN FLAG(32); 00654300
|
|
NUL1: IF PLUSP THEN FLAG(164); 00654400
|
|
IF CODE!VPHRASE THEN 00654500
|
|
BEGIN 00654600
|
|
IF DOLLARS AND(CODE < 9 OR CODE > 14) THEN FLAG(166); 00654700
|
|
IF COMMAS AND NOT(CODE = 10 OR CODE = 12 OR CODE = 9) 00654800
|
|
THEN FLAG(165); 00654900
|
|
END; 00655000
|
|
VRB~ 00655100
|
|
ERRORTOG ~ FIELD ~ PF ~ PLUSP ~ DOLLARS ~ COMMAS ~ STR ~ FALSE; 00655200
|
|
IF CODE = HPHASE THEN STR ~ TRUE; 00655300
|
|
CODE ~ REPEAT ~ WIDTH ~ 0; 00655400
|
|
XTA ~ BLANKS; 00655500
|
|
GO TO FALL; 00655600
|
|
NOEND: IF FIELD THEN FLAG(32); 00655700
|
|
IF CODE ! TPHASE THEN LISTEL ~ TRUE ELSE REPEAT ~ 1; 00655800
|
|
IF REPEAT=0 AND ZF THEN FLAG(173) ; 00655900
|
|
FIELD ~ TRUE; 00656000
|
|
FALL: IF MINUSP THEN BEGIN FLAG(32); MINUSP ~ FALSE END; 00656100
|
|
ASK~ZF~FALSE ; 00656200
|
|
NUL: DECIMAL ~ 0; 00656300
|
|
IF PARENCT = 0 THEN BEGIN SCN ~ 1; GO TO SEMIC END; 00656400
|
|
IF CODE < 5 THEN 00656500
|
|
IF TOTAL ~ TOTAL+1 > LSTMAX THEN 00656600
|
|
BEGIN FLOG(78);TOTAL ~ TOTAL-2; GO TO SEMIC; END; 00656700
|
|
GO TO ROUND; 00656800
|
|
NOPLACE: IF(DCINPUT OR FREEFTOG) AND (STRINGF OR HF) THEN FLOG(150); 00656900
|
|
IF TSSEDITOG THEN IF (STRINGF OR HF) AND NOT DCINPUT 00657000
|
|
THEN TSSED(XTA,1); 00657100
|
|
IF CONTINUE THEN IF READACARD THEN 00657200
|
|
BEGIN IF LISTOG THEN PRINTCARD; GO TO ROUND; END; 00657300
|
|
SCN ~ 0; NEXT ~ SEMI; 00657400
|
|
SEMIC: 00657500
|
|
IF SCN = 1 THEN SCAN; 00657600
|
|
IF STRINGF THEN FLAG(22); 00657700
|
|
IF NOT LISTEL THEN WSA[0] ~ 0; 00657800
|
|
IF PARENCT ! 0 THEN FLAG(IF PARENCT < 0 THEN 9 ELSE 8); 00657900
|
|
IF D ! 0 THEN PRTSAVER(D,TOTAL+1,WSA); 00658000
|
|
IF DEBUGTOG THEN BEGIN 00658100
|
|
WRITE(LINE,FM) ; 00658200
|
|
FOR I~0 STEP 1 UNTIL TOTAL DO BEGIN 00658300
|
|
WRITE(LINE,[13]//,I,(J~WSA[I]).[1:5],J.[6:12],J.[18:12],J.[30:12], 00658400
|
|
J.[41:1],J.[42:4],J.[42:5],J.[44:1],J.[45:1], 00658500
|
|
J.[46:1],J.[46:2],J.[47:1]) ; 00658600
|
|
IF J.[1:5]=2 THEN I~I+(J.[6:12]+2).[36:9] ; 00658700
|
|
END ; 00658800
|
|
WRITE(LINE[DBL]) ; 00658900
|
|
END OF DEBUGSTUFF ; 00659000
|
|
END FORMATER; 00659100
|
|
00659200
|
|
PROCEDURE EXECUTABLE; 00659300
|
|
BEGIN LABEL XIT; REAL T, J, TS, P; 00659400
|
|
IF SPLINK < 0 THEN FLAG(12); 00659500
|
|
IF LABL = BLANKS THEN GO TO XIT; 00659600
|
|
IF T ~ SEARCH(XTA ~ LABL) = 0 THEN 00659700
|
|
T ~ ENTER(-0 & LABELID[TOCLASS] & (ADR+1)[TOADDR] & 00659800
|
|
NSEG[TOSEGNO], LABL) ELSE 00659900
|
|
BEGIN IF (P ~ GET(T)).CLASS ! LABELID THEN 00660000
|
|
BEGIN FLAG(144); GO TO XIT END; 00660100
|
|
IF P < 0 THEN BEGIN FLAG(20); GO TO XIT END; 00660200
|
|
TS ~ P.ADDR; 00660300
|
|
WHILE TS ! 0 DO 00660400
|
|
BEGIN J ~ GIT(TS); FIXB(TS+10000); TS ~ J END; 00660500
|
|
PUT(T, P~-P & (ADR+1)[TOADDR] & NSEG[TOSEGNO]); 00660600
|
|
IF (T ~ GET(T+2)).BASE ! 0 THEN 00660700
|
|
T ~ PRGDESCBLDR(2, T.BASE, (ADR+1).[36:10], NSEG); 00660800
|
|
END; 00660900
|
|
IF XREF THEN ENTERX(LABL,1&LABELID[TOCLASS]); 00661000
|
|
XIT: 00661100
|
|
END EXECUTABLE; 00661200
|
|
00661300
|
|
PROCEDURE IOCOMMAND(N); VALUE N; REAL N; 00661400
|
|
COMMENT N COMMAND 00661500
|
|
0 READ 00661600
|
|
1 WRITE 00661700
|
|
2 PRINT 00661800
|
|
3 PUNCH 00661900
|
|
4 BACKSPACE 00662000
|
|
7 DATA; 00662100
|
|
BEGIN LABEL XIT,SUCH,LISTER,NOFORM,FORMER,WRAP,DAAT,NF; 00662200
|
|
LABEL LISTER1; 00662300
|
|
BOOLEAN SUCHTOG, RDTRIN, FREEREAD; 00662400
|
|
BOOLEAN FORMARY, NOFORMT; 00662500
|
|
BOOLEAN NAMETOG; 00662600
|
|
DEFINE DATATOG = DATASTMTFLAG#; 00662700
|
|
REAL T, ACCIDENT, EDITCODE; 00662800
|
|
REAL DATAB; 00662900
|
|
PROCEDURE ACTIONLABELS(UNSEEN); VALUE UNSEEN; BOOLEAN UNSEEN; 00663000
|
|
BEGIN LABEL EOF,ERR,RATA,XIT,ACTION,MULTI; 00663100
|
|
BOOLEAN BACK,GOTERR,GOTEOF; 00663200
|
|
IF UNSEEN THEN SCAN; 00663300
|
|
EOF: IF GOTEOF THEN GO TO MULTI; 00663400
|
|
IF BACK ~ NAME = "END " THEN GO TO ACTION; 00663500
|
|
ERR: IF GOTERR THEN GO TO MULTI; 00663600
|
|
IF NAME ! "ERR " THEN IF GOTEOF THEN 00663700
|
|
BEGIN MULTI: XTA ~ NAME; FLOG(137); 00663800
|
|
GO TO XIT; 00663900
|
|
END ELSE GO TO RATA; 00664000
|
|
ACTION: SCAN; 00664100
|
|
IF NEXT = EQUAL THEN SCAN ELSE GO TO RATA; 00664200
|
|
IF NEXT ! NUM THEN GO TO RATA; 00664300
|
|
IF XREF THEN ENTERX(NAME,0&LABELID[TOCLASS]); 00664400
|
|
IF BACK THEN NX1 ~ NAME ELSE NX2 ~ NAME; 00664500
|
|
SCAN; IF NEXT = RPAREN THEN GO TO XIT; 00664600
|
|
IF NEXT = COMMA THEN SCAN ELSE GO TO RATA; 00664700
|
|
IF BACK THEN 00664800
|
|
BEGIN BACK ~ NOT ( GOTEOF ~ TRUE); 00664900
|
|
GO TO ERR; 00665000
|
|
END; 00665100
|
|
GOTERR ~ TRUE; 00665200
|
|
GO TO EOF; 00665300
|
|
RATA: XTA ~ NAME; FLOG(0); 00665400
|
|
XIT: 00665500
|
|
END ACTIONLABELS; 00665600
|
|
IF DEBUGTOG THEN FLAGROUTINE(" IOCOM","MAND ",TRUE ); 00665700
|
|
EODS~N!7 ; 00665800
|
|
C2 ~ IF N = 0 OR N = 7 THEN 1 ELSE 0; 00665900
|
|
SCAN; IF NEXT = SEMI THEN BEGIN FLOG(0); GO TO XIT END; 00666000
|
|
IF N = 7 THEN 00666100
|
|
BEGIN DATATOG ~ TRUE; 00666200
|
|
IF LOGIFTOG THEN FLAG(101); 00666300
|
|
LABL ~ BLANKS; 00666400
|
|
IF SPLINK } 0 THEN %NOT BLOCK DATA STMT 00666500
|
|
BEGIN 00666600
|
|
IF DATAPRT=0 THEN BEGIN 00666700
|
|
DATAPRT~PRTS~PRTS+1; ADJUST; 00666800
|
|
DATASTRT~(ADR+1)&NSEG[TOSEGNO] END 00666900
|
|
ELSE FIXB(DATALINK); 00667000
|
|
EMITOPDCLIT(DATAPRT); EMITO(LNG); 00667100
|
|
EMITB(-1, TRUE); DATAB ~ LAX; 00667200
|
|
END; 00667300
|
|
GO TO DAAT; 00667400
|
|
END; 00667500
|
|
EXECUTABLE; 00667600
|
|
EMITO(MKS); 00667700
|
|
IF N = 4 THEN 00667800
|
|
BEGIN 00667900
|
|
INLINEFILE; 00668000
|
|
BEGIN EMITL(0); EMITL(0); EMITL(0); EMITL(0); 00668100
|
|
EMITL(5); EMITL(0); EMITL(0); 00668200
|
|
EMITV(NEED(".FBINB",INTRFUNID)); 00668300
|
|
END; 00668400
|
|
GO TO XIT; 00668500
|
|
END; 00668600
|
|
EDITCODE ~ NX1 ~ NX1 ~ 0; 00668700
|
|
IF RDTRIN ~ 00668800
|
|
N = 0 THEN IF NEXT = LPAREN THEN GO TO SUCH 00668900
|
|
ELSE EMITDESCLIT(FILECHECK(".5 ",2+17|REAL %503-00669000
|
|
(REMOTETOG))) 00669100
|
|
ELSE IF N = 1 THEN IF NEXT ! LPAREN THEN FLAG(33) 00669200
|
|
ELSE GO TO SUCH 00669300
|
|
ELSE IF N = 2 THEN %503-00669400
|
|
EMITDESCLIT(FILECHECK(".6 ",2+17|REAL %503-00669500
|
|
(REMOTETOG))) 00669600
|
|
ELSE EMITDESCLIT(FILECHECK(".PUNCH",0)); 00669700
|
|
IF RDTRIN THEN EMITL(0) ELSE EMITPAIR(1,SSN); 00669800
|
|
GO TO FORMER; 00669900
|
|
SUCH: SCAN; RANDOMTOG~SUCHTOG~TRUE; INLINEFILE ; 00670000
|
|
RANDOMTOG~FREEREAD~FALSE ; 00670100
|
|
IF NEXT = EQUAL THEN % RANDOM KEY 00670200
|
|
BEGIN SCAN; 00670300
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 00670400
|
|
IF RDTRIN THEN EMITPAIR(1,ADD); 00670500
|
|
END ELSE IF RDTRIN THEN EMITL(0) ELSE EMITPAIR(1,SSN); 00670600
|
|
IF NEXT = RPAREN THEN GO TO NF; 00670700
|
|
IF NEXT ! COMMA THEN BEGIN FLOG(114); GO TO XIT END; 00670800
|
|
SCAN; 00670900
|
|
IF NEXT = ID THEN 00671000
|
|
IF NAME = "ERR " OR NAME = "END " THEN 00671100
|
|
BEGIN ACTIONLABELS(FALSE); 00671200
|
|
NF: IF RDTRIN THEN EMITL(0) ELSE EMITPAIR(1,SSN); 00671300
|
|
EMITL(0); 00671400
|
|
NOFORMT ~ TRUE; 00671500
|
|
SCAN; GO TO NOFORM; 00671600
|
|
END; 00671700
|
|
FORMER: IF ADR } 4085 THEN 00671800
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 00671900
|
|
IF NEXT = NUM THEN % FORMAT NUMBER 00672000
|
|
BEGIN EDITCODE ~ 1; 00672100
|
|
IF TEST ~ LBLSHFT(NAME) { 0 THEN 00672200
|
|
BEGIN FLAG(135); GO TO LISTER END; 00672300
|
|
IF I ~ SEARCH(TEST) = 0 THEN % NEVER SEEN 00672400
|
|
OFLOWHANGERS(I~ENTER(0&FORMATID[TOCLASS], TEST)) ELSE 00672500
|
|
IF GET(I).CLASS ! FORMATID THEN 00672600
|
|
BEGIN FLAG(143); GO TO LISTER END; 00672700
|
|
IF XREF THEN ENTERX(TEST,0&FORMATID[TOCLASS]); 00672800
|
|
IF GET(I).ADDR = 0 THEN 00672900
|
|
BEGIN EMITLINK((INFC ~ GET(I + 2)).BASE); 00673000
|
|
PUT(I + 2,INFC&ADR[TOBASE]); 00673100
|
|
EMITL(0); EMITL(0); EMITO(NOP); 00673200
|
|
END ELSE 00673300
|
|
BEGIN EMITL(GET(I+ 2).BASE); 00673400
|
|
EMITPAIR(GET(I).ADDR,LOD); 00673500
|
|
END; 00673600
|
|
GO TO LISTER; 00673700
|
|
END ELSE IF RDTRIN THEN IF(FREEREAD := NEXT=SLASH) THEN GO TO LISTER 00673800
|
|
ELSE BEGIN IF NEXT NEQ ID THEN BEGIN FLOG(116);GO TO XIT; END;END 00673900
|
|
ELSE IF NEXT NEQ ID THEN 00674000
|
|
BEGIN IF NEXT = STAR THEN 00674100
|
|
BEGIN NAMEDESC := TRUE; GLOBALNAME := TRUE; 00674200
|
|
TV := ENTER(0&LISTSID[TOCLASS],LISTID:=LISTID+1); 00674300
|
|
SCAN; 00674400
|
|
END; 00674500
|
|
IF NEXT = LPAREN THEN 00674600
|
|
BEGIN SCAN; IF EXPR(TRUE) GTR REALTYPE THEN FLAG(120) ; 00674700
|
|
SCAN; END ELSE EMITL(0); 00674800
|
|
IF GLOBALNAME AND (FREEREAD := NEXT = SLASH) OR FREEREAD THEN 00674900
|
|
GO TO LISTER ELSE BEGIN FLOG(110); GO TO XIT; END; 00675000
|
|
END; 00675100
|
|
GETALL(I ~ FNEXT,INFA,INFB,INFC); 00675200
|
|
IF T ~ INFA.CLASS = ARRAYID THEN % FORMAT ARRAY 00675300
|
|
BEGIN EDITCODE ~ 1; 00675400
|
|
FORMARY ~ TRUE; 00675500
|
|
T ~ EXPR(FALSE); 00675600
|
|
ADR ~ ADR-1; % ELIMINATE XCH EMITTED BY EXPR 00675700
|
|
IF EXPRESULT ! ARRAYID THEN FLOG(116); 00675800
|
|
GO TO LISTER1; % SCAN ALREADY DONE IN EXPR 00675900
|
|
END ELSE 00676000
|
|
IF T = NAMELIST THEN 00676100
|
|
BEGIN NAMETOG := TRUE; 00676200
|
|
IF INFA.ADDR = 0 THEN % REFERENCED, NOT DEF 00676300
|
|
BEGIN EMITLINK(INFC.BASE); 00676400
|
|
PUT(I+ 2,(INFC ~ INFC&ADR[TOBASE])); 00676500
|
|
EMITL(0); EMITL(0); EMITO(NOP); 00676600
|
|
END ELSE 00676700
|
|
BEGIN EMITL(INFC.BASE); 00676800
|
|
EMITPAIR(INFA.ADDR,LOD); 00676900
|
|
END 00677000
|
|
END 00677100
|
|
ELSE IF T = UNKNOWN THEN % ASSUME NAMELIST 00677200
|
|
BEGIN PUT(I,(INFA ~ INFA&NAMELIST[TOCLASS])); 00677300
|
|
NAMETOG := TRUE; 00677400
|
|
OFLOWHANGERS(I); 00677500
|
|
EMITLINK(0); PUT(I + 2,INFC&ADR[TOBASE]); 00677600
|
|
EMITL(0); EMITL(0); EMITO(NOP); 00677700
|
|
END ELSE BEGIN XTA ~ INFB; FLOG(116); GO TO XIT END; 00677800
|
|
SCAN; 00677900
|
|
IF NEXT = COMMA THEN ACTIONLABELS(TRUE); 00678000
|
|
IF SUCHTOG THEN 00678100
|
|
IF NEXT ! RPAREN THEN FLOG(108) ELSE SCAN; 00678200
|
|
IF NEXT ! SEMI THEN BEGIN FLOG(118); GO TO XIT END; 00678300
|
|
EMITL(0); EDITCODE ~ 4; EMITOPDCLIT(7); EMITO(FTC); 00678400
|
|
GO TO WRAP; 00678500
|
|
LISTER: SCAN; 00678600
|
|
IF FREEREAD THEN IF NOT RDTRIN THEN 00678700
|
|
BEGIN IF NEXT ! SLASH THEN EMITO(SSN) ELSE SCAN; 00678800
|
|
IF NEXT = LPAREN THEN 00678900
|
|
BEGIN SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(120);SCAN 00679000
|
|
END ELSE EMITL(0); 00679100
|
|
END; 00679200
|
|
LISTER1: 00679300
|
|
IF SUCHTOG THEN 00679400
|
|
BEGIN IF NEXT = COMMA THEN ACTIONLABELS(TRUE); 00679500
|
|
IF NEXT = RPAREN THEN SCAN ELSE BEGIN FLOG(108); GO TO XIT END; 00679600
|
|
END ELSE IF NEXT=COMMA THEN SCAN ELSE IF RDTRIN THEN 00679700
|
|
IF NEXT!SEMI THEN FLOG(114); 00679800
|
|
NOFORM: IF NEXT=SEMI THEN 00679900
|
|
BEGIN IF FREEREAD THEN FLOG(061) ELSE EMITL(0); GO TO WRAP END; 00680000
|
|
IF (NEXT NEQ LPAREN) AND (NEXT NEQ ID) AND (NEXT NEQ STAR) THEN 00680100
|
|
GO TO XIT; 00680200
|
|
EDITCODE ~ EDITCODE + 2; 00680300
|
|
DAAT: EMITB(-1,FALSE); LADR1 ~ LAX; ADJUST; DESCREQ ~ TRUE; 00680400
|
|
IF ADR } 4085 THEN 00680500
|
|
BEGIN ADR ~ ADR+1; SEGOVF; ADJUST END; 00680600
|
|
ACCIDENT ~ PRGDESCBLDR(0,0,ADR.[36:10] + 1,NSEG); 00680700
|
|
EMITOPDCLIT(19); EMITO(GFW); 00680800
|
|
LISTART ~ ADR&NSEG[TOSEGNO]; ADJUST; 00680900
|
|
LA ~ 0; IOLIST(LA); 00681000
|
|
EMITL(1); EMITO(CHS); EMITL(19); EMITO(STD); 00681100
|
|
EMITDESCLIT(19); EMITO(RTS); 0681200
|
|
FIXB(LADR1); DESCREQ ~ FALSE; 00681300
|
|
IF DATATOG THEN 00681400
|
|
BEGIN DATASET; 00681500
|
|
IF NEXT = SLASH THEN SCAN ELSE 00681600
|
|
BEGIN FLOG(110); GO TO XIT END; 00681700
|
|
IF LSTA = 0 THEN BEGIN BUMPPRT; LSTA~PRTS END; 00681800
|
|
IF (LSTMAX - LSTI) { LSTS THEN 00681900
|
|
BEGIN WRITEDATA(LSTI,NXAVIL ~ NXAVIL + 1,LSTP); 00682000
|
|
LSTA ~ PRGDESCBLDR(1,LSTA,0,NXAVIL); 00682100
|
|
LSTI ~ 0; BUMPPRT; LSTA~PRTS; 00682200
|
|
END; 00682300
|
|
MOVEW(LSTT,LSTP[LSTI],(LSTS ~ LSTS + 1).[36:6],LSTS); 00682400
|
|
EMITO(MKS); EMITL(LSTI); EMITPAIR(LSTA,LOD); 00682500
|
|
LSTI ~ LSTI + LSTS; 00682600
|
|
EMITPAIR(ACCIDENT,LOD); EMITOPDCLIT(7); EMITO(FTF); 00682700
|
|
EMITL(6); EMITL(0); EMITL(0); 00682800
|
|
EMITV(NEED(".FBINB",INTRFUNID)); 00682900
|
|
IF NEXT = COMMA THEN 00683000
|
|
BEGIN SCAN; GO TO DAAT END; 00683100
|
|
IF SPLINK } 0 THEN BEGIN 00683200
|
|
EMITB(-1,FALSE); DATALINK~LAX; 00683300
|
|
FIXB(DATAB) END; 00683400
|
|
GO TO XIT; 00683500
|
|
END; 00683600
|
|
EMITPAIR(ACCIDENT,LOD); EMITOPDCLIT(7); EMITO(FTF); 00683700
|
|
WRAP: IF NOT FREEREAD AND NOT NAMETOG THEN EMITL(EDITCODE); 00683800
|
|
IF RDTRIN THEN 00683900
|
|
BEGIN IF NX1 = 0 THEN EMITL(0) ELSE EMITLABELDESC(NX1); 00684000
|
|
IF NX2 = 0 THEN EMITL(0) ELSE EMITLABELDESC(NX2); 00684100
|
|
IF FREEREAD THEN EMITV(NEED(".FREFR", INTRFUNID)) 00684200
|
|
ELSE IF NAMETOG THEN EMITV(NEED(".FINAM",INTRFUNID)) 00684300
|
|
ELSE IF FORMARY THEN EMITV(NEED(".FTINT",INTRFUNID)) 00684400
|
|
ELSE IF NOFORMT THEN EMITV(NEED(".FBINB",INTRFUNID)) 00684500
|
|
ELSE EMITV(NEED(".FTNIN",INTRFUNID)); 00684600
|
|
END ELSE 00684700
|
|
IF FREEREAD THEN 00684800
|
|
BEGIN 00684900
|
|
IF NAMEDESC THEN 00685000
|
|
BEGIN 00685100
|
|
PRTSAVER(TV,NAMEIND+1,NAMLIST); 00685200
|
|
EMITL(GET(TV+2).BASE); 00685300
|
|
EMITPAIR(GET(TV).ADDR,LOD); 00685400
|
|
IF NAMLIST[0] = 0 THEN EMITL(0) 00685500
|
|
ELSE EMITPAIR(GET(GLOBALSEARCH(".SUBAR")).ADDR,LOD); 00685600
|
|
NAMLIST[0] := NAMEIND := 0; 00685700
|
|
END ELSE BEGIN EMITL(0);EMITL(0);EMITL(0);END; 00685800
|
|
EMITV(NEED(".FREWR",INTRFUNID)) 00685900
|
|
END ELSE IF NAMETOG THEN EMITV(NEED(".FONAM",INTRFUNID)) 00686000
|
|
ELSE IF FORMARY THEN EMITV(NEED(".FTOUT",INTRFUNID)) 00686100
|
|
ELSE BEGIN 00686200
|
|
IF NX1=0 THEN EMITL(0) ELSE EMITLABELDESC(NX1); 00686300
|
|
IF NX2=0 THEN EMITL(0) ELSE EMITLABELDESC(NX2); 00686400
|
|
IF NOFORMT THEN EMITV(NEED(".FBINB",INTRFUNID)) ELSE 00686500
|
|
EMITV(NEED(".FTNOU",INTRFUNID)); 00686600
|
|
END; 00686700
|
|
XIT: 00686800
|
|
IF NAMEDESC THEN IF RDTRIN THEN FLAG(159) 00686900
|
|
ELSE IF NOT FREEREAD THEN FLAG(160); 00687000
|
|
DATATOG := FALSE; NAMEDESC := FALSE; GLOBALNAME := FALSE; 00687100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" IOCOM","MAND ",FALSE); 00687200
|
|
END IOCOMMAND; 00687300
|
|
PROCEDURE STMTFUN(LINK); VALUE LINK; REAL LINK; 00687400
|
|
BEGIN 00687500
|
|
DEFINE PARAM = LSTT#; 00687600
|
|
REAL SAVEBRAD, I; 00687700
|
|
REAL INFA, INFC, NPARMS, TYPE, PARMLINK, BEGINSUB, RETURN; 00687800
|
|
LABEL XIT,TIX ; 00687900
|
|
IF SPLINK < 0 THEN FLAG(12); 00688000
|
|
LABL ~ BLANKS; 00688100
|
|
FILETOG ~ TRUE; % PREVENTS SCANNER FROM ENTERING IDS IN INFO 00688200
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&STMTFUNID[TOCLASS] 00688300
|
|
&(GET(LINK))[21:21:3]); 00688400
|
|
DO 00688500
|
|
BEGIN 00688600
|
|
SCAN; 00688700
|
|
IF NEXT ! ID THEN BEGIN FLOG(107); GO TO XIT END; 00688800
|
|
PARAM[NPARMS~NPARMS+1] ~ NAME; 00688900
|
|
SCAN; 00689000
|
|
END UNTIL NEXT ! COMMA; 00689100
|
|
IF NEXT ! RPAREN THEN FLOG(108) ELSE SCAN; 00689200
|
|
IF NEXT ! EQUAL THEN BEGIN FLOG(104); GO TO XIT END; 00689300
|
|
EMITB(-1,FALSE); SAVEBRAD ~ LAX; % BRANCH AROUND ST FUN 00689400
|
|
ADJUST; 00689500
|
|
BEGINSUB ~ ADR+1; 00689600
|
|
BUMPLOCALS; EMITPAIR(RETURN~LOCALS+1536,STD); 00689700
|
|
FOR I ~ NPARMS STEP -1 UNTIL 1 DO 00689800
|
|
BEGIN 00689900
|
|
IF T ~ SEARCH(PARAM[I]) ! 0 THEN 00690000
|
|
TYPE ~ GET(T).SUBCLASS ELSE 00690100
|
|
IF T~PARAM[I].[12:6] < "I" OR T > "N" THEN 00690200
|
|
TYPE ~ REALTYPE ELSE TYPE ~ INTYPE; 00690300
|
|
EMITSTORE( ENTER(0&VARID[TOCLASS]&1[TOTYPE] 00690400
|
|
&TYPE[TOSUBCL], PARAM[I]), TYPE); 00690500
|
|
IF XREF THEN ENTERX(NAME,0&VARID[TOCLASS]&TYPE[TOSUBCL]); 00690600
|
|
END; 00690700
|
|
PARMLINK ~ NEXTINFO-3; 00690800
|
|
GETALL(LINK, INFA, XTA, INFC); 00690900
|
|
FILETOG ~ FALSE; 00691000
|
|
SCAN; 00691100
|
|
IF (TYPE~(INFA~GET(LINK)).SUBCLASS)=LOGTYPE OR TYPE=COMPTYPE OR00691200
|
|
(I~EXPR(TRUE))=LOGTYPE OR I=COMPTYPE THEN 00691300
|
|
BEGIN IF I!TYPE THEN FLAG(139); GO TIX END ; 00691400
|
|
IF TYPE=REALTYPE OR TYPE=INTYPE THEN 00691500
|
|
BEGIN 00691600
|
|
IF I=DOUBTYPE THEN BEGIN EMITO(XCH); EMITO(DEL) END; 00691700
|
|
IF TYPE=INTYPE THEN IF I!INTYPE THEN EMITPAIR(1,IDV) ; 00691800
|
|
GO TIX ; 00691900
|
|
END ; 00692000
|
|
IF I!DOUBTYPE THEN EMITPAIR(0,XCH) ; 00692100
|
|
TIX: 00692200
|
|
EMITOPDCLIT(RETURN) ; 00692300
|
|
EMITO(GFW); 00692400
|
|
FIXB(SAVEBRAD); 00692500
|
|
IF INFA.CLASS ! UNKNOWN THEN FLAG(140); 00692600
|
|
PUT(LINK, -INFA & 1[TOTYPE] & NSEG[TOSEGNO] 00692700
|
|
& STMTFUNID[TOCLASS] & BEGINSUB[TOADDR]); 00692800
|
|
PUT(LINK+2, -(0 & NPARMS[TONEXTRA] & ADR[TOBASE] 00692900
|
|
& PARMLINK[36:36:12])); 00693000
|
|
PARMLINK ~ PARMLINK+4; 00693100
|
|
FOR I ~ 1 STEP 1 UNTIL NPARMS DO 00693200
|
|
PUT(PARMLINK ~ PARMLINK-3, "......"); 00693300
|
|
XIT: 00693400
|
|
FILETOG ~ FALSE; 00693500
|
|
END STMTFUN; 00693600
|
|
PROCEDURE ASSIGNMENT; 00693700
|
|
BEGIN 00693800
|
|
LABEL XIT; 00693900
|
|
BOOLEAN CHCK; 00694000
|
|
BOOLEAN I; 00694100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ASSIG","NMENT ",TRUE ) ; 00694200
|
|
FX1 ~ FNEXT; 00694300
|
|
SCAN; 00694400
|
|
IF NEXT = LPAREN THEN 00694500
|
|
BEGIN 00694600
|
|
CHCK~TRUE; 00694700
|
|
IF GET(FX1).CLASS = UNKNOWN THEN 00694800
|
|
IF EODS THEN 00694900
|
|
BEGIN XTA ~ GET(FX1+1); FLOG(035) ; 00695000
|
|
PUT(FX1,GET(FX1) & ARRAYID[TOCLASS]) ; 00695100
|
|
PUT(FX1+2,GET(FX1+2) & 1[TONEXTRA]) ; 00695200
|
|
END 00695300
|
|
ELSE BEGIN STMTFUN(FX1); GO TO XIT END ; 00695400
|
|
IF XREF THEN ENTERX(GET(FX1+1),1&GET(FX1) [15:15:9]); 00695500
|
|
EODS ~ TRUE ; 00695600
|
|
EXECUTABLE; 00695700
|
|
SCAN; 00695800
|
|
I ~ SUBSCRIPTS(FX1,2); 00695900
|
|
SCAN; 00696000
|
|
END ELSE 00696100
|
|
BEGIN 00696200
|
|
EODS~TRUE ; 00696300
|
|
EXECUTABLE; 00696400
|
|
IF T ~ GET(FX1).CLASS = ARRAYID THEN 00696500
|
|
BEGIN XTA ~ GET(FX1+1); FLAG(74) END; 00696600
|
|
MOVEW(ACCUM[1],HOLDID[0],0,3); 00696700
|
|
IF XREF THEN IF HOLDID[0].[12:12] ! "DO" THEN 00696800
|
|
ENTERX(GET(FX1+1),1&GET(FX1)[21:21:3]&VARID[TOCLASS]); 00696900
|
|
END; 00697000
|
|
IF NEXT ! EQUAL THEN BEGIN FLAG(104); GO TO XIT END; 00697100
|
|
SCAN; 00697200
|
|
IF NEXT=SEMI OR NEXT=COMMA THEN BEGIN FLOG(0); GO TO XIT; END; 00697300
|
|
FX2 ~ EXPR(TRUE); 00697400
|
|
IF NEXT NEQ COMMA THEN IF HOLDID[0] = "DO" THEN IF XREF THEN 00697500
|
|
ENTERX(HOLDID[0] ,1&GET(FX1)[21:21:3]&VARID[TOCLASS]); 00697600
|
|
IF NEXT = COMMA THEN IF CHCK THEN FLOG(56) ELSE 00697700
|
|
IF HOLDID[0].[12:12] ! "DO" THEN FLOG(56) ELSE 00697800
|
|
BEGIN 00697900
|
|
IF LOGIFTOG THEN FLAG(101); 00698000
|
|
IF FX2 > REALTYPE THEN FLAG(102); 00698100
|
|
IF DT ~ DT+1 > MAXDOS THEN BEGIN DT ~ 1; FLAG(138) END; 00698200
|
|
EMITN(FX1~ CHECKDO); 00698300
|
|
EMITO(STD); 00698400
|
|
SCAN; 00698500
|
|
IF NEXT=SEMI THEN BEGIN FLAG(36); GO TO XIT END; 00698600
|
|
IF (ACCUM[0] = ", " OR ACCUM[0] = "; ") AND 00698700
|
|
GLOBALNEXT=NUM AND ABS(FNEXT) > 1023 THEN 00698800
|
|
BEGIN 00698900
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 00699000
|
|
IDINFO:=REALID;FNEXT:=ENTER(IDINFO,"2FNV00"&DT[36:36:12]);00699100
|
|
EMITN(FNEXT:=GETSPACE(FNEXT)); EMITO(STD); 00699200
|
|
EMITB(-1,FALSE); LADR1:=LAX; ADJUST; 00699300
|
|
LADR2 ~ (ADR+1) & NSEG[TOSEGNO]; EMITV(FNEXT); 00699400
|
|
END 00699500
|
|
ELSE BEGIN 00699600
|
|
EMITB(-1,FALSE); LADR1:=LAX; ADJUST; 00699700
|
|
LADR2:=(ADR+1)&NSEG[TOSEGNO]; 00699800
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102) ; 00699900
|
|
END ; 00700000
|
|
EMITO(GRTR); 00700100
|
|
EMITB(-1, TRUE); 00700200
|
|
LADR3 ~ LAX; 00700300
|
|
EMITB(-1, FALSE); 00700400
|
|
ADJUST; 00700500
|
|
DOTEST[DT] ~ (ADR+1) & LAX[TOADDR] & NSEG[TOSEGNO]; 00700600
|
|
IF NEXT ! COMMA THEN EMITL(1) ELSE 00700700
|
|
BEGIN 00700800
|
|
SCAN; 00700900
|
|
IF NEXT=SEMI THEN BEGIN FLAG(36); GO TO XIT END ; 00701000
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 00701100
|
|
END; 00701200
|
|
EMITV(FX1); 00701300
|
|
EMITO(ADD); 00701400
|
|
EMITN(FX1); 00701500
|
|
EMITO(STN); 00701600
|
|
EMITB(LADR2, FALSE); 00701700
|
|
FIXB(LADR1); 00701800
|
|
FIXB(LADR3); 00701900
|
|
END ELSE EMITSTORE(FX1, FX2); 00702000
|
|
XIT: 00702100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ASSIG","NMENT ",FALSE ) ; 00702200
|
|
END ASSIGNMENT; 00702300
|
|
BOOLEAN PROCEDURE RINGCHECK; 00702400
|
|
COMMENT THIS PROCEDURE PREVENTS THE POSSIBILITY OF DELINKING A 00702500
|
|
HEADER FROM THE HEADER RING; 00702600
|
|
BEGIN 00702700
|
|
INTEGER I; 00702800
|
|
I~A; 00702900
|
|
DO 00703000
|
|
IF I ~ GETC(I).ADDR = ROOT THEN RINGCHECK ~ TRUE 00703100
|
|
UNTIL I = A; 00703200
|
|
END RINGCHECK; 00703300
|
|
PROCEDURE SETLINK(INFADDR); VALUE INFADDR; INTEGER INFADDR; 00703400
|
|
COMMENT THIS PROCEDURE LINKS AN ELEMENT TO ITS PREVIOUS HEADER; 00703500
|
|
BEGIN 00703600
|
|
INTEGER LAST,I; REAL COML; LABEL XIT; 00703700
|
|
XIT: 00703800
|
|
LAST ~(GETC(INFADDR).LASTC)-1; 00703900
|
|
FOR I ~ INFADDR+2 STEP 1 UNTIL LAST 00704000
|
|
DO BEGIN IF GETC(I).CLASS = ENDCOM THEN I~GETC(I).LINK; 00704100
|
|
IF FX1 = (COML~GETC(I)).LINK THEN 00704200
|
|
IF INFADDR~COML.LASTC=A THEN COM[PWI].LASTC~ROOT 00704300
|
|
ELSE GO XIT ; 00704400
|
|
END; 00704500
|
|
END SETLINK; 00704600
|
|
PROCEDURE DIMENSION; 00704700
|
|
BEGIN 00704800
|
|
LABEL L, LOOP, ERROR ; 00704900
|
|
BOOLEAN DOUBLED, SINGLETOG; %109-00705000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DIMEN","SION ",TRUE ) ; 00705100
|
|
IF LOGIFTOG THEN FLAG(101); 00705200
|
|
LABL ~ BLANKS; 00705300
|
|
IF NEXT=STAR THEN IF TYPE!DOUBTYPE THEN 00705400
|
|
BEGIN 00705500
|
|
SCAN ; 00705600
|
|
IF NEXT=SUM AND NUMTYPE=INTYPE THEN 00705700
|
|
BEGIN 00705800
|
|
IF FNEXT=4 THEN 00705900
|
|
BEGIN 00706000
|
|
SINGLETOG ~ TRUE; %109-00706100
|
|
IF TYPE=COMPTYPE THEN FLAG(176); GO L ; 00706200
|
|
END ; 00706300
|
|
IF FNEXT=8 THEN 00706400
|
|
BEGIN 00706500
|
|
IF TYPE=REALTYPE THEN TYPE~DOUBTYPE 00706600
|
|
ELSE IF TYPE!COMPTYPE THEN FLAG(177) ; 00706700
|
|
GO L ; 00706800
|
|
END ; 00706900
|
|
END ; 00707000
|
|
FLAG(IF TYPE=REALTYPE THEN 178 00707100
|
|
ELSE 177-REAL(TYPE=COMPTYPE)) ; 00707200
|
|
L: NCR~REAL(NCR.[30:3]!0)+3"677777"+NCR; SCN~1; SCAN ; 00707300
|
|
END ; 00707400
|
|
LOOP: DOUBLED~FALSE; 00707500
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO ERROR END; 00707600
|
|
FX1 ~ IF SINGLETOG THEN -FNEXT ELSE FNEXT; %109-00707700
|
|
IF TYPE } DOUBTYPE THEN % FIX ARRAY TYPE OFR 00707800
|
|
PUT(FX1,GET(FX1)&TYPE[TOSUBCL]); % BOUNDS ROUTINE 00707900
|
|
IF XREF THEN BEGIN INFA ~ 0&GET(FX1)[15:15:9]; 00708000
|
|
IF TYPE>0 THEN INFA.SUBCLASS~TYPE; 00708100
|
|
END; 00708200
|
|
XTA ~ INFB ~ NAME; 00708300
|
|
SCAN; 00708400
|
|
IF XREF THEN 00708500
|
|
BEGIN IF INFA.CLASS = UNKNOWN THEN 00708600
|
|
INFA.CLASS~IF NEXT=LPAREN THEN ARRAYID ELSE VARID; 00708700
|
|
ENTERX(INFB,INFA); 00708800
|
|
END; 00708900
|
|
IF NEXT=LPAREN THEN BEGIN SCAN; DOUBLED~BOUNDS(FX1) END ELSE 00709000
|
|
IF TYPE = -1 THEN FLOG(103); 00709100
|
|
GETALL(FX1, INFA, XTA, INFC); 00709200
|
|
IF TYPE > 0 THEN 00709300
|
|
IF BOOLEAN(INFA.TYPEFIXED) THEN FLAG(31) ELSE 00709400
|
|
BEGIN 00709500
|
|
IF TYPE > LOGTYPE THEN 00709600
|
|
IF GET(FX1+2) <0 THEN 00709700
|
|
BEGIN 00709800
|
|
IF NOT DOUBLED AND INFA.CLASS=1 THEN 00709900
|
|
BEGIN 00710000
|
|
BUMPLOCALS; 00710100
|
|
LENGTH~LOCALS + 1536; 00710200
|
|
PUT(FX1+2,INFC & LENGTH[TOSIZE]); 00710300
|
|
END 00710400
|
|
END ELSE IF NOT DOUBLED THEN 00710500
|
|
BEGIN IF INFC.SIZE > 16383 THEN FLAG(99); 00710600
|
|
PUT(FX1+2,INFC & (2 | INFC.SIZE)[TOSIZE]); 00710700
|
|
END; 00710800
|
|
PUT (FX1,INFA & 1[TOTYPE] & TYPE[TOSUBCL]); 00710900
|
|
END; 00711000
|
|
IF INFA < 0 THEN FLAG(39) ELSE 00711100
|
|
IF TYPE = -2 THEN 00711200
|
|
BEGIN 00711300
|
|
BAPC(INFA&FX1[TOLINK]&1[TOCE]&ROOT[TOLASTC]); 00711400
|
|
IF BOOLEAN(INFA.CE) THEN FLAG(2); 00711500
|
|
IF BOOLEAN(INFA.EQ) THEN 00711600
|
|
BEGIN 00711700
|
|
COM[NEXTCOM.IR,NEXTCOM.IC].LASTC ~ A ~ INFA.ADDR; 00711800
|
|
B~GETC(ROOT).ADDR ; 00711900
|
|
SETLINK(A); 00712000
|
|
IF NOT RINGCHECK THEN 00712100
|
|
BEGIN 00712200
|
|
COM[PWROOT].ADDR~GETC(A).ADDR ; 00712300
|
|
PUTC(A,GETC(A)&B[TOADDR]&7[TOSUBCL]) ; 00712400
|
|
END 00712500
|
|
END ELSE 00712600
|
|
PUT(FX1, INFA & 1[TOCE] & ROOT[TOADDR]); 00712700
|
|
IF BOOLEAN(INFA.FORMAL) THEN FLAG(10); 00712800
|
|
END; 00712900
|
|
IF ERRORTOG THEN 00713000
|
|
ERROR: 00713100
|
|
WHILE NEXT ! COMMA AND NEXT ! SEMI AND NEXT ! SLASH DO SCAN; 00713200
|
|
IF NEXT = COMMA THEN BEGIN SCAN; GO TO LOOP END; 00713300
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DIMEN","SION ",FALSE ); 00713400
|
|
END DIMENSION; 00713500
|
|
PROCEDURE FORMALPP(PARMSREQ, CLASS); VALUE PARMSREQ, CLASS; 00713600
|
|
BOOLEAN PARMSREQ; REAL CLASS; 00713700
|
|
BEGIN 00713800
|
|
LABEL LOOP, XIT; 00713900
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FORM","ALPP ",TRUE ) ; 00714000
|
|
PARMS ~ 0; 00714100
|
|
SCAN; 00714200
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 00714300
|
|
IF CLASS = FUNID THEN 00714400
|
|
IF FUNVAR = 0 THEN 00714500
|
|
BEGIN 00714600
|
|
IF TYPE > 0 THEN 00714700
|
|
IF FUNVAR ~ GLOBALSEARCH(NAME) ! 0 THEN 00714800
|
|
IF BOOLEAN((T ~ GET(FUNVAR)).TYPEFIXED) AND TYPE ! T.SUBCLASS 00714900
|
|
THEN FLAG(31); 00715000
|
|
PUT(FUNVAR ~ FNEXT,GET(FNEXT) & VARID[TOCLASS]); 00715100
|
|
END; 00715200
|
|
FNEW ~ NEED(NNEW ~ NAME, CLASS); 00715300
|
|
ENTERX(NAME,IF CLASS = FUNID THEN 00715400
|
|
1&GET(FNEW)[15:15:9] ELSE 1&GET(FNEW)[15:15:5]); 00715500
|
|
SCAN; 00715600
|
|
IF NEXT ! LPAREN THEN 00715700
|
|
IF PARMSREQ THEN FLOG(106) ELSE ELSE 00715800
|
|
BEGIN 00715900
|
|
LOOP: 00716000
|
|
SCAN; 00716100
|
|
IF NEXT = ID THEN PARMLINK[PARMS ~ PARMS+1] ~ FNEXT ELSE 00716200
|
|
IF NEXT=STAR AND CLASS!FUNID THEN PARMLINK[PARMS~PARMS+1]~0ELSE00716300
|
|
FLOG(107); 00716400
|
|
IF XREF THEN ENTERX(NAME,IF NEXT = STAR THEN 0 ELSE 00716500
|
|
0&GET(FNEXT)[15:15:9]); 00716600
|
|
SCAN; 00716700
|
|
IF NEXT = COMMA THEN GO TO LOOP; 00716800
|
|
IF NEXT ! RPAREN THEN FLOG(108); 00716900
|
|
SCAN; 00717000
|
|
END; 00717100
|
|
IF NOT ERRORTOG THEN DECLAREPARMS(FNEW); 00717200
|
|
XIT: 00717300
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FORM","ALPP ",FALSE) ; 00717400
|
|
END FORMALPP; 00717500
|
|
00717600
|
|
PROCEDURE ENDS; FORWARD; 00717700
|
|
00717800
|
|
PROCEDURE FUNCTION ; 00717900
|
|
BEGIN 00718000
|
|
REAL A,B,C,I; LABEL FOUND ; 00718100
|
|
IF SPLINK NEQ 0 THEN BEGIN FLAG(5); ENDS; SEGMENTSTART; END; 00718200
|
|
LABL ~ BLANKS; 00718300
|
|
FORMALPP(TRUE, FUNID); 00718400
|
|
GETALL(FNEW, INFA, INFB, INFC); 00718500
|
|
B~NUMINTM1 ; 00718600
|
|
WHILE A+1<B DO 00718700
|
|
BEGIN 00718800
|
|
IF C~INT[I~REAL(BOOLEAN(A+B) AND BOOLEAN(1022))]=INFB 00718900
|
|
THEN GO FOUND ; 00719000
|
|
IF INFB<C THEN B~I.[36:11] ELSE A~I.[36:11] ; 00719100
|
|
END ; 00719200
|
|
IF INFB=INT[I~(A+B)|2-I] THEN GO FOUND ; 00719300
|
|
IF FALSE THEN 00719400
|
|
FOUND: IF BOOLEAN(INT[I+1].INTSEEN) THEN BEGIN XTA~INFB; FLAG(167)END;00719500
|
|
IF TYPE<0 THEN TYPE~INFA.SUBCLASS&1[2:47:1] ; 00719600
|
|
PUT(SPLINK ~ FNEW, INFA & 1[TOTYPE] & TYPE[TOSUBCL]); 00719700
|
|
PUT(FUNVAR, GET(FUNVAR) & VARID[TOCLASS] & 1[TOTYPE] & 00719800
|
|
TYPE[TOSUBCL]); 00719900
|
|
END FUNCTION; 00720000
|
|
00720100
|
|
PROCEDURE STATEMENT; FORWARD; 00720200
|
|
PROCEDURE ASSIGN; 00720300
|
|
BEGIN 00720400
|
|
LABEL XIT; 00720500
|
|
EODS~TRUE ; 00720600
|
|
EXECUTABLE; 00720700
|
|
SCAN; 00720800
|
|
IF NEXT ! NUM THEN BEGIN FLOG(109); GO TO XIT END; 00720900
|
|
IF XREF THEN ENTERX(FNEXT,0&LABELID[TOCLASS]); 00721000
|
|
EMITNUM(FNEXT); 00721100
|
|
SCAN; 00721200
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 00721300
|
|
IF XREF THEN ENTERX(XTA,1&GET(FNEXT)[15:15:9]); 00721400
|
|
EMITN(FNEXT); 00721500
|
|
EMITO(STD); 00721600
|
|
SCAN; 00721700
|
|
XIT: 00721800
|
|
END ASSIGN; 00721900
|
|
PROCEDURE BLOCKDATA; 00722000
|
|
BEGIN 00722100
|
|
IF SPLINK NEQ 0 THEN BEGIN FLAG(5); ENDS; SEGMENTSTART; END; 00722200
|
|
LABL ~ BLANKS; 00722300
|
|
SCAN; 00722400
|
|
SPLINK ~ -1; 00722500
|
|
END BLOCKDATA; 00722600
|
|
PROCEDURE CALL; 00722700
|
|
BEGIN 00722800
|
|
EODS~TRUE ; 00722900
|
|
EXECUTABLE; 00723000
|
|
SCAN; 00723100
|
|
SUBREF; 00723200
|
|
END CALL; 00723300
|
|
PROCEDURE COMMON; 00723400
|
|
COMMENT THIS PROCEDURE MAKES THE COM ENTRY FOR COMMON ITEMS AND SETS 00723500
|
|
THE CE BIT IN BOTH THE COM AND INFO TABLES AND LINKS 00723600
|
|
THE HEADS OF CHAINS; 00723700
|
|
BEGIN 00723800
|
|
LABEL LOOP, BLOCK; 00723900
|
|
TYPE ~ -2; 00724000
|
|
SCAN; 00724100
|
|
IF NEXT = ID THEN 00724200
|
|
BEGIN 00724300
|
|
Z ~ NEED(".BLNK.", BLOCKID); 00724400
|
|
IF XREF THEN ENTERX("BLANK.",0&BLOCKID[TOCLASS]); 00724500
|
|
GO TO BLOCK; 00724600
|
|
END; 00724700
|
|
LOOP: 00724800
|
|
IF NEXT ! SLASH THEN FLOG(110); 00724900
|
|
SCAN; 00725000
|
|
IF NEXT = SLASH THEN Z ~ NEED(".BLNK.", BLOCKID) ELSE 00725100
|
|
BEGIN 00725200
|
|
IF NEXT ! ID THEN FLOG(105) ELSE 00725300
|
|
% FORCE UNIQUE NAME BY APPENDING 1 TO NAME (2ND CHAR OF WORD) 00725400
|
|
BEGIN Z ~ NEED(NAME&"1"[6:42:6],BLOCKID); 00725500
|
|
IF XREF THEN ENTERX(NAME,0&BLOCKID[TOCLASS]); 00725600
|
|
SCAN; 00725700
|
|
END; 00725800
|
|
IF NEXT ! SLASH THEN FLOG(110); 00725900
|
|
END; 00726000
|
|
SCAN; 00726100
|
|
BLOCK: 00726200
|
|
IF (T~GET(Z+2)).ADINFO = 0 THEN 00726300
|
|
BEGIN 00726400
|
|
IF NEXTCOM~NEXTCOM+1>SUPERMAXCOM THEN 00726500
|
|
BEGIN ROOT~0; FATAL(124) END 00726600
|
|
ELSE ROOT~NEXTCOM ; 00726700
|
|
PUTC(ROOT,0&HEADER[TOCLASS]&1[TOCE]&ROOT[TOADDR]) ; 00726800
|
|
BAPC(Z); 00726900
|
|
END ELSE 00727000
|
|
BEGIN 00727100
|
|
ROOT ~ T.ADINFO; 00727200
|
|
COM[(T~GETC(ROOT).LASTC).IR,T.IC].LINK~NEXTCOM+1 ; 00727300
|
|
IF COM[PWROOT]<0 THEN FLAG(2) ; 00727400
|
|
END; 00727500
|
|
DIMENSION; 00727600
|
|
BAPC(0&ENDCOM[TOCLASS]) ; 00727700
|
|
COM[PWROOT].LASTC~NEXTCOM ; 00727800
|
|
PUT(T~GETC(ROOT+1)+2,GET(T)&ROOT[TOADINFO]) ; 00727900
|
|
IF NEXT ! SEMI THEN GO TO LOOP; 00728000
|
|
END COMMON; 00728100
|
|
PROCEDURE ENDS; 00728200
|
|
BEGIN 00728300
|
|
IF SPLINK=0 THEN FLAG(184) ELSE %112-00728400
|
|
BEGIN %112-00728500
|
|
EODS~FALSE ; 00728600
|
|
IF LOGIFTOG THEN FLAG(101); 00728700
|
|
LABL ~ BLANKS; 00728800
|
|
IF SPLINK < 0 THEN EMITO(XIT) ELSE EMITPAIR(0, KOM); 00728900
|
|
SEGMENT((ADR+4) DIV 4, NSEG, TRUE, EDOC); 00729000
|
|
END; %112-00729100
|
|
END ENDS; 00729200
|
|
PROCEDURE ENTRY; 00729300
|
|
BEGIN 00729400
|
|
REAL SP; 00729500
|
|
IF SPLINK = 0 THEN FLAG(111) ELSE 00729600
|
|
IF SPLINK = 1 THEN BEGIN ELX ~ 0; FLAG(4) END; 00729700
|
|
LABL ~ BLANKS; 00729800
|
|
ADJUST ; 00729900
|
|
SP ~ GET(SPLINK); 00730000
|
|
FORMALPP( (T~SP.CLASS) = FUNID, T); 00730100
|
|
GETALL(FNEW, INFA, INFB, INFC); 00730200
|
|
IF INFA.CLASS = FUNID THEN 00730300
|
|
PUT(FNEW, INFA & 1[TOTYPE] & (SP.SUBCLASS)[TOSUBCL]); 00730400
|
|
PUT(FNEW+2, INFC & (ADR+1)[TOBASE]); 00730500
|
|
END ENTRY; 00730600
|
|
PROCEDURE EQUIVALENCE; 00730700
|
|
COMMENT THIS PROCEDURE MAKES THE COM ENTRY FOR EQUIV ITEMS AND SETS 00730800
|
|
THE EQ BIT IN BOTH THE COM AND INFO TABLES AND LINKS 00730900
|
|
THE HEADS OF CHAINS; 00731000
|
|
BEGIN 00731100
|
|
REAL P, Q, R, S; 00731200
|
|
BOOLEAN FIRST,PCOMM; 00731300
|
|
LABEL XIT; 00731400
|
|
IF LOGIFTOG THEN FLAG(101); 00731500
|
|
LABL ~ BLANKS; 00731600
|
|
DO 00731700
|
|
BEGIN 00731800
|
|
FIRST ~ FALSE; 00731900
|
|
SCAN; 00732000
|
|
IF NEXT ! LPAREN THEN BEGIN FLOG(106); GO TO XIT END; 00732100
|
|
IF NEXTCOM~NEXTCOM+1>SUPERMAXCOM THEN 00732200
|
|
BEGIN ROOT~0; FATAL(124) END 00732300
|
|
ELSE ROOT~NEXTCOM ; 00732400
|
|
PUTC(ROOT,0&HEADER[TOCLASS]&ROOT[TOADDR]) ; 00732500
|
|
BAPC(0); Q~0 ; 00732600
|
|
DO 00732700
|
|
BEGIN 00732800
|
|
SCAN; 00732900
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 00733000
|
|
IF XREF THEN ENTERX(NAME,0&GET(FNEXT)[15:15:9]); 00733100
|
|
FX1 ~ FNEXT; 00733200
|
|
LENGTH ~ 0; 00733300
|
|
SCAN; 00733400
|
|
IF NEXT = LPAREN THEN 00733500
|
|
BEGIN 00733600
|
|
IF GET(FX1).CLASS ! ARRAYID THEN 00733700
|
|
BEGIN XTA ~ GET(FX1+1); FLOG(112) END; 00733800
|
|
R ~ 0; P ~ 1; 00733900
|
|
S ~ GET(FX1+2).ADINFO; 00734000
|
|
DO 00734100
|
|
BEGIN 00734200
|
|
SCAN; 00734300
|
|
IF NEXT ! NUM OR NUMTYPE ! INTYPE THEN FLAG(113); 00734400
|
|
LENGTH ~ LENGTH + P|(FNEXT-1); 00734500
|
|
P ~ P|EXTRAINFO[(S+R).IR,(S+R).IC] ; 00734600
|
|
R ~ R-1; 00734700
|
|
SCAN; 00734800
|
|
END UNTIL NEXT ! COMMA; 00734900
|
|
IF NEXT ! RPAREN THEN BEGIN FLOG(108); GO TO XIT END; 00735000
|
|
IF R!-1 THEN IF R~R+GET(FX1+2).NEXTRA!0 THEN 00735100
|
|
BEGIN XTA~GET(FX1+1); FLAG(IF R>0 THEN 23 ELSE 24) END ; 00735200
|
|
SCAN; 00735300
|
|
END; 00735400
|
|
IF (INFA~GET(FX1)) < 0 THEN 735500
|
|
BEGIN XTA ~ GET(FX1+1); FLAG(39) END ELSE 735600
|
|
BEGIN 735700
|
|
IF INFA.SUBCLASS > LOGTYPE THEN LENGTH ~ 2|LENGTH ; 00735800
|
|
BAPC(INFA&FX1[TOLINK]&LENGTH[TORELADD]&1[TOEQ]&ROOT[TOLASTC]); 00735900
|
|
IF(PCOMM~BOOLEAN(INFA.CE)) OR BOOLEAN(INFA.EQ) THEN 00736000
|
|
BEGIN 00736100
|
|
IF FIRST AND PCOMM THEN BEGIN XTA~GET(FX1+1); FLAG(2) END 00736200
|
|
ELSE IF NOT FIRST THEN FIRST ~ PCOMM; 00736300
|
|
PUT(FX1,INFA & 1[TOEQ]); 00736400
|
|
COM[NEXTCOM.IR,NEXTCOM.IC].LASTC ~ A ~ INFA.ADDR; 00736500
|
|
B~GETC(ROOT).ADDR ; 00736600
|
|
SETLINK(A); 00736700
|
|
IF NOT RINGCHECK THEN 00736800
|
|
BEGIN 00736900
|
|
COM[PWROOT].ADDR~GETC(A).ADDR ; 00737000
|
|
PUTC(A,GETC(A)&B[TOADDR]&7[TOSUBCL]) ; 00737100
|
|
END 00737200
|
|
END ELSE 00737300
|
|
PUT(FX1,INFA & 1[TOEQ] & ROOT[TOADDR]); 00737400
|
|
IF LENGTH > Q THEN Q ~ LENGTH; 00737500
|
|
IF BOOLEAN(INFA.FORMAL) THEN 00737600
|
|
BEGIN XTA ~ GET(FX1+1); FLAG(11) END; 00737700
|
|
END; 00737800
|
|
END UNTIL NEXT ! COMMA; 00737900
|
|
IF NEXT ! RPAREN THEN BEGIN FLOG(108); GO TO XIT END; 00738000
|
|
SCAN; 00738100
|
|
PUTC(ROOT+1,Q); 00738200
|
|
BAPC(0&ENDCOM[TOCLASS]) ; 00738300
|
|
COM[PWROOT].LASTC~NEXTCOM ; 00738400
|
|
END UNTIL NEXT ! COMMA; 00738500
|
|
XIT: 00738600
|
|
END EQUIVALENCE; 00738700
|
|
PROCEDURE EXTERNAL; 00738800
|
|
BEGIN 00738900
|
|
IF SPLINK < 0 THEN FLAG( 12); 00739000
|
|
IF LOGIFTOG THEN FLAG(101); 00739100
|
|
LABL ~ BLANKS; 00739200
|
|
DO 00739300
|
|
BEGIN 00739400
|
|
SCAN; 00739500
|
|
IF NEXT ! ID THEN FLOG(105) ELSE 00739600
|
|
BEGIN T ~ NEED(NAME,EXTID); 00739700
|
|
IF XREF THEN ENTERX(NAME,0&GET(T)[15:15:9]); 00739800
|
|
SCAN; 00739900
|
|
END; 00740000
|
|
END UNTIL NEXT ! COMMA; 00740100
|
|
END EXTERNAL; 00740200
|
|
PROCEDURE CHAIN; 00740300
|
|
BEGIN 00740400
|
|
LABEL AGN, XIT; 00740500
|
|
REAL T1; 00740600
|
|
DEFINE FLG(FLG1) = BEGIN FLOG(FLG1); GO TO XIT END#; 00740700
|
|
EXECUTABLE; 00740800
|
|
SCAN; 00740900
|
|
T1 ~ 2; 00741000
|
|
IF FALSE THEN 00741100
|
|
AGN: IF GLOBALNEXT ! COMMA THEN FLG(28); 00741200
|
|
SCAN; 00741300
|
|
IF EXPR(TRUE) > REALTYPE THEN FLG(102); 00741400
|
|
IF (T1 ~ T1 - 1) ! 0 THEN GO TO AGN; 00741500
|
|
IF GLOBALNEXT ! RPAREN THEN FLG(3); 00741600
|
|
EMITPAIR(37,KOM); 00741700
|
|
SCAN; 00741800
|
|
IF GLOBALNEXT ! SEMI THEN FLOG(117); 00741900
|
|
XIT: WHILE GLOBALNEXT ! SEMI DO SCAN; 00742000
|
|
END CHAIN; 00742100
|
|
PROCEDURE GOTOS; 00742200
|
|
BEGIN LABEL XIT; 00742300
|
|
REAL ASSIGNEDID; 00742400
|
|
EODS~TRUE ; 00742500
|
|
EXECUTABLE; 00742600
|
|
SCAN; 00742700
|
|
IF NEXT = NUM THEN 00742800
|
|
BEGIN 00742900
|
|
LABELBRANCH(NAME, FALSE); 00743000
|
|
SCAN; 00743100
|
|
GO TO XIT; 00743200
|
|
END; 00743300
|
|
IF NEXT = ID THEN 00743400
|
|
BEGIN 00743500
|
|
ASSIGNEDID ~ FNEXT; 00743600
|
|
IF XREF THEN ENTERX(XTA,0&GET(FNEXT)[15:15:9]); 00743700
|
|
SCAN; 00743800
|
|
IF NEXT ! COMMA THEN FLOG(114); 00743900
|
|
SCAN; 00744000
|
|
IF NEXT ! LPAREN THEN FLOG(106); 00744100
|
|
DO 00744200
|
|
BEGIN 00744300
|
|
SCAN; 00744400
|
|
IF NEXT ! NUM THEN FLOG(109); 00744500
|
|
EMITV(ASSIGNEDID); 00744600
|
|
EMITNUM(FNEXT); 00744700
|
|
EMITO(NEQL); 00744800
|
|
LABELBRANCH(NAME, TRUE); 00744900
|
|
SCAN; 00745000
|
|
END UNTIL NEXT ! COMMA; 00745100
|
|
IF NEXT ! RPAREN THEN FLOG(108); 00745200
|
|
SCAN; 00745300
|
|
EMITPAIR(1, SSN); % CAUSE INVALID INDEX TERMINATION 00745400
|
|
EMITDESCLIT(10); 00745500
|
|
GO TO XIT; 00745600
|
|
END; 00745700
|
|
IF NEXT ! LPAREN THEN FLOG(106); 00745800
|
|
P ~ 0; 00745900
|
|
DO 00746000
|
|
BEGIN 00746100
|
|
SCAN; 00746200
|
|
IF NEXT ! NUM THEN BEGIN FLOG(109); GO TO XIT END; 00746300
|
|
LSTT[P~P+1] ~ NAME; 00746400
|
|
SCAN; 00746500
|
|
END UNTIL NEXT ! COMMA; 00746600
|
|
IF NEXT ! RPAREN THEN BEGIN FLOG(108); GO TO XIT END; 00746700
|
|
SCAN; 00746800
|
|
IF NEXT ! COMMA THEN BEGIN FLOG(114); GO TO XIT END; 00746900
|
|
SCAN; 00747000
|
|
IT ~ P+1; % DONT LET EXPR WIPE OUT LSTT 00747100
|
|
IF EXPR(TRUE) > REALTYPE THEN FLOG(102); 00747200
|
|
EMITPAIR(JUNK, ISN); 00747300
|
|
EMITPAIR(1,LESS); 00747400
|
|
EMITOPDCLIT(JUNK); 00747500
|
|
EMITO(LOR); 00747600
|
|
EMITOPDCLIT(JUNK); 00747700
|
|
EMITL(3); 00747800
|
|
EMITO(MUL); 00747900
|
|
IF ADR+3|P > 4085 THEN BEGIN ADR~ADR+1; SEGOVF END; 00748000
|
|
EMITO(BFC); 00748100
|
|
EMITPAIR(1, SSN); 00748200
|
|
EMITDESCLIT(10); 00748300
|
|
FOR I ~ 1 STEP 1 UNTIL P DO 00748400
|
|
BEGIN 00748500
|
|
J ~ ADR; LABELBRANCH(LSTT[I], FALSE); 00748600
|
|
IF ADR-J = 2 THEN EMITO(NOP); 00748700
|
|
END; 00748800
|
|
XIT: 00748900
|
|
IT ~ 0; 00749000
|
|
END GOTOS; 00749100
|
|
PROCEDURE IFS; 00749200
|
|
BEGIN REAL TYPE, LOGIFADR, SAVELABL; 00749300
|
|
EODS~TRUE; 00749400
|
|
EXECUTABLE; 00749500
|
|
SCAN; 00749600
|
|
IF NEXT ! LPAREN THEN FLOG(106); 00749700
|
|
SCAN; 00749800
|
|
IF TYPE ~ EXPR(TRUE) = COMPTYPE THEN FLAG(89); 00749900
|
|
IF NEXT ! RPAREN THEN FLOG(108); 00750000
|
|
IF TYPE = LOGTYPE THEN 00750100
|
|
BEGIN 00750200
|
|
EMITB(-1, TRUE); 00750300
|
|
LOGIFADR ~ LAX; 00750400
|
|
LOGIFTOG ~ TRUE; EOSTOG ~ TRUE; 00750500
|
|
SAVELABL ~ LABL; LABL ~ BLANKS; 00750600
|
|
STATEMENT; 00750700
|
|
LABL ~ SAVELABL; 00750800
|
|
LOGIFTOG ~ FALSE; EOSTOG ~ FALSE; 00750900
|
|
FIXB(LOGIFADR); 00751000
|
|
END ELSE 00751100
|
|
BEGIN 00751200
|
|
IF TYPE = DOUBTYPE THEN 00751300
|
|
BEGIN EMITO(XCH); EMITO(DEL) END; 00751400
|
|
SCAN; 00751500
|
|
IF NEXT ! NUM THEN FLOG(109); 00751600
|
|
FX1 ~ FNEXT; NX1 ~ NAME; 00751700
|
|
SCAN; 00751800
|
|
IF NEXT ! COMMA THEN FLOG(114); 00751900
|
|
SCAN; 00752000
|
|
IF NEXT ! NUM THEN FLOG(109); 00752100
|
|
FX2 ~ FNEXT; NX2 ~ NAME; 00752200
|
|
SCAN; 00752300
|
|
IF NEXT ! COMMA THEN FLOG(114); 00752400
|
|
SCAN; 00752500
|
|
IF NEXT ! NUM THEN FLOG(109); 00752600
|
|
FX3 ~ FNEXT; NX3 ~ NAME; 00752700
|
|
SCAN; 00752800
|
|
IF FX2 = FX3 THEN 00752900
|
|
BEGIN 00753000
|
|
EMITPAIR(0,GEQL); 00753100
|
|
LABELBRANCH(NX1, TRUE); 00753200
|
|
LABELBRANCH(NX3, FALSE); 00753300
|
|
IF XREF THEN ENTERX(NX2,0&LABELID[TOCLASS]); 00753400
|
|
END ELSE 00753500
|
|
IF FX1 = FX3 THEN 00753600
|
|
BEGIN 00753700
|
|
EMITPAIR(0,NEQL); 00753800
|
|
LABELBRANCH(NX2, TRUE); 00753900
|
|
LABELBRANCH(NX1, FALSE); 00754000
|
|
IF XREF THEN ENTERX(NX3,0&LABELID[TOCLASS]); 00754100
|
|
END ELSE 00754200
|
|
IF FX1 = FX2 THEN 00754300
|
|
BEGIN 00754400
|
|
EMITPAIR(0,LEQL); 00754500
|
|
LABELBRANCH(NX3, TRUE); 00754600
|
|
LABELBRANCH(NX1, FALSE); 00754700
|
|
IF XREF THEN ENTERX(NX2,0&LABELID[TOCLASS]); 00754800
|
|
END ELSE 00754900
|
|
BEGIN 00755000
|
|
EMITO(DUP); 00755100
|
|
EMITPAIR(0,NEQL); 00755200
|
|
EMITB(-1,TRUE); 00755300
|
|
EMITPAIR(0,LESS); 00755400
|
|
LABELBRANCH(NX3, TRUE); 00755500
|
|
LABELBRANCH(NX1, FALSE); 00755600
|
|
FIXB(LAX); 00755700
|
|
EMITO(DEL); 00755800
|
|
LABELBRANCH(NX2, FALSE); 00755900
|
|
END; 00756000
|
|
END; 00756100
|
|
END IFS; 00756200
|
|
PROCEDURE NAMEL; 00756300
|
|
BEGIN LABEL NIM,XIT,ELMNT,WRAP; 00756400
|
|
IF SPLINK < 0 THEN FLAG(12); 00756500
|
|
IF LOGIFTOG THEN FLAG(101); 00756600
|
|
LABL ~ BLANKS; 00756700
|
|
SCAN; IF NEXT ! SLASH THEN FLOG(110); 00756800
|
|
NIM: SCAN; IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 00756900
|
|
IF J ~ (INFA ~ GET(LADR2 ~ FNEXT)).CLASS = UNKNOWN THEN 00757000
|
|
PUT(LADR2,INFA&NAMELIST[TOCLASS]) 00757100
|
|
ELSE IF J ! NAMELIST THEN 00757200
|
|
BEGIN XTA ~ GET(LADR2 + 1); 00757300
|
|
FLAG(20); 00757400
|
|
END; 00757500
|
|
LSTT[LSTS ~ LADR1 ~ 0] ~ NAME; 00757600
|
|
IF XREF THEN ENTERX(NAME,0&NAMELIST[TOCLASS]); 00757700
|
|
SCAN; IF NEXT ! SLASH THEN FLOG(110); 00757800
|
|
ELMNT: SCAN; IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 00757900
|
|
LADR1 ~ LADR1 + 1; 00758000
|
|
IF (T ~ GET(FNEW ~ GETSPACE(FNEXT)).CLASS) > VARID THEN FLAG(48); 00758100
|
|
GETALL(FNEW,INFA,INFB,INFC); 00758200
|
|
IF XREF THEN ENTERX(INFB,0&INFA[15:15:9]); 00758300
|
|
IF LSTS ~ LSTS+1 = LSTMAX THEN BEGIN FLOG(78); GO TO XIT END ELSE 00758400
|
|
LSTT[LSTS] ~ NAME&INFA.CLASNSUB[2:38:10]&0[8:47:1]; 00758500
|
|
IF T = ARRAYID THEN 00758600
|
|
BEGIN J ~ INFC.ADINFO; 00758700
|
|
I ~ INFC.NEXTRA; 00758800
|
|
IF LSTS + I + 1 > LSTMAX THEN 00758900
|
|
BEGIN FLOG(78); GO TO XIT END; 00759000
|
|
LSTT[LSTS ~ LSTS + 1] ~ 0&I[1:42:6] % # DIMENSIONS 00759100
|
|
&INFA.ADDR[7:37:11] % REL ADR 00759200
|
|
&INFC.BASE[18:33:15] % BASE 00759300
|
|
&INFC.SIZE[33:33:15]; % SIZE 00759400
|
|
FOR T ~ J STEP -1 UNTIL J - I + 1 DO 00759500
|
|
LSTT[LSTS ~ LSTS + 1] ~ EXTRAINFO[T.IR,T.IC]; 00759600
|
|
END ELSE BEGIN LSTT[LSTS~LSTS+1]~0&(INFA.ADDR)[7:37:11]; 00759700
|
|
IF BOOLEAN(INFA.CE) THEN LSTT[LSTS]~LSTT[LSTS]&INFC.BASE[18:33:15]00759800
|
|
&INFC.SIZE[33:33:15] END; 00759900
|
|
SCAN; IF NEXT = COMMA THEN GO TO ELMNT; 00760000
|
|
IF NEXT ! SEMI AND NEXT ! SLASH THEN FLOG(115); 00760100
|
|
LSTT[LSTS + 1] ~ 0; 00760200
|
|
LSTT[0].[2:10] ~ LADR1; 00760300
|
|
PRTSAVER(LADR2,LSTS + 2,LSTT); 00760400
|
|
IF NEXT ! SEMI THEN GO TO NIM; 00760500
|
|
XIT: 00760600
|
|
END NAMEL; 00760700
|
|
PROCEDURE PAUSE; 00760800
|
|
IF DCINPUT THEN BEGIN XTA~"PAUSE "; FLOG(151) END ELSE 00760900
|
|
BEGIN 00761000
|
|
EODS~TRUE ; 00761100
|
|
IF TSSEDITOG THEN TSSED("PAUSE ",2) ; 00761200
|
|
EXECUTABLE; 00761300
|
|
SCAN; 00761400
|
|
IF NEXT = SEMI THEN EMITL(0) ELSE 00761500
|
|
IF NEXT = NUM THEN 00761600
|
|
BEGIN 00761700
|
|
EMITNUM(NAME); 00761800
|
|
SCAN; 00761900
|
|
END; 00762000
|
|
EMITPAIR(33, KOM); 00762100
|
|
EMITO(DEL); 00762200
|
|
END PAUSE; 00762300
|
|
PROCEDURE TYPIT(TYP,TMPNXT); VALUE TYP; REAL TYP,TMPNXT ; 00762400
|
|
BEGIN 00762500
|
|
TYPE~TYP; SCAN ; 00762600
|
|
IF NEXT=16 THEN BEGIN TMPNXT~16; FUNCTION END ELSE DIMENSION ; 00762700
|
|
END OF TYPIT ; 00762800
|
|
DEFINE COMPLEX =TYPIT(COMPTYPE,TEMPNEXT) #, 00762900
|
|
LOGICAL =TYPIT(LOGTYPE ,TEMPNEXT) #, 00763000
|
|
DOUBLEPRECISION =TYPIT(DOUBTYPE,TEMPNEXT) #, 00763100
|
|
INTEGERS =TYPIT(INTYPE ,TEMPNEXT) #, 00763200
|
|
REALS =TYPIT(REALTYPE,TEMPNEXT) #; 00763300
|
|
PROCEDURE STOP; 00763400
|
|
BEGIN 00763500
|
|
RETURNFOUND ~ TRUE; 00763600
|
|
EODS~TRUE; 00763700
|
|
EXECUTABLE; 00763800
|
|
COMMENT INITIAL SCAN ALREADY DONE; 00763900
|
|
EMITL(1); 00764000
|
|
EMITPAIR(16,STD); 00764100
|
|
EMITPAIR(10, KOM); 00764200
|
|
EMITPAIR(5, KOM); 00764300
|
|
WHILE NEXT ! SEMI DO SCAN; 00764400
|
|
END STOP; 00764500
|
|
PROCEDURE RETURN; 00764600
|
|
BEGIN LABEL EXIT; 00764700
|
|
REAL T, XITCODE; 00764800
|
|
RETURNFOUND ~ TRUE; 00764900
|
|
EODS~TRUE ; 00765000
|
|
EXECUTABLE; 00765100
|
|
SCAN; 00765200
|
|
IF SPLINK=0 OR SPLINK=1 THEN 00765300
|
|
BEGIN XTA~"RETURN"; FLOG(153); GO EXIT END ; 00765400
|
|
IF NEXT = SEMI THEN 00765500
|
|
BEGIN 00765600
|
|
IF (T ~ GET(SPLINK)).CLASS = FUNID THEN 00765700
|
|
BEGIN 00765800
|
|
EMITV(FUNVAR); 00765900
|
|
IF T.SUBCLASS > LOGTYPE THEN EMITPAIR(JUNK, STD); 00766000
|
|
XITCODE ~ RTN; 00766100
|
|
END ELSE XITCODE ~ XIT; 00766200
|
|
IF ADR } 4077 THEN 00766300
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 00766400
|
|
EMITOPDCLIT(1538); % F+2 00766500
|
|
EMITPAIR(3, BFC); 00766600
|
|
EMITPAIR(10, KOM); 00766700
|
|
EMITO(XITCODE); 00766800
|
|
EMITOPDCLIT(16); 00766900
|
|
EMITPAIR(1, SUB); 00767000
|
|
EMITPAIR(16, STD); 00767100
|
|
EMITO(XITCODE); 00767200
|
|
GO TO EXIT; 00767300
|
|
END; 00767400
|
|
IF LABELMOM = 0 THEN FLOG(145); 00767500
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 00767600
|
|
IF EXPRESULT = NUMCLASS THEN 00767700
|
|
BEGIN IF XREF THEN ENTERX(EXPVALUE,0&LABELID[TOCLASS]); 00767800
|
|
ADR ~ ADR-1;EMITL(EXPVALUE-1) 00767900
|
|
END ELSE 00768000
|
|
EMITPAIR(1, SUB); 00768100
|
|
EMITOPDCLIT(LABELMOM); 00768200
|
|
EMITO(MKS); 00768300
|
|
EMITL(9); 00768400
|
|
EMITOPDCLIT(5); 00768500
|
|
EXIT: 00768600
|
|
END RETURN; 00768700
|
|
PROCEDURE IMPLICIT ; 00768800
|
|
BEGIN 00768900
|
|
REAL R1,R2,R3,R4 ; 00769000
|
|
LABEL R,A,X,L ; 00769100
|
|
IF NOT(LASTNEXT=42 OR LASTNEXT=1000 OR LASTNEXT=30 %110-00769200
|
|
OR LASTNEXT=16 OR LASTNEXT = 11) %110-00769300
|
|
THEN BEGIN FLOG(181); FILETOG~TRUE; GO X END ; 00769400
|
|
R: EOSTOG~ERRORTOG~TRUE; FILETOG~FALSE ; 00769500
|
|
MOVEW(ACCUM[3],ACCUM[2],0,3); SCAN; ERRORTOG~FALSE; FILETOG~TRUE ; 00769600
|
|
IF R1~IF R2~NEXT=18 THEN INTID ELSE IF R3=26 THEN REALID ELSE 0& 00769700
|
|
(IF R3=10 THEN DOUBTYPE ELSE IF R3=19 THEN LOGTYPE ELSE IF R3=00769800
|
|
6 THEN COMPTYPE ELSE 0)[TOSUBCL]=0 THEN 00769900
|
|
BEGIN FLOG(182); GO X END ; 00770000
|
|
SCN~2; SCAN ; 00770100
|
|
IF NEXT = STAR THEN IF R3!10 THEN 00770200
|
|
BEGIN SCAN ; 00770300
|
|
IF NEXT=NUM AND NUMTYPE=INTYPE THEN 00770400
|
|
BEGIN 00770500
|
|
IF FNEXT=4 THEN BEGIN IF R3=6 THEN FLAG(176); GO L END ; 00770600
|
|
IF FNEXT=8 THEN 00770700
|
|
BEGIN 00770800
|
|
IF R3=26 THEN R1~0&DOUBTYPE[TOSUBCL] 00770900
|
|
ELSE IF R3!6 THEN FLAG(177) ; 00771000
|
|
GO L; 00771100
|
|
END ; 00771200
|
|
END ; 00771300
|
|
FLAG(IF R3=26 THEN 178 ELSE 177-REAL(R3=6)) ; 00771400
|
|
L: NCR~REAL(NCR.[30:3]!0)+3"677777"+NCR; SCN~1; SCAN ; 00771500
|
|
END ; 00771600
|
|
IF NEXT!LPAREN THEN BEGIN FLOG(106); GO X END ; 00771700
|
|
A: SCAN; R4~ERRORCT ; 00771800
|
|
IF R2~NAME.[12:6]<17 OR (R2>25 AND R2<33) OR (R2>41 AND R2<50) 00771900
|
|
OR R2>57 OR NAME.[18:30]!" " THEN FLAG(179) ; 00772000
|
|
SCAN ; 00772100
|
|
IF NEXT!MINUS THEN 00772200
|
|
BEGIN IF ERRORCT=R4 THEN TIPE[IF R2!"0" THEN R2 ELSE 12]~R1 END00772300
|
|
ELSE BEGIN 00772400
|
|
SCAN ; 00772500
|
|
IF R3~NAME.[12:6]<17 OR (R3>25 AND R3<33) OR (R3>41 AND R3<50) 00772600
|
|
OR R3>57 OR NAME.[18:30]!" " THEN FLAG(179) ; 00772700
|
|
IF R3 LEQ R2 THEN FLAG(180) ; 00772800
|
|
IF ERRORCT=R4 THEN FOR R2~R2 STEP 1 UNTIL R3 DO 00772900
|
|
BEGIN 00773000
|
|
IF R2>25 AND R2<33 THEN R2~33 ELSE IF R2>41 AND R2<50 00773100
|
|
THEN R2~50 ; 00773200
|
|
TIPE[IF R2!"0" THEN R2 ELSE 12]~R1 ; 00773300
|
|
END ; 00773400
|
|
SCAN ; 00773500
|
|
END ; 00773600
|
|
IF NEXT=COMMA THEN GO A ; 00773700
|
|
IF NEXT!RPAREN THEN BEGIN FLOG(108); GO X END ; 00773800
|
|
SCAN; IF NEXT=COMMA THEN GO R ; 00773900
|
|
IF NEXT!SEMI THEN BEGIN FLOG(117); GO X END ; 00774000
|
|
IF SPLINK > 1 THEN 00774100
|
|
BEGIN 00774200
|
|
IF BOOLEAN(TYPE.[2:1]) THEN IF GET(SPLINK).CLASS=FUNID THEN 00774300
|
|
BEGIN 00774400
|
|
INFO[SPLINK.IR,SPLINK.IC].SUBCLASS~R3~TIPE[IF R3~GET( 00774500
|
|
SPLINK+1).[12:6]!"0" THEN R3 ELSE 12].SUBCLASS ; 00774600
|
|
INFO[FUNVAR.IR,FUNVAR.IC].SUBCLASS~R3 ; 00774700
|
|
END ; 00774800
|
|
IF R1~GET(SPLINK+2)<0 THEN 00774900
|
|
FOR R2~R1.NEXTRA-1+R1~R1.ADINFO STEP -1 UNTIL R1 DO 00775000
|
|
IF R3~PARMLINK[R2-R1+1]!0 THEN 00775100
|
|
BEGIN 00775200
|
|
EXTRAINFO[R2.IR,R2.IC].SUBCLASS~R4~TIPE[IF R4~ 00775300
|
|
GET(R3+1).[12:6]!"0" THEN R4 ELSE 12] 00775400
|
|
.SUBCLASS ; 00775500
|
|
INFO[R3.IR,R3.IC].SUBCLASS~R4 ; 00775600
|
|
END ; 00775700
|
|
END ; 00775800
|
|
X: WHILE NEXT!SEMI DO SCAN; FILETOG~FALSE ; 00775900
|
|
END OF IMPLICIT ; 00776000
|
|
00776100
|
|
PROCEDURE SUBROUTINE; 00776200
|
|
BEGIN 00776300
|
|
IF SPLINK NEQ 0 THEN BEGIN FLAG(5); ENDS; SEGMENTSTART; END; 00776400
|
|
LABL ~ BLANKS; 00776500
|
|
FORMALPP(FALSE, SUBRID); 00776600
|
|
SPLINK ~ FNEW; 00776700
|
|
END SUBROUTINE; 00776800
|
|
PROCEDURE MEMHANDLER(N); VALUE N; REAL N ; 00776900
|
|
BEGIN 00777000
|
|
REAL A ; 00777100
|
|
LABEL L1,L2,L3,XIT ; 00777200
|
|
IF DEBUGTOG THEN FLAGROUTINE(" MEMHA","NDLER ",TRUE) ; 00777300
|
|
IF N LEQ 2 THEN 00777400
|
|
BEGIN % FIXED=1, VARYING=2. 00777500
|
|
N~IF N=1 THEN 6 ELSE 0 ; 00777600
|
|
L1: SCAN; 00777700
|
|
IF NEXT!ID THEN BEGIN FLOG(105); GO XIT END ; 00777800
|
|
IF (A~GET(GETSPACE(FNEXT))).CLASS!ARRAYID THEN 00777900
|
|
BEGIN FLOG(35); GO XIT END ; 00778000
|
|
IF XREF THEN ENTERX(XTA,0&A[15:15:9]) ; 00778100
|
|
IF BOOLEAN(A.EQ) OR BOOLEAN(A.FORMAL) THEN FLAG(169) 00778200
|
|
ELSE BEGIN 00778300
|
|
EMITO(MKS); EMITPAIR(A.ADDR,LOD); EMITL(N) ; 00778400
|
|
EMITV(NEED(".MEMHR",INTRFUNID)) ; 00778500
|
|
END ; 00778600
|
|
SCAN; IF NEXT=COMMA THEN GO L1 ; 00778700
|
|
END 00778800
|
|
ELSE IF N=3 THEN 00778900
|
|
BEGIN % AUXMEMED FUNCTION OR SUBROUTINE. 00779000
|
|
SCAN ; 00779100
|
|
IF NEXT!ID THEN BEGIN FLOG(105); GO XIT END ; 00779200
|
|
IF GET(FNEXT+1)!GET(SPLINK+1) THEN 00779300
|
|
BEGIN FLOG(170); GO XIT END ; 00779400
|
|
PUT(SPLINK,GET(SPLINK)&1[TOADJ]) ; 00779500
|
|
IF XREF THEN ENTERX(XTA,0&GET(FNEXT)[15:15:9]); SCAN ; 00779600
|
|
END 00779700
|
|
ELSE BEGIN % RELEASE. 00779800
|
|
L2: SCAN ; 00779900
|
|
IF NEXT!ID THEN BEGIN FLOG(105); GO XIT END ; 00780000
|
|
IF (A~GET(GETSPACE(FNEXT))).CLASS=ARRAYID THEN 00780100
|
|
BEGIN 00780200
|
|
IF BOOLEAN(A.EQ) OR BOOLEAN(A.FORMAL) THEN FLAG(169) 00780300
|
|
ELSE BEGIN 00780400
|
|
EMITO(MKS); EMITPAIR(A.ADDR,LOD) ; 00780500
|
|
EMITPAIR(1,SSN) ; 00780600
|
|
EMITV(NEED(".MEMHR",INTRFUNID)) ; 00780700
|
|
END ; 00780800
|
|
L3: IF XREF THEN ENTERX(XTA,0&A[15:15:9]) ; 00780900
|
|
END 00781000
|
|
ELSE IF A.CLASS}BLOCKID OR A.CLASS{LABELID THEN 00781100
|
|
BEGIN FLOG(171); GO XIT END 00781200
|
|
ELSE BEGIN 00781300
|
|
EMITPAIR(A.ADDR,LOD); EMITPAIR(38,KOM) ; 00781400
|
|
EMITO(DEL); GO L3 ; 00781500
|
|
END ; 00781600
|
|
SCAN; IF NEXT=COMMA THEN GO L2 ; 00781700
|
|
END ; 00781800
|
|
XIT:IF DEBUGTOG THEN FLAGROUTINE(" MEMHA","NDLER ",FALSE) ; 00781900
|
|
END OF MEMHANDLER ; 00782000
|
|
PROCEDURE STATEMENT; 00782100
|
|
BEGIN LABEL DOL1, XIT; 00782200
|
|
REAL TEMPNEXT ; 00782300
|
|
BOOLEAN ENDTOG; %112-00782400
|
|
DO SCAN UNTIL NEXT ! SEMI; 00782500
|
|
IF NEXT=ID THEN ASSIGNMENT ELSE IF NEXT LEQ RSH1 THEN 00782600
|
|
CASE(TEMPNEXT~NEXT) OF 00782700
|
|
BEGIN 00782800
|
|
FLOG(16); 00782900
|
|
ASSIGN; 00783000
|
|
IOCOMMAND(4); %BACKSPACE 00783100
|
|
BLOCKDATA; 00783200
|
|
CALL; 00783300
|
|
COMMON; 00783400
|
|
COMPLEX; 00783500
|
|
BEGIN EXECUTABLE; SCAN END; % CONTINUE 00783600
|
|
IOCOMMAND(7); % DATA 00783700
|
|
BEGIN SCAN; TYPE ~ -1; DIMENSION END; 00783800
|
|
DOUBLEPRECISION; 00783900
|
|
BEGIN ENDS; ENDTOG:=TRUE; SCAN END; %112-00784000
|
|
FILECONTROL(1); %ENDFILE 00784100
|
|
ENTRY; 00784200
|
|
EQUIVALENCE; 00784300
|
|
EXTERNAL; 00784400
|
|
BEGIN TYPE ~ -1; FUNCTION END; 00784500
|
|
GOTOS; 00784600
|
|
INTEGERS; 00784700
|
|
LOGICAL; 00784800
|
|
NAMEL; 00784900
|
|
PAUSE; 00785000
|
|
IOCOMMAND(2); %PRINT 00785100
|
|
; 00785200
|
|
IOCOMMAND(3); %PUNCH 00785300
|
|
IOCOMMAND(0); %READ 00785400
|
|
REALS; 00785500
|
|
RETURN; 00785600
|
|
FILECONTROL(0); %REWIND 00785700
|
|
BEGIN SCAN; STOP END; 00785800
|
|
SUBROUTINE; 00785900
|
|
IOCOMMAND(1); %WRITE 00786000
|
|
FILECONTROL(7); %CLOSE 00786100
|
|
FILECONTROL(6); %LOCK 00786200
|
|
FILECONTROL(4); %PURGE 00786300
|
|
IFS; 00786400
|
|
FORMATER; 00786500
|
|
CHAIN; 00786600
|
|
MEMHANDLER(1) ; %FIXED 00786700
|
|
MEMHANDLER(2) ; %VARYING 00786800
|
|
MEMHANDLER(3) ; %AUXMEM FOR SUBPROGRAMS 00786900
|
|
MEMHANDLER(4) ; %RELEASE 00787000
|
|
IMPLICIT ; 00787100
|
|
END ELSE IF NEXT=EOF THEN GO XIT ELSE BEGIN NEXT~0; FLOG(16) END ; 00787200
|
|
LASTNEXT.[33:15]~TEMPNEXT ; 00787300
|
|
IF NOT ENDTOG THEN IF SPLINK=0 THEN SPLINK:=1; %112-00787400
|
|
ENDTOG:=FALSE; %112-00787500
|
|
IF LABL ! BLANKS THEN 00787600
|
|
BEGIN 00787700
|
|
IF DT ! 0 THEN 00787800
|
|
BEGIN 00787900
|
|
DOL1: IF LABL = DOLAB[TEST ~ DT] THEN 00788000
|
|
BEGIN 00788100
|
|
EMITB(DOTEST[DT], FALSE); 00788200
|
|
FIXB(DOTEST[DT].ADDR); 00788300
|
|
IF DT ~ DT-1 > 0 THEN GO TO DOL1; 00788400
|
|
END ELSE 00788500
|
|
WHILE TEST ~ TEST-1 > 0 DO 00788600
|
|
IF DOLAB[TEST] = LABL THEN FLAG(14); 00788700
|
|
END; 00788800
|
|
LABL ~ BLANKS; 00788900
|
|
END; 00789000
|
|
IF NEXT ! SEMI THEN 00789100
|
|
BEGIN 00789200
|
|
FLAG(117); 00789300
|
|
DO SCAN UNTIL NEXT=SEMI OR NEXT=EOF ; 00789400
|
|
END; 00789500
|
|
ERRORTOG ~ FALSE; 00789600
|
|
EOSTOG ~ TRUE; 00789700
|
|
XIT: 00789800
|
|
END STATEMENT; 00789900
|
|
00790000
|
|
BOOLEAN STREAM PROCEDURE FLAGLAST(BUFF,ERR) ; 00790100
|
|
BEGIN 00790200
|
|
LOCAL A; SI~ERR; 8(IF SC!" " THEN JUMP OUT;SI~SI+1;TALLY~TALLY+1);00790300
|
|
A~TALLY; SI~LOC A; SI~SI+7 ; 00790400
|
|
IF SC<"8" THEN 00790500
|
|
BEGIN TALLY~1; FLAGLAST~TALLY ; 00790600
|
|
DI~BUFF;DS~46 LIT"LAST SYNTAX ERROR OCCURRED AT SEQUENCE NUMBER ";00790700
|
|
DS~LIT"""; SI~ERR; DS~8 CHR; DS~LIT"""; 00790800
|
|
DS~32 LIT " "; %510-00790900
|
|
DS~32 LIT " "; %510-00791000
|
|
END 00791100
|
|
END FLAGLAST ; 00791200
|
|
INTEGER PROCEDURE FIELD(X); VALUE X; INTEGER X; 00791300
|
|
FIELD~IF X<10 THEN 1 ELSE IF X<100 THEN 2 ELSE IF X<1000 THEN 3 ELSE IF 00791400
|
|
X<10000 THEN 4 ELSE IF X<100000 THEN 5 ELSE IF X<1000000 THEN 6 ELSE 7; 00791500
|
|
FORMAT EOC1(/ "NUMBER OF SYNTAX ERRORS DETECTED = ",I*,".",X*, 00791600
|
|
"NUMBER OF SEQUENCE ERRORS DETECTED = ",I*,"."), 00791700
|
|
EOC2("PRT SIZE = ",I*,"; TOTAL SEGMENT SIZE = ",I*, 00791800
|
|
" WORDS; DISK SIZE = ",I*," SEGS; NO. PRGM. SEGS = ",I*, 00791900
|
|
"."), 00792000
|
|
EOC3("ESTIMATED CORE STORAGE REQUIREMENT = ",I*," WORDS;", 00792100
|
|
" COMPILATION TIME = ",I*," MIN, ",I*," SECS;", 00792200
|
|
" NO. CARDS = ",I*,"."), 00792300
|
|
EOC4("ESTIMATED CORE STORAGE REQUIREMENT = ",I*," WORDS;" 00792400
|
|
" COMPILATION TIME = ",I*," SECS; NO. CARDS = ",I*,"."), 00792500
|
|
EOC5("NUMBER OF TSS WARNINGS DETECTED = ",I*,".") ; 00792600
|
|
COMMENT MAIN DRIVER FOR FORTRAN COMPILER BEGINS HERE; 00792700
|
|
RTI ~ TIME(1); 00792800
|
|
INITIALIZATION; 00792900
|
|
DO STATEMENT UNTIL NEXT = EOF; 00793000
|
|
IF NOT ENDSEGTOG THEN IF SPLINK NEQ 0 %112-00793100
|
|
THEN BEGIN XTA:=BLANKS; FLAG(5); ENDS END; %112-00793200
|
|
WRAPUP; 00793300
|
|
POSTWRAPUP: 00793400
|
|
IF TIMETOG THEN IF FIRSTCALL THEN DATIME; 00793500
|
|
IF NOT FIRSTCALL THEN 00793600
|
|
BEGIN 00793700
|
|
WRITE(RITE,EOC1,FIELD(ERRORCT),ERRORCT,IF SEQERRCT=0 THEN 99 ELSE 00793800
|
|
5,FIELD(SEQERRCT-1),SEQERRCT-1) ; 00793900
|
|
IF WARNED AND NOT DCINPUT THEN WRITE(RITE,EOC5,FIELD(WARNCOUNT), 00794000
|
|
WARNCOUNT) ; 00794100
|
|
WRITE(RITE,EOC2,FIELD(PRTS),PRTS,FIELD(TSEGSZ),TSEGSZ,FIELD(DALOC-1),00794200
|
|
DALOC-1,FIELD(NXAVIL),NXAVIL) ; 00794300
|
|
IF C1~(TIME(1)-RTI)/60 > 59 THEN WRITE(RITE,EOC3,FIELD(64|ESTIMATE), 00794400
|
|
64|ESTIMATE,FIELD(C1 DIV 60),C1 DIV 60,FIELD(C1 MOD 60),C1 MOD 60, 00794500
|
|
FIELD(CARDCOUNT-1),CARDCOUNT-1) ELSE WRITE(RITE,EOC4,FIELD(ESTIMATE 00794600
|
|
|64),ESTIMATE|64,FIELD(C1),C1,FIELD(CARDCOUNT-1),CARDCOUNT-1) ; 00794700
|
|
IF ERRORCT>0 THEN IF FLAGLAST(ERRORBUFF,LASTERR) THEN WRITE(RITE,15, 00794800
|
|
ERRORBUFF[*]) ; 00794900
|
|
END ; 00795000
|
|
END INNER BLOCK; 00795100
|
|
END. 00795200
|