10  COM A$[72],B$[72],D$[52],F$[24],L$[72],M$[72],N$[72],O$[72],P$[72]
15  COM Q$[72],Y$[10],Z$[72]
20  COM A[10],B[6],C[6],D[6],E[6],I[64,2],L[10],M[64,2],P[6],R[6],S[6]
25  COM T[6],A,E,Q,U,D2,F0,F1,M,Q1,X,D
26  REM EDIT2K,HP 36838A, 6/74, 5 PROGS:EDIT2K,EDITA,EDITB,EDITC,EDITD
30  DIM C$[72],E$[72],G$[72],H$[72],S$[72],W$[72]
35  CHAIN "$EDIT2K"
40  F2=Q1=0
45  Q=A[7]
50  IF Z$="" THEN 105
55  A$=""
60  X=1
65  IF Z$[X,X]=";" THEN 95
70  A$[X,X]=Z$[X,X]
75  X=X+1
80  IF Z$[X]#"" THEN 65
85  Z$=""
90  GOTO 180
95  Z$=Z$[X+1]
100  GOTO 180
105  IF  NOT U THEN 160
110  READ #3,1
115  IF  END #3 THEN 150
120  FOR I=1 TO U
125  READ #3;Z$
130  NEXT I
135  PRINT Z$
140  U=U+1
145  GOTO 50
150  U=0
155  F$[13,18]="      "
160  PRINT "/";
165  ENTER 255,F,Z$
170  IF F#-256 THEN 175
171  PRINT 
172  PRINT "PLEASE RE-ENTER LAST LINE"
173  GOTO 160
175  GOTO 50
180  B$=""
185  A=1
190  PRINT 
195  GOSUB 9982
200  IF A$[A]="" THEN 50
205  E=0
210  B$=A$[A,A]
215  IF B$="q" THEN 225
220  IF B$#"Q" THEN 235
225  PRINT A$[A+1]
230  GOTO 50
235  A=A+1
240  IF A$[A,A]="q" THEN 250
245  IF A$[A,A]#"Q" THEN 265
250  GOSUB 9986
255  GOTO 285
260  A=A+1
265  IF A$[A,A]<"A" THEN 275
270  IF A$[A,A] <= "z" THEN 260
275  IF A$[A-1,A-1]="q" THEN 285
280  IF A$[A-1,A-1]#"Q" THEN 295
285  Q=1
290  Q1=1
295  GOSUB 9982
300  FOR D2=1 TO LEN(D$)/2
305  IF B$=D$[D2,D2] THEN 330
310  IF B$=D$[D2+LEN(D$)/2,D2+LEN(D$)/2] THEN 330
315  NEXT D2
320  E=1
325  GOTO 999
330  D=D2
335  IF D2>2 THEN 345
340  CHAIN "$EDIT2K",1900
345  D2=D2-2
350  IF D2>4 THEN 360
355  CHAIN "$EDITA",45
360  D2=D2-4
365  IF D2>5 THEN 405
370  IF D2#5 THEN 400
375  GOSUB 8000
380  MAT T=C
385  IF T[6] THEN 400
390  E=18
395  GOTO 999
400  CHAIN "$EDITB",40
405  D2=D2-5
410  IF D2>3 THEN 500
415  GOTO 455
420  FILES *,*,*
425  ASSIGN F$[1,6],1,X
430  IF F$[13,18]="      " THEN 440
435  ASSIGN F$[13,18],3,X
440  IF F$[7,12]="      " THEN 455
445  ASSIGN F$[7,12],2,X
450  F2=0
455  IF D2=2 THEN 465
460  GOSUB 8000
465  GOSUB D2 OF 1000,1500,3000
470  IF A$[A]="" THEN 40
475  IF A$[A,A]#"," THEN 490
480  GOSUB 9986
485  GOTO 460
490  E=3
495  GOTO 999
500  D2=D2-3
505  GOSUB 8000
510  CHAIN "$EDITD",40
999  CHAIN "$EDIT2K",3000
1000  REM < LIST >
1005  IF C[6]=0 AND D[6]=0 AND C[5] >= D[5] THEN 1130
1010  IF C[5]=0 AND D[5]=0 THEN 1130
1015  C9=0
1020  IF A$[A]="" THEN 1065
1025  IF A$[A,A]#"," THEN 1055
1030  GOSUB 9986
1032  IF A$[A,A+5]="notext" THEN 1040
1035  IF A$[A,A+5]#"NOTEXT" THEN 1055
1040  A=A+6
1045  C9=1
1050  GOTO 1065
1055  E=2
1060  GOTO 999
1065  MAT T=C
1070  GOSUB 6200
1075  IF Q THEN 1085
1080  GOSUB 7005
1085  IF  NOT C9 THEN 1100
1090  PRINT 
1095  GOTO 1105
1100  PRINT SPA(A[2]-1);B$[A[2],LEN(B$) MIN A[3] MAX A[2]]
1105  IF ABS(X-D[5])<.00001 THEN 1125
1110  GOSUB 5100
1115  IF E THEN 1125
1120  GOTO 1075
1125  MAT P=D
1130  RETURN 
1500  REM <<< CHANGE >>>
1505  C7=A
1510  D1=D2=F=D9=0
1515  G$=""
1520  MAT T=ZER
1525  GOSUB 9500
1530  IF E THEN 1550
1535  D1=-1
1540  G$=S$
1545  GOTO 1725
1550  D2=E=0
1555  IF A$[A,A+3]="last" THEN 1565
1560  IF A$[A,A+3]#"LAST" THEN 1595
1565  D2=-2
1570  A=A+3
1575  GOSUB 9986
1580  GOSUB 8900
1585  D9=N
1590  GOTO 1650
1595  GOSUB 8615
1600  D2=T[4]
1605  IF T[4] THEN 1630
1610  IF D1 THEN 1750
1615  GOTO 490
1630  IF D2 >= A[2] AND D2 <= A[3] THEN 1650
1635  A=C7
1640  E=6
1645  GOTO 999
1650  IF D1 THEN 1695
1655  D1=D2
1660  D8=D9
1665  C6=C7
1670  IF A$[A,A]#"/" THEN 1720
1675  GOSUB 9986
1680  C7=A
1685  D7=1
1690  GOTO 1550
1695  IF D1=-2 OR D2=-2 THEN 1725
1700  IF D1 <= D2 THEN 1725
1705  E=5
1710  A=C6
1715  GOTO 999
1720  D2=0
1725  GOSUB 7305
1730  IF E THEN 999
1735  MAT T=ZER
1740  GOSUB 9500
1745  IF T[1]=-1 THEN 1760
1750  E=3
1755  GOTO 999
1760  H$=S$
1765  MAT C=P
1767  C[4]=A[2]
1770  MAT D=P
1772  D[4]=A[3]
1775  IF A$[A]="" THEN 1837
1780  IF A$[A,A]="," THEN 1805
1785  IF A$[A,A+1]="IN" THEN 1800
1786  IF A$[A,A+1]="in" THEN 1800
1790  E=2
1795  GOTO 999
1800  A=A+1
1805  GOSUB 9986
1810  IF A$[A]="" THEN 2180
1811  GOTO 1817
1815  IF A$[A,A]#"," THEN 2240
1816  GOSUB 9986
1817  IF A$[A,A]="," THEN 2180
1820  IF A$[A]="" THEN 2180
1830  GOSUB 8000
1831  IF C[6]=0 THEN 1790
1832  IF D[6] THEN 1835
1833  C[4]=A[2]
1834  D[4]=A[3]
1835  IF A$[A]="" THEN 1837
1836  IF A$[A,A]#"," THEN 1790
1837  MAT T=C
1840  GOSUB 6200
1845  D6=0
1850  IF D1=-1 THEN 1995
1855  IF D1#-2 THEN 1880
1860  D1=LEN(B$)+D8
1865  IF D1 >= A[2] AND D1 <= A[3] THEN 1880
1870  A=C6
1875  GOTO 1640
1880  IF D2=0 THEN 1905
1885  IF D2#-2 THEN 1900
1890  D2=LEN(B$)+D9
1895  IF D2<A[2] OR D2>A[3] THEN 1635
1900  IF D1>D2 THEN 1705
1905  FOR I=LEN(B$)+1 TO D1 MAX D2
1910  B$[I,I]=" "
1915  NEXT I
1920  IF D2 THEN 1965
1925  IF LEN(B$)+LEN(H$) <= A[6] THEN 1940
1930  PRINT "LINE LENGTH EXCEEDED"
1935  GOTO 2110
1940  C$=B$[D1]
1945  B$[D1]=H$
1955  B$[LEN(B$)+1]=C$
1960  GOTO 2110
1965  IF LEN(B$)-(D2-D1+1)+LEN(H$)>A[6] THEN 1930
1970  C$=B$[(D2+1) MIN LEN(B$)+1]
1975  B$[D1]=H$
1985  B$[LEN(B$)+1]=C$
1990  GOTO 2110
1995  C0=(A[2]-1)*(T[3]#C[3])+((A[2] MAX C[4])-1)*(T[3]=C[3])
2005  IF G$="" THEN 2065
2010  C0=C0+1
2015  IF C0>(LEN(B$) MIN A[3])-LEN(G$)+1 THEN 2060
2017  IF D[5]=T[5] AND C0>D[4]-LEN(G$)+1 THEN 2060
2020  IF B$[C0,C0+LEN(G$)-1]#G$ THEN 2010
2021  IF LEN(B$)-LEN(G$)+LEN(H$)>A[6] THEN 1930
2025  C$=B$[C0+LEN(G$)]
2030  B$[C0]=H$
2035  B$[LEN(B$)+1]=C$
2040  C0=C0+LEN(H$)
2050  D6=1
2055  GOTO 2015
2060  GOTO D6+1 OF 2150,2110
2065  IF LEN(B$)+LEN(H$)>A[6] THEN 1930
2070  C$=B$[C0+1]
2075  B$[C0+1]=H$
2085  B$[LEN(B$)+1]=C$
2110  IF Q THEN 2130
2115  GOSUB 7005
2120  PRINT SPA(A[2]-1);
2125  PRINT B$[A[2],(LEN(B$) MIN A[3]) MAX A[2]]
2130  GOSUB 6400
2150  IF T[5] >= D[5] OR ( NOT LEN(G$) AND D1=-1) THEN 1815
2155  GOSUB 5100
2160  GOTO 1845
2180  MAT T=P
2185  GOSUB 6200
2190  C0=T[4]
2195  IF G$="" THEN 2205
2200  IF B$[C0,C0+LEN(G$)-1]#G$ THEN 1815
2205  IF LEN(B$)+LEN(H$)-LEN(G$)>A[6] THEN 1930
2210  IF C0<A[2] OR C0>A[3] THEN 1640
2215  C$=B$[C0+LEN(G$)]
2220  B$[C0]=H$
2225  B$[LEN(B$)+1]=C$
2235  GOTO 2110
2240  MAT P=D
2245  P[4]=D[4] MIN LEN(B$) MAX A[2]
2250  RETURN 
3000  REM <<< MODIFY >>>
3005  MAT T=C
3010  MAT P=D
3015  S$=""
3020  GOSUB 6200
3025  C$=B$
3030  B$=C$
3031  Z1=A[3] MIN LEN(B$) MAX A[2]
3035  GOTO 3045
3040  Z1=A[3] MIN LEN(B$) MAX A[2]
3042  IF Q THEN 3055
3045  GOSUB 7005
3050  PRINT SPA(A[2]-1);B$[A[2],Z1]
3055  PRINT TAB((A[2]+8)*(Z1<64));
3060  ENTER 255,Y,E$
3065  IF Y=-256 THEN 3060
3070  PRINT 
3075  IF B$#C$ THEN 3085
3080  IF E$='25 THEN 3325
3081  IF E$='25 THEN 3325
3085  IF E$='25 THEN 3030
3086  IF E$='25 THEN 3030
3090  IF E$="" THEN 3305
3095  FOR C=1 TO LEN(E$)
3100  IF E$[C,C]#" " THEN 3115
3105  NEXT C
3110  GOTO 3040
3115  S$=E$[C+1]
3116  GOSUB 3330
3120  IF C+A[2]-1 <= A[3] THEN 3140
3125  E=6
3130  A=C-1+((A[2]+8)*(Z1<64))
3135  GOTO 999
3140  IF E$[C,C]="I" THEN 3230
3142  IF E$[C,C]="i" THEN 3230
3145  IF E$[C,C]="D" THEN 3170
3147  IF E$[C,C]="d" THEN 3170
3150  IF E$[C,C]="R" THEN 3270
3152  IF E$[C,C]="r" THEN 3270
3155  Y=C-1+((A[2]+8)*(Z1<64))
3160  PRINT TAB(Y);"^ INVALID MODIFICATION OPERATOR"
3165  GOTO 3040
3170  C1=C2=C
3175  IF E$[C+1]="" THEN 3210
3180  C=C+1
3190  IF E$[C,C]=" " THEN 3175
3195  IF E$[C,C]="D" THEN 3205
3197  IF E$[C,C]="d" THEN 3205
3198  IF E$[C,C]="i" THEN 3205
3200  IF E$[C,C]#"I" THEN 3155
3205  C2=C
3207  IF C+A[2]-1>A[3] THEN 3125
3210  B$[C1+A[2]-1]=B$[C2+A[2] MIN LEN(B$)+1]
3212  IF E$[C,C]="i" THEN 3220
3215  IF E$[C,C]#"I" THEN 3040
3220  C=C1
3225  S$=E$[C2+1]
3230  IF LEN(S$)+LEN(B$) <= A[6] THEN 3245
3235  PRINT "LINE LENGTH EXCEEDED"
3240  GOTO 3040
3245  IF C+LEN(S$) <= A[3]-A[2]+2 THEN 3255
3250  GOSUB 3350
3255  S$[LEN(S$)+1]=B$[C+A[2]-1]
3260  B$[C+A[2]-1]=S$
3265  GOTO 3040
3270  D5=LEN(B$) MAX (C+A[2]-1+LEN(S$))
3275  IF D5>A[6] THEN 3235
3280  IF LEN(S$) <= A[3]-A[2]+1 THEN 3290
3285  GOSUB 3350
3290  IF D5>LEN(B$) THEN 3260
3295  S$[LEN(S$)+1]=B$[C+A[2]-1+LEN(S$)]
3300  GOTO 3260
3305  GOSUB 6400
3310  IF T[5] >= D[5] THEN 3325
3315  GOSUB 5100
3320  GOTO 3025
3325  RETURN 
3330  FOR J=LEN(B$)+1 TO A[2]+C-2
3335  B$[J,J]=" "
3340  NEXT J
3345  RETURN 
3350  PRINT "WARNING - 'RIGHT' LIMIT HAS BEEN EXCEEDED"
3355  RETURN 
5100  REM * GET NEXT *
5115  IF T[3]+1 <= L[7] THEN 5171
5120  IF L[10] THEN 5135
5125  E=16
5126  T[6]=0
5130  GOTO 5175
5135  T[3]=0
5140  T[2]=T[2]+1
5145  IF T[2] <= I[63,1] THEN 5165
5150  T[1]=T[1]+1
5155  GOSUB 6010
5160  T[2]=1
5165  T9=L[10]
5170  GOSUB 6700
5171  T[3]=T[3]+1
5172  T[4]=1
5175  GOSUB 6215
5185  RETURN 
5200  REM * GET LAST REC *
5205  IF  NOT L[T[3]] THEN 5260
5207  T[3]=T[3]-1
5210  IF T[3] THEN 5255
5215  T[2]=T[2]-1
5220  IF T[2] THEN 5240
5225  T[1]=T[1]-1
5230  GOSUB 6010
5235  T[2]=I[63,1]
5240  T9=L[9]
5245  GOSUB 6700
5250  T[3]=L[7]
5255  IF L[T[3]] THEN 5270
5260  E=20
5262  T[6]=0
5270  GOSUB 6215
5275  T[4]=LEN(B$)
5285  RETURN 
5500  REM * FIND POS *
5505  IF T[5] THEN 5520
5510  E=20
5515  GOTO 999
5520  T[6]=0
5525  T[1]=1
5530  T1=M
5535  T2=INT((T[1]+T1)/2)
5540  IF T2=T[1] THEN 5570
5545  IF T[5]<M[T2,1] THEN 5560
5550  T[1]=T2
5555  GOTO 5535
5560  T1=T2
5565  GOTO 5535
5570  IF T[5]<M[T1,1] THEN 5580
5575  T[1]=T1
5580  GOSUB 6000
5585  T[2]=1
5590  T1=I[63,1]
5595  T2=INT((T[2]+T1)/2)
5600  IF T2=T[2] THEN 5630
5605  IF T[5]<I[T2,1] THEN 5620
5610  T[2]=T2
5615  GOTO 5595
5620  T1=T2
5625  GOTO 5595
5630  IF T[5]<I[T1,1] THEN 5640
5635  T[2]=T1
5640  GOSUB 6100
5645  FOR I=1 TO L[7]
5647  T[3]=I
5650  IF ABS(T[5]-L[I])<.00001 THEN 5670
5655  IF T[5]<L[I] THEN 5680
5660  NEXT I
5662  GOSUB 5100
5665  GOTO 5680
5670  T[6]=1
5680  GOSUB (T[6] OR  NOT F OR E)+1 OF 5205,6215
5685  E=0
5695  RETURN 
6000  REM * GET I[] *
6005  IF M[T[1],2]=I[63,2] THEN 6020
6010  MAT  PRINT #1,I[63,2];I
6015  MAT  READ #1,M[T[1],2];I
6020  RETURN 
6100  REM * GET RECORDS *
6105  IF I[T[2],2]=L[8] THEN 6120
6110  T9=I[T[2],2]
6115  GOSUB 6700
6120  RETURN 
6200  REM * GET LINE *
6205  GOSUB 6005
6210  GOSUB 6105
6215  GOTO T[3] OF 6220,6230,6240,6250,6260,6270
6220  B$=L$
6225  GOTO 6275
6230  B$=M$
6235  GOTO 6275
6240  B$=N$
6245  GOTO 6275
6250  B$=O$
6255  GOTO 6275
6260  B$=P$
6265  GOTO 6275
6270  B$=Q$
6275  T[5]=X=L[T[3]]
6280  RETURN 
6300  REM * DELETE LINE *
6305  GOTO T[3] OF 6310,6315,6320,6325,6330,6340
6310  L$=M$
6315  M$=N$
6320  N$=O$
6325  O$=P$
6330  P$=Q$
6335  IF T[3]=L[7] THEN 6355
6340  FOR J=T[3]+1 TO L[7]
6345  L[J-1]=L[J]
6350  NEXT J
6355  L[7]=L[7]-1
6360  RETURN 
6400  REM * REPLACE LINE *
6405  GOTO T[3] OF 6410,6420,6430,6440,6450,6460
6410  L$=B$
6415  GOTO 6465
6420  M$=B$
6425  GOTO 6465
6430  N$=B$
6435  GOTO 6465
6440  O$=B$
6445  GOTO 6465
6450  P$=B$
6455  GOTO 6465
6460  Q$=B$
6465  RETURN 
6500  REM * FIND B *
6505  MAT T=CON
6510  GOSUB 6205
6515  GOSUB 5100
6520  IF  NOT E THEN 6540
6525  E=0
6540  MAT B=T
6545  RETURN 
6600  REM * FIND E *
6605  T[1]=M
6610  GOSUB 6005
6615  T[2]=I[63,1]
6620  GOSUB 6105
6625  T[3]=L[7]
6630  GOSUB 6215
6635  T[4]=LEN(B$)
6640  T[6]=1
6645  MAT E=T
6650  RETURN 
6700  GOSUB 6800
6705  GOSUB 6900
6710  RETURN 
6800  MAT  PRINT #1,L[8];L
6805  PRINT #1;L$,M$,N$,O$,P$,Q$
6810  RETURN 
6900  MAT  READ #1,T9;L
6905  READ #1;L$,M$,N$,O$,P$,Q$
6910  RETURN 
7000  REM * PRINT NO. *
7005  Y=INT(X)
7010  IF Y THEN 7025
7015  PRINT SPA(4);
7020  GOTO 7030
7025  PRINT  USING "#,4D";Y
7030  Y=X-INT(X)+.001
7040  GOTO ((Y*10)-INT(Y*10))>.05 OF 7070
7045  GOTO Y>.005 OF 7060
7050  PRINT SPA(5);
7055  RETURN 
7060  PRINT  USING "#,.DXXX";Y-INT(Y)
7065  RETURN 
7070  PRINT  USING "#,.DDXX";Y-INT(Y)
7075  RETURN 
7300  REM * 'TO' *
7305  IF A$[A]="" THEN 7335
7310  IF A$[A,A]="," THEN 9986
7312  IF A$[A,A+1]="to" THEN 7320
7315  IF A$[A,A+1]#"TO" THEN 7335
7320  A=A+1
7325  GOTO 9986
7330  RETURN 
7335  E=3
7340  RETURN 
8000  REM <RANGE>
8004  C5=A
8005  P[6]=1
8007  IF A$[A,A+2]="all" THEN 8012
8008  IF A$[A,A+2]#"ALL" THEN 8040
8012  A=A+3
8016  GOSUB 9982
8020  GOSUB 6505
8024  MAT C=B
8028  GOSUB 6605
8032  MAT D=E
8036  GOTO 8280
8040  W$=""
8044  F=0
8048  MAT R=ZER
8052  MAT D=ZER
8056  MAT T=ZER
8060  GOSUB 8300
8064  MAT C=T
8068  IF T[1]>0 THEN 8120
8072  IF T[1]<0 THEN 8096
8076  MAT C=P
8088  C[6]=0
8090  MAT D=C
8092  GOTO 8280
8096  W$=S$
8100  C[2]=A
8104  IF A$[A]="" THEN 8160
8108  IF A$[A,A]="/" THEN 8124
8112  A=A+1
8116  GOTO 8104
8120  IF A$[A,A]#"/" THEN 8160
8124  F=1
8126  IF D=11 THEN 8840
8128  MAT R=ZER
8132  MAT T=ZER
8136  GOSUB 9986
8140  GOSUB 8300
8142  IF  NOT T[1] THEN 8268
8144  MAT D=T
8148  IF D[4] THEN 8160
8152  GOSUB 6205
8156  D[4]=LEN(B$) MIN A[3]
8160  IF C[1]>0 THEN 8224
8164  F=(D=11)
8168  IF D[1] THEN 8180
8172  MAT D=E
8176  D[1]=0
8180  S$=W$
8184  GOSUB 9700
8188  IF A=C[2] THEN 8200
8192  C[3]=A
8196  A=C[2]
8200  IF D=11 THEN 8204
8202  MAT T=R
8204  GOSUB 8530
8208  GOSUB 8345
8212  IF A>C[3] THEN 8220
8216  A=C[3]
8220  MAT C=T
8224  IF D[1] THEN 8244
8228  MAT D=C
8230  D[6]=0
8232  MAT T=D
8236  GOSUB 6200
8240  D[4]=LEN(B$) MIN A[3] MAX C[4]
8244  IF C[4] THEN 8252
8248  C[4]=A[2]
8252  IF  NOT D[4] THEN 8232
8256  IF C[5]<D[5] THEN 8280
8260  IF C[5]>D[5] THEN 8268
8264  IF C[4] <= D[4] THEN 8280
8268  A=C5
8272  E=4
8276  GOTO 999
8280  RETURN 
8300  REM <POSITION>
8305  GOSUB 8400
8310  IF T[1]<0 THEN 8370
8345  IF A$[A,A]#"(" THEN 8370
8350  GOSUB 9986
8355  GOSUB 8600
8360  IF A$[A,A]#")" THEN 8375
8365  GOSUB 9986
8370  RETURN 
8375  E=2
8380  GOTO 999
8400  REM <RECORD POSITION>
8405  S$=""
8415  C3=A
8417  IF A$[A,A+4]="first" THEN 8422
8420  IF A$[A,A+4]#"FIRST" THEN 8445
8422  GOSUB 6505
8425  MAT T=B
8430  A=A+5
8435  GOSUB 9982
8440  GOTO 8530
8445  IF A$[A,A+3]="LAST" THEN 8447
8446  IF A$[A,A+3]#"last" THEN 8470
8447  GOSUB 6605
8450  MAT T=E
8455  A=A+4
8460  GOSUB 9982
8465  GOTO 8530
8470  IF A$[A,A]#"*" THEN 8490
8475  MAT T=P
8480  GOSUB 9986
8485  GOTO 8530
8490  GOSUB 9000
8495  IF  NOT F2 THEN 8520
8500  T[5]=N
8505  GOSUB 5500
8515  GOTO 8530
8520  GOSUB 9500
8525  RETURN 
8530  GOSUB 8900
8531  IF  NOT N THEN 8543
8532  FOR I=1 TO ABS(N)
8533  IF N<0 THEN 8536
8534  GOSUB 5100
8535  GOTO 8537
8536  GOSUB 5200
8537  IF E THEN 999
8538  NEXT I
8543  RETURN 
8600  REM <COLUMN POSITION>
8605  C3=A
8610  GOSUB 6200
8611  GOSUB 8615
8613  GOTO 8735
8615  IF A$[A,A]#"*" THEN 8635
8620  GOSUB 9986
8625  T[4]=P[4]
8630  GOTO 8720
8635  IF A$[A,A+3]="LAST" THEN 8640
8637  IF A$[A,A+3]#"last" THEN 8657
8640  T[4]=LEN(B$)
8645  A=A+4
8650  GOSUB 9982
8655  GOTO 8720
8657  IF A$[A,A+3]="left" THEN 8665
8660  IF A$[A,A+3]#"LEFT" THEN 8675
8665  T[4]=A[2]
8670  GOTO 8645
8675  IF A$[A,A+4]="RIGHT" THEN 8680
8677  IF A$[A,A+4]#"right" THEN 8700
8680  T[4]=A[3]
8685  A=A+5
8690  GOSUB 9982
8695  GOTO 8720
8700  GOSUB 8950
8705  IF  NOT F2 THEN 8730
8710  T[4]=N
8720  GOSUB 8900
8725  T[4]=T[4]+N
8730  RETURN 
8735  GOSUB 8900
8745  C=T[4] MAX 1
8750  IF  NOT N OR  NOT F2 THEN 8820
8755  FOR I=1 TO ABS(N)
8760  C=C+SGN(N)
8765  IF A[2] <= C AND C <= A[3] MIN LEN(B$) THEN 8805
8770  GOTO SGN(N)+1 OF 8775,8780
8775  GOSUB 5200
8777  GOTO 8785
8780  GOSUB 5100
8785  C=1 MAX A[2]
8787  IF E THEN 999
8790  IF N>0 THEN 8765
8795  C=LEN(B$)
8800  GOTO 8765
8805  IF B$[C,C]=" " THEN 8760
8810  NEXT I
8812  T[5]=X
8814  GOSUB 5500
8816  T[4]=C
8820  IF T[4] >= A[2] AND T[4] <= A[3] THEN 8855
8825  A=C3
8830  E=6
8835  GOTO 999
8840  E=3
8845  A=C3
8850  GOTO 999
8855  RETURN 
8900  REM <SIGNED INTEGER>
8905  S=-1
8910  N=0
8915  A=A+1
8920  IF A$[A-1,A-1]="-" THEN 8960
8925  IF A$[A-1,A-1]="+" THEN 8955
8930  A=A-1
8935  RETURN 
8950  REM <INTEGER>
8955  S=1
8960  GOSUB 9000
8965  N=N*S
8970  IF N=INT(N) THEN 8990
8975  E=8
8985  GOTO 999
8990  RETURN 
9000  REM <NUMBER>
9010  N=D3=F2=0
9015  P=1
9020  GOSUB 9982
9025  C4=A
9030  GOSUB 9100
9035  P=1
9040  IF A$[A,A]#"." THEN 9065
9045  A=A+1
9050  D3=N
9055  N=0
9060  GOSUB 9100
9065  N=N/P+D3
9070  GOSUB 9982
9075  IF N<10000 THEN 9095
9080  A=C4
9085  E=7
9090  GOTO 999
9095  RETURN 
9100  FOR I=1 TO 10
9105  IF A$[A,A]=Y$[I,I] THEN 9120
9110  NEXT I
9115  RETURN 
9120  N=N*10+I-1
9125  P=P*10
9130  F2=1
9135  A=A+1
9140  GOTO 9100
9500  REM <STRING>
9505  S$=""
9520  IF A$[A,A]<"(" THEN 9530
9525  IF A$[A,A]<"0" THEN 9572
9530  IF A$[A,A]<" " THEN 9572
9535  IF A$[A,A]>"^" THEN 9572
9540  IF A$[A,A]>"Z" THEN 9560
9545  IF A$[A,A]<"0" THEN 9560
9550  IF A$[A,A] >= "A" THEN 9572
9555  IF A$[A,A] <= "9" THEN 9572
9560  FOR I=A+1 TO LEN(A$)
9565  IF A$[A,A]=A$[I,I] THEN 9580
9570  NEXT I
9572  E=9
9573  RETURN 
9575  E=10
9576  GOTO 999
9580  T[1]=-1
9585  IF I=A+1 THEN 9595
9590  S$=A$[A+1,I-1]
9595  A=I+1
9600  GOSUB 9982
9605  IF  NOT F THEN 9650
9610  MAT D=E
9615  GOSUB 9700
9650  RETURN 
9700  REM <STRING SEARCH>
9745  MAT T=P
9750  MAT R=P
9755  IF S$="" THEN 9900
9760  GOSUB 6200
9765  C$=S$
9775  IF T[4]>LEN(B$) OR LEN(B$)=0 THEN 9835
9780  Z=LEN(C$) MIN (LEN(B$)-T[4]+1) MAX 1
9785  IF C$[1,Z]#B$[T[4],T[4]+Z-1] THEN 9820
9787  T[4]=T[4]+Z-1
9789  GOSUB 9890
9795  C$=C$[Z+1]
9800  IF C$="" THEN 9900
9805  GOSUB 9860
9815  GOTO 9775
9820  T[4]=T[4]+1
9822  GOSUB 9890
9825  GOTO 9847
9835  MAT T=R
9837  GOSUB 9860
9847  MAT R=T
9849  GOTO 9765
9850  E=17
9855  GOTO 999
9860  GOSUB 5100
9861  IF E THEN 9850
9865  IF B$="" THEN 9860
9890  IF (T[5] >= D[5] AND T[4]>D[4]) OR T[5]>D[5] THEN 9850
9895  RETURN 
9900  R[6]=T[6]=1
9925  RETURN 
9980  REM <MOVE POINTERS>
9982  IF A>LEN(A$) THEN 9990
9983  IF A$[A]="" THEN 9990
9984  IF A$[A,A]#" " THEN 9990
9986  A=A+1
9988  GOTO 9982
9990  RETURN 
9999  END 
