10
20
30
40
50
60
70
80
90
100
110
120 :
130 MODE7:VDU28,0,24,39,0:PRINT"Quick DOS Copier"
140 IFHIMEM<>&7C00:PRINT"Screen not in language memory -"'"Can't proceed.":END
150 Char0$="#`_#":Char1$="&++%pp~--$dd"
160 INPUT"(T)o DOS or (F)rom DOS? "A$:A$=LEFT$(A$,1)
170 IFA$="T":PROCToDos:PRINT:END
180 IFA$="F":PROCFromDos:PRINT:END
190 PRINT:END
200 :
210 DEFPROCFromDos
220 ON ERROR REPORT:PROCvduOff:PRINT:END
230 PROCvduAss
240 *DOS
250 PROCvduOn:OSCLI".":PROCvduOff
260 INPUT"Destination filing system: "fs$
270 OSCLIfs$:*.
280 PRINT"Press SPACE to copy";:A%=GET
290 PROCFrom(""):ENDPROC
300 :
310 DEFPROCCat:CLS:PROCvduOn:*.
320 PROCvduOff:PRINT''"Dir: ";path$:ENDPROC
330 :
340 DEFPROCFrom(path$)
350 LOCAL F$,Addr%
360 CLS:*DOS
370 PROCCat:Addr%=&7C00:REPEAT
380 Addr%?8=13:Addr%?12=13:Addr%?16=13
390
400 F$=$Addr%:E$=$(Addr%+9):A$=$(Addr%+14)
410 Addr%?8=47:Addr%?12=42:Addr%?16=32
420 F$=LEFT$(F$,INSTR(F$+" "," ")-1)
430 E$=LEFT$(E$,INSTR(E$+" "," ")-1)
440 A$=LEFT$(A$,INSTR(A$+" "," ")-1)
450 IFF$<>"":PROCFromObject
460 Addr%=Addr%+20:UNTILF$="":ENDPROC
470 :
480 DEFPROCFromObject:IFE$<>"":F$=F$+"/"+E$
490 IFINSTR(F$,"?"):ENDPROC
500 F$=FNCheckName(F$,Char0$):D$=FNCheckName(LEFT$(F$,10),Char1$)
510 IFINSTR(A$,"D"):PROCFromDir:ENDPROC
520 PRINTTAB(0,VPOS);"Copying ";F$;" to -"fs$"-"D$;SPC(20-LEND$);CHR$11;CHR$13;
530 OSCLI"MOVE "+F$+" -"+fs$+"-"+D$
540 ENDPROC
550 :
560 DEFPROCFromDir
570 OSCLI"DIR "+F$:OSCLIfs$:OSCLI"CDIR "+D$:OSCLI"DIR "+D$
580 PROCFrom(path$+"."+F$):OSCLIfs$:OSCLI"Dir ^":*DOS
590 OSCLI"DIR "+LEFT$(".",path$="")+path$:PROCCat:ENDPROC
600 :
610 DEFPROCToDos
620 PROCvduAss
630 OSCLI"DOS":*.
640 INPUT"Source filing system: "fs$
650 OSCLIfs$:*.
660 PRINT"NB: Can't create DOS directories yet."
670 PRINT"Press SPACE to copy";:A%=GET
680 PROCTo(""):ENDPROC
690 :
700 DEFPROCTo(path$)
710 LOCAL F$,Addr%
720 OSCLIfs$:CLS:OSCLI".":Addr%=&7CA0:REPEAT
730 Addr%?10=13:Addr%?19=13
740
750 F$=$Addr%:A$=$(Addr%+11)
760 Addr%?10=42:Addr%?19=32
770 F$=LEFT$(F$,INSTR(F$+" "," ")-1)
780 A$=LEFT$(A$,INSTR(A$+" "," ")-1)
790 IFF$<>"":PROCToObject
800 Addr%=Addr%+20:UNTILF$="":ENDPROC
810 :
820 DEFPROCToObject:F$=FNCheckName(F$,Char0$):D$=FNup(F$)
830 IFINSTR(A$,"D"):PROCToDir:ENDPROC
840 I%=INSTR(D$,"/"):IFI%=0:D$=LEFT$(D$,8)
850 IFI%>0 AND I%<LEND$-3:D$=MID$(D$,I%+1)+"/"+LEFT$(D$,I%-1)
860
870 IFMID$(D$,9,2)="/H":D$=D$+"TM"
880 IFMID$(D$,8,3)="/HT":D$=D$+"M"
890 IFMID$(D$,9,2)="/T":D$=D$+"XT"
900 IFMID$(D$,8,3)="/TX":D$=D$+"T"
910 IFMID$(D$,9,2)="/C":D$=D$+"OM"
920 IFMID$(D$,8,3)="/CO":D$=D$+"M"
930 IFMID$(D$,9,2)="/E":D$=D$+"XE"
940 IFMID$(D$,8,3)="/EX":D$=D$+"E"
950 IFMID$(D$,9,2)="/B":D$=D$+"BC"
960 IFMID$(D$,8,3)="/BB":D$=D$+"C"
970 *DISK
980 PRINTTAB(0,VPOS);"Copying -"fs$"-"F$" to "D$;SPC(20-LENF$);CHR$11;CHR$13;
990 OSCLI"MOVE -"+fs$+"-"+F$+" -DOS-"+D$
1000 ENDPROC
1010 :
1020 DEFPROCToDir:ENDPROC
1030 :
1040 DEFFNCheckName(A$,C$):FOR I%=1 TO LEN A$
1050 IFINSTR(C$,MID$(A$,I%,1)):A$=LEFT$(A$,I%-1)+MID$(C$,1+INSTR(C$,MID$(A$,I%,1)),1)+MID$(A$,I%+1)
1060 NEXT:=A$
1070 :
1080 DEFFNup(A$):IFA$="":ENDPROC
1090 LOCALz%:FORz%=1TOLENA$:IFMID$(A$,z%,1)>="`":A$=LEFT$(A$,z%-1)+CHR$(ASCMID$(A$,z%,1)-32)+MID$(A$,z%+1)
1100 NEXT:=A$
1110 :
1120 DEFPROCvduAss
1130 vduX%=vduX%:IFvduX%:ENDPROC
1140 DIMvduX% 256:WRCHV=&20E
1150 FORp=0TO1:P%=vduX%
1160 [OPT p*2
1170 .SwapVectors
1180 LDA WRCHV:LDX oldWRCHV:STA oldWRCHV:STX WRCHV
1190 LDA WRCHV+1:LDX oldWRCHV+1:STA oldWRCHV+1:STX WRCHV+1
1200 RTS
1210 .oldWRCHV
1220 EQUW newWRCH
1230 .newWRCH
1240 CMP #12:BCS jmpOld
1250 LDA #ASC"?"
1260 .jmpOld
1270 JMP (oldWRCHV)
1280 ]NEXT:ENDPROC
1290 :
1300 DEFPROCvduOn:vduOn%=vduOn%:IFvduOn%:ENDPROC
1310 CALLSwapVectors:vduOn%=TRUE:ENDPROC
1320 :
1330 DEFPROCvduOff:vduOn%=vduOn%:IFvduOn%:CALL SwapVectors:vduOn%=FALSE
1340 ENDPROC