10
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