1000  COM R1,R2,R3,R4,R$[72],N,C[30,4],A$[72]
1010  REM *** COFTAB - PROGRAM COFTA2 - 06/06/73
1012  REM *** UTILITY PROCESSOR - HANDLES LISTING, PUNCHING, EDITING,
1013  REM *** ETC. OF THE DIFFERENT FILES.
1014  REM *** TRANSFERS CONTROL BACK TO COFTA1.
2000  FILES VARBLE,WORK1,WORK2
3000  FILES F1,F2,F3,F4,F5,F6,F7,F8,F9,F10
5000  DIM D$[20],T$[72],B$[72],S$[72],H$[72],I$[72],E$[1]
5010  DIM N$[72]
5020  D$=",;)(=NX   0123456789"
5030  F7=128
5040  F4=1
5050  F5=F7/2-1
5060  F6=F5+1
5070  P2=0
5075  IF N=10 THEN 5460
5080  GOTO N OF 5430,6850,6380
5090  CHAIN "COFTA1"
5100  REM ***** SECTOR LOCATION ROUTINE
5110  I2=I1+1
5120  IF  END #I3 THEN 5270
5130  READ #I3,I1;T1
5140  READ #I3,I2
5150  GOTO TYP(I3) OF 5170,5160,5270
5160  READ #I3;T$
5170  READ #I3;T2
5180  IF T1 >= V1 THEN 5270
5190  IF T2>V1 THEN 5270
5200  T1=T2
5210  I1=I2
5220  I2=I2+1
5230  IF I3>3 THEN 5140
5240  IF I2<F8 THEN 5140
5250  PRINT "*****OVERFLOW IN COMMAND OR VARIABLE FILE"
5260  GOTO 5090
5270  RETURN 
5280  REM ***** ROUTINE FOR COPYING A FILE
5290  READ #T4,1
5300  FOR I=I1 TO F8
5310  PRINT #I3,I; END 
5320  NEXT I
5330  PRINT #I3,I1
5340  IF  END #T4 THEN 5410
5350  GOTO TYP(T4) OF 5380,5360
5360  READ #T4;T$
5370  PRINT #I3;T$
5380  READ #T4;T1,T$
5390  PRINT #I3;T1,T$
5400  GOTO 5380
5410  PRINT #I3; END 
5420  RETURN 
5430  REM ***** LIST PROCESSOR
5440  L1=1
5450  GOTO 5490
5460  REM ***** PUNCH PROCESSOR
5470  L1=2
5480  GOSUB 6250
5490  REM ***** ROUTINE USED BY LIST AND PUNCH
5500  B1=1
5510  GOSUB 7700
5520  IF S1=7 OR S1=8 THEN 5550
5530  PRINT "*****'CR' OR ' ' EXPECTED AFTER "A$[P1,P4]
5540  GOTO 5090
5550  S$=A$[P1,P4]
5560  T1=LEN(S$)
5570  X7=N7=T2=0
5580  IF T1>2 THEN 5750
5590  FOR I=1 TO T1
5600  FOR J=6 TO 7
5610  IF S$[I,I]=D$[J,J] THEN 5650
5620  NEXT J
5630  PRINT "*****"S$" IS UNRECOGNIZABLE"
5640  GOTO 5090
5650  T1=1
5660  GOTO J-5 OF 5670,5700
5670  T1=LEN(S$)
5680  N7=1
5690  GOTO 5710
5700  X7=1
5710  NEXT I
5720  B1=1
5730  GOSUB 7700
5740  IF S1#7 OR S1#8 THEN 5530
5750  I3=1
5760  I1=F4
5770  F8=F5
5775  B$[1,3]=A$[P1,P1+2]
5780  IF A$[P1,P1+2]="VAR" THEN 5860
5790  I1=F6
5800  F8=F7
5810  IF A$[P1,P1+2]="COM" THEN 5860
5820  I3=4
5830  IF A$[P1,P1+2]="DAT" THEN 6290
5840  PRINT "*****'VAR' OR 'COM' OR 'DAT' EXPECTED IN LIS"
5850  GOTO 5090
5860  N=0
5870  IF S1#7 THEN 5920
5880  N=1
5890  C[1,1]=0
5900  C[1,2]=1.E+06
5910  GOTO 6040
5920  B1=0
5930  GOSUB 7700
5940  IF S1=1 OR S1=7 THEN 5970
5950  PRINT "*****',' OR 'CR' EXPECTED AFTER "A$[P1,P4]
5960  GOTO 5090
5970  S$=A$[P1,P4]
5980  GOSUB 8260
5990  IF E1=0 THEN 5090
6000  N=N+1
6010  C[N,1]=S2
6020  C[N,2]=S3
6030  IF S1=1 THEN 5920
6040  FOR L=1 TO N
6050  V1=C[L,1]
6060  GOSUB 5100
6070  IF  END #I3 THEN 6210
6080  READ #I3,I1
6090  GOTO TYP(I3) OF 6110,6100,5090
6100  READ #I3;T$
6110  READ #I3;T1,T$
6120  IF T1<C[L,1] THEN 6110
6130  IF T1>C[L,2] THEN 6210
6140  IF N7=1 THEN 6160
6150  IF L1#2 THEN 6155
6152  PRINT B$[1,3];" ";
6155  PRINT T1;T$;
6156  GOTO 6170
6160  IF L1#2 THEN 6165
6162  PRINT B$[1,3];" ";
6165  PRINT T$;
6170  IF X7#1 THEN 6190
6180  PRINT "";
6190  PRINT 
6200  GOTO 6110
6210  NEXT L
6220  GOTO L1 OF 5090,6230
6230  GOSUB 6250
6240  GOTO 5090
6250  REM ***** WAITING ROUTINE FOR LEADER
6260  FOR T1=1 TO 25000
6270  NEXT T1
6280  RETURN 
6290  REM ***** TEMPORARY DATA LISTER
6295  GOSUB 6250
6300  IF  END #I3 THEN 6360
6310  READ #I3,1
6320  READ #I3;T$
6330  PRINT T$
6340  IF T$[1,3]#"EOT" THEN 6320
6342  GOSUB 6250
6344  GOTO 5090
6350  GOTO 6320
6360  I3=I3+1
6370  GOTO 6300
6380  REM ***** CLEAR PROCESSOR
6390  N=0
6400  T4=2
6410  B1=1
6420  GOSUB 7700
6430  IF S1=7 THEN 6450
6440  IF S1#8 THEN 5530
6450  I1=F4
6460  I3=1
6470  F8=F5
6480  IF A$[P1,P1+2]="VAR" THEN 6540
6490  I1=F6
6500  F8=F7
6510  IF A$[P1,P1+2]="COM" THEN 6540
6520  PRINT "*****'VAR' OR 'COM' EXPECTED AFTER "A$[P1,P4]
6530  GOTO 5090
6540  IF S1#7 THEN 6590
6550  FOR I=I1 TO F8
6560  PRINT #I3,I; END 
6570  NEXT I
6580  GOTO 5090
6590  B1=0
6600  GOSUB 7700
6610  IF S1=1 THEN 6630
6620  IF S1#7 THEN 5950
6630  S$=A$[P1,P4]
6640  GOSUB 8260
6650  IF E1=0 THEN 5090
6660  N=N+1
6670  C[N,1]=S2
6680  C[N,2]=S3
6690  IF S1=1 THEN 6590
6700  GOSUB 6720
6710  GOTO 5090
6720  REM ***** ROUTINE FOR CLEARING SPECIFED ST.NOS.
6730  PRINT #T4,1
6740  READ #I3,I1
6750  IF  END #I3 THEN 6820
6760  READ #I3;T1,T$
6770  FOR I=1 TO N
6780  IF T1 >= C[I,1] AND T1 <= C[I,2] THEN 6760
6790  NEXT I
6800  PRINT #T4;T1,T$
6810  GOTO 6760
6820  PRINT #T4; END 
6830  GOSUB 5280
6840  RETURN 
6850  REM ***** EDIT PROCESSOR
6860  T4=2
6870  B1=1
6880  GOSUB 7700
6890  IF S1=8 OR S1=2 THEN 6920
6900  PRINT "*****' ' EXPECTED AFTER "A$[P1,P4]
6910  GOTO 5090
6920  L1=0
6930  S2=0
6940  S3=1.E+06
6950  IF A$[P1,P1+2]#"LIS" THEN 7020
6960  L1=1
6970  B1=1
6980  GOSUB 7700
6990  IF S1=2 OR S1=8 THEN 7020
7000  PRINT "*****';' OR ' ' EXPECTED AFTER "A$[P1,P4]
7010  GOTO 5090
7020  I1=F4
7030  F8=F5
7040  I3=1
7050  IF A$[P1,P1+2]="VAR" THEN 7110
7060  I1=F6
7070  F8=F7
7080  IF A$[P1,P1+2]="COM" THEN 7110
7090  PRINT "*****'VAR' OR 'COM' EXPECTED AFTER "A$[P1,P4]
7100  GOTO 5090
7110  N=0
7120  IF S1=2 THEN 7210
7130  B1=0
7140  GOSUB 7700
7150  IF S1=2 OR S1=1 THEN 7180
7160  PRINT "*****' ' OR ';' EXPECTED AFTER "A$[P1,P4]
7170  GOTO 5090
7180  S$=A$[P1,P4]
7190  GOSUB 8260
7200  IF E1=0 THEN 5090
7210  N=N+1
7220  C[N,1]=S2
7230  C[N,2]=S3
7240  IF S1=1 THEN 7130
7250  B1=2
7260  GOSUB 7700
7270  IF S1=2 THEN 7300
7280  PRINT "*****';' EXPECTED AFTER "A$[P1,P4]
7290  GOTO 5090
7300  H$=A$[P1,P4]
7310  B1=2
7320  GOSUB 7700
7330  IF S1=7 THEN 7360
7340  PRINT "*****'CR' EXPECTED AFTER "A$[P1,P4]
7350  GOTO 5090
7360  I$=A$[P1,P4]
7370  H9=LEN(H$)
7380  I9=LEN(I$)
7390  PRINT #T4,1
7400  READ #I3,I1
7410  IF  END #I3 THEN 7670
7420  READ #I3;T1,T$
7430  L2=0
7440  FOR I=1 TO N
7450  IF T1 >= C[I,1] AND T1 <= C[I,2] THEN 7490
7460  NEXT I
7470  PRINT #T4;T1,T$
7480  GOTO 7420
7490  IF H9#0 THEN 7540
7500  B$=T$
7510  B$[LEN(B$)+1]=I$
7520  L2=1
7530  GOTO 7630
7540  T2=LEN(T$)
7550  B$=""
7560  FOR J=1 TO T2
7570  B$[LEN(B$)+1]=T$[J,J]
7580  IF H$#T$[J,J+H9-1] THEN 7620
7590  B$[LEN(B$)]=I$
7600  L2=1
7610  J=J+H9-1
7620  NEXT J
7630  PRINT #T4;T1,B$
7640  IF L1=0 OR L2=0 THEN 7420
7650  PRINT T1;B$
7660  GOTO 7420
7670  PRINT #T4; END 
7680  GOSUB 5280
7690  GOTO 5090
7700  REM ***** SCANNER
7710  A9=LEN(A$)
7720  P2=P1=P2+1
7730  IF P2 <= A9 THEN 7770
7740  P4=P2-1
7750  S1=7
7760  RETURN 
7770  IF B1=2 THEN 7810
7780  GOSUB 8190
7790  IF S1=7 THEN 7740
7800  A9=LEN(A$)
7810  IF A$[P2,P2]#" " THEN 7880
7820  GOTO B1+1 OF 7850,7830,7880
7830  S1=8
7840  GOTO 8170
7850  IF P2 >= A9 THEN 7740
7860  A$=A$[P2+1]
7870  GOTO 7800
7880  IF A$[P2,P2]#"'" THEN 8050
7890  IF P2<A9 THEN 7930
7900  PRINT "*****MISMATCHED '"
7910  S1=0
7920  RETURN 
7930  A$[P2]=A$[P2+1]
7940  A9=LEN(A$)
7950  P2=P2+1
7960  IF P2>A9 THEN 7900
7970  IF A$[P2,P2]#"'" THEN 7950
7980  IF P2 >= A9 THEN 8010
7990  A$[P2]=A$[P2+1]
8000  GOTO 7800
8010  P2=P2-1
8020  A$=A$[1,P2]
8030  P4=P2
8040  GOTO 7750
8050  E$=A$[P2,P2]
8060  IF B1#2 THEN 8100
8070  IF E$#D$[2,2] THEN 8130
8080  I=2
8090  GOTO 8160
8100  FOR I=1 TO 5
8110  IF E$=D$[I,I] THEN 8160
8120  NEXT I
8130  P2=P2+1
8140  IF P2>A9 THEN 7740
8150  GOTO 7800
8160  S1=I
8170  P4=P2-1
8180  RETURN 
8190  REM ***** ROUTINE FOR SCANNING LEADING BLANKS
8200  S1=0
8210  IF A$[P2,P2]#" " THEN 8250
8220  P1=P2=P2+1
8230  IF P2 <= A9 THEN 8210
8240  S1=7
8250  RETURN 
8260  REM*****SUBROUTINE FOR COMPUTING STATEMENT RANGES
8270  S9=LEN(S$)
8280  S2=0
8290  K1=1
8300  IF S$[1,1]="-" THEN 8440
8310  FOR K1=1 TO S9
8320  IF S$[K1,K1]="-" THEN 8360
8330  NEXT K1
8340  N$=S$
8350  GOTO 8370
8360  N$=S$[1,K1-1]
8370  GOSUB 8520
8380  IF E1=0 THEN 8510
8390  S2=N1
8400  S3=N1
8410  IF K1>S9 THEN 8510
8420  S3=1.E+06
8430  IF K1=S9 THEN 8510
8440  N$=S$[K1+1]
8450  GOSUB 8520
8460  IF E1=0 THEN 8510
8470  S3=N1
8480  IF S3 >= S2 THEN 8510
8490  PRINT "*****FIRST STATEMENT NO. > SECOND STATEMENT NO."
8500  E1=0
8510  RETURN 
8520  REM *****SUBROUTINE TO CONVERT STRING TO AN INTEGER (0-999)
8530  E1=1
8540  T1=LEN(N$)
8550  IF T1 <= 5 THEN 8590
8560  PRINT "*****"N$" IS AN ILLEGAL INTEGER"
8570  E1=0
8580  RETURN 
8590  N1=0
8600  FOR I=T1 TO 1 STEP -1
8610  T$=N$[I,I]
8620  FOR J=11 TO 20
8630  IF T$=D$[J,J] THEN 8660
8640  NEXT J
8650  GOTO 8560
8660  N1=N1+(J-11)*10^(T1-I)
8670  NEXT I
8680  RETURN 
8690  END 
