10 REM > TapeCopy
   20 :
   30 CLEAR 106*256-1:LET mem=106*256:PRINT "Copy tape files to serial server"'
   40 GOSUB 240:GOSUB 340:LET drive=CODE"S"
   50 INPUT "Dest. pathname: ";LINE d$:IF d$<>"" THEN LET f$=d$:GOSUB 410:LET d$=d$+"/"
   60 :
   70 INPUT;:PRINT #0;"Press PLAY";
   80 LET bc=USR 23300
   90 LET type=PEEK buffer
  100 LET size=PEEK (buffer+11)+256*PEEK (buffer+12)
  110 LET load=PEEK (buffer+13)+256*PEEK (buffer+14)
  120 LET exec=PEEK (buffer+15)+256*PEEK (buffer+16)
  130 LET f$="":FOR a=buffer+1 TO buffer+10
  140   IF PEEK a>32 THEN LET f$=f$+CHR$ PEEK a
  150 NEXT a
  170 PRINT f$;TAB11;type;" ";load;"+";size;" ";exec
  180 IF mem+size>65536 THEN PRINT "Too long to copy":GOTO 80
  190 LET bc=USR 23303
  200 INPUT;:PRINT #0;"Pause tape.";
  210 LET f$=d$+f$+" "+STR$type+" "+STR$load+" "+STR$exec
  220 LET start=mem:LET length=size:GOSUB 380:GOTO 70
  230 :
  240 LET buffer=23296+40:LET bc=buffer-256*INT(buffer/256)
  250 FOR a=23296 TO buffer-1:READ b:POKE a,b:NEXT a:RETURN
  260 DATA 0,mem/256,0,0              :REM EQUW mem:EQUB 0
  270 DATA 195,10,91,195,25,91        :REM JP TapeInfo:JP TapeLoad
  280 DATA 221,33,bc,91,17,17,0       :REM LD IX,buffer:LD DE,17
  290 DATA 175,55,205,86,5            :REM XOR:SCF:CALL &0556
  300 DATA 48,242,201                 :REM JR NC,TapeInfo:RET
  310 DATA 221,42,0,91,237,91,bc+11,91:REM LD IX,(23296):LD DE,(buffer+11)
  320 DATA 62,255,55,195,86,5,0       :REM LD A,255:SCF:JP &0556:NOP
  330 :
  340 LET drive=CODE"0"+PEEK 23766:LET int1=0:CLOSE#0:IF PEEK 23734<>244 THEN LET int1=1
  350 IF drive<CODE"1" OR drive>CODE"8" OR int1=0 THEN LET drive=CODE"T"
  360 IF int1 THEN CLEAR#:OPEN#9,"b"
  370 RETURN
  380 IF f$(2)<>":" THEN LET f$=CHR$drive+":"+f$
  390 INPUT#9;"S";(f$(3 TO))'a$;#2;(a$(2 TO))':IFa$<>""THEN RETURN
  400 SAVE*"b"CODE start,length:RETURN
  410 IF f$(2)<>":" THEN LET f$=CHR$drive+":"+f$
  420 INPUT#9;"M";(f$(3 TO))'a$;#2;(a$(2 TO))':RETURN