Multi Tape

Date: 1986
Type: Program
Platform(s): TS 2068

A utility for making catalogues of the programs cassette tapes. Will read both 2068 and Spectrum headers but will only run on a 2068.

Uses the header reader from SYNTAX and saves the data in arrays c, n$, t$.

The first time use option 5 from menu. Thereafter use option 4 BUT you must clear 63999 before loading the tape to use option 4.

You can stop reading headers anytime by pressing BREAK.

Appears on

Capital Area Timex Sinclair User Groupโ€™s Library Tape.
Library tape of the Indiana Sinclair Timex User’s Group.
One of a series of library tapes. Programs on these tapes were renamed to a number series. This tape contained programs 20083 to 20120. These tapes were compiled by Tony Willing.

Gallery

Multi Tape

Source Code

    1 PRINT "If you have numerous programs on a tape,e.g.LIST library tapes, this progam may help. It uses   the header reader from SYNTAX   and saves the data in arrays c, n$, t$" 
    2 PRINT '"The first time use option 5 from menu. Thereafter use option 4  BUT you must clear 63999 before loading the tape to use option 4! You can stop reading headers  anytime by pressing BREAK." 
    3 PRINT '"Program will read both 2068 and Spectrum headers but will only  run on a 2068"
    4 PRINT '"If program stops with an error  enter GOTO 55 (Do not use RUN)  DELETE lines 1 to 4 when you arefamiliar with these instructions"
    5 ON ERR RESET 
    6 PRINT ''''''"multi tape by RWM": PRINT '''"Press any key for menu": PAUSE 0
    9 GO TO 55
   10 CLS : FOR l=1 TO n
   20 PRINT l;TAB 3;t$(l,16 TO 27),n$(l)
   21 LPRINT l;TAB 3;t$(l,16 TO 27),n$(l)
   30 NEXT l
   40 STOP 
   50 SAVE "multi tape" LINE 55
   55 ON ERR GO TO 5
   56 LET dir=0
   60 CLS : PRINT '"Choose your option by number"
   65 PRINT '"1. List all programs "
   68 PRINT '"2. Find a specific program"
   72 PRINT '"3. List all programs on a          specific tape"
   75 PRINT '"4. Continue cataloging tapes"
   78 PRINT '"5. Start cataloging tapes" 
   80 PRINT '"6. SAVE"
   81 PRINT '"7. See header readings"
   82 PRINT '"8. Show names of tapes"
   83 PRINT '"0. STOP"
   85 IF INKEY$="1" THEN GO TO 10
   88 IF INKEY$="2" THEN GO TO 100
   90 IF INKEY$="3" THEN GO TO 200
   92 IF INKEY$="4" THEN GO TO 9850
   93 IF INKEY$="5" THEN GO TO 9970
   94 IF INKEY$="6" THEN SAVE "multi tape" LINE 1
   95 IF INKEY$="7" THEN GO TO 400
   96 IF INKEY$="8" THEN GO TO 500
   97 IF INKEY$="0" THEN PRINT "  Enter  GOTO 55   to Restart": ON ERR RESET : STOP 
   98 GO TO 85
  100 CLS : INPUT "Name of program? ";s$
  110 FOR q=1 TO n
  120 IF t$(q,18 TO (LEN s$+17))=s$ THEN PRINT q;TAB 5;t$(q,18 TO );n$(q): PRINT 
  121 IF t$(q,18 TO (LEN s$+17))=s$ THEN LPRINT q;TAB 5;t$(q,18 TO );n$(q)
  130 NEXT q
  140 STOP 
  200 CLS : LET dir=1: GO SUB 500: INPUT "Name/side of tape? ";s$ 
  210 FOR q=1 TO n
  220 IF n$(q, TO LEN s$)=s$ THEN PRINT q;TAB 4;t$(q,18 TO );n$(q);t$(q, TO 3)
  221 IF n$(q, TO LEN s$)=s$ THEN LPRINT q;TAB 4;t$(q,18 TO );n$(q)
  230 NEXT q
  240 STOP 
  300 CLS : FOR l=1 TO n
  310 PRINT l;TAB 3;t$(l)
  311 LPRINT l;TAB 3;t$(l)
  320 NEXT l
  330 STOP 
  340 STOP 
  400 INPUT "Number Please? ";b
  410 CLS : FOR l=1 TO n
  420 IF l=b THEN PRINT 'l;TAB 4;t$(l): PRINT '"Data Length ";c(l,1): PRINT '"Start Address ";c(l,2): PRINT '"Auto Start at ";c(l,3): PRINT '"Prog/Vars Length ";c(l,4)
  421 IF l=b THEN LPRINT 'l;TAB 4;t$(l): LPRINT '"Data Length ";c(l,1): LPRINT '"Start Address ";c(l,2): LPRINT '"Auto Start at ";c(l,3): LPRINT '"Prog/Vars Length ";c(l,4)
  430 NEXT l
  440 STOP 
  500 CLS : PRINT n$(1)
  501 LPRINT n$(1)
  510 FOR l=2 TO n
  520 IF n$(l)<>n$(l-1) THEN PRINT n$(l)
  521 IF n$(l)<>n$(l-1) THEN LPRINT n$(l)
  530 NEXT l
  535 IF dir=1 THEN LET dir=0: RETURN 
  540 STOP 
 9850 CLS : INPUT "Did you remember to CLEAR 63999 before loading this tape? Y/N ";c$
 9855 IF c$="Y" OR c$="y" THEN GO TO 9870
 9860 IF c$="N" OR c$="n" THEN PRINT AT 10,1;"Please CLEAR 63999 and reload this tape": ON ERR RESET : STOP 
 9865 GO TO 9850
 9870 RESTORE : FOR a=64000 TO 64052: READ b: POKE a,b: NEXT a
 9873 INPUT "Name/Side of tape ";p$: GO TO 9975
 9970 CLS : CLEAR 63999: FOR a=64000 TO 64052: READ b: POKE a,b: NEXT a
 9971 REM c(n,1)=DataLength, c(n,2)=Start Address, c(n,3)=Auto Start, c(n,4)=Prog/vars length
 9972 DIM c(400,4): DIM n$(400,13): DIM t$(400,28)
 9973 INPUT "Name/Side of tape ";p$
 9974 FOR N=1 TO 400
 9975 CLS : PRINT ''''"LOAD A TAPE AND PRESS""PLAY"""''''
 9977 LET n$(n)=p$
 9980 DATA 55,62,0,221,33,60,250,17,17,0,205,14,250,201,33,252,0,205,34,250,58,33,250,211,244,219,255
 9981 DATA 203,191,211,255,251,201,0,243,245,219,255,203,255,211,255,219,244,50,33,250,62,1,211,244,241,233
 9982 RANDOMIZE USR 64000
 9983 LET a=64060: LET b=PEEK a: LET s=b
 9984 IF b=0 THEN PRINT "PROGRAM: ";: LET t$(n, TO 17)="PROGRAM"
 9985 IF b=1 THEN PRINT "NUMERIC ARRAY: ";: LET t$(n, TO 17)="NUMERIC ARRAY"
 9986 IF b=2 THEN PRINT "CHARACTER ARRAY: ";: LET t$(n, TO 17)="CHARACTER ARRAY"
 9987 IF b=3 THEN PRINT "BYTES: ";: LET t$(n, TO 17)="BYTES"
 9988 FOR a=64061 TO 64070: LET b=PEEK a: PRINT CHR$ b;: LET t$(n,a-64043)=CHR$ b: NEXT a: PRINT 
 9989 LET b=PEEK a+256*PEEK (a+1): PRINT "DATA LENGTH: ";b: LET c(N,1)=b
 9990 LET a=a+2: LET b=PEEK a+256*PEEK (a+1): IF s=3 THEN PRINT "START ADDRESS: ";b: LET c(n,2)=b
 9991 IF s<>0 THEN GO TO 9995
 9992 IF b<1 OR b>9999 THEN GO TO 9994
 9993 PRINT "AUTO START AT: ";b: LET c(n,3)=b
 9994 LET a=a+2: LET b=PEEK a+256*PEEK (a+1): PRINT "PROG/VARS LENGTH: ";b: LET c(n,4)=b
 9995 PAUSE 200: NEXT n: GO TO 9975

People

No people associated with this content.

Scroll to Top