--- title: "Bookworm" type: "article" slug: "bookworm" url: "http://localhost/article/bookworm/" markdown_url: "http://localhost/article/bookworm.md" published_at: "2020-10-27T17:12:19+00:00" modified_at: "2024-05-26T13:19:30+00:00" featured_image: url: "http://localhost/wp-content/uploads/2022/04/20230809-041332.jpg" excerpt: "This program will help you manage your book, comic book, or phonograph record collection. See the article for special LOAD/RUN instructions." category: - name: "Syntax" slug: "syntax" taxonomy: "category" url: "http://localhost/category/periodicals/syntax/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "Magic World Software" slug: "magic-world-software" taxonomy: "post_tag" url: "http://localhost/tag/magic-world-software/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" - name: "Type-in program" slug: "type-in-program" taxonomy: "post_tag" url: "http://localhost/tag/type-in-program/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Brett McCarron" slug: "brett-mccarron" taxonomy: "indiv" url: "http://localhost/indiv/brett-mccarron/" publication: "Syntax" publication_r: id: 10246 title: "Syntax" type: "periodical" url: "http://localhost/periodical/syntax/" authors: "Brett McCarron" volume: "5" issue: "5" issues_articles: - id: 26727 title: "Syntax/Syntax ZX80 v5 n5" type: "issue" url: "http://localhost/issue/syntax-syntax-zx80-v5-n5/" pages: "8-9" pubdate: "May 1984" product_reviews: - id: 36548 title: "Bookworm" type: "product" url: "http://localhost/product/bookworm/" archive_link: false volumeissue: "v5n5" companies_articles: - id: 36546 title: "Magic World Software" type: "company" url: "http://localhost/company/magic-world-software/" article_media: - id: 50601 title: "Bookworm" type: "computer_media" url: "http://localhost/computer_media/bookworm/" --- # Bookworm This program will help you manage your book, comic book, or phonograph record collection. See the article for special LOAD/RUN instructions. ## Source Code: Bookworm ``` 10 REM *Bookworm* (c) Magic World Software 1984 100 GO TO f 1000 REM SORT 1010 CLS : PRINT AT u,w;"HARD COPY DESIRED? (Y/N)": PAUSE w: IF INKEY$="Y" OR INKEY$="y" THEN LET p$=STR$ k 1300 LET s$="ALPHA LIST": LET b=w: LET n=a 1310 LET m=k 1320 LET b=m+k: IF b>n THEN GO TO 1360 1330 IF a$(b)>a$(m) THEN GO TO 1350 1340 LET m=m+k: GO TO 1320 1350 LET f$=a$(m): LET a$(m)=a$(b): LET a$(b)=f$: GO TO 1340 1360 LET c$=a$(n): GO SUB g: IF VAL p$<>k THEN PRINT AT z,w;">Press ENTER to continue": PAUSE w 1370 LET n=n-k: IF n>w THEN GO TO 1310 1400 LET p$=STR$ w: GO TO e 1500 REM SEARCH 1520 CLS : PRINT AT u,w;"Enter Author or Title": INPUT d$: IF d$="" THEN GO TO c 1530 PRINT AT u,w;;" Now searching data .....": LET m=LEN d$-k: FOR n=k TO a: FOR b=k TO d-m 1550 IF d$=a$(n,b TO b+m) THEN GO TO 1590 1570 NEXT b: NEXT n 1580 PRINT AT u,w;" Unable to Locate Data": BEEP .05,k: IF VAL x$=3 OR VAL x$=4 THEN LET m=k 1585 RETURN 1590 LET c$=a$(n): GO SUB g: PRINT AT z,w;">Correct Title? (Y/N)": PAUSE w: IF INKEY$="y" OR INKEY$="Y" THEN RETURN 1600 CLS : PRINT AT u,w;" Continuing search .....": GO TO 1570 2000 REM ADD 2010 LET a=a+k: IF a>425 THEN CLS : PRINT AT u,w;">OUT OF MEMORY": BEEP .05,w: PRINT AT z,w;"Press ENTER for menu": PAUSE w: GO TO f 2020 LET c$=b$: LET s$="ADD NEW TITLE": GO SUB g: LET c$( TO v)=d$: GO SUB g: LET c$(z TO d)=d$ 2030 GO SUB g: LET c$(o TO 36)=d$: GO SUB g: LET c$(37 TO 45)=d$: GO SUB g: LET c$(46 TO 49)=d$: GO SUB g: LET c$(50 TO 51)=d$ 2040 GO SUB g: LET c$(52 TO 55)=d$: GO SUB g: LET c$(56)=d$: GO SUB g: LET c$(57)=d$: GO SUB g: LET c$(58)=d$: GO SUB g: LET c$(59 TO 63)="0000"( TO 5-LEN d$)+d$ 2050 GO SUB g: LET c$(64 TO 67)=d$: GO SUB g: LET c$(68 TO 69)=d$: GO SUB g: LET c$(70 TO )=d$ 2100 GO SUB g: LET a$(a)=c$: GO TO e 3000 REM CHANGE 3020 LET s$="CHANGE DATA": LET m=w: GO SUB c: IF m=k THEN GO TO e 3030 PRINT AT z,w;"TITLE (or ""Enter"")": INPUT d$: IF d$<>"" THEN LET a$(n, TO v)=d$: GO SUB g 3050 PRINT AT z,w;">LAST NAME": INPUT d$: IF d$<>"" THEN LET a$(n,z TO d)=d$: GO SUB g 3070 PRINT AT z,w;">FIRST NAME": INPUT d$: IF d$<>"" THEN LET a$(n,o TO 36)=d$: GO SUB g 3090 PRINT AT z,w;">PUBLISHER ": INPUT d$: IF d$<>"" THEN LET a$(n,37 TO 45)=d$: GO SUB g 3110 PRINT AT z,w;">PUB. DATE": INPUT d$: IF d$<>"" THEN LET a$(n,46 TO 49)=d$: GO SUB g 3130 PRINT AT z,w;">EDITION ": INPUT d$: IF d$<>"" THEN LET a$(n,50 TO 51)=d$: GO SUB g 3150 PRINT AT z,w;">PAGES ": INPUT d$: IF d$<>"" THEN LET a$(n,52 TO 55)=d$: GO SUB g 3170 PRINT AT z,w;">SUBJECT": INPUT d$: IF d$<>"" THEN LET a$(n,56)=d$: GO SUB g 3190 PRINT AT z,w;">FORMAT ": INPUT d$: IF d$<>"" THEN LET a$(n,57)=d$: GO SUB g 3210 PRINT AT z,w;">CONDITION": INPUT d$: IF d$<>"" THEN LET a$(n,59)=d$: GO SUB g 3230 PRINT AT z,w;">VALUE ": INPUT d$: IF d$<>"" THEN LET a$(n,59 TO 63)="0000"( TO 5-LEN d$)+d$: GO SUB g 3250 PRINT AT z,w;">SOURCE": INPUT d$: IF d$<>"" THEN LET a$(n,64 TO 67)=d$: GO SUB g 3270 PRINT AT z,w;"># COPIES": INPUT d$: IF d$<>"" THEN LET a$(n,68 TO 69)=d$: GO SUB g 3290 PRINT AT z,w;">NOTES ": INPUT d$: IF d$<>"" THEN LET a$(n,70 TO )=d$ 3300 GO SUB g: GO TO e 4000 REM DELETE 4010 LET s$="DELETE TITLE": LET m=w: GO SUB c: IF m=k THEN GO TO e 4030 PRINT AT z,w;">Enter ""D"" to Delete": PAUSE w: IF INKEY$<>"d" AND INKEY$<>"D" THEN GO TO e 4050 LET a$(n)="*Title Deleted*": LET a$(n,59 TO 63)="00000": LET a$(n,68 TO 69)="00": LET c$=a$(n): GO SUB g: BEEP .05,z: GO TO e 5000 REM RECALL 5010 LET s$="RECALL TITLE": GO SUB c: GO TO e 6000 REM SAVE 6050 SAVE "bookworm" 6060 GO TO f 7000 REM SUMMARY 7010 CLS : PRINT AT u,w;"HARD COPY OF SUMMARY? (Y/N)": PAUSE w: IF INKEY$="Y" OR INKEY$="y" THEN LET p$=STR$ k 7020 LET n=w: LET r=w: LET m=w: FOR b=k TO a 7060 LET r=r+VAL a$(b,68 TO 69): LET n=n+((VAL a$(b,62 TO 63)/100)+VAL a$(b,59 TO 61))*VAL a$(b,68 TO 69): IF VAL a$(b,68)=w THEN LET m=m+k 7100 NEXT b: CLS : PRINT AT k,w;" --> Action: Summary";AT 7,w;"No. of Titles: ";a-m''"Total No. of Copies: ";r''"Total Value: $";n''"No. Titles in Want List: ";m 7110 IF VAL p$=k THEN LPRINT "\:'\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\. ";TAB u;"*SUMMARY*";TAB o;"\: TITLES: ";a-m;TAB o;"\: COPIES: ";r;TAB o;"\: VALUE: $";n;TAB o;"\: WANT LIST: ";m;TAB o;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:": LET p$=STR$ w 7990 GO TO e 8000 REM SUBROUTINES 8040 CLS : PRINT AT w,u;"Master Menu";TAB u;"------ ----"'''"(1) Alpha Sort"''"(2) Add New Title"''"(3) Change Existing Data"''"(4) Delete Title"''"(5) Recall Title"''"(6) Save to Tape"''"(7) Summary" 8050 PRINT AT z,w;">Please Select Function": LET x$=INKEY$: IF CODE x$<49 OR CODE x$>55 THEN GO TO 8050 8060 IF a=0 AND VAL x$<>2 THEN PRINT AT 19,w;">Cannot complete function selected - data files empty": GO TO 8050 8080 CLS : GO TO VAL x$*1e3 8100 PRINT AT z,w;" >Any more? (Y,N,Z) ": PAUSE w: IF INKEY$<>"N" AND INKEY$<>"n" AND INKEY$<>"Y" AND INKEY$<>"y" AND INKEY$<>"Z" AND INKEY$<>"z" THEN GO TO e 8110 IF INKEY$="Y" OR INKEY$="y" THEN GO TO VAL x$*1e3 8120 IF INKEY$="Z" OR INKEY$="z" THEN LET p$=STR$ k: GO SUB g: LET p$=STR$ w: GO TO e 8130 GO TO f 9000 REM DISPLAY 9010 CLS : PRINT " --> Action: ";s$: IF VAL x$<>k AND VAL x$<>3 THEN PRINT AT z,w;">Please enter data" 9020 IF VAL x$=3 THEN LET c$=a$(n) 9050 PRINT AT 2,w;"TITLE: ";c$( TO v)''"Author: ";c$(z TO d);",";c$(o TO 36)''"PUBLISHER: ";c$(37 TO 45)''"PUB. DATE: ";c$(46 TO 49);TAB 17;"EDITION: ";c$(50 TO 51)''"PAGES: ";c$(52 TO 55);TAB 15;"SUBJECT: ";c$(56)''"FORMAT: ";c$(57);TAB 13;"CONDITION: ";c$(58)''"VALUE: $";c$(59 TO 61);".";c$(62 TO 63),"SOURCE: ";c$(64 TO 67)''"# COPIES: ";c$(68 TO 69);TAB 14;"NOTES: ";c$(70 TO ) 9070 IF VAL p$=k THEN LPRINT "\:'\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\. \: TITLE: ";c$( TO v);TAB o;"\: AUTHOR: ";c$(z TO d);",";c$(o TO 36);TAB o;"\: PUBLISHER: ";c$(37 TO 45);TAB o;"\: PUB. DATE: ";c$(46 TO 49);TAB 17;"EDITION: ";c$(50 TO 51);TAB o;"\: PAGES: ";c$(52 TO 55);"SUBJECT: ";c$(56);TAB o;"\: FORMAT: ";c$(57);TAB 14;"CONDITION: ";c$(58);TAB o;"\: VALUE: $";c$(59 TO 61);".";c$(62 TO 63),"SOURCE: ";c$(64 TO 67);TAB o;"\: # COPIES: ";c$(68 TO 69);TAB 14;"NOTES: ";c$(70 TO );TAB o;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:" 9110 IF VAL x$<>k THEN LET p$=STR$ w: IF VAL x$=2 AND c$(70)=" " THEN INPUT d$: IF d$="" THEN GO TO 9110 9400 RETURN 9490 STOP 9500 REM VARIABLES 9510 LET c=1500: LET d=30: LET o=31: LET s=77: LET u=10: LET v=20: LET w=0: LET p$=STR$ w 9520 LET e=8100: LET f=8e3: LET g=9e3: LET k=1: LET a=w: LET z=21 9530 DIM a$(425,s): DIM c$(s) 9540 LET b$="_____________________________________________________________________________": LET c$=b$: GO TO f ```