1  COM F$[7],B$[7],L9,L8
2  COM A$[72],A6,A7,A8,A9
3  COM W,W$[64],W0,Y
4  COM M[500],M,M0,M9,Y[150]
5  REM COBOL, HP 36845B, 6/74
10  FILES *,*,*
20  ASSIGN F$,1,A5
22  ASSIGN "$COSC4",2,A5
24  READ #2,1;C$,D$,G$
26  READ #2,10;S1
27  MAT  READ #2;S[S1,5]
30  ASSIGN "$COSCR",2,A5
40  ASSIGN "$COSCR",3,A5
42  IF  END #2 THEN 600
52  DIM D$[10],G$[25]
54  LET D$="0123456789"
60  DIM X$[72],N$[30],M$[72]
62  DIM P$[30]
64  DIM V$[72]
70  DIM S[40,5],P[20,2]
73  DIM C$[72]
80  DIM F[10],G[3]
82  IF  END #1 THEN 500
90  READ #3,1
94  GOSUB 9650
96  PRINT #3;"TALLY",Y, END 
97  LET Y[Y]=320060.
98  LET Y[Y+1]=13500
99  LET Y=Y+2
100  READ #1,1
110  FOR I=1 TO L8-1
120  READ #1;N,A$
130  NEXT I
140  PRINT #2,5; END 
160  LET E8=W1=W2=W3=0
170  MAT F=ZER
180  LET W2=0
220  MAT  READ P[20,2]
300  LET S=1
302  GOSUB 9000
304  GOSUB 9100
306  LET W3=-1
310  GOTO 1000
400  IF E8=1 THEN 510
402  FOR V1=0 TO W0-1
404  FOR V2=V1*16+15 TO V1*16+7 STEP -1
406  IF W$[V2,V2] <> " " THEN 412
408  NEXT V2
410  GOTO 422
412  LET X$=W$[V1*16+7,V2]
414  GOSUB 9700
416  IF I0=0 THEN 470
418  IF INT(Y[I0]/100000.) <> 3 THEN 480
420  LET Y[V1*8+2]=INT((Y[I0+1]-INT(Y[I0+1]/2000)*2000)/3)
422  NEXT V1
430  CHAIN "$COPDV1"
470  LET E9=13
472  GOTO 482
480  LET E9=14
482  GOSUB 4000
484  GOTO 510
500  PRINT "*UNEXPECTED END OF FILE REACHED AFTER LINE";N
510  CHAIN B$,L9
600  REM ENTER HERE IF WE RUN OUT OF COSCR
610  PRINT "*THE SCRATCH FILE 'COSCR' IS NOT LONG ENOUGH TO COMPILE"
620  PRINT " YOUR PROGRAM. TYPE 'KIL-COSCR' FOLLOWED BY 'OPE-COSCR,N'"
630  PRINT " WHERE N IS A GREATER NUMBER OF LINKS THAN ARE CURRENTLY"
640  PRINT " AVAILABLE. THEN GET COMON AND TRY AGAIN."
670  CHAIN "$COMON",9999
900  DEF FNA()=-INT(/64)*64
910  DEF FNB()=-INT(/2)*2
920  DEF FNC()=-INT(/10)*10
922  DEF FND()=-INT(/3)*3
924  DEF FNE()=-INT(/1.E+06)*1.E+06
1000  REM MAIN TABLE DRIVEN ROUTINE
1010  GOSUB 5000
1020  IF S8=0 THEN 1100
1030  IF S[S,2]=0 THEN 1045
1040  GOSUB 7000
1045  IF S[S,5]=-10 THEN 1060
1050  GOSUB 9100
1060  LET S=S[S,3]
1070  IF S <> -100 THEN 1010
1080  GOTO 400
1100  IF S[S,5] <= 0 THEN 1130
1102  LET E9=S[S,5]
1110  GOSUB 4000
1120  GOTO 1140
1130  GOTO -S[S,5]+1 OF 1060,1140,1140
1140  LET S=S[S,4]
1150  GOTO 1070
2000  REM LEVEL ROUTINE
2002  GOSUB 8250
2010  LET X9=X8=0
2012  PRINT #2,5;"","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"", END 
2020  LET F0=F1=F2=F3=F4=F5=F6=F7=F8=F9=G0=G[1]=G[2]=G[3]=0
2030  IF X >= 50 THEN 2170
2040  IF X=0 THEN 2210
2050  IF X <= X9 THEN 2110
2056  PRINT #2,5+X9;N$,P$,F0,F1,F2,F3,M*3+M0,F5,F6,F7,F8,F9, END 
2062  PRINT #2;M*3+M0,G0,G[1],G[2],G[3],V$, END 
2070  LET X9=X9+1
2080  IF X=X9 THEN 2240
2090  PRINT #2,5+X9;"","",0,0,0,0,0,0,0,0,0,0, END 
2092  PRINT #2;0,0,0,0,0,"", END 
2100  GOTO 2070
2110  GOSUB 8300
2120  LET X9=X9-1
2130  READ #2,5+X9;N$,P$,F0,F1,F2,F3,F4,F5,F6,F7,F8,I
2131  READ #2;I0,G0,G[1],G[2],G[3],V$
2134  IF M*3+M0 >= I0 THEN 2139
2136  LET M=INT((I0-1)/3)
2138  LET M0=I0-M*3
2139  LET F9=F9 MAX M*3+M0-F4
2140  IF X <= X9 THEN 2110
2141  IF X8=1 THEN 2366
2138  LET F4=0
2143  REM
2144  GOSUB 8250
2146  LET F0=F1=F2=F3=F4=F5=F6=F7=F8=F9=G0=G[1]=G[2]=G[3]=0
2150  LET X9=X
2164  GOTO 2240
2170  IF X <> 77 THEN 2210
2186  LET X=1
2200  GOTO 2050
2210  LET E9=8
2208  GOSUB 4000
2220  LET X=1
2230  GOTO 2010
2240  GOSUB 9100
2250  LET N$=X$[1,30 MIN LEN(X$)]
2248  IF W3<0 OR X <> 1 THEN 2260
2254  LET M=INT(W2/3)
2256  LET M0=W2-INT(W2/3)*3
2260  GOSUB 9100
2270  IF A3 <> 0 THEN 2300
2280  GOSUB 5000
2290  IF S8=1 THEN 2030
2300  IF X$[1,3]="PIC" THEN 2410
2310  IF X$[1,3]="VAL" THEN 2530
2320  IF X$="USAGE" THEN 2460
2330  IF X$="BLANK" THEN 2580
2340  IF X$[1,4]="JUST" THEN 2630
2342  IF X$="OCCURS" THEN 2800
2350  IF X$[1,4]="SYNC" THEN 2680
2352  IF X$<"A" THEN 2260
2354  IF X$='92 THEN 2260
2360  IF X$="REDEFINES" THEN 2740
2362  IF S8 <> 0 THEN 2370
2363  LET X=1
2364  LET X8=1
2365  GOTO 2110
2366  LET A1=1
2367  LET W3=-10
2368  LET W1=0
2369  RETURN 
2370  LET E9=9
2372  GOSUB 4000
2380  GOSUB 9100
2390  IF A3 <> 0 THEN 2380
2400  GOTO 2280
2401  LET E9=10
2402  GOSUB 4000
2403  GOTO 2380
2410  REM PICTURE
2420  GOSUB 9100
2430  IF X$="IS" THEN 2420
2440  LET P$=X$
2450  GOTO 2260
2460  REM USAGE
2470  GOSUB 9100
2480  IF X$="IS" THEN 2470
2490  LET F0=1
2500  IF X$[1,4]="COMP" THEN 2260
2502  LET F0=0
2510  IF X$[1,4]="DISP" THEN 2260
2512  LET F0=2
2514  IF X$="INDEX" THEN 2260
2520  GOTO 2401
2530  REM VALUE
2540  GOSUB 9100
2550  IF X$="IS" THEN 2540
2560  LET V$=X$
2570  GOTO 2260
2580  REM BLANK WHEN ZERO
2590  GOSUB 9100
2600  IF X$="WHEN" THEN 2590
2602  LET F1=1
2610  IF X$="ZERO" THEN 2260
2620  GOTO 2401
2630  REM JUSTIFIED
2640  GOSUB 9100
2650  LET F2=1
2660  IF X$="RIGHT" THEN 2260
2670  GOTO 2270
2680  REM SYNC
2690  GOSUB 9100
2700  LET F3=1
2710  IF X$="LEFT" THEN 2260
2712  LET F3=0
2720  IF X$="RIGHT" THEN 2260
2730  GOTO 2401
2740  REM REDEFINES
2742  GOSUB 9100
2750  GOSUB 9700
2760  LET I=Y[I0+1]-INT(Y[I0+1]/2000)*2000
2762  GOSUB 9650
2770  LET M=INT((I-1)/3)
2780  LET M0=I-M*3
2790  GOTO 2260
2800  REM OCCURS
2802  GOTO 2810
2804  LET E9=15
2806  GOSUB 4000
2810  GOSUB 9100
2820  GOSUB 5000
2830  IF S8=0 THEN 2401
2832  LET G0=G0+1
2840  IF G0>3 THEN 2401
2850  LET G[G0]=X
2860  GOSUB 9100
2870  IF X$="TIMES" THEN 2860
2880  IF X$ <> "INDEXED" THEN 2270
2890  GOSUB 9100
2900  IF X$="BY" THEN 2890
2906  IF X$<"A" THEN 2270
2910  PRINT #3;X$,Y, END 
2920  LET M9=M9-1
2930  LET Y[Y]=420060.
2932  LET Y[Y+1]=12000+M9
2940  LET Y=Y+2
2950  GOTO 2260
3000  REM PICTURE SCAN
3010  LET X$="X9A(SVPB0Z,.*+-CD$"
3020  LET P9=LEN(P$)
3030  LET P5=P6=P7=P8=P0=P1=P3=F7=F6=0
3040  FOR I=1 TO P9
3050  LET Y$=P$[I,I]
3060  FOR I0=1 TO 18
3070  IF Y$=X$[I0,I0] THEN 3100
3080  NEXT I0
3090  LET E9=7
3092  GOSUB 4000
3094  RETURN 
3100  LET I1=P[I0,2]
3110  IF I0>9 THEN 3130
3120  GOTO I0 OF 3220,3250,3290,3320,3440,3470,3500,3520,3520
3130  GOTO I0-9 OF 3540,3520,3560,3540,3572,3572,3610,3650,3580
3140  IF FNB(INT(P8/2^(I1-1))) <> 0 THEN 3090
3150  LET P8=P[I1,1]
3160  LET I2=I0
3170  IF P5 <= 0 THEN 3210
3180  LET P5=P5-1
3190  LET I0=P2
3200  GOTO 3100
3210  NEXT I
3211  IF P1=0 OR P0=0 THEN 3090
3212  IF P6=1 THEN 3218
3214  LET F7=P3+F7
3218  RETURN 
3220  LET P1=P1 MAX 3
3230  LET P0=P0+1
3240  GOTO 3140
3250  LET P7=1
3251  LET P3=P3+1
3252  IF P8=1 THEN 3090
3260  GOTO P1+1 OF 3270,3230,3220,3230,3230
3270  LET P1=1
3280  GOTO 3230
3290  GOTO P1+1 OF 3300,3220,3230,3230,3230
3300  LET P1=2
3310  GOTO 3230
3320  LET P2=I0=I2
3330  LET I3=0
3340  LET I=I+1
3350  FOR I4=1 TO 10
3360  IF P$[I,I]=D$[I4,I4] THEN 3400
3370  NEXT I4
3380  IF P$[I,I]=")" THEN 3420
3390  GOTO 3090
3400  LET I3=I3*10+I4-1
3410  GOTO 3340
3420  LET P5=I3-1
3430  GOTO 3170
3440  LET F6=1
3450  LET P0=P0-1
3460  GOTO 3260
3470  LET P6=1
3480  LET F7=P3
3490  GOTO 3450
3500  LET P3=P3+1
3501  LET F7=F7-P6+1
3502  LET I1=I1+P6
3504  LET P8=P6
3510  GOTO 3450
3520  LET P1=4
3530  GOTO 3230
3540  LET P1=4
3542  LET I1=I1+P6
3550  GOTO 3250
3560  LET P6=1
3562  LET F7=P3
3570  GOTO 3520
3572  LET F6=1
3580  IF I2 <> I0 THEN 3602
3590  LET I1=I1+12 MIN 19
3592  LET P8=P[I1,1]
3600  GOTO 3540
3602  IF I0=18 THEN 3520
3604  LET I1=I1+P7
3606  LET P8=P6
3608  GOTO 3520
3610  IF P$[I+1,I+1] <> "R" THEN 3090
3620  LET P0=P0+1
3630  LET I=I+1
3640  GOTO 3520
3650  IF P$[I+1,I+1]="B" THEN 3620
3660  GOTO 3090
4000  REM ERROR MESSAGES
4002  LET F7=0
4004  PRINT "*";
4010  GOTO INT((E9-1)/10)+1 OF 4020,4030
4020  GOTO E9 OF 4100,4120,4140,4160,4180,4200,4220,4240,4260,4280
4030  GOTO E9-10 OF 4300,4320,4340,4350,4360
4100  PRINT "'SECTION' MISSING OR MISSPELLED";
4102  LET F7=1
4110  GOTO 4900
4120  PRINT "END OF PARAGRAPH EXPECTED";
4122  LET F7=2
4130  GOTO 4900
4140  PRINT "ILLEGAL FILE NAME IN FD";
4142  LET F7=1
4150  GOTO 4900
4160  PRINT "ILLEGAL CLAUSE IN FD DESCRIPTION";
4162  LET F7=3
4170  GOTO 4900
4180  PRINT "ILLEGAL PARAGRAPH IN DATA DIVISION";
4182  LET F7=2
4184  LET X$=""
4190  GOTO 4900
4200  PRINT "'DIVISION' MISSING OR MISSPELLED";
4202  LET F7=1
4210  GOTO 4900
4220  PRINT "ILLEGAL PICTURE CONSTRUCTION";
4230  GOTO 4900
4240  PRINT "ILLEGAL LEVEL NUMBER OR CONSTRUCTION";
4250  GOTO 4900
4260  PRINT "ILLEGAL CLAUSE IN DATA DESCRIPTION";
4270  GOTO 4900
4280  PRINT "ILLEGAL SYNTAX IN DATA DESCRIPTION";
4290  GOTO 4900
4300  PRINT "ILLEGAL NUMERIC CONSTANT";
4310  GOTO 4900
4320  PRINT "RECORD TOO LONG FOR FILE";
4330  GOTO 4900
4340  PRINT "ACTUAL KEY '";X$;"' NOT DEFINED";
4342  GOTO 4900
4350  PRINT "ACTUAL KEY '"X$"' MUST BE COMPUTATIONAL";
4352  GOTO 4900
4360  PRINT "CAN'T SUBSCRIPT LEVEL 1 OR 77 ITEMS";
4362  GOTO 4900
4900  PRINT " AT LINE";N;"  CHR";A1
4902  LET E8=1
4910  GOTO F7+1 OF 4999,4920,4950,4970
4920  GOSUB 9100
4930  GOTO 4999
4940  IF X$='92 THEN 4999
4950  GOSUB 9100
4952  GOTO 4940
4960  IF X$='92 THEN 4999
4962  IF X$="," THEN 4999
4964  IF X$=";" THEN 4999
4966  IF X$="." THEN 4999
4970  GOSUB 9100
4972  GOTO 4960
4999  RETURN 
5000  REM CHECK FOR MATCH
5010  LET S0=S[S,1]
5012  LET S8=1
5020  GOTO INT((S0-1)/10)+1 OF 5030,5040,5050
5030  GOTO S0 OF 5100,5110,5120,5130,5140,5150,5160,5170,5180,5190
5040  GOTO S0-10 OF 5200,5210,5220,5230,5240,5250,5260,5270,5280,5290
5050  GOTO S0-20 OF 5300,5310,5320
5100  IF X$="FILE" THEN 5410
5102  GOTO 5400
5110  IF X$="SECTION" THEN 5410
5112  GOTO 5400
5120  IF X$="." THEN 5410
5122  GOTO 5400
5130  IF X$='92 THEN 5410
5132  GOTO 5400
5140  IF X$="FD" THEN 5410
5142  GOTO 5400
5150  IF X$="BLOCK" THEN 5410
5152  GOTO 5400
5160  IF X$="CONTAINS" THEN 5410
5162  GOTO 5400
5170  LET X=0
5171  FOR X0=1 TO LEN(X$)
5172  FOR X1=1 TO 10
5173  IF X$[X0,X0]=D$[X1,X1] THEN 5176
5174  NEXT X1
5175  GOTO 5400
5176  LET X=X*10+X1-1
5177  NEXT X0
5178  GOTO 5410
5180  IF X$="TO" THEN 5410
5182  GOTO 5400
5190  IF X$="RECORD" THEN 5410
5192  IF X$="RECORDS" THEN 5410
5193  IF X$="MODE" THEN 5410
5194  GOTO 5400
5200  IF X$="CHARACTERS" THEN 5410
5202  GOTO 5400
5210  IF X$="DATA" THEN 5410
5212  GOTO 5400
5220  IF X$="IS" THEN 5410
5222  IF X$="ARE" THEN 5410
5228  GOTO 5400
5230  IF X$="DATA" THEN 5400
5231  IF X$="LABEL" THEN 5400
5232  IF X$="BLOCK" THEN 5400
5233  IF X$="RECORD" THEN 5400
5234  IF X$="RECORDING" THEN 5400
5238  GOTO 5410
5240  IF X$="LABEL" THEN 5410
5241  IF X$="RECORDING" THEN 5410
5242  GOTO 5400
5250  IF X$="STANDARD" THEN 5410
5251  IF X$="F" THEN 5410
5252  GOTO 5400
5260  IF X$="OMITTED" THEN 5410
5262  GOTO 5400
5270  IF X$="," THEN 5410
5272  IF X$=";" THEN 5410
5274  GOTO 5400
5280  IF X$="PROCEDURE" THEN 5410
5282  GOTO 5400
5290  IF X$="DIVISION" THEN 5410
5292  GOTO 5400
5300  IF X$="." THEN 5410
5302  IF X$='92 THEN 5410
5304  GOTO 5400
5310  IF X$="WORKING-STORAGE" THEN 5410
5312  GOTO 5400
5320  IF X$="77" THEN 5410
5321  IF X$="01" THEN 5410
5322  GOTO 5400
5400  LET S8=0
5410  RETURN 
6100  REM DATA FOR PICTURE
6110  DATA 2704,9,2704,16,2960,9,343960.,0
6120  DATA 199536.,12,1.04755E+06,13,1.04755E+06,10
6130  DATA 789392.,1,1.01555E+06,2,343296.,14,1.04346E+06,3
6140  DATA 1.01017E+06,4,343320.,14,986000.,5,1.03209E+06,5
6150  DATA 1.01032E+06,7,814064.,7,917496.,8,224144.,0
6160  DATA 524184.,0
7000  REM GENERATORS
7010  LET S0=S[S,2]
7020  GOTO (S0-1)/10+1 OF 7030
7030  GOTO S0 OF 2000,7080,7100,7050,7120,7132
7050  GOSUB 9700
7052  IF I0=0 THEN 7072
7060  GOSUB 9850
7064  LET W1=I0
7065  GOSUB 8250
7066  LET W2=M*3+M0
7067  LET W3=0
7070  RETURN 
7072  LET E9=3
7074  GOSUB 4000
7076  RETURN 
7080  LET F[3]=X
7090  RETURN 
7100  LET F[4]=X
7110  RETURN 
7120  LET F[5]=X
7130  RETURN 
7132  IF M*3+M0 >= W2+F[5] THEN 7138
7134  LET M=INT((W2+F[5])/3)
7136  LET M0=W2+F[5]-M*3
7138  GOSUB 8250
7140  IF W1=0 THEN 7170
7142  FOR I=0 TO 7
7150  LET Y[W1+I]=F[I+1]
7160  NEXT I
7170  GOSUB 9650
7180  RETURN 
7250  LET I0=W1
7270  GOSUB 9850
7280  LET F[5]=F[5] MAX F9
7282  IF F[5] <= 72 THEN 7290
7284  LET E9=12
7286  GOSUB 4000
7288  LET F[5]=72
7290  IF F[7] <> 0 THEN 7310
7300  LET F[7]=W2
7310  LET W3=W3+1
7312  LET Y[Y]=W1
7314  GOSUB 7140
7316  LET W1=Y[Y]
7320  LET Y=Y+1
7340  GOTO 8651
7500  REM SAVE VARIABLE IN CORE ARRAY
7510  LET Y[Y]=I9*100000.+(P3-F7+20)*1000+P3*10+F1*4+F2*2+F6
7520  LET Y[Y+1]=M5*2000+M4
7530  LET Y=Y+2
7540  IF I9 <> 1 THEN 7640
7550  LET Y[Y]=0
7560  FOR M1=1 TO P9
7570  GOSUB 8000
7580  LET Y0=M1-INT((M1-1)/3)*3
7582  LET Y[Y]=Y[Y]+(M2-1)*64^(3-Y0)
7590  IF Y0 <> 3 THEN 7620
7600  LET Y=Y+1
7610  LET Y[Y]=0
7620  NEXT M1
7630  LET Y=Y+1
7640  IF I9 <> 2 THEN 7660
7650  LET Y[Y]=M3
7652  LET Y=Y+1
7660  RETURN 
8000  REM M2=CHRVAL(M$(M1))
8010  LET M2=M3=32
8020  IF M$[M1,M1] <= C$[M2,M2] THEN 8060
8030  LET M3=M3/2
8040  LET M2=M2+M3
8050  GOTO 8020
8060  IF M$[M1,M1]=C$[M2,M2] THEN 8092
8070  LET M3=M3/2
8080  LET M2=M2-M3
8090  GOTO 8020
8092  RETURN 
8100  REM M$--> MEMORY
8110  FOR M1=1 TO LEN(M$)
8120  GOSUB 8000
8130  GOTO M0 OF 8140,8170,8200
8140  LET M[M]=M2*4096-4096
8150  LET M0=2
8160  GOTO 8230
8170  LET M[M]=M[M]+M2*64-64
8180  LET M0=3
8190  GOTO 8230
8200  LET M[M]=M[M]+M2-1
8210  LET M=M+1
8220  LET M0=1
8230  NEXT M1
8240  RETURN 
8250  REM SYNC MEMORY
8260  IF M0=1 THEN 8290
8270  LET M0=1
8280  LET M=M+1
8290  RETURN 
8300  REM GET LENGTH
8302  LET M5=F9
8304  IF F3 <> 1 THEN 8308
8306  GOSUB 8250
8308  LET M4=M*3+M0
8310  IF F4 <> 0 THEN 8620
8320  IF F0=2 THEN 8590
8330  GOSUB 3000
8340  LET M5=F9=P0
8350  IF P1=1 THEN 8520
8360  LET F0=0
8370  IF P1=4 THEN 8440
8380  LET P0=5
8400  LET P3=F7=F9
8402  LET I9=0
8404  LET F6=1
8410  IF N$="FILLER" THEN 8650
8411  PRINT #3;N$,Y, END 
8412  IF G0=0 THEN 8418
8414  LET Y[Y]=-(G0*1.E+06+G[1]*10000+G[2]*100+G[3])
8416  LET Y=Y+1
8418  IF Y>144 THEN 9900
8419  GOSUB 7500
8420  GOTO 8650
8440  LET M$=P$
8450  LET I9=1
8510  GOTO 8410
8520  LET M8=0
8522  IF F9 <= 6 THEN 8525
8524  LET M8=1
8525  IF F0 <> 0 OR W3>0 THEN 8528
8526  LET M9=M9-1-M8
8528  GOTO F0+1 OF 8532,8550,8820
8532  LET M3=0
8533  GOTO 8535
8534  LET M3=M9
8535  LET I9=2
8536  LET P0=7
8540  GOTO 8410
8550  LET I9=3
8560  LET F9=3+3*M8
8570  LET P0=6
8580  GOTO 8410
8590  LET M9=M9-1
8591  LET P3=F7=M5=6
8592  LET I9=4
8594  LET M4=M9
8600  LET P0=2
8602  LET F9=0
8610  GOTO 8410
8620  LET M4=F4
8621  LET G1=1
8622  FOR G2=1 TO G0
8623  LET G1=G1*G[G2]
8624  NEXT G2
8625  LET P3=F7=M5=F9/G1
8626  LET I9=5
8630  LET P0=3
8640  GOTO 8410
8650  IF W1 <> 0 AND X=1 THEN 7250
8651  IF F4 <> 0 THEN 8690
8652  IF I9=4 THEN 8690
8654  LET G1=1
8655  FOR G2=1 TO G0
8656  LET G1=G1*G[G2]
8657  NEXT G2
8658  LET G2=G1
8660  IF V$ <> "" THEN 8700
8662  LET F9=F9*G1
8670  LET M=M+INT(F9/3)
8680  LET M0=M0+FND(F9)
8682  IF M0 <= 3 THEN 8690
8684  LET M0=M0-3
8686  LET M=M+1
8690  RETURN 
8700  IF V$[1,1]="'" THEN 8710
8701  IF V$[1,1]>"A" THEN 8811
8702  IF V$[1,1] <> C$[3,3] THEN 8850
8710  GOTO I9+1 OF 8720,8720,8720,8820,8820
8720  LET M$=V$[2,LEN(V$)-1]
8730  IF LEN(M$)<F9 THEN 8770
8740  IF LEN(M$)=F9 THEN 8792
8750  LET M$=M$[1,F9]
8760  GOTO 8792
8770  FOR I=LEN(M$)+1 TO F9
8780  LET M$[I,I]=" "
8790  NEXT I
8792  FOR I=1 TO G1
8800  GOSUB 8100
8802  NEXT I
8810  RETURN 
8811  FOR I=1 TO 5
8812  IF V$[1,4]=G$[I*4-3,I*4] THEN 8815
8813  NEXT I
8814  GOTO 8820
8815  LET M$=""
8816  FOR I0=1 TO F9
8817  LET M$[I0,I0]=G$[20+I,20+I]
8818  NEXT I0
8819  GOTO 8792
8820  LET E9=10
8830  GOSUB 4000
8840  RETURN 
8850  GOTO I9+1 OF 8860,8820,8880,8880
8860  LET M$=V$
8870  GOTO 8730
8880  GOSUB 9400
8890  LET V5=INT(V5*10^(P3-F7-V1))
8900  LET V4=V4*10^(P3-F7-V1)
8910  LET V5=V5+FNE(V4)*1.E+06
8920  LET V4=INT(V4)+INT(V5/1.E+06)
8930  LET V5=FNE(V5)
8932  LET Z9=M9
8934  IF I9 <> 3 THEN 8940
8936  LET Z9=M
8938  LET M=M+1+M8
8940  IF M8=1 THEN 8954
8950  LET M[Z9]=V5
8952  GOTO 8980
8954  LET M[Z9]=V4
8956  LET M[Z9+1]=V5
8958  GOTO 8980
8960  IF I9 <> 2 THEN 8810
8961  LET M$=""
8962  FOR I=F9 TO 1 STEP -1
8964  IF I>6 THEN 8970
8966  LET I0=FNC(V5/10^(I-1))
8968  GOTO 8972
8970  LET I0=FNC(V4/10^(I-7))
8972  LET I1=17+I0+10*V2*F6
8973  LET M$[F9-I+1,F9-I+1]=C$[I1,I1]
8974  LET V2=0
8976  NEXT I
8977  LET G1=G2
8978  GOTO 8730
8980  LET G1=G1-1
8982  IF G1 <= 0 THEN 8960
8983  IF I9=3 THEN 8932
8984  LET M9=M9-1-M8
8986  GOTO 8932
9000  REM READ NEXT LINE
9010  READ #1;N,A$
9020  LET L8=L8+1
9030  LET A1=1
9040  LET A2=LEN(A$)
9050  LET A3=0
9060  RETURN 
9100  REM GET NEXT WORD --> X$
9102  LET A3=A3+1
9110  IF A$[A1,A1] <> " " THEN 9140
9120  LET A1=A1+1
9130  IF A1 <= A2 THEN 9110
9140  LET A0=A1
9150  IF A1 >= A2 THEN 9240
9160  IF A$[A1,A1]="'" THEN 9270
9161  IF A$[A1,A1]=C$[3,3] THEN 9270
9162  LET A1=A1+1
9164  IF A$[A1,A1] <> " " THEN 9162
9170  LET X$=A$[A0,A1-1]
9180  IF X$ <> "." THEN 9230
9190  IF A1 <> A2 THEN 9230
9200  GOSUB 9000
9210  IF A$[1,3]="   " THEN 9222
9220  LET X$='92
9222  LET A3=-1
9230  REM
9234  RETURN 
9240  GOSUB 9000
9250  IF A$[1,3]="   " THEN 9110
9260  GOTO 9220
9270  LET A1=A1+1
9290  IF A1=A2 THEN 9170
9300  IF A$[A1,A1] <> A$[A0,A0] THEN 9270
9310  GOTO 9162
9400  REM SCAN CONSTANT
9402  LET I=1
9410  LET V0=V1=V2=V3=V4=V5=0
9420  IF V$[1,1]="+" THEN 9450
9430  IF V$[1,1] <> "-" THEN 9460
9440  LET V2=1
9450  LET I=2
9460  FOR I0=I TO LEN(V$)
9470  FOR N0=1 TO 10
9480  IF V$[I0,I0]=D$[N0,N0] THEN 9560
9490  NEXT N0
9500  IF V$[I0,I0] <> "." THEN 9530
9510  LET V3=1
9520  GOTO 9610
9530  LET E9=11
9540  GOSUB 4000
9550  RETURN 
9560  LET V5=V5*10+N0-1
9570  LET V4=V4*10+INT(V5/1.E+06)
9580  LET V5=FNE(V5)
9590  LET V0=V0+1
9600  LET V1=V1+V3
9610  NEXT I0
9620  RETURN 
9650  REM RESET FILES 3,4
9660  IF  END #3 THEN 9690
9670  READ #3;M$,I1
9680  GOTO 9670
9690  RETURN 
9700  REM FIND X$ AS SYMBOL
9710  READ #3,1
9720  IF  END #3 THEN 9760
9730  READ #3;M$,I0
9740  IF M$ <> X$ THEN 9730
9750  RETURN 
9760  LET I0=0
9770  RETURN 
9850  REM READ DATA-->F
9852  FOR I1=1 TO 10
9860  LET F[I1]=Y[I0+I1-1]
9880  NEXT I1
9890  RETURN 
9900  PRINT 
9901  PRINT "*DATA DIVISION TOO LARGE"
9902  E8=1
9903  GOTO 510
9999  END 
