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

@@ -88,8 +88,8 @@ public enum TrackSubchannelType : byte
/// <summary>Metadata present for each sector (aka, "tag").</summary> /// <summary>Metadata present for each sector (aka, "tag").</summary>
public enum SectorTagType public enum SectorTagType
{ {
/// <summary>Apple's GCR sector tags, 12 bytes</summary> /// <summary>Apple's Sony GCR sector tags, 12 bytes</summary>
AppleSectorTag = 0, AppleSonyTag = 0,
/// <summary>Sync frame from CD sector, 12 bytes</summary> /// <summary>Sync frame from CD sector, 12 bytes</summary>
CdSectorSync = 1, CdSectorSync = 1,
/// <summary>CD sector header, 4 bytes</summary> /// <summary>CD sector header, 4 bytes</summary>
@@ -127,7 +127,11 @@ public enum SectorTagType
/// <summary>DVD sector ID error detection, 2 bytes</summary> /// <summary>DVD sector ID error detection, 2 bytes</summary>
DvdSectorIed = 18, DvdSectorIed = 18,
/// <summary>DVD sector EDC, 4 bytes</summary> /// <summary>DVD sector EDC, 4 bytes</summary>
DvdSectorEdc = 19 DvdSectorEdc = 19,
/// <summary>Apple's Profile sector tag, 20 bytes</summary>
AppleProfileTag = 20,
/// <summary>Priam Data Tower sector tag, 24 bytes</summary>
PriamDataTowerTag = 21
} }
/// <summary>Metadata present for each media.</summary> /// <summary>Metadata present for each media.</summary>

View File

@@ -325,7 +325,7 @@ public sealed partial class AppleMFS
_volMdb.drAlBlSt + _volMdb.drAlBlSt +
_partitionStart, _partitionStart,
(uint)_sectorsPerBlock, (uint)_sectorsPerBlock,
SectorTagType.AppleSectorTag, SectorTagType.AppleSonyTag,
out byte[] sectors) out byte[] sectors)
: _device.ReadSectors((ulong)((nextBlock - 2) * _sectorsPerBlock) + : _device.ReadSectors((ulong)((nextBlock - 2) * _sectorsPerBlock) +
_volMdb.drAlBlSt + _volMdb.drAlBlSt +

View File

@@ -84,7 +84,7 @@ public sealed partial class AppleMFS
_volMdb.drNxtFNum = BigEndianBitConverter.ToUInt32(_mdbBlocks, 0x01E); _volMdb.drNxtFNum = BigEndianBitConverter.ToUInt32(_mdbBlocks, 0x01E);
_volMdb.drFreeBks = BigEndianBitConverter.ToUInt16(_mdbBlocks, 0x022); _volMdb.drFreeBks = BigEndianBitConverter.ToUInt16(_mdbBlocks, 0x022);
_volMdb.drVNSiz = _mdbBlocks[0x024]; _volMdb.drVNSiz = _mdbBlocks[0x024];
byte[] variableSize = new byte[_volMdb.drVNSiz + 1]; var variableSize = new byte[_volMdb.drVNSiz + 1];
Array.Copy(_mdbBlocks, 0x024, variableSize, 0, _volMdb.drVNSiz + 1); Array.Copy(_mdbBlocks, 0x024, variableSize, 0, _volMdb.drVNSiz + 1);
_volMdb.drVN = StringHandlers.PascalToString(variableSize, _encoding); _volMdb.drVN = StringHandlers.PascalToString(variableSize, _encoding);
@@ -105,10 +105,10 @@ public sealed partial class AppleMFS
_blockMapBytes = new byte[bytesInBlockMap]; _blockMapBytes = new byte[bytesInBlockMap];
Array.Copy(wholeMdb, BYTES_BEFORE_BLOCK_MAP, _blockMapBytes, 0, _blockMapBytes.Length); Array.Copy(wholeMdb, BYTES_BEFORE_BLOCK_MAP, _blockMapBytes, 0, _blockMapBytes.Length);
int offset = 0; var offset = 0;
_blockMap = new uint[_volMdb.drNmAlBlks + 2 + 1]; _blockMap = new uint[_volMdb.drNmAlBlks + 2 + 1];
for(int i = 2; i < _volMdb.drNmAlBlks + 2; i += 8) for(var i = 2; i < _volMdb.drNmAlBlks + 2; i += 8)
{ {
uint tmp1 = 0; uint tmp1 = 0;
uint tmp2 = 0; uint tmp2 = 0;
@@ -141,19 +141,19 @@ public sealed partial class AppleMFS
offset += 12; offset += 12;
} }
if(_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag)) if(_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSonyTag))
{ {
_device.ReadSectorTag(2 + _partitionStart, SectorTagType.AppleSectorTag, out _mdbTags); _device.ReadSectorTag(2 + _partitionStart, SectorTagType.AppleSonyTag, out _mdbTags);
_device.ReadSectorTag(0 + _partitionStart, SectorTagType.AppleSectorTag, out _bootTags); _device.ReadSectorTag(0 + _partitionStart, SectorTagType.AppleSonyTag, out _bootTags);
_device.ReadSectorsTag(_volMdb.drDirSt + _partitionStart, _device.ReadSectorsTag(_volMdb.drDirSt + _partitionStart,
_volMdb.drBlLen, _volMdb.drBlLen,
SectorTagType.AppleSectorTag, SectorTagType.AppleSonyTag,
out _directoryTags); out _directoryTags);
_device.ReadSectorsTag(_partitionStart + 2, _device.ReadSectorsTag(_partitionStart + 2,
(uint)sectorsInWholeMdb, (uint)sectorsInWholeMdb,
SectorTagType.AppleSectorTag, SectorTagType.AppleSonyTag,
out _bitmapTags); out _bitmapTags);
} }
@@ -163,7 +163,7 @@ public sealed partial class AppleMFS
_mounted = true; _mounted = true;
ushort bbSig = BigEndianBitConverter.ToUInt16(_bootBlocks, 0x000); var bbSig = BigEndianBitConverter.ToUInt16(_bootBlocks, 0x000);
if(bbSig != AppleCommon.BB_MAGIC) _bootBlocks = null; if(bbSig != AppleCommon.BB_MAGIC) _bootBlocks = null;

View File

