mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-02-14 19:16:17 +00:00
8246 lines
668 KiB
Plaintext
8246 lines
668 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 FEELD(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,"+",FEELD(FLAGROUTINECOUNTER~FLAGROUTINECOUNTER+1), 00600060
|
|
FLAGROUTINECOUNTER,0) ELSE 00600065
|
|
BEGIN 00600070
|
|
WRITALIST(FLAGROUTINEFORMAT,7,"LEAVIN","G ",NAME1,NAME2,"-", 00600080
|
|
FEELD(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 00723630
|
|
BEGIN LASTLINE~FALSE; WRITE(LINE,15,PRINTBUFF[*]) ; 00723640
|
|
L6: BLANKIT(PRINTBUFF,15,IT~0) ; 00723650
|
|
END; 00723660
|
|
SETPNT(REC[0],REC[1],PRINTBUFF,KLASS[REC[2].CLASS],TYPES[REC[2]00723670
|
|
.SUBCLASS],IF BOOLEAN(REC[2]) THEN "*" ELSE " ",IT,L-1, 00723680
|
|
LASTLINE,6-REC[2].[27:3]) ; 00723690
|
|
END 00723700
|
|
ELSE BEGIN 00723710
|
|
LASTLINE~TRUE; WRITE(RITE,15,PRINTBUFF[*]); XTA~REC[0] ;00723720
|
|
GO L6 ; 00723730
|
|
END ; 00723740
|
|
END OF PT ; 00723800 01868000
|
|
PROCEDURE CHECKINFO; 00724000
|
|
BEGIN REAL I, T, A; 00725000
|
|
REAL LASTF; 00725100
|
|
REAL INFB,INFC; 00726000
|
|
LABEL NXT; ALPHA N; 00727000
|
|
FORMAT INFOF( 3(A6, X2), 00728000
|
|
" ADDRESS = ", A2, A4, 00729000
|
|
", LENGTH = ", I5, 00730000
|
|
", OFFSET = ", I5), 00731000
|
|
INFOT( / "LOCAL IDENTIFIERS:"), 00732000
|
|
LABF(A6,X10,"LABEL REL-ADR = ",I6,", SEGMNT = ",I5); 00733000
|
|
IF PRTOG THEN 00734000
|
|
WRITALIST(INFOT,0,0,0,0,0,0,0,0,0) ; 00735000
|
|
IF I ~ SEARCH("ERR ") ! 0 THEN 00736000
|
|
IF GET(I).CLASS = UNKNOWN THEN PUT(I+1, "......"); 00737000
|
|
IF I ~ SEARCH("END ") ! 0 THEN 00738000
|
|
IF GET(I).CLASS = UNKNOWN THEN PUT(I+1, "......"); 00739000
|
|
IF NOT DCINPUT THEN IF I~SEARCH("ZIP ") ! 0 THEN 00739100
|
|
IF GET(I).CLASS=UNKNOWN THEN PUT(I+1,"......") ; 00739200
|
|
FOR I ~ 0 STEP 1 UNTIL NEXTCOM DO 00740000
|
|
IF GETC(I).CLASS=HEADER THEN 00741000
|
|
00742000
|
|
IF GETC(I).CE=1 THEN 00743000
|
|
PUT((T~GETC(I+1).LINK+2),GET(T)&0[TOADINFO]) ; 00744000
|
|
00745000
|
|
T ~ 2; WHILE T < NEXTINFO DO 00746000
|
|
BEGIN 00747000
|
|
GETALL(T,A,INFB,INFC); 00748000
|
|
IF I ~ A.CLASS > FILEID THEN GO TO NXT; 00749000
|
|
IF N ~ INFB = "......" THEN GO TO NXT; 00750000
|
|
XTA ~ N; 00751000
|
|
IF I = LABELID THEN 00752000
|
|
BEGIN 00753000
|
|
IF A > 0 THEN FLAG(19) ELSE 00754000
|
|
IF PRTOG THEN WRITALIST(LABF,3,N,A.ADDR DIV 4,A.SEGNO,0,0,0,0, 00755000
|
|
0) ; 00755010
|
|
GO TO NXT; 00756000
|
|
END; 00757000
|
|
IF I = FORMATID THEN 00758000
|
|
IF A > 0 THEN BEGIN FLAG(62); GO TO NXT END ; 00759000
|
|
IF I = NAMELIST THEN 00760000
|
|
IF A > 0 THEN BEGIN FLAG(136); GO TO NXT END; 00761000
|
|
IF I = ARRAYID THEN 00762000
|
|
IF BOOLEAN(A.CE) THEN BEGIN IF A>0 THEN T~GETSPACE(T) END 00763000
|
|
ELSE IF A<0 THEN 00764000
|
|
IF BOOLEAN(A.FORMAL) THEN 00764020
|
|
BEGIN IF SPLINK > 1 AND ELX > 1 THEN 00764040
|
|
BEGIN % THIS IS A FORMAL PARAMETER FOR A SUBROUTINE OR A 00764060
|
|
% FUNCTION THAT HAS ONE OR MORE ENTRY STATEMENT. THIS 00764070
|
|
% PARAMETER WILL BE INITIALIZED TO AN ARRAY DESCRIPTOR00764080
|
|
% TO 0 SO THAT IF THE PARAMETERS ARE NOT SET UP BY THE00764090
|
|
% CALL ANY REFERENCE TO THEM WILL CAUSE AN INVALID 00764100
|
|
% ADDRESS 00764110
|
|
IF LASTF = 0 THEN % FIRST TIME THRU 00764150
|
|
BEGIN LASTF ~ A.ADDR; 00764200
|
|
EMITDESCLIT(2); EMITL(1); 00764220
|
|
EMITD(50,DIA); EMITD(10,DIB); EMITD(10,TRB); 00764240
|
|
END ELSE EMITPAIR(LASTF,LOD); 00764260
|
|
EMITPAIR(A.ADDR,SND); 00764280
|
|
END 00764300
|
|
END 00764320
|
|
ELSE ARRAYDEC(T); 00765000
|
|
IF PRTOG THEN 00766000
|
|
WRITALIST(INFOF,7,INFB, 00767000
|
|
IF BOOLEAN(A.TYPEFIXED) THEN TYPES[A.SUBCLASS] ELSE " ", 00768000
|
|
KLASS[A.CLASS], 00769000
|
|
IF A.ADDR < 1024 AND A < 0 THEN "R+" ELSE " ", 00770000
|
|
IF A < 0 THEN B2D(A.[26:10]) ELSE "NULL", 00771000
|
|
INFC.SIZE, 00772000
|
|
INFC.BASE,0); 00773000
|
|
IF BOOLEAN(A.CE) THEN IF A.SUBCLASS } DOUBTYPE THEN 00773100
|
|
IF BOOLEAN(INFC.BASE) THEN FLAG(146); 00773200
|
|
NXT: 00774000
|
|
T ~ T+3; 00775000
|
|
END; 00776000
|
|
END CHECKINFO; 00777000
|
|
PROCEDURE SEGMENTSTART; 00778000
|
|
BEGIN 00779000
|
|
NSEG ~ NXAVIL ~ NXAVIL + 1; 00780000
|
|
IF LISTOG THEN WRITALIST(SEGSTRT,1,NSEG,0,0,0,0,0,0,0) ; 00781000
|
|
DEBUGADR~ADR~-1; 00782000
|
|
IF NOT SEGOVFLAG THEN 00783000
|
|
BEGIN 00784000
|
|
DATAPRT~DATASTRT~DATALINK~DATASKP~ 00784100
|
|
LABELMOM ~ BRANCHX ~ FUNVAR ~ 00785000
|
|
DT ~ SPLINK ~ NEXTCOM ~ ELX ~ 0; 00786000
|
|
NEXTSS ~ 1022; 00787000
|
|
INITIALSEGNO ~ NSEG; 00788000
|
|
FOR I ~ 0 STEP 1 UNTIL LBRANCH DO BRANCHES[I] ~ I+1; 00789000
|
|
FOR I~0 STEP 1 UNTIL SHX DO STACKHEAD[I] ~ 0; 00790000
|
|
NEXTINFO ~ LOCALS ~ 2; 00791000
|
|
F2TOG ~ FALSE; RETURNFOUND ~ FALSE; 00792000
|
|
END; 00793000
|
|
ENDSEGTOG ~ FALSE; 00794000
|
|
IF SEGSW THEN LINESEG[NOLIN~0,0]~0 & D2B(LASTSEQ)[10:20:28] ; 00794400
|
|
END SEGMENTSTART; 00795000
|
|
PROCEDURE FIXPARAMS(I); VALUE I; INTEGER I; 00796000
|
|
BEGIN 00797000
|
|
REAL FMINUS, NPARMS, ELINK, LABX; 00798000
|
|
REAL PLINKX, PLINK; 00799000
|
|
REAL PTYPEX, PTYPE; 00800000
|
|
REAL CL, INF; 00801000
|
|
LABEL ARRY, LOAD, INDX; 00802000
|
|
REAL EWORD; 00803000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FIXP","ARMS ",TRUE); 00803010
|
|
EWORD ~ ENTRYLINK[I]; 00804000
|
|
ELINK ~ EWORD.LINK; 00805000
|
|
IF LABX ~ EWORD.CLASS > 0 THEN 00806000
|
|
BEGIN 00807000
|
|
EMITO(MKS); 00808000
|
|
EMITDESCLIT(LABELMOM); 00809000
|
|
EMITL(LABX); 00810000
|
|
EMITL(1); EMITL(1); EMITL(0); 00811000
|
|
EMITOPDCLIT(BLKCNTRLINT); 00812000
|
|
EMITL(1); EMITPAIR(FPLUS2,STD);% F+2~TRUE FOR BLKXIT CALL 00812400
|
|
END; %106-00813000
|
|
FMINUS ~ 1920; 00814000
|
|
NPARMS ~ (J~GET(ELINK+2)).NEXTRA; 00815000
|
|
IF NPARMS > 0 THEN %106-00816000
|
|
BEGIN 00817000
|
|
PLINKX ~ EWORD.ADDR-NPARMS+1; 00818000
|
|
PTYPEX ~ J.ADINFO + NPARMS-1; 00819000
|
|
FOR J ~ 1 STEP 1 UNTIL NPARMS DO 00820000
|
|
BEGIN 00821000
|
|
PLINK ~ EXTRAINFO[PLINKX.IR,PLINKX.IC]; 00822000
|
|
PTYPE ~ EXTRAINFO[PTYPEX.IR,PTYPEX.IC].CLASS; 00823000
|
|
FMINUS ~ FMINUS+1; 00824000
|
|
IF PLINK = 0 THEN 00825000
|
|
BEGIN 00826000
|
|
EMITOPDCLIT(FMINUS); 00827000
|
|
EMITL(LABX ~ LABX-1); 00828000
|
|
EMITDESCLIT(LABELMOM); 00829000
|
|
EMITO(STD); 00830000
|
|
END ELSE 00831000
|
|
BEGIN 00832000
|
|
IF CL ~ (INF ~ GET(PLINK)).CLASS = UNKNOWN THEN CL ~ VARID; 00833000
|
|
XTA ~ GET(PLINK+1); 00834000
|
|
IF PTYPE = 0 THEN EXTRAINFO[PTYPEX.IR,PTYPEX.IC].CLASS 00835000
|
|
~ PTYPE ~ CL; 00836000
|
|
CASE PTYPE OF 00837000
|
|
BEGIN ; 00838000
|
|
IF CL ! ARRAYID THEN FLAG(79) ELSE 00839000
|
|
ARRY: 00840000
|
|
BEGIN 00841000
|
|
FMINUS ~ FMINUS+1; 00842000
|
|
IF INF < 0 THEN 00843000
|
|
BEGIN 00844000
|
|
EMITPAIR(FMINUS, LOD); 00845000
|
|
EMITPAIR(T~INF.ADDR, STD); 00846000
|
|
EMITOPDCLIT(FMINUS-1); 00847000
|
|
EMITPAIR(T-1, STD); 00848000
|
|
END; 00849000
|
|
END; 00850000
|
|
IF CL ! VARID THEN FLAG(80) ELSE 00851000
|
|
LOAD: 00852000
|
|
BEGIN 00854000
|
|
IF INF.SUBCLASS}DOUBTYPE AND CL=VARID THEN FMINUS~FMINUS+1; 00854100
|
|
IF INF<0 THEN 00854200
|
|
BEGIN 00854300
|
|
EMITPAIR(FMINUS, LOD); 00855000
|
|
EMITPAIR(T~INF.ADDR,STD); 00856000
|
|
IF INF.SUBCLASS}DOUBTYPE AND CL=VARID THEN %105-10856100
|
|
BEGIN EMITOPDCLIT(FMINUS-1); 00856200
|
|
EMITPAIR(T+1,STD); 00856300
|
|
END; 00856400
|
|
END ; 00856500
|
|
END; 00857000
|
|
; ; ; ; 00858000
|
|
IF CL = FUNID THEN GO TO LOAD ELSE FLAG(81); 00859000
|
|
00859100
|
|
00859200
|
|
00859300
|
|
00859400
|
|
00859500
|
|
; 00860000
|
|
IF CL = FUNID OR CL = SUBRID OR CL = EXTID THEN GO TO LOAD 00861000
|
|
ELSE FLAG(83); 00861100
|
|
IF CL = SUBRID THEN GO TO LOAD ELSE FLAG(82); 00862000
|
|
; ; 00863000
|
|
BEGIN 00864000
|
|
IF CL = ARRAYID THEN 00865000
|
|
BEGIN 00866000
|
|
EXTRAINFO[PTYPEX.IR,PTYPEX.IC].CLASS ~ CL; 00867000
|
|
GO TO ARRY; 00868000
|
|
END; 00869000
|
|
INDX: 00870000
|
|
IF CL ! VARID THEN FLAG(80); 00871000
|
|
FMINUS ~ FMINUS+1; 00872000
|
|
IF INF < 0 THEN 00873000
|
|
BEGIN 00874000
|
|
EMITOPDCLIT(FMINUS-1); 00875000
|
|
EMITDESCLIT(FMINUS); 00876000
|
|
EMITPAIR(INF.ADDR, STD); 00877000
|
|
END; 00878000
|
|
END; 00879000
|
|
IF CL = VARID THEN GO TO LOAD ELSE FLAG(80); 00880000
|
|
GO TO INDX; 00892000
|
|
END CASE STATEMENT; 00893000
|
|
A ~ INF.SUBCLASS; 00894000
|
|
IF T ~ EXTRAINFO[PTYPEX.IR,PTYPEX.IC].SUBCLASS = 0 OR 00895000
|
|
T = INTYPE AND A = REALTYPE THEN 00896000
|
|
EXTRAINFO[PTYPEX.IR,PTYPEX.IC].SUBCLASS ~ A ELSE 00897000
|
|
IF T ! A THEN 00898000
|
|
BEGIN XTA ~ GET(PLINK+1); FLAG(88) END; 00899000
|
|
END; 00900000
|
|
PLINKX ~ PLINKX+1; 00901000
|
|
PTYPEX ~ PTYPEX-1; 00902000
|
|
END; 00903000
|
|
PLINKX ~ PLINKX-NPARMS; 00904000
|
|
FOR J ~ 1 STEP 1 UNTIL NPARMS DO 00905000
|
|
BEGIN 00906000
|
|
PLINK ~ EXTRAINFO[PLINKX.IR,PLINKX.IC]; 00907000
|
|
IF PLINK ! 0 THEN 00908000
|
|
IF (A~GET(PLINK)).CLASS = ARRAYID THEN 00909000
|
|
IF T~GET(PLINK+2) <0 THEN VARIABLEDIMS(A, T); 00910000
|
|
PLINKX ~ PLINKX+1; 00911000
|
|
END; 00912000
|
|
END; 00913000
|
|
EMITB(GET(ELINK+2).BASE & (GET(ELINK).SEGNO)[TOSEGNO], FALSE); 00914000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FIXP","ARMS ",FALSE) ; 00914010
|
|
END FIXPARAMS; 00915000
|
|
PROCEDURE XREFCORESORT ; 00915100
|
|
BEGIN 00915120
|
|
REAL F,G,H,J,K,L,T,TT,IJ,M,TN ; 00915140
|
|
SAVE ARRAY A[0:XRI-1], IL,IU[0:8]; 00915160
|
|
ARRAY W2,W3[0:XRI-1] ; 00915180
|
|
LABEL L1,L2,L3,L4,L5,L6,L11,L12,L13,L14 ; 00915200
|
|
DEFINE CMPARGT(A) = A.NAME=TN THEN IF (IF G~W3[H~A.[2:10]].[26:4] 00915220
|
|
=TT~W3[F~T.[2:10]].[26:4] THEN NOT CMPA(W2[H], 00915240
|
|
W2[F]) ELSE G>TT) #, 00915260
|
|
CMPARLS(A) = A.NAME=TN THEN IF (IF G~W3[H~T.[2:10]].[26:4] 00915280
|
|
=TT~W3[F~A.[2:10]].[26:4] THEN NOT CMPA(W2[H], 00915300
|
|
W2[F]) ELSE G>TT) #, 00915320
|
|
NAME = [12:36] # ; 00915340
|
|
J~XRI-1; G~XRI DIV K~XRBUFFDIV3; H~XRBUFF ; 00915360
|
|
FOR L~1 STEP 1 UNTIL G DO 00915380
|
|
BEGIN 00915400
|
|
L11: READ(XREFF,H,XRRY[*]); TRANSFER(W2[T~(L-1)|50],XRRY,K) ; 00915420
|
|
IJ~T+K-1; TN~-3; 00915440
|
|
FOR F~T STEP 1 UNTIL IJ DO 00915460
|
|
BEGIN A[F]~XRRY[TN~TN+3]&F[2:38:10]; W3[F]~XRRY[TN+2] END;00915480
|
|
END; 00915500
|
|
IF H=XRBUFF THEN IF K~XRI MOD K DIV 1!0 THEN BEGIN H~3|K;GO L11 END;00915520
|
|
GO L4 ; 00915540
|
|
L1: IF A[K~I].NAME>TN~(T~A[IJ~((L~J)+I+1).[37:10]]).NAME THEN 00915560
|
|
L12: BEGIN A[IJ]~A[I]; A[I]~T; TN~(T~A[IJ]).NAME END 00915580
|
|
ELSE IF CMPARGT(A[I]) THEN GO L12 ; 00915600
|
|
IF A[J].NAME<TN THEN 00915620
|
|
BEGIN 00915640
|
|
L14: A[IJ]~A[J]; A[J]~T ; 00915660
|
|
IF TN~(T~A[IJ]).NAME<A[I].NAME THEN 00915680
|
|
L13: BEGIN A[IJ]~A[I]; A[I]~T; TN~(T~A[IJ]).NAME END 00915700
|
|
ELSE IF CMPARGT(A[I]) THEN GO L13 ; 00915720
|
|
END 00915740
|
|
ELSE IF CMPARLS(A[J]) THEN GO L14 ; 00915760
|
|
L2: IF A[L~L-1].NAME>TN THEN GO L2; IF CMPARGT(A[L]) THEN GO L2; 00915780
|
|
L3: IF A[K~K+1].NAME<TN THEN GO L3; IF CMPARLS(A[K]) THEN GO L3; 00915800
|
|
IF K LEQ L THEN BEGIN DOUBLE(A[K],A[L],~,A[L],A[K]); GO L2 END ; 00915820
|
|
IF L+K>J+I THEN BEGIN IL[M]~I; IU[M]~L; I~K END 00915840
|
|
ELSE BEGIN IL[M]~K; IU[M]~J; J~L END ; 00915860
|
|
M~M+1 ; 00915880
|
|
L4: IF I+10<J THEN GO L1; 00915900
|
|
IF I=0 THEN IF I<J THEN GO L1; 00915920
|
|
FOR I~I+1 STEP 1 UNTIL J DO 00915940
|
|
IF A[K~I-1].NAME>TN~(T~A[I]).NAME THEN 00915960
|
|
BEGIN 00915980
|
|
L5: A[K+1]~A[K]; IF A[K~K-1].NAME>TN THEN GO L5 ; 00916000
|
|
IF CMPARGT(A[K]) THEN GO L5 ; 00916020
|
|
A[K+1]~T ; 00916040
|
|
END 00916060
|
|
ELSE IF CMPARGT(A[K]) THEN GO L5 ; 00916080
|
|
IF (M~M-1) GEQ 0 THEN BEGIN I~IL[M]; J~IU[M]; GO L4 END ; 00916100
|
|
G~XRI-1 ; 00916120
|
|
FOR I~ 0 STEP 1 UNTIL G DO 00916140
|
|
IF BOOLEAN(L~REAL(A[I]~A[I].NAME&(TN~W3[J~A[I].[2:10]])[1:26:1]00916160
|
|
=XTA)) THEN 00916180
|
|
BEGIN 00916200
|
|
IF IT~IT+1=9 THEN 00916220
|
|
BEGIN LASTLINE~FALSE; WRITE(LINE,15,PRINTBUFF[*]) ; 00916240
|
|
L6: BLANKIT(PRINTBUFF,15,IT~0) ; 00916260
|
|
END ; 00916280
|
|
SETPNT(A[I],W2[J],PRINTBUFF,KLASS[TN.CLASS],TYPES[TN. 00916300
|
|
SUBCLASS],IF BOOLEAN(TN) THEN "*" ELSE " ",IT,L-1, 00916320
|
|
LASTLINE,6-TN.[27:3]) ; 00916340
|
|
END 00916360
|
|
ELSE BEGIN 00916380
|
|
LASTLINE~TRUE; WRITE(RITE,15,PRINTBUFF[*]); XTA~A[I]; 00916400
|
|
GO L6; 00916420
|
|
END ; 00916440
|
|
WRITE(LINE,15,PRINTBUFF[*]); XRI~0; 00916460
|
|
END OF XREFCORESORT ; 00916480
|
|
PROCEDURE SETUPSTACK ; 00916900
|
|
BEGIN 00917000
|
|
REAL I; 00918000
|
|
EMITOPDCLIT(16); 00919000
|
|
EMITL(1); 00920000
|
|
EMITO(ADD); 00921000
|
|
EMITL(16); 00922000
|
|
EMITO(SND); 00923000
|
|
FOR I ~ 1 STEP 1 UNTIL LOCALS DO EMITL(0); 00924000
|
|
CHECKINFO; 00925000
|
|
IF DATAPRT ! 0 THEN 00925010
|
|
BEGIN ADJUST; EMITOPDCLIT(DATAPRT); EMITO(LNG); EMITB(-1,TRUE);00925020
|
|
DATASKP~LAX; EMITB(DATASTRT,FALSE); FIXB(DATALINK); 00925030
|
|
EMITL(1); EMITPAIR(DATAPRT,STD); FIXB(DATASKP); 00925040
|
|
END; 00925050
|
|
ADJUST; 00925060
|
|
END SETUPSTACK; 00926000
|
|
PROCEDURE BRANCHLIT(X,Y); VALUE X,Y; REAL X; BOOLEAN Y; 00927000
|
|
BEGIN 00928000
|
|
IF ADR } 4075 THEN 00929000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 00930000
|
|
ADJUST; 00931000
|
|
IF X.SEGNO!NSEG THEN BEGIN 00932000
|
|
IF(PRTS+1).[37:2]=1 AND Y THEN 00932300
|
|
EMITOPDCLIT(PRGDESCBLDR(2,0,(ADR+5) DIV 4+1,NSEG)) 00932700
|
|
ELSE EMITOPDCLIT(PRGDESCBLDR(2,0,(ADR+5) DIV 4,NSEG)) END 00933000
|
|
ELSE 00934000
|
|
EMITL((ADR+5) DIV 4 - X.LINK DIV 4) ; 00935000
|
|
END BRANCHLIT; 00936000
|
|
PROCEDURE SEGMENT(SZ,CURSEG,SEGTYP,EDOC); % WRITES OUT EDOC AS SEGMENT 00937000
|
|
VALUE SZ,CURSEG,SEGTYP; % UPDATES PDPRT WITH PSUEDO 00938000
|
|
REAL SZ,CURSEG; % UPDATES PDPRT WITH PSUEDO 00939000
|
|
BOOLEAN SEGTYP; % TRUE TO WRAP UP A SUBROUTINE BLOCK 00940000
|
|
% FALSE TO WRAP UP A SPLIT BLOCK 00941000
|
|
ARRAY EDOC[0,0]; % CONTAINS DATA TO WRITE; 00942000
|
|
BEGIN 00943000
|
|
STREAM PROCEDURE M1(F,T); BEGIN DI ~ T; SI ~ F; DS ~ 2 WDS END;00944000
|
|
REAL T; 00945000
|
|
REAL BEGINSUB, ENDSUB, HERE; 00946000
|
|
LABEL WRITEPGM; 00947000
|
|
INTEGER I, CNTR; 00948000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SEGM","ENT ",TRUE ); 00948010
|
|
IF NOT SEGTYP THEN GO TO WRITEPGM; 00949000
|
|
IF SPLINK > 1 AND NOT RETURNFOUND THEN 00949100
|
|
BEGIN XTA ~ BLANKS; FLAG(142) END; 00949200
|
|
IF SPLINK < 0 THEN 00950000
|
|
BEGIN 00951000
|
|
ADJUST; 00952000
|
|
BDPRT[BDX~BDX+1] ~ PRGDESCBLDR(1, 0, (ADR+1) DIV 4, NSEG); 00953000
|
|
FOR I ~ 1 STEP 1 UNTIL LOCALS DO EMITL(0); 00954000
|
|
CHECKINFO; 00955000
|
|
00955500
|
|
EMITB(0&INITIALSEGNO[TOSEGNO], FALSE); 00956000
|
|
END 00957000
|
|
ELSE 00958000
|
|
IF SPLINK = 1 THEN % MAIN PROGRAM 00959000
|
|
BEGIN 00960000
|
|
ADJUST; 00961000
|
|
IF STRTSEG ! 0 THEN FLAG(75); 00962000
|
|
STRTSEG ~ NSEG & 00963000
|
|
PRGDESCBLDR(1, 0, (ADR+1) DIV 4, NSEG)[18:33:15]; 00964000
|
|
SETUPSTACK; 00965000
|
|
00965500
|
|
EMITB(0&INITIALSEGNO[TOSEGNO], FALSE); 00966000
|
|
END 00967000
|
|
ELSE 00968000
|
|
IF ELX { 1 THEN 00969000
|
|
BEGIN 00970000
|
|
ADJUST; 00971000
|
|
T ~ PRGDESCBLDR(1, GET(SPLINK).ADDR, (ADR+1) DIV 4, NSEG); 00972000
|
|
SETUPSTACK; 00973000
|
|
FIXPARAMS(0); 00974000
|
|
INFO[SPLINK.IR, SPLINK.IC].SEGNO ~ NSEG; 00975000
|
|
END 00976000
|
|
ELSE 00977000
|
|
BEGIN 00978000
|
|
ADJUST; 00979000
|
|
BEGINSUB ~ (ADR+1) & NSEG[TOSEGNO]; 00980000
|
|
EMITL(17); EMITO(STD); 00981000
|
|
SETUPSTACK; 00982000
|
|
EMITOPDCLIT(17); EMITO(GFW); 00982100
|
|
ENDSUB ~ ADR & NSEG[TOSEGNO]; 00983000
|
|
FOR I ~ 0 STEP 1 UNTIL ELX-1 DO 00984000
|
|
BEGIN 00985000
|
|
ADJUST; 00986000
|
|
HERE ~ (ADR+1) DIV 4; 00988000
|
|
T ~ ENTRYLINK[I].LINK; 00989000
|
|
%VOID 00990000
|
|
T ~ PRGDESCBLDR(1, GET(T).ADDR, HERE, NSEG); 00991000
|
|
BRANCHLIT(ENDSUB,FALSE); 00992000
|
|
EMITB(BEGINSUB, FALSE); 00993000
|
|
ADJUST; 00994000
|
|
FIXPARAMS(I); 00995000
|
|
INFO[(ENTRYLINK[I].LINK).IR,(ENTRYLINK[I].LINK).IC].SEGNO~NSEG;00995500
|
|
END; 00996000
|
|
END; 00997000
|
|
SZ ~ (ADR+4) DIV 4; 00998000
|
|
CNTR ~ 0; 00999000
|
|
CURSEG ~ NSEG; 00999100
|
|
WRITEPGM: 01000000
|
|
NSEG ~ ((T ~ SZ) + 29) DIV 30; 01001000
|
|
IF DALOC DIV CHUNK < I ~ (DALOC+NSEG) DIV CHUNK 01002000
|
|
THEN DALOC ~ CHUNK | I; % INSURE SEGMENT DONT BREAK 01003000
|
|
% ACROSS ROW 01004000
|
|
IF LISTOG THEN WRITALIST(SEGEND,2,CURSEG,T,0,0,0,0,0,0) ; 01005000
|
|
PDPRT[PDIR,PDIC] ~ % PDPRT ENTRY FOR SEGMENT 01006000
|
|
SZ&DALOC[DKAC] 01007000
|
|
& GET(SPLINK)[12:14:1] 01007100
|
|
&CURSEG[SGNOC]; 01008000
|
|
IF ERRORCT = 0 THEN 01009000
|
|
DO BEGIN 01010000
|
|
FOR I~0 STEP 2 WHILE I < 30 AND CNTR < SZ DO 01011000
|
|
BEGIN M1(EDOC[CNTR.[38:3],CNTR.[41:7]],CODE(I)); 01012000
|
|
CNTR ~ CNTR + 2; 01013000
|
|
END; 01014000
|
|
WRITE(CODE[DALOC]); 01015000
|
|
DALOC ~ DALOC +1; 01016000
|
|
END UNTIL CNTR } SZ; 01017000
|
|
PDINX ~ PDINX +1; 01018000
|
|
IF NOT SEGOVFLAG THEN 01018025
|
|
IF PXREF THEN 01018100
|
|
IF(EODS~(NEXT=EOF))AND NOT XGLOBALS THEN ELSE 01018110
|
|
BEGIN KLASS[6]~ "LABEL "; 01018120
|
|
WRITE(XREFF,XRBUFF,XRRY[*]) ; 01018125
|
|
IF FIRSTCALL THEN DATIME ELSE WRITE(PTR[PAGE]); 01018130
|
|
IF SPLINK<0 THEN 01018135
|
|
BEGIN WRITE(PTR,XHEDB);REWIND(XREFF);END 01018140
|
|
ELSE 01018145
|
|
IF EODS THEN BEGIN WRITE(PTR,XHEDG); REWIND(XREFG) END 01018150
|
|
ELSE BEGIN REWIND(XREFF); C2~(XR[4].SUBCLASS|2+5); 01018160
|
|
IF IT~XR[4].CLASS=FUNID THEN WRITE(PTR,XHEDF, 01018170
|
|
XR[C2],XR[C2+1],XR[3],XR[C2+12], 01018180
|
|
XR[C2+13],"------") 01018190
|
|
ELSE IF IT=SUBRID THEN WRITE(PTR,XHEDS,XR[3], 01018200
|
|
"------") ELSE WRITE(PTR,XHEDM); 01018210
|
|
END; 01018220
|
|
IT~XTA~0; 01018260
|
|
LASTLINE ~ FALSE; 01018280
|
|
BLANKIT(PRINTBUFF,15,0); 01018320
|
|
IF XRI>1023 OR EODS THEN SORT(PT,INP,0,HV,CMP,3,4000) 01018330
|
|
ELSE XREFCORESORT ; 01018340
|
|
REWIND(XREFF); 01018350
|
|
PXREF~IF XREF THEN TRUE ELSE FALSE; 01018355
|
|
KLASS[6] ~ "ERROR "; 01018360
|
|
IF (NOT SEGTYP AND EODS) OR (SEGTYP AND LISTOG AND 01018370
|
|
NOT SEGPTOG) THEN WRITE (PTR[PAGE]); 01018375
|
|
END; 01018380
|
|
IF LISTOG AND SEGTYP AND SEGPTOG THEN WRITE(PTR[PAGE]); 01019000
|
|
IF SEGTYP THEN 01019100
|
|
BEGIN 01019110
|
|
FOR I~12,17 STEP 1 UNTIL 24,39 STEP 1 UNTIL 41, 01019150
|
|
50 STEP 1 UNTIL 57 DO TIPE[I]~REALID ; 01019160
|
|
FOR I~25,33 STEP 1 UNTIL 37 DO TIPE[I]~INTID ; 01019170
|
|
LASTNEXT ~ 1000; 01019190
|
|
END; 01019200
|
|
ENDSEGTOG ~ TRUE; 01020000
|
|
TSEGSZ ~ TSEGSZ + SZ; 01021000
|
|
COMMENT IF SEGSW THEN LETS ALSO WRITE OUT THE LINE SEGMENTS 01021010
|
|
THAT WE VE GONE TO SUCH TROUBLE BUILDING. LINESEG 01021150
|
|
CONTAINS A CARD SEQUENCE NUMBER(BINARY) IN [10:28] 01021200
|
|
AND THE WORD BOUNDARY ADDRESS OF THE FIRST CODE 01021250
|
|
SYLLABLE IN [38:10]; 01021300
|
|
IF SEGSW THEN 01021350
|
|
IF NOLIN > 0 THEN 01021360
|
|
BEGIN 01021400
|
|
LINEDICT[CURSEG.IR,CURSEG.IC] ~ % UPDATE LINE DICTIONARY 01021450
|
|
0 & NOLIN[18:33:15] & DALOC[33:33:15];%FOR THIS SEGMENT 01021500
|
|
CNTR ~ 0; DO BEGIN 01021550
|
|
FOR I ~ 0 STEP 2 WHILE I<30 AND CNTR<NOLIN DO 01021600
|
|
BEGIN 01021650
|
|
M1(LINESEG[CNTR.[38:3],CNTR.[41:7]],CODE(I)); 01021700
|
|
CNTR~CNTR+2 01021750
|
|
END; 01021800
|
|
WRITE(CODE[DALOC]); 01021850
|
|
DALOC~DALOC+1; 01021900
|
|
END UNTIL CNTR } NOLIN; 01021950
|
|
END ; 01021955
|
|
IF NOT SEGOVFLAG THEN XRI ~ 0; 01021957
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SEGM","ENT ",FALSE) ; 01021959
|
|
END SEGMENT; 01022000
|
|
PROCEDURE WRITEDATA(SZ,SEG,ARY); % WRITES OUT TYPE 2 SEGMENTS 01023000
|
|
VALUE SZ,SEG; 01024000
|
|
REAL SZ,SEG; 01025000
|
|
ARRAY ARY[0]; 01026000
|
|
BEGIN 01027000
|
|
INTEGER T,NSEG,I,CNTR; 01028000
|
|
INTEGER TYPE; 01029000
|
|
STREAM PROCEDURE M30(F,T,SZ); VALUE SZ; 01030000
|
|
BEGIN 01031000
|
|
SI~F; DI~T; DS~SZ WDS; 01032000
|
|
END M30; 01033000
|
|
IF SZ } 0 THEN TYPE ~ 2 ELSE SZ ~ -SZ; 01034000
|
|
NSEG ~ (( T~SZ) +29) DIV 30; 01035000
|
|
IF DALOC DIV CHUNK < I ~ (DALOC+NSEG) DIV CHUNK 01036000
|
|
THEN DALOC ~ CHUNK | I; 01037000
|
|
PDPRT[PDIR,PDIC] ~ 01038000
|
|
SZ&DALOC[DKAC] 01039000
|
|
&TYPE[STYPC] 01040000
|
|
&SEG[SGNOC]; 01041000
|
|
PDINX ~ PDINX +1; 01042000
|
|
IF ERRORCT = 0 THEN 01043000
|
|
FOR I ~ 0 STEP 30 WHILE I < SZ DO 01044000
|
|
BEGIN 01045000
|
|
M30(ARY[I],CODE(0),IF (SZ-I) > 30 THEN 30 ELSE (SZ-I)); 01046000
|
|
WRITE(CODE[DALOC]); 01047000
|
|
DALOC ~ DALOC +1; 01048000
|
|
END; 01049000
|
|
IF LISTOG THEN WRITALIST(SEGEND,2,SEG,T,0,0,0,0,0,0) ; 01050000
|
|
TSEGSZ ~ TSEGSZ + SZ; 01051000
|
|
END WRITEDATA; 01052000
|
|
REAL PROCEDURE PRGDESCBLDR(DT,PRT,RELADR,SGNO); 01053000
|
|
VALUE DT,PRT,RELADR,SGNO; 01054000
|
|
REAL DT,PRT,RELADR,SGNO; 01055000
|
|
BEGIN 01056000
|
|
FORMAT FMT("PRT=",A4,", REL-ADR=",A4,", SEG=",I4,", TYPE=",A2); 01057000
|
|
IF PRT=0 THEN BEGIN BUMPPRT; PRT~PRTS END; 01058000
|
|
PDPRT[PDIR,PDIC] ~ 01059000
|
|
0&DT[DTYPC] 01060000
|
|
&PRT[PRTAC] 01061000
|
|
&RELADR[RELADC] 01062000
|
|
&SGNO[SGNOC]; 01063000
|
|
PDINX ~ PDINX +1; 01064000
|
|
IF CODETOG THEN WRITALIST(FMT,4,B2D(PRT),B2D(RELADR),SGNO, 01065000
|
|
IF DT=0 THEN "AE" ELSE IF DT=1 THEN "PD" ELSE "LD",0,0,0,0) ; 01066000
|
|
PRGDESCBLDR ~ PRT; 01067000
|
|
END PRGDESCBLDR; 01068000
|
|
PROCEDURE EQUIV(R); VALUE R; REAL R; 01069000
|
|
COMMENT THIS PROCEDURE FIXES UP THE INFO TABLE FOR THE EQUIV OR 01069100
|
|
COMMON RING. THE FIRST ELEMENT PAST HAS AN OFFSET (DO NOT 01069110
|
|
ALTER THIS) THE TYPE IS FIXED. THE OFFSET IS DETERMINED 01069120
|
|
FROM THE FIRST. CORRECTINFO ADJUST THE OFFSET IF THERE 01069130
|
|
IS A NEGATIVE OFFSET ON ANY ELEMENT. THE INFA[ADJ] BIT IS 01069140
|
|
SET IF THE ELEMENT HAS A NEGATIVE OFFSET. IF THE ELEMENT 01069150
|
|
APPEARED IN MORE THAN ONE EQUIVALENCE STATEMENT OR AN 01069160
|
|
EQUIVALENCE STATEMENT AND A COMMON STATEMENT THE ELEMENTS 01069170
|
|
ARE LINKED BY COM[LASTC] WHICH POINTS TO THE HEADER 01069180
|
|
OF THAT STATEMENT; 01069190
|
|
BEGIN 01070000
|
|
DEFINE BASS = LOCALS #, % THESE DEFINES ARE USED TO REDUCE THE01071000
|
|
REL = PARMS #, % STACKSIZE OF EQUIV FOR RECURSION 01071100
|
|
I = PRTS #, 01071200
|
|
T = LSTS #, 01071250
|
|
Q = LSTA #, 01071400
|
|
LAST = TV #, 01071500
|
|
B = SAVESUBS #, 01071600
|
|
P = NAMEIND #, 01071700
|
|
PRTX = LSTI #, 01071800
|
|
C = FX1 #, 01071900
|
|
INFA = FX2 #, 01072000
|
|
INFB = FX3 #, 01072100
|
|
INFC = NX1 #; 01072200
|
|
LABEL XIT, CHECK; 01073000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EQU","IV ",TRUE) ; 01073010
|
|
IF GETC(R)<0 THEN GO TO XIT ; 01074000
|
|
PUTC(R,-GETC(R)) ; 01075000
|
|
PRTX ~ GROUPPRT; 01076000
|
|
C~REAL(GETC(R).CE=1) ; 01077000
|
|
LAST~GETC(R).LASTC-1 ; 01078000
|
|
BASS~GETC(R+1); P~0 ; 01079000
|
|
FOR I ~ R+2 STEP 1 UNTIL LAST DO 01080000
|
|
BEGIN IF GETC(I).CLASS=ENDCOM THEN I~GETC(I).LINK ; 01081000
|
|
GETALL(T~GETC(I).LINK,INFA,INFB,INFC) ; 01082000
|
|
IF Q~INFC.SIZE=0 THEN % A SIMPLE VARIABLE 01083000
|
|
INFC.SIZE ~ Q ~ IF INFA.SUBCLASS { LOGTYPE THEN 1 ELSE 2; 01084000
|
|
PUT(T+2,INFC); 01085000
|
|
IF INFA.SUBCLASS>LOGTYPE THEN SEENADOUB~TRUE; 01085500
|
|
IF BOOLEAN(C) THEN 01086000
|
|
BEGIN COM[PWI].RELADD~REL~P ; 01087000
|
|
P ~ P + Q; 01088000
|
|
END ELSE COM[PWI].RELADD~REL~BASS-GETC(I).RELADD ; 01089000
|
|
IF INFA < 0 THEN IF INFA .ADJ = 1 THEN 01090000
|
|
B ~ -INFC.BASE - REL ELSE B ~ INFC.BASE - REL; 01091000
|
|
END; 01092000
|
|
FOR I ~ R+2 STEP 1 UNTIL LAST DO 01093000
|
|
BEGIN IF GETC(I).CLASS=ENDCOM THEN I~GETC(I).LINK ; 01094000
|
|
GETALL(T~GETC(I).LINK,INFA,INFB,INFC) ; 01095000
|
|
IF INFA.CLASS = 1 THEN SWARYCT ~ 1; 01095500
|
|
P~B+GETC(I).RELADD ; 01096000
|
|
Q ~ INFC .SIZE; 01097000
|
|
IF INFA < 0 THEN 01098000
|
|
BEGIN IF INFA .ADJ = 1 THEN BASS ~ -INFC .BASE ELSE 01099000
|
|
BASS ~ INFC.BASE; 01100000
|
|
IF P ! BASS THEN 01101000
|
|
BEGIN XTA ~ INFB ; FLAG(2) END; 01102000
|
|
GO TO CHECK; 01104000
|
|
END; 01105000
|
|
INFA ~ -INFA & PRTX[TOADDR]; 01108000
|
|
IF INFA .CLASS = UNKNOWN THEN INFA .CLASS ~ VARID; 01109000
|
|
INFA .TYPEFIXED ~ 1; 01110000
|
|
INFC.BASE ~ P; 01111000
|
|
PUT(T+2,INFC); 01112000
|
|
IF P < 0 THEN INFA .ADJ ~ 1; 01113000
|
|
PUT(T,INFA); 01114000
|
|
CHECK: 01115000
|
|
IF P+Q > LENGTH THEN LENGTH ~ P+Q; 01116000
|
|
IF P < LOWERBOUND THEN LOWERBOUND ~ P; 01117000
|
|
END; 01118000
|
|
FOR I ~ R+2 STEP 1 UNTIL LAST DO 01119000
|
|
BEGIN 01120000
|
|
IF GETC(I).CLASS=ENDCOM THEN I~GETC(I).LINK ; 01121000
|
|
IF T~GETC(I).LASTC!R THEN 01122000
|
|
IF GETC(T)}0 THEN 01122500
|
|
BEGIN R~R&LAST[3:33:15]&I[18:33:15] ; 01122550
|
|
EQUIV(T); LAST~R.[3:15]; I~R.[18:15]; R~R.[33:15] ; 01122600
|
|
END; 01122650
|
|
END; 01123000
|
|
XIT: 01124000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EQU","IV ",FALSE) ; 01124010
|
|
END EQUIV; 01125000
|
|
ALPHA PROCEDURE GETSPACE(S); VALUE S; ALPHA S; 01126000
|
|
BEGIN LABEL RPLUS, FMINUS, XIT; 01127000
|
|
LABEL DONE; 01128000
|
|
REAL A; 01129000
|
|
BOOLEAN OWNID; 01129100
|
|
IF OWNID ~ S < 0 THEN S~ -S; % IN DATA STMT, THUS OWN 01129200
|
|
IF A ~ GET(GETSPACE~S) < 0 THEN GO TO DONE; 01130000
|
|
IF A.CLASS GEQ 13 THEN FLAG(34) ELSE %104-01130500
|
|
CASE A.CLASS OF 01131000
|
|
BEGIN 01132000
|
|
BEGIN 01133000
|
|
PUT(S,A~A&VARID[TOCLASS]); 01134000
|
|
PUT(S+2,(GET(S+2) &(IF A.SUBCLASS { LOGTYPE 01135000
|
|
THEN 1 ELSE 2 )[TOSIZE])); 01136000
|
|
END; 01137000
|
|
IF BOOLEAN(A.FORMAL) THEN BUMPLOCALS; 01138000
|
|
; 01139000
|
|
BEGIN A.TYPEFIXED ~ 1; GO TO RPLUS END; 01140000
|
|
GO TO RPLUS; 01141000
|
|
GO TO RPLUS; 01142000
|
|
GO TO DONE; 01143000
|
|
BEGIN A.TYPEFIXED ~ 1; IF BOOLEAN(A.FORMAL) THEN GO TO FMINUS 01144000
|
|
ELSE GO TO RPLUS; 01145000
|
|
END; 01146000
|
|
BEGIN A.TYPEFIXED ~ 1; GO TO RPLUS END; 01147000
|
|
IF BOOLEAN(A.FORMAL) THEN GO TO FMINUS ELSE GO TO RPLUS; 01148000
|
|
IF BOOLEAN(A.FORMAL) THEN GO TO FMINUS ELSE GO TO RPLUS; 01149000
|
|
GO TO RPLUS; 01150000
|
|
GO TO RPLUS; 01151000
|
|
END OF CASE STATEMENT; 01152000
|
|
A.TYPEFIXED ~ 1; 01153000
|
|
IF BOOLEAN(A.FORMAL) THEN 01154000
|
|
GO TO FMINUS; 01155000
|
|
IF BOOLEAN(A.CE) OR BOOLEAN(A.EQ) THEN 01156000
|
|
BEGIN 01157000
|
|
PUT(S,A); 01158000
|
|
CALLEQUIV(A.ADDR,OWNID,GET(S+1)) ; 01159000
|
|
GO TO DONE; 01160000
|
|
END; 01161000
|
|
A.TWOD ~ REAL(GET(S+2).SIZE > 1023); 01162000
|
|
FMINUS: 01163000
|
|
IF OWNID THEN BEGIN BUMPPRT; A.ADDR~PRTS END ELSE 01163100
|
|
BEGIN BUMPLOCALS; A.ADDR ~ LOCALS +1536 END; 01164000
|
|
IF A.CLASS = VARID THEN IF A.SUBCLASS } DOUBTYPE THEN 01165000
|
|
IF OWNID THEN BUMPPRT ELSE 01165100
|
|
BUMPLOCALS; 01166000
|
|
GO TO XIT; 01167000
|
|
RPLUS: 01168000
|
|
BUMPPRT; A.ADDR~PRTS; 01169000
|
|
XIT: 01170000
|
|
PUT(S, -A); 01171000
|
|
DONE: 01172000
|
|
END GETSPACE; 01173000
|
|
INTEGER STREAM PROCEDURE LBLSHFT(S); VALUE S; 01174000
|
|
BEGIN 01175000
|
|
LOCAL T; 01176000
|
|
LABEL L; 01177000
|
|
DI ~ LOC LBLSHFT; DS ~ 8 LIT "00 "; 01178000
|
|
DI ~ DI - 6; SI ~LOC S; SI ~ SI + 2; 01179000
|
|
TALLY ~ 1; T ~ TALLY; 01180000
|
|
5(T(IF SC="0" THEN BEGIN SI~SI+1; JUMP OUT 1 TO L END 01181000
|
|
ELSE TALLY~0; T~TALLY); 01182000
|
|
IF SC}"0" THEN DS~CHR ELSE IF SC=" " THEN SI~SI+1 01183000
|
|
ELSE JUMP OUT; L: ) ; 01183100
|
|
IF SC ! " " THEN BEGIN DI ~ LOC LBLSHFT; DS ~ LIT "+" END; 01184000
|
|
END LBLSHFT; 01185000
|
|
COMMENT EMITTERS AND CODE CONTROL; 01186000
|
|
ALPHA PROCEDURE B2D(B); VALUE B; REAL B; 01187000
|
|
B2D ~ 0&B[45:45:3]&B[39:42:3]&B[33:39:3]&B[27:36:3]; 01188000
|
|
PROCEDURE DEBUG(S); % PRINTS OUT DEBUG CODE 01189000
|
|
VALUE S; REAL S; % IF S<0 THEN S IS FIELD TYPE OPERATOR 01190000
|
|
BEGIN 01191000
|
|
FORMAT FF(X35,*(33(".")),A4,":",A1,2(X2,A4),X4,A4) ; 01192000
|
|
ALPHA CODE,MNM,SYL; 01193000
|
|
REAL T; 01194000
|
|
PROCEDURE SEARCH(CODE,S); VALUE S; REAL S,CODE; 01195000
|
|
BEGIN % SEARCHS WOP TO FIND CODE FOR S 01196000
|
|
REAL N,I; 01197000
|
|
LABEL L; 01198000
|
|
N ~ 64; 01199000
|
|
FOR I ~ 66 STEP IF WOP[I] < S THEN N ELSE -N 01200000
|
|
WHILE N ~ N DIV 2 } 1 DO 01201000
|
|
IF WOP[I] =S THEN GO TO L; 01202000
|
|
I ~ 0; % NOT FOUND 01203000
|
|
L: CODE ~ WOP[I+1]; 01204000
|
|
END SEARCH; 01205000
|
|
IF S < 0 THEN 01206000
|
|
BEGIN % FIELD TYPE OPERATOR 01207000
|
|
SYL ~ S; 01208000
|
|
MNM ~ B2D(S.[36:6]); 01209000
|
|
IF (S ~ S.[42:6]) = 37 THEN CODE ~ "ISO " ELSE 01210000
|
|
IF S = 45 THEN CODE ~ "DIA " ELSE 01211000
|
|
IF S = 49 THEN CODE ~ "DIB " ELSE 01212000
|
|
IF S = 53 THEN CODE ~ "TRB "; 01213000
|
|
END 01214000
|
|
ELSE 01215000
|
|
BEGIN 01216000
|
|
IF (T ~ S.[46:2]) ! 1 THEN 01217000
|
|
BEGIN 01218000
|
|
SYL ~ S; 01219000
|
|
MNM ~ B2D(S.[36:10]); 01220000
|
|
IF T = 0 THEN CODE ~ "LITC" 01221000
|
|
ELSE IF T =2 THEN CODE ~ "OPDC" 01222000
|
|
ELSE CODE ~ "DESC"; 01223000
|
|
END 01224000
|
|
ELSE 01225000
|
|
BEGIN % SEARCH WOP FOR OPERATOR NAME 01226000
|
|
SYL ~ S; 01227000
|
|
MNM ~ " "; 01228000
|
|
SEARCH(CODE,S.[36:10]); 01229000
|
|
END; 01230000
|
|
END; 01231000
|
|
WRITALIST(FF,6,IF ADR{DEBUGADR THEN 1 ELSE -1,B2D(ADR.[36:10]),01232000
|
|
B2D(ADR.[46:2]),CODE,MNM,B2D(SYL),0,0) ; 01233000
|
|
IF DEBUGADR<ADR THEN DEBUGADR~ADR; 01233100
|
|
END DEBUG; 01234000
|
|
PROCEDURE DEBUGWORD(N); VALUE N; REAL N; %PRINTS OUT C+ CONSTANTS 01235000
|
|
BEGIN 01236000
|
|
STREAM PROCEDURE WB2D(F,T); 01237000
|
|
BEGIN 01238000
|
|
DI ~ T; 01239000
|
|
DI ~ DI+35; DS~10LIT"CONSTANT " ; 01240000
|
|
SI ~ F; 01241000
|
|
16(DS ~ 3 RESET; 3(IF SB THEN DS ~ SET 01242000
|
|
ELSE DS ~ RESET; 01243000
|
|
SKIP SB)); 01244000
|
|
END WB2D; 01247000
|
|
ARRAY A[0:14]; FORMAT F(X63,"(DEC ",B,")") ; 01248000
|
|
WRITE(A[*],F,N); WB2D(N,A) ; 01249000
|
|
WRITAROW(15,A) ; 01250000
|
|
END DEBUGWORD; 01251000
|
|
REAL PROCEDURE GIT(Z); % RETURNS OPERATOR IN SYLLABLE Z 01252000
|
|
VALUE Z; REAL Z; 01253000
|
|
BEGIN 01254000
|
|
INTEGER STREAM PROCEDURE GT(S,SKP); VALUE SKP; 01255000
|
|
BEGIN 01256000
|
|
SI ~ S; SKP(SI ~ SI + 2); 01257000
|
|
DI ~ LOC GT; DI ~ DI +6; DS ~ 2 CHR; 01258000
|
|
END GT; 01259000
|
|
GIT ~ GT(EDOC[Z.[36:3],Z.[39:7]],Z.[46:2]); 01260000
|
|
END GIT; 01261000
|
|
REAL STREAM PROCEDURE SPCLBIN2DEC(N); VALUE N ; 01261100
|
|
BEGIN LOCAL L; LABEL B1 ; 01261110
|
|
DI~LOC L; SI~LOC N; DS~8DEC; SI~LOC L; TALLY~8 ; 01261120
|
|
B1: IF SC="0" THEN BEGIN TALLY~TALLY+63; SI~SI+1; GO B1 END; 01261130
|
|
DI~LOC SPCLBIN2DEC; DI~DI+2; DS~6LIT" "; DI~DI-6; N~TALLY; DS~N CHR;01261140
|
|
END OF SPCLBIN2DEC; 01261150
|
|
STREAM PROCEDURE PACK(T,F,SKP); VALUE SKP,F; 01262000
|
|
BEGIN % PACKS OPERATORS INTO EDOC 01263000
|
|
SI ~ LOC F; SI ~ SI + 6;DI ~ T; SKP(DI ~ DI + 2); 01264000
|
|
DS ~ 2 CHR; 01265000
|
|
END PACK; 01266000
|
|
PROCEDURE EMITO(N); VALUE N; REAL N; 01267000
|
|
BEGIN 01268000
|
|
BUMPADR; 01269000
|
|
PACK(EDOC[EDOCI],(N~1&N[36:38:10]),ADR.[46:2]); 01270000
|
|
IF CODETOG THEN DEBUG(N); 01271000
|
|
END EMITO; 01272000
|
|
PROCEDURE EMITN(P); VALUE P; REAL P; 01273000
|
|
BEGIN LABEL XIT; 01274000
|
|
ALPHA S; 01275000
|
|
IF S~GET(P)>0 THEN S~GET(GETSPACE(P)); 01276000
|
|
IF S.CLASS = VARID THEN IF BOOLEAN(S.CE) THEN 01277000
|
|
IF BOOLEAN(S.TWOD) THEN 01278000
|
|
BEGIN 01279000
|
|
EMITL( (T~GET(P+2).BASE).[33:7]); 01280000
|
|
EMITDESCLIT(S.ADDR); 01281000
|
|
EMITO(LOD); 01282000
|
|
EMITL(T.[40:8]); 01283000
|
|
EMITO(CDC); 01284000
|
|
GO TO XIT; 01285000
|
|
END ELSE 01286000
|
|
EMITNUM(GET(P+2).BASE) 01287000
|
|
ELSE 01288000
|
|
IF NOT BOOLEAN(S.FORMAL) THEN IF NOT DESCREQ THEN 01289000
|
|
BEGIN 01290000
|
|
EMITL(S~S.ADDR); 01291000
|
|
IF S.[37:2]=1 THEN %REFERENCING 2ND HALF OF PRT; 01292000
|
|
BEGIN 01293000
|
|
IF ADR } 4087 THEN 01294000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01295000
|
|
EMITO(XRT); 01296000
|
|
END; 01297000
|
|
GO TO XIT; 01298000
|
|
END; 01299000
|
|
EMITDESCLIT(S.ADDR); 01300000
|
|
XIT: 01301000
|
|
END EMITN; 01302000
|
|
PROCEDURE EMITV(P); VALUE P; ALPHA P; 01303000
|
|
BEGIN 01304000
|
|
ALPHA S; 01305000
|
|
IF S~ GET(P) > 0 THEN S ~ GET(GETSPACE(P)); 01306000
|
|
IF S.CLASS = VARID THEN 01307000
|
|
IF BOOLEAN(S.CE) THEN 01308000
|
|
IF BOOLEAN(S.TWOD) THEN 01309000
|
|
BEGIN 01310000
|
|
EMITL( (T~GET(P+2).BASE).[33:7]); 01311000
|
|
EMITDESCLIT(S.ADDR); 01312000
|
|
EMITO(LOD); 01313000
|
|
IF S.SUBCLASS } DOUBTYPE THEN 01314000
|
|
BEGIN 01315000
|
|
EMITO(DUP); 01316000
|
|
EMITPAIR(T.[40:8]+1, COC); 01317000
|
|
EMITO(XCH); 01318000
|
|
EMITPAIR(T.[40:8], COC); 01319000
|
|
END ELSE EMITPAIR(T.[40:8], COC); 01320000
|
|
END 01321000
|
|
ELSE 01322000
|
|
IF S.SUBCLASS } DOUBTYPE THEN 01323000
|
|
BEGIN 01324000
|
|
EMITNUM( (T~GET(P+2).BASE)+1); 01325000
|
|
EMITOPDCLIT(S.ADDR); 01326000
|
|
EMITNUM(T); 01327000
|
|
EMITOPDCLIT(S.ADDR); 01328000
|
|
END ELSE 01329000
|
|
BEGIN 01330000
|
|
EMITNUM(GET(P+2).BASE); 01331000
|
|
EMITOPDCLIT(S.ADDR); 01332000
|
|
END 01333000
|
|
ELSE 01334000
|
|
IF S.SUBCLASS } DOUBTYPE THEN 01335000
|
|
IF BOOLEAN(S.FORMAL) THEN 01336000
|
|
BEGIN 01337000
|
|
EMITDESCLIT(S.ADDR); 01338000
|
|
EMITO(DUP); 01339000
|
|
EMITPAIR(1, XCH); 01340000
|
|
EMITO(INX); 01341000
|
|
EMITO(LOD); 01342000
|
|
EMITO(XCH); 01343000
|
|
EMITO(LOD); 01344000
|
|
END ELSE 01345000
|
|
BEGIN 01346000
|
|
EMITOPDCLIT(S.ADDR+1); 01347000
|
|
EMITOPDCLIT(S.ADDR); 01348000
|
|
END 01349000
|
|
ELSE EMITOPDCLIT(S.ADDR) 01350000
|
|
ELSE EMITOPDCLIT(S.ADDR); 01351000
|
|
END EMITV; 01352000
|
|
PROCEDURE EMITL(N); VALUE N; REAL N; 01353000
|
|
BEGIN 01354000
|
|
BUMPADR; 01355000
|
|
PACK(EDOC[EDOCI],(N~0&N[36:38:10]),ADR.[46:2]); 01356000
|
|
IF CODETOG THEN DEBUG(N); 01357000
|
|
END EMITL; 01358000
|
|
PROCEDURE EMITD(R, OP); VALUE R, OP; REAL R, OP; 01359000
|
|
BEGIN 01360000
|
|
BUMPADR; 01361000
|
|
PACK(EDOC[EDOCI], (R ~ OP & R[36:42:6]), ADR.[46:2]); 01362000
|
|
IF CODETOG THEN DEBUG(-R); 01363000
|
|
END EMITD; 01364000
|
|
PROCEDURE EMITDDT(B,A,X); VALUE B,A,X; INTEGER B,A,X ; 01364010
|
|
BEGIN % DOES DIB B, DIA A, TRB X; HANDLES [B:A:X]. 01364020
|
|
EMITD(B~B MOD 6+B DIV 6|8,DIB); EMITD(A~A MOD 6+A DIV 6|8,DIA) ; 01364030
|
|
EMITD(X~X,TRB); 01364035
|
|
END OF EMITDDT ; 01364040
|
|
PROCEDURE EMITPAIR(L, OP); VALUE L, OP; INTEGER L, OP; 01365000
|
|
BEGIN 01366000
|
|
EMITL(L); 01367000
|
|
IF L.[37:2] = 1 THEN 01368000
|
|
BEGIN 01369000
|
|
IF ADR } 4087 THEN 01370000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01371000
|
|
EMITO(XRT); 01372000
|
|
END; 01373000
|
|
EMITO(OP); 01374000
|
|
END EMITPAIR; 01375000
|
|
PROCEDURE ADJUST; 01376000
|
|
WHILE ADR.[46:2] ! 3 DO EMITO(NOP); 01377000
|
|
PROCEDURE EMITNUM(N); VALUE N; REAL N; 01378000
|
|
BEGIN 01379000
|
|
DEFINE CPLUS = 1792#; 01380000
|
|
IF N.[3:6] =0 AND ABS(N) < 1024 THEN 01381000
|
|
BEGIN 01382000
|
|
EMITL(N); 01383000
|
|
IF N < 0 THEN EMITO(SSN); 01384000
|
|
END ELSE 01385000
|
|
BEGIN 01386000
|
|
IF ADR } 4079 THEN 01387000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01388000
|
|
EMITOPDCLIT(CPLUS + (ADR+1).[46:1] + 1); 01389000
|
|
EMITL(2); 01390000
|
|
EMITO(GFW); 01391000
|
|
ADJUST; 01392000
|
|
BUMPADR; 01393000
|
|
PACK(EDOC[EDOCI],N.[1:11],ADR.[46:2]); 01394000
|
|
BUMPADR; 01395000
|
|
PACK(EDOC[EDOCI],N.[12:12],ADR.[46:2]); 01396000
|
|
BUMPADR; 01397000
|
|
PACK(EDOC[EDOCI],N.[24:12],ADR.[46:2]); 01398000
|
|
BUMPADR; 01399000
|
|
PACK(EDOC[EDOCI],N.[36:12],ADR.[46:2]); 01400000
|
|
IF N.[36:12]=49 THEN %%% IF C-REL CONSTANT LOOKS LIKE AN XRT 01400400
|
|
EMITO(NOP); %%% THEN INSURE AGAINST P-BIT INTERRUPT. 01400600
|
|
IF CODETOG THEN DEBUGWORD(N); 01401000
|
|
END; 01402000
|
|
END EMITNUM; 01403000
|
|
PROCEDURE EMITNUM2(HI,LO);VALUE HI,LO; REAL HI,LO; 01404000
|
|
BEGIN 01405000
|
|
BOOLEAN B; REAL I,N; 01406000
|
|
LABEL Z,X; 01407000
|
|
DEFINE CPLUS = 1792#; 01408000
|
|
IF HI=0 OR LO=0 THEN BEGIN EMITNUM(LO); EMITNUM(HI); GO Z END; 01408100
|
|
ADJUST; 01409000
|
|
IF ADR } 4077 THEN 01410001
|
|
BEGIN ADR~ADR+1; SEGOVF; ADR~-1 END; 01411000
|
|
EMITOPDCLIT(CPLUS + 2); EMITOPDCLIT(CPLUS + 1); 01412000
|
|
EMITPAIR(3,GFW); 01413000
|
|
X: FOR I ~ 0 STEP 1 UNTIL 3 DO 01415000
|
|
BEGIN 01416000
|
|
CASE I OF BEGIN 01417000
|
|
N ~ HI.[ 1:11]; 01418000
|
|
N ~ HI.[12:12]; 01419000
|
|
N ~ HI.[24:12]; 01420000
|
|
N ~ HI.[36:12]; 01421000
|
|
END CASE; 01422000
|
|
BUMPADR; PACK(EDOC[EDOCI],N,ADR.[46:2]); 01423000
|
|
END; 01424000
|
|
IF CODETOG THEN DEBUGWORD(HI); 01425000
|
|
IF NOT B THEN BEGIN B~TRUE; HI~LO; GO TO X; END; 01426000
|
|
IF N=49 THEN %%% IF C-REL CONSTANT LOOKS LIKE AN XRT 01426400
|
|
EMITO(NOP) ; %%% THEN INSURE AGAINST P-BIT INTERRUPT. 01426600
|
|
Z: 01426650
|
|
END EMITNUM2; 01427000
|
|
PROCEDURE EMITLINK(N); VALUE N; REAL N; % EMITS LINKS 01428000
|
|
BEGIN 01429000
|
|
FORMAT FF(X35,*(33(".")),A4,":",A1," LINK",X10,A4,"******") ; 01430000
|
|
BUMPADR; 01431000
|
|
PACK(EDOC[EDOCI],N,ADR.[46:2]); 01432000
|
|
IF CODETOG THEN 01433000
|
|
WRITALIST(FF,4,IF ADR{DEBUGADR THEN 1 ELSE -1,B2D(ADR.[36:10]),01434000
|
|
B2D(ADR.[46:2]),B2D(N),0,0,0,0) ; 01435000
|
|
IF DEBUGADR<ADR THEN DEBUGADR~ADR ; 01435010
|
|
END EMITLINK; 01436000
|
|
PROCEDURE EMITSTORE(IX, EXP); VALUE IX, EXP; REAL IX, EXP; 01437000
|
|
BEGIN 01438000
|
|
REAL E, VT; 01439000
|
|
P ~ REAL(ERRORTOG); 01440000
|
|
ERRORTOG ~ FALSE; 01441000
|
|
E ~ GET(GETSPACE(IX)); 01442000
|
|
IF NOT( (VT ~ E.SUBCLASS) = LOGTYPE EQV EXP = LOGTYPE) OR 01443000
|
|
NOT(VT = COMPTYPE EQV EXP = COMPTYPE) THEN 01444000
|
|
BEGIN XTA ~ GET(IX+1); FLAG(86) END; 01445000
|
|
IF E.CLASS = VARID THEN 01446000
|
|
BEGIN 01447000
|
|
IF BOOLEAN(E.FORMAL) OR BOOLEAN(E.CE) THEN 01448000
|
|
BEGIN 01449000
|
|
IF VT { LOGTYPE THEN 01450000
|
|
BEGIN 01451000
|
|
IF VT = INTYPE AND EXP } REALTYPE THEN EMITPAIR(1, IDV); 01452000
|
|
EMITN(IX); 01453000
|
|
EMITO(IF VT = INTYPE THEN ISD ELSE STD); 01454000
|
|
IF EXP } DOUBTYPE THEN EMITO(DEL); 01455000
|
|
END ELSE 01456000
|
|
BEGIN 01457000
|
|
EMITN(IX); 01458000
|
|
EMITPAIR(JUNK, STN); 01459000
|
|
EMITO(STD); 01460000
|
|
IF EXP < DOUBTYPE THEN EMITL(0); 01461000
|
|
EMITL(1); 01462000
|
|
EMITPAIR(JUNK, LOD); 01463000
|
|
EMITO(INX); 01464000
|
|
EMITO(STD); 01465000
|
|
END 01466000
|
|
END ELSE 01467000
|
|
BEGIN 01468000
|
|
IF VT = INTYPE AND EXP } REALTYPE THEN EMITPAIR(1, IDV); 01469000
|
|
EMITPAIR(E.ADDR, IF VT = INTYPE THEN ISD ELSE STD); 01470000
|
|
IF VT { LOGTYPE THEN 01471000
|
|
IF EXP } DOUBTYPE THEN EMITO(DEL) ELSE ELSE 01472000
|
|
BEGIN 01473000
|
|
IF EXP < DOUBTYPE THEN EMITL(0); 01474000
|
|
EMITPAIR(E.ADDR+1, STD); 01475000
|
|
END 01476000
|
|
END 01477000
|
|
END ELSE 01478000
|
|
IF E.CLASS = ARRAYID THEN 01479000
|
|
BEGIN 01480000
|
|
IF VT { LOGTYPE THEN 01481000
|
|
BEGIN 01482000
|
|
IF VT = INTYPE AND EXP } REALTYPE THEN EMITPAIR(1, IDV); 01483000
|
|
IF EXP } DOUBTYPE THEN 01484000
|
|
BEGIN 01485000
|
|
EMITO(XCH); 01486000
|
|
EMITO(DEL); 01487000
|
|
END; 01488000
|
|
EMITO(XCH); 01489000
|
|
EMITO(IF VT = INTYPE THEN ISD ELSE STD); 01490000
|
|
END ELSE 01491000
|
|
BEGIN 01492000
|
|
IF EXP } DOUBTYPE THEN 01493000
|
|
BEGIN 01494000
|
|
EMITPAIR(JUNK, STD); 01495000
|
|
EMITO(XCH); 01496000
|
|
EMITOPDCLIT(JUNK); 01497000
|
|
EMITO(XCH); 01498000
|
|
EMITPAIR(JUNK, STN); 01499000
|
|
EMITO(STD); 01500000
|
|
EMITL(1); 01501000
|
|
EMITPAIR(JUNK, LOD); 01502000
|
|
EMITO(INX); 01503000
|
|
EMITO(STD); 01504000
|
|
END ELSE 01505000
|
|
BEGIN 01506000
|
|
EMITO(XCH); 01507000
|
|
EMITPAIR(JUNK, STN); 01508000
|
|
EMITO(STD); 01509000
|
|
EMITL(0); 01510000
|
|
EMITL(1); 01511000
|
|
EMITPAIR(JUNK, LOD); 01512000
|
|
EMITO(INX); 01513000
|
|
EMITO(STD); 01514000
|
|
END 01515000
|
|
END 01516000
|
|
END ELSE BEGIN XTA ~ GET(IX+1); FLAG(49) END; 01517000
|
|
ERRORTOG ~ ERRORTOG OR BOOLEAN(P); 01518000
|
|
END EMITSTORE; 01519000
|
|
PROCEDURE EMITB(A,C); VALUE A,C; REAL A; BOOLEAN C; 01520000
|
|
BEGIN COMMENT GENERATES LITC AND BRANCH FROM CURRENT ADR TO ADDRESS A. 01521000
|
|
IF THE BOOLEAN C IS TRUE THEN THE BRANCH IS CONDITIONAL. BEOREF IS 01522000
|
|
TRUE IF THE BRANCH IS BACKWARDS; 01523000
|
|
BOOLEAN BEOREF; 01524000
|
|
REAL SEG; 01525000
|
|
IF ADR } 4086 THEN 01526000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01527000
|
|
IF A < 0 THEN 01528000
|
|
BEGIN 01529000
|
|
IF BRANCHX>LBRANCH THEN FATAL(123); 01530000
|
|
BRANCHX ~ BRANCHES[LAX~BRANCHX]; 01531000
|
|
BRANCHES[LAX] ~ -(ADR+1); 01532000
|
|
EMITLINK(0); 01533000
|
|
EMITO(IF C THEN BFC ELSE BFW); 01534000
|
|
EMITO(NOP); 01534100
|
|
END ELSE 01535000
|
|
BEGIN 01536000
|
|
SEG ~ A.SEGNO; 01537000
|
|
A ~ A.LINK; 01538000
|
|
BEOREF ~ ADR > A; 01539000
|
|
IF A.[46:2] =0 THEN 01540000
|
|
BEGIN 01541000
|
|
IF SEG > 0 AND SEG ! NSEG THEN 01542000
|
|
EMITOPDCLIT(PRGDESCBLDR(2, 0, A.[36:10], SEG)) 01543000
|
|
ELSE 01544000
|
|
EMITL(ABS((ADR+2).[36:10] - A.[36:10])); 01545000
|
|
IF BEOREF THEN 01546000
|
|
EMITO( IF C THEN GBC ELSE GBW) ELSE 01547000
|
|
EMITO( IF C THEN GFC ELSE GFW); 01548000
|
|
END ELSE 01549000
|
|
BEGIN 01550000
|
|
EMITL(ABS(ADR + 3 - A)); 01551000
|
|
IF BEOREF THEN 01552000
|
|
EMITO(IF C THEN BBC ELSE BBW) ELSE 01553000
|
|
EMITO(IF C THEN BFC ELSE BFW); 01554000
|
|
END; 01555000
|
|
END; 01556000
|
|
END EMITB; 01557000
|
|
PROCEDURE EMITDESCLIT(N); VALUE N; REAL N; 01558000
|
|
BEGIN 01559000
|
|
IF N.[37:2] = 1 THEN 01560000
|
|
BEGIN 01561000
|
|
IF ADR } 4087 THEN 01562000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01563000
|
|
EMITO(XRT); 01564000
|
|
END; 01565000
|
|
BUMPADR; 01566000
|
|
PACK(EDOC[EDOCI],(N~3&N[36:38:10]),ADR.[46:2]); 01567000
|
|
IF CODETOG THEN DEBUG(N); 01568000
|
|
END EMITDESCLIT; 01569000
|
|
PROCEDURE EMITOPDCLIT(N); VALUE N; REAL N; 01570000
|
|
BEGIN 01571000
|
|
IF N.[37:2] = 1 THEN 01572000
|
|
BEGIN 01573000
|
|
IF ADR } 4087 THEN 01574000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01575000
|
|
EMITO(XRT); 01576000
|
|
END; 01577000
|
|
BUMPADR; 01578000
|
|
PACK(EDOC[EDOCI],(N~2&N[36:38:10]),ADR.[46:2]); 01579000
|
|
IF CODETOG THEN DEBUG(N); 01580000
|
|
END EMITOPDCLIT; 01581000
|
|
PROCEDURE EMITLABELDESC(N); VALUE N; ALPHA N; 01582000
|
|
BEGIN 01583000
|
|
LABEL XIT; 01584000
|
|
REAL T,B,C,D ; 01585000
|
|
IF N ~ LBLSHFT(XTA~N) = 0 OR N = BLANKS THEN 01586000
|
|
BEGIN FLAG(135); GO TO XIT END; 01587000
|
|
IF T ~ SEARCH(N) = 0 THEN 01588000
|
|
T ~ ENTER(0 & LABELID[TOCLASS], N) ELSE 01588100
|
|
IF GET(T).CLASS ! LABELID THEN 01588200
|
|
BEGIN FLAG(144); GO TO XIT END; 01588300
|
|
IF XREF THEN ENTERX(N,0&LABELID[TOCLASS]); 01588400
|
|
IF B ~(C~GET(T+2)).BASE =0 THEN 01589000
|
|
IF (D~GET(T)).SEGNO!0 THEN C.BASE~B~PRGDESCBLDR(2,0,D.ADDR DIV 4, 01589010
|
|
D.SEGNO) ELSE 01589020
|
|
BEGIN BUMPPRT; C.BASE~B~PRTS END; PUT(T+2,C); 01590000
|
|
EMITL(B); EMITO(MKS); 01591000
|
|
EMITDESCLIT(1536); % F+0 01592000
|
|
EMITOPDCLIT(1537); % F+1 01593000
|
|
EMITV(NEED(".LABEL", INTRFUNID)); 01594000
|
|
XIT: 01595000
|
|
END EMITLABELDESC; 01596000
|
|
COMMENT TRACEBACK, OFLOWHANGERS, AND PRTSAVER ARE 01597000
|
|
PROCEDURES USED TO ACCUMULATE FORMAT AND NAMELIST ARRAYS; 01598000
|
|
PROCEDURE TRACEBACK(M,DEX,PRT); VALUE M,DEX,PRT; INTEGER M,DEX,PRT; 01599000
|
|
BEGIN INTEGER I,J; REAL C; 01600000
|
|
IF (C~GET(M+2)).BASE ! 0 THEN 01601000
|
|
BEGIN I ~ ADR; ADR ~ C.BASE; 01602000
|
|
DO BEGIN J ~ GIT(ADR); 01603000
|
|
ADR ~ ADR - 1; 01604000
|
|
EMITL(DEX); 01605000
|
|
EMITPAIR(PRT,LOD); 01606000
|
|
END UNTIL ADR ~ J = 0; 01607000
|
|
ADR ~ I; 01608000
|
|
END; 01609000
|
|
INFO[M.IR,M.IC].ADDR ~ PRT; PUT(M+2,0&DEX[TOBASE]); 01610000
|
|
END TRACEBACK; 01611000
|
|
PROCEDURE OFLOWHANGERS(I); VALUE I; INTEGER I; 01612000
|
|
BEGIN INTEGER J; LABEL XIT; 01613000
|
|
FOR J ~ 1 STEP 1 UNTIL MAXNBHANG DO 01614000
|
|
IF FNNHANG[J] = 0 THEN % MAKE AN ENTRY 01615000
|
|
BEGIN FNNHANG[J] ~ I; 01616000
|
|
PUT(I+2,J); 01617000
|
|
GO TO XIT; 01618000
|
|
END; 01619000
|
|
XTA ~ MAXNBHANG; % IF WE REACH HERE WERE HURTIN 01620000
|
|
FLAG(91); 01621000
|
|
XIT: 01622000
|
|
END OFLOWHANGERS; 01623000
|
|
PROCEDURE PRTSAVER(M,SZ,ARY); VALUE M,SZ; 01624000
|
|
INTEGER M,SZ; ARRAY ARY[0]; 01625000
|
|
BEGIN INTEGER I; REAL INFA; 01626000
|
|
LABEL SHOW,XIT; 01626100
|
|
IF (INFA~GET(M)) < 0 THEN % PREVIOUSLY DEFINED 01627000
|
|
BEGIN XTA ~ GET(M+1); 01628000
|
|
FLAG(20); GO TO XIT; 01629000
|
|
END; 01630000
|
|
IF I ~ INFA .ADDR ! 0 THEN % PRT ASSIGNED AT OFLOW TIME 01631000
|
|
SHOW: 01631100
|
|
BEGIN I ~ PRGDESCBLDR(1,I,0,NXAVIL ~ NXAVIL + 1); 01632000
|
|
WRITEDATA(SZ,NXAVIL,ARY); 01633000
|
|
FNNHANG[GET(M+2).SIZE] ~ 0; 01634000
|
|
END ELSE % ADD THIS ARRAY TO HOLD 01635000
|
|
BEGIN IF FNNPRT=0 THEN BEGIN BUMPPRT; FNNPRT~PRTS END; 01636000
|
|
IF FNNINDEX + SZ > DUMPSIZE THEN % ARRAY WONT FIT 01637000
|
|
IF SZ > DUMPSIZE THEN % ARRAY WILL NEVER FIT 01638000
|
|
BEGIN BUMPPRT;FNNHANG[GET(M+2).SIZE]~0; TRACEBACK(M,0,I~PRTS); 01639000
|
|
GO TO SHOW; 01640000
|
|
END ELSE % DUMP OUT CURRENT HOLDINGS 01641000
|
|
BEGIN FNNPRT ~ PRGDESCBLDR(1,FNNPRT,0,NXAVIL ~ NXAVIL + 1); 01642000
|
|
WRITEDATA(FNNINDEX,NXAVIL,FNNHOLD); 01643000
|
|
FNNINDEX ~ 0; BUMPPRT; FNNPRT ~PRTS; 01644000
|
|
END; 01645000
|
|
FNNHANG[GET(M + 2).SIZE] ~0; 01646000
|
|
TRACEBACK(M,FNNINDEX,FNNPRT); 01647000
|
|
MOVEW(ARY,FNNHOLD[FNNINDEX],SZ.[36:6],SZ); 01648000
|
|
FNNINDEX ~ FNNINDEX + SZ; 01649000
|
|
END; 01650000
|
|
PUT(M,-GET(M)); % ID NOW ASSIGNED 01651000
|
|
XIT: 01651100
|
|
END PRTSAVER; 01652000
|
|
PROCEDURE SEGOVF; 01653000
|
|
BEGIN 01654000
|
|
REAL I, T, A, J, SADR, INFC, LABPRT; 01655000
|
|
REAL SAVINS; 01655100
|
|
FOR T ~ 1 STEP 1 UNTIL MAXNBHANG DO 01656000
|
|
IF J~FNNHANG[T]!0 THEN BEGIN BUMPPRT;TRACEBACK(J,FNNHANG[T]~0,PRTS) END;01657000
|
|
SEGOVFLAG ~ TRUE; 01661000
|
|
BUMPPRT; 01662000
|
|
IF PRTS.[37:2]=1 THEN BEGIN 01662300
|
|
PACK(EDOC[EDOCI],(T~1&XRT[36:38:10]),ADR.[46:2]); 01662500
|
|
IF CODETOG THEN DEBUG(T); ADR~ADR+1 END; 01662700
|
|
PACK(EDOC[EDOCI], (T~2&PRTS[36:38:10]), ADR.[46:2]); 01663000
|
|
IF CODETOG THEN DEBUG(T); 01664000
|
|
ADR ~ ADR+1; 01665000
|
|
PACK(EDOC[EDOCI], (T~1&BFW [36:38:10]), ADR.[46:2]); 01666000
|
|
IF CODETOG THEN DEBUG(T); 01667000
|
|
SADR ~ ADR; 01668000
|
|
T ~ PRGDESCBLDR(2, PRTS, 0, NXAVIL+1); 01669000
|
|
FOR I ~ 0 STEP 1 UNTIL SHX DO 01670000
|
|
BEGIN T ~ STACKHEAD[I]; 01671000
|
|
WHILE T ! 0 DO 01672000
|
|
BEGIN IF (A~ GET(T)).CLASS = LABELID THEN 01673000
|
|
IF A > 0 THEN 01674000
|
|
BEGIN 01675000
|
|
ADR ~ A.ADDR; 01676000
|
|
IF LABPRT ~ (INFC~GET(T+2)).BASE = 0 THEN 01677000
|
|
BEGIN 01678000
|
|
BUMPPRT; LABPRT~PRTS; 01679000
|
|
PUT(T+2, INFC & PRTS[TOBASE]); 01680000
|
|
END; 01681000
|
|
WHILE ADR ! 0 DO 01682000
|
|
BEGIN J ~ GIT(ADR); ADR ~ ADR-1; 01683000
|
|
SAVINS~GIT(ADR+2).[36:10]; 01683100
|
|
EMITOPDCLIT(LABPRT); 01684000
|
|
EMITO(SAVINS); 01684100
|
|
ADR ~ J; 01685000
|
|
END; 01686000
|
|
INFO[T.IR,T.IC].ADDR ~ 0; 01687000
|
|
END; 01688000
|
|
T ~ A.LINK; 01689000
|
|
END; 01690000
|
|
END; 01691000
|
|
FOR I ~ 0 STEP 1 UNTIL LBRANCH DO 01692000
|
|
IF T ~ - BRANCHES[I] > 0 AND T < 4096 THEN 01693000
|
|
BEGIN 01694000
|
|
ADR ~ T-1; 01695000
|
|
SAVINS~GIT(ADR+2).[36:10]; 01695100
|
|
BUMPPRT; EMITOPDCLIT(PRTS); 01696000
|
|
EMITO(SAVINS); 01696100
|
|
BRANCHES[I] ~ - (PRTS+4096); 01697000
|
|
END; 01698000
|
|
SEGMENT((SADR+4) DIV 4,NSEG,FALSE,EDOC); 01699000
|
|
SEGMENTSTART; 01700000
|
|
EMITO(NOP); EMITO(NOP); 01701000
|
|
SEGOVFLAG ~ FALSE; 01702000
|
|
END SEGOVF; 01703000
|
|
PROCEDURE ARRAYDEC(I); VALUE I; REAL I; 01704000
|
|
BEGIN % DECLARES ARRAYS WHOSE INFO INDEX IS I 01705000
|
|
REAL PRT,LNK,J; 01706000
|
|
LABEL XIT; 01706010
|
|
BOOLEAN OWNID; REAL X; 01706100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ARRA","YDEC ",TRUE ); 01706110
|
|
PRT ~ GET(I).ADDR; 01707000
|
|
IF LNK ~ GET(I+2).SIZE = 0 THEN GO TO XIT ; 01708000
|
|
IF (OWNID ~ PRT < 1536 AND DATAPRT ! 0) THEN 01708100
|
|
BEGIN 01708200
|
|
EMITOPDCLIT(DATAPRT); EMITO(LNG); 01708300
|
|
EMITB(-1, TRUE); X ~ LAX; 01708400
|
|
END; 01708500
|
|
EMITO(MKS); 01709000
|
|
EMITDESCLIT(PRT); % STACK OR PRT ADDRESS 01710000
|
|
IF LNK { 1023 THEN 01711000
|
|
BEGIN 01712000
|
|
IF OWNID THEN EMITL(0); % LOWER BOUND 01712100
|
|
EMITL(LNK); % ARRAY SIZE 01713000
|
|
EMITL(1); % ONE DIMENSION 01714000
|
|
END 01715000
|
|
ELSE 01716000
|
|
BEGIN 01717000
|
|
J ~ (LNK + 255) DIV 256; 01718000
|
|
LNK := 256; %INCLUDE ENTIRE ARRAY SIZE IN ESTIMATE %512-01719000
|
|
IF OWNID THEN EMITL(0); % FIRST LOWER BOUND 01719100
|
|
EMITL(J); % NUMBER OF ROWS 01720000
|
|
IF OWNID THEN EMITL(0); % SECOND LOWER BOUND 01720100
|
|
EMITL(256); % SIZE OF EACH ROW 01721000
|
|
EMITL(2); % TWO DIMENSIONS 01722000
|
|
END; 01723000
|
|
EMITL(1); % ONE ARRAY 01724000
|
|
EMITL(IF OWNID THEN 2 ELSE 0); %OWN OR LOCAL 01725000
|
|
EMITOPDCLIT(5); % CALL BLOCK 01726000
|
|
ARYSZ ~ ARYSZ + J + LNK; 01727000
|
|
IF NOT(F2TOG OR OWNID) THEN 01728000
|
|
BEGIN 01729000
|
|
F2TOG ~ TRUE; 01730000
|
|
EMITL(1); 01731000
|
|
EMITPAIR(FPLUS2,STD);% F+2~TRUE 01732000
|
|
END; 01733000
|
|
IF OWNID THEN FIXB(X); 01733100
|
|
XIT: 01733105
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ARRA","YDEC ",FALSE) ; 01733200
|
|
END ARRAYDEC; 01734000
|
|
REAL PROCEDURE SEARCH(E); VALUE E; REAL E; 01735000
|
|
BEGIN REAL T; LABEL XIT; 01736000
|
|
T ~ STACKHEAD[E MOD SHX]; 01737000
|
|
WHILE T ! 0 DO 01738000
|
|
IF INFO[(T+1).IR,(T+1).IC] = E THEN GO TO XIT 01739000
|
|
ELSE T ~ INFO[T.IR,T.IC].LINK; 01740000
|
|
XIT: SEARCH ~ T; 01741000
|
|
END SEARCH; 01742000
|
|
INTEGER PROCEDURE GLOBALSEARCH(E); VALUE E; REAL E; 01743000
|
|
BEGIN REAL T; LABEL XIT; 01744000
|
|
T ~ GLOBALSTACKHEAD[E MOD GHX]; 01745000
|
|
WHILE T ! 0 DO 01746000
|
|
IF INFO[(T+1).IR,(T+1).IC] = E THEN GO TO XIT 01747000
|
|
ELSE T ~ INFO[T.IR,T.IC].LINK; 01748000
|
|
XIT: GLOBALSEARCH ~ T; 01749000
|
|
END GLOBALSEARCH; 01750000
|
|
PROCEDURE PURGEINFO; 01751000
|
|
BEGIN REAL J; 01752000
|
|
FLAG(13); 01753000
|
|
FOR J ~ 0 STEP 1 UNTIL SHX DO STACKHEAD[J] ~ 0; 01754000
|
|
NEXTINFO ~ 2; 01755000
|
|
NEXTCOM ~ 0; 01756000
|
|
END; 01757000
|
|
INTEGER PROCEDURE ENTER(W, E); VALUE W, E; ALPHA W, E; 01758000
|
|
BEGIN REAL J; 01759000
|
|
IF GLOBALNEXTINFO { NEXTINFO THEN PURGEINFO; 01760000
|
|
W.LINK ~ STACKHEAD[J ~ E MOD SHX]; 01761000
|
|
STACKHEAD[J] ~ ENTER ~ J ~ NEXTINFO; 01762000
|
|
INFO[J.IR,J.IC] ~ W; 01763000
|
|
INFO[(J~J+1).IR,J.IC] ~ E; 01764000
|
|
INFO[(J~J+1).IR,J.IC] ~ 0; 01765000
|
|
NEXTINFO ~ NEXTINFO + 3; 01766000
|
|
END ENTER; 01767000
|
|
INTEGER PROCEDURE GLOBALENTER(W, E); VALUE W, E; ALPHA W, E; 01768000
|
|
BEGIN REAL J; 01769000
|
|
IF GLOBALNEXTINFO { NEXTINFO THEN PURGEINFO; 01770000
|
|
W.LINK ~ GLOBALSTACKHEAD[J ~ E MOD GHX]; 01771000
|
|
GLOBALSTACKHEAD[J] ~ GLOBALENTER ~ J ~ GLOBALNEXTINFO; 01772000
|
|
INFO[J.IR,J.IC] ~ W; 01773000
|
|
INFO[(J~J+1).IR,J.IC] ~ E; 01774000
|
|
INFO[(J~J+1).IR,J.IC] ~ 0; 01775000
|
|
GLOBALNEXTINFO ~ GLOBALNEXTINFO - 3; 01776000
|
|
END GLOBALENTER; 01777000
|
|
PROCEDURE LABELBRANCH(K, C); VALUE K, C; REAL K; BOOLEAN C; 01778000
|
|
BEGIN REAL TS,T,I,X; 01779000
|
|
DEFINE LABL = K#; 01780000
|
|
COMMENT LABELBRANCH GENERATES A "LITC ..." AND "BRANCH" FROM THE 01781000
|
|
CURRENT ADDRESS TO LABEL K. IF THE BOOLEAN C IS TRUE 01782000
|
|
THE BRANCH IS CONDITIONAL. IF THE LABEL HAS NOT BEEN ENCOUNTERED 01783000
|
|
THEN THE APPROPRIATE LINKAGE IS MADE; 01784000
|
|
LABEL XIT; 01785000
|
|
IF ADR } 4086 THEN 01786000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 01787000
|
|
IF LABL ~ LBLSHFT(XTA~LABL) { 0 OR LABL = BLANKS THEN 01788000
|
|
BEGIN FLAG(135); GO TO XIT END; 01789000
|
|
IF T ~ SEARCH(LABL) ! 0 THEN 01790000
|
|
BEGIN TS ~ (I ~ GET(T)).ADDR; 01791000
|
|
IF I.CLASS ! LABELID THEN BEGIN FLAG(144); GO TO XIT END; 01791100
|
|
IF I > 0 THEN 01792000
|
|
BEGIN EMITLINK(TS); 01793000
|
|
EMITO(IF C THEN BFC ELSE BFW); 01794000
|
|
PUT(T,I&(ADR-1)[TOADDR]); 01795000
|
|
EMITO(NOP); 01795100
|
|
END ELSE 01796000
|
|
IF I.SEGNO = NSEG THEN EMITB(TS, C) ELSE 01799000
|
|
BEGIN IF TS~(X~GET(T+2)).BASE = 0 THEN 01800000
|
|
X.BASE ~ TS ~ PRGDESCBLDR(2,0,(I.ADDR).[36:10],I.SEGNO); 01801000
|
|
PUT(T+2,X); 01802000
|
|
EMITOPDCLIT(TS); 01803000
|
|
EMITO(IF C THEN BFC ELSE BFW); 01804000
|
|
END; 01805000
|
|
END ELSE 01806000
|
|
BEGIN 01807000
|
|
IF ADR < 0 THEN EMITO(NOP); 01808000
|
|
EMITLINK(0); 01809000
|
|
EMITO( IF C THEN BFC ELSE BFW); 01810000
|
|
T ~ ENTER(0 & LABELID[TOCLASS] & (ADR-1)[TOADDR], LABL); 01811000
|
|
EMITO(NOP); 01811100
|
|
END; 01812000
|
|
IF XREF THEN ENTERX(LABL,0&LABELID[TOCLASS]); 01812100
|
|
XIT: 01813000
|
|
END LABELBRANCH; 01814000
|
|
PROCEDURE DATASET; % SCANS CONSTANTS IN BLOCK DATA 01815000
|
|
BEGIN 01816000
|
|
REAL LST,CUR,LTYP,CTYP,SIZ,RPT; 01817000
|
|
REAL CUD; 01818000
|
|
BOOLEAN SGN; 01819000
|
|
01820000
|
|
01821000
|
|
DEFINE TYP = GLOBALNEXT#, 01822000
|
|
TYPC = 18:33:15#; 01823000
|
|
LABEL XIT,ERROR,DPP,SPP,CPP,COMM,S; 01824000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DATA","SET ",TRUE) ; 01825000
|
|
DATATOG ~ TRUE; FILETOG ~ TRUE; 01826000
|
|
SCAN; 01827000
|
|
LSTS ~ -1; LTYP ~77; 01828000
|
|
S: IF TYP = PLUS OR (SGN ~ TYP = MINUS ) THEN SCAN; 01829000
|
|
IF TYP = NUM THEN 01830000
|
|
BEGIN 01831000
|
|
IF NUMTYPE = STRINGTYPE AND STRINGSIZE > 1 THEN 01832000
|
|
BEGIN 01833000
|
|
IF LTYP ! 77 THEN 01834000
|
|
BEGIN % NOT FIRST ENTRY-PUSH DOWN PRIOR NUMBER 01835000
|
|
IF LSTS+2 > LSTMAX THEN 01836000
|
|
BEGIN FLAG(127); GO TO ERROR END; 01837000
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 01838000
|
|
LSTT[LSTS~LSTS+1] ~ LST; 01839000
|
|
LTYP ~ 77; 01840000
|
|
END; 01841000
|
|
01841100
|
|
IF LSTS + STRINGSIZE > LSTMAX THEN 01842000
|
|
BEGIN FLAG(127); GO TO ERROR END; 01843000
|
|
LSTT[LSTS~LSTS+1] ~ STRINGSIZE & STRINGTYPE[TYPC] 01844000
|
|
& SIZ[3:33:15]; 01844100
|
|
MOVEW(STRINGARRAY,LSTT[LSTS~LSTS+1], 01845000
|
|
STRINGSIZE.[36:6],STRINGSIZE); 01846000
|
|
LSTS ~ LSTS + STRINGSIZE -1; 01846100
|
|
SCAN; 01847000
|
|
GO TO COMM; 01848000
|
|
END; 01849000
|
|
% GOT NUMBER 01850000
|
|
IF NUMTYPE = STRINGTYPE THEN 01851000
|
|
BEGIN 01851100
|
|
FNEXT ~ STRINGARRAY[0]; 01851200
|
|
NUMTYPE ~ INTYPE; 01851300
|
|
IF SIZ = 0 THEN SIZ ~ 1; 01851400
|
|
END; 01851500
|
|
CUR ~ IF SGN THEN -FNEXT ELSE FNEXT; 01852000
|
|
CTYP ~ NUMTYPE; CUD ~ DBLOW; 01853000
|
|
01854000
|
|
SCAN; 01855000
|
|
IF TYP = COMMA OR TYP = SLASH THEN 01856000
|
|
BEGIN 01857000
|
|
IF SIZ = 0 THEN SIZ ~ 1; 01857100
|
|
IF CTYP = DOUBTYPE THEN 01858000
|
|
BEGIN 01859000
|
|
DPP: IF LTYP ! 77 THEN 01860000
|
|
BEGIN 01861000
|
|
IF LSTS+2 > LSTMAX THEN 01862000
|
|
BEGIN FLAG(127); GO TO ERROR END; 01863000
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 01864000
|
|
LSTT[LSTS~LSTS+1] ~ LST; 01865000
|
|
LTYP ~ 77; 01866000
|
|
END; 01867000
|
|
IF LSTS+3 > LSTMAX THEN BEGIN FLAG(127); GO TO ERROR END; 01868000
|
|
LSTT[LSTS~LSTS+1] ~ SIZ&DOUBTYPE[TYPC]; 01869000
|
|
LSTT[LSTS~LSTS+1] ~ CUR; 01870000
|
|
LSTT[LSTS~LSTS+1] ~ CUD; 01871000
|
|
GO TO COMM; 01872000
|
|
END; 01873000
|
|
% SINGLE PRECISION 01874000
|
|
SPP: 01875000
|
|
IF LTYP = 77 THEN 01876000
|
|
BEGIN 01877000
|
|
LST ~ CUR; 01878000
|
|
LTYP ~ CTYP; 01879000
|
|
RPT ~ SIZ; 01880000
|
|
GO TO COMM; 01881000
|
|
END; 01882000
|
|
IF LTYP = CTYP THEN 01883000
|
|
IF REAL(BOOLEAN(CUR) EQV BOOLEAN(LST)) = REAL(NOT FALSE) THEN 01883100
|
|
BEGIN 01884000
|
|
RPT ~ RPT + SIZ; 01885000
|
|
GO TO COMM; 01886000
|
|
END; 01887000
|
|
IF LSTS+2 > LSTMAX THEN BEGIN FLAG(127); GO TO ERROR END; 01888000
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 01889000
|
|
LSTT[LSTS~LSTS+1] ~ LST; 01890000
|
|
RPT ~ SIZ; 01891000
|
|
LST ~ CUR; LTYP ~ CTYP; 01892000
|
|
GO TO COMM; 01893000
|
|
END; 01894000
|
|
% TYP ! COMMA - CHECK FOR * 01895000
|
|
IF TYP ! STAR THEN BEGIN FLAG(125); GO TO ERROR END; 01896000
|
|
IF CTYP ! INTYPE THEN BEGIN FLAG(113); GO TO ERROR END; 01897000
|
|
IF SIZ ! 0 OR SIZ ~ CUR { 0 THEN 01898000
|
|
BEGIN FLAG(64); GO TO ERROR END; 01899000
|
|
SCAN; GO TO S; 01900000
|
|
END; 01912000
|
|
% TYP ! NUM AT LABEL S 01913000
|
|
IF SIZ = 0 THEN SIZ ~ 1; 01913050
|
|
IF NAME = "T " OR NAME = "F " THEN 01913100
|
|
BEGIN 01913200
|
|
CUR ~ REAL(NAME = "T "); 01913300
|
|
CTYP ~ LOGTYPE; 01913400
|
|
SCAN; GO TO SPP; 01913500
|
|
END; 01913600
|
|
IF TYP ! LPAREN THEN BEGIN FLAG(64); GO TO ERROR END; 01914000
|
|
01915000
|
|
CPP: % COMPLEX 01916000
|
|
IF LTYP ! 77 THEN 01917000
|
|
BEGIN 01918000
|
|
IF LSTS+2 > LSTMAX THEN 01919000
|
|
BEGIN FLAG(127); GO TO ERROR END; 01920000
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 01921000
|
|
LSTT[LSTS~LSTS+1] ~ LST; 01922000
|
|
LTYP ~ 77; 01923000
|
|
END; 01924000
|
|
SCAN; 01925000
|
|
IF TYP = PLUS OR (SGN~TYP=MINUS) THEN SCAN; 01926000
|
|
IF TYP ! NUM OR NUMTYPE > REALTYPE THEN 01927000
|
|
BEGIN FLAG(64); GO TO ERROR END; 01928000
|
|
IF LSTS+2 > LSTMAX THEN BEGIN FLAG(127); GO TO ERROR END;01929000
|
|
LSTT[LSTS~LSTS+1] ~ SIZ&COMPTYPE[TYPC]; 01930000
|
|
LSTT[LSTS~LSTS+1] ~ IF SGN THEN -FNEXT ELSE FNEXT; 01931000
|
|
SCAN; 01932000
|
|
IF TYP ! COMMA THEN BEGIN FLAG(114); GO TO ERROR END; 01933000
|
|
SCAN; 01934000
|
|
IF TYP = PLUS OR (SGN ~ TYP = MINUS) THEN SCAN; 01935000
|
|
IF TYP ! NUM OR NUMTYPE > REALTYPE THEN 01936000
|
|
BEGIN FLAG(64); GO TO ERROR END; 01937000
|
|
LSTT[LSTS~LSTS+1]~IF SGN THEN - FNEXT ELSE FNEXT ; 01938000
|
|
SCAN; 01939000
|
|
IF TYP ! RPAREN THEN BEGIN FLAG(108); GO TO ERROR END; 01940000
|
|
SCAN; 01941000
|
|
COMM: 01942000
|
|
SIZ ~ 0; 01942100
|
|
IF TYP = COMMA THEN BEGIN SCAN; GO TO S; END; 01943000
|
|
IF TYP = SLASH THEN GO TO XIT; 01944000
|
|
FLAG(126); 01945000
|
|
ERROR: 01946000
|
|
LSTS ~ 0; 01947000
|
|
WHILE TYP ! COMMA AND TYP ! SLASH AND TYP ! SEMI DO SCAN;01948000
|
|
IF TYP = COMMA THEN GO TO COMM; 01949000
|
|
XIT: 01950000
|
|
IF LTYP ! 77 THEN 01951000
|
|
BEGIN 01952000
|
|
IF LSTS+2>LSTMAX THEN BEGIN FLAG(127); LSTS~0 END;01953000
|
|
LSTT[LSTS~LSTS+1] ~ RPT<YP[TYPC]; 01954000
|
|
LSTT[LSTS~LSTS+1] ~ LST; 01955000
|
|
END; 01956000
|
|
IF LSTS+1 > LSTMAX THEN BEGIN FLAG(127); LSTS~0 END; 01957000
|
|
LSTT[LSTS~LSTS+1]~0; 01958000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DATA","SET ",FALSE); 01959000
|
|
DATATOG ~ FALSE; FILETOG ~ FALSE; 01960000
|
|
END DATASET; 01961000
|
|
ALPHA PROCEDURE CHECKDO; 01962000
|
|
BEGIN ALPHA X, T; INTEGER N; 01963000
|
|
STREAM PROCEDURE CKDO(A, ID, LAB); 01964000
|
|
BEGIN 01965000
|
|
SI ~ A; SI ~ SI+4; DI ~ LAB; DI ~ DI+2; 01966000
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE JUMP OUT); 01967000
|
|
DI ~ ID; DI ~ DI+2; 01968000
|
|
6(IF SC = ALPHA THEN DS ~ CHR ELSE JUMP OUT); 01969000
|
|
END CKDO; 01970000
|
|
IF (XTA~HOLDID[0]).[12:24] = "FILE" THEN FLOG(37) ELSE 01971000
|
|
IF XTA.[12:12] ! "DO" THEN FLOG(17) ELSE 01971010
|
|
BEGIN 01972000
|
|
X ~ T ~ BLANKS; 01973000
|
|
CKDO(HOLDID[0], X, T); 01974000
|
|
IF X=BLANKS THEN FLOG(105); 01974500
|
|
IF T ~ LBLSHFT(T) < 0 OR T = BLANKS THEN FLOG(17) ELSE 01975000
|
|
TEST ~ NEED(T, LABELID); 01976000
|
|
DOLAB[DT]~ T; 01977000
|
|
IF XREF THEN ENTERX(T,0&LABELID[TOCLASS]); 01977100
|
|
IF GET(TEST) < 0 THEN % TEST FOR PREV DEFINITION 01978000
|
|
BEGIN 01979000
|
|
XTA ~ GET(TEST+1); 01980000
|
|
FLAG(15); 01981000
|
|
DT ~ DT-1; 01982000
|
|
END; 01983000
|
|
IF N ~ SEARCH(X) = 0 THEN 01984000
|
|
N~ENTER(TIPE[IF T~X.[12:6]!"0" THEN T ELSE 12],X); 01985000
|
|
CHECKDO ~ GETSPACE(N); 01987000
|
|
IF XREF THEN ENTERX(X,1&GET(N) [15:15:9]); 01987100
|
|
IF (X~GET(N)).SUBCLASS > REALTYPE OR X.CLASS ! VARID THEN 01988000
|
|
BEGIN XTA ~ GET(N+1); FLAG(84) END; 01989000
|
|
IF GET(FX1).CLASS = UNKNOWN THEN PUT(FX1+1, "......"); 01990000
|
|
END; 01991000
|
|
END CHECKDO; 01992000
|
|
PROCEDURE FIXB(N); VALUE N; REAL N; 01993000
|
|
BEGIN 01994000
|
|
REAL T, U, FROM; 01995000
|
|
LABEL XIT, BIGJ; 01996000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FI","XB ",TRUE); 01996010
|
|
IF N } 10000 THEN FROM ~ N-10000 ELSE 01997000
|
|
IF FROM ~ - BRANCHES[N] > 4095 THEN 01998000
|
|
BEGIN 01999000
|
|
ADJUST; 02000000
|
|
T ~ PRGDESCBLDR(2, FROM.LINK, (ADR+1).[36:10], NSEG); 02001000
|
|
GO TO XIT; 02002000
|
|
END; 02003000
|
|
T ~ ADR; ADR ~ FROM - 1; 02004000
|
|
IF (T + 1).[46:2] = 0 THEN GO TO BIGJ; 02005000
|
|
IF (U ~ T - 2 - ADR) { 1023 THEN EMITL(U) ELSE 02006000
|
|
BEGIN ADR ~ T; ADJUST; T ~ ADR; ADR ~ FROM - 1; 02007000
|
|
BIGJ: EMITL((T+1).[36:10] - (ADR+2).[36:10]); 02008000
|
|
EMITO(IF BOOLEAN(GIT(FROM + 1).[36:1]) THEN GFW ELSE GFC); 02009000
|
|
END; 02010000
|
|
ADR ~ T; 02011000
|
|
XIT: 02012000
|
|
IF N < 10000 THEN BEGIN 02013000
|
|
BRANCHES[N] ~ BRANCHX; 02014000
|
|
BRANCHX ~ N; 02015000
|
|
END; 02016000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FI","XB ",FALSE); 02016010
|
|
END FIXB; 02017000
|
|
PROCEDURE DATIME; % PRODUCES HEADING LINE FOR LISTING. 02018000
|
|
BEGIN 02019000
|
|
INTEGER D; 02020000
|
|
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 ",02021000
|
|
"XVI.0" 02022000
|
|
,".",A2,".",A8,"DAY, ",2(A2,"/"),A2,",",A2,":",A2," H."/); 02022500
|
|
WRITALIST(T,7, 02024000
|
|
"16" %999-02025000
|
|
,TIME(6),(D~TIME(5)).[12:12],D.[24:12],D.[36:12], 02026000
|
|
D~(D~RTI DIV 216000) MOD 10+D DIV 10|64, 02027000
|
|
D~(D~RTI DIV 3600 MOD 60) MOD 10+D DIV 10|64,0) ; 02028000
|
|
IF D~LINE.TYPE=10 OR D=12 OR D=13 THEN 02029000
|
|
BEGIN 02030000
|
|
LOCK(LINE); LINE.AREAS~0; LINE.AREASIZE~0 ; 02031000
|
|
IF D ! 12 THEN LINE.TYPE~12; SPACE(LINE,2) ; 02032000
|
|
END; 02033000
|
|
FIRSTCALL~FALSE ; 02034000
|
|
END DATIME; 02039000
|
|
PROCEDURE PRINTCARD; 02040000
|
|
BEGIN 02041000
|
|
STREAM PROCEDURE MOVE(P, Q, A); VALUE A, Q; 02042000
|
|
BEGIN 02043000
|
|
SI ~ Q; DI ~ P; 02044000
|
|
DS ~ CHR; 02045000
|
|
DI ~ DI+11; SI ~ LOC A; 02046000
|
|
DS ~ 4 DEC; 02047000
|
|
END MOVE; 02048000
|
|
STREAM PROCEDURE MOVEBACK(P); 02049000
|
|
BEGIN DI ~ P; DS ~ LIT "]" END; 02050000
|
|
MOVE (CRD[9],BUFL,(ADR+1).[36:10]); 02051000
|
|
IF FIRSTCALL THEN DATIME; 02052000
|
|
IF UNPRINTED THEN WRITAROW(15,CRD) ; 02053000
|
|
MOVEBACK(CRD[9]); 02054000
|
|
IF SEQERRORS THEN WRITAROW(14,ERRORBUFF) ; 02054010
|
|
END PRINTCARD; 02055000
|
|
BOOLEAN PROCEDURE READACARD; FORWARD; 02056000
|
|
PROCEDURE FILEOPTION; FORWARD; 02058000
|
|
BOOLEAN PROCEDURE LABELR; 02059000
|
|
BEGIN 02060000
|
|
LABEL XIT, LOOP; 02061000
|
|
02062000
|
|
BOOLEAN STREAM PROCEDURE CHECK(CD, LAB); 02063000
|
|
BEGIN LABEL XIT; LOCAL T1; 02064000
|
|
SI ~ CD; 02065000
|
|
IF SC ! " " THEN IF SC < "0" THEN 02066000
|
|
BEGIN DI ~ LAB; DI ~ DI + 2; 02067000
|
|
DS ~ 6 CHR; GO TO XIT; 02068000
|
|
END; 02069000
|
|
DI ~LOC T1; DS ~ 6 LIT " "; DI ~ DI - 6; 02070000
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE SI ~ SI+1); 02071000
|
|
DI ~LAB; DI ~DI + 2; SI ~ LOC T1; 02072000
|
|
5(IF SC ! "0" THEN JUMP OUT; SI ~ SI + 1); 02073000
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE JUMP OUT); 02074000
|
|
TALLY ~ 1; 02075000
|
|
XIT: CHECK ~ TALLY; 02076000
|
|
END CHECK; 02077000
|
|
BOOLEAN STREAM PROCEDURE BLANKCARD(CD); 02077100
|
|
BEGIN LABEL XIT; 02077200
|
|
SI ~ CD; 02077300
|
|
2(36( IF SC ! " " THEN JUMP OUT 2 TO XIT ELSE SI ~ SI + 1)); 02077400
|
|
TALLY ~ 1; 02077600
|
|
XIT: BLANKCARD ~ TALLY; 02077700
|
|
END BLANKCARD; 02077800
|
|
LOOP: 02078000
|
|
LABL ~ BLANKS; 02079000
|
|
IF LABELR ~ NOT READACARD THEN GO TO XIT; 02080000
|
|
IF NOT CHECK(CRD[0],LABL) THEN 02081000
|
|
BEGIN IF LABL = "FILE " THEN FILEOPTION ELSE 02082000
|
|
BEGIN IF LISTOG THEN PRINTCARD; 02083000
|
|
IF (XTA ~ LABL).[12:6] ! "C" THEN FLAG(135); 02083100
|
|
END; 02083200
|
|
GO TO LOOP; 02084000
|
|
END; 02085000
|
|
IF ENDSEGTOG THEN IF BLANKCARD(CRD) THEN 02086000
|
|
BEGIN IF LISTOG THEN PRINTCARD; GO TO LOOP END ELSE 02086500
|
|
BEGIN SEGMENTSTART; 02087000
|
|
IF LISTOG THEN PRINTCARD; 02088000
|
|
IF LABL = BLANKS THEN GO TO XIT; 02089000
|
|
END ELSE 02090000
|
|
BEGIN 00091000
|
|
IF LABL = BLANKS THEN 02092000
|
|
BEGIN IF LISTOG THEN PRINTCARD; GO TO XIT END; 02093000
|
|
IF ADR > 0 THEN ADJUST; 02094000
|
|
IF LISTOG THEN PRINTCARD; 02095000
|
|
END; 02096000
|
|
XIT: 02116000
|
|
END LABELR; 02117000
|
|
PROCEDURE FILEOPTION; 02118000
|
|
BEGIN COMMENT THIS PROCEDURE PROCESSES THE OPTIONAL FILE CONTROL CARD. 02119000
|
|
THE WORD "FILE" APPEARS IN COL. 1 - 4. COL. 5 AND 6 ARE BLANK. 02120000
|
|
#1 BELOW IS REQUIRED, OTHER ENTRIES MAY BE AS SPARSE AS DESIRED. 02121000
|
|
1. FILE <NUM> = <MULTI-FILE ID> / <FILE ID> 02122000
|
|
OR 02123000
|
|
FILE <NUM> = <FILE ID> 02124000
|
|
THE FOLLOWING "/" IS A DOCUMMENTARY OR. 02125000
|
|
THE SEQUENCE OF RESERVED WORDS MUST BE MAINTAINED. 02126000
|
|
2. UNIT=PRINT/READER/PUNCH/DISK/TAPE7/TAPE9/REMOTE (UNIT DESIGNATE). 02127000
|
|
3. UNLABELED (FOR UNLABELED TAPES) 02128000
|
|
4. ALPHA (FOR ALPHA RECORDING MODE) 02129000
|
|
5. BCL (IGNORED, FOR 3500 USE) 02130000
|
|
6. FIXED (IGNORED, FOR 3500 USE) 02131000
|
|
7. SAVE = <NUM> (SAVE FACTOR IN DAYS) 02132000
|
|
8. LOCK (LOCK FILE AT EOJ) 02133000
|
|
9. RANDOM/SERIAL/UPDATE (DISK USE) 02134000
|
|
10. AREA = <NUM> (DISK RECORDS/ROW) 02135000
|
|
11. BLOCKING = <NUM> (RECORD PER BLOCK) 02136000
|
|
12. RECORD = <NUM> (RECORD SIZE) 02137000
|
|
13. BUFFER = <NUM> (# OF BUFFERS) 02138000
|
|
14. WORKAREA (IGNORED, FOR 3500) ; 02139000
|
|
ALPHA P,KEEP; BOOLEAN TOG,CA,TS; LABEL XIT; 02140000
|
|
COMMENT INXFIL = INFC.ADINFO, MULTI FILE ID = FILEINFO[1,INXFIL], 02141000
|
|
FILE ID = FILEINFO[2,INXFIL], DISK RECORDS = FILEINFO[3,INXFIL],02142000
|
|
FILEINFO[0,INXFIL] FROM RIGHT TO LEFT IS; 02143000
|
|
INTEGER % NAME USE BITS 02144000
|
|
BUFF, % # BUFFERS 6 02145000
|
|
RECORD, % RECORD SIZE 12 02146000
|
|
BLOCK, % BLOCK SIZE 12 02147000
|
|
SAVER, % SAVE FACTOR 12 02148000
|
|
SPIN, % REW & LOCK @ EOJ 2 02149000
|
|
ALPH; % RECORDING MODE 1 02150000
|
|
PROCEDURE FETCH; 02151000
|
|
BEGIN SCAN; XTA ~ SYMBOL; 02152000
|
|
IF NEXT=COMMA OR NEXT=MINUS THEN 02153000
|
|
BEGIN SCAN; XTA ~ SYMBOL; 02154000
|
|
IF NEXT ! ID THEN FLOG(37); 02155000
|
|
END; 02156000
|
|
END FETCH; 02157000
|
|
INTEGER STREAM PROCEDURE MAKEINT(XTA); 02158000
|
|
BEGIN LABEL LOOP; LOCAL T; 02159000
|
|
SI ~ XTA; SI ~ SI + 2; 02160000
|
|
LOOP: IF SC } "0" THEN 02161000
|
|
BEGIN TALLY ~ TALLY + 1; SI ~ SI + 1; GO TO LOOP END; 02162000
|
|
T ~ TALLY; SI ~ XTA; SI ~ SI + 2; DI ~ LOC MAKEINT; DS ~ T OCT; 02163000
|
|
END MAKEINT; 02164000
|
|
INTEGER PROCEDURE REPLACEMENT; 02165000
|
|
BEGIN 02166000
|
|
FETCH; IF NEXT = EQUAL THEN 02167000
|
|
BEGIN FETCH; IF XTA.[12:6] { 11 THEN BEGIN REPLACEMENT ~ MAKEINT(XTA); 02168000
|
|
FETCH END ELSE FLOG(37); 02169000
|
|
END ELSE FLOG(37); 02170000
|
|
END REPLACEMENT; 02171000
|
|
INTEGER STREAM PROCEDURE SRI7(S); 02172000
|
|
BEGIN SI ~ S; DI ~ LOC SRI7; 02173000
|
|
SI ~ SI + 2; DI ~ DI + 1; DS ~ 7 CHR; 02174000
|
|
END SRI7; 02175000
|
|
COMMENT * * * * * START OF CODE * * * * ; 02176000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEO","PTION ", TRUE); 02176010
|
|
ERRORTOG ~ FALSE; 02176100
|
|
IF LISTOG THEN PRINTCARD; 02177000
|
|
XTA ~ "FILE "; 02178000
|
|
IF NSEG ! 0 THEN FLAG(60); 02179000
|
|
IF INXFIL ~ INXFIL + 1 > MAXOPFILES THEN 02180000
|
|
BEGIN FLAG(59); GO TO XIT END; 02181000
|
|
BUMPPRT; 02182000
|
|
MAXFILES ~ MAXFILES + 1; 02183000
|
|
FILETOG ~ TRUE; SCN ~ 1; % START SCAN MAINTAINENCE 02184000
|
|
FETCH; IF XTA.[12:6] > 11 THEN BEGIN FLAG(37); GO TO XIT END; 02185000
|
|
IF XTA.[12:6] = 0 THEN BEGIN FLOG(037); GO TO XIT END; 02185010
|
|
IF T ~ GLOBALSEARCH(P ~ 0&"."[12:42:6]&XTA[18:12:30]) ! 0 THEN FLAG(20) 02186000
|
|
ELSE BEGIN P~ GLOBALENTER(-0&PRTS[TOADDR]&FILEID[TOCLASS],P); 02187000
|
|
PUT(P+2,GET(P+2)&INXFIL[TOADINFO]); 02188000
|
|
IF XREF THEN ENTERX(XTA &1[TOCE],1&FILEID[TOCLASS]); 02188100
|
|
END; 02189000
|
|
INFC ~ GET(P + 2); 02190000
|
|
FETCH; IF NEXT = EQUAL THEN FETCH ELSE 02191000
|
|
BEGIN FLOG(37); GO TO XIT; END; 02192000
|
|
IF NEXT = SEMI THEN 02193000
|
|
BEGIN FLAG(37); GO TO XIT END 02194000
|
|
ELSE FILEINFO[2,INXFIL] ~ SRI7(ACCUM[1]); 02195000
|
|
FETCH; IF NEXT = SLASH THEN 02196000
|
|
BEGIN FILEINFO[1,INXFIL] ~ FILEINFO[2,INXFIL]; % MULTI FILE ID 02197000
|
|
FETCH; 02198000
|
|
IF NEXT = SEMI THEN BEGIN FLAG(37); GO TO XIT; END 02199000
|
|
ELSE FILEINFO[2,INXFIL] ~ SRI7(ACCUM[1]); 02200000
|
|
FETCH; 02201000
|
|
END; 02202000
|
|
IF XTA = "UNIT " THEN 02203000
|
|
BEGIN 02204000
|
|
FETCH; 02205000
|
|
IF NEXT = EQUAL THEN FETCH ELSE FLOG(37); 02206000
|
|
INFC.LINK ~ KEEP ~ (IF TOG ~ XTA = "PRINT " 02207000
|
|
OR XTA = "PRINTE" THEN 18 ELSE 02208000
|
|
IF CA ~ TOG ~ XTA = "READ " 02209000
|
|
OR XTA = "READER" THEN 2 ELSE 02210000
|
|
IF CA ~ TOG ~ XTA = "PUNCH " THEN 0 ELSE 02211000
|
|
IF TOG ~ XTA = "DISK " THEN 12 ELSE 02212000
|
|
IF TOG ~ XTA = "TAPE " 02213000
|
|
OR XTA = "TAPE7 " THEN 2 ELSE 02214000
|
|
IF TOG ~ XTA = "PAPER " THEN 8 ELSE 02214100
|
|
IF CA ~TOG~XTA= "REMOTE" THEN 19 ELSE 02214500
|
|
IF TOG ~ XTA = "TAPE9 " THEN 2 ELSE 2); 02215000
|
|
IF TOG THEN FETCH ELSE FLOG(37) 02216000
|
|
END ELSE INFC.LINK~KEEP~IF DCINPUT THEN 12 ELSE 2 ; 02217000
|
|
TS~KEEP=12 ; 02217050
|
|
IF XTA="BACKUP" THEN 02217100
|
|
BEGIN 02217150
|
|
FETCH; IF KEEP!0 AND KEEP!18 THEN FLAG(37); 02217200
|
|
IF TOG~XTA="DISK " THEN KEEP~IF KEEP=0 THEN 22 ELSE 15 02217250
|
|
ELSE IF TOG~XTA="TAPE " THEN KEEP~IF KEEP=0 THEN 20 ELSE 6 02217275
|
|
ELSE BEGIN 02217300
|
|
TOG~XTA="ALTERN"; KEEP~IF KEEP=0 THEN 25 ELSE 16 ; 02217350
|
|
END; 02217400
|
|
IF TOG THEN FETCH; INFC.LINK~KEEP ; 02217450
|
|
END ; 02217500
|
|
IF XTA = "UNLABE" THEN % FOR UNLABELED TAPES 02218000
|
|
BEGIN IF KEEP = 2 THEN INFC .LINK ~ 9; FETCH; END; 02219000
|
|
IF XTA = "ALPHA " THEN FETCH ELSE IF KEEP = 2 THEN ALPH ~ 1; % MODE 02220000
|
|
IF XTA = "BCL " THEN FETCH; % FOR B3500 02221000
|
|
IF XTA = "FIXED " THEN FETCH; % FOR B3500 02222000
|
|
IF XTA = "SAVE " THEN SAVER ~ REPLACEMENT; 02223000
|
|
IF XTA = "LOCK " THEN BEGIN SPIN ~ 2; FETCH END; % REW & LOCK AT EOJ 02224000
|
|
IF TOG ~ XTA = "RANDOM" THEN T ~ 10 ELSE 02225000
|
|
IF TOG ~ XTA = "SERIAL" THEN T ~ 12 ELSE 02226000
|
|
IF TOG ~ XTA = "UPDATE" THEN T ~ 13; 02227000
|
|
IF TOG THEN 02228000
|
|
BEGIN IF KEEP=12 THEN INFC.LINK~T ELSE FLAG(37); FETCH END; 02229000
|
|
IF XTA="AREA " THEN 02230000
|
|
BEGIN 02230010
|
|
IF KEEP!12 THEN FLAG(37); 02230020
|
|
T~REPLACEMENT; 02230030
|
|
IF XTA="EU " THEN 02230040
|
|
IF I~REPLACEMENT>19 THEN FLAG(37) 02230045
|
|
ELSE T.EUNF~I+1;% 0 MEANS EU NOT SPECIFIED 02230050
|
|
IF XTA="SPEED " THEN 02230060
|
|
BEGIN 02230070
|
|
FETCH; 02230080
|
|
IF NEXT=EQUAL THEN 02230090
|
|
BEGIN 02230100
|
|
FETCH; 02230110
|
|
IF XTA.[12:6]{SLOWV THEN 02230115
|
|
IF I~MAKEINT(XTA)>SLOWV THEN FLAG(37) 02230120
|
|
ELSE 02230125
|
|
ELSE IF XTA="FAST " THEN T.SPDF~FASTV 02230130
|
|
ELSE IF XTA="SLOW " THEN T.SPDF~SLOWV 02230140
|
|
ELSE FLOG(37); 02230150
|
|
FETCH; 02230160
|
|
END 02230170
|
|
ELSE FLOG(37); 02230180
|
|
END; 02230190
|
|
IF XTA="SENSIT" THEN 02230200
|
|
BEGIN 02230210
|
|
T.SENSE~1; 02230220
|
|
FETCH; 02230230
|
|
END; 02230240
|
|
FILEINFO[3,INXFIL]~T; 02230300
|
|
END; 02230400
|
|
IF XTA = "BLOCKI" THEN BLOCK ~ REPLACEMENT & 1[2:47:1]; 02231000
|
|
RECORD ~ IF XTA="RECORD" THEN REPLACEMENT ELSE IF CA THEN 10 ELSE IF TS 02232000
|
|
AND NOT (BOOLEAN(BLOCK.[2:1])) THEN 10 & 1[2:47:1] ELSE 17; 02232010
|
|
BUFF ~ IF XTA = "BUFFER" THEN REPLACEMENT ELSE 2; 02233000
|
|
IF XTA = "WORKAR" THEN FETCH; % IGNORED, FOR 3500 02234000
|
|
IF BUFF<1 OR BUFF>32 THEN BEGIN XTA~"BUFFER"; FLAG(152) END ; 02236000
|
|
IF RECORD<1 THEN BEGIN XTA~"RECORD"; FLAG(152)END ; 02236010
|
|
IF SAVER>999 THEN BEGIN XTA~"SAVE "; FLAG(152) END ; 02236020
|
|
IF T~INFC.LINK=10 OR T=12 OR T=13 THEN %%% ARE IN DISK FILE 02237000
|
|
BEGIN 02237010
|
|
IF BOOLEAN(RECORD.[2:1])THEN BLOCK ~ 300 02237012
|
|
ELSE 02237015
|
|
IF BLOCK~BLOCK|RECORD>1890 OR RECORD>1023 THEN 02237020
|
|
BEGIN XTA~"BK/REC"; FLAG(152) END 02237021
|
|
END 02237030
|
|
ELSE IF BLOCK~BLOCK|RECORD>1023 OR RECORD>1023 THEN IF KEEP ! 2 THEN 02237040
|
|
BEGIN XTA~"BK/REC"; FLAG(58 ) END ELSE BEGIN RECORD~257; BLOCK~0END;02237050
|
|
FILEINFO[0,INXFIL] ~ 0&BUFF[42:42:6]&RECORD[30:36:12]&BLOCK[18:36:12] 02238000
|
|
&SAVER[6:36:12]&SPIN[4:46:2]&ALPH[3:47:1]; 02239000
|
|
XIT: IF NEXT ! SEMI THEN 02240000
|
|
BEGIN FLOG(37); DO SCAN UNTIL NEXT = SEMI; END; 02241000
|
|
FILETOG ~ FALSE; % END SCAN MAINTAINENCE 02242000
|
|
PUT(P+2,INFC); 02243000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEO","PTION ",FALSE) ; 02243100
|
|
END FILEOPTION; 02244000
|
|
PROCEDURE DOLOPT; 02245000
|
|
BEGIN 02245300
|
|
REAL STREAM PROCEDURE SCAN(BUF,ID); VALUE BUF; 02245600
|
|
BEGIN LABEL LP,LA,LE,XIT; 02245900
|
|
SI ~ BUF; DI ~ ID; DS ~ 2 LIT "0"; 02246200
|
|
LP: IF SC = " " THEN BEGIN SI~SI+1; GO TO LP; END; 02246500
|
|
IF SC = "," THEN BEGIN SI~SI+1; GO TO LP; END; 02246800
|
|
IF SC = "+" THEN BEGIN DS~CHR; GO TO XIT; END; 02246900
|
|
IF SC = "-" THEN BEGIN DS~CHR; GO TO XIT; END; 02247000
|
|
IF SC < "A" THEN BEGIN DI ~ ID; DS ~ 8 LIT "+0000001"; 02247100
|
|
LE: SI~SI+1; 02247200
|
|
GO TO XIT; 02247400
|
|
END; 02247700
|
|
IF SC="|" THEN GO TO LE;% THIS IS > "A" 02247800
|
|
IF SC="!" THEN GO TO LE;% THIS IS > "A" 02247900
|
|
6(IF SC = ALPHA THEN DS ~ CHR ELSE JUMP OUT); 02248000
|
|
LA: IF SC = ALPHA THEN BEGIN SI~SI+1; GO TO LA; END; 02248300
|
|
XIT: 02248600
|
|
SCAN ~ SI; 02248900
|
|
END SCAN; 02249200
|
|
REAL STREAM PROCEDURE GETVOID(BUF,VOIDSEQ,FR); VALUE BUF,FR; 02249500
|
|
BEGIN LABEL L,LC,LD,LE,XIT; LOCAL TA; 02249800
|
|
SI ~ BUF; DI~VOIDSEQ; DS~8LIT" "; DI~VOIDSEQ; 02250100
|
|
L: IF SC = " " THEN BEGIN SI~SI+1; GO TO L; END; 02250400
|
|
TA ~ SI; 02250500
|
|
IF SC = """ THEN 02250700
|
|
BEGIN 9(SI~SI+1; 02251000
|
|
IF SC = """ THEN BEGIN SI~SI+1; JUMP OUT TO LC; END 02251300
|
|
ELSE TALLY ~ TALLY + 1); 02251600
|
|
TALLY~TALLY+63; SI~TA; SI~SI+1; GO TO LE; 02251900
|
|
END; 02252200
|
|
IF SC < "0" THEN GO TO LD; 02252500
|
|
DS:=8LIT"0"; %115-02252600
|
|
8(SI:=SI+1; DI:=DI-1; TALLY:=TALLY+1; %115-02252800
|
|
IF SC LSS "0" THEN JUMP OUT); %115-02252850
|
|
LC: SI ~ TA; 02252900
|
|
LE: TA~TALLY; DS~TA CHR; GETVOID~SI; GO TO XIT; 02253100
|
|
LD: GETVOID~SI; 02253400
|
|
FR(DS~8LIT"9"); 02253700
|
|
XIT: 02254000
|
|
END GETVOID; 02254300
|
|
REAL STREAM PROCEDURE SEQNUM(BUF,VLU); VALUE BUF; 02254600
|
|
BEGIN LABEL L,LA,LC; LOCAL TA,TB; 02254900
|
|
SI ~ BUF; 02255200
|
|
L: IF SC = " " THEN BEGIN SI~SI+1; GO TO L; END; 02255500
|
|
IF SC = "," THEN BEGIN SI~SI+1; GO TO L; END; 02255800
|
|
TA ~ SI; 02256100
|
|
IF SC = "+" THEN 02256400
|
|
BEGIN SI~SI+1; 02256700
|
|
LA: IF SC = " " THEN BEGIN SI~SI+1; GO TO LA;END; 02257400
|
|
TB ~ SI; 02257300
|
|
IF SC < "0" THEN BEGIN SI~TA; GO TO LC; END; 02257600
|
|
DI~TB;TA~DI; 02257900
|
|
END; 02258200
|
|
8(IF SC < "0" THEN JUMP OUT TO LC; 02258500
|
|
TALLY~TALLY+1; SI~SI+1;); 02258800
|
|
LC: TB ~ TALLY; SEQNUM ~ SI; 02259100
|
|
SI ~ TA; DI ~ VLU; DS ~ TB OCT; 02259400
|
|
END SEQNUM; 02259700
|
|
REAL STREAM PROCEDURE MKABS(S); 02260000
|
|
BEGIN SI ~ S; SI~SI+1; MKABS ~ SI; 02260300
|
|
DI ~ S; 9(DI ~ DI + 8); DS ~ LIT "["; 02260600
|
|
END MKABS; 02260900
|
|
STREAM PROCEDURE MOVEW(P,Q); VALUE Q; 02260925
|
|
BEGIN SI~P; DI ~ Q; DS~CHR; END ; 02260950
|
|
REAL BUF,ID; 02261200
|
|
BOOLEAN VAL, SAVELISTOG; %511-02261500
|
|
LABEL LP,SET,RESET; 02261800
|
|
FORMAT WARN(X18,A6," ILLEGAL CONSTRUCT ON DOLLAR CARD XXXX",X39, 02262100
|
|
"WARNING"); 02262400
|
|
DEFINE GETID = BEGIN ID~ " "; BUF ~ SCAN(BUF,ID) END#; 02262700
|
|
SAVELISTOG ~ LISTOG; %511- 02262775
|
|
MOVEW(CRD[9],BUFL); 02262800
|
|
BUF ~ MKABS(CRD[0]); 02263000
|
|
GETID; 02263300
|
|
IF ID = "VOID " THEN 02263600
|
|
BEGIN BUF ~ GETVOID(BUF, VOIDSEQ,0); VOIDTOG ~ TRUE 02263900
|
|
END ELSE 02264200
|
|
IF ID = "VOIDT " THEN 02264500
|
|
BEGIN BUF ~ GETVOID(BUF, VOIDTSEQ,0); VOIDTTOG ~ TRUE 02264800
|
|
END ELSE 02265100
|
|
BEGIN 02265400
|
|
TAPETOG.[47:1] ~ LASTMODE = 2; %517-02265700
|
|
IF ID = "SET " OR ID = "+ " THEN 02267200
|
|
SET: BEGIN GETID; VAL~ TRUE END 02267500
|
|
ELSE 02267800
|
|
IF ID = "RESET " OR ID = "- " THEN 02268100
|
|
RESET: BEGIN GETID; VAL ~ FALSE END 02268400
|
|
ELSE 02268700
|
|
BEGIN 02269000
|
|
TSSMESTOG ~ VAL; TSSEDITOG ~ VAL; CHECKTOG ~ VAL; %501-02269300
|
|
SINGLETOG~NOT VAL; HOLTOG~VAL; %501-02269600
|
|
LISTOG~VAL; CODETOG ~ DEBUGTOG ~ VAL; NEWTPTOG ~ VAL; 02269900
|
|
PRTOG~VAL; DOLIST~VAL; LIBTAPE~VAL; SEGPTOG~VAL; %501-02270200
|
|
LISTPTOG ~ VAL; FREEFTOG ~ XREF ~ VAL ; 02270500
|
|
VAL ~ TRUE; 02270800
|
|
END; 02271100
|
|
LP: IF ID > 0 THEN 02271400
|
|
BEGIN 02271700
|
|
IF ID = "TRACE " THEN 02272000
|
|
BEGIN PRTOG~VAL; LISTOG~VAL; CODETOG~DEBUGTOG~VAL; 02272300
|
|
END ELSE 02272400
|
|
IF ID = "CARD " THEN 02272500
|
|
BEGIN TAPETOG.[47:1]~NOT VAL; LASTMODE~2-REAL(VAL) END ELSE 02272510
|
|
IF ID = "TAPE " THEN 02272550
|
|
BEGIN TAPETOG.[47:1] ~ VAL; LASTMODE ~ REAL(VAL)+1; END ELSE02272560
|
|
IF ID = "NOSEQ " THEN SEQTOG ~ FALSE ELSE 02272600
|
|
IF ID = "SET " OR ID = "+ " THEN GO TO SET ELSE 02272900
|
|
IF ID = "RESET " OR ID = "- " THEN GO TO RESET ELSE 02273200
|
|
IF ID = "ONSITE" AND NOT REMFIXED THEN REMOTETOG ~ FALSE ELSE 02273500
|
|
IF ID = "REMOTE" AND NOT REMFIXED THEN REMOTETOG ~ VAL ELSE 02273800
|
|
IF ID = "FREEFO" THEN FREEFTOG ~ VAL ELSE 02274100
|
|
IF ID = "SINGLE" OR ID = "SGL " THEN 02274400
|
|
BEGIN SINGLETOG ~ VAL; LISTOG ~ TRUE; END ELSE 02274700
|
|
IF ID = "NEW " OR ID = "NEWTAP" THEN 02275000
|
|
BEGIN LIBTAPE~VAL; NEWTPTOG~VAL; NTAPTOG~TRUE; %501-02275100
|
|
IF ID = "NEW " THEN %501-02275120
|
|
BEGIN %501-02275140
|
|
GETID; %501-02275160
|
|
IF ID ! "TAPE " THEN %501-02275180
|
|
GO TO LP; %501-02275200
|
|
END; %501-02275220
|
|
END ELSE %501-02275240
|
|
IF ID = "LIST " THEN LISTOG ~ VAL ELSE 02275300
|
|
IF ID = "SEQXEQ" AND NOT SEGSWFIXED THEN SEGSW ~ VAL ELSE 02275600
|
|
IF ID = "PRT " THEN PRTOG ~ VAL ELSE 02275900
|
|
IF ID = "DEBUGN" THEN 02276200
|
|
BEGIN LISTOG~VAL; CODETOG~VAL; PRTOG ~ VAL END ELSE 02276500
|
|
IF ID = "TIME " THEN TIMETOG ~ VAL ELSE 02276800
|
|
IF ID = "ERRMES" THEN TSSMESTOG ~ VAL ELSE 02277100
|
|
IF ID = "TSSEDI" THEN TSSEDITOG ~ VAL ELSE 02277400
|
|
IF ID = "LISTLI" THEN LISTLIBTOG ~ VAL ELSE 02277700
|
|
IF(ID = "SEGMEN" OR ID = "SEG ") AND VAL THEN 02278000
|
|
BEGIN ADR~ADR+1; SEGOVF; END ELSE 02278300
|
|
IF ID = "PAGE " AND VAL THEN WRITE(LINE[PAGE]) ELSE 02278600
|
|
IF ID = "VOID " THEN 02278900
|
|
BEGIN VOIDTOG ~ VAL; 02279200
|
|
IF VAL THEN BUF ~ GETVOID(BUF,VOIDSEQ,1); 02279300
|
|
END ELSE 02279500
|
|
IF ID = "VOIDT " THEN 02279800
|
|
BEGIN VOIDTTOG ~ VAL; 02280100
|
|
IF VAL THEN BUF ~ GETVOID(BUF,VOIDTSEQ,1); 02280300
|
|
END ELSE 02280400
|
|
IF ID = "LIMIT " THEN 02280700
|
|
BEGIN LIMIT ~ IF VAL THEN 0 ELSE @60; 02281000
|
|
BUF ~ SEQNUM(BUF,LIMIT); 02281300
|
|
IF LIMIT LEQ ERRORCT THEN GO TO POSTWRAPUP; 02281600
|
|
END ELSE 02282500
|
|
IF ID = "XREF " THEN 02282800
|
|
BEGIN 02282850
|
|
PXREF ~ TRUE; XREF ~ VAL; 02282900
|
|
END ELSE 02282950
|
|
IF ID = "SEQ " THEN 02283100
|
|
BEGIN SEQTOG ~ VAL; 02283200
|
|
IF VAL THEN 02283300
|
|
BEGIN SEQBASE ~ SEQINCR ~ 0; 02283400
|
|
BUF ~ SEQNUM(BUF,SEQBASE); 02283700
|
|
BUF ~ SEQNUM(BUF,SEQINCR); 02284000
|
|
IF SEQINCR { 0 THEN SEQINCR ~ 1000; 02284600
|
|
END END ELSE 02284900
|
|
IF ID = "LISTDO" THEN DOLIST ~ VAL ELSE 02285200
|
|
IF ID = "HOL " THEN HOLTOG ~ VAL ELSE 02285500
|
|
IF ID = "CHECK " THEN CHECKTOG ~ VAL ELSE 02285800
|
|
IF ID = "NEWPAG" THEN SEGPTOG ~ VAL ELSE %501-02286100
|
|
IF ID = "LISTP " THEN LISTPTOG ~ VAL ELSE 02286400
|
|
BEGIN IF FIRSTCALL THEN DATIME; 02286700
|
|
IF UNPRINTED THEN BEGIN PRINTCARD; UNPRINTED~FALSE END; 02287000
|
|
IF SINGLETOG THEN WRITE(LINE,WARN,ID) 02287300
|
|
ELSE WRITE(RITE,WARN,ID); 02287600
|
|
END 02287900
|
|
; 02288200
|
|
GETID; 02288500
|
|
GO TO LP; 02288800
|
|
END; 02289100
|
|
END; 02289400
|
|
IF DOLIST OR LISTOG OR SAVELISTOG THEN %511-02289450
|
|
IF UNPRINTED THEN PRINTCARD; %517-02289500
|
|
UNPRINTED ~ TRUE; 02289600
|
|
END DOLOPT; 02289700
|
|
STREAM PROCEDURE NEWSEQ(A,B); VALUE B; 02317000
|
|
BEGIN 02318000
|
|
SI ~ LOC B; DI ~ A; DS ~ 8 DEC; 02319000
|
|
END NEWSEQ; 02320000
|
|
INTEGER STREAM PROCEDURE SEQCHK(T,C); 02321000
|
|
BEGIN 02322000
|
|
SI ~ T; DI ~ C; 02323000
|
|
IF 8 SC < DC THEN TALLY ~ 4 ELSE 02324000
|
|
BEGIN 02325000
|
|
SI ~ SI - 8; DI ~ DI - 8; 02326000
|
|
IF 8 SC =DC THEN TALLY ~ 2 02327000
|
|
ELSE TALLY ~ 3; 02328000
|
|
END; 02329000
|
|
SEQCHK ~ TALLY; 02330000
|
|
END SEQCHK; 02331000
|
|
BOOLEAN PROCEDURE READACARD; 02332000
|
|
BEGIN 02333000
|
|
DEFINE FLAGI(FLAGI1) = BEGIN FLAG(FLAGI1); GO TO E4A;END #; 02333050
|
|
REAL STREAM PROCEDURE SCANINC(BUF,ID,RESULT,N,M); 02333100
|
|
VALUE BUF,M,N; 02333120
|
|
BEGIN 02333140
|
|
LOCAL TA; 02333160
|
|
LABEL LP,LQ,XIT; 02333180
|
|
DI := RESULT; DI := DI +7; 02333200
|
|
SI := BUF; 02333210
|
|
LP: IF SC = " " THEN BEGIN SI := SI + 1; GO TO LP; END; 02333220
|
|
IF SC = ALPHA THEN ELSE BEGIN DS:=LIT "1"; DI:=ID; DS:=2LIT"0";02333240
|
|
DS := CHR; DS := 5LIT" ";GO TO XIT; END; 02333260
|
|
IF SC LSS "0" THEN DS:=LIT "2" ELSE DS:=LIT "3"; %400-02333270
|
|
N (DI:=ID; DS:=8 LIT "0 "; DI:=DI-7; %400-02333280
|
|
7(IF SC=ALPHA THEN DS~CHR ELSE JUMP OUT 2 TO XIT); 02333300
|
|
JUMP OUT TO XIT); 02333320
|
|
M ( 8 ( IF SC LSS "0" THEN JUMP OUT 2 TO LQ; %400-02333360
|
|
IF SC GTR "9" THEN JUMP OUT 2 TO LQ; %400-02333370
|
|
SI:=SI+1; TALLY:=TALLY+1)); %400-02333380
|
|
LQ: TA := TALLY; 02333400
|
|
SI := SI - TA; 02333420
|
|
DI := ID; 02333440
|
|
DS := TA OCT; 02333460
|
|
XIT: SCANINC := SI; 02333500
|
|
END SCANINC; 02333520
|
|
REAL STREAM PROCEDURE MKABS(S); 02333540
|
|
BEGIN SI := S; SI := SI + 1; MKABS := SI; END; 02333550
|
|
STREAM PROCEDURE MOVE(P, Q); VALUE Q; 02334000
|
|
BEGIN SI ~ P; DI ~ Q; DS ~ CHR; 02335000
|
|
DI ~ P; DS ~ LIT "]"; 02336000
|
|
END MOVE; 02337000
|
|
STREAM PROCEDURE MOVEC(C,B); VALUE B; 02337100
|
|
BEGIN SI~B; DI~C; DS~CHR; END; 02337200
|
|
BOOLEAN STREAM PROCEDURE GETCOL1(BUF); 02338000
|
|
BEGIN 02339000
|
|
SI ~ BUF; IF SC = "$" THEN TALLY ~ 1; 02340000
|
|
GETCOL1 ~ TALLY; 02341000
|
|
END; 02342000
|
|
STREAM PROCEDURE TSSEDITS(C,P); BEGIN SI~C; DI~P; DS~10WDS; SI~C ; 02342010
|
|
IF SC="C" THEN BEGIN DI~P; DI~DI+1; DS~LIT"-" END ELSE 02342020
|
|
IF SC!"$" THEN BEGIN SI~SI+5; IF SC!" " THEN IF SC!"0" THEN BEGIN DI~P;02342030
|
|
DS~6LIT"- " END END END OF TSSEDITS ; 02342040
|
|
STREAM PROCEDURE MOVEW(F,T,B,R); VALUE B, R; 02343000
|
|
BEGIN 02344000
|
|
LABEL XIT; 02345000
|
|
SI ~ F; DI ~ T; 02346000
|
|
B( 02347000
|
|
2(40( IF SC = ALPHA THEN DS ~ CHR ELSE 02348000
|
|
IF SC = " " THEN DS ~ CHR ELSE 02349000
|
|
IF SC = "%" THEN BEGIN DS ~ LIT "("; SI ~ SI+1 END ELSE 02350000
|
|
IF SC = "[" THEN BEGIN DS ~ LIT ")"; SI ~ SI+1 END ELSE 02351000
|
|
IF SC = "#" THEN BEGIN DS ~ LIT "="; SI ~ SI+1 END ELSE 02352000
|
|
IF SC = "&" THEN BEGIN DS ~ LIT "+"; SI ~ SI+1 END ELSE 02353000
|
|
IF SC = "@" THEN BEGIN DS ~ LIT """; SI ~ SI+1 END ELSE 02354000
|
|
IF SC = ":" THEN BEGIN DS ~ LIT """; SI ~ SI+1 END ELSE 02354100
|
|
IF SC = "<" THEN BEGIN DS ~ LIT "+"; SI ~ SI+1 END ELSE 02355000
|
|
IF SC = ">" THEN BEGIN DS ~ LIT "="; SI ~ SI+1 END ELSE 02356000
|
|
DS ~ CHR )); JUMP OUT TO XIT); 02357000
|
|
DS ~ 10 WDS; 02358000
|
|
XIT: 02359000
|
|
SI~LOC R; SI~SI+7; DI~DI+1 ; 02360000
|
|
DS~CHR ; 02361000
|
|
END MOVEW; 02362000
|
|
ALPHA STREAM PROCEDURE DCMOVEW(F,T,B,FIL,R); VALUE B,FIL,R; 02362010
|
|
BEGIN LOCAL C; LABEL L1,L2,L3,L4 ; 02362020
|
|
SI~F; DI~T; 2(SI~SI+36; DS~36LIT" "); C~SI; DS~8CHR ; 02362030
|
|
SI~LOC R; SI~SI+6; DS~2CHR; DI~C; DS~8LIT"]";TALLY~33;SI~F; 02362033
|
|
IF SC = " " THEN %%% IT MIGHT BE A FILES CARD. 02362034
|
|
BEGIN SI~SI+1; IF SC="F" THEN 02362035
|
|
BEGIN DI~LOC FIL; DI~DI+2; IF 5SC=DC THEN 02362036
|
|
BEGIN DI~F; SI~LOC FIL; SI~SI+2; DS~6CHR ; GO TO L1; END 02362037
|
|
ELSE SI~F END ELSE SI~F END 02362038
|
|
ELSE IF SC = "F" THEN BEGIN DI~LOC FIL;DI~DI+2;IF 6SC=DC THEN GO L1 02362040
|
|
ELSE SI~F;END 02362041
|
|
ELSE IF SC="-" THEN 02362042
|
|
BEGIN %%% IT IS A CONTINUATION CARD. 02362044
|
|
SI~SI+1; DI~T; DS~6LIT" *" ; 02362050
|
|
5(IF SC=" " THEN SI~SI+1 ELSE JUMP OUT); GO TO L2 ; 02362060
|
|
END 02362063
|
|
ELSE IF SC="C" THEN 02362066
|
|
BEGIN %%% IT MIGHT BE A COMMENT CARD. 02362070
|
|
SI~SI+1; IF SC="-" THEN GO TO L1 ELSE SI~F ; 02362080
|
|
END ; 02362090
|
|
IF SC!"$" THEN %%% IT IS NOT A COMMENT CARD, NOR IS IT A $ CARD, 02362100
|
|
BEGIN %%% NOR A CONTINUATION CARD, NOR A FILES CARD. 02362110
|
|
2(33(IF SC=" " THEN SI~SI+1 ELSE JUMP OUT 2 TO L3)); L3: DI~T;02362120
|
|
5(IF SC=" " THEN SI~SI+1 ELSE IF SC}"0" THEN IF SC{"9" 02362130
|
|
THEN DS~CHR ELSE JUMP OUT ELSE JUMP OUT) ; 02362140
|
|
DI~T; DI~DI+6; IF SC=" " THEN SI~SI+1 ; 02362150
|
|
END 02362160
|
|
ELSE 02362170
|
|
BEGIN 02362180
|
|
L1: SI~F; DI~T; TALLY~36 ; 02362190
|
|
END ; 02362200
|
|
L2: C~TALLY ; 02362210
|
|
B(2(C(IF SC>">" THEN DS~CHR ELSE IF SC<"[" THEN DS~CHR ELSE 02362220
|
|
IF SC="%" THEN BEGIN DS~LIT"("; SI~SI+1 END ELSE 02362230
|
|
IF SC="#" THEN BEGIN DS~LIT"="; SI~SI+1 END ELSE 02362235
|
|
IF SC="&" THEN BEGIN DS~LIT"+"; SI~SI+1 END ELSE 02362240
|
|
IF SC="@" THEN BEGIN DS~LIT"""; SI~SI+1 END ELSE 02362245
|
|
IF SC=":" THEN BEGIN DS~LIT"""; SI~SI+1 END ELSE 02362250
|
|
IF SC="<" THEN BEGIN DS~LIT"+"; SI~SI+1 END ELSE 02362255
|
|
IF SC=">" THEN BEGIN DS~LIT"="; SI~SI+1 END ELSE 02362260
|
|
IF SC="[" THEN BEGIN DS~LIT")"; SI~SI+1 END ELSE 02362265
|
|
IF SC="]" THEN JUMP OUT 3 TO L4 ELSE DS~CHR));JUMP OUT TO L4);02362270
|
|
2(C(IF SC="]" THEN JUMP OUT 2 TO L4 ELSE DS~CHR)) ; 02362275
|
|
L4: DI~LOC DCMOVEW; DS~8LIT"00 "; DI~DI-6 ; 02362280
|
|
6(IF SC="]" THEN JUMP OUT ELSE DS~CHR) ; 02362285
|
|
END OF DCMOVEW ; 02362290
|
|
STREAM PROCEDURE SEQERR(BUFF, NEW, OLD); 02362300
|
|
BEGIN 02362400
|
|
DI ~ BUFF; DS ~ 18 LIT "SEQUENCE ERROR "; 02362450
|
|
SI ~ NEW; DS ~ LIT"""; 02362500
|
|
DS ~ 8 CHR; DS ~ LIT """; 02362550
|
|
DS ~ 3 LIT " < "; 02362600
|
|
SI ~ OLD; DS ~ LIT """; 02362650
|
|
DS ~ 8 CHR; DS ~ LIT """; 02362700
|
|
DS ~ 59 LIT " "; 02362750
|
|
DS ~ 8 LIT "X"; DS ~ 4 LIT " "; 02362800
|
|
END SEQERR; 02362850
|
|
STREAM PROCEDURE DCMOVE(E,C,A,N); VALUE A,N; 02362855
|
|
BEGIN SI~C; DI~E; DS~10WDS; DS~4CHR; SI~LOC A; DS~4DEC; 02362860
|
|
N(DS~8LIT" PATCH"); END; 02362865
|
|
REAL BUF,ID; 02362900
|
|
BOOLEAN NOWRI; LABEL ENDPB, E4B; 02362902
|
|
LABEL LIBADD, ENDPA, E4A, E4, STRTA; 02362950
|
|
LABEL E1,E2,E3,STRT,ENDP,XIT; 02363000
|
|
UNPRINTED~TRUE; 02363100
|
|
GO TO STRT; 02364000
|
|
LIBADD: 02364100
|
|
XTA := BLANKS; 02364130
|
|
IF INSERTDEPTH = -1 THEN SAVECARD ~ NEXTCARD; 02364160
|
|
MOVE (CRD[9],BUFL); 02364240
|
|
02364280
|
|
IF (INSERTDEPTH ~ INSERTDEPTH + 1) GTR INSERTMAX THEN 02364300
|
|
FLAG(158); 02364320
|
|
NEWTPTOG ~ FALSE; 02364330
|
|
INSERTINX ~ -1; 02364340
|
|
INSERTCOP ~ 0; 02364350
|
|
BLANKIT(SSNM[5],1,0); 02364360
|
|
BUF ~ SCANINC(BUF,INSERTMID,RESULT,1,0); 02364380
|
|
IF RESULT = 1 AND INSERTMID = "+ "THEN 02364381
|
|
BEGIN BUF~SCANINC(BUF,ID,RESULT,1,0); 02364382
|
|
IF ID = "COPY " THEN INSERTCOP ~ 1 02364383
|
|
ELSE FLAG(155); 02364384
|
|
BUF~SCANINC(BUF,INSERTMID,RESULT,1,0); 02364385
|
|
END; 02364386
|
|
IF RESULT NEQ 2 THEN FLAGI (155); 02364400
|
|
BUF := SCANINC(BUF,ID,RESULT,0,1); %107-02364420
|
|
IF RESULT = 1 THEN IF ID = "/ " THEN 02364440
|
|
BEGIN BUF := SCANINC(BUF,INSERTFID,RESULT,1,0); 02364460
|
|
IF RESULT NEQ 2 THEN FLAGI(155); 02364480
|
|
BUF := SCANINC(BUF,ID,RESULT,0,1); 02364500
|
|
END ELSE INSERTFID := TIME(-1) ELSE INSERTFID := TIME(-1); 02364520
|
|
IF RESULT = 3 THEN 02364540
|
|
BEGIN NEWSEQ(SSNM[5],ID); 02364560
|
|
BUF := SCANINC(BUF,ID,RESULT,0,1); 02364580
|
|
IF RESULT NEQ 1 THEN FLAGI(156); 02364600
|
|
IF ID = "] " THEN NEWSEQ (INSERTSEQ,99999999) %400-02364605
|
|
ELSE BEGIN %400-02364610
|
|
BUF ~ SCANINC(BUF,ID,RESULT,0,1); 02364620
|
|
IF RESULT NEQ 3 THEN FLAGI(157); 02364640
|
|
NEWSEQ (INSERTSEQ,ID); 02364660
|
|
END %400-02364670
|
|
END ELSE IF ID = "] " THEN NEWSEQ(INSERTSEQ,999999999) 02364680
|
|
ELSE FLAGI(157); 02364700
|
|
IF INSERTDEPTH > 0 THEN CLOSE (LF,RELEASE); 02364720
|
|
FILL LF WITH INSERTMID,INSERTFID; 02364740
|
|
DO BEGIN 02364760
|
|
READ (LF[INSERTINX ~ INSERTINX+1],10,DB[*])[E4]; 02364780
|
|
END UNTIL SEQCHK(SSNM[5],DB[9]) NEQ 3; 02364800
|
|
NEWTPTOG ~ BOOLEAN(INSERTCOP); 02364810
|
|
IF NOT NEWTPTOG THEN 02364811
|
|
BEGIN 02364815
|
|
IF SEQTOG THEN 02364820
|
|
BEGIN NEWSEQ(CRD[9],SEQBASE); MOVE(CRD[9],BUFL); 02364830
|
|
SEQBASE~SEQBASE+SEQINCR; 02364840
|
|
END; MOVEC(CRD[9],BUFL); 02364850
|
|
IF LIBTAPE AND(INSERTDEPTH = 0 ) THEN WRITE(NEWTAPE,10,CRD[*]); 02364860
|
|
END; %511- 02364885
|
|
IF LISTOG OR DOLIST THEN PRINTCARD; %511- 02364890
|
|
NEXTCARD:=7; 02364900
|
|
GO TO STRT; 02364910
|
|
E1: IF NEXTCARD=1 THEN IF TAPETOG THEN 02365000
|
|
BEGIN 02366000
|
|
NEXTCARD~5; READ(TP,10,TB[*])[E2]; GO TO STRT ; 02367000
|
|
END 02368000
|
|
ELSE 02369000
|
|
BEGIN 02370000
|
|
NEXTCARD:=6; 02371000
|
|
IF GETCOL1(CRD[0]) THEN BEGIN BUF := MKABS(CRD[0]); 02371002
|
|
BUF:=SCANINC(BUF,ID,RESULT,1,0); IF ID NEQ INCLUDE 02371004
|
|
THEN BLANKIT(CRD,9,1); END; 02371006
|
|
GO TO ENDP ; 02371010
|
|
END ; 02371020
|
|
NEXTCARD ~ 5; GO TO ENDP; 02372000
|
|
E2: IF NEXTCARD = 5 THEN 02372010
|
|
BEGIN 02372020
|
|
NEXTCARD:=6; 02372030
|
|
IF GETCOL1(CRD[0]) THEN BEGIN BUF := MKABS(CRD[0]); 02372040
|
|
BUF:=SCANINC(BUF,ID,RESULT,1,0); IF ID NEQ INCLUDE 02372050
|
|
THEN BLANKIT(CRD,9,1); END; 02372060
|
|
END 02373000
|
|
ELSE IF NEXTCARD!2 THEN NEXTCARD~1 ELSE 02373010
|
|
BEGIN 02373020
|
|
NEXTCARD~1; TAPETOG~BOOLEAN(2); READ(CR,10,CB[*])[E1] ; 02373030
|
|
END ; 02373040
|
|
IF VOIDTTOG THEN IF SEQCHK(CRD[0],VOIDTSEQ) < 4 %114-02373045
|
|
THEN VOIDTTOG~FALSE %114-02373100
|
|
ELSE BEGIN VOIDTTOG~FALSE; GO TO STRT; END; %114-02373200
|
|
GO TO ENDP ; 02374000
|
|
E4B: NOWRI ~TRUE; 02374050
|
|
IF SEQTOG THEN NEWSEQ(CRD[9],SEQBASE); 02374053
|
|
IF NEWTPTOG THEN IF TSSEDITOG THEN 02374055
|
|
BEGIN TSSEDITS(CRD,PRINTBUFF); WRITE(NEWTAPE,10,PRINTBUFF[*]); 02374060
|
|
END ELSE WRITE(NEWTAPE,10,CRD[*]); 02374065
|
|
E4: CLOSE (LF,RELEASE); 02374100
|
|
NEWTPTOG~ SAVETOG; 02374110
|
|
IF (INSERTDEPTH := INSERTDEPTH - 1) = -1 THEN 02374150
|
|
BEGIN NEXTCARD ~ SAVECARD; GO TO ENDPA; END 02374200
|
|
ELSE NEWTPTOG ~ BOOLEAN(INSERTCOP); 02374300
|
|
FILL LF WITH INSERTMID,INSERTFID; 02374450
|
|
READ(LF[INSERTINX := INSERTINX + 1],10,DB[*])[E4]; 02374470
|
|
IF SEQCHK(INSERTSEQ,DB[9]) = 4 THEN GO TO E4; 02374500
|
|
GO TO ENDP; 02374520
|
|
E4A: 02374560
|
|
NEWTPTOG~SAVETOG; 02374580
|
|
IF (INSERTDEPTH ~ INSERTDEPTH-1) = -1 THEN NEXTCARD~SAVECARD 02374600
|
|
ELSE NEWTPTOG ~ BOOLEAN(INSERTCOP); 02374680
|
|
STRT: 02375000
|
|
STRTA: 02375600
|
|
IF NEXTCARD=6 THEN GO XIT ; 02376000
|
|
CARDCOUNT ~ CARDCOUNT+1; 02377000
|
|
IF NEXTCARD = 1 THEN 02378000
|
|
BEGIN % CARD ONLY 02379000
|
|
IF(NOT DCINPUT OR TSSEDITOG)AND NOT FREEFTOG 02380000
|
|
THEN MOVEW(CB,CRD,HOLTOG,IF DCINPUT THEN "D" ELSE "R") 02380100
|
|
ELSE IF SSNM[4]~DCMOVEW(CB,CRD,HOLTOG,"FILE ",IF FREEFTOG 02380125
|
|
THEN " R" ELSE " D") ! " " THEN 02380150
|
|
BEGIN XTA~SSNM[4] ; 02380175
|
|
MOVESEQ(SSNM[4],LASTSEQ); MOVESEQ(LASTSEQ,CRD[9]) ; 02380200
|
|
IF LISTOG THEN 02380210
|
|
BEGIN IF FIRSTCALL THEN DATIME ; 02380220
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],0); 02380230
|
|
WRITAROW(11,PRINTBUFF); UNPRINTED~FALSE ; 02380240
|
|
END ; 02380250
|
|
FLOG(149); MOVESEQ(LASTSEQ,SSNM[4]) ; 02380300
|
|
END ; 02380400
|
|
IF GETCOL1(CRD[0]) THEN 02381000
|
|
BEGIN 02382000
|
|
BUF := MKABS(CRD[0]); 02382200
|
|
BUF := SCANINC(BUF,ID,RESULT,1,0); 02382300
|
|
IF ID NEQ INCLUDE THEN 02382400
|
|
BEGIN 02382500
|
|
DOLOPT; 02383000
|
|
IF REAL(TAPETOG)=3 THEN READ(TP) ; 02383010
|
|
READ(CR,10,CB[*])[E1]; 02384000
|
|
IF NOT TAPETOG THEN GO TO STRT; 02385000
|
|
READ(TP,10,TB[*])[E2]; 02386000
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 02387000
|
|
GO TO STRT; 02388000
|
|
END; 02389000
|
|
END; 02389100
|
|
IF LISTPTOG THEN 02389200
|
|
BEGIN IF FIRSTCALL THEN DATIME; 02389300
|
|
IF SEQTOG THEN NEWSEQ(CRD[9],SEQBASE); 02389400
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],1); 02389500
|
|
WRITAROW (12,PRINTBUFF); UNPRINTED ~ FALSE; 02389600
|
|
END; 02389700
|
|
READ(CR,10,CB[*])[E1]; 02390000
|
|
GO TO ENDP; 02391000
|
|
END; 02392000
|
|
IF NEXTCARD = 5 THEN 02393000
|
|
BEGIN 02394000
|
|
MOVEW(TB,CRD,HOLTOG,"T") ; 02395000
|
|
READ(TP, 10, TB[*])[E2]; 02396000
|
|
IF VOIDTTOG THEN IF SEQCHK(CRD[9],VOIDTSEQ) < 4 THEN 02396100
|
|
VOIDTTOG ~ FALSE ELSE GO TO STRT; 02396200
|
|
GO TO ENDP; 02397000
|
|
END; 02398000
|
|
IF NEXTCARD { 3 THEN 02399000
|
|
BEGIN % CARD OVER TAPE 02400000
|
|
IF(NOT DCINPUT OR TSSEDITOG)AND NOT FREEFTOG 02401000
|
|
THEN MOVEW(CB,CRD,HOLTOG,IF DCINPUT THEN "D" ELSE "R") 02401100
|
|
ELSE IF SSNM[4]~DCMOVEW(CB,CRD,HOLTOG,"FILE ",IF FREEFTOG 02401125
|
|
THEN " R" ELSE " D") ! " " THEN 02401150
|
|
BEGIN XTA~SSNM[4] ; 02401175
|
|
MOVESEQ(SSNM[4],LASTSEQ); MOVESEQ(LASTSEQ,CRD[9] ); 02401200
|
|
IF LISTOG THEN 02401210
|
|
BEGIN IF FIRSTCALL THEN DATIME; 02401220
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],0); 02401230
|
|
WRITAROW(11,PRINTBUFF); UNPRINTED~FALSE ; 02401240
|
|
END; 02401250
|
|
FLOG(149); MOVESEQ(LASTSEQ,SSNM[4]) ; 02401300
|
|
END; 02401400
|
|
IF NEXTCARD =2 THEN READ(TP,10,TB[*])[E2]; 02402000
|
|
IF GETCOL1(CRD) THEN 02403000
|
|
BEGIN 02404000
|
|
BUF ~ MKABS(CRD[0]); 02404200
|
|
BUF ~ SCANINC(BUF,ID,RESULT,1,0); 02404300
|
|
IF ID NEQ INCLUDE THEN 02404400
|
|
BEGIN 02404500
|
|
DOLOPT; 02405000
|
|
READ(CR,10,CB[*])[E3]; 02406000
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 02407000
|
|
GO TO STRT; 02408000
|
|
E3: NEXTCARD~5; GO TO STRT; 02408500
|
|
END; 02409000
|
|
END; 02409100
|
|
IF LISTPTOG THEN 02409200
|
|
BEGIN IF FIRSTCALL THEN DATIME; 02409300
|
|
IF SEQTOG THEN NEWSEQ(CRD[9],SEQBASE); 02409400
|
|
DCMOVE(PRINTBUFF,CRD,(ADR+1).[36:10],1); 02409500
|
|
WRITAROW (12,PRINTBUFF); UNPRINTED ~ FALSE; 02409600
|
|
END; 02409700
|
|
READ(CR,10,CB[*])[E1]; 02410000
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 02411000
|
|
GO TO ENDP; 02412000
|
|
END; 02413000
|
|
% TAPE BEFORE CARD 02414000
|
|
IF NEXTCARD = 7 THEN 02414100
|
|
BEGIN 02414150
|
|
IF(NOT DCINPUT OR TSSEDITOG)AND NOT FREEFTOG 02414175
|
|
THEN MOVEW(DB,CRD,HOLTOG,"L") ELSE IF XTA~DCMOVEW(DB,CRD, 02414200
|
|
HOLTOG,"FILE ",IF FREEFTOG THEN " R" ELSE " D") 02414225
|
|
! " " THEN FLOG(149); 02414250
|
|
IF GETCOL1(CRD[0]) THEN 02414260
|
|
BEGIN 02414270
|
|
BUF ~ MKABS(CRD[0]); 02414280
|
|
BUF ~ SCANINC(BUF,ID,RESULT,1,0); 02414290
|
|
IF ID = INCLUDE THEN GO TO LIBADD; 02414300
|
|
END; 02414310
|
|
READ(LF[INSERTINX~INSERTINX+1],10,DB[*])[E4B]; 02414370
|
|
IF SEQCHK(INSERTSEQ,DB[9]) = 4 THEN GO TO E4B; 02414380
|
|
IF GETCOL1(CRD[0]) THEN BEGIN DOLOPT; GO TO STRT; END; 02414382
|
|
GO TO ENDP; 02414390
|
|
END; 02414400
|
|
MOVEW(TB,CRD,HOLTOG,"T") ; 02415000
|
|
READ(TP,10,TB[*])[E2]; 02416000
|
|
IF VOIDTTOG THEN IF SEQCHK(CRD[9],VOIDTSEQ) < 4 THEN 02416100
|
|
VOIDTTOG~FALSE ELSE BEGIN NEXTCARD~SEQCHK(TB[9],CB[9]); %114-02416200
|
|
GO TO STRT; END; %114-02416300
|
|
NEXTCARD ~ SEQCHK(TB[9], CB[9]); 02417000
|
|
ENDP: 02418000
|
|
IF NEXTCARD NEQ 7 THEN 02418100
|
|
IF VOIDTOG THEN IF SEQCHK(CRD[9],VOIDSEQ) < 4 THEN 02419000
|
|
VOIDTOG ~ FALSE ELSE GO TO STRT; 02419050
|
|
IF GETCOL1(CRD[0]) THEN 02419100
|
|
BEGIN 02419150
|
|
BUF ~ MKABS(CRD[0]); 02419200
|
|
BUF ~ SCANINC(BUF,ID,RESULT,1,0); 02419250
|
|
IF ID = INCLUDE THEN GO TO LIBADD ELSE GO TO STRT; 02419300
|
|
END; 02419325
|
|
SEQERRORS ~ FALSE; 02420000
|
|
IF NEXTCARD = 7 THEN 02420010
|
|
BEGIN MOVESEQ(LASTSEQ,CRD[9]); GO TO ENDPA; END; 02420011
|
|
IF CHECKTOG AND SEQERRCT=0 THEN SEQERRCT~1 ; 02420015
|
|
IF CHECKTOG THEN IF SEQCHK(LASTSEQ,CRD[9])=3 THEN 02420020
|
|
BEGIN 02420030
|
|
SEQERR(ERRORBUFF,CRD[9],LASTSEQ) ; 02420040
|
|
MOVESEQ(LASTSEQ,CRD[9]) ; 02420050
|
|
IF SEQTOG THEN 02420053
|
|
BEGIN NEWSEQ(CRD[9],SEQBASE);SEQBASE~SEQBASE+SEQINCR END;02420057
|
|
MOVESEQ(LINKLIST,CRD[9]); 02420060
|
|
MOVE(CRD[9],BUFL) ; 02420070
|
|
SEQERRCT~SEQERRCT+1 ; 02420080
|
|
SEQERRORS~TRUE ; 02420090
|
|
IF NOT LISTOG THEN PRINTCARD ; 02420100
|
|
END 02420110
|
|
ELSE MOVESEQ(LASTSEQ,CRD[9]) ELSE MOVESEQ(LASTSEQ,CRD[9]) ; 02420120
|
|
02420150
|
|
02420200
|
|
02420250
|
|
02420300
|
|
02420350
|
|
02420400
|
|
02420450
|
|
02420500
|
|
ENDPA: 02420550
|
|
IF SEQTOG THEN 02421000
|
|
BEGIN 02422000
|
|
NEWSEQ(CRD[9],SEQBASE); 02423000
|
|
SEQBASE ~ SEQBASE + SEQINCR; 02424000
|
|
END; 02425000
|
|
IF NOWRI THEN GO TO ENDPB; 02425100
|
|
IF NEWTPTOG THEN IF TSSEDITOG THEN BEGIN TSSEDITS(CRD,PRINTBUFF) ; 02426000
|
|
WRITE(NEWTAPE,10,PRINTBUFF[*]) END ELSE WRITE(NEWTAPE,10,CRD[*]) ; 02426005
|
|
ENDPB: 02426008
|
|
IF NOT SEQERRORS THEN 02426010
|
|
BEGIN 02426020
|
|
MOVESEQ(LINKLIST,CRD[9]) ; 02426030
|
|
MOVE(CRD[9],BUFL) ; 02426040
|
|
END ; 02427000
|
|
NCR ~ INITIALNCR; 02428000
|
|
READACARD ~ TRUE; 02429000
|
|
XIT: 02430000
|
|
SEGSWFIXED ~ TRUE ; 02431000
|
|
REMFIXED~TRUE ; 02431005
|
|
IF TSSEDITOG THEN WARNED~TRUE ; 02431100
|
|
IF LISTOG AND FIRSTCALL THEN DATIME; 02432000
|
|
IF SEGSW THEN %%% ENTER SEQ# AND ADR TO LINESEG ARRAY. 02432100
|
|
BEGIN IF LASTADDR!ADR THEN BEGIN NOLIN~NOLIN+1; LASTADDR~ADR END;02432200
|
|
LINESEG[NOLIN.IR,NOLIN.IC]~0 & D2B(LASTSEQ)[10:20:28] & (ADR+3) 02432300
|
|
[38:36:10] ; 02432400
|
|
END ; 02432500
|
|
END READACARD; 02433000
|
|
INTEGER STREAM PROCEDURE CONVERT(NUB,SIZE,P,CHAR); VALUE P; 02434000
|
|
BEGIN 02435000
|
|
LOCAL T; 02436000
|
|
SI ~ P; 02437000
|
|
8(IF SC < "0" THEN JUMP OUT; 02438000
|
|
SI ~ SI + 1; TALLY ~ TALLY + 1); 02439000
|
|
CONVERT ~ SI; 02440000
|
|
DI ~ CHAR; DS ~ 7 LIT "0"; DS ~ CHR; 02441000
|
|
T ~ TALLY; 02442000
|
|
SI ~ P; DI ~ NUB; DS ~ T OCT; 02443000
|
|
DI ~ SIZE ; SI ~ LOC T; DS ~ WDS; 02444000
|
|
END CONVERT; 02445000
|
|
PROCEDURE SCAN; 02446000
|
|
BEGIN 02447000
|
|
BOOLEAN STREAM PROCEDURE ADVANCE(NCR, ACR, CHAR, NCRV, ACRV); 02448000
|
|
VALUE NCRV, ACRV, CHAR; 02449000
|
|
BEGIN LABEL LOOP; 02450000
|
|
LABEL DIG, ALPH, BK1, BK2, SPEC; 02451000
|
|
DI ~ ACRV; 02452000
|
|
SI ~ CHAR; SI ~ SI+8; 02453000
|
|
IF SC ! " " THEN 02454000
|
|
IF SC } "0" THEN BEGIN SI ~ NCRV; GO TO BK1 END ELSE 02455000
|
|
BEGIN SI ~ NCRV; GO TO BK2 END; 02456000
|
|
SI ~ NCRV; 02457000
|
|
LOOP: 02458000
|
|
IF SC = " " THEN BEGIN SI~SI+1; GO TO LOOP END; 02459000
|
|
IF SC } "0" THEN 02460000
|
|
BEGIN 02461000
|
|
DIG: DS ~ CHR; 02462000
|
|
BK1: IF SC = " " THEN BEGIN SI ~ SI+1; GO TO BK1 END; 02463000
|
|
IF SC } "0" THEN GO TO DIG; 02464000
|
|
GO TO SPEC; 02465000
|
|
END; 02466000
|
|
IF SC = ALPHA THEN 02467000
|
|
BEGIN 02468000
|
|
ALPH: DS ~ CHR; 02469000
|
|
BK2: IF SC = " " THEN BEGIN SI ~ SI+1; GO TO BK2 END; 02470000
|
|
IF SC = ALPHA THEN GO TO ALPH; 02471000
|
|
END; 02472000
|
|
SPEC: 02473000
|
|
ACRV ~ DI; 02474000
|
|
DS ~ 6 LIT " "; 02475000
|
|
IF SC = "]" THEN 02476000
|
|
BEGIN TALLY ~ 1; SI ~ LOC ACRV; 02477000
|
|
DI ~ ACR; DS ~ WDS; 02478000
|
|
DI ~ CHAR; DS ~ LIT ";"; 02479000
|
|
END ELSE 02480000
|
|
BEGIN DI ~ CHAR; DS ~ CHR; 02481000
|
|
ACRV ~ SI; SI ~ LOC ACRV; 02482000
|
|
DI ~ NCR; DS ~ WDS; 02483000
|
|
END; 02484000
|
|
ADVANCE ~ TALLY; 02485000
|
|
END ADVANCE; 02486000
|
|
BOOLEAN PROCEDURE CONTINUE; 02487000
|
|
BEGIN 02487200
|
|
LABEL LOOP; 02487400
|
|
BOOLEAN STREAM PROCEDURE CONTIN(CD); 02487600
|
|
BEGIN SI~CD; IF SC!"C" THEN IF SC!"$" THEN BEGIN SI~SI+5; IF SC!" " 02488000
|
|
THEN IF SC!"0" THEN BEGIN TALLY~1; CONTIN~TALLY END END END OF CONTIN ;02489000
|
|
BOOLEAN STREAM PROCEDURE COMNT(CD,T); VALUE T; 02489200
|
|
BEGIN LABEL L ; 02489400
|
|
SI ~ CD; IF SC = "C" THEN BEGIN T(SI~SI+1; IF SC="-" THEN TALLY~1 02489600
|
|
ELSE JUMP OUT TO L); TALLY~1; L: END; COMNT~TALLY ; 02490000
|
|
END COMNT; 02490200
|
|
BOOLEAN STREAM PROCEDURE DCCONTIN(CD); 02490400
|
|
BEGIN 02490500
|
|
SI ~ CD; IF SC = "-" THEN TALLY ~ 1; 02490600
|
|
DCCONTIN ~ TALLY; 02491000
|
|
END DCCONTIN; 02491200
|
|
LOOP: IF NOT(CONTINUE ~ 02491400
|
|
IF(DCINPUT AND NOT TSSEDITOG)OR FREEFTOG THEN 02491600
|
|
IF NEXTCARD < 4 THEN DCCONTIN(CB) 02491650
|
|
ELSE IF NEXTCARD = 7 THEN DCCONTIN(DB)ELSE CONTIN(TB) 02491700
|
|
ELSE IF NEXTCARD = 7 THEN CONTIN(DB) 02491800
|
|
ELSE IF NEXTCARD < 4 THEN CONTIN(DB) ELSE 02492000
|
|
CONTIN(TB)) THEN 02492200
|
|
IF(IF NEXTCARD < 4 THEN 02492400
|
|
COMNT(CB,(DCINPUT AND NOT TSSEDITOG) OR FREEFTOG) 02492450
|
|
ELSE IF NEXTCARD = 7 THEN 02492500
|
|
COMNT(CB,(DCINPUT AND NOT TSSEDITOG) OR FREEFTOG) 02492550
|
|
ELSE COMNT(TB,0) AND NEXTCARD ! 6) THEN 02492600
|
|
BEGIN 02493000
|
|
IF READACARD THEN IF LISTOG THEN PRINTCARD; 02493200
|
|
GO TO LOOP; 02493400
|
|
END; 02493600
|
|
END CONTINUE; 02494000
|
|
PROCEDURE SCANX(EOF1, EOF2, EOS1, EOS2, OK1, OK2); 02495000
|
|
VALUE EOF1, EOF2, EOS1, EOS2, OK1, OK2; 02496000
|
|
INTEGER EOF1, EOF2, EOS1, EOS2, OK1, OK2; 02497000
|
|
BEGIN LABEL LOOP, LOOP0 ; 02498000
|
|
LOOP0: 02498100
|
|
EXACCUM[1] ~ BLANKS; 02499000
|
|
ACR ~ ACR1; 02500000
|
|
LOOP: 02501000
|
|
IF ADVANCE(NCR, ACR, CHR1, NCR, ACR) THEN 02502000
|
|
IF CONTINUE THEN 02503000
|
|
% 02504000
|
|
IF READACARD THEN 02505000
|
|
BEGIN 02506000
|
|
IF LISTOG THEN PRINTCARD ; 02506010
|
|
IF ACR.[33:15]}EXACCUMSTOP THEN 02506020
|
|
BEGIN XTA~BLANKS; FLOG(175); GO LOOP0 END ; 02506030
|
|
GO LOOP ; 02506040
|
|
END 02506050
|
|
ELSE SCN ~ IF EXACCUM[1] = BLANKS THEN EOF1 ELSE EOF2 02507000
|
|
ELSE SCN ~ IF EXACCUM[1] = BLANKS THEN EOS1 ELSE EOS2 02508000
|
|
ELSE SCN ~ IF EXACCUM[1] = BLANKS THEN OK1 ELSE OK2; 02509000
|
|
END SCANX; 02510000
|
|
DEFINE CHAR = ACCUM[0]#; 02511000
|
|
DEFINE T=SYMBOL#; 02512000
|
|
INTEGER N; 02513000
|
|
BOOLEAN STREAM PROCEDURE CHECKEXP(NCR, NCRV, A); VALUE NCRV; 02514000
|
|
BEGIN 02515000
|
|
SI ~ NCRV; 02516000
|
|
IF SC = "*" THEN 02517000
|
|
BEGIN DI ~ A; DI ~ DI+2; DS ~ 2 LIT "*"; SI ~ SI+1; NCRV ~ SI; 02518000
|
|
TALLY ~ 1; CHECKEXP ~ TALLY; 02519000
|
|
SI ~ LOC NCRV; DI ~ NCR; DS ~ WDS END; 02520000
|
|
END CHECKEXP; 02521000
|
|
PROCEDURE CHECKRESERVED; 02522000
|
|
BEGIN LABEL RESWD, XIT, FOUND1, FOUND2, DONE; 02523000
|
|
BOOLEAN STREAM PROCEDURE COMPLETECHECK(A,B,N); VALUE N ; 02523100
|
|
BEGIN LABEL L ; 02523200
|
|
SI~A; SI~SI-2; DI~B; N(IF SC!DC THEN JUMP OUT TO L); TALLY~1; 02523300
|
|
L: COMPLETECHECK~TALLY ; 02523400
|
|
END OF COMPLETECHECK; 02523500
|
|
STREAM PROCEDURE XFER(FROM, T1, T2, N, M); VALUE FROM, N, M; 02524000
|
|
BEGIN SI ~ FROM; DI ~ T1; DI ~ DI+2; 02525000
|
|
DS ~ M CHR; 02526000
|
|
SI ~ FROM; SI ~ SI+N; 02527000
|
|
DI ~ T2; DI ~ DI+2; 02528000
|
|
DS ~ 6 CHR; 02529000
|
|
END XFER; 02530000
|
|
STREAM PROCEDURE XFERA(FROM, NEXT1, NEXT2); 02531000
|
|
VALUE FROM; 02532000
|
|
BEGIN SI ~ FROM; SI ~ SI+6; 02533000
|
|
DI ~ NEXT1; DI ~ DI+2; 02534000
|
|
5(IF SC } "0" THEN DS ~ CHR ELSE JUMP OUT); 02535000
|
|
SI ~ SI+2; 02536000
|
|
DI ~ NEXT2; DI ~ DI+2; 02537000
|
|
6(IF SC = ALPHA THEN DS ~ CHR ELSE JUMP OUT); 02538000
|
|
END XFERA; 02539000
|
|
BOOLEAN STREAM PROCEDURE CHECKFUN(FROM, TOO, N); VALUE FROM, N; 02540000
|
|
BEGIN SI ~ FROM; SI ~ SI +N; 02541000
|
|
IF SC = "0" THEN 02542000
|
|
BEGIN SI ~ SI+1; 02543000
|
|
IF SC = "N" THEN 02544000
|
|
BEGIN SI ~ SI+1; TALLY ~ 1; 02545000
|
|
DI ~ TOO; DI ~ DI+2; 02546000
|
|
DS ~ 6 CHR; 02547000
|
|
END; 02548000
|
|
END; 02549000
|
|
CHECKFUN ~ TALLY; 02550000
|
|
END CHECKFUN; 02551000
|
|
BOOLEAN STREAM PROCEDURE MORETHAN6(P); 02552000
|
|
BEGIN SI ~ P; 02553000
|
|
IF SC ! " " THEN TALLY ~ 1; 02554000
|
|
MORETHAN6 ~ TALLY; 02555000
|
|
END MORETHAN6; 02556000
|
|
INTEGER I; ALPHA ID; 02557000
|
|
INTEGER STOR ; 02557100
|
|
IF ACCUM[1] = " " THEN 02558000
|
|
BEGIN XTA ~ CHAR; FLOG(16); GO TO XIT END; 02559000
|
|
IF CHAR = "= " OR CHAR = "# " THEN GO TO XIT; 02560000
|
|
IF CHAR = "~ " THEN GO TO XIT; 02560100
|
|
IF CHAR ! "( " AND CHAR ! "% " THEN GO TO RESWD; 02561000
|
|
IF MORETHAN6(ACCUM[2]) THEN GO TO RESWD; 02562000
|
|
COMMENT AT THIS POINT WE HAVE <ID> ( . 02563000
|
|
THIS MUST BE ONE OF THE FOLLOWING: 02564000
|
|
ASSIGNEMNT STATEMENT WITH SUBSCRIPTED VARIABLE AT THE LEFT. 02565000
|
|
STATEMENT FUNCTION DECLARATION. 02566000
|
|
CALL, REAL, ENTRY, GO TO, READ, WRITE, FORMAT, IF, DATA, CHAIN, PRINT OR02567000
|
|
PUNCH; 02567100
|
|
IF I ~ SEARCH(T) > 0 THEN 02568000
|
|
IF GET(I).CLASS = ARRAYID THEN GO TO XIT; 02569000
|
|
ID ~ T; ID.[36:12] ~ " "; 02570000
|
|
FOR I~0 THRU RSP DO IF RESERVEDWORDSLP[I]=ID THEN IF (IF STOR 02571000
|
|
~RESLENGTHLP[I]-4<1 THEN TRUE ELSE COMPLETECHECK(ACCUM[2], 02571100
|
|
RESERVEDWORDSLP[I+RSP1],STOR)) THEN GO FOUND1 ; 02572000
|
|
GO TO XIT; 02573000
|
|
FOUND1: 02574000
|
|
NEXT ~ LPGLOBAL[I]; 02575000
|
|
T ~ " "; 02576000
|
|
XFER(ACR0, T, NEXTACC, I~RESLENGTHLP[I], IF I> 6 THEN 6 ELSE I); 02577000
|
|
GO TO DONE; 02578000
|
|
RESWD: 02579000
|
|
COMMENT AT THIS POINT WE KNOW THE <ID> MUST BE A SPECIAL WORD 02580000
|
|
TO IDENTIFY THE STATEMENT TYPE; 02581000
|
|
ID ~ T; ID.[36:12] ~ " "; 02582000
|
|
IF T = "ASSIGN" THEN 02583000
|
|
BEGIN 02584000
|
|
NEXTSCN ~ SCN; SCN ~ 14; 02585000
|
|
NEXTACC ~ NEXTACC2 ~ " "; 02586000
|
|
XFERA(ACR0, NEXTACC, NEXTACC2); 02587000
|
|
NEXT ~ 1; 02588000
|
|
GO TO XIT; 02589000
|
|
END; 02590000
|
|
FOR I~1 THRU RSH DO IF RESERVEDWORDS[I]=ID THEN IF (IF STOR~ 02591000
|
|
RESLENGTH[I]-4<1 THEN TRUE ELSE COMPLETECHECK(ACCUM[2],RESERVEDWORDS02591100
|
|
[I+RSH1],IF STOR>8 THEN 8 ELSE STOR)) THEN GO FOUND2 ; 02592000
|
|
XTA ~ T; FLOG(16); GO TO XIT; 02593000
|
|
FOUND2: 02594000
|
|
NEXT ~ I+1; 02695000
|
|
T ~ " "; 02696000
|
|
XFER(ACR0, T, NEXTACC, I~RESLENGTH [I], IF I> 6 THEN 6 ELSE I); 02697000
|
|
DONE: NEXTSCN ~ SCN; 02698000
|
|
SCN ~ 6; 02699000
|
|
IF NEXTACC = "FUNCTI" THEN 02600000
|
|
IF CHECKFUN(ACR0, NEXTACC, I+6) THEN SCN ~ 13; 02601000
|
|
XIT: 02602000
|
|
EOSTOG~FALSE; 02603000
|
|
END CHECKRESERVED; 02604000
|
|
BOOLEAN PROCEDURE CHECKOCTAL; 02605000
|
|
BEGIN 02606000
|
|
INTEGER S, T; LABEL XIT; 02607000
|
|
INTEGER STREAM PROCEDURE COUNT(ACRV,T); VALUE ACRV,T ; 02608000
|
|
BEGIN 02609000
|
|
LOCAL A,B; SI~LOC T; SI~SI+7 ; 02610000
|
|
IF SC="1" THEN BEGIN SI~ACRV;IF SC="0" THEN SI~SI+1 END ELSE SI~ACRV;02611000
|
|
IF SC!" " THEN 02612000
|
|
BEGIN A~SI; 02613000
|
|
17(IF SC>"7" THEN BEGIN TALLY~17; JUMP OUT END ELSE IF SC < "0" THEN02614000
|
|
BEGIN IF SC!" " THEN TALLY~17; JUMP OUT END; SI~SI+1; 02614010
|
|
TALLY~TALLY+1) ; 02614015
|
|
B~TALLY; SI~LOC B; SI~SI+7 ; 02614020
|
|
IF SC="+" THEN BEGIN SI~A; IF SC>"3" THEN TALLY~17 END; 02614030
|
|
END ; 02614040
|
|
COUNT~TALLY ; 02614050
|
|
END OF COUNT ; 02614060
|
|
ALPHA STREAM PROCEDURE CONV(ACRV, S, T); VALUE ACRV, S, T; 02615000
|
|
BEGIN SI ~ ACRV; IF SC = "0" THEN SI ~ SI+1; 02616000
|
|
DI ~ LOC CONV; SKIP S DB; 02617000
|
|
T(SKIP 3 SB; 3(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP 1 SB)); 02618000
|
|
END CONV; 02619000
|
|
IF T~COUNT(ACR0,1) = 0 THEN 02620000
|
|
BEGIN S ~ 1; 02620100
|
|
IF T ~ CHAR ! "+ " AND T ! "& " THEN 02620200
|
|
IF T = "- " THEN S ~ -1 ELSE GO TO XIT; 02621000
|
|
SCANX(4, 4, 3, 3, 10, 10); 02621100
|
|
IF SCN ! 10 THEN GO TO XIT; 02622000
|
|
IF T~COUNT(ACR1,2) = 0 OR T > 16 THEN GO TO XIT ; 02622100
|
|
FNEXT ~ CONV(ACR1, (16-T)|3, T); 02622200
|
|
IF S < 0 THEN FNEXT ~ -FNEXT; 02623000
|
|
END ELSE IF T < 17 THEN FNEXT~CONV(ACR0,(16-T)|3,T) ELSE GO TO XIT ; 02623100
|
|
CHECKOCTAL ~ TRUE; 02624000
|
|
NEXT ~ NUM; 02625000
|
|
NUMTYPE ~ REALTYPE; 02626000
|
|
XIT: 02627000
|
|
END CHECKOCTAL; 02628000
|
|
PROCEDURE HOLLERITH; 02629000
|
|
BEGIN 02630000
|
|
REAL T, COL1, T2, ENDP; 02631000
|
|
LABEL XIT; 02632000
|
|
INTEGER STREAM PROCEDURE STRCNT(S,D,SZ); VALUE S,SZ; 02633000
|
|
BEGIN 02634000
|
|
SI ~ S; DI ~ D;DS ~ 8 LIT "00 "; DI ~ D; 02635000
|
|
DI ~ D; DI ~ DI + 2; DS ~SZ CHR; STRCNT ~ SI; 02636000
|
|
END STRCNT; 02637000
|
|
INTEGER STREAM PROCEDURE RSTORE(S,D,SKP,SZ); 02638000
|
|
VALUE S, SKP, SZ; 02639000
|
|
BEGIN 02640000
|
|
DI ~ D; 02641000
|
|
SI ~ S; DI ~DI + SKP; DS ~ SZ CHR; RSTORE ~ SI; 02642000
|
|
END RSTORE; 02643000
|
|
F1 ~ FNEXT; 02644000
|
|
NUMTYPE ~ STRINGTYPE; 02645000
|
|
T ~ 0 & NCR[30:33:15] & NCR[45:30:3]; 02646000
|
|
COL1 ~ 0 & INITIALNCR[30:33:15]; 02647000
|
|
ENDP ~ COL1 + 72; 02648000
|
|
STRINGSIZE ~ 0; 02649000
|
|
WHILE F1 >0 DO 02650000
|
|
BEGIN 02651000
|
|
T2 ~ IF F1 > 6 THEN 6 ELSE F1; 02652000
|
|
IF STRINGSIZE > MAXSTRING THEN 02653000
|
|
BEGIN FLAG(120); STRINGSIZE ~ 0 END; 02654000
|
|
IF T+T2> ENDP THEN IF DCINPUT OR FREEFTOG THEN 02655000
|
|
BEGIN XTA~BLANKS; FLOG(150); GO TO XIT END 02655500
|
|
ELSE BEGIN 02656000
|
|
IF TSSEDITOG THEN IF NOT DCINPUT THEN TSSED(BLANKS,1) ; 02656100
|
|
NCR ~ STRCNT(NCR, STRINGARRAY[STRINGSIZE], ENDP-T); 02657000
|
|
IF NOT CONTINUE THEN 02658000
|
|
% 02659000
|
|
BEGIN FLOG(43); GO TO XIT END; 02660000
|
|
IF READACARD THEN; 02661000
|
|
IF LISTOG THEN PRINTCARD; 02662000
|
|
NCR ~ RSTORE(NCR,STRINGARRAY[STRINGSIZE],ENDP-T+2,T2-(ENDP-T)); 02663000
|
|
STRINGSIZE ~ STRINGSIZE+1; 02664000
|
|
F1 ~ F1 - T2; 02665000
|
|
T ~ COL1 + 6 + T2 - (ENDP - T); 02666000
|
|
END ELSE 02667000
|
|
BEGIN 02668000
|
|
NCR ~ STRCNT(NCR, STRINGARRAY[STRINGSIZE], T2); 02669000
|
|
STRINGSIZE ~ STRINGSIZE +1; 02670000
|
|
T ~ T +T2; 02671000
|
|
F1 ~ F1 - T2; 02672000
|
|
END; 02673000
|
|
END; 02674000
|
|
NUMTYPE ~ STRINGTYPE; 02675000
|
|
SCN ~ 1; 02676000
|
|
XIT: 02677000
|
|
END HOLLERITH; 02678000
|
|
PROCEDURE QUOTESTRING; 02679000
|
|
BEGIN 02680000
|
|
REAL C; 02681000
|
|
LABEL XIT; 02682000
|
|
ALPHA STREAM PROCEDURE STRINGWORD(S,D,SKP,SZ,C); 02683000
|
|
VALUE S,SKP,SZ; 02684000
|
|
BEGIN 02685000
|
|
LABEL QT, XIT; 02686000
|
|
DI ~ D; SI ~ S; 02687000
|
|
DI ~ DI+SKP; DI ~ DI+2; 02688000
|
|
TALLY ~ SKP; 02689000
|
|
SZ( IF SC = """ THEN JUMP OUT TO QT; 02690000
|
|
IF SC = ":" THEN JUMP OUT TO QT; 02691000
|
|
IF SC = "@" THEN JUMP OUT TO QT; 02692000
|
|
IF SC = "]" THEN JUMP OUT TO XIT; 02693000
|
|
DS ~ CHR; TALLY ~ TALLY+1); 02694000
|
|
GO TO XIT; 02695000
|
|
QT: TALLY ~ TALLY+7; SI ~ SI+1; 02696000
|
|
XIT: STRINGWORD ~ SI; S ~ TALLY; 02697000
|
|
SI ~ LOC S; DI ~ C; DS ~ WDS; 02698000
|
|
END STRINGWORD; 02799000
|
|
STRINGSIZE ~ 0; 02700000
|
|
DO 02701000
|
|
BEGIN 02702000
|
|
IF STRINGSIZE > MAXSTRING THEN 02703000
|
|
BEGIN FLAG(120); STRINGSIZE ~ 0 END; 02704000
|
|
STRINGARRAY[STRINGSIZE] ~ BLANKS; 02705000
|
|
NCR ~ STRINGWORD(NCR, STRINGARRAY[STRINGSIZE], 0, 6, C); 02706000
|
|
IF C<6 THEN IF DCINPUT OR FREEFTOG 02707000
|
|
THEN BEGIN XTA~BLANKS; FLOG(150); GO TO XIT END 02707500
|
|
ELSE BEGIN 02708000
|
|
IF TSSEDITOG THEN IF NOT DCINPUT THEN TSSED(BLANKS,1) ; 02708100
|
|
IF NOT CONTINUE THEN 02709000
|
|
% 02710000
|
|
BEGIN FLOG(121); GO TO XIT END; 02711000
|
|
IF READACARD THEN; 02712000
|
|
IF LISTOG THEN PRINTCARD; 02713000
|
|
NCR ~ STRINGWORD(NCR, STRINGARRAY[STRINGSIZE ],C,6-C,C); 02714000
|
|
END; 02715000
|
|
STRINGSIZE ~ STRINGSIZE + 1; 02716000
|
|
END UNTIL C } 7; 02717000
|
|
IF C = 7 THEN STRINGSIZE ~ STRINGSIZE-1; 02718000
|
|
FNEXT ~ STRINGSIZE; 02719000
|
|
NEXT ~ NUM; 02720000
|
|
SYMBOL ~ NAME ~ STRINGARRAY[0]; 02721000
|
|
NUMTYPE ~ STRINGTYPE; 02722000
|
|
SCN ~ 1; 02723000
|
|
XIT: 02724000
|
|
END QUOTESTRING; 02725000
|
|
PROCEDURE CHECKPERIOD; 02726000
|
|
BEGIN 02727000
|
|
LABEL FRACTION, XIT, EXPONENT, EXPONENTSIGN; 02728000
|
|
LABEL NUMFINI, FPLP, CHKEXP; 02729000
|
|
ALPHA S, T, I, TS; 02730000
|
|
INTEGER C2; 02730050
|
|
BOOLEAN CON; 02730100
|
|
IF T ~ CHAR ! ". " THEN GO TO CHKEXP; 02731000
|
|
SCANX(4, 9, 3, 8, 10, 11); 02732000
|
|
IF T ~ EXACCUM[1] = " " THEN 02733000
|
|
BEGIN IF NUMTYPE ! DOUBTYPE THEN NUMTYPE ~ REALTYPE; GO TO XIT END; 02733500
|
|
IF T = "E " OR T = "D " THEN GO TO EXPONENTSIGN; 02734000
|
|
IF T.[12:6] { 9 THEN GO TO FRACTION; 02735000
|
|
IF T.[18:6] { 9 THEN 02736000
|
|
BEGIN 02737000
|
|
IF S ~ T.[12:6] ! "E" AND S ! "D" THEN 02738000
|
|
BEGIN XTA ~ T; FLOG(63); GO TO XIT END; 02739000
|
|
EXACCUM[1].[12:6] ~ 0; 02740000
|
|
I ~ 1; GO TO EXPONENT; 02741000
|
|
END; 02742000
|
|
IF EXACCUM[0] ! ". " THEN GO TO XIT; 02743000
|
|
FOR I ~ 0 STEP 1 UNTIL 10 DO 02744000
|
|
IF T = PERIODWORD[I] THEN 02745000
|
|
BEGIN EXACCUM[2] ~ I; SCN ~ 12; GO TO XIT END; 02746000
|
|
GO TO XIT; 02747000
|
|
FRACTION: NEXT ~ NUM; 02748000
|
|
IF NUMTYPE !DOUBTYPE THEN NUMTYPE ~ REALTYPE; XTA ~ ACR1; 02749000
|
|
FPLP: 02750000
|
|
F1 ~ 0; 02751000
|
|
XTA ~ CONVERT(F1,C1,XTA ,TS); 02752000
|
|
C2 ~ C2 + C1; 02753000
|
|
IF (F2 ~ FNEXT|TEN[C1]+F1) { MAX 02754000
|
|
THEN FNEXT ~ F2 02755000
|
|
ELSE BEGIN 02756000
|
|
NUMTYPE ~ DOUBTYPE; 02757000
|
|
CON ~ TRUE; 02757100
|
|
DOUBLE(FNEXT,DBLOW,TEN[C1],TEN[69+C1],|, 02758000
|
|
F1,0,+,~,FNEXT,DBLOW); 02759000
|
|
END; 02760000
|
|
IF TS { 9 THEN GO TO FPLP; 02761000
|
|
F1 ~ 0; 02762000
|
|
IF T ~ EXACCUM[0] ! "E " AND T ! "D " THEN 02763000
|
|
BEGIN IF SCN = 8 THEN SCN ~ 3 ELSE SCN ~ 10; 02764000
|
|
GO TO NUMFINI; 02765000
|
|
END; 02766000
|
|
CHKEXP: FNEXT ~ FNEXT | 1.0; 02767000
|
|
F1 ~ 0; 02768000
|
|
I ~ 1; 02769000
|
|
SCANX(4, 4, 3, 3, 20, 10); 02770000
|
|
IF SCN = 20 THEN 02771000
|
|
EXPONENTSIGN: 02772000
|
|
BEGIN IF S ~ EXACCUM[0] ! "+ " AND S ! "& " THEN 02773000
|
|
IF S = "- " THEN I ~ -1 ELSE 02774000
|
|
BEGIN XTA ~ S; FLOG(63); SCN ~ 10; GO TO XIT END; 02775000
|
|
SCANX(4, 4, 3, 3, 10, 10); 02776000
|
|
END; 02777000
|
|
IF (S ~ EXACCUM[1]).[12:6] > 9 THEN 02778000
|
|
BEGIN XTA ~ IF S ! BLANKS THEN S ELSE T; FLOG(63); GO TO XIT END; 02778100
|
|
EXPONENT: 02779000
|
|
IF NUMTYPE ! DOUBTYPE THEN NUMTYPE ~ REALTYPE; 02779500
|
|
IF T.[12:6] = "D" THEN NUMTYPE ~ DOUBTYPE; 02780000
|
|
IF SCN = 8 THEN SCN ~ 3 ELSE IF SCN = 11 THEN SCN ~ 10; 02781000
|
|
XTA ~ ACR1; 02782000
|
|
XTA ~ CONVERT(F1,C1,XTA ,TS); 02783000
|
|
IF I < 0 THEN F1 ~ -F1; 02784000
|
|
NUMFINI: 02785000
|
|
C1 ~ F1 - C2; 02786000
|
|
IF I ~ (ABS(C1+(FNEXT.[3:6]&FNEXT[1:2:1]))) > 63 OR((ABS(C1) = I OR 02787000
|
|
FNEXT } 5) AND ABS(F1) } 69) 02787500
|
|
THEN BEGIN XTA ~ T; FLOG(87); GO TO XIT; END; 02788000
|
|
IF NUMTYPE ! DOUBTYPE THEN 02789000
|
|
BEGIN 02790000
|
|
IF C1} 0 THEN FNEXT ~ FNEXT | TEN[C1] 02791000
|
|
ELSE FNEXT ~ FNEXT / TEN[-C1]; 02792000
|
|
END ELSE 02793000
|
|
BEGIN 02794000
|
|
IF C1 } 0 02795000
|
|
THEN DOUBLE(FNEXT,DBLOW,TEN[C1],TEN[69+C1],|,~,FNEXT,DBLOW) 02796000
|
|
ELSE DOUBLE(FNEXT,DBLOW,TEN[-C1],TEN[69-C1],/,~,FNEXT,DBLOW); 02797000
|
|
IF CON THEN IF DBLOW.[9:33] = MAX.[9:33] THEN 02797100
|
|
IF FNEXT.[3:6] LSS 14 02797150
|
|
THEN IF BOOLEAN(FNEXT.[2:1]) THEN 02797200
|
|
BEGIN DBLOW ~ 0; FNEXT ~ FNEXT + 1&FNEXT[2:2:7]; END; 02797300
|
|
END; 02798000
|
|
XIT: 02799000
|
|
END CHECKPERIOD; 02800000
|
|
LABEL LOOP0, NUMBER ; 02801000
|
|
LABEL L,XIT; 02802000
|
|
LABEL L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15,L16,L17, 02802100
|
|
L18,L19,L20,L21,BK ; 02802200
|
|
SWITCH CASEL~L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15, 02802300
|
|
L16,L17,L18,L19,L20,L21 ; 02802400
|
|
LABEL LOOP, CASESTMT; %994-02803000
|
|
LABEL CASE0,CASE1,CASE2,CASE3,CASE4,CASE5,CASE6,CASE7; %994-02803100
|
|
LABEL CASE8,CASE9,CASE10,CASE11,CASE12,CASE13,CASE14; %994-02803200
|
|
PREC~NEXT~FNEXT~REAL(SCANENTER~FALSE) ; 02804000
|
|
CASESTMT: 02805000
|
|
CASE SCN OF 02806000
|
|
BEGIN 02807000
|
|
CASE0: %994-02807999
|
|
GO TO IF LABELR THEN CASE5 ELSE CASE1; 02808000
|
|
CASE1: 02809000
|
|
BEGIN 02810000
|
|
LOOP0: 02810100
|
|
ACR ~ ACR0; 02811000
|
|
ACCUM[1] ~ BLANKS; 02812000
|
|
LOOP: 02813000
|
|
IF ADVANCE(NCR, ACR, CHR0, NCR, ACR) THEN 02814000
|
|
IF CONTINUE THEN 02815000
|
|
% 02816000
|
|
IF READACARD THEN 02817000
|
|
BEGIN 02818000
|
|
IF LISTOG THEN PRINTCARD ; 02818010
|
|
IF ACR.[33:15]}ACCUMSTOP THEN 02818020
|
|
BEGIN XTA~BLANKS; FLOG(175); GO LOOP0 END ; 02818030
|
|
GO LOOP ; 02818040
|
|
END 02818050
|
|
ELSE IF T ~ ACCUM[1] = " " THEN GO TO CASE5 ELSE SCN ~ 4 02819000
|
|
ELSE IF T ~ ACCUM[1] = " " THEN 02820000
|
|
GO TO CASE3 ELSE SCN ~ 3 02821000
|
|
ELSE IF T ~ ACCUM[1] = " " THEN GO TO CASE2 ELSE SCN ~ 2; 02822000
|
|
END; 02823000
|
|
CASE2: 02824000
|
|
BEGIN T ~ CHAR; SCN ~ 1 END; 02825000
|
|
CASE3: 02826000
|
|
BEGIN T ~ "; "; NEXT ~ SEMI; SCN ~ 0; 02827000
|
|
IF EOSTOG THEN IF LOGIFTOG THEN BEGIN LOGIFTOG ~ FALSE; XTA ~ T; 02827100
|
|
FLAG(101); END; 02827200
|
|
GO TO XIT; 02827300
|
|
END; 02827400
|
|
CASE4: %994-02827999
|
|
BEGIN T ~ "; "; NEXT ~ SEMI; SCN ~ 5; GO TO XIT END; 02828000
|
|
CASE5: 02829000
|
|
BEGIN T ~ "<EOF> "; NEXT ~ EOF; EOSTOG ~ FALSE; GO TO XIT END; 02830000
|
|
CASE6: %994-02830999
|
|
BEGIN T ~ ACCUM[1] ~ NEXTACC; SCN ~ NEXTSCN; 02831000
|
|
IF T = " " THEN GO TO CASESTMT; 02832000
|
|
END; 02833000
|
|
CASE7: %994-02833999
|
|
BEGIN EOSTOG ~ TRUE; 02834000
|
|
IF LABELR THEN GO TO CASE5 ELSE GO TO CASE1; 02835000
|
|
END; 02836000
|
|
CASE8: %994-02836999
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 3 END; 02837000
|
|
CASE9: %994-02837999
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 4 END; 02838000
|
|
CASE10: %994-02838999
|
|
BEGIN T ~ CHAR ~ EXACCUM[0]; SCN ~ 1 END; 02839000
|
|
CASE11: %994-02839999
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 10 END; 02840000
|
|
CASE12: %994-02840999
|
|
BEGIN T ~ EXACCUM[1]; SCN ~ 1; 02841000
|
|
IF N ~ EXACCUM[2] { 1 THEN 02842000
|
|
BEGIN NEXT ~ NUM; FNEXT ~ N; GO TO XIT END; 02843000
|
|
NEXT ~ 0; 02844000
|
|
OP ~ N-1; 02845000
|
|
PREC ~ IF N { 4 THEN N-1 ELSE 4; 02846000
|
|
GO TO XIT; 02847000
|
|
END; 02848000
|
|
CASE13: %994-02848999
|
|
BEGIN T ~ "FUNCTI"; NEXT ~ 16; SCN ~ 6; GO TO XIT END; 02849000
|
|
CASE14: %994-02849999
|
|
BEGIN T ~ ACCUM[1] ~ NEXTACC; 02850000
|
|
NEXTACC ~ NEXTACC2; SCN ~ 6; 02851000
|
|
END; 02852000
|
|
END OF CASE STATEMENT; 02853000
|
|
IF NOT FILETOG THEN 02854000
|
|
IF EOSTOG THEN 02855000
|
|
BEGIN 02856000
|
|
NEXT ~ 0; 02857000
|
|
IF T = "; " THEN GO TO CASESTMT; 02858000
|
|
CHECKRESERVED; 02859000
|
|
IF NEXT > 0 THEN GO TO XIT; 02860000
|
|
END; 02861000
|
|
IF (IDINFO~TIPE[T.[12:6]])>0 THEN 02862000
|
|
BEGIN 02862100
|
|
BK: NEXT~ID ; 02862200
|
|
IF NOT FILETOG THEN 02862300
|
|
IF SCANENTER~((FNEXT~SEARCH(T))=0) THEN FNEXT~ENTER(IDINFO,T) 02862400
|
|
ELSE IF GET(FNEXT).CLASS=DUMMY THEN FNEXT~GET(FNEXT+2).BASE ; 02862500
|
|
GO XIT ; 02862600
|
|
END ; 02862700
|
|
GO CASEL[-IDINFO]; % SEE INITIALIZATION OF "TIPE". LINE 03433100%993-02862800
|
|
L1: %DIGITS %993-02863000
|
|
BEGIN NUMTYPE ~ INTYPE; NEXT ~ NUM; XTA ~ ACR0; 02864000
|
|
FNEXT ~ DBLOW ~ C1 ~ 0; 02865000
|
|
XTA ~ CONVERT(FNEXT,C1,XTA ,TS); 02866000
|
|
WHILE TS { 9 DO 02867000
|
|
BEGIN 02868000
|
|
XTA ~ CONVERT(F1,C1,XTA ,TS); 02869000
|
|
IF (F2 ~ FNEXT|TEN[C1]+F1) { MAX 02870000
|
|
THEN FNEXT ~ F2 02871000
|
|
ELSE BEGIN 02872000
|
|
NUMTYPE ~ DOUBTYPE; 02873000
|
|
DOUBLE(FNEXT,DBLOW,TEN[C1],TEN[69+C1],|, 02874000
|
|
F1,0,+,~,FNEXT,DBLOW); 02875000
|
|
END; 02876000
|
|
END; 02877000
|
|
IF CHAR = ". " OR CHAR = "E " OR CHAR = "D " THEN 02878000
|
|
CHECKPERIOD 02879000
|
|
ELSE IF CHAR = "H " THEN HOLLERITH; 02883000
|
|
GO TO XIT; 02884000
|
|
END; 02885000
|
|
L2: % > %993- 02898100
|
|
BEGIN PREC ~ 4; OP ~ 7; GO TO XIT END; 02899000
|
|
L3: % } %993- 02899100
|
|
BEGIN PREC ~ 4; OP ~ 8; GO TO XIT END; 02900000
|
|
L4: % & OR + %993- 02900100
|
|
BEGIN PREC ~ 5; OP ~ 10; NEXT ~ PLUS; GO TO XIT END; 02901000
|
|
L5: % . %993- 02910100
|
|
BEGIN 02911000
|
|
FNEXT ~ DBLOW ~ C1 ~ 0; NUMTYPE ~ REALTYPE; 02912000
|
|
CHECKPERIOD; 02913000
|
|
T ~ EXACCUM[1]; 02914000
|
|
IF SCN = 12 THEN 02915000
|
|
BEGIN SCN ~ 1; 02916000
|
|
IF N ~ EXACCUM[2] { 1 THEN 02917000
|
|
BEGIN 02918000
|
|
NEXT ~ NUM; FNEXT ~ N; 02919000
|
|
NUMTYPE ~ LOGTYPE; GO TO XIT; 02920000
|
|
END; 02921000
|
|
NEXT ~ 0; 02922000
|
|
OP ~ N-1; 02923000
|
|
PREC ~ IF N { 4 THEN N-1 ELSE 4; 02924000
|
|
GO TO XIT; 02924100
|
|
END; 02925000
|
|
IF NEXT ! NUM THEN BEGIN NEXT ~ NUM; XTA ~ T; FLOG(141) END; 02925100
|
|
GO TO XIT; 02926000
|
|
END; 02927000
|
|
L6: % % OR ( %993-02929100
|
|
BEGIN NEXT ~ LPAREN; GO TO XIT END; 02930000
|
|
L7: % < %993-02930100
|
|
BEGIN PREC ~ OP ~ 4; GO TO XIT END; 02931000
|
|
L8: % LETTER 0 %993-02938100
|
|
BEGIN IF DATATOG THEN IF CHECKOCTAL THEN GO TO XIT; 02939000
|
|
IDINFO~TIPE[12]; GO BK ; 02939100
|
|
END; 02939200
|
|
L9: % $ %993-02942100
|
|
BEGIN NEXT ~ DOLLAR; GO TO XIT END; 02943000
|
|
L10: % * %993-02943100
|
|
IF CHECKEXP(NCR, NCR, T) THEN 02944000
|
|
BEGIN PREC ~ 9; OP ~ 15; NEXT ~ UPARROW; GO TO XIT END ELSE 02945000
|
|
L11: 02945100
|
|
BEGIN PREC ~ 7; OP ~ 13; NEXT ~ STAR; GO TO XIT END; 02946000
|
|
L12: % - %993-02946100
|
|
BEGIN PREC ~ 5; OP ~ 11; NEXT ~ MINUS; GO TO XIT END; 02947000
|
|
L13: % ) OR [ %993-02947100
|
|
BEGIN NEXT ~ RPAREN; GO TO XIT END; 02948000
|
|
L14: % ; %993-02948100
|
|
BEGIN NEXT ~ SEMI; GO TO XIT END; 02949000
|
|
L15: % { %993-02949100
|
|
BEGIN PREC ~ 4; OP ~ 5; GO TO XIT END; 02950000
|
|
L16: % / %993-02951100
|
|
BEGIN PREC ~ 7; OP ~ 14; NEXT ~ SLASH; GO TO XIT END; 02952000
|
|
L17: % , %993-02960100
|
|
BEGIN NEXT ~ COMMA; GO TO XIT END; 02961000
|
|
L18: % ! %993-02962100
|
|
BEGIN PREC ~ 4; OP ~ 9; GO TO XIT END; 02963000
|
|
L19: % = OR ~ OR # %993- 02963100
|
|
BEGIN NEXT ~ EQUAL; GO TO XIT END; 02964000
|
|
L20: % ] %993-02964100
|
|
BEGIN XTA ~ T; FLAG(0); GO TO CASESTMT END; 02965000
|
|
L21: % " OR : OR @ %993-02965100
|
|
BEGIN QUOTESTRING; GO TO XIT END; 02966000
|
|
XIT: 02971000
|
|
IF DEBUGTOG THEN WRITALIST(FD,3,NEXT,T," ",0,0,0,0,0) ; 02972000
|
|
02973000
|
|
XTA ~ NAME ~ T; 02974000
|
|
END SCAN; 02975000
|
|
PROCEDURE WRAPUP; 02976000
|
|
COMMENT WRAPUP OF COMPILIATION; 02977000
|
|
BEGIN 02978000
|
|
ARRAY PRT[0:7,0:127], 02979000
|
|
SEGDICT[0:7,0:127], 02980000
|
|
SEG0[0:29]; 02981000
|
|
ARRAY FILES[0:BIGGESTFILENB]; 02982000
|
|
INTEGER THEBIGGEST; 02983000
|
|
SAVE ARRAY FPB[0:1022]; % FILE PARAMETER BLOCK 02984000
|
|
REAL FPS,FPE; % START AND END OF FPB 02985000
|
|
REAL GSEG,PRI,FID,MFID,IDNM,FILTYP,FPBI; 02986000
|
|
BOOLEAN ALF; 02987000
|
|
REAL PRTADR, SEGMNT, LNK, TSEGSZ, T1, I, FPBSZ; 02988000
|
|
DEFINE 02988900
|
|
SPDEUN= FPBSZ#, 02988910
|
|
ENDDEF=#; 02988990
|
|
ARRAY INTLOC[0:150]; 02989000
|
|
REAL J; 02990000
|
|
FORMAT SEGUS(A6, " IS SEGMENT ", I4, 02991000
|
|
", PRT IS ", A4, "."); 02992000
|
|
LIST SEGLS(IDNM,NXAVIL,T1); 02993000
|
|
LABEL LA, ENDWRAPUP; 02997000
|
|
LABEL QQQDISKDEFAULT; %503-02997010
|
|
COMMENT FORMAT OF SEGMENT DICTIONARY -RUN TIME ; 02998000
|
|
DEFINE SGTYPF= [1:2]#, %0 = PROGRAM SEGMENTS 02999000
|
|
SGTYPC= 1:46:2#,%1 = MCP INTRINSIC 03000000
|
|
%2 = DATA SEGMENT 03001000
|
|
PRTLINKF= [8:10]#, % LINK TO FIRT PRT ENTRY 03002000
|
|
PRTLINKC= 8:38:10#, 03003000
|
|
SGLCF = [18:15]#, % SEGMENT SIZE 03004000
|
|
SGLCC = 23:38:10#, 03005000
|
|
DKADRF = [33:15]#, % RELATIVE DISK ADDRESS OF SEGMENT 03006000
|
|
% OR MCP INTRINSIC NUMBER 03007000
|
|
DKADRC = 33:13:15#; 03008000
|
|
COMMENT FORMAT OF FIRST SEGMENT OF CODE FILE- RUN TIME; 03009000
|
|
COMMENT SEGO[0:29] 03010000
|
|
WORD CONTENTS 03011000
|
|
0 LOCATION OF SEGMENT DICTIONARY 03012000
|
|
1 SIZE OF SEGMENT DICTIONARY 03013000
|
|
2 LOCATION OF PRT 03014000
|
|
3 SIZE OF PRT 03015000
|
|
4 LOCATION OF FILE PARAMETER BLOCK 03016000
|
|
5 SIZE OF FILE PARAMETER BLOCK 03017000
|
|
6 STARTING SEGMENT NUMBER 03018000
|
|
7-[2:1] IND FORTRAN FAULT DEC 03018100
|
|
7-[18:15] NUMBER OF FILES 03019000
|
|
7-[33:15] CORE REQUIRED/64 03020000
|
|
; 03021000
|
|
COMMENT FORMAT OF PRT; 03022000
|
|
% FLGF = [0:4] = 1101 = SET BY STREAM 03023000
|
|
DEFINE MODEF =[4:2]#, % 0 = THUNK 03024000
|
|
MODEC=4:46:2#, % 1 = WORD MODE PROGRAM DESCRIPTOR 03025000
|
|
% 2 = LABEL DESCRIPTOR 03026000
|
|
% 3 = CHARACTER MODE PROGRAM DESCRIPTOR 03027000
|
|
STOPF =[6:1]#, % STOPPER = 1 FOR LAST DESCRIPTOR IN 03028000
|
|
STOPC=6:47:1#, % CHAIN OF SAME SEGMENT DESCRIPTORS 03029000
|
|
LINKF =[7:11]#, % IF STOP = 0 THEN PRTLINK 03030000
|
|
LINKC=7:37:11#, % ELSE LINK TO SEGDICT 03031000
|
|
FFF =[18:15]#,% INDEX INTO SEGMENT DICTIONARY 03032000
|
|
FFC =18:33:15#, 03033000
|
|
SINX = [33:15]#;% RELATIVE ADDRESS INTO SEGMENT 03034000
|
|
DEFINE PDR = [37:5]#, 03035000
|
|
PDC = [42:6]#; 03036000
|
|
REAL STREAM PROCEDURE MKABS(F); 03037000
|
|
BEGIN 03038000
|
|
SI ~ F; MKABS ~ SI; 03039000
|
|
END MKABS; 03040000
|
|
REAL STREAM PROCEDURE BUILDFPB(DEST,FILNUM,FILTYP,MFID,FID,IDSZ, 03041000
|
|
IDNM,SPDEUN); 03042000
|
|
VALUE DEST,IDSZ,SPDEUN; 03043000
|
|
BEGIN 03044000
|
|
DI ~ DEST; 03045000
|
|
SI ~ FILNUM; SI ~ SI + 6; DS ~ 2 CHR; 03046000
|
|
SI ~ FILTYP; SI ~ SI + 7; DS ~ CHR; 03047000
|
|
SI ~ MFID; SI ~ SI + 1; DS ~ 7 CHR; 03048000
|
|
SI ~ FID; SI ~ SI + 1; DS ~ 7 CHR; 03049000
|
|
SI ~ LOC IDSZ; SI ~ SI + 7; DS ~ CHR; 03050000
|
|
SI ~ IDNM; SI ~ SI + 1; DS ~ IDSZ CHR; 03051000
|
|
SI~LOC SPDEUN;SI~SI+6;DS~2 CHR;% DISK SPEED & EU NUMBER+1 03051200
|
|
BUILDFPB ~ DI; 03052000
|
|
DS ~ 2 LIT "0"; 03053000
|
|
END BUILDFPB; 03054000
|
|
REAL STREAM PROCEDURE GITSZ(F); 03055000
|
|
BEGIN 03056000
|
|
SI ~ F; SI ~SI + 7; TALLY ~ 7; 03057000
|
|
3(IF SC ! " " THEN JUMP OUT; 03058000
|
|
SI ~SI - 1; TALLY ~ TALLY + 63;); 03059000
|
|
GITSZ ~ TALLY; 03060000
|
|
END GITSZ; 03061000
|
|
STREAM PROCEDURE MOVE(F,T,SZ); VALUE SZ; 03062000
|
|
BEGIN 03063000
|
|
SI ~ F; DI ~T; DS ~ SZ WDS; 03064000
|
|
END MOVE; 03065000
|
|
INTEGER PROCEDURE MOVEANDBLOCK(FROM,SIZE); VALUE SIZE; 03066000
|
|
ARRAY FROM[0,0]; INTEGER SIZE; 03067000
|
|
BEGIN 03068000
|
|
REAL T,NSEGS,J,I; 03069000
|
|
STREAM PROCEDURE M2(F,T); BEGIN SI~F; DI~T; DS ~ 2 WDS; END M2; 03070000
|
|
NSEGS ~ (SIZE+29) DIV 30; 03071000
|
|
IF DALOC DIV CHUNK < T ~ (DALOC + NSEGS) DIV CHUNK 03072000
|
|
THEN DALOC ~ CHUNK | T; 03073000
|
|
MOVEANDBLOCK ~ DALOC; 03074000
|
|
DO BEGIN FOR J ~ 0 STEP 2 WHILE J < 30 AND I<SIZE DO 03075000
|
|
BEGIN 03076000
|
|
M2(FROM[I.[36:5],I.[41:7]],CODE(J)); 03077000
|
|
I ~ I+2; 03078000
|
|
END; 03079000
|
|
WRITE(CODE[DALOC]); 03080000
|
|
DALOC ~ DALOC + 1; 03081000
|
|
END UNTIL I } SIZE; 03082000
|
|
END MOVEANDBLOCK; 03083000
|
|
STREAM PROCEDURE MDESC(VLU,PRT); VALUE VLU; 03084000
|
|
BEGIN 03085000
|
|
DI ~ LOC VLU; DS ~ SET; % FLAG BIT 03086000
|
|
DI ~ PRT; SI ~ LOC VLU; DS ~ WDS; 03087000
|
|
END MDESC; 03088000
|
|
INTEGER STREAM PROCEDURE MAKEINT(S); 03089000
|
|
BEGIN LABEL LOOP; LOCAL T; 03090000
|
|
SI ~ S; SI ~ SI + 3; 03091000
|
|
LOOP: IF SC } "0" THEN 03092000
|
|
BEGIN TALLY ~ TALLY + 1; SI ~ SI + 1; GO TO LOOP; END; 03093000
|
|
T ~ TALLY; SI ~ S; SI ~ SI + 3; DI ~ LOC MAKEINT; DS ~ T OCT; 03094000
|
|
END MAKEINT; 03095000
|
|
LABEL FOUND; 03096000
|
|
FORMAT 03097000
|
|
FILEF(A1, A6, X1, 03098000
|
|
"FILE IDENTIFIER, PRT IS ", A4, "."), 03099000
|
|
BLOKF(A6, X5, "COMMON BLOCK, PRT IS ", A4, 03100000
|
|
", LENGTH IS ", I5, " WORDS."); 03101000
|
|
COMMENT DUMP OUT ACCUMULATED FORMAT AND NAME ARRAYS; 03102000
|
|
IF FNNINDEX ! 0 THEN 03103000
|
|
BEGIN FNNPRT ~ PRGDESCBLDR(1,FNNPRT,0,NXAVIL ~ NXAVIL + 1); 03104000
|
|
WRITEDATA(FNNINDEX,NXAVIL,FNNHOLD); 03105000
|
|
END; 03106000
|
|
IF SAVESUBS > 0 THEN 03106100
|
|
BEGIN T1 ~ GET(T ~ GLOBALSEARCH(".SUBAR")+2); 03106125
|
|
PUT(T,T1~T1&SAVESUBS[TOSIZE]); 03106150
|
|
END; 03106175
|
|
T1~PRGDESCBLDR(1,23,0,NSEG~NXAVIL~NXAVIL+1) ; % BUILD TPAR 03106200
|
|
FILL LSTT[*] WITH 21(0),8(" ") ; % R+23 03106205
|
|
WRITEDATA(29,NXAVIL,LSTT) ; 03106210
|
|
PDPRT[(PDINX-1).[37:5],(PDINX-1).[42:6]].[6:1]~1 ; % SAVE BIT 03106215
|
|
T1 ~ PRGDESCBLDR(1,22,0,NSEG ~ NXAVIL ~ NXAVIL + 1); 03107000
|
|
WRITEDATA (138,NXAVIL,TEN); % POWERS OF TEN TABLE 03108000
|
|
IF LSTI > 0 THEN 03109000
|
|
BEGIN 03110000
|
|
WRITEDATA(LSTI, NXAVIL ~ NXAVIL+1, LSTP); 03111000
|
|
LSTA ~ PRGDESCBLDR(1, LSTA, 0, NXAVIL); 03112000
|
|
END; 03113000
|
|
IF TWODPRTX ! 0 THEN 03114000
|
|
BEGIN 03115000
|
|
FILL LSTT[*] WITH 03116000
|
|
OCT0000000421410010, 03117000
|
|
OCT0301001301412025, 03118000
|
|
OCT2021010442215055, 03119000
|
|
OCT2245400320211025, 03120000
|
|
OCT0106177404310415, 03121000
|
|
OCT1025042112350000; 03122000
|
|
T ~ PRGDESCBLDR(0, TWODPRTX, 0, NXAVIL ~ NXAVIL+1); 03123000
|
|
WRITEDATA(-6, NXAVIL, LSTT); 03124000
|
|
END; 03125000
|
|
COMMENT DECLARE GLOBAL FILES AND ARRAYS; 03126000
|
|
FPS ~ FPE ~ MKABS(FPB); 03127000
|
|
SEGMENTSTART; 03128000
|
|
F2TOG ~ TRUE; 03129000
|
|
GSEG ~ NSEG; 03130000
|
|
FPBI ~ 0; 03131000
|
|
EMITL(0); EMITL(2); EMITO(SSF); 03132000
|
|
EMITL(1); % SET BLOCK COUNTER TO 1 03133000
|
|
EMITL(16); EMITO(STD); 03134000
|
|
EMITL(0); EMITOPDCLIT(23); EMITO(DEL); 03138000
|
|
EMITL(REAL(HOLTOG)); EMITPAIR(21,STD); 03139000
|
|
I ~ GLOBALNEXTINFO; WHILE I < 4093 DO 03140000
|
|
BEGIN 03141000
|
|
I ~ I+3; 03142000
|
|
GETALL(I,INFA,INFB,INFC); 03143000
|
|
IF INFA.CLASS = FILEID THEN %SEE COMMENTS ON LINE 02118000 %992-03144000
|
|
BEGIN 03145000
|
|
FPBI ~ FPBI + 1; 03146000
|
|
PRI ~ INFA .ADDR; 03147000
|
|
IF (XTA ~ INFB ).[18:6] < 10 THEN 03148000
|
|
BEGIN 03149000
|
|
IF XTA ~ MAKEINT(XTA) > BIGGESTFILENB THEN FLAG(77) ELSE 03150000
|
|
FILES[XTA] ~ PRI; 03151000
|
|
IF XTA > THEBIGGEST THEN THEBIGGEST ~ XTA; 03152000
|
|
END; 03153000
|
|
EMITO(MKS); 03154000
|
|
IF J ~ INFC .ADINFO ! 0 THEN % OPTION FILE 03155000
|
|
BEGIN FILTYP ~ INFC .LINK; 03156000
|
|
IDNM ~ " "&"FILE"[6:24:24]&INFB[30:18:18]; 03157000
|
|
T1 ~ GITSZ(IDNM); 03158000
|
|
FID ~ FILEINFO[2,J]; 03159000
|
|
MFID ~ FILEINFO[1,J]; 03160000
|
|
IF FILTYP}10 AND (T~FILEINFO[3,J].DKAREASZ)!0 THEN 03161000
|
|
BEGIN %%% SET UP <DISK FILE DESCRIPTION>; 03162000
|
|
SPDEUN~FILEINFO[3,J].SENSPDEUNF; 03162005
|
|
B~IF (B~((J~FILEINFO[0,J]).[18:12])/(IF A~J.[30:12]{0 THEN03162007
|
|
1 ELSE A)){0 THEN 1 ELSE B ; 03162014
|
|
%%% B=ORIGINAL "BLOCKING" SIZE = # LOGRECS/PHYSREC. 03162020
|
|
A~ENTIER(B|ENTIER(T/(20|B)+.999999999)+.5) ; 03162030
|
|
%%% T="AREA" SIZE = # LOGRECS IN TOTAL FILE. 03162040
|
|
%%% A=# LOGRECS PER ROW. 03162050
|
|
B~ENTIER(T/A+.999999999) ; 03162060
|
|
%%% B = # ROWS IN FILE. 03162070
|
|
%%% EQUIVALENT ALGOL FILE DESCRIPTION = [B:A]. 03162080
|
|
%%% THE ABOVE LOGIC YIELDS: SHORTEST ROW CONTAINING 03162090
|
|
%%% AN INTEGER NUMBER OF PHYSICAL RECORDS AND WHICH 03162100
|
|
%%% REQUIRES 20 OR FEWER ROWS FOR THE TOTAL AREA, T.03162110
|
|
EMITNUM(B); EMITNUM(A) ; 03162120
|
|
END ELSE 03162129
|
|
BEGIN EMITL(0); EMITL(0); 03163000
|
|
J ~ FILEINFO[0,J]; % THIS ONE HAS ALL THE GOODIES 03164000
|
|
END; 03164010
|
|
QQQDISKDEFAULT: %503-03164045
|
|
ESTIMATE~ESTIMATE+(J.[42:6])|(IF A~J.[18:12]=0 THEN J.[30:12] 03164050
|
|
ELSE A) ; 03164100
|
|
EMITL(J.[4:2]); % LOCK 03165000
|
|
EMITL(FPBI); % FILE PARAM INDEX 03166000
|
|
03167000
|
|
EMITDESCLIT(PRI); % PRT OF FILE 03168000
|
|
EMITL(J.[42:6]); % # BUFFERS 03169000
|
|
EMITL(J.[3:1]); % RECORDING MODE 03170000
|
|
EMITNUM(J.[30:12]) ; % RECORD SIZE 03171000
|
|
EMITNUM(J.[18:12]) ; % BLOCK SIZE 03172000
|
|
EMITNUM(J.[ 6:12]) ; % SAVE FACTOR 03173000
|
|
END ELSE 03174000
|
|
BEGIN 03175000
|
|
ALF ~TRUE; 03176000
|
|
IF(FILTYP~INFC.LINK=2 OR FILTYP=12)AND INFB.[18:6]{9 THEN 03177000
|
|
IDNM ~ 0&"FILE"[6:24:24]&INFB[30:18:18] 03178000
|
|
ELSE 03179000
|
|
BEGIN 03180000
|
|
ALF ~ FALSE; 03181000
|
|
IF (IDNM ~ " "&INFB[6:18:30]) = "READR " THEN 03182000
|
|
IDNM ~ "READER "; 03183000
|
|
END; 03184000
|
|
IF IDNM="READER " OR IDNM="FILE5 " THEN IDNM~"CARD " ELSE %503-03184010
|
|
IF IDNM="FILE6 " THEN BEGIN IDNM~"PRINTER";FILTYP~18;END ELSE %503-03184020
|
|
BEGIN %503-03184030
|
|
EMITL(20); EMITL(600); FILTYP~12; %20 | 600 REC DISK %503-03184040
|
|
J~0&2[42:42:6]&10[30:36:12]&300[18:36:12]; %503-03184050
|
|
FID~IDNM; MFID~"FORTEMP"; T1~GITSZ(IDNM); %503-03184054
|
|
GO TO QQQDISKDEFAULT; %503-03184060
|
|
END; %503-03184070
|
|
T1 ~ GITSZ(IDNM); 03185000
|
|
FID ~ IDNM; 03186000
|
|
MFID ~ 0; 03187000
|
|
IF DCINPUT AND ALF THEN BEGIN 03187100
|
|
EMITL(20); % DISK ROWS 03187200
|
|
EMITL(100); % DISK RECORD PER ROW 03187300
|
|
EMITL(2); % REWIND AND LOCK 03187400
|
|
EMITL(FPBI); % FILE NUMBER 03187450
|
|
EMITDESCLIT(PRI); % PRT OF FILE 03187500
|
|
EMITL(2); % NUMBER OF BUFFERS 03187550
|
|
EMITL(1); % RECORDING MODE 03187600
|
|
EMITL(10); % RECORD SIZE 03187650
|
|
EMITL(30); % BLOCK SIZE 03187700
|
|
EMITL(1); % SAVE FACTOR 03187750
|
|
END ELSE 03187800
|
|
BEGIN 03187900
|
|
EMITL(0); % DISK ROWS 03188000
|
|
EMITL(0); % DISK RECORDS PER ROW 03189000
|
|
EMITL(0); % REWIND & RELEASE 03190000
|
|
EMITL(FPBI); % FILE NUMBER 03191000
|
|
03192000
|
|
EMITDESCLIT(PRI); % PRT OF FILE 03193000
|
|
EMITL(2); % 2 BUFFERS 03194000
|
|
EMITL(REAL(ALF)); 03195000
|
|
EMITL(IF FILTYP = 0 THEN 10 ELSE 17); 03196000
|
|
EMITL(0); % 15 WORD BUFFERS 03197000
|
|
EMITL(0); % SAVE FACTOR (SCRATCH BY DEFAULT) 03198000
|
|
END; 03198500
|
|
END; 03199000
|
|
EMITL(11); % INPUT OR OUTPUT 03200000
|
|
EMITL(8); % SWITCH CODE FOR BLOCK 03201000
|
|
EMITOPDCLIT(5); % CALL BLOCK 03202000
|
|
FPE~BUILDFPB(FPE,FPBI,FILTYP,MFID,FID,T1,IDNM,SPDEUN); 03203000
|
|
IF PRTOG THEN WRITALIST(FILEF,3,IDNM.[6:6],IDNM,B2D(PRI), 03204000
|
|
0,0,0,0,0) ; 03204010
|
|
END 03205000
|
|
ELSE 03206000
|
|
IF INFA.CLASS = BLOCKID THEN 03207000
|
|
BEGIN 03208000
|
|
IF PRTOG THEN WRITALIST(BLOKF,3,INFB,B2D(INFA.ADDR), 03209000
|
|
INFC.SIZE,0,0,0,0,0) ; 03210000
|
|
IF INFA < 0 THEN ARRAYDEC(I); 03211000
|
|
END; 03212000
|
|
IF (T1 ~ INFA .CLASS) } FUNID 03213000
|
|
AND T1 { SUBRID THEN 03214000
|
|
BEGIN 03215000
|
|
PRI ~ 0; 03216000
|
|
IF INFA .SEGNO = 0 THEN 03217000
|
|
BEGIN 03218000
|
|
A~0; B~NUMINTM1 ; 03219000
|
|
WHILE A+1 < B DO 03220000
|
|
BEGIN 03221000
|
|
PRI ~ REAL(BOOLEAN(A+B) AND BOOLEAN(1022)); 03222000
|
|
IF IDNM ~ INT[PRI] = INFB THEN GO TO FOUND; 03223000
|
|
IF INFB < IDNM THEN B ~ PRI.[36:11] ELSE A ~ PRI.[36:11]; 03224000
|
|
END; 03225000
|
|
IF IDNM ~ INT[PRI~(A+B)|2-PRI] = INFB THEN GO TO FOUND; 03226000
|
|
XTA ~ INFB; FLAG(30); 03227000
|
|
GO TO LA; 03228000
|
|
FOUND: 03229000
|
|
IF (T1~INT[PRI+1].INTPARMS)!0 03230000
|
|
AND INFC < 0 03231000
|
|
THEN IF T1 ! INFC.NEXTRA THEN 03232000
|
|
BEGIN XTA ~ INFB ; FLAG(28); END; 03233000
|
|
IF (FID~INTLOC[MFID~INT[PRI+1].INTNUM])=0 THEN 03234000
|
|
BEGIN 03235000
|
|
PDPRT[PDIR,PDIC] ~ 03236000
|
|
0&1[STYPC] 03237000
|
|
&MFID[DKAC] 03238000
|
|
&(FID ~ INTLOC[MFID] ~ NXAVIL ~ NXAVIL + 1)[SGNOC] 03239000
|
|
&1[SEGSZC]; 03240000
|
|
PDINX ~ PDINX + 1; 03241000
|
|
END; 03242000
|
|
T1 ~ PRGDESCBLDR(1,INFA .ADDR,0,FID); 03243000
|
|
IF PRTOG THEN WRITALIST(SEGUS,3,IDNM,FID,B2D(T1),0,0,0,0,0) ; 03244000
|
|
IF INT[PRI+1] < 0 THEN 03245000
|
|
BEGIN 03246000
|
|
T1 ~ PRGDESCBLDR(1,INT[PRI+1].INTPRT,0,FID); 03247000
|
|
INT[PRI+1] ~ ABS(INT[PRI + 1]); 03248000
|
|
END; 03249000
|
|
END 03250000
|
|
ELSE IF PRTOG THEN WRITALIST(SEGUS,3,INFB, 03251000
|
|
INFA.SEGNO,B2D(INFA.ADDR),0,0,0,0,0) ; 03252000
|
|
END; 03253000
|
|
LA: 03254000
|
|
END; 03255000
|
|
COMMENT MUST FOLLOW THE FOR STATEMENT; 03256000
|
|
IF FILEARRAYPRT ! 0 THEN 03257000
|
|
BEGIN % BUILDING OBJECT TIME FILE SEARCH ARRAY 03258000
|
|
J ~ PRGDESCBLDR(1,FILEARRAYPRT,0,NXAVIL ~ NXAVIL + 1); 03259000
|
|
WRITEDATA(THEBIGGEST + 1,NXAVIL,FILES); 03260000
|
|
END; 03261000
|
|
XTA ~ BLANKS; 03262000
|
|
IF NXAVIL > 1023 THEN FLAG(45); 03263000
|
|
IF PRTS > 1023 THEN FLAG(46); 03264000
|
|
IF STRTSEG = 0 THEN FLAG(65); 03265000
|
|
PRI ~ 0; 03266000
|
|
WHILE (IDNM ~ INT[PRI]) ! 0 DO 03267000
|
|
IF INT[PRI+1] } 0 THEN PRI ~ PRI + 2 ELSE 03268000
|
|
BEGIN 03269000
|
|
IF (FID~INTLOC[MFID~INT[PRI+1].INTNUM])=0 THEN 03270000
|
|
BEGIN 03271000
|
|
PDPRT[PDIR,PDIC] ~ 03272000
|
|
0&1[STYPC] 03273000
|
|
&MFID[DKAC] 03274000
|
|
&(FID ~ INTLOC[MFID] ~ NXAVIL ~ NXAVIL + 1)[SGNOC] 03275000
|
|
&1[SEGSZC]; 03276000
|
|
PDINX ~ PDINX + 1; 03277000
|
|
END; 03278000
|
|
T1 ~ PRGDESCBLDR(1,INT[PRI + 1].INTPRT,0,FID); 03279000
|
|
PRI ~ PRI+2; 03280000
|
|
END; 03281000
|
|
FOR I ~ 1 STEP 1 UNTIL BDX DO 03282000
|
|
BEGIN EMITO(MKS); EMITOPDCLIT(BDPRT[I]) END; 03283000
|
|
EMITO(MKS); 03284000
|
|
EMITOPDCLIT(STRTSEG.[18:15]); 03285000
|
|
T ~ PRGDESCBLDR(1,0,0,NSEG); 03288000
|
|
SEGMENT((ADR+4) DIV 4,NSEG,FALSE,EDOC); 03289000
|
|
IF ERRORCT ! 0 THEN GO TO ENDWRAPUP; 03290000
|
|
FILL SEG0[*] WITH 03291000
|
|
OCT020005, % BLOCK 03292000
|
|
OCT220014, % WRITE 03293000
|
|
OCT230015, % READ 03294000
|
|
OCT240016; % FILE CONTROL 03295000
|
|
COMMENT INTRINSIC FUNCTIONS; 03296000
|
|
FOR I ~ 0 STEP 1 UNTIL 3 DO 03297000
|
|
BEGIN 03298000
|
|
T1 ~ PRGDESCBLDR(1,SEG0[I].[36:12],0, 03299000
|
|
NSEG ~ NXAVIL ~ NXAVIL + 1); 03300000
|
|
PDPRT[PDIR,PDIC] ~ 03301000
|
|
0&1[STYPC] 03302000
|
|
&(SEG0[I].[30:6])[DKAC] 03303000
|
|
&NXAVIL[SGNOC] 03304000
|
|
&1[SEGSZC]; 03305000
|
|
PDINX ~ PDINX + 1; 03306000
|
|
END; 03307000
|
|
COMMENT GENERATE PRT AND SEGMENT DICTIONARY; 03308000
|
|
PRT[0,41] ~ PDPRT[0,0] & 63[10:42:6]; % USED FOR FAULT OPTN 03308100
|
|
FOR I ~ 1 STEP 1 UNTIL PDINX-1 DO 03309000
|
|
IF (T1~PDPRT[I.PDR,I.PDC]).SEGSZF = 0 THEN 03310000
|
|
BEGIN % PRT ENTRY 03311000
|
|
PRTADR ~T1.PRTAF; 03312000
|
|
SEGMNT ~T1.SGNOF; 03313000
|
|
LNK ~ SEGDICT[SEGMNT.[36:5], SEGMNT.[41:7]].PRTAF; 03314000
|
|
MDESC(T1.RELADF&SEGMNT[FFC] 03315000
|
|
&(REAL(LNK=0))[STOPC] 03316000
|
|
&(IF LNK=0 THEN SEGMNT ELSE LNK)[LINKC] 03317000
|
|
&(T1.DTYPF)[MODEC] 03318000
|
|
&5[1:45:3], 03319000
|
|
PRT[PRTADR.[36:5],PRTADR.[41:7]]); 03320000
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]].PRTLINKF ~ PRTADR; 03321000
|
|
END 03322000
|
|
ELSE 03323000
|
|
BEGIN % SEGMENT DICTIONARY ENTRY 03324000
|
|
SEGMNT ~ T1.SGNOF; 03325000
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]]~ 03326000
|
|
SEGDICT[SEGMNT.[36:5],SEGMNT.[41:7]] 03327000
|
|
&T1[SGLCC] 03328000
|
|
&T1[DKADRC] 03329000
|
|
& T1[4:12:1] 03329100
|
|
&T1[6:6:1] 03329200
|
|
&T1[1:1:2]; 03330000
|
|
TSEGSZ ~ TSEGSZ + T1.SEGSZF; 03331000
|
|
END; 03332000
|
|
COMMENT WRITE OUT FILE PARAMETER BLOCK; 03333000
|
|
FPBSZ ~ ((FPE.[33:15] - FPS) | 8 + FPE.[30:3] + 9) DIV 8; 03334000
|
|
I ~ (FPBSZ + 29) DIV 30; 03335000
|
|
IF DALOC DIV CHUNK < T1 ~ (DALOC +I) DIV CHUNK 03336000
|
|
THEN DALOC ~ CHUNK | T1; 03337000
|
|
SEG0[4] ~ DALOC; 03338000
|
|
SEG0[5] ~ FPBSZ; 03339000
|
|
SEG0[5].FPBVERSF~FPBVERSION; 03340000
|
|
FOR I ~ 0 STEP 30 WHILE I < FPBSZ DO 03341000
|
|
BEGIN 03342000
|
|
MOVE(FPB[I],CODE(0),IF (FPBSZ-I) } 30 03343000
|
|
THEN 30 ELSE (FPBSZ-I)); 03344000
|
|
WRITE(CODE[DALOC]); 03345000
|
|
DALOC ~ DALOC + 1; 03346000
|
|
END; 03347000
|
|
SEG0[2] ~ MOVEANDBLOCK(PRT,PRTS+1); % WRITES OUT PRT 03348000
|
|
% SAVES ADDRESS OF PRT 03349000
|
|
SEG0[3] ~ PRTS + 1; % SIZE OF PRT 03350000
|
|
SEG0[0] ~ MOVEANDBLOCK(SEGDICT,NXAVIL + 1); % WRITE SEG DICT 03351000
|
|
SEG0[1] ~ NXAVIL + 1; % SIZE OF SEGMENT DICTIONARY 03352000
|
|
SEG0[6] ~ -GSEG; % FIRST SEGMENT TO EXECUTE 03353000
|
|
SEG0[7].[33:15] ~ FPBI; % NUMBER OF FILES 03354000
|
|
SEG0[7].[18:15] ~ ESTIMATE ~ IF % CORE ESTIMATE 03355000
|
|
( I ~ 03356000
|
|
ESTIMATE+60+ %%% OPTION FILE BUFF SIZES + DEFAULT BUFF SIZES.03356100
|
|
PRTS + 512 % PRT AND STACK SIZE 03357000
|
|
+TSEGSZ % TOTAL SIZE OF CODE 03358050
|
|
+ 1022 % FOR INTRINSICS 03358050
|
|
+ARYSZ % TOTAL ARRAY SIZE 03359000
|
|
+ (MAXFILES | 28) % SIZE OF ALL FIBS 03360000
|
|
+FPBSZ % SIZE OF FILE PARAMETER BLOCK 03361000
|
|
+ (IF ESTIMATE = 0 THEN 0 ELSE (ESTIMATE + 1000)) 03361100
|
|
+ (NXAVIL + 1) % SIZE OF SEGMENT DICTIONARY 03362000
|
|
) > 32768 THEN 510 ELSE (I DIV 64); 03363000
|
|
COMMENT IF SEGSW THEN UPDATE LINDICT, SEG0[0] & WRITE IT ; 03363100
|
|
SEG0[7].[2:1] ~ 1; % USED FOR FORTRAN FAULT DEC; 03363150
|
|
IF SEGSW THEN 03363200
|
|
BEGIN 03363300
|
|
FOR I ~ NXAVIL + 1 STEP -1 UNTIL 1 DO 03363400
|
|
IF LINEDICT[I.IR,I.IC] = 0 THEN % INDICATE NO LINE SEGMENT 03363500
|
|
LINEDICT[I.IR,I.IC] ~ -1; % FOR THIS SEGMENT 03363600
|
|
SEG0[0] ~ SEG0[0] & (MOVEANDBLOCK(LINEDICT,NXAVIL+1))[TOBASE]; 03363700
|
|
END; 03363800
|
|
WRITE(CODE[0],30,SEG0[*]); 03364000
|
|
IF ERRORCT = 0 AND SAVETIME } 0 THEN LOCK(CODE); 03365000
|
|
ENDWRAPUP: 03366000
|
|
LOCK(TAPE); %RW/L TAPE FILE OR LOCK DISK %502-03366100
|
|
IF NTAPTOG THEN LOCK(NEWTAPE,*); %RW/L TAPE OR CRUNCH DISK%502-03366200
|
|
END WRAPUP; 03367000
|
|
PROCEDURE INITIALIZATION; 03368000
|
|
BEGIN COMMENT INITIALIZATION; 03369000
|
|
ALPHA STREAM PROCEDURE MKABS(P); 03370000
|
|
BEGIN SI ~ P; MKABS ~ SI END; 03371000
|
|
STREAM PROCEDURE BLANKOUT(CRD, N); VALUE N; 03372000
|
|
BEGIN DI ~ CRD; N(DS ~ LIT " ") END; 03373000
|
|
BLANKOUT(CRD[10], 40); 03374000
|
|
BLANKOUT(LASTSEQ, 8); 03374100
|
|
BLANKOUT(LASTERR,8) ; 03374200
|
|
INITIALNCR ~ MKABS(CRD[0])&6[30:45:3]; 03375000
|
|
CHR0 ~ MKABS(ACCUM[0])& 2[30:45:3]; 03376000
|
|
ACR0 ~ CHR0+1; 03377000
|
|
ACR1 ~ (CHR1~MKABS(EXACCUM[0]) & 2[30:45:3]) +1; 03378000
|
|
ACCUMSTOP~MKABS(ACCUM[11]); EXACCUMSTOP~MKABS(EXACCUM[11]) ; 03378100
|
|
BUFL ~ MKABS(BUFF) & 2[30:45:3]; 03379000
|
|
NEXTCARD ~ 1; 03380000
|
|
GLOBALNEXTINFO ~ 4093; 03381000
|
|
PDINX ~ 1; 03381100
|
|
LASTNEXT~1000 ; 03381200
|
|
PRTS ~ 41; % CURRENTLY . . . . . LAST USED PRT 03382000
|
|
READ(CR, 10, CB[*]); 03383000
|
|
LISTOG~TRUE; SINGLETOG~TRUE; CHECKTOG ~ FALSE; %DEFAULT %501- 03384000
|
|
FIRSTCALL ~ TRUE; 03385000
|
|
IF BOOLEAN(ERRORCT.[46:1]) THEN LISTOG ~ FALSE; 03385100
|
|
IF BOOLEAN(ERRORCT.[47:1]) THEN DCINPUT ~ TRUE; 03385200
|
|
ERRORCT ~ 0; 03385300
|
|
IF DCINPUT THEN SEGSW ~ TRUE; 03385350
|
|
IF DCINPUT THEN REMOTETOG ~ TRUE; 03385355
|
|
LIMIT~IF DCINPUT THEN 20 ELSE 100 ; 03385360
|
|
IF SEGSW THEN SEGSWFIXED ~ TRUE; 03385400
|
|
EXTRAINFO[0,0] ~ 0 & EXPCLASS[TOCLASS]; 03386000
|
|
NEXTEXTRA ~ 1; 03387000
|
|
LASTMODE ~ 1; 03387100
|
|
DALOC ~ 1; 03388000
|
|
TYPE ~ -1; 03389000
|
|
MAP[0] ~ MAP[2] ~ MAP[4] ~ MAP[7] ~ -10; 03390000
|
|
MAP[5] ~ 1; MAP[6] ~ 2; 03391000
|
|
FILL XR[*] WITH 0,0,0,0,0,0,0, 03391100
|
|
"INTEGE","R R"," "," "," REAL "," ", 03391200
|
|
"LOGICA","L L","DOUBLE"," ","COMPLE","X X", 03391300
|
|
"------","- -"," "," "," ---- "," ", 03391450
|
|
"------","- -","------"," ","------","- -"; 03391450
|
|
FILL TYPES[*] WITH " ","INTGER"," ","REAL ", 03392000
|
|
"LOGCAL", "DOUBLE", "COMPLX"; 03393000
|
|
FILL KLASS[*] WITH 03394000
|
|
"NULL ", "ARRAY ", "VARBLE", "STFUN ", 03395000
|
|
"NAMLST", "FORMAT", "ERROR ", "FUNCTN", 03396000
|
|
"INTRSC", "EXTRNL", "SUBRTN", "COMBLK", 03397000
|
|
"FILE "; 03398000
|
|
FILL RESERVEDWORDSLP[*] WITH 03399000
|
|
"CALL ","ENTR ","FORM ","GOTO ","IF ","READ ", 03400000
|
|
"REAL ","WRIT ","DATA ","CLOS ","LOCK ","PURG ","CHAI ", 03401000
|
|
"PRIN ","PUNC ", 03401100
|
|
0,"Y ","AT ",0,0,0,0,"E ",0,"E ",0,"E ",03401200
|
|
"N ","T ","H "; 03401300
|
|
FILL RESERVEDWORDS[*] WITH 03402000
|
|
"ASSI ","BACK ","BLOC ","CALL ","COMM ","COMP ","CONT ", 03403000
|
|
"DATA ","DIME ","DOUB ","END ","ENDF ","ENTR ","EQUI ", 03404000
|
|
"EXTE ","FUNC ","GOTO ","INTE ","LOGI ","NAME ","PAUS ", 03405000
|
|
"PRIN ","PROG ","PUNC ","READ ","REAL ","RETU ","REWI ", 03406000
|
|
"STOP ","SUBR ","WRIT ", 03407000
|
|
"CLOS ","LOCK ","PURG ", 03407100
|
|
0,0,0, 03407101
|
|
"FIXF ","VARY ","AUXM ","RELE ", 03407102
|
|
"IMPL ", 03407103
|
|
"GN ","SPACE ","KDATA ",0,"ON ","LEX ","INUE ", 03407200
|
|
0,"NSION ","LEPRECIS",0,"ILE ","Y ","VALENCE ","RNAL "03407300
|
|
,"TION ",0,"GER ","CAL ","LIST ","E ","T ",03407400
|
|
"RAM ","H ",0,0,"RN ","ND ",0,"OUTINE ", 03407500
|
|
"E ","E ",0,"E ",0,0,0,"D ","ING ", 03407600
|
|
"EM ","ASE " 03407601
|
|
,"ICIT " 03407602
|
|
; 03407990
|
|
FILL RESLENGTHLP[*] WITH 03408000
|
|
4,5,6,4,2,4,4,5,4,5,4,5,5,5,5; 03409000
|
|
FILL LPGLOBAL[*] WITH 03410000
|
|
4, 13, 36, 17, 35, 25, 03411000
|
|
26, 31, 8, 32, 33, 34, 37, 22, 24; 03411100
|
|
FILL RESLENGTH[*] WITH 03412000
|
|
0, 9, 9, 4, 6, 03413000
|
|
7, 8, 4, 9, 15, 03414000
|
|
3, 7, 5, 11, 8, 03415000
|
|
8, 4, 7, 7, 8, 03416000
|
|
5, 5, 7, 5, 4, 03417000
|
|
4, 6, 6, 4, 10, 5, 03418000
|
|
5, 4, 5, 0, 0, 0, 5, 7, 6, 7 03418100
|
|
,8 03418101
|
|
; 03418990
|
|
FILL WOP[*] WITH 03419000
|
|
"LITC"," ", 03420000
|
|
"OPDC","DESC", 03421000
|
|
10,"DEL ", 11,"NOP ", 12,"XRT ", 16,"ADD ", 17,"AD2 ", 18,"PRL ", 03422000
|
|
19,"LNG ", 21,"GEQ ", 22,"BBC ", 24,"INX ", 35,"LOR ", 37,"GTR ", 03423000
|
|
38,"BFC ", 39,"RTN ", 40,"COC ", 48,"SUB ", 49,"SB2 ", 64,"MUL ", 03424000
|
|
65,"ML2 ", 67,"LND ", 68,"STD ", 69,"NEQ ", 70,"SSN ", 71,"XIT ", 03425000
|
|
72,"MKS ", 03426000
|
|
128,"DIV ",129,"DV2 ",130,"COM ",131,"LQV ",132,"SND ",133,"XCH ", 03427000
|
|
134,"CHS ",167,"RTS ",168,"CDC ",197,"FTC ",260,"LOD ",261,"DUP ", 03428000
|
|
278,"GBC ",280,"SSF ",294,"GFC ",322,"ZP1 ",384,"IDV ",453,"FTF ", 03429000
|
|
515,"MDS ",532,"ISD ",533,"LEQ ",534,"BBW ",548,"ISN ",549,"LSS ", 03430000
|
|
550,"BFW ",581,"EQL ",582,"SSP ",584,"ECM ",709,"CTC ",790,"GBW ", 03431000
|
|
806,"GFW ",896,"RDV ",965,"CTF ", 03432000
|
|
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, 1023; 03433000
|
|
FILL TIPE[*] WITH 10(-1),-19,-21,OCT300000000,-21,-2,-3,-4, 03433100
|
|
8(OCT300000000),OCT100000000,-5,-13,-4,-6,-7,-19,-11, 03433110
|
|
5(OCT100000000),-8,3(OCT300000000),-9,-10,-12,-13,-14,03433120
|
|
-15,-100,-16,8(OCT300000000),-17,-6,-18,-19,-20,-21 ; 03433130
|
|
FILL PERIODWORD[*] WITH 03434000
|
|
"FALSE ", "TRUE ", "OR ", "AND ", "NOT ", 03435000
|
|
"LT ", "LE ", "EQ ", "GT ", "GE ", "NE "; 03436000
|
|
ACCUM[0] ~ EXACCUM[0] ~ "; "; 03437000
|
|
INCLUDE := "NCLUDE" & "I"[6:42:6]; 03437100
|
|
INSERTDEPTH := -1; 03437110
|
|
FILL TEN[*] WITH % POWERS OF TEN TO PRT 22 03438000
|
|
OCT1141000000000000, OCT1131200000000000, OCT1121440000000000,03439000
|
|
OCT1111750000000000, OCT1102342000000000, OCT1073032400000000,03440000
|
|
OCT1063641100000000, OCT1054611320000000, OCT1045753604000000,03441000
|
|
OCT1037346545000000, OCT1011124027620000, OCT0001351035564000,03442000
|
|
OCT0011643245121000, OCT0022214116345200, OCT0032657142036440,03443000
|
|
OCT0043432772446150, OCT0054341571157602, OCT0065432127413542,03444000
|
|
OCT0076740555316473, OCT0111053071060221, OCT0121265707274265,03445000
|
|
OCT0131543271153342, OCT0142074147406233, OCT0152513201307702,03446000
|
|
OCT0163236041571663, OCT0174105452130240, OCT0205126764556310,03447000
|
|
OCT0216354561711772, OCT0231004771627437, OCT0241206170175346,03448000
|
|
OCT0251447626234640, OCT0261761573704010, OCT0272356132665012,03449000
|
|
OCT0303051561442215, OCT0313664115752660, OCT0324641141345435,03450000
|
|
OCT0336011371636744, OCT0347413670206535, OCT0361131664625026,03451000
|
|
OCT0371360241772234, OCT0401654312370703, OCT0412227375067064,03452000
|
|
OCT0422675274304701, OCT0433454553366061, OCT0444367706263475,03453000
|
|
OCT0455465667740415, OCT0467003245730520, OCT0501060411731664,03454000
|
|
OCT0511274514320241, OCT0521553637404312, OCT0532106607305374,03455000
|
|
OCT0542530351166673, OCT0553256443424452, OCT0564132154331565,03456000
|
|
OCT0575160607420123, OCT0606414751324147, OCT0621012014361120,03457000
|
|
OCT0631214417455344, OCT0641457523370635, OCT0651773450267004,03458000
|
|
OCT0662372362344605, OCT0673071057035747, OCT0703707272645341,03459000
|
|
OCT0714671151416631, OCT0726047403722377, OCT0737461304707077,03460000
|
|
OCT0751137556607071, OCT0761367512350710, OCT0771665435043072,03461000
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,03462000
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,03463000
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,03464000
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,03465000
|
|
OCT0000000000000000, OCT0000000000000000, OCT0000000000000000,03466000
|
|
OCT0000000000000000, OCT0000000000000000, OCT0004000000000000,03467000
|
|
OCT0001000000000000, OCT0001720000000000, OCT0004304000000000,03468000
|
|
OCT0007365000000000, OCT0005262200000000, OCT0004536640000000,03469000
|
|
OCT0001666410000000, OCT0000244112000000, OCT0000315134400000,03470000
|
|
OCT0000400363500000, OCT0000450046042000, OCT0006562057452400,03471000
|
|
OCT0004316473365100, OCT0005402212262320, OCT0006702654737004,03472000
|
|
OCT0004463430126605, OCT0007600336154346, OCT0001540425607437,03473000
|
|
OCT0004070533151347, OCT0005106662003641, OCT0005033043640461,03474000
|
|
OCT0002241654610575, OCT0002712227752734, OCT0001474675745524,03475000
|
|
OCT0002014055337051, OCT0004417070626663, OCT0007522706774440,03476000
|
|
OCT0003447470573550, OCT0006361406732502, OCT0005005571052122,03477000
|
|
OCT0006207127264547, OCT0001650755141700, OCT0006223150372260,03478000
|
|
OCT0007670002470733, OCT0007646003207120, OCT0005617404050743,03479000
|
|
OCT0001163305063137, OCT0007420166277771, OCT0001732422375777,03480000
|
|
OCT0002321127075377, OCT0003005354714677, OCT0005606650100057,03481000
|
|
OCT0007150422120072, OCT0003002526544103, OCT0001603254275130,03482000
|
|
OCT0004144127354356, OCT0007175155247451, OCT0007034410521363,03483000
|
|
OCT0007664351264566, OCT0003641443541723, OCT0004611754472310;03484000
|
|
FILL INLINEINT[*] WITH % FILLS MUST BE IN ASCENDING ORDER FOR 03484100
|
|
% BINARY SEARCH IN FUNCTION AND DOITINLINE. 03484120
|
|
% INLINEINT[I].[1:1] = 1 ONCE CODE FOR INTRINSIC 03484122
|
|
% HAS BEEN EMITTED INLINE.03484124
|
|
% INLINEINT[I].[2:10]=INDEX INTO 2-ND WORD OF THE03484126
|
|
% CORR ENTRY IN INT. 03484128
|
|
% INLINEINT[I].[12:36]=NAME OF INTRINSIC. 03484130
|
|
%********FIRST FILL MUST BE NUMBER OF INTRINSICS ****************** 03484140
|
|
34, 03484160
|
|
"00ABS ", 03484180
|
|
"00AIMAG ", 03484200
|
|
"00AINT ", 03484220
|
|
"00AMAX0 ", 03484224
|
|
"00AMAX1 ", 03484228
|
|
"00AMIN0 ", 03484232
|
|
"00AMIN1 ", 03484236
|
|
"00AMOD ", 03484240
|
|
"00AND ", 03484260
|
|
"00CMPLX ", 03484280
|
|
"00COMPL ", 03484300
|
|
"00CONJG ", 03484320
|
|
"00DABS ", 03484340
|
|
"00DBLE ", 03484360
|
|
"00DIM ", 03484380
|
|
"00DSIGN ", 03484400
|
|
"00EQUIV ", 03484420
|
|
"00FLOAT ", 03484440
|
|
"00IABS ", 03484460
|
|
"00IDIM ", 03484480
|
|
"00IDINT ", 03484500
|
|
"00IFIX ", 03484520
|
|
"00INT ", 03484540
|
|
"00ISIGN ", 03484560
|
|
"00MAX0 ", 03484564
|
|
"00MAX1 ", 03484568
|
|
"00MIN0 ", 03484572
|
|
"00MIN1 ", 03484576
|
|
"00MOD ", 03484580
|
|
"00OR ", 03484600
|
|
"00REAL ", 03484620
|
|
"00SIGN ", 03484640
|
|
"00SNGL ", 03484660
|
|
"00TIME ", 03484680
|
|
0 ; 03484990
|
|
FILL INT [*] WITH 03485000
|
|
COMMENT THESE NAMES (1-ST WORD OF EACH TWO-WORD ENTRY) MUST BE IN 03486000
|
|
ASCENDING ORDER FOR BINARY LOOKUPS. 03486010
|
|
THE SECOND WORD HAS THE FOLLOWING FORMAT: 03486020
|
|
.[1:1] = 0 IF THE INTRINSIC DOES NOT HAVE A PERMANENT PRT 03486030
|
|
LOCATION, OTHERWISE = 1. MAY BE RESET BY 03486040
|
|
WRAPUP. SEE .[18:6] BELOW. 03486050
|
|
.[2:1] = .INTSEEN = 1 IFF INTRINSICS FUNCTION HAS BEEN SEEN. 03486055
|
|
.[6:3] = .INTCLASS = CLASS OF THE INTRINSIC. 03486060
|
|
.[9:3] = .INTPARMCLASS = CLASS OF PARAMETERS. 03486070
|
|
.[12:6] = .INTINLINE = INDEX FOR DOITINLINE IF !0, OTHERWISE 03486080
|
|
DO IT VIA INTRINSIC CALL. 03486090
|
|
.[24:6] = .INTPRT = FIXED PRT LOCATION. SEE .[1:1] ABOVE. 03486100
|
|
.[30:6] = .INTPARMS = NUMBER OF PARAMETERS REQUIRED BY THE INT.03486110
|
|
.[36:12] = .INTNUM = INTRINSICS NUMBER. 03486120
|
|
THE FIELDS .[3:3] AND .[18:6] ARE SO FAR UNUSED. 03486130
|
|
; 03486140
|
|
% 03486144
|
|
%***********************************************************************03486145
|
|
%********* IF YOU ADD AN INTRINSIC, BE SURE TO CHANGE NUMINTM1 *******03486146
|
|
%********* AT SEQUENCE NUMBER 00155211.......THANK YOU. *******03486147
|
|
%***********************************************************************03486148
|
|
% 03486149
|
|
"ABS ", OCT0033010000010007, 03487000
|
|
"AIMAG ", OCT0036020000010074, 03488000
|
|
"AINT ", OCT0033030000010054, 03489000
|
|
"ALGAMA", OCT0033000000010127, 03490000
|
|
"ALOG10", OCT0033000000010103, 03491000
|
|
"ALOG ", OCT2033000035010017, 03492000
|
|
"AMAX0 ", OCT0031250000000031, 03493000
|
|
"AMAX1 ", OCT0033250000000031, 03494000
|
|
"AMIN0 ", OCT0031250000000032, 03495000
|
|
"AMIN1 ", OCT0033250000000032, 03496000
|
|
"AMOD ", OCT0033040000020063, 03497000
|
|
"AND ", OCT0033050000020130, 03498000
|
|
"ARCOS ", OCT0033000000010117, 03499000
|
|
"ARSIN ", OCT2033000032010116, 03500000
|
|
"ATAN2 ", OCT2033000044020114, 03501000
|
|
"ATAN ", OCT2033000037010016, 03501500
|
|
"CABS ", OCT2036000045010053, 03502000
|
|
"CCOS ", OCT0066000000010110, 03503000
|
|
"CEXP ", OCT0066000000010100, 03504000
|
|
"CLOG ", OCT0066000000010102, 03505000
|
|
"CMPLX ", OCT0063060000020075, 03506000
|
|
"COMPL ", OCT0033070000010132, 03507000
|
|
"CONCAT", OCT0033000000050140, 03508000
|
|
"CONJG ", OCT0066110000010076, 03509000
|
|
"COSH ", OCT0033000000010121, 03510000
|
|
"COS ", OCT0033000000010015, 03511000
|
|
"COTAN ", OCT0033000000010112, 03512000
|
|
"CSIN ", OCT0066000000010106, 03513000
|
|
"CSQRT ", OCT0066000000010124, 03514000
|
|
"DABS ", OCT0055010000010052, 03515000
|
|
"DATAN2", OCT0055000000020115, 03516000
|
|
"DATAN ", OCT2055000041010113, 03517000
|
|
"DBLE ", OCT0053120000010062, 03518000
|
|
"DCOS ", OCT0055000000010107, 03519000
|
|
"DEXP ", OCT2055000047010077, 03520000
|
|
"DIM ", OCT0033100000020072, 03521000
|
|
"DLOG10", OCT0055000000010104, 03522000
|
|
"DLOG ", OCT2055000042010101, 03522500
|
|
"DMAX1 ", OCT0055000000000066, 03523000
|
|
"DMIN1 ", OCT0055000000000067, 03524000
|
|
"DMOD ", OCT2055000046020065, 03525000
|
|
"DSIGN ", OCT0055130000020071, 03526000
|
|
"DSIN ", OCT2055000043010105, 03527000
|
|
"DSQRT ", OCT2055000050010123, 03528000
|
|
"EQUIV ", OCT0033140000020133, 03529000
|
|
"ERF ", OCT0033000000010125, 03530000
|
|
"EXP ", OCT2033000033010020, 03531000
|
|
"FLOAT ", OCT0031150000010060, 03532000
|
|
"GAMMA ", OCT2033000040010126, 03533000
|
|
"IABS ", OCT0011010000010007, 03534000
|
|
"IDIM ", OCT0011100000020072, 03535000
|
|
"IDINT ", OCT0015240000010057, 03536000
|
|
"IFIX ", OCT0013030000010054, 03537000
|
|
"INT ", OCT0013030000010054, 03538000
|
|
"ISIGN ", OCT0011160000020070, 03539000
|
|
".ERR. ", OCT2000000030000134, 03540000
|
|
".FBINB", OCT0000000000000160, 03540500
|
|
".FINAM", OCT0000000000000154, 03541000
|
|
".FONAM", OCT0000000000000155, 03542000
|
|
".FREFR", OCT0000000000000146, 03543000
|
|
".FREWR", OCT0000000000000153, 03544000
|
|
".FTINT", OCT0000000000000050, 03545000
|
|
".FTNIN", OCT0000000000000156, 03546000
|
|
".FTNOU", OCT0000000000000157, 03547000
|
|
".FTOUT", OCT0000000000000051, 03548000
|
|
".LABEL", OCT0000000000000021, 03549000
|
|
".MATH ", OCT0000000000000055, 03550000
|
|
".MEMHR", OCT0000000000000164, 03550500
|
|
".XTOI ", OCT0000000000000056, 03551000
|
|
"MAX0 ", OCT0011250000000135, 03552000
|
|
"MAX1 ", OCT0013250000000135, 03553000
|
|
"MIN0 ", OCT0011250000000136, 03554000
|
|
"MIN1 ", OCT0013250000000136, 03555000
|
|
"MOD ", OCT0011170000020137, 03556000
|
|
"OR ", OCT0033200000020131, 03557000
|
|
"REAL ", OCT0036210000010073, 03558000
|
|
"SIGN ", OCT0033160000020070, 03559000
|
|
"SINH ", OCT0033000000010120, 03560000
|
|
"SIN ", OCT2033000034010014, 03561000
|
|
"SNGL ", OCT0035230000010061, 03562000
|
|
"SQRT ", OCT2033000031010013, 03563000
|
|
"TANH ", OCT0033000000010122, 03563010
|
|
"TAN ", OCT2033000036010111, 03563020
|
|
"TIME ", OCT0031220000010064, 03563030
|
|
0; 03563900
|
|
BLANKS~INLINEINT[MAX~0] ; 03563910
|
|
FOR SCN~1 STEP 1 UNTIL BLANKS DO 03563920
|
|
BEGIN 03563930
|
|
EQVID~INLINEINT[SCN]; WHILE INT[MAX]!EQVID DO MAX~MAX+2 ; 03563940
|
|
INLINEINT[SCN].INTX~MAX+1 ; 03563950
|
|
END ; 03563960
|
|
INTID.SUBCLASS ~ INTYPE; 03564000
|
|
REALID.SUBCLASS ~ REALTYPE; 03565000
|
|
EQVID ~ ".EQ000"; 03566000
|
|
LISTID ~ ".LI000"; 03567100
|
|
BLANKS ~ " "; 03568000
|
|
ENDSEGTOG ~ TRUE; 03569000
|
|
SCN ~ 7; 03570000
|
|
MAX ~ REAL(NOT FALSE).[9:39]; 03571000
|
|
SUPERMAXCOM~128|(MAXCOM+1) ; 03571100
|
|
SEGPTOG ~ FALSE; %INHIBIT PAGE SKIP AFTER SUBROUTINES %501- 03571300
|
|
END INITIALIZATION; 03572000
|
|
ALPHA PROCEDURE NEED(T, C); VALUE T, C; ALPHA T, C; 03573000
|
|
BEGIN INTEGER N; REAL ELBAT; 03574000
|
|
REAL X; 03574100
|
|
LABEL XIT, CHECK; 03575000
|
|
ALPHA INFA, INFB, INFC; 03576000
|
|
COMMENT NEED RETURNS THE ELBAT WORD FOR THE IDENTIFIER T. 03577000
|
|
IF THIS IS THE FIRST OCCURRENCE OF T THEN AN INFO WORD IS BUILT AND 03578000
|
|
GIVEN THEN CLASS C; 03579000
|
|
ELBAT.CLASS ~ C; 03580000
|
|
XTA ~ T; 03581000
|
|
IF C { LABELID THEN 03582000
|
|
BEGIN 03583000
|
|
IF N ~ SEARCH(T) = 0 THEN N ~ ENTER(ELBAT, T) ELSE 03584000
|
|
IF ELBAT ~ GET(N).CLASS = UNKNOWN 03585000
|
|
THEN PUT(N,GET(N)&C[TOCLASS]) 03586000
|
|
ELSE IF ELBAT ! C THEN FLOG(21); 03587000
|
|
GO TO XIT; 03588000
|
|
END; 03589000
|
|
IF N ~ SEARCH(T) = 0 THEN 03590000
|
|
BEGIN 03591000
|
|
IF N ~ GLOBALSEARCH(T) ! 0 THEN GO TO CHECK; 03592000
|
|
N ~ GLOBALENTER(ELBAT, T); 03593000
|
|
GO TO XIT; 03594000
|
|
END; 03595000
|
|
GETALL(N,INFA,INFB,INFC); 03596000
|
|
IF INFA.CLASS = DUMMY THEN BEGIN N ~ INFC.BASE; GO TO CHECK END; 03596100
|
|
IF BOOLEAN(INFA. FORMAL) THEN GO TO CHECK; 03597000
|
|
IF INFA.CLASS ! UNKNOWN THEN 03598000
|
|
BEGIN 03599000
|
|
IF N ~ GLOBALSEARCH(T) ! 0 THEN GO TO CHECK; 03600000
|
|
ELBAT.SUBCLASS ~ INFA.SUBCLASS; 03601000
|
|
N ~ GLOBALENTER(ELBAT, T); 03602000
|
|
GO TO XIT; 03603000
|
|
END; 03604000
|
|
PUT(N, INFA & DUMMY[TOCLASS]); 03605000
|
|
ELBAT.SUBCLASS ~ INFA .SUBCLASS; 03606000
|
|
IF X ~ GLOBALSEARCH(T) = 0 THEN X ~ GLOBALENTER(ELBAT, T); 03607000
|
|
PUT(N+2, INFC & X[TOBASE]); N ~ X; 03607100
|
|
CHECK: 03608000
|
|
INFA ~ GET(N); 03609000
|
|
IF ELBAT ~ INFA .CLASS = UNKNOWN THEN 03610000
|
|
BEGIN INFO[N.IR,N.IC].CLASS ~ C; GO TO XIT END; 03611000
|
|
IF ELBAT ! C THEN 03612000
|
|
IF ELBAT = EXTID AND 03613000
|
|
(C = SUBRID OR C = FUNID) THEN 03614000
|
|
INFO[N.IR,N.IC].CLASS ~ C 03615000
|
|
ELSE IF (ELBAT=SUBRID OR ELBAT= FUNID) AND C = EXTID THEN 03616000
|
|
ELSE FLOG(21); 03617000
|
|
XIT: NEED ~ GETSPACE(N); 03618000
|
|
XTA ~ NAME; % RESTORE XTA FOR DIAGNOSTIC PURPOSES 03618100
|
|
END NEED; 03619000
|
|
INTEGER PROCEDURE EXPR(B); VALUE B; BOOLEAN B; FORWARD; 03620000
|
|
PROCEDURE SPLIT(A); VALUE A; REAL A; 03621000
|
|
BEGIN 03622000
|
|
EMITPAIR(JUNK, ISN); 03623000
|
|
EMITD(40, DIA); 03624000
|
|
EMITD(18, ISO); 03625000
|
|
EMITDESCLIT(A); 03626000
|
|
EMITO(LOD); 03627000
|
|
EMITOPDCLIT(JUNK); 03628000
|
|
EMITPAIR(255,CHS); 03629000
|
|
EMITO(LND); 03630000
|
|
END SPLIT; 03631000
|
|
BOOLEAN PROCEDURE SUBSCRIPTS(LINK,FROM); VALUE LINK,FROM; 03632000
|
|
INTEGER LINK, FROM; 03633000
|
|
BEGIN INTEGER I, NSUBS, BDLINK; 03634000
|
|
LABEL CONSTRUCT, XIT; 03635000
|
|
REAL SUM, PROD, BOUND; 03636000
|
|
REAL INFA,INFB,INFC; 03637000
|
|
REAL SAVENSEG,SAVEADR ; 03637100
|
|
INTEGER INDX; 03637200
|
|
REAL INFD; 03637300
|
|
BOOLEAN TOG, VARF; 03638000
|
|
REAL SAVIT; 03639000
|
|
DEFINE SS = LSTT#; 03640000
|
|
03641000
|
|
03642000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUBSC","RIPTS ",TRUE ) ; 03643000
|
|
SAVIT ~ IT; 03644000
|
|
LINK ~ GETSPACE(LINK); 03645000
|
|
GETALL(LINK,INFA,INFB,INFC); 03646000
|
|
IF INFA.CLASS ! ARRAYID THEN 03647000
|
|
BEGIN XTA ~ INFB; FLOG(35); GO TO XIT END; 03648000
|
|
NSUBS ~ INFC.NEXTRA; 03649000
|
|
IF FROM = 4 THEN 03649100
|
|
BEGIN IF NSUBS GTR SAVESUBS THEN SAVESUBS ~ NSUBS; 03649200
|
|
IF NSUBS GTR NAMLIST[0] THEN NAMLIST[0] ~ NSUBS; 03649230
|
|
NAMLIST[NAMEIND].[1:8] ~ NSUBS; 03649250
|
|
INFD ~ GET(NEED(".SUBAR",BLOCKID)).ADDR; 03649300
|
|
END; 03649400
|
|
BDLINK ~ INFC.ADINFO-NSUBS+1; 03650000
|
|
VARF ~ INFC < 0; 03651000
|
|
FOR I ~ 1 STEP 1 UNTIL NSUBS DO 03652000
|
|
BEGIN 03653000
|
|
IT~IT+1; SAVENSEG~NSEG; SAVEADR~ADR ; 03654000
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(98); 03655000
|
|
IF ADR=SAVEADR THEN FLAG(36) ; 03655500
|
|
IF VARF THEN 03656000
|
|
IF EXPRESULT=NUMCLASS AND NSEG=SAVENSEG THEN 03657000
|
|
BEGIN 03658000
|
|
ADR~SAVEADR ; 03659000
|
|
EMITNUM(EXPVALUE-1); 03660000
|
|
END ELSE EMITPAIR(1, SUB) 03661000
|
|
ELSE 03662000
|
|
IF EXPRESULT=NUMCLASS AND NSEG = SAVENSEG AND FROM NEQ 4 THEN 03663000
|
|
BEGIN 03664000
|
|
ADR~SAVEADR; IF SS[IT]~EXPVALUE{0 THEN FLAG(154) ; 03664100
|
|
END 03664200
|
|
ELSE SS[IT] ~ @9; 03665000
|
|
IF FROM = 4 THEN 03665010
|
|
BEGIN IF VARF THEN BEGIN EMITO(DUP); EMITPAIR(1,ADD); END; 03665100
|
|
EMITL(INDX); INDX ~ INDX+1; 03665200
|
|
EMITDESCLIT(INFD); 03665300
|
|
EMITO(IF VARF THEN STD ELSE STN); 03665400
|
|
END; 03665500
|
|
IF I < NSUBS THEN 03666000
|
|
BEGIN 03667000
|
|
IF GLOBALNEXT ! COMMA THEN 03668000
|
|
BEGIN XTA ~ INFB; FLOG(23) END; 03669000
|
|
SCAN; 03670000
|
|
END; 03671000
|
|
END; 03672000
|
|
IF GLOBALNEXT ! RPAREN THEN BEGIN XTA ~ INFB; FLOG(24); END 03673000
|
|
ELSE IF FROM < 2 THEN 03673100
|
|
BEGIN SCAN; IF PREC > 0 THEN FROM ~ 1; END; 03673200
|
|
SUM ~ 0; 03674000
|
|
TOG ~ VARF; 03675000
|
|
IF VARF THEN 03676000
|
|
FOR I ~ NSUBS-1 STEP -1 UNTIL 1 DO 03677000
|
|
BEGIN 03678000
|
|
IF BOUND ~ EXTRAINFO[(BDLINK~BDLINK+1).IR,BDLINK.IC] < 0 THEN 03679000
|
|
EMITOPDCLIT(BOUND) ELSE EMITNUM(BOUND); 03680000
|
|
EMITO(MUL); 03681000
|
|
EMITO(ADD); 03682000
|
|
END 03683000
|
|
ELSE 03684000
|
|
FOR I ~ NSUBS STEP -1 UNTIL 1 DO 03685000
|
|
BEGIN 03686000
|
|
IF I = 1 THEN BOUND ~ 1 ELSE 03687000
|
|
BOUND ~ EXTRAINFO[(BDLINK~BDLINK+1).IR,BDLINK.IC]; 03688000
|
|
IF T ~ SS[SAVIT+I] < @9 THEN 03689000
|
|
BEGIN 03690000
|
|
SUM ~ (SUM+T-1)|BOUND; 03691000
|
|
IF TOG THEN PROD ~ PROD|BOUND; 03692000
|
|
END 03693000
|
|
ELSE 03694000
|
|
BEGIN 03695000
|
|
IF TOG THEN BEGIN EMITNUM(PROD); EMITO(MUL); EMITO(ADD) END 03696000
|
|
ELSE TOG ~ TRUE; 03697000
|
|
PROD ~ BOUND; 03698000
|
|
SUM ~ (SUM-1)|BOUND; 03699000
|
|
END; 03700000
|
|
END; 03701000
|
|
IF VARF THEN T ~ @9; 03702000
|
|
IF INFA.SUBCLASS } DOUBTYPE THEN 03703000
|
|
BEGIN 03704000
|
|
IF TOG THEN 03705000
|
|
BEGIN 03706000
|
|
IF T < @9 THEN EMITNUM(2|PROD) ELSE EMITL(2); 03707000
|
|
EMITO(MUL); 03708000
|
|
END; 03709000
|
|
SUM ~ SUM|2; 03710000
|
|
END ELSE 03711000
|
|
IF T < @9 AND TOG THEN BEGIN EMITNUM(PROD); EMITO(MUL) END; 03712000
|
|
IF BOOLEAN(INFA.CE) THEN 03713000
|
|
SUM ~ SUM + INFC.BASE ELSE 03714000
|
|
IF BOOLEAN(INFA.FORMAL) THEN 03715000
|
|
BEGIN EMITOPDCLIT(INFA.ADDR-1); 03716000
|
|
IF TOG THEN EMITO(ADD) ELSE TOG ~ TRUE; 03717000
|
|
END; 03718000
|
|
IF BOOLEAN(INFA.TWOD) AND FROM > 0 THEN 03719000
|
|
BEGIN 03720000
|
|
IF SUM = 0 THEN 03721000
|
|
IF TOG THEN ELSE 03722000
|
|
BEGIN 03723000
|
|
EMITL(0); 03724000
|
|
EMITDESCLIT(INFA.ADDR); 03725000
|
|
EMITO(LOD); 03726000
|
|
EMITL(0); 03727000
|
|
GO TO CONSTRUCT; 03728000
|
|
END 03729000
|
|
ELSE 03730000
|
|
IF TOG THEN 03731000
|
|
BEGIN 03732000
|
|
EMITNUM(ABS(SUM)); 03733000
|
|
IF SUM < 0 THEN EMITO(SUB) ELSE EMITO(ADD); 03734000
|
|
END ELSE 03735000
|
|
BEGIN 03736000
|
|
EMITL(SUM.[33:7]); 03737000
|
|
EMITDESCLIT(INFA.ADDR); 03738000
|
|
EMITO(LOD); 03739000
|
|
EMITL(SUM.[40:8]); 03740000
|
|
GO TO CONSTRUCT; 03741000
|
|
END; 03742000
|
|
SPLIT(INFA.ADDR); 03743000
|
|
CONSTRUCT: 03744000
|
|
IF BOOLEAN(FROM) THEN 03745000
|
|
BEGIN 03746000
|
|
IF INFA.SUBCLASS } DOUBTYPE THEN 03747000
|
|
BEGIN 03748000
|
|
EMITO(CDC); 03749000
|
|
EMITO(DUP); 03750000
|
|
EMITPAIR(1, XCH); 03751000
|
|
EMITO(INX); 03752000
|
|
EMITO(LOD); 03753000
|
|
EMITO(XCH); 03754000
|
|
EMITO(LOD); 03755000
|
|
END ELSE EMITO(COC); 03756000
|
|
END ELSE EMITO(CDC); 03757000
|
|
END ELSE 03758000
|
|
BEGIN 03759000
|
|
IF SUM = 0 THEN IF NOT TOG THEN EMITL(0) ELSE 03760000
|
|
ELSE 03761000
|
|
BEGIN 03762000
|
|
IF TOG THEN 03763000
|
|
BEGIN 03764000
|
|
EMITNUM(ABS(SUM)); 03765000
|
|
IF SUM < 0 THEN EMITO(SUB) ELSE EMITO(ADD); 03766000
|
|
END 03767000
|
|
ELSE EMITNUM(SUM); 03768000
|
|
END; 03769000
|
|
IF FROM > 0 THEN 03770000
|
|
IF BOOLEAN (FROM) THEN 03771000
|
|
IF INFA.SUBCLASS } DOUBTYPE THEN 03772000
|
|
BEGIN 03773000
|
|
EMITDESCLIT(INFA.ADDR); 03774000
|
|
EMITO(DUP); 03775000
|
|
EMITPAIR(1,XCH); 03776000
|
|
EMITO(INX); 03777000
|
|
EMITO(LOD); 03778000
|
|
EMITO(XCH); 03779000
|
|
EMITO(LOD); 03780000
|
|
END ELSE EMITV(LINK) ELSE 03781000
|
|
BEGIN DESCREQ ~ TRUE; EMITN(LINK); DESCREQ ~ FALSE END; 03782000
|
|
END; 03783000
|
|
XIT: 03784000
|
|
IT ~ SAVIT; 03785000
|
|
SUBSCRIPTS ~ BOOLEAN(FROM); 03785100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUBSC","RIPTS ",FALSE) ; 03786000
|
|
END SUBSCRIPTS; 03787000
|
|
BOOLEAN PROCEDURE BOUNDS(LINK); VALUE LINK; REAL LINK; 03788000
|
|
BEGIN 03789000
|
|
COMMENT CALLED TO PROCESS ARRAY BOUNDS; 03790000
|
|
BOOLEAN VARF, SINGLETOG; %109-03791000
|
|
DEFINE FNEW = LINK#; 03792000
|
|
REAL T, NSUBS, INFA, INFB, INFC, FIRSTSS; 03793000
|
|
LABEL LOOP; 03794000
|
|
03795000
|
|
03796000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" BOU","NDS ",TRUE ); 03797000
|
|
GETALL(FNEW, INFA, INFB, INFC); 03798000
|
|
FIRSTSS ~ NEXTSS; 03799000
|
|
IF LINK < 0 THEN BEGIN SINGLETOG ~ TRUE; LINK ~ ABS(LINK) END; %109-03799500
|
|
LOOP: 03800000
|
|
IF NEXT = ID THEN 03801000
|
|
BEGIN 03802000
|
|
T ~ GET(FNEXT ~ GETSPACE(FNEXT)); 03802100
|
|
IF T.CLASS ! VARID OR NOT BOOLEAN(T.FORMAL) THEN FLAG(92) ELSE 03803000
|
|
IF T.SUBCLASS > REALTYPE THEN FLAG(93); 03804000
|
|
T ~ -T.ADDR; 03805000
|
|
VARF ~ TRUE; 03806000
|
|
END ELSE 03807000
|
|
IF NEXT = NUM THEN 03808000
|
|
BEGIN 03809000
|
|
IF NUMTYPE!INTYPE THEN FLAG(113); 03810000
|
|
IF T~FNEXT=0 THEN FLAG(122) ; 03810010
|
|
IF NOT VARF THEN IF NSUBS = 0 THEN LENGTH ~ FNEXT ELSE 03812000
|
|
LENGTH ~ LENGTH|FNEXT; 03813000
|
|
END ELSE FLOG(122); 03814000
|
|
EXTRAINFO[NEXTSS.IR,NEXTSS.IC] ~ T; 03815000
|
|
NEXTSS ~ NEXTSS-1; 03816000
|
|
NSUBS ~ NSUBS+1; 03817000
|
|
SCAN; 03818000
|
|
IF NEXT = COMMA THEN BEGIN SCAN; GO TO LOOP END; 03819000
|
|
IF NEXT ! RPAREN THEN FLOG(94); 03820000
|
|
XTA ~ INFB; 03821000
|
|
IF INFA.CLASS = ARRAYID THEN FLAG(95); 03822000
|
|
INFA.CLASS ~ ARRAYID; 03823000
|
|
IF VARF THEN 03827000
|
|
BEGIN 03828000
|
|
IF NOT BOOLEAN(INFA.FORMAL) THEN FLAG(96); 03829000
|
|
IF NSUBS > 1 OR INFA .SUBCLASS } DOUBTYPE THEN 03830000
|
|
BEGIN BUMPLOCALS;LENGTH~LOCALS + 1536;BOUNDS~TRUE END ELSE 03831000
|
|
LENGTH ~-EXTRAINFO[FIRSTSS.IR,FIRSTSS.IC]; 03832000
|
|
END ELSE 03833000
|
|
IF NOT SINGLETOG AND INFA.SUBCLASS > LOGTYPE THEN %109-03834000
|
|
BEGIN LENGTH ~ 2 | LENGTH; BOUNDS ~ TRUE END; %109-03834500
|
|
IF LENGTH > 32767 THEN FLAG(99); 03835000
|
|
INFC ~ LENGTH & NSUBS[TONEXTRA] & FIRSTSS[TOADINFO]; 03836000
|
|
IF VARF THEN INFC ~ -INFC; 03837000
|
|
PUT(FNEW, INFA); PUT(FNEW+2, INFC); 03838000
|
|
SCAN; 03839000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" BOU","NDS ",FALSE) ; 03840000
|
|
END BOUNDS; 03841000
|
|
PROCEDURE PARAMETERS(LINK); VALUE LINK; REAL LINK; 03842000
|
|
BEGIN 03843000
|
|
03844000
|
|
03845000
|
|
LABEL LOOP; 03846000
|
|
REAL NPARMS, EX, INFC, PTYPE; 03847000
|
|
ALPHA EXPNAME; 03848000
|
|
BOOLEAN CHECK, INTFID; 03849000
|
|
BOOLEAN NOTZEROP; 03850000
|
|
REAL SAVIT; 03851000
|
|
DEFINE PARMTYPE = LSTT#; 03852000
|
|
SAVIT ~ IT ~ IT+1; 03853000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" PARAM","ETERS ",TRUE ) ; 03854000
|
|
INFC ~ GET(LINK+2); 03855000
|
|
IF CHECK ~ BOOLEAN(INFC.[1:1]) THEN 03856000
|
|
BEGIN 03857000
|
|
EX ~ INFC.ADINFO; 03858000
|
|
NOTZEROP ~ INFC.NEXTRA ! 0; 03859000
|
|
INTFID ~ INFC.[36:12] = 1; 03859500
|
|
END; 03860000
|
|
LOOP: 03861000
|
|
BEGIN SCAN; 03862000
|
|
EXPNAME ~ NAME; 03863000
|
|
IF GLOBALNEXT = 0 AND NAME = "$ " THEN 03864000
|
|
BEGIN EXPRESULT ~ LABELID; SCAN; 03866000
|
|
IF GLOBALNEXT ! NUM THEN FLAG(44); 03867000
|
|
EMITLABELDESC(NAME); 03868000
|
|
PTYPE ~ 0; 03869000
|
|
SCAN; 03870000
|
|
END 03871000
|
|
ELSE PTYPE ~ EXPR(CHECK AND EXTRAINFO[EX.IR,EX.IC].CLASS 03872000
|
|
= EXPCLASS AND INTFID); 03873000
|
|
IF EXPRESULT = NUMCLASS THEN 03874000
|
|
IF PTYPE = STRINGTYPE THEN 03875000
|
|
BEGIN 03876000
|
|
ADR ~ ADR - 1; 03876500
|
|
PTYPE ~ INTYPE; 03877000
|
|
EXPRESULT ~ SUBSVAR; 03878000
|
|
IF STRINGSIZE = 1 AND 03879000
|
|
(T ~ EXTRAINFO[EX.IR,EX.IC].CLASS = VARID OR 03880000
|
|
T = EXPCLASS) THEN 03881000
|
|
BEGIN 03882000
|
|
EXPRESULT ~ EXPCLASS; 03883000
|
|
EMITNUM(STRINGARRAY[0]); 03884000
|
|
END ELSE 03885000
|
|
BEGIN 03886000
|
|
EXPRESULT~ARRAYID; 03887000
|
|
EMITPAIR(PRGDESCBLDR(1,0,0,NXAVIL~NXAVIL+1), LOD); 03888000
|
|
EMITL(0); 03889000
|
|
WRITEDATA(STRINGSIZE, NXAVIL, STRINGARRAY); 03890000
|
|
END; 03891000
|
|
END ELSE EXPRESULT ~ EXPCLASS; 03892000
|
|
PARMTYPE[IT] ~ 0 & EXPRESULT[TOCLASS] & PTYPE[TOSUBCL]; 03893000
|
|
XTA ~ EXPNAME; 03894000
|
|
IF TSSEDITOG THEN IF (EXPRESULT=FUNID OR EXPRESULT=SUBRID OR 03894050
|
|
EXPRESULT=EXTID) AND NOT DCINPUT THEN TSSED(XTA,2); 03894060
|
|
IF DCINPUT THEN IF EXPRESULT=FUNID OR EXPRESULT=SUBRID 03894100
|
|
OR EXPRESULT=EXTID THEN FLAG(151) ; 03894200
|
|
IF CHECK THEN 03895000
|
|
BEGIN 03896000
|
|
IF T ~ EXTRAINFO[EX.IR,EX.IC].CLASS ! EXPRESULT THEN 03897000
|
|
CASE T OF 03898000
|
|
BEGIN 03899000
|
|
EXTRAINFO[EX.IR,EX.IC] ~ 0 & EXPRESULT[TOCLASS] 03900000
|
|
& PTYPE[TOSUBCL]; 03901000
|
|
IF EXPRESULT ! SUBSVAR THEN FLAG(66); 03902000
|
|
IF EXPRESULT = SUBSVAR THEN 03903000
|
|
IF NOT INTFID THEN 03903100
|
|
BEGIN EMITO(CDC); 03903150
|
|
IF PTYPE } DOUBTYPE THEN EMITL(0); 03903200
|
|
END ELSE 03903400
|
|
ELSE 03903500
|
|
IF EXPRESULT = EXPCLASS THEN 03904000
|
|
BEGIN IF PTYPE } DOUBTYPE THEN EMITO(XCH); 03904100
|
|
EXTRAINFO[EX.IR,EX.IC].CLASS ~ EXPCLASS 03904200
|
|
END ELSE FLAG(67); 03905000
|
|
; ; ; 03906000
|
|
FLAG(68); 03907000
|
|
IF EXPRESULT = EXTID THEN 03908000
|
|
PUT(EXPLINK,GET(EXPLINK)&FUNID[TOCLASS]) ELSE 03909000
|
|
FLAG(69); 03910000
|
|
; 03911000
|
|
IF EXPRESULT = FUNID OR EXPRESULT = SUBRID THEN 03912000
|
|
EXTRAINFO[EX.IR,EX.IC] ~ EXPRESULT ELSE FLAG(70); 03913000
|
|
IF EXPRESULT = EXTID THEN 03914000
|
|
PUT(EXPLINK,GET(EXPLINK)&SUBRID[TOCLASS]) ELSE 03915000
|
|
FLAG(71); 03916000
|
|
; ; 03917000
|
|
IF EXPRESULT = ARRAYID THEN EXTRAINFO[EX.IR,EX.IC].CLASS 03918000
|
|
~ ARRAYID ELSE 03919000
|
|
IF EXPRESULT = VARID THEN 03920000
|
|
BEGIN 03921000
|
|
EXTRAINFO[EX.IR,EX.IC].CLASS ~ SBVEXP; 03922000
|
|
EMITL(0) 03923000
|
|
END ELSE 03924000
|
|
IF EXPRESULT = EXPCLASS THEN 03925000
|
|
BEGIN 03926000
|
|
EXTRAINFO[EX.IR,EX.IC].CLASS ~ SBVEXP; 03927000
|
|
IF PTYPE } DOUBTYPE THEN EMITO(XCH) ELSE EMITL(0); 03928000
|
|
END ELSE FLAG(72); 03929000
|
|
IF EXPRESULT = SUBSVAR THEN 03930000
|
|
IF NOT INTFID THEN 03930100
|
|
BEGIN EMITO(CDC); 03930200
|
|
IF PTYPE } DOUBTYPE THEN EMITL(0) 03930300
|
|
END 03930400
|
|
ELSE 03930500
|
|
ELSE IF EXPRESULT = VARID THEN 03930600
|
|
IF NOT INTFID THEN 03930650
|
|
IF PTYPE } DOUBTYPE THEN EMITL(0) ELSE ELSE 03930700
|
|
ELSE FLAG(67); 03930800
|
|
IF EXPRESULT = VARID THEN 03931000
|
|
EMITL(0) ELSE 03932000
|
|
IF EXPRESULT = EXPCLASS THEN 03933000
|
|
IF PTYPE } DOUBTYPE THEN EMITO(XCH) ELSE EMITL(0) 03934000
|
|
ELSE IF EXPRESULT ! SUBSVAR THEN FLAG(67); 03935000
|
|
END OF CASE STATEMENT 03936000
|
|
ELSE IF PTYPE } DOUBTYPE THEN 03936100
|
|
IF EXPRESULT = VARID THEN EMITL(0) 03936200
|
|
ELSE IF EXPRESULT = EXPCLASS AND NOT INTFID 03936300
|
|
THEN EMITO(XCH); 03936400
|
|
IF T ~ EXTRAINFO[EX.IR,EX.IC].SUBCLASS = 0 OR 03937000
|
|
(T = INTYPE AND PTYPE = REALTYPE AND 03938000
|
|
GET(LINK).SEGNO = 0) THEN 03939000
|
|
EXTRAINFO[EX.IR,EX.IC].SUBCLASS ~ PTYPE ELSE 03940000
|
|
IF NOT(T = PTYPE OR T = REALTYPE AND PTYPE = INTYPE ) THEN 03941000
|
|
FLAG(88); 03942000
|
|
END OF CHECK 03943000
|
|
ELSE IF PTYPE } DOUBTYPE THEN 03943100
|
|
IF EXPRESULT = VARID THEN EMITL(0) 03943200
|
|
ELSE IF EXPRESULT = EXPCLASS THEN EMITO(XCH); 03943300
|
|
IF NOTZEROP THEN EX ~ EX+1; 03944000
|
|
IT ~ IT+1; 03945000
|
|
END; 03946000
|
|
IF GLOBALNEXT = COMMA THEN GO TO LOOP; 03947000
|
|
NPARMS ~ IT - SAVIT; 03948000
|
|
IF GLOBALNEXT ! RPAREN THEN FLOG(108); 03949000
|
|
IF NOT CHECK THEN 03950000
|
|
BEGIN 03951000
|
|
INFC ~ GET(LINK+2); 03952000
|
|
INFC ~ -(INFC & NPARMS[TONEXTRA] 03953000
|
|
& NEXTEXTRA[TOADINFO]); 03954000
|
|
PUT(LINK+2,INFC); 03955000
|
|
FOR I ~ SAVIT STEP 1 UNTIL IT-1 DO 03956000
|
|
BEGIN 03957000
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC] ~ PARMTYPE[I]; 03958000
|
|
NEXTEXTRA ~ NEXTEXTRA+1; 03959000
|
|
END; 03960000
|
|
END 03961000
|
|
ELSE 03962000
|
|
IF T ~ GET(LINK+2).NEXTRA > 0 AND T ! NPARMS OR 03963000
|
|
T=0 AND INTFID AND NPARMS < 2 OR 03964000
|
|
T = 0 AND NOT INTFID THEN 03964500
|
|
BEGIN XTA ~ GET(LINK+1); FLAG(28) END; 03965000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" PARAM","ETERS ",FALSE) ; 03966000
|
|
IT ~ SAVIT-1; 03967000
|
|
END PARAMETERS; 03968000
|
|
PROCEDURE STMTFUNREF(LINK); VALUE LINK; REAL LINK; 03969000
|
|
BEGIN 03970000
|
|
REAL I, PARMLINK, NPARMS, SEG; 03971000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" STMTF","UNREF ",TRUE); 03971010
|
|
PARMLINK ~ GET(LINK+2).[36:12]; 03972000
|
|
DO 03973000
|
|
BEGIN 03974000
|
|
SCAN; 03975000
|
|
IF A~EXPR(TRUE) ! B~GET(PARMLINK).SUBCLASS THEN 03976000
|
|
IF A > REALTYPE OR B > REALTYPE THEN %108-03977000
|
|
BEGIN XTA ~ NNEW; FLAG(88) END; 03978000
|
|
PARMLINK ~ PARMLINK-3; 03979000
|
|
NPARMS ~ NPARMS+1; 03980000
|
|
END UNTIL NEXT ! COMMA; 03981000
|
|
IF NEXT ! RPAREN THEN FLAG(108); 03982000
|
|
SCAN; 03983000
|
|
GETALL(LINK, INFA, XTA, INFC); 03984000
|
|
IF NPARMS ! INFC.NEXTRA THEN FLAG(28); 03985000
|
|
SEG ~ INFA.SEGNO; 03986000
|
|
BRANCHLIT(INFC.BASE&SEG[TOSEGNO],FALSE); 03987000
|
|
EMITB(INFA.ADDR & SEG[TOSEGNO], FALSE); 03988000
|
|
ADJUST; 03989000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" STMTF","UNREF ",FALSE); 03989010
|
|
END STMTFUNREF; 03990000
|
|
BOOLEAN PROCEDURE DOITINLINE(LNK); VALUE LNK; REAL LNK ; 03990010
|
|
BEGIN 03990020
|
|
REAL C,I,C1,C2,C3,C4,C5 ; 03990030
|
|
LABEL HUNT,FOUND,XIT,AIMAG,AINT,CMPLX,LOOP,DDT111,SNGL ; 03990040
|
|
DEFINE OPTYPE=LSTT#, E0=EMITO#, EP=EMITPAIR#, EOL=EMITOPDCLIT# ;03990045
|
|
IF DEBUGTOG THEN FLAGROUTINE("DOITIN","LINE ",TRUE); 03990047
|
|
C1~1; C2~INLINEINT[0]; C3~GET(ABS(LNK)+1) ; 03990050
|
|
HUNT: 03990060
|
|
IF (C~INLINEINT[I~(C1+C2).[36:11]].INAM)<C3 THEN C1~I+1 03990070
|
|
ELSE IF C>C3 THEN C2~I-1 ELSE GO FOUND ; 03990080
|
|
IF C1<C2 THEN GO HUNT ; 03990082
|
|
IF INLINEINT[C1].INAM!C3 THEN 03990084
|
|
BEGIN 03990086
|
|
IF LNK<0 THEN DOITINLINE~BOOLEAN(LOOKFORINTRINSIC(-LNK)) ; 03990088
|
|
GO XIT ; 03990090
|
|
END ; 03990092
|
|
I~C1 ; 03990094
|
|
FOUND: 03990096
|
|
C1~(C~INT[C2~(C4~INLINEINT[I]).INTX]).INTPARMCLASS ; 03990098
|
|
IF LNK<0 THEN 03990100
|
|
BEGIN 03990102
|
|
I~-LNK; DOITINLINE~BOOLEAN(LNK~NEED(C3,FUNID)) ; 03990104
|
|
IF (C2~GET(LNK+2))<0 THEN GO XIT ; 03990105
|
|
PUT(LNK+2,-(C2&(I~C.INTPARMS)[TONEXTRA]&NEXTEXTRA[TOADINFO]));03990108
|
|
FOR I~I STEP -1 UNTIL 1 DO 03990112
|
|
BEGIN 03990114
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC]~0&EXPCLASS[TOCLASS] 03990116
|
|
&C1[TOSUBCL] ; 03990117
|
|
NEXTEXTRA~NEXTEXTRA+1 ; 03990118
|
|
END ; 03990120
|
|
INFO[LNK.IR,LNK.IC].SUBCLASS~C.INTCLASS ; 03990122
|
|
GO XIT ; 03990124
|
|
END ; 03990126
|
|
IF BOOLEAN(LNK.[2:1]) THEN 03990127
|
|
STACKHEAD[GET((NEXTINFO~NEXTINFO-3)+1) MOD SHX]~GET(NEXTINFO).LINK;03990128
|
|
LNK~C.INTINLINE; INT[C2].INTSEEN~1; DOITINLINE~TRUE ; 03990130
|
|
IF C4>0 THEN INLINEINT[I]~-C4; I~0 ; 03990132
|
|
IF XREF THEN ENTERX(C3,0&FUNID[TOCLASS]&C[21:6:3]); 03990134
|
|
IF GLOBALNEXT!LPAREN THEN BEGIN FLOG(106); GO XIT END ; 03990136
|
|
LOOP: SCAN; C5~XTA ; 03990140
|
|
IF I=0 THEN 03990145
|
|
IF LNK=10 THEN EMITL(0) ELSE IF LNK=21 THEN EMITDESCLIT(2) ; 03990150
|
|
IF (C4~EXPR(TRUE))!C1 AND (C1!REALTYPE OR C4!INTYPE) THEN 03990160
|
|
BEGIN XTA~C5; FLAG(88); C2~-2 END ; 03990165
|
|
I~I+1; IF GLOBALNEXT=COMMA THEN GO LOOP ; 03990170
|
|
IF GLOBALNEXT!RPAREN THEN BEGIN FLOG(108); C2~-2 END; SCAN ; 03990180
|
|
IF I!C.INTPARMS THEN IF C.INTPARMS!0 OR I<2 THEN 03990190
|
|
BEGIN XTA~C3; FLAG(28); C2~-2 END ; 03990195
|
|
OPTYPE[IT]~C.INTCLASS; IF C2<0 THEN GO XIT ; 03990200
|
|
CASE (LNK-1) OF 03990210
|
|
BEGIN 03990220
|
|
E0(SSP) ; % @1: ABS, DABS, IABS. 03990230
|
|
AIMAG: E0(DEL) ; % @2: AIMAG. 03990240
|
|
AINT: EP(1,IDV) ; % @3: AINT, IFIX, INT. 03990250
|
|
E0(RDV) ; % @4: AMOD. 03990260
|
|
E0(LND) ; % @5: LOGICAL AND. 03990270
|
|
CMPLX: E0(XCH) ; % @6: CMPLX. 03990280
|
|
E0(LNG) ; % @7: LOGICAL COMPLIMENT (NEGATION). 03990290
|
|
03990291
|
|
BEGIN % @10: DIM, IDIM. 03990300
|
|
E0(SUB); E0(DUP); EP(0,LESS) ; 03990310
|
|
IF ADR>4082 THEN BEGIN ADR~ADR+1; SEGOVF END ; 03990315
|
|
EP(2,BFC); E0(DEL); EMITL(0) ; 03990320
|
|
END ; 03990330
|
|
03990331
|
|
BEGIN E0(XCH); E0(CHS); GO CMPLX END ; % @11: CONJG. 03990340
|
|
; % @12: DBLE (SOME CODE ALREADY EMITTED ABOVE). 03990350
|
|
03990351
|
|
BEGIN E0(XCH); E0(DEL) ; % @13: DSIGN. 03990360
|
|
DDT111: EMITDDT(1,1,1) ; 03990370
|
|
END; 03990380
|
|
03990381
|
|
E0(LQV) ; % @14: LOGICAL EQUIVALENCE. 03990390
|
|
; % @15: FLOAT. 03990400
|
|
GO DDT111 ; % @16: ISIGN, SIGN. 03990410
|
|
BEGIN E0(RDV); GO AINT END ; % @17: MOD. 03990420
|
|
E0(LOR) ; % @20: LOGICAL OR. 03990430
|
|
BEGIN E0(XCH); GO AIMAG END ; % @21: REAL. 03990440
|
|
EP(1,KOM) ; % @22: TIME. 03990450
|
|
03990460
|
|
BEGIN % @23: SNGL. 03990470
|
|
SNGL: EP(9,SND); E0(XCH); EMITDDT(47,9,1); EMITL(0) ; 03990480
|
|
EMITDDT(9,9,38); EOL(9); EMITO(ADD); IF LNK=20 THEN GO AINT ; 03990490
|
|
END ; 03990500
|
|
03990510
|
|
GO SNGL ; % @24: IDINT. 03990520
|
|
03990530
|
|
BEGIN % @25: AMAX0,AMAX1,AMIN0,AMIN1,MAX0,MAX1,MIN0,MIN1. 03990535
|
|
% SOME CODE ALREADY EMITTED ABOVE. 03990540
|
|
IF ADR>4068 THEN BEGIN ADR~ADR+1; SEGOVF END ; 03990542
|
|
EP(9,STD); E0(DUP); EOL(9) ; 03990545
|
|
E0(IF C3.[24:6]="A" OR C3.[24:6]="X" THEN LESS ELSE GRTR) ; 03990550
|
|
EP(2,BFC); E0(DEL); EOL(9); E0(XCH); E0(TOP); E0(LNG) ; 03990555
|
|
EP(14,BBC); E0(DEL); IF C3="MIN1 " OR C3="MAX1 " THEN GO AINT03990560
|
|
END ; 03990565
|
|
03990566
|
|
END OF CASE STATEMENT ; 03990800
|
|
XIT: 03990810
|
|
IF DEBUGTOG THEN FLAGROUTINE("DOITIN","LINE ",FALSE) ; 03990815
|
|
END OF DOITINLINE ; 03990820
|
|
REAL PROCEDURE LOOKFORINTRINSIC(L); VALUE L; REAL L; 03991000
|
|
BEGIN 03992000
|
|
ALPHA ID, I, X, NPARMS; 03993000
|
|
REAL T; 03994000
|
|
LABEL FOUND, XIT; 03995000
|
|
IF DEBUGTOG THEN FLAGROUTINE("LOOKFO","RINTRN",TRUE); 03995010
|
|
LOOKFORINTRINSIC ~ L ~ NEED(ID ~ GET(L+1),FUNID); 03996000
|
|
IF GET(L+2) < 0 THEN GO TO XIT; % PARAMETER INFO KNOWN 03996050
|
|
COMMENT B MUST BE SET TO K/2, WHERE K IS THE INDEX OF THE LAST 03996100
|
|
INTRINSIC NAME IN THE ARRAY INT; 03996200
|
|
A~0; B~NUMINTM1 ; 03997000
|
|
WHILE A+1 < B DO 03998000
|
|
BEGIN 03999000
|
|
I ~ REAL(BOOLEAN(A+B) AND BOOLEAN(1022)); 04000000
|
|
IF Z ~ INT[I] = ID THEN GO TO FOUND; 04001000
|
|
IF ID < Z THEN B ~ I.[36:11] ELSE A ~ I.[36:11]; 04002000
|
|
END; 04003000
|
|
IF ID = INT[I~(A+B)|2-I] THEN GO TO FOUND; 04004000
|
|
GO TO XIT; 04005000
|
|
FOUND: 04006000
|
|
NPARMS~(X~INT[I+1]).INTPARMS; INT[I+1].INTSEEN~1 ; 04007000
|
|
INFO[L.IR,L.IC].SUBCLASS~X.INTCLASS ; 04008000
|
|
PUT(L+2,-(1&NEXTEXTRA[TOADINFO]&NPARMS[TONEXTRA])); 04009000
|
|
IF NPARMS = 0 THEN NPARMS ~ 1; 04010000
|
|
T~X.INTPARMCLASS ; 04011000
|
|
FOR I ~ 1 STEP 1 UNTIL NPARMS DO 04012000
|
|
BEGIN 04013000
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC] ~ 04014000
|
|
0 & EXPCLASS[TOCLASS] & T[TOSUBCL]; 04015000
|
|
NEXTEXTRA ~ NEXTEXTRA + 1; 04016000
|
|
END; 04017000
|
|
XIT: 04018000
|
|
IF DEBUGTOG THEN FLAGROUTINE("LOOKFO","RINTRN",FALSE ) ; 04018010
|
|
END LOOKFORINTRINSIC; 04019000
|
|
INTEGER PROCEDURE EXPR(VALREQ); VALUE VALREQ; BOOLEAN VALREQ; 04020000
|
|
BEGIN LABEL LOOP, STACK, XIT, NOSCAN; REAL T; 04021000
|
|
LABEL ARRY; 04022000
|
|
LABEL HERE ; 04022010
|
|
04023000
|
|
04024000
|
|
REAL SAVIT, SAVIP; 04025000
|
|
BOOLEAN CNSTSEENLAST; %FOR HANDLING CONSTANT %113-04025500
|
|
REAL SAVEADR; %EXPONENTS %113-04025600
|
|
DEFINE OPTYPE = LSTT#; 04026000
|
|
REAL EXPRESLT,EXPLNK; 04027000
|
|
REAL EXPV; 04028000
|
|
REAL TM ; 04028010
|
|
DEFINE E0=EMITO#, EP=EMITPAIR#, EOL=EMITOPDCLIT#, 04028020
|
|
ES1(OP)=BEGIN E0(XCH); EP(9,STD); E0(OP) END #, 04028030
|
|
ES2=BEGIN EP(9,STD); E0(XCH); EP(17,SND); E0(MUL) END # ; 04028040
|
|
LABEL CTYP, DTYP, RLESSC, DLESSC, CLESSD, CLESSC, RPLUSD, DTIMESC, 04028050
|
|
CTIMESR, CDIVBYD, CTIMESR1, CTIMESR2, DLESSC1 ; 04028060
|
|
LABEL SPECCHAR, RELATION; 04029000
|
|
REAL LINK; 04030000
|
|
DEFINE T1 = EXPT1#, T2 = EXPT2#, CODE = EXPT3#; 04031000
|
|
COMMENT THE FOLLOWING TABLE GIVES THE PRECEDENCE (PREC) AND 04032000
|
|
OPERATOR NUMBER (OP) OF THE ARITHMETIC AND LOGICAL OPERATORS. 04033000
|
|
OPERATOR PREC OP 04034000
|
|
** 9 15 04035000
|
|
UNARY - 8 12 04036000
|
|
/ 7 14 04037000
|
|
* 7 13 04038000
|
|
- 5 11 04039000
|
|
+ 5 10 04040000
|
|
.NE. 4 9 04041000
|
|
.GE. 4 8 04042000
|
|
.GT. 4 7 04043000
|
|
.EQ. 4 6 04044000
|
|
.LE. 4 5 04045000
|
|
.LT. 4 4 04046000
|
|
.NOT. 3 3 04047000
|
|
.AND. 2 2 04048000
|
|
.OR. 1 1 04049000
|
|
THE UNARY PLUS IS IGNORED; 04050000
|
|
PROCEDURE MATH(D, C, T); VALUE D, C, T; REAL D, C, T; 04051000
|
|
BEGIN 04052000
|
|
EMITO(MKS); 04053000
|
|
EMITL(C); 04054000
|
|
EMITV(NEED(".MATH ", INTRFUNID)); 04055000
|
|
EMITO(DEL); 04056000
|
|
IF D = 2 THEN EMITO(DEL); 04057000
|
|
OPTYPE[IT~IT-1] ~ T; 04058000
|
|
END MATH; 04059000
|
|
NNEW ~ NAME; 04060000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EXPRE","SSION ",TRUE ) ; 04061000
|
|
OPTYPE[SAVIT ~IT ~ IT+1] ~ 04062000
|
|
PR[SAVIP~IP~IP+1] ~ OPST[IP] ~ 0; 04063000
|
|
IF GLOBALNEXT = PLUS THEN GO TO LOOP; 04064000
|
|
IF GLOBALNEXT = MINUS THEN 04065000
|
|
BEGIN PREC ~ 8; OP ~ 12; GO TO STACK END; 04066000
|
|
IF PREC > 0 THEN GO TO STACK; 04067000
|
|
LINK~(EXPLNK~FNEXT)&REAL(SCANENTER)[2:47:1] ; 04068000
|
|
GO TO NOSCAN; 04069000
|
|
LOOP: SCAN; 04070000
|
|
LINK ~ FNEXT; 04071000
|
|
NOSCAN: 04072000
|
|
CNSTSEENLAST~FALSE; %113-04072500
|
|
IF GLOBALNEXT = ID THEN 04073000
|
|
BEGIN 04074000
|
|
IF IP ! SAVIP THEN EXPRESLT ~ EXPCLASS; 04074100
|
|
OPTYPE[IT~IT+1] ~ (A~GET(LINK)).SUBCLASS; 04075000
|
|
SCAN; 04076000
|
|
IF NOT RANDOMTOG THEN 04076050
|
|
IF NEXT=EQUAL THEN BEGIN NEXT~0; OP~6; PREC~4 END ; 04076100
|
|
IF GLOBALNEXT = ID OR GLOBALNEXT = NUM THEN 04077000
|
|
BEGIN FLOG(1); GO TO XIT END; 04078000
|
|
IF NOT VALREQ AND PREC > 0 THEN VALREQ ~ TRUE; 04078100
|
|
IF GLOBALNEXT ! LPAREN THEN 04079000
|
|
BEGIN 04080000
|
|
LINK ~ GETSPACE(LINK); 04081000
|
|
T ~ (A~GET(LINK)).CLASS; 04082000
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&A[15:15:9]); 04082100
|
|
IF EXPRESLT = 0 THEN EXPRESLT ~ T; 04083000
|
|
IF VALREQ THEN 04084000
|
|
IF T = VARID THEN EMITV(LINK) ELSE 04085000
|
|
BEGIN XTA ~ GET(LINK+1); FLAG(50) END 04086000
|
|
ELSE 04087000
|
|
BEGIN 04088000
|
|
IF T = VARID THEN 04089000
|
|
IF GLOBALNEXT > SLASH AND EXPRESLT = VARID THEN 04090000
|
|
BEGIN 04091000
|
|
DESCREQ~TRUE; EMITN(LINK); DESCREQ ~ FALSE; 04092000
|
|
GO TO XIT; 04093000
|
|
END ELSE EMITV(LINK) 04094000
|
|
ELSE 04095000
|
|
BEGIN 04096000
|
|
IF T = ARRAYID THEN 04097000
|
|
BEGIN 04098000
|
|
IF BOOLEAN(A.CE) THEN 04099000
|
|
EMITNUM(GET(LINK+2).BASE) ELSE 04100000
|
|
IF BOOLEAN(A.FORMAL) THEN 04101000
|
|
EMITOPDCLIT(A.ADDR-1) ELSE 04102000
|
|
EMITL(0); 04103000
|
|
GO TO ARRY; 04104000
|
|
END ELSE EMITPAIR(A.ADDR,LOD); 04105000
|
|
GO TO XIT; 04106000
|
|
END; 04107000
|
|
END; 04108000
|
|
GO TO SPECCHAR; 04109000
|
|
END; 04110000
|
|
IF A.CLASS ! ARRAYID THEN 04111000
|
|
BEGIN COMMENT FUNCTION REFERENCE; 04112000
|
|
EXPRESLT ~ EXPCLASS; 04112100
|
|
IF A.CLASS = STMTFUNID THEN 04113000
|
|
BEGIN 04114000
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&A[15:15:9]); 04114050
|
|
STMTFUNREF(LINK) ; 04114100
|
|
IF NEXT=EQUAL THEN IF NOT RANDOMTOG THEN 04114200
|
|
BEGIN NEXT~0; OP~6; PREC~4 END ; 04114300
|
|
GO TO SPECCHAR ; 04114400
|
|
END ; 04114500
|
|
IF A.CLASS=EXTID OR GET(TM~GLOBALSEARCH(GET(LINK+1))).CLASS=04114520
|
|
EXTID THEN LINK~REAL(DOITINLINE(-LINK)) ELSE 04114530
|
|
IF A.CLASS<FUNID AND TM=0 THEN 04115000
|
|
IF DOITINLINE(LINK) THEN GO HERE ELSE 04115010
|
|
LINK ~ LOOKFORINTRINSIC(LINK) ELSE 04116000
|
|
LINK ~ NEED(GET(LINK+1),FUNID); 04117000
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&GET(LINK)[15:15:9]); 04117100
|
|
EMITO(MKS); 04118000
|
|
04119000
|
|
PARAMETERS(LINK); 04120000
|
|
IF ERRORTOG THEN GO TO XIT ELSE SCAN; 04121000
|
|
EMITV(LINK ); 04122000
|
|
IF OPTYPE[IT] ~ GET(LINK).SUBCLASS } DOUBTYPE THEN 04123000
|
|
EMITOPDCLIT(JUNK); 04124000
|
|
HERE: IF NEXT=EQUAL THEN 04124100
|
|
IF NOT RANDOMTOG THEN BEGIN NEXT~0; PREC~4; OP~6 END ; 04124200
|
|
END ELSE 04125000
|
|
BEGIN COMMENT ARRAY REFERENCE; 04126000
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&A[15:15:9]); 04126100
|
|
SCAN; 04127000
|
|
VALREQ ~ SUBSCRIPTS(LINK,REAL(VALREQ)); 04128000
|
|
IF ERRORTOG THEN GO TO XIT; 04129000
|
|
IF NEXT=EQUAL THEN IF NOT RANDOMTOG THEN 04129100
|
|
BEGIN NEXT~0; OP~6; PREC~4 END ; 04129200
|
|
IF EXPRESLT = 0 THEN EXPRESLT ~ SUBSVAR; 04130000
|
|
IF NOT VALREQ THEN 04131000
|
|
BEGIN 04132000
|
|
IF GLOBALNEXT > SLASH AND EXPRESLT = SUBSVAR THEN 04133000
|
|
BEGIN 04134000
|
|
ARRY: 04135000
|
|
IF BOOLEAN((A~GET(LINK)).TWOD) THEN 04136000
|
|
BEGIN 04137000
|
|
EMITPAIR(TWODPRT, LOD); 04138000
|
|
T ~ A.ADDR; 04139000
|
|
IF T { 1023 THEN 04140000
|
|
BEGIN 04141000
|
|
EMITL(T.[38:10]); 04142000
|
|
EMITDESCLIT(10); 04143000
|
|
END ELSE 04144000
|
|
BEGIN 04145000
|
|
EMITL(T.[40:8]); 04146000
|
|
EMITDESCLIT(1536); 04147000
|
|
EMITO(INX); 04148000
|
|
END; 04149000
|
|
EMITO(CTF); 04150000
|
|
END ELSE EMITPAIR(A.ADDR,LOD); 04151000
|
|
EMITO(XCH); 04152000
|
|
GO TO XIT; 04153000
|
|
END; 04154000
|
|
IF BOOLEAN((A~GET(LINK)).TWOD) THEN 04155000
|
|
BEGIN 04156000
|
|
SPLIT(A.ADDR); 04157000
|
|
IF A.SUBCLASS } DOUBTYPE THEN 04158000
|
|
BEGIN 04159000
|
|
EMITO(CDC); 04160000
|
|
EMITO(DUP); 04161000
|
|
EMITPAIR(1, XCH); 04162000
|
|
EMITO(INX); 04163000
|
|
EMITO(LOD); 04164000
|
|
EMITO(XCH); 04165000
|
|
EMITO(LOD); 04166000
|
|
END ELSE EMITO(COC); 04167000
|
|
END ELSE 04168000
|
|
EMITV(LINK); 04169000
|
|
END; 04170000
|
|
END ARRAY REFERENCE; 04171000
|
|
GO TO SPECCHAR; 04172000
|
|
END; 04173000
|
|
IF GLOBALNEXT = NUM THEN 04174000
|
|
BEGIN 04175000
|
|
IF NUMTYPE = STRINGTYPE THEN 04176000
|
|
IF VALREQ THEN 04177000
|
|
BEGIN 04177200
|
|
NUMTYPE~INTYPE ; 04177400
|
|
IF STRINGSIZE=1 THEN FNEXT~STRINGARRAY[0] 04177500
|
|
ELSE BEGIN 04177550
|
|
IF STRINGSIZE>2 OR STRINGARRAY[1].[18:30]!" " THEN 04177575
|
|
FLAG(162) ; 04177600
|
|
IF (FNEXT~STRINGARRAY[1].[12:6]&STRINGARRAY[0][6:12:36]) 04177700
|
|
.[6:6]>7 THEN NUMTYPE~REALTYPE ; 04177800
|
|
END ; 04177900
|
|
END; 04178000
|
|
SAVEADR~ADR; CNSTSEENLAST~TRUE; %113-04178500
|
|
IF NUMTYPE = DOUBTYPE THEN 04179000
|
|
EMITNUM2(FNEXT,DBLOW) ELSE EMITNUM (FNEXT); 04180000
|
|
OPTYPE[IT~IT+1] ~ NUMTYPE; 04181000
|
|
IF EXPRESLT = 0 THEN 04182000
|
|
BEGIN EXPRESLT ~ NUMCLASS; EXPV ~ FNEXT END; 04183000
|
|
SCAN; 04184000
|
|
IF NOT RANDOMTOG THEN 04184050
|
|
IF NEXT=EQUAL THEN BEGIN NEXT~0; OP~6; PREC~4 END; 04184100
|
|
IF NOT VALREQ AND PREC > 0 THEN VALREQ ~ TRUE; 04184200
|
|
IF GLOBALNEXT = ID OR GLOBALNEXT = NUM THEN 04185000
|
|
BEGIN FLOG(1); GO TO XIT END; 04186000
|
|
END; 04187000
|
|
SPECCHAR: 04188000
|
|
IF GLOBALNEXT = LPAREN THEN 04189000
|
|
BEGIN 04190000
|
|
SCAN; 04191000
|
|
OPTYPE[IT~IT+1] ~ EXPR(TRUE); 04192000
|
|
04193000
|
|
IF GLOBALNEXT = COMMA AND EXPRESULT = NUMCLASS THEN 04194000
|
|
BEGIN 04195000
|
|
IF OPTYPE[IT] > REALTYPE THEN FLAG(85); 04196000
|
|
SCAN; 04197000
|
|
IF EXPR(TRUE) > REALTYPE 04198000
|
|
OR EXPRESULT ! NUMCLASS THEN FLAG(85); 04198100
|
|
EMITO(XCH); 04199000
|
|
OPTYPE[IT] ~ COMPTYPE; 04200000
|
|
IF EXPRESLT = 0 THEN EXPRESLT ~ NUMCLASS; 04201000
|
|
END ELSE EXPRESLT ~ EXPCLASS; 04202000
|
|
IF GLOBALNEXT ! RPAREN THEN 04203000
|
|
BEGIN FLOG(108); GO TO XIT END; 04204000
|
|
GO TO LOOP; 04205000
|
|
END; 04206000
|
|
WHILE PR[IP] } PREC DO 04207000
|
|
BEGIN 04208000
|
|
IF IT { SAVIT THEN GO TO XIT; 04208100
|
|
CODE ~ MAP[T1~OPTYPE[IT-1]]|3 + MAP[T2~OPTYPE[IT]]; 04209000
|
|
CASE OPST[IP] OF 04210000
|
|
BEGIN 04211000
|
|
GO TO XIT; 04212000
|
|
BEGIN 04213000
|
|
IF T1 = LOGTYPE AND T2 = LOGTYPE THEN EMITO(LOR) 04214000
|
|
ELSE FLAG(51); 04215000
|
|
IT ~ IT-1; 04216000
|
|
END; 04217000
|
|
BEGIN 04218000
|
|
IF T1 = LOGTYPE AND T2 = LOGTYPE THEN EMITO(LND) 04219000
|
|
ELSE FLAG(52); 04220000
|
|
IT ~ IT-1; 04221000
|
|
END; 04222000
|
|
IF T2 = LOGTYPE THEN EMITO(LNG) ELSE FLAG(53); 04223000
|
|
BEGIN T ~ LESS; GO TO RELATION END; 04224000
|
|
BEGIN T ~ LEQL; GO TO RELATION END; 04225000
|
|
BEGIN T ~ EQUL; GO TO RELATION END; 04226000
|
|
BEGIN T ~ GRTR; GO TO RELATION END; 04227000
|
|
BEGIN T ~ GEQL; GO TO RELATION END; 04228000
|
|
BEGIN T ~ NEQL; 04229000
|
|
RELATION: 04230000
|
|
IF CODE < 0 THEN FLAG(54) ELSE 04231000
|
|
CASE CODE OF 04232000
|
|
BEGIN ; 04233000
|
|
BEGIN 04234000
|
|
E0(CHS); EP(9,STD); E0(XCH); EOL(9); E0(XCH); EP(0,XCH) ;04235000
|
|
E0(AD2) ; 04236000
|
|
END; 04238000
|
|
FLAG(90); 04239000
|
|
BEGIN EMITPAIR(0, XCH); EMITO(SB2) END; 04240000
|
|
EMITO(SB2); 04241000
|
|
FLAG(90); 04242000
|
|
FLAG(90); 04243000
|
|
FLAG(90); 04244000
|
|
IF T! EQUL AND T! NEQL THEN FLAG(54) %103-04245000
|
|
ELSE %103-04245100
|
|
BEGIN %103-04245200
|
|
EP(9,STD); E0(XCH); EOL(9); E0(T); %103-04245300
|
|
EP(9,STD ); E0(T); EOL(9); %103-04245400
|
|
T~(IF T=EQUL THEN LND ELSE LOR); CODE~0; %103-04245500
|
|
END; %103-04245600
|
|
END RELATION CASE STATEMENT; 04246000
|
|
IF CODE > 0 THEN 04247000
|
|
BEGIN EMITO(XCH); EMITO(DEL); EMITL(0) END; 04248000
|
|
EMITO(T); 04249000
|
|
OPTYPE[IT~IT-1] ~ LOGTYPE; 04250000
|
|
END; 04251000
|
|
IF CODE < 0 THEN BEGIN FLAG(53); IT ~ IT-1 END ELSE 04252000
|
|
CASE CODE OF 04253000
|
|
BEGIN 04254000
|
|
BEGIN 04255000
|
|
EMITO(ADD); 04256000
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 04257000
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 04258000
|
|
END; 04259000
|
|
BEGIN TM~AD2 ; 04260000
|
|
RPLUSD: EP(9,STD); E0(XCH); EOL(9); E0(XCH); EP(0,XCH); E0(TM) ; 04260010
|
|
DTYP: OPTYPE[IT~IT-1]~DOUBTYPE ; 04260020
|
|
END ; 04260030
|
|
BEGIN TM~ADD; GO RLESSC END ; 04261000
|
|
BEGIN 04262000
|
|
EMITPAIR(0, XCH); 04263000
|
|
EMITO(AD2); 04264000
|
|
IT ~ IT-1; 04265000
|
|
END; 04266000
|
|
BEGIN EMITO(AD2); IT ~ IT-1 END; 04267000
|
|
BEGIN TM~ADD; GO DLESSC END ; 04268000
|
|
BEGIN EMITO(ADD); IT ~ IT-1 END; 04269000
|
|
BEGIN TM~ADD; GO CLESSD END ; 04270000
|
|
BEGIN TM~ADD; GO CLESSC END ; 04271000
|
|
END ADD CASE STATEMENT; 04272000
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 04273000
|
|
CASE CODE OF 04274000
|
|
BEGIN 04275000
|
|
BEGIN 04276000
|
|
EMITO(SUB); 04277000
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 04278000
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 04279000
|
|
END; 04280000
|
|
BEGIN E0(CHS); TM~AD2; GO RPLUSD END; 04281000
|
|
BEGIN TM~SUB ; 04282000
|
|
RLESSC: ES1(TM); GO DLESSC1 ; 04282010
|
|
END ; 04282030
|
|
BEGIN 04283000
|
|
EMITPAIR(0, XCH); 04284000
|
|
EMITO(SB2); 04285000
|
|
IT ~ IT-1; 04286000
|
|
END; 04287000
|
|
BEGIN EMITO(SB2); IT ~ IT-1 END; 04288000
|
|
BEGIN TM~SUB ; 04289000
|
|
DLESSC: ES1(TM); E0(XCH); E0(DEL) ; 04289005
|
|
DLESSC1: EOL(9); IF TM=SUB THEN E0(CHS); GO CTIMESR2 ; 04289007
|
|
END ; 04289010
|
|
BEGIN EMITO(SUB); IT ~ IT-1 END; 04290000
|
|
BEGIN TM~SUB ; 04291000
|
|
CLESSD: E0(XCH); E0(DEL); E0(TM) ; 04291010
|
|
CTYP: OPTYPE[IT~IT-1]~COMPTYPE ; 04291015
|
|
END ; 04291020
|
|
BEGIN TM~SUB ; 04292000
|
|
CLESSC: ES1(TM); GO CTIMESR1 ; 04292010
|
|
END ; 04292020
|
|
END SUBTRACT CASE STATEMENT; 04293000
|
|
BEGIN % HANDLE NEGATIVE NUMBERS CASE STATEMENT. 04293100
|
|
EXPV~-EXPV ; 04293200
|
|
IF T2 { REALTYPE THEN EMITO(CHS) ELSE 04294000
|
|
IF T2 = LOGTYPE THEN FLAG(55) ELSE 04295000
|
|
IF T2 = DOUBTYPE THEN EMITO(CHS) ELSE 04296000
|
|
IF T2 = COMPTYPE THEN 04297000
|
|
BEGIN 04298000
|
|
EMITO(CHS); EMITO(XCH); 04299000
|
|
EMITO(CHS); EMITO(XCH); 04300000
|
|
END ELSE FLAG(55); 04301000
|
|
END OF NEG NUMBERS CASE STATEMNT ; 04301100
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 04302000
|
|
CASE CODE OF 04303000
|
|
BEGIN 04304000
|
|
BEGIN 04305000
|
|
EMITO(MUL); 04306000
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 04307000
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 04308000
|
|
END; 04309000
|
|
BEGIN TM~ML2; GO RPLUSD END ; 04310000
|
|
BEGIN ES2; GO DTIMESC END ; 04311000
|
|
BEGIN 04312000
|
|
EMITPAIR(0, XCH); 04313000
|
|
EMITO(ML2); 04314000
|
|
IT ~ IT-1; 04315000
|
|
END; 04316000
|
|
BEGIN EMITO(ML2); IT ~ IT-1 END; 04317000
|
|
BEGIN ES2; E0(XCH); E0(DEL) ; 04318000
|
|
DTIMESC: EOL(9); EOL(17); E0(MUL); GO CTYP ; 04318010
|
|
END ; 04318020
|
|
BEGIN TM~MUL ; 04319000
|
|
CTIMESR: EP(9,SND); E0(TM) ; 04319010
|
|
CTIMESR1:E0(XCH); EOL(9); E0(TM) ; 04319020
|
|
CTIMESR2:E0(XCH); GO CTYP ; 04319030
|
|
END ; 04319040
|
|
BEGIN TM~MUL; GO CDIVBYD END ; 04320000
|
|
MATH(2, 26, COMPTYPE); 04321000
|
|
END MULTIPLY CASE STATEMENT; 04322000
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 04323000
|
|
CASE CODE OF 04324000
|
|
BEGIN 04325000
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN 04326000
|
|
BEGIN EMITO(IDV); IT ~ IT-1 END ELSE 04327000
|
|
BEGIN EMITO(DIU); OPTYPE[IT~IT-1] ~ REALTYPE END; 04328000
|
|
BEGIN 04329000
|
|
EP(9,STD); EP(17,STD); EP(0,XCH); EOL(17); EOL(9); E0(DV2) ; 04329010
|
|
GO DTYP ; 04329020
|
|
END ; 04329030
|
|
MATH(1, 29, COMPTYPE); 04330000
|
|
BEGIN 04331000
|
|
EMITPAIR(0, XCH); 04332000
|
|
EMITO(DV2); 04333000
|
|
IT ~ IT-1; 04334000
|
|
END; 04335000
|
|
BEGIN EMITO(DV2); IT ~ IT-1 END; 04336000
|
|
MATH(2, 32, COMPTYPE); 04337000
|
|
BEGIN TM~DIU; GO CTIMESR END ; 04338000
|
|
BEGIN TM~DIU ; 04339000
|
|
CDIVBYD: E0(XCH); E0(DEL); GO CTIMESR ; 04339010
|
|
END ; 04339020
|
|
MATH(2, 35, COMPTYPE); 04340000
|
|
END OF DIVIDE CASE STATEMENT; 04341000
|
|
IF CODE < 0 THEN BEGIN FLAG(55); IT ~ IT-1 END ELSE 04342000
|
|
BEGIN 04343000
|
|
IF CODE = 0 AND T2 = INTYPE AND 04344000
|
|
CNSTSEENLAST THEN %113-04345000
|
|
BEGIN 04346000
|
|
IF T1 = INTYPE AND T2 = INTYPE THEN IT ~ IT-1 ELSE 04347000
|
|
OPTYPE[IT~IT-1] ~ REALTYPE; 04348000
|
|
EXPV~LINK; %113- 04349000
|
|
A~1; ADR~SAVEADR; %113- 04350000
|
|
WHILE EXPV DIV 2 ! 0 DO 04351000
|
|
BEGIN 04352000
|
|
EMITO(DUP); 04353000
|
|
IF BOOLEAN(EXPV) THEN BEGIN A~A+1; EMITO(DUP) END; 04354000
|
|
EMITO(MUL); 04355000
|
|
EXPV ~ EXPV DIV 2; 04356000
|
|
END; 04357000
|
|
IF EXPV = 0 THEN BEGIN EMITO(DEL); EMITL(1) END ELSE 04358000
|
|
WHILE A ~ A-1 ! 0 DO EMITO(MUL); 04359000
|
|
END ELSE 04360000
|
|
BEGIN 04361000
|
|
EMITO(MKS); 04362000
|
|
EMITL(CODE); 04363000
|
|
EMITV(NEED(".XTOI ", INTRFUNID)); 04364000
|
|
CASE CODE OF 04365000
|
|
BEGIN 04366000
|
|
BEGIN EMITO(DEL); OPTYPE[IT~IT-1]~IF (T1=INTYPE AND T2=INTYPE)04367000
|
|
THEN INTYPE ELSE REALTYPE END; 04367500
|
|
BEGIN EMITO(DEL); OPTYPE[IT~IT-1] ~ DOUBTYPE END; 04368000
|
|
BEGIN EMITO(DEL); OPTYPE[IT~IT-1]~COMPTYPE END ; 04369000
|
|
BEGIN EMITO(DEL); IT ~ IT-1 END; 04370000
|
|
BEGIN EMITO(DEL); EMITO(DEL); IT ~ IT-1 END; 04371000
|
|
BEGIN EMITO(DEL); EMITO(DEL); OPTYPE[IT~IT-1]~COMPTYPE END ; 04372000
|
|
BEGIN EMITO(DEL); IT ~ IT-1 END; 04373000
|
|
BEGIN EMITO(DEL); EMITO(DEL); IT ~ IT-1 END; 04374000
|
|
BEGIN EMITO(DEL); EMITO(DEL); IT~IT-1 END ; 04375000
|
|
END OF POWER CASE STATEMENT; 04376000
|
|
END; 04377000
|
|
END; 04378000
|
|
END; 04379000
|
|
IP ~ IP-1; 04380000
|
|
END; 04381000
|
|
EXPRESLT ~ EXPCLASS; 04381100
|
|
STACK: 04382000
|
|
PR[IP~IP+1] ~ PREC; 04383000
|
|
OPST[IP] ~ OP; 04384000
|
|
04385000
|
|
IF PREC > 0 AND PREC { 4 THEN 04386000
|
|
BEGIN 04387000
|
|
SCAN; LINK ~ FNEXT; 04388000
|
|
IF NEXT = PLUS THEN GO TO LOOP; 04389000
|
|
IF NEXT ! MINUS THEN GO TO NOSCAN; 04390000
|
|
PREC ~ 8; OP ~ 12; 04391000
|
|
GO TO STACK; 04392000
|
|
END; 04393000
|
|
GO TO LOOP; 04394000
|
|
XIT: IF IP ! SAVIP THEN FLOG(56); 04395000
|
|
IP ~ SAVIP-1; 04396000
|
|
EXPR ~ OPTYPE[IT]; 04397000
|
|
IF OPTYPE[IT-1] ! 0 THEN FLOG(56); 04398000
|
|
IT ~ SAVIT-1; 04399000
|
|
EXPRESULT ~ EXPRESLT; 04400000
|
|
EXPVALUE ~ EXPV; 04401000
|
|
EXPLINK ~ EXPLNK; 04402000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" EXPRE","SSION ",FALSE) ; 04403000
|
|
END EXPR; 04404000
|
|
PROCEDURE FAULT (X); 04404050
|
|
VALUE X; 04404100
|
|
REAL X; 04404125
|
|
BEGIN REAL LINK; LABEL XIT; 04404150
|
|
SCAN; IF GLOBALNEXT ! LPAREN THEN BEGIN FLAG(106); GO XIT END; 04404200
|
|
SCAN; IF GLOBALNEXT ! ID THEN BEGIN FLAG(66); GO TO XIT END; 04404250
|
|
IF X = 1 THEN PDPRT[0,0] ~ PDPRT[0,0] & 1[44:47:1] ELSE 04404275
|
|
PDPRT[0,0] ~ PDPRT [0,0] & 1[43 :47:1]; 04404300
|
|
EMITOPDCLIT(41); EMITO(DUP); 04404325
|
|
IF X = 1 THEN BEGIN EMITL(2); EMITO(XCH); EMITL(1) END 04404350
|
|
ELSE EMITL(6); 04404375
|
|
EMITO(LND); 04404425
|
|
IF X = 2 THEN EMITL(3); 04404435
|
|
EMITO(SUB); 04404450
|
|
IF X = 2 THEN 04404475
|
|
BEGIN EMITO(DUP); EMITL(3); EMITO(SSN) ;EMITO(EQUL); EMITL(2)04404500
|
|
;EMITO(BFC) ; EMITO(DEL);EMITL(2); 04404525
|
|
END; 04404550
|
|
LINK ~ GET(GETSPACE(FNEXT)); EMITPAIR(LINK.ADDR,ISD); 04404570
|
|
IF X = 1 THEN EMITL(30) ELSE EMITL(25); 04404600
|
|
EMITO(LND); EMITL(41);EMITO(STD); 04404625
|
|
SCAN; IF GLOBALNEXT ! RPAREN THEN FLAG(108); 04404650
|
|
SCAN; 04404660
|
|
XIT: 04404675
|
|
END FAULT; 04404700
|
|
PROCEDURE SUBREF; 04405000
|
|
BEGIN REAL LINK,INFC; 04406000
|
|
REAL ACCIDENT; 04406010
|
|
LABEL XIT; 04406020
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUB","REF ",TRUE ) ; 04406025
|
|
IF TSSEDITOG THEN IF NAME="ZIP " AND NOT DCINPUT THEN TSSED(NAME,3) ; 04406030
|
|
IF NAME = "EXIT " THEN 04407000
|
|
BEGIN 04408000
|
|
RETURNFOUND ~ TRUE; 04408100
|
|
EMITL(1); 04409000
|
|
EMITPAIR(16,STD); 04410000
|
|
EMITPAIR(10,KOM); 04411000
|
|
EMITPAIR( 5, KOM); 04412000
|
|
PUT(FNEXT+1, "......"); 04413000
|
|
SCAN; 04414000
|
|
END ELSE IF NAME="ZIP " AND NOT DCINPUT THEN 04415000
|
|
BEGIN 04415010
|
|
EMITO(MKS); 04415011
|
|
EMITL(0); EMITL(0); % DUMMY FILE AND FORMAT 04415020
|
|
EMITPAIR(-1,SSN); 04415021
|
|
EMITB(-1,FALSE); LADR1~LAX; ADJUST; DESCREQ~FALSE; 04415030
|
|
IF ADR } 4085 THEN BEGIN ADR~ADR+1; SEGOVF END; 04415040
|
|
ACCIDENT~PRGDESCBLDR(0,0,ADR.[36:10]+1,NSEG); 04415050
|
|
EMITOPDCLIT(19); 04415070
|
|
EMITO(GFW); 04415080
|
|
LISTART ~ ADR&NSEG[TOSEGNO]; ADJUST;SCAN; 04415090
|
|
IF GLOBALNEXT!LPAREN THEN BEGIN FLAG(106);GO TO XIT END; 04415100
|
|
SCAN; IF GLOBALNEXT!ID THEN BEGIN FLAG(66); GO TO XIT END; 04415110
|
|
LINDX ~ FNEXT; SCAN; XTA ~ GET(LINDX+1); 04415120
|
|
IF GLOBALNEXT!RPAREN THEN BEGIN FLAG(108); GO TO XIT END; 04415130
|
|
LINDX ~ GETSPACE(LINDX); 04415140
|
|
IF T~(LINFA~GET(LINDX)).CLASS!ARRAYID THEN 04415150
|
|
BEGIN FLAG(66); GO TO XIT END; 04415160
|
|
IF XREF THEN ENTERX(XTA,0&LINFA[15:15:9]); 04415165
|
|
EMITPAIR(LADDR~LINFA.ADDR,LOD); 04415170
|
|
IF BOOLEAN(LINFA.FORMAL) THEN 04415180
|
|
BEGIN 04415190
|
|
IF T ~ GET(LINDX+2)<0 THEN EMITOPDCLIT(T.SIZE) 04415200
|
|
ELSE EMITNUM(T.SIZE); EMITOPDCLIT(LADDR-1); EMITO(CTF) END 04415210
|
|
ELSE EMITNUM(GET(LINDX+2).BASENSIZE); EMITL(18); EMITO(STD);; 04415220
|
|
EMITL(LINFA.CLASNSUB&0[44:47:1]); EMITL(19); EMITO(STD); 04415230
|
|
BRANCHLIT(LISTART,TRUE); EMITL(19); EMITO(STD); 04415240
|
|
EMITO(RTS); ADJUST; 04415250
|
|
EMITL(1); EMITO(CHS); EMITL(19); EMITO(STD); 04415260
|
|
EMITDESCLIT(19); EMITO(RTS); FIXB(LADR1); DESCREQ~FALSE; 04415270
|
|
EMITPAIR(ACCIDENT,LOD); EMITOPDCLIT(7); EMITO(FTF); 04415280
|
|
EMITL(6); % EDITCODE 6 FOR ZIP 04415290
|
|
EMITV(NEED(".FTOUT",INTRFUNID)); SCAN 04415300
|
|
END ELSE IF NAME = "OVERFL" THEN FAULT(2) 04415310
|
|
ELSE IF NAME = "DVCHK " THEN FAULT(1) 04415320
|
|
ELSE 04415330
|
|
BEGIN 04416000
|
|
LINK ~ NEED(NAME, SUBRID); 04417000
|
|
IF XREF THEN ENTERX(XTA,0&GET(LINK)[15:15:5]); 04417100
|
|
EMITO(MKS); 04418000
|
|
SCAN; 04419000
|
|
IF GLOBALNEXT = LPAREN THEN 04420000
|
|
BEGIN PARAMETERS(LINK); SCAN END ELSE 04421000
|
|
IF NOT BOOLEAN((INFC~GET(LINK+2)).[1:1]) THEN 04422000
|
|
PUT(LINK+2,-INFC) ELSE 04423000
|
|
IF INFC.NEXTRA ! 0 THEN 04424000
|
|
BEGIN XTA ~ GET(LINK+1); FLAG(28) END; 04425000
|
|
EMITV(LINK); 04426000
|
|
04426500
|
|
04426700
|
|
END; 04427000
|
|
XIT: 04427010
|
|
IF DEBUGTOG THEN FLAGROUTINE(" SUB","REF ",FALSE) ; 04427025
|
|
END SUBREF; 04428000
|
|
PROCEDURE DECLAREPARMS(FNEW); VALUE FNEW; REAL FNEW; 04429000
|
|
BEGIN 04430000
|
|
REAL I, T, NLABELS, INFA, INFB, INFC; 04431000
|
|
IF DEBUGTOG THEN FLAGROUTINE("DECLAR","EPARMS",TRUE ) ; 04431010
|
|
INFA ~ GET(FNEW); 04432000
|
|
IF INFA.SEGNO ! 0 THEN BEGIN XTA ~ NNEW; FLAG(25) END; 04433000
|
|
INFA.SEGNO ~ NSEG; PUT(FNEW,INFA); 04434000
|
|
ENTRYLINK[ELX] ~ 0 & FNEW[TOLINK] & NEXTSS[TOADDR]; 04435000
|
|
FOR I ~ 1 STEP 1 UNTIL PARMS DO 04436000
|
|
BEGIN 04437000
|
|
EXTRAINFO[NEXTSS.IR,NEXTSS.IC] ~ PARMLINK[I]; 04438000
|
|
NEXTSS ~ NEXTSS-1; 04439000
|
|
IF T ~ PARMLINK[I] ! 0 THEN 04440000
|
|
BEGIN 04441000
|
|
GETALL(T,INFA,INFB,INFC); 04442000
|
|
IF BOOLEAN(INFA .FORMAL) THEN 04443000
|
|
BEGIN 04443100
|
|
IF INFA.SEGNO = ELX THEN 04444000
|
|
BEGIN XTA ~ INFB ; FLAG(26) END; 04445000
|
|
END ELSE IF (INFA < 0 AND INFA.ADDR < 1024) OR BOOLEAN(INFA.CE)04445100
|
|
THEN BEGIN XTA ~ INFB; FLAG(107) END; 04445200
|
|
INFA ~ INFA & 1[TOFORMAL] & ELX[TOSEGNO]; 04446000
|
|
INFC .BASE ~ I; 04447000
|
|
PUT(T,INFA); PUT(T+2,INFC); 04448000
|
|
END ELSE NLABELS ~ NLABELS+1; 04449000
|
|
END; 04450000
|
|
IF NLABELS > 0 THEN 04451000
|
|
BEGIN ENTRYLINK[ELX ].CLASS ~ NLABELS; 04452000
|
|
IF LABELMOM=0 THEN BEGIN BUMPLOCALS; LABELMOM~LOCALS+1536 END; 04453000
|
|
END; 04454000
|
|
GETALL(FNEW,INFA,INFB,INFC); 04455000
|
|
IF BOOLEAN(INFC.[1:1]) THEN 04456000
|
|
BEGIN 04457000
|
|
IF INFC.NEXTRA ! PARMS THEN 04458000
|
|
BEGIN XTA ~ INFB; FLOG(41); 04459000
|
|
PARMS ~ INFC.NEXTRA; 04460000
|
|
END; 04461000
|
|
T ~ INFC.ADINFO; 04462000
|
|
FOR I ~ 1 STEP 1 UNTIL PARMS DO 04463000
|
|
IF NOT(PARMLINK[I] = 0 EQV 04464000
|
|
EXTRAINFO[(T+I-1).IR,(T+I-1).IC].CLASS = LABELID) THEN 04465000
|
|
BEGIN IF PARMLINK[I] = 0 THEN XTA ~ "* " 04466000
|
|
ELSE XTA ~ GET(PARMLINK[I]+1); 04467000
|
|
FLAG(40); 04468000
|
|
END; 04469000
|
|
END 04470000
|
|
ELSE 04471000
|
|
BEGIN 04472000
|
|
IF PARMS = 0 THEN INFC ~ -INFC ELSE 04473000
|
|
INFC ~ -(INFC & PARMS[TONEXTRA] 04474000
|
|
& NEXTEXTRA[TOADINFO]); 04475000
|
|
PUT(FNEW+2,INFC); 04476000
|
|
FOR I ~ 1 STEP 1 UNTIL PARMS DO 04477000
|
|
BEGIN 04478000
|
|
EXTRAINFO[NEXTEXTRA.IR,NEXTEXTRA.IC] ~ 0 & 04479000
|
|
(IF PARMLINK[I] = 0 THEN LABELID ELSE 0)[TOCLASS]; 04480000
|
|
NEXTEXTRA ~ NEXTEXTRA+1; 04481000
|
|
END; 04482000
|
|
END; 04483000
|
|
IF ELX ~ ELX+1 > MAXEL THEN BEGIN FLAG(128); ELX ~ 0 END; 04484000
|
|
IF DEBUGTOG THEN FLAGROUTINE("DECLAR","EPARMS",FALSE) ; 04484010
|
|
END DECLAREPARMS; 04485000
|
|
PROCEDURE IOLIST(LEVEL); REAL LEVEL; 04486000
|
|
BEGIN ALPHA LADR2,T; 04487000
|
|
BOOLEAN A; 04487050
|
|
INTEGER INDX,I,BDLINK,NSUBS; 04487100
|
|
LABEL ROUND,XIT,ERROR,LOOP,SCRAM; 04488000
|
|
INTEGER STREAM PROCEDURE CNTNAM(IDEN); VALUE IDEN; 04488100
|
|
BEGIN LABEL XIT; 04488200
|
|
SI ~ LOC IDEN; SI ~ SI + 3; TALLY ~ 1; 04488300
|
|
5(IF SC = " " THEN JUMP OUT TO XIT;SI ~ SI+1;TALLY ~ TALLY+1); 04488400
|
|
XIT: CNTNAM ~ TALLY; 04488500
|
|
END CNTNAM; 04488600
|
|
04489000
|
|
04490000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" IOL","IST ",TRUE ) ; 04491000
|
|
ROUND: DESCREQ ~ TRUE; 04492000
|
|
LOCALNAME ~ FALSE; 04492100
|
|
IF GLOBALNEXT = SEMI THEN GO TO XIT; 04493000
|
|
IF GLOBALNEXT = STAR THEN 04493100
|
|
BEGIN IF NOT NAMEDESC THEN 04493150
|
|
TV ~ ENTER(0&LISTSID[TOCLASS],LISTID~LISTID+1); 04493200
|
|
LOCALNAME ~ TRUE; NAMEDESC ~ TRUE; SCAN; 04493300
|
|
END; 04493350
|
|
IF GLOBALNEXT = ID THEN 04494000
|
|
BEGIN LINDX ~ FNEXT; 04495000
|
|
SCAN; XTA ~ GET(LINDX+1); 04496000
|
|
IF GLOBALNEXT = EQUAL THEN %RETURN TO CALLER 04497000
|
|
BEGIN IF (LINFA~GET(GETSPACE(LINDX))).CLASS ! VARID THEN FLAG(50);04498000
|
|
SCRAM: IF (LEVEL ~ LEVEL-1) < 0 THEN FLOG(97); 04498100
|
|
GO TO XIT; 04498200
|
|
END; 04499000
|
|
04500000
|
|
IF DATASTMTFLAG AND SPLINK } 0 THEN %DECLARE OWN 04500100
|
|
BEGIN 04500200
|
|
IF BOOLEAN(GET(LINDX).FORMAL) THEN FLAG(147); 04500300
|
|
IF SPLINK>1 THEN 04500310
|
|
IF GET(LINDX).ADDR>1023 THEN FLAG(174); 04500320
|
|
LINDX ~ GETSPACE(-LINDX); 04500400
|
|
IF BOOLEAN(GET(LINDX).EQ) THEN FLAG(168); 04500420
|
|
END ELSE LINDX ~ GETSPACE(LINDX); 04500500
|
|
IF T ~ (LINFA~GET(LINDX)).CLASS > VARID THEN FLAG(50); 04500600
|
|
IF XREF THEN ENTERX(XTA,C2&LINFA[15:15:9]); 04500655
|
|
IF GLOBALNAME OR LOCALNAME THEN 04500700
|
|
IF NAMEIND~ NAMEIND+1 GTR LSTMAX THEN FLOG(161) 04500725
|
|
ELSE NAMLIST[NAMEIND] ~ XTA & CNTNAM(XTA)[9:45:3]; 04500750
|
|
IF T = ARRAYID THEN 04501000
|
|
IF GLOBALNEXT ! LPAREN THEN 04502000
|
|
BEGIN IF SPLINK ! 1 THEN 04503000
|
|
BEGIN 04503004
|
|
EMITL(0); 04503008
|
|
EMITPAIR(LADDR ~ LINFA.ADDR,LOD); 04503010
|
|
EMITO(FTC); 04503020
|
|
EMITDESCLIT(2); 04503030
|
|
EMITO(INX); 04503040
|
|
EMITO(LOD); 04503050
|
|
END ELSE EMITPAIR(LADDR-LINFA.ADDR,LOD); 04503055
|
|
NSUBS ~ (T ~ GET (LINDX+2)).NEXTRA; 04503100
|
|
IF GLOBALNAME OR LOCALNAME THEN 04503125
|
|
BEGIN 04503150
|
|
IF NSUBS GTR SAVESUBS THEN SAVESUBS ~ NSUBS; 04503160
|
|
IF NSUBS GTR NAMLIST[0] THEN NAMLIST[0] ~ NSUBS; 04503170
|
|
NAMLIST[NAMEIND].[1:8] ~ NSUBS; 04503175
|
|
INDX ~ -1; 04503180
|
|
INFA ~ GET(NEED(".SUBAR",BLOCKID)).ADDR; 04503190
|
|
BDLINK ~ T.ADINFO+1; 04503200
|
|
END; 04503225
|
|
IF BOOLEAN (LINFA.FORMAL) THEN 04504000
|
|
BEGIN 04505000
|
|
IF T LSS 0 THEN EMITOPDCLIT(T.SIZE) 04505200
|
|
ELSE EMITNUM(T.SIZE); 04506000
|
|
EMITOPDCLIT(LADDR-1); 04507000
|
|
EMITO(CTF); 04508000
|
|
END ELSE EMITNUM(T.BASENSIZE); 04509000
|
|
IF GLOBALNAME OR LOCALNAME THEN 04509050
|
|
FOR I ~ 1 STEP 1 UNTIL NSUBS DO 04509100
|
|
BEGIN IF T ~ EXTRAINFO[(BDLINK~BDLINK-1).IR, 04509150
|
|
BDLINK.IC] LSS 0 THEN EMITOPDCLIT(T) 04509200
|
|
ELSE EMITNUM(T); 04509250
|
|
EMITNUM(INDX ~ INDX+1); 04509300
|
|
EMITDESCLIT(INFA); 04509350
|
|
EMITO(STD); 04509400
|
|
END; 04509450
|
|
EMITL(18); EMITO(STD); 04510000
|
|
END ELSE 04511000
|
|
BEGIN SCAN; 04512000
|
|
A ~(IF GLOBALNAME OR LOCALNAME 04513000
|
|
THEN SUBSCRIPTS(LINDX,4) ELSE SUBSCRIPTS(LINDX,2)); 04513100
|
|
SCAN; 04514000
|
|
END 04515000
|
|
ELSE EMITN(LINDX); 04516000
|
|
IF GLOBALNAME OR LOCALNAME THEN 04516100
|
|
BEGIN EMITOPDCLIT(18); EMITNUM(NAMEIND); 04516200
|
|
EMITD(43,DIA); EMITD(3,DIB); EMITD(15,TRB); 04516300
|
|
EMITL(18); EMITO(STD); 04516350
|
|
END; 04516400
|
|
EMITL(LINFA.CLASNSUB&0[44:47:1]); 04517000
|
|
EMITL(20); EMITO(STD); 04518000
|
|
IF ADR > 4083 THEN 04518100
|
|
BEGIN ADR~ADR+1; SEGOVF END ; 04518200
|
|
BRANCHLIT(LISTART,TRUE); 04519000
|
|
EMITL(19); EMITO(STD); 04520000
|
|
EMITO(RTS); ADJUST; 04521000
|
|
GO TO LOOP; 04522000
|
|
END; 04523000
|
|
IF GLOBALNEXT = LPAREN THEN % RECURSE ON ( 04524000
|
|
BEGIN EMITB(-1,FALSE); 04525000
|
|
ADJUST; 04526000
|
|
LADR2 ~ (ADR + 1)&LAX[TOADDR]&NSEG[TOSEGNO]; 04527000
|
|
SCAN; LEVEL ~ LEVEL + 1; 04528000
|
|
IOLIST(LEVEL); 04529000
|
|
IF GLOBALNEXT ! EQUAL THEN % PHONY IMP DO 04530000
|
|
BEGIN BRANCHES[T ~ LADR2.ADDR] ~ BRANCHX; 04531000
|
|
BRANCHX ~ T; 04532000
|
|
IF GLOBALNEXT ! RPAREN THEN GO TO ERROR; 04533000
|
|
SCAN; GO TO LOOP; 04534000
|
|
END; 04535000
|
|
IF XREF THEN ENTERX(GET(LINDX+1),1&LINFA[15:15:9]); 04535500
|
|
IF LINFA.SUBCLASS > REALTYPE THEN 04536000
|
|
BEGIN XTA ~ GET(LINDX + 1); 04537000
|
|
FLAG(84); 04538000
|
|
END; 04539000
|
|
EMITB(-1,FALSE); 04540000
|
|
LADR3 ~ LAX; 04541000
|
|
FIXB(LADR2.ADDR); 04542000
|
|
DESCREQ ~ FALSE; 04543000
|
|
SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(102); % INITIAL VALUE 04544000
|
|
EMITN(LINDX); EMITO(STD); 04545000
|
|
EMITB(LADR2,FALSE); 04546000
|
|
IF GLOBALNEXT ! COMMA THEN GO TO ERROR; 04547000
|
|
ADJUST; 04548000
|
|
LADR4 ~ (ADR + 1)&NSEG[TOSEGNO]; 04549000
|
|
SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(102) ELSE EMITO(GRTR); 04550000
|
|
EMITB(LADR2,TRUE); 04551000
|
|
EMITB(-1,FALSE); 04552000
|
|
LADR5 ~ LAX; 04553000
|
|
FIXB(LADR3); 04554000
|
|
IF GLOBALNEXT ! COMMA THEN EMITL(1) 04555000
|
|
ELSE BEGIN SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(102); END; 04556000
|
|
EMITV(LINDX); EMITO(ADD); 04557000
|
|
EMITN(LINDX); EMITO(SND); 04558000
|
|
EMITB(LADR4,FALSE); 04559000
|
|
FIXB(LADR5); 04560000
|
|
IF GLOBALNEXT = RPAREN THEN SCAN ELSE GO TO ERROR; 04561000
|
|
LOOP: IF GLOBALNEXT = SEMI OR GLOBALNEXT = SLASH THEN GO TO XIT; 04562000
|
|
IF GLOBALNEXT = RPAREN THEN GO TO SCRAM; 04563000
|
|
IF GLOBALNEXT = COMMA THEN 04564000
|
|
BEGIN SCAN; 04565000
|
|
IF GLOBALNEXT = SEMI THEN GO TO ERROR; 04566000
|
|
GO TO ROUND; 04567000
|
|
END; 04568000
|
|
ERROR: XTA ~ NAME; 04569000
|
|
FLAG(94); 04570000
|
|
IF GLOBALNEXT = SEMI THEN GO TO XIT; 04571000
|
|
SCAN; 04572000
|
|
IF GLOBALNEXT = ID THEN GO TO ROUND; 04573000
|
|
ERRORTOG ~ TRUE; GO TO XIT; 04574000
|
|
END; 04575000
|
|
IF GLOBALNEXT = RPAREN THEN GO TO SCRAM ELSE 04576000
|
|
IF GLOBALNEXT ! SLASH THEN GO TO ERROR; 04577000
|
|
XIT: IF DEBUGTOG THEN FLAGROUTINE(" IOL","IST ",FALSE) ; 04578000
|
|
END IOLIST; 04579000
|
|
INTEGER PROCEDURE FILECHECK(FILENAME,FILETYPE); 04580000
|
|
VALUE FILENAME,FILETYPE; ALPHA FILENAME; INTEGER FILETYPE; 04581000
|
|
BEGIN COMMENT THIS PROCEDURE RETURNS THE PRT CELL ALLOCATED TO 04582000
|
|
THE FILE FILENAME... A CELL IS CREATED IF NONE EXISTS; 04583000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEC","HECK ",TRUE); 04583010
|
|
EMITL(IF NOTOPIO THEN 2 ELSE 5); % FOR IO DESCRIPTOR 04584000
|
|
IF T ~ GLOBALSEARCH(FILENAME) = 0 THEN % FILE UNDECLARED 04585000
|
|
BEGIN MAXFILES ~ MAXFILES + 1; 04586000
|
|
BUMPPRT; 04586500
|
|
I ~ GLOBALENTER(-0&(FILECHECK~PRTS)[TOADDR] 04587000
|
|
&FILEID[TOCLASS],FILENAME)+2; 04588000
|
|
INFO[I.IR,I.IC]. LINK ~ FILETYPE; 04589000
|
|
END ELSE % FILE ALREADY EXISTS 04590000
|
|
FILECHECK ~ GET(T).ADDR; 04591000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FILEC","HECK ",FALSE) ; 04591010
|
|
END FILECHECK; 04592000
|
|
PROCEDURE INLINEFILE; 04593000
|
|
BEGIN COMMENT THIS PROCEDURE GENERATES THE CODE TO BRING UP THE FILE...04594000
|
|
IF THE FILE IS AN INTEGER THEN FILECHECK IS CALLED, IF THE FILE 04595000
|
|
IS NOT AN INTEGER THEN IN-LINE CODE IS GENERATED FOR OBJECT TIME 04596000
|
|
ANALYSIS; 04597000
|
|
REAL TEST; 04598000
|
|
COMMENT IF LAST INSTRUCTION WAS A LIT CALL THEN WE HAVE SEEN REFERENCE 04599000
|
|
TO AN INTEGER FILE ID; 04600000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" INLIN","EFILE ",TRUE ) ; 04600010
|
|
TEST~ADR ; 04601000
|
|
IF EXPR(TRUE)>REALTYPE THEN FLAG(102) 04602000
|
|
ELSE IF EXPRESULT=NUMCLASS THEN 04602500
|
|
BEGIN XTA~NNEW ; 04603000
|
|
IF EXPVALUE}1.0@5 OR EXPVALUE{0.5 THEN FLAG(33) 04603500
|
|
ELSE BEGIN 04604000
|
|
IF ADR<TEST THEN % EXPR GOT SEGOVFL--ASSUME NO WRAPAROUND04604010
|
|
EMITO(DEL) 04604020
|
|
ELSE ADR~TEST; 04604025
|
|
TEST~SPCLBIN2DEC(C1~EXPVALUE); 04604030
|
|
IF XREF THEN ENTERX(TEST&1[TOCE],0&FILEID[TOCLASS]) ; 04604040
|
|
EMITDESCLIT(FILECHECK(0&"."[12:42:6]&TEST[18:12:30], 04604050
|
|
IF DCINPUT THEN 12 ELSE 2)) ; 04604060
|
|
END ; 04604070
|
|
END ELSE 04604080
|
|
COMMENT NOT INTEGER FILE... GENERATE OBJECT TIME CODE; 04605000
|
|
BEGIN EMITPAIR(17,ISN) ; 04606000
|
|
IF FILEARRAYPRT=0 THEN BEGIN BUMPPRT;FILEARRAYPRT~PRTS END; 04607000
|
|
EMITOPDCLIT(FILEARRAYPRT); 04608000
|
|
EMITO(DUP); EMITL(0); EMITO(EQUL); 04609000
|
|
COMMENT NEED 7 CONSECUTIVE SYLLABLES; 04610000
|
|
IF ADR } 4082 THEN 04611000
|
|
BEGIN ADR ~ ADR + 1; 04612000
|
|
SEGOVF; 04613000
|
|
END; 04614000
|
|
EMITL(3+FILEARRAYPRT.[38:1]);%CONSIDER POSSIBLE XRT 04615000
|
|
EMITO(BFC); % BRANCH AROUND TERMINATION CODE 04615100
|
|
EMITL(1); EMITO(CHS); EMITOPDCLIT(FILEARRAYPRT); % INV INDEX 04616000
|
|
EMITO(LOD); EMITL(IF NOTOPIO THEN 2 ELSE 5); EMITO(CDC); 04617000
|
|
END; 04618000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" INLIN","EFILE ",FALSE) ; 04618010
|
|
END INLINEFILE; 04619000
|
|
PROCEDURE FILECONTROL(N); VALUE N; REAL N; 04619010
|
|
BEGIN COMMENT COMPILES ALL CALLS ON ALGOL FILE CONTROL; 04619020
|
|
EODS~TRUE ; 04619025
|
|
EXECUTABLE ; 04619027
|
|
SCAN; EMITO(MKS); 04619030
|
|
EMITL(N); EMITL(0); 04619040
|
|
NOTOPIO ~ TRUE; 04619050
|
|
INLINEFILE ; 04619060
|
|
EMITL(4); EMITOPDCLIT(14); 04619070
|
|
NOTOPIO ~ FALSE; 04619080
|
|
END FILECONTROL; 04619090
|
|
PROCEDURE FORMATER; 04620000
|
|
BEGIN 04621000
|
|
COMMENT FORMATER COMPILES A PSEUDO CODE USED BY THE OBJECT TIME 04621500
|
|
FORMATING ROUTINES TO PRODUCE DESIRED I/O. USUALLY, THERE IS 04622000
|
|
ONE WORD OF PSEUDO CODE PRODUCED FOR EACH EDITING PHRASE. IN 04622500
|
|
ADDITION ONE WORD IS PRODUCED FOR EACH RIGHT PARENTHESIS AND 04623000
|
|
SLASH GROUP. 04623500
|
|
THE 47TH BIT OF THE FIRST WORD IS SET IF THERE ARE LIST 04624000
|
|
ELEMENT PHRASES IN THE FORMAT STATEMENT. 04624500
|
|
THERE ARE FOUR GROUPS OF PHRASES: 04625000
|
|
GROUP 1 = F, E, D, G = REPEAT WIDTH DECIMAL 04625500
|
|
GROUP 2 = I, J, A, O, L, T, C, = REPEAT WIDTH 04626000
|
|
X, P 04626100
|
|
GROUP 3 = H = REPEAT SPECIAL PURPOSE 04626500
|
|
GROUP 4 = ), / = CONTROL REPEAT LINK 04627000
|
|
WORD FOR GROUP 1: 04627500
|
|
CODE = [ 1: 5] 04628000
|
|
REPEAT = [ 6:12] 04628500
|
|
WIDTH = [18:12] 04629000
|
|
DEDIMAL = [30:12] 04629500
|
|
WORD FOR GROUP 2: 04630000
|
|
CODE = [ 1: 5] 04630500
|
|
REPEAT = [ 6:12] 04631000
|
|
WIDTH = [18:12] 04631500
|
|
SIGN = [41: 1] 04631600
|
|
FOR P, X AND T REPEAT = 1 04631625
|
|
P: SIGN = SIGN OF SCALE 04631650
|
|
WORD FOR GROUP 3: 04632000
|
|
CODE = [ 1: 5] 04632500
|
|
REPEAT = [ 6:12] 04633000
|
|
H: STRING STARTS AT BIT 18 AND CONTINUES TO END OF STRING 04635500
|
|
REPEAT = NUMBER OF STRING CHARACTERS 04635600
|
|
WORD FOR GROUP 4: 04636000
|
|
CODE = [ 1: 5] 04636500
|
|
REPEAT = [ 6:12] 04637000
|
|
LINK = [18:12] 04637500
|
|
DECIMAL = [30:12] 04638000
|
|
CNTROL = [47: 1] 04638500
|
|
): LINK NUMBER OF WORD - 1 BACK TO 1ST PHRASE AFTER 04639000
|
|
LEFT PAREN 04639500
|
|
REPEAT = REPEAT OF ASSOCIATED LEFT PAREN 04639600
|
|
OUTER MOST RIGHT PAREN 04640000
|
|
A. DECIMAL ! 0 04640500
|
|
B. LINKS TO LEFT PAREN OF LAST PREVIOUS RIGHT PAREN 04641000
|
|
/: REPEAT = NUMBER OF SLASHES. 04641500
|
|
; 04642000
|
|
DEFINE APHASE = 6 #, 04642500
|
|
VPHRASE = 30 #, 04642510
|
|
LPPHRASE = 29 #, 04642520
|
|
CPHASE = 15 #, 04642600
|
|
DPHASE = 14 #, 04643000
|
|
EPHASE = 13 #, 04643500
|
|
FPHASE = 12 #, 04644000
|
|
GPHASE = 11 #, 04644500
|
|
HPHASE = 2 #, 04645000
|
|
IPHASE = 10 #, 04645500
|
|
JPHASE = 9 #, 04646000
|
|
LPHASE = 8 #, 04646500
|
|
OPHASE = 7 #, 04647000
|
|
PPHASE = 3 #, 04647500
|
|
TPHASE = 5 #, 04648000
|
|
XPHASE = 4 #, 04648500
|
|
RTPARN = 0 #, 04649000
|
|
SLASH = 1 #, 04649500
|
|
TOCODE = 1:43: 5 #, 04650000
|
|
TOREPEAT = 6:36:12 #, 04650500
|
|
TOWIDTH = 18:36:12 #, 04651000
|
|
TOLINK = 18:36:12 #, 04651500
|
|
TODECIMAL = 30:36:12 #, 04652000
|
|
TOCNTRL = 47:47: 1 #, 04652500
|
|
TONUM = 42:43: 1 #, 04653000
|
|
TOSIGN = 41:47: 1 #, 04653500
|
|
WSA = LSTT #; 04654000
|
|
REAL J, T; 04655000
|
|
LABEL KK,SL,FL ; 04655100
|
|
FORMAT FM(//"PHRASE# CODE REPEAT WIDTH DECIMAL",X2, 04655400
|
|
".[41:1] .[42:4] .[42:5] .[44:1] .[45:1]",X2, 04655410
|
|
".[46.1], .[46:2] .[47:1]"/) ; 04655420
|
|
INTEGER D,I, CODE,REPEAT,WIDTH,DECIMAL,TOTAL,SLCNT,SAVLASTLP, 04655500
|
|
PARENCT,SAVTOTAL; 04656000
|
|
BOOLEAN VRB,ASK ; 04656100
|
|
BOOLEAN LISTEL, HF, ZF, QF, PF, MINUSP, FEELD, STRINGF; 04656500
|
|
BOOLEAN COMMAS, DOLLARS, PLUSP, STR; 04656600
|
|
LABEL ROUND,NOPLACE,NUM,NUL,LP,RP,ENDER,NOEND,FALL,SEMIC,NUL1; 04657000
|
|
LABEL NEWWD, ROUND1; 04657100
|
|
ALPHA STREAM PROCEDURE GETCHAR(NCRV, T); VALUE NCRV; 04657500
|
|
BEGIN SI ~ NCRV; DI ~ T; DI ~ DI+7; DS ~ CHR; GETCHAR ~ SI; 04658000
|
|
END GETCHAR; 04658500
|
|
BOOLEAN PROCEDURE CONTINUE; 04659000
|
|
BEGIN 04659500
|
|
LABEL LOOP; 04660000
|
|
BOOLEAN STREAM PROCEDURE CONTIN(CD); 04660500
|
|
BEGIN SI~CD; IF SC ! "C" THEN IF SC ! "$" THEN BEGIN SI~SI+5; 04661000
|
|
IF SC ! " " THEN IF SC ! "0" THEN BEGIN TALLY~1; 04661500
|
|
CONTIN ~ TALLY END END 04662000
|
|
END OF CONTIN; 04662500
|
|
BOOLEAN STREAM PROCEDURE COMNT(CD,T); VALUE T; 04663000
|
|
BEGIN LABEL L; 04663500
|
|
SI~CD; IF SC = "C" THEN BEGIN T(SI~SI+1; IF SC="-" THEN 04664000
|
|
TALLY~1 ELSE JUMP OUT TO L); TALLY~1; L: END; COMNT~TALLY; 04664500
|
|
END COMNT; 04665000
|
|
BOOLEAN STREAM PROCEDURE DCCONTIN(CD); 04665500
|
|
BEGIN SI~CD; IF SC = "-" THEN TALLY ~ 1; DCCONTIN~TALLY; 04666000
|
|
END DCCONTIN; 04666500
|
|
LOOP: IF NOT(CONTINUE ~ 04667000
|
|
IF DCINPUT AND NOT TSSEDITOG OR FREEFTOG THEN 04667500
|
|
IF NEXTCARD<4 THEN DCCONTIN(CB) 04667600
|
|
ELSE IF NEXTCARD=7 THEN DCCONTIN(DB) ELSE CONTIN(TB) 04668000
|
|
ELSE IF NEXTCARD<4 THEN CONTIN(CB) 04668500
|
|
ELSE IF NEXTCARD=7 THEN CONTIN(DB) ELSE CONTIN(TB)) 04668600
|
|
THEN IF(IF NEXTCARD < 4 THEN 04669000
|
|
COMNT(CB,DCINPUT AND NOT TSSEDITOG OR FREEFTOG) 04669500
|
|
ELSE IF NEXTCARD = 7 THEN 04670000
|
|
COMNT(DB,DCINPUT AND NOT TSSEDITOG OR FREEFTOG) 04670100
|
|
ELSE COMNT(TB,0) AND NEXTCARD!6) THEN 04670500
|
|
BEGIN 04671000
|
|
IF READACARD THEN IF LISTOG THEN PRINTCARD; 04671500
|
|
GO TO LOOP; 04672000
|
|
END; 04672500
|
|
END CONTINUE; 04673000
|
|
STREAM PROCEDURE STORECHAR(ARY,POSIT,CHAR);VALUE POSIT; 04673500
|
|
BEGIN SI ~CHAR; SI ~ SI + 7; 04674000
|
|
DI ~ ARY; DI ~ DI + POSIT; 04674500
|
|
DS ~ CHR; 04675000
|
|
END STORECHAR; 04675500
|
|
ALPHA STREAM PROCEDURE BACKNCR(NCRV); VALUE NCRV; 04676000
|
|
BEGIN SI~NCRV; SI ~ SI-1; BACKNCR ~ SI; END BACKNCR; 04676500
|
|
COMMENT ******** START OF CODE **************; 04677000
|
|
IF XTA ~ LABL = BLANKS THEN FLAG(18) ELSE 04677500
|
|
IF D~ SEARCH(LABL) = 0 THEN 04678000
|
|
D~ ENTER(0 & FORMATID[TOCLASS], LABL) ELSE 04678500
|
|
IF GET(D).CLASS ! FORMATID THEN BEGIN D~0;FLAG(143) END; 04679000
|
|
IF XREF THEN ENTERX(LABL,1&FORMATID[TOCLASS]); 04679400
|
|
LABL ~ BLANKS; 04679500
|
|
NCR ~ BACKNCR(NCR); 04680000
|
|
WSA[0] ~ TOTAL ~ 1; 04680500
|
|
ROUND1: XTA ~ BLANKS; 04680700
|
|
ROUND: NCR ~ GETCHAR(NCR,T); 04681000
|
|
IF T = "]" THEN GO TO NOPLACE; 04681002
|
|
XTA ~ T & XTA[12:18:30]; 04681004
|
|
T~IF (T="&" OR T="<") AND 04681010
|
|
(HOLTOG OR NOT(HF OR STRINGF)) THEN "+" ELSE 04681020
|
|
IF (T="@" OR T=":") AND (HOLTOG OR NOT HF) THEN """ 04681030
|
|
ELSE T; 04681060
|
|
IF NOT (HF OR STRINGF) THEN 04681100
|
|
IF T = " " THEN GO TO ROUND 04681120
|
|
ELSE IF T="," THEN GO SL ; 04681140
|
|
IF HF THEN 04683000
|
|
BEGIN 04683500
|
|
STORECHAR(WSA[TOTAL],I,T); 04684000
|
|
IF HF ~ REPEAT ~ REPEAT - 1 ! 0 THEN 04684500
|
|
IF I ~ I+1 = 8 THEN 04685000
|
|
BEGIN IF TOTAL ~ TOTAL +1 > LSTMAX THEN GO TO NUL; 04685500
|
|
WSA[TOTAL] ~ I ~ 0; GO TO ROUND; 04686000
|
|
END ELSE GO TO ROUND ELSE GO TO NUL1; 04686500
|
|
END; 04687500
|
|
IF NOT STRINGF THEN 04687510
|
|
IF SLCNT > 0 THEN 04687520
|
|
IF T = "/" THEN BEGIN SLCNT ~ SLCNT+1; GO TO ROUND; END 04687530
|
|
ELSE 04687550
|
|
BEGIN WSA[TOTAL] ~ 0 & SLCNT[TOREPEAT] & SLASH[TOCODE]; 04687560
|
|
IF NOT STR THEN 04687580
|
|
IF REPEAT < 16 AND WSA[TOTAL-1].[42:6] = 0 THEN 04687590
|
|
WSA[TOTAL~TOTAL-1] ~ WSA[TOTAL] & SLCNT[42:44:4] 04687600
|
|
& 1[46:47:1]; 04687620
|
|
COMMAS~DOLLARS~BOOLEAN(SLCNT~0); NCR~BACKNCR(NCR) ; 04687650
|
|
GO TO NUL1; 04687655
|
|
END; 04687660
|
|
IF NOT QF THEN IF T = """ THEN IF STRINGF ~ NOT STRINGF THEN 04688000
|
|
BEGIN IF CODE > 4 THEN BEGIN STRINGF ~ FALSE; 04688500
|
|
NCR ~ BACKNCR(NCR); GO TO ENDER END; 04689000
|
|
SAVTOTAL ~ TOTAL; J~0; I~3; QF ~ TRUE; 04689500
|
|
WSA[TOTAL] ~ 0 & HPHASE[TOCODE]; 04690000
|
|
GO TO ROUND; 04690500
|
|
END ELSE 04691000
|
|
BEGIN 04691500
|
|
WSA[SAVTOTAL] ~ WSA[SAVTOTAL] & J[TOREPEAT]; 04692000
|
|
IF I = 0 THEN TOTAL ~ TOTAL - 1; 04693000
|
|
CODE ~ HPHASE; 04693200
|
|
GO TO ENDER; 04693500
|
|
END; 04694000
|
|
IF STRINGF THEN 04694500
|
|
BEGIN 04695000
|
|
STORECHAR(WSA[TOTAL],I,T); 04695550
|
|
J ~ J + 1; QF ~ FALSE; 04696000
|
|
IF I ~ I+1 = 8 THEN 04696500
|
|
BEGIN 04697000
|
|
IF TOTAL ~ TOTAL +1> LSTMAX THEN GO TO NUL; 04697500
|
|
I ~ WSA[TOTAL] ~ 0; 04698000
|
|
END; 04698500
|
|
GO TO ROUND; 04699000
|
|
END; 04699500
|
|
CASE T OF 04707000
|
|
BEGIN 04707500
|
|
BEGIN ZF ~ TRUE; % 0 04708000
|
|
NUM: DECIMAL ~ 10 | DECIMAL + T; 04708500
|
|
IF ASK THEN 04708510
|
|
BEGIN FLAG(183); %111-04708515
|
|
FL: DO BEGIN NCR~GETCHAR(NCR,T); XTA~T&XTA[12:18:30] END 04708520
|
|
UNTIL T!"*" AND T>9 AND T!" " ; 04708525
|
|
NCR~BACKNCR(NCR); XTA~BLANKS&XTA[18:12:30] ; 04708530
|
|
END 04708535
|
|
ELSE 04708540
|
|
IF DECIMAL>4090 THEN BEGIN FLAG(172); DECIMAL~1 END ; 04708550
|
|
IF CODE = 0 THEN REPEAT ~ DECIMAL 04709500
|
|
ELSE IF PF THEN BEGIN IF DECIMAL>WIDTH AND WIDTH!0 AND CODE! 04710000
|
|
VPHRASE THEN FLAG(129) END ELSE WIDTH~DECIMAL ; 04710500
|
|
GO TO ROUND; 04712000
|
|
END; 04712500
|
|
GO TO NUM; GO TO NUM; GO TO NUM; % 1 2 3 04713000
|
|
GO TO NUM; GO TO NUM; GO TO NUM; % 4 5 6 04713500
|
|
GO TO NUM; GO TO NUM; GO TO NUM; % 7 8 9 04714000
|
|
; ; ; ; ; ; % # @ Q : > } 04714500
|
|
BEGIN PLUSP ~ TRUE; GO TO ROUND; END; % + 04714600
|
|
BEGIN CODE ~ APHASE; GO TO NOEND END; % A 04715000
|
|
; % B 04715500
|
|
BEGIN CODE ~ CPHASE; GO TO NOEND END; % C 04715600
|
|
BEGIN CODE ~ DPHASE; GO TO NOEND END; % D 04716000
|
|
BEGIN CODE ~ EPHASE; GO TO NOEND END; % E 04716500
|
|
BEGIN CODE ~ FPHASE; GO TO NOEND END; % F 04717000
|
|
BEGIN CODE ~ GPHASE; GO TO NOEND END; % G 04717500
|
|
BEGIN IF REPEAT = 0 THEN FLOG(130); % H 04718000
|
|
IF ASK THEN BEGIN FLOG(32 ); GO SEMIC END ; 04718100
|
|
HF ~ TRUE; I ~ 3; CODE ~ HPHASE; 04719000
|
|
WSA[TOTAL] ~ 0 & HPHASE[TOCODE] & REPEAT[TOREPEAT]; 04719500
|
|
GO TO ROUND; 04720000
|
|
END; 04720500
|
|
BEGIN CODE ~ IPHASE; GO TO NOEND END; % I 04721000
|
|
BEGIN IF CODE < 11 OR CODE=15 THEN FLOG(134); % . 04721500
|
|
IF CODE=0 OR PF THEN FLOG(32) ; 04722000
|
|
PF~TRUE; DECIMAL~0; ASK~ZF~FALSE ; 04722500
|
|
GO TO ROUND; 04723000
|
|
END; 04723500
|
|
GO TO RP; % [ 04724000
|
|
; % & 04724500
|
|
LP: 04725000
|
|
BEGIN IF CODE ! 0 THEN FLOG(32); % ( 04725500
|
|
IF ASK THEN REPEAT~4095; IF REPEAT=0 AND ZF THEN FLAG(173) ;04725550
|
|
NAMLIST[SAVLASTLP ~ PARENCT ~ PARENCT+1] ~ 0 & TOTAL[TOWIDTH]04726000
|
|
&(IF REPEAT{0 AND PARENCT>1 THEN 1 ELSE REPEAT)[TOREPEAT] ; 04726500
|
|
IF ASK THEN 04726510
|
|
BEGIN ASK~VRB~FALSE ; 04726520
|
|
WSA[TOTAL]~32&LPPHRASE[TOCODE]&4095[TOREPEAT] ; 04726530
|
|
IF (TOTAL~TOTAL+1)>LSTMAX THEN GO NUL ; 04726540
|
|
END ; 04726550
|
|
ZF~BOOLEAN(REPEAT~DECIMAL~0) ; 04727500
|
|
STR ~ TRUE; 04727600
|
|
GO TO ROUND1; 04728000
|
|
END; 04728500
|
|
; ; ; % < ~ | 04729000
|
|
BEGIN CODE~JPHASE; WIDTH~-1; GO NOEND END ; % J 04729500
|
|
BEGIN % K 04730000
|
|
IF COMMAS OR CODE!0 THEN BEGIN FLAG(32); COMMAS~TRUE END 04730100
|
|
ELSE BEGIN COMMAS~TRUE ; 04730110
|
|
KK: DO BEGIN NCR~GETCHAR(NCR,T); XTA~T&XTA[12:18:30] END 04730120
|
|
UNTIL T!" " ; 04730125
|
|
IF (T<17 OR (T>25 AND T<33) OR (T>42 AND T<50) OR T>57) 04730130
|
|
THEN BEGIN FLAG(32) ; 04730135
|
|
IF T="*" OR T<10 THEN BEGIN DECIMAL~1; GO FL END ; 04730137
|
|
END ; 04730139
|
|
NCR~BACKNCR(NCR); XTA~BLANKS&XTA[18:12:30] ; 04730140
|
|
END ; 04730145
|
|
GO ROUND ; 04730150
|
|
END OF K ; 04730160
|
|
BEGIN CODE ~ LPHASE; GO TO NOEND; END; % L 04730500
|
|
; ; % M N 04731000
|
|
BEGIN CODE ~ OPHASE; GO TO NOEND; END; % O 04731500
|
|
BEGIN WSA[TOTAL] ~ 0 & PPHASE[TOCODE] % P 04732000
|
|
& REAL(VRB)[42:47:1] 04732100
|
|
& REAL(MINUSP)[TOSIGN] & REPEAT[TOWIDTH]&1[TOREPEAT]; 04732500
|
|
MINUSP ~ PLUSP ~ FALSE; 04733000
|
|
IF (DECIMAL = 0 AND NOT ZF) THEN FLOG(131); 04733500
|
|
GO TO NUL1; 04734500
|
|
END; 04735000
|
|
; ; % Q R 04735500
|
|
BEGIN IF DOLLARS OR CODE!0 THEN FLAG(32) % $ 04735600
|
|
ELSE BEGIN DOLLARS~TRUE; GO KK END ; 04735610
|
|
DOLLARS~TRUE; GO ROUND ; 04735620
|
|
END OF DOLLAR SIGN ; 04735630
|
|
IF NOT ASK THEN % * 04735700
|
|
BEGIN 04735710
|
|
IF ZF OR DECIMAL NEQ 0 THEN FLAG(183); DECIMAL:=4095; %111-04735715
|
|
IF CODE=0 THEN REPEAT~DECIMAL 04735720
|
|
ELSE IF NOT PF THEN WIDTH~DECIMAL ; 04735730
|
|
VRB := ASK := LISTEL := TRUE; GO ROUND; %101-04735740
|
|
END ELSE BEGIN DECIMAL:=4095; FLAG(183); GO FL END ; %111-04735750
|
|
BEGIN MINUSP ~ TRUE; GO TO ROUND; END; % - 04736000
|
|
RP: 04736500
|
|
BEGIN IF FEELD THEN BEGIN NCR ~ BACKNCR(NCR); % ) 04737000
|
|
GO TO ENDER; END; 04737500
|
|
IF DECIMAL ! 0 THEN FLAG(32); 04737600
|
|
I ~ IF PARENCT = 1 THEN IF SAVLASTLP > 1 THEN 2 ELSE 1 04738500
|
|
ELSE PARENCT; 04739000
|
|
WSA[TOTAL]~(J~NAMLIST[I])&(TOTAL+1-J~J.[18:12])[TOLINK] 04739500
|
|
& (IF PARENCT ~ PARENCT-1 = 0 THEN 77 ELSE 0)[TODECIMAL]; 04740000
|
|
IF WSA[J].[1:5]=LPPHRASE AND PARENCT!0 THEN 04740100
|
|
BEGIN WSA[J].[18:12]~TOTAL-J; WSA[TOTAL].[18:12]~TOTAL-J ;04740110
|
|
END ; 04740115
|
|
NAMLIST[I].[6:12] ~ 0; 04740500
|
|
CODE ~ HPHASE; 04740600
|
|
GO TO NUL1; 04742000
|
|
END; 04742500
|
|
; ; % ; LEQ 04743000
|
|
GO TO ROUND; % BLANKS 04743500
|
|
BEGIN SLCNT ~ 1; % / 04744000
|
|
SL: IF CODE=0 THEN IF ASK OR ZF OR DECIMAL!0 THEN 04744100
|
|
BEGIN FLAG(32); ASK~ZF~BOOLEAN(DECIMAL~0) END ; 04744110
|
|
IF CODE<5 THEN IF T="," THEN GO ROUND1 ELSE GO ROUND ELSE GO 04744500
|
|
ENDER ; 04744505
|
|
END; 04745000
|
|
; % S 04745500
|
|
BEGIN IF REPEAT ! 0 THEN FLAG(32); % T 04746000
|
|
CODE ~ TPHASE; 04746050
|
|
GO TO NOEND; 04746100
|
|
END; 04746150
|
|
; % U 04746500
|
|
BEGIN VRB~TRUE; CODE~VPHRASE; WIDTH~-1; GO NOEND END ; % V 04746750
|
|
; % W 04746800
|
|
BEGIN IF REPEAT = 0 THEN FLOG(130); % X 04747000
|
|
IF STR THEN 04747200
|
|
NEWWD: WSA[TOTAL] ~ 0 & XPHASE[TOCODE] & REPEAT[TOWIDTH] 04747400
|
|
& 1[TOREPEAT] 04747600
|
|
& REAL(VRB)[42:47:1] 04747700
|
|
ELSE 04747800
|
|
BEGIN 04748000
|
|
IF (J~WSA[TOTAL-1]).[42:6]>0 OR (I~J.[1:5])=RTPARN 04748800
|
|
OR (REPEAT}32 AND I!XPHASE) THEN GO NEWWD ; 04749000
|
|
IF I=XPHASE AND (I~J.[18:12]+REPEAT){4090 THEN 04749200
|
|
WSA[TOTAL~TOTAL-1] ~ J & I[TOWIDTH] 04749400
|
|
ELSE IF REPEAT } 32 THEN GO TO NEWWD 04749600
|
|
ELSE WSA[TOTAL~TOTAL-1] ~ J & REPEAT[TONUM] 04749800
|
|
& 1[TOCNTRL]; 04750000
|
|
END; 04751000
|
|
GO TO NUL1; 04752000
|
|
END; 04752500
|
|
; ; % Y Z 04753000
|
|
GO SL ; % , 04753500
|
|
GO TO LP; % % 04754000
|
|
; ; ; % ! = ] " 04754500
|
|
END OF CASE STATEMENT; 04755000
|
|
FLOG(132); % ILLEGAL CHARACTER; 04755500
|
|
GO TO FALL; 04756000
|
|
ENDER: IF CODE > 4 THEN 04756500
|
|
BEGIN IF WIDTH=0 THEN FLAG(130) ; 04757000
|
|
IF CODE=VPHRASE THEN 04757400
|
|
BEGIN 04757410
|
|
IF WIDTH=-1 THEN IF PF THEN FLAG(130)ELSE WIDTH~ 04757420
|
|
DECIMAL~4094 ELSE 04757425
|
|
IF NOT PF THEN DECIMAL~4094 ; 04757430
|
|
END 04757440
|
|
ELSE 04757450
|
|
IF CODE > 10 AND CODE ! 15 THEN 04757500
|
|
IF (DECIMAL = 0 AND NOT ZF) OR NOT PF THEN FLAG(133) 04758000
|
|
ELSE ELSE DECIMAL ~ 0; 04758100
|
|
IF REPEAT=0 THEN REPEAT~1 ; 04758400
|
|
IF WIDTH=-1 THEN WIDTH~0 ; 04758410
|
|
WSA[TOTAL] ~ 0 & CODE[TOCODE] & WIDTH[TOWIDTH] 04758500
|
|
& REPEAT[TOREPEAT] & DECIMAL[TODECIMAL] 04759000
|
|
& REAL(COMMAS) [44:47:1] 04759100
|
|
& REAL(VRB)[42:47:1] 04759150
|
|
& REAL(DOLLARS)[45:47:1]; 04759200
|
|
END ELSE IF DECIMAL ! 0 THEN FLAG(32); 04760000
|
|
NUL1: IF PLUSP THEN FLAG(164); 04760500
|
|
IF CODE!VPHRASE THEN 04760550
|
|
BEGIN 04760560
|
|
IF DOLLARS AND(CODE < 9 OR CODE > 14) THEN FLAG(166); 04760600
|
|
IF COMMAS AND NOT(CODE = 10 OR CODE = 12 OR CODE = 9) 04760700
|
|
THEN FLAG(165); 04760800
|
|
END; 04760850
|
|
VRB~ 04760890
|
|
ERRORTOG ~ FEELD ~ PF ~ PLUSP ~ DOLLARS ~ COMMAS ~ STR ~ FALSE; 04760900
|
|
IF CODE = HPHASE THEN STR ~ TRUE; 04760940
|
|
CODE ~ REPEAT ~ WIDTH ~ 0; 04760980
|
|
XTA ~ BLANKS; 04761000
|
|
GO TO FALL; 04761500
|
|
NOEND: IF FEELD THEN FLAG(32); 04762000
|
|
IF CODE ! TPHASE THEN LISTEL ~ TRUE ELSE REPEAT ~ 1; 04762500
|
|
IF REPEAT=0 AND ZF THEN FLAG(173) ; 04762510
|
|
FEELD ~ TRUE; 04763000
|
|
FALL: IF MINUSP THEN BEGIN FLAG(32); MINUSP ~ FALSE END; 04763500
|
|
ASK~ZF~FALSE ; 04764000
|
|
NUL: DECIMAL ~ 0; 04764500
|
|
IF PARENCT = 0 THEN BEGIN SCN ~ 1; GO TO SEMIC END; 04765000
|
|
IF CODE < 5 THEN 04765500
|
|
IF TOTAL ~ TOTAL+1 > LSTMAX THEN 04766000
|
|
BEGIN FLOG(78);TOTAL ~ TOTAL-2; GO TO SEMIC; END; 04766500
|
|
GO TO ROUND; 04767000
|
|
NOPLACE: IF(DCINPUT OR FREEFTOG) AND (STRINGF OR HF) THEN FLOG(150); 04767500
|
|
IF TSSEDITOG THEN IF (STRINGF OR HF) AND NOT DCINPUT 04768000
|
|
THEN TSSED(XTA,1); 04769000
|
|
IF CONTINUE THEN IF READACARD THEN 04769500
|
|
BEGIN IF LISTOG THEN PRINTCARD; GO TO ROUND; END; 04769500
|
|
SCN ~ 0; NEXT ~ SEMI; 04770000
|
|
SEMIC: 04770500
|
|
IF SCN = 1 THEN SCAN; 04771000
|
|
IF STRINGF THEN FLAG(22); 04771500
|
|
IF NOT LISTEL THEN WSA[0] ~ 0; 04772000
|
|
IF PARENCT ! 0 THEN FLAG(IF PARENCT < 0 THEN 9 ELSE 8); 04772500
|
|
IF D ! 0 THEN PRTSAVER(D,TOTAL+1,WSA); 04772600
|
|
IF DEBUGTOG THEN BEGIN 04772605
|
|
WRITE(LINE,FM) ; 04772610
|
|
FOR I~0 STEP 1 UNTIL TOTAL DO BEGIN 04772615
|
|
WRITE(LINE,[13]//,I,(J~WSA[I]).[1:5],J.[6:12],J.[18:12],J.[30:12], 04772620
|
|
J.[41:1],J.[42:4],J.[42:5],J.[44:1],J.[45:1], 04772625
|
|
J.[46:1],J.[46:2],J.[47:1]) ; 04772630
|
|
IF J.[1:5]=2 THEN I~I+(J.[6:12]+2).[36:9] ; 04772635
|
|
END ; 04772640
|
|
WRITE(LINE[DBL]) ; 04772645
|
|
END OF DEBUGSTUFF ; 04772650
|
|
END FORMATER; 04773000
|
|
PROCEDURE EXECUTABLE; 04773010
|
|
BEGIN LABEL XIT; REAL T, J, TS, P; 04773020
|
|
IF SPLINK < 0 THEN FLAG(12); 04773030
|
|
IF LABL = BLANKS THEN GO TO XIT; 04773040
|
|
IF T ~ SEARCH(XTA ~ LABL) = 0 THEN 04773050
|
|
T ~ ENTER(-0 & LABELID[TOCLASS] & (ADR+1)[TOADDR] & 04773060
|
|
NSEG[TOSEGNO], LABL) ELSE 04773070
|
|
BEGIN IF (P ~ GET(T)).CLASS ! LABELID THEN 04773080
|
|
BEGIN FLAG(144); GO TO XIT END; 04773090
|
|
IF P < 0 THEN BEGIN FLAG(20); GO TO XIT END; 04773100
|
|
TS ~ P.ADDR; 04773110
|
|
WHILE TS ! 0 DO 04773120
|
|
BEGIN J ~ GIT(TS); FIXB(TS+10000); TS ~ J END; 04773130
|
|
PUT(T, P~-P & (ADR+1)[TOADDR] & NSEG[TOSEGNO]); 04773140
|
|
IF (T ~ GET(T+2)).BASE ! 0 THEN 04773150
|
|
T ~ PRGDESCBLDR(2, T.BASE, (ADR+1).[36:10], NSEG); 04773160
|
|
END; 04773170
|
|
IF XREF THEN ENTERX(LABL,1&LABELID[TOCLASS]); 04773175
|
|
XIT: 04773180
|
|
END EXECUTABLE; 04773190
|
|
PROCEDURE IOCOMMAND(N); VALUE N; REAL N; 04774000
|
|
COMMENT N COMMAND 04775000
|
|
0 READ 04776000
|
|
1 WRITE 04777000
|
|
2 PRINT 04778000
|
|
3 PUNCH 04779000
|
|
4 BACKSPACE 04780000
|
|
04781000
|
|
04782000
|
|
7 DATA; 04783000
|
|
BEGIN LABEL XIT,SUCH,LISTER,NOFORM,FORMER,WRAP,DAAT,NF; 04784000
|
|
LABEL LISTER1; 04784200
|
|
BOOLEAN SUCHTOG, RDTRIN, FREEREAD; 04785000
|
|
BOOLEAN FORMARY, NOFORMT; 04785020
|
|
BOOLEAN NAMETOG; 04785050
|
|
DEFINE DATATOG = DATASTMTFLAG#; 04785100
|
|
REAL T, ACCIDENT, EDITCODE; 04786000
|
|
REAL DATAB; 04786100
|
|
PROCEDURE ACTIONLABELS(UNSEEN); VALUE UNSEEN; BOOLEAN UNSEEN; 04787000
|
|
BEGIN LABEL EOF,ERR,RATA,XIT,ACTION,MULTI; 04788000
|
|
BOOLEAN BACK,GOTERR,GOTEOF; 04789000
|
|
IF UNSEEN THEN SCAN; 04790000
|
|
EOF: IF GOTEOF THEN GO TO MULTI; 04791000
|
|
IF BACK ~ NAME = "END " THEN GO TO ACTION; 04792000
|
|
ERR: IF GOTERR THEN GO TO MULTI; 04793000
|
|
IF NAME ! "ERR " THEN IF GOTEOF THEN 04794000
|
|
BEGIN MULTI: XTA ~ NAME; FLOG(137); 04795000
|
|
GO TO XIT; 04796000
|
|
END ELSE GO TO RATA; 04797000
|
|
ACTION: SCAN; 04798000
|
|
IF NEXT = EQUAL THEN SCAN ELSE GO TO RATA; 04799000
|
|
IF NEXT ! NUM THEN GO TO RATA; 04800000
|
|
IF XREF THEN ENTERX(NAME,0&LABELID[TOCLASS]); 04800100
|
|
IF BACK THEN NX1 ~ NAME ELSE NX2 ~ NAME; 04801000
|
|
SCAN; IF NEXT = RPAREN THEN GO TO XIT; 04802000
|
|
IF NEXT = COMMA THEN SCAN ELSE GO TO RATA; 04803000
|
|
IF BACK THEN 04804000
|
|
BEGIN BACK ~ NOT ( GOTEOF ~ TRUE); 04805000
|
|
GO TO ERR; 04806000
|
|
END; 04807000
|
|
GOTERR ~ TRUE; 04808000
|
|
GO TO EOF; 04809000
|
|
RATA: XTA ~ NAME; FLOG(0); 04810000
|
|
XIT: 04811000
|
|
END ACTIONLABELS; 04812000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" IOCOM","MAND ",TRUE ); 04812010
|
|
EODS~N!7 ; 04812020
|
|
C2 ~ IF N = 0 OR N = 7 THEN 1 ELSE 0; 04812050
|
|
SCAN; IF NEXT = SEMI THEN BEGIN FLOG(0); GO TO XIT END; 04813000
|
|
IF N = 7 THEN 04814000
|
|
BEGIN DATATOG ~ TRUE; 04815000
|
|
IF LOGIFTOG THEN FLAG(101); 04816000
|
|
LABL ~ BLANKS; 04816100
|
|
IF SPLINK } 0 THEN %NOT BLOCK DATA STMT 04816110
|
|
BEGIN 04816120
|
|
IF DATAPRT=0 THEN BEGIN 04816130
|
|
DATAPRT~PRTS~PRTS+1; ADJUST; 04816135
|
|
DATASTRT~(ADR+1)&NSEG[TOSEGNO] END 04816136
|
|
ELSE FIXB(DATALINK); 04816137
|
|
EMITOPDCLIT(DATAPRT); EMITO(LNG); 04816140
|
|
EMITB(-1, TRUE); DATAB ~ LAX; 04816150
|
|
END; 04816160
|
|
GO TO DAAT; 04817000
|
|
END; 04818000
|
|
EXECUTABLE; 04819000
|
|
EMITO(MKS); 04820000
|
|
IF N = 4 THEN 04825100
|
|
BEGIN 04825200
|
|
INLINEFILE; 04826000
|
|
BEGIN EMITL(0); EMITL(0); EMITL(0); EMITL(0); 04832000
|
|
EMITL(5); EMITL(0); EMITL(0); 04833000
|
|
EMITV(NEED(".FBINB",INTRFUNID)); 04834000
|
|
END; 04835000
|
|
GO TO XIT; 04836000
|
|
END; 04837000
|
|
EDITCODE ~ NX1 ~ NX1 ~ 0; 04838000
|
|
IF RDTRIN ~ 04839000
|
|
N = 0 THEN IF NEXT = LPAREN THEN GO TO SUCH 04840000
|
|
ELSE EMITDESCLIT(FILECHECK(".5 ",2+17|REAL %503-04841000
|
|
(REMOTETOG))) 04841100
|
|
ELSE IF N = 1 THEN IF NEXT ! LPAREN THEN FLAG(33) 04842000
|
|
ELSE GO TO SUCH 04843000
|
|
ELSE IF N = 2 THEN %503-04844000
|
|
EMITDESCLIT(FILECHECK(".6 ",2+17|REAL %503-04845000
|
|
(REMOTETOG))) 04845100
|
|
04846000
|
|
ELSE EMITDESCLIT(FILECHECK(".PUNCH",0)); 04847000
|
|
IF RDTRIN THEN EMITL(0) ELSE EMITPAIR(1,SSN); 04848000
|
|
GO TO FORMER; 04849000
|
|
SUCH: SCAN; RANDOMTOG~SUCHTOG~TRUE; INLINEFILE ; 04850000
|
|
RANDOMTOG~FREEREAD~FALSE ; 04850100
|
|
IF NEXT = EQUAL THEN % RANDOM KEY 04852000
|
|
BEGIN SCAN; 04853000
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 04854000
|
|
IF RDTRIN THEN EMITPAIR(1,ADD); 04855000
|
|
END ELSE IF RDTRIN THEN EMITL(0) ELSE EMITPAIR(1,SSN); 04856000
|
|
IF NEXT = RPAREN THEN GO TO NF; 04857000
|
|
IF NEXT ! COMMA THEN BEGIN FLOG(114); GO TO XIT END; 04858000
|
|
SCAN; 04859000
|
|
IF NEXT = ID THEN 04860000
|
|
IF NAME = "ERR " OR NAME = "END " THEN 04861000
|
|
BEGIN ACTIONLABELS(FALSE); 04862000
|
|
NF: IF RDTRIN THEN EMITL(0) ELSE EMITPAIR(1,SSN); 04863000
|
|
EMITL(0); 04863100
|
|
NOFORMT ~ TRUE; 04863500
|
|
SCAN; GO TO NOFORM; 04864000
|
|
END; 04865000
|
|
FORMER: IF ADR } 4085 THEN 04866000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 04866100
|
|
IF NEXT = NUM THEN % FORMAT NUMBER 04866200
|
|
BEGIN EDITCODE ~ 1; 04867000
|
|
IF TEST ~ LBLSHFT(NAME) { 0 THEN 04868000
|
|
BEGIN FLAG(135); GO TO LISTER END; 04869000
|
|
IF I ~ SEARCH(TEST) = 0 THEN % NEVER SEEN 04870000
|
|
OFLOWHANGERS(I~ENTER(0&FORMATID[TOCLASS], TEST)) ELSE 04871000
|
|
IF GET(I).CLASS ! FORMATID THEN 04871100
|
|
BEGIN FLAG(143); GO TO LISTER END; 04871200
|
|
IF XREF THEN ENTERX(TEST,0&FORMATID[TOCLASS]); 04873000
|
|
IF GET(I).ADDR = 0 THEN 04874000
|
|
BEGIN EMITLINK((INFC ~ GET(I + 2)).BASE); 04875000
|
|
PUT(I + 2,INFC&ADR[TOBASE]); 04876000
|
|
EMITL(0); EMITL(0); EMITO(NOP); 04877000
|
|
END ELSE 04878000
|
|
BEGIN EMITL(GET(I+ 2).BASE); 04879000
|
|
EMITPAIR(GET(I).ADDR,LOD); 04880000
|
|
END; 04881000
|
|
GO TO LISTER; 04882000
|
|
END ELSE IF RDTRIN THEN IF(FREEREAD := NEXT=SLASH) THEN GO TO LISTER 04883000
|
|
ELSE BEGIN IF NEXT NEQ ID THEN BEGIN FLOG(116);GO TO XIT; END;END 04883100
|
|
ELSE IF NEXT NEQ ID THEN 04883150
|
|
BEGIN IF NEXT = STAR THEN 04883200
|
|
BEGIN NAMEDESC := TRUE; GLOBALNAME := TRUE; 04883300
|
|
TV := ENTER(0&LISTSID[TOCLASS],LISTID:=LISTID+1); 04883350
|
|
SCAN; 04883400
|
|
END; 04883450
|
|
IF NEXT = LPAREN THEN 04883500
|
|
BEGIN SCAN; IF EXPR(TRUE) GTR REALTYPE THEN FLAG(120) ; 04883550
|
|
SCAN; END ELSE EMITL(0); 04883600
|
|
IF GLOBALNAME AND (FREEREAD := NEXT = SLASH) OR FREEREAD THEN 04883650
|
|
GO TO LISTER ELSE BEGIN FLOG(110); GO TO XIT; END; 04883700
|
|
END; 04883750
|
|
GETALL(I ~ FNEXT,INFA,INFB,INFC); 04884000
|
|
IF T ~ INFA.CLASS = ARRAYID THEN % FORMAT ARRAY 04885000
|
|
BEGIN EDITCODE ~ 1; 04886000
|
|
FORMARY ~ TRUE; 04886050
|
|
T ~ EXPR(FALSE); 04886100
|
|
ADR ~ ADR-1; % ELIMINATE XCH EMITTED BY EXPR 04887000
|
|
IF EXPRESULT ! ARRAYID THEN FLOG(116); 04887100
|
|
GO TO LISTER1; % SCAN ALREADY DONE IN EXPR 04888000
|
|
END ELSE 04889000
|
|
IF T = NAMELIST THEN 04890000
|
|
BEGIN NAMETOG := TRUE; 04890100
|
|
IF INFA.ADDR = 0 THEN % REFERENCED, NOT DEF 04891000
|
|
BEGIN EMITLINK(INFC.BASE); 04892000
|
|
PUT(I+ 2,(INFC ~ INFC&ADR[TOBASE])); 04893000
|
|
EMITL(0); EMITL(0); EMITO(NOP); 04894000
|
|
END ELSE 04895000
|
|
BEGIN EMITL(INFC.BASE); 04896000
|
|
EMITPAIR(INFA.ADDR,LOD); 04897000
|
|
END 04898000
|
|
END 04898100
|
|
ELSE IF T = UNKNOWN THEN % ASSUME NAMELIST 04899000
|
|
BEGIN PUT(I,(INFA ~ INFA&NAMELIST[TOCLASS])); 04900000
|
|
NAMETOG := TRUE; 04900100
|
|
OFLOWHANGERS(I); 04901000
|
|
EMITLINK(0); PUT(I + 2,INFC&ADR[TOBASE]); 04902000
|
|
EMITL(0); EMITL(0); EMITO(NOP); 04903000
|
|
END ELSE BEGIN XTA ~ INFB; FLOG(116); GO TO XIT END; 04904000
|
|
SCAN; 04905000
|
|
IF NEXT = COMMA THEN ACTIONLABELS(TRUE); 04906000
|
|
IF SUCHTOG THEN 04907000
|
|
IF NEXT ! RPAREN THEN FLOG(108) ELSE SCAN; 04908000
|
|
IF NEXT ! SEMI THEN BEGIN FLOG(118); GO TO XIT END; 04909000
|
|
EMITL(0); EDITCODE ~ 4; EMITOPDCLIT(7); EMITO(FTC); 04910000
|
|
GO TO WRAP; 04911000
|
|
LISTER: SCAN; 04912000
|
|
IF FREEREAD THEN IF NOT RDTRIN THEN 04912100
|
|
BEGIN IF NEXT ! SLASH THEN EMITO(SSN) ELSE SCAN; 04912200
|
|
IF NEXT = LPAREN THEN 04912300
|
|
BEGIN SCAN; IF EXPR(TRUE) > REALTYPE THEN FLAG(120);SCAN 04912400
|
|
END ELSE EMITL(0); 04912500
|
|
END; 04912600
|
|
LISTER1: 04912700
|
|
IF SUCHTOG THEN 04913000
|
|
BEGIN IF NEXT = COMMA THEN ACTIONLABELS(TRUE); 04914000
|
|
IF NEXT = RPAREN THEN SCAN ELSE BEGIN FLOG(108); GO TO XIT END; 04915000
|
|
END ELSE IF NEXT=COMMA THEN SCAN ELSE IF RDTRIN THEN 04916000
|
|
IF NEXT!SEMI THEN FLOG(114); 04916100
|
|
NOFORM: IF NEXT=SEMI THEN 04917000
|
|
BEGIN IF FREEREAD THEN FLOG(061) ELSE EMITL(0); GO TO WRAP END; 04917100
|
|
IF (NEXT NEQ LPAREN) AND (NEXT NEQ ID) AND (NEXT NEQ STAR) THEN 04918000
|
|
GO TO XIT; 04918100
|
|
EDITCODE ~ EDITCODE + 2; 04919000
|
|
DAAT: EMITB(-1,FALSE); LADR1 ~ LAX; ADJUST; DESCREQ ~ TRUE; 04920000
|
|
IF ADR } 4085 THEN 04920100
|
|
BEGIN ADR ~ ADR+1; SEGOVF; ADJUST END; 04920200
|
|
ACCIDENT ~ PRGDESCBLDR(0,0,ADR.[36:10] + 1,NSEG); 04921000
|
|
EMITOPDCLIT(19); EMITO(GFW); 04922000
|
|
LISTART ~ ADR&NSEG[TOSEGNO]; ADJUST; 04923000
|
|
LA ~ 0; IOLIST(LA); 04924000
|
|
EMITL(1); EMITO(CHS); EMITL(19); EMITO(STD); 04925000
|
|
EMITDESCLIT(19); EMITO(RTS); 04926000
|
|
FIXB(LADR1); DESCREQ ~ FALSE; 04927000
|
|
IF DATATOG THEN 04928000
|
|
BEGIN DATASET; 04929000
|
|
IF NEXT = SLASH THEN SCAN ELSE 04930000
|
|
BEGIN FLOG(110); GO TO XIT END; 04931000
|
|
IF LSTA = 0 THEN BEGIN BUMPPRT; LSTA~PRTS END; 04932000
|
|
IF (LSTMAX - LSTI) { LSTS THEN 04933000
|
|
BEGIN WRITEDATA(LSTI,NXAVIL ~ NXAVIL + 1,LSTP); 04934000
|
|
LSTA ~ PRGDESCBLDR(1,LSTA,0,NXAVIL); 04935000
|
|
LSTI ~ 0; BUMPPRT; LSTA~PRTS; 04936000
|
|
END; 04937000
|
|
MOVEW(LSTT,LSTP[LSTI],(LSTS ~ LSTS + 1).[36:6],LSTS); 04938000
|
|
EMITO(MKS); EMITL(LSTI); EMITPAIR(LSTA,LOD); 04939000
|
|
LSTI ~ LSTI + LSTS; 04940000
|
|
EMITPAIR(ACCIDENT,LOD); EMITOPDCLIT(7); EMITO(FTF); 04941000
|
|
EMITL(6); EMITL(0); EMITL(0); 04942000
|
|
EMITV(NEED(".FBINB",INTRFUNID)); 04943000
|
|
IF NEXT = COMMA THEN 04944000
|
|
BEGIN SCAN; GO TO DAAT END; 04945000
|
|
IF SPLINK } 0 THEN BEGIN 04946000
|
|
EMITB(-1,FALSE); DATALINK~LAX; 04946500
|
|
FIXB(DATAB) END; 04946600
|
|
GO TO XIT; 04947000
|
|
END; 04948000
|
|
EMITPAIR(ACCIDENT,LOD); EMITOPDCLIT(7); EMITO(FTF); 04949000
|
|
WRAP: IF NOT FREEREAD AND NOT NAMETOG THEN EMITL(EDITCODE); 04950000
|
|
IF RDTRIN THEN 04951000
|
|
BEGIN IF NX1 = 0 THEN EMITL(0) ELSE EMITLABELDESC(NX1); 04952000
|
|
IF NX2 = 0 THEN EMITL(0) ELSE EMITLABELDESC(NX2); 04953000
|
|
IF FREEREAD THEN EMITV(NEED(".FREFR", INTRFUNID)) 04954000
|
|
ELSE IF NAMETOG THEN EMITV(NEED(".FINAM",INTRFUNID)) 04954050
|
|
ELSE IF FORMARY THEN EMITV(NEED(".FTINT",INTRFUNID)) 04954100
|
|
ELSE IF NOFORMT THEN EMITV(NEED(".FBINB",INTRFUNID)) 04954150
|
|
ELSE EMITV(NEED(".FTNIN",INTRFUNID)); 04954200
|
|
END ELSE 04955000
|
|
IF FREEREAD THEN 04956000
|
|
BEGIN 04956005
|
|
IF NAMEDESC THEN 04956010
|
|
BEGIN 04956020
|
|
PRTSAVER(TV,NAMEIND+1,NAMLIST); 04956040
|
|
EMITL(GET(TV+2).BASE); 04956100
|
|
EMITPAIR(GET(TV).ADDR,LOD); 04956200
|
|
IF NAMLIST[0] = 0 THEN EMITL(0) 04956500
|
|
ELSE EMITPAIR(GET(GLOBALSEARCH(".SUBAR")).ADDR,LOD); 04956550
|
|
NAMLIST[0] := NAMEIND := 0; 04956600
|
|
END ELSE BEGIN EMITL(0);EMITL(0);EMITL(0);END; 04956650
|
|
EMITV(NEED(".FREWR",INTRFUNID)) 04956700
|
|
END ELSE IF NAMETOG THEN EMITV(NEED(".FONAM",INTRFUNID)) 04956750
|
|
ELSE IF FORMARY THEN EMITV(NEED(".FTOUT",INTRFUNID)) 04956800
|
|
ELSE BEGIN 04956900
|
|
IF NX1=0 THEN EMITL(0) ELSE EMITLABELDESC(NX1); 04956910
|
|
IF NX2=0 THEN EMITL(0) ELSE EMITLABELDESC(NX2); 04956920
|
|
IF NOFORMT THEN EMITV(NEED(".FBINB",INTRFUNID)) ELSE 04956925
|
|
EMITV(NEED(".FTNOU",INTRFUNID)); 04956930
|
|
END; 04956940
|
|
XIT: 04957000
|
|
IF NAMEDESC THEN IF RDTRIN THEN FLAG(159) 04957050
|
|
ELSE IF NOT FREEREAD THEN FLAG(160); 04957055
|
|
DATATOG := FALSE; NAMEDESC := FALSE; GLOBALNAME := FALSE; 04957100
|
|
IF DEBUGTOG THEN FLAGROUTINE(" IOCOM","MAND ",FALSE); 04957110
|
|
END IOCOMMAND; 04958000
|
|
PROCEDURE STMTFUN(LINK); VALUE LINK; REAL LINK; 04959000
|
|
BEGIN 04960000
|
|
DEFINE PARAM = LSTT#; 04961000
|
|
REAL SAVEBRAD, I; 04962000
|
|
REAL INFA, INFC, NPARMS, TYPE, PARMLINK, BEGINSUB, RETURN; 04963000
|
|
LABEL XIT,TIX ; 04964000
|
|
IF SPLINK < 0 THEN FLAG(12); 04964100
|
|
LABL ~ BLANKS; 04964200
|
|
FILETOG ~ TRUE; % PREVENTS SCANNER FROM ENTERING IDS IN INFO 04965000
|
|
IF XREF THEN ENTERX(GET(LINK+1),0&STMTFUNID[TOCLASS] 04965100
|
|
&(GET(LINK))[21:21:3]); 04965200
|
|
DO 04966000
|
|
BEGIN 04967000
|
|
SCAN; 04968000
|
|
IF NEXT ! ID THEN BEGIN FLOG(107); GO TO XIT END; 04969000
|
|
PARAM[NPARMS~NPARMS+1] ~ NAME; 04970000
|
|
SCAN; 04971000
|
|
END UNTIL NEXT ! COMMA; 04972000
|
|
IF NEXT ! RPAREN THEN FLOG(108) ELSE SCAN; 04973000
|
|
04974000
|
|
IF NEXT ! EQUAL THEN BEGIN FLOG(104); GO TO XIT END; 04975000
|
|
EMITB(-1,FALSE); SAVEBRAD ~ LAX; % BRANCH AROUND ST FUN 04976000
|
|
ADJUST; 04977000
|
|
BEGINSUB ~ ADR+1; 04978000
|
|
BUMPLOCALS; EMITPAIR(RETURN~LOCALS+1536,STD); 04979000
|
|
FOR I ~ NPARMS STEP -1 UNTIL 1 DO 04980000
|
|
BEGIN 04981000
|
|
IF T ~ SEARCH(PARAM[I]) ! 0 THEN 04982000
|
|
TYPE ~ GET(T).SUBCLASS ELSE 04983000
|
|
IF T~PARAM[I].[12:6] < "I" OR T > "N" THEN 04984000
|
|
TYPE ~ REALTYPE ELSE TYPE ~ INTYPE; 04985000
|
|
EMITSTORE( ENTER(0&VARID[TOCLASS]&1[TOTYPE] 04986000
|
|
&TYPE[TOSUBCL], PARAM[I]), TYPE); 04987000
|
|
IF XREF THEN ENTERX(NAME,0&VARID[TOCLASS]&TYPE[TOSUBCL]); 04987100
|
|
END; 04988000
|
|
PARMLINK ~ NEXTINFO-3; 04989000
|
|
GETALL(LINK, INFA, XTA, INFC); 04990000
|
|
FILETOG ~ FALSE; 04991000
|
|
SCAN; 04992000
|
|
IF (TYPE~(INFA~GET(LINK)).SUBCLASS)=LOGTYPE OR TYPE=COMPTYPE OR04993000
|
|
(I~EXPR(TRUE))=LOGTYPE OR I=COMPTYPE THEN 04993500
|
|
BEGIN IF I!TYPE THEN FLAG(139); GO TIX END ; 04993510
|
|
IF TYPE=REALTYPE OR TYPE=INTYPE THEN 04993530
|
|
BEGIN 04993540
|
|
IF I=DOUBTYPE THEN BEGIN EMITO(XCH); EMITO(DEL) END; 04993550
|
|
IF TYPE=INTYPE THEN IF I!INTYPE THEN EMITPAIR(1,IDV) ; 04993560
|
|
GO TIX ; 04993570
|
|
END ; 04993580
|
|
IF I!DOUBTYPE THEN EMITPAIR(0,XCH) ; 04993590
|
|
TIX: 04993595
|
|
EMITOPDCLIT(RETURN) ; 04994000
|
|
EMITO(GFW); 04995000
|
|
FIXB(SAVEBRAD); 04996000
|
|
IF INFA.CLASS ! UNKNOWN THEN FLAG(140); 04997000
|
|
PUT(LINK, -INFA & 1[TOTYPE] & NSEG[TOSEGNO] 04998000
|
|
& STMTFUNID[TOCLASS] & BEGINSUB[TOADDR]); 04999000
|
|
PUT(LINK+2, -(0 & NPARMS[TONEXTRA] & ADR[TOBASE] 05000000
|
|
& PARMLINK[36:36:12])); 05001000
|
|
PARMLINK ~ PARMLINK+4; 05002000
|
|
FOR I ~ 1 STEP 1 UNTIL NPARMS DO 05003000
|
|
PUT(PARMLINK ~ PARMLINK-3, "......"); 05004000
|
|
XIT: 05005000
|
|
FILETOG ~ FALSE; 05006000
|
|
END STMTFUN; 05007000
|
|
PROCEDURE ASSIGNMENT; 05008000
|
|
BEGIN 05009000
|
|
LABEL XIT; 05010000
|
|
BOOLEAN CHCK; 05010500
|
|
BOOLEAN I; 05010600
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ASSIG","NMENT ",TRUE ) ; 05011000
|
|
FX1 ~ FNEXT; 05012000
|
|
SCAN; 05013000
|
|
IF NEXT = LPAREN THEN 05014000
|
|
BEGIN 05015000
|
|
CHCK~TRUE; 05015500
|
|
IF GET(FX1).CLASS = UNKNOWN THEN 05016000
|
|
IF EODS THEN 05017000
|
|
BEGIN XTA ~ GET(FX1+1); FLOG(035) ; 05017010
|
|
PUT(FX1,GET(FX1) & ARRAYID[TOCLASS]) ; 05017020
|
|
PUT(FX1+2,GET(FX1+2) & 1[TONEXTRA]) ; 05017030
|
|
END 05017040
|
|
ELSE BEGIN STMTFUN(FX1); GO TO XIT END ; 05017050
|
|
IF XREF THEN ENTERX(GET(FX1+1),1&GET(FX1) [15:15:9]); 05017055
|
|
EODS ~ TRUE ; 05017060
|
|
EXECUTABLE; 05017100
|
|
SCAN; 05018000
|
|
I ~ SUBSCRIPTS(FX1,2); 05019000
|
|
SCAN; 05020000
|
|
END ELSE 05021000
|
|
BEGIN 05022000
|
|
EODS~TRUE ; 05022010
|
|
EXECUTABLE; 05022100
|
|
IF T ~ GET(FX1).CLASS = ARRAYID THEN 05023000
|
|
BEGIN XTA ~ GET(FX1+1); FLAG(74) END; 05024000
|
|
MOVEW(ACCUM[1],HOLDID[0],0,3); 05025000
|
|
IF XREF THEN IF HOLDID[0].[12:12] ! "DO" THEN 05025100
|
|
ENTERX(GET(FX1+1),1&GET(FX1)[21:21:3]&VARID[TOCLASS]); 05025200
|
|
END; 05026000
|
|
IF NEXT ! EQUAL THEN BEGIN FLAG(104); GO TO XIT END; 05027000
|
|
SCAN; 05028000
|
|
IF NEXT=SEMI OR NEXT=COMMA THEN BEGIN FLOG(0); GO TO XIT; END; 05028010
|
|
FX2 ~ EXPR(TRUE); 05029000
|
|
IF NEXT NEQ COMMA THEN IF HOLDID[0] = "DO" THEN IF XREF THEN 05029200
|
|
ENTERX(HOLDID[0] ,1&GET(FX1)[21:21:3]&VARID[TOCLASS]); 05029400
|
|
IF NEXT = COMMA THEN IF CHCK THEN FLOG(56) ELSE 05030000
|
|
IF HOLDID[0].[12:12] ! "DO" THEN FLOG(56) ELSE 05030100
|
|
BEGIN 05031000
|
|
IF LOGIFTOG THEN FLAG(101); 05032000
|
|
IF FX2 > REALTYPE THEN FLAG(102); 05033000
|
|
IF DT ~ DT+1 > MAXDOS THEN BEGIN DT ~ 1; FLAG(138) END; 05034000
|
|
EMITN(FX1~ CHECKDO); 05035000
|
|
EMITO(STD); 05036000
|
|
SCAN; 05037000
|
|
IF NEXT=SEMI THEN BEGIN FLAG(36); GO TO XIT END; 05038000
|
|
IF (ACCUM[0] = ", " OR ACCUM[0] = "; ") AND 05038900
|
|
GLOBALNEXT=NUM AND ABS(FNEXT) > 1023 THEN 05039000
|
|
BEGIN 05040000
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 05041000
|
|
IDINFO:=REALID;FNEXT:=ENTER(IDINFO,"2FNV00"&DT[36:36:12]);05041100
|
|
EMITN(FNEXT:=GETSPACE(FNEXT)); EMITO(STD); 05041200
|
|
EMITB(-1,FALSE); LADR1:=LAX; ADJUST; 05041300
|
|
LADR2 ~ (ADR+1) & NSEG[TOSEGNO]; EMITV(FNEXT); 05041400
|
|
END 05041450
|
|
ELSE BEGIN 05041500
|
|
EMITB(-1,FALSE); LADR1:=LAX; ADJUST; 05041600
|
|
LADR2:=(ADR+1)&NSEG[TOSEGNO]; 05041700
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102) ; 05041800
|
|
END ; 05042000
|
|
EMITO(GRTR); 05043000
|
|
EMITB(-1, TRUE); 05044000
|
|
LADR3 ~ LAX; 05045000
|
|
EMITB(-1, FALSE); 05046000
|
|
ADJUST; 05047000
|
|
DOTEST[DT] ~ (ADR+1) & LAX[TOADDR] & NSEG[TOSEGNO]; 05048000
|
|
IF NEXT ! COMMA THEN EMITL(1) ELSE 05049000
|
|
BEGIN 05050000
|
|
SCAN; 05051000
|
|
IF NEXT=SEMI THEN BEGIN FLAG(36); GO TO XIT END ; 05051100
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 05052000
|
|
END; 05053000
|
|
EMITV(FX1); 05054000
|
|
EMITO(ADD); 05055000
|
|
EMITN(FX1); 05056000
|
|
EMITO(STN); 05057000
|
|
EMITB(LADR2, FALSE); 05058000
|
|
FIXB(LADR1); 05059000
|
|
FIXB(LADR3); 05060000
|
|
END ELSE EMITSTORE(FX1, FX2); 05061000
|
|
XIT: 05062000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" ASSIG","NMENT ",FALSE ) ; 05062010
|
|
END ASSIGNMENT; 05063000
|
|
BOOLEAN PROCEDURE RINGCHECK; 05063100
|
|
COMMENT THIS PROCEDURE PREVENTS THE POSSIBILITY OF DELINKING A 05063110
|
|
HEADER FROM THE HEADER RING; 05063120
|
|
BEGIN 05063200
|
|
INTEGER I; 05063250
|
|
I~A; 05063300
|
|
DO 05063350
|
|
IF I ~ GETC(I).ADDR = ROOT THEN RINGCHECK ~ TRUE 05063400
|
|
UNTIL I = A; 05063450
|
|
END RINGCHECK; 05063500
|
|
PROCEDURE SETLINK(INFADDR); VALUE INFADDR; INTEGER INFADDR; 05063600
|
|
COMMENT THIS PROCEDURE LINKS AN ELEMENT TO ITS PREVIOUS HEADER; 05063601
|
|
BEGIN 05063610
|
|
INTEGER LAST,I; REAL COML; LABEL XIT; 05063620
|
|
XIT: 05063625
|
|
LAST ~(GETC(INFADDR).LASTC)-1; 05063630
|
|
FOR I ~ INFADDR+2 STEP 1 UNTIL LAST 05063640
|
|
DO BEGIN IF GETC(I).CLASS = ENDCOM THEN I~GETC(I).LINK; 05063650
|
|
IF FX1 = (COML~GETC(I)).LINK THEN 05063660
|
|
IF INFADDR~COML.LASTC=A THEN COM[PWI].LASTC~ROOT 05063670
|
|
ELSE GO XIT ; 05063680
|
|
END; 05063710
|
|
END SETLINK; 05063730
|
|
PROCEDURE DIMENSION; 05064000
|
|
BEGIN 05065000
|
|
LABEL L, LOOP, ERROR ; 05066000
|
|
BOOLEAN DOUBLED, SINGLETOG; %109-05066005
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DIMEN","SION ",TRUE ) ; 05066010
|
|
IF LOGIFTOG THEN FLAG(101); 05067000
|
|
LABL ~ BLANKS; 05067100
|
|
IF NEXT=STAR THEN IF TYPE!DOUBTYPE THEN 05067210
|
|
BEGIN 05067220
|
|
SCAN ; 05067230
|
|
IF NEXT=NUM AND NUMTYPE=INTYPE THEN 05067240
|
|
BEGIN 05067250
|
|
IF FNEXT=4 THEN 05067260
|
|
BEGIN 05067270
|
|
SINGLETOG ~ TRUE; %109-05067275
|
|
IF TYPE=COMPTYPE THEN FLAG(176); GO L ; 05067280
|
|
END ; 05067290
|
|
IF FNEXT=8 THEN 05067300
|
|
BEGIN 05067310
|
|
IF TYPE=REALTYPE THEN TYPE~DOUBTYPE 05067320
|
|
ELSE IF TYPE!COMPTYPE THEN FLAG(177) ; 05067330
|
|
GO L ; 05067340
|
|
END ; 05067350
|
|
END ; 05067360
|
|
FLAG(IF TYPE=REALTYPE THEN 178 05067370
|
|
ELSE 177-REAL(TYPE=COMPTYPE)) ; 05067380
|
|
L: NCR~REAL(NCR.[30:3]!0)+3"677777"+NCR; SCN~1; SCAN ; 05067390
|
|
END ; 05067420
|
|
LOOP: DOUBLED~FALSE; 05068000
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO ERROR END; 05068100
|
|
FX1 ~ IF SINGLETOG THEN -FNEXT ELSE FNEXT; %109-05069000
|
|
IF TYPE } DOUBTYPE THEN % FIX ARRAY TYPE OFR 05069100
|
|
PUT(FX1,GET(FX1)&TYPE[TOSUBCL]); % BOUNDS ROUTINE 05069200
|
|
IF XREF THEN BEGIN INFA ~ 0&GET(FX1)[15:15:9]; 05069300
|
|
IF TYPE>0 THEN INFA.SUBCLASS~TYPE; 05069400
|
|
END; 05069500
|
|
XTA ~ INFB ~ NAME; 05070000
|
|
SCAN; 05071000
|
|
IF XREF THEN 05071100
|
|
BEGIN IF INFA.CLASS = UNKNOWN THEN 05071200
|
|
INFA.CLASS~IF NEXT=LPAREN THEN ARRAYID ELSE VARID; 05071300
|
|
ENTERX(INFB,INFA); 05071400
|
|
END; 05071500
|
|
IF NEXT=LPAREN THEN BEGIN SCAN; DOUBLED~BOUNDS(FX1) END ELSE 05072000
|
|
IF TYPE = -1 THEN FLOG(103); 05073000
|
|
GETALL(FX1, INFA, XTA, INFC); 05074000
|
|
IF TYPE > 0 THEN 05075000
|
|
IF BOOLEAN(INFA.TYPEFIXED) THEN FLAG(31) ELSE 05076000
|
|
BEGIN 05077000
|
|
IF TYPE > LOGTYPE THEN 05078000
|
|
IF GET(FX1+2) <0 THEN 05078200
|
|
BEGIN 05078400
|
|
IF NOT DOUBLED AND INFA.CLASS=1 THEN 05078500
|
|
BEGIN 05078800
|
|
BUMPLOCALS; 05079000
|
|
LENGTH~LOCALS + 1536; 05079200
|
|
PUT(FX1+2,INFC & LENGTH[TOSIZE]); 05079400
|
|
END 05079600
|
|
END ELSE IF NOT DOUBLED THEN 05079800
|
|
BEGIN IF INFC.SIZE > 16383 THEN FLAG(99); 05079900
|
|
PUT(FX1+2,INFC & (2 | INFC.SIZE)[TOSIZE]); 05080000
|
|
END; 05080100
|
|
PUT (FX1,INFA & 1[TOTYPE] & TYPE[TOSUBCL]); 05080500
|
|
END; 05081000
|
|
IF INFA < 0 THEN FLAG(39) ELSE 05082000
|
|
IF TYPE = -2 THEN 05083000
|
|
BEGIN 05084000
|
|
BAPC(INFA&FX1[TOLINK]&1[TOCE]&ROOT[TOLASTC]); 05085000
|
|
IF BOOLEAN(INFA.CE) THEN FLAG(2); 05086000
|
|
IF BOOLEAN(INFA.EQ) THEN 05086100
|
|
BEGIN 05087000
|
|
COM[NEXTCOM.IR,NEXTCOM.IC].LASTC ~ A ~ INFA.ADDR; 05088000
|
|
B~GETC(ROOT).ADDR ; 05089000
|
|
SETLINK(A); 05089050
|
|
IF NOT RINGCHECK THEN 05089100
|
|
BEGIN 05089200
|
|
COM[PWROOT].ADDR~GETC(A).ADDR ; 05090000
|
|
PUTC(A,GETC(A)&B[TOADDR]&7[TOSUBCL]) ; 05091000
|
|
END 05091100
|
|
END ELSE 05092000
|
|
PUT(FX1, INFA & 1[TOCE] & ROOT[TOADDR]); 05093000
|
|
IF BOOLEAN(INFA.FORMAL) THEN FLAG(10); 05094000
|
|
END; 05095000
|
|
IF ERRORTOG THEN 05096000
|
|
ERROR: 05096100
|
|
WHILE NEXT ! COMMA AND NEXT ! SEMI AND NEXT ! SLASH DO SCAN; 05097000
|
|
IF NEXT = COMMA THEN BEGIN SCAN; GO TO LOOP END; 05098000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" DIMEN","SION ",FALSE ); 05098010
|
|
END DIMENSION; 05099000
|
|
PROCEDURE FORMALPP(PARMSREQ, CLASS); VALUE PARMSREQ, CLASS; 05100000
|
|
BOOLEAN PARMSREQ; REAL CLASS; 05101000
|
|
BEGIN 05102000
|
|
LABEL LOOP, XIT; 05103000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FORM","ALPP ",TRUE ) ; 05103010
|
|
PARMS ~ 0; 05104000
|
|
SCAN; 05105000
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 05106000
|
|
IF CLASS = FUNID THEN 05106100
|
|
IF FUNVAR = 0 THEN 05107000
|
|
BEGIN 05107020
|
|
IF TYPE > 0 THEN 05107030
|
|
IF FUNVAR ~ GLOBALSEARCH(NAME) ! 0 THEN 05107040
|
|
IF BOOLEAN((T ~ GET(FUNVAR)).TYPEFIXED) AND TYPE ! T.SUBCLASS 05107050
|
|
THEN FLAG(31); 05107060
|
|
PUT(FUNVAR ~ FNEXT,GET(FNEXT) & VARID[TOCLASS]); 05107100
|
|
END; 05107160
|
|
FNEW ~ NEED(NNEW ~ NAME, CLASS); 05108000
|
|
ENTERX(NAME,IF CLASS = FUNID THEN 05108100
|
|
1&GET(FNEW)[15:15:9] ELSE 1&GET(FNEW)[15:15:5]); 05108200
|
|
SCAN; 05109000
|
|
IF NEXT ! LPAREN THEN 05110000
|
|
IF PARMSREQ THEN FLOG(106) ELSE ELSE 05111000
|
|
BEGIN 05112000
|
|
LOOP: 05113000
|
|
SCAN; 05114000
|
|
IF NEXT = ID THEN PARMLINK[PARMS ~ PARMS+1] ~ FNEXT ELSE 05115000
|
|
IF NEXT=STAR AND CLASS!FUNID THEN PARMLINK[PARMS~PARMS+1]~0ELSE05116000
|
|
FLOG(107); 05117000
|
|
IF XREF THEN ENTERX(NAME,IF NEXT = STAR THEN 0 ELSE 05117100
|
|
0&GET(FNEXT)[15:15:9]); 05117150
|
|
SCAN; 05118000
|
|
IF NEXT = COMMA THEN GO TO LOOP; 05119000
|
|
IF NEXT ! RPAREN THEN FLOG(108); 05120000
|
|
SCAN; 05121000
|
|
END; 05122000
|
|
IF NOT ERRORTOG THEN DECLAREPARMS(FNEW); 05123000
|
|
XIT: 05124000
|
|
IF DEBUGTOG THEN FLAGROUTINE(" FORM","ALPP ",FALSE) ; 05124010
|
|
END FORMALPP; 05125000
|
|
PROCEDURE ENDS; FORWARD; 05125100
|
|
PROCEDURE FUNCTION ; 05126000
|
|
BEGIN 05127000
|
|
REAL A,B,C,I; LABEL FOUND ; 05127100
|
|
IF SPLINK NEQ 0 THEN BEGIN FLAG(5); ENDS; SEGMENTSTART; END; 05128000
|
|
LABL ~ BLANKS; 05128100
|
|
FORMALPP(TRUE, FUNID); 05129000
|
|
GETALL(FNEW, INFA, INFB, INFC); 05130000
|
|
B~NUMINTM1 ; 05130100
|
|
WHILE A+1<B DO 05130110
|
|
BEGIN 05130115
|
|
IF C~INT[I~REAL(BOOLEAN(A+B) AND BOOLEAN(1022))]=INFB 05130120
|
|
THEN GO FOUND ; 05130125
|
|
IF INFB<C THEN B~I.[36:11] ELSE A~I.[36:11] ; 05130130
|
|
END ; 05130135
|
|
IF INFB=INT[I~(A+B)|2-I] THEN GO FOUND ; 05130140
|
|
IF FALSE THEN 05130145
|
|
FOUND: IF BOOLEAN(INT[I+1].INTSEEN) THEN BEGIN XTA~INFB; FLAG(167)END;05130150
|
|
IF TYPE<0 THEN TYPE~INFA.SUBCLASS&1[2:47:1] ; 05131000
|
|
PUT(SPLINK ~ FNEW, INFA & 1[TOTYPE] & TYPE[TOSUBCL]); 05132000
|
|
PUT(FUNVAR, GET(FUNVAR) & VARID[TOCLASS] & 1[TOTYPE] & 05133000
|
|
TYPE[TOSUBCL]); 05134000
|
|
END FUNCTION; 05135000
|
|
PROCEDURE STATEMENT; FORWARD; 05136000
|
|
PROCEDURE ASSIGN; 05137000
|
|
BEGIN 05138000
|
|
LABEL XIT; 05138100
|
|
EODS~TRUE ; 05138110
|
|
EXECUTABLE; 05139000
|
|
SCAN; 05140000
|
|
IF NEXT ! NUM THEN BEGIN FLOG(109); GO TO XIT END; 05141000
|
|
IF XREF THEN ENTERX(FNEXT,0&LABELID[TOCLASS]); 05141500
|
|
EMITNUM(FNEXT); 05142000
|
|
SCAN; 05143000
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 05144000
|
|
IF XREF THEN ENTERX(XTA,1&GET(FNEXT)[15:15:9]); 05144100
|
|
EMITN(FNEXT); 05145000
|
|
EMITO(STD); 05146000
|
|
SCAN; 05147000
|
|
XIT: 05147100
|
|
END ASSIGN; 05148000
|
|
PROCEDURE BLOCKDATA; 05149000
|
|
BEGIN 05150000
|
|
IF SPLINK NEQ 0 THEN BEGIN FLAG(5); ENDS; SEGMENTSTART; END; 05151000
|
|
LABL ~ BLANKS; 05151100
|
|
SCAN; 05152000
|
|
SPLINK ~ -1; 05153000
|
|
END BLOCKDATA; 05154000
|
|
PROCEDURE CALL; 05155000
|
|
BEGIN 05156000
|
|
EODS~TRUE ; 05156010
|
|
EXECUTABLE; 05157000
|
|
SCAN; 05158000
|
|
SUBREF; 05159000
|
|
END CALL; 05160000
|
|
PROCEDURE COMMON; 05161000
|
|
COMMENT THIS PROCEDURE MAKES THE COM ENTRY FOR COMMON ITEMS AND SETS 05161100
|
|
THE CE BIT IN BOTH THE COM AND INFO TABLES AND LINKS 05161110
|
|
THE HEADS OF CHAINS; 05161120
|
|
BEGIN 05162000
|
|
LABEL LOOP, BLOCK; 05163000
|
|
TYPE ~ -2; 05164000
|
|
SCAN; 05165000
|
|
IF NEXT = ID THEN 05166000
|
|
BEGIN 05167000
|
|
Z ~ NEED(".BLNK.", BLOCKID); 05168000
|
|
IF XREF THEN ENTERX("BLANK.",0&BLOCKID[TOCLASS]); 05168100
|
|
GO TO BLOCK; 05169000
|
|
END; 05170000
|
|
LOOP: 05171000
|
|
IF NEXT ! SLASH THEN FLOG(110); 05172000
|
|
SCAN; 05173000
|
|
IF NEXT = SLASH THEN Z ~ NEED(".BLNK.", BLOCKID) ELSE 05174000
|
|
BEGIN 05175000
|
|
IF NEXT ! ID THEN FLOG(105) ELSE 05176000
|
|
% FORCE UNIQUE NAME BY APPENDING 1 TO NAME (2ND CHAR OF WORD) 05176500
|
|
BEGIN Z ~ NEED(NAME&"1"[6:42:6],BLOCKID); 05177000
|
|
IF XREF THEN ENTERX(NAME,0&BLOCKID[TOCLASS]); 05177100
|
|
SCAN; 05177200
|
|
END; 05178000
|
|
IF NEXT ! SLASH THEN FLOG(110); 05179000
|
|
END; 05180000
|
|
SCAN; 05181000
|
|
BLOCK: 05182000
|
|
IF (T~GET(Z+2)).ADINFO = 0 THEN 05183000
|
|
BEGIN 05184000
|
|
IF NEXTCOM~NEXTCOM+1>SUPERMAXCOM THEN 05185000
|
|
BEGIN ROOT~0; FATAL(124) END 05186000
|
|
ELSE ROOT~NEXTCOM ; 05186100
|
|
PUTC(ROOT,0&HEADER[TOCLASS]&1[TOCE]&ROOT[TOADDR]) ; 05186200
|
|
BAPC(Z); 05187000
|
|
END ELSE 05188000
|
|
BEGIN 05189000
|
|
ROOT ~ T.ADINFO; 05190000
|
|
COM[(T~GETC(ROOT).LASTC).IR,T.IC].LINK~NEXTCOM+1 ; 05191000
|
|
IF COM[PWROOT]<0 THEN FLAG(2) ; 05191100
|
|
END; 05192000
|
|
DIMENSION; 05193000
|
|
BAPC(0&ENDCOM[TOCLASS]) ; 05194000
|
|
COM[PWROOT].LASTC~NEXTCOM ; 05195000
|
|
PUT(T~GETC(ROOT+1)+2,GET(T)&ROOT[TOADINFO]) ; 05196000
|
|
IF NEXT ! SEMI THEN GO TO LOOP; 05197000
|
|
END COMMON; 05198000
|
|
PROCEDURE ENDS; 05211000
|
|
BEGIN 05212000
|
|
IF SPLINK=0 THEN FLAG(184) ELSE %112-05212005
|
|
BEGIN %112-05212007
|
|
EODS~FALSE ; 05212010
|
|
IF LOGIFTOG THEN FLAG(101); 05213000
|
|
LABL ~ BLANKS; 05213100
|
|
IF SPLINK < 0 THEN EMITO(XIT) ELSE EMITPAIR(0, KOM); 05214000
|
|
SEGMENT((ADR+4) DIV 4, NSEG, TRUE, EDOC); 05215000
|
|
END; %112-05216000
|
|
END ENDS; 05217000
|
|
PROCEDURE ENTRY; 05218000
|
|
BEGIN 05219000
|
|
REAL SP; 05220000
|
|
IF SPLINK = 0 THEN FLAG(111) ELSE 05221000
|
|
IF SPLINK = 1 THEN BEGIN ELX ~ 0; FLAG(4) END; 05222000
|
|
LABL ~ BLANKS; 05222100
|
|
ADJUST ; 05222500
|
|
SP ~ GET(SPLINK); 05223000
|
|
FORMALPP( (T~SP.CLASS) = FUNID, T); 05224000
|
|
GETALL(FNEW, INFA, INFB, INFC); 05225000
|
|
IF INFA.CLASS = FUNID THEN 05226000
|
|
PUT(FNEW, INFA & 1[TOTYPE] & (SP.SUBCLASS)[TOSUBCL]); 05227000
|
|
PUT(FNEW+2, INFC & (ADR+1)[TOBASE]); 05228000
|
|
END ENTRY; 05229000
|
|
PROCEDURE EQUIVALENCE; 05230000
|
|
COMMENT THIS PROCEDURE MAKES THE COM ENTRY FOR EQUIV ITEMS AND SETS 05230100
|
|
THE EQ BIT IN BOTH THE COM AND INFO TABLES AND LINKS 05230110
|
|
THE HEADS OF CHAINS; 05230120
|
|
BEGIN 05231000
|
|
REAL P, Q, R, S; 05232000
|
|
BOOLEAN FIRST,PCOMM; 05232050
|
|
LABEL XIT; 05232100
|
|
IF LOGIFTOG THEN FLAG(101); 05233000
|
|
LABL ~ BLANKS; 05233100
|
|
DO 05234000
|
|
BEGIN 05235000
|
|
FIRST ~ FALSE; 05235500
|
|
SCAN; 05236000
|
|
IF NEXT ! LPAREN THEN BEGIN FLOG(106); GO TO XIT END; 05237000
|
|
IF NEXTCOM~NEXTCOM+1>SUPERMAXCOM THEN 05238000
|
|
BEGIN ROOT~0; FATAL(124) END 05238100
|
|
ELSE ROOT~NEXTCOM ; 05238200
|
|
PUTC(ROOT,0&HEADER[TOCLASS]&ROOT[TOADDR]) ; 05238300
|
|
BAPC(0); Q~0 ; 05239000
|
|
DO 05240000
|
|
BEGIN 05241000
|
|
SCAN; 05242000
|
|
IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 05243000
|
|
IF XREF THEN ENTERX(NAME,0&GET(FNEXT)[15:15:9]); 05243200
|
|
FX1 ~ FNEXT; 05244000
|
|
LENGTH ~ 0; 05245000
|
|
SCAN; 05246000
|
|
IF NEXT = LPAREN THEN 05247000
|
|
BEGIN 05248000
|
|
IF GET(FX1).CLASS ! ARRAYID THEN 05249000
|
|
BEGIN XTA ~ GET(FX1+1); FLOG(112) END; 05250000
|
|
R ~ 0; P ~ 1; 05251000
|
|
S ~ GET(FX1+2).ADINFO; 05252000
|
|
DO 05253000
|
|
BEGIN 05254000
|
|
SCAN; 05255000
|
|
IF NEXT ! NUM OR NUMTYPE ! INTYPE THEN FLAG(113); 05256000
|
|
LENGTH ~ LENGTH + P|(FNEXT-1); 05257000
|
|
P ~ P|EXTRAINFO[(S+R).IR,(S+R).IC] ; 05258000
|
|
R ~ R-1; 05259000
|
|
SCAN; 05260000
|
|
END UNTIL NEXT ! COMMA; 05261000
|
|
IF NEXT ! RPAREN THEN BEGIN FLOG(108); GO TO XIT END; 05262000
|
|
IF R!-1 THEN IF R~R+GET(FX1+2).NEXTRA!0 THEN 05262200
|
|
BEGIN XTA~GET(FX1+1); FLAG(IF R>0 THEN 23 ELSE 24) END ; 05262300
|
|
SCAN; 05263000
|
|
END; 05264000
|
|
IF (INFA~GET(FX1)) < 0 THEN 05265000
|
|
BEGIN XTA ~ GET(FX1+1); FLAG(39) END ELSE 05266000
|
|
BEGIN 05267000
|
|
IF INFA.SUBCLASS > LOGTYPE THEN LENGTH ~ 2|LENGTH ; 05267100
|
|
BAPC(INFA&FX1[TOLINK]&LENGTH[TORELADD]&1[TOEQ]&ROOT[TOLASTC]); 05268000
|
|
IF(PCOMM~BOOLEAN(INFA.CE)) OR BOOLEAN(INFA.EQ) THEN 05269000
|
|
BEGIN 05270000
|
|
IF FIRST AND PCOMM THEN BEGIN XTA~GET(FX1+1); FLAG(2) END 05270100
|
|
ELSE IF NOT FIRST THEN FIRST ~ PCOMM; 05270200
|
|
PUT(FX1,INFA & 1[TOEQ]); 05270500
|
|
COM[NEXTCOM.IR,NEXTCOM.IC].LASTC ~ A ~ INFA.ADDR; 05271000
|
|
B~GETC(ROOT).ADDR ; 05272000
|
|
SETLINK(A); 05272050
|
|
IF NOT RINGCHECK THEN 05272100
|
|
BEGIN 05272200
|
|
COM[PWROOT].ADDR~GETC(A).ADDR ; 05273000
|
|
PUTC(A,GETC(A)&B[TOADDR]&7[TOSUBCL]) ; 05274000
|
|
END 05274200
|
|
END ELSE 05275000
|
|
PUT(FX1,INFA & 1[TOEQ] & ROOT[TOADDR]); 05276000
|
|
IF LENGTH > Q THEN Q ~ LENGTH; 05277000
|
|
IF BOOLEAN(INFA.FORMAL) THEN 05278000
|
|
BEGIN XTA ~ GET(FX1+1); FLAG(11) END; 05279000
|
|
END; 05280000
|
|
END UNTIL NEXT ! COMMA; 05281000
|
|
IF NEXT ! RPAREN THEN BEGIN FLOG(108); GO TO XIT END; 05282000
|
|
SCAN; 05283000
|
|
PUTC(ROOT+1,Q); 05284000
|
|
BAPC(0&ENDCOM[TOCLASS]) ; 05285000
|
|
COM[PWROOT].LASTC~NEXTCOM ; 05286000
|
|
END UNTIL NEXT ! COMMA; 05287000
|
|
XIT: 05287100
|
|
END EQUIVALENCE; 05288000
|
|
PROCEDURE EXTERNAL; 05289000
|
|
BEGIN 05290000
|
|
IF SPLINK < 0 THEN FLAG( 12); 05291000
|
|
IF LOGIFTOG THEN FLAG(101); 05292000
|
|
LABL ~ BLANKS; 05292100
|
|
DO 05293000
|
|
BEGIN 05294000
|
|
SCAN; 05295000
|
|
IF NEXT ! ID THEN FLOG(105) ELSE 05296000
|
|
BEGIN T ~ NEED(NAME,EXTID); 05297000
|
|
IF XREF THEN ENTERX(NAME,0&GET(T)[15:15:9]); 05297300
|
|
SCAN; 05297500
|
|
END; 05297800
|
|
05298000
|
|
END UNTIL NEXT ! COMMA; 05299000
|
|
END EXTERNAL; 05300000
|
|
PROCEDURE CHAIN; 05300100
|
|
BEGIN 05300150
|
|
LABEL AGN, XIT; 05300160
|
|
REAL T1; 05300170
|
|
DEFINE FLG(FLG1) = BEGIN FLOG(FLG1); GO TO XIT END#; 05300180
|
|
EXECUTABLE; 05300182
|
|
SCAN; 05300184
|
|
T1 ~ 2; 05300190
|
|
IF FALSE THEN 05300210
|
|
AGN: IF GLOBALNEXT ! COMMA THEN FLG(28); 05300220
|
|
SCAN; 05300230
|
|
IF EXPR(TRUE) > REALTYPE THEN FLG(102); 05300240
|
|
IF (T1 ~ T1 - 1) ! 0 THEN GO TO AGN; 05300250
|
|
IF GLOBALNEXT ! RPAREN THEN FLG(3); 05300260
|
|
EMITPAIR(37,KOM); 05300270
|
|
SCAN; 05300280
|
|
IF GLOBALNEXT ! SEMI THEN FLOG(117); 05300290
|
|
XIT: WHILE GLOBALNEXT ! SEMI DO SCAN; 05300300
|
|
END CHAIN; 05300310
|
|
PROCEDURE GOTOS; 05301000
|
|
BEGIN LABEL XIT; 05302000
|
|
REAL ASSIGNEDID; 05302100
|
|
EODS~TRUE ; 05302110
|
|
EXECUTABLE; 05303000
|
|
SCAN; 05304000
|
|
IF NEXT = NUM THEN 05305000
|
|
BEGIN 05306000
|
|
LABELBRANCH(NAME, FALSE); 05307000
|
|
SCAN; 05308000
|
|
GO TO XIT; 05309000
|
|
END; 05310000
|
|
IF NEXT = ID THEN 05311000
|
|
BEGIN 05312000
|
|
ASSIGNEDID ~ FNEXT; 05313000
|
|
IF XREF THEN ENTERX(XTA,0&GET(FNEXT)[15:15:9]); 05313200
|
|
SCAN; 05313300
|
|
IF NEXT ! COMMA THEN FLOG(114); 05313600
|
|
SCAN; 05314000
|
|
IF NEXT ! LPAREN THEN FLOG(106); 05314300
|
|
DO 05314600
|
|
BEGIN 05315000
|
|
SCAN; 05315300
|
|
IF NEXT ! NUM THEN FLOG(109); 05315600
|
|
EMITV(ASSIGNEDID); 05316000
|
|
EMITNUM(FNEXT); 05316300
|
|
EMITO(NEQL); 05316600
|
|
LABELBRANCH(NAME, TRUE); 05317000
|
|
SCAN; 05317300
|
|
END UNTIL NEXT ! COMMA; 05317600
|
|
IF NEXT ! RPAREN THEN FLOG(108); 05318000
|
|
SCAN; 05318200
|
|
EMITPAIR(1, SSN); % CAUSE INVALID INDEX TERMINATION 05318400
|
|
EMITDESCLIT(10); 05318600
|
|
GO TO XIT; 05319000
|
|
END; 05320000
|
|
IF NEXT ! LPAREN THEN FLOG(106); 05321000
|
|
P ~ 0; 05322000
|
|
DO 05323000
|
|
BEGIN 05324000
|
|
SCAN; 05325000
|
|
IF NEXT ! NUM THEN BEGIN FLOG(109); GO TO XIT END; 05326000
|
|
LSTT[P~P+1] ~ NAME; 05327000
|
|
SCAN; 05328000
|
|
END UNTIL NEXT ! COMMA; 05329000
|
|
IF NEXT ! RPAREN THEN BEGIN FLOG(108); GO TO XIT END; 05330000
|
|
SCAN; 05331000
|
|
IF NEXT ! COMMA THEN BEGIN FLOG(114); GO TO XIT END; 05332000
|
|
SCAN; 05333000
|
|
IT ~ P+1; % DONT LET EXPR WIPE OUT LSTT 05334000
|
|
IF EXPR(TRUE) > REALTYPE THEN FLOG(102); 05335000
|
|
EMITPAIR(JUNK, ISN); 05336000
|
|
EMITPAIR(1,LESS); 05337000
|
|
EMITOPDCLIT(JUNK); 05338000
|
|
EMITPAIR(P,GRTR); 05339000
|
|
EMITO(LOR); 05340000
|
|
EMITOPDCLIT(JUNK); 05341000
|
|
EMITL(3); 05342000
|
|
EMITO(MUL); 05343000
|
|
05344000
|
|
IF ADR+3|P > 4085 THEN BEGIN ADR~ADR+1; SEGOVF END; 05345000
|
|
EMITO(BFC); 05346000
|
|
EMITPAIR(1, SSN); 05347000
|
|
EMITDESCLIT(10); 05348000
|
|
FOR I ~ 1 STEP 1 UNTIL P DO 05349000
|
|
BEGIN 05349100
|
|
J ~ ADR; LABELBRANCH(LSTT[I], FALSE); 05349200
|
|
IF ADR-J = 2 THEN EMITO(NOP); 05349300
|
|
END; 05349400
|
|
XIT: 05350000
|
|
IT ~ 0; 05351000
|
|
END GOTOS; 05352000
|
|
PROCEDURE IFS; 05353000
|
|
BEGIN REAL TYPE, LOGIFADR, SAVELABL; 05354000
|
|
EODS~TRUE; 05354010
|
|
EXECUTABLE; 05355000
|
|
SCAN; 05356000
|
|
IF NEXT ! LPAREN THEN FLOG(106); 05357000
|
|
SCAN; 05358000
|
|
IF TYPE ~ EXPR(TRUE) = COMPTYPE THEN FLAG(89); 05359000
|
|
IF NEXT ! RPAREN THEN FLOG(108); 05360000
|
|
IF TYPE = LOGTYPE THEN 05361000
|
|
BEGIN 05362000
|
|
EMITB(-1, TRUE); 05363000
|
|
LOGIFADR ~ LAX; 05364000
|
|
LOGIFTOG ~ TRUE; EOSTOG ~ TRUE; 05365000
|
|
SAVELABL ~ LABL; LABL ~ BLANKS; 05365100
|
|
STATEMENT; 05366000
|
|
LABL ~ SAVELABL; 05366100
|
|
LOGIFTOG ~ FALSE; EOSTOG ~ FALSE; 05367000
|
|
FIXB(LOGIFADR); 05368000
|
|
END ELSE 05369000
|
|
BEGIN 05370000
|
|
IF TYPE = DOUBTYPE THEN 05371000
|
|
BEGIN EMITO(XCH); EMITO(DEL) END; 05372000
|
|
SCAN; 05373000
|
|
IF NEXT ! NUM THEN FLOG(109); 05374000
|
|
FX1 ~ FNEXT; NX1 ~ NAME; 05375000
|
|
SCAN; 05376000
|
|
IF NEXT ! COMMA THEN FLOG(114); 05377000
|
|
SCAN; 05378000
|
|
IF NEXT ! NUM THEN FLOG(109); 05379000
|
|
FX2 ~ FNEXT; NX2 ~ NAME; 05380000
|
|
SCAN; 05381000
|
|
IF NEXT ! COMMA THEN FLOG(114); 05382000
|
|
SCAN; 05383000
|
|
IF NEXT ! NUM THEN FLOG(109); 05384000
|
|
FX3 ~ FNEXT; NX3 ~ NAME; 05385000
|
|
SCAN; 05386000
|
|
IF FX2 = FX3 THEN 05387000
|
|
BEGIN 05388000
|
|
EMITPAIR(0,GEQL); 05389000
|
|
LABELBRANCH(NX1, TRUE); 05390000
|
|
LABELBRANCH(NX3, FALSE); 05391000
|
|
IF XREF THEN ENTERX(NX2,0&LABELID[TOCLASS]); 05391200
|
|
END ELSE 05392000
|
|
IF FX1 = FX3 THEN 05393000
|
|
BEGIN 05394000
|
|
EMITPAIR(0,NEQL); 05395000
|
|
LABELBRANCH(NX2, TRUE); 05396000
|
|
LABELBRANCH(NX1, FALSE); 05397000
|
|
IF XREF THEN ENTERX(NX3,0&LABELID[TOCLASS]); 05397200
|
|
END ELSE 05398000
|
|
IF FX1 = FX2 THEN 05399000
|
|
BEGIN 05400000
|
|
EMITPAIR(0,LEQL); 05401000
|
|
LABELBRANCH(NX3, TRUE); 05402000
|
|
LABELBRANCH(NX1, FALSE); 05403000
|
|
IF XREF THEN ENTERX(NX2,0&LABELID[TOCLASS]); 05403200
|
|
END ELSE 05404000
|
|
BEGIN 05405000
|
|
EMITO(DUP); 05406000
|
|
EMITPAIR(0,NEQL); 05407000
|
|
EMITB(-1,TRUE); 05408000
|
|
EMITPAIR(0,LESS); 05409000
|
|
LABELBRANCH(NX3, TRUE); 05410000
|
|
LABELBRANCH(NX1, FALSE); 05411000
|
|
FIXB(LAX); 05412000
|
|
EMITO(DEL); 05413000
|
|
LABELBRANCH(NX2, FALSE); 05414000
|
|
END; 05415000
|
|
END; 05416000
|
|
END IFS; 05417000
|
|
PROCEDURE NAMEL; 05430000
|
|
BEGIN LABEL NIM,XIT,ELMNT,WRAP; 05431000
|
|
IF SPLINK < 0 THEN FLAG(12); 05432000
|
|
IF LOGIFTOG THEN FLAG(101); 05433000
|
|
LABL ~ BLANKS; 05433100
|
|
SCAN; IF NEXT ! SLASH THEN FLOG(110); 05434000
|
|
NIM: SCAN; IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 05435000
|
|
IF J ~ (INFA ~ GET(LADR2 ~ FNEXT)).CLASS = UNKNOWN THEN 05436000
|
|
PUT(LADR2,INFA&NAMELIST[TOCLASS]) 05437000
|
|
ELSE IF J ! NAMELIST THEN 05438000
|
|
BEGIN XTA ~ GET(LADR2 + 1); 05439000
|
|
FLAG(20); 05440000
|
|
END; 05441000
|
|
LSTT[LSTS ~ LADR1 ~ 0] ~ NAME; 05442000
|
|
IF XREF THEN ENTERX(NAME,0&NAMELIST[TOCLASS]); 05442500
|
|
SCAN; IF NEXT ! SLASH THEN FLOG(110); 05443000
|
|
ELMNT: SCAN; IF NEXT ! ID THEN BEGIN FLOG(105); GO TO XIT END; 05444000
|
|
LADR1 ~ LADR1 + 1; 05445000
|
|
IF (T ~ GET(FNEW ~ GETSPACE(FNEXT)).CLASS) > VARID THEN FLAG(48); 05446000
|
|
GETALL(FNEW,INFA,INFB,INFC); 05447000
|
|
IF XREF THEN ENTERX(INFB,0&INFA[15:15:9]); 05447500
|
|
IF LSTS ~ LSTS+1 = LSTMAX THEN BEGIN FLOG(78); GO TO XIT END ELSE 05448000
|
|
LSTT[LSTS] ~ NAME&INFA.CLASNSUB[2:38:10]&0[8:47:1]; 05448500
|
|
IF T = ARRAYID THEN 05449000
|
|
BEGIN J ~ INFC.ADINFO; 05450000
|
|
I ~ INFC.NEXTRA; 05451000
|
|
IF LSTS + I + 1 > LSTMAX THEN 05451100
|
|
BEGIN FLOG(78); GO TO XIT END; 05451200
|
|
LSTT[LSTS ~ LSTS + 1] ~ 0&I[1:42:6] % # DIMENSIONS 05452000
|
|
&INFA.ADDR[7:37:11] % REL ADR 05453000
|
|
&INFC.BASE[18:33:15] % BASE 05454000
|
|
&INFC.SIZE[33:33:15]; % SIZE 05455000
|
|
FOR T ~ J STEP -1 UNTIL J - I + 1 DO 05456000
|
|
LSTT[LSTS ~ LSTS + 1] ~ EXTRAINFO[T.IR,T.IC]; 05457000
|
|
END ELSE BEGIN LSTT[LSTS~LSTS+1]~0&(INFA.ADDR)[7:37:11]; 05458000
|
|
IF BOOLEAN(INFA.CE) THEN LSTT[LSTS]~LSTT[LSTS]&INFC.BASE[18:33:15]05458400
|
|
&INFC.SIZE[33:33:15] END; 05458600
|
|
SCAN; IF NEXT = COMMA THEN GO TO ELMNT; 05459000
|
|
IF NEXT ! SEMI AND NEXT ! SLASH THEN FLOG(115); 05460000
|
|
LSTT[LSTS + 1] ~ 0; 05461000
|
|
LSTT[0].[2:10] ~ LADR1; 05462000
|
|
PRTSAVER(LADR2,LSTS + 2,LSTT); 05463000
|
|
IF NEXT ! SEMI THEN GO TO NIM; 05464000
|
|
XIT: 05465000
|
|
END NAMEL; 05466000
|
|
PROCEDURE PAUSE; 05467000
|
|
IF DCINPUT THEN BEGIN XTA~"PAUSE "; FLOG(151) END ELSE 05467100
|
|
BEGIN 05468000
|
|
EODS~TRUE ; 05468010
|
|
IF TSSEDITOG THEN TSSED("PAUSE ",2) ; 05468100
|
|
EXECUTABLE; 05469000
|
|
SCAN; 05470000
|
|
IF NEXT = SEMI THEN EMITL(0) ELSE 05471000
|
|
IF NEXT = NUM THEN 05472000
|
|
BEGIN 05473000
|
|
EMITNUM(NAME); 05474000
|
|
SCAN; 05475000
|
|
END; 05476000
|
|
EMITPAIR(33, KOM); 05477000
|
|
EMITO(DEL); 05477100
|
|
END PAUSE; 05478000
|
|
PROCEDURE TYPIT(TYP,TMPNXT); VALUE TYP; REAL TYP,TMPNXT ; 05479000
|
|
BEGIN 05480000
|
|
TYPE~TYP; SCAN ; 05480010
|
|
IF NEXT=16 THEN BEGIN TMPNXT~16; FUNCTION END ELSE DIMENSION ; 05480020
|
|
END OF TYPIT ; 05480040
|
|
DEFINE COMPLEX =TYPIT(COMPTYPE,TEMPNEXT) #, 05481000
|
|
LOGICAL =TYPIT(LOGTYPE ,TEMPNEXT) #, 05482000
|
|
DOUBLEPRECISION =TYPIT(DOUBTYPE,TEMPNEXT) #, 05483000
|
|
INTEGERS =TYPIT(INTYPE ,TEMPNEXT) #, 05484000
|
|
REALS =TYPIT(REALTYPE,TEMPNEXT) #; 05484500
|
|
PROCEDURE STOP; 05485000
|
|
BEGIN 05486000
|
|
RETURNFOUND ~ TRUE; 05486100
|
|
EODS~TRUE; 05486110
|
|
EXECUTABLE; 05487000
|
|
COMMENT INITIAL SCAN ALREADY DONE; 05488000
|
|
EMITL(1); 05489000
|
|
EMITPAIR(16,STD); 05490000
|
|
EMITPAIR(10, KOM); 05491000
|
|
EMITPAIR(5, KOM); 05492000
|
|
WHILE NEXT ! SEMI DO SCAN; 05493000
|
|
END STOP; 05494000
|
|
PROCEDURE RETURN; 05495000
|
|
BEGIN LABEL EXIT; 05496000
|
|
REAL T, XITCODE; 05497000
|
|
RETURNFOUND ~ TRUE; 05497100
|
|
EODS~TRUE ; 05497110
|
|
EXECUTABLE; 05498000
|
|
05498100
|
|
05498200
|
|
SCAN; 05499000
|
|
IF SPLINK=0 OR SPLINK=1 THEN 05499100
|
|
BEGIN XTA~"RETURN"; FLOG(153); GO EXIT END ; 05500000
|
|
IF NEXT = SEMI THEN 05501000
|
|
BEGIN 05502000
|
|
IF (T ~ GET(SPLINK)).CLASS = FUNID THEN 05503000
|
|
BEGIN 05504000
|
|
EMITV(FUNVAR); 05505000
|
|
IF T.SUBCLASS > LOGTYPE THEN EMITPAIR(JUNK, STD); 05506000
|
|
XITCODE ~ RTN; 05507000
|
|
END ELSE XITCODE ~ XIT; 05508000
|
|
IF ADR } 4077 THEN 05509000
|
|
BEGIN ADR ~ ADR+1; SEGOVF END; 05510000
|
|
EMITOPDCLIT(1538); % F+2 05511000
|
|
EMITPAIR(3, BFC); 05512000
|
|
EMITPAIR(10, KOM); 05513000
|
|
EMITO(XITCODE); 05514000
|
|
EMITOPDCLIT(16); 05515000
|
|
EMITPAIR(1, SUB); 05516000
|
|
EMITPAIR(16, STD); 05517000
|
|
EMITO(XITCODE); 05518000
|
|
GO TO EXIT; 05519000
|
|
END; 05520000
|
|
IF LABELMOM = 0 THEN FLOG(145); 05520100
|
|
IF EXPR(TRUE) > REALTYPE THEN FLAG(102); 05521000
|
|
IF EXPRESULT = NUMCLASS THEN 05521100
|
|
BEGIN IF XREF THEN ENTERX(EXPVALUE,0&LABELID[TOCLASS]); 05521200
|
|
ADR ~ ADR-1;EMITL(EXPVALUE-1) 05521400
|
|
END ELSE 05521600
|
|
EMITPAIR(1, SUB); 05522000
|
|
EMITOPDCLIT(LABELMOM); 05523000
|
|
EMITO(MKS); 05524000
|
|
EMITL(9); 05525000
|
|
EMITOPDCLIT(5); 05526000
|
|
05527000
|
|
EXIT: 05528000
|
|
END RETURN; 05529000
|
|
PROCEDURE IMPLICIT ; 05529100
|
|
BEGIN 05529105
|
|
REAL R1,R2,R3,R4 ; 05529110
|
|
LABEL R,A,X,L ; 05529120
|
|
IF NOT(LASTNEXT=42 OR LASTNEXT=1000 OR LASTNEXT=30 %110-05529130
|
|
OR LASTNEXT=16 OR LASTNEXT = 11) %110-05529131
|
|
THEN BEGIN FLOG(181); FILETOG~TRUE; GO X END ; 05529140
|
|
R: EOSTOG~ERRORTOG~TRUE; FILETOG~FALSE ; 05529210
|
|
MOVEW(ACCUM[3],ACCUM[2],0,3); SCAN; ERRORTOG~FALSE; FILETOG~TRUE ; 05529215
|
|
IF R1~IF R3~NEXT=18 THEN INTID ELSE IF R3=26 THEN REALID ELSE 0& 05529220
|
|
(IF R3=10 THEN DOUBTYPE ELSE IF R3=19 THEN LOGTYPE ELSE IF R3=05529230
|
|
6 THEN COMPTYPE ELSE 0)[TOSUBCL]=0 THEN 05529240
|
|
BEGIN FLOG(182); GO X END ; 05529250
|
|
SCN~2; SCAN ; 05529260
|
|
IF NEXT = STAR THEN IF R3!10 THEN 05529270
|
|
BEGIN SCAN ; 05529280
|
|
IF NEXT=NUM AND NUMTYPE=INTYPE THEN 05529290
|
|
BEGIN 05529300
|
|
IF FNEXT=4 THEN BEGIN IF R3=6 THEN FLAG(176); GO L END ; 05529310
|
|
IF FNEXT=8 THEN 05529320
|
|
BEGIN 05529330
|
|
IF R3=26 THEN R1~0&DOUBTYPE[TOSUBCL] 05529340
|
|
ELSE IF R3!6 THEN FLAG(177) ; 05529350
|
|
GO L; 05529360
|
|
END ; 05529370
|
|
END ; 05529380
|
|
FLAG(IF R3=26 THEN 178 ELSE 177-REAL(R3=6)) ; 05529390
|
|
L: NCR~REAL(NCR.[30:3]!0)+3"677777"+NCR; SCN~1; SCAN ; 05529400
|
|
END ; 05529410
|
|
IF NEXT!LPAREN THEN BEGIN FLOG(106); GO X END ; 05529420
|
|
A: SCAN; R4~ERRORCT ; 05529430
|
|
IF R2~NAME.[12:6]<17 OR (R2>25 AND R2<33) OR (R2>41 AND R2<50) 05529440
|
|
OR R2>57 OR NAME.[18:30]!" " THEN FLAG(179) ; 05529450
|
|
SCAN ; 05529460
|
|
IF NEXT!MINUS THEN 05529470
|
|
BEGIN IF ERRORCT=R4 THEN TIPE[IF R2!"0" THEN R2 ELSE 12]~R1 END05529475
|
|
ELSE BEGIN 05529480
|
|
SCAN ; 05529490
|
|
IF R3~NAME.[12:6]<17 OR (R3>25 AND R3<33) OR (R3>41 AND R3<50) 05529500
|
|
OR R3>57 OR NAME.[18:30]!" " THEN FLAG(179) ; 05529510
|
|
IF R3 LEQ R2 THEN FLAG(180) ; 05529520
|
|
IF ERRORCT=R4 THEN FOR R2~R2 STEP 1 UNTIL R3 DO 05529530
|
|
BEGIN 05529540
|
|
IF R2>25 AND R2<33 THEN R2~33 ELSE IF R2>41 AND R2<50 05529550
|
|
THEN R2~50 ; 05529560
|
|
TIPE[IF R2!"0" THEN R2 ELSE 12]~R1 ; 05529570
|
|
END ; 05529580
|
|
SCAN ; 05529590
|
|
END ; 05529600
|
|
IF NEXT=COMMA THEN GO A ; 05529610
|
|
IF NEXT!RPAREN THEN BEGIN FLOG(108); GO X END ; 05529620
|
|
SCAN; IF NEXT=COMMA THEN GO R ; 05529630
|
|
IF NEXT!SEMI THEN BEGIN FLOG(117); GO X END ; 05529635
|
|
IF SPLINK > 1 THEN 05529640
|
|
BEGIN 05529650
|
|
IF BOOLEAN(TYPE.[2:1]) THEN IF GET(SPLINK).CLASS=FUNID THEN 05529660
|
|
BEGIN 05529670
|
|
INFO[SPLINK.IR,SPLINK.IC].SUBCLASS~R3~TIPE[IF R3~GET( 05529680
|
|
SPLINK+1).[12:6]!"0" THEN R3 ELSE 12].SUBCLASS ; 05529690
|
|
INFO[FUNVAR.IR,FUNVAR.IC].SUBCLASS~R3 ; 05529700
|
|
END ; 05529710
|
|
IF R1~GET(SPLINK+2)<0 THEN 05529720
|
|
FOR R2~R1.NEXTRA-1+R1~R1.ADINFO STEP -1 UNTIL R1 DO 05529730
|
|
IF R3~PARMLINK[R2-R1+1]!0 THEN 05529740
|
|
BEGIN 05529750
|
|
EXTRAINFO[R2.IR,R2.IC].SUBCLASS~R4~TIPE[IF R4~ 05529760
|
|
GET(R3+1).[12:6]!"0" THEN R4 ELSE 12] 05529770
|
|
.SUBCLASS ; 05529780
|
|
INFO[R3.IR,R3.IC].SUBCLASS~R4 ; 05529790
|
|
END ; 05529800
|
|
END ; 05529810
|
|
X: WHILE NEXT!SEMI DO SCAN; FILETOG~FALSE ; 05529820
|
|
END OF IMPLICIT ; 05529830
|
|
PROCEDURE SUBROUTINE; 05530000
|
|
BEGIN 05531000
|
|
IF SPLINK NEQ 0 THEN BEGIN FLAG(5); ENDS; SEGMENTSTART; END; 05532000
|
|
LABL ~ BLANKS; 05532100
|
|
FORMALPP(FALSE, SUBRID); 05533000
|
|
SPLINK ~ FNEW; 05534000
|
|
END SUBROUTINE; 05535000
|
|
PROCEDURE MEMHANDLER(N); VALUE N; REAL N ; 05535010
|
|
BEGIN 05535020
|
|
REAL A ; 05535030
|
|
LABEL L1,L2,L3,XIT ; 05535040
|
|
IF DEBUGTOG THEN FLAGROUTINE(" MEMHA","NDLER ",TRUE) ; 05535045
|
|
IF N LEQ 2 THEN 05535050
|
|
BEGIN % FIXED=1, VARYING=2. 05535060
|
|
N~IF N=1 THEN 6 ELSE 0 ; 05535070
|
|
L1: SCAN; 05535080
|
|
IF NEXT!ID THEN BEGIN FLOG(105); GO XIT END ; 05535090
|
|
IF (A~GET(GETSPACE(FNEXT))).CLASS!ARRAYID THEN 05535100
|
|
BEGIN FLOG(35); GO XIT END ; 05535110
|
|
IF XREF THEN ENTERX(XTA,0&A[15:15:9]) ; 05535120
|
|
IF BOOLEAN(A.EQ) OR BOOLEAN(A.FORMAL) THEN FLAG(169) 05535130
|
|
ELSE BEGIN 05535140
|
|
EMITO(MKS); EMITPAIR(A.ADDR,LOD); EMITL(N) ; 05535150
|
|
EMITV(NEED(".MEMHR",INTRFUNID)) ; 05535160
|
|
END ; 05535170
|
|
SCAN; IF NEXT=COMMA THEN GO L1 ; 05535180
|
|
END 05535190
|
|
ELSE IF N=3 THEN 05535200
|
|
BEGIN % AUXMEMED FUNCTION OR SUBROUTINE. 05535210
|
|
SCAN ; 05535220
|
|
IF NEXT!ID THEN BEGIN FLOG(105); GO XIT END ; 05535225
|
|
IF GET(FNEXT+1)!GET(SPLINK+1) THEN 05535230
|
|
BEGIN FLOG(170); GO XIT END ; 05535235
|
|
PUT(SPLINK,GET(SPLINK)&1[TOADJ]) ; 05535240
|
|
IF XREF THEN ENTERX(XTA,0&GET(FNEXT)[15:15:9]); SCAN ; 05535250
|
|
END 05535420
|
|
ELSE BEGIN % RELEASE. 05535430
|
|
L2: SCAN ; 05535440
|
|
IF NEXT!ID THEN BEGIN FLOG(105); GO XIT END ; 05535450
|
|
IF (A~GET(GETSPACE(FNEXT))).CLASS=ARRAYID THEN 05535460
|
|
BEGIN 05535470
|
|
IF BOOLEAN(A.EQ) OR BOOLEAN(A.FORMAL) THEN FLAG(169) 05535480
|
|
ELSE BEGIN 05535490
|
|
EMITO(MKS); EMITPAIR(A.ADDR,LOD) ; 05535500
|
|
EMITPAIR(1,SSN) ; 05535510
|
|
EMITV(NEED(".MEMHR",INTRFUNID)) ; 05535520
|
|
END ; 05535530
|
|
L3: IF XREF THEN ENTERX(XTA,0&A[15:15:9]) ; 05535540
|
|
END 05535550
|
|
ELSE IF A.CLASS}BLOCKID OR A.CLASS{LABELID THEN 05535560
|
|
BEGIN FLOG(171); GO XIT END 05535570
|
|
ELSE BEGIN 05535575
|
|
EMITPAIR(A.ADDR,LOD); EMITPAIR(38,KOM) ; 05535580
|
|
EMITO(DEL); GO L3 ; 05535585
|
|
END ; 05535590
|
|
SCAN; IF NEXT=COMMA THEN GO L2 ; 05535595
|
|
END ; 05535600
|
|
XIT:IF DEBUGTOG THEN FLAGROUTINE(" MEMHA","NDLER ",FALSE) ; 05535605
|
|
END OF MEMHANDLER ; 05535610
|
|
PROCEDURE STATEMENT; 05536000
|
|
BEGIN LABEL DOL1, XIT; 05537000
|
|
REAL TEMPNEXT ; 05537100
|
|
BOOLEAN ENDTOG; %112-05537200
|
|
DO SCAN UNTIL NEXT ! SEMI; 05538000
|
|
IF NEXT=ID THEN ASSIGNMENT ELSE IF NEXT LEQ RSH1 THEN 05539000
|
|
CASE(TEMPNEXT~NEXT) OF 05540000
|
|
BEGIN 05541000
|
|
FLOG(16); 05542000
|
|
ASSIGN; 05543000
|
|
IOCOMMAND(4); %BACKSPACE 05544000
|
|
BLOCKDATA; 05545000
|
|
CALL; 05546000
|
|
COMMON; 05547000
|
|
COMPLEX; 05548000
|
|
BEGIN EXECUTABLE; SCAN END; % CONTINUE 05549000
|
|
IOCOMMAND(7); % DATA 05550000
|
|
BEGIN SCAN; TYPE ~ -1; DIMENSION END; 05551000
|
|
DOUBLEPRECISION; 05552000
|
|
BEGIN ENDS; ENDTOG:=TRUE; SCAN END; %112-05553000
|
|
FILECONTROL(1); %ENDFILE 05554000
|
|
ENTRY; 05555000
|
|
EQUIVALENCE; 05556000
|
|
EXTERNAL; 05557000
|
|
BEGIN TYPE ~ -1; FUNCTION END; 05558000
|
|
GOTOS; 05559000
|
|
INTEGERS; 05560000
|
|
LOGICAL; 05561000
|
|
NAMEL; 05562000
|
|
PAUSE; 05563000
|
|
IOCOMMAND(2); %PRINT 05564000
|
|
; 05565000
|
|
IOCOMMAND(3); %PUNCH 05566000
|
|
IOCOMMAND(0); %READ 05567000
|
|
REALS; 05568000
|
|
RETURN; 05569000
|
|
FILECONTROL(0); %REWIND 05570000
|
|
BEGIN SCAN; STOP END; 05571000
|
|
SUBROUTINE; 05572000
|
|
IOCOMMAND(1); %WRITE 05573000
|
|
FILECONTROL(7); %CLOSE 05573100
|
|
FILECONTROL(6); %LOCK 05573200
|
|
FILECONTROL(4); %PURGE 05573300
|
|
IFS; 05574000
|
|
FORMATER; 05575000
|
|
CHAIN; 05575100
|
|
MEMHANDLER(1) ; %FIXED 05576000
|
|
MEMHANDLER(2) ; %VARYING 05576100
|
|
MEMHANDLER(3) ; %AUXMEM FOR SUBPROGRAMS 05576200
|
|
MEMHANDLER(4) ; %RELEASE 05577000
|
|
IMPLICIT ; 05577100
|
|
END ELSE IF NEXT=EOF THEN GO XIT ELSE BEGIN NEXT~0; FLOG(16) END ; 05578000
|
|
LASTNEXT.[33:15]~TEMPNEXT ; 05578100
|
|
IF NOT ENDTOG THEN IF SPLINK=0 THEN SPLINK:=1; %112-05579000
|
|
ENDTOG:=FALSE; %112-05579100
|
|
IF LABL ! BLANKS THEN 05580000
|
|
BEGIN 05581000
|
|
IF DT ! 0 THEN 05582000
|
|
BEGIN 05583000
|
|
DOL1: IF LABL = DOLAB[TEST ~ DT] THEN 05584000
|
|
BEGIN 05585000
|
|
EMITB(DOTEST[DT], FALSE); 05586000
|
|
FIXB(DOTEST[DT].ADDR); 05587000
|
|
IF DT ~ DT-1 > 0 THEN GO TO DOL1; 05588000
|
|
END ELSE 05589000
|
|
WHILE TEST ~ TEST-1 > 0 DO 05590000
|
|
IF DOLAB[TEST] = LABL THEN FLAG(14); 05591000
|
|
END; 05592000
|
|
LABL ~ BLANKS; 05592100
|
|
END; 05593000
|
|
05594000
|
|
IF NEXT ! SEMI THEN 05595000
|
|
BEGIN 05596000
|
|
FLAG(117); 05597000
|
|
DO SCAN UNTIL NEXT=SEMI OR NEXT=EOF ; 05598000
|
|
END; 05599000
|
|
ERRORTOG ~ FALSE; 05600000
|
|
EOSTOG ~ TRUE; 05601000
|
|
XIT: 05602000
|
|
END STATEMENT; 05603000
|
|
BOOLEAN STREAM PROCEDURE FLAGLAST(BUFF,ERR) ; 05603010
|
|
BEGIN 05603020
|
|
LOCAL A; SI~ERR; 8(IF SC!" " THEN JUMP OUT;SI~SI+1;TALLY~TALLY+1);05603030
|
|
A~TALLY; SI~LOC A; SI~SI+7 ; 05603040
|
|
IF SC<"8" THEN 05603050
|
|
BEGIN TALLY~1; FLAGLAST~TALLY ; 05603060
|
|
DI~BUFF;DS~46 LIT"LAST SYNTAX ERROR OCCURRED AT SEQUENCE NUMBER ";05603070
|
|
DS~LIT"""; SI~ERR; DS~8 CHR; DS~LIT"""; 05603080
|
|
DS~32 LIT " "; %510-05603081
|
|
DS~32 LIT " "; %510-05603082
|
|
END 05603090
|
|
END FLAGLAST ; 05603100
|
|
INTEGER PROCEDURE FEELD(X); VALUE X; INTEGER X; 05603110
|
|
FEELD~IF X<10 THEN 1 ELSE IF X<100 THEN 2 ELSE IF X<1000 THEN 3 ELSE IF 05603120
|
|
X<10000 THEN 4 ELSE IF X<100000 THEN 5 ELSE IF X<1000000 THEN 6 ELSE 7; 05603130
|
|
FORMAT EOC1(/ "NUMBER OF SYNTAX ERRORS DETECTED = ",I*,".",X*, 05604000
|
|
"NUMBER OF SEQUENCE ERRORS DETECTED = ",I*,"."), 05605000
|
|
EOC2("PRT SIZE = ",I*,"; TOTAL SEGMENT SIZE = ",I*, 05606000
|
|
" WORDS; DISK SIZE = ",I*," SEGS; NO. PRGM. SEGS = ",I*, 05607000
|
|
"."), 05607010
|
|
EOC3("ESTIMATED CORE STORAGE REQUIREMENT = ",I*," WORDS;", 05608000
|
|
" COMPILATION TIME = ",I*," MIN, ",I*," SECS;", 05608010
|
|
" NO. CARDS = ",I*,"."), 05608020
|
|
EOC4("ESTIMATED CORE STORAGE REQUIREMENT = ",I*," WORDS;" 05608030
|
|
" COMPILATION TIME = ",I*," SECS; NO. CARDS = ",I*,"."), 05608040
|
|
EOC5("NUMBER OF TSS WARNINGS DETECTED = ",I*,".") ; 05608050
|
|
COMMENT MAIN DRIVER FOR FORTRAN COMPILER BEGINS HERE; 05609000
|
|
RTI ~ TIME(1); 05610000
|
|
INITIALIZATION; 05611000
|
|
DO STATEMENT UNTIL NEXT = EOF; 05612000
|
|
IF NOT ENDSEGTOG THEN IF SPLINK NEQ 0 %112-05612100
|
|
THEN BEGIN XTA:=BLANKS; FLAG(5); ENDS END; %112-05612200
|
|
WRAPUP; 05613000
|
|
POSTWRAPUP: 05613900
|
|
IF TIMETOG THEN IF FIRSTCALL THEN DATIME; 05614000
|
|
IF NOT FIRSTCALL THEN 05615000
|
|
BEGIN 05616000
|
|
WRITE(RITE,EOC1,FEELD(ERRORCT),ERRORCT,IF SEQERRCT=0 THEN 99 ELSE 05617000
|
|
5,FEELD(SEQERRCT-1),SEQERRCT-1) ; 05618000
|
|
IF WARNED AND NOT DCINPUT THEN WRITE(RITE,EOC5,FEELD(WARNCOUNT), 05618100
|
|
WARNCOUNT) ; 05618110
|
|
WRITE(RITE,EOC2,FEELD(PRTS),PRTS,FEELD(TSEGSZ),TSEGSZ,FEELD(DALOC-1),05619000
|
|
DALOC-1,FEELD(NXAVIL),NXAVIL) ; 05619010
|
|
IF C1~(TIME(1)-RTI)/60 > 59 THEN WRITE(RITE,EOC3,FEELD(64|ESTIMATE), 05619020
|
|
64|ESTIMATE,FEELD(C1 DIV 60),C1 DIV 60,FEELD(C1 MOD 60),C1 MOD 60, 05619030
|
|
FEELD(CARDCOUNT-1),CARDCOUNT-1) ELSE WRITE(RITE,EOC4,FEELD(ESTIMATE 05619040
|
|
|64),ESTIMATE|64,FEELD(C1),C1,FEELD(CARDCOUNT-1),CARDCOUNT-1) ; 05619045
|
|
IF ERRORCT>0 THEN IF FLAGLAST(ERRORBUFF,LASTERR) THEN WRITE(RITE,15, 05619050
|
|
ERRORBUFF[*]) ; 05619100
|
|
END ; 05619200
|
|
END INNER BLOCK; 05620000
|
|
END. 05621000 |