REM ** MDBS SAMPLE PROGRAM REM * THIS PROGRAM IS INTENDED FOR USE SOLELY AS A SIMPLE EXAMPLE OF THE REM * MDBS SYSTEM. REM * THE PROGRAM DOES ILLUSTRATE SOME FACETS OF USE OF THE MDBS SYSTEM. REM * NOTE THAT THE TWO SETS "BOOKS" AND "KEYWORDS" ARE "AUTO" SETS. THIS REM * CAUSES THE APPROPRIATE RECORDS TO BE AUTOMATICALLY ADDED TO THEIR REM * SETS. THE "LINK" SET IS A MANY-TO-MANY SET WHICH LINKS EACH BOOK REM * WITH ITS KEYWORDS. REM * FOR THIS PROGRAM, BOOK NAMES MAY BE STRINGS UP TO 30 CHARACTERS IN REM * LENGTH AND KEYWORDS UP TO 10 CHARACTERS. TRY ENTERING VARIOUS REM * COMBINATIONS OF BOOK NAMES ("BOOK 1","BOOK 2", ETC.) AND KEYWORDS REM * ("KEY A","KEY B", ETC.) AND THEN USE THE "K" AND "B" COMMANDS TO REM * PERFORM RETRIEVALS. REM * NOTE: TO TERMINATE THE "KEYWORD?" PROMPT IN THE "A" FUNCTION, ENTER REM * A CARRIAGE RETURN. REM * DON'T FORGET TO CREATE A DATABASE NAMED SAMPLEDB.DB REM * USING DDL AND SAMPLDDL.DDL! REM * REM * Define Variables for OPEN O1$="A:SAMPLEDB.DB" O2$="USER" O3$="PASSWORD" O4$="MOD" PRINT PRINT " MDBS Book/Keyword Sample Program" PRINT REM * REM * FOLLOWING CODE IS GENERATED BY THE MDBS/CBASIC CONFIGURATION REM * UTILITY *CONFIG*. NOTE THAT THE HEX VALUES IN LINES 29 AND 30 OF REM * THIS PROGRAM MUST BE CHANGED TO THE VALUES GIVEN FOR YOUR SYSTEM REM * BY THE *CONFIG* UTILITY. REM * REM * REM--------------------------------------------------------------- REM--Any DIM or COMMON statements should be placed after this line DIM W0%(6) A0%=6000H SAVEMEM 8C06H,"DMS.COM" IF PEEK(A0%)<>0C3H OR PEEK(A0%+3)<>0C3H THEN \ PRINT "DMS Load Error": STOP REM--Set up global variables POKE A0%+6, VARPTR(E0%) POKE A0%+7, VARPTR(E0%)/256 POKE A0%+8, VARPTR(C0$) POKE A0%+9, VARPTR(C0$)/256 POKE A0%+10, VARPTR(W0%(1)) POKE A0%+11, VARPTR(W0%(1))/256 REM--Define Functions DEF FN.DMS%(CMD$) C0$=CMD$ CALL A0% IF E0%<>0 AND E0%<>255 THEN\ PRINT "DMS error ";E0%;"encountered: ";C0$:\ C0$="CLOSE":\ CALL A0% :\ STOP FN.DMS%=E0% RETURN FEND DEF FN.DMS.DEF%(CMD$) C0$=CMD$ CALL A0%+3 IF E0%<>0 THEN\ PRINT "DMS error ";E0%;"encountered: ";C0$:\ C0$="CLOSE":\ CALL A0% :\ STOP FN.DMS.DEF%=E0% RETURN FEND REM--Set up OPEN call REM--(Variables 01$-04$ must be initialized prior to this section of code) W0%(1)=4 W0%(2)=VARPTR(O1$) W0%(3)=VARPTR(O2$) W0%(4)=VARPTR(O3$) W0%(5)=VARPTR(O4$) E0%=FN.DMS.DEF%("DEFINE,OPENBLK") E0%=FN.DMS%("OPEN,OPENBLK") REM REM--------------------------------------------------------------- REM W0%(1)=1 W0%(2)=VARPTR(T$) E0%=FN.DMS.DEF%("DEFINE,TTLBLK") W0%(1)=2 W0%(3)=VARPTR(A$) E0%=FN.DMS.DEF%("DEFINE,BOOKBLK") W0%(1)=1 W0%(2)=VARPTR(K$) E0%=FN.DMS.DEF%("DEFINE,KEYBLK") W0%(1)=5 W0%(2)=VARPTR(S1%) W0%(3)=VARPTR(S2%) W0%(4)=VARPTR(S3%) W0%(5)=VARPTR(S4%) W0%(6)=VARPTR(S5%) E0%=FN.DMS.DEF%("DEFINE,STATBLK") REM SPACE10$=" " SPACE20$=SPACE10$+SPACE10$ SPACE30$=SPACE10$+SPACE10$+SPACE10$ 100 PRINT PRINT " (A) Add new Books/Keywords to Data Base" PRINT " (B) List Keywords for a given Book" PRINT " (K) List Books for a given Keyword" PRINT " (L) List Entire Data Base" PRINT " (P) Print Data Base Usage Statistics" PRINT " (S) Stop" 110 PRINT INPUT "Function?"; LINE F$ F$=UCASE$(MID$(F$,1,1)) : REM * ONLY USE 1 CHARACTER IF F$="" THEN 100 IF F$="A" THEN 200 IF F$="B" THEN 300 IF F$="K" THEN 400 IF F$="L" THEN 500 IF F$="P" THEN 600 IF F$="S" THEN 700 PRINT "Illegal function" GOTO 100 REM * REM * (A) ADD NEW BOOKS/KEYWORDS TO DATA BASE REM * 200 INPUT "Book name?"; LINE T$ IF T$="" THEN 110 REM * CHECK FOR BOOK ALREADY IN DATA BASE E0%=FN.DMS%("FMSK,BOOKS,TTLBLK") IF E0%=0 THEN \ PRINT "Book already in Data Base" \ ELSE \ ADD BOOK TO DATA BASE INPUT "Author?"; LINE A$ :\ E0%=FN.DMS%("CRS,BOOK,BOOKBLK") REM * INPUT KEYWORDS AND LINK THE BOOK AND ITS KEYWORDS REM * (FOLLOWING STATEMENT LINKS KEYWORDS TO THE CURRENT BOOK) E0%=FN.DMS%("SOC,LINK") 210 INPUT "Keyword?"; LINE K$ IF K$="" THEN 110 REM * CHECK FOR NEW KEYWORD E0%=FN.DMS%("FMSK,KEYWORDS,KEYBLK") IF E0%<>0 THEN \ PRINT " (new keyword)" :\ E0%=FN.DMS%("CRS,KEYWORD,KEYBLK") REM * ESTABLISH SET RELATIONSHIP BETWEEN KEYWORD AND BOOK E0%=FN.DMS%("ACS,LINK") GOTO 210 REM * REM * (B) LIST KEYWORDS FOR A GIVEN BOOK REM * 300 INPUT "Book name?"; LINE T$ IF T$="" THEN 110 K$=SPACE10$ E0%=FN.DMS%("FMSK,BOOKS,TTLBLK") IF E0%<>0 THEN \ PRINT "*** Book not found in Data Base" :\ GOTO 110 REM * BOOK LOCATED -- ACCESS AND LIST EACH KEYWORD E0%=FN.DMS%("SOM,LINK,BOOKS") IF E0%<>0 THEN \ PRINT " (none)" :\ GOTO 110 WHILE E0%=0 E0%=FN.DMS%("GETM,LINK,KEYBLK") PRINT " ";K$ E0%=FN.DMS%("FNM,LINK") WEND GOTO 110 REM * REM * (K) LIST BOOKS FOR A GIVEN KEYWORD REM * 400 INPUT "Keyword?"; LINE K$ IF K$="" THEN 110 T$=SPACE30$ A$=SPACE20$ E0%=FN.DMS%("FMSK,KEYWORDS,KEYBLK") IF E0%<>0 THEN \ PRINT "*** Keyword not found in Data Base" :\ GOTO 110 REM * KEYWORD LOCATED -- ACCESS AND LIST EACH BOOK E0%=FN.DMS%("SMM,LINK,KEYWORDS") IF E0%<>0 THEN \ PRINT " (none)" :\ GOTO 110 WHILE E0%=0 E0%=FN.DMS%("GETO,LINK,BOOKBLK") PRINT " ";T$;TAB(35);A$ E0%=FN.DMS%("FNO,LINK") WEND GOTO 110 REM * REM * (L) LIST ALL KEYWORDS AND BOOKS IN THE DATA BASE REM * 500 PRINT K$=SPACE10$ T$=SPACE30$ A$=SPACE20$ PRINT "Keywords:" E0%=FN.DMS%("FFM,KEYWORDS") WHILE E0%=0 E0%=FN.DMS%("GETM,KEYWORDS,KEYBLK") PRINT " ";K$ E0%=FN.DMS%("FNM,KEYWORDS") WEND PRINT PRINT "Books:";TAB(34);"Authors:" E0%=FN.DMS%("FFM,BOOKS") WHILE E0%=0 E0%=FN.DMS%("GETM,BOOKS,BOOKBLK") PRINT " ";T$;TAB(35);A$ E0%=FN.DMS%("FNM,BOOKS") WEND GOTO 110 REM REM * (P) PRINT USAGE STATISTICS REM * 600 E0%=FN.DMS%("STAT,STATBLK") PRINT PRINT "Data Base Usage Statistics" PRINT PRINT "Page Buffers Allocated:";S1% PRINT " Page References:";S2% PRINT " Page Faults:";S3% PRINT " Disk Reads:";S4% PRINT " Disk Writes:";S5% GOTO 110 REM * REM * (S) STOP REM * 700 E0%=FN.DMS%("CLOSE") IF E0%=0 THEN STOP REM * REM * DML ERROR REM * PRINT "DML error ";E0%;" encountered" E0%=FN.DMS%("CLOSE") STOP