@@ -69,7 +69,7 @@ public sealed partial class AppleMFS
string.Compare(path, "$Boot", StringComparison.InvariantCulture) == 0 || string.Compare(path, "$Boot", StringComparison.InvariantCulture) == 0 ||
string.Compare(path, "$MDB", StringComparison.InvariantCulture) == 0) string.Compare(path, "$MDB", StringComparison.InvariantCulture) == 0)
{ {
if(_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag)) if(_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSonyTag))
xattrs.Add("com.apple.macintosh.tags"); xattrs.Add("com.apple.macintosh.tags");
return ErrorNumber.NoError; return ErrorNumber.NoError;
@@ -84,13 +84,13 @@ public sealed partial class AppleMFS
{ {
xattrs.Add("com.apple.ResourceFork"); xattrs.Add("com.apple.ResourceFork");
if(_debug && _device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag)) if(_debug && _device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSonyTag))
xattrs.Add("com.apple.ResourceFork.tags"); xattrs.Add("com.apple.ResourceFork.tags");
} }
xattrs.Add("com.apple.FinderInfo"); xattrs.Add("com.apple.FinderInfo");
if(_debug && _device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag) && entry.flLgLen > 0) if(_debug && _device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSonyTag) && entry.flLgLen > 0)
xattrs.Add("com.apple.macintosh.tags"); xattrs.Add("com.apple.macintosh.tags");
xattrs.Sort(); xattrs.Sort();
@@ -120,7 +120,7 @@ public sealed partial class AppleMFS
string.Compare(path, "$Boot", StringComparison.InvariantCulture) == 0 || string.Compare(path, "$Boot", StringComparison.InvariantCulture) == 0 ||
string.Compare(path, "$MDB", StringComparison.InvariantCulture) == 0) string.Compare(path, "$MDB", StringComparison.InvariantCulture) == 0)
{ {
if(_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag) && if(_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSonyTag) &&
string.Compare(xattr, "com.apple.macintosh.tags", StringComparison.InvariantCulture) == 0) string.Compare(xattr, "com.apple.macintosh.tags", StringComparison.InvariantCulture) == 0)
{ {
if(string.Compare(path, "$", StringComparison.InvariantCulture) == 0) if(string.Compare(path, "$", StringComparison.InvariantCulture) == 0)
@@ -185,8 +185,8 @@ public sealed partial class AppleMFS
return ErrorNumber.NoError; return ErrorNumber.NoError;
} }
if(!_debug || if(!_debug ||
!_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSectorTag) || !_device.Info.ReadableSectorTags.Contains(SectorTagType.AppleSonyTag) ||
string.Compare(xattr, "com.apple.macintosh.tags", StringComparison.InvariantCulture) != 0) string.Compare(xattr, "com.apple.macintosh.tags", StringComparison.InvariantCulture) != 0)
return ErrorNumber.NoSuchExtendedAttribute; return ErrorNumber.NoSuchExtendedAttribute;

View File

