mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Code restyling.
This commit is contained in:
@@ -39,11 +39,8 @@ namespace Aaru.DiscImages
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||
enum RayDiskTypes : byte
|
||||
{
|
||||
Md2dd = 1,
|
||||
Md2hd = 2,
|
||||
Mf2dd = 3,
|
||||
Mf2hd = 4,
|
||||
Mf2ed = 5
|
||||
Md2dd = 1, Md2hd = 2, Mf2dd = 3,
|
||||
Mf2hd = 4, Mf2ed = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,8 @@ namespace Aaru.DiscImages
|
||||
{
|
||||
Stream stream = imageFilter.GetDataForkStream();
|
||||
|
||||
if(stream.Length < Marshal.SizeOf<RayHdr>()) return false;
|
||||
if(stream.Length < Marshal.SizeOf<RayHdr>())
|
||||
return false;
|
||||
|
||||
byte[] buffer = new byte[Marshal.SizeOf<RayHdr>()];
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
@@ -55,17 +56,20 @@ namespace Aaru.DiscImages
|
||||
string signature = StringHandlers.CToString(header.signature);
|
||||
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.signature = {0}", signature);
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.diskType = {0}", header.diskType);
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.heads = {0}", header.heads);
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.cylinders = {0}", header.cylinders);
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.sectorsPerTrack = {0}",
|
||||
header.sectorsPerTrack);
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.diskType = {0}", header.diskType);
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.heads = {0}", header.heads);
|
||||
|
||||
Regex sx = new Regex(REGEX_SIGNATURE);
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.cylinders = {0}",
|
||||
header.cylinders);
|
||||
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.sectorsPerTrack = {0}",
|
||||
header.sectorsPerTrack);
|
||||
|
||||
var sx = new Regex(REGEX_SIGNATURE);
|
||||
Match sm = sx.Match(signature);
|
||||
|
||||
AaruConsole.DebugWriteLine("Ray Arachelian's Disk IMage plugin", "header.signature matches? = {0}",
|
||||
sm.Success);
|
||||
sm.Success);
|
||||
|
||||
return sm.Success;
|
||||
}
|
||||
|
||||
@@ -41,32 +41,36 @@ namespace Aaru.DiscImages
|
||||
{
|
||||
public partial class RayDim
|
||||
{
|
||||
public string Name => "Ray Arachelian's Disk IMage";
|
||||
public Guid Id => new Guid("F541F4E7-C1E3-4A2D-B07F-D863E87AB961");
|
||||
public ImageInfo Info => imageInfo;
|
||||
public string Author => "Natalia Portillo";
|
||||
public string Format => "Ray Arachelian's Disk IMage";
|
||||
public List<DumpHardwareType> DumpHardware => null;
|
||||
public CICMMetadataType CicmMetadata => null;
|
||||
public IEnumerable<MediaTagType> SupportedMediaTags => new MediaTagType[] { };
|
||||
public IEnumerable<SectorTagType> SupportedSectorTags => new SectorTagType[] { };
|
||||
public string Name => "Ray Arachelian's Disk IMage";
|
||||
public Guid Id => new Guid("F541F4E7-C1E3-4A2D-B07F-D863E87AB961");
|
||||
public ImageInfo Info => imageInfo;
|
||||
public string Author => "Natalia Portillo";
|
||||
public string Format => "Ray Arachelian's Disk IMage";
|
||||
public List<DumpHardwareType> DumpHardware => null;
|
||||
public CICMMetadataType CicmMetadata => null;
|
||||
public IEnumerable<MediaTagType> SupportedMediaTags => new MediaTagType[]
|
||||
{};
|
||||
public IEnumerable<SectorTagType> SupportedSectorTags => new SectorTagType[]
|
||||
{};
|
||||
|
||||
// TODO: Test with real hardware to see real supported media
|
||||
public IEnumerable<MediaType> SupportedMediaTypes =>
|
||||
new[]
|
||||
{
|
||||
MediaType.Apricot_35, MediaType.ATARI_35_DS_DD, MediaType.ATARI_35_DS_DD_11,
|
||||
MediaType.ATARI_35_SS_DD, MediaType.ATARI_35_SS_DD_11, MediaType.DMF, MediaType.DMF_82,
|
||||
MediaType.DOS_35_DS_DD_8, MediaType.DOS_35_DS_DD_9, MediaType.DOS_35_ED, MediaType.DOS_35_HD,
|
||||
MediaType.DOS_35_SS_DD_8, MediaType.DOS_35_SS_DD_9, MediaType.DOS_525_DS_DD_8,
|
||||
MediaType.DOS_525_DS_DD_9, MediaType.DOS_525_HD, MediaType.DOS_525_SS_DD_8,
|
||||
MediaType.DOS_525_SS_DD_9, MediaType.FDFORMAT_35_DD, MediaType.FDFORMAT_35_HD,
|
||||
MediaType.FDFORMAT_525_DD, MediaType.FDFORMAT_525_HD, MediaType.RX50, MediaType.XDF_35,
|
||||
MediaType.XDF_525
|
||||
};
|
||||
public IEnumerable<MediaType> SupportedMediaTypes => new[]
|
||||
{
|
||||
MediaType.Apricot_35, MediaType.ATARI_35_DS_DD, MediaType.ATARI_35_DS_DD_11, MediaType.ATARI_35_SS_DD,
|
||||
MediaType.ATARI_35_SS_DD_11, MediaType.DMF, MediaType.DMF_82, MediaType.DOS_35_DS_DD_8,
|
||||
MediaType.DOS_35_DS_DD_9, MediaType.DOS_35_ED, MediaType.DOS_35_HD, MediaType.DOS_35_SS_DD_8,
|
||||
MediaType.DOS_35_SS_DD_9, MediaType.DOS_525_DS_DD_8, MediaType.DOS_525_DS_DD_9, MediaType.DOS_525_HD,
|
||||
MediaType.DOS_525_SS_DD_8, MediaType.DOS_525_SS_DD_9, MediaType.FDFORMAT_35_DD, MediaType.FDFORMAT_35_HD,
|
||||
MediaType.FDFORMAT_525_DD, MediaType.FDFORMAT_525_HD, MediaType.RX50, MediaType.XDF_35, MediaType.XDF_525
|
||||
};
|
||||
public IEnumerable<(string name, Type type, string description, object @default)> SupportedOptions =>
|
||||
new (string name, Type type, string description, object @default)[] { };
|
||||
public IEnumerable<string> KnownExtensions => new[] {".dim"};
|
||||
public bool IsWriting { get; private set; }
|
||||
public string ErrorMessage { get; private set; }
|
||||
new (string name, Type type, string description, object @default)[]
|
||||
{};
|
||||
public IEnumerable<string> KnownExtensions => new[]
|
||||
{
|
||||
".dim"
|
||||
};
|
||||
public bool IsWriting { get; private set; }
|
||||
public string ErrorMessage { get; private set; }
|
||||
}
|
||||
}
|
||||
@@ -44,29 +44,17 @@ namespace Aaru.DiscImages
|
||||
ImageInfo imageInfo;
|
||||
FileStream writingStream;
|
||||
|
||||
public RayDim()
|
||||
public RayDim() => imageInfo = new ImageInfo
|
||||
{
|
||||
imageInfo = new ImageInfo
|
||||
{
|
||||
ReadableSectorTags = new List<SectorTagType>(),
|
||||
ReadableMediaTags = new List<MediaTagType>(),
|
||||
HasPartitions = false,
|
||||
HasSessions = false,
|
||||
Application = "Ray Arachelian's Disk IMage",
|
||||
Creator = null,
|
||||
Comments = null,
|
||||
MediaManufacturer = null,
|
||||
MediaModel = null,
|
||||
MediaSerialNumber = null,
|
||||
MediaBarcode = null,
|
||||
MediaPartNumber = null,
|
||||
MediaSequence = 0,
|
||||
LastMediaSequence = 0,
|
||||
DriveManufacturer = null,
|
||||
DriveModel = null,
|
||||
DriveSerialNumber = null,
|
||||
DriveFirmwareRevision = null
|
||||
};
|
||||
}
|
||||
ReadableSectorTags = new List<SectorTagType>(), ReadableMediaTags = new List<MediaTagType>(),
|
||||
HasPartitions = false, HasSessions = false,
|
||||
Application = "Ray Arachelian's Disk IMage", Creator = null,
|
||||
Comments = null, MediaManufacturer = null, MediaModel = null,
|
||||
MediaSerialNumber = null,
|
||||
MediaBarcode = null, MediaPartNumber = null, MediaSequence = 0,
|
||||
LastMediaSequence = 0,
|
||||
DriveManufacturer = null, DriveModel = null, DriveSerialNumber = null,
|
||||
DriveFirmwareRevision = null
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,8 @@ namespace Aaru.DiscImages
|
||||
{
|
||||
Stream stream = imageFilter.GetDataForkStream();
|
||||
|
||||
if(stream.Length < Marshal.SizeOf<RayHdr>()) return false;
|
||||
if(stream.Length < Marshal.SizeOf<RayHdr>())
|
||||
return false;
|
||||
|
||||
byte[] buffer = new byte[Marshal.SizeOf<RayHdr>()];
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
@@ -56,10 +57,11 @@ namespace Aaru.DiscImages
|
||||
|
||||
string signature = StringHandlers.CToString(header.signature);
|
||||
|
||||
Regex sx = new Regex(REGEX_SIGNATURE);
|
||||
var sx = new Regex(REGEX_SIGNATURE);
|
||||
Match sm = sx.Match(signature);
|
||||
|
||||
if(!sm.Success) return false;
|
||||
if(!sm.Success)
|
||||
return false;
|
||||
|
||||
imageInfo.ApplicationVersion = $"{sm.Groups["major"].Value}.{sm.Groups["minor"].Value}";
|
||||
|
||||
@@ -88,13 +90,16 @@ namespace Aaru.DiscImages
|
||||
case MediaType.NEC_525_HD
|
||||
when header.diskType == RayDiskTypes.Mf2hd || header.diskType == RayDiskTypes.Mf2ed:
|
||||
imageInfo.MediaType = MediaType.NEC_35_HD_8;
|
||||
|
||||
break;
|
||||
case MediaType.DOS_525_HD
|
||||
when header.diskType == RayDiskTypes.Mf2hd || header.diskType == RayDiskTypes.Mf2ed:
|
||||
imageInfo.MediaType = MediaType.NEC_35_HD_15;
|
||||
|
||||
break;
|
||||
case MediaType.RX50 when header.diskType == RayDiskTypes.Md2dd || header.diskType == RayDiskTypes.Md2hd:
|
||||
imageInfo.MediaType = MediaType.ATARI_35_SS_DD;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,53 +46,60 @@ namespace Aaru.DiscImages
|
||||
public partial class RayDim
|
||||
{
|
||||
public bool Create(string path, MediaType mediaType, Dictionary<string, string> options, ulong sectors,
|
||||
uint sectorSize)
|
||||
uint sectorSize)
|
||||
{
|
||||
if(sectorSize != 512)
|
||||
{
|
||||
ErrorMessage = "Unsupported sector size";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(sectors > 255 * 255 * 255)
|
||||
{
|
||||
ErrorMessage = "Too many sectors";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!SupportedMediaTypes.Contains(mediaType))
|
||||
{
|
||||
ErrorMessage = $"Unsupport media format {mediaType}";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
(ushort cylinders, byte heads, ushort sectorsPerTrack, uint bytesPerSector, MediaEncoding encoding, bool
|
||||
variableSectorsPerTrack, MediaType type) geometry = Geometry.GetGeometry(mediaType);
|
||||
|
||||
imageInfo = new ImageInfo
|
||||
{
|
||||
MediaType = mediaType,
|
||||
SectorSize = sectorSize,
|
||||
Sectors = sectors,
|
||||
Cylinders = geometry.cylinders,
|
||||
Heads = geometry.heads,
|
||||
SectorsPerTrack = geometry.sectorsPerTrack
|
||||
MediaType = mediaType, SectorSize = sectorSize, Sectors = sectors,
|
||||
Cylinders = geometry.cylinders,
|
||||
Heads = geometry.heads, SectorsPerTrack = geometry.sectorsPerTrack
|
||||
};
|
||||
|
||||
try { writingStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); }
|
||||
try
|
||||
{
|
||||
writingStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
|
||||
}
|
||||
catch(IOException e)
|
||||
{
|
||||
ErrorMessage = $"Could not create new image file, exception {e.Message}";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
IsWriting = true;
|
||||
ErrorMessage = null;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool WriteMediaTag(byte[] data, MediaTagType tag)
|
||||
{
|
||||
ErrorMessage = "Writing media tags is not supported.";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -101,26 +108,31 @@ namespace Aaru.DiscImages
|
||||
if(!IsWriting)
|
||||
{
|
||||
ErrorMessage = "Tried to write on a non-writable image";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.Length != 512)
|
||||
{
|
||||
ErrorMessage = "Incorrect data size";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(sectorAddress >= imageInfo.Sectors)
|
||||
{
|
||||
ErrorMessage = "Tried to write past image size";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
writingStream.Seek((long)((ulong)Marshal.SizeOf<RayHdr>() + sectorAddress * imageInfo.SectorSize),
|
||||
writingStream.Seek((long)((ulong)Marshal.SizeOf<RayHdr>() + (sectorAddress * imageInfo.SectorSize)),
|
||||
SeekOrigin.Begin);
|
||||
|
||||
writingStream.Write(data, 0, data.Length);
|
||||
|
||||
ErrorMessage = "";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -129,38 +141,45 @@ namespace Aaru.DiscImages
|
||||
if(!IsWriting)
|
||||
{
|
||||
ErrorMessage = "Tried to write on a non-writable image";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.Length % 512 != 0)
|
||||
{
|
||||
ErrorMessage = "Incorrect data size";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if(sectorAddress + length > imageInfo.Sectors)
|
||||
{
|
||||
ErrorMessage = "Tried to write past image size";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
writingStream.Seek((long)((ulong)Marshal.SizeOf<RayHdr>() + sectorAddress * imageInfo.SectorSize),
|
||||
writingStream.Seek((long)((ulong)Marshal.SizeOf<RayHdr>() + (sectorAddress * imageInfo.SectorSize)),
|
||||
SeekOrigin.Begin);
|
||||
|
||||
writingStream.Write(data, 0, data.Length);
|
||||
|
||||
ErrorMessage = "";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool WriteSectorLong(byte[] data, ulong sectorAddress)
|
||||
{
|
||||
ErrorMessage = "Writing sectors with tags is not supported.";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool WriteSectorsLong(byte[] data, ulong sectorAddress, uint length)
|
||||
{
|
||||
ErrorMessage = "Writing sectors with tags is not supported.";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -169,12 +188,14 @@ namespace Aaru.DiscImages
|
||||
public bool WriteSectorTag(byte[] data, ulong sectorAddress, SectorTagType tag)
|
||||
{
|
||||
ErrorMessage = "Unsupported feature";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool WriteSectorsTag(byte[] data, ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
ErrorMessage = "Unsupported feature";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -187,19 +208,20 @@ namespace Aaru.DiscImages
|
||||
if(!IsWriting)
|
||||
{
|
||||
ErrorMessage = "Image is not opened for writing";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
string headerSignature =
|
||||
$"Disk IMage VER 1.0 Copyright (C) {DateTime.Now.Year:D4} Ray Arachelian, All Rights Reserved. Aaru ";
|
||||
RayHdr header = new RayHdr
|
||||
|
||||
var header = new RayHdr
|
||||
{
|
||||
signature = Encoding.ASCII.GetBytes(headerSignature),
|
||||
cylinders = (byte)imageInfo.Cylinders,
|
||||
diskType = RayDiskTypes.Mf2ed,
|
||||
heads = (byte)imageInfo.Heads,
|
||||
signature = Encoding.ASCII.GetBytes(headerSignature), cylinders = (byte)imageInfo.Cylinders,
|
||||
diskType = RayDiskTypes.Mf2ed, heads = (byte)imageInfo.Heads,
|
||||
sectorsPerTrack = (byte)imageInfo.SectorsPerTrack
|
||||
};
|
||||
|
||||
header.signature[0x4A] = 0x00;
|
||||
|
||||
byte[] hdr = new byte[Marshal.SizeOf<RayHdr>()];
|
||||
@@ -216,6 +238,7 @@ namespace Aaru.DiscImages
|
||||
|
||||
IsWriting = false;
|
||||
ErrorMessage = "";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user