home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib28a.dsk / MAY.1986 / LIBRARIAN.EDIT.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  127 lines

  1. 10  REM **********************
  2. 20  REM *                    *
  3. 30  REM *   LIBRARIAN.EDIT   * 
  4. 40  REM *    BY KEN MANLY    *
  5. 50  REM *                    *
  6. 60  REM * COPYRIGHT (C) 1986 *
  7. 70  REM * BY MICROSPARC, INC *
  8. 80  REM * CONCORD, MA  01742 *
  9. 90  REM **********************
  10. 100  GOSUB 1200: GOTO 380
  11. 110  REM  === SORT
  12. 120  FOR I = CT -DD TO 0  STEP  -1:S = CT%(I):T = 0
  13. 130  FOR J = I +DD TO CT  STEP DD
  14. 140  IF CT$(S,AF) >CT$(CT%(J),AF)  THEN T = J:CT%(J -DD) = CT%(J): GOTO 160
  15. 150 J = CT
  16. 160  NEXT J: IF (T >0)  THEN CT%(T) = S
  17. 170  NEXT I: RETURN 
  18. 180  REM  === FILTER
  19. 190  ON SX +1 GOTO 200,210,220,230,240,250
  20. 200 TX = (CT$(II,SF) = SS$): RETURN 
  21. 210 TX = (CT$(II,SF) < >SS$): RETURN 
  22. 220 TX = (CT$(II,SF) >SS$): RETURN 
  23. 230 TX = (CT$(II,SF) <SS$): RETURN 
  24. 240 TX = (SS$ =  LEFT$(CT$(II,SF), LEN(SS$))): RETURN 
  25. 250 TX = (SS$ =  RIGHT$(CT$(II,SF), LEN(SS$))): RETURN 
  26. 260  REM  === ERROR HANDLER
  27. 270  TEXT : HOME : VTAB 8:ER =  PEEK(222): PRINT DD$"CLOSE": CALL 54915: ON ER GOTO 350,350,290,340,380,280,280,290,300,310,320,350,330,350,350,320,300: GOTO 350
  28. 280  PRINT "FILE NOT FOUND": GOTO 360
  29. 290  PRINT "TROUBLE WITH THE DISK DRIVE": GOTO 360
  30. 300  PRINT "DISK FULL": GOTO 360
  31. 310  PRINT NM$" IS LOCKED": INPUT "UNLOCK IT? ";Q$: IF  LEFT$(Q$,1) = "Y"  OR  LEFT$(Q$,1) =  CHR$(121)  THEN  PRINT DD$"UNLOCK"NM$: GOTO 360
  32. 320  PRINT "ERROR IN PRODOS COMMAND": PRINT "OR FILENAME "NM$: GOTO 360
  33. 330  PRINT NM$" IS NOT A TEXT FILE": GOTO 360
  34. 340  PRINT "DISK IS WRITE-PROTECTED": GOTO 360
  35. 350  PRINT "ERROR "ER" IN LINE " PEEK(219) *256 + PEEK(218)
  36. 360  PRINT "<RETURN> TO CONTINUE . . . ": GET Q$: PRINT 
  37. 370  REM  === MENU
  38. 380  HOME : PRINT "CATALOG FILE: "NM$", "CT +1" ITEMS": IF (SX > = 0)  THEN  PRINT "SELECTION: "FD$(SF)" "SX$(SX)" "SS$
  39. 390  VTAB 6: PRINT "  1  LOAD CATALOG FILE": PRINT "  2  SET SELECTION": PRINT "  3  SET FILENAME": PRINT "  4  QUIT": PRINT 
  40. 400  IF CT > = 0  THEN  PRINT "  5  DISPLAY": PRINT "  6  PRINT": PRINT "  7  SORT": PRINT "  8  SAVE": PRINT "  9  DELETE": PRINT " 10  CLEAR"
  41. 410  VTAB 18: HTAB 1: PRINT "ENTER CHOICE OR PRODOS COMMAND": INPUT ">> ";Q$:Q =  VAL(Q$): ON ( LEN(Q$) >2) GOTO 420: ON (Q <0  OR Q >10) GOTO 410: ON (CT <0  AND Q >4) GOTO 410: ON Q GOSUB 470,550,640,690,720,810,910,1050,970,440: GOTO 380
  42. 420  HOME : VTAB 8: HTAB 20 - LEN(Q$)/2: PRINT Q$: PRINT DD$Q$: PRINT "<RETURN> TO CONTINUE . . .": GET Q$: PRINT : GOTO 380
  43. 430  REM  === CLEAR
  44. 440  HOME : VTAB 8: INPUT "DO YOU WANT TO DISCARD CATALOG DATA? ";Q$: IF  LEFT$(Q$,1) = "Y"  OR  LEFT$(Q$,1) =  CHR$(121)  THEN CT =  -1
  45. 450  RETURN 
  46. 460  REM  === LOAD
  47. 470  IF CT > = 0  THEN  GOSUB 440: IF CT > = 0  THEN  RETURN 
  48. 480  HOME : VTAB 8: HTAB 15: PRINT "PREPARING":CT =  -1:TX = 1: FOR I = 0 TO MX:CT%(I) = I: NEXT : VTAB 8: HTAB 13: PRINT "READING "NM$
  49. 490  PRINT DD$"VERIFY"NM$: PRINT DD$"OPEN"NM$: PRINT DD$"READ"NM$: IF (SX > = 0)  THEN NM$ =  LEFT$(NM$,13) +".S"
  50. 500  FOR II = 0 TO MX
  51. 510  FOR J = 0 TO 3: INPUT CT$(II,J): NEXT : ON (SX > = 0) GOSUB 190: IF   NOT TX GOTO 510
  52. 520 CT = II: VTAB 10: HTAB 19: PRINT II +1: NEXT II: PRINT DD$"CLOSE"NM$
  53. 530  RETURN 
  54. 540  REM  === SET SELECTION
  55. 550  HOME : IF (SX <0)  THEN  PRINT "SELECTION: ALL ITEMS":TX = 1
  56. 560  IF (SX > = 0)  THEN  PRINT "SELECTION: "FD$(SF)" "SX$(SX)" "SS$
  57. 570  VTAB 8: PRINT "  0  NO SELECTION": FOR I = 0 TO 3: PRINT "  "I +1"  SELECT BY "FD$(I): NEXT 
  58. 580  VTAB 14: HTAB 1: INPUT "CHOOSE  >> ";Q$:Q =  VAL(Q$): ON (Q <0)  OR (Q >4) GOTO 580:SF = Q -1: IF SF <0  THEN SX =  -1: GOTO 620
  59. 590  HOME : PRINT "SELECTION: "FD$(SF): VTAB 8: FOR I = 0 TO 5: PRINT "  "I +1"  "SX$(I): NEXT 
  60. 600  VTAB 15: HTAB 1: INPUT "CHOOSE  >> ";Q$:Q =  VAL(Q$): ON (Q <1)  OR (Q >6) GOTO 600:SX = Q -1
  61. 610  HOME : PRINT "SELECTION: "FD$(SF)" "SX$(SX): VTAB 8: INPUT "TYPE COMPARISON TEXT >> ";SS$
  62. 620  RETURN 
  63. 630  REM  === SET FILENAME
  64. 640  HOME : VTAB 8: PRINT "CURRENT CATALOG FILENAME IS "NM$: PRINT "<RETURN> OR <?> OR TYPE NEW FILENAME"
  65. 650  INPUT ">> ";T$: IF T$ = "?"  THEN  PRINT DD$"CAT": GOTO 650
  66. 660  IF T$ >""  THEN NM$ = T$
  67. 670  RETURN 
  68. 680  REM  === QUIT
  69. 690  ON (CT > = 0) GOSUB 440: HOME : VTAB 8: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";Q$: IF  LEFT$(Q$,1) < >"Y"  AND  LEFT$(Q$,1) < > CHR$(121)  THEN  RETURN 
  70. 700  HOME : PRINT "GOODBYE . . .": END 
  71. 710  REM  === DISPLAY
  72. 720  HOME : IF (SX <0)  THEN  PRINT "SELECTION: ALL ITEMS":TX = 1
  73. 730  IF (SX > = 0)  THEN  PRINT "SELECTION: "FD$(SF)" "SX$(SX)" "SS$
  74. 740  POKE 34,1:L = 0: FOR I = 0 TO CT:II = CT%(I): ON (SX > = 0) GOSUB 190
  75. 750  IF TX  THEN  PRINT  LEFT$(CT$(II,0),3)" " LEFT$(CT$(II,1),7);: HTAB 13: PRINT  LEFT$(CT$(II,2),22);: HTAB 36: PRINT CT$(II,3):L = L +1
  76. 760  IF (L <21)  OR (I = CT)  THEN 780
  77. 770  PRINT "PRESS <RETURN> FOR MORE . . .":L = 0: GET Q$: PRINT : HOME : IF Q$ =  CHR$(27)  THEN I = CT
  78. 780  NEXT I
  79. 790  PRINT "PRESS <RETURN> . . .": GET Q$: PRINT : POKE 34,0: RETURN 
  80. 800  REM  === PRINT
  81. 810  HOME : IF (SX <0)  THEN  PRINT "SELECTION: ALL ITEMS":TX = 1
  82. 820  IF (SX > = 0)  THEN  PRINT "SELECTION: "FD$(SF)" "SX$(SX)" "SS$
  83. 830  VTAB 8: PRINT "<SPACE> TO PAUSE PRINTING":PG = 1: PRINT DD$"PR#"PS: PRINT PS$: GOSUB 880: FOR I = 0 TO CT:II = CT%(I): ON (SX > = 0) GOSUB 190
  84. 840  IF TX  THEN  PRINT CT$(II,0);: POKE 36,8: PRINT  LEFT$(CT$(II,1),15);: POKE 36,25: PRINT CT$(II,2);: POKE 36,63: PRINT CT$(II,3):L = L +1
  85. 850  IF  PEEK(49152) >127  THEN  POKE 49168,0: PRINT DD$"PR#0": VTAB 8: CALL  -958: PRINT "<ESC> TO QUIT, <RETURN> TO CONTINUE ";: GET Q$: PRINT : VTAB 8: CALL  -958: PRINT "<SPACE> TO PAUSE PRINTING": PRINT DD$"PR#"PS: PRINT PS$;: IF Q$ =  CHR$(27)  THEN I = CT: GOTO 870
  86. 860  IF L >58  THEN  PRINT  CHR$(12):PG = PG +1: GOSUB 880:L = 0
  87. 870  NEXT I: PRINT  CHR$(12): PRINT DD$"PR#0": RETURN 
  88. 880  PRINT NM$;: POKE 36,31: PRINT "LIBRARIAN LISTING";: POKE 36,70: PRINT "PAGE "PG: IF (SX > = 0)  THEN  PRINT "SELECTION: "FD$(SF)" "SX$(SX)" "SS$;
  89. 890  PRINT : PRINT : RETURN 
  90. 900  REM  === SORT
  91. 910  HOME : VTAB 8: PRINT "  0  NO SORT": FOR I = 0 TO 3: PRINT "  "I +1"  SORT BY "FD$(I): NEXT 
  92. 920  VTAB 14: HTAB 1: INPUT "CHOOSE  >> ";Q$:Q =  VAL(Q$): ON (Q <0)  OR (Q >4) GOTO 920: ON (Q = 0) GOTO 940:AF = Q -1: RESTORE : HOME : VTAB 8: HTAB 15: PRINT "SORTING";
  93. 930  READ DD: ON (DD >CT) GOTO 930: IF DD >0  THEN  PRINT ".";: GOSUB 120: GOTO 930
  94. 940  RETURN 
  95. 950  DATA 307,137,61,29,13,5,2,1,0
  96. 960  REM  === DELETE
  97. 970  IF (SX <0)  THEN  GOSUB 550: IF (SX <0)  THEN  RETURN 
  98. 980  HOME : PRINT "SELECTION: "FD$(SF)" "SX$(SX)" "SS$
  99. 990  VTAB 8: PRINT "READY TO DELETE ITEMS FOR WHICH": PRINT FD$(SF)" "SX$(SX)" "SS$
  100. 1000  VTAB 14: INPUT "DO YOU WANT TO DO THIS? ";Q$:Q$ =  LEFT$(Q$,1): ON (Q$ = "Y"  OR Q$ =  CHR$(121)) GOTO 1010: GOTO 1030
  101. 1010  HOME : VTAB 8: HTAB 15: PRINT "DELETING";: FOR I = CT TO 0  STEP  -1:II = CT%(I): GOSUB 190: IF TX  THEN CT = CT -1: PRINT ".";: IF I < = CT  THEN  FOR J = I TO CT:CT%(J) = CT%(J +1): NEXT J
  102. 1020  NEXT I: PRINT :SX =  -1
  103. 1030  RETURN 
  104. 1040  REM  === SAVE/APPEND
  105. 1050  HOME :DF = 0:TX = 1: VTAB 8: HTAB 10: PRINT "CHECKING DIRECTORY": IF  LEFT$(NM$,1) < >"/"  THEN  PRINT DD$"PREFIX": INPUT PX$: GOTO 1080
  106. 1060  FOR I =  LEN(NM$) TO 1  STEP  -1:PL = I: IF  MID$ (NM$,PL,1) = "/"  THEN I = 1
  107. 1070  NEXT I:PX$ =  LEFT$(NM$,PL)
  108. 1080  PRINT DD$"OPEN"PX$",TDIR": PRINT DD$"READ"PX$: INPUT T$: INPUT T$: INPUT T$: IF  LEN(NM$) <15  THEN NS$ = NM$ +" "
  109. 1090  INPUT T$: ON (T$ = "") GOTO 1100: ON (NS$ < > MID$ (T$,2, LEN(NS$))) GOTO 1090:DF = 1
  110. 1100  PRINT DD$"CLOSE": VTAB 2: IF (SX > = 0)  THEN  PRINT "ONLY SAVING THOSE FILENAMES FOR WHICH": PRINT FD$(SF)" "SX$(SX)" "SS$
  111. 1110  IF   NOT DF  THEN  VTAB 8: CALL  -958: HTAB 10: GOTO 1140
  112. 1120  VTAB 8: CALL  -958: PRINT NM$" ALREADY EXISTS": PRINT : PRINT "  1  REPLACE EXISTING FILE": PRINT "  2  ADD TO EXISTING FILE": PRINT "  3  CANCEL"
  113. 1130  VTAB 14: HTAB 1: INPUT "CHOOSE  >> ";Q$:Q =  VAL(Q$): ON (Q <1)  OR (Q >3) GOTO 1130: VTAB 8: CALL  -958: HTAB 10: ON Q GOTO 1140,1150,1180
  114. 1140  PRINT "SAVING "NM$: PRINT DD$"OPEN"NM$: PRINT DD$"WRITE"NM$: GOTO 1160
  115. 1150  PRINT "APPENDING TO "NM$: PRINT DD$"APPEND"NM$
  116. 1160  FOR I = 0 TO CT:II = CT%(I): ON (SX > = 0) GOSUB 190: IF TX  THEN  FOR J = 0 TO 3: PRINT CT$(II,J): NEXT J
  117. 1170  NEXT I: PRINT DD$"CLOSE"
  118. 1180  RETURN 
  119. 1190  REM  === INITIALIZE
  120. 1200 I = 0:J = 0:K = 0:CT =  -1:DD = 0:AF =  -1:SX =  -1: REM DEFINE SORT VARIABLES EARLY
  121. 1210 PS = 1:PS$ =  CHR$(9) +"80N": REM PRINTER SLOT AND SETUP STRING
  122. 1220 MX = 500: REM MAX NUMBER OF FILES
  123. 1230  DIM FD$(3),SX$(5),CT$(MX,3),CT%(MX),T$(3)
  124. 1240 DD$ =  CHR$(4):NM$ = "TCAT"
  125. 1250 FD$(0) = "SYSTEM":FD$(1) = "VOLUME":FD$(2) = "FILE":FD$(3) = "TYPE":SX$(0) = "EQUALS":SX$(1) = "IS NOT EQUAL TO":SX$(2) = "IS GREATER THAN":SX$(3) = "IS LESS THAN":SX$(4) = "BEGINS WITH":SX$(5) = "ENDS WITH"
  126. 1260  ONERR  GOTO 270
  127. 1270  PRINT  CHR$(21): RETURN