5 O=1:Z=0:N$=CHR$(Z):C=15:D=8:OPENC,D,C:POKE53281,.:POKE646,1 10 PRINT"[147]JOEL REA'S DISK SCANNER":PRINT"DO YOU WANT INSTRUCTIONS?[160]"; 11 POKE198,.:WAIT198,1:GETA$:IFA$="Y"THENPRINT"YEAH!":GOTO200 12 PRINT"[145]" 14 PRINT"INSERT DISK AND PRESS ANY KEY TO START":FORI=1TO100:NEXT 15 POKE198,.:WAIT198,1:POKE198,. 16 PRINT"[145] " 20 PRINT#C,"I":OPEND,D,D,"#":FORT=OTO35:READM:FORS=ZTOM:POKE56329,Z:POKE56328,Z 21 DATA20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,18,18,18,18,18,18 22 DATA17,17,17,17,17,17,16,16,16,16,16 25 PRINT"[145]"T"[157] "S"[157] ":PRINT#C,"UA:"D;D;T;S:GOSUB100:IFE>19THEN50 27 IFPEEK(56329)THENPRINT"[145]","MARGINAL!":MA=MA+1 30 NEXTS,T:PRINTBB"BAD BLOCKS FOUND.":PRINTCB"CORRECTED.":PRINTAB"ALLOCATED." 32 PRINTMA"MARGINAL BLOCKS FOUND." 33 PRINT"INSERT PROGRAM DISK AND PRESS A KEY:":POKE198,.:WAIT198,1:POKE198,. 35 CLOSEC:CLOSED:PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 40 POKE631,13:POKE632,13:POKE198,2:END 50 BB=BB+1:PRINT"[145]",E$E:EC=E:PRINT#C,"B-A:"D;T;S:GOSUB100:IFE<>65THEN57 55 PRINT"WARNING![146] BLOCK IS PART OF A FILE!":W%=-1 57 IFEC=23THEN70 58 IFE=65THENPRINT:GOTO30 60 PRINT"ALLOCATE?[160]";:GOSUB110:IFR%=0THENPRINT#C,"B-F:"D;T;S:PRINT:GOTO30 65 AB=AB+1:PRINT:GOTO30 70 PRINT"ATTEMPT FIX? ";:GOSUB110:IFR%THEN75 72 IFW%THENW%=0:PRINT:GOTO30 73 GOTO60 75 PRINT#C,"UB:"D;D;T;S:GOSUB100:IFE>19THEN90 80 PRINT"WRITE SUCCEDED.":PRINT#C,"UA:"D;D;T;S:GOSUB100:IFE>19THEN90 82 PRINT"RE-READ SUCCEDED!" 85 PRINT"BLOCK OKAY";:IFW%THENPRINT", BUT DATA CORRUPTED"; 87 IFW%=0THENPRINT#C,"B-F:"D;T;S 88 PRINT"!":CB=CB+1:W%=0:GOTO30 90 PRINT"FIX FAILED!":IFW%THENW%=0:PRINT:GOTO30 95 GOTO60 100 INPUT#C,E,E$,ET,ES:RETURN 110 GETA$:IFA$="Y"THENPRINT"YEAH!":R%=-1:RETURN 115 IFA$="N"THENPRINT"NOPE.":R%=0:RETURN 117 GOTO110 200 PRINT"THIS PROGRAM SCANS A DISK, SEARCHING FOR"; 205 PRINT"BAD AND MARGINAL SECTORS. IT DOES NOT" 210 PRINT"HARM DATA ON A DISK UNLESS THE 'FIX'" 215 PRINT"OPTION IS USED (SEE BELOW). WHEN ASKED,"; 220 PRINT"SIMPLY INSERT THE DISK YOU WANT SCANNED" 225 PRINT"AND PRESS A KEY. THAT WILL START THE" 230 PRINT"SCAN. AS THE SCAN PROGRESSES, TWO NUM-" 235 PRINT"BERS WILL BE DISPLAYED, AND WILL CONS-" 240 PRINT"TANTLY CHANGE. THE FIRST NUMBER IS THE" 245 PRINT"CURRENT TRACK, AND THE SECOND NUMBER IS" 250 PRINT"THE CURRENT BLOCK (OR 'SECTOR') ON THAT" 255 PRINT"TRACK. IF THE PROGRAM FINDS A BAD SEC-" 260 PRINT"TOR, IT WILL CHECK TO SEE IF THE BLOCK" 265 PRINT"IS IN USE. IF NOT, IT WILL GIVE YOU" 270 PRINT"AN OPPORTUNITY TO 'LOCK-OUT' OR 'ALLO-" 275 PRINT"CATE' THE BLOCK SO THAT THE DISK DRIVE" 280 PRINT"WILL THINK THAT BLOCK IS ALREADY IN USE!"; 285 PRINT"(WARNING! IF YOU LATER USE THE 1541'S" 290 PRINT"IN USE! (WARNING! IF YOU LATER USE" 295 PRINT"DE-ALLOCATED! JUST RE-SCAN THE DISK.)" 300 PRINT"PRESS A KEY TO CONTINUE INSTRUCTIONS:" 305 POKE198,0:WAIT197,64,64:POKE198,0 310 PRINT"[145]IF THE BAD BLOCK IS FIXABLE, THE PRO-" 315 PRINT"GRAM WILL GIVE YOU AN OPPORTUNITY TO" 320 PRINT"FIX IT. THIS IS DONE BY WRITING THE" 325 PRINT"BLOCK BACK OUT THEN RE-READING IT. US-" 330 PRINT"UALLY, THE BLOCK ITSELF WILL BE FIXED," 335 PRINT"BUT THE CURRENT CONTENTS OF THE BLOCK" 340 PRINT"WILL ALMOST ALWAYS BE CORRUPTED! IF THE"; 345 PRINT"BLOCK WAS ALREADY IN USE, USE THE FIX" 350 PRINT"OPTION WITH CARE! THE FIX IS TO ALLOW" 355 PRINT"THE BLOCK TO BE RE-USED! IF THE DISK" 360 PRINT"DRIVE DOES NOT ACTUALLY RETURN AN ER-" 365 PRINT"ERROR, BUT TAKES A SECOND OR LONGER TO" 370 PRINT"SUCCESSFULLY READ THE BLOCK, THAT BLOCK" 375 PRINT"IS GRADED AS 'MARGINAL' AND THE SCAN" 380 PRINT"CONTINUES. AT THE END OF THE SCAN, A" 385 PRINT"COUNT IS GIVEN OF ALL BAD BLOCKS FOUND," 390 PRINT"HOW MANY OF THOSE WERE ALLOCATED, AND" 395 PRINT"AND HOW MANY WERE FIXED. ALSO, THE #" 400 PRINT"OF MARGINAL BLOCKS IS DISPLAYED. IF" 405 PRINT"THERE ARE MANY MARGINAL BLOCKS, OR ANY" 410 PRINT"TRACK 18 MARGINAL BLOCKS, ITS TIME FOR" 415 PRINT"A BACKUP!!! THAT'S ALL THERE IS TO US-" 420 PRINT"ING 'DISCAN'!":PRINT"PRESS ANY KEY TO CONTINUE:"; 425 POKE198,0:WAIT197,64,64:POKE198,0:GOTO10