1  REM  ****  HP BASIC PROGRAM LIBRARY  ********************************
2  REM
3  REM       TIDEX:    SYMBOLIC FILE EDITOR   
4  REM
5  REM        36204  REV B  --  10/73
6  REM
7  REM ****  CONTRIBUTED PROGRAM **************************************
10  GOTO 100
20  Y$="0123456789"'5'10'5'5'5'5'5'5'13
30  REM Y$(1,10)="0123456789"
40  REM Y$(11,19)=RAROW,LF,LAROW,UAROW,HD,HU,EOL,EOF,CR
50  RETURN 
60  DIM A$[72],B$[72],C$[72],D$[72],E$[72],F$[72],G$[72],H$[72]
70  DIM I$[72],J$[72],K$[72],L$[72],M$[72],N$[72],O$[72],P$[72]
80  DIM Q$[72],R$[72],S$[72],T$[72],U$[72],V$[72],W$[72]
90  DIM X$[72],Y$[72],Z$[72]
100  FILES SOURCE,SCRTCH
110  N0=1
120  GOSUB 20
130  IF  END #2 THEN 4770
140  W0=1
150  L1=0
160  L2=0
170  L3=0
180  L4=0
190  IF  END #1 THEN 3240
200  PRINT Y$[16,18];
210  IF  END #1 THEN 250
220  READ #1;X$
230  GOSUB 3140
240  GOTO 220
250  READ #1,1
260  IF  END #1 THEN 3240
270  PRINT "                      CHARACTERS:";L4;"LINES:";L1;
280  PRINT "RECORDS:";L3+(L2#0)
290  PRINT Y$[14,14];
300  L1=0
310  L2=0
320  L3=0
330  L4=0
340  INPUT Z$
350  IF LEN(Z$)#72 THEN 370
360  Z$=Z$[1,71]
370  IF LEN(Z$)#71 THEN 390
380  PRINT Y$[14,14];
390  IF Z$[LEN(Z$),LEN(Z$)]#'92 THEN 420
400  PRINT Y$[14,14];Y$[17,17];
410  GOTO 340
420  IF Z$[1,1]="." THEN 650
430  IF Z$[1,1]=";" THEN 2040
440  IF Z$="FIND BOF" THEN 1430
450  IF Z$="FIND EOF" THEN 1450
460  IF LEN(Z$)<8 THEN 480
470  IF Z$[1,7]="SCROLL " THEN 1100
480  IF LEN(Z$)<6 THEN 510
490  IF Z$[1,5]="FIND " THEN 1570
500  IF Z$[1,5]="ROLL " THEN 1130
510  IF LEN(Z$)<5 THEN 580
520  IF Z$[1,4]="GET " THEN 800
530  IF Z$[1,4]="GET-" THEN 800
540  IF Z$[1,4]="DEL " THEN 1340
550  IF Z$[1,4]="MOV " THEN 1810
560  IF Z$[1,4]="COP " THEN 1840
570  IF Z$[1,4]="MOD " THEN 3640
580  IF Z$="LEN" THEN 1970
590  IF Z$="LENGTH" THEN 1970
600  IF Z$[1,4]="PAGE" THEN 1080
610  IF Z$="END" THEN 4470
620  IF Z$[1,4]="END/" THEN 4470
630  GOTO 660
640  GOTO 460
650  Z$=Z$[2]
660  PRINT Y$[14,14];" "
670  IF N0>23 THEN 730
680  Q=N0
690  X$=Z$
700  GOSUB 2620
710  N0=N0+1
720  GOTO 4700
730  PRINT Y$[12,12];Y$[14,14];
740  N=1
750  GOSUB 3260
760  Q=23
770  X$=Z$
780  GOSUB 2620
790  GOTO 340
800  PRINT Y$[14,14];Y$[17,17];
810  X$="1 2 3 4 5 6 7 8 9 1011121314151617181920212223"
820  IF Z$[6,6]#"" THEN 840
830  Z$[6,6]=" "
840  FOR I=1 TO 45 STEP 2
850  IF Z$[5,6]=X$[I,I+1] THEN 880
860  NEXT I
870  GOTO 340
880  N=(I+1)/2
890  FOR P=23 TO 1 STEP -1
900  GOSUB 2110
910  IF X$#"" THEN 930
920  NEXT P
930  IF P=23 THEN 340
940  P=P+1
950  GOSUB 4180
960  I=N
970  J=P
980  FOR Q=J TO I+J-1 MIN 23
990  GOSUB 3220
1000  IF X$="" THEN 1060
1010  PRINT " ";X$
1020  IF LEN(X$)#71 THEN 1040
1030  PRINT Y$[14,14];
1040  GOSUB 2620
1050  NEXT Q
1060  N0=Q
1070  GOTO 340
1080  P=24
1090  GOTO 1160
1100  W0=0
1110  Z$=Z$[8]
1120  GOTO 1140
1130  Z$=Z$[6]
1140  PRINT Y$[14,14];Y$[17,17];
1150  GOSUB 3380
1160  I=P
1170  IF I<2 THEN 1320
1180  FOR J=1 TO I-N0+24
1190  PRINT Y$[12,12];
1200  NEXT J
1210  N=I-1
1220  GOSUB 3260
1230  FOR P=23 TO 1 STEP -1
1240  GOSUB 2110
1250  IF X$#"" THEN 1270
1260  NEXT P
1270  N0=P+1
1280  P=24-P
1290  FOR I=1 TO P
1300  PRINT Y$[14,14];
1310  NEXT I
1320  W0=1
1325  IF Z$[1,4]#"PAGE" THEN 340
1326  Z$=Z$[2]
1330  GOTO 800
1340  Z$=Z$[5]
1350  GOSUB 4150
1360  IF J=0 OR P=0 THEN 340
1370  Q=P
1380  X$=""
1390  GOSUB 2620
1400  PRINT Y$[17,17]
1410  PRINT Y$[14,14];
1420  GOTO 340
1430  R0=1
1440  GOTO 1460
1450  R0=0
1460  N0=1
1470  N=23
1480  GOSUB 3260
1490  GOSUB 3220
1500  IF X$="" THEN 1530
1510  GOSUB 3120
1520  GOTO 1490
1530  IF R0=0 THEN 1550
1540  GOSUB 4300
1550  PRINT Y$[16,18];
1560  GOTO 340
1570  N0=2
1580  N=23
1590  GOSUB 3260
1600  L=LEN(Z$)-5
1610  L9=L1
1620  GOSUB 3220
1630  IF X$="" THEN 1740
1640  IF X$[1,L]=Z$[6,L+5] THEN 1670
1650  GOSUB 3120
1660  GOTO 1620
1670  Q=1
1680  GOSUB 2620
1690  PRINT Y$[16,18];" ";X$
1700  IF LEN(X$)#71 THEN 1720
1710  PRINT Y$[14,14];
1720  IF  END #1 THEN 3240
1730  GOTO 340
1740  GOSUB 4300
1750  IF  END #1 THEN 3240
1760  GOSUB 3220
1770  IF L1 >= L9-1 THEN 1670
1780  IF X$[1,L]=Z$[6,L+5] THEN 1670
1790  GOSUB 3120
1800  GOTO 1760
1810  Z$=Z$[5]
1820  GOSUB 4150
1830  GOTO 4700
1840  PRINT Y$[14,14];Y$[17,17];
1850  IF N0>23 THEN 340
1860  Z$=Z$[5]
1870  GOSUB 3380
1880  IF P=0 THEN 340
1890  Q=N0
1900  GOSUB 2620
1910  PRINT " ";X$
1920  PRINT Y$[14,14];
1930  IF LEN(X$)#71 THEN 1950
1940  PRINT Y$[14,14];
1950  GOSUB 4180
1960  GOTO 1370
1970  GOSUB 1990
1980  GOTO 340
1990  PRINT Y$[14,14];
2000  PRINT Y$[17,17];"                      CHARACTERS:";L4;
2010  PRINT "LINES:";L1;"RECORDS:";L3+(L2#0)
2020  PRINT Y$[14,14];
2030  RETURN 
2040  X$="      "
2050  X$[7]=Z$[2,LEN(Z$) MIN 66]
2060  Z$=X$
2070  PRINT Y$[14,14];Y$[17,17];" ";Z$
2080  IF LEN(Z$)#71 THEN 2100
2090  PRINT Y$[14,14];
2100  GOTO 670
2110  GOTO P OF 2160,2180,2200,2220,2240,2260,2280,2300
2120  GOTO P-8 OF 2320,2340,2360,2380,2400,2420,2440,2460
2130  GOTO P-16 OF 2480,2500,2520,2540,2560,2580,2600
2140  X$=""
2150  RETURN 
2160  X$=A$
2170  RETURN 
2180  X$=B$
2190  RETURN 
2200  X$=C$
2210  RETURN 
2220  X$=D$
2230  RETURN 
2240  X$=E$
2250  RETURN 
2260  X$=F$
2270  RETURN 
2280  X$=G$
2290  RETURN 
2300  X$=H$
2310  RETURN 
2320  X$=I$
2330  RETURN 
2340  X$=J$
2350  RETURN 
2360  X$=K$
2370  RETURN 
2380  X$=L$
2390  RETURN 
2400  X$=M$
2410  RETURN 
2420  X$=N$
2430  RETURN 
2440  X$=O$
2450  RETURN 
2460  X$=P$
2470  RETURN 
2480  X$=Q$
2490  RETURN 
2500  X$=R$
2510  RETURN 
2520  X$=S$
2530  RETURN 
2540  X$=T$
2550  RETURN 
2560  X$=U$
2570  RETURN 
2580  X$=V$
2590  RETURN 
2600  X$=W$
2610  RETURN 
2620  GOTO Q OF 2660,2680,2700,2720,2740,2760,2780,2800
2630  GOTO Q-8 OF 2820,2840,2860,2880,2900,2920,2940,2960
2640  GOTO Q-16 OF 2980,3000,3020,3040,3060,3080,3100
2650  RETURN 
2660  A$=X$
2670  RETURN 
2680  B$=X$
2690  RETURN 
2700  C$=X$
2710  RETURN 
2720  D$=X$
2730  RETURN 
2740  E$=X$
2750  RETURN 
2760  F$=X$
2770  RETURN 
2780  G$=X$
2790  RETURN 
2800  H$=X$
2810  RETURN 
2820  I$=X$
2830  RETURN 
2840  J$=X$
2850  RETURN 
2860  K$=X$
2870  RETURN 
2880  L$=X$
2890  RETURN 
2900  M$=X$
2910  RETURN 
2920  N$=X$
2930  RETURN 
2940  O$=X$
2950  RETURN 
2960  P$=X$
2970  RETURN 
2980  Q$=X$
2990  RETURN 
3000  R$=X$
3010  RETURN 
3020  S$=X$
3030  RETURN 
3040  T$=X$
3050  RETURN 
3060  U$=X$
3070  RETURN 
3080  V$=X$
3090  RETURN 
3100  W$=X$
3110  RETURN 
3120  IF X$="" THEN 3210
3130  PRINT #2;X$
3140  L1=L1+1
3150  L4=L4+LEN(X$)
3160  L0=INT((LEN(X$)+1)/2)+1
3170  L2=L2+L0
3180  IF L2<65 THEN 3210
3190  L2=L0
3200  L3=L3+1
3210  RETURN 
3220  READ #1;X$
3230  RETURN 
3240  X$=""
3250  RETURN 
3260  FOR P=1 TO N
3270  GOSUB 2110
3280  IF W0=0 THEN 3300
3290  GOSUB 3120
3300  NEXT P
3310  FOR I=1 TO 23
3320  P=I+N
3330  Q=I
3340  GOSUB 2110
3350  GOSUB 2620
3360  NEXT I
3370  RETURN 
3380  GOTO 4070
3390  K=LEN(Z$)
3400  FOR P=1 TO 23
3410  GOSUB 2110
3420  FOR I=1 TO LEN(X$)
3430  IF X$[I,I]#" " THEN 3460
3440  NEXT I
3450  GOTO 3470
3460  X$=X$[I]
3470  IF Z$#X$[1,K] THEN 3500
3480  IF J<0 THEN 3530
3490  J=J-1
3500  NEXT P
3510  P=0
3520  RETURN 
3530  P=P+P1 MIN 23
3540  GOSUB 2110
3550  RETURN 
3560  I=LEN(Z$)
3570  FOR J=I TO 1 STEP -1
3580  IF Z$[J,J]#"." THEN 3610
3590  NEXT J
3600  GOTO 3510
3610  Z$=Z$[1,J]
3620  J=I-J-1
3630  GOTO 3390
3640  FOR I=5 TO 72
3650  IF Z$[I,I]="^" THEN 3690
3660  NEXT I
3670  PRINT Y$[14,14];Y$[17,17];
3680  GOTO 340
3690  Y$[20]=Z$[I+1,LEN(Z$) MIN I+51]
3700  Z$=Z$[5,I-1]
3710  GOSUB 4150
3720  IF P=0 THEN 340
3730  Y$=Y$[20]
3740  FOR I=1 TO LEN(X$)
3750  FOR J=1 TO LEN(Y$)
3760  IF Y$[J,J]="^" THEN 3840
3770  IF Y$[J,J]="[" THEN 4040
3780  IF Y$[J,J]="]" THEN 4050
3790  IF Y$[J,J]#X$[I+J-1,I+J-1] THEN 3820
3800  NEXT J
3810  GOTO 4020
3820  NEXT I
3830  GOTO 4020
3840  Y$=Y$[J+1,LEN(Y$)]
3850  IF LEN(X$) >= I+J-1 THEN 3880
3860  GOTO 3890
3870  Y$=Y$[J+1,LEN(Y$)]
3880  Y$[LEN(Y$)+1]=X$[I+J-1,LEN(X$) MIN I+J+70-LEN(Y$)]
3890  IF LEN(Y$)#0 THEN 3920
3900  X$[I]=""
3910  GOTO 3930
3920  X$[I]=Y$[1,LEN(Y$) MIN 72-I]
3930  Q=P
3940  GOSUB 2620
3950  GOSUB 20
3960  IF LEN(X$)#71 THEN 4000
3970  PRINT " ";X$
3980  PRINT Y$[14,14];
3990  GOTO 4010
4000  PRINT " ";X$;Y$[17,17]
4010  PRINT Y$[14,14];
4020  GOSUB 20
4030  GOTO 4700
4040  Y$[LEN(Y$)+1]=X$[I+J-1,(LEN(X$) MIN (I+J+70-LEN(Y$)))]
4050  X$[I+J-1]=Y$[J+1,LEN(Y$) MIN 73-I]
4060  GOTO 3930
4070  I=LEN(Z$)
4080  FOR J=I TO 1 STEP -1
4090  IF Z$[J,J]#"," THEN 4120
4100  NEXT J
4110  GOTO 3510
4120  Z$=Z$[1,J]
4130  P1=I-J
4140  GOTO 3560
4150  PRINT Y$[14,14];Y$[17,17];
4160  GOSUB 3380
4170  IF P=0 THEN 4250
4180  J=N0-P
4190  N0=P
4200  IF J<0 THEN 4260
4210  IF J=0 THEN 4250
4220  FOR I=1 TO J
4230  PRINT Y$[14,14];
4240  NEXT I
4250  RETURN 
4260  FOR I=1 TO -J
4270  PRINT Y$[12,12];
4280  NEXT I
4290  RETURN 
4300  PRINT #2; END 
4310  READ #1,1
4320  READ #2,1
4330  IF  END #2 THEN 4380
4340  IF  END #1 THEN 4450
4350  READ #2;X$
4360  PRINT #1;X$
4370  GOTO 4350
4380  PRINT #1; END 
4390  IF  END #2 THEN 4770
4400  IF  END #1 THEN 3240
4410  L1=L2=L3=L4=0
4420  READ #1,1
4430  READ #2,1
4440  RETURN 
4450  PRINT "TRUNCATION IN UPDATE"
4460  GOTO 4390
4470  N=23
4480  GOSUB 3260
4490  IF Z$[5,7]="DEL" THEN 4540
4500  IF  END #1 THEN 4550
4510  READ #1;X$
4520  GOSUB 3120
4530  GOTO 4510
4540  Z$[5,6]=Z$[8,9]
4550  PRINT #2; END 
4560  IF Z$[5,6]="NO" THEN 4670
4570  IF  END #2 THEN 4650
4580  IF  END #1 THEN 4640
4590  READ #1,1
4600  READ #2,1
4610  READ #2;X$
4620  PRINT #1;X$
4630  GOTO 4610
4640  PRINT "SOURCE FILE TOO SMALL"
4650  PRINT #1; END 
4660  PRINT Y$[12,12];
4670  GOSUB 1990
4680  PRINT Y$[14,14];
4690  STOP 
4700  FOR N0=N0 TO 23
4710  P=N0
4720  GOSUB 2110
4730  IF X$="" THEN 340
4740  PRINT Y$[12,12];
4750  NEXT N0
4760  GOTO 340
4770  PRINT Y$[17,17];" OUTPUT FILE OVERFLOW"
4780  GOTO 4660
9999  END 
