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 I$[52]
35  MAT A=CON
40  MAT I=ZER
45  MAT L=ZER
50  MAT M=ZER
55  MAT T=ZER
60  H=A[7]=A[9]=A[10]=Q=M=U=R=0
65  A$=""
70  Z$=""
75  A=1
80  A[5]=10
85  A[3]=A[6]=72
90  Y$="0123456789"
95  D$="SVKDREATUJILCMFHGsvkdreatujilcmfhg"
100  FILES *,*
105  F$="                        "
110  PRINT "EDIT FILE";
115  INPUT F$[1,6]
120  ASSIGN F$[1,6],1,X
125  IF  NOT X THEN 160
130  IF X>1 THEN 150
135  PRINT "WARNING : FILE IS BEING ACCESSED BY ANOTHER USER"
140  GOTO 160
145  E=13
150  GOSUB 3180
155  STOP 
160  PRINT "HOLD FILE?";
165  ENTER 255,X,B$
170  IF X=-256 THEN 165
175  PRINT 
180  IF B$="" THEN 225
185  F$[7,6+LEN(B$)]=B$
190  ASSIGN B$,2,X
195  IF  NOT X THEN 225
200  IF X>1 THEN 215
205  PRINT "WARNING : FILE IS BEING ACCESSED BY ANOTHER USER"
210  GOTO 225
215  GOSUB 3180
220  STOP 
225  REM < RECOVERY >
230  PRINT "RECOVERY?";
235  ENTER 255,X,A$
240  IF X=-256 THEN 235
245  PRINT 
250  IF A$[1,1]="y" THEN 260
255  IF A$[1,1]#"Y" THEN 635
260  T2=0
265  M=1
270  T1=F1=2
275  READ #1,T1
280  FOR I=1 TO 128
285  IF TYP(1)#1 THEN 565
290  READ #1;X
295  NEXT I
300  MAT  READ #1,T1;I
305  T[1]=M
310  M[M,1]=I[1,1]
315  M[M,2]=T1
320  M=M+1
325  IF F1 >= T1 THEN 335
330  F1=T1
335  IF T1#I[63,2] THEN 565
340  FOR J=1 TO I[63,1]
345  T1=I[J,2]
350  IF F1 >= T1 THEN 360
355  F1=T1
360  READ #1,T1
365  FOR I=1 TO 10
370  IF TYP(1)#1 THEN 565
375  READ #1;X
380  NEXT I
385  MAT  READ #1,T1;L
390  IF T1#L[8] THEN 565
395  IF  NOT T2 THEN 405
400  IF T2#L[9] THEN 565
405  T2=L[8]
410  FOR I=1 TO L[7]
415  IF TYP(1)#2 THEN 565
420  READ #1;L$
425  NEXT I
430  NEXT J
435  T[2]=J-1
440  T[3]=I-1
445  T[4]=LEN(L$)
450  T[5]=L[T[3]]
455  T[6]=1
460  T1=I[64,2]
465  IF T1 THEN 275
470  M=M-1
475  GOSUB 6600
480  MAT E=T
485  MAT P=T
490  J=F1+1
495  X=1000
500  IF  END #1 THEN 520
505  FOR I=J TO 1.E+30 STEP X
510  PRINT #1,I;1
515  NEXT I
520  J=I-X
525  X=X/10
530  IF X >= 1 THEN 505
535  PRINT  USING 540;J-F1
540  IMAGE "YOU HAVE ",5D," BLOCKS OF FREE SPACE"
545  F1=F1+1
550  F0=0
555  A[8]=I-1
560  GOTO 1910
565  PRINT "THE STRUCTURE IS DESTROYED.  IF YOU WISH TO PRESERVE AS MUCH"
570  PRINT " OF THE DATA AS POSSIBLE PROVIDE A FILE."
575  ENTER 255,X,A$
580  IF X=-256 THEN 9999
585  IF A$="" THEN 9999
590  ASSIGN A$,3,X
595  L[10]=3
600  MAT  READ #1,L[10];L
605  FOR I=1 TO L[7]
610  READ #1;A$
615  PRINT #3;A$
620  NEXT I
625  IF L[10] THEN 600
630  STOP 
635  PRINT "ARE YOU RE-ENTERING A 'KQ' FILE?";
640  ENTER 255,X,A$
645  IF X=-256 THEN 640
650  PRINT 
655  IF A$[1,1]="y" THEN 665
660  IF A$[1,1]#"Y" THEN 705
665  MAT  READ #1,1;A,B,E,P
670  READ #1;F0,F1,M,T1
675  MAT  READ #1,T1;M
680  MAT T=P
685  MAT  READ #1,M[T[1],2];I
690  MAT  READ #1,I[T[2],2];L
695  READ #1;L$,M$,N$,O$,P$,Q$
700  GOTO 1910
705  X=1000
710  IF  END #1 THEN 735
715  J=1
720  FOR I=J TO 1.E+30 STEP X
725  PRINT #1,I;1
730  NEXT I
735  J=I-X
740  X=X/10
745  IF X >= 1 THEN 720
750  A[8]=J
755  IF  END #1 THEN 765
760  MAT  PRINT #1,1;M
765  READ #1,1
770  IF  END #1 THEN 795
775  FOR I=1 TO 256
780  IF TYP(-1)=4 THEN 795
785  READ #1;X
790  NEXT I
795  I=(I-1)*2
800  IF I=256 THEN 815
805  PRINT "PLEASE KILL AND REOPEN THE EDIT FILE WITH 256 WORD SECTORS"
810  STOP 
815  I[63,1]=1
820  I[63,2]=2
825  I[1,1]=0
830  I[1,2]=3
835  MAT  PRINT #1,2;I
840  M[1,1]=0
845  M[1,2]=2
850  M=1
855  L[7]=1
860  L[8]=3
865  L[1]=0
870  MAT  PRINT #1,3;L
875  PRINT #1;"<DUMMY LINE 0>","","","","",""
880  L$="<DUMMY LINE 0>"
885  MAT B=CON
890  B[5]=0
895  MAT E=B
900  MAT P=B
905  MAT T=B
910  F0=0
915  F1=4
920  IF F$[7,12]="      " THEN 930
925  PRINT #2,1; END 
930  GOTO 1910
1900  ASSIGN F$[1,6],1,X
1905  GOSUB 2000
1910  CHAIN "$EDITA",40
2000  REM <<< SET >>>
2005  I$="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
2010  FOR I=A TO LEN(A$)
2015  FOR J=1 TO 26
2020  IF A$[I,I]#I$[J,J] THEN 2030
2025  A$[I,I]=I$[J+26,J+26]
2030  NEXT J
2035  NEXT I
2040  IF D2=1 THEN 2055
2045  IF A$[A,A+2]#"ALL" THEN 2055
2050  A$[A]="DELTA,FROM,LEFT,RIGHT,LENGTH,QUIET"
2055  D2=D2+5
2060  IF A$[A]="" THEN 2375
2065  C1=A
2070  IF LEN(A$)-A>2 THEN 2090
2075  A=C1
2080  E=2
2085  GOTO 3000
2090  IF A$[A,A+3]#"FROM" THEN 2120
2095  C2=1
2100  A=A+4
2105  IF D2=6 THEN 2330
2110  PRINT "FROM=";A[1]
2115  GOTO 2355
2120  IF A$[A,A+3]#"LEFT" THEN 2150
2125  C2=2
2130  A=A+4
2135  IF D2=6 THEN 2330
2140  PRINT "LEFT=";A[2]
2145  GOTO 2355
2150  REM
2155  IF A$[A,A+4]#"RIGHT" THEN 2185
2160  C2=3
2165  A=A+5
2170  IF D2=6 THEN 2330
2175  PRINT "RIGHT=";A[3]
2180  GOTO 2355
2185  IF A$[A,A+4]#"DELTA" THEN 2215
2190  C2=4
2195  A=A+5
2200  IF D2=6 THEN 2330
2205  PRINT "DELTA=";A[4]
2210  GOTO 2355
2215  IF A$[A,A+4]#"QUIET" THEN 2270
2220  A=A+5
2225  IF D2=6 THEN 2260
2230  PRINT "QUIET/DISPLAY"'13;
2235  GOTO A[7] OF 2250
2240  PRINT "******"
2245  GOTO 2355
2250  PRINT TAB(5);"********"
2255  GOTO 2355
2260  A[7]=1
2265  GOTO 2355
2270  REM
2275  IF A$[A,A+5]#"LENGTH" THEN 2305
2280  C2=6
2285  A=A+6
2290  IF D2=6 THEN 2330
2295  PRINT "LENGTH=";A[6]
2300  GOTO 2355
2305  IF A$[A,A+6]#"DISPLAY" THEN 2075
2310  A=A+7
2315  IF D2=7 THEN 2230
2320  A[7]=0
2325  GOTO 2355
2330  IF A$[A,A]#"=" THEN 2075
2335  GOSUB 9986
2340  GOSUB 9000
2345  GOSUB C2 OF 2415,2430,2445,2460,2475,2490
2350  A[C2]=N
2355  GOSUB 9982
2360  IF A$[A,A]#"," THEN 2060
2365  GOSUB 9986
2370  GOTO 2060
2375  MAT T=P
2380  IF  NOT T[5] THEN 2410
2385  GOSUB 6200
2390  GOSUB 7000
2395  IF LEN(B$)<64 THEN 2400
2400  PRINT SPA(A[2]-1);B$[A[2],(LEN(B$) MIN A[3]) MAX A[2]]
2405  PRINT TAB(T[4]-1+9*(LEN(B$)<64));
2406  PRINT  USING 2407;T[4]
2407  IMAGE "^(",DD,")"
2410  RETURN 
2415  IF N>0 AND N<9999 THEN 2505
2420  N=A[1]
2425  GOTO 2500
2430  IF N>0 AND N <= A[3] THEN 2505
2435  N=A[2]
2440  GOTO 2500
2445  IF N <= A[6] AND N >= A[2] THEN 2505
2450  N=A[3]
2455  GOTO 2500
2460  IF N>0 AND N<10000 THEN 2505
2465  N=A[4]
2470  GOTO 2500
2475  IF N>0 THEN 2505
2480  N=A[5]
2485  GOTO 2500
2490  IF N>0 AND N<73 THEN 2505
2495  N=A[6]
2500  PRINT TAB(C1);"^ PARAMETER OUT OF LIMITS"
2505  RETURN 
3000  REM <<< ERROR ROUTINES >>>
3005  GOSUB 3015
3010  CHAIN "$EDITA",40
3015  IF E>9 THEN 3040
3020  IF  NOT U THEN 3030
3025  PRINT A$
3030  PRINT TAB(A),"^ ";
3035  GOTO E OF 3060,3070,3080,3090,3100,3110,3120,3130
3040  E=E-8
3045  GOTO E OF 3140,3150,3160,3170,3180,3190,3200,3210
3050  E=E-8
3055  GOTO E OF 3220,3230,3240,3250,3260
3060  PRINT "INVALID COMMAND NAME"
3065  GOTO 3265
3070  PRINT "INVALID OPTION"
3075  GOTO 3265
3080  PRINT "INVALID OR MISSING PARAMETER"
3085  GOTO 3265
3090  PRINT "INVALID RANGE"
3095  GOTO 3265
3100  PRINT "INVALID COLUMN RANGE"
3105  GOTO 3265
3110  PRINT "ABSOLUTE COLUMN POSITION OUT OF RANGE"
3115  GOTO 3265
3120  PRINT "INVALID LINE NUMBER"
3125  GOTO 3265
3130  PRINT "INVALID INTEGER"
3135  GOTO 3265
3140  PRINT "INVALID STRING DELIMITER"
3145  GOTO 3265
3150  PRINT "UNDELIMITED STRING"
3155  GOTO 3265
3160  PRINT "FAILURE TO OPEN HOLD FILE"
3165  GOTO 3265
3170  PRINT "WHILE FILE OVERFLOW"
3175  GOTO 3265
3180  PRINT "FILE NOT ACCESSIBLE ("X")"
3185  GOTO 3265
3190  PRINT "FILE STRUCTURE FULL-'KEEP' AND 'TEXT' TO RESTRUCTURE"
3195  GOTO 3265
3200  PRINT "AMBIGUOUS REQUEST - THE FILE IS UNNUMBERED"
3205  GOTO 3265
3210  PRINT "POSITION NOT FOUND"
3215  GOTO 3265
3220  PRINT "STRING NOT FOUND"
3225  GOTO 3265
3230  PRINT "LINE DOES NOT EXIST"
3235  GOTO 3265
3240  PRINT "COMMAND WILL NOT REPLACE OR INTERLEAVE LINES"
3245  GOTO 3265
3250  PRINT "LINE ZERO CANNOT BE ACCESSED"
3255  GOTO 3265
3260  PRINT "END-OF-FILE"
3265  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 6130
6110  MAT  PRINT #1,L[8];L
6115  PRINT #1;L$,M$,N$,O$,P$,Q$
6120  MAT  READ #1,I[T[2],2];L
6125  READ #1;L$,M$,N$,O$,P$,Q$
6130  RETURN 
6200  REM *** GET A 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  X=L[T[3]]
6280  RETURN 
6600  REM * FIND E *
6605  T[1]=M
6610  MAT  READ #1,M[T[1],2];I
6615  T[2]=I[63,1]
6620  MAT  READ #1,I[T[2],2];L
6625  READ #1;L$,M$,N$,O$,P$,Q$
6630  T[3]=L[7]
6635  GOSUB 6215
6640  T[4]=LEN(B$)
6645  T[6]=1
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 
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 3000
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
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 
