10
20
30 :
40 usr0%=0:ON ERROR PROCpr:REPORT:PROCClose_All:PROCusr(usr0%):*BYE
50 max%=(HIMEM-LOMEM-2048)AND-512:DIM mem% max%:*FX229
60 IF?5=&C3:P%=mem%:[OPT 0:CALL5:LD L,A:EXX:RET:]:C%=32:E%=255:usr0%=(USRmem%)AND&FF
70 ?(&81+?&80)=13:?&80=0:cmd$=FNs($&81)
80 A%=INSTR(cmd$+" "," "):in$=LEFT$(cmd$,A%-1):out$=FNs(MID$(cmd$,A%+1))
90 IFcmd$="":INPUTLINE"Source file: "in$:INPUTLINE"Dest. file: "out$
100 IFcmd$="-?"ORin$=""ORout$="":PRINT"COPY (DU:)infile (DU:)outfile";:PROCusr(usr0%):*BYE
110 PROCcopy:PROCusr(usr0%):*BYE
120 :
130 DEFPROCcopy
140 iusr%=-1:ousr%=-1
150 A%=INSTR(in$, ":"):IFA%>2:iusr%=VALMID$(in$, 2,A%-2):in$ =LEFT$(in$, 1)+MID$(in$, A%):ousr%=usr0%
160 A%=INSTR(out$,":"):IFA%>2:ousr%=VALMID$(out$,2,A%-2):out$=LEFT$(out$,1)+MID$(out$,A%):IFiusr%=-1:iusr%=usr0%
170 :
180 PROCusr(iusr%):in%=OPENIN(in$):IF in%=0:PRINT"File '"in$;"' not found";:ENDPROC
190 ext%=EXT#in%:ptr%=0
200 PROCusr(ousr%):out%=OPENOUT(out$):IF out%=0:PRINT"Can't open '"out$"'";:PROCusr(iusr%):CLOSE#in%:in%=0:ENDPROC
210 :
220 REPEAT
230 num%=ext%-ptr%:IF num%>max%:num%=max%
240 PROCusr(iusr%):FOR A%=0 TO num%-1
250 IF (A%AND&FF)=0:PRINTCHR$13;"Reading ";~ptr%+A%;"+";~num%-A%;", ";ext%-ptr%-A%;" bytes to go ";CHR$8;
260 IF num%:mem%?A%=BGET#in%
270 NEXT A%
280 PROCusr(ousr%):FOR A%=0 TO num%-1
290 IF (A%AND&FF)=0:PRINTCHR$13;"Writing ";~ptr%+A%;"+";~num%-A%;", ";ptr%+A%;" bytes so far ";CHR$8;
300 IF num%:BPUT#out%,mem%?A%
310 NEXT A%
320 ptr%=ptr%+num%
330 PRINTCHR$13;"Writing ";~ptr%;"+0, ";ptr%;" bytes done";SPC5;STRING$(5,CHR$8);
340 UNTIL ptr%>=ext%
350 CLOSE#out%:out%=0
360 PROCusr(iusr%):CLOSE#in%:in%=0
370 ENDPROC
380 :
390 DEFPROCusr(A%)
400 IFA%>-1:IF?5=&C3:C%=32:E%=A%:CALL 5
410 ENDPROC
420 :
430 DEFPROCpr:IFPOS:PRINT
440 ENDPROC
450 :
460 DEFPROCClose_All
470 in%=in%:IFin%:A%=in%:in%=0:PROCusr(iusr%):CLOSE#A%
480 out%=out%:IFout%:A%=out%:out%=0:PROCusr(ousr%):CLOSE#A%
490 ENDPROC
500 :
510 DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
520 IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
530 =A$