home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib06.dsk / CATSUP.bas < prev    next >
BASIC Source File  |  2023-02-26  |  6KB  |  135 lines

  1. 10  REM  *****************************
  2. 20  REM  *       *C*A*T*S*U*P*       *
  3. 30  REM  *  APPLE CATALOG SUPERVISOR *
  4. 40  REM  *       BY CHUCK WEBER      *
  5. 50  REM  *    COPYRIGHT (C) 1981     *
  6. 60  REM  *    BY MICRO-SPARC INC     *
  7. 70  REM  *****************************
  8. 90  REM  LOAD ADDRESS OF FIRST FILE NAME IN READ BUFFER IN INP$ POINTER
  9. 100 INP$ = ""
  10. 110 VS =  PEEK(106) *256 + PEEK(105)
  11. 120  POKE VS +2,240: POKE VS +3,14: POKE VS +4,150
  12. 130  REM  LOAD RWTS CONTROL ROUTINE & IOB AT $300 TO $319
  13. 140  DATA  169,3,160,9,32,217,3,96,0,1,96,1,0,17,15,251,183,0,150,0,0,1,0,254,96,1
  14. 150  FOR I = 768 TO 793
  15. 160  READ X: POKE I,X
  16. 170  NEXT I
  17. 180 BL$ = ""
  18. 190  FOR I = 1 TO 40
  19. 200 BL$ = BL$ + CHR$(160): NEXT I
  20. 210  DIM N$(105),S$(105),T$(105),L$(105)
  21. 220  ONERR  GOTO 1290
  22. 230 D$ =  CHR$(4):B$ =  CHR$(7)
  23. 240 IOB = 777:T = 64:PL = 15
  24. 250 RB =  -27136: REM  READ BUFFER
  25. 260 CS = IOB +1:CD = IOB +2:TRK = IOB +4:SEC = IOB +5
  26. 270 VOL = IOB +14:OS = IOB +15:OD = IOB +16:F1 = RB +11:F7 = RB +221
  27. 280 M1$ = "TYPE 'LETTER' TO RUN, OR  0=EXIT"
  28. 290 M2$ = "1=LOAD      4=DELETE      7=PAGE BACK"
  29. 300 M3$ = "2=LOCK      5=RENAME      8=NEW DISK"
  30. 310 M4$ = "3=UNLOCK    6=PAGE AHEAD  9=RESET DRIVE"
  31. 320 S =  PEEK( -18455)/16:D =  PEEK( -18454):K = 0
  32. 330  POKE CS,S *16: POKE CD,D
  33. 340  POKE TRK,17
  34. 350 F = 496:P = 1:C = 0
  35. 360  TEXT : HOME : HTAB 13: PRINT "CATSUP RUNNING": PRINT 
  36. 370  IF K = 0  THEN 490
  37. 380  IF K = 8  THEN  PRINT "INSERT NEW DISK IN SLOT:";S;", DRIVE:";D: PRINT "AND PRESS RETURN.";: GET R$: GOTO 490
  38. 390  PRINT "CURRENT SLOT IS ";S
  39. 400  PRINT "PRESS RETURN OR ENTER SLOT #";: GET I$: IF I$ =  CHR$(13)  THEN  PRINT : GOTO 440
  40. 410  IF I$ <"0"  OR I$ >"7"  THEN  VTAB 3: HTAB 1: GOTO 370
  41. 420  PRINT I$:S =  VAL(I$)
  42. 430  POKE OS, PEEK(CS): POKE OD, PEEK(CD): POKE CS,S *16
  43. 440  PRINT : PRINT "CURRENT DRIVE IS ";D
  44. 450  PRINT "PRESS RETURN OR ENTER DRIVE #";: GET I$: IF I$ =  CHR$(13)  THEN 490
  45. 460  IF I$ < >"1"  AND I$ < >"2"  THEN  VTAB 5: HTAB 1: CALL  -958: GOTO 440
  46. 470  PRINT I$:D =  VAL(I$)
  47. 480  POKE CD,D
  48. 490  FOR X = 15 TO 1  STEP  -1
  49. 500  POKE SEC,X: CALL 768
  50. 510 ZZ =  -34
  51. 520  FOR Y = F1 TO F7  STEP 35
  52. 530 ZZ = ZZ +35
  53. 540 Z =  PEEK(Y +33): IF Z = 0  THEN 690
  54. 550 C = C +1
  55. 560  IF  PEEK(Y) = 255  THEN N$(C) = "1": GOTO 670
  56. 570 F = F -Z
  57. 580 S$(C) =  STR$(Z)
  58. 590  IF  LEN(S$(C)) = 1  THEN S$(C) = "00" +S$(C)
  59. 600  IF  LEN(S$(C)) = 2  THEN S$(C) = "0" +S$(C)
  60. 610 Z =  PEEK(Y +2):L$(C) = " ": IF Z >16  THEN L$(C) = "*":Z = Z -128
  61. 620  IF Z = 0  THEN T$(C) = "T"
  62. 630  IF Z = 1  THEN T$(C) = "I"
  63. 640  IF Z = 2  THEN T$(C) = "A"
  64. 650  IF Z = 4  THEN T$(C) = "B"
  65. 655  IF Z = 16  THEN T$(C) = "R"
  66. 660 N$(C) =  MID$ (INP$,ZZ,30)
  67. 670  NEXT Y
  68. 680  NEXT X
  69. 690 L% = C/PL: IF C >L% *PL  THEN L% = L% +1
  70. 700 V$ =  STR$( PEEK(VOL))
  71. 710  IF  LEN(V$) = 1  THEN V$ = "00" +V$
  72. 720  IF  LEN(V$) = 2  THEN V$ = "0" +V$
  73. 730 F$ =  STR$(F): IF  LEN(F$) = 1  THEN F$ = "00" +F$
  74. 740  IF  LEN(F$) = 2  THEN F$ = "0" +F$
  75. 750  HOME : PRINT "SL:";S;" DR:";D;" VOL:";V$;"  FREE:";F$;"  PAGE ";P;" OF ";L%:J = P -1
  76. 760  FOR I = 1 TO PL
  77. 770  IF (J *PL +I) >C  THEN 810
  78. 780  IF N$(J *PL +I) = "1"  THEN  PRINT  CHR$(T +I);"        ";: INVERSE : PRINT "DELETED FILE": NORMAL 
  79. 790  IF N$(J *PL +I) < >"1"  THEN  PRINT  CHR$(T +I);" ";L$(J *PL +I);T$(J *PL +I);" ";S$(J *PL +I);" ";N$(J *PL +I)
  80. 800  NEXT I
  81. 810  VTAB 19: HTAB 1: CALL  -958
  82. 820 A$ = "RUN": VTAB 21: HTAB 1: PRINT M1$: PRINT M2$: PRINT M3$: PRINT M4$;
  83. 830 K =  PEEK( -16384)
  84. 840  IF K <128  THEN 830
  85. 850  POKE  -16368,0: VTAB 19: HTAB 1: CALL  -958
  86. 860 K$ =  CHR$(K):K = K -176: IF K <0  OR K >9  THEN 970
  87. 870  IF K = 0  THEN 1340
  88. 880  IF K = 6  OR K = 7  THEN 1260
  89. 890  IF K = 8  OR K = 9  THEN 340
  90. 900  PRINT "PRESS 'LETTER' YOU WISH TO ";
  91. 910  IF K = 1  THEN A$ = "LOAD"
  92. 920  IF K = 2  THEN A$ = "LOCK"
  93. 930  IF K = 3  THEN A$ = "UNLOCK"
  94. 940  IF K = 4  THEN A$ = "DELETE": FLASH 
  95. 950  IF K = 5  THEN A$ = "RENAME"
  96. 960  PRINT A$;: NORMAL : GET K$:K =  ASC(K$) -48
  97. 970  IF K <17  OR K >31  THEN 810
  98. 980 K = K -16: IF (J *PL +K) >C  THEN 810
  99. 990  IF N$(J *PL +K) = "1"  THEN 810
  100. 1000  IF (A$ = "RUN"  OR A$ = "LOAD")  AND T$(J *PL +K) = "T"  THEN  VTAB 19: HTAB 1: CALL  -868: FLASH : PRINT B$;"FILE ";K$;" IS TEXT": NORMAL : GOTO 820
  101. 1010  IF (A$ = "DELETE"  OR A$ = "RENAME")  AND L$(J *PL +K) = "*"  THEN  VTAB 19: HTAB 1: CALL  -868: FLASH : PRINT B$;"FILE ";K$;" LOCKED": NORMAL : GOTO 820
  102. 1020  IF A$ < >"RENAME"  THEN 1110
  103. 1030  VTAB 19: HTAB 1: CALL  -868: PRINT "RENAME ";K$;: INPUT RR$: IF RR$ = ""  THEN 810
  104. 1040  IF  ASC(RR$) <65  OR  ASC(RR$) >90  THEN  VTAB 20: HTAB 1: CALL  -868: FLASH : PRINT B$;"INVALID NAME";: NORMAL : GOTO 1030
  105. 1050 R$ = ""
  106. 1060  FOR I = 1 TO  LEN(RR$)
  107. 1070 R$ = R$ + CHR$( ASC( MID$ (RR$,I,1)) +128): NEXT I
  108. 1080 R$ = R$ + LEFT$(BL$,30 - LEN(R$))
  109. 1090  FOR Z = 1 TO L% *PL: IF N$(Z) = R$  THEN  VTAB 20: HTAB 1: CALL  -868: FLASH : PRINT B$;"DUPLICATE NAME";: NORMAL : GOTO 1030
  110. 1100  NEXT Z
  111. 1110  IF A$ < >"DELETE"  THEN 1140
  112. 1120  VTAB 19: HTAB 1: CALL  -868: PRINT "PRESS 'D' TO DELETE FILE ";K$: PRINT "OR ANY OTHER KEY TO CANCEL.";
  113. 1130  GET R$: IF R$ < >"D"  THEN 810
  114. 1140  IF (A$ = "RUN"  OR A$ = "LOAD")  AND T$(J *PL +K) = "B"  THEN A$ = "B" +A$
  115. 1150 A$ = A$ +" " +N$(J *PL +K)
  116. 1160  VTAB 19: HTAB 1: CALL  -958
  117. 1170  IF  LEFT$(A$,4) = "RENA"  THEN  PRINT A$: VTAB 20: HTAB 8: PRINT  LEFT$(R$,30):A$ = A$ +"," + LEFT$(R$,30)
  118. 1180  IF  LEFT$(A$,4) < >"RENA"  THEN  PRINT A$
  119. 1190  PRINT D$;A$;",S";S;",D";D
  120. 1200  IF  LEFT$(A$,1) = "B"  THEN 1350
  121. 1210  IF  LEFT$(A$,4) = "LOCK"  THEN L$(J *PL +K) = "*"
  122. 1220  IF  LEFT$(A$,4) = "UNLO"  THEN L$(J *PL +K) = " "
  123. 1230  IF  LEFT$(A$,4) = "DELE"  THEN N$(J *PL +K) = "1":F = F + VAL(S$(J *PL +K)): GOTO 730
  124. 1240  IF  LEFT$(A$,4) = "RENA"  THEN N$(J *PL +K) =  LEFT$(R$,30)
  125. 1250  GOTO 750
  126. 1260  IF K = 6  THEN P = P +1: IF P >L%  THEN P = 1
  127. 1270  IF K = 7  THEN P = P -1: IF P <1  THEN P = L%
  128. 1280  GOTO 750
  129. 1290 ECD =  PEEK(222):LOC =  PEEK(219) *256 + PEEK(218): VTAB 19: HTAB 1: CALL  -958: FLASH 
  130. 1300  IF ECD = 4  THEN  PRINT B$;"WRITE PROTECTED"
  131. 1310  IF  LEFT$(A$,1) = "B"  THEN  NORMAL : GOTO 1350
  132. 1320  IF ECD < >4  THEN  PRINT B$;"ERROR ";ECD;" LINE ";LOC
  133. 1330  NORMAL : GOTO 820
  134. 1340  HOME : VTAB 10: HTAB 12: PRINT "CATSUP TERMINATED"
  135. 1350  END