Split apple sector tags in specific types.

This commit is contained in:
2025-10-18 16:17:35 +01:00
parent 7c4a069c39
commit c7d2fe85c1
20 changed files with 206 additions and 194 deletions

View File

@@ -74,7 +74,7 @@ public sealed partial class Blu
/// <inheritdoc />
public IEnumerable<SectorTagType> SupportedSectorTags => new[]
{
SectorTagType.AppleSectorTag
SectorTagType.AppleSonyTag
};
/// <inheritdoc />

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -70,7 +70,7 @@ public sealed partial class DiskCopy42
/// <inheritdoc />
public IEnumerable<SectorTagType> SupportedSectorTags => new[]
{
SectorTagType.AppleSectorTag
SectorTagType.AppleSonyTag
};
/// <inheritdoc />

View File

@@ -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;