@@ -151,7 +151,7 @@ public sealed partial class LisaFS
if(error != ErrorNumber.NoError) return error; if(error != ErrorNumber.NoError) return error;
int offset = 0; var offset = 0;
List<CatalogEntryV2> catalogV2 = []; List<CatalogEntryV2> catalogV2 = [];
// For each entry on the catalog // For each entry on the catalog
@@ -210,7 +210,7 @@ public sealed partial class LisaFS
// If root catalog is not pointed in MDDF (unchecked) maybe it's always following S-Records File? // If root catalog is not pointed in MDDF (unchecked) maybe it's always following S-Records File?
for(ulong i = 0; i < _device.Info.Sectors; i++) for(ulong i = 0; i < _device.Info.Sectors; i++)
{ {
errno = _device.ReadSectorTag(i, SectorTagType.AppleSectorTag, out byte[] tag); errno = _device.ReadSectorTag(i, SectorTagType.AppleSonyTag, out byte[] tag);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -234,7 +234,7 @@ public sealed partial class LisaFS
while(prevCatalogPointer != 0xFFFFFFFF) while(prevCatalogPointer != 0xFFFFFFFF)
{ {
errno = _device.ReadSectorTag(prevCatalogPointer + _mddf.mddf_block + _volumePrefix, errno = _device.ReadSectorTag(prevCatalogPointer + _mddf.mddf_block + _volumePrefix,
SectorTagType.AppleSectorTag, SectorTagType.AppleSonyTag,
out byte[] tag); out byte[] tag);
if(errno != ErrorNumber.NoError) return errno; if(errno != ErrorNumber.NoError) return errno;
@@ -260,7 +260,7 @@ public sealed partial class LisaFS
while(nextCatalogPointer != 0xFFFFFFFF) while(nextCatalogPointer != 0xFFFFFFFF)
{ {
errno = _device.ReadSectorTag(nextCatalogPointer + _mddf.mddf_block + _volumePrefix, errno = _device.ReadSectorTag(nextCatalogPointer + _mddf.mddf_block + _volumePrefix,
SectorTagType.AppleSectorTag, SectorTagType.AppleSonyTag,
out byte[] tag); out byte[] tag);
if(errno != ErrorNumber.NoError) return errno; if(errno != ErrorNumber.NoError) return errno;
@@ -282,7 +282,7 @@ public sealed partial class LisaFS
// Foreach catalog block // Foreach catalog block
foreach(byte[] buf in catalogBlocks) foreach(byte[] buf in catalogBlocks)
{ {
int offset = 0; var offset = 0;
// Traverse all entries // Traverse all entries
while(offset + 64 <= buf.Length) while(offset + 64 <= buf.Length)

View File

@@ -71,11 +71,11 @@ public sealed partial class LisaFS
// This code just allow to ignore that corruption by searching the Extents File using sector tags // This code just allow to ignore that corruption by searching the Extents File using sector tags
if(ptr >= _device.Info.Sectors) if(ptr >= _device.Info.Sectors)
{ {
bool found = false; var found = false;
for(ulong i = 0; i < _device.Info.Sectors; i++) for(ulong i = 0; i < _device.Info.Sectors; i++)
{ {
errno = _device.ReadSectorTag(i, SectorTagType.AppleSectorTag, out tag); errno = _device.ReadSectorTag(i, SectorTagType.AppleSonyTag, out tag);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -93,7 +93,7 @@ public sealed partial class LisaFS
} }
// Checks that the sector tag indicates its the Extents File we are searching for // Checks that the sector tag indicates its the Extents File we are searching for
errno = _device.ReadSectorTag(ptr, SectorTagType.AppleSectorTag, out tag); errno = _device.ReadSectorTag(ptr, SectorTagType.AppleSonyTag, out tag);
if(errno != ErrorNumber.NoError) return errno; if(errno != ErrorNumber.NoError) return errno;
@@ -150,7 +150,7 @@ public sealed partial class LisaFS
file.LisaInfo = new byte[128]; file.LisaInfo = new byte[128];
Array.Copy(sector, 0x180, file.LisaInfo, 0, 128); Array.Copy(sector, 0x180, file.LisaInfo, 0, 128);
int extentsCount = 0; var extentsCount = 0;
int extentsOffset; int extentsOffset;
if(_mddf.fsversion == LISA_V1) if(_mddf.fsversion == LISA_V1)
@@ -166,7 +166,7 @@ public sealed partial class LisaFS
extentsOffset = 0x88; extentsOffset = 0x88;
} }
for(int j = 0; j < 41; j++) for(var j = 0; j < 41; j++)
{ {
if(BigEndianBitConverter.ToInt16(sector, extentsOffset + j * 6 + 4) == 0) break; if(BigEndianBitConverter.ToInt16(sector, extentsOffset + j * 6 + 4) == 0) break;
@@ -175,7 +175,7 @@ public sealed partial class LisaFS
file.extents = new Extent[extentsCount]; file.extents = new Extent[extentsCount];
for(int j = 0; j < extentsCount; j++) for(var j = 0; j < extentsCount; j++)
{ {
file.extents[j] = new Extent file.extents[j] = new Extent
{ {
@@ -193,9 +193,9 @@ public sealed partial class LisaFS
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].filenameLen = {1}", fileId, file.filenameLen); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].filenameLen = {1}", fileId, file.filenameLen);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"ExtentFile[{0}].filename = {1}", "ExtentFile[{0}].filename = {1}",
fileId, fileId,
StringHandlers.CToString(file.filename, _encoding)); StringHandlers.CToString(file.filename, _encoding));
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown1 = 0x{1:X4}", fileId, file.unknown1); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown1 = 0x{1:X4}", fileId, file.unknown1);
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].file_uid = 0x{1:X16}", fileId, file.file_uid); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].file_uid = 0x{1:X16}", fileId, file.file_uid);
@@ -218,20 +218,20 @@ public sealed partial class LisaFS
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].open = {1}", fileId, file.open > 0); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].open = {1}", fileId, file.open > 0);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"ExtentFile[{0}].unknown5 = 0x{1:X2}{2:X2}{3:X2}{4:X2}{5:X2}{6:X2}{7:X2}{8:X2}{9:X2}" + "ExtentFile[{0}].unknown5 = 0x{1:X2}{2:X2}{3:X2}{4:X2}{5:X2}{6:X2}{7:X2}{8:X2}{9:X2}" +
"{10:X2}{11:X2}", "{10:X2}{11:X2}",
fileId, fileId,
file.unknown5[0], file.unknown5[0],
file.unknown5[1], file.unknown5[1],
file.unknown5[2], file.unknown5[2],
file.unknown5[3], file.unknown5[3],
file.unknown5[4], file.unknown5[4],
file.unknown5[5], file.unknown5[5],
file.unknown5[6], file.unknown5[6],
file.unknown5[7], file.unknown5[7],
file.unknown5[8], file.unknown5[8],
file.unknown5[9], file.unknown5[9],
file.unknown5[10]); file.unknown5[10]);
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].release = {1}", fileId, file.release); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].release = {1}", fileId, file.release);
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].build = {1}", fileId, file.build); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].build = {1}", fileId, file.build);
@@ -241,62 +241,56 @@ public sealed partial class LisaFS
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].revision = {1}", fileId, file.revision); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].revision = {1}", fileId, file.revision);
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown6 = 0x{1:X4}", fileId, file.unknown6); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown6 = 0x{1:X4}", fileId, file.unknown6);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].password_valid = {1}", fileId, file.password_valid > 0);
"ExtentFile[{0}].password_valid = {1}",
fileId, AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].password = {1}", fileId, _encoding.GetString(file.password));
file.password_valid > 0);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"ExtentFile[{0}].password = {1}", "ExtentFile[{0}].unknown7 = 0x{1:X2}{2:X2}{3:X2}",
fileId, fileId,
_encoding.GetString(file.password)); file.unknown7[0],
file.unknown7[1],
AaruLogging.Debug(MODULE_NAME, file.unknown7[2]);
"ExtentFile[{0}].unknown7 = 0x{1:X2}{2:X2}{3:X2}",
fileId,
file.unknown7[0],
file.unknown7[1],
file.unknown7[2]);
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].overhead = {1}", fileId, file.overhead); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].overhead = {1}", fileId, file.overhead);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"ExtentFile[{0}].unknown8 = 0x{1:X2}{2:X2}{3:X2}{4:X2}{5:X2}{6:X2}{7:X2}{8:X2}{9:X2}" + "ExtentFile[{0}].unknown8 = 0x{1:X2}{2:X2}{3:X2}{4:X2}{5:X2}{6:X2}{7:X2}{8:X2}{9:X2}" +
"{10:X2}{11:X2}{12:X2}{13:X2}{14:X2}{15:X2}{16:X2}", "{10:X2}{11:X2}{12:X2}{13:X2}{14:X2}{15:X2}{16:X2}",
fileId, fileId,
file.unknown8[0], file.unknown8[0],
file.unknown8[1], file.unknown8[1],
file.unknown8[2], file.unknown8[2],
file.unknown8[3], file.unknown8[3],
file.unknown8[4], file.unknown8[4],
file.unknown8[5], file.unknown8[5],
file.unknown8[6], file.unknown8[6],
file.unknown8[7], file.unknown8[7],
file.unknown8[8], file.unknown8[8],
file.unknown8[9], file.unknown8[9],
file.unknown8[10], file.unknown8[10],
file.unknown8[11], file.unknown8[11],
file.unknown8[12], file.unknown8[12],
file.unknown8[13], file.unknown8[13],
file.unknown8[14], file.unknown8[14],
file.unknown8[15]); file.unknown8[15]);
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].length = {1}", fileId, file.length); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].length = {1}", fileId, file.length);
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown9 = 0x{1:X8}", fileId, file.unknown9); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown9 = 0x{1:X8}", fileId, file.unknown9);
for(int ext = 0; ext < file.extents.Length; ext++) for(var ext = 0; ext < file.extents.Length; ext++)
{ {
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"ExtentFile[{0}].extents[{1}].start = {2}", "ExtentFile[{0}].extents[{1}].start = {2}",
fileId, fileId,
ext, ext,
file.extents[ext].start); file.extents[ext].start);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"ExtentFile[{0}].extents[{1}].length = {2}", "ExtentFile[{0}].extents[{1}].length = {2}",
fileId, fileId,
ext, ext,
file.extents[ext].length); file.extents[ext].length);
} }
AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown10 = 0x{1:X4}", fileId, file.unknown10); AaruLogging.Debug(MODULE_NAME, "ExtentFile[{0}].unknown10 = 0x{1:X4}", fileId, file.unknown10);
@@ -321,7 +315,7 @@ public sealed partial class LisaFS
// Each entry takes 14 bytes // Each entry takes 14 bytes
_srecords = new SRecord[sectors.Length / 14]; _srecords = new SRecord[sectors.Length / 14];
for(int s = 0; s < _srecords.Length; s++) for(var s = 0; s < _srecords.Length; s++)
{ {
_srecords[s] = new SRecord _srecords[s] = new SRecord
{ {

View File

@@ -220,12 +220,13 @@ public sealed partial class LisaFS
if(!_mounted || !_debug) return ErrorNumber.AccessDenied; if(!_mounted || !_debug) return ErrorNumber.AccessDenied;
if(fileId is > 4 or <= 0) if(fileId is > 4 or <= 0)
if(fileId != FILEID_BOOT_SIGNED && fileId != FILEID_LOADER_SIGNED) {
return ErrorNumber.InvalidArgument; if(fileId != FILEID_BOOT_SIGNED && fileId != FILEID_LOADER_SIGNED) return ErrorNumber.InvalidArgument;
}
if(_systemFileCache.TryGetValue(fileId, out buf) && !tags) return ErrorNumber.NoError; if(_systemFileCache.TryGetValue(fileId, out buf) && !tags) return ErrorNumber.NoError;
int count = 0; var count = 0;
if(fileId == FILEID_SRECORD) if(fileId == FILEID_SRECORD)
{ {
@@ -242,7 +243,7 @@ public sealed partial class LisaFS
errno = _device.ReadSectorsTag(_mddf.mddf_block + _volumePrefix + _mddf.srec_ptr, errno = _device.ReadSectorsTag(_mddf.mddf_block + _volumePrefix + _mddf.srec_ptr,
_mddf.srec_len, _mddf.srec_len,
SectorTagType.AppleSectorTag, SectorTagType.AppleSonyTag,
out buf); out buf);
return errno != ErrorNumber.NoError ? errno : ErrorNumber.NoError; return errno != ErrorNumber.NoError ? errno : ErrorNumber.NoError;
@@ -253,7 +254,7 @@ public sealed partial class LisaFS
// Should be enough to check 100 sectors? // Should be enough to check 100 sectors?
for(ulong i = 0; i < 100; i++) for(ulong i = 0; i < 100; i++)
{ {
errno = _device.ReadSectorTag(i, SectorTagType.AppleSectorTag, out byte[] tag); errno = _device.ReadSectorTag(i, SectorTagType.AppleSonyTag, out byte[] tag);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -269,7 +270,7 @@ public sealed partial class LisaFS
// Should be enough to check 100 sectors? // Should be enough to check 100 sectors?
for(ulong i = 0; i < 100; i++) for(ulong i = 0; i < 100; i++)
{ {
errno = _device.ReadSectorTag(i, SectorTagType.AppleSectorTag, out byte[] tag); errno = _device.ReadSectorTag(i, SectorTagType.AppleSonyTag, out byte[] tag);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -279,7 +280,7 @@ public sealed partial class LisaFS
errno = !tags errno = !tags
? _device.ReadSector(i, out byte[] sector) ? _device.ReadSector(i, out byte[] sector)
: _device.ReadSectorTag(i, SectorTagType.AppleSectorTag, out sector); : _device.ReadSectorTag(i, SectorTagType.AppleSonyTag, out sector);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -408,11 +409,11 @@ public sealed partial class LisaFS
else else
sectorSize = (int)_device.Info.SectorSize; sectorSize = (int)_device.Info.SectorSize;
byte[] temp = new byte[file.length * sectorSize]; var temp = new byte[file.length * sectorSize];
int offset = 0; var offset = 0;
for(int i = 0; i < file.extents.Length; i++) for(var i = 0; i < file.extents.Length; i++)
{ {
ErrorNumber errno = !tags ErrorNumber errno = !tags
? _device.ReadSectors((ulong)file.extents[i].start + ? _device.ReadSectors((ulong)file.extents[i].start +
@@ -424,7 +425,7 @@ public sealed partial class LisaFS
_mddf.mddf_block + _mddf.mddf_block +
_volumePrefix, _volumePrefix,
(uint)file.extents[i].length, (uint)file.extents[i].length,
SectorTagType.AppleSectorTag, SectorTagType.AppleSonyTag,
out sector); out sector);
if(errno != ErrorNumber.NoError) return errno; if(errno != ErrorNumber.NoError) return errno;
@@ -436,8 +437,9 @@ public sealed partial class LisaFS
if(!tags) if(!tags)
{ {
if(_fileSizeCache.TryGetValue(fileId, out int realSize)) if(_fileSizeCache.TryGetValue(fileId, out int realSize))
if(realSize > temp.Length) {
AaruLogging.Error(Localization.File_0_gets_truncated, fileId); if(realSize > temp.Length) AaruLogging.Error(Localization.File_0_gets_truncated, fileId);
}
buf = temp; buf = temp;
@@ -521,7 +523,7 @@ public sealed partial class LisaFS
} }
} }
for(int lvl = 0; lvl < pathElements.Length; lvl++) for(var lvl = 0; lvl < pathElements.Length; lvl++)
{ {
string wantedFilename = pathElements[0].Replace('-', '/'); string wantedFilename = pathElements[0].Replace('-', '/');

View File

@@ -47,7 +47,7 @@ public sealed partial class LisaFS
/// <inheritdoc /> /// <inheritdoc />
public bool Identify(IMediaImage imagePlugin, Partition partition) public bool Identify(IMediaImage imagePlugin, Partition partition)
{ {
if(imagePlugin.Info.ReadableSectorTags?.Contains(SectorTagType.AppleSectorTag) != true) return false; if(imagePlugin.Info.ReadableSectorTags?.Contains(SectorTagType.AppleSonyTag) != true) return false;
// Minimal LisaOS disk is 3.5" single sided double density, 800 sectors // Minimal LisaOS disk is 3.5" single sided double density, 800 sectors
if(imagePlugin.Info.Sectors < 800) return false; if(imagePlugin.Info.Sectors < 800) return false;
@@ -55,9 +55,9 @@ public sealed partial class LisaFS
int beforeMddf = -1; int beforeMddf = -1;
// LisaOS searches sectors until tag tells MDDF resides there, so we'll search 100 sectors // LisaOS searches sectors until tag tells MDDF resides there, so we'll search 100 sectors
for(int i = 0; i < 100; i++) for(var i = 0; i < 100; i++)
{ {
ErrorNumber errno = imagePlugin.ReadSectorTag((ulong)i, SectorTagType.AppleSectorTag, out byte[] tag); ErrorNumber errno = imagePlugin.ReadSectorTag((ulong)i, SectorTagType.AppleSonyTag, out byte[] tag);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -90,8 +90,8 @@ public sealed partial class LisaFS
AaruLogging.Debug(MODULE_NAME, "mddf.vol_size - 1 = {0}", infoMddf.volsize_minus_one); AaruLogging.Debug(MODULE_NAME, "mddf.vol_size - 1 = {0}", infoMddf.volsize_minus_one);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"mddf.vol_size - mddf.mddf_block -1 = {0}", "mddf.vol_size - mddf.mddf_block -1 = {0}",
infoMddf.volsize_minus_mddf_minus_one); infoMddf.volsize_minus_mddf_minus_one);
AaruLogging.Debug(MODULE_NAME, "Disk sector = {0} bytes", imagePlugin.Info.SectorSize); AaruLogging.Debug(MODULE_NAME, "Disk sector = {0} bytes", imagePlugin.Info.SectorSize);
AaruLogging.Debug(MODULE_NAME, "mddf.blocksize = {0} bytes", infoMddf.blocksize); AaruLogging.Debug(MODULE_NAME, "mddf.blocksize = {0} bytes", infoMddf.blocksize);
@@ -124,7 +124,7 @@ public sealed partial class LisaFS
metadata = new FileSystem(); metadata = new FileSystem();
var sb = new StringBuilder(); var sb = new StringBuilder();
if(imagePlugin.Info.ReadableSectorTags?.Contains(SectorTagType.AppleSectorTag) != true) return; if(imagePlugin.Info.ReadableSectorTags?.Contains(SectorTagType.AppleSonyTag) != true) return;
// Minimal LisaOS disk is 3.5" single sided double density, 800 sectors // Minimal LisaOS disk is 3.5" single sided double density, 800 sectors
if(imagePlugin.Info.Sectors < 800) return; if(imagePlugin.Info.Sectors < 800) return;
@@ -132,9 +132,9 @@ public sealed partial class LisaFS
int beforeMddf = -1; int beforeMddf = -1;
// LisaOS searches sectors until tag tells MDDF resides there, so we'll search 100 sectors // LisaOS searches sectors until tag tells MDDF resides there, so we'll search 100 sectors
for(int i = 0; i < 100; i++) for(var i = 0; i < 100; i++)
{ {
ErrorNumber errno = imagePlugin.ReadSectorTag((ulong)i, SectorTagType.AppleSectorTag, out byte[] tag); ErrorNumber errno = imagePlugin.ReadSectorTag((ulong)i, SectorTagType.AppleSonyTag, out byte[] tag);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -150,8 +150,8 @@ public sealed partial class LisaFS
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
var infoMddf = new MDDF(); var infoMddf = new MDDF();
byte[] pString = new byte[33]; var pString = new byte[33];
infoMddf.fsversion = BigEndianBitConverter.ToUInt16(sector, 0x00); infoMddf.fsversion = BigEndianBitConverter.ToUInt16(sector, 0x00);
infoMddf.volid = BigEndianBitConverter.ToUInt64(sector, 0x02); infoMddf.volid = BigEndianBitConverter.ToUInt64(sector, 0x02);
@@ -166,7 +166,7 @@ public sealed partial class LisaFS
infoMddf.unknown2 = sector[0x4F]; infoMddf.unknown2 = sector[0x4F];
infoMddf.machine_id = BigEndianBitConverter.ToUInt32(sector, 0x50); infoMddf.machine_id = BigEndianBitConverter.ToUInt32(sector, 0x50);
infoMddf.master_copy_id = BigEndianBitConverter.ToUInt32(sector, 0x54); infoMddf.master_copy_id = BigEndianBitConverter.ToUInt32(sector, 0x54);
uint lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x58); var lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x58);
infoMddf.dtvc = DateHandlers.LisaToDateTime(lisaTime); infoMddf.dtvc = DateHandlers.LisaToDateTime(lisaTime);
lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x5C); lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x5C);
infoMddf.dtcc = DateHandlers.LisaToDateTime(lisaTime); infoMddf.dtcc = DateHandlers.LisaToDateTime(lisaTime);
@@ -272,9 +272,9 @@ public sealed partial class LisaFS
AaruLogging.Debug(MODULE_NAME, "mddf.unknown38 = 0x{0:X8} ({0})", infoMddf.unknown38); AaruLogging.Debug(MODULE_NAME, "mddf.unknown38 = 0x{0:X8} ({0})", infoMddf.unknown38);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"mddf.unknown_timestamp = 0x{0:X8} ({0}, {1})", "mddf.unknown_timestamp = 0x{0:X8} ({0}, {1})",
infoMddf.unknown_timestamp, infoMddf.unknown_timestamp,
DateHandlers.LisaToDateTime(infoMddf.unknown_timestamp)); DateHandlers.LisaToDateTime(infoMddf.unknown_timestamp));
if(infoMddf.mddf_block != i - beforeMddf) return; if(infoMddf.mddf_block != i - beforeMddf) return;

View File

@@ -57,7 +57,7 @@ public sealed partial class LisaFS
// Lisa OS is unable to work on disks without tags. // Lisa OS is unable to work on disks without tags.
// This code is designed like that. // This code is designed like that.
// However with some effort the code may be modified to ignore them. // However with some effort the code may be modified to ignore them.
if(_device.Info.ReadableSectorTags?.Contains(SectorTagType.AppleSectorTag) != true) if(_device.Info.ReadableSectorTags?.Contains(SectorTagType.AppleSonyTag) != true)
{ {
AaruLogging.Debug(MODULE_NAME, Localization.Underlying_device_does_not_support_Lisa_tags); AaruLogging.Debug(MODULE_NAME, Localization.Underlying_device_does_not_support_Lisa_tags);
@@ -78,7 +78,7 @@ public sealed partial class LisaFS
// LisaOS searches sectors until tag tells MDDF resides there, so we'll search 100 sectors // LisaOS searches sectors until tag tells MDDF resides there, so we'll search 100 sectors
for(ulong i = 0; i < 100; i++) for(ulong i = 0; i < 100; i++)
{ {
ErrorNumber errno = _device.ReadSectorTag(i, SectorTagType.AppleSectorTag, out byte[] tag); ErrorNumber errno = _device.ReadSectorTag(i, SectorTagType.AppleSonyTag, out byte[] tag);
if(errno != ErrorNumber.NoError) continue; if(errno != ErrorNumber.NoError) continue;
@@ -97,7 +97,7 @@ public sealed partial class LisaFS
if(errno != ErrorNumber.NoError) return errno; if(errno != ErrorNumber.NoError) return errno;
_mddf = new MDDF(); _mddf = new MDDF();
byte[] pString = new byte[33]; var pString = new byte[33];
_mddf.fsversion = BigEndianBitConverter.ToUInt16(sector, 0x00); _mddf.fsversion = BigEndianBitConverter.ToUInt16(sector, 0x00);
_mddf.volid = BigEndianBitConverter.ToUInt64(sector, 0x02); _mddf.volid = BigEndianBitConverter.ToUInt64(sector, 0x02);
@@ -112,7 +112,7 @@ public sealed partial class LisaFS
_mddf.unknown2 = sector[0x4F]; _mddf.unknown2 = sector[0x4F];
_mddf.machine_id = BigEndianBitConverter.ToUInt32(sector, 0x50); _mddf.machine_id = BigEndianBitConverter.ToUInt32(sector, 0x50);
_mddf.master_copy_id = BigEndianBitConverter.ToUInt32(sector, 0x54); _mddf.master_copy_id = BigEndianBitConverter.ToUInt32(sector, 0x54);
uint lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x58); var lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x58);
_mddf.dtvc = DateHandlers.LisaToDateTime(lisaTime); _mddf.dtvc = DateHandlers.LisaToDateTime(lisaTime);
lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x5C); lisaTime = BigEndianBitConverter.ToUInt32(sector, 0x5C);
_mddf.dtcc = DateHandlers.LisaToDateTime(lisaTime); _mddf.dtcc = DateHandlers.LisaToDateTime(lisaTime);
@@ -209,8 +209,7 @@ public sealed partial class LisaFS
break; break;
default: default:
AaruLogging.Error(Localization.Cannot_mount_LisaFS_version_0, AaruLogging.Error(Localization.Cannot_mount_LisaFS_version_0, _mddf.fsversion.ToString());
_mddf.fsversion.ToString());
return ErrorNumber.NotSupported; return ErrorNumber.NotSupported;
} }
@@ -253,9 +252,7 @@ public sealed partial class LisaFS
if(error != ErrorNumber.NoError) if(error != ErrorNumber.NoError)
{ {
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME, Localization.Cannot_read_Catalog_File_error_0, error.ToString());
Localization.Cannot_read_Catalog_File_error_0,
error.ToString());
_mounted = false; _mounted = false;

View File

@@ -329,7 +329,7 @@ public sealed partial class ImageConvertViewModel : ViewModelBase
[SuppressMessage("ReSharper", "AsyncVoidMethod")] [SuppressMessage("ReSharper", "AsyncVoidMethod")]
async void DoWork(object plugin) async void DoWork(object plugin)
{ {
bool warning = false; var warning = false;
if(plugin is not IWritableImage outputFormat) if(plugin is not IWritableImage outputFormat)
{ {
@@ -382,7 +382,9 @@ public sealed partial class ImageConvertViewModel : ViewModelBase
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
@@ -407,7 +409,9 @@ public sealed partial class ImageConvertViewModel : ViewModelBase
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
@@ -908,7 +912,9 @@ public sealed partial class ImageConvertViewModel : ViewModelBase
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
@@ -1328,7 +1334,9 @@ public sealed partial class ImageConvertViewModel : ViewModelBase
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:

View File

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

View File

@@ -57,7 +57,7 @@ public sealed partial class Blu
DeviceName = new byte[0x0D] DeviceName = new byte[0x0D]
}; };
byte[] header = new byte[0x17]; var header = new byte[0x17];
stream.EnsureRead(header, 0, 0x17); stream.EnsureRead(header, 0, 0x17);
Array.Copy(header, 0, _imageHeader.DeviceName, 0, 0x0D); Array.Copy(header, 0, _imageHeader.DeviceName, 0, 0x0D);
_imageHeader.DeviceType = BigEndianBitConverter.ToUInt32(header, 0x0C) & 0x00FFFFFF; _imageHeader.DeviceType = BigEndianBitConverter.ToUInt32(header, 0x0C) & 0x00FFFFFF;
@@ -65,17 +65,16 @@ public sealed partial class Blu
_imageHeader.BytesPerBlock = BigEndianBitConverter.ToUInt16(header, 0x15); _imageHeader.BytesPerBlock = BigEndianBitConverter.ToUInt16(header, 0x15);
AaruLogging.Debug(MODULE_NAME, AaruLogging.Debug(MODULE_NAME,
"ImageHeader.deviceName = \"{0}\"", "ImageHeader.deviceName = \"{0}\"",
StringHandlers.CToString(_imageHeader.DeviceName)); StringHandlers.CToString(_imageHeader.DeviceName));
AaruLogging.Debug(MODULE_NAME, "ImageHeader.deviceType = {0}", _imageHeader.DeviceType); AaruLogging.Debug(MODULE_NAME, "ImageHeader.deviceType = {0}", _imageHeader.DeviceType);
AaruLogging.Debug(MODULE_NAME, "ImageHeader.deviceBlock = {0}", _imageHeader.DeviceBlocks); AaruLogging.Debug(MODULE_NAME, "ImageHeader.deviceBlock = {0}", _imageHeader.DeviceBlocks);
AaruLogging.Debug(MODULE_NAME, "ImageHeader.bytesPerBlock = {0}", _imageHeader.BytesPerBlock); AaruLogging.Debug(MODULE_NAME, "ImageHeader.bytesPerBlock = {0}", _imageHeader.BytesPerBlock);
for(int i = 0; i < 0xD; i++) for(var i = 0; i < 0xD; i++)
{ if(_imageHeader.DeviceName[i] < 0x20)
if(_imageHeader.DeviceName[i] < 0x20) return ErrorNumber.InvalidArgument; return ErrorNumber.InvalidArgument;
}
if((_imageHeader.BytesPerBlock & 0xFE00) != 0x200) 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.Sectors = _imageHeader.DeviceBlocks;
_imageInfo.ImageSize = _imageHeader.DeviceBlocks * _imageHeader.BytesPerBlock; _imageInfo.ImageSize = _imageHeader.DeviceBlocks * _imageHeader.BytesPerBlock;
_bptag = _imageHeader.BytesPerBlock - 0x200; _bptag = _imageHeader.BytesPerBlock - 0x200;
byte[] hdrTag = new byte[_bptag]; var hdrTag = new byte[_bptag];
Array.Copy(header, 0x200, hdrTag, 0, _bptag); Array.Copy(header, 0x200, hdrTag, 0, _bptag);
switch(StringHandlers.CToString(_imageHeader.DeviceName)) switch(StringHandlers.CToString(_imageHeader.DeviceName))
@@ -147,7 +146,7 @@ public sealed partial class Blu
_imageInfo.MetadataMediaType = MetadataMediaType.BlockMedia; _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); 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 stream = _bluImageFilter.GetDataForkStream();
stream.Seek((long)((sectorAddress + 1) * _imageHeader.BytesPerBlock), SeekOrigin.Begin); 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); stream.EnsureRead(sector, 0, read);
ms.Write(sector, 0, read); ms.Write(sector, 0, read);
stream.Seek(skip, SeekOrigin.Current); stream.Seek(skip, SeekOrigin.Current);
@@ -195,7 +194,7 @@ public sealed partial class Blu
{ {
buffer = null; buffer = null;
if(tag != SectorTagType.AppleSectorTag) return ErrorNumber.NotSupported; if(tag != SectorTagType.AppleSonyTag) return ErrorNumber.NotSupported;
if(_bptag == 0) return ErrorNumber.NoData; if(_bptag == 0) return ErrorNumber.NoData;
@@ -210,10 +209,10 @@ public sealed partial class Blu
Stream stream = _bluImageFilter.GetDataForkStream(); Stream stream = _bluImageFilter.GetDataForkStream();
stream.Seek((long)((sectorAddress + 1) * _imageHeader.BytesPerBlock), SeekOrigin.Begin); 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); stream.Seek(seek, SeekOrigin.Current);
byte[] sector = new byte[read]; var sector = new byte[read];
stream.EnsureRead(sector, 0, read); stream.EnsureRead(sector, 0, read);
ms.Write(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; if(stream.Length < 84) return ErrorNumber.InvalidArgument;
stream.Seek(0, SeekOrigin.Begin); 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>()); stream.EnsureRead(headerB, 0, Marshal.SizeOf<Header>());
Header header = Marshal.ByteArrayToStructureBigEndian<Header>(headerB); Header header = Marshal.ByteArrayToStructureBigEndian<Header>(headerB);
@@ -103,12 +103,12 @@ public sealed partial class Dart
if(stream.Length > expectedMaxSize) return ErrorNumber.InvalidArgument; 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]; 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); stream.EnsureRead(tmpShort, 0, 2);
bLength[i] = BigEndianBitConverter.ToInt16(tmpShort, 0); bLength[i] = BigEndianBitConverter.ToInt16(tmpShort, 0);
} }
@@ -120,7 +120,7 @@ public sealed partial class Dart
{ {
if(l == 0) continue; if(l == 0) continue;
byte[] buffer = new byte[BUFFER_SIZE]; var buffer = new byte[BUFFER_SIZE];
if(l == -1) if(l == -1)
{ {
@@ -159,7 +159,7 @@ public sealed partial class Dart
if(header.srcType is DISK_LISA or DISK_MAC or DISK_APPLE2) 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(); _tagCache = tagMs.ToArray();
} }
@@ -183,8 +183,8 @@ public sealed partial class Dart
string release = null; string release = null;
string pre = null; string pre = null;
string major = $"{version.MajorVersion}"; var major = $"{version.MajorVersion}";
string minor = $".{version.MinorVersion / 10}"; var minor = $".{version.MinorVersion / 10}";
if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}";
@@ -330,7 +330,7 @@ public sealed partial class Dart
{ {
buffer = null; 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; if(_tagCache == null || _tagCache.Length == 0) return ErrorNumber.NoData;
@@ -362,7 +362,7 @@ public sealed partial class Dart
if(errno != ErrorNumber.NoError) return errno; 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; if(errno != ErrorNumber.NoError) return errno;

View File

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

View File

@@ -54,8 +54,8 @@ public sealed partial class DiskCopy42
{ {
Stream stream = imageFilter.GetDataForkStream(); Stream stream = imageFilter.GetDataForkStream();
stream.Seek(0, SeekOrigin.Begin); stream.Seek(0, SeekOrigin.Begin);
byte[] buffer = new byte[0x58]; var buffer = new byte[0x58];
byte[] pString = new byte[64]; var pString = new byte[64];
stream.EnsureRead(buffer, 0, 0x58); stream.EnsureRead(buffer, 0, 0x58);
IsWriting = false; IsWriting = false;
@@ -154,7 +154,7 @@ public sealed partial class DiskCopy42
return ErrorNumber.NotSupported; return ErrorNumber.NotSupported;
} }
imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSectorTag); imageInfo.ReadableSectorTags.Add(SectorTagType.AppleSonyTag);
} }
imageInfo.ImageSize = imageInfo.Sectors * imageInfo.SectorSize + imageInfo.Sectors * bptag; imageInfo.ImageSize = imageInfo.Sectors * imageInfo.SectorSize + imageInfo.Sectors * bptag;
@@ -185,8 +185,8 @@ public sealed partial class DiskCopy42
if(imageInfo.MediaType == MediaType.AppleFileWare) if(imageInfo.MediaType == MediaType.AppleFileWare)
{ {
byte[] data = new byte[header.DataSize]; var data = new byte[header.DataSize];
byte[] tags = new byte[header.TagSize]; var tags = new byte[header.TagSize];
twiggyCache = new byte[header.DataSize]; twiggyCache = new byte[header.DataSize];
twiggyCacheTags = new byte[header.TagSize]; twiggyCacheTags = new byte[header.TagSize];
@@ -200,8 +200,8 @@ public sealed partial class DiskCopy42
tagStream.Seek(tagOffset, SeekOrigin.Begin); tagStream.Seek(tagOffset, SeekOrigin.Begin);
tagStream.EnsureRead(tags, 0, (int)header.TagSize); tagStream.EnsureRead(tags, 0, (int)header.TagSize);
ushort mfsMagic = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x400); var mfsMagic = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x400);
ushort mfsAllBlocks = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x412); var mfsAllBlocks = BigEndianBitConverter.ToUInt16(data, data.Length / 2 + 0x412);
// Detect a Macintosh Twiggy // Detect a Macintosh Twiggy
if(mfsMagic == 0xD2D7 && mfsAllBlocks == 422) 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(data, 0, twiggyCache, 0, header.DataSize / 2);
Array.Copy(tags, 0, twiggyCacheTags, 0, header.TagSize / 2); Array.Copy(tags, 0, twiggyCacheTags, 0, header.TagSize / 2);
int copiedSectors = 0; var copiedSectors = 0;
int sectorsToCopy = 0; var sectorsToCopy = 0;
for(int i = 0; i < 46; i++) for(var i = 0; i < 46; i++)
{ {
sectorsToCopy = i switch sectorsToCopy = i switch
{ {
@@ -272,8 +272,8 @@ public sealed partial class DiskCopy42
string release = null; string release = null;
string pre = null; string pre = null;
string major = $"{version.MajorVersion}"; var major = $"{version.MajorVersion}";
string minor = $".{version.MinorVersion / 10}"; var minor = $".{version.MinorVersion / 10}";
if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}";
@@ -437,7 +437,7 @@ public sealed partial class DiskCopy42
{ {
buffer = null; buffer = null;
if(tag != SectorTagType.AppleSectorTag) return ErrorNumber.NotSupported; if(tag != SectorTagType.AppleSonyTag) return ErrorNumber.NotSupported;
if(header.TagSize == 0) return ErrorNumber.NoData; if(header.TagSize == 0) return ErrorNumber.NoData;
@@ -476,7 +476,7 @@ public sealed partial class DiskCopy42
if(errno != ErrorNumber.NoError) return errno; 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; if(errno != ErrorNumber.NoError) return errno;

View File

@@ -148,8 +148,8 @@ public abstract class OpticalImageConvertIssueTest
else else
sectorsToDo = (uint)(trackSectors - doneSectors); sectorsToDo = (uint)(trackSectors - doneSectors);
bool useNotLong = false; var useNotLong = false;
bool result = false; var result = false;
if(UseLong) if(UseLong)
{ {
@@ -200,7 +200,7 @@ public abstract class OpticalImageConvertIssueTest
Dictionary<byte, int> smallestPregapLbaPerTrack = new(); Dictionary<byte, int> smallestPregapLbaPerTrack = new();
var tracks = new Track[inputOptical.Tracks.Count]; var tracks = new Track[inputOptical.Tracks.Count];
for(int i = 0; i < tracks.Length; i++) for(var i = 0; i < tracks.Length; i++)
{ {
tracks[i] = new Track tracks[i] = new Track
{ {
@@ -258,7 +258,9 @@ public abstract class OpticalImageConvertIssueTest
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:

View File

@@ -103,10 +103,10 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
.BeEquivalentTo(test.Tracks.Select(s => s.Pregap), .BeEquivalentTo(test.Tracks.Select(s => s.Pregap),
string.Format(Localization.Track_pregap_0, testFile)); string.Format(Localization.Track_pregap_0, testFile));
int trackNo = 0; var trackNo = 0;
byte?[] flags = new byte?[image.Tracks.Count]; var flags = new byte?[image.Tracks.Count];
ulong latestEndSector = 0; ulong latestEndSector = 0;
foreach(Track currentTrack in image.Tracks) foreach(Track currentTrack in image.Tracks)
{ {
@@ -240,8 +240,8 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
else else
sectorsToDo = (uint)(trackSectors - doneSectors); sectorsToDo = (uint)(trackSectors - doneSectors);
bool useNotLong = false; var useNotLong = false;
bool result = false; var result = false;
if(useLong) if(useLong)
{ {
@@ -298,7 +298,7 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
Dictionary<byte, int> smallestPregapLbaPerTrack = new(); Dictionary<byte, int> smallestPregapLbaPerTrack = new();
var tracks = new Track[inputFormat.Tracks.Count]; var tracks = new Track[inputFormat.Tracks.Count];
for(int i = 0; i < tracks.Length; i++) for(var i = 0; i < tracks.Length; i++)
{ {
tracks[i] = new Track tracks[i] = new Track
{ {
@@ -359,7 +359,9 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
@@ -632,10 +634,10 @@ public abstract class WritableOpticalMediaImageTest : BaseWritableMediaImageTest
.BeEquivalentTo(test.Tracks.Select(s => s.Pregap), .BeEquivalentTo(test.Tracks.Select(s => s.Pregap),
string.Format(Localization.Track_pregap_output_0, testFile)); string.Format(Localization.Track_pregap_output_0, testFile));
int trackNo = 0; var trackNo = 0;
byte?[] flags = new byte?[image.Tracks.Count]; var flags = new byte?[image.Tracks.Count];
ulong latestEndSector = 0; ulong latestEndSector = 0;
foreach(Track currentTrack in image.Tracks) foreach(Track currentTrack in image.Tracks)
{ {

0
Aaru/Aaru.icns Normal file → Executable file
View File

View File

@@ -496,7 +496,7 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
return (int)ErrorNumber.UnsupportedMedia; return (int)ErrorNumber.UnsupportedMedia;
} }
bool ret = false; var ret = false;
if(inputTape?.IsTape == true && outputTape != null) if(inputTape?.IsTape == true && outputTape != null)
{ {
@@ -544,7 +544,7 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
AaruLogging.ErrorWriteLine("Output format does not support sessions, this will end in a loss of data, continuing...");*/ AaruLogging.ErrorWriteLine("Output format does not support sessions, this will end in a loss of data, continuing...");*/
} }
bool created = false; var created = false;
Core.Spectre.ProgressSingleSpinner(ctx => Core.Spectre.ProgressSingleSpinner(ctx =>
{ {
@@ -700,8 +700,8 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
doneSectors + sectorsToDo + track.StartSector, doneSectors + sectorsToDo + track.StartSector,
track.Sequence); track.Sequence);
bool useNotLong = false; var useNotLong = false;
bool result = false; var result = false;
if(useLong) if(useLong)
{ {
@@ -969,7 +969,7 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
Dictionary<byte, int> smallestPregapLbaPerTrack = new(); Dictionary<byte, int> smallestPregapLbaPerTrack = new();
var tracks = new Track[inputOptical.Tracks.Count]; var tracks = new Track[inputOptical.Tracks.Count];
for(int i = 0; i < tracks.Length; i++) for(var i = 0; i < tracks.Length; i++)
{ {
tracks[i] = new Track tracks[i] = new Track
{ {
@@ -1028,7 +1028,9 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
@@ -1524,7 +1526,9 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
{ {
switch(tag) switch(tag)
{ {
case SectorTagType.AppleSectorTag: case SectorTagType.AppleSonyTag:
case SectorTagType.AppleProfileTag:
case SectorTagType.PriamDataTowerTag:
case SectorTagType.CdSectorSync: case SectorTagType.CdSectorSync:
case SectorTagType.CdSectorHeader: case SectorTagType.CdSectorHeader:
case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSubHeader:
@@ -1728,7 +1732,7 @@ sealed class ConvertImageCommand : Command<ConvertImageCommand.Settings>
if(ret) AaruLogging.WriteLine(UI.Written_Aaru_Metadata_to_output_image); if(ret) AaruLogging.WriteLine(UI.Written_Aaru_Metadata_to_output_image);
} }
bool closed = false; var closed = false;
Core.Spectre.ProgressSingleSpinner(ctx => Core.Spectre.ProgressSingleSpinner(ctx =>
{ {

0
build.sh Normal file → Executable file
View File