mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
REFACTOR: Remove redundant parentheses.
This commit is contained in:
@@ -562,7 +562,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(!data && !firstdata) ImageInfo.MediaType = MediaType.CDDA;
|
||||
else if(firstaudio && data && sessions.Count > 1 && mode2) ImageInfo.MediaType = MediaType.CDPLUS;
|
||||
else if((firstdata && audio) || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(firstdata && audio || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(!audio) ImageInfo.MediaType = MediaType.CDROM;
|
||||
else ImageInfo.MediaType = MediaType.CD;
|
||||
}
|
||||
@@ -839,8 +839,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(track.point == kvp.Key && alcTrackExtras.TryGetValue(track.point, out extra))
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < extra.sectors)
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < extra.sectors)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -861,8 +861,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(track.point == kvp.Key && alcTrackExtras.TryGetValue(track.point, out extra))
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < extra.sectors)
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
if(sectorAddress - kvp.Value < extra.sectors)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1002,7 +1002,7 @@ namespace DiscImageChef.DiscImages
|
||||
case SectorTagType.CdSectorSubchannel:
|
||||
case SectorTagType.CdSectorSubHeader:
|
||||
case SectorTagType.CdSectorSync: break;
|
||||
case SectorTagType.CdTrackFlags: return new byte[] {((byte)(_track.adrCtl & 0x0F))};
|
||||
case SectorTagType.CdTrackFlags: return new byte[] {(byte)(_track.adrCtl & 0x0F)};
|
||||
default: throw new ArgumentException("Unsupported tag requested", nameof(tag));
|
||||
}
|
||||
|
||||
@@ -1323,8 +1323,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(track.point == kvp.Key && alcTrackExtras.TryGetValue(track.point, out extra))
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < extra.sectors)
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < extra.sectors)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ namespace DiscImageChef.DiscImages
|
||||
for(int t = 0; t < 35; t++)
|
||||
{
|
||||
for(int s = 0; s < 16; s++)
|
||||
Array.Copy(tmp, (t * 16 * 256) + (s * 256), deinterleaved, (t * 16 * 256) + (offsets[s] * 256),
|
||||
Array.Copy(tmp, t * 16 * 256 + s * 256, deinterleaved, t * 16 * 256 + offsets[s] * 256,
|
||||
256);
|
||||
}
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ namespace DiscImageChef.DiscImages
|
||||
// Deleted record, just skip it
|
||||
case RecordType.Deleted:
|
||||
DicConsole.DebugWriteLine("Apridisk plugin", "Found deleted record at {0}", stream.Position);
|
||||
stream.Seek((record.headerSize - recordSize) + record.dataSize, SeekOrigin.Current);
|
||||
stream.Seek(record.headerSize - recordSize + record.dataSize, SeekOrigin.Current);
|
||||
break;
|
||||
case RecordType.Comment:
|
||||
DicConsole.DebugWriteLine("Apridisk plugin", "Found comment record at {0}", stream.Position);
|
||||
@@ -198,7 +198,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(record.head > totalHeads) totalHeads = record.head;
|
||||
if(record.sector > maxSector) maxSector = record.sector;
|
||||
|
||||
stream.Seek((record.headerSize - recordSize) + record.dataSize, SeekOrigin.Current);
|
||||
stream.Seek(record.headerSize - recordSize + record.dataSize, SeekOrigin.Current);
|
||||
break;
|
||||
default:
|
||||
throw new
|
||||
@@ -255,7 +255,7 @@ namespace DiscImageChef.DiscImages
|
||||
case RecordType.Deleted:
|
||||
case RecordType.Comment:
|
||||
case RecordType.Creator:
|
||||
stream.Seek((record.headerSize - recordSize) + record.dataSize, SeekOrigin.Current);
|
||||
stream.Seek(record.headerSize - recordSize + record.dataSize, SeekOrigin.Current);
|
||||
headersizes += record.headerSize + record.dataSize;
|
||||
break;
|
||||
case RecordType.Sector:
|
||||
@@ -454,8 +454,8 @@ namespace DiscImageChef.DiscImages
|
||||
(ushort cylinder, byte head, byte sector) LbaToChs(ulong lba)
|
||||
{
|
||||
ushort cylinder = (ushort)(lba / (ImageInfo.Heads * ImageInfo.SectorsPerTrack));
|
||||
byte head = (byte)((lba / ImageInfo.SectorsPerTrack) % ImageInfo.Heads);
|
||||
byte sector = (byte)((lba % ImageInfo.SectorsPerTrack) + 1);
|
||||
byte head = (byte)(lba / ImageInfo.SectorsPerTrack % ImageInfo.Heads);
|
||||
byte sector = (byte)(lba % ImageInfo.SectorsPerTrack + 1);
|
||||
|
||||
return (cylinder, head, sector);
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ namespace DiscImageChef.DiscImages
|
||||
break;
|
||||
default:
|
||||
ImageInfo.MediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
break;
|
||||
|
||||
@@ -868,7 +868,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(!data && !firstdata) ImageInfo.MediaType = MediaType.CDDA;
|
||||
else if(firstaudio && data && sessions.Count > 1 && mode2) ImageInfo.MediaType = MediaType.CDPLUS;
|
||||
else if((firstdata && audio) || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(firstdata && audio || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(!audio) ImageInfo.MediaType = MediaType.CDROM;
|
||||
else ImageInfo.MediaType = MediaType.CD;
|
||||
|
||||
@@ -949,8 +949,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (track.TrackEndSector - track.TrackStartSector + 1))
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -969,8 +969,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (track.TrackEndSector - track.TrackStartSector + 1))
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -997,13 +997,13 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector - _track.TrackStartSector + 1))
|
||||
if(length + sectorAddress > _track.TrackEndSector - _track.TrackStartSector + 1)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
length + sectorAddress,
|
||||
(_track.TrackEndSector - _track.TrackStartSector +
|
||||
1)));
|
||||
_track.TrackEndSector - _track.TrackStartSector +
|
||||
1));
|
||||
|
||||
uint sectorOffset;
|
||||
uint sectorSize;
|
||||
@@ -1083,13 +1083,13 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector - _track.TrackStartSector + 1))
|
||||
if(length + sectorAddress > _track.TrackEndSector - _track.TrackStartSector + 1)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
length + sectorAddress,
|
||||
(_track.TrackEndSector - _track.TrackStartSector +
|
||||
1)));
|
||||
_track.TrackEndSector - _track.TrackStartSector +
|
||||
1));
|
||||
|
||||
uint sectorOffset;
|
||||
uint sectorSize;
|
||||
@@ -1257,8 +1257,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (track.TrackEndSector - track.TrackStartSector + 1))
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1285,13 +1285,13 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector - _track.TrackStartSector + 1))
|
||||
if(length + sectorAddress > _track.TrackEndSector - _track.TrackStartSector + 1)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
length + sectorAddress,
|
||||
(_track.TrackEndSector - _track.TrackStartSector +
|
||||
1)));
|
||||
_track.TrackEndSector - _track.TrackStartSector +
|
||||
1));
|
||||
|
||||
uint sectorOffset;
|
||||
uint sectorSize;
|
||||
|
||||
@@ -738,8 +738,8 @@ namespace DiscImageChef.DiscImages
|
||||
long sectorSize = dataFile.Length / dataFile.Sectors;
|
||||
if(sectorSize > 2352)
|
||||
{
|
||||
if((sectorSize - 2352) == 16) chars.Subchannel = TrackSubchannelType.Q16Interleaved;
|
||||
else if((sectorSize - 2352) == 96) chars.Subchannel = TrackSubchannelType.PackedInterleaved;
|
||||
if(sectorSize - 2352 == 16) chars.Subchannel = TrackSubchannelType.Q16Interleaved;
|
||||
else if(sectorSize - 2352 == 96) chars.Subchannel = TrackSubchannelType.PackedInterleaved;
|
||||
else
|
||||
{
|
||||
DicConsole.ErrorWriteLine("BlindWrite5 found unknown subchannel size: {0}", sectorSize - 2352);
|
||||
@@ -868,13 +868,13 @@ namespace DiscImageChef.DiscImages
|
||||
foreach(DataFileCharacteristics chars in filePaths)
|
||||
{
|
||||
if(trk.startLba >= chars.StartLba &&
|
||||
(trk.startLba + trk.sectors) <= (chars.StartLba + chars.Sectors))
|
||||
trk.startLba + trk.sectors <= chars.StartLba + chars.Sectors)
|
||||
{
|
||||
track.TrackFilter = chars.FileFilter;
|
||||
track.TrackFile = chars.FileFilter.GetFilename();
|
||||
if(trk.startLba >= 0)
|
||||
track.TrackFileOffset = (ulong)((trk.startLba - chars.StartLba) * chars.SectorSize);
|
||||
else track.TrackFileOffset = (ulong)((trk.startLba * -1) * chars.SectorSize);
|
||||
else track.TrackFileOffset = (ulong)(trk.startLba * -1 * chars.SectorSize);
|
||||
track.TrackFileType = "BINARY";
|
||||
if(chars.Subchannel != TrackSubchannelType.None)
|
||||
{
|
||||
@@ -903,7 +903,7 @@ namespace DiscImageChef.DiscImages
|
||||
partition.Description = track.TrackDescription;
|
||||
partition.Size = (track.TrackEndSector - track.TrackStartSector) *
|
||||
(ulong)track.TrackRawBytesPerSector;
|
||||
partition.Length = (track.TrackEndSector - track.TrackStartSector);
|
||||
partition.Length = track.TrackEndSector - track.TrackStartSector;
|
||||
partition.Sequence = track.TrackSequence;
|
||||
partition.Offset = offsetBytes;
|
||||
partition.Start = track.TrackStartSector;
|
||||
@@ -1065,7 +1065,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(!data && !firstdata) ImageInfo.MediaType = MediaType.CDDA;
|
||||
else if(firstaudio && data && sessions.Count > 1 && mode2) ImageInfo.MediaType = MediaType.CDPLUS;
|
||||
else if((firstdata && audio) || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(firstdata && audio || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(!audio) ImageInfo.MediaType = MediaType.CDROM;
|
||||
else ImageInfo.MediaType = MediaType.CD;
|
||||
}
|
||||
@@ -1265,8 +1265,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (track.TrackEndSector - track.TrackStartSector))
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1285,8 +1285,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (track.TrackEndSector - track.TrackStartSector))
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1315,7 +1315,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector))
|
||||
if(length + sectorAddress > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
@@ -1323,7 +1323,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
foreach(DataFileCharacteristics _chars in filePaths)
|
||||
{
|
||||
if((long)sectorAddress >= _chars.StartLba && length < ((ulong)_chars.Sectors - sectorAddress))
|
||||
if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)
|
||||
{
|
||||
chars = _chars;
|
||||
break;
|
||||
@@ -1442,7 +1442,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector))
|
||||
if(length + sectorAddress > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
@@ -1450,7 +1450,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
foreach(DataFileCharacteristics _chars in filePaths)
|
||||
{
|
||||
if((long)sectorAddress >= _chars.StartLba && length < ((ulong)_chars.Sectors - sectorAddress))
|
||||
if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)
|
||||
{
|
||||
chars = _chars;
|
||||
break;
|
||||
@@ -1735,8 +1735,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (track.TrackEndSector - track.TrackStartSector))
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1765,7 +1765,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector))
|
||||
if(length + sectorAddress > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
@@ -1773,7 +1773,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
foreach(DataFileCharacteristics _chars in filePaths)
|
||||
{
|
||||
if((long)sectorAddress >= _chars.StartLba && length < ((ulong)_chars.Sectors - sectorAddress))
|
||||
if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)
|
||||
{
|
||||
chars = _chars;
|
||||
break;
|
||||
|
||||
@@ -650,7 +650,7 @@ namespace DiscImageChef.DiscImages
|
||||
ulong.Parse(startString[2]);
|
||||
}
|
||||
|
||||
currenttrack.Trackfile.Offset += (startSectors * currenttrack.Bps);
|
||||
currenttrack.Trackfile.Offset += startSectors * currenttrack.Bps;
|
||||
|
||||
if(matchAudioFile.Groups["length"].Value != "")
|
||||
{
|
||||
@@ -870,7 +870,7 @@ namespace DiscImageChef.DiscImages
|
||||
partition.Name = discimage.Tracks[i].Title;
|
||||
partition.Start = discimage.Tracks[i].StartSector;
|
||||
partition.Size = (discimage.Tracks[i].Sectors - index0Len) * discimage.Tracks[i].Bps;
|
||||
partition.Length = (discimage.Tracks[i].Sectors - index0Len);
|
||||
partition.Length = discimage.Tracks[i].Sectors - index0Len;
|
||||
partition.Sequence = partitionSequence;
|
||||
partition.Offset = byteOffset;
|
||||
partition.Type = discimage.Tracks[i].Tracktype;
|
||||
@@ -1078,8 +1078,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < cdrdaoTrack.Sectors)
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1099,8 +1099,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < cdrdaoTrack.Sectors)
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1412,8 +1412,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < cdrdaoTrack.Sectors)
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -619,7 +619,7 @@ namespace DiscImageChef.DiscImages
|
||||
// Check if file exists
|
||||
if(currentfile.Datafilter == null)
|
||||
{
|
||||
if(datafile[0] == '/' || (datafile[0] == '/' && datafile[1] == '.')
|
||||
if(datafile[0] == '/' || datafile[0] == '/' && datafile[1] == '.'
|
||||
) // UNIX absolute path
|
||||
{
|
||||
Regex unixpath = new Regex("^(.+)/([^/]+)$");
|
||||
@@ -648,9 +648,9 @@ namespace DiscImageChef.DiscImages
|
||||
FeatureUnsupportedImageException(string.Format("File \"{0}\" not found.",
|
||||
matchFile.Groups[1].Value));
|
||||
}
|
||||
else if((datafile[1] == ':' && datafile[2] == '\\') ||
|
||||
(datafile[0] == '\\' && datafile[1] == '\\') ||
|
||||
((datafile[0] == '.' && datafile[1] == '\\'))) // Windows absolute path
|
||||
else if(datafile[1] == ':' && datafile[2] == '\\' ||
|
||||
datafile[0] == '\\' && datafile[1] == '\\' ||
|
||||
datafile[0] == '.' && datafile[1] == '\\') // Windows absolute path
|
||||
{
|
||||
Regex winpath =
|
||||
new
|
||||
@@ -747,13 +747,13 @@ namespace DiscImageChef.DiscImages
|
||||
int index = int.Parse(matchIndex.Groups[1].Value);
|
||||
ulong offset = CdrWinMsftoLba(matchIndex.Groups[2].Value);
|
||||
|
||||
if((index != 0 && index != 1) && currenttrack.Indexes.Count == 0)
|
||||
if(index != 0 && index != 1 && currenttrack.Indexes.Count == 0)
|
||||
throw new
|
||||
FeatureUnsupportedImageException(string
|
||||
.Format("Found INDEX {0} before INDEX 00 or INDEX 01",
|
||||
index));
|
||||
|
||||
if((index == 0 || (index == 1 && !currenttrack.Indexes.ContainsKey(0))))
|
||||
if(index == 0 || index == 1 && !currenttrack.Indexes.ContainsKey(0))
|
||||
{
|
||||
if((int)(currenttrack.Sequence - 2) >= 0 && offset > 1)
|
||||
{
|
||||
@@ -773,7 +773,7 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
}
|
||||
|
||||
if((index == 0 || (index == 1 && !currenttrack.Indexes.ContainsKey(0))) &&
|
||||
if((index == 0 || index == 1 && !currenttrack.Indexes.ContainsKey(0)) &&
|
||||
currenttrack.Sequence == 1)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRWin plugin",
|
||||
@@ -972,7 +972,7 @@ namespace DiscImageChef.DiscImages
|
||||
else if(cdi) discimage.Disktype = MediaType.CDI;
|
||||
else if(firstaudio && data && discimage.Sessions.Count > 1 && mode2)
|
||||
discimage.Disktype = MediaType.CDPLUS;
|
||||
else if((firstdata && audio) || mode2) discimage.Disktype = MediaType.CDROMXA;
|
||||
else if(firstdata && audio || mode2) discimage.Disktype = MediaType.CDROMXA;
|
||||
else if(!audio) discimage.Disktype = MediaType.CDROM;
|
||||
else discimage.Disktype = MediaType.CD;
|
||||
}
|
||||
@@ -1180,7 +1180,7 @@ namespace DiscImageChef.DiscImages
|
||||
partition.Name = discimage.Tracks[i].Title;
|
||||
partition.Start = sectorOffset;
|
||||
partition.Size = (discimage.Tracks[i].Sectors - index0Len) * discimage.Tracks[i].Bps;
|
||||
partition.Length = (discimage.Tracks[i].Sectors - index0Len);
|
||||
partition.Length = discimage.Tracks[i].Sectors - index0Len;
|
||||
partition.Sequence = partitionSequence;
|
||||
partition.Offset = byteOffset;
|
||||
partition.Type = discimage.Tracks[i].Tracktype;
|
||||
@@ -1401,8 +1401,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(cdrwinTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < cdrwinTrack.Sectors)
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < cdrwinTrack.Sectors)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1421,8 +1421,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(cdrwinTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < cdrwinTrack.Sectors)
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
if(sectorAddress - kvp.Value < cdrwinTrack.Sectors)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1752,8 +1752,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(cdrwinTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < cdrwinTrack.Sectors)
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < cdrwinTrack.Sectors)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2100,7 +2100,7 @@ namespace DiscImageChef.DiscImages
|
||||
second = ulong.Parse(msfElements[1]);
|
||||
frame = ulong.Parse(msfElements[2]);
|
||||
|
||||
sectors = (minute * 60 * 75) + (second * 75) + frame;
|
||||
sectors = minute * 60 * 75 + second * 75 + frame;
|
||||
|
||||
return sectors;
|
||||
}
|
||||
|
||||
@@ -660,7 +660,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
hunkTable = new ulong[hdrV1.totalhunks];
|
||||
|
||||
uint hunkSectorCount = (uint)Math.Ceiling(((double)hdrV1.totalhunks * 8) / 512);
|
||||
uint hunkSectorCount = (uint)Math.Ceiling((double)hdrV1.totalhunks * 8 / 512);
|
||||
|
||||
byte[] hunkSectorBytes = new byte[512];
|
||||
HunkSector hunkSector = new HunkSector();
|
||||
@@ -676,11 +676,11 @@ namespace DiscImageChef.DiscImages
|
||||
handle.Free();
|
||||
// This restores the order of elements
|
||||
Array.Reverse(hunkSector.hunkEntry);
|
||||
if(hunkTable.Length >= (i * 512) / 8 + 512 / 8)
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, (i * 512) / 8, 512 / 8);
|
||||
if(hunkTable.Length >= i * 512 / 8 + 512 / 8)
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, i * 512 / 8, 512 / 8);
|
||||
else
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, (i * 512) / 8,
|
||||
hunkTable.Length - (i * 512) / 8);
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, i * 512 / 8,
|
||||
hunkTable.Length - i * 512 / 8);
|
||||
}
|
||||
|
||||
DateTime end = DateTime.UtcNow;
|
||||
@@ -733,7 +733,7 @@ namespace DiscImageChef.DiscImages
|
||||
hunkTable = new ulong[hdrV2.totalhunks];
|
||||
|
||||
// How many sectors uses the BAT
|
||||
uint hunkSectorCount = (uint)Math.Ceiling(((double)hdrV2.totalhunks * 8) / 512);
|
||||
uint hunkSectorCount = (uint)Math.Ceiling((double)hdrV2.totalhunks * 8 / 512);
|
||||
|
||||
byte[] hunkSectorBytes = new byte[512];
|
||||
HunkSector hunkSector = new HunkSector();
|
||||
@@ -749,11 +749,11 @@ namespace DiscImageChef.DiscImages
|
||||
handle.Free();
|
||||
// This restores the order of elements
|
||||
Array.Reverse(hunkSector.hunkEntry);
|
||||
if(hunkTable.Length >= (i * 512) / 8 + 512 / 8)
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, (i * 512) / 8, 512 / 8);
|
||||
if(hunkTable.Length >= i * 512 / 8 + 512 / 8)
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, i * 512 / 8, 512 / 8);
|
||||
else
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, (i * 512) / 8,
|
||||
hunkTable.Length - (i * 512) / 8);
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTable, i * 512 / 8,
|
||||
hunkTable.Length - i * 512 / 8);
|
||||
}
|
||||
|
||||
DateTime end = DateTime.UtcNow;
|
||||
@@ -910,7 +910,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
hunkTableSmall = new uint[hdrV5.logicalbytes / hdrV5.hunkbytes];
|
||||
|
||||
uint hunkSectorCount = (uint)Math.Ceiling(((double)hunkTableSmall.Length * 4) / 512);
|
||||
uint hunkSectorCount = (uint)Math.Ceiling((double)hunkTableSmall.Length * 4 / 512);
|
||||
|
||||
byte[] hunkSectorBytes = new byte[512];
|
||||
HunkSectorSmall hunkSector = new HunkSectorSmall();
|
||||
@@ -929,11 +929,11 @@ namespace DiscImageChef.DiscImages
|
||||
handle.Free();
|
||||
// This restores the order of elements
|
||||
Array.Reverse(hunkSector.hunkEntry);
|
||||
if(hunkTableSmall.Length >= (i * 512) / 4 + 512 / 4)
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTableSmall, (i * 512) / 4, 512 / 4);
|
||||
if(hunkTableSmall.Length >= i * 512 / 4 + 512 / 4)
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTableSmall, i * 512 / 4, 512 / 4);
|
||||
else
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTableSmall, (i * 512) / 4,
|
||||
hunkTableSmall.Length - (i * 512) / 4);
|
||||
Array.Copy(hunkSector.hunkEntry, 0, hunkTableSmall, i * 512 / 4,
|
||||
hunkTableSmall.Length - i * 512 / 4);
|
||||
}
|
||||
|
||||
DateTime end = DateTime.UtcNow;
|
||||
@@ -1519,7 +1519,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.XmlMediaType = XmlMediaType.OpticalDisc;
|
||||
|
||||
foreach(Track _trk in tracks.Values)
|
||||
ImageInfo.Sectors += (_trk.TrackEndSector - _trk.TrackStartSector + 1);
|
||||
ImageInfo.Sectors += _trk.TrackEndSector - _trk.TrackStartSector + 1;
|
||||
}
|
||||
else if(isGdrom)
|
||||
{
|
||||
@@ -1529,7 +1529,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.XmlMediaType = XmlMediaType.OpticalDisc;
|
||||
|
||||
foreach(Track _trk in tracks.Values)
|
||||
ImageInfo.Sectors += (_trk.TrackEndSector - _trk.TrackStartSector + 1);
|
||||
ImageInfo.Sectors += _trk.TrackEndSector - _trk.TrackStartSector + 1;
|
||||
}
|
||||
else throw new ImageNotSupportedException("Image does not represent a known media, aborting");
|
||||
}
|
||||
@@ -1545,7 +1545,7 @@ namespace DiscImageChef.DiscImages
|
||||
partition.Description = _track.TrackDescription;
|
||||
partition.Size = (_track.TrackEndSector - _track.TrackStartSector + 1) *
|
||||
(ulong)_track.TrackRawBytesPerSector;
|
||||
partition.Length = (_track.TrackEndSector - _track.TrackStartSector + 1);
|
||||
partition.Length = _track.TrackEndSector - _track.TrackStartSector + 1;
|
||||
partition.Sequence = _track.TrackSequence;
|
||||
partition.Offset = partPos;
|
||||
partition.Start = _track.TrackStartSector;
|
||||
@@ -1657,14 +1657,14 @@ namespace DiscImageChef.DiscImages
|
||||
switch(mapVersion)
|
||||
{
|
||||
case 1:
|
||||
ulong offset = (hunkTable[hunkNo] & 0x00000FFFFFFFFFFF);
|
||||
ulong offset = hunkTable[hunkNo] & 0x00000FFFFFFFFFFF;
|
||||
ulong length = hunkTable[hunkNo] >> 44;
|
||||
|
||||
byte[] compHunk = new byte[length];
|
||||
imageStream.Seek((long)offset, SeekOrigin.Begin);
|
||||
imageStream.Read(compHunk, 0, compHunk.Length);
|
||||
|
||||
if(length == (sectorsPerHunk * ImageInfo.SectorSize)) { hunk = compHunk; }
|
||||
if(length == sectorsPerHunk * ImageInfo.SectorSize) { hunk = compHunk; }
|
||||
else if((ChdCompression)hdrCompression > ChdCompression.Zlib)
|
||||
throw new ImageNotSupportedException(string.Format("Unsupported compression {0}",
|
||||
(ChdCompression)hdrCompression));
|
||||
@@ -1706,7 +1706,7 @@ namespace DiscImageChef.DiscImages
|
||||
DeflateStream zStream =
|
||||
new DeflateStream(new MemoryStream(zHunk), CompressionMode.Decompress);
|
||||
hunk = new byte[bytesPerHunk];
|
||||
int read = zStream.Read(hunk, 0, (int)(bytesPerHunk));
|
||||
int read = zStream.Read(hunk, 0, (int)bytesPerHunk);
|
||||
if(read != bytesPerHunk)
|
||||
throw new
|
||||
IOException(string
|
||||
@@ -1922,7 +1922,7 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
|
||||
ulong hunkNo = sectorAddress / sectorsPerHunk;
|
||||
ulong secOff = (sectorAddress * sectorSize) % (sectorsPerHunk * sectorSize);
|
||||
ulong secOff = sectorAddress * sectorSize % (sectorsPerHunk * sectorSize);
|
||||
|
||||
byte[] hunk = GetHunk(hunkNo);
|
||||
|
||||
@@ -2027,7 +2027,7 @@ namespace DiscImageChef.DiscImages
|
||||
sectorSize = (uint)track.TrackRawBytesPerSector;
|
||||
|
||||
ulong hunkNo = sectorAddress / sectorsPerHunk;
|
||||
ulong secOff = (sectorAddress * sectorSize) % (sectorsPerHunk * sectorSize);
|
||||
ulong secOff = sectorAddress * sectorSize % (sectorsPerHunk * sectorSize);
|
||||
|
||||
byte[] hunk = GetHunk(hunkNo);
|
||||
|
||||
@@ -2304,7 +2304,7 @@ namespace DiscImageChef.DiscImages
|
||||
sectorSize = (uint)track.TrackRawBytesPerSector;
|
||||
|
||||
ulong hunkNo = sectorAddress / sectorsPerHunk;
|
||||
ulong secOff = (sectorAddress * sectorSize) % (sectorsPerHunk * sectorSize);
|
||||
ulong secOff = sectorAddress * sectorSize % (sectorsPerHunk * sectorSize);
|
||||
|
||||
byte[] hunk = GetHunk(hunkNo);
|
||||
|
||||
|
||||
@@ -801,9 +801,9 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
Partition partition = new Partition();
|
||||
partition.Description = track.TrackDescription;
|
||||
partition.Size = ((track.TrackEndSector - track.TrackStartSector) + 1) *
|
||||
partition.Size = (track.TrackEndSector - track.TrackStartSector + 1) *
|
||||
(ulong)track.TrackRawBytesPerSector;
|
||||
partition.Length = (track.TrackEndSector - track.TrackStartSector) + 1;
|
||||
partition.Length = track.TrackEndSector - track.TrackStartSector + 1;
|
||||
ImageInfo.Sectors += partition.Length;
|
||||
partition.Sequence = track.TrackSequence;
|
||||
partition.Offset = track.TrackFileOffset;
|
||||
@@ -848,7 +848,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(!data && !firstdata) ImageInfo.MediaType = MediaType.CDDA;
|
||||
else if(firstaudio && data && sessions.Count > 1 && mode2) ImageInfo.MediaType = MediaType.CDPLUS;
|
||||
else if((firstdata && audio) || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(firstdata && audio || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(!audio) ImageInfo.MediaType = MediaType.CDROM;
|
||||
else ImageInfo.MediaType = MediaType.CD;
|
||||
|
||||
@@ -871,7 +871,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
static ulong GetLba(int hour, int minute, int second, int frame)
|
||||
{
|
||||
return (ulong)((hour * 60 * 60 * 75) + (minute * 60 * 75) + (second * 75) + frame - 150);
|
||||
return (ulong)(hour * 60 * 60 * 75 + minute * 60 * 75 + second * 75 + frame - 150);
|
||||
}
|
||||
|
||||
public override bool ImageHasPartitions()
|
||||
@@ -944,7 +944,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress <= _track.TrackEndSector)
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -965,7 +965,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress <= _track.TrackEndSector)
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -993,7 +993,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if((length + sectorAddress) - 1 > _track.TrackEndSector)
|
||||
if(length + sectorAddress - 1 > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0} {2}) than present in track ({1}), won't cross tracks",
|
||||
@@ -1082,7 +1082,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if((length + sectorAddress) - 1 > (_track.TrackEndSector))
|
||||
if(length + sectorAddress - 1 > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
@@ -1333,8 +1333,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < ((track.TrackEndSector - track.TrackStartSector) + 1))
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1362,7 +1362,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if((length + sectorAddress) - 1 > (_track.TrackEndSector))
|
||||
if(length + sectorAddress - 1 > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
|
||||
@@ -207,7 +207,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
ushort magic = BitConverter.ToUInt16(hdr, 0);
|
||||
|
||||
if(magic != COPYQM_MAGIC || hdr[0x02] != COPYQM_MARK || (133 + hdr[0x6F]) >= stream.Length) return false;
|
||||
if(magic != COPYQM_MAGIC || hdr[0x02] != COPYQM_MARK || 133 + hdr[0x6F] >= stream.Length) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -277,7 +277,7 @@ namespace DiscImageChef.DiscImages
|
||||
byte[] repeatedArray = new byte[runLength * -1];
|
||||
ArrayHelpers.ArrayFill(repeatedArray, repeatedByte);
|
||||
|
||||
for(int i = 0; i < (runLength * -1); i++)
|
||||
for(int i = 0; i < runLength * -1; i++)
|
||||
{
|
||||
decodedImage.WriteByte(repeatedByte);
|
||||
calculatedDataCrc = copyQmCrcTable[(repeatedByte ^ calculatedDataCrc) & 0x3F] ^
|
||||
@@ -297,9 +297,9 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
|
||||
// In case there is omitted data
|
||||
long sectors = (header.sectorsPerTrack) * header.heads * header.totalCylinders;
|
||||
long sectors = header.sectorsPerTrack * header.heads * header.totalCylinders;
|
||||
|
||||
long fillingLen = (sectors * header.sectorSize) - decodedImage.Length;
|
||||
long fillingLen = sectors * header.sectorSize - decodedImage.Length;
|
||||
|
||||
if(fillingLen > 0)
|
||||
{
|
||||
@@ -320,7 +320,7 @@ namespace DiscImageChef.DiscImages
|
||||
headerChecksumOk = ((-1 * sum) & 0xFF) == header.headerChecksum;
|
||||
|
||||
DicConsole.DebugWriteLine("CopyQM plugin", "Calculated header checksum = 0x{0:X2}, {1}",
|
||||
((-1 * sum) & 0xFF), headerChecksumOk);
|
||||
(-1 * sum) & 0xFF, headerChecksumOk);
|
||||
DicConsole.DebugWriteLine("CopyQM plugin", "Calculated data CRC = 0x{0:X8}, {1}", calculatedDataCrc,
|
||||
calculatedDataCrc == header.crc);
|
||||
|
||||
@@ -456,7 +456,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override bool? VerifyMediaImage()
|
||||
{
|
||||
return (calculatedDataCrc == header.crc) && headerChecksumOk;
|
||||
return calculatedDataCrc == header.crc && headerChecksumOk;
|
||||
}
|
||||
|
||||
public override bool ImageHasPartitions()
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace DiscImageChef.DiscImages
|
||||
const int TAG_SECTOR_SIZE = 12;
|
||||
const int DATA_SIZE = SECTORS_PER_BLOCK * SECTOR_SIZE;
|
||||
const int TAG_SIZE = SECTORS_PER_BLOCK * TAG_SECTOR_SIZE;
|
||||
const int BUFFER_SIZE = (SECTORS_PER_BLOCK * SECTOR_SIZE) + (SECTORS_PER_BLOCK * TAG_SECTOR_SIZE);
|
||||
const int BUFFER_SIZE = SECTORS_PER_BLOCK * SECTOR_SIZE + SECTORS_PER_BLOCK * TAG_SECTOR_SIZE;
|
||||
#endregion
|
||||
|
||||
#region Internal Structures
|
||||
@@ -142,7 +142,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(header.srcCmp > COMPRESS_NONE) return false;
|
||||
|
||||
int expectedMaxSize = 84 + (header.srcSize * 2 * 524);
|
||||
int expectedMaxSize = 84 + header.srcSize * 2 * 524;
|
||||
|
||||
switch(header.srcType)
|
||||
{
|
||||
@@ -195,7 +195,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(header.srcCmp > COMPRESS_NONE) return false;
|
||||
|
||||
int expectedMaxSize = 84 + (header.srcSize * 2 * 524);
|
||||
int expectedMaxSize = 84 + header.srcSize * 2 * 524;
|
||||
|
||||
switch(header.srcType)
|
||||
{
|
||||
@@ -488,9 +488,9 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
for(uint i = 0; i < length; i++)
|
||||
{
|
||||
Array.Copy(data, i * (ImageInfo.SectorSize), buffer, i * (ImageInfo.SectorSize + TAG_SECTOR_SIZE),
|
||||
Array.Copy(data, i * ImageInfo.SectorSize, buffer, i * (ImageInfo.SectorSize + TAG_SECTOR_SIZE),
|
||||
ImageInfo.SectorSize);
|
||||
Array.Copy(tags, i * (TAG_SECTOR_SIZE), buffer,
|
||||
Array.Copy(tags, i * TAG_SECTOR_SIZE, buffer,
|
||||
i * (ImageInfo.SectorSize + TAG_SECTOR_SIZE) + ImageInfo.SectorSize, TAG_SECTOR_SIZE);
|
||||
}
|
||||
|
||||
|
||||
@@ -622,7 +622,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(!data && !firstdata) ImageInfo.MediaType = MediaType.CDDA;
|
||||
else if(firstaudio && data && sessions.Count > 1 && mode2) ImageInfo.MediaType = MediaType.CDPLUS;
|
||||
else if((firstdata && audio) || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(firstdata && audio || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(!audio) ImageInfo.MediaType = MediaType.CDROM;
|
||||
else ImageInfo.MediaType = MediaType.CD;
|
||||
}
|
||||
@@ -712,7 +712,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress < _track.TrackEndSector)
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -733,7 +733,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress < _track.TrackEndSector)
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -761,7 +761,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector))
|
||||
if(length + sectorAddress > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
@@ -863,7 +863,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector))
|
||||
if(length + sectorAddress > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
@@ -1080,8 +1080,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (track.TrackEndSector - track.TrackStartSector))
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1109,7 +1109,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if(length + sectorAddress > (_track.TrackEndSector))
|
||||
if(length + sectorAddress > _track.TrackEndSector)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
string
|
||||
.Format("Requested more sectors ({0}) than present in track ({1}), won't cross tracks",
|
||||
|
||||
@@ -402,22 +402,22 @@ namespace DiscImageChef.DiscImages
|
||||
twiggy = true;
|
||||
|
||||
Stream datastream = imageFilter.GetDataForkStream();
|
||||
datastream.Seek((dataOffset), SeekOrigin.Begin);
|
||||
datastream.Seek(dataOffset, SeekOrigin.Begin);
|
||||
datastream.Read(data, 0, (int)header.DataSize);
|
||||
|
||||
Stream tagstream = imageFilter.GetDataForkStream();
|
||||
tagstream.Seek((tagOffset), SeekOrigin.Begin);
|
||||
tagstream.Seek(tagOffset, SeekOrigin.Begin);
|
||||
tagstream.Read(tags, 0, (int)header.TagSize);
|
||||
|
||||
ushort mfsMagic = BigEndianBitConverter.ToUInt16(data, (int)((data.Length / 2) + 0x400));
|
||||
ushort mfsAllBlocks = BigEndianBitConverter.ToUInt16(data, (int)((data.Length / 2) + 0x412));
|
||||
ushort mfsMagic = BigEndianBitConverter.ToUInt16(data, (int)(data.Length / 2 + 0x400));
|
||||
ushort mfsAllBlocks = BigEndianBitConverter.ToUInt16(data, (int)(data.Length / 2 + 0x412));
|
||||
|
||||
// Detect a Macintosh Twiggy
|
||||
if(mfsMagic == 0xD2D7 && mfsAllBlocks == 422)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Macintosh Twiggy detected, reversing disk sides");
|
||||
Array.Copy(data, (header.DataSize / 2), twiggyCache, 0, header.DataSize / 2);
|
||||
Array.Copy(tags, (header.TagSize / 2), twiggyCacheTags, 0, header.TagSize / 2);
|
||||
Array.Copy(data, header.DataSize / 2, twiggyCache, 0, header.DataSize / 2);
|
||||
Array.Copy(tags, header.TagSize / 2, twiggyCacheTags, 0, header.TagSize / 2);
|
||||
Array.Copy(data, 0, twiggyCache, header.DataSize / 2, header.DataSize / 2);
|
||||
Array.Copy(tags, 0, twiggyCacheTags, header.TagSize / 2, header.TagSize / 2);
|
||||
}
|
||||
@@ -588,7 +588,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.SectorsPerTrack = 16;
|
||||
break;
|
||||
default:
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
break;
|
||||
@@ -638,7 +638,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Reading data");
|
||||
Stream datastream = dc42ImageFilter.GetDataForkStream();
|
||||
datastream.Seek((dataOffset), SeekOrigin.Begin);
|
||||
datastream.Seek(dataOffset, SeekOrigin.Begin);
|
||||
datastream.Read(data, 0, (int)header.DataSize);
|
||||
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Calculating data checksum");
|
||||
@@ -650,7 +650,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Reading tags");
|
||||
Stream tagstream = dc42ImageFilter.GetDataForkStream();
|
||||
tagstream.Seek((tagOffset), SeekOrigin.Begin);
|
||||
tagstream.Seek(tagOffset, SeekOrigin.Begin);
|
||||
tagstream.Read(tags, 0, (int)header.TagSize);
|
||||
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Calculating tag checksum");
|
||||
@@ -762,9 +762,9 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
for(uint i = 0; i < length; i++)
|
||||
{
|
||||
Array.Copy(data, i * (ImageInfo.SectorSize), buffer, i * (ImageInfo.SectorSize + bptag),
|
||||
Array.Copy(data, i * ImageInfo.SectorSize, buffer, i * (ImageInfo.SectorSize + bptag),
|
||||
ImageInfo.SectorSize);
|
||||
Array.Copy(tags, i * (bptag), buffer, i * (ImageInfo.SectorSize + bptag) + ImageInfo.SectorSize, bptag);
|
||||
Array.Copy(tags, i * bptag, buffer, i * (ImageInfo.SectorSize + bptag) + ImageInfo.SectorSize, bptag);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
|
||||
@@ -211,7 +211,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(tmpFooter.bpb.sptrack * tmpFooter.bpb.cylinders * tmpFooter.bpb.heads !=
|
||||
tmpFooter.bpb.sectors) return false;
|
||||
|
||||
if((tmpFooter.bpb.sectors * tmpFooter.bpb.bps) + Marshal.SizeOf(tmpFooter) != stream.Length)
|
||||
if(tmpFooter.bpb.sectors * tmpFooter.bpb.bps + Marshal.SizeOf(tmpFooter) != stream.Length)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -242,7 +242,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(footer.bpb.sptrack * footer.bpb.cylinders * footer.bpb.heads != footer.bpb.sectors) return false;
|
||||
|
||||
if((footer.bpb.sectors * footer.bpb.bps) + Marshal.SizeOf(footer) != stream.Length) return false;
|
||||
if(footer.bpb.sectors * footer.bpb.bps + Marshal.SizeOf(footer) != stream.Length) return false;
|
||||
|
||||
ImageInfo.Cylinders = footer.bpb.cylinders;
|
||||
ImageInfo.Heads = footer.bpb.heads;
|
||||
|
||||
@@ -257,23 +257,23 @@ namespace DiscImageChef.DiscImages
|
||||
.Trim(new[] {'"'})));
|
||||
currentTrack.Trackfile = currentTrack.Trackfilter.GetFilename();
|
||||
|
||||
if((currentTrack.StartSector - currentStart) > 0)
|
||||
if(currentTrack.StartSector - currentStart > 0)
|
||||
{
|
||||
if(currentTrack.StartSector == 45000)
|
||||
{
|
||||
highDensity = true;
|
||||
offsetmap.Add(0, currentStart);
|
||||
densitySeparationSectors = (currentTrack.StartSector - currentStart);
|
||||
densitySeparationSectors = currentTrack.StartSector - currentStart;
|
||||
currentStart = currentTrack.StartSector;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentTrack.Pregap = (currentTrack.StartSector - currentStart);
|
||||
currentTrack.StartSector -= (currentTrack.StartSector - currentStart);
|
||||
currentTrack.Pregap = currentTrack.StartSector - currentStart;
|
||||
currentTrack.StartSector -= currentTrack.StartSector - currentStart;
|
||||
}
|
||||
}
|
||||
|
||||
if(((currentTrack.Trackfilter.GetDataForkLength() - currentTrack.Offset) % currentTrack.Bps) !=
|
||||
if((currentTrack.Trackfilter.GetDataForkLength() - currentTrack.Offset) % currentTrack.Bps !=
|
||||
0) throw new ImageNotSupportedException("Track size not a multiple of sector size");
|
||||
|
||||
currentTrack.Sectors =
|
||||
@@ -309,7 +309,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_sessions[s].StartSector > trk.StartSector)
|
||||
_sessions[s].StartSector = trk.StartSector;
|
||||
|
||||
if(_sessions[s].EndSector < (trk.Sectors + trk.StartSector - 1))
|
||||
if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1)
|
||||
_sessions[s].EndSector = trk.Sectors + trk.StartSector - 1;
|
||||
}
|
||||
}
|
||||
@@ -330,7 +330,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_sessions[s].StartSector > trk.StartSector)
|
||||
_sessions[s].StartSector = trk.StartSector;
|
||||
|
||||
if(_sessions[s].EndSector < (trk.Sectors + trk.StartSector - 1))
|
||||
if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1)
|
||||
_sessions[s].EndSector = trk.Sectors + trk.StartSector - 1;
|
||||
}
|
||||
}
|
||||
@@ -506,8 +506,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(gdiTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < gdiTrack.Sectors)
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < gdiTrack.Sectors)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -515,8 +515,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
ulong transitionStart;
|
||||
offsetmap.TryGetValue(0, out transitionStart);
|
||||
if(sectorAddress >= transitionStart && sectorAddress < (densitySeparationSectors + transitionStart))
|
||||
return ReadSectors((sectorAddress - transitionStart), length, 0);
|
||||
if(sectorAddress >= transitionStart && sectorAddress < densitySeparationSectors + transitionStart)
|
||||
return ReadSectors(sectorAddress - transitionStart, length, 0);
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -531,8 +531,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(gdiTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < gdiTrack.Sectors)
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
if(sectorAddress - kvp.Value < gdiTrack.Sectors)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -540,8 +540,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
ulong transitionStart;
|
||||
offsetmap.TryGetValue(0, out transitionStart);
|
||||
if(sectorAddress >= transitionStart && sectorAddress < (densitySeparationSectors + transitionStart))
|
||||
return ReadSectorsTag((sectorAddress - transitionStart), length, 0, tag);
|
||||
if(sectorAddress >= transitionStart && sectorAddress < densitySeparationSectors + transitionStart)
|
||||
return ReadSectorsTag(sectorAddress - transitionStart, length, 0, tag);
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -550,7 +550,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track == 0)
|
||||
{
|
||||
if((sectorAddress + length) > densitySeparationSectors)
|
||||
if(sectorAddress + length > densitySeparationSectors)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
"Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
@@ -573,7 +573,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if((sectorAddress + length) > _track.Sectors)
|
||||
if(sectorAddress + length > _track.Sectors)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
"Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
@@ -658,7 +658,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track == 0)
|
||||
{
|
||||
if((sectorAddress + length) > densitySeparationSectors)
|
||||
if(sectorAddress + length > densitySeparationSectors)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
"Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
@@ -838,8 +838,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(gdiTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < gdiTrack.Sectors)
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < gdiTrack.Sectors)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -852,7 +852,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(track == 0)
|
||||
{
|
||||
if((sectorAddress + length) > densitySeparationSectors)
|
||||
if(sectorAddress + length > densitySeparationSectors)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
"Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
@@ -875,7 +875,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
|
||||
if((sectorAddress + length) > _track.Sectors)
|
||||
if(sectorAddress + length > _track.Sectors)
|
||||
throw new ArgumentOutOfRangeException(nameof(length),
|
||||
"Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
|
||||
@@ -215,12 +215,12 @@ namespace DiscImageChef.DiscImages
|
||||
* We know the image is from a DOS floppy disk, so assume
|
||||
* some sane cylinder and sectors-per-track count.
|
||||
*/
|
||||
if((fheader.sectorsPerTrack < 8) || (fheader.sectorsPerTrack > 40)) return false;
|
||||
if(fheader.sectorsPerTrack < 8 || fheader.sectorsPerTrack > 40) return false;
|
||||
|
||||
if((fheader.lastCylinder < 37) || (fheader.lastCylinder >= 82)) return false;
|
||||
if(fheader.lastCylinder < 37 || fheader.lastCylinder >= 82) return false;
|
||||
|
||||
// Validate the trackmap. First two tracks need to be present
|
||||
if((fheader.trackMap[0] != 1) || (fheader.trackMap[1] != 1)) return false;
|
||||
if(fheader.trackMap[0] != 1 || fheader.trackMap[1] != 1) return false;
|
||||
|
||||
// all other tracks must be either present (=1) or absent (=0)
|
||||
for(int i = 0; i < 2 * 82; i++) { if(fheader.trackMap[i] > 1) return false; }
|
||||
@@ -375,7 +375,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
foreach(MediaTypeTableEntry ent in mediaTypes)
|
||||
{
|
||||
if((ent.Tracks == ImageInfo.Cylinders) && (ent.SectorsPerTrack == ImageInfo.SectorsPerTrack))
|
||||
if(ent.Tracks == ImageInfo.Cylinders && ent.SectorsPerTrack == ImageInfo.SectorsPerTrack)
|
||||
return ent.MediaType;
|
||||
}
|
||||
|
||||
|
||||
@@ -325,19 +325,19 @@ namespace DiscImageChef.DiscImages
|
||||
bChnk.sector += (uint)ImageInfo.Sectors;
|
||||
|
||||
// TODO: Handle compressed chunks
|
||||
if((bChnk.type == CHUNK_TYPE_KENCODE))
|
||||
if(bChnk.type == CHUNK_TYPE_KENCODE)
|
||||
throw new ImageNotSupportedException("Chunks compressed with KenCode are not yet supported.");
|
||||
if((bChnk.type == CHUNK_TYPE_RLE))
|
||||
if(bChnk.type == CHUNK_TYPE_RLE)
|
||||
throw new ImageNotSupportedException("Chunks compressed with RLE are not yet supported.");
|
||||
if((bChnk.type == CHUNK_TYPE_LZH))
|
||||
if(bChnk.type == CHUNK_TYPE_LZH)
|
||||
throw new ImageNotSupportedException("Chunks compressed with LZH are not yet supported.");
|
||||
if((bChnk.type == CHUNK_TYPE_STUFFIT))
|
||||
if(bChnk.type == CHUNK_TYPE_STUFFIT)
|
||||
throw new ImageNotSupportedException("Chunks compressed with StuffIt! are not yet supported.");
|
||||
|
||||
// TODO: Handle compressed chunks
|
||||
if((bChnk.type > CHUNK_TYPE_COPY && bChnk.type < CHUNK_TYPE_KENCODE) ||
|
||||
(bChnk.type > CHUNK_TYPE_ADC && bChnk.type < CHUNK_TYPE_STUFFIT) ||
|
||||
(bChnk.type > CHUNK_TYPE_STUFFIT && bChnk.type < CHUNK_TYPE_END) ||
|
||||
if(bChnk.type > CHUNK_TYPE_COPY && bChnk.type < CHUNK_TYPE_KENCODE ||
|
||||
bChnk.type > CHUNK_TYPE_ADC && bChnk.type < CHUNK_TYPE_STUFFIT ||
|
||||
bChnk.type > CHUNK_TYPE_STUFFIT && bChnk.type < CHUNK_TYPE_END ||
|
||||
bChnk.type == 1)
|
||||
throw new ImageNotSupportedException(string.Format("Unsupported chunk type 0x{0:X8} found",
|
||||
bChnk.type));
|
||||
@@ -458,7 +458,7 @@ namespace DiscImageChef.DiscImages
|
||||
break;
|
||||
default:
|
||||
ImageInfo.MediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
break;
|
||||
|
||||
@@ -1009,20 +1009,20 @@ namespace DiscImageChef.DiscImages
|
||||
entry.Second = tmpbuffer[6];
|
||||
entry.Frame = tmpbuffer[7];
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Cuesheet entry {0}", (i / 8) + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1:X2}", (i / 8) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Cuesheet entry {0}", i / 8 + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1:X2}", i / 8 + 1,
|
||||
entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].TrackNumber = {1:X2}",
|
||||
(i / 8) + 1, entry.TrackNumber);
|
||||
i / 8 + 1, entry.TrackNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].IndexNumber = {1:X2}",
|
||||
(i / 8) + 1, entry.IndexNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Dummy = {1:X4}", (i / 8) + 1,
|
||||
i / 8 + 1, entry.IndexNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Dummy = {1:X4}", i / 8 + 1,
|
||||
entry.Dummy);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Minute = {1:X2}", (i / 8) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Minute = {1:X2}", i / 8 + 1,
|
||||
entry.Minute);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Second = {1:X2}", (i / 8) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Second = {1:X2}", i / 8 + 1,
|
||||
entry.Second);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Frame = {1:X2}", (i / 8) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Frame = {1:X2}", i / 8 + 1,
|
||||
entry.Frame);
|
||||
|
||||
neroCuesheetV1.Entries.Add(entry);
|
||||
@@ -1051,16 +1051,16 @@ namespace DiscImageChef.DiscImages
|
||||
entry.Dummy = tmpbuffer[3];
|
||||
entry.LbaStart = BigEndianBitConverter.ToInt32(tmpbuffer, 4);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Cuesheet entry {0}", (i / 8) + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = 0x{1:X2}", (i / 8) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Cuesheet entry {0}", i / 8 + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = 0x{1:X2}", i / 8 + 1,
|
||||
entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].TrackNumber = {1:X2}",
|
||||
(i / 8) + 1, entry.TrackNumber);
|
||||
i / 8 + 1, entry.TrackNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].IndexNumber = {1:X2}",
|
||||
(i / 8) + 1, entry.IndexNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Dummy = {1:X2}", (i / 8) + 1,
|
||||
i / 8 + 1, entry.IndexNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Dummy = {1:X2}", i / 8 + 1,
|
||||
entry.Dummy);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].LBAStart = {1}", (i / 8) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].LBAStart = {1}", i / 8 + 1,
|
||||
entry.LbaStart);
|
||||
|
||||
neroCuesheetV2.Entries.Add(entry);
|
||||
@@ -1105,7 +1105,7 @@ namespace DiscImageChef.DiscImages
|
||||
upc = neroDaov1.Upc;
|
||||
|
||||
tmpbuffer = new byte[30];
|
||||
for(int i = 0; i < (neroDaov1.ChunkSizeBe - 22); i += 30)
|
||||
for(int i = 0; i < neroDaov1.ChunkSizeBe - 22; i += 30)
|
||||
{
|
||||
NeroV1DaoEntry entry = new NeroV1DaoEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 30);
|
||||
@@ -1118,21 +1118,21 @@ namespace DiscImageChef.DiscImages
|
||||
entry.Index1 = BigEndianBitConverter.ToUInt32(tmpbuffer, 22);
|
||||
entry.EndOfTrack = BigEndianBitConverter.ToUInt32(tmpbuffer, 26);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Disc-At-Once entry {0}", (i / 32) + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].ISRC = \"{1}\"", (i / 32) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Disc-At-Once entry {0}", i / 32 + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].ISRC = \"{1}\"", i / 32 + 1,
|
||||
StringHandlers.CToString(entry.Isrc));
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].SectorSize = {1}",
|
||||
(i / 32) + 1, entry.SectorSize);
|
||||
i / 32 + 1, entry.SectorSize);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
i / 32 + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
(i / 32) + 1, entry.Unknown);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index0 = {1}", (i / 32) + 1,
|
||||
i / 32 + 1, entry.Unknown);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index0 = {1}", i / 32 + 1,
|
||||
entry.Index0);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index1 = {1}", (i / 32) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index1 = {1}", i / 32 + 1,
|
||||
entry.Index1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].EndOfTrack = {1}",
|
||||
(i / 32) + 1, entry.EndOfTrack);
|
||||
i / 32 + 1, entry.EndOfTrack);
|
||||
|
||||
neroDaov1.Tracks.Add(entry);
|
||||
|
||||
@@ -1199,7 +1199,7 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("Nero plugin", "neroDAOV2.LastTrack = {0}", neroDaov2.LastTrack);
|
||||
|
||||
tmpbuffer = new byte[42];
|
||||
for(int i = 0; i < (neroDaov2.ChunkSizeBe - 22); i += 42)
|
||||
for(int i = 0; i < neroDaov2.ChunkSizeBe - 22; i += 42)
|
||||
{
|
||||
NeroV2DaoEntry entry = new NeroV2DaoEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 42);
|
||||
@@ -1212,21 +1212,21 @@ namespace DiscImageChef.DiscImages
|
||||
entry.Index1 = BigEndianBitConverter.ToUInt64(tmpbuffer, 26);
|
||||
entry.EndOfTrack = BigEndianBitConverter.ToUInt64(tmpbuffer, 34);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Disc-At-Once entry {0}", (i / 32) + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].ISRC = \"{1}\"", (i / 32) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Disc-At-Once entry {0}", i / 32 + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].ISRC = \"{1}\"", i / 32 + 1,
|
||||
StringHandlers.CToString(entry.Isrc));
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].SectorSize = {1}",
|
||||
(i / 32) + 1, entry.SectorSize);
|
||||
i / 32 + 1, entry.SectorSize);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
i / 32 + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = {1:X2}",
|
||||
(i / 32) + 1, entry.Unknown);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index0 = {1}", (i / 32) + 1,
|
||||
i / 32 + 1, entry.Unknown);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index0 = {1}", i / 32 + 1,
|
||||
entry.Index0);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index1 = {1}", (i / 32) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Index1 = {1}", i / 32 + 1,
|
||||
entry.Index1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].EndOfTrack = {1}",
|
||||
(i / 32) + 1, entry.EndOfTrack);
|
||||
i / 32 + 1, entry.EndOfTrack);
|
||||
|
||||
neroDaov2.Tracks.Add(entry);
|
||||
|
||||
@@ -1268,7 +1268,7 @@ namespace DiscImageChef.DiscImages
|
||||
neroCdtxt.Packs = new List<NeroCdTextPack>();
|
||||
|
||||
byte[] tmpbuffer = new byte[18];
|
||||
for(int i = 0; i < (neroCdtxt.ChunkSize); i += 18)
|
||||
for(int i = 0; i < neroCdtxt.ChunkSize; i += 18)
|
||||
{
|
||||
NeroCdTextPack entry = new NeroCdTextPack();
|
||||
imageStream.Read(tmpbuffer, 0, 18);
|
||||
@@ -1281,18 +1281,18 @@ namespace DiscImageChef.DiscImages
|
||||
Array.Copy(tmpbuffer, 4, entry.Text, 0, 12);
|
||||
entry.Crc = BigEndianBitConverter.ToUInt16(tmpbuffer, 16);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "CD-TEXT entry {0}", (i / 18) + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "CD-TEXT entry {0}", i / 18 + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].PackType = 0x{1:X2}",
|
||||
(i / 18) + 1, entry.PackType);
|
||||
i / 18 + 1, entry.PackType);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].TrackNumber = 0x{1:X2}",
|
||||
(i / 18) + 1, entry.TrackNumber);
|
||||
i / 18 + 1, entry.TrackNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].PackNumber = 0x{1:X2}",
|
||||
(i / 18) + 1, entry.PackNumber);
|
||||
i / 18 + 1, entry.PackNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].BlockNumber = 0x{1:X2}",
|
||||
(i / 18) + 1, entry.BlockNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Text = \"{1}\"", (i / 18) + 1,
|
||||
i / 18 + 1, entry.BlockNumber);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Text = \"{1}\"", i / 18 + 1,
|
||||
StringHandlers.CToString(entry.Text));
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].CRC = 0x{1:X4}", (i / 18) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].CRC = 0x{1:X4}", i / 18 + 1,
|
||||
entry.Crc);
|
||||
|
||||
neroCdtxt.Packs.Add(entry);
|
||||
@@ -1311,7 +1311,7 @@ namespace DiscImageChef.DiscImages
|
||||
neroTaov1.Tracks = new List<NeroV1TaoEntry>();
|
||||
|
||||
byte[] tmpbuffer = new byte[20];
|
||||
for(int i = 0; i < (neroTaov1.ChunkSize); i += 20)
|
||||
for(int i = 0; i < neroTaov1.ChunkSize; i += 20)
|
||||
{
|
||||
NeroV1TaoEntry entry = new NeroV1TaoEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 20);
|
||||
@@ -1322,17 +1322,17 @@ namespace DiscImageChef.DiscImages
|
||||
entry.StartLba = BigEndianBitConverter.ToUInt32(tmpbuffer, 12);
|
||||
entry.Unknown = BigEndianBitConverter.ToUInt32(tmpbuffer, 16);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Track-at-Once entry {0}", (i / 20) + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Offset = {1}", (i / 20) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Track-at-Once entry {0}", i / 20 + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Offset = {1}", i / 20 + 1,
|
||||
entry.Offset);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Length = {1} bytes",
|
||||
(i / 20) + 1, entry.Length);
|
||||
i / 20 + 1, entry.Length);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
(i / 20) + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].StartLBA = {1}", (i / 20) + 1,
|
||||
i / 20 + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].StartLBA = {1}", i / 20 + 1,
|
||||
entry.StartLba);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
(i / 20) + 1, entry.Unknown);
|
||||
i / 20 + 1, entry.Unknown);
|
||||
|
||||
neroTaov1.Tracks.Add(entry);
|
||||
|
||||
@@ -1372,7 +1372,7 @@ namespace DiscImageChef.DiscImages
|
||||
neroTaov2.Tracks = new List<NeroV2TaoEntry>();
|
||||
|
||||
byte[] tmpbuffer = new byte[32];
|
||||
for(int i = 0; i < (neroTaov2.ChunkSize); i += 32)
|
||||
for(int i = 0; i < neroTaov2.ChunkSize; i += 32)
|
||||
{
|
||||
NeroV2TaoEntry entry = new NeroV2TaoEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 32);
|
||||
@@ -1384,18 +1384,18 @@ namespace DiscImageChef.DiscImages
|
||||
entry.Unknown = BigEndianBitConverter.ToUInt32(tmpbuffer, 24);
|
||||
entry.Sectors = BigEndianBitConverter.ToUInt32(tmpbuffer, 28);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Track-at-Once entry {0}", (i / 32) + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Offset = {1}", (i / 32) + 1,
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Track-at-Once entry {0}", i / 32 + 1);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Offset = {1}", i / 32 + 1,
|
||||
entry.Offset);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Length = {1} bytes",
|
||||
(i / 32) + 1, entry.Length);
|
||||
i / 32 + 1, entry.Length);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
(i / 32) + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].StartLBA = {1}", (i / 32) + 1,
|
||||
i / 32 + 1, (DaoMode)entry.Mode, entry.Mode);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].StartLBA = {1}", i / 32 + 1,
|
||||
entry.StartLba);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
(i / 32) + 1, entry.Unknown);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Sectors = {1}", (i / 32) + 1,
|
||||
i / 32 + 1, entry.Unknown);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t _entry[{0}].Sectors = {1}", i / 32 + 1,
|
||||
entry.Sectors);
|
||||
|
||||
neroTaov2.Tracks.Add(entry);
|
||||
@@ -1594,7 +1594,7 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Indexes.Add(0, neroTrack.Index0 / neroTrack.SectorSize);
|
||||
_track.Indexes.Add(1, neroTrack.Index1 / neroTrack.SectorSize);
|
||||
_track.TrackDescription = StringHandlers.CToString(neroTrack.Isrc);
|
||||
_track.TrackEndSector = (neroTrack.Length / neroTrack.SectorSize) + neroTrack.StartLba - 1;
|
||||
_track.TrackEndSector = neroTrack.Length / neroTrack.SectorSize + neroTrack.StartLba - 1;
|
||||
_track.TrackPregap = (neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize;
|
||||
_track.TrackSequence = neroTrack.Sequence;
|
||||
_track.TrackSession = currentsession;
|
||||
@@ -1716,13 +1716,13 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
partition = new Partition();
|
||||
partition.Description = string.Format("Track {0} Index 1", _track.TrackSequence);
|
||||
partition.Size = (neroTrack.EndOfTrack - neroTrack.Index1);
|
||||
partition.Size = neroTrack.EndOfTrack - neroTrack.Index1;
|
||||
partition.Name = StringHandlers.CToString(neroTrack.Isrc);
|
||||
partition.Length = partition.Size / neroTrack.SectorSize;
|
||||
partition.Sequence = partitionSequence;
|
||||
partition.Offset = partitionStartByte;
|
||||
partition.Start = neroTrack.StartLba +
|
||||
((neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize);
|
||||
(neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize;
|
||||
partition.Type = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode).ToString();
|
||||
imagePartitions.Add(partition);
|
||||
partitionSequence++;
|
||||
@@ -1747,12 +1747,10 @@ namespace DiscImageChef.DiscImages
|
||||
(DaoMode)neroTracks.ElementAt(i).Value.Mode == DaoMode.AudioSub);
|
||||
|
||||
// First track is data
|
||||
firstdata |= i == 0 && ((DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio &&
|
||||
(DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub);
|
||||
firstdata |= i == 0 && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub;
|
||||
|
||||
// Any non first track is data
|
||||
data |= i != 0 && ((DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio &&
|
||||
(DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub);
|
||||
data |= i != 0 && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.Audio && (DaoMode)neroTracks.ElementAt(i).Value.Mode != DaoMode.AudioSub;
|
||||
|
||||
// Any non first track is audio
|
||||
audio |= i != 0 && ((DaoMode)neroTracks.ElementAt(i).Value.Mode == DaoMode.Audio ||
|
||||
@@ -1772,7 +1770,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(!data && !firstdata) ImageInfo.MediaType = MediaType.CDDA;
|
||||
else if(firstaudio && data && imageSessions.Count > 1 && mode2)
|
||||
ImageInfo.MediaType = MediaType.CDPLUS;
|
||||
else if((firstdata && audio) || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(firstdata && audio || mode2) ImageInfo.MediaType = MediaType.CDROMXA;
|
||||
else if(!audio) ImageInfo.MediaType = MediaType.CDROM;
|
||||
else ImageInfo.MediaType = MediaType.CD;
|
||||
}
|
||||
@@ -1851,8 +1849,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1872,8 +1870,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2237,8 +2235,8 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
clusterBytes = pHdr.cluster_size * 512;
|
||||
if(pHdr.data_off > 0) dataOffset = pHdr.data_off * 512;
|
||||
else dataOffset = ((stream.Position / clusterBytes) + (stream.Position % clusterBytes)) * clusterBytes;
|
||||
else dataOffset = (stream.Position / clusterBytes + stream.Position % clusterBytes) * clusterBytes;
|
||||
|
||||
sectorCache = new Dictionary<ulong, byte[]>();
|
||||
|
||||
@@ -224,7 +224,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.ImageSize = pHdr.sectors * 512;
|
||||
ImageInfo.Cylinders = pHdr.cylinders;
|
||||
ImageInfo.Heads = pHdr.heads;
|
||||
ImageInfo.SectorsPerTrack = (uint)((ImageInfo.Sectors / ImageInfo.Cylinders) / ImageInfo.Heads);
|
||||
ImageInfo.SectorsPerTrack = (uint)(ImageInfo.Sectors / ImageInfo.Cylinders / ImageInfo.Heads);
|
||||
imageStream = stream;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -289,7 +289,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.MediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.ImageSize = qHdr.size;
|
||||
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
|
||||
@@ -355,7 +355,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
compSizeMask = (ulong)(1 << qHdr.cluster_bits) - 1;
|
||||
compSizeMask <<= 63 - qHdr.cluster_bits;
|
||||
offMask = (~compSizeMask) ^ QCOW_COMPRESSED;
|
||||
offMask = ~compSizeMask ^ QCOW_COMPRESSED;
|
||||
|
||||
ulong realOff = offset & offMask;
|
||||
ulong compSize = (offset & compSizeMask) >> (63 - qHdr.cluster_bits);
|
||||
|
||||
@@ -336,7 +336,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.ImageSize = qHdr.size;
|
||||
ImageInfo.ImageVersion = string.Format("{0}", qHdr.version);
|
||||
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
|
||||
@@ -402,8 +402,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
compSizeMask = (ulong)(1 << (int)(qHdr.cluster_bits - 8)) - 1;
|
||||
byte countbits = (byte)(qHdr.cluster_bits - 8);
|
||||
compSizeMask <<= (62 - countbits);
|
||||
offMask = (~compSizeMask) & QCOW_FLAGS_MASK;
|
||||
compSizeMask <<= 62 - countbits;
|
||||
offMask = ~compSizeMask & QCOW_FLAGS_MASK;
|
||||
|
||||
ulong realOff = offset & offMask;
|
||||
ulong compSize = (((offset & compSizeMask) >> (62 - countbits)) + 1) * 512;
|
||||
|
||||
@@ -242,7 +242,7 @@ namespace DiscImageChef.DiscImages
|
||||
throw new NotImplementedException("Differencing images not yet supported");
|
||||
|
||||
clusterSectors = qHdr.cluster_size / 512;
|
||||
tableSize = (qHdr.cluster_size * qHdr.table_size) / 8;
|
||||
tableSize = qHdr.cluster_size * qHdr.table_size / 8;
|
||||
|
||||
DicConsole.DebugWriteLine("QED plugin", "qHdr.clusterSectors = {0}", clusterSectors);
|
||||
DicConsole.DebugWriteLine("QED plugin", "qHdr.tableSize = {0}", tableSize);
|
||||
@@ -280,7 +280,7 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("QED plugin", "qHdr.l2Mask = {0:X}", l2Mask);
|
||||
DicConsole.DebugWriteLine("QED plugin", "qHdr.sectorMask = {0:X}", sectorMask);
|
||||
|
||||
maxL2TableCache = MAX_CACHE_SIZE / (tableSize);
|
||||
maxL2TableCache = MAX_CACHE_SIZE / tableSize;
|
||||
maxClusterCache = MAX_CACHE_SIZE / qHdr.cluster_size;
|
||||
|
||||
imageStream = stream;
|
||||
@@ -298,7 +298,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.MediaType = MediaType.GENERIC_HDD;
|
||||
ImageInfo.ImageSize = qHdr.image_size;
|
||||
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
|
||||
@@ -468,9 +468,9 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
bool IsPowerOfTwo(uint x)
|
||||
{
|
||||
while(((x & 1) == 0) && x > 1) x >>= 1;
|
||||
while((x & 1) == 0 && x > 1) x >>= 1;
|
||||
|
||||
return (x == 1);
|
||||
return x == 1;
|
||||
}
|
||||
|
||||
static int Ctz32(uint val)
|
||||
|
||||
@@ -154,7 +154,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(ImageInfo.Cylinders == 0 || ImageInfo.Heads == 0 || ImageInfo.SectorsPerTrack == 0)
|
||||
{
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@ namespace DiscImageChef.DiscImages
|
||||
while(b >= 0);
|
||||
|
||||
// In case there is omitted data
|
||||
sectors = (header.sectorsPerTrack) * header.heads * header.cylinders;
|
||||
sectors = header.sectorsPerTrack * header.heads * header.cylinders;
|
||||
|
||||
DicConsole.DebugWriteLine("SaveDskF plugin", "Calculated checksum = 0x{0:X8}, {1}", calculatedChk,
|
||||
calculatedChk == header.checksum);
|
||||
|
||||
@@ -90,7 +90,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
// This format is expanding, so length can be smaller
|
||||
// Just grow it, I won't risk false positives...
|
||||
return stream.Length == (cylinders * 8 * 33 * 256) + 256;
|
||||
return stream.Length == cylinders * 8 * 33 * 256 + 256;
|
||||
}
|
||||
|
||||
public override bool OpenImage(Filter imageFilter)
|
||||
@@ -113,7 +113,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.ImageCreationTime = imageFilter.GetCreationTime();
|
||||
ImageInfo.ImageLastModificationTime = imageFilter.GetLastWriteTime();
|
||||
ImageInfo.ImageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename());
|
||||
ImageInfo.Sectors = (ulong)((stream.Length / 256) - 1);
|
||||
ImageInfo.Sectors = (ulong)(stream.Length / 256 - 1);
|
||||
ImageInfo.XmlMediaType = XmlMediaType.BlockMedia;
|
||||
ImageInfo.SectorSize = 256;
|
||||
ImageInfo.Cylinders = (uint)cylinders;
|
||||
|
||||
@@ -642,8 +642,8 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "\t\tSector CRC (plus headers): 0x{0:X2}",
|
||||
teleDiskSector.Crc);
|
||||
|
||||
uint lba = (uint)((teleDiskSector.Cylinder * header.Sides * ImageInfo.SectorsPerTrack) +
|
||||
(teleDiskSector.Head * ImageInfo.SectorsPerTrack) + (teleDiskSector.SectorNumber - 1));
|
||||
uint lba = (uint)(teleDiskSector.Cylinder * header.Sides * ImageInfo.SectorsPerTrack +
|
||||
teleDiskSector.Head * ImageInfo.SectorsPerTrack + (teleDiskSector.SectorNumber - 1));
|
||||
if((teleDiskSector.Flags & FLAGS_SECTOR_DATALESS) != FLAGS_SECTOR_DATALESS &&
|
||||
(teleDiskSector.Flags & FLAGS_SECTOR_SKIPPED) != FLAGS_SECTOR_SKIPPED)
|
||||
{
|
||||
@@ -807,8 +807,8 @@ namespace DiscImageChef.DiscImages
|
||||
(ushort cylinder, byte head, byte sector) LbaToChs(ulong lba)
|
||||
{
|
||||
ushort cylinder = (ushort)(lba / (ImageInfo.Heads * ImageInfo.SectorsPerTrack));
|
||||
byte head = (byte)((lba / ImageInfo.SectorsPerTrack) % ImageInfo.Heads);
|
||||
byte sector = (byte)((lba % ImageInfo.SectorsPerTrack) + 1);
|
||||
byte head = (byte)(lba / ImageInfo.SectorsPerTrack % ImageInfo.Heads);
|
||||
byte sector = (byte)(lba % ImageInfo.SectorsPerTrack + 1);
|
||||
|
||||
return (cylinder, head, sector);
|
||||
}
|
||||
@@ -1001,7 +1001,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
length = encodedData[ins + 1];
|
||||
Array.Copy(encodedData, ins + 2, decodedData, outs, length);
|
||||
ins += (2 + length);
|
||||
ins += 2 + length;
|
||||
outs += length;
|
||||
}
|
||||
else
|
||||
@@ -1013,7 +1013,7 @@ namespace DiscImageChef.DiscImages
|
||||
piece = new byte[length * run];
|
||||
ArrayHelpers.ArrayFill(piece, part);
|
||||
Array.Copy(piece, 0, decodedData, outs, piece.Length);
|
||||
ins += (2 + length);
|
||||
ins += 2 + length;
|
||||
outs += piece.Length;
|
||||
}
|
||||
}
|
||||
@@ -1347,10 +1347,10 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
/* Huffman coding parameters */
|
||||
|
||||
const int N_CHAR = (256 - THRESHOLD + F);
|
||||
const int N_CHAR = 256 - THRESHOLD + F;
|
||||
/* character code (= 0..N_CHAR-1) */
|
||||
const int T = (N_CHAR * 2 - 1); /* Size of table */
|
||||
const int R = (T - 1); /* root position */
|
||||
const int T = N_CHAR * 2 - 1; /* Size of table */
|
||||
const int R = T - 1; /* root position */
|
||||
const int MAX_FREQ = 0x8000;
|
||||
/* update when cumulative frequency */
|
||||
/* reaches to this value */
|
||||
@@ -1442,7 +1442,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
tdctl.Ibufndx = 0;
|
||||
tdctl.Ibufcnt = (ushort)data_read(out tdctl.Inbuf, BUFSZ);
|
||||
if(tdctl.Ibufcnt <= 0) return (-1);
|
||||
if(tdctl.Ibufcnt <= 0) return -1;
|
||||
}
|
||||
|
||||
while(getlen <= 8)
|
||||
@@ -1452,31 +1452,31 @@ namespace DiscImageChef.DiscImages
|
||||
getlen += 8;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetBit() /* get one bit */
|
||||
{
|
||||
short i;
|
||||
if(next_word() < 0) return (-1);
|
||||
if(next_word() < 0) return -1;
|
||||
|
||||
i = (short)getbuf;
|
||||
getbuf <<= 1;
|
||||
getlen--;
|
||||
if(i < 0) return (1);
|
||||
else return (0);
|
||||
if(i < 0) return 1;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
int GetByte() /* get a byte */
|
||||
{
|
||||
ushort i;
|
||||
if(next_word() != 0) return (-1);
|
||||
if(next_word() != 0) return -1;
|
||||
|
||||
i = getbuf;
|
||||
getbuf <<= 8;
|
||||
getlen -= 8;
|
||||
i = (ushort)(i >> 8);
|
||||
return ((int)i);
|
||||
return (int)i;
|
||||
}
|
||||
|
||||
/* initialize freq tree */
|
||||
@@ -1602,7 +1602,7 @@ namespace DiscImageChef.DiscImages
|
||||
*/
|
||||
while(c < T)
|
||||
{
|
||||
if((ret = GetBit()) < 0) return (-1);
|
||||
if((ret = GetBit()) < 0) return -1;
|
||||
|
||||
c += (ushort)ret;
|
||||
c = (ushort)son[c];
|
||||
@@ -1619,7 +1619,7 @@ namespace DiscImageChef.DiscImages
|
||||
ushort i, j, c;
|
||||
|
||||
/* decode upper 6 bits from given table */
|
||||
if((bit = (short)GetByte()) < 0) return (-1);
|
||||
if((bit = (short)GetByte()) < 0) return -1;
|
||||
|
||||
i = (ushort)bit;
|
||||
c = (ushort)(d_code[i] << 6);
|
||||
@@ -1629,7 +1629,7 @@ namespace DiscImageChef.DiscImages
|
||||
j -= 2;
|
||||
while(j-- > 0)
|
||||
{
|
||||
if((bit = (short)GetBit()) < 0) return (-1);
|
||||
if((bit = (short)GetBit()) < 0) return -1;
|
||||
|
||||
i = (ushort)((i << 1) + bit);
|
||||
}
|
||||
@@ -1666,18 +1666,18 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
if(tdctl.Bufcnt == 0)
|
||||
{
|
||||
if((c = DecodeChar()) < 0) return (count); // fatal error
|
||||
if((c = DecodeChar()) < 0) return count; // fatal error
|
||||
|
||||
if(c < 256)
|
||||
{
|
||||
buf[count] = (byte)c;
|
||||
text_buf[tdctl.R++] = (byte)c;
|
||||
tdctl.R &= (N - 1);
|
||||
tdctl.R &= N - 1;
|
||||
count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if((pos = DecodePosition()) < 0) return (count); // fatal error
|
||||
if((pos = DecodePosition()) < 0) return count; // fatal error
|
||||
|
||||
tdctl.Bufpos = (ushort)((tdctl.R - pos - 1) & (N - 1));
|
||||
tdctl.Bufcnt = (ushort)(c - 255 + THRESHOLD);
|
||||
@@ -1693,7 +1693,7 @@ namespace DiscImageChef.DiscImages
|
||||
buf[count] = (byte)c;
|
||||
tdctl.Bufndx++;
|
||||
text_buf[tdctl.R++] = (byte)c;
|
||||
tdctl.R &= (N - 1);
|
||||
tdctl.R &= N - 1;
|
||||
count++;
|
||||
}
|
||||
// reset bufcnt after copy string from text_buf[]
|
||||
@@ -1701,7 +1701,7 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
}
|
||||
|
||||
return (count); // count == len, success
|
||||
return count; // count == len, success
|
||||
}
|
||||
#endregion LZH decompression from MAME
|
||||
}
|
||||
|
||||
@@ -465,18 +465,18 @@ namespace DiscImageChef.DiscImages
|
||||
if(bChnk.type == CHUNK_TYPE_COMMNT) continue;
|
||||
|
||||
// TODO: Handle compressed chunks
|
||||
if((bChnk.type == CHUNK_TYPE_KENCODE))
|
||||
if(bChnk.type == CHUNK_TYPE_KENCODE)
|
||||
throw new
|
||||
ImageNotSupportedException("Chunks compressed with KenCode are not yet supported.");
|
||||
if((bChnk.type == CHUNK_TYPE_RLE))
|
||||
if(bChnk.type == CHUNK_TYPE_RLE)
|
||||
throw new ImageNotSupportedException("Chunks compressed with RLE are not yet supported.");
|
||||
if((bChnk.type == CHUNK_TYPE_LZH))
|
||||
if(bChnk.type == CHUNK_TYPE_LZH)
|
||||
throw new ImageNotSupportedException("Chunks compressed with LZH are not yet supported.");
|
||||
if((bChnk.type == CHUNK_TYPE_LZFSE))
|
||||
if(bChnk.type == CHUNK_TYPE_LZFSE)
|
||||
throw new ImageNotSupportedException("Chunks compressed with lzfse are not yet supported.");
|
||||
|
||||
if((bChnk.type > CHUNK_TYPE_NOCOPY && bChnk.type < CHUNK_TYPE_COMMNT) ||
|
||||
(bChnk.type > CHUNK_TYPE_LZFSE && bChnk.type < CHUNK_TYPE_END))
|
||||
if(bChnk.type > CHUNK_TYPE_NOCOPY && bChnk.type < CHUNK_TYPE_COMMNT ||
|
||||
bChnk.type > CHUNK_TYPE_LZFSE && bChnk.type < CHUNK_TYPE_END)
|
||||
throw new ImageNotSupportedException(string.Format("Unsupported chunk type 0x{0:X8} found",
|
||||
bChnk.type));
|
||||
|
||||
@@ -499,7 +499,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.ImageSize = ImageInfo.Sectors * SECTOR_SIZE;
|
||||
ImageInfo.ImageVersion = string.Format("{0}", footer.version);
|
||||
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
|
||||
|
||||
@@ -375,8 +375,8 @@ namespace DiscImageChef.DiscImages
|
||||
(ushort cylinder, byte head, byte sector) LbaToChs(ulong lba)
|
||||
{
|
||||
ushort cylinder = (ushort)(lba / (ImageInfo.Heads * ImageInfo.SectorsPerTrack));
|
||||
byte head = (byte)((lba / ImageInfo.SectorsPerTrack) % ImageInfo.Heads);
|
||||
byte sector = (byte)((lba % ImageInfo.SectorsPerTrack) + 1);
|
||||
byte head = (byte)(lba / ImageInfo.SectorsPerTrack % ImageInfo.Heads);
|
||||
byte sector = (byte)(lba % ImageInfo.SectorsPerTrack + 1);
|
||||
|
||||
return (cylinder, head, sector);
|
||||
}
|
||||
|
||||
@@ -248,15 +248,15 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector;
|
||||
|
||||
ulong index = (sectorAddress * vHdr.sectorSize) / vHdr.blockSize;
|
||||
ulong secOff = (sectorAddress * vHdr.sectorSize) % vHdr.blockSize;
|
||||
ulong index = sectorAddress * vHdr.sectorSize / vHdr.blockSize;
|
||||
ulong secOff = sectorAddress * vHdr.sectorSize % vHdr.blockSize;
|
||||
|
||||
uint ibmOff = ibm[index];
|
||||
ulong imageOff;
|
||||
|
||||
if(ibmOff == VDI_EMPTY) return new byte[vHdr.sectorSize];
|
||||
|
||||
imageOff = vHdr.offsetData + (ibmOff * vHdr.blockSize);
|
||||
imageOff = vHdr.offsetData + ibmOff * vHdr.blockSize;
|
||||
|
||||
byte[] cluster = new byte[vHdr.blockSize];
|
||||
imageStream.Seek((long)imageOff, SeekOrigin.Begin);
|
||||
|
||||
@@ -394,7 +394,7 @@ namespace DiscImageChef.DiscImages
|
||||
byte[] headerCookieBytes = new byte[8];
|
||||
byte[] footerCookieBytes = new byte[8];
|
||||
|
||||
if((imageStream.Length % 2) == 0) imageStream.Seek(-512, SeekOrigin.End);
|
||||
if(imageStream.Length % 2 == 0) imageStream.Seek(-512, SeekOrigin.End);
|
||||
else imageStream.Seek(-511, SeekOrigin.End);
|
||||
|
||||
imageStream.Read(footerCookieBytes, 0, 8);
|
||||
@@ -405,7 +405,7 @@ namespace DiscImageChef.DiscImages
|
||||
headerCookie = BigEndianBitConverter.ToUInt64(headerCookieBytes, 0);
|
||||
footerCookie = BigEndianBitConverter.ToUInt64(footerCookieBytes, 0);
|
||||
|
||||
return (headerCookie == IMAGE_COOKIE || footerCookie == IMAGE_COOKIE);
|
||||
return headerCookie == IMAGE_COOKIE || footerCookie == IMAGE_COOKIE;
|
||||
}
|
||||
|
||||
public override bool OpenImage(Filter imageFilter)
|
||||
@@ -417,7 +417,7 @@ namespace DiscImageChef.DiscImages
|
||||
imageStream.Seek(0, SeekOrigin.Begin);
|
||||
imageStream.Read(header, 0, 512);
|
||||
|
||||
if((imageStream.Length % 2) == 0)
|
||||
if(imageStream.Length % 2 == 0)
|
||||
{
|
||||
footer = new byte[512];
|
||||
imageStream.Seek(-512, SeekOrigin.End);
|
||||
@@ -488,7 +488,7 @@ namespace DiscImageChef.DiscImages
|
||||
thisFooter.UniqueId = BigEndianBitConverter.ToGuid(usableHeader, 0x44);
|
||||
thisFooter.SavedState = usableHeader[0x54];
|
||||
thisFooter.Reserved = new byte[usableHeader.Length - 0x55];
|
||||
Array.Copy(usableHeader, 0x55, thisFooter.Reserved, 0, (usableHeader.Length - 0x55));
|
||||
Array.Copy(usableHeader, 0x55, thisFooter.Reserved, 0, usableHeader.Length - 0x55);
|
||||
|
||||
thisDateTime = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
thisDateTime = thisDateTime.AddSeconds(thisFooter.Timestamp);
|
||||
@@ -517,7 +517,7 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "footer.currentSize = {0}", thisFooter.CurrentSize);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "footer.diskGeometry = 0x{0:X8} (C/H/S: {1}/{2}/{3})",
|
||||
thisFooter.DiskGeometry, (thisFooter.DiskGeometry & 0xFFFF0000) >> 16,
|
||||
(thisFooter.DiskGeometry & 0xFF00) >> 8, (thisFooter.DiskGeometry & 0xFF));
|
||||
(thisFooter.DiskGeometry & 0xFF00) >> 8, thisFooter.DiskGeometry & 0xFF);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "footer.diskType = 0x{0:X8}", thisFooter.DiskType);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "footer.checksum = 0x{0:X8}", thisFooter.Checksum);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "footer.uniqueId = {0}", thisFooter.UniqueId);
|
||||
@@ -544,7 +544,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
ImageInfo.ImageApplicationVersion = string.Format("{0}.{1:D2}",
|
||||
(thisFooter.CreatorVersion & 0xFFFF0000) >> 16,
|
||||
(thisFooter.CreatorVersion & 0x0000FFFF));
|
||||
thisFooter.CreatorVersion & 0x0000FFFF);
|
||||
switch(thisFooter.CreatorHostOs)
|
||||
{
|
||||
case CREATOR_MACINTOSH:
|
||||
@@ -657,7 +657,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
ImageInfo.Cylinders = (thisFooter.DiskGeometry & 0xFFFF0000) >> 16;
|
||||
ImageInfo.Heads = (thisFooter.DiskGeometry & 0xFF00) >> 8;
|
||||
ImageInfo.SectorsPerTrack = (thisFooter.DiskGeometry & 0xFF);
|
||||
ImageInfo.SectorsPerTrack = thisFooter.DiskGeometry & 0xFF;
|
||||
|
||||
if(thisFooter.DiskType == TYPE_DYNAMIC || thisFooter.DiskType == TYPE_DIFFERENCING)
|
||||
{
|
||||
@@ -782,7 +782,7 @@ namespace DiscImageChef.DiscImages
|
||||
*/
|
||||
|
||||
// How many sectors uses the BAT
|
||||
uint batSectorCount = (uint)Math.Ceiling(((double)thisDynamic.MaxTableEntries * 4) / 512);
|
||||
uint batSectorCount = (uint)Math.Ceiling((double)thisDynamic.MaxTableEntries * 4 / 512);
|
||||
|
||||
byte[] batSectorBytes = new byte[512];
|
||||
BatSector batSector = new BatSector();
|
||||
@@ -799,11 +799,11 @@ namespace DiscImageChef.DiscImages
|
||||
handle.Free();
|
||||
// This restores the order of elements
|
||||
Array.Reverse(batSector.blockPointer);
|
||||
if(blockAllocationTable.Length >= (i * 512) / 4 + 512 / 4)
|
||||
Array.Copy(batSector.blockPointer, 0, blockAllocationTable, (i * 512) / 4, 512 / 4);
|
||||
if(blockAllocationTable.Length >= i * 512 / 4 + 512 / 4)
|
||||
Array.Copy(batSector.blockPointer, 0, blockAllocationTable, i * 512 / 4, 512 / 4);
|
||||
else
|
||||
Array.Copy(batSector.blockPointer, 0, blockAllocationTable, (i * 512) / 4,
|
||||
blockAllocationTable.Length - (i * 512) / 4);
|
||||
Array.Copy(batSector.blockPointer, 0, blockAllocationTable, i * 512 / 4,
|
||||
blockAllocationTable.Length - i * 512 / 4);
|
||||
}
|
||||
|
||||
DateTime endTime = DateTime.UtcNow;
|
||||
@@ -817,13 +817,11 @@ namespace DiscImageChef.DiscImages
|
||||
*/
|
||||
|
||||
// Get the roundest number of sectors needed to store the block bitmap
|
||||
bitmapSize = (uint)Math.Ceiling((
|
||||
// How many sectors do a block store
|
||||
((double)thisDynamic.BlockSize / 512)
|
||||
// 1 bit per sector on the bitmap
|
||||
/ 8
|
||||
// and aligned to 512 byte boundary
|
||||
/ 512));
|
||||
bitmapSize = (uint)Math.Ceiling((double)thisDynamic.BlockSize / 512
|
||||
// 1 bit per sector on the bitmap
|
||||
/ 8
|
||||
// and aligned to 512 byte boundary
|
||||
/ 512);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "Bitmap is {0} sectors", bitmapSize);
|
||||
}
|
||||
|
||||
@@ -1095,7 +1093,7 @@ namespace DiscImageChef.DiscImages
|
||||
uint sectorOffset = blockAllocationTable[blockNumber] + bitmapSize + sectorInBlock;
|
||||
thisStream = thisFilter.GetDataForkStream();
|
||||
|
||||
thisStream.Seek((sectorOffset * 512), SeekOrigin.Begin);
|
||||
thisStream.Seek(sectorOffset * 512, SeekOrigin.Begin);
|
||||
thisStream.Read(data, 0, 512);
|
||||
|
||||
return data;
|
||||
@@ -1141,7 +1139,7 @@ namespace DiscImageChef.DiscImages
|
||||
// Sector number inside of block
|
||||
uint sectorInBlock = (uint)(sectorAddress % (thisDynamic.BlockSize / 512));
|
||||
// How many sectors before reaching end of block
|
||||
uint remainingInBlock = (thisDynamic.BlockSize / 512) - sectorInBlock;
|
||||
uint remainingInBlock = thisDynamic.BlockSize / 512 - sectorInBlock;
|
||||
|
||||
// Data that can be read in this block
|
||||
byte[] prefix;
|
||||
@@ -1167,7 +1165,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(sectorOffset != 0xFFFFFFFF)
|
||||
{
|
||||
thisStream = thisFilter.GetDataForkStream();
|
||||
thisStream.Seek((sectorOffset * 512), SeekOrigin.Begin);
|
||||
thisStream.Seek(sectorOffset * 512, SeekOrigin.Begin);
|
||||
thisStream.Read(prefix, 0, (int)(512 * sectorsToReadHere));
|
||||
}
|
||||
// If it is unallocated, just fill with zeroes
|
||||
|
||||
@@ -649,20 +649,20 @@ namespace DiscImageChef.DiscImages
|
||||
hasParent = true;
|
||||
}
|
||||
|
||||
chunkRatio = (long)((Math.Pow(2, 23) * logicalSectorSize) / vFileParms.blockSize);
|
||||
chunkRatio = (long)(Math.Pow(2, 23) * logicalSectorSize / vFileParms.blockSize);
|
||||
dataBlocks = virtualDiskSize / vFileParms.blockSize;
|
||||
if((virtualDiskSize % vFileParms.blockSize) > 0) dataBlocks++;
|
||||
if(virtualDiskSize % vFileParms.blockSize > 0) dataBlocks++;
|
||||
|
||||
long batEntries;
|
||||
if(hasParent)
|
||||
{
|
||||
long sectorBitmapBlocks = (long)dataBlocks / chunkRatio;
|
||||
if((dataBlocks % (ulong)chunkRatio) > 0) sectorBitmapBlocks++;
|
||||
if(dataBlocks % (ulong)chunkRatio > 0) sectorBitmapBlocks++;
|
||||
sectorBitmapPointers = new ulong[sectorBitmapBlocks];
|
||||
|
||||
batEntries = sectorBitmapBlocks * (chunkRatio - 1);
|
||||
}
|
||||
else batEntries = (long)(dataBlocks + ((dataBlocks - 1) / (ulong)chunkRatio));
|
||||
else batEntries = (long)(dataBlocks + (dataBlocks - 1) / (ulong)chunkRatio);
|
||||
|
||||
DicConsole.DebugWriteLine("VHDX plugin", "Reading BAT");
|
||||
|
||||
@@ -739,7 +739,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
// TODO: Separate image application from version, need several samples.
|
||||
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
|
||||
@@ -754,7 +754,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(index > sectorBitmap.LongLength) return false;
|
||||
|
||||
return ((sectorBitmap[index] & val) == val);
|
||||
return (sectorBitmap[index] & val) == val;
|
||||
}
|
||||
|
||||
public override bool ImageHasPartitions()
|
||||
@@ -832,8 +832,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector;
|
||||
|
||||
ulong index = (sectorAddress * logicalSectorSize) / vFileParms.blockSize;
|
||||
ulong secOff = (sectorAddress * logicalSectorSize) % vFileParms.blockSize;
|
||||
ulong index = sectorAddress * logicalSectorSize / vFileParms.blockSize;
|
||||
ulong secOff = sectorAddress * logicalSectorSize % vFileParms.blockSize;
|
||||
|
||||
ulong blkPtr = blockAllocationTable[index];
|
||||
ulong blkFlags = blkPtr & BAT_FLAGS_MASK;
|
||||
@@ -859,7 +859,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(!blockCache.TryGetValue(blkPtr & BAT_FILE_OFFSET_MASK, out block))
|
||||
{
|
||||
block = new byte[vFileParms.blockSize];
|
||||
imageStream.Seek((long)((blkPtr & BAT_FILE_OFFSET_MASK)), SeekOrigin.Begin);
|
||||
imageStream.Seek((long)(blkPtr & BAT_FILE_OFFSET_MASK), SeekOrigin.Begin);
|
||||
imageStream.Read(block, 0, block.Length);
|
||||
|
||||
if(blockCache.Count >= maxBlockCache) blockCache.Clear();
|
||||
|
||||
@@ -703,7 +703,7 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
else if(!matchedCyls || !matchedHds || !matchedSpt)
|
||||
{
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
}
|
||||
@@ -766,7 +766,7 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
|
||||
ulong index = sectorAddress / grainSize;
|
||||
ulong secOff = (sectorAddress % grainSize) * SECTOR_SIZE;
|
||||
ulong secOff = sectorAddress % grainSize * SECTOR_SIZE;
|
||||
|
||||
uint grainOff = gTable[index];
|
||||
|
||||
@@ -788,7 +788,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
grain = new byte[SECTOR_SIZE * grainSize];
|
||||
dataStream = currentExtent.Filter.GetDataForkStream();
|
||||
dataStream.Seek((long)(((grainOff - extentStartSector) * SECTOR_SIZE)), SeekOrigin.Begin);
|
||||
dataStream.Seek((long)((grainOff - extentStartSector) * SECTOR_SIZE), SeekOrigin.Begin);
|
||||
dataStream.Read(grain, 0, grain.Length);
|
||||
|
||||
if(grainCache.Count >= maxCachedGrains) grainCache.Clear();
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace DiscImageChef.DiscImages
|
||||
public override bool IdentifyImage(Filter imageFilter)
|
||||
{
|
||||
// Check if file is not multiple of 512
|
||||
if((imageFilter.GetDataForkLength() % 512) != 0)
|
||||
if(imageFilter.GetDataForkLength() % 512 != 0)
|
||||
{
|
||||
extension = Path.GetExtension(imageFilter.GetFilename()).ToLower();
|
||||
|
||||
@@ -123,7 +123,7 @@ namespace DiscImageChef.DiscImages
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
extension = Path.GetExtension(imageFilter.GetFilename()).ToLower();
|
||||
if(extension == ".iso" && (imageFilter.GetDataForkLength() % 2048) == 0) ImageInfo.SectorSize = 2048;
|
||||
if(extension == ".iso" && imageFilter.GetDataForkLength() % 2048 == 0) ImageInfo.SectorSize = 2048;
|
||||
else if(extension == ".d81" && imageFilter.GetDataForkLength() == 819200) ImageInfo.SectorSize = 256;
|
||||
else if((extension == ".adf" || extension == ".adl" || extension == ".ssd" || extension == ".dsd") &&
|
||||
(imageFilter.GetDataForkLength() == 163840 || imageFilter.GetDataForkLength() == 327680 ||
|
||||
@@ -639,7 +639,7 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.SectorsPerTrack = 32;
|
||||
break;
|
||||
default:
|
||||
ImageInfo.Cylinders = (uint)((ImageInfo.Sectors / 16) / 63);
|
||||
ImageInfo.Cylinders = (uint)(ImageInfo.Sectors / 16 / 63);
|
||||
ImageInfo.Heads = 16;
|
||||
ImageInfo.SectorsPerTrack = 63;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user