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 >>JUSTIFY<<
1005  IF A[C1]=C1 THEN 1020
1010  PRINT "JUSTIFY is only permitted when ENVIRONMENT=TEXT."
1015  GOTO 1190
1020  IF M5 THEN 1200
1025  PRINT "No lines in WORK file."
1030  GOTO 1190
1035  PRINT "Missing or illegal range list"
1040  GOTO 1190
1045  PRINT "No lines in rangelist."
1190  GOSUB 9700
1195  RETURN 
1200  REM2 **JUSTIFY**
1205  G8=A[C3]-A[C2]+C1
1210  F8=H=C0
1215  IF V0#C2 THEN 1400
1300  REM2 * # *
1303  V0=C2
1306  B1=C0
1309  GOSUB 8300
1312  IF V5=C1 OR E THEN 1357
1315  X1=L
1318  X2=C0
1321  GOSUB 7200
1324  IF  NOT E THEN 1333
1327  PRINT "Line not found"
1330  GOTO 1303
1333  GOSUB 5300
1336  IF  NOT LEN(W$) OR LEN(W$)=G8 THEN 1360
1339  GOSUB 1800
1342  GOSUB 5360
1345  GOSUB 6800
1348  P2=A[C3]+C1
1351  GOSUB 3700
1354  GOTO 1303
1357  RETURN 
1360  IF  NOT V7 THEN 1303
1363  GOSUB 1820
1366  GOTO 1303
1400  REM2 *NEXT RANGE*
1405  F4=C2
1410  F2=C1
1415  GOSUB 4400
1420  W1$=A$
1425  IF  NOT E THEN 1500
1430  IF E=100 THEN 1465
1435  A$=W1$
1440  IF  NOT LEN(A$) THEN 1460
1445  IF A$[C1,C1]#"," THEN 1035
1450  A$=A$[C2]
1455  GOTO 1415
1460  IF  NOT F8 THEN 1045
1465  RETURN 
1500  REM2 *DO RANGE*
1505  B1=C0
1510  GOSUB 7600
1515  GOSUB 5300
1520  F8=F8+C1
1525  IF  NOT LEN(W$) THEN 1680
1530  IF LEN(W$)=G8 THEN 1680
1535  IF L1=E[C1] AND L1=B[C1] THEN 1595
1540  A1$=W$
1545  B2=L1
1550  GOSUB 7400
1555  IF E THEN 1680
1560  GOSUB 7600
1565  GOSUB 5300
1570  B3=L1
1575  IF  NOT LEN(W$) THEN 1645
1580  GOSUB 7300
1585  GOSUB 7600
1590  GOSUB 5300
1595  GOSUB 1800
1600  GOSUB 5360
1605  GOSUB 6800
1610  P2=A[C3]+C1
1615  GOSUB 3700
1620  IF SYS(C3) THEN 1695
1625  IF L1 >= E[C1] THEN 1435
1630  GOSUB 7400
1635  IF E THEN 9998
1640  GOTO 1510
1645  IF  NOT V7 THEN 1680
1650  W$=A1$
1655  L1=B2
1660  GOSUB 1820
1665  IF L1=E[C1] THEN 1435
1670  W$=""
1675  L1=B3
1680  GOSUB 1820
1685  B1=C0
1690  GOTO 1610
1695  RETURN 
1800  REM2 <PROC LINE>
1805  P0$=""
1810  IF  NOT LEN(W$) THEN 1820
1815  GOSUB 1900
1820  IF  NOT V7 THEN 1860
1825  X7=L1
1830  GOSUB 9900
1835  P0$=V1$
1840  P0$[LEN(P0$)+C1]=" "
1845  W6=LEN(P0$)
1850  P0$[W6+C1]=W$
1855  GOSUB 6400
1860  RETURN 
1900  REM2 <JUSTIFY>
1905  FOR B2=C1 TO LEN(W$)
1910  IF W$[B2,B2]#" " THEN 1925
1915  NEXT B2
1920  RETURN 
1925  IF  NOT POS(W$[B2]," ") THEN 2060
1930  IF B1 THEN 1990
1935  FOR I=LEN(W$) TO B2 STEP -C1
1940  IF W$[I,I]#" " THEN 1970
1945  A1$=W$[I]
1950  W$=W$[C1,I]
1955  W$[LEN(W$)+C1]=A1$
1960  I=I-C1
1965  IF LEN(W$)=G8 THEN 1980
1970  NEXT I
1975  GOTO 1935
1980  B1=C1
1985  RETURN 
1990  B4=C2
1995  I=B2
2000  IF W$[I,I]=" " THEN 2015
2005  I=I+C1
2010  GOTO 2040
2015  A1$=W$[I]
2020  W$=W$[C1,I]
2025  W$[LEN(W$)+C1]=A1$
2030  I=I+B4
2035  IF LEN(W$)=G8 THEN 2055
2040  IF I#LEN(W$) THEN 2000
2045  B4=B4+C1
2050  GOTO 1995
2055  B1=C0
2060  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,5307
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 
5360  REM <REPL W$>
5365  IF LEN(B$)>A[C3] THEN 5385
5370  GOSUB 5325
5375  B$=B$[C1,A[C2]-C1]
5380  GOTO 5390
5385  W$[LEN(W$)+C1,G8]=""
5390  B$[A[C2],A[C2]+LEN(W$)-C1]=W$
5395  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,5891
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 
6400  REM <PRT P0$>
6410  I=C1
6420  J=A[C9] MIN LEN(P0$)
6430  PRINT P0$[I,J]
6440  I=J+C1
6450  IF  NOT LEN(P0$[I]) THEN 6490
6460  J=(I+A[C9]-W6-C1) MIN LEN(P0$)
6470  PRINT TAB(W6);P0$[I,J]
6480  GOTO 6440
6490  RETURN 
6800  REM <REPL LI>
6805  GOTO L2 OF 6810,6820,6830,6840,6850
6810  L$=B$
6815  GOTO 6855
6820  M$=B$
6825  GOTO 6855
6830  N$=B$
6835  GOTO 6855
6840  O$=B$
6845  GOTO 6855
6850  P$=B$
6855  GOSUB 7800
6860  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 
7800  REM <WR REC>
7810  PRINT #1,L3;L7,L[C1],L$,L[C2],M$,L[C3],N$,L[C4],O$,L[C5],P$
7820  RETURN 
8300  REM <S IN>
8301  V8=C1
8302  J=SYS(C3)
8303  E=C0
8312  A$=""
8316  J0=W7=C0
8318  IF  NOT J0 THEN 8321
8319  P1$="????"
8320  GOTO 8327
8321  GOTO V0 OF 9998,8324,8326
8324  P1$="#"
8325  GOTO 8327
8326  P1$=":"
8327  IF V2=C2 AND  NOT W1 THEN 8376
8328  IF J0 THEN 8372
8329  GOTO V0 OF 9998,8372,8331
8331  I9=V7*(C8-(A[C1]=C2)*C3)+ NOT V7
8332  IF V1=I9 AND  NOT W5 OR  NOT V3 OR  NOT A[13] THEN 8362
8334  REM2 TABS
8336  SYSTEM J,"ECHO-OFF"
8338  PRINT  USING "#,"'34'9'27"2"'27"a"'34
8344  ENTER D0,J1,A1$
8346  IF A1$[C4,C6]#"000" THEN 8338
8348  A1$='27"&a  C"
8350  FOR J1=C1 TO A[13]
8351  IF V[C1,J1]<A[C2] THEN 8358
8352  CONVERT V[C1,J1]+I9-A[C2] TO J0$
8354  A1$[C6-LEN(J0$),C5]=J0$
8356  PRINT  USING "#,6A";A1$
8357  PRINT  USING "#,"'34'27"1"'34
8358  NEXT J1
8359  PRINT  USING "#,"'34'13'27"A"'27"J"'34
8360  SYSTEM J,"ECHO-ON"
8362  V1=I9
8364  W5=C0
8366  PRINT P0$;
8368  GOTO 8373
8372  PRINT P1$;
8373  LINPUT A1$
8374  GOTO 8420
8376  IF V6 THEN 8394
8380  ASSIGN U1$,U1,J, WR 
8382  IF J<C3 THEN 8388
8384  PRINT "USE file no longer accessible"
8386  GOTO 8984
8388  V6=C1
8390  READ #U1,W8
8392  ADVANCE #U1;W9,J
8394  GOTO TYP(U1) OF 8396,8400,8408
8396  PRINT "Number encountered in USE file."
8398  GOTO 8984
8400  READ #U1;A1$
8401  IF  NOT W3 THEN 8403
8402  PRINT P1$;A1$
8403  W8=REC(U1)
8404  W9=ITM(U1)
8406  GOTO 8420
8408  V2=W3=C1
8410  GOTO 8300
8420  IF LEN(A$)+LEN(A1$) <= 255 THEN 8426
8422  PRINT "Total line length exceeds 255 characters."
8424  GOTO 8984
8426  IF V0#C3 OR J0 THEN 8430
8428  A$=P0$[V9+C1,LEN(P0$)]
8429  P0$=P0$[C1,V9]
8430  IF  NOT LEN(A1$) THEN 8448
8432  A$[LEN(A$)+C1]=A1$
8434  IF A$[LEN(A$)]#"&" THEN 8448
8436  A$=A$[C1,LEN(A$)-C1]
8438  IF J0 OR LEN(A$) >= G8 THEN 8442
8440  W7=LEN(A$)+C1
8442  J0=C1
8444  V8=V8+C1
8446  GOTO 8318
8448  IF  NOT A[24] THEN 8464
8450  FOR J=C1 TO LEN(A$)
8452  J1=NUM(A$[J,J])
8454  IF J1 >= 32 AND J1 <= 126 THEN 8462
8456  IF J1=C9 AND A[13] THEN 8462
8458  PRINT "No control characters allowed."
8459  IF V0<C3 THEN 8984
8460  P0$[LEN(P0$)+C1]=A$[C1,J-C1]
8461  GOTO 8984
8462  NEXT J
8464  GOTO V0 OF 9998,8478,8466
8466  REM2 TEXT
8468  IF LEN(A$)-A[C7]*LEN(P0$[V9+C1,LEN(P0$)])>C0 THEN 8474
8470  V5=C1
8472  GOTO 8586
8474  V5=C2
8475  IF  NOT A[D0] THEN 8542
8476  IF A$[C1,C2]="//" THEN 8802
8477  GOTO 8542
8478  REM2 #
8480  GOSUB 9650
8482  IF  NOT A[D0] THEN 8490
8484  IF A$[C1,C2]="//" THEN 8802
8490  IF LEN(A$) THEN 8500
8492  IF  NOT SYS(C3) THEN 8534
8494  V0=V5=C1
8496  W1=C0
8498  RETURN 
8500  J3=C0
8502  FOR J1=C1 TO LEN(A$)
8504  J2=NUM(A$[J1,J1])
8506  IF J2 >= 48 AND J2 <= 57 THEN 8512
8508  IF J2#46 OR J3 THEN 8514
8510  J3=C1
8512  NEXT J1
8514  IF J1=C1 THEN 8534
8515  A1$=A$[C1,J1-C1]
8516  IF J1#LEN(A$)+C1 THEN 8522
8518  A$=""
8520  GOTO 8530
8522  IF J2=32 OR J2=58 THEN 8528
8524  PRINT "Missing space or colon after the line number."
8526  GOTO 8984
8528  A$=A$[J1+C1,LEN(A$)]
8530  GOSUB 6000
8532  IF F1 THEN 8538
8534  PRINT "Missing or illegal line number."
8536  GOTO 8984
8538  L=F1
8540  V5=C2
8542  GOSUB D=C3 OR D=C5 OF 9670
8546  IF  NOT A[13] OR  NOT LEN(A$) OR V0#C3 THEN 8576
8548  J3=POS(A$,'9)
8550  IF  NOT J3 THEN 8572
8551  J5=LEN(A$)
8552  FOR J1=C1 TO A[13]
8553  IF V[C1,J1]<A[C2] THEN 8558
8554  J4=V[C1,J1]-(D=26)*(V9-V1)-A[C2]+C1
8556  IF J3<J4 THEN 8564
8558  NEXT J1
8560  A$[J3]=A$[J3+C1,LEN(A$)]
8562  GOTO 8548
8564  A$=A$[C1,J4 MAX LEN(A$)]
8566  A$[J4]=A$[J3+C1,J5]
8568  A$[J3,J4-C1]=""
8570  GOTO 8548
8572  GOSUB D=C3 OR D=C5 OF 9670
8576  IF V0=C3 THEN 8586
8578  IF D=C3 OR D=C5 OR D=20 OR  NOT LEN(A$) THEN 8586
8580  PRINT "Type only the number of the line you want to "W0$"."
8582  GOTO 8984
8586  IF SYS(C3) THEN 8592
8588  V5=C3
8590  RETURN 
8592  IF V2=C2 AND  NOT W1 THEN 8984
8594  W1=C0
8596  V0=C1
8598  RETURN 
8802  REM2 //
8804  A$=A$[C3,LEN(A$)]
8806  FOR J=C1 TO LEN(A$)
8808  J0$=UOS$(A$[J,J])
8810  J1=NUM(J0$)
8812  IF J1<65 OR J1>90 THEN 8816
8814  NEXT J
8816  A1$=UOS$(A$[C1,J-C1])
8818  A$=A$[J,LEN(A$)]
8820  RESTORE 8822
8822  DATA 4,1,"HELP",2,"STOP",1,"ASK",1,"BREAK"
8824  GOSUB 9300
8828  IF K2 THEN 8862
8858  PRINT "Illegal or unpermitted //-command."
8860  GOTO 8984
8862  GOSUB 9650
8864  IF LEN(A$) AND K2#C3 THEN 8952
8866  GOTO K2 OF 8874,8924,8936,8970
8874  REM2 //H
8876  GOTO V0 OF 9998,8892,8912
8892  PRINT "Type the number of the line you want to "W0$;
8894  IF D#C3 AND D#C5 AND D#20 THEN 8908
8896  PRINT ", followed by a colon,"
8898  PRINT "and then the line, e.g.:"
8900  PRINT 
8902  PRINT "               # 150.4: Here is my line of text."
8904  PRINT 
8906  GOTO 8912
8908  PRINT "."
8910  GOTO 8914
8912  PRINT "Type the next line you want to "W0$"."
8914  PRINT "To terminate this operation, press the BREAK key before pressing RETURN."
8920  IF SYS(C3) AND V2=C2 AND  NOT W1 THEN 8984
8921  V8=V8+C1
8922  GOTO 8985
8924  REM2 //S
8925  IF D1=-C1 THEN 8935
8926  PRINT #C1,M3-C2;M7,M8,M9
8927  MAT  PRINT #C1,M3;M
8928  MAT  PRINT #C1,N3;N
8929  PRINT #C1,M3-C1; END 
8930  IF  NOT S0 THEN 8935
8932  ASSIGN *,C3
8934  PURGE I,S0$
8935  STOP 
8936  REM2 //A
8938  IF V0=C3 AND V2=C2 THEN 8944
8940  PRINT "//ASK cannot be used here."
8942  GOTO 8984
8944  V4=C2
8946  GOSUB 9800
8948  IF E THEN 8300
8950  IF  NOT LEN(A$) THEN 8956
8952  PRINT "Nothing permitted beyond the //"K1$" command."
8954  GOTO 8984
8956  IF LEN(A1$)<80 THEN 8962
8958  PRINT "The string in //ASK is too long."
8960  GOTO 8984
8962  P0$=A1$
8964  W1=C1
8966  V9=LEN(P0$)
8968  GOTO 8300
8970  REM2 //B
8972  IF V0=C1 THEN 8982
8974  IF SYS(C3) AND V2=C2 AND  NOT W1 THEN 8984
8976  W1=C0
8978  V0=V5=C1
8980  RETURN 
8982  PRINT "//BREAK cannot be used here."
8984  GOSUB 9700
8985  V8=V8+C2
8986  IF V0#C1 THEN 8302
8988  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 
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 
