10 DEFFNS="Tcopy" 20 MODE7+128 30 VDU23;8202;0;0;0; 40 A$="D" 50 REPEAT 60 IFA$<>"" READ A$ 70 IFA$<>"" PROCprt(A$) 80 K%=INKEY0 90 UNTILK%=89 OR K%=78 100 IF K%=89 ?&73=2 ELSE ?&73=3 110 CLS 120 RESTORE 2130 130 A$="D" 140 REPEAT 150 IFA$<>"" READ A$ 160 IFA$<>"" PROCprt(A$) 170 A%=INKEY0 180 UNTILA%>64 AND A%<91 190 A%=A%-1 200 PROCa 210 CLS 220 PROCprt("Tape Backup by C.J.Richardson") 230 CALL start 240 END 250 DEFPROCa 260 FORL%=0TO2STEP 2 270 P%=&B00 280 [ 290 OPT L% 300 \ 310 .start 320 LDA#28:JSR&FFEE \ DEFINE TEXT WINDOW 330 LDA#0:JSR&FFEE 340 LDA#24:JSR&FFEE 350 LDA#39:JSR&FFEE 360 LDA#18:JSR&FFEE 370 LDY#0:LDX#1:LDA#&D2:JSR&FFF4 \ SOUND OFF BECAUSE IT'S ANNOYING 380 LDA#&83:JSR&FFF4 \ READ OSHWM 390 STY&72 400 LDA#1 \ SOURCE FILING SYSTEM (CFS) 410 STA&70 \ SOURCE FILING SYSTEM FLAG AT &70 420 LDA#0 430 LDY#0 440 JSR&FFDA \ READ PRESENT (DESTINATION) FILING SYSTEM. 450 STA&71 \ STORE IT IN &71 1=CFS 4=DFS 8=ADFS 460 \ 470 .main 480 LDA&70 \ GET SOURCE FILING SYSTEM 490 JSR change_filing_system \ CHANGE TO SOURCE SYSTEM 500 LDA#&8B:LDX#1:LDY#2:JSR&FFF4 \ SET *OPT TO 1 2 FOR DISPLAY PURPOSES 510 JSR unlock_tape \ NAUGHTY BIT JUST IN CASE IT'S A LOCKED TAPE 520 JSR load \ LOAD FROM SOURCE SYSTEM 530 JSR output_name \ PRINT THE NAME IF THE PRINTER IS ON 540 LDA&71 \ GET DESTINATION SYSTEM 550 JSR change_filing_system \ CHANGE TO DESTINATION SYSTEM 560 JSR save \ SAVE TO DESTINATION SYSTEM 570 JMP main 580 \ 590 .change_filing_system \ Y CONTAINS SYSTEM NUMBER 600 CMP#1 610 BEQ ctt 620 CMP#4 630 BEQ ctd 640 LDX#adfs MOD 256 650 LDY#adfs DIV 256 660 JMP&FFF7 670 .ctd 680 LDX#dfs MOD 256 690 LDY#dfs DIV 256 700 JMP&FFF7 710 .ctt 720 LDX#0 730 LDA#&8C 740 JMP&FFF4 750 .adfs 760 EQUB ASC"A" 770 EQUB ASC"D" 780 EQUB ASC"." 790 EQUB 13 800 .dfs 810 EQUB ASC"D" 820 EQUB ASC"I" 830 EQUB ASC"." 840 EQUB 13 850 \ 860 .unlock_tape 870 LDA#&0D:LDX#4:JSR&FFF4 \ DISABLE EVENT SO WE DON'T CRASH IF IT'S RUN TWICE 880 LDA#unlock MOD 256 890 STA&220 900 LDA#unlock DIV256 910 STA&221 920 LDA#&0E 930 LDX#4 940 JSR&FFF4 \ SET AN INTERRUPT TO LOOK FOR A LOCKED FILE 950 .unlock \ UNLOCK A TAPE FILE 960 LDA&3CA 970 AND#254 980 STA&3CA 990 RTS 1000 \ 1010 .parameter_block \ PROBABLY A BETTER WAY. BUT I CAN KEEP AN EYE ON IT HERE 1020 NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP:NOP 1030 \ 1040 .file_name 1050 EQUB&D:EQUB A%:EQUB32:EQUB&D \ FILE NAME STORE. 1060 \ 1070 .load 1080 LDA#0 1090 LDY#17 1100 .loop 1110 STA parameter_block,Y 1120 DEY 1130 BNE loop \ BLANK 1140 LDA#file_name MOD 256 1150 STA parameter_block \ LSB FILENAME 1160 LDA#file_name DIV 256 1170 STA parameter_block+1 \ MSB FILENAME 1180 LDA#0 1190 STA parameter_block+2 \ LSB LOAD ADDRESS 1200 LDA&72 1210 STA parameter_block+3 \ MSB LOAD ADDRESS 1220 LDA#&FF 1230 \ 1240 .doit 1250 LDX#parameter_block MOD 256 \ LSB PARAMETER BLOCK 1260 LDY#parameter_block DIV 256 \ MSB PARAMETER BLOCK 1270 JMP&FFDD \ DO IT 1280 \ 1290 .save 1300 LDA&71 1310 CMP#1 1320 BEQ cfs 1330 INC file_name+1 \ CHANGE TO NEXT FILE NAME 1340 LDA file_name+1 1350 CMP#91 1360 BNE no_need_to_change 1370 LDA#97:STA file_name+1 1380 LDA#ASC"1" 1390 STA file_name+2 \ TO STOP ODD FILE NAMES 1400 .no_need_to_change 1410 CMP#123 1420 BNE still_no_need_to_change 1430 LDA#65 1440 STA file_name+1 1450 LDA#32 1460 STA file_name+2 \ START AT A AGAIN 1470 .still_no_need_to_change 1480 LDA file_name+1:JSR&FFEE 1490 LDA file_name+2:JSR&FFEE 1500 LDA file_name+3:JSR&FFEE 1510 LDA#10:JSR&FFEE 1520 LDA#3:JSR&FFEE \ PRINT IT 1530 LDA#(file_name+1) MOD 256:STA parameter_block \ LSB FILENAME 1540 LDA#(file_name+1) DIV 256:STA parameter_block+1 \ MSB FILENAME 1550 . not_cfs 1560 LDA parameter_block+10:STA parameter_block+14 \ SHIFT LENGTH LSB 1570 LDA parameter_block+11:ADC&72:STA parameter_block+15 \ SHIFT LENGTH MSB 1580 LDA#0:STA parameter_block+10 \ LSB LOAD ADDRESS 1590 LDA&72:STA parameter_block+11 \ MSB LOAD ADDRESS 1600 LDA#&0:JMPdoit 1610 \ 1620 .cfs 1630 LDA#&B2:STA parameter_block 1640 LDA#3:STA parameter_block+1 1650 LDY#&FF 1660 LDA#32 1670 .loop3 1680 JSR&FFEE 1690 INY 1700 LDA &3B2,Y 1710 CMP#0 1720 BNE loop3 1730 LDA#&D 1740 JSR&FFEE 1750 STA&3B2,Y 1760 LDA#10:JSR&FFEE 1770 LDA#3:JSR&FFEE 1780 LDA#&B2:STA parameter_block 1790 LDA#3:STA parameter_block+1 1800 JMP not_cfs 1810 \ 1820 .output_name 1830 LDA&73:JSR&FFEE \ EITHER SWITCH THE PRINTER ON OR NOT AS THE CASE MAY BE 1840 LDY#0 \ INITIALISE A COUNT 1850 .loop2 \ INITIALISE A LOOP 1860 LDA&3B2,Y \ &3B2 IS WHERE THE FILE NAME ENDS UP 1870 INY \ INCREASE THE COUNT 1880 CMP#0 \ END OF THE NAME WHY CAN'T THEY TERMINATE IT WITH &D? 1890 BEQ out \ IF IT IS THE END LET'S GET OUT OF IT QUICK 1900 CMP#32 1910 BMI miss:JSR&FFEE 1920 .miss \ IF IT ISN'T LET'S SEND IT TO THE SCREEN 1930 JMP loop2 \ CARRY ON COZ WE HAVEN'T FINISHED YET 1940 .out \ LET'S CLEAR OFF WHILE THE GOING'S GOOD. 1950 LDA #ASC" ":JSR&FFEE \ PRINT Now> 1960 LDA #ASC"N":JSR&FFEE 1970 LDA #ASC"o":JSR&FFEE 1980 LDA #ASC"w":JSR&FFEE 1990 LDA #ASC">":JSR&FFEE 2000 LDA #ASC" ":JMP&FFEE 2010 ] 2020 NEXT 2030 ENDPROC 2040 DEFPROCprt(A$):A$=A$+STRING$(LENA$MOD2," "):FORL%=1TOLENA$:PRINTTAB(18-L%/2);"";LEFT$(A$,L%/2);RIGHT$(A$,L%/2);TAB(18-L%/2);"";LEFT$(A$,L%/2);RIGHT$(A$,L%/2):VDU11,11:NEXT:VDU10,10:ENDPROC 2050 REM 2060 REM 2070 DATATape Backup by C.J.Richardson 2080 DATAThis program will backup from tape 2090 DATAto the present filing system. 2100 DATAIt will not do it for ALL files. 2110 DATAPRINTER ON? Y/N 2120 DATA 2130 DATATa. When you've done. Rename all 2140 DATAThe files accordingly. But you 2150 DATAwill have to change the programs 2160 DATAyourself sometimes. 2170 DATAIf copying tape to tape then 2180 DATAfile names are not changed. 2190 DATAThe new file names run from A to z1 2200 DATASelect first file name: 2210 DATAA to Z 2220 DATA