10 FOR I=1 TO 15 20 PRINT 30 NEXT I 40 CLEAR 4000 50 INPUT "DATA BASE NAME";F$ 60 IF LEN(F$)>7 THEN F$=LEFT$(F$,7) 70 PRINT 80 INPUT "IS THE DATA BASE DISK MOUNTED";Q$ 90 IF LEFT$(Q$,1)="Y" THEN 130 100 INPUT "HIT ENTER WHEN DISK IS MOUNTED";Q$ 120 RESET 130 OPEN "I",1,"X"+F$ 140 INPUT #1,Q,N 150 DIM L(N),T$(N),N$(N) 160 DIM K$(Q),K(Q),NX(Q) 170 FOR I=1 TO N 180 INPUT #1,L(I),N$(I),X,T$(I) 190 L=L+L(I) 200 IF X=1 AND K9=0 THEN K9=I 210 NEXT I 220 CLOSE 1 230 C=INT(128/L) 240 DIM Z$(N*C) 250 OPEN "R",1,F$ 260 X=0 270 FOR J=1 TO C 280 FOR I=1 TO N 290 FIELD #1,X*(I+1-I) AS D$,L(I) AS Z$(I+((J-1)*N)) 300 X=X+L(I) 310 NEXT I 320 NEXT J 330 FOR I=1 TO Q 340 NX(I)=-1 350 NEXT I 360 J=1 370 I=1 380 R=Q 390 FOR P=1 TO Q 400 GOSUB 4500 410 IF Z$(K9+K0)=SPACE$(L(K9)) THEN NX(J)=P:J=J+1:GOTO 450 420 K$(I)=Z$(K9+K0) 430 K(I)=P 440 I=I+1 450 NEXT P 460 R=I 470 W=J 500 FOR I=1 TO 15 510 PRINT 520 NEXT I 530 FOR I=1 TO 3 540 PRINT 550 NEXT I 560 PRINT "COMMANDS:" 570 PRINT TAB(5);"DELETE" 580 PRINT TAB(5);"DISPLAY" 590 PRINT TAB(5);"LIST" 600 PRINT TAB(5);"UPDATE" 610 PRINT TAB(5);"SECONDARY KEY DISPLAY" 620 PRINT TAB(5);"RELATIONAL DISPLAY" 630 PRINT TAB(5);"END" 640 PRINT 650 INPUT "OPTION";Q$ 660 IF LEFT$(Q$,2)="DE" THEN GOSUB 3000:GOTO 500 670 IF LEFT$(Q$,2)="DI" THEN GOSUB 1000:GOTO 500 680 IF LEFT$(Q$,1)="L" THEN GOSUB 2000:GOTO 500 690 IF LEFT$(Q$,1)="U" THEN GOSUB 1500:GOTO 500 700 IF LEFT$(Q$,2)="SE" THEN GOSUB 5500:GOTO 500 710 IF LEFT$(Q$,1)="R" THEN GOSUB 7000:GOTO 500 720 IF Q$="END" THEN 780 730 PRINT "INVALID OPTION SELECTED '";Q$;"'" 740 PRINT 750 PRINT 760 PRINT 770 GOTO 530 780 CLEAR 100 790 END 1000 PRINT 1010 PRINT 1020 INPUT "KEY OF RECORD";A$ 1030 A$=LEFT$(A$+SPACE$(L(K9)),L(K9)) 1040 GOSUB 3500 1050 IF P>0 THEN 1090 1060 PRINT A$;" KEY NOT FOUND"; 1070 INPUT Q$ 1080 GOTO 1110 1090 GOSUB 4000 1100 INPUT Q$ 1110 RETURN 1500 FOR I=1 TO 15 1510 PRINT 1520 NEXT I 1530 INPUT "RECORD KEY";A$ 1540 A$=LEFT$(A$+SPACE$(L(K9)),L(K9)) 1550 GOSUB 3500 1560 IF P>0 THEN GOTO 1580 1570 GOTO 2500 1580 GOSUB 4000 1590 INPUT Q$ 1600 PRINT 1610 INPUT "FIELD TO BE CAHNGED";B$ 1620 PRINT 1630 IF B$="?" THEN GOSUB 1850:GOTO 1600 1640 FOR I=1 TO N 1650 IF N$(I)=LEFT$(B$+SPACE$(LEN(N$(I))),LEN(N$(I))) THEN 1690 1660 NEXT I 1670 PRINT "INVALID FIELD NAME - TRY AGAIN" 1680 GOTO 1600 1690 IF I<>K9 THEN 1740 1700 PRINT 1710 PRINT "KEY CANNOT BE CHANGED" 1720 INPUT Q$ 1730 GOTO 1840 1740 PRINT "NEW VALUE"; 1750 IF T$(I)="C" THEN GOTO 1790 1760 INPUT Z 1770 IF L(I)=2 THEN LSET Z$(I+K0)=MKI$(Z) ELSE LSET Z$(I+K0)=MKS$(Z) 1780 GOTO 1810 1790 INPUT Z$ 1800 LSET Z$(I+K0)=Z$ 1810 INPUT "ANYMORE CHANGES";Q$ 1820 IF LEFT$(Q$,1)="Y" THEN 1600 1830 GOSUB 5000 1840 RETURN 1850 FOR I=1 TO N 1860 PRINT TAB(5);N$(I) 1870 NEXT I 1880 RETURN 2000 FOR Y=1 TO R-1 2010 P=K(Y) 2020 GOSUB 4500 2030 GOSUB 4000 2040 INPUT Q$ 2050 NEXT Y 2060 PRINT 2070 PRINT 2080 PRINT "TOTAL NUMBER OF RECORDS ON FILE =";R-1 2090 PRINT 2100 INPUT Q$ 2110 RETURN 2500 FOR I=1 TO 15 2510 PRINT 2520 NEXT I 2522 P=NX(1) 2525 GOSUB 4500 2530 P=NX(1) 2540 GOSUB 4500 2550 FOR I=1 TO N 2560 IF T$(I)="C" THEN 2590 2570 IF L(I)=2 THEN LSET Z$(I+K0)=MKI$(0) ELSE LSET Z$(I+K0)=MKS$(0) 2580 GOTO 2600 2590 LSET Z$(I+K0)=" " 2600 NEXT I 2610 LSET Z$(K9+K0)=A$ 2620 FOR I=1 TO N 2630 IF I=K9 THEN 2710 2640 PRINT N$(I); 2650 IF T$(I)="C" THEN 2690 2660 INPUT X 2670 IF L(I)=2 THEN LSET Z$(K0+I)=MKI$(X) ELSE LSET Z$(I+K0)=MKS$(X) 2680 GOTO 2710 2690 INPUT Z$ 2700 LSET Z$(I+K0)=Z$ 2710 NEXT I 2720 GOSUB 4000 2730 INPUT "DO YOU ACCEPT THIS ENTRY";Q$ 2740 IF LEFT$(Q$,1)<>"Y" THEN 2500 2750 P=NX(1) 2760 FOR I=1 TO W-2 2770 NX(I)=NX(I+1) 2780 IF NX(I)=-1 THEN 2800 2790 NEXT I 2800 K(R)=P 2810 K$(R)=A$ 2820 R=R+1 2830 GOSUB 5000 2840 RETURN 3000 FOR I=1 TO 15 3010 PRINT 3020 NEXT I 3030 INPUT "RECORD KEY";A$ 3040 A$=LEFT$(A$+SPACE$(L(K9)),L(K9)) 3050 GOSUB 3500 3060 IF P<0 THEN 3190 3070 GOSUB 4000 3080 PRINT 3090 INPUT "OK TO DELETE";Q$ 3100 IF LEFT$(Q$,1)<>"Y" THEN 3190 3110 FOR I=1 TO N 3120 IF T$(I)="C" THEN 3150 3130 IF L(I)=2 THEN LSET Z$(I+K0)=MKI$(0) ELSE LSET Z$(I+K0)=MKS$(0) 3140 GOTO 3160 3150 LSET Z$(I+K0)=" " 3160 NEXT I 3170 GOSUB 5000 3180 FOR I=1 TO R 3190 IF K$(I)=A$ THEN 3210 3200 NEXT I 3210 FOR J=I TO R 3220 K$(J)=K$(J+1) 3230 K(J)=K(J+1) 3240 NEXT J 3250 R=R-1 3260 K(R)=0 3270 K$(R)=" " 3280 NX(W)=P 3290 W=W+1 3300 RETURN 3500 FOR I=1 TO R-1 3510 IF A$=K$(I) THEN 3550 3520 NEXT I 3530 P=-1 3540 GOTO 3570 3550 P=K(I) 3560 GOSUB 4500 3570 RETURN 4000 FOR I=1 TO 15 4010 PRINT 4020 NEXT I 4030 PRINT "(KEY) ";N$(K9);" = ";Z$(K9+K0) 4040 FOR I=1 TO N 4050 IF I=K9 THEN 4100 4060 PRINT " ";N$(I);" = "; 4070 IF T$(I)="C" THEN PRINT Z$(I+K0):GOTO 4100 4080 IF L(I)=2 THEN X=CVI(Z$(I+K0)) ELSE X=CVS(Z$(I+K0)) 4090 PRINT X 4100 NEXT I 4110 RETURN 4500 IF P<1 OR P>R THEN PRINT "INVALID PARAMETER (GET)";P:GOTO 4570 4510 P0=INT((P+C-1)/C) 4520 IF P0=P1 THEN 4540 4530 GET #1,P0 4540 P1=P0 4550 K0=P-((P0-1)*C)-1 4560 K0=K0*N 4570 RETURN 5000 IF P<1 OR P>R THEN PRINT "INVALID PARAMETER (PUT)";P:GOTO 5030 5010 P0=INT((P+C-1)/C) 5020 PUT #1,P0 5030 RETURN 5500 FOR I=1 TO 15 5510 PRINT 5520 NEXT I 5530 INPUT "SECONDARY KEY NAME";S$ 5540 PRINT 5550 IF S$="?" THEN GOSUB 6000:PRINT:GOTO 5530 5560 FOR I=1 TO N 5570 IF N$(I)=LEFT$(S$+SPACE$(LEN(N$(I))),LEN(N$(I))) THEN 5610 5580 NEXT I 5590 PRINT "ERROR - FIELD NOT FOUND" 5600 PRINT:GOTO 5530 5610 PRINT 5620 PRINT" SELECT COMPARE OPERATION:" 5630 PRINT " EQ = EQUAL NE = NOT EQUAL" 5640 PRINT " GT = GREATER THAN LT = LESS THAN" 5650 PRINT " GE = GREATER/EQUAL LE = LESS/EQUAL" 5660 PRINT 5670 INPUT SE$ 5680 IF SE$="EQ" OR SE$="NE" OR SE$="GT" OR SE$="LT" OR SE$="GE" OR SE$="LE" THEN 5700 5690 PRINT:PRINT "SELECTION ERROR::":GOTO 5610 5700 IF T$(I)="C" THEN 5730 5710 INPUT "ENTER KEY VALUE";V 5720 GOTO 5760 5730 INPUT "ENTER KEY VALUE";V$ 5740 B=I 5750 V$=LEFT$(V$+SPACE$(L(B)),L(B)) 5760 B=I 5770 FOR I1=1 TO R-1 5780 P=K(I1) 5790 GOSUB 4500 5800 IF T$(B)="C" THEN 5890 5810 IF L(B)=2 THEN C1=CVI(Z$(B+K0)) ELSE C1=CVS(Z$(B+K0)) 5820 IF SE$="EQ" THEN IF V=C1 THEN 5960 ELSE 5980 5830 IF SE$="NE" THEN IF V<>C1 THEN 5960 ELSE 5980 5840 IF SE$="GT" THEN IF VC1 THEN 5960 ELSE 5980 5860 IF SE$="LE" THEN IF V=>C1 THEN 5960 ELSE 5980 5870 IF SE$="GE" THEN IF V=V$ THEN 5960 ELSE 5980 5910 IF SE$="GT" THEN IF Z$(B+K0)>V$ THEN 5960 ELSE 5980 5920 IF SE$="LT" THEN IF Z$(B+K0)V$ THEN 5960 ELSE 5980 5950 GOTO 5980 5960 GOSUB 4000 5970 INPUT Q$ 5980 NEXT I1 5990 RETURN 6000 FOR I=1 TO N 6010 PRINT TAB(5);N$(I) 6020 NEXT I 6030 RETURN 7000 FOR I=1 TO 15 7010 PRINT 7020 NEXT I 7030 PRINT "RELATION TYPE:" 7040 PRINT " FIELD TO FIELD" 7050 PRINT " RECORD TO RECORD" 7060 PRINT 7070 INPUT Q$ 7080 IF Q$="END" THEN 8380 7090 IF LEFT$(Q$,1)="F" THEN 7130 7100 IF LEFT$(Q$,1)="R" THEN 7860 7110 PRINT " >>> ERROR - INVALID SELECTION <<<" 7120 PRINT:PRINT:GOTO 7030 7130 PRINT:PRINT 7140 PRINT "FIELD-TO-FIELD" 7150 PRINT 7160 INPUT "PRIMARY FIELD NAME";Q1$ 7170 IF Q1$="?" THEN GOSUB 8440:GOTO 7150 7180 FOR I=1 TO N 7190 IF Q1$=LEFT$(N$(I),LEN(Q1$)) THEN 7240 7200 NEXT I 7210 PRINT " >>> ERROR - NO SUCH FIELD <<<" 7220 PRINT 7230 GOTO 7160 7240 I9=I 7250 PRINT 7260 INPUT "SECONDARY FIELD NAME";Q1$ 7270 IF Q1$="?" THEN GOSUB 8440:GOTO 7250 7280 FOR I=1 TO N 7290 IF Q1$=LEFT$(N$(I),LEN(Q1$)) THEN 7340 7300 NEXT I 7310 PRINT " >>> ERROR - NO SUCH FIELD <<<" 7320 PRINT 7330 GOTO 7260 7340 I8=I 7350 IF T$(I9)=T$(I8) THEN 7400 7360 PRINT 7370 PRINT " >>> ERROR - FIELD TYPES NOT THE SAME <<<" 7380 PRINT 7390 GOTO 7030 7400 FOR I=1 TO 15 7410 PRINT 7420 NEXT I 7430 PRINT "HOW IS ";N$(I9);" TO BE COMPARED TO ";N$(I8) 7440 PRINT 7450 PRINT TAB(15);"EQ = EQUAL NE = NOT EQUAL" 7460 PRINT TAB(15);"LT = LESS THAN LE = LESS/EQUAL" 7470 PRINT TAB(15);"GT = GREATER THAN GE = GREATER/EQUAL" 7480 PRINT 7490 INPUT Q1$ 7500 IF Q1$="EQ" THEN 7600 7510 IF Q1$="NE" THEN 7600 7520 IF Q1$="LT" THEN 7600 7530 IF Q1$="GT" THEN 7600 7540 IF Q1$="LE" THEN 7600 7550 IF Q1$="GE" THEN 7600 7560 PRINT 7570 PRINT " >>> ERROR - INVALID COMPARISON OPERATION <<<" 7580 PRINT 7590 GOTO 7440 7600 FOR Y=1 TO R-1 7610 P=K(Y) 7620 GOSUB 4500 7630 IF T$(I8)="C" THEN 7770 7640 IF L(I9)=2 THEN V=CVI(Z$(I9+K0)) ELSE V=CVS(Z$(I9+K0)) 7650 IF L(I8)=2 THEN V1=CVI(Z$(I8+K0)) ELSE V1=CVS(Z$(I8+K0)) 7660 IF Q1$="EQ" THEN IF V=V1 THEN 7740 ELSE 7720 7670 IF Q1$="NE" THEN IF V<>V1 THEN 7740 ELSE 7720 7680 IF Q1$="GE" THEN IF V=>V1 THEN 7740 ELSE 7720 7690 IF Q1$="LE" THEN IF V=V1 THEN 7740 ELSE 7720 7720 NEXT Y 7730 GOTO 8380 7740 GOSUB 4000 7750 PRINT:INPUT Q$:PRINT 7760 GOTO 7720 7770 V=L(I8) 7780 IF V>L(I9) THEN V=L(I9) 7790 IF Q1$="EQ" THEN IF LEFT$(Z$(I9+K0),V)=LEFT$(Z$(I8+K0),V) THEN 7740 ELSE 7720 7800 IF Q1$="NE" THEN IF LEFT$(Z$(I9+K0),V)<>LEFT$(Z$(I8+K0),V) THEN 7740 ELSE 7720 7810 IF Q1$="GE" THEN IF LEFT$(Z$(I9+K0),V)=>LEFT$(Z$(I8+K0),V) THEN 7740 ELSE 7720 7820 IF Q1$="LE" THEN IF LEFT$(Z$(I9+K0),V)=LEFT$(Z$(I8+K0),V) THEN 7740 ELSE 7720 7850 GOTO 7720 7860 PRINT 7870 PRINT "RECORD-TO-RECORD" 7880 PRINT 7890 INPUT "PRIMARY KEY OF BASE RECORD";Q1$ 7900 A$=LEFT$(Q1$+SPACE$(L(K9)),L(K9)) 7910 GOSUB 3500 7920 IF P<0 THEN PRINT " >>> ERROR - RECORD NOT FOUND <<<":GOTO 7030 7930 PRINT 7940 INPUT "WHICH FIELD IS TO BE COMPARED";Q1$ 7950 IF Q1$="?" THEN GOSUB 8440:GOTO 7930 7960 FOR I=1 TO N 7970 IF Q1$=LEFT$(N$(I),LEN(Q1$)) THEN 8020 7980 NEXT I 7990 PRINT 8000 PRINT " >>> ERROR - INVALID FIELD <<<" 8010 GOTO 7930 8020 PRINT:PRINT:PRINT 8030 PRINT "HOW IS THE BASE TO BE COMPARED:" 8040 PRINT TAB(10);"EQ = EQUAL NE = NOT EQUAL" 8050 PRINT TAB(10);"GT = GREATER THAN GE = GREATER/EQUAL" 8060 PRINT TAB(10);"LT = LESS THAN LE = LESS/EQUAL" 8070 PRINT 8080 INPUT Q1$ 8090 IF Q1$="EQ" OR Q1$="NE" OR Q1$="LE" OR Q1$="LT" OR Q1$="GT" OR Q1$="GE" THEN 8110 8100 PRINT:PRINT " >>> ERROR - INVALID COMPARISON OPERATION <<<":PRINT:GOTO 8030 8110 IF T$(I)="C" THEN Q9$=Z$(I+K0) ELSE IF L(I)=2 THEN V=CVI(Z$(I+K0)) ELSE V=CVS(Z$(I+K0)) 8120 I9=P 8130 I8=I 8140 FOR Y=1 TO R-1 8150 P=K(Y) 8160 IF P=I9 THEN 8260 8170 GOSUB 4500 8180 IF T$(I8)="C" THEN 8310 8190 IF L(I8)=2 THEN V1=CVI(Z$(I8+K0)) ELSE V1=CVS(Z$(I8+K0)) 8200 IF Q1$="EQ" THEN IF V=V1 THEN 8280 ELSE 8260 8210 IF Q1$="NE" THEN IF V<>V1 THEN 8280 ELSE 8260 8220 IF Q1$="GE" THEN IF V=>V1 THEN 8280 ELSE 8260 8230 IF Q1$="LE" THEN IF V=V1 THEN 8280 ELSE 8260 8260 NEXT Y 8270 GOTO 8380 8280 GOSUB 4000 8290 PRINT:INPUT Q$:PRINT 8300 GOTO 8260 8310 IF Q1$="EQ" THEN IF Z$(I8+K0)=Q9$ THEN 8280 ELSE 8260 8320 IF Q1$="NE" THEN IF Z$(I8+K0)<>Q9$ THEN 8280 ELSE 8260 8330 IF Q1$="GE" THEN IF Z$(I8+K0)=>Q9$ THEN 8280 ELSE 8260 8340 IF Q1$="LE" THEN IF Z$(I8+K0)=Q9$ THEN 8280 ELSE 8260 8370 GOTO 8260 8380 PRINT 8390 PRINT 8400 PRINT TAB(20);"DONE" 8410 PRINT 8420 INPUT Q$ 8430 RETURN 8440 PRINT 8450 PRINT