1  COM A[25],V[2,10]
2  COM A$[255],A1$[255],B0$[5],D0$[255],F0$[1],F1$[11],S0$[6]
3  COM H0$[94],H1$[94],J0$[3],J1$[3],K1$[15],P0$[184],P1$[4]
4  COM N0$[1],U0$[11],U1$[11],V0$[10],V1$[10],W$[102],W0$[8],W1$[255],Z$[255]
5  COM C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,D0
6  COM D,D1,D2,F9,G,G0,G8,L,S0,V0,V1,V2,V3,V5,V7
7  COM W0,W1,W3,W5,W8,W9
10  COM L[5],M[64,2],N[64,2],P[2]
11  COM B$[94],L$[94],M$[94],N$[94],O$[94],P$[94]
12  COM L1,L2,L3,L4,L7,M1,M2,M3,M4,M5,M7,M8,M9,N1,N2,N3,N4
15  REM (C) COPYRIGHT  HEWLETT-PACKARD CO. 1976
16  REM ALL RIGHTS RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,
17  REM REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT THE
18  REM PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD CO.
50  FILES *,*
99  CHAIN "$EDITOR"
100  REM *ENTRY*
110  IF  ERROR  THEN 9998
120  ASSIGN U0$,C1,J, PR 
130  IF J THEN 9998
140  U0=V6=C0
145  D1=D
150  U1=C2
160  GOSUB 1000
165  W1=C0
170  A1$="EDIT00"
175  A1$[C7]=B0$
180  CHAIN J,A1$,100
190  GOTO 9998
1000  REMP >>KEEP<<
1005  U3=B5=H=C0
1010  B9=50
1015  FILES *
1020  IF M5 THEN 1040
1025  IF V2=C2 AND  NOT V7 THEN 1035
1030  PRINT "WORK file is empty."
1035  RETURN 
1040  H1=C2
1045  H4=C0
1050  IF POS(A$,",T") THEN 1105
1055  X1=-C1
1060  X2=C0
1065  GOSUB 7200
1070  E[C1]=L1
1075  X1=-C2
1080  X2=C0
1085  GOSUB 7200
1090  GOTO 1145
1095  F2=C1
1100  F4=C2
1105  GOSUB 4400
1110  IF  NOT E THEN 1130
1115  IF E=100 OR V2=C2 AND  NOT V7 THEN 1125
1120  PRINT "No lines in range."
1125  RETURN 
1130  IF A$[C1,C3]#",TO" THEN 1295
1135  A$=A$[C4,LEN(A$)]
1140  GOSUB 7600
1145  I=POS(A$,",")
1150  IF I THEN 1160
1155  I=LEN(A$)+C1
1160  IF I>C1 AND I<13 THEN 1175
1165  PRINT "Missing or illegal KEEP file name."
1170  GOTO 1715
1175  W$=A$[C1,I-C1]
1180  IF W$[C1,C1]#"#" THEN 1200
1185  GOSUB 1900
1190  IF E THEN 1165
1195  GOTO 1220
1200  IF W$#U0$ THEN 1215
1205  PRINT "You can't KEEP to your WORK file."
1210  GOTO 1715
1215  IF V2=C1 THEN 1235
1220  IF W$#U1$ THEN 1235
1225  PRINT "You can't KEEP to your USE file."
1230  GOTO 1715
1235  IF I=LEN(A$)+C1 THEN 1345
1240  A$=A$[I,LEN(A$)]
1245  IF A$[C1,C1]#"," THEN 1295
1250  A$=A$[C2,LEN(A$)]
1255  I=POS(A$,",")
1260  IF I THEN 1270
1265  I=LEN(A$)+C1
1270  A1$=A$[C1,I-C1]
1275  RESTORE 1280
1280  DATA 2,1,"UNNUMBERED",1,"APPEND"
1285  GOSUB 9300
1290  GOTO K2 OF 1305,1330
1295  PRINT "Illegal format"
1300  GOTO 1715
1305  IF A[C1]#C2 THEN 1320
1310  PRINT "UNNUMBERED is not permitted when ENVIRONMENT=BASIC."
1315  GOTO 1715
1320  H1=C3
1325  GOTO 1235
1330  IF U3 THEN 1295
1335  H4=C1
1340  GOTO 1235
1345  IF U3 THEN 2400
1350  A1$=W$
1355  J3=C3
1360  J4=C2
1365  GOSUB 9500
1370  IF E THEN 1735
1375  IF  NOT H4 THEN 1595
1380  IF J#C8 THEN 1395
1385  PRINT "APPEND with no prior KEEP."
1390  GOTO 1715
1395  IF  END #C3 THEN 1455
1400  J=C0
1405  IF U2 THEN 1425
1410  LINPUT #C3;A$
1415  J=C1
1420  GOTO 1410
1425  IF TYP(-C3)#C1 THEN 1440
1430  PRINT "Number encountered in KEEP file."
1435  GOTO 1715
1440  READ #C3;A$
1445  J=C1
1450  GOTO 1425
1455  IF  NOT J THEN 1595
1460  J=C0
1465  FOR J1=C1 TO LEN(A$)
1470  J2=NUM(A$[J1,J1])
1475  IF J2 >= 48 AND J2 <= 57 THEN 1490
1480  IF J2#46 OR J THEN 1495
1485  J=C1
1490  NEXT J1
1495  CONVERT A$[C1,J1-C1] TO X8,4177
1500  GOTO A[C1] OF 1505,1505,1515
1505  X8=X8*100
1510  GOTO 1530
1515  X8=X8*1000
1520  GOTO 1530
1525  X8=C0
1530  IF H1=C2 THEN 1560
1535  IF  NOT X8 OR V2=C2 THEN 1595
1540  PRINT "File "W$" contains numbered lines."
1545  P0$="Proceed with KEEP? "
1550  GOSUB 3300
1555  GOTO K2 OF 1595,1735
1560  IF X8 THEN 1575
1565  PRINT "KEEP will not append numbered to unnumbered text."
1570  GOTO 1715
1575  IF X8<L1 THEN 1595
1580  PRINT "KEEP will not replace or interleave lines."
1585  GOTO 1715
1590  REM2 *PRINT LINES*
1595  IF  END #C3 THEN 1680
1600  GOSUB 1800
1605  IF  NOT SYS(C3) THEN 1620
1610  PRINT #C3; END 
1615  GOTO 1685
1620  PRINT #C3;A$
1625  GOSUB 2100
1630  IF L1#E[C1] THEN 1660
1635  GOSUB 2200
1640  PRINT #C3; END 
1645  P2=A[C3]+C1
1650  GOSUB 3700
1655  GOTO 1735
1660  GOSUB 7400
1665  IF E THEN 9998
1670  GOSUB 7600
1675  GOTO 1600
1680  PRINT "KEEP file too short."
1685  X7=L1
1690  GOSUB 9900
1695  A$=V1$
1700  GOSUB 9650
1705  GOSUB 9670
1710  PRINT "Lines "A$" and beyond not kept."
1715  GOSUB 9700
1720  SYSTEM J,"ECHO-ON"
1725  P[C1]=L1
1730  P[C2]=A[C2]
1735  RETURN 
1800  REM2 <COMPOSE LINE>
1805  IF H1=C2 THEN 1830
1810  IF A[C1]#C3 THEN 1820
1815  B$[C1,C6]="      "
1820  A$=B$
1825  RETURN 
1830  X7=L1
1835  IF A[C1]#C3 THEN 1865
1840  A$="000000"
1845  CONVERT X7 TO A$[C1+(X7<100000.)+(X7<10000)+(X7<1000)+(X7<100)+(X7<10),C6]
1850  IF  NOT LEN(B$) THEN 1860
1855  A$[C7]=B$[C7,LEN(B$)]
1860  RETURN 
1865  GOSUB 9900
1870  A$=V1$
1875  GOSUB 9650
1880  GOSUB 9670
1885  A$[LEN(A$)+C1]=" "
1890  A$[LEN(A$)+C1]=B$
1895  RETURN 
1900  REM3 <#TC SYNTAX>
1905  E=U3=C0
1910  IF V3=C2 THEN 1925
1915  E=C1
1920  RETURN 
1925  IF W$#"#TCL" THEN 1940
1930  U3=C1
1935  RETURN 
1940  IF W$#"#TCR" THEN 1915
1945  U3=C2
1950  RETURN 
2000  REM2 <PRINT TO CART>
2005  E=C0
2010  PRINT P0$
2015  ENTER I,J,W$
2020  IF W$="S" THEN 2085
2025  P0$='27"&p ^"
2030  P0$[C4,C4]=I$
2035  PRINT P0$
2040  ENTER C2,J,W$
2045  IF J=-256 THEN 2060
2050  IF W$[C7,C7]="0" THEN 2070
2055  IF W$[C6,C6]="4" THEN 2080
2060  E=C1
2065  RETURN 
2070  E=C2
2075  RETURN 
2080  E=C3
2085  RETURN 
2100  REM2 <PROGRESS REPORT>
2105  B5=B5+C1
2110  IF B5<B9 THEN 2140
2115  CONVERT B9 TO A$
2120  IF B9=50 OR  NOT V3 THEN 2130
2125  PRINT '27"A"'27"J"'13;
2130  PRINT A$" lines kept."
2135  B9=B9+50
2140  RETURN 
2200  REM2 <FINAL REPORT>
2205  IF  NOT V3 OR B5<50 THEN 2215
2210  PRINT '27"A"'27"J"'13;
2215  CONVERT B5 TO A$
2220  A1$="s"
2225  IF B5#C1 THEN 2235
2230  A1$=""
2235  PRINT '7'7A$" line"A1$" kept to file "W$"."
2240  RETURN 
2300  REM2 *CART ERRS*
2305  GOTO E OF 2325,2310,2365
2310  PRINT "No tape in ";
2315  I=C0
2320  GOTO U3 OF 2340,2350
2325  PRINT "Transmission error or end of ";
2330  I=C1
2335  GOTO U3 OF 2340,2350
2340  PRINT "left cartridge."
2345  GOTO 2355
2350  PRINT "right cartridge."
2355  GOTO I OF 1685
2360  GOTO 2370
2365  PRINT "Cannot KEEP to a protected cartridge."
2370  SYSTEM J,"ECHO-ON"
2375  GOSUB 9700
2380  RETURN 
2400  REM3 *KEEP TO CART*
2405  SYSTEM J,"ECHO-OFF"
2410  CONVERT U3 TO I$
2415  P0$='27"&p u0C"
2420  P0$[C4,C4]=I$
2425  I=255
2430  GOSUB 2000
2435  IF E THEN 2305
2440  REM2 *DO RANGE*
2445  P0$='27"&p dW"
2450  P0$[C4,C4]=I$
2455  A$=""
2460  P0$=P0$[C1,C6]
2465  IF H1=C3 THEN 2500
2470  X7=L1
2475  GOSUB 9900
2480  A$=V1$
2485  GOSUB 9650
2490  GOSUB 9670
2495  A$[LEN(A$)+C1]=" "
2500  A$[LEN(A$)+C1]=B$
2505  IF SYS(C3) THEN 1685
2510  P0$[LEN(P0$)+C1]=A$
2515  I=C5
2520  GOSUB 2000
2525  IF E THEN 2305
2530  GOSUB 2100
2535  IF L1=E[C1] THEN 2560
2540  GOSUB 7400
2545  IF E THEN 9998
2550  GOSUB 7600
2555  GOTO 2455
2560  REM2 *WRITE EOF*
2565  P0$='27"&p u0C"
2570  P0$[C4,C4]=I$
2575  I=C5
2580  GOSUB 2000
2585  IF E THEN 2305
2590  SYSTEM J,"ECHO-ON"
2595  PRINT '7B5"lines kept."
2600  P2=A[C3]+C1
2605  GOSUB 3700
2610  RETURN 
3300  REM <YES/NO>
3305  J=SYS(C3)
3310  PRINT P0$;
3315  LINPUT A$
3320  IF SYS(C3) THEN 3370
3322  IF  NOT LEN(A$) THEN 3380
3325  IF LEN(A$)<C4 THEN 3340
3330  PRINT "Response limited to YES (or return) or NO (or break)."
3335  GOTO 3310
3340  A1$=UOS$(A$)
3345  RESTORE 3350
3350  DATA 2,1,"YES",1,"NO"
3355  GOSUB 9300
3360  IF  NOT K2 THEN 3330
3365  RETURN 
3370  K2=C2
3375  RETURN 
3380  K2=C1
3385  RETURN 
3700  REM <PTR>
3705  P[C1]=L1
3710  P2=(P2+A[C2]-C1) MAX A[C2]
3715  IF P2 <= A[C3] THEN 3755
3720  GOSUB 6300
3725  IF  NOT X9 THEN 3745
3730  P[C1]=X9
3735  P[C2]=A[C2]
3740  RETURN 
3745  P[C2]=A[C3]
3750  RETURN 
3755  P[C2]=P2
3760  RETURN 
4000  REM <RE E>
4005  X1=E[C1]
4010  X2=E[C2]
4015  IF X1=-C1 AND  NOT X2 THEN 4025
4020  F7=C0
4025  GOSUB 7200
4030  E[C2]=C0
4035  IF  NOT E THEN 4055
4040  IF  NOT L[L2] THEN 4065
4045  E[C2]=C1
4050  E=C0
4055  E[C1]=L[L2]
4060  RETURN 
4065  E=C1
4070  RETURN 
4100  REM <RE B>
4105  X1=B[C1]
4110  X2=B[C2]
4115  IF X1=-C2 AND  NOT X2 THEN 4125
4120  F7=C0
4125  GOSUB 7200
4130  B[C2]=C0
4135  IF  NOT E THEN 4155
4140  GOSUB 7400
4145  IF E THEN 4160
4150  B[C2]=C1
4155  B[C1]=L1
4160  RETURN 
4400  REM <RNG>
4401  F7=C1
4402  G6=P[C1]
4403  G7=P[C2]
4404  IF A$[C1,C1]#"A" THEN 4426
4405  GOSUB 5100
4406  RESTORE 4407
4407  DATA 1,1,"ALL"
4408  GOSUB 9300
4409  IF K2 THEN 4414
4410  PRINT "Illegal range"
4411  GOSUB 9700
4412  E=100
4413  GOTO 4494
4414  B[C1]=-C2
4416  E[C1]=-C1
4418  B[C2]=E[C2]=C0
4420  B[C3]=A[C2]
4422  E[C3]=A[C3]
4424  GOTO 4454
4426  GOSUB 4500
4427  IF E THEN 4498
4428  MAT B=Q
4429  I=NUM(A$)
4430  IF I#47 AND I#58 THEN 4474
4431  GOSUB 4100
4432  IF  NOT E THEN 4440
4433  I=POS(A$,",")
4434  IF I THEN 4437
4435  A$=""
4436  RETURN 
4437  A$=A$[I]
4438  RETURN 
4440  A$=A$[C2]
4441  I=NUM(A$)
4442  IF I#34 AND I#64 THEN 4446
4443  P[C1]=L1
4444  P[C2]=Q[C3]
4446  GOSUB 4500
4448  IF E THEN 4494
4450  MAT E=Q
4452  E[C3]=F5
4454  GOSUB 4000
4456  IF E THEN 4494
4458  X1=B[C1]
4460  X2=C0
4462  GOSUB 7200
4464  IF E THEN 4494
4466  B[C1]=L1
4468  IF B[C1]>E[C1] OR ((B[C1]=E[C1]) AND (B[C3]>E[C3])) THEN 4490
4470  IF E[C3]>A[C3] THEN 4410
4472  GOTO 4494
4474  F7=C0
4476  X1=B[C1]
4478  X2=B[C2]
4480  GOSUB 7200
4482  IF E THEN 4498
4484  B[C1]=E[C1]=L1
4486  E[C3]=F5
4488  GOTO 4470
4490  IF  NOT B[C2] OR  NOT E[C2] THEN 4410
4492  E=C1
4494  P[C1]=G6
4496  P[C2]=G7
4498  RETURN 
4500  REM <LPOS>
4502  MAT Q=ZER
4504  I=NUM(A$)
4506  IF I=34 OR I=64 THEN 4622
4508  GOSUB 4800
4514  IF E THEN 4594
4516  I=NUM(A$)
4518  IF I#43 AND I#45 THEN 4526
4520  GOSUB 4700
4522  IF E THEN 4594
4523  Q[C2]=F1
4524  Q[C3]=A[C2]
4525  F5=A[C3]
4526  IF A$[C1,C1]#"(" THEN 4636
4530  E=C6
4594  GOTO E OF 4634,4596,4600,4604,4608,4612,4604,4622,4604,4622,4622
4596  PRINT "Missing parameter in a position specification."
4598  GOTO 4632
4600  PRINT "Illegal line specification"
4602  GOTO 4632
4604  PRINT "Illegal relative specification"
4606  GOTO 4632
4608  PRINT "Position not found"
4610  GOTO 4632
4612  PRINT "Column specification not permitted here."
4614  GOTO 4632
4622  PRINT "String position not permitted here."
4632  GOSUB 9700
4634  E=100
4636  RETURN 
4700  REM <REL SPC>
4704  E=C0
4708  J1=C1
4712  IF A$[C1,C1]="+" THEN 4728
4716  IF Q[C1]=-C2 THEN 4768
4720  J1=-C1
4724  GOTO 4732
4728  IF Q[C1]=-C1 THEN 4768
4732  A$=A$[C2]
4736  GOSUB 5100
4740  IF J=43 OR J=45 THEN 4764
4744  IF  NOT LEN(A1$) THEN 4776
4748  IF POS(A1$,".") THEN 4768
4752  CONVERT A1$ TO F1,6558
4756  F1=F1*J1
4760  RETURN 
4764  A1$=A$[C1,C2]
4768  E=C4
4772  RETURN 
4776  E=C2
4780  RETURN 
4800  REM <REL L>
4805  E=C0
4810  GOSUB 5100
4815  IF J=41 THEN 4885
4820  IF  NOT LEN(A1$) THEN 4875
4825  I=NUM(A1$)
4830  IF I>47 AND I<58 OR I=46 THEN 4845
4835  GOSUB 5000
4840  RETURN 
4845  GOSUB 6000
4850  IF  NOT F1 THEN 4885
4855  Q[C1]=F1
4860  Q[C3]=A[C2]
4865  F5=A[C3]
4870  RETURN 
4875  E=C2
4880  RETURN 
4885  E=C3
4890  RETURN 
5000  REM <*FL>
5005  RESTORE 5010
5010  DATA 3,1,"*",1,"LAST",1,"FIRST"
5015  GOSUB 9300
5020  IF  NOT K2 THEN 5070
5025  Q[C2]=C0
5030  Q[C3]=A[C2]
5035  F5=A[C3]
5040  GOTO K2 OF 5045,5060,5060
5045  Q[C1]=P[C1]
5047  IF D#C7 AND D#C8 THEN 5055
5050  Q[C3]=F5=P[C2]
5055  RETURN 
5060  Q[C1]=-K2+C1
5065  RETURN 
5070  E=C4
5075  RETURN 
5100  REM <+-(),/:>
5110  FOR I=C1 TO LEN(A$)
5120  J=NUM(A$[I,I])
5130  IF J=40 OR J=41 OR (J>42 AND J<46) OR J=47 OR J=58 THEN 5150
5140  NEXT I
5150  A1$=A$[C1,I-C1]
5160  A$=A$[I]
5170  RETURN 
5300  REM <EXT>
5310  IF  NOT LEN(B$) OR LEN(B$)<A[C2] THEN 5340
5315  W$=B$[A[C2],A[C3] MIN LEN(B$)]
5325  FOR I=LEN(W$) TO C1 STEP -C1
5330  IF W$[I,I]#" " THEN 5350
5335  NEXT I
5340  W$=""
5345  RETURN 
5350  W$=W$[C1,I]
5355  RETURN 
6000  REM <L#>
6005  F1=POS(A1$,".")
6010  IF (A[C1]=C2 OR (A[C1]=C3 AND H)) AND F1 THEN 6050
6015  IF  NOT F1 THEN 6025
6020  IF LEN(A1$[F1])>C3+(A[C1]=C3) THEN 6050
6025  CONVERT A1$ TO F1,7074
6030  IF A[C1]=C3 AND H THEN 6040
6035  F1=INT(F1*100*(((A[C1]=C3)*D0) MAX C1)+.5)
6040  IF (A[C1]=C2 AND F1>999900.) OR F1>999999. OR F1 <= C0 THEN 6050
6045  RETURN 
6050  F1=C0
6055  RETURN 
6300  REM <NXT LI>
6305  IF L2=L7 THEN 6320
6310  X9=L[L2+C1]
6315  RETURN 
6320  IF N1=N2 THEN 6335
6325  X9=N[N1+C1,C1]
6330  RETURN 
6335  IF M1=M2 THEN 6350
6340  X9=M[M1+C1,C1]
6345  RETURN 
6350  X9=C0
6355  RETURN 
7200  REM <FIND LI>
7202  IF  NOT M5 THEN 7212
7204  GOTO X1+C3 OF 7216,7224,7238
7206  X=X1
7208  GOSUB 7500
7210  IF L4 THEN 7242
7212  E=C1
7214  RETURN 
7216  X=C0
7218  GOSUB 7500
7220  GOSUB 7400
7222  GOTO 7242
7224  X=M[M2,C1]
7226  GOSUB 7500
7228  X=N[N2,C1]
7230  GOSUB 7500
7232  X=L[L7]
7234  GOSUB 7500
7236  GOTO 7242
7238  X=P[C1]
7240  GOSUB 7500
7242  FOR J5=C1 TO ABS(X2)
7244  GOSUB (X2>C0)+C1 OF 7300,7400
7246  IF E THEN 7254
7248  NEXT J5
7250  GOSUB 7600
7252  E=C0
7254  RETURN 
7300  REM <RD PR L>
7304  IF L2=C1 THEN 7328
7308  IF  NOT L[L2-C1] THEN 7376
7312  L2=L2-C1
7316  L1=L[L2]
7320  E=C0
7324  RETURN 
7328  IF N1=C1 THEN 7340
7332  X=N[N1-C1,C1]
7336  GOTO 7356
7340  IF M1=C1 THEN 7376
7344  X=M[M1-C1,C1]
7348  GOSUB 7500
7352  X=N[N2,C1]
7356  GOSUB 7500
7360  L1=L[L7]
7364  L2=L7
7368  E=C0
7372  RETURN 
7376  E=C1
7380  RETURN 
7400  REM <RD NEXT LI>
7405  IF L2=L7 THEN 7430
7410  L2=L2+C1
7415  L1=L[L2]
7420  E=C0
7425  RETURN 
7430  IF N1=N2 THEN 7445
7435  X=N[N1+C1,C1]
7440  GOTO 7455
7445  IF M1=M2 THEN 7470
7450  X=M[M1+C1,C1]
7455  GOSUB 7500
7460  E=C0
7465  RETURN 
7470  E=C1
7475  RETURN 
7500  REM <RD DIR>
7502  IF X >= L[C1] AND X <= L[L7] THEN 7554
7504  IF X >= N[C1,C1] AND X <= N[N2,C1] THEN 7532
7506  I1=C1
7508  I2=M2+C1
7510  M1=INT((I1+I2)/C2)
7512  GOTO SGN(X-M[M1,C1])+C2 OF 7514,7524,7518
7514  I2=M1
7516  GOTO 7510
7518  IF I2-M1=C1 THEN 7524
7520  I1=M1
7522  GOTO 7510
7524  IF M[M1,C2]=N3 THEN 7532
7526  N3=M[M1,C2]
7528  MAT  READ #C1,N3;N[64,C2]
7530  N2=N[64,C1]
7532  I1=C1
7534  I2=N2+C1
7536  N1=INT((I1+I2)/C2)
7538  GOTO SGN(X-N[N1,C1])+C2 OF 7540,7550,7544
7540  I2=N1
7542  GOTO 7536
7544  IF I2-N1=C1 THEN 7550
7546  I1=N1
7548  GOTO 7536
7550  L3=N[N1,C2]
7552  GOSUB 7700
7554  L1=X
7556  FOR L2=C1 TO L7
7558  GOTO SGN(X-L[L2])+C2 OF 7562,7568,7560
7560  NEXT L2
7562  L2=L2-C1
7564  L4=C0
7566  RETURN 
7568  L4=C1
7570  RETURN 
7600  REM <GET B$>
7605  GOTO L2 OF 7610,7620,7630,7640,7650
7610  B$=L$
7615  RETURN 
7620  B$=M$
7625  RETURN 
7630  B$=N$
7635  RETURN 
7640  B$=O$
7645  RETURN 
7650  B$=P$
7655  RETURN 
7700  REM <RD REC>
7710  READ #1,L3;L7,L[C1],L$,L[C2],M$,L[C3],N$,L[C4],O$,L[C5],P$
7720  RETURN 
9300  REM <KEY>
9310  READ J
9320  FOR K2=C1 TO J
9330  READ J1,K1$
9340  IF LEN(A1$)<J1 THEN 9360
9350  IF A1$=K1$[C1,LEN(A1$)] THEN 9380
9360  NEXT K2
9370  K2=C0
9380  RETURN 
9500  REM <ASSN>
9504  ASSIGN A1$,J3,J, PR 
9508  GOTO J+C1 OF 9564,9512,9512,9524,9998,9998,9532,9532,9540
9512  IF J4=C1 THEN 9564
9516  PRINT "File "A1$" is not available for writing."
9520  GOTO 9548
9524  PRINT "File "A1$" does not exist, or is not accessible."
9528  GOTO 9548
9532  PRINT "File "A1$" is in use by someone else."
9536  GOTO 9548
9540  IF J4=C2 THEN 9564
9544  PRINT "File "A1$" is not available for reading."
9548  GOSUB 9700
9552  RETURN 
9564  IF  ERROR  THEN 9584
9568  READ #J3,C1
9572  IF  ERROR  THEN 9998
9576  U2=C1
9580  GOTO 9592
9584  IF  ERROR  THEN 9998
9588  U2=C0
9592  E=C0
9596  RETURN 
9650  REM <TLEB>
9652  FOR J=C1 TO LEN(A$)
9654  IF A$[J,J]#" " THEN 9658
9656  NEXT J
9658  A$=A$[J,LEN(A$)]
9660  RETURN 
9670  REM <TTB>
9672  FOR J=LEN(A$) TO C1 STEP -C1
9674  IF A$[J,J]#" " THEN 9678
9676  NEXT J
9678  A$=A$[C1,J]
9680  RETURN 
9700  REM <ERR>
9710  E=C1
9720  Z$=""
9730  IF V2#C2 OR W1 THEN 9760
9740  PRINT "USE file abandoned."
9750  V0=V2=W3=C1
9760  RETURN 
9800  REM <GET NEXT STR>
9805  V0$=A$[C1,C1]
9810  IF V0$='34 THEN 9835
9815  IF V0$="@" THEN 9840
9820  PRINT "Missing or illegal string."
9825  GOSUB 9700
9830  RETURN 
9835  V4=C1
9840  J1=C2
9845  J2=POS(A$[J1],V0$)+J1-C1
9850  IF J2=J1-C1 THEN 9820
9855  IF A$[J2+C1,J2+C1]#V0$ THEN 9875
9860  A$[J2]=A$[J2+C1]
9865  J1=J2+C1
9870  GOTO 9845
9875  A1$=A$[C2,J2-C1]
9880  A$=A$[J2+C1,LEN(A$)]
9885  E=C0
9890  RETURN 
9900  REM <CON LI #>
9903  V1$="    "
9906  IF A[C1]=C3 THEN 9933
9909  J1=INT(X7/100)
9912  IF  NOT J1 THEN 9924
9915  CONVERT J1 TO V0$
9918  V1$[C5-LEN(V0$)]=V0$
9921  IF A[C1]=C2 THEN 9972
9924  V1$[C5]=".0"
9927  CONVERT X7-J1*100 TO V0$
9930  GOTO 9951
9933  J1=INT(X7/1000)
9936  IF  NOT J1 THEN 9945
9939  CONVERT J1 TO V0$
9942  V1$[C4-LEN(V0$)]=V0$
9945  V1$[C4]=".00"
9948  CONVERT X7-J1*1000 TO V0$
9951  V1$[C8-LEN(V0$)]=V0$
9954  FOR J1=C7 TO C1 STEP -C1
9957  IF V1$[J1,J1]#"0" THEN 9963
9960  NEXT J1
9963  IF V1$[J1,J1]#"." THEN 9969
9966  J1=J1-C1
9969  V1$[J1+C1,C7]=""
9972  RETURN 
9990  REM <ERR>
9991  M4=SYS(C0)
9992  N4=SYS(C1)
9993  A1$="EDIT31"
9994  A1$[C7]=B0$
9995  CHAIN J,A1$,100
9996  PRINT A1$" is missing.  ERROR"
9997  STOP 
9998  GOTO 9991
9999  END 
