0 DIMT(35):FORX=1TO17:T(X)=20:NEXT:FORX=18TO24:T(X)=18:NEXT 1 FORX=25TO30:T(X)=17:NEXT:FORX=31TO35:T(X)=16:NEXT:DIMD(256) 2 POKE53280,0:POKE53281,0:POKE646,5:PRINT"" 3 PRINT"[147] [197][211][208] [211]OFTWARE - [196]ISK [210]ESURRECTION":PRINT"" 100 PRINTTAB(14)"[211]ELECT [207]PTION:":CLOSE2:F=0:EF=0 110 PRINTTAB(14)"[163][163][163][163][163][163][163][163][163][163][163][163][163][163]":CLOSE15 120 PRINTTAB(12)"1: [211]AVE A [211]ECTOR" 130 PRINTTAB(12)"2: [211]AVE A [198]ILE" 140 PRINTTAB(12)"3: [211]AVE [197]NTIRE [196]ISK" 150 PRINTTAB(12)"4: [210]EAD [201]NSTRUCTIONS":POKE198,0 155 PRINTTAB(12)"5: [197]XIT [208]ROGRAM":POKE198,0 160 GETI$:I=VAL(I$) 170 IFI<1ORI>5THEN160 180 ONIGOTO500,700,1200,1400,450 190 PRINT"":FORX=1TO13 195 PRINT" ":NEXT:PRINT"[145][145][145][145][145][145][145][145][145][145][145][145][145][145]":RETURN 198 RETURN 200 POKE631,5:POKE198,1:RETURN 210 INPUT#15,E1,E$,E2,E3:IFE1=0THENRETURN 220 GOSUB190:PRINT" "E1;E$;E2;E3:FORX=1TO4000:NEXT:GOSUB190:RETURN 230 AT=0:PRINT#15,"M-W"CHR$(10)CHR$(0)CHR$(2)CHR$(T)CHR$(S) 240 PRINT#15,"M-W"CHR$(2)CHR$(0)CHR$(1)CHR$(CODE) 250 AT=AT+1:PRINT#15,"M-R"CHR$(2)CHR$(0):GET#15,E$:E=ASC(E$+CHR$(0)) 260 IFAT>500THEN290 270 IFE>127THEN250 280 RETURN 290 E$="[213]NRECOVERABLE FORMAT ERROR" 292 IFE=3THENE$="[195]ANNOT FIND TRACK" 293 IFE=8THENE$="[215]RITE PROTECT ON" 310 E=E+18:GOSUB190:PRINT""E;E$;T;S 320 PRINT"[211]ORRY, UNABLE TO RECOVER THIS SECTOR":GOTO670 330 TT=0 340 TT=TT+1:IFTT>3THENEF=EF+1:RETURN 345 PRINT#15,"U;":FORX=1TO1000:NEXT 350 CLOSE2:CLOSE15:OPEN15,8,15,"I0" 360 GOSUB210:IFE1<>0THEN100 370 OPEN2,8,2,"#2":GOSUB210:IFE1<>0THEN100 380 CODE=176:GOSUB230:GOSUB198:IFE<>1THEN340 390 CODE=128:GOSUB230:GOSUB198:IFE<>1THEN340 400 RETURN 450 GOSUB190:POKE198,1:SYS64738 500 GOSUB190:PRINTTAB(14)"[211]AVE A [211]ECTOR" 510 PRINTTAB(14)"[163][163][163][163][163][163][163][163][163][163][163][163][163]":T=-1:S=-1 520 PRINT"[201]NPUT TRACK DESIRED: ";:GOSUB200:INPUTT 525 IFT<1THENGOSUB190:GOTO2 530 IFT>35THENGOSUB190:PRINTTAB(14)"[201]NVALID TRACK!":FORX=1TO4000:NEXT:GOTO500 540 PRINT"[201]NPUT SECTOR DESIRED:";:GOSUB200:INPUTS 550 IFS<0THENGOSUB190:GOTO2 560 IFS>T(T)THENGOSUB190:PRINTTAB(14)"[201]NVALID SECTOR!":FORX=1TO4000:NEXT:GOTO500 570 GOSUB190:PRINTTAB(15)"[215]ORKING..." 575 CLOSE15:OPEN15,8,15,"U;":FORX=1TO1000:NEXT 580 CLOSE15:OPEN15,8,15,"I0":GOSUB210:IFE1<>0THEN2 585 OPEN2,8,2,"#2":GOSUB210:IFE1<>0THEN2 590 PRINTTAB(7)"[210]EADING TRACK"T"SECTOR"S 600 CODE=176:GOSUB230:IFE<>1ANDE<>4ANDE<>5THENGOSUB330:IFTT<3THEN600 601 IFE<>1ANDE<>4ANDE<>5THEN290 605 GOSUB198 610 CODE=128:GOSUB230 620 IFE=5THEN650 625 IFE=4THEN640 630 IFE<>1THENGOSUB330:IFTT<3THEN600 631 IFE<>1THEN290 635 PRINT" [206]O ERRORS ON TRACK"T"SECTOR"S"!":GOTO670 640 PRINT#15,"M-W"CHR$(71)CHR$(0)CHR$(1)CHR$(7) 650 CODE=144:GOSUB230:IFE<>1THENGOSUB330:IFTT<3THEN600 651 IFE<>1THEN290 660 PRINTTAB(8)"[212]RACK"T"SECTOR"S"SAVED!" 670 FORX=1TO5000:NEXT 680 IFF=0THENCLOSE2:CLOSE15:GOSUB190:GOTO2 690 IFF=1THEN820 700 GOSUB190:PRINTTAB(14)"[211]AVE A [198]ILE":PRINTTAB(14)"[163][163][163][163][163][163][163][163][163][163][163]" 705 F$="":LT=0:LS=0:EF=0 710 PRINT"[201]NPUT FILENAME:";:GOSUB200:INPUTF$ 720 IFF$=""THENGOSUB190:GOTO2 730 CLOSE2:CLOSE15:OPEN15,8,15,"U;":FORX=1TO1000:NEXT 732 PRINT#15,"I0":GOSUB210:IFE1<>0THEN2 735 OPEN2,8,2,"0:"+F$ 740 GOSUB210:IFE1=62ORE1=21THEN700 741 IFE1=22ORE1=23THENT=E2:S=E3:GOTO770 742 IFE1<>0THENPRINTTAB(10)"[195]ANNOT SAVE THIS FILE!":F=0:GOTO670 745 GET#2,A$,B$ 750 PRINT#15,"M-R"CHR$(24)CHR$(0):GET#15,T$:T=ASC(T$+CHR$(0)) 760 PRINT#15,"M-R"CHR$(25)CHR$(0):GET#15,S$:S=ASC(S$+CHR$(0)) 770 CLOSE2:OPEN2,8,2,"#2" 771 P=11-(LEN(F$)/2):IFP<1THENP=0 775 F=1:GOSUB190:PRINTTAB(P+5)"[211]AVING "CHR$(34)F$CHR$(34) 776 PRINT" [210]EADING TRACK [157][157][157]"T"[157] SECTOR [157][157][157]"S 780 IFT=0THENPRINT" [197]ND OF FILE":F=0 790 IFT=0ANDEF>0THENPRINTTAB(P)""CHR$(34)F$CHR$(34)" HAS BEEN SAVED!":GOTO670 791 IFT=0ANDEF<1THENPRINTTAB(P+2)"[206]O ERRORS IN "CHR$(34)F$CHR$(34):GOTO670 792 IFT>35ORS>T(T)THEN940 800 PRINT"[145] [210]EADING TRACK [157][157][157]"T"[157] SECTOR [157][157][157]"S 820 CODE=176:GOSUB230:IFE<>1THENGOSUB330:IFTT<3THEN820 825 GOSUB198 830 CODE=128:GOSUB230 840 IFE=4THENPRINT#15,"M-W"CHR$(71)CHR$(0)CHR$(1)CHR$(7):EF=EF+1:GOTO870 850 IFE=5THENEF=EF+1:GOTO870 860 IFE<>1THENGOSUB330:IFTT<3THEN820 865 IFE<>1THENNT=0:NS=0:GOTO920 870 PRINT#15,"M-R"CHR$(0)CHR$(5):GET#15,NT$ 880 PRINT#15,"M-R"CHR$(1)CHR$(5):GET#15,NS$ 890 NT=ASC(NT$+CHR$(0)):NS=ASC(NS$+CHR$(0)) 900 REMPRINT"NT="NT,"NS="NS:GOTO940 910 REMCODE=176:GOSUB230 915 GOSUB198 920 CODE=144:GOSUB230:IFE<>1THENGOSUB330:IFTT<3THEN920 925 GOSUB198 930 IFE=1THENLT=T:T=NT:LS=S:S=NS:GOTO780 936 IFE=8THENGOSUB190:PRINTTAB(10)"[210]EMOVE [215]RITE [208]ROTECT!":F=0:GOTO670 937 IFE<>1THENGOSUB330:IFTT<3THEN920 940 GOSUB190:PRINTTAB(7)"[213]NRECOVERABLE FORMAT ERROR." 950 PRINTTAB(6)"[198]IXING SECTOR LINKS TO ALLOW" 960 PRINTTAB(5)"FILE RECOVERY UP TO THIS POINT." 965 PRINTTAB(13)"([194]E PATIENT!)" 970 T=LT:S=LS:CODE=176:GOSUB230:IFE<>1THENGOSUB330:GOTO970 980 CODE=128:GOSUB230:IFE<>1THEN970 990 FORX=0TO255 1000 PRINT#15,"M-R"CHR$(X)CHR$(5) 1010 GET#15,D$:D(X)=ASC(D$+CHR$(0)) 1020 NEXT:X=0:Y=0:D=0 1030 X=X+1:IFX>255THEN1060 1040 IFD(X)=DTHENY=X 1050 GOTO1030 1060 IFY=0ANDD=0THEND=13:X=0:GOTO1030 1065 IFY=0ANDD=13THENY=255:GOTO1100 1070 D(0)=0:IFY>253THEN1100 1090 D(1)=Y+2:D(Y)=D:D(Y+1)=D:D(Y+2)=D:GOTO1110 1100 D(1)=Y-2:D(Y)=D:D(Y-1)=D:D(Y-2)=D 1110 FORX=0TO255 1120 PRINT#15,"M-W"CHR$(X)CHR$(5)CHR$(1)CHR$(D(X)):NEXT 1130 CODE=144:GOSUB230 1135 IFE<>1THENGOSUB330:IFTT<3THEN970 1136 IFE<>1THENF=0:GOTO670 1140 GOSUB190:PRINT:PRINTTAB(3)"[198]ILE HAS BEEN [208][193][210][212][201][193][204][204][217] RECOVERED." 1150 PRINT:PRINTTAB(2)"[198]ILE COPY ALL FILES TO ANOTHER DISK;" 1160 PRINTTAB(3)"[212]HERE ARE PERMANENT FORMAT ERRORS" 1170 PRINTTAB(3)"THAT CANNOT BE CORRECTED WITHOUT" 1180 PRINTTAB(8)"RE-FORMATTING THE DISK." 1190 PRINT:PRINTTAB(12)"[208]RESS ANY KEY":POKE198,0:WAIT198,1 1195 GOSUB190:GOTO2 1200 GOSUB190:PRINTTAB(12)"[211]AVE ENTIRE DISK" 1210 PRINTTAB(12)"[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]" 1220 PRINTTAB(5)"[201]NSERT DISK AND PRESS [210][197][212][213][210][206] ":POKE198,0 1230 GETA$:IFA$=CHR$(13)THEN1240 1235 IFA$<>""ANDA$<>CHR$(13)THENGOSUB190:GOTO2 1236 GOTO1230 1240 CLOSE2:CLOSE15:OPEN15,8,15,"U;":FORX=1TO1000:NEXT 1245 CLOSE15:OPEN15,8,15,"I0":GOSUB210 1250 IFE1<>0THEN2 1255 OPEN2,8,2,"#2":GOSUB210:IFE1<>0THEN2 1260 RE=0:FE=0:WE=0 1265 PRINT"[145] " 1270 FORT=1TO35 1275 FORS=0TOT(T) 1280 PRINTTAB(5)"[145][215]ORKING ON TRACK [157][157][157]"T"[157] SECTOR [157][157][157]"S 1285 CODE=176:GOSUB230:IFE<>1ANDE<>4ANDE<>5THENGOSUB330:IFTT>3THENFE=FE+1:GOTO1330 1295 IFE<>1ANDE<>4ANDE<>5THENFE=FE+1:GOTO1330 1300 CODE=128:GOSUB230:IFE<>1ANDE<>4ANDE<>5THENGOSUB330:IFTT<3THEN1300 1305 IFE<>1ANDE<>4ANDE<>5THENRE=RE+1:GOTO1330 1310 IFE=4THENPRINT#15,"M-W"CHR$(71)CHR$(0)CHR$(1)CHR$(7) 1320 CODE=144:GOSUB230:IFE>8THENWE=WE+1:GOTO1330 1321 IFE<>1THENGOSUB330:CODE=144:GOSUB230 1325 IFE<>1THENWE=WE+1 1330 IFE=3THENS=T(T)+1 1335 NEXTS:NEXTT 1340 GOSUB190:PRINTTAB(10)"[198]ORMAT ERRORS:"FE 1350 PRINTTAB(5)"[213]NRECOVERABLE READ ERRORS:"RE 1360 PRINTTAB(10)"[211]ECTORS SAVED:"683-WE 1370 F=0:FORX=1TO5000:NEXT:GOTO670 1400 C$="":Q$=CHR$(34):GOSUB190 1410 PRINT""C$" [212]HIS PROGRAM WAS TAKEN FROM THE " 1420 PRINT"ROUTINES IN THE BOOK [201]NSIDE [195]OMMODORE" 1430 PRINT"[196][207][211]. [211]PECIAL THANKS TO [210]ICHARD [201]MMERS" 1440 PRINT"AND [199]ERALD [206]EUFELD FOR AN EXCELLENT " 1450 PRINT"REFERENCE GUIDE TO THE 1541. " 1460 PRINT" [212]HIS PROGRAM WILL CORRECT "Q$"SOFT"Q$ 1470 PRINT"READ ERRORS ON YOUR DISKS. [212]HESE ARE" 1480 PRINT"#22 AND #23 READ ERRORS. [212]HE OTHER " 1490 PRINT"ERRORS SUCH AS #20, #21, #27, #29, ETC." 1500 PRINT"ARE CREATED DURING FORMATTING, AND " 1510 PRINT"CAN'T BE REPAIRED EXCEPT BY FORMATTING" 1520 PRINT"THE DISK AGAIN." 1530 PRINT" [208]RESS ANY KEY":POKE198,0:WAIT198,1 1540 GOSUB190:PRINT" [196]URING THE TESTING OF THIS PROGRAM" 1550 PRINT"IT WAS DISCOVERED THAT MANY OF THE COPY" 1560 PRINT"PROGRAMS DO NOT FAITHFULLY DUPLICATE" 1570 PRINT"#22 OR #23 ERRORS. [212]HESE ERRORS HIDE A" 1580 PRINTQ$"HARD"Q$" ERROR UNDERNEATH THE "Q$"SOFT"Q$ 1590 PRINT"ERROR. [212]HESE CAN'T BE REPAIRED, EITHER." 1600 PRINT" [212]HIS PROGRAM IS INTENDED TO SAVE" 1610 PRINT"YOUR FILES IF YOU SHOULD DEVELOP A READ" 1620 PRINT"ERROR. [201]F YOU CAN'T LOAD OR READ A FILE" 1630 PRINT"BECAUSE OF A READ ERROR, THIS PROGRAM" 1635 PRINT"WILL LET YOU GET THAT FILE BACK AGAIN." 1640 POKE198,0:WAIT198,1 1650 GOSUB190:PRINT" [201]F YOU HAVE A BAD FILE, YOU SHOULD" 1660 PRINT"USE THE "Q$"[211]AVE A [198]ILE"Q$" OPTION. [212]HIS" 1670 PRINT"WILL TRACE THE FILE, AND CORRECT" 1680 PRINTQ$"SOFT"Q$" ERRORS AS THEY ARE FOUND. [201]F" 1690 PRINT"ANY "Q$"HARD"Q$" ERRORS ARE FOUND, THE" 1700 PRINT"FILE WILL BE SEVERED AT THAT POINT," 1710 PRINT"SINCE A HARD ERROR CANNOT BE REPAIRED." 1720 PRINT" [212]HIS WILL LET YOU RETREIVE AT LEAST" 1730 PRINT"A PORTION OF THE BAD FILE. [201]F IT IS A" 1740 PRINT"[194][193][211][201][195] PROGRAM, THE LINE LINKS WILL BE" 1750 PRINT"CORRECTED BEFORE THE BAD PORTION OF THE" 1760 PRINT"FILE IS SEVERED." 1770 POKE198,0:WAIT198,1 1780 GOSUB190:PRINT" [212]HE "Q$"[211]AVE [197]NTIRE [196]ISK"Q$" OPTION" 1790 PRINT"TAKES A LONG TIME, BUT MAY BE USEFUL" 1800 PRINT"IF YOU DON'T KNOW WHERE THE READ ERRORS" 1810 PRINT"ARE ON THE DISK. [200]OWEVER, THIS CAN TAKE" 1820 PRINT"A [214][197][210][217] LONG TIME, ESPECIALLY IF THERE" 1830 PRINT"ARE A NUMBER OF "Q$"HARD"Q$" ERRORS ON THE" 1840 PRINT"DISK. [215]HEN A "Q$"HARD"Q$" ERROR IS FOUND, THE" 1850 PRINT"PROGRAM RESETS AND THEN INITIALIZES THE" 1860 PRINT"DRIVE AND TRIES AGAIN; UP TO 3 TIMES" 1870 PRINT"PER SECTOR BEFORE GIVING UP AND THEN" 1880 PRINT"ACCEPTING THE ERROR." 1890 POKE198,0:WAIT198,1 1900 GOSUB190:PRINT" [212]HE "Q$"[211]AVE A [198]ILE"Q$" OPTION IS OF" 1910 PRINT"MAIN INTEREST. [201]T IS THE ONLY OPTION" 1920 PRINT"THAT WILL ALLOW YOU TO RECOVER A FILE" 1930 PRINT"WITH "Q$"SOFT"Q$" ERRORS. [212]HE ERRORS WILL" 1940 PRINT"BE CORRECTED AS THE PROGRAM STEPS THRU" 1950 PRINT"THE FILE. [201]F A "Q$"HARD"Q$" ERROR IS FOUND," 1960 PRINT"THE PRECEEDING SECTOR'S INFORMATION IS" 1970 PRINT"CORRECTED TO SEVER THE BAD PORTION OF " 1980 PRINT"THE FILE FROM THE GOOD PORTION." 1985 PRINT" [199]OOD [204]UCK!" 1990 POKE198,0:WAIT198,1 2000 PRINT" ":GOSUB190:GOTO2