1 DIM C$[72],S$[72],J$[72] 20 DIM A$[72],B$[72],D$[72],F$[72],K$[72],R$[72],T$[72],Y$[72] 30 DIM W$[72] 40 DIM P[2],S[100],D[2000] 45 REM EDITOR, HP 36749A, 6/74 50 PRINT "FILENAME"; 60 INPUT S$ 70 FILES *,DEL,* 80 ASSIGN S$,1,A 90 LET D$=S$ 100 LET D$[1+LEN(D$)]="D" 110 ASSIGN D$,3,A 120 K$="0123456789" 130 J$=" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 140 READ #1,1 150 GOTO TYP(-1) OF 370,160,160,160 160 REM***************INITIALIZE******* 170 MAT P=ZER 180 MAT S=ZER 190 MAT D=ZER 200 PRINT "MAX# OF PHYSICAL RECORDS"; 210 INPUT P[1] 220 PRINT "NUMBER OF LOGICALS PER PHYSICAL"; 230 INPUT P[2] 240 IF P[2]>6 THEN 270 250 PRINT " MUST BE AT LEAST 7 LOGICAL PER PHYSICALS" 260 GOTO 220 270 PRINT "MAX STRING SIZE IS"INT(((P[2]-256)/P[2])*2) 280 MAT PRINT #1,1;P,S 290 FOR S=1 TO P[1]-1 300 READ #1,S+1 310 FOR S1=1 TO P[2] 320 PRINT #1;"" 330 NEXT S1 340 NEXT S 350 READ #3,1 360 MAT PRINT #3;D 370 REM**************INPUT AREA*********** 380 READ #3,1 390 MAT READ #3;D 400 MAT READ #1,1;P 410 READ #1,1 420 INPUT A$ 430 GOSUB 1230 440 IF N=0 THEN 620 450 GOSUB 470 460 GOTO 420 470 REM**************ADD ROUTINE********* 480 IF N>(P[1]-1)*P[2] OR N<1 THEN 520 490 GOSUB 580 500 GOSUB 1890 510 RETURN 520 PRINT "LINE NO. MUST BE GREATER THAN 0 AND LESS THEN";(P[1]-1)*P[2] 530 GOTO 510 540 REM***************DELETE 550 LET A$="" 560 GOSUB 470 570 RETURN 580 REM****************READ ROUTINE******* 590 GOSUB 1530 600 GOSUB 1800 610 RETURN 620 REM******************COMMAND LIST**************** 630 READ #3,1 640 MAT PRINT #3;D 650 IF A$="LIST SORTED" THEN 3840 660 IF A$[1,3]="LIS" THEN 1130 670 IF A$="FILE" THEN 50 680 IF A$="CHANGE" THEN 2090 690 IF A$="POSTFIX" THEN 2700 700 IF A$="PREFIX" THEN 2700 710 IF A$="LOCATE" THEN 2700 720 IF A$="DELETE LINES" THEN 2660 730 IF A$="DELETE CHARACTERS" THEN 2640 740 IF A$="INSERT LINE" THEN 2450 750 IF A$="INSERT CHARACTERS" THEN 2680 760 IF A$="RENUMBER" THEN 3190 770 IF A$="DONE" THEN 1090 780 IF A$="END" THEN 1090 790 IF A$="STOP" THEN 1090 800 IF A$="BYE" THEN 1090 810 IF A$="HELP" THEN 860 820 IF A$="FIND" THEN 3840 830 IF A$="GENERATE TEST FILE" THEN 3520 840 PRINT "BAD COMMAND" 850 GOTO 420 860 PRINT "LEGAL COMMANDS ARE: LIS,LIST,LIST SORTED" 870 PRINT " FILE (TO CHANGE THE FILE YOU ARE WORKING ON" 880 PRINT " DELETE LINES, DELETE CHARACTERS" 890 PRINT " INSERT LINES , INSERT CHARACTERS" 900 PRINT " LOCATE (KEYWORD SEARCH)" 910 PRINT " FIND (FAST LOOKUP)" 920 PRINT " POSTFIX,PREFIX" 930 PRINT " RENUMBER" 940 PRINT " GENERATE TEST FILE" 950 PRINT " HELP" 960 PRINT " END,STOP,DONE,BYE" 970 PRINT "ALL LINES ARE ADDED AND DELETED BY MEANS OF LINE NUMBERS" 980 PRINT "JUST LIKE IN WRITING A BASIC PROGRAM" 990 PRINT "A DIRECTORY FILE MUST BE OPENED 20 BLOCKS LONG HAVING THE" 1000 PRINT " THE SAME NAME AS THE FILE YOU WISH TO CREATE" 1010 PRINT "FOLLOWED BY A 'D'. A FILE CALLED 'DEL' IS NEEDED FOR SCRATCH SPACE" 1020 PRINT "IT NEEDS JUST THREE BLOCKS" 1030 PRINT "THEREFORE TO USE THE FILE 'WORK' :" 1040 PRINT "CRE-WORK,20" 1050 PRINT "CRE-WORKD,20" 1060 PRINT "CRE-DEL,3" 1070 PRINT "THAT SHOULD PUT YOU IN BUSINESS!!!!" 1080 PRINT "F,L? MEANS FIRST TO LAST LINE NUMBERS TO BE AFFECTED" 1090 GOTO 420 1130 REM*****************LIST COMMAND****** 1140 PRINT "F,L"; 1150 INPUT F1,L1 1160 FOR N=F1 MAX 1 TO L1 MIN (P[1]-1)*P[2] 1170 GOSUB 580 1180 IF R$="" THEN 1200 1190 PRINT N;R$ 1200 NEXT N 1210 PRINT "LIST DONE" 1220 GOTO 420 1230 REM*************STRING TO NO. CONVERSION*********** 1240 LET B$="" 1250 LET N=0 1260 LET R$=A$ 1270 GOSUB 1300 1280 GOTO 1350 1290 REMOVE LEADING BLANKS 1300 FOR S=1 TO LEN(R$) 1310 IF R$[S,S]#" " THEN 1330 1320 NEXT S 1330 LET R$=R$[S] 1340 RETURN 1350 FOR S=1 TO LEN(R$) 1360 IF R$[S,S]>"9" THEN 1420 1370 IF R$[S,S]<"0" THEN 1420 1380 LET B$[1+LEN(B$)]=R$[S,S] 1390 NEXT S 1400 LET A$="" 1410 GOTO 1450 1420 LET R$=R$[S] 1430 GOSUB 1300 1440 LET A$=R$ 1450 FOR S=LEN(B$) TO 1 STEP -1 1460 FOR S1=1 TO LEN(K$) 1470 IF B$[S,S]=K$[S1,S1] THEN 1510 1480 NEXT S1 1490 NEXT S 1500 RETURN 1510 LET N=N+(S1-1)*10^(LEN(B$)-S) 1520 GOTO 1490 1530 REM**************DERIVE R1 AND R2********** 1540 LET N=N MAX 1 1550 LET N=N MIN (P[1]-1)*P[2] 1560 O=1 1570 R1=(N/P[2])+1 1580 IF R1=INT(R1) THEN 1630 1590 R1=INT(R1) 1600 R2=P[2]-((R1*P[2])-N) 1610 R1=R1+O 1620 RETURN 1630 R1=R1-1 1640 R2=P[2] 1650 R1=R1+O 1660 RETURN 1670 PRINT "LINE NUMBER EXCEEDS FILE CAPACITY" 1680 LET R1=R2=0 1690 GOTO 1610 1700 REM********HASH FUNCTION 1710 N1=0 1720 FOR S3=1 TO LEN(A$) MIN 6 1730 FOR S4=1 TO LEN(J$) 1740 IF A$[S3,S3]=J$[S4,S4] THEN 1780 1750 NEXT S4 1760 NEXT S3 1770 RETURN 1780 N1=N1+((S4-1)/LEN(J$)^(S3)) 1790 GOTO 1760 1800 REM*******READ RECORD 1810 READ #1,R1 1820 READ #2,1 1830 FOR L=1 TO R2-1 1840 READ #1;R$ 1850 PRINT #2;R$ 1860 NEXT L 1870 READ #1;R$ 1880 RETURN 1890 REM******PRINT RECORD 1900 PRINT #2;A$ 1910 FOR L=R2+1 TO P[2] 1920 READ #1;R$ 1930 PRINT #2;R$ 1940 NEXT L 1950 READ #1,R1 1960 READ #2,1 1970 FOR L=1 TO P[2] 1980 READ #2;R$ 1990 PRINT #1;R$ 2000 NEXT L 2010 REM***POST HASH 2020 IF A$="" THEN 2060 2030 GOSUB 1700 2040 D[N MIN 2000]=N1 2050 RETURN 2060 LET N1=0 2070 GOTO 2040 2080 REM*****CHANGE FUNCTION******* 2090 PRINT "VERIFY"; 2100 INPUT Y$ 2110 PRINT "CHANGE FROM:"; 2120 INPUT F$ 2130 PRINT " TO:"; 2140 INPUT T$ 2150 PRINT "F,L" 2160 INPUT F1,L1 2170 FOR N=F1 MAX 1 TO L1 MIN (P[1]-1)*P[2] 2180 LET B=1 2190 GOSUB 580 2200 IF R$="" THEN 2260 2210 LET D$="" 2220 LET W4=LEN(F$)-1 2230 FOR S=B TO LEN(R$)-W4 2240 IF R$[S,S+W4]=F$ THEN 2290 2250 NEXT S 2260 NEXT N 2270 PRINT "CHANGE DONE" 2280 GOTO 420 2290 IF S=1 THEN 2310 2300 LET D$=R$[1,S-1] 2310 LET D$[1+LEN(D$)]=T$ 2320 LET D$[1+LEN(D$)]=R$[S+LEN(F$)] 2330 IF Y$[1,1]="Y" THEN 2380 2340 LET A$=D$ 2350 GOSUB 1890 2360 LET B=S+LEN(T$) 2370 GOTO 2190 2380 PRINT "OLD";N;R$ 2390 PRINT "NEW";N;D$ 2400 PRINT "CHANGE"; 2410 INPUT C$ 2420 IF C$[1,1]="Y" THEN 2340 2430 LET D$="" 2440 GOTO 2250 2450 REM***************INSERT LINE********* 2460 PRINT "INSERT AFTER LINE #: "; 2470 INPUT N 2480 PRINT "ENTER LINE: "; 2490 INPUT A$ 2500 LET N=N+1 2510 IF N>(P[1]-1)*P[2] THEN 2580 2520 GOSUB 580 2530 LET T$=R$ 2540 IF R$="" THEN 2600 2550 GOSUB 1890 2560 LET A$=T$ 2570 GOTO 2500 2580 PRINT "LINE NO. OUT OF RANGE" 2590 GOTO 2460 2600 GOSUB 1890 2610 PRINT "LINE INSERT DONE" 2620 GOTO 420 2630 REM***PREFIX/POSTFIX/INSERT/LOCATE/DELETE CHAR***** 2640 PRINT "FROM CHAR#,TO CHAR#"; 2650 INPUT P1,P2 2660 LET C$=A$ 2670 GOTO 2730 2680 PRINT "AFTER POSITION#"; 2690 INPUT P 2700 LET C$=A$ 2710 PRINT "STRING"; 2720 INPUT B$ 2730 PRINT "F,L"; 2740 INPUT F1,L1 2750 FOR N=F1 MAX 1 TO L1 MIN (P[1]-1)*P[2] 2760 LET D$="" 2770 GOSUB 580 2780 IF R$="" THEN 3160 2790 IF C$="DELETE CHARACTERS" THEN 2920 2800 IF C$="PREFIX" THEN 3120 2810 IF C$="POSTFIX" THEN 3090 2820 IF C$="INSERT CHARACTERS" THEN 3000 2830 IF C$="LOCATE" THEN 2850 2840 IF C$="DELETE LINES" THEN 3070 2850 LET W4=LEN(B$)-1 2860 FOR S=1 TO LEN(R$)-W4 2870 IF R$[S,S+W4]=B$ THEN 2900 2880 NEXT S 2890 GOTO 3160 2900 PRINT N,R$ 2910 GOTO 3160 2920 LET A$="" 2930 IF P1>LEN(R$) THEN 3160 2940 IF P1=1 THEN 2960 2950 LET A$=R$[1,P1-1 MAX 1] 2960 IF P2=LEN(R$) OR P2>LEN(R$) THEN 2980 2970 LET A$[1+LEN(A$)]=R$[P2+1 MIN LEN(R$)] 2980 GOSUB 1890 2990 GOTO 3160 3000 IF LEN(R$)

4 THEN 4360 4260 A1=LEN(A$) 4270 J1=LEN(J$) 4280 FOR S=1 TO J1 4290 IF A$[A1,A1]=J$[S,S] THEN 4310 4300 NEXT S 4310 A$[A1,A1]=J$[S+1 MIN J1,S+1 MIN J1] 4320 GOSUB 1700 4330 N3=N1 4340 N1=N2 4350 A$=B$ 4360 FOR N=1 TO V MAX 1 4370 IF D[N]=N1 THEN 4410 4380 IF D[N]>N2 AND D[N]