10 REM > TreeCopy 1.63a 20-Oct-2018
  250 MODE&87:HIMEM=FNF:VDU23;2,53;0;0;0:A$=FNC+" ":PRINTSPC13"TreeCopy 1.63a"'SPC13STRING$(14,"="):*FX1
  270 DIMp%31,F%127:X%=p%:Y%=X%DIV256:ONERRORREPORT:PRINT:Q$=CHR$13:HIMEM=FNB:END
  290 Q$="":S$="":D$="":i%=1:n%=1:o%=1:k%=1:l%=1:Q%=1:g%=1:m%=FALSE:y%=FALSE:q%=FALSE:v%=FALSE:IFLENA$>1:i%=FALSE:n%=FALSE:o%=TRUE:l%=FALSE:k%=FALSE:Q%=FALSE:g%=TRUE:m%=FALSE
  320 REPEATI%=0:IFLEFT$(A$,6)="-quit ":Q$=MID$(A$,7,LENA$-7):A$=""
  330   IFLEFT$(A$,4)="-deb":v%=TRUE:A$=MID$(A$,INSTR(A$," ")+1)
  340   IFLEFT$(A$,2)="-d":q%=TRUE:A$=MID$(A$,INSTR(A$," ")+1)
  350   IFLENA$:IFS$=""ANDLEFT$(A$,1)<>"-":I%=INSTR(A$+" "," "):S$=LEFT$(A$,I%-1):A$=MID$(A$,I%)
  360   IFLENA$:IFD$=""ANDLEFT$(A$,1)<>"-":I%=INSTR(A$+" "," "):D$=LEFT$(A$,I%-1):A$=MID$(A$,I%)
  370   IFLENS$:IFLEND$:I%=LEFT$(A$,1)="~":IFI%:A$=MID$(A$,2)
  380   IFLENS$:IFLEND$:IFLEFT$(A$,1)="A":Q%=NOTI%
  390   IFLENS$:IFLEND$:IFLEFT$(A$,1)="C":n%=NOTI%
  400   IFLENS$:IFLEND$:IFLEFT$(A$,1)="E":k%=NOTI%
  410   IFLENS$:IFLEND$:IFLEFT$(A$,1)="F":l%=NOTI%
  420   IFLENS$:IFLEND$:IFLEFT$(A$,1)="P":i%=NOTI%
  430   IFLENS$:IFLEND$:IFLEFT$(A$,1)="R":o%=NOTI%
  440   IFLENS$:IFLEND$:IFLEFT$(A$,1)="S":g%=NOTI%
  450   IFLENS$:IFLEND$:IFLEFT$(A$,1)="U":m%=NOTI%
  460   IFLENS$:IFLEND$:IFLEFT$(A$,1)="V":y%=NOTI%
  470 IFA$="-? ":UNTILTRUE:PRINT"Syntax: TreeCopy (fs:)src (fs:)dest"'" ACEFPRSUV (-dest) (-quit (*)name)":PROCq
  480 A$=MID$(A$,2):UNTILA$="":N%=((HIMEM-LOMEM-2200)AND-256)+2560*(v%ORHIMEM>&FFFF):DIMK%N%:S%=K%+N%:PRINTSPC10"Buffer length: &";~N%
  520 IFLENS$=0:PRINT'"Caution - This program does not check"'"for circular pathnames - Eg Copying"'"$.FRED into $.FRED.JIM will repeatedly"'"create $.FRED.JIM.JIM...etc."
  530 IFLENS$:I%=INSTR(S$,":"):IFI%>1:I$=LEFT$(S$,I%-1):G$=MID$(S$,I%+1)
  540 ONERRORREPORT:PRINT:IFINKEY-1:Q$=CHR$13:HIMEM=FNB:ENDELSEOSCLI"FX1,"+STR$ERR:PROCq
  550 IFLENS$:IFI%<2:I$="":G$=S$
  560 IFS$="":PRINT:I$=FNE("Source filing system: "):OSCLII$:G$=FNE("Source dir: ")ELSEOSCLII$
  570 L%=FNI:M$=LEFT$("@.",FNA("@")=2):x%=FNA("^")=2:IFFNA("$")<>2:L%=4
  590 IFL%=4:IFASCG$=58:IFLENG$=2:J%=(FNA(G$+".$"))ELSEJ%=FNA(G$)
  600 e%=J%=1:IFJ%=0:IFL%>4:PRINTG$" does not exist.":PROCq
  630 IFi%>0:PRINT'"Pause to change disks";:i%=FND
  640 IFLEND$:I%=INSTR(D$,":"):IFI%>1:K$=LEFT$(D$,I%-1):d$=MID$(D$,I%+1)
  650 IFLEND$:IFI%<2:K$="":d$=D$
  660 IFD$="":PRINT':K$=FNE("Dest. filing system: "):d$=FNE("Dest. dir: ")
  670 IFK$="":K$=I$
  680 L$="":J$="":E$="":PROCE:M%=FNI:E$=d$:IFM%>4ANDINSTR(E$,"$")+INSTR(E$,"%")+INSTR(E$,"&")+INSTR(E$,":")+INSTR(E$,"@")=0:PRINT"Dest. dir must be an absolute pathname, must contain one of $,%,&,@ or :":PROCq
  700 IFL%<>M%:IFASCG$=58:IFASCMID$(G$,3)=46:IFLEFT$(G$,3)=LEFT$(E$,3):i%=TRUE
  710 IFL%=M%:I$="":K$=""
  720 IFL%<>M%ANDL%=8:L$="Mount"
  730 IFL%<>M%ANDM%=8:J$="Mount"
  740 IFL%=M%ANDi%AND(L%=8ORL%=16):L$="Mount "+FNJ:J$=L$:OSCLIJ$:IFLEFT$(G$,1)<>"$"ANDLEFT$(G$,1)<>":":G$="$."+G$
  750 IFM%>4:IFNOTe%:PROCM(E$)ELSEIFM%=4:*DIR$
  760 IFn%>0:PROCG:PRINT"Confirm";:n%=FND:PRINT
  770 IFo%>0:o%=FALSE:IFL%>4PRINT"Recurse";:o%=FND:PRINT
  780 IFl%>0:PRINT"Force overwriting";:l%=FND:PRINT
  790 IFL%=5:r%=&FFFFFF3BELSEr%=TRUE
  800 IFk%>0:k%=FALSE:IFM%=4PRINT"Expand into DFS dirs";:k%=FND:PRINT
  810 IFk%ANDRIGHT$(E$,2)=".$":E$=LEFT$(E$,LENE$-2)
  820 w%=FALSE:U$=E$+".":V$="":H$="":PROCD:T$="":IFQ%>0:Q%=FALSE:IFFNI=4:PRINT"Do all DFS dirs";:Q%=FND:PRINT:IFQ%:IFg%>1:PRINT"Put in subdirs";:g%=FND:PRINT
  890 IFg%:P$="."ELSEP$="/"
  900 IFNOTe%:PRINT'"Dir. ";G$:OSCLI"DIR "+G$:E$=E$+"."
  920 N$="":Z%=0:H%=K%:s%=FALSE:?H%=0:F$="":R%=0:_%=0:O%=33:IFQ%:*DIR !
  930 ONERRORIFFNK:OSCLI"FX1,"+STR$ERR:PROCq
  940 X%=p%:Y%=X%DIV256:IFe%:PROCN:F$=G$:N$=E$:PROCL:PROCq
  960 REPEATPROCU:UNTILs%ANDZ%=0:PRINT:PROCq
  980 DEFPROCq:IFq%:PROCE
  990 HIMEM=FNB:IFQ$="":Q$=CHR$13:END
 1000 IFLEFT$(Q$,1)="*":OSCLIQ$:Q$=CHR$13:END
 1010 CHAINQ$
 1090 DEFFNE(A$):REPEATPRINTA$;:INPUTLINE""B$:IFLEFT$(B$,1)="*":OSCLIB$
 1100 UNTILLEFT$(B$,1)<>"*":=B$
 1120 DEFFNK:IFERR=195:IF(Z%AND&C)=4:IFl%:OSCLI"ACCESS "+d$:=FALSE
 1140 PROCG:VDU11:REPORT:IFERR<128:PRINT:=TRUE
 1150 IFERR=198:IF(Z%AND12)=12:CLOSE#W%
 1160 IFERR=198:IFNOTq%:PROCD
 1170 IFERR=198:PRINT:=TRUE
 1180 IFERR=195AND(Z%AND&C)=4:PRINT". Overwrite";:IFNOTFNG(1):H%=P%+C%:=FALSEELSEIFERR=195AND(Z%AND&C)=4:OSCLI"ACCESS "+d$:PRINT:=FALSE
 1190 IFERR<128:IFERR<>17:PRINT" at line ";ERL;
 1200 PRINT". Skip";:t%=FND:IFt%ANDZ%=0:PRINT
 1210 IFZ%=0ANDNOTt%:F$=C$:T%=A%:=FALSE
 1220 IF(Z%AND&C)=4:PRINT:IFt%:H%=P%+C%:=FALSE
 1230 IF(Z%AND&C)=12ANDt%:PRINT:H%=K%:?H%=0:F$="":PROCJ
 1260 F$="":=ERR<128ORINKEY-1
 1300 DEFPROCJ:IF(Z%AND&100):CLOSE#W%:PROCDELSECLOSE#j%
 1320 Z%=0:ENDPROC
 1450 DEFPROCU:IFZ%=0:PROCQ:ENDPROC
 1460 IF(Z%AND&C)=0AND?K%=0:Z%=Z%+12
 1470 IF(Z%AND&C)=0:PROCR:Z%=Z%+4:H%=K%:PRINT
 1480 IF(Z%AND&C)=4:PROCO:IFZ%<8:ENDPROC
 1490 IF(Z%AND&C)=8:PROCN:Z%=Z%+4:H%=K%:IFNOTi%:PRINT
 1500 IF(Z%AND3)<>1:Z%=0:?H%=0:ENDPROC
 1510 IF(Z%AND&C)=12:PROCL:Z%=0:F$="":H%=K%:?H%=0
 1520 ENDPROC
 1540 DEFPROCQ:IFLENF$:C$=F$:A%=FNA(M$+C$):F$="":PROCA:ENDPROC
 1550 REPEATX%!1=F%:X%!5=1:X%!9=R%:A%=8:CALL&FFD1:u%=X%!5:R%=X%!9:IFu%=0:PROCK
 1570 UNTILu%<>0ORZ%<>0:IFu%=0:ENDPROC
 1580 IFNOTQ%:A%=3:C$="":X%!10=0:PROCA:ENDPROC
 1590 R%=0:O%=O%+1:IFO%=34ORO%=ASC":"ORO%=ASC"*"ORO%=ASC"|":O%=O%+1
 1600 IFO%=ASC"a":O%=ASC"{"
 1610 IFO%<127:OSCLI"DIR "+CHR$O%ELSEA%=3:C$="":X%!10=0:PROCA:*DIR $
 1620 ENDPROC
 1640 DEFPROCK:?(F%+?F%+1)=13:C$=$(F%+1)+" ":C$=LEFT$(C$,INSTR(C$," ")-1):IFASCC$=46:ENDPROC
 1660 A%=FNA(M$+C$):IFA%=2ANDNOTo%:ENDPROC
 1670 PROCG:IFA%=2:PRINT"Dir. ";ELSEPRINT"File ";
 1680 PRINTG$;:IFLENG$:VDU46
 1690 IFQ%ANDO%<>ASC"$":VDUO%,46
 1700 PRINTC$;:IFn%:IFNOTFNG(0):PRINT:ENDPROC
 1720 A%=((A%-1)AND1)+1:PROCA:ENDPROC
 1740 DEFPROCA:J%=A%:IFJ%<>3:PROCCELSEIFLENM$:A%=FNA("@"):PROCC:C%=0ELSEC%=0
 1770 IFFNH:ENDPROC
 1780 IFC%+2+LENC$>N%-48:F$=C$:T%=J%:Z%=1:ENDPROC
 1810 $(H%+1)=FNL(C$):P%=H%+2+LEN$(H%+1):IFP%+C%+48>S%:F$=C$:T%=J%:Z%=2:ENDPROC
 1820 IFJ%=3ANDS%=K%+N%:s%=TRUE:Z%=2:VDU11:ENDPROC
 1830 IFJ%=3:PROCP:R%=!S%:S%=S%+4:_%=_%-1
 1850 !P%=U%:P%!4=V%:P%!8=C%:P%!12=G%:P%!15=`%:P%!18=a%:P%!20=d%:P%=P%+24:IFJ%<>3:PROCGELSEC%=0
 1870 IFJ%=1:OSCLI"LOAD "+M$+C$+" "+STR$~P%ELSEIFJ%=2:OSCLI"DIR "+C$:S%=S%-4:!S%=R%:R%=0:G$=G$+"."+C$:_%=_%+1
 1890 ?H%=J%:H%=P%+C%:?H%=0:IFm%:Z%=3
 1900 ENDPROC
 1920 DEFFNL(F$):IFL%>4:=F$
 1930 IFQ%ANDO%<>ASC"$":=CHR$O%+P$+F$ELSE=F$
 1950 DEFPROCP:REPEATG$=LEFT$(G$,LENG$-1):UNTILRIGHT$(G$,1)=".":G$=LEFT$(G$,LENG$-1):IFx%:OSCLI"DIR ^"ELSEOSCLI"DIR "+G$
 1970 ENDPROC
 1990 DEFPROCE:IFi%PROCG:PRINT"Insert dest. and press SPACE";:REPEATUNTILGET<65:PRINT
 2000 IFLENK$:OSCLIK$
 2010 IFLENJ$:OSCLIJ$:IFLENE$:IFNOTe%:OSCLI"DIR "+LEFT$(E$,LENE$-1)
 2020 IF(J$<>""ANDE$<>"")OR(I$+K$=""ANDNOTx%):IFNOTe%:OSCLI"DIR "+LEFT$(E$,LENE$-1)
 2030 ENDPROC
 2050 DEFPROCD:IFi%:PROCG:PRINT"Insert source and press SPACE";:REPEATUNTILGET<65:PRINT
 2060 IFLENI$:OSCLII$
 2070 IFLENL$:OSCLIL$:IFNOTe%:OSCLI"DIR "+G$
 2080 IFL$<>""OR(I$+K$=""ANDNOTx%):IFNOTe%:OSCLI"DIR "+G$
 2090 ENDPROC
 2110 DEFPROCO:IF?H%=0:Z%=Z%+4:ENDPROC
 2130 A%=?H%:C$=$(H%+1):P%=H%+2+LENC$:U%=!P%:V%=P%!4:C%=P%!8:G%=P%!12:`%=P%!15:a%=P%!18:d%=P%!20:P%=P%+24:IFA%=3:C$="@":PROCB:PROCT:H%=P%:ENDPROC
 2170 IFA%=2:PROCS:H%=P%:ENDPROC
 2180 PROCI:PRINT"Save ";E$;C$;:IFH$="":d$=E$+C$ELSEd$=H$+C$
 2190 OSCLI"SAVE "+d$+" "+STR$~P%+"+"+STR$~C%+" "+STR$~V%+" "+STR$~U%:A%=1:PROCB:H%=P%+C%:PRINT:ENDPROC
 2210 DEFPROCC:U%=X%!2:V%=X%!6:C%=X%!10AND(A%=1):X%!17=0:X%!20=X%!15:IFL%=5:$(F%+8)=C$:PROCH(&14,&12000A00+256*LENC$,&40000000):IFF%?3=0:X%!15=F%!10:X%!17=F%!12:X%!20=F%!5:X%!22=F%!7
 2250 G%=X%!14:IFL%=16:!X%=F%:$F%=LEFT$(M$,2+(C$=""))+C$:A%=&FD:CALL&FFDD:X%!17=X%!6:X%!21=X%!10
 2260 `%=X%!17:a%=X%!20:d%=X%!22:ENDPROC
 2280 DEFPROCB:IFM%<4:ENDPROC
 2290 IFM%=8:OSCLIJ$
 2310 A$=E$+C$:IFC$="@":A$=LEFT$(A$,LENA$-2)
 2320 $F%=A$:!X%=F%:X%!2=U%:X%!6=V%:X%!14=G%ANDr%:A%=1+3*(A%<>1)*(M%=5):CALL&FFDD:IFM%=16:A%=&FD:CALL&FFDD:X%!6=`%:X%!9=a%:X%!11=d%:A%=&FC:CALL&FFDD:ENDPROC
 2340 IFM%<>5:ENDPROC
 2350 IFL%<>16ANDL%<>5:ENDPROC
 2360 F%!7=G%:$(F%+10)=A$:PROCH(&14,&13000C00+256*LENA$,&05000000):G%=(G%AND&FFFF00)DIV256:F%!8=a%:F%!10=d%:F%!13=G%:F%!15=`%:$(F%+18)=A$:PROCH(&14,&13001400+256*LENA$,&40000000):ENDPROC
 2480 DEFFNH:IFm%=0ORJ%=2ORC$="":=FALSE
 2490 PROCE:A%=FNA(E$+C$):PROCD:IFA%=J%:IFX%!2=U%:IFX%!6=V%:IFX%!10=C%:=TRUE
 2510 =FALSE
 2580 DEFPROCI:IFk%ANDMID$(C$,2,1)="/":C$=LEFT$(C$,1)+"."+MID$(C$,3)
 2600 IFL%=4:G%=(G%OR3)EOR(G%DIV4)AND15:G%=G%OR((G%AND7)*16)
 2610 IFM%=4:C$=LEFT$(C$,7-2*(MID$(C$,2,1)=".")):G%=G%AND8
 2620 IFM%<>16:IF(G%AND5)=5:G%=G%AND-5
 2630 IFQ%ANDg%ANDw%<>ASCC$ANDMID$(C$,2,1)=".":PROCM(E$+LEFT$(C$,1)):w%=ASCC$
 2640 ENDPROC
 2660 DEFPROCT:REPEATE$=LEFT$(E$,LENE$-1):UNTILRIGHT$(E$,1)=".":ENDPROC
 2700 DEFPROCS:PRINT"CDir ";:IFH$="":PRINTE$;C$;:PROCM(E$+C$)ELSEPRINTH$;C$;:PROCM(H$+C$)
 2710 A%=2:PROCB:E$=E$+C$:E$=E$+".":PRINT:ENDPROC
 2740 DEFPROCL:C$=FNL(F$):R$=F$:A%=FNA(M$+R$):f%=(S%-K%-48)AND&FFFF00:IFf%>X%!10:f%=X%!10DIV2
 2760 PROCC:IFLENN$:E$=N$:C$="":H$=""
 2770 IFFNH:ENDPROC
 2780 W%=0:j%=OPENIN(M$+R$):IFj%=0:PRINT"No input available.":ENDPROC
 2790 PROCF(4,j%,f%):CLOSE#j%:PROCR:Z%=Z%OR&100:PROCI:IFH$="":d$=E$ELSEd$=H$
 2800 PRINT'"Copy ";E$;C$;:d$=d$+C$:$F%=d$:!X%=F%:A%=5:A%=(USR&FFDD)AND&FF:IFl%=0:IFA%:IFX%?14AND8:PRINT'"Entry locked. Overwrite";:IFNOTFNG(1):ENDPROC
 2820 IFA%:X%!14=(M%>4)AND&33:A%=4:CALL&FFDD
 2830 X%!2=U%:X%!6=V%:X%!10=0:X%!14=C%:IFX%?17:X%!14=&400000
 2840 A%=7:CALL&FFDD:X%?14=(M%>4)AND&33:A%=4:CALL&FFDD:IF(X%!10>C%)ORX%!10=0:W%=OPENOUTd$ELSEW%=OPENUPd$
 2870 IFW%=0:PRINT'"No output available.":PROCD:ENDPROC
 2880 PROCF(2,W%,f%):h%=f%:b%=f%:PRINT:CLOSE#W%:REPEATPROCN:Z%=Z%AND&FF:j%=OPENINR$:PTR#j%=h%:IFh%+f%>C%:b%=C%-h%
 2910 PROCF(4,j%,b%):CLOSE#j%:PROCR:Z%=Z%OR&100:W%=OPENUPd$:PTR#W%=h%:PROCF(2,W%,b%):PRINT:h%=PTR#W%:CLOSE#W%:UNTILh%>=C%:A%=1:PROCB:PROCN:Z%=Z%AND&FF:PRINT:ENDPROC
 2960 DEFPROCF(A%,c%,b%):?X%=c%:X%!1=K%:X%!5=b%:CALL&FFD1:ENDPROC
 2980 DEFPROCM(F$):IFFNI>4:IFFNA("$")=2:IFFNA(F$)<>2:OSCLI"CDIR "+F$
 2990 ENDPROC
 3010 DEFFNA(F$):?X%=F%:X%?1=F%DIV256:$F%=F$:A%=5:=(USR&FFDD)AND&FF
 3030 DEFPROCN:PROCD:PROCG:PRINT"Reading...";:ENDPROC
 3040 DEFPROCR:PROCE:PROCG:PRINT"Writing...";:ENDPROC
 3050 DEFPROCG:IFPOS:PRINT
 3060 ENDPROC
 3080 DEFFND:LOCALA%:PRINT"? (Y/N)";:REPEATA%=GETAND&DF:UNTILA%=89ORA%=78:PRINTSTRING$(5,CHR$8);:IFA%=89:PRINT"Yes  ";:=TRUEELSEPRINT"No   ";:=FALSE
 3120 DEFFNG(B%):LOCALA%:PRINT"? (Y/N/A)";:REPEATA%=GETAND&DF:UNTILA%=89ORA%=78ORA%=65:PRINTSTRING$(7,CHR$127);:IFA%=89:PRINT"Yes  ";:=TRUEELSEIFA%=78:PRINT"No   ";:=FALSE
 3160 PRINT"All  ";:IFB%=0:n%=FALSEELSEIFB%=1:l%=TRUEELSEIFB%=3:t%=TRUE
 3170 =TRUE
 3190 DEFFNI:LOCALA%,E%,Y%:=(USR&FFDA)AND&FF
 3370 DEFFNJ:A%=6:X%!1=K%:CALL&FFD1:?(K%+1+?K%)=13:=$(K%+1)
 3400 DEFPROCH(A%,D%,E%):LOCALX%,Y%:X%=F%:Y%=X%DIV256:!X%=D%:X%!4=E%:CALL&FFF1:ENDPROC
 3420 DEFFNC:A%=(HIMEM>&FFFF)AND&900:A%=((PAGE>&9FFF)ANDA%)OR((&1400-PAGE)AND(A%=0)):IF?(TOP-3)ELSEA%=&B00
 3440 A$=$(PAGE-&E00+A%):IFA%=0:O$=A$:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=O$
 3450 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32:IFY%:IFASCA$=34:A%=INSTR(A$,"""",2)+1ELSEIFY%:A%=INSTR(A$+" "," ")
 3470 IFY%:O$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):IFO$<>"":A$=MID$(A$,A%+1)
 3480 NEXT:=A$
 3550 DEFFNF:IFHIMEM=&B800ORHIMEM>&FFFF:=HIMEM
 3560 A%=130:IF((USR&FFF4)AND&FFFF00)=&FFFF00OR?&FFF7<>&6C:=HIMEM
 3570 IFPAGE=&C000:LOMEM=&800:=&8000
 3580 FORA%=0TOTOP-PAGE+3STEP4:A%!&C000=A%!PAGE:NEXT:PAGE=&C000:HIMEM=&F800:RUN
 3600 DEFFNB:IFHIMEM<PAGE:PAGE=&800:?&801=-1:=HIMEMELSE=HIMEM
65453 OSCLIEPAGEWHENPLOTPAGEELLIPSELENRECTANGLEERRORLEN41147ORINTPOSPROCATNCIRCLELOADWHEN PAGEREPORTEVALTRUEO{TIMEINTLOADWHEN*PAGEREPORTEXTCHR$CIRCLETIMEINTWHEN"ȑ "TIMEINT g{EXT[EVAL{LRESTOREOSCLIQ%=PA.:CH."*BASIC {{{{a{a{`|{`` g{,z0ȱZ{02 ee  { {Z
31696 ONHIMEM{EXITLOCALLENPTR QUITMOUSELENCIRCLE`