Professional Documents
Culture Documents
C
CALL INITST
CALL RAT4
CALL ENDST
END
SUBROUTINE BRKNXT(SP, LEXTYP, LABVAL, TOKEN)
INTEGER LABVAL(100), LEXTYP(100), SP, TOKEN
INTEGER I, N, ALLDIG, CTOI
INTEGER T, PTOKEN(100), GNBTOK
COMMON /CGOTO/ XFER
INTEGER XFER
N = 0
T = GNBTOK(PTOKEN, 100)
IF(.NOT.(ALLDIG(PTOKEN) .EQ. 1))GOTO 23000
I = 1
N = CTOI(PTOKEN, I) - 1
GOTO 23001
23000 CONTINUE
IF(.NOT.(T .NE. 59))GOTO 23002
CALL PBSTR(PTOKEN)
23002 CONTINUE
23001 CONTINUE
I = SP
23004 IF(.NOT.(I .GT. 0))GOTO 23006
IF(.NOT.(LEXTYP(I) .EQ. 10263 .OR. LEXTYP(I) .EQ. 10266 .OR. LEXTY
*P(I) .EQ. 10268 .OR. LEXTYP(I) .EQ. 10269))GOTO 23007
IF(.NOT.(N .GT. 0))GOTO 23009
N = N - 1
GOTO 23005
23009 CONTINUE
IF(.NOT.(TOKEN .EQ. 10264))GOTO 23011
CALL OUTGO(LABVAL(I)+1)
GOTO 23012
23011 CONTINUE
CALL OUTGO(LABVAL(I))
23012 CONTINUE
23010 CONTINUE
XFER = 1
RETURN
23007 CONTINUE
23005 I = I - 1
GOTO 23004
23006 CONTINUE
IF(.NOT.(TOKEN .EQ. 10264))GOTO 23013
CALL SYNERR(14HILLEGAL BREAK.)
GOTO 23014
23013 CONTINUE
CALL SYNERR(13HILLEGAL NEXT.)
23014 CONTINUE
RETURN
END
SUBROUTINE GETDEF(TOKEN, TOKSIZ, DEFN, DEFSIZ, FD)
INTEGER GTOK, NGETCH
INTEGER DEFSIZ, FD, I, NLPAR, TOKSIZ
INTEGER C, DEFN(2500), TOKEN(100), T, PTOKEN(100)
CALL SKPBLK(FD)
23015
23016
23017
23021
23024
23022
23023
23026
23019
23030
23032
23035
23037
23039
23041
23040
23038
23036
23033
GOTO 23032
23034 CONTINUE
GOTO 23029
23028 CONTINUE
CALL BADERR(19HGETDEF IS CONFUSED.)
23029 CONTINUE
23020 CONTINUE
DEFN(I-1) = 10002
RETURN
END
SUBROUTINE DOCODE(LAB)
INTEGER LABGEN
INTEGER LAB
INTEGER GNBTOK
INTEGER LEXSTR(100)
COMMON /CGOTO/ XFER
INTEGER XFER
INTEGER SDO(3)
DATA SDO(1)/100/,SDO(2)/111/,SDO(3)/10002/
XFER = 0
CALL OUTTAB
CALL OUTSTR(SDO)
CALL OUTCH(32)
LAB = LABGEN(2)
IF(.NOT.(GNBTOK(LEXSTR, 100) .EQ. 2))GOTO 23043
CALL OUTSTR(LEXSTR)
GOTO 23044
23043 CONTINUE
CALL PBSTR(LEXSTR)
CALL OUTNUM(LAB)
23044 CONTINUE
CALL OUTCH(32)
CALL EATUP
CALL OUTDON
RETURN
END
SUBROUTINE DOSTAT(LAB)
INTEGER LAB
CALL OUTCON(LAB)
CALL OUTCON(LAB+1)
RETURN
END
SUBROUTINE BADERR(MSG)
INTEGER MSG(100)
CALL SYNERR(MSG)
CALL ENDST
END
SUBROUTINE SYNERR(MSG)
INTEGER LC(20), MSG(100)
INTEGER ITOC
INTEGER I, JUNK
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
INTEGER IN(5)
INTEGER ERRMSG(15)
DATA IN(1)/32/,IN(2)/105/,IN(3)/110/,IN(4)/32/,IN(5)/10002/
DATA ERRMSG(1)/101/,ERRMSG(2)/114/,ERRMSG(3)/114/,ERRMSG(4)/111/,E
*RRMSG(5)/114/,ERRMSG(6)/32/,ERRMSG(7)/97/,ERRMSG(8)/116/,ERRMSG(9)
*/32/,ERRMSG(10)/108/,ERRMSG(11)/105/,ERRMSG(12)/110/,ERRMSG(13)/10
*1/,ERRMSG(14)/32/,ERRMSG(15)/10002/
CALL PUTLIN(ERRMSG, 3)
IF(.NOT.(LEVEL .GE. 1))GOTO 23045
I = LEVEL
GOTO 23046
23045 CONTINUE
I = 1
23046 CONTINUE
JUNK = ITOC (LINECT(I), LC, 20)
CALL PUTLIN(LC, 3)
I = FNAMP-1
23047 IF(.NOT.(I.GT.1))GOTO 23049
IF(.NOT.(FNAMES(I-1) .EQ. 10002))GOTO 23050
CALL PUTLIN(IN, 3)
CALL PUTLIN(FNAMES(I), 3)
GOTO 23049
23050 CONTINUE
23048 I=I-1
GOTO 23047
23049 CONTINUE
CALL PUTCH(58, 3)
CALL PUTCH(32, 3)
CALL REMARK (MSG)
RETURN
END
SUBROUTINE FORCOD(LAB)
INTEGER GETTOK, GNBTOK
INTEGER T, TOKEN(100)
INTEGER LENGTH, LABGEN
INTEGER I, J, LAB, NLPAR
COMMON /CFOR/ FORDEP, FORSTK(200)
INTEGER FORDEP
INTEGER FORSTK
INTEGER IFNOT(9)
DATA IFNOT(1)/105/,IFNOT(2)/102/,IFNOT(3)/40/,IFNOT(4)/46/,IFNOT(5
*)/110/,IFNOT(6)/111/,IFNOT(7)/116/,IFNOT(8)/46/,IFNOT(9)/10002/
LAB = LABGEN(3)
CALL OUTCON(0)
IF(.NOT.(GNBTOK(TOKEN, 100) .NE. 40))GOTO 23052
CALL SYNERR(19HMISSING LEFT PAREN.)
RETURN
23052 CONTINUE
IF(.NOT.(GNBTOK(TOKEN, 100) .NE. 59))GOTO 23054
CALL PBSTR(TOKEN)
CALL OUTTAB
CALL EATUP
CALL OUTDON
23054 CONTINUE
IF(.NOT.(GNBTOK(TOKEN, 100) .EQ. 59))GOTO 23056
23056
23058
23060
23062
23064
23063
23066
23068
23059
23070
23057
23072
23073
23074
23075
23077
CALL OUTCON(LAB)
GOTO 23057
CONTINUE
CALL PBSTR(TOKEN)
CALL OUTNUM(LAB)
CALL OUTTAB
CALL OUTSTR(IFNOT)
CALL OUTCH(40)
NLPAR = 0
IF(.NOT.(NLPAR .GE. 0))GOTO 23059
T = GETTOK(TOKEN, 100)
IF(.NOT.(T .EQ. 59))GOTO 23060
GOTO 23059
CONTINUE
IF(.NOT.(T .EQ. 40))GOTO 23062
NLPAR = NLPAR + 1
GOTO 23063
CONTINUE
IF(.NOT.(T .EQ. 41))GOTO 23064
NLPAR = NLPAR - 1
CONTINUE
CONTINUE
IF(.NOT.(T .EQ. 10003))GOTO 23066
CALL PBSTR(TOKEN)
RETURN
CONTINUE
IF(.NOT.(T .NE. 10 .AND. T .NE. 95))GOTO 23068
CALL OUTSTR(TOKEN)
CONTINUE
GOTO 23058
CONTINUE
CALL OUTCH(41)
CALL OUTCH(41)
CALL OUTGO(LAB+2)
IF(.NOT.(NLPAR .LT. 0))GOTO 23070
CALL SYNERR(19HINVALID FOR CLAUSE.)
CONTINUE
CONTINUE
FORDEP = FORDEP + 1
J = 1
I = 1
IF(.NOT.(I .LT. FORDEP))GOTO 23074
J = J + LENGTH(FORSTK(J)) + 1
I = I + 1
GOTO 23072
CONTINUE
FORSTK(J) = 10002
NLPAR = 0
T = GNBTOK(TOKEN, 100)
CALL PBSTR(TOKEN)
IF(.NOT.(NLPAR .GE. 0))GOTO 23076
T = GETTOK(TOKEN, 100)
IF(.NOT.(T .EQ. 40))GOTO 23077
NLPAR = NLPAR + 1
GOTO 23078
CONTINUE
IF(.NOT.(T .EQ. 41))GOTO 23079
NLPAR = NLPAR - 1
23079 CONTINUE
23078 CONTINUE
IF(.NOT.(T .EQ. 10003))GOTO 23081
CALL PBSTR(TOKEN)
GOTO 23076
23081 CONTINUE
IF(.NOT.(NLPAR .GE. 0 .AND. T .NE. 10 .AND. T .NE. 95))GOTO 23083
IF(.NOT.(J + LENGTH(TOKEN) .GE. 200))GOTO 23085
CALL BADERR(20HFOR CLAUSE TOO LONG.)
23085 CONTINUE
CALL SCOPY(TOKEN, 1, FORSTK, J)
J = J + LENGTH(TOKEN)
23083 CONTINUE
GOTO 23075
23076 CONTINUE
LAB = LAB + 1
RETURN
END
SUBROUTINE FORS(LAB)
INTEGER LENGTH
INTEGER I, J, LAB
COMMON /CFOR/ FORDEP, FORSTK(200)
INTEGER FORDEP
INTEGER FORSTK
COMMON /CGOTO/ XFER
INTEGER XFER
XFER = 0
CALL OUTNUM(LAB)
J = 1
I = 1
23087 IF(.NOT.(I .LT. FORDEP))GOTO 23089
J = J + LENGTH(FORSTK(J)) + 1
23088 I = I + 1
GOTO 23087
23089 CONTINUE
IF(.NOT.(LENGTH(FORSTK(J)) .GT. 0))GOTO 23090
CALL OUTTAB
CALL OUTSTR(FORSTK(J))
CALL OUTDON
23090 CONTINUE
CALL OUTGO(LAB-1)
CALL OUTCON(LAB+1)
FORDEP = FORDEP - 1
RETURN
END
SUBROUTINE BALPAR
INTEGER GETTOK, GNBTOK
INTEGER T, TOKEN(100)
INTEGER NLPAR
IF(.NOT.(GNBTOK(TOKEN, 100) .NE. 40))GOTO 23092
CALL SYNERR(19HMISSING LEFT PAREN.)
RETURN
23092 CONTINUE
CALL OUTSTR(TOKEN)
NLPAR = 1
23094 CONTINUE
T = GETTOK(TOKEN, 100)
IF(.NOT.(T.EQ.59 .OR. T.EQ.123 .OR. T.EQ.125 .OR. T.EQ.10003))GOTO
* 23097
CALL PBSTR(TOKEN)
GOTO 23096
23097 CONTINUE
IF(.NOT.(T .EQ. 10))GOTO 23099
TOKEN(1) = 10002
GOTO 23100
23099 CONTINUE
IF(.NOT.(T .EQ. 40))GOTO 23101
NLPAR = NLPAR + 1
GOTO 23102
23101 CONTINUE
IF(.NOT.(T .EQ. 41))GOTO 23103
NLPAR = NLPAR - 1
23103 CONTINUE
23102 CONTINUE
23100 CONTINUE
CALL OUTSTR(TOKEN)
23095 IF(.NOT.(NLPAR .LE. 0))GOTO 23094
23096 CONTINUE
IF(.NOT.(NLPAR .NE. 0))GOTO 23105
CALL SYNERR(33HMISSING PARENTHESIS IN CONDITION.)
23105 CONTINUE
RETURN
END
SUBROUTINE ELSEIF(LAB)
INTEGER LAB
CALL OUTGO(LAB+1)
CALL OUTCON(LAB)
RETURN
END
SUBROUTINE IFCODE(LAB)
INTEGER LABGEN
INTEGER LAB
COMMON /CGOTO/ XFER
INTEGER XFER
XFER = 0
LAB = LABGEN(2)
CALL IFGO(LAB)
RETURN
END
SUBROUTINE IFGO(LAB)
INTEGER LAB
INTEGER IFNOT(9)
DATA IFNOT(1)/105/,IFNOT(2)/102/,IFNOT(3)/40/,IFNOT(4)/46/,IFNOT(5
*)/110/,IFNOT(6)/111/,IFNOT(7)/116/,IFNOT(8)/46/,IFNOT(9)/10002/
CALL OUTTAB
CALL OUTSTR(IFNOT)
CALL BALPAR
CALL OUTCH(41)
CALL OUTGO(LAB)
RETURN
END
INTEGER FUNCTION GETTOK(TOKEN, TOKSIZ)
INTEGER EQUAL, OPEN, LENGTH
LINECT(LEVEL+1) = 1
IF(.NOT.(INFILE(LEVEL+1) .EQ. 10001))GOTO 23126
CALL SYNERR(19HCAN'T OPEN INCLUDE.)
GOTO 23127
23126 CONTINUE
LEVEL = LEVEL + 1
IF(.NOT.(FNAMP + I .LE. 90))GOTO 23128
CALL SCOPY(NAME, 1, FNAMES, FNAMP)
FNAMP = FNAMP + I
23128 CONTINUE
F = INFILE(LEVEL)
23127 CONTINUE
23125 CONTINUE
23111 GETTOK = DEFTOK(TOKEN, TOKSIZ, F)
GOTO 23110
23112 CONTINUE
IF(.NOT.(LEVEL .GT. 1))GOTO 23130
CALL CLOSE(INFILE(LEVEL))
FNAMP = FNAMP - 1
23132 IF(.NOT.(FNAMP .GT. 1))GOTO 23134
IF(.NOT.(FNAMES(FNAMP-1) .EQ. 10002))GOTO 23135
GOTO 23134
23135 CONTINUE
23133 FNAMP = FNAMP - 1
GOTO 23132
23134 CONTINUE
23130 CONTINUE
23108 LEVEL = LEVEL - 1
GOTO 23107
23109 CONTINUE
TOKEN(1) = 10003
TOKEN(2) = 10002
GETTOK = 10003
RETURN
END
INTEGER FUNCTION GNBTOK(TOKEN, TOKSIZ)
INTEGER TOKSIZ
INTEGER TOKEN(100), GETTOK
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
CALL SKPBLK(INFILE(LEVEL))
GNBTOK = GETTOK(TOKEN, TOKSIZ)
RETURN
END
INTEGER FUNCTION GTOK(LEXSTR, TOKSIZ, FD)
INTEGER NGETCH, TYPE
INTEGER FD, I, B, N, TOKSIZ, ITOC
INTEGER C, LEXSTR(100)
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
C = NGETCH(LEXSTR(1), FD)
IF(.NOT.(C .EQ. 32 .OR. C .EQ. 9))GOTO 23137
LEXSTR(1) = 32
23139 IF(.NOT.(C .EQ. 32 .OR. C .EQ. 9))GOTO 23140
C = NGETCH(C, FD)
GOTO 23139
23140 CONTINUE
IF(.NOT.(C .EQ. 35))GOTO 23141
23143 IF(.NOT.(NGETCH(C, FD) .NE. 10))GOTO 23144
GOTO 23143
23144 CONTINUE
23141 CONTINUE
IF(.NOT.(C .NE. 10))GOTO 23145
CALL PUTBAK(C)
GOTO 23146
23145 CONTINUE
LEXSTR(1) = 10
23146 CONTINUE
LEXSTR(2) = 10002
GTOK = LEXSTR(1)
RETURN
23137 CONTINUE
I = 1
GTOK = TYPE(C)
IF(.NOT.(GTOK .EQ. 1))GOTO 23147
I = 1
23149 IF(.NOT.(I .LT. TOKSIZ - 2))GOTO 23151
GTOK = TYPE(NGETCH(LEXSTR(I+1), FD))
IF(.NOT.(GTOK .NE. 1 .AND. GTOK .NE. 2 .AND. GTOK .NE. 95 .AND. GT
*OK .NE. 46))GOTO 23152
GOTO 23151
23152 CONTINUE
23150 I = I + 1
GOTO 23149
23151 CONTINUE
CALL PUTBAK(LEXSTR(I+1))
GTOK = 10100
GOTO 23148
23147 CONTINUE
IF(.NOT.(GTOK .EQ. 2))GOTO 23154
B = C - 48
I = 1
23156 IF(.NOT.(I .LT. TOKSIZ - 2))GOTO 23158
IF(.NOT.(TYPE(NGETCH(LEXSTR(I+1), FD)) .NE. 2))GOTO 23159
GOTO 23158
23159 CONTINUE
B = 10*B + LEXSTR(I+1) - 48
23157 I = I + 1
GOTO 23156
23158 CONTINUE
IF(.NOT.(LEXSTR(I+1) .EQ. 37 .AND. B .GE. 2 .AND. B .LE. 36))GOTO
*23161
N = 0
23163 CONTINUE
C = NGETCH(LEXSTR(1), FD)
IF(.NOT.(C .GE. 97 .AND. C .LE. 122))GOTO 23166
C = C - 97 + 57 + 1
GOTO 23167
23166 CONTINUE
IF(.NOT.(C .GE. 65 .AND. C .LE. 90))GOTO 23168
C = C - 65 + 57 + 1
23168 CONTINUE
23167 CONTINUE
IF(.NOT.(C .LT. 48 .OR. C .GE. 48 + B))GOTO 23170
GOTO 23165
23170 CONTINUE
23164 N = B*N + C - 48
GOTO 23163
23165 CONTINUE
CALL PUTBAK(LEXSTR(1))
I = ITOC(N, LEXSTR, TOKSIZ)
GOTO 23162
23161 CONTINUE
CALL PUTBAK(LEXSTR(I+1))
23162 CONTINUE
GTOK = 2
GOTO 23155
23154 CONTINUE
IF(.NOT.(C .EQ. 91))GOTO 23172
LEXSTR(1) = 123
GTOK = 123
GOTO 23173
23172 CONTINUE
IF(.NOT.(C .EQ. 93))GOTO 23174
LEXSTR(1) = 125
GTOK = 125
GOTO 23175
23174 CONTINUE
IF(.NOT.(C .EQ. 36))GOTO 23176
IF(.NOT.(NGETCH(LEXSTR(2), FD) .EQ. 40))GOTO 23178
I = 2
GTOK = 10279
GOTO 23179
23178 CONTINUE
IF(.NOT.(LEXSTR(2) .EQ. 41))GOTO 23180
I = 2
GTOK = 10280
GOTO 23181
23180 CONTINUE
CALL PUTBAK(LEXSTR(2))
23181 CONTINUE
23179 CONTINUE
GOTO 23177
23176 CONTINUE
IF(.NOT.(C .EQ. 39 .OR. C .EQ. 34))GOTO 23182
I = 2
23184 IF(.NOT.(NGETCH(LEXSTR(I), FD) .NE. LEXSTR(1)))GOTO 23186
IF(.NOT.(LEXSTR(I) .EQ. 95))GOTO 23187
IF(.NOT.(NGETCH(C, FD) .EQ. 10))GOTO 23189
INTEGER SREPT(7)
INTEGER SUNTIL(6)
INTEGER SRET(7)
INTEGER SSTR(7)
INTEGER SSWTCH(7)
INTEGER SCASE(5)
INTEGER SDEFLT(8)
DATA SIF(1)/105/,SIF(2)/102/,SIF(3)/10002/
DATA SELSE(1)/101/,SELSE(2)/108/,SELSE(3)/115/,SELSE(4)/101/,SELSE
*(5)/10002/
DATA SWHILE(1)/119/,SWHILE(2)/104/,SWHILE(3)/105/,SWHILE(4)/108/,S
*WHILE(5)/101/,SWHILE(6)/10002/
DATA SDO(1)/100/,SDO(2)/111/,SDO(3)/10002/
DATA SBREAK(1)/98/,SBREAK(2)/114/,SBREAK(3)/101/,SBREAK(4)/97/,SBR
*EAK(5)/107/,SBREAK(6)/10002/
DATA SNEXT(1)/110/,SNEXT(2)/101/,SNEXT(3)/120/,SNEXT(4)/116/,SNEXT
*(5)/10002/
DATA SFOR(1)/102/,SFOR(2)/111/,SFOR(3)/114/,SFOR(4)/10002/
DATA SREPT(1)/114/,SREPT(2)/101/,SREPT(3)/112/,SREPT(4)/101/,SREPT
*(5)/97/,SREPT(6)/116/,SREPT(7)/10002/
DATA SUNTIL(1)/117/,SUNTIL(2)/110/,SUNTIL(3)/116/,SUNTIL(4)/105/,S
*UNTIL(5)/108/,SUNTIL(6)/10002/
DATA SRET(1)/114/,SRET(2)/101/,SRET(3)/116/,SRET(4)/117/,SRET(5)/1
*14/,SRET(6)/110/,SRET(7)/10002/
DATA SSTR(1)/115/,SSTR(2)/116/,SSTR(3)/114/,SSTR(4)/105/,SSTR(5)/1
*10/,SSTR(6)/103/,SSTR(7)/10002/
DATA SSWTCH(1)/115/,SSWTCH(2)/119/,SSWTCH(3)/105/,SSWTCH(4)/116/,S
*SWTCH(5)/99/,SSWTCH(6)/104/,SSWTCH(7)/10002/
DATA SCASE(1)/99/,SCASE(2)/97/,SCASE(3)/115/,SCASE(4)/101/,SCASE(5
*)/10002/
DATA SDEFLT(1)/100/,SDEFLT(2)/101/,SDEFLT(3)/102/,SDEFLT(4)/97/,SD
*EFLT(5)/117/,SDEFLT(6)/108/,SDEFLT(7)/116/,SDEFLT(8)/10002/
LEX = GNBTOK(LEXSTR, 100)
23203 IF(.NOT.(LEX .EQ. 10))GOTO 23205
23204 LEX = GNBTOK(LEXSTR, 100)
GOTO 23203
23205 CONTINUE
IF(.NOT.(LEX .EQ. 10003 .OR. LEX .EQ. 59 .OR. LEX .EQ. 123 .OR. LE
*X .EQ. 125))GOTO 23206
RETURN
23206 CONTINUE
IF(.NOT.(LEX .EQ. 2))GOTO 23208
LEX = 10260
GOTO 23209
23208 CONTINUE
IF(.NOT.(LEX .EQ. 37))GOTO 23210
LEX = 10278
GOTO 23211
23210 CONTINUE
IF(.NOT.(EQUAL(LEXSTR, SIF) .EQ. 1))GOTO 23212
LEX = 10261
GOTO 23213
23212 CONTINUE
IF(.NOT.(EQUAL(LEXSTR, SELSE) .EQ. 1))GOTO 23214
LEX = 10262
GOTO 23215
23214 CONTINUE
23216
23218
23220
23222
23224
23226
23228
23230
23232
23234
23236
23238
23239
23237
23235
23233
23231
23229
23227
23225
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10263
GOTO 23217
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10266
GOTO 23219
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10264
GOTO 23221
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10265
GOTO 23223
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10268
GOTO 23225
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10269
GOTO 23227
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10270
GOTO 23229
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10271
GOTO 23231
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10274
GOTO 23233
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10275
GOTO 23235
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10276
GOTO 23237
CONTINUE
IF(.NOT.(EQUAL(LEXSTR,
LEX = 10277
GOTO 23239
CONTINUE
LEX = 10267
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
23223
23221
23219
23217
23215
23213
23211
23209
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
CONTINUE
RETURN
END
INTEGER FUNCTION NGETCH(C, FD)
INTEGER GETCH
INTEGER C
INTEGER FD
COMMON /CDEFIO/ BP, BUF(300)
INTEGER BP
INTEGER BUF
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
IF(.NOT.(BP .GT. 0))GOTO 23240
C = BUF(BP)
BP = BP - 1
GOTO 23241
23240 CONTINUE
C = GETCH(C, FD)
IF(.NOT.(RATLST .EQ. 1))GOTO 23242
CALL PUTCH(C, 3)
23242 CONTINUE
23241 CONTINUE
NGETCH = C
IF(.NOT.(C .EQ. 10))GOTO 23244
LINECT(LEVEL) = LINECT(LEVEL) + 1
23244 CONTINUE
RETURN
END
SUBROUTINE PBSTR(IN)
INTEGER IN(100)
INTEGER LENGTH
INTEGER I
I = LENGTH(IN)
23246 IF(.NOT.(I .GT. 0))GOTO 23248
CALL PUTBAK(IN(I))
23247 I = I - 1
GOTO 23246
23248 CONTINUE
RETURN
END
SUBROUTINE PUTBAK(C)
INTEGER C
COMMON /CDEFIO/ BP, BUF(300)
INTEGER BP
INTEGER BUF
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
BP = BP + 1
IF(.NOT.(BP .GT. 300))GOTO 23249
CALL BADERR(32HTOO MANY CHARACTERS PUSHED BACK.)
23249 CONTINUE
BUF(BP) = C
IF(.NOT.(C .EQ. 10))GOTO 23251
LINECT(LEVEL) = LINECT(LEVEL) - 1
23251 CONTINUE
RETURN
END
SUBROUTINE RELATE(TOKEN, LAST, FD)
INTEGER NGETCH
INTEGER TOKEN(100)
INTEGER LENGTH
INTEGER FD, LAST
IF(.NOT.(NGETCH(TOKEN(2), FD) .NE. 61))GOTO 23253
CALL PUTBAK(TOKEN(2))
TOKEN(3) = 116
GOTO 23254
23253 CONTINUE
TOKEN(3) = 101
23254 CONTINUE
TOKEN(4) = 46
TOKEN(5) = 10002
TOKEN(6) = 10002
IF(.NOT.(TOKEN(1) .EQ. 62))GOTO 23255
TOKEN(2) = 103
GOTO 23256
23255 CONTINUE
IF(.NOT.(TOKEN(1) .EQ. 60))GOTO 23257
TOKEN(2) = 108
GOTO 23258
23257 CONTINUE
IF(.NOT.(TOKEN(1) .EQ. 33 .OR. TOKEN(1) .EQ. 33 .OR. TOKEN(1) .EQ.
* 94 .OR. TOKEN(1) .EQ. 126))GOTO 23259
IF(.NOT.(TOKEN(2) .NE. 61))GOTO 23261
TOKEN(3) = 111
TOKEN(4) = 116
TOKEN(5) = 46
23261 CONTINUE
TOKEN(2) = 110
GOTO 23260
23259 CONTINUE
IF(.NOT.(TOKEN(1) .EQ. 61))GOTO 23263
IF(.NOT.(TOKEN(2) .NE. 61))GOTO 23265
TOKEN(2) = 10002
LAST = 1
RETURN
23265 CONTINUE
TOKEN(2) = 101
TOKEN(3) = 113
GOTO 23264
23263 CONTINUE
IF(.NOT.(TOKEN(1) .EQ. 38))GOTO 23267
TOKEN(2) = 97
TOKEN(3) = 110
TOKEN(4) = 100
TOKEN(5) = 46
GOTO 23268
23267 CONTINUE
IF(.NOT.(TOKEN(1) .EQ. 124))GOTO 23269
TOKEN(2) = 111
TOKEN(3) = 114
GOTO 23270
23269 CONTINUE
TOKEN(2) = 10002
23270 CONTINUE
23268 CONTINUE
23264 CONTINUE
23260 CONTINUE
23258 CONTINUE
23256 CONTINUE
TOKEN(1) = 46
LAST = LENGTH(TOKEN)
RETURN
END
SUBROUTINE LITRAL
INTEGER NGETCH
COMMON /COUTLN/ OUTP, OUTBUF(74)
INTEGER OUTP
INTEGER OUTBUF
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
IF(.NOT.(OUTP .GT. 0))GOTO 23271
CALL OUTDON
23271 CONTINUE
OUTP = 1
23273 IF(.NOT.(NGETCH(OUTBUF(OUTP), INFILE(LEVEL)) .NE. 10))GOTO 23275
23274 OUTP = OUTP + 1
GOTO 23273
23275 CONTINUE
OUTP = OUTP - 1
CALL OUTDON
RETURN
END
INTEGER FUNCTION DEFTOK(TOKEN, TOKSIZ, FD)
INTEGER TOKEN(100)
INTEGER TOKSIZ, FD
INTEGER GTOK
23295 CONTINUE
23294 CONTINUE
PLEV(CP) = 0
23288 CONTINUE
23286 CONTINUE
23282 CONTINUE
GOTO 23280
23279 CONTINUE
IF(.NOT.(T .EQ. 10279))GOTO 23297
NLB = 1
23299 CONTINUE
T = GTOK(TOKEN, TOKSIZ, FD)
IF(.NOT.(T .EQ. 10279))GOTO 23302
NLB = NLB + 1
GOTO 23303
23302 CONTINUE
IF(.NOT.(T .EQ. 10280))GOTO 23304
NLB = NLB - 1
IF(.NOT.(NLB .EQ. 0))GOTO 23306
GOTO 23301
23306 CONTINUE
GOTO 23305
23304 CONTINUE
IF(.NOT.(T .EQ. 10003))GOTO 23308
CALL BADERR(14HEOF IN STRING.)
23308 CONTINUE
23305 CONTINUE
23303 CONTINUE
CALL PUTTOK(TOKEN)
23300 GOTO 23299
23301 CONTINUE
GOTO 23298
23297 CONTINUE
IF(.NOT.(CP .EQ. 0))GOTO 23310
GOTO 23278
23310 CONTINUE
IF(.NOT.(T .EQ. 40))GOTO 23312
IF(.NOT.(PLEV(CP) .GT. 0))GOTO 23314
CALL PUTTOK(TOKEN)
23314 CONTINUE
PLEV(CP) = PLEV(CP) + 1
GOTO 23313
23312 CONTINUE
IF(.NOT.(T .EQ. 41))GOTO 23316
PLEV(CP) = PLEV(CP) - 1
IF(.NOT.(PLEV(CP) .GT. 0))GOTO 23318
CALL PUTTOK(TOKEN)
GOTO 23319
23318 CONTINUE
CALL PUTCHR(10002)
CALL EVALR(ARGSTK, CALLST(CP), AP-1)
AP = CALLST(CP)
EP = ARGSTK(AP)
CP = CP - 1
23319 CONTINUE
GOTO 23317
23316 CONTINUE
23320
23321
23317
23313
23311
23298
23280
23277
23278
23322
23324
23326
23328
23330
23331
23329
23327
23325
GOTO 23342
23344 CONTINUE
23340 CONTINUE
RETURN
END
SUBROUTINE EVALR(ARGSTK, I, J)
INTEGER INDEX, LENGTH
INTEGER ARGNO, ARGSTK(100), I, J, K, M, N, T, TD
COMMON /CMACRO/ CP, EP, EVALST(500)
INTEGER CP
INTEGER EP
INTEGER EVALST
INTEGER DIGITS(11)
DATA DIGITS(1) /48/
DATA DIGITS(2) /49/
DATA DIGITS(3) /50/
DATA DIGITS(4) /51/
DATA DIGITS(5) /52/
DATA DIGITS(6) /53/
DATA DIGITS(7) /54/
DATA DIGITS(8) /55/
DATA DIGITS(9) /56/
DATA DIGITS(10) /57/
DATA DIGITS(11) /10002/
T = ARGSTK(I)
TD = EVALST(T)
IF(.NOT.(TD .EQ. 210))GOTO 23345
CALL DOMAC(ARGSTK, I, J)
GOTO 23346
23345 CONTINUE
IF(.NOT.(TD .EQ. 212))GOTO 23347
CALL DOINCR(ARGSTK, I, J)
GOTO 23348
23347 CONTINUE
IF(.NOT.(TD .EQ. 213))GOTO 23349
CALL DOSUB(ARGSTK, I, J)
GOTO 23350
23349 CONTINUE
IF(.NOT.(TD .EQ. 211))GOTO 23351
CALL DOIF(ARGSTK, I, J)
GOTO 23352
23351 CONTINUE
IF(.NOT.(TD .EQ. 214))GOTO 23353
CALL DOARTH(ARGSTK, I, J)
GOTO 23354
23353 CONTINUE
K = T+LENGTH(EVALST(T))-1
23355 IF(.NOT.(K .GT. T))GOTO 23357
IF(.NOT.(EVALST(K-1) .NE. 36))GOTO 23358
CALL PUTBAK(EVALST(K))
GOTO 23359
23358 CONTINUE
ARGNO = INDEX(DIGITS, EVALST(K)) - 1
IF(.NOT.(ARGNO .GE. 0 .AND. ARGNO .LT. J-I))GOTO 23360
N = I + ARGNO + 1
M = ARGSTK(N)
CALL PBSTR(EVALST(M))
23360 CONTINUE
K = K - 1
23359 CONTINUE
23356 K = K - 1
GOTO 23355
23357 CONTINUE
IF(.NOT.(K .EQ. T))GOTO 23362
CALL PUTBAK(EVALST(K))
23362 CONTINUE
23354 CONTINUE
23352 CONTINUE
23350 CONTINUE
23348 CONTINUE
23346 CONTINUE
RETURN
END
INTEGER FUNCTION IFPARM(STRNG)
INTEGER STRNG(100), C
INTEGER I, INDEX, TYPE
C = STRNG(1)
IF(.NOT.(C .EQ. 212 .OR. C .EQ. 213 .OR. C .EQ. 211 .OR. C .EQ. 21
*4 .OR. C .EQ. 210))GOTO 23364
IFPARM = 1
GOTO 23365
23364 CONTINUE
IFPARM = 0
I=1
23366 IF(.NOT.(INDEX(STRNG(I), 36) .GT. 0))GOTO 23368
I = I + INDEX(STRNG(I), 36)
IF(.NOT.(TYPE(STRNG(I)) .EQ. 2))GOTO 23369
IF(.NOT.(TYPE(STRNG(I+1)) .NE. 2))GOTO 23371
IFPARM = 1
GOTO 23368
23371 CONTINUE
23369 CONTINUE
23367 GOTO 23366
23368 CONTINUE
23365 CONTINUE
RETURN
END
SUBROUTINE PBNUM(N)
INTEGER MOD
INTEGER M, N, NUM
INTEGER DIGITS(11)
DATA DIGITS(1) /48/
DATA DIGITS(2) /49/
DATA DIGITS(3) /50/
DATA DIGITS(4) /51/
DATA DIGITS(5) /52/
DATA DIGITS(6) /53/
DATA DIGITS(7) /54/
DATA DIGITS(8) /55/
DATA DIGITS(9) /56/
DATA DIGITS(10) /57/
DATA DIGITS(11) /10002/
NUM = N
23373 CONTINUE
23374
23375
23376
23378
23380
23381
23382
23383
M = MOD(NUM, 10)
CALL PUTBAK(DIGITS(M+1))
NUM = NUM / 10
IF(.NOT.(NUM .EQ. 0))GOTO 23373
CONTINUE
RETURN
END
INTEGER FUNCTION PUSH(EP, ARGSTK, AP)
INTEGER AP, ARGSTK(100), EP
IF(.NOT.(AP .GT. 100))GOTO 23376
CALL BADERR(19HARG STACK OVERFLOW.)
CONTINUE
ARGSTK(AP) = EP
PUSH = AP + 1
RETURN
END
SUBROUTINE PUTCHR(C)
INTEGER C
COMMON /CMACRO/ CP, EP, EVALST(500)
INTEGER CP
INTEGER EP
INTEGER EVALST
IF(.NOT.(EP .GT. 500))GOTO 23378
CALL BADERR(26HEVALUATION STACK OVERFLOW.)
CONTINUE
EVALST(EP) = C
EP = EP + 1
RETURN
END
SUBROUTINE PUTTOK(STR)
INTEGER STR(100)
INTEGER I
I = 1
IF(.NOT.(STR(I) .NE. 10002))GOTO 23382
CALL PUTCHR(STR(I))
I = I + 1
GOTO 23380
CONTINUE
RETURN
END
SUBROUTINE DOMAC(ARGSTK, I, J)
INTEGER A2, A3, ARGSTK(100), I, J
COMMON /CMACRO/ CP, EP, EVALST(500)
INTEGER CP
INTEGER EP
INTEGER EVALST
IF(.NOT.(J - I .GT. 2))GOTO 23383
A2 = ARGSTK(I+2)
A3 = ARGSTK(I+3)
CALL INSTAL(EVALST(A2), EVALST(A3))
CONTINUE
RETURN
END
SUBROUTINE RAT4
INTEGER GETARG, OPEN
INTEGER BUF(30)
INTEGER I, N
23402 CONTINUE
RETURN
END
SUBROUTINE EATUP
INTEGER GETTOK
INTEGER PTOKEN(100), T, TOKEN(100)
INTEGER NLPAR
NLPAR = 0
23404 CONTINUE
T = GETTOK(TOKEN, 100)
IF(.NOT.(T .EQ. 59 .OR. T .EQ. 10))GOTO 23407
GOTO 23406
23407 CONTINUE
IF(.NOT.(T .EQ. 125 .OR. T .EQ. 123))GOTO 23409
CALL PBSTR(TOKEN)
GOTO 23406
23409 CONTINUE
IF(.NOT.(T .EQ. 10003))GOTO 23411
CALL SYNERR(15HUNEXPECTED EOF.)
CALL PBSTR(TOKEN)
GOTO 23406
23411 CONTINUE
IF(.NOT.(T .EQ. 44 .OR. T .EQ. 43 .OR. T .EQ. 45 .OR. T .EQ. 42 .O
*R. T .EQ. 40 .OR. T .EQ. 38 .OR. T .EQ. 124 .OR. T .EQ. 33 .OR. T
*.EQ. 126 .OR. T .EQ. 33 .OR. T .EQ. 94 .OR. T .EQ. 61 .OR. T .EQ.
*95))GOTO 23413
23415 IF(.NOT.(GETTOK(PTOKEN, 100) .EQ. 10))GOTO 23416
GOTO 23415
23416 CONTINUE
CALL PBSTR(PTOKEN)
IF(.NOT.(T .EQ. 95))GOTO 23417
TOKEN(1) = 10002
23417 CONTINUE
23413 CONTINUE
IF(.NOT.(T .EQ. 40))GOTO 23419
NLPAR = NLPAR + 1
GOTO 23420
23419 CONTINUE
IF(.NOT.(T .EQ. 41))GOTO 23421
NLPAR = NLPAR - 1
23421 CONTINUE
23420 CONTINUE
CALL OUTSTR(TOKEN)
23405 IF(.NOT.(NLPAR .LT. 0))GOTO 23404
23406 CONTINUE
IF(.NOT.(NLPAR .NE. 0))GOTO 23423
CALL SYNERR(23HUNBALANCED PARENTHESES.)
23423 CONTINUE
RETURN
END
SUBROUTINE LABELC(LEXSTR)
INTEGER LEXSTR(100)
INTEGER LENGTH
COMMON /CGOTO/ XFER
INTEGER XFER
XFER = 0
IF(.NOT.(LENGTH(LEXSTR) .EQ. 5))GOTO 23425
23436 CONTINUE
CALL OUTTAB
CALL OUTSTR(CONTIN)
CALL OUTDON
RETURN
END
SUBROUTINE OUTDON
INTEGER ALLBLK
COMMON /COUTLN/ OUTP, OUTBUF(74)
INTEGER OUTP
INTEGER OUTBUF
OUTBUF(OUTP+1) = 10
OUTBUF(OUTP+2) = 10002
IF(.NOT.(ALLBLK(OUTBUF) .EQ. 0))GOTO 23438
CALL PUTLIN(OUTBUF, 2)
23438 CONTINUE
OUTP = 0
RETURN
END
SUBROUTINE OUTGO(N)
INTEGER N
COMMON /CGOTO/ XFER
INTEGER XFER
INTEGER GOTO(6)
DATA GOTO(1)/103/,GOTO(2)/111/,GOTO(3)/116/,GOTO(4)/111/,GOTO(5)/3
*2/,GOTO(6)/10002/
IF(.NOT.(XFER .EQ. 1))GOTO 23440
RETURN
23440 CONTINUE
CALL OUTTAB
CALL OUTSTR(GOTO)
CALL OUTNUM(N)
CALL OUTDON
RETURN
END
SUBROUTINE OUTNUM(N)
INTEGER CHARS(20)
INTEGER I, M
M = IABS(N)
I = 0
23442 CONTINUE
I = I + 1
CHARS(I) = MOD(M, 10) + 48
M = M / 10
23443 IF(.NOT.(M .EQ. 0 .OR. I .GE. 20))GOTO 23442
23444 CONTINUE
IF(.NOT.(N .LT. 0))GOTO 23445
CALL OUTCH(45)
23445 CONTINUE
23447 IF(.NOT.(I .GT. 0))GOTO 23449
CALL OUTCH(CHARS(I))
23448 I = I - 1
GOTO 23447
23449 CONTINUE
RETURN
END
SUBROUTINE OUTSTR(STR)
23450
23455
23453
23457
23458
23459
23460
23461
23462
23454
23451
23452
23463
23464
23465
23468
23466
23467
INTEGER C, STR(100)
INTEGER I, J
I = 1
IF(.NOT.(STR(I) .NE. 10002))GOTO 23452
C = STR(I)
IF(.NOT.(C .NE. 39 .AND. C .NE. 34))GOTO 23453
IF(.NOT.(C .GE. 97 .AND. C .LE. 122))GOTO 23455
C = C - 97 + 65
CONTINUE
CALL OUTCH(C)
GOTO 23454
CONTINUE
I = I + 1
J = I
IF(.NOT.(STR(J) .NE. C))GOTO 23459
J = J + 1
GOTO 23457
CONTINUE
CALL OUTNUM(J-I)
CALL OUTCH(72)
IF(.NOT.(I .LT. J))GOTO 23462
CALL OUTCH(STR(I))
I = I + 1
GOTO 23460
CONTINUE
CONTINUE
I = I + 1
GOTO 23450
CONTINUE
RETURN
END
SUBROUTINE OUTTAB
COMMON /COUTLN/ OUTP, OUTBUF(74)
INTEGER OUTP
INTEGER OUTBUF
IF(.NOT.(OUTP .LT. 6))GOTO 23464
CALL OUTCH(32)
GOTO 23463
CONTINUE
RETURN
END
INTEGER FUNCTION ALLBLK(BUF)
INTEGER BUF(100)
INTEGER I
ALLBLK = 1
I=1
IF(.NOT.(BUF(I) .NE. 10 .AND. BUF(I) .NE. 10002))GOTO 23467
IF(.NOT.(BUF(I) .NE. 32))GOTO 23468
ALLBLK = 0
GOTO 23467
CONTINUE
I=I+1
GOTO 23465
CONTINUE
RETURN
END
SUBROUTINE INITKW
END
SUBROUTINE INIT
INTEGER I
COMMON /COUTLN/ OUTP, OUTBUF(74)
INTEGER OUTP
INTEGER OUTBUF
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
COMMON /CDEFIO/ BP, BUF(300)
INTEGER BP
INTEGER BUF
COMMON /CFOR/ FORDEP, FORSTK(200)
INTEGER FORDEP
INTEGER FORSTK
COMMON /CFNAME/ FCNAME(30)
INTEGER FCNAME
COMMON /CLABEL/ LABEL
INTEGER LABEL
COMMON /CSBUF/ SBP, SBUF(500)
INTEGER SBP
INTEGER SBUF
COMMON /CSWTCH/ SWTOP, SWLAST, SWSTAK(1000)
INTEGER SWTOP
INTEGER SWLAST
INTEGER SWSTAK
OUTP = 0
LEVEL = 1
LINECT(1) = 1
SBP = 1
FNAMP = 2
FNAMES(1) = 10002
BP = 0
FORDEP = 0
FCNAME(1) = 10002
SWTOP = 0
SWLAST = 1
RETURN
END
SUBROUTINE PARSE
INTEGER LEXSTR(100)
INTEGER LEX
INTEGER LAB, LABVAL(100), LEXTYP(100), SP, TOKEN, I
COMMON /CGOTO/ XFER
INTEGER XFER
COMMON /CFOR/ FORDEP, FORSTK(200)
INTEGER FORDEP
INTEGER FORSTK
COMMON /CFNAME/ FCNAME(30)
INTEGER FCNAME
COMMON /CLINE/ RATLST, LEVEL, LINECT(3), INFILE(3), FNAMP, FNAMES(
* 90)
23470
23473
23475
23477
23479
23481
23483
23487
23490
23488
23489
INTEGER RATLST
INTEGER LEVEL
INTEGER LINECT
INTEGER INFILE
INTEGER FNAMP
INTEGER FNAMES
COMMON /CSBUF/ SBP, SBUF(500)
INTEGER SBP
INTEGER SBUF
COMMON /CLABEL/ LABEL
INTEGER LABEL
COMMON /CDEFIO/ BP, BUF(300)
INTEGER BP
INTEGER BUF
COMMON /COUTLN/ OUTP, OUTBUF(74)
INTEGER OUTP
INTEGER OUTBUF
CALL INIT
SP = 1
LEXTYP(1) = 10003
TOKEN = LEX(LEXSTR)
IF(.NOT.(TOKEN .NE. 10003))GOTO 23472
IF(.NOT.(TOKEN .EQ. 10261))GOTO 23473
CALL IFCODE(LAB)
GOTO 23474
CONTINUE
IF(.NOT.(TOKEN .EQ. 10266))GOTO 23475
CALL DOCODE(LAB)
GOTO 23476
CONTINUE
IF(.NOT.(TOKEN .EQ. 10263))GOTO 23477
CALL WHILEC(LAB)
GOTO 23478
CONTINUE
IF(.NOT.(TOKEN .EQ. 10268))GOTO 23479
CALL FORCOD(LAB)
GOTO 23480
CONTINUE
IF(.NOT.(TOKEN .EQ. 10269))GOTO 23481
CALL REPCOD(LAB)
GOTO 23482
CONTINUE
IF(.NOT.(TOKEN .EQ. 10275))GOTO 23483
CALL SWCODE(LAB)
GOTO 23484
CONTINUE
IF(.NOT.(TOKEN .EQ. 10276 .OR. TOKEN .EQ. 10277))GOTO 23485
I = SP
IF(.NOT.(I .GT. 0))GOTO 23489
IF(.NOT.(LEXTYP(I) .EQ. 10275))GOTO 23490
GOTO 23489
CONTINUE
I = I - 1
GOTO 23487
CONTINUE
IF(.NOT.(I .EQ. 0))GOTO 23492
CALL SYNERR(24HILLEGAL CASE OR DEFAULT.)
GOTO 23493
23492 CONTINUE
CALL CASCOD(LABVAL(I), TOKEN)
23493 CONTINUE
GOTO 23486
23485 CONTINUE
IF(.NOT.(TOKEN .EQ. 10260))GOTO 23494
CALL LABELC(LEXSTR)
GOTO 23495
23494 CONTINUE
IF(.NOT.(TOKEN .EQ. 10262))GOTO 23496
IF(.NOT.(LEXTYP(SP) .EQ. 10261))GOTO 23498
CALL ELSEIF(LABVAL(SP))
GOTO 23499
23498 CONTINUE
CALL SYNERR(13HILLEGAL ELSE.)
23499 CONTINUE
GOTO 23497
23496 CONTINUE
IF(.NOT.(TOKEN .EQ. 10278))GOTO 23500
CALL LITRAL
23500 CONTINUE
23497 CONTINUE
23495 CONTINUE
23486 CONTINUE
23484 CONTINUE
23482 CONTINUE
23480 CONTINUE
23478 CONTINUE
23476 CONTINUE
23474 CONTINUE
IF(.NOT.(TOKEN .EQ. 10261 .OR. TOKEN .EQ. 10262 .OR. TOKEN .EQ. 10
*263 .OR. TOKEN .EQ. 10268 .OR. TOKEN .EQ. 10269 .OR. TOKEN .EQ. 10
*275 .OR. TOKEN .EQ. 10266 .OR. TOKEN .EQ. 10260 .OR. TOKEN .EQ. 12
*3))GOTO 23502
SP = SP + 1
IF(.NOT.(SP .GT. 100))GOTO 23504
CALL BADERR(25HSTACK OVERFLOW IN PARSER.)
23504 CONTINUE
LEXTYP(SP) = TOKEN
LABVAL(SP) = LAB
GOTO 23503
23502 CONTINUE
IF(.NOT.(TOKEN .NE. 10276 .AND. TOKEN .NE. 10277))GOTO 23506
IF(.NOT.(TOKEN .EQ. 125))GOTO 23508
IF(.NOT.(LEXTYP(SP) .EQ. 123))GOTO 23510
SP = SP - 1
GOTO 23511
23510 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10275))GOTO 23512
CALL SWEND(LABVAL(SP))
SP = SP - 1
GOTO 23513
23512 CONTINUE
CALL SYNERR(20HILLEGAL RIGHT BRACE.)
23513 CONTINUE
23511 CONTINUE
GOTO 23509
23508 CONTINUE
IF(.NOT.(TOKEN .EQ. 10267))GOTO 23514
CALL OTHERC(LEXSTR)
GOTO 23515
23514 CONTINUE
IF(.NOT.(TOKEN .EQ. 10264 .OR. TOKEN .EQ. 10265))GOTO 23516
CALL BRKNXT(SP, LEXTYP, LABVAL, TOKEN)
GOTO 23517
23516 CONTINUE
IF(.NOT.(TOKEN .EQ. 10271))GOTO 23518
CALL RETCOD
GOTO 23519
23518 CONTINUE
IF(.NOT.(TOKEN .EQ. 10274))GOTO 23520
CALL STRDCL
23520 CONTINUE
23519 CONTINUE
23517 CONTINUE
23515 CONTINUE
23509 CONTINUE
TOKEN = LEX(LEXSTR)
CALL PBSTR(LEXSTR)
CALL UNSTAK(SP, LEXTYP, LABVAL, TOKEN)
23506 CONTINUE
23503 CONTINUE
23471 TOKEN = LEX(LEXSTR)
GOTO 23470
23472 CONTINUE
IF(.NOT.(SP .NE. 1))GOTO 23522
CALL SYNERR(15HUNEXPECTED EOF.)
23522 CONTINUE
RETURN
END
SUBROUTINE UNSTAK(SP, LEXTYP, LABVAL, TOKEN)
INTEGER LABVAL(100), LEXTYP(100), SP, TOKEN
23524 IF(.NOT.(SP .GT. 1))GOTO 23526
IF(.NOT.(LEXTYP(SP) .EQ. 123 .OR. LEXTYP(SP) .EQ. 10275))GOTO 2352
*7
GOTO 23526
23527 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10261 .AND. TOKEN .EQ. 10262))GOTO 23529
GOTO 23526
23529 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10261))GOTO 23531
CALL OUTCON(LABVAL(SP))
GOTO 23532
23531 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10262))GOTO 23533
IF(.NOT.(SP .GT. 2))GOTO 23535
SP = SP - 1
23535 CONTINUE
CALL OUTCON(LABVAL(SP)+1)
GOTO 23534
23533 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10266))GOTO 23537
CALL DOSTAT(LABVAL(SP))
GOTO 23538
23537 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10263))GOTO 23539
CALL WHILES(LABVAL(SP))
GOTO 23540
23539 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10268))GOTO 23541
CALL FORS(LABVAL(SP))
GOTO 23542
23541 CONTINUE
IF(.NOT.(LEXTYP(SP) .EQ. 10269))GOTO 23543
CALL UNTILS(LABVAL(SP), TOKEN)
23543 CONTINUE
23542 CONTINUE
23540 CONTINUE
23538 CONTINUE
23534 CONTINUE
23532 CONTINUE
23525 SP = SP - 1
GOTO 23524
23526 CONTINUE
RETURN
END
SUBROUTINE ULSTAL(NAME, DEFN)
INTEGER NAME(100), DEFN(100)
CALL INSTAL(NAME, DEFN)
CALL UPPER(NAME)
CALL INSTAL(NAME, DEFN)
RETURN
END
SUBROUTINE REPCOD(LAB)
INTEGER LABGEN
INTEGER LAB
CALL OUTCON(0)
LAB = LABGEN(3)
CALL OUTCON(LAB)
LAB = LAB + 1
RETURN
END
SUBROUTINE UNTILS(LAB, TOKEN)
INTEGER PTOKEN(100)
INTEGER LEX
INTEGER JUNK, LAB, TOKEN
COMMON /CGOTO/ XFER
INTEGER XFER
XFER = 0
CALL OUTNUM(LAB)
IF(.NOT.(TOKEN .EQ. 10270))GOTO 23545
JUNK = LEX(PTOKEN)
CALL IFGO(LAB-1)
GOTO 23546
23545 CONTINUE
CALL OUTGO(LAB-1)
23546 CONTINUE
CALL OUTCON(LAB+1)
RETURN
END
SUBROUTINE RETCOD
INTEGER TOKEN(100), GNBTOK, T
COMMON /CFNAME/ FCNAME(30)
INTEGER FCNAME
COMMON /CGOTO/ XFER
INTEGER XFER
INTEGER SRET(7)
DATA SRET(1)/114/,SRET(2)/101/,SRET(3)/116/,SRET(4)/117/,SRET(5)/1
*14/,SRET(6)/110/,SRET(7)/10002/
T = GNBTOK(TOKEN, 100)
IF(.NOT.(T .NE. 10 .AND. T .NE. 59 .AND. T .NE. 125))GOTO 23547
CALL PBSTR(TOKEN)
CALL OUTTAB
CALL OUTSTR(FCNAME)
CALL OUTCH(61)
CALL EATUP
CALL OUTDON
GOTO 23548
23547 CONTINUE
IF(.NOT.(T .EQ. 125))GOTO 23549
CALL PBSTR(TOKEN)
23549 CONTINUE
23548 CONTINUE
CALL OUTTAB
CALL OUTSTR(SRET)
CALL OUTDON
XFER = 1
RETURN
END
SUBROUTINE STRDCL
INTEGER T, TOKEN(100), GNBTOK
INTEGER I, J, K, N, LEN
INTEGER LENGTH, CTOI, LEX
INTEGER DCHAR(100)
COMMON /CSBUF/ SBP, SBUF(500)
INTEGER SBP
INTEGER SBUF
INTEGER CHAR(11)
INTEGER DAT(6)
INTEGER EOSS(5)
DATA CHAR(1)/99/,CHAR(2)/104/,CHAR(3)/97/,CHAR(4)/114/,CHAR(5)/97/
*,CHAR(6)/99/,CHAR(7)/116/,CHAR(8)/101/,CHAR(9)/114/,CHAR(10)/47/,C
*HAR(11)/10002/
DATA DAT(1)/100/,DAT(2)/97/,DAT(3)/116/,DAT(4)/97/,DAT(5)/32/,DAT(
*6)/10002/
DATA EOSS(1)/69/,EOSS(2)/79/,EOSS(3)/83/,EOSS(4)/47/,EOSS(5)/10002
*/
T = GNBTOK(TOKEN, 100)
IF(.NOT.(T .NE. 10100))GOTO 23551
CALL SYNERR(21HMISSING STRING TOKEN.)
23551 CONTINUE
CALL OUTTAB
CALL PBSTR(CHAR)
23553 CONTINUE
T = GNBTOK(DCHAR, 100)
IF(.NOT.(T .EQ. 47))GOTO 23556
GOTO 23555
23556 CONTINUE
CALL OUTSTR (DCHAR)
23554 GOTO 23553
23555 CONTINUE
CALL OUTCH(32)
CALL OUTSTR(TOKEN)
CALL ADDSTR(TOKEN, SBUF, SBP, 500)
CALL ADDCHR(10002, SBUF, SBP, 500)
IF(.NOT.(GNBTOK(TOKEN, 100) .NE. 40))GOTO 23558
LEN = LENGTH(TOKEN) + 1
IF(.NOT.(TOKEN(1) .EQ. 39 .OR. TOKEN(1) .EQ. 34))GOTO 23560
LEN = LEN - 2
23560 CONTINUE
GOTO 23559
23558 CONTINUE
T = GNBTOK(TOKEN, 100)
I = 1
LEN = CTOI(TOKEN, I)
IF(.NOT.(TOKEN(I) .NE. 10002))GOTO 23562
CALL SYNERR(20HINVALID STRING SIZE.)
23562 CONTINUE
IF(.NOT.(GNBTOK(TOKEN, 100) .NE. 41))GOTO 23564
CALL SYNERR(20HMISSING RIGHT PAREN.)
GOTO 23565
23564 CONTINUE
T = GNBTOK(TOKEN, 100)
23565 CONTINUE
23559 CONTINUE
CALL OUTCH(40)
CALL OUTNUM(LEN)
CALL OUTCH(41)
CALL OUTDON
IF(.NOT.(TOKEN(1) .EQ. 39 .OR. TOKEN(1) .EQ. 34))GOTO 23566
LEN = LENGTH(TOKEN)
TOKEN(LEN) = 10002
CALL ADDSTR(TOKEN(2), SBUF, SBP, 500)
GOTO 23567
23566 CONTINUE
CALL ADDSTR(TOKEN, SBUF, SBP, 500)
23567 CONTINUE
CALL ADDCHR(10002, SBUF, SBP, 500)
T = LEX(TOKEN)
CALL PBSTR(TOKEN)
IF(.NOT.(T .NE. 10274))GOTO 23568
I = 1
23570 IF(.NOT.(I .LT. SBP))GOTO 23572
CALL OUTTAB
CALL OUTSTR(DAT)
K = 1
J = I + LENGTH(SBUF(I)) + 1
23573 CONTINUE
IF(.NOT.(K .GT. 1))GOTO 23576
CALL OUTCH(44)
23576 CONTINUE
CALL OUTSTR(SBUF(I))
CALL OUTCH(40)
CALL OUTNUM(K)
23578
23574
23575
23580
23581
23582
23571
23572
23568
23583
23585
23587
23590
23588
23589
CALL OUTCH(41)
CALL OUTCH(47)
IF(.NOT.(SBUF(J) .EQ. 10002))GOTO 23578
GOTO 23575
CONTINUE
N = SBUF(J)
CALL OUTNUM (N)
CALL OUTCH(47)
K = K + 1
J = J + 1
GOTO 23573
CONTINUE
CALL PBSTR(EOSS)
CONTINUE
T = GNBTOK(TOKEN, 100)
CALL OUTSTR(TOKEN)
IF(.NOT.(T .EQ. 47))GOTO 23580
CONTINUE
CALL OUTDON
I = J + 1
GOTO 23570
CONTINUE
SBP = 1
CONTINUE
RETURN
END
SUBROUTINE ADDCHR(C, BUF, BP, MAXSIZ)
INTEGER BP, MAXSIZ
INTEGER C, BUF(100)
IF(.NOT.(BP .GT. MAXSIZ))GOTO 23583
CALL BADERR(16HBUFFER OVERFLOW.)
CONTINUE
BUF(BP) = C
BP = BP + 1
RETURN
END
INTEGER FUNCTION ALLDIG(STR)
INTEGER TYPE
INTEGER STR(100)
INTEGER I
ALLDIG = 0
IF(.NOT.(STR(1) .EQ. 10002))GOTO 23585
RETURN
CONTINUE
I = 1
IF(.NOT.(STR(I) .NE. 10002))GOTO 23589
IF(.NOT.(TYPE(STR(I)) .NE. 2))GOTO 23590
RETURN
CONTINUE
I = I + 1
GOTO 23587
CONTINUE
ALLDIG = 1
RETURN
END
INTEGER FUNCTION LABGEN(N)
INTEGER N
23592
23593
23594
23595
23599
23601
23603
23605
23607
23610
23612
23611
23608 I = I + 3
GOTO 23607
23609 CONTINUE
IF(.NOT.(I .LT. SWLAST .AND. UB .GE. SWSTAK(I)))GOTO 23614
CALL SYNERR(21HDUPLICATE CASE LABEL.)
23614 CONTINUE
J = SWLAST
23616 IF(.NOT.(J .GT. I))GOTO 23618
SWSTAK(J+2) = SWSTAK(J-1)
23617 J = J - 1
GOTO 23616
23618 CONTINUE
SWSTAK(I) = LB
SWSTAK(I+1) = UB
SWSTAK(I+2) = L
SWSTAK(SWTOP+1) = SWSTAK(SWTOP+1) + 1
SWLAST = SWLAST + 3
IF(.NOT.(T .EQ. 58))GOTO 23619
GOTO 23600
23619 CONTINUE
IF(.NOT.(T .NE. 44))GOTO 23621
CALL SYNERR(20HILLEGAL CASE SYNTAX.)
23621 CONTINUE
23620 CONTINUE
GOTO 23599
23600 CONTINUE
GOTO 23598
23597 CONTINUE
T = GNBTOK(TOK, 100)
IF(.NOT.(SWSTAK(SWTOP+2) .NE. 0))GOTO 23623
CALL ERROR(38HMULTIPLE DEFAULTS IN SWITCH STATEMENT.)
GOTO 23624
23623 CONTINUE
SWSTAK(SWTOP+2) = L
23624 CONTINUE
23598 CONTINUE
IF(.NOT.(T .EQ. 10003))GOTO 23625
CALL SYNERR(15HUNEXPECTED EOF.)
GOTO 23626
23625 CONTINUE
IF(.NOT.(T .NE. 58))GOTO 23627
CALL ERROR(39HMISSING COLON IN CASE OR DEFAULT LABEL.)
23627 CONTINUE
23626 CONTINUE
XFER = 0
CALL OUTCON(L)
RETURN
END
INTEGER FUNCTION CASLAB(N, T)
INTEGER N, T
INTEGER TOK(100)
INTEGER I, S
INTEGER GNBTOK, CTOI
T = GNBTOK(TOK, 100)
23629 IF(.NOT.(T .EQ. 10))GOTO 23630
T = GNBTOK(TOK, 100)
GOTO 23629
23630 CONTINUE
IF(.NOT.(T .EQ. 10003))GOTO 23631
CASLAB=(T)
RETURN
23631 CONTINUE
IF(.NOT.(T .EQ. 45))GOTO 23633
S = -1
GOTO 23634
23633 CONTINUE
S = +1
23634 CONTINUE
IF(.NOT.(T .EQ. 45 .OR. T .EQ. 43))GOTO 23635
T = GNBTOK(TOK, 100)
23635 CONTINUE
IF(.NOT.(T .NE. 2))GOTO 23637
CALL SYNERR(19HINVALID CASE LABEL.)
N = 0
GOTO 23638
23637 CONTINUE
I = 1
N = S*CTOI(TOK, I)
23638 CONTINUE
T = GNBTOK(TOK, 100)
23639 IF(.NOT.(T .EQ. 10))GOTO 23640
T = GNBTOK(TOK, 100)
GOTO 23639
23640 CONTINUE
RETURN
END
SUBROUTINE SWCODE(LAB)
INTEGER LAB
INTEGER TOK(100)
INTEGER LABGEN, GNBTOK
COMMON /CSWTCH/ SWTOP, SWLAST, SWSTAK(1000)
INTEGER SWTOP
INTEGER SWLAST
INTEGER SWSTAK
COMMON /CGOTO/ XFER
INTEGER XFER
LAB = LABGEN(2)
IF(.NOT.(SWLAST + 3 .GT. 1000))GOTO 23641
CALL BADERR(22HSWITCH TABLE OVERFLOW.)
23641 CONTINUE
SWSTAK(SWLAST) = SWTOP
SWSTAK(SWLAST+1) = 0
SWSTAK(SWLAST+2) = 0
SWTOP = SWLAST
SWLAST = SWLAST + 3
XFER = 0
CALL OUTTAB
CALL SWVAR(LAB)
CALL OUTCH(61)
CALL BALPAR
CALL UTDON
CALL OUTGO(LAB)
XFER = 1
23643 IF(.NOT.(GNBTOK(TOK, 100) .EQ. 10))GOTO 23644
GOTO 23643
23644 CONTINUE
IF(.NOT.(TOK(1) .NE. 123))GOTO 23645
CALL SYNERR(39HMISSING LEFT BRACE IN SWITCH STATEMENT.)
CALL PBSTR(TOK)
23645 CONTINUE
RETURN
END
SUBROUTINE SWEND(LAB)
INTEGER LAB
INTEGER LB, UB, N, I, J
COMMON /CSWTCH/ SWTOP, SWLAST, SWSTAK(1000)
INTEGER SWTOP
INTEGER SWLAST
INTEGER SWSTAK
COMMON /CGOTO/ XFER
INTEGER XFER
INTEGER SIF(4)
INTEGER SLT(10)
INTEGER SGT(5)
INTEGER SGOTO(6)
INTEGER SEQ(5)
INTEGER SGE(5)
INTEGER SLE(5)
INTEGER SAND(6)
DATA SIF(1)/105/,SIF(2)/102/,SIF(3)/40/,SIF(4)/10002/
DATA SLT(1)/46/,SLT(2)/108/,SLT(3)/116/,SLT(4)/46/,SLT(5)/49/,SLT(
*6)/46/,SLT(7)/111/,SLT(8)/114/,SLT(9)/46/,SLT(10)/10002/
DATA SGT(1)/46/,SGT(2)/103/,SGT(3)/116/,SGT(4)/46/,SGT(5)/10002/
DATA SGOTO(1)/103/,SGOTO(2)/111/,SGOTO(3)/116/,SGOTO(4)/111/,SGOTO
*(5)/40/,SGOTO(6)/10002/
DATA SEQ(1)/46/,SEQ(2)/101/,SEQ(3)/113/,SEQ(4)/46/,SEQ(5)/10002/
DATA SGE(1)/46/,SGE(2)/103/,SGE(3)/101/,SGE(4)/46/,SGE(5)/10002/
DATA SLE(1)/46/,SLE(2)/108/,SLE(3)/101/,SLE(4)/46/,SLE(5)/10002/
DATA SAND(1)/46/,SAND(2)/97/,SAND(3)/110/,SAND(4)/100/,SAND(5)/46/
*,SAND(6)/10002/
LB = SWSTAK(SWTOP+3)
UB = SWSTAK(SWLAST-2)
N = SWSTAK(SWTOP+1)
CALL OUTGO(LAB+1)
IF(.NOT.(SWSTAK(SWTOP+2) .EQ. 0))GOTO 23647
SWSTAK(SWTOP+2) = LAB + 1
23647 CONTINUE
XFER = 0
CALL OUTCON(LAB)
IF(.NOT.(N .GE. 3 .AND. UB - LB + 1 .LT. 2*N))GOTO 23649
IF(.NOT.(LB .NE. 1))GOTO 23651
CALL OUTTAB
CALL SWVAR(LAB)
CALL OUTCH(61)
CALL SWVAR(LAB)
IF(.NOT.(LB .LT. 1))GOTO 23653
CALL OUTCH(43)
23653 CONTINUE
CALL OUTNUM(-LB + 1)
CALL OUTDON
23651 CONTINUE
23655
23658
23659
23660
23661
23662
23663
23664
23656
23657
23649
23668
23671
23672
CALL OUTTAB
CALL OUTSTR(SIF)
CALL SWVAR(LAB)
CALL OUTSTR(SLT)
CALL SWVAR(LAB)
CALL OUTSTR(SGT)
CALL OUTNUM(UB - LB + 1)
CALL OUTCH(41)
CALL OUTGO(SWSTAK(SWTOP+2))
CALL OUTTAB
CALL OUTSTR(SGOTO)
J = LB
I = SWTOP + 3
IF(.NOT.(I .LT. SWLAST))GOTO 23657
IF(.NOT.(J .LT. SWSTAK(I)))GOTO 23660
CALL OUTNUM(SWSTAK(SWTOP+2))
CALL OUTCH(44)
J = J + 1
GOTO 23658
CONTINUE
J = SWSTAK(I+1) - SWSTAK(I)
IF(.NOT.(J .GE. 0))GOTO 23663
CALL OUTNUM(SWSTAK(I+2))
J = J - 1
GOTO 23661
CONTINUE
J = SWSTAK(I+1) + 1
IF(.NOT.(I .LT. SWLAST - 3))GOTO 23664
CALL OUTCH(44)
CONTINUE
I = I + 3
GOTO 23655
CONTINUE
CALL OUTCH(41)
CALL OUTCH(44)
CALL SWVAR(LAB)
CALL OUTDON
GOTO 23650
CONTINUE
IF(.NOT.(N .GT. 0))GOTO 23666
I = SWTOP + 3
IF(.NOT.(I .LT. SWLAST))GOTO 23670
CALL OUTTAB
CALL OUTSTR(SIF)
CALL SWVAR(LAB)
IF(.NOT.(SWSTAK(I) .EQ. SWSTAK(I+1)))GOTO 23671
CALL OUTSTR(SEQ)
CALL OUTNUM(SWSTAK(I))
GOTO 23672
CONTINUE
CALL OUTSTR(SGE)
CALL OUTNUM(SWSTAK(I))
CALL OUTSTR(SAND)
CALL SWVAR(LAB)
CALL OUTSTR(SLE)
CALL OUTNUM(SWSTAK(I+1))
CONTINUE
23669
23670
23673
23666
23650
23000
23001
23002
CALL OUTCH(41)
CALL OUTGO(SWSTAK(I+2))
I = I + 3
GOTO 23668
CONTINUE
IF(.NOT.(LAB + 1 .NE. SWSTAK(SWTOP+2)))GOTO 23673
CALL OUTGO(SWSTAK(SWTOP+2))
CONTINUE
CONTINUE
CONTINUE
CALL OUTCON(LAB+1)
SWLAST = SWTOP
SWTOP = SWSTAK(SWTOP)
RETURN
END
SUBROUTINE SWVAR(LAB)
INTEGER LAB
CALL OUTCH(73)
CALL OUTNUM(LAB)
RETURN
END
SUBROUTINE WHILEC(LAB)
INTEGER LABGEN
INTEGER LAB
CALL OUTCON(0)
LAB = LABGEN(2)
CALL OUTNUM(LAB)
CALL IFGO(LAB+1)
RETURN
END
SUBROUTINE WHILES(LAB)
INTEGER LAB
CALL OUTGO(LAB)
CALL OUTCON(LAB+1)
RETURN
END
INTEGER FUNCTION ADDSET (C, STR, J, MAXSIZ)
INTEGER J, MAXSIZ
INTEGER C, STR(MAXSIZ)
IF(.NOT.(J .GT. MAXSIZ))GOTO 23000
ADDSET = 0
GOTO 23001
CONTINUE
STR(J) = C
J = J + 1
ADDSET = 1
CONTINUE
RETURN
END
INTEGER FUNCTION ADDSTR(S, STR, J, MAXSIZ)
INTEGER S(100), STR(100)
INTEGER J, MAXSIZ
INTEGER I, ADDSET
I = 1
IF(.NOT.(S(I) .NE. 10002))GOTO 23004
IF(.NOT.(ADDSET(S(I), STR, J, MAXSIZ) .EQ. 0))GOTO 23005
ADDSTR = 0
RETURN
23005 CONTINUE
23003 I = I + 1
GOTO 23002
23004 CONTINUE
ADDSTR = 1
RETURN
END
SUBROUTINE CANT (FILE)
INTEGER FILE (100)
INTEGER BUF(15)
DATA BUF(1), BUF(2), BUF(3), BUF(4), BUF(5), BUF(6), BUF(7), BUF(8
*), BUF(9), BUF(10), BUF(11), BUF(12), BUF(13), BUF(14), BUF(15) /5
*8, 32, 32, 99, 97, 110, 39, 116, 32, 111, 112, 101, 110, 10, 10002
*/
CALL PUTLIN (FILE, 3)
CALL PUTLIN (BUF, 3)
CALL ENDST
END
INTEGER FUNCTION CLOWER(C)
INTEGER C, K
IF(.NOT.(C .GE. 65 .AND. C .LE. 90))GOTO 23007
K = 97 - 65
CLOWER = C + K
GOTO 23008
23007 CONTINUE
CLOWER = C
23008 CONTINUE
RETURN
END
SUBROUTINE CONCAT (BUF1, BUF2, OUTSTR)
INTEGER BUF1(100), BUF2(100), OUTSTR(100)
INTEGER LEN, I, J
INTEGER LENGTH
CALL SCOPY(BUF1, 1, OUTSTR, 1)
LEN = LENGTH(OUTSTR)
J = 1
I=LEN+1
23009 IF(.NOT.(BUF2(J) .NE. 10002))GOTO 23011
CALL SCOPY(BUF2, J, OUTSTR, I)
J = J + 1
23010 I=I+1
GOTO 23009
23011 CONTINUE
OUTSTR(I) = 10002
RETURN
END
INTEGER FUNCTION CTOI(IN, I)
INTEGER IN(100)
INTEGER INDEX
INTEGER D, I
INTEGER DIGITS(11)
DATA DIGITS(1) /48/
DATA DIGITS(2) /49/
DATA DIGITS(3) /50/
DATA DIGITS(4) /51/
DATA DIGITS(5) /52/
23012
23013
23014
23017
23015
23016
23019
23020
23021
23024
23022
23023
GOTO 23027
23026 CONTINUE
IF(.NOT.(ARRAY(I+1) .EQ. 10002))GOTO 23028
ESC = 64
GOTO 23029
23028 CONTINUE
I = I + 1
IF(.NOT.(ARRAY(I) .EQ. 110 .OR. ARRAY(I) .EQ. 78))GOTO 23030
ESC = 10
GOTO 23031
23030 CONTINUE
IF(.NOT.(ARRAY(I) .EQ. 116 .OR. ARRAY(I) .EQ. 84))GOTO 23032
ESC = 9
GOTO 23033
23032 CONTINUE
ESC = ARRAY(I)
23033 CONTINUE
23031 CONTINUE
23029 CONTINUE
23027 CONTINUE
RETURN
END
SUBROUTINE FCOPY (IN, OUT)
INTEGER C
INTEGER GETCH
INTEGER IN, OUT
23034 IF(.NOT.(GETCH(C,IN) .NE. 10003))GOTO 23035
CALL PUTCH(C, OUT)
GOTO 23034
23035 CONTINUE
RETURN
END
SUBROUTINE FOLD (TOKEN)
INTEGER TOKEN(100), CLOWER
INTEGER I
I=1
23036 IF(.NOT.(TOKEN(I) .NE. 10002))GOTO 23038
TOKEN(I) = CLOWER(TOKEN(I))
23037 I=I+1
GOTO 23036
23038 CONTINUE
RETURN
END
INTEGER FUNCTION GETC(C)
INTEGER C
INTEGER GETCH
GETC = GETCH(C, 1)
RETURN
END
INTEGER FUNCTION GETWRD (IN, I, OUT)
INTEGER IN(100), OUT(100)
INTEGER I, J
23039 IF(.NOT.(IN(I) .EQ. 32 .OR. IN(I) .EQ. 9))GOTO 23040
I = I + 1
GOTO 23039
23040 CONTINUE
J = 1
23041 IF(.NOT.(IN(I) .NE. 10002 .AND. IN(I) .NE. 32 .AND. IN(I) .NE. 9 .
*AND. IN(I) .NE. 10))GOTO 23042
OUT(J) = IN(I)
I = I + 1
J = J + 1
GOTO 23041
23042 CONTINUE
OUT(J) = 10002
GETWRD = J - 1
RETURN
END
INTEGER FUNCTION INDEX(STR, C)
INTEGER C, STR(100)
INDEX = 1
23043 IF(.NOT.(STR(INDEX) .NE. 10002))GOTO 23045
IF(.NOT.(STR(INDEX) .EQ. C))GOTO 23046
RETURN
23046 CONTINUE
23044 INDEX = INDEX + 1
GOTO 23043
23045 CONTINUE
INDEX = 0
RETURN
END
INTEGER FUNCTION ITOC(INT, STR, SIZE)
INTEGER MOD
INTEGER D, I, INT, INTVAL, J, K, SIZE
INTEGER STR(SIZE)
INTEGER DIGITS(11)
DATA DIGITS(1) /48/
DATA DIGITS(2) /49/
DATA DIGITS(3) /50/
DATA DIGITS(4) /51/
DATA DIGITS(5) /52/
DATA DIGITS(6) /53/
DATA DIGITS(7) /54/
DATA DIGITS(8) /55/
DATA DIGITS(9) /56/
DATA DIGITS(10) /57/
DATA DIGITS(11) /10002/
INTVAL = IABS(INT)
STR(1) = 10002
I = 1
23048 CONTINUE
I = I + 1
D = MOD(INTVAL, 10)
STR(I) = DIGITS(D+1)
INTVAL = INTVAL / 10
23049 IF(.NOT.(INTVAL .EQ. 0 .OR. I .GE. SIZE))GOTO 23048
23050 CONTINUE
IF(.NOT.(INT .LT. 0 .AND. I .LT. SIZE))GOTO 23051
I = I + 1
STR(I) = 45
23051 CONTINUE
ITOC = I - 1
J = 1
23053 IF(.NOT.(J .LT. I))GOTO 23055
23054
23055
23056
23057
23058
23059
23060
23061
23062
23063
23064
K = STR(I)
STR(I) = STR(J)
STR(J) = K
I = I - 1
J = J + 1
GOTO 23053
CONTINUE
RETURN
END
INTEGER FUNCTION LENGTH (STR)
INTEGER STR(100)
LENGTH=0
IF(.NOT.(STR(LENGTH+1) .NE. 10002))GOTO 23058
LENGTH = LENGTH + 1
GOTO 23056
CONTINUE
RETURN
END
SUBROUTINE LOWER (TOKEN)
INTEGER TOKEN(100)
CALL FOLD(TOKEN)
RETURN
END
SUBROUTINE PUTC (C)
INTEGER C
CALL PUTCH (C, 2)
RETURN
END
SUBROUTINE PUTDEC(N,W)
INTEGER CHARS(120)
INTEGER ITOC
INTEGER I,N,ND,W
ND = ITOC(N,CHARS,20)
I = ND+1
IF(.NOT.(I .LE. W))GOTO 23061
CALL PUTC(32)
I = I+1
GOTO 23059
CONTINUE
I = 1
IF(.NOT.(I .LE. ND))GOTO 23064
CALL PUTC(CHARS(I))
I = I+1
GOTO 23062
CONTINUE
RETURN
END
SUBROUTINE PUTINT(N, W, FD)
INTEGER CHARS(20)
INTEGER ITOC
INTEGER N, W, FD, JUNK
JUNK = ITOC(N,CHARS,20)
CALL PUTSTR(CHARS, W, FD)
RETURN
END
SUBROUTINE PUTSTR(STR, W, FD)
INTEGER STR(100)
23065
23066
23067
23068
23069
23070
23071
23072
23073
23074
23075
23076
23077
23078
23079
23080
23081
INTEGER W, FD
INTEGER LEN, I
INTEGER LENGTH
LEN = LENGTH(STR)
I = LEN+1
IF(.NOT.(I .LE. W))GOTO 23067
CALL PUTCH(32, FD)
I=I+1
GOTO 23065
CONTINUE
I = 1
IF(.NOT.(I .LE. LEN))GOTO 23070
CALL PUTCH(STR(I), FD)
I=I+1
GOTO 23068
CONTINUE
I = (-W) - LEN
IF(.NOT.(I .GT. 0))GOTO 23073
CALL PUTCH(32, FD)
I = I - 1
GOTO 23071
CONTINUE
RETURN
END
SUBROUTINE SCOPY(FROM, I, TO, J)
INTEGER FROM(100), TO(100)
INTEGER I, J, K1, K2
K2 = J
K1 = I
IF(.NOT.(FROM(K1) .NE. 10002))GOTO 23076
TO(K2) = FROM(K1)
K2 = K2 + 1
K1 = K1 + 1
GOTO 23074
CONTINUE
TO(K2) = 10002
RETURN
END
SUBROUTINE SKIPBL(LIN, I)
INTEGER LIN(100)
INTEGER I
IF(.NOT.(LIN(I) .EQ. 32 .OR. LIN(I) .EQ. 9))GOTO 23078
I = I + 1
GOTO 23077
CONTINUE
RETURN
END
SUBROUTINE STCOPY(IN, I, OUT, J)
INTEGER IN(100), OUT(100)
INTEGER I, J, K
K=I
IF(.NOT.(IN(K) .NE. 10002))GOTO 23081
OUT(J) = IN(K)
J = J + 1
K=K+1
GOTO 23079
CONTINUE
RETURN
END
INTEGER FUNCTION STRCMP (STR1, STR2)
INTEGER STR1(100), STR2(100)
INTEGER I
I=1
23082 IF(.NOT.(STR1(I) .EQ. STR2(I)))GOTO 23084
IF(.NOT.(STR1(I) .EQ. 10002))GOTO 23085
STRCMP = 0
RETURN
23085 CONTINUE
23083 I=I+1
GOTO 23082
23084 CONTINUE
IF(.NOT.(STR1(I) .EQ. 10002))GOTO 23087
STRCMP = -1
GOTO 23088
23087 CONTINUE
IF(.NOT.(STR2(I) .EQ. 10002))GOTO 23089
STRCMP = + 1
GOTO 23090
23089 CONTINUE
IF(.NOT.(STR1(I) .LT. STR2(I)))GOTO 23091
STRCMP = -1
GOTO 23092
23091 CONTINUE
STRCMP = +1
23092 CONTINUE
23090 CONTINUE
23088 CONTINUE
RETURN
END
INTEGER FUNCTION TYPE (C)
INTEGER C
IF(.NOT.( (C .GE. 97 .AND. C .LE. 122) .OR. ( C .GE. 65 .AND. C .L
*E. 90)))GOTO 23093
TYPE = 1
GOTO 23094
23093 CONTINUE
IF(.NOT.(C .GE. 48 .AND. C .LE. 57))GOTO 23095
TYPE = 2
GOTO 23096
23095 CONTINUE
TYPE = C
23096 CONTINUE
23094 CONTINUE
RETURN
END
SUBROUTINE UPPER (TOKEN)
INTEGER TOKEN(100), CUPPER
INTEGER I
I=1
23097 IF(.NOT.(TOKEN(I) .NE. 10002))GOTO 23099
TOKEN(I) = CUPPER(TOKEN(I))
23098 I=I+1
GOTO 23097
23099 CONTINUE
RETURN
END
SUBROUTINE INSTAL(NAME, DEFN)
INTEGER NAME(100), DEFN(100)
INTEGER NLEN, DLEN, LENGTH, C, HSHFCN
COMMON /CLOOK/ LASTP, LASTT, HSHPTR(37), TABPTR(2,625), TABLE(6250
*)
INTEGER LASTP
INTEGER LASTT
INTEGER HSHPTR
INTEGER TABPTR
INTEGER TABLE
NLEN = LENGTH(NAME) + 1
DLEN = LENGTH(DEFN) + 1
IF(.NOT.(LASTT + NLEN + DLEN .GT. 6250 .OR. LASTP .GE. 625))GOTO 2
*3100
CALL PUTLIN(NAME, 3)
CALL REMARK(24H : TOO MANY DEFINITIONS.)
GOTO 23101
23100 CONTINUE
LASTP = LASTP + 1
TABPTR(2, LASTP) = LASTT + 1
C = HSHFCN(NAME, 37)
TABPTR(1, LASTP) = HSHPTR(C)
HSHPTR(C) = LASTP
CALL SCOPY(NAME, 1, TABLE, LASTT + 1)
CALL SCOPY(DEFN, 1, TABLE, LASTT + NLEN + 1)
LASTT = LASTT + NLEN + DLEN
23101 CONTINUE
RETURN
END
INTEGER FUNCTION LOOKUP(NAME, DEFN)
INTEGER NAME(100), DEFN(100)
INTEGER C, HSHFCN, I, J, K
COMMON /CLOOK/ LASTP, LASTT, HSHPTR(37), TABPTR(2,625), TABLE(6250
*)
INTEGER LASTP
INTEGER LASTT
INTEGER HSHPTR
INTEGER TABPTR
INTEGER TABLE
C = HSHFCN(NAME, 37)
LOOKUP = 0
I=HSHPTR(C)
23102 IF(.NOT.(I .GT. 0))GOTO 23104
J = TABPTR(2, I)
K=1
23105 IF(.NOT.(NAME(K) .EQ. TABLE(J) .AND. NAME(K) .NE. 10002))GOTO 2310
*7
J = J + 1
23106 K=K+1
GOTO 23105
23107 CONTINUE
IF(.NOT.(NAME(K) .EQ. TABLE(J)))GOTO 23108
CALL SCOPY(TABLE, J+1, DEFN, 1)
LOOKUP = 1
GOTO 23104
23108 CONTINUE
23103 I=TABPTR(1,I)
GOTO 23102
23104 CONTINUE
RETURN
END
INTEGER FUNCTION HSHFCN(STRNG, N)
INTEGER STRNG(100)
INTEGER N, I, LENGTH, I1, I2
I = LENGTH(STRNG)
I = MAX0(I, 1)
I1 = STRNG(1)
I2 = STRNG(I)
HSHFCN = MOD(I1+I2, N) + 1
RETURN
END
SUBROUTINE TBINIT
COMMON /CLOOK/ LASTP, LASTT, HSHPTR(37), TABPTR(2,625), TABLE(6250
*)
INTEGER LASTP
INTEGER LASTT
INTEGER HSHPTR
INTEGER TABPTR
INTEGER TABLE
INTEGER I
LASTP = 0
LASTT = 0
I=1
23110 IF(.NOT.(I.LE.37))GOTO 23112
HSHPTR(I) = 0
23111 I=I+1
GOTO 23110
23112 CONTINUE
RETURN
END
INTEGER FUNCTION OPEN(NAME, ACCESS)
INTEGER NAME(100)
INTEGER ACCESS
OPEN = 10001
RETURN
END
SUBROUTINE CLOSE(FD)
INTEGER FD
RETURN
END
SUBROUTINE INITST
RETURN
END
SUBROUTINE ENDST
STOP
END
INTEGER FUNCTION GETARG(N, BUF, MAXSIZ)
INTEGER N, MAXSIZ
INTEGER BUF(100)
GETARG = 10003
RETURN
END