10 COM X$[7],Y$[7],G$[7],S,U1 17 REM FINDAD, HP 36867A, 6/74 20 DIM E[99],I[121],J[121],R[16],I$[72],O$[72] 30 DIM A$[72],B$[72],C$[52],D$[10],E$[72],F$[72],H$[72] 40 C$="etoanirshdlcwumfygpbvkxqjzETOANIRSHDLCWUMFYGPBVKXQJZ" 50 D$="0123456789" 55 K=N1=Y9=1 60 FILES *,*,*,*,* 61 PRINT "CONVERT OLD FILE TO FINDIT FILE." 62 GOSUB 7500 65 PRINT "FINDIT FILE NAME? "; 70 ENTER #S 80 GOSUB 1480 90 GOTO A1 OF 62,65,65 100 S=S+1 110 ASSIGN A$,1,X 115 ASSIGN A$,3,X 120 IF X<3 THEN 160 130 PRINT 140 PRINT "**NO SUCH FILE." 150 GOTO 50 160 IF LEN(A$)<7 THEN 170 162 IF LEN(A$)>7 THEN 168 164 IF A$[1,1]="$" THEN 170 166 IF A$[1,1]="*" THEN 170 168 PRINT "**INVALID NAME." 169 GOTO 50 170 B$=A$ 180 READ #1,2 182 IF TYP(-1)=2 THEN 188 183 PRINT 184 PRINT "**YOU MUST RUN THE 'CREATE' PROGRAM TO INITIALIZE THE FILE." 186 GOTO 9999 188 READ #1;Y$,G$ 190 ASSIGN Y$,2,X 200 IF X<3 THEN 230 210 PRINT "**OPEN '"Y$"' TO 32 RECORDS." 220 STOP 230 ASSIGN G$,4,X 240 IF X<3 THEN 270 250 PRINT "**OPEN '"G$"' TO 4 RECORDS." 260 STOP 270 GOSUB 7554 280 IF NOT A1 THEN 500 290 PRINT 300 GOTO 65 500 MAT READ #1,1;R 510 A3=L2=0 520 Y9=1 530 U=0 540 GOTO 3050 1480 REM--INPUT ROUTINE 1490 A1=0 1500 T1=255 1510 ENTER T1,Y,A$ 1520 PRINT 1530 IF Y#-256 THEN 1575 1540 IF T1=15 THEN 9990 1550 PRINT '7'7'7"**ARE YOU STILL THERE?"; 1560 T1=15 1570 GOTO 1510 1575 IF T1=15 THEN 2020 1580 IF A$="" THEN 2380 1610 FOR Z=1 TO LEN(A$) 1620 IF A$[Z,Z]>" " THEN 1700 1630 IF Z#1 THEN 1655 1640 A$=A$[2] 1650 GOTO 1610 1655 IF A$[Z,Z]<" " THEN 1670 1660 IF A$[Z+1,Z+1]>" " THEN 1700 1670 IF Z>LEN(A$) THEN 1700 1680 A$[Z]=A$[Z+1] 1690 GOTO 1620 1700 IF A$[Z,Z] <= "^" THEN 1760 1710 FOR Z1=1 TO 26 1720 IF A$[Z,Z]#C$[Z1,Z1] THEN 1750 1730 A$[Z,Z]=C$[Z1+26,Z1+26] 1740 GOTO 1760 1750 NEXT Z1 1760 NEXT Z 1765 IF LEN(A$)=0 THEN 2400 1770 IF A$[LEN(A$),LEN(A$)]>" " THEN 1820 1780 A$=A$[1,LEN(A$)-1] 1820 IF A$[1,2]="//" THEN 1830 1825 RETURN 1830 IF A$[3,4]#"ER" THEN 1900 1840 IF K>N1 THEN 1870 1850 A1=1 1860 RETURN 1870 PRINT "//ER WAS ENCOUNTERED." 1880 A1=3 1890 RETURN 1900 IF A$[3,4]="ST" THEN 9990 1902 IF Y9 THEN 1910 1904 PRINT "//XXX... ENCOUNTERED AND TREATED AS DATA." 1906 RETURN 1910 IF A$[3,4]#"HE" THEN 2040 1930 GOSUB 6460 1940 GOTO 2020 1970 PRINT 1990 GOSUB 6460 2020 A1=2 2030 RETURN 2040 PRINT "**INVALID COMMAND." 2050 GOTO 2020 2380 A1=5 2400 IF Y9 THEN 2404 2401 PRINT "BLANK OR EMPTY ELEMENT." 2402 GOTO 2405 2404 PRINT "**SUPPLY A VALUE." 2405 A1=2 2410 RETURN 2770 REM--SET FILE BUSY FLAG. 2780 ASSIGN G$,4,X 2800 IF X THEN 2860 2810 READ #4,1 2820 IF TYP(-4)<3 THEN 2900 2830 PRINT #4,1;S 2840 READ #4,2 2850 RETURN 2855 REM--WAIT TWO SECONDS IF FILE BUSY. 2860 ASSIGN Y$,4,X 2870 ENTER 2,Z,Z 2890 GOTO 2780 2900 READ #4;Z 2910 PRINT "**PORT #"Z"USED THE BREAK KEY DURING UPDATE. SEE YOUR FILE MANAGER." 2920 STOP 2930 RETURN 2950 PRINT #4,1; END 2960 ASSIGN Y$,4,X 2970 RETURN 2980 L3=LEN(A$) 2990 L4=L4+(1+INT((L3+1)/2)) 3000 IF L4 <= 252 THEN 3040 3004 PRINT "**RECORD TOO LONG." 3030 A2=1 3040 RETURN 3050 REM--**ADD ROUTINE** 3054 Y9=0 3060 A3=R=0 3070 Y9=0 3080 MAT READ #1,1;R 3082 U=0 3084 K=R[4]-R[1] 3086 IF K >= 0 THEN 3120 3088 GOSUB 6060 3090 IF (I2+K) >= 0 THEN 3120 3100 PRINT '7'7'7"NO MORE FILE SPACE. SEE FILE MANAGER.";LIN(-2) 3110 GOTO 9990 3120 U=2 3130 K=S2=1 3140 N1=0 3150 PRINT #2,S 3160 READ #3,3 3170 A2=L2=L4=0 3180 FOR I=1 TO R[3] 3190 IF I=1 THEN 3210 3200 K=2 3210 READ #3;E$ 3214 GOSUB 7600 3215 IF A1#0 THEN 8000 3216 IF NOT Y7 THEN 3270 3217 PRINT E$": "A$ 3270 GOTO A1+1 OF 3290,8000,8000,8000 3290 GOSUB 2980 3300 IF A2 THEN 8000 3310 IF I#1 THEN 3380 3320 IF A$<"0" THEN 3340 3330 IF A$[1,1]<":" THEN 3360 3340 PRINT "**ILLEGAL ID NUMBER." 3352 GOTO 8000 3360 GOSUB 4640 3370 IF A1#2 THEN 3375 3372 PRINT "RECORD BYPASSED"LIN(1) 3373 GOTO 3120 3375 I$=A$ 3380 IF I#R[16] THEN 3400 3390 O$=A$ 3400 PRINT #2;A$ 3410 NEXT I 3415 GOSUB 2780 3416 MAT READ #1,1;R 3418 K=R[4]-R[1] 3420 GOSUB 6060 3422 IF NOT A1 THEN 3430 3424 GOSUB 2950 3426 GOTO 3100 3430 R=F2 3450 IF R[5] THEN 3600 3460 Z1=Z2=0 3470 R1=R 3480 READ #2,S 3490 GOSUB 4040 3500 PRINT #1,7;0,R 3510 PRINT #1,9;0,R 3520 R[5]=1 3530 MAT PRINT #1,1;R 3540 GOTO 3950 3600 I0=B0 3605 A$=I$ 3610 GOSUB 4650 3620 GOSUB 5680 3630 A$=O$ 3640 GOSUB 4670 3670 READ #2,S 3680 IF K3 OR B>9 THEN 3740 3690 F5=0 3700 MAT READ #1,1;R 3710 R[2]=R 3720 MAT PRINT #1,1;R 3730 GOTO 3780 3740 F5=I[K3] 3750 IF K3"9" THEN 5590 5564 IF A$="-" THEN 5590 5566 IF A$[1,1]#"-" THEN 5570 5568 D=1 5570 IF B$[1,1]#"-" THEN 5574 5572 D1=1 5574 D2=LEN(A$)-D 5576 D3=LEN(B$)-D1 5578 IF D2D3 THEN 5650 5590 IF A$B$ THEN 5650 5610 S1=0 5620 RETURN 5630 S1=1+D1 5640 RETURN 5650 S1=2-D 5660 RETURN 5670 REM--INSERT ID- OR ORDERED ELEMENT POINTER INTO POINTER RECORD. 5680 Y2=0 5690 IF B THEN 5720 5700 M0=I0 5710 GOTO 5740 5720 M0=B 5740 Y2=K5>119 5800 IF Y2 THEN 5830 5810 READ #1,M0;F2 5820 GOTO 5890 5830 GOSUB 6060 5890 PRINT #1,M0;F2 5900 FOR I1=1 TO K5 5920 IF K3 OR I1>1 THEN 5940 5930 PRINT #1;R 5940 PRINT #1;I[I1] 5950 IF NOT Y2 OR I1#60 THEN 5990 5960 PRINT #1,F2;F 5980 Y2=0 5990 IF I1#K3 THEN 6010 6000 PRINT #1;R 6010 NEXT I1 6034 RETURN 6050 REM--GET AN EMPTY RECORD FROM THE EMPTY RECORD POINTERS. 6060 M1=8 6070 READ #1,M1;F2 6080 IF NOT F2 THEN 6102 6082 IF U THEN 6090 6084 I2=2 6086 RETURN 6090 B1=M1 6095 M1=F2 6100 GOTO 6070 6102 GOSUB 6110 6104 GOTO 6150 6110 FOR I2=1 TO 121 6120 IF TYP(-1)=4 THEN 6142 6130 READ #1;J[I2] 6140 NEXT I2 6142 I2=I2-1 6145 RETURN 6146 FOR I3=1 TO I2 6147 PRINT #1;J[I3] 6148 NEXT I3 6149 RETURN 6150 IF NOT U THEN 6176 6152 IF U=2 THEN 6200 6160 IF I2<120 THEN 6180 6162 PRINT #1,R[1];0,R 6164 PRINT #1,M1;R[1] 6168 GOSUB 6146 6170 R[1]=R[1]+1 6175 MAT PRINT #1,1;R 6176 RETURN 6180 PRINT #1;R 6190 RETURN 6200 IF NOT I2 THEN 6262 6220 PRINT #1,M1;F2 6225 F2=J[I2] 6230 I2=I2-1 6240 GOSUB 6146 6250 I2=I3 6260 GOTO 6330 6262 IF M1=8 THEN 6280 6264 F2=M1 6265 READ #1,B1;Z 6266 GOSUB 6110 6267 PRINT #1,B1;0 6270 GOSUB 6146 6280 IF K<0 THEN 6330 6290 F2=R[1] 6300 R[1]=R[1]+1 6310 MAT PRINT #1,1;R 6330 I=K+I2 6335 IF I>100 THEN 6360 6340 IF I>10 AND I/10#INT(I/10) THEN 6360 6345 GOTO I+2 OF 5520,6360 6350 GOSUB 7200 6352 PRINT LIN(-1);"WARNING - ONLY "A$" RECORD"; 6354 IF A$="1" THEN 6358 6356 PRINT "S"; 6358 PRINT " LEFT." 6360 RETURN 6370 REM--READ ID-/ ORDERED ELEMENT. 6400 IF E0=1 THEN 6442 6405 READ #1;E$ 6410 FOR J0=2 TO E0 6420 READ #1;B$ 6430 NEXT J0 6440 RETURN 6442 READ #1;B$ 6444 RETURN 6450 REM--HELP PRINTOUT. 6460 PRINT 6470 PRINT "NO HELP AT THIS POINT." 6480 RETURN 7200 REM--NUM-STR 7210 A$="" 7220 J=I/10 7230 I=INT(J) 7235 J=10*(J-I) 7240 A$[1,1]=D$[J+1,J+1] 7250 A$[2]=A$ 7260 IF I THEN 7220 7270 A$=A$[2] 7280 RETURN 7500 REM--ADD FROM FILE. 7512 PRINT LIN(1),"OLD FILE NAME? "; 7514 GOSUB 1480 7515 GOTO A1+1 OF 7516,9999,7512,7512 7516 ASSIGN A$,5,X 7518 IF X<3 THEN 7530 7520 PRINT "** NO SUCH FILE.";LIN(1) 7522 GOTO 7512 7530 IF LEN(A$)<7 THEN 7550 7532 IF LEN(A$)>7 THEN 7540 7534 IF A$[1,1]="$" THEN 7550 7536 IF A$[1,1]="*" THEN 7550 7540 PRINT "**INVALID FILE NAME." 7542 GOTO 7530 7550 Y8=0 7552 IF END #5 THEN 7700 7553 RETURN 7554 PRINT "PRINTED REPORT (Y/N)? "; 7556 GOSUB 1480 7557 GOTO A1 OF 7582,7554,7554 7558 IF A$[1,1]="Y" THEN 7570 7560 IF A$[1,1]="N" THEN 7580 7562 GOTO 7554 7570 Y7=1 7572 RETURN 7580 Y7=0 7582 RETURN 7600 REM--READ DATA FROM FILE. 7602 A1=0 7604 IF I#1 THEN 7610 7606 Y8=Y8+1 7607 PRINT Y8 7608 READ #5,Y8 7610 GOTO TYP(-5) OF 7612,7622,7700,7655 7612 READ #5;I0 7614 GOSUB 9000 7620 GOTO 7626 7622 READ #5;A$ 7624 GOSUB 1580 7626 IF I#1 THEN 7640 7628 IF Y7 THEN 7640 7629 H$=A$ 7630 PRINT H$;" - "; 7640 RETURN 7655 PRINT "NOT ENOUGH ELEMENTS." 7656 A1=2 7657 RETURN 7700 REM--EOF 7704 PRINT LIN(3),"END OF SOURCE FILE" 7705 STOP 8000 PRINT "RECORD BYPASSED." 8002 PRINT 8004 GOTO 3080 9000 REM- NUM-STR 9010 D1=I0 9020 D=N0=0 9025 K=.000003 9030 IF ABS(INT(I0))ABS(I0-K*I0) THEN 9070 9040 D=D+1 9050 I0=I0*10 9060 GOTO 9030 9070 IF I0 >= 0 THEN 9100 9080 N0=1 9090 I0=-I0 9100 A$="" 9110 J=I0/10 9120 I0=INT(J) 9130 J=10*(J-I0) 9140 A$[1,1]=D$[J+1,J+1] 9150 A$[2]=A$ 9160 IF I0 THEN 9110 9170 A$=A$[2] 9180 I2=LEN(A$)-D 9190 IF I2 >= 0 THEN 9280 9200 B$="." 9210 IF I2=0 THEN 9250 9220 B$[LEN(B$)+1]="0" 9230 I2=I2+1 9240 GOTO 9210 9250 B$[LEN(B$)+1]=A$ 9260 A$=B$ 9270 GOTO 9310 9280 B$=A$[I2+1] 9290 A$[I2+1]="." 9300 A$[LEN(A$)+1]=B$ 9310 IF N0=0 OR D1=0 THEN 9350 9320 B$=A$ 9330 A$="-" 9340 A$[2]=B$ 9350 IF A$[LEN(A$),LEN(A$)]#"." THEN 9370 9360 A$=A$[1,LEN(A$)-1] 9370 RETURN 9990 REM 9999 END