REM > SectorOp REM Disc sector reader and writer REM James Bursa - 14 Jun 2000 ON ERROR ON ERROR OFF: REPORT: PRINT ERL: END REM change these for other FSs describe$ = "ADFS_DescribeDisc" sector_op$ = "ADFS_SectorDiscOp" :REM sometimes _SectorOp PRINT "SectorOp - disc sector reader and writer"' PRINT "WARNING: This program is potentially dangerous and could" PRINT "cause data loss. If you do not know what you are doing," PRINT "press Escape now."' REPEAT INPUT "Drive number: " drive% IF drive% < 0 OR drive% > 8 THEN PRINT "Drive must be 0-8" UNTIL drive% >= 0 AND drive% <= 8 PROCread_record WHILE 1 PRINT "[R]ead sector, [W]rite sector, or [Q]uit? "; REPEAT i$ = GET$ UNTIL INSTR("rRwWqQ", i$) PRINT i$ CASE i$ OF WHEN "r", "R": PROCread WHEN "w", "W": PROCwrite WHEN "q", "Q": END ENDCASE ENDWHILE END REM-------------------------------------------------------------------------------- DEF PROCread WHILE 1 PRINT "Read sector number (0-" + STR$(sectors% - 1) + ", blank to end): "; INPUT "" sector$ IF sector$ = "" THEN ENDPROC sector% = EVAL(sector$) SYS sector_op$,, 1, drive%<<29 OR sector%, M%, secsize% PROCdump PRINT "Save this sector [y/n]? "; REPEAT i$ = GET$ UNTIL INSTR("yYnN", i$) PRINT i$ IF INSTR("yY", i$) THEN INPUT "Filename: " file$ SYS"OS_File", 10, file$, &ffd,, M%, M% + secsize% ENDIF ENDWHILE ENDPROC REM-------------------------------------------------------------------------------- DEF PROCread_record DIM R% 100 SYS describe$, ":" + STR$drive%, R% big% = (R%?&29 AND 1) = 1 secsize% = 2^R%?00 sectors% = (R%!16 / (secsize% * R%?01 * R%?02)) * R%?01 * R%?02 PRINT " Current disc record contents:" PRINT " Bytes/sector: "; secsize% PRINT " Sectors/head: "; R%?01 PRINT " Heads/track: "; R%?02 PRINT " Tracks/disc: "; (R%!16 / (secsize% * R%?01 * R%?02)) PRINT " LFAU: "; 2^R%?05 PRINT " Zones: "; R%?09 IF big% THEN PRINT " Disc size: &" + STR$~R%!&24 + RIGHT$("00000000" + STR$~R%!16, 8) sectors% = 1 ELSE PRINT " Disc size: "; R%!16 ENDIF DIM M% secsize% ENDPROC REM-------------------------------------------------------------------------------- DEF PROCwrite INPUT "Filename: " file$ SYS"OS_File", 23, file$ TO type%,,,, len% IF type% <> 1 THEN PRINT "Not a file": ENDPROC IF len% <> secsize% THEN PRINT "Not sector sized (should be " + STR$secsize% + " bytes)": ENDPROC SYS"OS_File", 16, file$, M% PROCdump PRINT "Write sector number (0-" + STR$(sectors% - 1) + "): "; INPUT "" sector$ sector% = EVAL(sector$) PRINT "WARNING: about to write sector " + STR$sector% + ", press O to confirm" i$ = GET$ IF INSTR("oO", i$) THEN SYS sector_op$,, 2, drive%<<29 OR sector%, M%, secsize% PRINT "Sector written" ELSE PRINT "Aborted" ENDIF ENDPROC REM-------------------------------------------------------------------------------- DEF PROCdump FOR a% = 0 TO (secsize% - 64) STEP 64 a$ = " " FOR b% = 0 TO 63 c% = M%?(a% + b%) IF c% < 32 OR c% = 127 THEN a$ += "." ELSE a$ += CHR$c% ENDIF NEXT PRINT a$ NEXT ENDPROC