home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol163 / bibbld.bas < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  5.4 KB  |  186 lines

  1.     REM ------FILE BIBBLD.BAS
  2.  
  3.     REM  BIBLIO BUILD/MODIFY ROUTINE
  4.     COMMON KEYWD$(1),LIBNAME$,RLEN%,TRUE%,AUTH.LEN%,TITL.LEN%
  5.     COMMON MAXBIB%,MAXDESC%,MAXDEF%,MAXKEYS%,MAXCON%,CONCEPT$(1)
  6.     COMMON ISS.LEN%,CLEAR$,ERR%,JOUR.LEN%,KWD.LEN%,CMD$(1)
  7.     COMMON LFT%(1),RGHT%(1),CON.KEY%(2),CON.RATE(2),QUERY$,L%
  8.     
  9.     REM  CONVERT INTEGER TO TWO ASCII HEX
  10.     DEF FN.INT.TWO$(DUM%)
  11.     HI%=DUM%/16 : LO%=DUM%-16*HI%
  12.     IF HI%<10 THEN HI%=HI%+48 ELSE HI%=HI%+55
  13.     IF LO%<10 THEN LO%=LO%+48 ELSE LO%=LO%+55
  14.     FN.INT.TWO$=CHR$(HI%) + CHR$(LO%)
  15.     RETURN
  16.     FEND
  17.  
  18.     REM CONVERT ONE DIGIT REAL TO ASCII HEX
  19.     DEF FN.REALONE$(DUM)
  20.     ONE%=INT%(10.0*DUM)
  21.     IF ONE%<10 THEN ONE%=ONE%+48 ELSE ONE%=ONE%+55
  22.     FN.REALONE$=CHR$(ONE%)
  23.     RETURN
  24.     FEND
  25.  
  26.     GOSUB 6E1
  27.     PRINT CLEAR$:CHAIN "BIBLIO"
  28.     STOP
  29.  
  30. 6E1     REM BUILD/MODIFY BIBLIOGRAPHY FILE
  31.     PRINT CLEAR$
  32.     PRINT TAB(12); "----------BIBLIO BUILD/MODIFY----------":PRINT
  33.     REM IF NO VOCABULARY FILE, EXIT TO MENU
  34.     IF END #1 THEN 6.1E1
  35.     OPEN LIBNAME$+".VOC" AS 1
  36.     IF SIZE(LIBNAME$+".VOC")=0 THEN DELETE 1 : GOTO 6.1E1
  37.     VOC.LEN%=1
  38.  
  39.     REM OTHERWISE READ VOCABULARY
  40.     IF END #1 THEN 6.2E1
  41.     WHILE TRUE%
  42.       READ #1;KEYWD$(VOC.LEN%)
  43.       VOC.LEN%=VOC.LEN%+1
  44.       WEND
  45.  
  46. 6.2E1   CLOSE 1
  47.     VOC.LEN%=VOC.LEN%-1
  48.  
  49.     REM IF NO BIBLIO FILE, GO BUILD ONE
  50.     IF END #2 THEN 6.3E1
  51.     OPEN LIBNAME$+".BIB" RECL RLEN% AS 2
  52.     IF SIZE(LIBNAME$+".BIB")=0 THEN DELETE 2 : GOTO 6.3E1
  53.  
  54.     REM OTHERWISE WE WANT TO ADD OR DELETE
  55.     INPUT "DO YOU WISH TO ADD OR DELETE ARTICLES (A/D)? ";LINE ANS$
  56.     ANS$=UCASE$(LEFT$(ANS$,1))
  57.     IF ANS$="D" THEN 4E1
  58.  
  59.     REM FIND LAST SECTOR AND READ BIBLIO TO EOF
  60.     IF END #2 THEN 6.37E1
  61.     READ #2,1;LINE BUFF$
  62.     BIB.LEN%=VAL(BUFF$)
  63.     READ #2,BIB.LEN%-2;
  64.     WHILE TRUE%
  65.       READ #2;BUFF$
  66.       WEND
  67.     GOTO 6.37E1
  68.  
  69. 6.3E1   REM BUILD IT
  70.     BIB.LEN%=0
  71.     CREATE LIBNAME$+".BIB" RECL RLEN% AS 2
  72.     PRINT USING "######";#2,1;BIB.LEN%
  73.  
  74.     REM GET ENTRIES FOR BIBLIO AND WRITE TO FILE
  75.  
  76. 6.37E1  BLANK$="                                             "
  77.     PRINT "PRESSING RETURN IN RESPONSE TO THE PROMPT 'AUTHOR'"
  78.     PRINT "TERMINATES THIS ROUTINE. ":PRINT
  79.     WHILE TRUE%
  80.       IF BIB.LEN%>MAXBIB% THEN 6.34E1
  81.       BUFF$=""
  82.       INPUT "AUTHOR :  "; LINE AUTHOR$
  83.       IF LEN(AUTHOR$)=0 THEN PRINT USING "&"; #2;CHR$(26):GOTO 6.32E1
  84.       INPUT "TITLE  :  "; LINE TITLE$
  85.       INPUT "JOURNAL:  "; LINE JOURNAL$
  86.       INPUT "ISSUE  :  "; LINE ISSUE$
  87.       AUTHOR$=LEFT$(AUTHOR$+BLANK$,AUTH.LEN%)
  88.         TITLE$=LEFT$(TITLE$+BLANK$,TITL.LEN%)
  89.       JOURNAL$=LEFT$(JOURNAL$+BLANK$,JOUR.LEN%)
  90.       ISSUE$=LEFT$(ISSUE$+BLANK$,ISS.LEN%)
  91.   
  92. 6.33E1  BUFF$=AUTHOR$+TITLE$+JOURNAL$+ISSUE$
  93.       PRINT "ENTER KEYWORDS AND RATINGS, I.E., KEYWORD1 0.5 KEYWORD2 0.6"
  94.  
  95.     REM GET KEYWORDS AND RATINGS--CODE INTO ASCII HEX
  96.       CMD$="" : KEY%=0 : ERR%=0
  97.       INPUT ">";LINE CMD$
  98.       IF (LEN(CMD$)=0) THEN 6.31E1
  99.       SW%=-1 : I%=1 : W.NUM%=0
  100.       WHILE (I%<LEN(CMD$))
  101.         IF KEY%>=MAXDESC% THEN 6.39E1
  102.         WHILE (MID$(CMD$,I%,1)=" ")
  103.           I%=I%+1
  104.         WEND
  105.         DUM$=RIGHT$(CMD$,LEN(CMD$)-I%+1)
  106.         IF NOT SW% THEN 6.36E1
  107.           W.NUM%=W.NUM%+1
  108.           GOSUB 19E1
  109.           IF ERR% THEN 6.33E1
  110.           BUFF$=BUFF$+FN.INT.TWO$(KB%):SW%=0
  111.           GOTO 6.38E1
  112.  
  113. 6.36E1  CH$=LEFT$(DUM$,1)
  114.     IF (CH$<>".") AND ((CH$<"0") OR (CH$>"9")) THEN \
  115.            PRINT "KEYWORDS MAY NOT CONTAIN BLANKS--RE-ENTER LINE" :GOTO 6.33E1
  116.         IF LEFT$(DUM$,1)="." THEN RAT=VAL("0"+DUM$) ELSE RAT=VAL(DUM$)
  117.         BUFF$=BUFF$+FN.REALONE$(RAT):KEY%=KEY%+1:SW%=-1
  118.  
  119. 6.38E1  WHILE (MID$(CMD$,I%,1)<>" ") AND (I%<LEN(CMD$))
  120.         I%=I%+1
  121.         WEND
  122.         WEND
  123.  
  124. 6.31E1  BUFF$=BUFF$+"FFF"
  125.     PRINT USING "&"; #2; BUFF$
  126.       BIB.LEN%=BIB.LEN+1
  127.       WEND
  128.  
  129. 4E1     REM READ AND DISPLAY ARTICLES, SAVING OR DELETING AS WE GO
  130.     R.REC%=2 : DEL%=0
  131.     READ #2,1; LINE BUFF$
  132.     PRINT "TO DELETE RESPOND TO THE PROMPT ' > ' WITH AT LEAST TWO"
  133.     PRINT "DEPRESSIONS OF LB SIGN #, THEN RETURN.  DEPRESS ONLY THE"
  134.     PRINT "RETURN TO SAVE, ENTER E THEN RETURN TO EXIT TO MENU":PRINT
  135.     IF END #2 THEN 4.4E1
  136.     WHILE TRUE%
  137.       READ #2,R.REC%; LINE BUFF$
  138.       PRINT MID$(BUFF$,AUTH.LEN%+TITL.LEN%+1,JOUR.LEN%);
  139.       PRINT TAB(JOUR.LEN%+2); MID$(BUFF$,AUTH.LEN%+1,TITL.LEN%)
  140.       PRINT MID$(BUFF$,AUTH.LEN%+TITL.LEN%+JOUR.LEN%+1,ISS.LEN%);
  141.       PRINT TAB(JOUR.LEN%+2); LEFT$(BUFF$,AUTH.LEN%):PRINT
  142.       INPUT "> "; LINE ANS$
  143.       IF UCASE$(LEFT$(ANS$,1))="E" THEN 4.4E1
  144.       IF LEFT$(ANS$,2)="##" THEN \
  145.         PRINT USING "&"; #2,R.REC%;"ZZZZZ"+RIGHT$(BUFF$,RLEN%-7): \
  146.         DEL%=DEL%+1:R.REC%=R.REC%+1
  147.       WEND
  148.  
  149. 4.4E1   PRINT DEL%; " ARTICLES MARKED DELETED":CLOSE 2:GOTO 6.7E1
  150.  
  151. 6.34E1  PRINT "FILE FULL--NO MORE ARTICLES CAN BE WRITTEN"
  152.  
  153. 6.32E1  PRINT BIB.LEN%; " ARTICLES ON FILE"
  154.     PRINT USING "######"; #2; BIB.LEN%
  155.     CLOSE 2:GOTO 6.7E1
  156.  
  157. 6.1E1   PRINT "NO VOCABULARY FILE NAMED ";LIBNAME$
  158.  
  159. 6.7E1   INPUT "PRESS RETURN TO GO BACK TO MENU "; LINE ANS$:RETURN
  160.  
  161. 6.39E1  REM TOO MANY KEYWORDS ENTERED
  162.     KEY%=0:BUFF$=LEFT$(BUFF$,AUTH.LEN%+TITL.LEN%+JOUR.LEN%+ISS.LEN%)
  163.     PRINT "NO MORE THAN ";MAXDESC%; " KEYWORDS PER ARTICLE CAN"
  164.     PRINT "BE ENTERED.  PLEASE SHORTEN LIST AND RE-ENTER.":GOTO 6.33E1
  165.  
  166. 19E1    REM BREAKOUT KEYWORD AND FIND ITS NUMBER
  167.         IR%=1
  168.     WHILE MID$(DUM$,IR%,1)<>" " 
  169.     IR%=IR%+1 
  170.     WEND
  171.     WORD$=LEFT$(DUM$,IR%-1)+BLANK$:WORD$=LEFT$(WORD$,KWD.LEN%)
  172.         WORD$=UCASE$(WORD$)
  173.  
  174.     REM BINARY SEARCH FOR WORD IN KEYWORD ARRAY
  175.     IB%=1 : JB%=VOC.LEN%
  176.  
  177. 19.1E1  KB%=(IB%+JB%)/2
  178.     IF WORD$>KEYWD$(KB%) THEN IB%=KB%+1 ELSE JB%=KB%-1
  179.     IF (WORD$<>KEYWD$(KB%)) AND (IB%<=JB%) THEN 19.1E1
  180.     IF WORD$<>KEYWD$(KB%) THEN 19.3E1
  181.     I%=IR%+I%-1:RETURN
  182.  
  183. 19.3E1  PRINT USING "CANNOT FIND KEYWORD \####"; W.NUM%
  184.         INPUT "PRESS RETURN TO RE-ENTER COMPLETE LINE "; LINE ANS$
  185.     ERR%=-1 : RETURN
  186.