10  REM ** UNIX ** ED - EDITOR SIMULATED IN HP 2000 BASIC
20  IF  ERROR  THEN 9620
30  Z9=BRK(0)
40  FILES *,*,*,*
70  DEF FNN()=(+1)*( <> L5)
80  DEF FNP()=(-1)*( <> 0)+L5*(=0)
90  DEF FNF()=(+1)*( <> L5)+(=L5)
100  DEF FNR()=(-1)*( <> 1)+L5*(=1)
110  DIM L$[128],P0$[255],D$[62],C$[30],T$[255],T1$[255],T0$[255]
120  DIM F$[13],F0$[13],F1$[13],N$[255],E$[30],S$[255],P1$[255],Q$[255]
130  D$="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
140  C$="?%$*[]@^#/"'92"&LC"
150  E$="PADIC=MSRWEQFNVK"
160  F5=F6=F7=K1=K2=K3=0
170  L9=200
180  GOSUB 6650
190  IF  NOT F5 THEN 220
200  CONVERT L4 TO T1$
210  PRINT T1$;
220  PRINT ">";
230  LINPUT L$
240  I=1
250  C=0
260  L6=L4
270  GOSUB 610
280  IF S1 THEN 360
290  GOSUB 8270
300  IF S1 THEN 330
310  GOSUB 8570
320  GOTO 350
330  IF S1=1 THEN 370
340  GOSUB 420
350  IF  NOT S1 THEN 190
360  IF S1=2 THEN 400
370  PRINT "?"
380  L4=L6
390  GOTO 190
400  GOSUB 6750
410  END 
420  REM!   DOCMD
430  S1=1
440  F0=F1=0
450  IF I <= LEN(L$) THEN 530
460  IF L3 THEN 490
470  L3=2
480  L1=L2=FNN(L4)
490  GOSUB 3740
500  RETURN 
510  S1=1
520  F0=F1=0
530  T1$=UOS$(L$[I,I])
540  C=POS(E$,T1$)
550  GOSUB C OF 3740,3940,4070,4290,4360,4450,4510,5040,7350,7610,8110,8200,8000
560  GOSUB C-13 OF 8820,9390,9220
570  IF S1 OR F1 <> 1 THEN 600
580  L3=0
590  GOSUB 3740
600  RETURN 
610  REM!   GETLST
620  L2=L3=0
630  GOSUB 820
640  IF S1 THEN 730
650  L1=L2
660  L2=N1
670  L3=L3+1
680  IF L$[I,I]="," THEN 710
690  IF L$[I,I] <> ";" THEN 730
700  L4=N1
705  L2=L3=0
710  I=I+1
720  GOTO 630
730  L3=L3 MIN 2
740  IF L3 THEN 760
750  L2=L4
760  IF L3>1 THEN 780
770  L1=L2
780  IF L1 <= L2 AND L1 >= 0 AND L2 >= 0 THEN 800
790  S1=1
800  S1=(S1=1)
810  RETURN 
820  REM!  GETONE
830  I1=I
840  N1=0
850  GOSUB 1280
860  GOSUB 1040
870  IF S1 THEN 1010
880  N1=P1
890  GOSUB 1280
900  M1=1
910  IF L$[I,I]="+" THEN 960
920  IF L$[I,I]="-" THEN 950
930  S1=2
940  GOTO 1010
950  M1=-1
960  I=I+1
970  GOSUB 1280
980  GOSUB 1040
990  N1=N1+M1*P1*(S1=0)
1000  IF  NOT S1 THEN 890
1010  S1=(S1 <> 1 AND (N1<0 OR N1>L5))+(S1=1)
1020  S1=2*(S1 <> 1 AND I <= I1)+(S1=1)
1030  RETURN 
1040  REM!  GETNUM
1050  S1=0
1060  IF POS("0123456789",L$[I,I])=0 THEN 1130
1070  T=I
1080  T=T+1
1090  IF POS("0123456789",L$[T,T])>0 THEN 1080
1100  CONVERT L$[I,T-1] TO P1
1110  I=T-1
1120  GOTO 1260
1130  IF L$[I,I] <> "." THEN 1160
1140  P1=L4
1150  GOTO 1260
1160  IF L$[I,I] <> "$" THEN 1190
1170  P1=L5
1180  GOTO 1260
1190  IF  NOT POS(C$[10,11],L$[I,I]) THEN 1250
1200  GOSUB 1330
1210  IF S1 THEN 1260
1220  T1=POS(C$[10,11],L$[I,I])-1
1230  GOSUB 1500
1240  GOTO 1260
1250  S1=2
1260  I=I+(S1=0)
1270  RETURN 
1280  REM!  SKPBL
1290  IF NUM(L$[I,I]) <> 9 AND NUM(L$[I,I]) <> 32 OR I>LEN(L$) THEN 1320
1300  I=I+1
1310  GOTO 1290
1320  RETURN 
1330  REM!  OPTPAT
1340  IF I<LEN(L$) THEN 1370
1350  I=-1
1360  GOTO 1440
1370  IF L$[I+1,I+1] <> L$[I,I] THEN 1400
1380  I=I+1
1390  GOTO 1440
1400  T0$=L$[I,I]
1410  I=I+1
1420  GOSUB 1630
1430  IF  NOT LEN(P0$) THEN 1480
1440  IF I=-1 THEN 1470
1450  S1=0
1460  RETURN 
1470  P0$=""
1480  S1=1
1490  RETURN 
1500  REM! PTSCAN
1510  Z9=SYS(3)
1520  P1=L4
1530  P1=T1*FNP(P1)+( NOT T1)*FNN(P1)
1540  L=P1
1550  IF ABS(P1-L4)=1 OR ABS(P1-L4)=L5 OR  NOT L5 THEN 1590
1560  N0= NOT T1*N9+T1*P9
1570  GOSUB 6500
1580  GOTO 1600
1590  GOSUB 6470
1600  GOSUB 2860
1610  IF P1 <> L4 AND S1 AND  NOT SYS(3) THEN 1530
1620  RETURN 
1630  REM! MAKPAT
1640  J2=1
1650  F1=I
1660  P0$=""
1670  L0=F4=0
1680  IF L$[I,I]=T0$ THEN 2010
1690  IF I>LEN(L$) THEN 1990
1700  J1=LEN(P0$)+1
1710  T=POS(C$[1,5],L$[I,I])
1720  IF T THEN 1790
1730  P0$[LEN(P0$)+1]="a"
1740  GOSUB 2240
1750  P0$[LEN(P0$)+1]=T1$
1760  J2=J1
1770  I=I+1
1780  GOTO 1680
1790  F4=1
1800  GOTO T OF 1820,1840,1870,1930,1900
1810  STOP 
1820  P0$[LEN(P0$)+1]="?"
1830  GOTO 1760
1840  IF I <> F1 THEN 1730
1850  P0$[LEN(P0$)+1]="%"
1860  GOTO 1760
1870  IF L$[I+1,I+1] <> T0$ THEN 1730
1880  P0$[LEN(P0$)+1]="$"
1890  GOTO 1760
1900  GOSUB 2080
1910  IF S3 THEN 1980
1920  GOTO 1760
1930  IF I <= F1 THEN 1730
1940  J1=J2
1950  IF POS(C$[2,4],P0$[J1,J1]) THEN 1980
1960  GOSUB 2430
1970  GOTO 1760
1980  IF L$[I,I]=T0$ THEN 2010
1990  I=-1
2000  RETURN 
2010  IF F4 OR C=8 THEN 2070
2020  P1$=L$[F1,I-1]
2030  T=POS(P1$,C$[7,7])
2040  IF  NOT T THEN 2070
2050  P1$[T]=P1$[T+1]
2060  GOTO 2030
2070  RETURN 
2080  REM!   GETCCL
2090  I=I+1
2100  IF L$[I,I] <> C$[9,9] THEN 2140
2110  P0$[LEN(P0$)+1]="n"
2120  I=I+1
2130  GOTO 2150
2140  P0$[LEN(P0$)+1]="["
2150  J0=LEN(P0$)+1
2160  P0$[LEN(P0$)+1]=CHR$(0)
2170  GOSUB 2530
2180  P0$[J0,J0]=CHR$(LEN(P0$)-J0)
2190  IF L$[I,I] <> C$[6,6] THEN 2220
2200  S3=0
2210  RETURN 
2220  S3=1
2230  RETURN 
2240  REM!   ESC
2250  IF L$[I,I]=C$[7,7] THEN 2280
2260  T1$=L$[I,I]
2270  RETURN 
2280  IF LEN(L$)>I THEN 2310
2290  T1$=C$[7,7]
2300  RETURN 
2310  I=I+1
2320  IF L$[I,I] <> C$[8,8] THEN 2350
2330  T1$='13'10
2340  RETURN 
2350  IF L$[I,I] <> C$[13,13] THEN 2380
2360  T1$='10
2370  RETURN 
2380  IF L$[I,I] <> C$[14,14] THEN 2410
2390  T1$='13
2400  RETURN 
2410  T1$=L$[I,I]
2420  RETURN 
2430  REM!   STCLOS
2440  REM  RETURNS  LASTCL AS VALUE
2450  T1$=P0$[J2]
2460  P0$[J2]="*"
2470  P0$[LEN(P0$)+1]=CHR$(0)
2480  P0$[LEN(P0$)+1]=CHR$(L0)
2490  P0$[LEN(P0$)+1]=CHR$(0)
2500  P0$[LEN(P0$)+1]=T1$
2510  L0=J2
2520  RETURN 
2530  REM!   FILSET
2540  IF L$[I,I]=C$[6,6] THEN 2780
2550  IF I>LEN(L$) THEN 2780
2560  IF L$[I,I] <> C$[7,7] THEN 2600
2570  GOSUB 2240
2580  P0$[LEN(P0$)+1]=T1$
2590  GOTO 2760
2600  IF L$[I,I]="-" THEN 2630
2610  P0$[LEN(P0$)+1]=L$[I,I]
2620  GOTO 2760
2630  IF LEN(P0$)>1 AND I<LEN(L$) THEN 2660
2640  P0$[LEN(P0$)+1]="-"
2650  GOTO 2760
2660  IF  NOT (POS(D$[1,10],L$[I-1,I-1]) AND POS(D$[1,10],L$[I+1,I+1])) THEN 2690
2670  GOSUB 2790
2680  GOTO 2760
2690  IF  NOT (POS(D$[11,36],L$[I-1,I-1]) AND POS(D$[11,36],L$[I+1,I+1])) THEN 2720
2700  GOSUB 2790
2710  GOTO 2760
2720  IF  NOT (POS(D$[37,62],L$[I-1,I-1]) AND POS(D$[37,62],L$[I+1,I+1])) THEN 2750
2730  GOSUB 2790
2740  GOTO 2760
2750  P0$[LEN(P0$)+1]="-"
2760  I=I+1
2770  GOTO 2540
2780  RETURN 
2790  REM!   DODASH
2800  I=I+1
2810  T=POS(D$,L$[I-2,I-2])
2820  T1=POS(D$,L$[I,I])
2830  IF T>T1 THEN 2850
2840  P0$[LEN(P0$)]=D$[T,T1]
2850  RETURN 
2860  REM!   MATCH
2870  P=S1=0
2880  IF F4 THEN 2910
2890  S1= NOT (POS(T$,P1$))
2900  GOTO 2970
2910  P=P+1
2920  IF P>LEN(T$)+1 THEN 2960
2930  IF NUM(P0$[1,1])=97 AND NUM(T$[P,P]) <> NUM(P0$[2,2]) THEN 2910
2940  GOSUB 2980
2950  IF S1=0 THEN 2910
2960  S1=(S1=0)
2970  RETURN 
2980  REM!   AMATCH
2990  S2=0
3000  O=P
3010  J=1
3020  IF J>LEN(P0$) THEN 3300
3030  IF P0$[J,J] <> "*" THEN 3140
3040  S2=J
3050  J=J+4
3060  I2=O
3070  IF I2>LEN(T$) THEN 3100
3080  GOSUB 3470
3090  IF  NOT S1 THEN 3070
3100  P0$[S2+1,S2+1]=CHR$(I2-O)
3110  P0$[S2+3,S2+3]=CHR$(O)
3120  O=I2
3130  GOTO 3270
3140  I2=O
3150  GOSUB 3470
3160  O=I2
3170  IF  NOT S1 THEN 3270
3180  IF S2 <= 0 THEN 3220
3190  IF NUM(P0$[S2+1,S2+1])>0 THEN 3240
3200  S2=NUM(P0$[S2+2,S2+2])
3210  GOTO 3180
3220  S1=0
3230  RETURN 
3240  P0$[S2+1,S2+1]=CHR$(NUM(P0$[S2+1,S2+1])-1)
3250  J=S2+4
3260  O=NUM(P0$[S2+3,S2+3])+NUM(P0$[S2+1,S2+1])
3270  GOSUB 3320
3280  J=J+N0
3290  GOTO 3020
3300  S1=O
3310  RETURN 
3320  REM!   PATSIZ
3330  IF P0$[J,J] <> "a" THEN 3360
3340  N0=2
3350  RETURN 
3360  IF  NOT POS(C$[1,3],P0$[J,J]) THEN 3390
3370  N0=1
3380  RETURN 
3390  IF P0$[J,J]="n" THEN 3410
3400  IF P0$[J,J] <> "[" THEN 3430
3410  N0=NUM(P0$[J+1,J+1])+2
3420  RETURN 
3430  IF P0$[J,J] <> "*" THEN 3460
3440  N0=4
3450  RETURN 
3460  STOP 
3470  REM!   OMATCH
3480  S1=3
3490  IF I2>LEN(T$)+(POS("%$",P0$[J,J])) THEN 3730
3500  T3=-1
3510  GOTO POS("a%?$[n",P0$[J,J]) OF 3530,3560,3590,3610,3640,3670
3520  STOP 
3530  IF T$[I2,I2] <> P0$[J+1,J+1] THEN 3730
3540  T3=1
3550  GOTO 3710
3560  IF I2 <> 1 THEN 3730
3570  T3=0
3580  GOTO 3710
3590  T3=1
3600  GOTO 3710
3610  IF I2 <= LEN(T$) THEN 3730
3620  T3=0
3630  GOTO 3710
3640  IF  NOT POS(P0$[J+2,J+1+NUM(P0$[J+1,J+1])],T$[I2,I2]) THEN 3730
3650  T3=1
3660  GOTO 3710
3670  IF I2>LEN(T$) THEN 3730
3680  IF POS(P0$[J+2,J+1+NUM(P0$[J+1,J+1])],T$[I2,I2]) THEN 3730
3690  T3=1
3700  GOTO 3710
3710  I2=I2+T3
3720  S1=0
3730  RETURN 
3740  REM!   DOPRNT
3750  S1=1
3760  Z9=SYS(3)
3770  IF L3 THEN 3790
3780  L1=L2=L4
3790  IF L1 <= 0 THEN 3930
3800  FOR L=L1 TO L2
3810  GOSUB 6470
3820  IF  NOT F5 THEN 3870
3830  CONVERT L TO T1$
3840  T0$="00000"
3850  T0$[6-LEN(T1$)]=T1$
3860  PRINT T0$;": ";
3870  PRINT T$
3880  IF SYS(3) THEN 3910
3890  NEXT L
3900  L=L-1
3910  L4=L
3920  S1=0
3930  RETURN 
3940  REM!   APPEND
3950  IF I >= LEN(L$) THEN 3980
3960  S1=1
3970  RETURN 
3980  L4=L2
3990  S1=0
4000  LINPUT N$
4010  IF N$="." THEN 4050
4020  GOSUB 6130
4030  F7=1
4040  IF  NOT S1 THEN 4000
4050  F7=0
4060  RETURN 
4070  REM!   DELETE
4080  I=I+1
4090  GOSUB 6020
4100  IF L3 THEN 4120
4110  L1=L2=L4
4120  IF L1>0 THEN 4150
4130  S1=1
4140  RETURN 
4150  N0=FNP(L1)
4160  L4=N0
4170  GOSUB 6890
4180  K1=N0
4190  N0=FNN(L2)
4200  GOSUB 6890
4210  K2=N0
4220  L5=L5-(L2-L1+1)
4230  T1=T3=K1
4240  T2=T4=K2
4250  GOSUB 6790
4260  S1=0
4270  N8=(N8 <> 0)*(N8-L2+L1-1)
4280  RETURN 
4290  REM!   INSERT
4300  IF I=LEN(L$) THEN 4330
4310  S1=1
4320  RETURN 
4330  L2=FNP(L2)
4340  GOSUB 3940
4350  RETURN 
4360  REM!   CHANGE
4370  IF I=LEN(L$) THEN 4400
4380  S1=1
4390  RETURN 
4400  GOSUB 4070
4410  IF S1 THEN 4440
4420  L1=L2=FNP(L1)
4430  GOSUB 3940
4440  RETURN 
4450  REM!   PRINTCURRENT
4460  I=I+1
4470  GOSUB 6020
4480  PRINT L2
4490  S1=0
4500  RETURN 
4510  REM!   MOVE
4520  I=I+1
4530  GOSUB 820
4540  S1=(S1 <> 0)
4550  IF S1 THEN 5030
4560  GOSUB 6020
4570  IF L3 THEN 4590
4580  L1=L2=L4
4590  IF L1 AND (L1>N1 OR N1>L2) THEN 4620
4600  S1=1
4610  RETURN 
4620  N0=FNP(L1)
4630  GOSUB 6890
4640  K0=N0
4650  N0=FNN(L2)
4660  GOSUB 6890
4670  K3=N0
4680  N0=L1
4690  GOSUB 6890
4700  K1=N0
4710  N0=L2
4720  GOSUB 6890
4730  K2=N0
4740  T1=T3=K0
4750  T2=T4=K3
4760  GOSUB 6790
4770  N8=0
4780  L5=L5-(L2-L1+1)
4790  IF N1 <= L1 THEN 4830
4800  L4=N1
4810  N1=N1-(L2-L1+1)
4820  GOTO 4840
4830  L4=N1+(L2-L1+1)
4840  N0=N1
4850  GOSUB 6890
4860  K4=N0
4870  N0=FNN(N1)
4880  GOSUB 6890
4890  K5=N0
4900  T1=K4
4910  T2=K1
4920  T3=K2
4930  T4=K5
4940  GOSUB 6790
4950  T1=K2
4960  T2=K5
4970  T3=K4
4980  T4=K1
4990  GOSUB 6790
5000  L5=L5+(L2-L1+1)
5010  N8=(N8 <> 0)*(N8+L2-L1+1)
5020  S1=0
5030  RETURN 
5040  REM!   SUBSTITUTE
5050  Z9=SYS(3)
5060  I=I+1
5070  GOSUB 1330
5080  IF S1 THEN 5730
5090  GOSUB 5740
5100  IF S1 THEN 5730
5110  I=I+1
5120  GOSUB 6020
5130  IF S1 THEN 5730
5140  IF L3 THEN 5160
5150  L1=L2=L4
5160  S3=1
5170  IF L1 <= 0 THEN 5720
5180  L=L1
5190  IF L>L2 OR SYS(3) THEN 5720
5200  S4=0
5210  N$=""
5220  GOSUB 6470
5230  L0=0
5240  P=1
5250  IF P>LEN(T$)+1 THEN 5470
5260  M=0
5270  IF  NOT F2 AND S4 THEN 5410
5280  IF NUM(P0$[1,1])=97 AND NUM(T$[P,P]) <> NUM(P0$[2,2]) THEN 5410
5290  GOSUB 2980
5300  M=S1
5310  IF M <= 0 OR L0=M THEN 5410
5320  S4=1
5330  T=POS(S$,"&")
5340  IF  NOT T THEN 5390
5350  T1$=S$[T+1]
5360  S$[T]=T$[P,M-1]
5370  S$[LEN(S$)+1]=T1$
5380  GOTO 5330
5390  N$[LEN(N$)+1]=S$
5400  L0=M
5410  IF  NOT M OR M=P THEN 5440
5420  P=M
5430  GOTO 5250
5440  N$[LEN(N$)+1]=T$[P,P]
5450  P=P+1
5460  GOTO 5250
5470  IF  NOT S4 THEN 5700
5480  T5=L1
5490  T6=L2
5500  L3=2
5510  L1=L2=L
5520  N$=N$[1,LEN(N$)-1]
5530  IF POS('13'10,N$[1,2]) AND LEN(N$) <> 2 THEN 5600
5540  IF LEN(N$)=2 OR  NOT POS('13'10,N$[LEN(N$)-1]) THEN 5650
5550  N0=FNF(L)
5560  GOSUB 6490
5570  N$[LEN(N$)-1]=T$
5580  L2=FNF(L)
5590  GOTO 5650
5600  N0=FNR(L)
5610  GOSUB 6490
5620  T$[LEN(T$)+1]=N$[3]
5630  N$=T$
5640  L1=FNR(L)
5650  GOSUB 4100
5660  L1=T5
5670  L2=T6
5680  GOSUB 6130
5690  S3=0
5700  L=L+1
5710  GOTO 5190
5720  S1=S3
5730  RETURN 
5740  REM!   GETRHS
5750  S1=1
5760  IF I+1>LEN(L$) THEN 5880
5770  T0$=L$[I,I]
5780  I=I+1
5790  GOSUB 5890
5800  IF I=-1 THEN 5880
5810  T1$=UOS$(L$[I+1,I+1])
5820  IF T1$="G" THEN 5850
5830  F2=0
5840  GOTO 5870
5850  I=I+1
5860  F2=1
5870  S1=0
5880  RETURN 
5890  REM!   MAKSUB
5900  S$=""
5910  IF L$[I,I]=T0$ THEN 6010
5920  IF I>LEN(L$) THEN 6000
5930  IF L$[I,I] <> C$[12,12] THEN 5960
5940  S$[LEN(S$)+1]="&"
5950  GOTO 5980
5960  GOSUB 2240
5970  S$[LEN(S$)+1]=T1$
5980  I=I+1
5990  GOTO 5910
6000  I=-1
6010  RETURN 
6020  REM!   CKP
6030  IF I>LEN(L$) THEN 6080
6040  F1=0
6050  T1$=UOS$(L$[I,I])
6060  IF T1$ <> "P" THEN 6080
6070  F1=1
6080  RETURN 
6090  REM!   SEEK(N0)
6100  READ #1,INT(N0)+1
6110  ADVANCE #1;(N0-INT(N0))*1000,Z9
6120  RETURN 
6130  REM!   INJECT(N$)
6140  G=0
6150  IF  END #1 THEN 8930
6160  J=POS(N$,'13'10)
6170  K1=K3
6180  IF J THEN 6210
6190  T1$=N$
6200  GOTO 6230
6210  T1$=N$[1,J-1]
6220  N$=N$[(J+2) MIN LEN(N$)]
6230  IF F7 THEN 6300
6240  N0=L4
6250  GOSUB 6890
6260  K1=N0
6270  N0=FNN(L4)
6280  GOSUB 6890
6290  K2=N0
6300  N0=E
6310  GOSUB 6090
6320  P9=K1
6330  N9=K2
6340  PRINT #1;P9,N9,G,T1$, END 
6350  K3=E
6360  E=REC(1)-1+ITM(1)/1000
6370  T1=T4=K3
6380  T2=K2
6390  T3=K1
6400  GOSUB 6790
6410  L4=L4+1
6420  L5=L5+1
6430  N8=(N8 <> 0)*(N8+1)
6440  IF J THEN 6160
6450  S1=0
6460  RETURN 
6470  REM!   GETTXT(T$)
6480  N0=L
6490  GOSUB 6890
6500  GOSUB 6090
6510  READ #1;P9,N9,G,T$
6520  RETURN 
6530  REM!    SCRFIL
6540  S1=T=0
6550  Q$="EDSC00"
6560  CONVERT T TO N$
6570  Q$[7-LEN(N$)]=N$
6580  CREATE Z9,Q$,L9
6590  T=T+1
6600  IF  NOT Z9 THEN 6640
6610  IF Z9 <= 2 THEN 6550
6620  PRINT "No space in directory"
6630  STOP 
6640  RETURN 
6650  REM!    SETBUF
6660  GOSUB 6530
6670  F0$=Q$
6680  ASSIGN F0$,1,Z9
6690  E=.004
6700  PRINT #1;0,0,0,'0
6710  T1=T2=T3=T4=N7=N8=S1=0
6720  GOSUB 6790
6730  L1=L2=L3=L4=L5=F6=F7=0
6740  RETURN 
6750  REM!   CLRBUF
6760  ASSIGN *,1
6770  PURGE Z9,F0$
6780  RETURN 
6790  REM!     RELINK(T1,T2,T3,T4)
6800  F6=1
6810  N0=T2
6820  GOSUB 6090
6830  UPDATE #1;T1
6840  IF T3=T4 THEN 6870
6850  N0=T3+.001
6860  GOSUB 6090
6870  UPDATE #1;T4
6880  RETURN 
6890  REM! GETIND(N0,N8)
6900  IF N0 THEN 6930
6910  N8=0
6920  RETURN 
6930  N7=N7*(N8 <> 0)
6940  D0=N0*(N0 <= L5+1-N0)+(N0-L5-1)*(N0>L5+1-N0)
6950  T=(ABS(N0-N8) <= INT((L5+1)/2))
6960  D1=T*(N0-N8)+( NOT T)*((N0-N8 <= 0)*(N0+L5-N8+1)+(N0-N8>0)*(N0-L5-N8-1))
6970  N8=N0
6980  IF ABS(D0)<ABS(D1) THEN 7040
6990  N0=N7
7000  IF D1 THEN 7020
7010  RETURN 
7020  I2=D1
7030  GOTO 7080
7040  N0=N7=0
7050  IF D0 THEN 7070
7060  RETURN 
7070  I2=D0
7080  FOR I1=1 TO ABS(I2)
7090  GOSUB 6090
7100  READ #1;P9,N9
7110  N0=ABS((I2>0)*N9+(I2<0)*P9)
7120  NEXT I1
7130  N7=N0
7140  RETURN 
7150  REM!  GETFN
7160  S1=1
7170  IF LEN(L$) <= I THEN 7320
7180  FOR J=I+1 TO LEN(L$)
7190  IF POS(D$,L$[J,J]) THEN 7230
7200  IF L$[J,J]="$" THEN 7230
7210  NEXT J
7220  GOTO 7340
7230  F1$=""
7240  F3=POS("$",L$[J,J])
7250  J=J+F3
7260  FOR K=1 TO 6 MIN LEN(L$)-J+1
7270  F1$[K,K]=L$[J,J]
7280  J=J+1
7290  IF  NOT POS(D$,L$[J,J]) AND  NOT POS(".",L$[J,J]) THEN 7330
7300  NEXT K
7310  GOTO 7330
7320  IF LEN(F1$)=0 THEN 7340
7330  S1=0
7340  RETURN 
7350  REM!  DOREAD
7360  Z9=SYS(3)
7370  GOSUB 7150
7380  IF S1 THEN 7600
7390  ASSIGN F1$,2,Z9
7400  S1=(Z9>2)
7410  IF S1 THEN 7580
7420  L4=L2
7430  S1=0
7440  GOSUB 7470
7450  PRINT I4
7460  RETURN 
7470  I4=0
7480  IF  END #2 THEN 7570
7490  IF  NOT F3 THEN 7520
7500  LINPUT #2;N$
7510  GOTO 7530
7520  READ #2;N$
7530  GOSUB 6130
7540  F7=1
7550  I4=I4+1
7560  IF  NOT SYS(3) THEN 7480
7570  F6=F6*(L5 <> I4)
7580  ASSIGN *,2
7590  F7=0
7600  RETURN 
7610  REM!  DOWRIT
7620  Z9=SYS(3)
7630  GOSUB 7150
7640  IF  NOT S1 THEN 7660
7650  RETURN 
7660  IF L3 THEN 7690
7670  L1=1
7680  L2=L5
7690  ASSIGN F1$,2,Z9
7700  IF  NOT Z9 THEN 7880
7710  IF  NOT F3 THEN 7820
7720  T1$="FILE-"
7730  T1$[LEN(T1$)+1]=F1$
7740  T1$[LEN(T1$)+1]=",DS,"
7750  CONVERT L5+1 TO T1$[LEN(T1$)+1]
7760  T1$[LEN(T1$)+1]=",126"
7770  SYSTEM Z9,T1$
7780  IF  NOT Z9 THEN 7860
7790  S1=1
7800  ASSIGN *,2
7810  RETURN 
7820  PURGE Z9,F1$
7830  IF Z9=1 THEN 7790
7840  CREATE Z9,F1$,INT(L5/5)+1
7850  IF Z9 THEN 7790
7860  ASSIGN F1$,2,Z9
7870  PRINT "[New File]"
7880  IF  END #2 THEN 7790
7890  FOR L=L1 TO L2
7900  GOSUB 6470
7910  PRINT #2;T$
7920  IF SYS(3) THEN 7950
7930  NEXT L
7940  L=L-1
7950  PRINT L-L1+1
7960  PRINT #2; END 
7970  F6=S1=0
7980  ASSIGN *,2
7990  RETURN 
8000  REM!  PRINTFIL
8001  ASSIGN "LP",4,F9
8010  S1=1
8020  IF L3 THEN 8100
8030  GOSUB 7150
8040  IF S1 THEN 8100
8050  PRINT F1$;
8051  PRINT #4;F1$;
8060  IF  NOT F3 THEN 8080
8070  PRINT "  [ASCII]";
8080  PRINT 
8090  S1=0
8100  RETURN 
8110  REM!   ENTER
8120  S1=1
8130  IF L3 THEN 8190
8140  GOSUB 7150
8150  IF S1 THEN 8190
8160  GOSUB 6750
8170  GOSUB 6650
8180  GOSUB 7390
8190  RETURN 
8200  REM! QUIT
8210  IF  NOT F6 THEN 8250
8220  S1=F6=0
8230  PRINT "No write since last change"
8240  RETURN 
8250  S1=2
8260  RETURN 
8270  REM!     CKGLOB
8280  Z9=SYS(3)
8290  G1=0
8300  S1=2
8310  IF  NOT POS("XxGg",L$[I,I]) THEN 8540
8320  F2=POS("Gg",L$[I,I]) <> 0
8330  I=I+1
8340  GOSUB 1330
8350  S1=S1 OR ((L1>L2 OR L1 <= 0) AND L3)
8360  IF S1 THEN 8540
8370  I=I+1
8380  N0=Q1=L1*(L3 <> 0)+(L3=0)
8390  Q2=L2*(L3 <> 0)+L5*(L3=0)
8400  GOSUB 6890
8410  FOR L=Q1 TO Q2
8420  GOSUB 6090
8430  READ #1;P9,N9,G,T$
8440  Q3=N0
8450  GOSUB 2860
8460  N0=Q3+.002
8470  GOSUB 6090
8480  UPDATE #1;(S1 <> F2)
8490  G1=G1+(S1 <> F2)
8500  IF SYS(3) THEN 8550
8510  N0=N9
8520  NEXT L
8530  S1=0
8540  RETURN 
8550  S1=1
8560  RETURN 
8570  REM!    DOGLOB
8580  S1=0
8590  Q2=L1*(L3 <> 0)+(L3=0)
8600  Q3=(L3=2)*L2
8610  Q1=I
8620  S1=SYS(3)
8630  IF S1 THEN 8810
8640  L=Q2
8650  GOSUB 6470
8660  IF  NOT G THEN 8780
8670  N0=N0+.002
8680  GOSUB 6090
8690  UPDATE #1;0
8700  L4=Q2
8710  L6=L4
8720  I=Q1
8730  GOSUB 610
8740  IF S1 THEN 8810
8750  GOSUB 420
8760  IF S1 THEN 8810
8770  G1=G1-1
8780  Q2=FNF(Q2)
8790  N0=N9
8800  IF G1 AND ( NOT Q3 OR Q2 <= Q3) AND  NOT SYS(3) THEN 8620
8810  RETURN 
8820  REM!    COMPLEMENT NUMFLAG
8830  S1=1
8840  IF L3 THEN 8920
8850  F5= NOT (F5)
8860  PRINT "Numbering ";
8870  IF F5 THEN 8900
8880  PRINT "off"
8890  GOTO 8910
8900  PRINT "on"
8910  S1=0
8920  RETURN 
8930  REM!   REWRITE
8940  PRINT "[Rewriting scratch file]";
8950  L9=(INT(L5/3)+1) MIN 999
8960  U4=L4
8970  U5=L5
8980  U6=J
8990  T0$=T1$
9000  F$=F0$
9010  GOSUB 6650
9020  ASSIGN F$,3,Z9
9030  F7=0
9040  READ #3;U1,U2
9050  READ #3,INT(U2)+1
9060  ADVANCE #3;(U2-INT(U2))*1000,Z9
9070  READ #3;P6,N6,G,N$
9080  GOSUB 6150
9090  F7=1
9100  IF N6=0 THEN 9130
9110  U2=N6
9120  GOTO 9050
9130  ASSIGN *,3
9140  PURGE Z9,F$
9150  L4=U4
9160  L5=U5
9170  J=U6
9180  T1$=T0$
9190  PRINT 
9200  F7=0
9210  GOTO 6230
9220  REM!    KOPY
9230  I=I+1
9240  GOSUB 820
9250  S1=(S1 <> 0)
9260  IF S1 THEN 9380
9270  GOSUB 6020
9280  IF L3 THEN 9300
9290  L1=L2=L4
9300  S1=(L1 <= 0) OR (N1 >= L1 AND N1<L2)
9310  IF S1 THEN 9380
9320  L4=N1
9330  FOR L=L1 TO L2+L2*(N1<L1) STEP 1+(N1<L1)
9340  GOSUB 6470
9350  N$=T$
9360  GOSUB 6130
9370  NEXT L
9380  RETURN 
9390  REM!    VERIFY
9400  Q1=Q2=S1=0
9410  GOSUB 7150
9420  IF  NOT (LEN(F1$) AND POS("EDSCedsc",F1$[1,4])) THEN 9450
9430  ASSIGN F1$,2,Z9
9440  IF Z9<3 THEN 9470
9450  S1=1
9460  RETURN 
9470  Z9=SYS(3)
9480  IF  END #2 THEN 9580
9490  READ #2;Q3,Q1
9500  READ #2,INT(Q1)+1
9510  ADVANCE #2;(Q1-INT(Q1))*1000,Z9
9520  READ #2;P5,N5,Z9,N$
9530  GOSUB 6130
9540  Q2=Q2+1
9550  IF N5=0 OR Q1=Q3 OR SYS(3) THEN 9590
9560  Q1=N5
9570  GOTO 9500
9580  PRINT "Structure damaged - ";
9590  PRINT Q2
9600  ASSIGN *,2
9610  RETURN 
9620  REM!   ERROR HANDLING
9630  Z7=SYS(0)
9640  Z8=SYS(1)
9650  Z9=SYS(3)
9660  IF Z7 <> 8 THEN 9700
9670  IF Z8 <> 7520 THEN 9700
9680  PRINT "*** Numeric data may not be edited. ***"
9690  GOTO 7590
9700  IF Z7 <> 6 THEN 9740
9710  IF Z8<5400 OR Z8>5700 THEN 9740
9720  PRINT "*** Line too long - command aborted ***"
9730  GOTO 5720
9740  PRINT "*** Fatal error"Z7"in line"Z8"of file"Z9"***"
9750  GOTO 190
9760  END 
