00100 REM *** MBEESQL - MBUG MWB Catalogue *** 00110 REM *** MicroBee MicroWorld BASIC *** 00120 REM *** INSERT, SELECT, SELECT WHERE *** 00130 REM *** UPDATE, DELETE, VACUUM, COUNT *** 00140 REM *** Files: DBMWB1-3.DAT *** 00150 REM *** Record: id,name,disk,flag *** 00160 REM *** flag 1=Active 0=Deleted *** 00170 REM ----------------------------------- 00180 REM Variable map: 00190 REM A0$ command 00200 REM A1$ name (working) 00210 REM A2$ disk (working input) 00220 REM A5$ search term 00230 REM A6$ field choice for WHERE 00240 REM A7$ current filename 00250 REM R(1..Q) id (integer) 00260 REM N0(1..Q) name N0$(E)=string 00270 REM D(1..Q) disk (integer) 00280 REM F(1..Q) flag 1=A 0=D 00290 REM B total records in buffer 00300 REM C match/display counter 00310 REM K deleted/updated counter 00320 REM E loop index 00330 REM X next available ID 00340 REM Q array size limit 00350 REM ----------------------------------- 00360 STRS(18000) 00361 Q=450 00362 DIM R(Q),N0(Q),D(Q),F(Q) 00363 ON ERROR GOTO 00366 00364 NAME "DBMWB1.TMP" AS "DBMWB1.DAT" 00365 ON ERROR GOTO 00368 00366 NAME "DBMWB2.TMP" AS "DBMWB2.DAT" 00367 ON ERROR GOTO 00369 00368 NAME "DBMWB3.TMP" AS "DBMWB3.DAT" 00369 ON ERROR GOTO 0 00400 CLS 00410 PRINT "================================" 00420 PRINT " MBEESQL - MBUG MWB Catalogue " 00430 PRINT "================================" 00440 PRINT " 1 Load 0-F (422 programs)" 00450 PRINT " 2 Load G-O (338 programs)" 00460 PRINT " 3 Load P-Z (439 programs)" 00470 PRINT " Q Quit" 00480 PRINT "================================" 00490 INPUT "Select: ",A0$ 00500 IF A0$="1" THEN A7$="DBMWB1.DAT":GOTO 00560 00510 IF A0$="2" THEN A7$="DBMWB2.DAT":GOTO 00560 00520 IF A0$="3" THEN A7$="DBMWB3.DAT":GOTO 00560 00530 IF A0$="Q" OR A0$="q" THEN GOTO 09000 00540 PRINT "Invalid - enter 1, 2, 3 or Q" 00550 GOTO 00490 00560 GOSUB 06000 00570 CLS 00580 PRINT "================================" 00590 PRINT " MBEESQL - File: ";A7$ 00600 PRINT " ";B;" records loaded" 00610 PRINT "================================" 00620 PRINT " I Insert" 00630 PRINT " S Select all" 00640 PRINT " SW Select where" 00650 PRINT " U Update where id=?" 00660 PRINT " D Delete where id=?" 00670 PRINT " V Vacuum" 00680 PRINT " C Count" 00690 PRINT " L Change file" 00700 PRINT " Q Quit" 00710 PRINT " H Help" 00720 PRINT "================================" 00750 PRINT 00760 INPUT "CMD> ",A0$ 00765 IF A0$="q":A0$="Q" 00766 IF A0$="i":A0$="I" 00767 IF A0$="s":A0$="S" 00768 IF A0$="sw":A0$="SW" 00769 IF A0$="u":A0$="U" 00770 IF A0$="d":A0$="D" 00771 IF A0$="v":A0$="V" 00772 IF A0$="c":A0$="C" 00773 IF A0$="h":A0$="H" 00774 IF A0$="l":A0$="L" 00775 IF A0$="Q" THEN GOTO 09000 00780 IF A0$="I" THEN GOSUB 01000 00790 IF A0$="S" THEN GOSUB 02000 00800 IF A0$="SW" THEN GOSUB 03000 00810 IF A0$="U" THEN GOSUB 05000 00820 IF A0$="D" THEN GOSUB 04000 00830 IF A0$="V" THEN GOSUB 08000 00840 IF A0$="C" THEN GOSUB 08500 00850 IF A0$="H" THEN GOSUB 09700 00860 IF A0$="L" THEN GOTO 00400 00870 GOTO 00750 00880 STOP 01000 REM= INSERT 01010 PRINT "-- INSERT --" 01020 INPUT "Name : ",A1$ 01030 IF A1$="" THEN PRINT "Cancelled":RETURN 01040 INPUT "Disk : ",A2$ 01050 IF A2$="" THEN PRINT "Cancelled":RETURN 01060 B=B+1 01070 IF B>Q THEN PRINT "DB full":B=B-1:RETURN 01080 R(B)=X 01090 N0$(B)=A1$ 01100 D(B)=VAL(A2$) 01110 F(B)=1 01120 GOSUB 07000 01130 PRINT "Inserted id=";R(B) 01140 RETURN 02000 REM= SELECT ALL 02010 PRINT "-- SELECT ALL --" 02020 IF B=0 THEN PRINT "No records":RETURN 02030 C=0 02040 PRINT "NAME | DISK" 02050 PRINT "---------+-----" 02060 FOR E=1 TO B 02070 IF F(E)=0 THEN GOTO 02100 02080 PRINT N0$(E);" | ";D(E) 02090 C=C+1 02100 NEXT E 02110 PRINT "--- ";C;" active ---" 02120 RETURN 03000 REM= SELECT WHERE 03010 PRINT "-- SELECT WHERE --" 03020 PRINT "N=name D=disk I=id" 03030 INPUT "Field : ",A6$ 03040 IF A6$="" THEN PRINT "Cancelled":RETURN 03050 INPUT "Value : ",A5$ 03060 IF A5$="" THEN PRINT "Cancelled":RETURN 03070 C=0 03080 PRINT "NAME | DISK" 03090 PRINT "---------+-----" 03100 FOR E=1 TO B 03110 IF F(E)=0 THEN GOTO 03160 03120 IF A6$="N" AND N0$(E)<>A5$ THEN GOTO 03160 03130 IF A6$="D" AND D(E)<>VAL(A5$) THEN GOTO 03160 03140 IF A6$="I" AND R(E)<>VAL(A5$) THEN GOTO 03160 03150 PRINT N0$(E);" | ";D(E):C=C+1 03160 NEXT E 03170 PRINT "--- ";C;" record(s) ---" 03180 RETURN 04000 REM= DELETE WHERE id=? 04010 PRINT "-- DELETE id=? --" 04020 INPUT "ID : ",A5$ 04030 IF A5$="" THEN PRINT "Cancelled":RETURN 04040 K=0 04050 FOR E=1 TO B 04060 IF R(E)<>VAL(A5$) THEN GOTO 04080 04070 IF F(E)=1:F(E)=0:K=K+1 04080 NEXT E 04090 IF K=0 THEN PRINT "Not found":RETURN 04100 GOSUB 07000 04110 PRINT "--- ";K;" deleted (V to vacuum) ---" 04120 RETURN 05000 REM= UPDATE WHERE id=? 05010 PRINT "-- UPDATE id=? --" 05020 INPUT "ID : ",A5$ 05030 IF A5$="" THEN PRINT "Cancelled":RETURN 05040 K=0 05050 FOR E=1 TO B 05060 IF R(E)<>VAL(A5$) OR F(E)<>1 THEN GOTO 05130 05070 PRINT "Current: ";N0$(E);" | ";D(E) 05080 INPUT "Name : ",A1$ 05090 IF A1$="" THEN PRINT "Cancelled":RETURN 05100 INPUT "Disk : ",A2$ 05110 IF A2$="" THEN PRINT "Cancelled":RETURN 05120 N0$(E)=A1$:D(E)=VAL(A2$):K=K+1 05130 NEXT E 05140 IF K=0 THEN PRINT "Not found":RETURN 05150 GOSUB 07000 05160 PRINT "--- ";K;" updated ---" 05170 RETURN 06000 REM= LOAD FILE INTO BUFFER 06020 B=0:X=1 06030 ON ERROR GOTO 06130 06040 OPEN "I",6,A7$ 06050 ON ERROR GOTO 0 06060 IN#6 06070 IF EOF(6) THEN GOTO 06110 06080 INPUT R(B+1),N0$(B+1),D(B+1),F(B+1) 06090 B=B+1 06100 IF R(B)>=X:X=R(B)+1 06105 IF B