home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / dbaseii / dblibray.lbr / LIBRARY.DZC / LIBRARY.DOC
Encoding:
Text File  |  1988-05-04  |  20.8 KB  |  775 lines

  1.  
  2.                 LIBRARY CROSS-REFERENCING SYSTEM
  3.  
  4.                              Sample
  5.  
  6.  
  7. Description of the system:
  8.  
  9.      This  system allows the user to store references to  journal
  10. articles and books,  along with a list of keywords (subjects) for
  11. each  reference.   It automatically maintains a "history" of  all
  12. the  keywords  that are in the database.   New additions  to  the
  13. database,  and changes to the database,  automatically update the
  14. keywords database.   The user can display a list of all available
  15. keywords,  and  can  also search for references that contain  any
  16. given keyword, or group of keywords.
  17.  
  18.  
  19. Databases and Index Files:
  20.  
  21.      The  main database is called LIBRARY.DAT,  and it  has  this
  22. structure:
  23.  
  24. STRUCTURE FOR FILE:  B:LIBRARY .DBF
  25. NUMBER OF RECORDS:   00005
  26. DATE OF LAST UPDATE: 00/00/00
  27. PRIMARY USE DATABASE
  28. FLD       NAME      TYPE WIDTH   DEC
  29. 001     AUTHOR       C    040
  30. 002     TITLE        C    040
  31. 003     PUB          C    030
  32. 004     DATE         C    008
  33. 005     PAGES        C    008
  34. 006     ABSTRACT     C    254
  35. 007     KEYWORDS     C    080
  36. ** TOTAL **             00461
  37.  
  38. Two index files are maintained at all times.  The first maintains
  39. an  alphabetical  listing by author and title.   This  index  was
  40. created with the command:
  41.  
  42. INDEX ON AUTHOR+TITLE TO AUTHORS
  43.  
  44. The second index maintains a chronological order.  Since the DATE
  45. is  stored in MM/DD/YY fashion,  the index file was created  such
  46. that  the year is of greater importance than the month and  date.
  47. Hence, this index was created with the command:
  48.  
  49. INDEX ON $(DATE,7,2)+$(DATE,1,5) TO DATES
  50.  
  51. The  second database maintains a history of all keywords used  in
  52. the  main database,  as well as a counter of how many records  in
  53. the  main  database  use  each  keyword.    The  file  is  called
  54. KEYWORDS.DBF, and it has this structure:
  55.  
  56.  
  57.  
  58. STRUCTURE FOR FILE:  B:KEYWORDS.DBF
  59. NUMBER OF RECORDS:   00010
  60. DATE OF LAST UPDATE: 00/00/00
  61. PRIMARY USE DATABASE
  62. FLD       NAME      TYPE WIDTH   DEC
  63. 001     KEYWORD      C    020
  64. 002     KEYNO        N    004
  65. ** TOTAL **             00025
  66.  
  67. This file is indexed on the keywords field, using the command:
  68.  
  69. INDEX ON KEYWORD TO KEYWORDS
  70.  
  71.  
  72. Software Structure
  73.  
  74.      The command files are structured as follows:
  75.                          _______________
  76.                          | LIBRARY.CMD |
  77.                          |             |
  78.                          | Main Menu   |
  79.                          |_____________|
  80.                                 |
  81.            -------------------------------------------
  82.      ______|________  __________|_________   ________|______
  83.      | LIBADD.CMD  |  | LREPORTS.CMD     |   |LIBEDIT.CMD  |
  84.      | Add new data|  | Present sort,    |   | Allow edits,|
  85.      | and update  |  | search, and      |   | and update  |
  86.      | keyword list|  | report options,  |   | the keyword |
  87.      _______________  | and print report |   | file.       |
  88.                       |__________________|   |_____________|
  89.                                 |                    |
  90.                       __________|_________   ________|______
  91.                       | LIBFIND.CMD       |  | LIBED2.CMD  |
  92.                       | Search for and    |  | Display Edit|
  93.                       | display references|  | screen and  |
  94.                       | by subject.       |  | allow edits |
  95.                       |___________________|  |_____________|
  96.  
  97.  
  98.  
  99. User-Interface
  100.  
  101.      When to user calls up the LIBRARY system,  it first presents
  102. the Main Menu, as below:
  103.  
  104.  
  105.                     Library System Main Menu
  106.  
  107.                   1. Add new references
  108.                   2. Print Reports
  109.                   3. Edit References
  110.  
  111.                   4. Exit
  112.  
  113.                    Enter choice (1-4)
  114.  
  115.      If  the user wishes to Add new references,  he is  presented
  116. with a custom "APPEND" screen, as below:
  117.  
  118.  
  119. Record No. 1   Enter new Data, ^Q to Quit
  120. ----------------------------------------------------------
  121. Author:                    :
  122. Title :                             :
  123. Pub.  :                    :
  124. Date  : :          :       Pages :        :
  125.  
  126. Abstract:
  127.  
  128.             :
  129. Keyword 1 :                       :
  130. Keyword 2 :                       :
  131. Keyword 3 :                       :
  132. Keyword 4 :                       :
  133. Keyword 5 :                       :
  134. Keyword 6 :                       :
  135. Keyword 7 :                       :
  136. ---------------------------------------------------------
  137.  
  138.       If the user wants to Print Reports,  the screen asks if  he
  139. wishes  to  print  keywords or references.   If the  user  select
  140. keywords,  then the keyword file is displayed, alphabetically, in
  141. two columns, as below:
  142.  
  143.                 BANK                 PERFORMANCE
  144.                 DBASE II             PRIMARY
  145.                 DISK DRIVES          ROBBERS
  146.                 DOG BISCUITS         SECONDARY
  147.                 MULTIPLE FILES       UPDATE
  148.  
  149.  
  150.      If the user wishes to see references, the screen first asks:
  151.  
  152.  
  153.  
  154.  How do you want references sorted?
  155.  
  156.      1. Alphabetically by Author
  157.      2. Chronologically by Date
  158.      3. Original Order
  159.  
  160. Then,  the user can type in the subjects he wishes to search for,
  161. in a screen as below:
  162.  
  163. Keyword 1 :                       :
  164. Keyword 2 :                       :
  165. Keyword 3 :                       :
  166. Keyword 4 :                       :
  167. Keyword 5 :                       :
  168. Keyword 6 :                       :
  169. Keyword 7 :                       :
  170.  
  171.  
  172.  
  173. If  the  user requests to search on more than  one  keyword,  the
  174. screen asks if the user wants references with ALL or ANY keyword.
  175. Then,  the  appropriate  references are displayed in  the  format
  176. below:
  177.  
  178.  
  179. Author: Blaine, Appy
  180. Title : Dog Biscuits in your Disk Drives
  181. Pub.  : Data Based Advisor
  182. Date  : 01/01/83         Pages :  12-345
  183.  
  184. Keywords :  DBASE II, DISK DRIVES, DOG BISCUITS,
  185. Abstract :
  186. A complete listing of items not to put into your disk
  187. drives.  Includes mention of those sticky little yellow
  188. "Post-It" pads, which tend to disable drive B on many
  189. computers.  However, dog biscuits are the ultimates no-no
  190. for putting into floppy drives.
  191.  
  192.  
  193.      Edits  are handled by asking the user for the last  name  of
  194. the  main author of the reference to edit.   If there is no  such
  195. author, the user is told so.  If there are numerous references by
  196. this  author,  then those are displayed and the user is asked  to
  197. select  by record number.   Once the reference to edit is  found,
  198. the  reference  is  displayed on the screen in exactly  the  same
  199. format as the APPEND format, and the user can make changes.
  200.  
  201. Program Listings
  202.  
  203.      The programs used in the LIBRARY system are displayed below:
  204.  
  205. ********************************** LIBRARY.CMD
  206. ******************** Library System Main Menu.
  207. ******************** The LIBRARY System maintains
  208. ******************** a history and count of all
  209. ******************** keywords used in the LIBRARY
  210. ******************** database.
  211. SET TALK OFF
  212. SET DEFA TO B
  213. STORE 0 TO CHOICE
  214.  
  215. *************************** Display Main Menu.
  216. DO WHILE CHOICE <> 4
  217.    ERASE
  218.    TEXT
  219.                     Library System Main Menu
  220.  
  221.                   1. Add new references
  222.                   2. Print Reports
  223.                   3. Edit References
  224.  
  225.                   4. Exit
  226.    ENDTEXT
  227.    INPUT "                   Enter choice (1-4) " TO CHOICE
  228.  
  229.  
  230.    **************** Branch to appropriate procedure
  231.    **************** based upon choice.
  232.  
  233.    DO CASE
  234.  
  235.       CASE CHOICE = 1
  236.            DO LIBADD
  237.  
  238.       CASE CHOICE = 2
  239.            DO LREPORTS
  240.  
  241.       CASE CHOICE = 3
  242.            DO LIBEDIT
  243.  
  244.     ENDCASE
  245.  
  246. ENDDO (while choice # 4)
  247.  
  248.  
  249.  
  250. Here is LIBADD.CMD, used for adding new records.
  251.  
  252.  
  253. *************************************** LIBADD.CMD
  254. *************************************** Add new data.
  255. ************** Open Data Files
  256. SELECT PRIMARY
  257. USE LIBRARY INDEX AUTHORS,DATES
  258. SELECT SECONDARY
  259. USE KEYWORDS INDEX KEYWORDS
  260. SET EXACT ON
  261. ************** Initialize memory variables.
  262. STORE "               " TO K1,K2,K3,K4,K5,K6,K7
  263.  
  264. SELECT PRIMARY
  265. GO BOTT
  266. DO WHILE AUTHOR <> " " .OR. # <= 1
  267.    ************ Display custom APPEND screen, (which
  268.    ************ was created with ZIP).
  269.    ERASE
  270.    APPEND BLANK
  271.    @  1, 3 SAY "Record No. "+STR(#,3)+" Enter new Data, ^Q to Quit"
  272.    @  2, 0 SAY "--------------------------------------------------"
  273.    @  2,50 SAY "------------------------------"
  274.    @  4, 3 SAY "Author"
  275.    @  4,12 GET AUTHOR
  276.    @  5, 3 SAY "Title"
  277.    @  5,12 GET TITLE
  278.    @  6, 3 SAY "Pub."
  279.    @  6,12 GET PUB
  280.    @  7, 3 SAY "Date"
  281.    @  7,12 GET DATE PICT "99/99/99"
  282.    @  7,26 SAY "Pages"
  283.    @  7,32 GET PAGES
  284.    @  9, 3 SAY "Abstract"
  285.    @  9,12 GET ABSTRACT
  286.    @ 13, 3 SAY "Keyword 1"
  287.    @ 13,13 GET K1
  288.    @ 14, 3 SAY "Keyword 2"
  289.    @ 14,13 GET K2
  290.    @ 15, 3 SAY "Keyword 3"
  291.    @ 15,13 GET K3
  292.    @ 16, 3 SAY "Keyword 4"
  293.    @ 16,13 GET K4
  294.    @ 17, 3 SAY "Keyword 5"
  295.    @ 17,13 GET K5
  296.    @ 18, 3 SAY "Keyword 6"
  297.    @ 18,13 GET K6
  298.    @ 19, 3 SAY "Keyword 7"
  299.    @ 19,13 GET K7
  300.    @ 21, 0 SAY "--------------------------------------------------"
  301.    @ 21,50 SAY "------------------------------"
  302.    READ
  303.  
  304.  
  305.    ****************** ONLY perform this step if not exiting this program.
  306.    IF AUTHOR <> " "
  307.  
  308.       ****************** Update the Keyword File.
  309.       SELECT SECONDARY
  310.       STORE " " TO TEMPKEY
  311.       STORE 1 TO COUNT
  312.       STORE STR(COUNT,1) TO MAC
  313.  
  314.       DO WHILE K&MAC <> " " .AND. COUNT < 8
  315.          STORE !(K&MAC) TO K&MAC
  316.          FIND &K&MAC
  317.          IF # > 0
  318.             REPLACE KEYNO WITH KEYNO+1
  319.          ELSE
  320.             APPEND BLANK
  321.             REPLACE KEYWORD WITH K&MAC
  322.             REPLACE KEYNO WITH 1
  323.          ENDIF (# > 0)
  324.          *** Put keyword into temporary TEMPKEY string.
  325.          STORE TEMPKEY+TRIM(K&MAC)+", " TO TEMPKEY
  326.  
  327.          **** Clear out K&MAC memory variables, and increment count.
  328.          STORE "               " TO K&MAC
  329.          STORE COUNT +1 TO COUNT
  330.          STORE STR(COUNT,1) TO MAC
  331.       ENDDO (k&mac<>" ")
  332.  
  333.    ENDIF [not exiting this program (author <> "")]
  334.  
  335.  
  336. SELECT PRIMARY
  337. *********************** Put tempkey into keywords on Primary file.
  338. REPLACE KEYWORDS WITH TEMPKEY
  339.  
  340. ENDDO (while author <> " ")
  341.  
  342. *********************** Get rid of any "blank" records.
  343. DELETE ALL FOR AUTHOR = " " .AND. TITLE = " "
  344. PACK
  345. *********************** Return to Main Menu.
  346. SET EXACT OFF
  347. RETURN
  348.  
  349.  
  350.  
  351. LREPORTS, below, presents options for, and prints reports.
  352.  
  353.  
  354. **************************** LREPORTS.CMD
  355. ********** Asks user if they want keyword
  356. ********** listing or to search references
  357. ********** By subjects.  Provides the keyword
  358. ********** listing, branches to LIBFIND for
  359. ********** search by subject.
  360.  
  361. ERASE
  362. STORE " " TO RCHOICE
  363. @ 5,10 SAY " Which Report do you want "
  364. @ 7, 5 SAY "1. Keyword Listing"
  365. @ 8, 5 SAY "2. References by Subject"
  366. @ 10,8 SAY "Enter choice (1-2) " GET RCHOICE
  367. READ
  368.  
  369. *********** Do appropriate report based upon user's request.
  370. DO CASE
  371.  
  372.    CASE RCHOICE = "1"
  373.       ******* Ask about hardcopy
  374.       ERASE
  375.       STORE " " TO LP
  376.       @ 5,10 SAY " Send Keywords to printer (Y/N) " GET LP
  377.       READ
  378.  
  379.       IF !(LP)="Y"
  380.          *SET PRINT ON
  381.       ENDIF (lp=y)
  382.  
  383.       *********** print keywords in two alphabetized columns.
  384.       ERASE
  385.       USE KEYWORDS
  386.       GO BOTT
  387.       STORE (#+1)/2 TO MIDDLE
  388.       STORE 1 TO COUNTER
  389.       USE KEYWORDS INDEX KEYWORDS
  390.       STORE "Y" TO OK
  391.       DO WHILE COUNTER <= MIDDLE .AND. !(OK)="Y"
  392.          ? KEYWORD
  393.          SKIP MIDDLE
  394.          IF .NOT. EOF
  395.             ?? KEYWORD
  396.             SKIP -1*MIDDLE-1
  397.          ENDIF (not eof)
  398.          STORE COUNTER + 1 TO COUNTER
  399.  
  400.          ************** If keyword list going to the screen,
  401.          ************** Pause every 20 lines.
  402.          IF COUNTER/20 = INT(COUNTER/20) .AND. !(LP) <> "Y"
  403.             ?
  404.             ?
  405.             ? " Continue? (Y/N) "
  406.             WAIT TO OK
  407.          ENDIF (counter/20 and not lp)
  408.  
  409.          ************* If keyword list going to the
  410.          ************* printer, eject page every 60 lines.
  411.          IF COUNTER/60 = INT(COUNTER/60) .AND. !(LP) = "Y"
  412.             EJECT
  413.          ENDIF (counter/60 and lp)
  414.  
  415.  
  416.     ENDDO (counter and ok)
  417.  
  418.     ************* If keyword list going to the screen, pause
  419.     ************* before returning to the main menu.
  420.     IF !(LP) <> "Y"
  421.        ?
  422.        ?
  423.        ? " Press any key to return to main menu..."
  424.        WAIT
  425.     ENDIF (lp <> y)
  426.  
  427.     CASE RCHOICE = "2"
  428.          DO LIBFIND
  429.  
  430. ENDCASE
  431. RETURN
  432.  
  433.  
  434. The  LIBFIND  command file fins and displays  records  that  have
  435. subjects in common.
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448. *********************************** LIBFIND.CMD
  449. ********** Pull out records with certain subjects.
  450.  
  451. ********** First, ask for sort order.
  452. ERASE
  453. STORE 1 TO ORDER
  454. ?
  455. ? " How do you want references sorted? "
  456. ?
  457. ? "     1. Alphabetically by Author "
  458. ? "     2. Chronologically by Date"
  459. ? "     3. Original Order"
  460.  
  461. @ 9,4 SAY "Enter choice (1-3) " GET ORDER PICT "9"
  462. READ
  463.  
  464. *********** Use appropriate index.
  465. DO CASE
  466.  
  467.    CASE ORDER = 1
  468.         USE LIBRARY INDEX AUTHORS
  469.  
  470.    CASE ORDER = 2
  471.         USE LIBRARY INDEX DATES
  472.  
  473.    CASE ORDER = 3
  474.         USE LIBRARY
  475.  
  476.    OTHERWISE
  477.         RETURN
  478.  
  479. ENDCASE
  480.  
  481. ************************* Next, get search criteria.
  482. ERASE
  483. STORE "                 " TO K1,K2,K3,K4,K5,K6,K7,K8
  484. @ 3,5 SAY "Keyword 1 " GET K1
  485. @ 4,5 SAY "Keyword 2 " GET K2
  486. @ 5,5 SAY "Keyword 3 " GET K3
  487. @ 6,5 SAY "Keyword 4 " GET K4
  488. @ 7,5 SAY "Keyword 5 " GET K5
  489. @ 8,5 SAY "Keyword 6 " GET K6
  490. @ 9,5 SAY "Keyword 7 " GET K7
  491. READ
  492.  
  493. *********************** Count how many keywords to search on.
  494. *********************** and store to the variable kcount.
  495. STORE 0 TO KCOUNT
  496. STORE "1" TO MAC
  497. DO WHILE K&MAC <> " "
  498.    STORE KCOUNT+1 TO KCOUNT
  499.    STORE STR(KCOUNT+1,1) TO MAC
  500. ENDDO
  501.  
  502.  
  503. ************** Now, set up search condition into
  504. ************** a memory variable called CND.
  505.  
  506. ************** First, set up initial search condition.
  507. STORE CHR(34)+" "+!(TRIM(K1))+","+CHR(34)+" $KEYWORDS" TO CND
  508.  
  509.  
  510. ************** If many keywords to search on,
  511. ************** ask about the logic of the search.
  512. STORE "0" TO LOGIC
  513. IF KCOUNT > 1
  514.    ?
  515.    @ 12,2 SAY " References with 1) ALL keywords or 2) ANY keyword " GET LOGIC
  516.    READ
  517.    IF LOGIC = "1"
  518.       STORE " .AND. " TO LOGIC
  519.    ELSE
  520.       STORE " .OR. " TO LOGIC
  521.    ENDIF (logic=1)
  522.  
  523.    *********** Then finish the 'condition' string (CND).
  524.    STORE 2 TO COUNT
  525.    DO WHILE COUNT <= KCOUNT
  526.       STORE STR(COUNT,1) TO MAC
  527.       STORE CND+LOGIC+CHR(34)+" "+!(trim(K&MAC))+","+CHR(34)+;
  528.       " $KEYWORDS" TO CND
  529.       STORE COUNT+1 TO COUNT
  530.    ENDDO (count <=kcount)
  531.  
  532. ENDIF (kcount > 1)
  533.  
  534. *********** Ask about hardcopy.
  535. ERASE
  536. STORE " " TO LP
  537. @ 5,5 SAY " Send report to printer (Y/N) " GET LP
  538. READ
  539.  
  540. ************ Prepare printer if necessary.
  541. IF !(LP)="Y"
  542.    @ 7,5 SAY "Ready printer, then press any key..."
  543.    WAIT
  544.    SET PRINT ON
  545. ENDIF (LP = Y)
  546.  
  547. ************ Use LF to count line-feeds for formatting
  548. ************ On the screen and printer.
  549. STORE 0 TO LF
  550.  
  551.  
  552. ************ Finally, print the report, listing only
  553. ************ references for whom &CND is true.
  554. ERASE
  555. DO WHILE .NOT. EOF
  556.    IF &CND
  557.       ? "Author:",AUTHOR
  558.       ? "Title :",TITLE
  559.       ? "Pub.  :",PUB
  560.       ? "Date  :",DATE,"        Pages : ",PAGES
  561.       ?
  562.       ? "Keywords : "+KEYWORDS
  563.       ? "Abstract : "
  564.       STORE LF+7 TO LF
  565.       ****************** Break off long abstract at space
  566.       ****************** Nearest the right margin.
  567.       STORE TRIM(ABSTRACT) TO STRING
  568.       STORE LEN(TRIM(STRING)) TO TLEN
  569.       DO WHILE TLEN > 60
  570.          **************** Find space nearest right margin
  571.          STORE 60 TO SPOT
  572.          DO WHILE $(STRING,SPOT,1)<>" "
  573.             STORE SPOT-1 TO SPOT
  574.          ENDDO (while not " ")
  575.          **************** Print sub-string and break off section.
  576.          ? $(STRING,1,SPOT-1)
  577.          STORE LEN(TRIM(STRING))-SPOT TO TLEN
  578.          STORE $(STRING,SPOT+1,TLEN) TO STRING
  579.          STORE LF+1 TO LF
  580.      ENDDO (while len > 60)
  581.      ? STRING
  582.      ?
  583.      ?
  584.      STORE LF+3 TO LF
  585.      ************* Count line feeds, and start on
  586.      ************* new page, if necessary.
  587.      IF LF >= 55
  588.         EJECT
  589.         STORE 0 TO LF
  590.      ENDIF (lf > 55)
  591.  
  592.    ENDIF (cnd)
  593.    SKIP
  594. ENDDO (while not eof)
  595.  
  596. SET PRINT OFF
  597. USE
  598. RETURN
  599.  
  600.  
  601. LIBEDIT prepares for editing, and manages keyword file updates.
  602.  
  603.  
  604. ***************************** LIBEDIT.CMD
  605. ************* Allows user to look up a reference
  606. ************* by primary author name, and change
  607. ************* data.  Automatically updates the
  608. ************* keyword history file.
  609.  
  610. ************* Set up databases and memory variables.
  611. SELE PRIM
  612. USE LIBRARY INDEX AUTHORS,DATES
  613. SELE SECO
  614. USE KEYWORDS INDEX KEYWORDS
  615. SELE PRIM
  616. STORE "              " TO K1,K2,K3,K4,K5,K6,K7
  617.  
  618. ************** Find out who to edit.
  619. ERASE
  620. ?
  621. ACCEPT " Enter Main Author's last name " TO SEARCH
  622. STORE !(SEARCH) TO SEARCH
  623. ERAS
  624.  
  625. *************** Determine if 0, 1 or many references
  626. *************** By this author, and react accordingly.
  627. FIND &SEARCH
  628.  
  629.  
  630. STORE 0 TO HOWMANY
  631. COUNT WHILE !(AUTHOR) = SEARCH TO HOWMANY
  632.  
  633.  
  634. DO CASE
  635.  
  636.    CASE HOWMANY = 0
  637.         STORE 0 TO RECNO
  638.         ?
  639.         ? " There is no &SEARCH on the database."
  640.         ?
  641.         WAIT
  642.  
  643.    CASE HOWMANY = 1
  644.         FIND &SEARCH
  645.         STORE # TO RECNO
  646.  
  647.    CASE HOWMANY > 1
  648.         FIND &SEARCH
  649.         LIST WHILE LNAME = &SEARCH AUTHOR, TITLE, PUB
  650.         ?
  651.         INPUT " Which one (by number) " TO RECNO
  652.  
  653. ENDCASE
  654.  
  655. *********** Edit appropriate record, if recno > 0
  656. ERASE
  657. IF RECNO > 0
  658.  
  659.    GOTO RECNO
  660.    *************** Peel out individual keywords from
  661.    *************** the long KEYWORDS field in the
  662.    *************** library database.
  663.    STORE 2 TO START
  664.    STORE 1 TO COUNT
  665.    STORE KEYWORDS TO TEMP
  666.    DO WHILE "," $(KEYWORDS)
  667.       STORE STR(COUNT,1) TO SCOUNT
  668.       STORE $(KEYWORDS,START,@(",",KEYWORDS)-2) TO K&SCOUNT
  669.       REPLACE KEYWORDS WITH $(KEYWORDS,@(",",KEYWORDS)+1,50)
  670.       STORE COUNT+1 TO COUNT
  671.    ENDDO (while "," $keywords)
  672.  
  673.    ************* just in case user deletes any or all
  674.    ************* keywords, subtract 1 from the total number
  675.    ************* of references for this keyword from
  676.    ************* The keywords file.
  677.    SELE SECO
  678.    STORE 1 TO X
  679.    STORE "1" TO MAC
  680.    DO WHILE K&MAC <> " "
  681.       FIND &K&MAC
  682.       REPLACE KEYNO WITH KEYNO-1
  683.       STORE X+1 TO X
  684.       STORE STR(X,1) TO MAC
  685.    ENDDO
  686.  
  687.    ****** Now branch to LIBED2 to do the edit.
  688.    ****** (LIBED2 is stolen from the LIBADD command file.)
  689.    SELE PRIM
  690.    DO LIBED2
  691. ENDIF (recno > 0)
  692.  
  693. **************** Before returning to main menu,
  694. **************** Eliminate any keywords for which there
  695. **************** are no references
  696. ERASE
  697. ? " Updating keyword file.........."
  698. SELE SECO
  699. DELE ALL FOR KEYNO=0
  700. PACK
  701.  
  702. RETURN
  703.  
  704.  
  705. LIBED2  is an extension of LIBED,  and handles the actual  screen
  706. display in editing data.  It is mostly a clone of LIBADD.
  707.  
  708.  
  709. **************************************** LIBED2.CMD
  710. **************************** Allow user to edit reference,
  711. **************************** then re-update keywords file.
  712. *************** (This command file was created by "borrowing"
  713. *************** a portin of LIBADD.CMD, and modifying).
  714. ERASE
  715. @  1, 3 SAY "Record No. "+STR(#,3)
  716. @  2, 0 SAY "--------------------------------------------------"
  717. @  2,50 SAY "------------------------------"
  718. @  4, 3 SAY "Author"
  719. @  4,12 GET AUTHOR
  720. @  5, 3 SAY "Title"
  721. @  5,12 GET TITLE
  722. @  6, 3 SAY "Pub."
  723. @  6,12 GET PUB
  724. @  7, 3 SAY "Date"
  725. @  7,12 GET DATE PICT "99/99/99"
  726. @  7,26 SAY "Pages"
  727. @  7,32 GET PAGES
  728. @  9, 3 SAY "Abstract"
  729. @  9,12 GET ABSTRACT
  730. @ 13, 3 SAY "Keyword 1"
  731. @ 13,13 GET K1
  732. @ 14, 3 SAY "Keyword 2"
  733. @ 14,13 GET K2
  734. @ 15, 3 SAY "Keyword 3"
  735. @ 15,13 GET K3
  736. @ 16, 3 SAY "Keyword 4"
  737. @ 16,13 GET K4
  738. @ 17, 3 SAY "Keyword 5"
  739. @ 17,13 GET K5
  740. @ 18, 3 SAY "Keyword 6"
  741. @ 18,13 GET K6
  742. @ 19, 3 SAY "Keyword 7"
  743. @ 19,13 GET K7
  744. @ 21, 0 SAY "--------------------------------------------------"
  745. @ 21,50 SAY "------------------------------"
  746. READ
  747.  
  748.  
  749. ****************** Update Keyword File.
  750. SELECT SECONDARY
  751. STORE " " TO TEMPKEY
  752. STORE 1 TO COUNT
  753. STORE STR(COUNT,1) TO MAC
  754. DO WHILE K&MAC <> " " .AND. COUNT < 8
  755.    STORE !(K&MAC) TO K&MAC
  756.    FIND &K&MAC
  757.    IF # > 0
  758.       REPLACE KEYNO WITH KEYNO+1
  759.    ELSE
  760.       APPEND BLANK
  761.       REPLACE KEYWORD WITH K&MAC
  762.       REPLACE KEYNO WITH 1
  763.    ENDIF (# > 0)
  764.    *** Now, concatentate K&MAC into temporary KEYWORDS string.
  765.    STORE TEMPKEY+TRIM(K&MAC)+", " TO TEMPKEY
  766.    STORE COUNT +1 TO COUNT
  767.    STORE STR(COUNT,1) TO MAC
  768. ENDDO (k&mac<>" ")
  769.  
  770. *********************** Put tempkey into keywords
  771. SELECT PRIMARY
  772. REPLACE KEYWORDS WITH TEMPKEY
  773.  
  774. RETURN
  775.