diff --git a/Aaru.Core/Devices/Dumping/ATA.cs b/Aaru.Core/Devices/Dumping/ATA.cs index 34af45c9f..cf1dc7f75 100644 --- a/Aaru.Core/Devices/Dumping/ATA.cs +++ b/Aaru.Core/Devices/Dumping/ATA.cs @@ -267,7 +267,7 @@ public partial class Dump _skip = blocksToRead; mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, - _private); + _private, _dimensions); ibgLog = new IbgLog(_outputPrefix + ".ibg", ataProfile); @@ -330,7 +330,7 @@ public partial class Dump if(!error) { - mhddLog.Write(i, duration); + mhddLog.Write(i, duration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(cmdBuf, i, blocksToRead); @@ -346,7 +346,7 @@ public partial class Dump for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b); - mhddLog.Write(i, duration < 500 ? 65535 : duration); + mhddLog.Write(i, duration < 500 ? 65535 : duration, _skip); ibgLog.Write(i, 0); DateTime writeStart = DateTime.Now; @@ -534,7 +534,7 @@ public partial class Dump else { mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, - _private); + _private, _dimensions); ibgLog = new IbgLog(_outputPrefix + ".ibg", ataProfile); @@ -595,7 +595,7 @@ public partial class Dump if(!error || recoveredError) { - mhddLog.Write(currentBlock, duration); + mhddLog.Write(currentBlock, duration, 1); ibgLog.Write(currentBlock, currentSpeed * 1024); DateTime writeStart = DateTime.Now; @@ -612,7 +612,7 @@ public partial class Dump else { _resume.BadBlocks.Add(currentBlock); - mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration); + mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration, 1); ibgLog.Write(currentBlock, 0); DateTime writeStart = DateTime.Now; diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs index 43726d2a8..54a681d34 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs @@ -242,7 +242,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i + r, cmdDuration); + mhddLog.Write(i + r, cmdDuration, 1); ibgLog.Write(i + r, currentSpeed * 1024); extents.Add(i + r, 1, true); DateTime writeStart = DateTime.Now; @@ -324,7 +324,7 @@ partial class Dump FixOffsetData(offsetBytes, sectorSize, sectorsForOffset, supportedSubchannel, ref blocksToRead, subSize, ref cmdBuf, blockSize, false); - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, 1); ibgLog.Write(i, currentSpeed * 1024); extents.Add(i, blocksToRead, true); DateTime writeStart = DateTime.Now; diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs index af579315a..8eaa8aeae 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs @@ -476,7 +476,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i + r, cmdDuration); + mhddLog.Write(i + r, cmdDuration, 1); ibgLog.Write(i + r, currentSpeed * 1024); extents.Add(i + r, 1, true); DateTime writeStart = DateTime.Now; @@ -596,7 +596,7 @@ partial class Dump AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf)); - mhddLog.Write(i + r, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i + r, cmdDuration < 500 ? 65535 : cmdDuration, 1); ibgLog.Write(i + r, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, 1, i + r); @@ -636,7 +636,7 @@ partial class Dump FixOffsetData(offsetBytes, sectorSize, sectorsForOffset, supportedSubchannel, ref blocksToRead, subSize, ref cmdBuf, blockSize, failedCrossingLeadOut); - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); extents.Add(i, blocksToRead, true); DateTime writeStart = DateTime.Now; @@ -774,7 +774,7 @@ partial class Dump _resume.BadBlocks.Add(b); AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf)); - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i); diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs index bcbf7e95b..20dd3374c 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -1112,7 +1112,7 @@ sealed partial class Dump sectorsForOffset = 0; } - mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private); + mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private, _dimensions); ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0008); if(_createGraph) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs index eafc13e76..806ab5fc6 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs @@ -145,7 +145,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, 1); ibgLog.Write(i, currentSpeed * 1024); extents.Add(i, _maximumReadable, true); leadOutExtents.Remove(i); @@ -207,7 +207,7 @@ partial class Dump imageWriteDuration += (DateTime.Now - writeStart).TotalSeconds; - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); } @@ -317,7 +317,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, _maximumReadable); ibgLog.Write(i, currentSpeed * 1024); extents.Add(i, _maximumReadable, true); leadOutExtents.Remove(i); @@ -380,7 +380,7 @@ partial class Dump imageWriteDuration += (DateTime.Now - writeStart).TotalSeconds; - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, 1); ibgLog.Write(i, 0); } diff --git a/Aaru.Core/Devices/Dumping/MiniDisc.cs b/Aaru.Core/Devices/Dumping/MiniDisc.cs index 4574096ec..342cde4fa 100644 --- a/Aaru.Core/Devices/Dumping/MiniDisc.cs +++ b/Aaru.Core/Devices/Dumping/MiniDisc.cs @@ -263,7 +263,7 @@ partial class Dump UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead)); _dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead); - var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private); + var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions); var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile); ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize); @@ -418,7 +418,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(readBuffer, i, blocksToRead); @@ -443,7 +443,7 @@ partial class Dump for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b); - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i); diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs index a165600d0..a3e5bb3b1 100644 --- a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs +++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs @@ -158,7 +158,7 @@ public partial class Dump bool ret; - var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private); + var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions); var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile); ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize); @@ -251,7 +251,7 @@ public partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(readBuffer, i, blocksToRead); @@ -278,7 +278,7 @@ public partial class Dump for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b); - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i); diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs index d05baa238..7562aadbf 100644 --- a/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs +++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs @@ -158,7 +158,7 @@ public partial class Dump bool ret; - var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private); + var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions); var ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0010); ret = outputOptical.Create(_outputPath, dskType, _formatOptions, blocks, blockSize); @@ -265,7 +265,7 @@ public partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputOptical.WriteSectors(readBuffer, i, blocksToRead); @@ -292,7 +292,7 @@ public partial class Dump for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b); - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i); diff --git a/Aaru.Core/Devices/Dumping/Sbc/Data.cs b/Aaru.Core/Devices/Dumping/Sbc/Data.cs index 4376c4042..dcc861dd2 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Data.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Data.cs @@ -208,7 +208,7 @@ partial class Dump } } - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(buffer, i, blocksToRead); @@ -249,7 +249,7 @@ partial class Dump for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b); - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i); diff --git a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs index 512e65b2f..c53af4e06 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs @@ -369,7 +369,7 @@ partial class Dump UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead)); _dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead); - var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private); + var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions); var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile); bool imageCreated = false; diff --git a/Aaru.Core/Devices/Dumping/Sbc/Optical.cs b/Aaru.Core/Devices/Dumping/Sbc/Optical.cs index ccca6e002..6e8953de0 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Optical.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Optical.cs @@ -215,7 +215,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(buffer, i, blocksToRead); @@ -239,7 +239,7 @@ partial class Dump for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b); - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i); diff --git a/Aaru.Core/Devices/Dumping/SecureDigital.cs b/Aaru.Core/Devices/Dumping/SecureDigital.cs index 56dcc979d..774ab3ba7 100644 --- a/Aaru.Core/Devices/Dumping/SecureDigital.cs +++ b/Aaru.Core/Devices/Dumping/SecureDigital.cs @@ -457,7 +457,7 @@ public partial class Dump } } - var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private); + var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions); var ibgLog = new IbgLog(_outputPrefix + ".ibg", sdProfile); ret = outputFormat.Create(_outputPath, @@ -665,7 +665,7 @@ public partial class Dump if(!error) { - mhddLog.Write(i, duration); + mhddLog.Write(i, duration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(cmdBuf, i, blocksToRead); @@ -683,7 +683,7 @@ public partial class Dump for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b); - mhddLog.Write(i, duration < 500 ? 65535 : duration); + mhddLog.Write(i, duration < 500 ? 65535 : duration, _skip); ibgLog.Write(i, 0); DateTime writeStart = DateTime.Now; diff --git a/Aaru.Core/Devices/Dumping/XGD.cs b/Aaru.Core/Devices/Dumping/XGD.cs index 403a7626d..88ca5ea23 100644 --- a/Aaru.Core/Devices/Dumping/XGD.cs +++ b/Aaru.Core/Devices/Dumping/XGD.cs @@ -498,7 +498,7 @@ partial class Dump _dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead); UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead)); - var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private); + var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions); var ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0010); ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize); @@ -654,7 +654,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(readBuffer, i, blocksToRead); @@ -684,7 +684,7 @@ partial class Dump AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf)); - mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(i, 0); @@ -733,7 +733,7 @@ partial class Dump if(extentEnd - i < blocksToRead) blocksToRead = (uint)(extentEnd - i) + 1; - mhddLog.Write(i, cmdDuration); + mhddLog.Write(i, cmdDuration, blocksToRead); ibgLog.Write(i, currentSpeed * 1024); // Write empty data @@ -778,7 +778,7 @@ partial class Dump Invoke(string.Format(Localization.Core.Reading_sector_0_of_1_2_MiB_sec, middle + currentSector, totalSize, currentSpeed), (long)(middle + currentSector), (long)totalSize); - mhddLog.Write(middle + currentSector, cmdDuration); + mhddLog.Write(middle + currentSector, cmdDuration, blocksToRead); ibgLog.Write(middle + currentSector, currentSpeed * 1024); // Write empty data @@ -855,7 +855,7 @@ partial class Dump if(!sense && !_dev.Error) { - mhddLog.Write(currentSector, cmdDuration); + mhddLog.Write(currentSector, cmdDuration, blocksToRead); ibgLog.Write(currentSector, currentSpeed * 1024); DateTime writeStart = DateTime.Now; outputFormat.WriteSectors(readBuffer, currentSector, blocksToRead); @@ -880,7 +880,7 @@ partial class Dump //errored += blocksToRead; //resume.BadBlocks.Add(l1); AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf)); - mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration); + mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration, _skip); ibgLog.Write(l1, 0); _dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, l1); diff --git a/Aaru.Core/Logging/MHDDLog.cs b/Aaru.Core/Logging/MHDDLog.cs index afc0f4423..f7fb8c44c 100644 --- a/Aaru.Core/Logging/MHDDLog.cs +++ b/Aaru.Core/Logging/MHDDLog.cs @@ -35,6 +35,8 @@ using System.Globalization; using System.IO; using System.Text; using Aaru.CommonTypes.Enums; +using Aaru.CommonTypes.Interfaces; +using Aaru.Core.Graphics; using Aaru.Devices; namespace Aaru.Core.Logging; @@ -45,6 +47,7 @@ sealed class MhddLog const string MHDD_VER = "VER:2 "; readonly string _logFile; readonly MemoryStream _mhddFs; + readonly IMediaGraph _mediaGraph; /// Initializes the MHDD log /// Log file @@ -53,12 +56,15 @@ sealed class MhddLog /// Bytes per block /// How many blocks read at once /// Disable saving paths or serial numbers in log - internal MhddLog(string outputFile, Device dev, ulong blocks, ulong blockSize, ulong blocksToRead, bool @private) + internal MhddLog(string outputFile, Device dev, ulong blocks, ulong blockSize, ulong blocksToRead, bool @private, uint mediaGraphDimensions = 0) { if(dev == null || string.IsNullOrEmpty(outputFile)) return; + if(mediaGraphDimensions > 0) + _mediaGraph = new BlockMap((int)mediaGraphDimensions, (int)mediaGraphDimensions, blocks); + _mhddFs = new MemoryStream(); _logFile = outputFile; @@ -142,7 +148,7 @@ sealed class MhddLog /// Logs a new read /// Starting sector /// Duration in milliseconds - internal void Write(ulong sector, double duration) + internal void Write(ulong sector, double duration, uint length = 1) { if(_logFile == null) return; @@ -152,6 +158,28 @@ sealed class MhddLog _mhddFs.Write(sectorBytes, 0, 8); _mhddFs.Write(durationBytes, 0, 8); + + switch(duration) + { + case < 3: _mediaGraph?.PaintSectors(sector, length, 0x00, 0xFF, 0x00); + + break; + case >= 3 and < 10: _mediaGraph?.PaintSectors(sector, length, 0x80, 0xFF, 0x00); + + break; + case >= 10 and < 50: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0xFF, 0x00); + + break; + case >= 50 and < 150: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0xAB, 0x00); + + break; + case >= 150 and < 500: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0x56, 0x00); + + break; + case >= 500: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0x00, 0x00); + + break; + } } /// Closes and writes to file the MHDD log @@ -164,5 +192,7 @@ sealed class MhddLog _mhddFs.WriteTo(fs); _mhddFs.Close(); fs.Close(); + + _mediaGraph?.WriteTo(Path.GetFileNameWithoutExtension(_logFile) + ".png"); } } \ No newline at end of file