home *** CD-ROM | disk | FTP | other *** search
- REM JOURNAL.BAS FIRST APPEARED IN THE FEBRUARY 1979 ISSUE
- REM OF KILOBAUD MAGAZINE...REQUIRES BASIC-E, CBASIC, OR CBASIC-2 FOR
- REM USE. SEE THAT ISSUE OF KILOBAUD FOR INSTRUCTIONS.
- REM
- REM COMPUTER JOURNAL RESOURCE LIBRARY
- REM
- REM MAIN PROGRAM
- REM
- REM WRITTEN IN BASIC-E
- REM
- REM
- REM
- REM NOV 26,1979
- REM
-
- PRINT.LINE=1 :REM SAY PRNTR ON FIRST LINE
- LINES.PER.PAGE=66 :REM NAME SAYS IT ALL
- CLEAR.SCREEN=12 :REM DEF SCRN CLR CHAR.
- KEYBOARD.STAT.PORT=94 :REM DEFINE KBD STATUS PORT
- KBDMASK=128 :REM KEYBOARD BIT MASK
- KBD.TRUE=0 :REM ACTIVE LO
- KEYBOARD.DATA.PORT=92 :REM DEFINE KBD DATA PORT
- MAX.ENTRY=500 :REM DEFINE MAX LIB SIZE
- MAX.KEYS=8 :REM DEFINE MAX # KEYS/ENTRY
- EOF$=CHR$(26) :REM DEFINE END OF FIL CHAR
-
- DIM INDEX$(MAX.ENTRY),MONTH$(12),KEY$(185),JOURNAL$(10)
- DIM CODE$(7),K$(MAX.KEYS),SPOOL(MAX.ENTRY)
-
-
- GOSUB 800 :REM SIGN-ON MESSAGE
- PRINT TAB(24);"Please Stand By . . . .":PRINT:PRINT
-
- REM READ NECESSARY INFORMATION FROM DATA STATEMENTS
-
- FOR I=1 TO 100
- READ JOURNAL$(I)
- IF JOURNAL$(I)="0" THEN 10
- NEXT I
- 10 NM=I-1
-
- FOR I=1 TO 12
- READ MONTH$(I)
- NEXT I
-
- FOR I=1 TO 400
- READ KEY$(I)
- IF KEY$(I)="0" THEN 20
- NEXT I
- 20 NK=I-1
-
- REM DEFINE FIRST LETTERS OF VALID COMMANDS
-
- CODE$(1)="A"
- CODE$(2)="C"
- CODE$(3)="D"
- CODE$(4)="F"
- CODE$(5)="Q"
- CODE$(6)="S"
- CODE$(7)="L"
-
-
- DATALIB$="CMAGDATA.LIB" :INDXLIB$="CMAGINDX.LIB"
- FILE DATALIB$(128),INDXLIB$(2*MAX.KEYS+4)
-
- REM READ INDEX FILE FROM DISK
-
- IF END #2 THEN 30
- FOR I=1 TO MAX.ENTRY
- READ #2,I;INDEX$(I)
- IF INDEX$(I)="0" THEN NULL=NULL+1
- NEXT I
- 30 EXTENT=I-1
- INDEX$(I)="0"
- IF EXTENT>0 THEN 35
-
- REM ARRIVE HERE IF EMPTY INDEX FILE ON DISK
-
- INPUT "Can't find Index File - is this new library?";A$
- IF LEFT$(A$,1)="Y" THEN 35
-
- REM FORM NEW INDEX FILE
- 31 GOSUB 32
- GOTO 35
-
- 32 PRINT TAB(21);"Forming a new Index"
- PRINT:PRINT:PRINT:PRINT
-
- NULL=0
- IF END #1 THEN 33
- FOR I=1 TO MAX.ENTRY-1
- READ #1,I;DUM$,DUM$,DUM$,DUM$,DUM$,INDEX$(I)
- IF INDEX$(I)="0" THEN NULL=NULL+1
- NEXT I
- 33 EXTENT=I-1
- INDEX$(I)="0"
- GOSUB 410
- RETURN
-
- REM COMMAND MODE ENTRY POINT
-
- 35 GOSUB 800 :REM SIGN-ON MESSAGE
- PRINT TAB(11);"Size of Library is currently ";\
- EXTENT-NULL;" entries": PRINT:PRINT
-
- 40 FOR J=1 TO 1 STEP 0
- PRINT
- INPUT "Command: ";COM$
- FOR I=1 TO 7
- IF LEFT$(COM$,1)=CODE$(I) THEN \
- ON I GOTO 100,200,300,31,400,500,600
- NEXT I
-
- REM ARRIVE HERE IF INVALID COMMAND WAS ENTERED
-
- PRINT CHR$(CLEAR.SCREEN)
- PRINT "Commands:"
- PRINT "---------"
- PRINT "A dd an entry"
- PRINT "C hange an entry"
- PRINT "D elete an entry"
- PRINT "F orm a new Index"
- PRINT "L ist Keys or Journals"
- PRINT "Q uit the Library"
- PRINT "S earch the Library"
- NEXT J
- STOP
-
- REM ADD AN ENTRY TO LIBRARY
-
- FOR I=1 TO 1 STEP 0
-
- 100 PRINT CHR$(CLEAR.SCREEN)
- PRINT TAB(18); "(Room for approximately ";
- PRINT INT ((FRE-300)/150)*10;" entries remains)"
- PRINT:PRINT
- 101 INPUT "Journal: ";MG$
- IF LEFT$(MG$,1)="0" THEN GOTO 35
- EM=0 :GOSUB 120
- IF EM=1 THEN 101
- 102 INPUT "Date: ";DATE$
- IF DATE$="0" THEN 35
- ED=0 :GOSUB 130
- IF ED=1 THEN 102
- INPUT "Page number: ";PAGE$
- 108 INPUT "Title:";TITLE$
- IF TITLE$="0" THEN 35
- INPUT "Author:";AUTHOR$
- IF AUTHOR$="0" THEN 35
- FLAG=0 :GOSUB 160 :REM CHECK RCD LENGTH
- IF FLAG=1 THEN 108
- GOSUB 750 :REM INSRT "," WHERE NEC.
- FOR J=1 TO MAX.KEYS:K$(J)="":NEXT J
- FOR J=1 TO MAX.KEYS
- 103 INPUT "Key:";K$(J)
- IF K$(J)="0" THEN K$(J)="":GOTO 105
- EK=0 :GOSUB 140
- IF EK=1 THEN 103
- NEXT J
- PRINT:PRINT
- PRINT TAB(18);"That is all the Keys allowed"
- PRINT:PRINT
-
- 105 GOSUB 110 :REM CONSTRUCT KEY VECTOR
-
- REM FIND FIRST EMPTY SLOT IN FILE
-
- FOR J=1 TO MAX.ENTRY-1
- IF INDEX$(J)="0" THEN 107
- NEXT J
- PRINT:PRINT" No more room in Library":PRINT:\
- GOTO 35
-
- REM WRITE NEW ENTRY TO FILE
-
- 107 INDEX$(J)=KY$ :REM UPDATE KEY IN INDEX
- GOSUB 900
-
- REM IF FILE EXTENT EXPANDS, WRITE NEW EOF
-
- IF J>EXTENT THEN :\
- EXTENT=J:\
- PRINT #1,(EXTENT+1);EOF$:\
- INDEX$(J+1)="0":\
- GOTO 109
- NULL=NULL-1
- 109 NEXT I
-
- REM CONSTRUCT SEARCH VECTOR
-
- 110 KY$=""
- FOR II=1 TO MAX.KEYS
- KY$=KY$+K$(II)
- NEXT II
- RETURN
-
- REM ENCODE JOURNAL
-
- 120 FOR II=1 TO NM
- IF LEFT$(MG$,3)=LEFT$(JOURNAL$(II),3) THEN 121
- NEXT II
- PRINT:PRINT" Invalid Journal":PRINT:\
- EM=1:RETURN
- 121 IF II<10 THEN 123
- MG$=LEFT$(STR$(II),2):RETURN
- 123 MG$="0"+LEFT$(STR$(II),1):RETURN
-
- REM ENCODE MONTH
-
- 130 IF LEN(DATE$)<5 THEN 130.5
- A$=LEFT$(DATE$,3)
- A1$=LEFT$(DATE$,1)
- A2=ASC(MID$(A$,2,1))
- A3=ASC(MID$(A$,3,1))
- A2=A2 OR 32 :A3=A3 OR 32
- A$=A1$+CHR$(A2)+CHR$(A3)
- FOR II=1 TO 12
- MNTH$=LEFT$(MONTH$(II),3)
- IF MNTH$=A$ THEN 131
- NEXT II
- 130.5 PRINT:PRINT" Invalid date":PRINT
- PRINT :ED=1 :RETURN
-
- 131 IF II<10 THEN 134
- B$=LEFT$(STR$(II),2) :GOTO 136
- 134 B$="0"+LEFT$(STR$(II),1)
- 136 DATE$=RIGHT$(DATE$,2)+B$ :RETURN
-
- REM ENCODE KEY
-
- 140 FOR II=1 TO NK
- IF K$(J)=KEY$(II) THEN 150
- NEXT II
- PRINT:PRINT" Invalid key":PRINT:\
- EK=1 :RETURN
- 150 KK=0
- FOR JJJ=1 TO 26
- IF II<26 THEN 155
- II=II-26:KK=KK+1
- NEXT JJJ
- 155 IF KK=0 THEN S1$="0":GOTO 157
- S1$=CHR$(64+KK)
- 157 IF II=0 THEN K$(J)=S1$+"0" :RETURN
- K$(J)=S1$+CHR$(64+II)
- RETURN
-
- REM CHECK LENGTH OF RECORD
-
- 160 RECORD.LENGTH=23+2*MAX.KEYS+LEN(TITLE$)+LEN(PAGE$)+\
- LEN(AUTHOR$)
- IF RECORD.LENGTH < 127 THEN FLAG=0 :RETURN
- PRINT
- PRINT "Input is too long -Shorten title & author by ";\
- RECORD.LENGTH-126;" characters.":FLAG=1 :RETURN
-
- REM CHANGE AN ENTRY
-
- 200 A$="Changed" :IS=0
- GOSUB 310 :REM FIND DESIRED ENTRY
- IF IS=1 THEN 40
- TEMP.POINTER=J :REM SAVE POINTER TO RANDOM FILE
- TEMP.INDEX.STORE$=INDEX$(TEMP.POINTER)
-
- PRINT "Here are the Keys for this entry:"
- PRINT :GOSUB 220 :REM PRINT KEYS
- PRINT
-
- 204 INPUT "What item to be changed? ";A$
- A$=LEFT$(A$,1)
- IF A$<>"0" THEN 205
- FLAG=0 :GOSUB 160
- IF FLAG=1 THEN 204
- IF COMMA.FLAG=1 THEN COMMA.FLAG=0:GOSUB 750
- :REM REPLACE "/"'S WITH ","'S
- PRINT "Here is the updated entry":PRINT
- GOSUB 541
- PRINT:PRINT"Here are the keywords:":PRINT
- GOSUB 220 :REM PRINT KEYS
- PRINT
- PRINT "Do you want to: A bort the edit, C hange";
- INPUT " another item, or are you D one: ";A$
- A$=LEFT$(A$,1)
- IF A$="D" THEN J=TEMP.POINTER:GOSUB 900:\
- GOTO 35 :REM SAVE IT
- IF A$="C" THEN 204
- INDEX$(TEMP.POINTER)=TEMP.INDEX.STORE$
- GOTO 35
- 205 IF A$="K" THEN 213
- INPUT "What should this item be:";B$
- IF B$="0" THEN 204
- EM=0
- IF A$<>"J" THEN 209
- TEMP$=MG$ :MG$=B$ :GOSUB 120
- IF EM=1 THEN MG$=TEMP$
- GOTO 204
- 209 IF A$="T" THEN TITLE$=B$:COMMA.FLAG=1:GOTO 204
- IF A$="P" THEN PAGE$=B$ :GOTO 204
- ED=0
- IF A$<>"D" THEN 210
- TEMP$=DATE$ :DATE$=B$ :GOSUB 130
- IF ED=1 THEN DATE$=TEMP$
- GOTO 204
- 210 IF A$="A" THEN AUTHOR$=B$:COMMA.FLAG=1:GOTO 204
- IF A$<>"K" THEN 218
- 213 INPUT "Add, Change, or Delete a key: ";A$
- A$=LEFT$(A$,1)
- IF A$="C" THEN 214
- IF A$="D" THEN 231
- IF A$<>"A" THEN 218
-
- REM ADD A NEW KEY
-
- 212 J=1: INPUT "What is the key: ";K$(J)
- IF K$(J)="0" THEN 204
- EK=0:GOSUB 140
- IF EK=1 THEN 212
- IF LEN(KY$)=2*MAX.KEYS THEN \
- PRINT "No more keywords allowed for this entry":\
- PRINT:GOTO 204
-
- REM INSERT NEW KEYWORD
-
- KY$=KY$+K$(J)
- INDEX$(TEMP.POINTER)=KY$ :REM UPDATE INDEX LIST
- GOTO 204
-
- 214 J=1 :INPUT "Old key: ";K$(J)
- IF K$(J)="0" THEN 204
- EK=0 :GOSUB 140
- IF EK=1 THEN 213
-
- REM FIND THIS KEY IN KEYWORD
-
- FOR I=1 TO (LEN(KY$)/2)
- IF K$(J)=MID$(KY$,2*I-1,2) THEN 215
- NEXT I
- PRINT "This keyword not applicable to this entry":\
- GOTO 204
- 215 INPUT "New key: ";K$(J)
- IF K$(J)="0" THEN 204
- EK=0 :GOSUB 140
- IF EK=1 THEN 215
-
- REM MAKE CHANGE IN KEY
-
- IF 2*I=LEN(KY$) THEN K2$="":GOTO 216
- K2$=RIGHT$(KY$,LEN(KY$)-2*I)
- 216 IF I=1 THEN K1$="":GOTO 217
- K1$=LEFT$(KY$,(I-1)*2)
- 217 KY$=K1$+K$(J)+K2$ :REM FORM NEW KEY
-
- INDEX$(TEMP.POINTER)=KY$ :REM UPDATE INDEX LISTG
- GOTO 204
-
- REM DELETE AN EXISTING KEYWORD
-
- 231 J=1:INPUT "What is the keyword to be deleted: ";K$(J)
- IF K$(J)="0" THEN 204
- EK=0:GOSUB 140
- IF EK=1 THEN 204
-
- REM FIND KEYWORD IN KEY
-
- FOR I=1 TO (LEN(KY$)/2)
- IF MID$(KY$,2*I-1,2)=K$(J) THEN 237
- NEXT I
- 235 PRINT
- PRINT "This key not applicable to this entry."
- GOTO 204
-
- REM DELETE THE KEYWORD
-
- 237 IF 2*I=LEN(KY$) THEN K2$="":GOTO 238
- K2$=RIGHT$(KY$,LEN(KY$)-2*I)
- 238 IF I=1 THEN K1$="":GOTO 238.5
- K1$=LEFT$(KY$,2*I-1)
- 238.5 KY$=K1$+K2$
- INDEX$(JJ)=KY$
- GOTO 204
-
- 218 PRINT "Invalid input."
- GOTO 204
-
- REM PRINT AN ENTRY'S KEYWORDS
-
- 220 FOR II=1 TO (LEN(KY$)/2)
- PRINT TAB((((II-INT((II-1)/3)*3)-1)*20)+1);:\
- GOSUB 700 :REMARK DECODE KEY
- PRINT KEY$(STRING.NO);
- IF INT(II/3)=II/3 THEN PRINT
- NEXT II
- IF INT(I/3)<>I/3 THEN PRINT
- 221 PRINT :RETURN
-
- REM DELETE AN ENTRY
-
- 300 IS=0 :A$="Deleted."
- GOSUB 310 :REM FIND AN ENTRY
- IF IS=1 THEN GOTO 35 :REM FOUND WRONG ENTRY
-
- REM DELETE KEY FROM INDEX
-
- INDEX$(J)="0"
- NULL=NULL+1
-
- REM CLEAR ENTRY FROM FILE
-
- KY$="0" :GOSUB 900
-
- PRINT CHR$(CLEAR.SCREEN)
- PRINT " Entry deleted from Library.":PRINT
- PRINT:PRINT:GOTO 35
-
- 310 PRINT CHR$(CLEAR.SCREEN)
- PRINT "What is the number of the entry to be ";A$
- INPUT " (Obtained from the most recent Search) ";I
- IF I=0 THEN 40
- IF I>NUMBER.SPOOL THEN PRINT:PRINT:\
- PRINT " Invalid entry number.":\
- GOTO 312
- J=SPOOL(I)
- IF J>EXTENT THEN 312
- PRINT:PRINT"Is this the correct entry: ":PRINT:PRINT
- M=I:GOSUB 540 :REM PRINT THE ENTRY
- KY$=DUM$
- INPUT N$:N$=LEFT$(N$,1)
- IF N$="Y" THEN RETURN
-
- 312 PRINT:PRINT "Conduct another Search and repeat."
- PRINT:IS=1:RETURN
-
- REM QUIT THE LIBRARY
-
- 400 PRINT CHR$(CLEAR.SCREEN)
- PRINT TAB(17);"This session is terminated...Bye!"\
- :PRINT:PRINT:PRINT:PRINT:PRINT
- STOP
-
- 410 PRINT TAB(18);"Saving updated index file.":PRINT:PRINT
- PRINT:PRINT
- FOR I=1 TO EXTENT
- PRINT #2,I;INDEX$(I)
- NEXT I
- PRINT #2,I;EOF$
- RETURN
-
- REM SEARCH THE LIBRARY
-
- 500 PRINT CHR$(CLEAR.SCREEN)
- FOR J=1 TO MAX.KEYS
- K$(J)=""
- NEXT J
- FOR J=1 TO MAX.KEYS
- 501 INPUT "Key: ";K$(J)
- IF LEFT$(K$(J),1)="0" THEN K$(J)="":GOTO 503
- EK=0:GOSUB 140
- IF EK=1 THEN 501
- NEXT J
-
- 503 GOSUB 110 :REM CONSTRUCT SEARCH VECTOR
-
- PRINT "If you want hardcopy, type 'YES' "
- INPUT "Otherwise type 'NO'";PRINTER.FLAG$
- PRINTER.FLAG$=LEFT$(PRINTER.FLAG$,1)
- IF PRINTER.FLAG$="Y" THEN\
- LPRINTER:\
- GOSUB 920:\
- GOTO 503.5
- PRINT CHR$(CLEAR.SCREEN)
- 503.5 GOSUB 509 :REM PRINT A LINE OF -----'S
- PRINT:GOSUB 910
- IF KY$<>"" THEN 504
- PRINT TAB(13);"Complete Listing of all Entries"
- GOSUB 910:GOTO 505
- 504 PRINT" Library Search for Articles Related to:"
- PRINT:GOSUB 910:GOSUB 910
- FOR II=1 TO (LEN(KY$)/2)
- PRINT TAB(16);"-";
- PRINT TAB(18);
- GOSUB 700 :REM DECODE KEY
- PRINT KEY$(STRING.NO):GOSUB 910
- NEXT II
- 505 PRINT:GOSUB 910
- GOSUB 510 :REM SRCH INDX FIL & PRNT SELECTED ENTRIES
- IF NUMBER.SPOOL=0 THEN PRINT TAB(20);\
- "No such articles in Library.":GOSUB 910
- PRINT :GOSUB 910:GOSUB 509
- REM PRINT A LINE OF ----'S
- PRINT :PRINT:GOSUB 910:GOSUB 910
- 506 IF PRINTER.FLAG$<>"Y" THEN 40
- PRINT:GOSUB 910
- 507 CONSOLE
- GOTO 35
-
- REM PRINT A LINE OF -----'S
-
- 509 DASHES=64
- IF PRINTER.FLAG$="Y" THEN DASHES=72
- FOR I=1 TO DASHES
- PRINT "-";
- NEXT I
- PRINT:GOSUB 910
- RETURN
-
- REM SEARCH INDEX FILE
-
- 510 M=1
- GOSUB 530 :REM CLEAR SPOOL MATRIX
- 511 NUMBER.SEARCH.KEYS=(LEN(KY$)/2)
- FOR J=1 TO EXTENT
- IF LINES.PER.PAGE-PRINT.LINE<8 THEN GOSUB 920
- IF INDEX$(J)="0" THEN 519
- IF NUMBER.SEARCH.KEYS=0 THEN 516
- 513 NUMBER.INDEX.KEYS=(LEN(INDEX$(J))/2)
- FOR I=1 TO NUMBER.SEARCH.KEYS
- FOR K=1 TO NUMBER.INDEX.KEYS
- IF MID$(KY$,2*I-1,2)=\
- MID$(INDEX$(J),2*K-1,2)\
- THEN 515
- NEXT K
- GOTO 519
- 515 NEXT I
- 516 SPOOL(M)=J
- GOSUB 540 :REM PRINT ENTRY
- M=M+1
- 519 ABORT.FLAG=0
- GOSUB 550 :REM POLL KEYBOARD
- IF ABORT.FLAG=1 THEN 520
- NEXT J
- 520 NUMBER.SPOOL=M-1
- RETURN
-
- REM CLEAR SPOOL MATRIX
-
- 530 FOR I=1 TO EXTENT
- SPOOL(I)=0
- NEXT I
- RETURN
-
- REM PRINT AN ENTRY
-
- 540 READ #1,J;MG$,DATE$,PAGE$,TITLE$,AUTHOR$,DUM$
- 541 PRINT M;".";
- PRINT TAB(7);JOURNAL$(VAL(MG$));
- PRINT TAB(25);
- IF LEN(TITLE$)<DASHES-26 THEN PRINT TITLE$:\
- GOSUB 910:GOTO 545
-
- REM BREAK TITLE INTO MULTIPLE LINES
-
- TEMP.TITLE$=TITLE$
- 542 FOR JJ=DASHES-26 TO 1 STEP -1
- IF MID$(TEMP.TITLE$,JJ,1)=" " THEN 543
- NEXT JJ
- 543 TITLE1$=LEFT$(TEMP.TITLE$,JJ-1)
- TITLE2$=RIGHT$(TEMP.TITLE$,LEN(TEMP.TITLE$)-JJ)
- PRINT TITLE1$:GOSUB 910:PRINT TAB(25);
- IF LEN(TITLE2$)<DASHES-26 THEN PRINT TITLE2$:\
- GOSUB 910:GOTO 545
- TEMP.TITLE$=TITLE2$ :GOTO 542
-
- 545 PRINT TAB(7);MONTH$(VAL(RIGHT$(DATE$,2)));" 19";
- PRINT LEFT$(DATE$,2);
- PRINT TAB(25);"by ";AUTHOR$:GOSUB 910
- PRINT TAB(7);"Page ";PAGE$:GOSUB 910
- PRINT:GOSUB 910
- RETURN
-
- REM KEYBOARD POLL ROUTINE TO BREAK LISTING
- REM (TYPE "0" TO ABORT)
-
- 550 IF INP(KEYBOARD.STAT.PORT) AND KBDMASK <> KBD.TRUE\
- THEN RETURN
- IF (INP(KEYBOARD.DATA.PORT)AND 127) <> 48 THEN RETURN
- GOSUB 509 :REM PRINT LINE OF DASHES
- IF PRINTER.FLAG$ = "Y" THEN 507
- ABORT.FLAG=1 :RETURN
-
- REM LIST KEYS AND/OR JOURNALS IN LIBRARY
-
- 600 PRINT CHR$(CLEAR.SCREEN)
- INPUT "Do you want a list of keys or journals";A$
- PRINT CHR$(CLEAR.SCREEN)
- A$=LEFT$(A$,1)
- IF A$="J" THEN 620
- IF A$<>"K" THEN 35
-
- REM LIST KEYS
-
- FOR I=1 TO NK
- PRINT TAB((((I-INT((I-1)/3)*3)-1)*20)+1);\
- KEY$(I);
- IF INT(I/3)=I/3 THEN PRINT
- IF INT(I/42)=I/42 THEN GOSUB 650
- IF A$="0" THEN GOTO 35
- NEXT I
- IF INT(I/3)=I/3 THEN PRINT
- PRINT :GOSUB 650 :GOTO 35
-
- REM LIST JOURNALS
-
- 620 FOR I=1 TO NM
- PRINT TAB((((I-INT((I-1)/3)*3)-1)*20)+1);\
- JOURNAL$(I);
- IF INT (I/3)= I/3 THEN PRINT
- IF INT(I/42)=I/42 THEN GOSUB 650
- NEXT I
- IF INT(I/3)<>I/3 THEN PRINT
- PRINT :GOSUB 650 :GOTO 35
-
- REM PAUSE ROUTINE
-
- 650 INPUT "Type 'C' to continue";A$
- RETURN
-
- REM DECODE A KEY
-
- 700 S1$=MID$(KY$,2*II-1,1):S2$=MID$(KY$,2*II,1)
- IF S1$="0" THEN S1=0:GOTO 720
- S1=(ASC(S1$)-64)*26
- 720 IF S2$="0" THEN S2=0 :GOTO 740
- S2=ASC(S2$)-64
- 740 STRING.NO=S1+S2
- RETURN
-
- REM SUBSTITUTE "," FOR "/" IN TITLE AND AUTHOR
-
- 750 FOR L=1 TO LEN(TITLE$)
- IF MID$(TITLE$,L,1)<>"/" THEN 760
- TIT.LEFT$=LEFT$(TITLE$,L-1)
- TIT.RIGHT$=RIGHT$(TITLE$,(LEN(TITLE$)-L))
- TITLE$=TIT.LEFT$+","+TIT.RIGHT$
- 760 NEXT L
- FOR L=1 TO LEN(AUTHOR$)
- IF MID$(AUTHOR$,L,1)<>"/" THEN 770
- AUT.LEFT$=LEFT$(AUTHOR$,L-1)
- AUT.RIGHT$=RIGHT$(AUTHOR$,(LEN(AUTHOR$)-L))
- AUTHOR$=AUT.LEFT$+","+AUT.RIGHT$
- 770 NEXT L
- RETURN
-
- REM DISPLAY SIGN-ON MESSAGE
-
- 800 PRINT CHR$(CLEAR.SCREEN)
- PRINT " -------------------------------------"
- PRINT " | COMPUTER JOURNAL RETRIEVAL SYSTEM |"
- PRINT " -------------------------------------"
- PRINT :PRINT :PRINT
- RETURN
-
- REM WRITE AN ENTRY TO DATA FILE
-
- 900 PRINT #1,J;MG$,DATE$,PAGE$,TITLE$,AUTHOR$,KY$
- PRINT #2,J;INDEX$(J)
- RETURN
-
- REM PRINTER LINE INCREMENT
-
- 910 IF PRINTER.FLAG$<>"Y" THEN RETURN
- PRINT.LINE=PRINT.LINE+1
- IF PRINT.LINE>66 THEN PRINT.LINE=1
- RETURN
-
- REM FORMFEED
-
- 920 IF PRINT.LINE=3 THEN RETURN
- PRINT:GOSUB 910:GOTO 920
-
-
- REM *** DATA SECTION ***
-
- REM JOURNAL LIST
-
- DATA BYTE,KB,CC,DDJ,PC,IA,0
-
- REM MONTH LIST
-
- DATA January,February,March,April,May,June
- DATA July,August,September,October,November
- DATA December
-
- REM KEY WORD LIST
-
- DATA 8080,6800,6502,1802,68000,8085,8086
-
- DATA ART,AUTOS,APPLIANCES,ARTIFICIAL INTELLIGENCE
- DATA APPLE,ATARI,APL,ASSEMBLER,AUDIO,ANIMATION
- DATA ALGOL,ASCII,ALGORITHM,APPLICATIONS
-
- DATA BASIC,BALLY,BUSINESS,BENCHMARK,BUS,BOARD
-
- DATA C,CPU,CLOCK,CROMEMCO,CONSTRUCTION,COBOL
- DATA CBASIC,CALCULATOR,CASSETTE,COMPILER
- DATA CRYPTOGRAPHICS,COMPONENTS,CHIPS
-
- DATA DEBUG,DISASSEMBLER,DISK,DATA,DBMS,DRIVER
- DATA DOCUMENTATION,DISCUSSION,DESIGN,DIAGNOSTIC
-
- DATA EDUCATION,EXIDY,EDITING,ELECTRONIC GAMES
- DATA EXPANSION
-
- DATA FICTION,FORTRAN,FRONT PANEL,FLEX
- DATA FILES,FINANCE,FAIRS,FLOWCHARTING
-
- DATA GRAPHICS,GENEALOGY,GAME,GODBOUT
-
- DATA HARDWARE,HANDICAPPED,HEATH,HOME,HISTORY
- DATA HUMOR
-
- DATA IMSAI,INTERRUPT,ITHICA,I/O,INPUT
- DATA INTELASM,INTERPRETER,INTERVIEW,INTERFACE
-
- DATA KEYBOARD,KIM
-
- DATA LINGUISTICS,LANGUAGE,LARGE,LAW,LEDGER,LISP
-
- DATA MUSIC,MONITER,MICROPROGRAMMING,MICROPOLIS
- DATA MAINFRAME,MINICOMPUTER,MBASIC,MACASM
- DATA MATH,MEMORY,MATRIX,MULTI-TASKING,MISCELLANEOUS
- DATA MODIFICATION
-
- DATA NORTHSTAR
-
- DATA OPERATING SYSTEM,OBJECT,OUTPUT
-
- DATA PROGRAM,PASCAL,PILOT,PET,PRINTER,PROM,PENCIL
- DATA PAYROLL,PROCESSING,PROGRAMMING,PACE,PROTECTION
-
- DATA RS232,RANDOM,ROUTINES,REVIEW,ROBOTICS
- DATA REAL-WORLD
-
- DATA SOFTWARE,SYS8,SOL,SWTP,SSM,SD SALES,STRUCTURE
- DATA STRUCTURED,STACK,S100,SS50,SORT,SORTING,SOURCE
- DATA SYSTEM,STANDARDS,SECURITY,SOLDERING,SMALL
-
- DATA TEXT,TEXT EDITOR,TRS80,TARBELL,TERMINAL
- DATA TELEPHONE,TECHNIQUE,TDLASM,THEORY,TIMESHARING
- DATA TUTORIAL,TROUBLESHOOTING
-
- DATA UTILITIES
-
- DATA VIDEO
-
- DATA WORD,WORD PROCESSING,WIRE WRAP
-
- DATA Z80,Z8000
- DATA A/D,PAPER TAPE,PUZZLE,8008,ARCHETECTURE
- DATA MICROPROCESSOR,MASS STORAGE,POWER SUPPLY
- DATA MEDICINE,WEATHER,SIMULATION
-
- DATA 0
-