home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib06.dsk
/
CATSUP.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
6KB
|
135 lines
10 REM *****************************
20 REM * *C*A*T*S*U*P* *
30 REM * APPLE CATALOG SUPERVISOR *
40 REM * BY CHUCK WEBER *
50 REM * COPYRIGHT (C) 1981 *
60 REM * BY MICRO-SPARC INC *
70 REM *****************************
90 REM LOAD ADDRESS OF FIRST FILE NAME IN READ BUFFER IN INP$ POINTER
100 INP$ = ""
110 VS = PEEK(106) *256 + PEEK(105)
120 POKE VS +2,240: POKE VS +3,14: POKE VS +4,150
130 REM LOAD RWTS CONTROL ROUTINE & IOB AT $300 TO $319
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
150 FOR I = 768 TO 793
160 READ X: POKE I,X
170 NEXT I
180 BL$ = ""
190 FOR I = 1 TO 40
200 BL$ = BL$ + CHR$(160): NEXT I
210 DIM N$(105),S$(105),T$(105),L$(105)
220 ONERR GOTO 1290
230 D$ = CHR$(4):B$ = CHR$(7)
240 IOB = 777:T = 64:PL = 15
250 RB = -27136: REM READ BUFFER
260 CS = IOB +1:CD = IOB +2:TRK = IOB +4:SEC = IOB +5
270 VOL = IOB +14:OS = IOB +15:OD = IOB +16:F1 = RB +11:F7 = RB +221
280 M1$ = "TYPE 'LETTER' TO RUN, OR 0=EXIT"
290 M2$ = "1=LOAD 4=DELETE 7=PAGE BACK"
300 M3$ = "2=LOCK 5=RENAME 8=NEW DISK"
310 M4$ = "3=UNLOCK 6=PAGE AHEAD 9=RESET DRIVE"
320 S = PEEK( -18455)/16:D = PEEK( -18454):K = 0
330 POKE CS,S *16: POKE CD,D
340 POKE TRK,17
350 F = 496:P = 1:C = 0
360 TEXT : HOME : HTAB 13: PRINT "CATSUP RUNNING": PRINT
370 IF K = 0 THEN 490
380 IF K = 8 THEN PRINT "INSERT NEW DISK IN SLOT:";S;", DRIVE:";D: PRINT "AND PRESS RETURN.";: GET R$: GOTO 490
390 PRINT "CURRENT SLOT IS ";S
400 PRINT "PRESS RETURN OR ENTER SLOT #";: GET I$: IF I$ = CHR$(13) THEN PRINT : GOTO 440
410 IF I$ <"0" OR I$ >"7" THEN VTAB 3: HTAB 1: GOTO 370
420 PRINT I$:S = VAL(I$)
430 POKE OS, PEEK(CS): POKE OD, PEEK(CD): POKE CS,S *16
440 PRINT : PRINT "CURRENT DRIVE IS ";D
450 PRINT "PRESS RETURN OR ENTER DRIVE #";: GET I$: IF I$ = CHR$(13) THEN 490
460 IF I$ < >"1" AND I$ < >"2" THEN VTAB 5: HTAB 1: CALL -958: GOTO 440
470 PRINT I$:D = VAL(I$)
480 POKE CD,D
490 FOR X = 15 TO 1 STEP -1
500 POKE SEC,X: CALL 768
510 ZZ = -34
520 FOR Y = F1 TO F7 STEP 35
530 ZZ = ZZ +35
540 Z = PEEK(Y +33): IF Z = 0 THEN 690
550 C = C +1
560 IF PEEK(Y) = 255 THEN N$(C) = "1": GOTO 670
570 F = F -Z
580 S$(C) = STR$(Z)
590 IF LEN(S$(C)) = 1 THEN S$(C) = "00" +S$(C)
600 IF LEN(S$(C)) = 2 THEN S$(C) = "0" +S$(C)
610 Z = PEEK(Y +2):L$(C) = " ": IF Z >16 THEN L$(C) = "*":Z = Z -128
620 IF Z = 0 THEN T$(C) = "T"
630 IF Z = 1 THEN T$(C) = "I"
640 IF Z = 2 THEN T$(C) = "A"
650 IF Z = 4 THEN T$(C) = "B"
655 IF Z = 16 THEN T$(C) = "R"
660 N$(C) = MID$ (INP$,ZZ,30)
670 NEXT Y
680 NEXT X
690 L% = C/PL: IF C >L% *PL THEN L% = L% +1
700 V$ = STR$( PEEK(VOL))
710 IF LEN(V$) = 1 THEN V$ = "00" +V$
720 IF LEN(V$) = 2 THEN V$ = "0" +V$
730 F$ = STR$(F): IF LEN(F$) = 1 THEN F$ = "00" +F$
740 IF LEN(F$) = 2 THEN F$ = "0" +F$
750 HOME : PRINT "SL:";S;" DR:";D;" VOL:";V$;" FREE:";F$;" PAGE ";P;" OF ";L%:J = P -1
760 FOR I = 1 TO PL
770 IF (J *PL +I) >C THEN 810
780 IF N$(J *PL +I) = "1" THEN PRINT CHR$(T +I);" ";: INVERSE : PRINT "DELETED FILE": NORMAL
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)
800 NEXT I
810 VTAB 19: HTAB 1: CALL -958
820 A$ = "RUN": VTAB 21: HTAB 1: PRINT M1$: PRINT M2$: PRINT M3$: PRINT M4$;
830 K = PEEK( -16384)
840 IF K <128 THEN 830
850 POKE -16368,0: VTAB 19: HTAB 1: CALL -958
860 K$ = CHR$(K):K = K -176: IF K <0 OR K >9 THEN 970
870 IF K = 0 THEN 1340
880 IF K = 6 OR K = 7 THEN 1260
890 IF K = 8 OR K = 9 THEN 340
900 PRINT "PRESS 'LETTER' YOU WISH TO ";
910 IF K = 1 THEN A$ = "LOAD"
920 IF K = 2 THEN A$ = "LOCK"
930 IF K = 3 THEN A$ = "UNLOCK"
940 IF K = 4 THEN A$ = "DELETE": FLASH
950 IF K = 5 THEN A$ = "RENAME"
960 PRINT A$;: NORMAL : GET K$:K = ASC(K$) -48
970 IF K <17 OR K >31 THEN 810
980 K = K -16: IF (J *PL +K) >C THEN 810
990 IF N$(J *PL +K) = "1" THEN 810
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
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
1020 IF A$ < >"RENAME" THEN 1110
1030 VTAB 19: HTAB 1: CALL -868: PRINT "RENAME ";K$;: INPUT RR$: IF RR$ = "" THEN 810
1040 IF ASC(RR$) <65 OR ASC(RR$) >90 THEN VTAB 20: HTAB 1: CALL -868: FLASH : PRINT B$;"INVALID NAME";: NORMAL : GOTO 1030
1050 R$ = ""
1060 FOR I = 1 TO LEN(RR$)
1070 R$ = R$ + CHR$( ASC( MID$ (RR$,I,1)) +128): NEXT I
1080 R$ = R$ + LEFT$(BL$,30 - LEN(R$))
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
1100 NEXT Z
1110 IF A$ < >"DELETE" THEN 1140
1120 VTAB 19: HTAB 1: CALL -868: PRINT "PRESS 'D' TO DELETE FILE ";K$: PRINT "OR ANY OTHER KEY TO CANCEL.";
1130 GET R$: IF R$ < >"D" THEN 810
1140 IF (A$ = "RUN" OR A$ = "LOAD") AND T$(J *PL +K) = "B" THEN A$ = "B" +A$
1150 A$ = A$ +" " +N$(J *PL +K)
1160 VTAB 19: HTAB 1: CALL -958
1170 IF LEFT$(A$,4) = "RENA" THEN PRINT A$: VTAB 20: HTAB 8: PRINT LEFT$(R$,30):A$ = A$ +"," + LEFT$(R$,30)
1180 IF LEFT$(A$,4) < >"RENA" THEN PRINT A$
1190 PRINT D$;A$;",S";S;",D";D
1200 IF LEFT$(A$,1) = "B" THEN 1350
1210 IF LEFT$(A$,4) = "LOCK" THEN L$(J *PL +K) = "*"
1220 IF LEFT$(A$,4) = "UNLO" THEN L$(J *PL +K) = " "
1230 IF LEFT$(A$,4) = "DELE" THEN N$(J *PL +K) = "1":F = F + VAL(S$(J *PL +K)): GOTO 730
1240 IF LEFT$(A$,4) = "RENA" THEN N$(J *PL +K) = LEFT$(R$,30)
1250 GOTO 750
1260 IF K = 6 THEN P = P +1: IF P >L% THEN P = 1
1270 IF K = 7 THEN P = P -1: IF P <1 THEN P = L%
1280 GOTO 750
1290 ECD = PEEK(222):LOC = PEEK(219) *256 + PEEK(218): VTAB 19: HTAB 1: CALL -958: FLASH
1300 IF ECD = 4 THEN PRINT B$;"WRITE PROTECTED"
1310 IF LEFT$(A$,1) = "B" THEN NORMAL : GOTO 1350
1320 IF ECD < >4 THEN PRINT B$;"ERROR ";ECD;" LINE ";LOC
1330 NORMAL : GOTO 820
1340 HOME : VTAB 10: HTAB 12: PRINT "CATSUP TERMINATED"
1350 END