mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Split apple sector tags in specific types.
This commit is contained in:
@@ -74,7 +74,7 @@ public sealed partial class Blu
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<SectorTagType> SupportedSectorTags => new[]
|
||||
{
|
||||
SectorTagType.AppleSectorTag
|
||||
SectorTagType.AppleSonyTag
|
||||
};
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -57,7 +57,7 @@ public sealed partial class Blu
|
||||
DeviceName = new byte[0x0D]
|
||||
};
|
||||
|
||||
byte[] header = new byte[0x17];
|
||||
var header = new byte[0x17];
|
||||
stream.EnsureRead(header, 0, 0x17);
|
||||
Array.Copy(header, 0, _imageHeader.DeviceName, 0, 0x0D);
|
||||
_imageHeader.DeviceType = BigEndianBitConverter.ToUInt32(header, 0x0C) & 0x00FFFFFF;
|
||||
@@ -65,17 +65,16 @@ public sealed partial class Blu
|
||||
_imageHeader.BytesPerBlock = BigEndianBitConverter.ToUInt16(header, 0x15);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"ImageHeader.deviceName = \"{0}\"",
|
||||
StringHandlers.CToString(_imageHeader.DeviceName));
|
||||
"ImageHeader.deviceName = \"{0}\"",
|
||||
StringHandlers.CToString(_imageHeader.DeviceName));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "ImageHeader.deviceType = {0}", _imageHeader.DeviceType);
|
||||
AaruLogging.Debug(MODULE_NAME, "ImageHeader.deviceBlock = {0}", _imageHeader.DeviceBlocks);
|
||||
AaruLogging.Debug(MODULE_NAME, "ImageHeader.bytesPerBlock = {0}", _imageHeader.BytesPerBlock);
|
||||
|
||||
for(int i = 0; i < 0xD; i++)
|
||||
{
|
||||
if(_imageHeader.DeviceName[i] < 0x20) return ErrorNumber.InvalidArgument;
|
||||
}
|
||||
for(var i = 0; i < 0xD; i++)
|
||||
if(_imageHeader.DeviceName[i] < 0x20)
|
||||
return ErrorNumber.InvalidArgument;
|
||||
|
||||
if((_imageHeader.BytesPerBlock & 0xFE00) != 0x200) return ErrorNumber.InvalidArgument;
|
||||
|
||||
@@ -88,7 +87,7 @@ public sealed partial class Blu
|
||||
_imageInfo.Sectors = _imageHeader.DeviceBlocks;
|
||||
_imageInfo.ImageSize = _imageHeader.DeviceBlocks * _imageHeader.BytesPerBlock;
|
||||
_bptag = _imageHeader.BytesPerBlock - 0x200;
|
||||
byte[] hdrTag = new byte[_bptag];
|
||||
var hdrTag = new byte[_bptag];
|
||||
Array.Copy(header, 0x200, hdrTag, 0, _bptag);
|
||||
|
||||
switch(StringHandlers.CToString(_imageHeader.DeviceName))
|
||||
@@ -147,7 +146,7 @@ public sealed partial class Blu
|
||||
|
||||
_imageInfo.MetadataMediaType = MetadataMediaType.BlockMedia;
|
||||
|
||||
if(_bptag > 0) _imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSectorTag);
|
||||
if(_bptag > 0) _imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSonyTag);
|
||||
|
||||
AaruLogging.Verbose(Localization.BLU_image_contains_a_disk_of_type_0, _imageInfo.MediaType);
|
||||
|
||||
@@ -177,9 +176,9 @@ public sealed partial class Blu
|
||||
Stream stream = _bluImageFilter.GetDataForkStream();
|
||||
stream.Seek((long)((sectorAddress + 1) * _imageHeader.BytesPerBlock), SeekOrigin.Begin);
|
||||
|
||||
for(int i = 0; i < length; i++)
|
||||
for(var i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[read];
|
||||
var sector = new byte[read];
|
||||
stream.EnsureRead(sector, 0, read);
|
||||
ms.Write(sector, 0, read);
|
||||
stream.Seek(skip, SeekOrigin.Current);
|
||||
@@ -195,7 +194,7 @@ public sealed partial class Blu
|
||||
{
|
||||
buffer = null;
|
||||
|
||||
if(tag != SectorTagType.AppleSectorTag) return ErrorNumber.NotSupported;
|
||||
if(tag != SectorTagType.AppleSonyTag) return ErrorNumber.NotSupported;
|
||||
|
||||
if(_bptag == 0) return ErrorNumber.NoData;
|
||||
|
||||
@@ -210,10 +209,10 @@ public sealed partial class Blu
|
||||
Stream stream = _bluImageFilter.GetDataForkStream();
|
||||
stream.Seek((long)((sectorAddress + 1) * _imageHeader.BytesPerBlock), SeekOrigin.Begin);
|
||||
|
||||
for(int i = 0; i < length; i++)
|
||||
for(var i = 0; i < length; i++)
|
||||
{
|
||||
stream.Seek(seek, SeekOrigin.Current);
|
||||
byte[] sector = new byte[read];
|
||||
var sector = new byte[read];
|
||||
stream.EnsureRead(sector, 0, read);
|
||||
ms.Write(sector, 0, read);
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ public sealed partial class Dart
|
||||
if(stream.Length < 84) return ErrorNumber.InvalidArgument;
|
||||
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
byte[] headerB = new byte[Marshal.SizeOf<Header>()];
|
||||
var headerB = new byte[Marshal.SizeOf<Header>()];
|
||||
|
||||
stream.EnsureRead(headerB, 0, Marshal.SizeOf<Header>());
|
||||
Header header = Marshal.ByteArrayToStructureBigEndian<Header>(headerB);
|
||||
@@ -103,12 +103,12 @@ public sealed partial class Dart
|
||||
|
||||
if(stream.Length > expectedMaxSize) return ErrorNumber.InvalidArgument;
|
||||
|
||||
short[] bLength =
|
||||
var bLength =
|
||||
new short[header.srcType is DISK_MAC_HD or DISK_DOS_HD ? BLOCK_ARRAY_LEN_HIGH : BLOCK_ARRAY_LEN_LOW];
|
||||
|
||||
for(int i = 0; i < bLength.Length; i++)
|
||||
for(var i = 0; i < bLength.Length; i++)
|
||||
{
|
||||
byte[] tmpShort = new byte[2];
|
||||
var tmpShort = new byte[2];
|
||||
stream.EnsureRead(tmpShort, 0, 2);
|
||||
bLength[i] = BigEndianBitConverter.ToInt16(tmpShort, 0);
|
||||
}
|
||||
@@ -120,7 +120,7 @@ public sealed partial class Dart
|
||||
{
|
||||
if(l == 0) continue;
|
||||
|
||||
byte[] buffer = new byte[BUFFER_SIZE];
|
||||
var buffer = new byte[BUFFER_SIZE];
|
||||
|
||||
if(l == -1)
|
||||
{
|
||||
@@ -159,7 +159,7 @@ public sealed partial class Dart
|
||||
|
||||
if(header.srcType is DISK_LISA or DISK_MAC or DISK_APPLE2)
|
||||
{
|
||||
_imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSectorTag);
|
||||
_imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSonyTag);
|
||||
_tagCache = tagMs.ToArray();
|
||||
}
|
||||
|
||||
@@ -183,8 +183,8 @@ public sealed partial class Dart
|
||||
string release = null;
|
||||
string pre = null;
|
||||
|
||||
string major = $"{version.MajorVersion}";
|
||||
string minor = $".{version.MinorVersion / 10}";
|
||||
var major = $"{version.MajorVersion}";
|
||||
var minor = $".{version.MinorVersion / 10}";
|
||||
|
||||
if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}";
|
||||
|
||||
@@ -330,7 +330,7 @@ public sealed partial class Dart
|
||||
{
|
||||
buffer = null;
|
||||
|
||||
if(tag != SectorTagType.AppleSectorTag) return ErrorNumber.NotSupported;
|
||||
if(tag != SectorTagType.AppleSonyTag) return ErrorNumber.NotSupported;
|
||||
|
||||
if(_tagCache == null || _tagCache.Length == 0) return ErrorNumber.NoData;
|
||||
|
||||
@@ -362,7 +362,7 @@ public sealed partial class Dart
|
||||
|
||||
if(errno != ErrorNumber.NoError) return errno;
|
||||
|
||||
errno = ReadSectorsTag(sectorAddress, length, SectorTagType.AppleSectorTag, out byte[] tags);
|
||||
errno = ReadSectorsTag(sectorAddress, length, SectorTagType.AppleSonyTag, out byte[] tags);
|
||||
|
||||
if(errno != ErrorNumber.NoError) return errno;
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ public sealed partial class DiskCopy42
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<SectorTagType> SupportedSectorTags => new[]
|
||||
{
|
||||
SectorTagType.AppleSectorTag
|
||||
SectorTagType.AppleSonyTag
|
||||
};
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -54,8 +54,8 @@ public sealed partial class DiskCopy42
|
||||
{
|
||||
Stream stream = imageFilter.GetDataForkStream();
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
byte[] buffer = new byte[0x58];
|
||||
byte[] pString = new byte[64];
|
||||
var buffer = new byte[0x58];
|
||||
var pString = new byte[64];
|
||||
stream.EnsureRead(buffer, 0, 0x58);
|
||||
IsWriting = false;
|
||||
|
||||
@@ -154,7 +154,7 @@ public sealed partial class DiskCopy42
|
||||
return ErrorNumber.NotSupported;
|
||||
}
|
||||
|
||||
imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSectorTag);
|
||||
imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSonyTag);
|
||||
}
|
||||
|
||||
imageInfo.ImageSize = imageInfo.Sectors * imageInfo.SectorSize + imageInfo.Sectors * bptag;
|
||||
@@ -185,8 +185,8 @@ public sealed partial class DiskCopy42
|
||||
|
||||
if(imageInfo.MediaType == MediaType.AppleFileWare)
|
||||
{
|
||||
byte[] data = new byte[header.DataSize];
|
||||
byte[] tags = new byte[header.TagSize];
|
||||
var data = new byte[header.DataSize];
|
||||
var tags = new byte[header.TagSize];
|
||||
|
||||
twiggyCache = new byte[header.DataSize];
|
||||
twiggyCacheTags = new byte[header.TagSize];
|
||||
@@ -200,8 +200,8 @@ public sealed partial class DiskCopy42
|
||||
tagStream.Seek(tagOffset, SeekOrigin.Begin);
|
||||
tagStream.EnsureRead(tags, 0, (int)header.TagSize);
|
||||
|
||||
ushort mfsMagic = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x400);
|
||||
ushort mfsAllBlocks = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x412);
|
||||
var mfsMagic = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x400);
|
||||
var mfsAllBlocks = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x412);
|
||||
|
||||
// Detect a Macintosh Twiggy
|
||||
if(mfsMagic == 0xD2D7 && mfsAllBlocks == 422)
|
||||
@@ -219,10 +219,10 @@ public sealed partial class DiskCopy42
|
||||
Array.Copy(data, 0, twiggyCache, 0, header.DataSize / 2);
|
||||
Array.Copy(tags, 0, twiggyCacheTags, 0, header.TagSize / 2);
|
||||
|
||||
int copiedSectors = 0;
|
||||
int sectorsToCopy = 0;
|
||||
var copiedSectors = 0;
|
||||
var sectorsToCopy = 0;
|
||||
|
||||
for(int i = 0; i < 46; i++)
|
||||
for(var i = 0; i < 46; i++)
|
||||
{
|
||||
sectorsToCopy = i switch
|
||||
{
|
||||
@@ -272,8 +272,8 @@ public sealed partial class DiskCopy42
|
||||
string release = null;
|
||||
string pre = null;
|
||||
|
||||
string major = $"{version.MajorVersion}";
|
||||
string minor = $".{version.MinorVersion / 10}";
|
||||
var major = $"{version.MajorVersion}";
|
||||
var minor = $".{version.MinorVersion / 10}";
|
||||
|
||||
if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}";
|
||||
|
||||
@@ -437,7 +437,7 @@ public sealed partial class DiskCopy42
|
||||
{
|
||||
buffer = null;
|
||||
|
||||
if(tag != SectorTagType.AppleSectorTag) return ErrorNumber.NotSupported;
|
||||
if(tag != SectorTagType.AppleSonyTag) return ErrorNumber.NotSupported;
|
||||
|
||||
if(header.TagSize == 0) return ErrorNumber.NoData;
|
||||
|
||||
@@ -476,7 +476,7 @@ public sealed partial class DiskCopy42
|
||||
|
||||
if(errno != ErrorNumber.NoError) return errno;
|
||||
|
||||
errno = ReadSectorsTag(sectorAddress, length, SectorTagType.AppleSectorTag, out byte[] tags);
|
||||
errno = ReadSectorsTag(sectorAddress, length, SectorTagType.AppleSonyTag, out byte[] tags);
|
||||
|
||||
if(errno != ErrorNumber.NoError) return errno;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user