Cassette Directory

Developer(s): Michael Carver
Date: 1986
Type: Program
Platform(s): TS 2068

Sophisticated program to create a directory of files on a cassette.

Appears on

One of a series of library tapes. Programs on these tapes were renamed to a number series. This tape contained programs 20001 to 20050. These tapes were compiled by Tony Willing.

Gallery

Cassette Directory

Source Code

    1 REM ***********************           Cassette Directory            1986 Michael E. Carver          ***********************
   10 ON ERR GO TO 100: CLS : GO SUB 500: LET z$=CHR$ 19+CHR$ 1+CHR$ 19+CHR$ 0: CLS : IF print THEN PRINT #3;"Directory of ";b$( TO k)''
   15 CLS : ON ERR GO TO 100: PRINT AT 2,11;"BREAK/CAPS will return to MENU";#1;"Start tape, then press any key.": GO SUB 400: CLS 
   20 RANDOMIZE USR 65451: LET ix=65475: LET t=PEEK (ix+1): LET a$=z$( TO 2)+("BASIC" AND NOT t)+("Array" AND (t=1 OR t=2))+("Code" AND t=3)+":"+z$(3 TO )+" "
   30 FOR n=ix+2 TO ix+11: LET a$=a$+CHR$ (PEEK n): NEXT n: LET a$=a$+" "+z$( TO 2)+"Bytes:"+z$(3 TO )+" "+STR$ (PEEK (ix+12)+256*PEEK (ix+13))
   40 LET s=(PEEK (ix+14)+256*PEEK (ix+15)): LET a$=a$+CHR$ 13+"     "+(z$( TO 2)+"Loads at"+z$(3 TO )+" "+STR$ s AND t=3)+(z$( TO 2)+("Autostart at"+z$(3 TO )+" "+STR$ s AND (NOT t AND s<=9999)))
   50 IF NOT t AND s>9999 THEN LET a$=a$+z$( TO 2)+"No Autostart"+z$(3 TO )
   60 IF (t=1 OR t=2) THEN LET a$=a$+z$( TO 2)+"Variable"+z$(3 TO )+" "+CHR$ (PEEK (ix+15)-(32 AND t=1)-(96 AND t=2))+("$" AND t=2)+"()"
   70 POKE 23692,0: PRINT a$'': LET b$=b$+a$+CHR$ 13+CHR$ 13: IF print THEN PRINT #3;a$''
   80 GO TO 20
  100 CLS : PRINT AT 2,6;"CASSETTE DIRECTORY"
  110 PRINT AT 8,0;"CREATE DIRECTORY...............1"''"PRINTER SWITCH.................2"''"SAVE TO TAPE...................3"''"CONTINUE DIRECTORY.............4"''"LOAD FROM TAPE.................5"''"REVIEW DIRECTORY...............6"
  120 GO SUB 400: ON ERR RESET 
  130 GO TO 120-(110 AND k$="1")+(80 AND k$="2")+(180 AND k$="3")-(105 AND k$="4")+(480 AND k$="5")+(490 AND k$="6")
  200 ON ERR GO TO 100: CLS : PRINT AT 1,8;"PRINTER SWITCH"
  210 PRINT AT 5,10;"PRINTER "; FLASH 1;;("ON " AND print);("OFF " AND NOT print); FLASH 0;AT 20,0;"Press ""P"" to toggle switch";TAB 6;"""M"" for Menu"
  220 GO SUB 400
  230 IF k$="p" OR k$="P" THEN LET print=NOT print: GO TO 210
  240 GO TO 220-(120 AND (k$="m" OR k$="M"))
  300 ON ERR GO TO 100: CLS : PRINT ''"Ready to save Directory: "
  310 PRINT "     ";b$( TO k);'"to tape."
  320 INPUT "Save as? ";n$: IF LEN n$>10 THEN LET n$=n$( TO 10)
  330 DIM c$(LEN b$): LET c$=b$: PRINT ''"Saving """;n$;"""": SAVE n$ DATA c$()
  340 PRINT #1;"Verify (y or n)?": GO SUB 400
  350 IF k$="n" OR k$="N" THEN GO TO 100
  360 INPUT INKEY$: PRINT ''"verifying """;n$;"""";''"Rewind tape";#1;"Start tape, then press any key.": GO SUB 400: INPUT INKEY$: ON ERR GO TO 9990: VERIFY n$ DATA c$(): GO TO 100
  400 IF INKEY$<>"" THEN GO TO 400
  410 IF INKEY$="" THEN GO TO 410
  420 LET k$=INKEY$: RETURN 
  500 INPUT "Tape name? ";k$: LET a$=k$: INPUT "Side? ";k$: LET a$=a$+" Side "+k$: LET b$=a$+CHR$ 255: LET k=LEN b$-1
  510 RETURN 
  600 POKE 23692,23: CLS : ON ERR GO TO 100: INPUT "Load name? ";n$: PRINT ''"Loading """;n$;"""";#1;"Start tape, then press any key.": GO SUB 400: INPUT INKEY$: IF LEN n$>10 THEN LET n$=n$( TO 10)
  605 ON ERR GO TO 9990: LOAD n$ DATA c$(): LET b$=c$
  610 ON ERR GO TO 100: CLS : FOR j=1 TO LEN b$: IF b$(j)=CHR$ 255 THEN GO TO 630
  620 NEXT j
  630 LET k=j-1
  640 IF print THEN PRINT #3;"Directory of ";b$( TO k);'';b$(k+2 TO )
  650 PRINT "Directory of ";b$( TO k);'';b$(k+2 TO )
  660 PRINT #1;"Press ""M"" for MENU"
  670 GO SUB 400
  680 IF k$<>"M" AND k$<>"m" THEN GO TO 670
  690 GO TO 100
 9000 CLEAR 65252: LET a$="F33E01D3F4DBFFCBFFD3FF21E50011E58001C600EDB0AFD3FFD3F4FB21E58011E5FE01C600EDB0C9"
 9010 GO SUB 9100: IF LEN a$<>80 OR check<>4735 THEN PRINT FLASH 1;"Error in a$ Line 9000 -----      Please Correct": STOP 
 9020 LET address=65451: GO SUB 9110: RANDOMIZE USR 65451
 9030 DATA 14,15,7,15,10,47,11,14: RESTORE 9030: LET data=0: FOR x=1 TO 8: READ y: LET data=data+y: NEXT x: IF data<>133 THEN PRINT FLASH 1;"Error in Line 9030 -----         Please Correct": STOP 
 9040 RESTORE 9030: LET address=65286: POKE address,254: FOR x=1 TO 8: READ y: LET address=address+y: POKE address,255: NEXT x
 9050 LET a$="AF3700DD21C3FF11150008CDFFFE2AC3FF7DFE00C8C3ABFF"
 9060 GO SUB 9100: IF LEN a$<>48 OR check<>2887 THEN PRINT FLASH 1;"Error in a$ Line 9040 -----      Please Correct": STOP 
 9070 LET address=65451: GO SUB 9110
 9080 GO TO 9988
 9100 LET check=0: FOR x=1 TO LEN a$: LET check=check+CODE a$(x): NEXT x: RETURN 
 9110 FOR x=1 TO LEN a$-1 STEP 2: POKE address+INT ((x-1)/2),(CODE a$(x)-(48 AND CODE a$(x)<58)-(55 AND CODE a$(x)>64))*16+CODE a$(x+1)-(48 AND CODE a$(x+1)<58)-(55 AND CODE a$(x+1)>64): NEXT x: RETURN 
 9900 CLEAR : DELETE 9000,9988
 9989 GO TO 9999
 9990 ON ERR GO TO 100: CLS : PRINT FLASH 1;AT 5,8;"Tape Loading Error"; FLASH 0;'''TAB 8;"Please Attempt Again";#1;"Press any key for Menu": GO SUB 400: GO TO 100
 9998 CLEAR 65252: LOAD "directory"CODE 65253: LET print=0: GO TO 100
 9999 CLS : PRINT "Saving directory": SAVE "directory" LINE 9998: SAVE "directory"CODE 65253,222: CLS : PRINT "Ready to Verify -- Please Rewind Tape -- Start Tape and Press anyKey.": GO SUB 400: CLEAR : VERIFY "directory": VERIFY "directory"CODE : LET print=0: GO TO 100
Scroll to Top