mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
REFACTOR: Use preferred braces style.
This commit is contained in:
@@ -360,7 +360,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
alcTrackExtras = new Dictionary<int, AlcoholTrackExtra>();
|
||||
foreach(AlcoholTrack track in alcTracks.Values)
|
||||
{
|
||||
if(track.extraOffset > 0 && !isDvd)
|
||||
{
|
||||
byte[] extHdr = new byte[8];
|
||||
@@ -385,7 +384,6 @@ namespace DiscImageChef.DiscImages
|
||||
extra.sectors = track.extraOffset;
|
||||
alcTrackExtras.Add(track.point, extra);
|
||||
}
|
||||
}
|
||||
|
||||
if(footerOff > 0)
|
||||
{
|
||||
@@ -432,7 +430,6 @@ namespace DiscImageChef.DiscImages
|
||||
int readBytes = stream.Read(bca, 0, bca.Length);
|
||||
|
||||
if(readBytes == bca.Length)
|
||||
{
|
||||
switch(header.type)
|
||||
{
|
||||
case AlcoholMediumType.DVD:
|
||||
@@ -440,7 +437,6 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.ReadableMediaTags.Add(MediaTagType.DVD_BCA);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImageInfo.MediaType = AlcoholMediumTypeToMediaType(header.type);
|
||||
@@ -741,13 +737,10 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
|
||||
if(ImageInfo.MediaType == MediaType.XGD2)
|
||||
{
|
||||
// All XGD3 all have the same number of blocks
|
||||
if(ImageInfo.Sectors == 25063 || // Locked (or non compatible drive)
|
||||
ImageInfo.Sectors == 4229664 || // Xtreme unlock
|
||||
ImageInfo.Sectors == 4246304) // Wxripper unlock
|
||||
ImageInfo.MediaType = MediaType.XGD3;
|
||||
}
|
||||
|
||||
DicConsole.VerboseWriteLine("Alcohol 120% image describes a disc of type {0}", ImageInfo.MediaType);
|
||||
|
||||
@@ -780,25 +773,25 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
case MediaTagType.DVD_BCA:
|
||||
{
|
||||
if(bca != null) { return (byte[])bca.Clone(); }
|
||||
if(bca != null) return (byte[])bca.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain BCA information.");
|
||||
}
|
||||
case MediaTagType.DVD_PFI:
|
||||
{
|
||||
if(pfi != null) { return (byte[])pfi.Clone(); }
|
||||
if(pfi != null) return (byte[])pfi.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain PFI.");
|
||||
}
|
||||
case MediaTagType.DVD_DMI:
|
||||
{
|
||||
if(dmi != null) { return (byte[])dmi.Clone(); }
|
||||
if(dmi != null) return (byte[])dmi.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain DMI.");
|
||||
}
|
||||
case MediaTagType.CD_FullTOC:
|
||||
{
|
||||
if(fullToc != null) { return (byte[])fullToc.Clone(); }
|
||||
if(fullToc != null) return (byte[])fullToc.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain TOC information.");
|
||||
}
|
||||
@@ -830,21 +823,15 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(AlcoholTrack track in alcTracks.Values)
|
||||
{
|
||||
AlcoholTrackExtra extra;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -852,21 +839,15 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(AlcoholTrack track in alcTracks.Values)
|
||||
{
|
||||
AlcoholTrackExtra extra;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -957,7 +938,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sector_offset == 0 && sector_skip == 0) buffer = br.ReadBytes((int)(sector_size * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -966,7 +946,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sector_skip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sector_size, sector_size);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1287,7 +1266,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sector_offset == 0 && sector_skip == 0) buffer = br.ReadBytes((int)(sector_size * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1296,7 +1274,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sector_skip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sector_size, sector_size);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1314,21 +1291,15 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(AlcoholTrack track in alcTracks.Values)
|
||||
{
|
||||
AlcoholTrackExtra extra;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1415,13 +1386,11 @@ namespace DiscImageChef.DiscImages
|
||||
ushort sessionNo = 0;
|
||||
|
||||
foreach(Session session in sessions)
|
||||
{
|
||||
if(track.point >= session.StartTrack || track.point <= session.EndTrack)
|
||||
{
|
||||
sessionNo = session.SessionSequence;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
AlcoholTrackExtra extra;
|
||||
if(alcTrackExtras.TryGetValue(track.point, out extra))
|
||||
@@ -1465,7 +1434,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if(sessions.Contains(session)) { return GetSessionTracks(session.SessionSequence); }
|
||||
if(sessions.Contains(session)) return GetSessionTracks(session.SessionSequence);
|
||||
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
@@ -1479,13 +1448,11 @@ namespace DiscImageChef.DiscImages
|
||||
ushort sessionNo = 0;
|
||||
|
||||
foreach(Session ses in sessions)
|
||||
{
|
||||
if(track.point >= ses.StartTrack || track.point <= ses.EndTrack)
|
||||
{
|
||||
sessionNo = ses.SessionSequence;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
AlcoholTrackExtra extra;
|
||||
if(alcTrackExtras.TryGetValue(track.point, out extra) && session == sessionNo)
|
||||
|
||||
@@ -123,10 +123,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
int spt = 0;
|
||||
bool allTracksEqual = true;
|
||||
for(int i = 1; i < tracks.Count; i++)
|
||||
{
|
||||
allTracksEqual &= tracks[i - 1].sectors.Length == tracks[i].sectors.Length;
|
||||
}
|
||||
for(int i = 1; i < tracks.Count; i++) allTracksEqual &= tracks[i - 1].sectors.Length == tracks[i].sectors.Length;
|
||||
|
||||
if(allTracksEqual) spt = tracks[0].sectors.Length;
|
||||
|
||||
@@ -185,9 +182,7 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
|
||||
for(int i = 0; i < tracks.Count; i++)
|
||||
{
|
||||
foreach(Apple2.RawSector sector in tracks[i].sectors)
|
||||
{
|
||||
if(skewed && spt != 0)
|
||||
{
|
||||
ulong sectorNo = (ulong)((((sector.addressField.sector[0] & 0x55) << 1) |
|
||||
@@ -203,8 +198,6 @@ namespace DiscImageChef.DiscImages
|
||||
rawSectors.Add(ImageInfo.Sectors, sector);
|
||||
ImageInfo.Sectors++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DicConsole.DebugWriteLine("Apple NIB Plugin", "Got {0} sectors", ImageInfo.Sectors);
|
||||
|
||||
|
||||
@@ -286,10 +286,7 @@ namespace DiscImageChef.DiscImages
|
||||
uint spt = uint.MaxValue;
|
||||
for(ushort cyl = 0; cyl < ImageInfo.Cylinders; cyl++)
|
||||
{
|
||||
for(ushort head = 0; head < ImageInfo.Heads; head++)
|
||||
{
|
||||
if(spts[cyl][head] < spt) spt = spts[cyl][head];
|
||||
}
|
||||
for(ushort head = 0; head < ImageInfo.Heads; head++) if(spts[cyl][head] < spt) spt = spts[cyl][head];
|
||||
}
|
||||
|
||||
ImageInfo.SectorsPerTrack = spt;
|
||||
|
||||
@@ -111,7 +111,7 @@ namespace DiscImageChef.DiscImages
|
||||
tmpHdr.DeviceBlocks = BigEndianBitConverter.ToUInt32(header, 0x11) & 0x00FFFFFF;
|
||||
tmpHdr.BytesPerBlock = BigEndianBitConverter.ToUInt16(header, 0x15);
|
||||
|
||||
for(int i = 0; i < 0xD; i++) { if(tmpHdr.DeviceName[i] < 0x20) return false; }
|
||||
for(int i = 0; i < 0xD; i++) if(tmpHdr.DeviceName[i] < 0x20) return false;
|
||||
|
||||
if((tmpHdr.BytesPerBlock & 0xFE00) != 0x200) return false;
|
||||
|
||||
@@ -140,7 +140,7 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("BLU plugin", "ImageHeader.deviceBlock = {0}", imageHeader.DeviceBlocks);
|
||||
DicConsole.DebugWriteLine("BLU plugin", "ImageHeader.bytesPerBlock = {0}", imageHeader.BytesPerBlock);
|
||||
|
||||
for(int i = 0; i < 0xD; i++) { if(imageHeader.DeviceName[i] < 0x20) return false; }
|
||||
for(int i = 0; i < 0xD; i++) if(imageHeader.DeviceName[i] < 0x20) return false;
|
||||
|
||||
if((imageHeader.BytesPerBlock & 0xFE00) != 0x200) return false;
|
||||
|
||||
|
||||
@@ -546,7 +546,6 @@ namespace DiscImageChef.DiscImages
|
||||
FiltersList filtersList = new FiltersList();
|
||||
|
||||
if(!string.IsNullOrEmpty(header.DataFile))
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
dataFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), header.DataFile));
|
||||
@@ -587,7 +586,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
throw new ArgumentException(string.Format("Data file {0} not found", header.DataFile));
|
||||
}
|
||||
}
|
||||
else throw new ArgumentException("Unable to find data file");
|
||||
|
||||
if(!string.IsNullOrEmpty(header.SubchannelFile))
|
||||
@@ -644,7 +642,6 @@ namespace DiscImageChef.DiscImages
|
||||
ushort maxSession = 0;
|
||||
ulong currentPos = 0;
|
||||
foreach(Bw4TrackDescriptor bwTrack in bwTracks)
|
||||
{
|
||||
if(bwTrack.point < 0xA0)
|
||||
{
|
||||
Track track = new Track();
|
||||
@@ -652,7 +649,6 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackEndSector = bwTrack.lastSector;
|
||||
|
||||
if(!string.IsNullOrEmpty(bwTrack.filename))
|
||||
{
|
||||
do
|
||||
{
|
||||
track.TrackFilter =
|
||||
@@ -699,7 +695,6 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackFilter = dataFilter;
|
||||
}
|
||||
while(true);
|
||||
}
|
||||
else track.TrackFilter = dataFilter;
|
||||
|
||||
track.TrackFile = dataFilter.GetFilename();
|
||||
@@ -803,7 +798,6 @@ namespace DiscImageChef.DiscImages
|
||||
!ImageInfo.ReadableMediaTags.Contains(MediaTagType.CD_MCN))
|
||||
ImageInfo.ReadableMediaTags.Add(MediaTagType.CD_MCN);
|
||||
}
|
||||
}
|
||||
|
||||
sessions = new List<Session>();
|
||||
for(ushort i = 1; i <= maxSession; i++)
|
||||
@@ -814,7 +808,6 @@ namespace DiscImageChef.DiscImages
|
||||
session.StartSector = uint.MaxValue;
|
||||
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSession == i)
|
||||
{
|
||||
if(track.TrackSequence < session.StartTrack) session.StartTrack = track.TrackSequence;
|
||||
@@ -822,7 +815,6 @@ namespace DiscImageChef.DiscImages
|
||||
if(track.TrackStartSector < session.StartSector) session.StartSector = track.TrackStartSector;
|
||||
if(track.TrackEndSector > session.EndSector) session.EndSector = track.TrackEndSector;
|
||||
}
|
||||
}
|
||||
|
||||
sessions.Add(session);
|
||||
}
|
||||
@@ -907,10 +899,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
case MediaTagType.CD_MCN:
|
||||
{
|
||||
if(ImageInfo.MediaSerialNumber != null)
|
||||
{
|
||||
return Encoding.ASCII.GetBytes(ImageInfo.MediaSerialNumber);
|
||||
}
|
||||
if(ImageInfo.MediaSerialNumber != null) return Encoding.ASCII.GetBytes(ImageInfo.MediaSerialNumber);
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain MCN information.");
|
||||
}
|
||||
@@ -942,19 +931,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -962,19 +943,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -986,13 +959,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track bwTrack in tracks)
|
||||
{
|
||||
if(bwTrack.TrackSequence == track)
|
||||
{
|
||||
_track = bwTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1051,7 +1022,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1060,7 +1030,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1072,13 +1041,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track bwTrack in tracks)
|
||||
{
|
||||
if(bwTrack.TrackSequence == track)
|
||||
{
|
||||
_track = bwTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1223,7 +1190,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1232,7 +1198,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1250,19 +1215,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1274,13 +1231,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track bwTrack in tracks)
|
||||
{
|
||||
if(bwTrack.TrackSequence == track)
|
||||
{
|
||||
_track = bwTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1356,7 +1311,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if(sessions.Contains(session)) { return GetSessionTracks(session.SessionSequence); }
|
||||
if(sessions.Contains(session)) return GetSessionTracks(session.SessionSequence);
|
||||
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
@@ -1364,7 +1319,7 @@ namespace DiscImageChef.DiscImages
|
||||
public override List<Track> GetSessionTracks(ushort session)
|
||||
{
|
||||
List<Track> tracks = new List<Track>();
|
||||
foreach(Track _track in this.tracks) { if(_track.TrackSession == session) tracks.Add(_track); }
|
||||
foreach(Track _track in this.tracks) if(_track.TrackSession == session) tracks.Add(_track);
|
||||
|
||||
return tracks;
|
||||
}
|
||||
|
||||
@@ -595,12 +595,10 @@ namespace DiscImageChef.DiscImages
|
||||
tSeq, session.Tracks[tSeq].unknown8);
|
||||
if(session.Tracks[tSeq].type != Bw5TrackType.Dvd &&
|
||||
session.Tracks[tSeq].type != Bw5TrackType.NotData)
|
||||
{
|
||||
for(int i = 0; i < session.Tracks[tSeq].unknown9.Length; i++)
|
||||
DicConsole.DebugWriteLine("BlindWrite5 plugin",
|
||||
"session[{0}].track[{1}].unknown9[{2}] = 0x{3:X8}", ses, tSeq, i,
|
||||
session.Tracks[tSeq].unknown9[i]);
|
||||
}
|
||||
}
|
||||
|
||||
bwSessions.Add(session);
|
||||
@@ -737,7 +735,6 @@ 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;
|
||||
else
|
||||
@@ -745,7 +742,6 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.ErrorWriteLine("BlindWrite5 found unknown subchannel size: {0}", sectorSize - 2352);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else chars.Subchannel = TrackSubchannelType.None;
|
||||
|
||||
chars.SectorSize = sectorSize;
|
||||
@@ -866,7 +862,6 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackEndSector = (ulong)(trk.sectors + trk.startLba);
|
||||
|
||||
foreach(DataFileCharacteristics chars in filePaths)
|
||||
{
|
||||
if(trk.startLba >= chars.StartLba &&
|
||||
trk.startLba + trk.sectors <= chars.StartLba + chars.Sectors)
|
||||
{
|
||||
@@ -884,15 +879,12 @@ namespace DiscImageChef.DiscImages
|
||||
track.TrackSubchannelOffset = track.TrackFileOffset;
|
||||
|
||||
if(chars.Subchannel == TrackSubchannelType.PackedInterleaved)
|
||||
{
|
||||
if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel))
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
track.TrackPregap = trk.pregap;
|
||||
track.TrackSequence = trk.point;
|
||||
@@ -963,7 +955,7 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("BlindWrite5 plugin", "TOC not correctly rebuilt");
|
||||
fullToc = null;
|
||||
}
|
||||
else { DicConsole.DebugWriteLine("BlindWrite5 plugin", "TOC correctly rebuilt"); }
|
||||
else DicConsole.DebugWriteLine("BlindWrite5 plugin", "TOC correctly rebuilt");
|
||||
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdTrackFlags);
|
||||
}
|
||||
@@ -1090,13 +1082,11 @@ namespace DiscImageChef.DiscImages
|
||||
Decoders.CD.PMA.CDPMA pma0 = Decoders.CD.PMA.Decode(pma).Value;
|
||||
|
||||
foreach(Decoders.CD.PMA.CDPMADescriptors descriptor in pma0.PMADescriptors)
|
||||
{
|
||||
if(descriptor.ADR == 2)
|
||||
{
|
||||
uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame);
|
||||
ImageInfo.MediaSerialNumber = string.Format("{0:X6}", id & 0x00FFFFFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(atip != null)
|
||||
@@ -1135,22 +1125,17 @@ namespace DiscImageChef.DiscImages
|
||||
if(atip != null) ImageInfo.ReadableMediaTags.Add(MediaTagType.CD_ATIP);
|
||||
if(cdtext != null) ImageInfo.ReadableMediaTags.Add(MediaTagType.CD_TEXT);
|
||||
if(bca != null)
|
||||
{
|
||||
if(isDvd) ImageInfo.ReadableMediaTags.Add(MediaTagType.DVD_BCA);
|
||||
else if(isBd) ImageInfo.ReadableMediaTags.Add(MediaTagType.BD_BCA);
|
||||
}
|
||||
if(dmi != null) ImageInfo.ReadableMediaTags.Add(MediaTagType.DVD_DMI);
|
||||
if(pfi != null) ImageInfo.ReadableMediaTags.Add(MediaTagType.DVD_PFI);
|
||||
if(fullToc != null) ImageInfo.ReadableMediaTags.Add(MediaTagType.CD_FullTOC);
|
||||
|
||||
if(ImageInfo.MediaType == MediaType.XGD2)
|
||||
{
|
||||
// All XGD3 all have the same number of blocks
|
||||
if(ImageInfo.Sectors == 25063 || // Locked (or non compatible drive)
|
||||
ImageInfo.Sectors == 4229664 || // Xtreme unlock
|
||||
ImageInfo.Sectors == 4246304) // Wxripper unlock
|
||||
ImageInfo.MediaType = MediaType.XGD3;
|
||||
}
|
||||
|
||||
DicConsole.VerboseWriteLine("BlindWrite image describes a disc of type {0}", ImageInfo.MediaType);
|
||||
|
||||
@@ -1183,50 +1168,50 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
case MediaTagType.SCSI_MODEPAGE_2A:
|
||||
{
|
||||
if(mode2A != null) { return (byte[])mode2A.Clone(); }
|
||||
if(mode2A != null) return (byte[])mode2A.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain SCSI MODE PAGE 2Ah.");
|
||||
}
|
||||
case MediaTagType.CD_PMA:
|
||||
{
|
||||
if(pma != null) { return (byte[])pma.Clone(); }
|
||||
if(pma != null) return (byte[])pma.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain PMA information.");
|
||||
}
|
||||
case MediaTagType.CD_ATIP:
|
||||
{
|
||||
if(atip != null) { return (byte[])atip.Clone(); }
|
||||
if(atip != null) return (byte[])atip.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain ATIP information.");
|
||||
}
|
||||
case MediaTagType.CD_TEXT:
|
||||
{
|
||||
if(cdtext != null) { return (byte[])cdtext.Clone(); }
|
||||
if(cdtext != null) return (byte[])cdtext.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain CD-Text information.");
|
||||
}
|
||||
case MediaTagType.DVD_BCA:
|
||||
case MediaTagType.BD_BCA:
|
||||
{
|
||||
if(bca != null) { return (byte[])bca.Clone(); }
|
||||
if(bca != null) return (byte[])bca.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain BCA information.");
|
||||
}
|
||||
case MediaTagType.DVD_PFI:
|
||||
{
|
||||
if(pfi != null) { return (byte[])pfi.Clone(); }
|
||||
if(pfi != null) return (byte[])pfi.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain PFI.");
|
||||
}
|
||||
case MediaTagType.DVD_DMI:
|
||||
{
|
||||
if(dmi != null) { return (byte[])dmi.Clone(); }
|
||||
if(dmi != null) return (byte[])dmi.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain DMI.");
|
||||
}
|
||||
case MediaTagType.CD_FullTOC:
|
||||
{
|
||||
if(fullToc != null) { return (byte[])fullToc.Clone(); }
|
||||
if(fullToc != null) return (byte[])fullToc.Clone();
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain TOC information.");
|
||||
}
|
||||
@@ -1258,19 +1243,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1278,19 +1255,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1304,13 +1273,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track bwTrack in tracks)
|
||||
{
|
||||
if(bwTrack.TrackSequence == track)
|
||||
{
|
||||
_track = bwTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1322,13 +1289,11 @@ namespace DiscImageChef.DiscImages
|
||||
length + sectorAddress, _track.TrackEndSector));
|
||||
|
||||
foreach(DataFileCharacteristics _chars in filePaths)
|
||||
{
|
||||
if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)
|
||||
{
|
||||
chars = _chars;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(string.IsNullOrEmpty(chars.FilePath) || chars.FileFilter == null)
|
||||
throw new ArgumentOutOfRangeException(nameof(chars.FileFilter), "Track does not exist in disc image");
|
||||
@@ -1408,7 +1373,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1417,7 +1381,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1431,13 +1394,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track bwTrack in tracks)
|
||||
{
|
||||
if(bwTrack.TrackSequence == track)
|
||||
{
|
||||
_track = bwTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1449,13 +1410,11 @@ namespace DiscImageChef.DiscImages
|
||||
length + sectorAddress, _track.TrackEndSector));
|
||||
|
||||
foreach(DataFileCharacteristics _chars in filePaths)
|
||||
{
|
||||
if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)
|
||||
{
|
||||
chars = _chars;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(string.IsNullOrEmpty(chars.FilePath) || chars.FileFilter == null)
|
||||
throw new ArgumentOutOfRangeException(nameof(chars.FileFilter), "Track does not exist in disc image");
|
||||
@@ -1701,7 +1660,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1710,7 +1668,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1728,19 +1685,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1754,13 +1703,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track bwTrack in tracks)
|
||||
{
|
||||
if(bwTrack.TrackSequence == track)
|
||||
{
|
||||
_track = bwTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1772,13 +1719,11 @@ namespace DiscImageChef.DiscImages
|
||||
length + sectorAddress, _track.TrackEndSector));
|
||||
|
||||
foreach(DataFileCharacteristics _chars in filePaths)
|
||||
{
|
||||
if((long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)
|
||||
{
|
||||
chars = _chars;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(string.IsNullOrEmpty(chars.FilePath) || chars.FileFilter == null)
|
||||
throw new ArgumentOutOfRangeException(nameof(chars.FileFilter), "Track does not exist in disc image");
|
||||
@@ -1833,7 +1778,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1842,7 +1786,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1879,7 +1822,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if(sessions.Contains(session)) { return GetSessionTracks(session.SessionSequence); }
|
||||
if(sessions.Contains(session)) return GetSessionTracks(session.SessionSequence);
|
||||
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
@@ -1887,7 +1830,7 @@ namespace DiscImageChef.DiscImages
|
||||
public override List<Track> GetSessionTracks(ushort session)
|
||||
{
|
||||
List<Track> tracks = new List<Track>();
|
||||
foreach(Track _track in this.tracks) { if(_track.TrackSession == session) tracks.Add(_track); }
|
||||
foreach(Track _track in this.tracks) if(_track.TrackSession == session) tracks.Add(_track);
|
||||
|
||||
return tracks;
|
||||
}
|
||||
|
||||
@@ -612,17 +612,11 @@ namespace DiscImageChef.DiscImages
|
||||
ulong.Parse(lengthString[1]) * 75 + ulong.Parse(lengthString[2]);
|
||||
}
|
||||
else if(matchZeroData.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRDAO plugin", "Found ZERO \"{1}\" at line {0}", line,
|
||||
matchZeroData.Groups["length"].Value);
|
||||
// Seems can be ignored as the data is still in the image
|
||||
}
|
||||
else if(matchZeroAudio.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRDAO plugin", "Found SILENCE \"{1}\" at line {0}", line,
|
||||
matchZeroAudio.Groups["length"].Value);
|
||||
// Seems can be ignored as the data is still in the image
|
||||
}
|
||||
else if(matchAudioFile.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRDAO plugin", "Found AUDIOFILE \"{1}\" at line {0}", line,
|
||||
@@ -941,10 +935,8 @@ namespace DiscImageChef.DiscImages
|
||||
foreach(CdrdaoTrack track in discimage.Tracks)
|
||||
{
|
||||
if(track.Subchannel)
|
||||
{
|
||||
if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel))
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel);
|
||||
}
|
||||
|
||||
switch(track.Tracktype)
|
||||
{
|
||||
@@ -1039,7 +1031,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
case MediaTagType.CD_MCN:
|
||||
{
|
||||
if(discimage.Mcn != null) { return Encoding.ASCII.GetBytes(discimage.Mcn); }
|
||||
if(discimage.Mcn != null) return Encoding.ASCII.GetBytes(discimage.Mcn);
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain MCN information.");
|
||||
}
|
||||
@@ -1071,19 +1063,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -1092,19 +1076,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -1117,13 +1093,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == track)
|
||||
{
|
||||
_track = cdrdaoTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1196,7 +1170,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1205,7 +1178,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1217,13 +1189,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == track)
|
||||
{
|
||||
_track = cdrdaoTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1378,7 +1348,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1387,7 +1356,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1405,19 +1373,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < cdrdaoTrack.Sectors)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1429,13 +1389,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrdaoTrack.Sequence == track)
|
||||
{
|
||||
_track = cdrdaoTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1498,7 +1456,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1508,7 +1465,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -493,12 +493,10 @@ namespace DiscImageChef.DiscImages
|
||||
discimage.Disktypestr = matchDiskType.Groups[1].Value;
|
||||
}
|
||||
else if(matchDiskType.Success && intrack)
|
||||
{
|
||||
throw new
|
||||
FeatureUnsupportedImageException(string
|
||||
.Format("Found REM ORIGINAL MEDIA TYPE field after a track in line {0}",
|
||||
line));
|
||||
}
|
||||
else if(matchSession.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRWin plugin", "Found REM SESSION at line {0}", line);
|
||||
@@ -506,16 +504,8 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
// What happens between sessions
|
||||
}
|
||||
else if(matchLba.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRWin plugin", "Found REM MSF at line {0}", line);
|
||||
// Just ignored
|
||||
}
|
||||
else if(matchLeadOut.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRWin plugin", "Found REM LEAD-OUT at line {0}", line);
|
||||
// Just ignored
|
||||
}
|
||||
else if(matchLba.Success) DicConsole.DebugWriteLine("CDRWin plugin", "Found REM MSF at line {0}", line);
|
||||
else if(matchLeadOut.Success) DicConsole.DebugWriteLine("CDRWin plugin", "Found REM LEAD-OUT at line {0}", line);
|
||||
else if(matchComment.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRWin plugin", "Found REM at line {0}", line);
|
||||
@@ -609,16 +599,12 @@ namespace DiscImageChef.DiscImages
|
||||
currentfile.Filetype = matchFile.Groups[2].Value;
|
||||
|
||||
// Check if file path is quoted
|
||||
if(datafile[0] == '"' && datafile[datafile.Length - 1] == '"')
|
||||
{
|
||||
datafile = datafile.Substring(1, datafile.Length - 2); // Unquote it
|
||||
}
|
||||
if(datafile[0] == '"' && datafile[datafile.Length - 1] == '"') datafile = datafile.Substring(1, datafile.Length - 2); // Unquote it
|
||||
|
||||
currentfile.Datafilter = filtersList.GetFilter(datafile);
|
||||
|
||||
// Check if file exists
|
||||
if(currentfile.Datafilter == null)
|
||||
{
|
||||
if(datafile[0] == '/' || datafile[0] == '/' && datafile[1] == '.'
|
||||
) // UNIX absolute path
|
||||
{
|
||||
@@ -689,7 +675,6 @@ namespace DiscImageChef.DiscImages
|
||||
FeatureUnsupportedImageException(string.Format("File \"{0}\" not found.",
|
||||
matchFile.Groups[1].Value));
|
||||
}
|
||||
}
|
||||
|
||||
// File does exist, process it
|
||||
DicConsole.DebugWriteLine("CDRWin plugin", "File \"{0}\" found",
|
||||
@@ -754,7 +739,6 @@ namespace DiscImageChef.DiscImages
|
||||
index));
|
||||
|
||||
if(index == 0 || index == 1 && !currenttrack.Indexes.ContainsKey(0))
|
||||
{
|
||||
if((int)(currenttrack.Sequence - 2) >= 0 && offset > 1)
|
||||
{
|
||||
cuetracks[currenttrack.Sequence - 2].Sectors = offset - currentfileoffsetsector;
|
||||
@@ -771,7 +755,6 @@ namespace DiscImageChef.DiscImages
|
||||
"cuetracks[currenttrack.sequence-2].bps = {0}",
|
||||
cuetracks[currenttrack.Sequence - 2].Bps);
|
||||
}
|
||||
}
|
||||
|
||||
if((index == 0 || index == 1 && !currenttrack.Indexes.ContainsKey(0)) &&
|
||||
currenttrack.Sequence == 1)
|
||||
@@ -815,7 +798,7 @@ namespace DiscImageChef.DiscImages
|
||||
else if(matchPostgap.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRWin plugin", "Found POSTGAP at line {0}", line);
|
||||
if(intrack) { currenttrack.Postgap = CdrWinMsftoLba(matchPostgap.Groups[1].Value); }
|
||||
if(intrack) currenttrack.Postgap = CdrWinMsftoLba(matchPostgap.Groups[1].Value);
|
||||
else
|
||||
throw new
|
||||
FeatureUnsupportedImageException(string
|
||||
@@ -825,7 +808,7 @@ namespace DiscImageChef.DiscImages
|
||||
else if(matchPregap.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CDRWin plugin", "Found PREGAP at line {0}", line);
|
||||
if(intrack) { currenttrack.Pregap = CdrWinMsftoLba(matchPregap.Groups[1].Value); }
|
||||
if(intrack) currenttrack.Pregap = CdrWinMsftoLba(matchPregap.Groups[1].Value);
|
||||
else
|
||||
throw new
|
||||
FeatureUnsupportedImageException(string
|
||||
@@ -855,10 +838,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(intrack)
|
||||
{
|
||||
if(currenttrack.Indexes.ContainsKey(0) && currenttrack.Pregap == 0)
|
||||
{
|
||||
currenttrack.Indexes.TryGetValue(0, out currenttrack.Pregap);
|
||||
}
|
||||
if(currenttrack.Indexes.ContainsKey(0) && currenttrack.Pregap == 0) currenttrack.Indexes.TryGetValue(0, out currenttrack.Pregap);
|
||||
currentfile.Sequence = currenttrack.Sequence;
|
||||
currenttrack.Trackfile = currentfile;
|
||||
cuetracks[currenttrack.Sequence - 1] = currenttrack;
|
||||
@@ -877,12 +857,10 @@ namespace DiscImageChef.DiscImages
|
||||
else if(_line == "") // Empty line, ignore it
|
||||
{ }
|
||||
else // Non-empty unknown field
|
||||
{
|
||||
throw new
|
||||
FeatureUnsupportedImageException(string
|
||||
.Format("Found unknown field defined at line {0}: \"{1}\"",
|
||||
line, _line));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -907,13 +885,11 @@ namespace DiscImageChef.DiscImages
|
||||
int lastSessionTrack = 0;
|
||||
|
||||
for(int i = 0; i < cuetracks.Length; i++)
|
||||
{
|
||||
if(cuetracks[i].Session == s)
|
||||
{
|
||||
sessionSectors += cuetracks[i].Sectors;
|
||||
if(i > lastSessionTrack) lastSessionTrack = i;
|
||||
}
|
||||
}
|
||||
|
||||
sessions[s - 1].EndTrack = cuetracks[lastSessionTrack].Sequence;
|
||||
sessions[s - 1].EndSector = sessionSectors - 1;
|
||||
@@ -1251,7 +1227,6 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdTrackFlags);
|
||||
|
||||
foreach(CdrWinTrack track in discimage.Tracks)
|
||||
{
|
||||
switch(track.Tracktype)
|
||||
{
|
||||
case CDRWIN_TRACK_TYPE_AUDIO:
|
||||
@@ -1309,7 +1284,6 @@ namespace DiscImageChef.DiscImages
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImageInfo.XmlMediaType = XmlMediaType.OpticalDisc;
|
||||
|
||||
@@ -1354,7 +1328,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
case MediaTagType.CD_MCN:
|
||||
{
|
||||
if(discimage.Mcn != null) { return Encoding.ASCII.GetBytes(discimage.Mcn); }
|
||||
if(discimage.Mcn != null) return Encoding.ASCII.GetBytes(discimage.Mcn);
|
||||
|
||||
throw new FeatureNotPresentImageException("Image does not contain MCN information.");
|
||||
}
|
||||
@@ -1394,19 +1368,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(CdrWinTrack cdrwinTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrwinTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < cdrwinTrack.Sectors)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1414,19 +1380,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(CdrWinTrack cdrwinTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrwinTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < cdrwinTrack.Sectors)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1438,13 +1396,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(CdrWinTrack cdrwinTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrwinTrack.Sequence == track)
|
||||
{
|
||||
_track = cdrwinTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1529,7 +1485,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1538,7 +1493,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1550,13 +1504,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(CdrWinTrack cdrwinTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrwinTrack.Sequence == track)
|
||||
{
|
||||
_track = cdrwinTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1718,7 +1670,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1727,7 +1678,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1745,19 +1695,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(CdrWinTrack cdrwinTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrwinTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < cdrwinTrack.Sectors)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -1769,13 +1711,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(CdrWinTrack cdrwinTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrwinTrack.Sequence == track)
|
||||
{
|
||||
_track = cdrwinTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1844,7 +1784,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1854,7 +1793,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1958,7 +1896,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if(discimage.Sessions.Contains(session)) { return GetSessionTracks(session.SessionSequence); }
|
||||
if(discimage.Sessions.Contains(session)) return GetSessionTracks(session.SessionSequence);
|
||||
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
@@ -1968,7 +1906,6 @@ namespace DiscImageChef.DiscImages
|
||||
List<Track> tracks = new List<Track>();
|
||||
|
||||
foreach(CdrWinTrack cdrTrack in discimage.Tracks)
|
||||
{
|
||||
if(cdrTrack.Session == session)
|
||||
{
|
||||
Track _track = new Track();
|
||||
@@ -1999,7 +1936,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
tracks.Add(_track);
|
||||
}
|
||||
}
|
||||
|
||||
return tracks;
|
||||
}
|
||||
|
||||
@@ -1554,10 +1554,8 @@ namespace DiscImageChef.DiscImages
|
||||
offsetmap.Add(_track.TrackStartSector, _track.TrackSequence);
|
||||
|
||||
if(_track.TrackSubchannelType != TrackSubchannelType.None)
|
||||
{
|
||||
if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel))
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel);
|
||||
}
|
||||
|
||||
switch(_track.TrackType)
|
||||
{
|
||||
@@ -1633,10 +1631,7 @@ namespace DiscImageChef.DiscImages
|
||||
Track GetTrack(ulong sector)
|
||||
{
|
||||
Track track = new Track();
|
||||
foreach(KeyValuePair<ulong, uint> kvp in offsetmap)
|
||||
{
|
||||
if(sector >= kvp.Key) tracks.TryGetValue(kvp.Value, out track);
|
||||
}
|
||||
foreach(KeyValuePair<ulong, uint> kvp in offsetmap) if(sector >= kvp.Key) tracks.TryGetValue(kvp.Value, out track);
|
||||
|
||||
return track;
|
||||
}
|
||||
@@ -1664,7 +1659,7 @@ namespace DiscImageChef.DiscImages
|
||||
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));
|
||||
@@ -1996,13 +1991,11 @@ namespace DiscImageChef.DiscImages
|
||||
byte[] buffer = new byte[sector_size];
|
||||
|
||||
if(track.TrackType == TrackType.Audio && swapAudio)
|
||||
{
|
||||
for(int i = 0; i < 2352; i += 2)
|
||||
{
|
||||
buffer[i + 1] = sector[i];
|
||||
buffer[i] = sector[i + 1];
|
||||
}
|
||||
}
|
||||
else Array.Copy(sector, sector_offset, buffer, 0, sector_size);
|
||||
|
||||
return buffer;
|
||||
@@ -2045,7 +2038,6 @@ namespace DiscImageChef.DiscImages
|
||||
uint sector_size;
|
||||
|
||||
if(tag == SectorTagType.CdSectorSubchannel)
|
||||
{
|
||||
if(track.TrackSubchannelType == TrackSubchannelType.None)
|
||||
throw new FeatureNotPresentImageException("Requested sector does not contain subchannel");
|
||||
else if(track.TrackSubchannelType == TrackSubchannelType.RawInterleaved)
|
||||
@@ -2057,16 +2049,13 @@ namespace DiscImageChef.DiscImages
|
||||
throw new
|
||||
FeatureSupportedButNotImplementedImageException(string.Format("Unsupported subchannel type {0}",
|
||||
track.TrackSubchannelType));
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(track.TrackType)
|
||||
{
|
||||
case TrackType.CdMode1:
|
||||
case TrackType.CdMode2Form1:
|
||||
{
|
||||
if(track.TrackRawBytesPerSector == 2352)
|
||||
{
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CdSectorSync:
|
||||
@@ -2110,7 +2099,6 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
default: throw new ArgumentException("Unsupported tag requested", nameof(tag));
|
||||
}
|
||||
}
|
||||
else throw new FeatureNotPresentImageException("Requested sector does not contain tags");
|
||||
|
||||
break;
|
||||
@@ -2118,7 +2106,6 @@ namespace DiscImageChef.DiscImages
|
||||
case TrackType.CdMode2Form2:
|
||||
{
|
||||
if(track.TrackRawBytesPerSector == 2352)
|
||||
{
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CdSectorSync:
|
||||
@@ -2147,9 +2134,7 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
default: throw new ArgumentException("Unsupported tag requested", nameof(tag));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CdSectorSync:
|
||||
@@ -2174,14 +2159,12 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
default: throw new ArgumentException("Unsupported tag requested", nameof(tag));
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case TrackType.CdMode2Formless:
|
||||
{
|
||||
if(track.TrackRawBytesPerSector == 2352)
|
||||
{
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CdSectorSync:
|
||||
@@ -2205,7 +2188,6 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
default: throw new ArgumentException("Unsupported tag requested", nameof(tag));
|
||||
}
|
||||
}
|
||||
else throw new FeatureNotPresentImageException("Requested sector does not contain tags");
|
||||
|
||||
break;
|
||||
@@ -2214,28 +2196,23 @@ namespace DiscImageChef.DiscImages
|
||||
throw new FeatureNotPresentImageException("Requested sector does not contain tags");
|
||||
default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type");
|
||||
}
|
||||
}
|
||||
|
||||
byte[] buffer = new byte[sector_size];
|
||||
|
||||
if(track.TrackType == TrackType.Audio && swapAudio)
|
||||
{
|
||||
for(int i = 0; i < 2352; i += 2)
|
||||
{
|
||||
buffer[i + 1] = sector[i];
|
||||
buffer[i] = sector[i + 1];
|
||||
}
|
||||
}
|
||||
else Array.Copy(sector, sector_offset, buffer, 0, sector_size);
|
||||
|
||||
if(track.TrackType == TrackType.Audio && swapAudio)
|
||||
{
|
||||
for(int i = 0; i < 2352; i += 2)
|
||||
{
|
||||
buffer[i + 1] = sector[i];
|
||||
buffer[i] = sector[i + 1];
|
||||
}
|
||||
}
|
||||
else Array.Copy(sector, sector_offset, buffer, 0, sector_size);
|
||||
|
||||
return buffer;
|
||||
@@ -2319,13 +2296,11 @@ namespace DiscImageChef.DiscImages
|
||||
byte[] buffer = new byte[track.TrackRawBytesPerSector];
|
||||
|
||||
if(track.TrackType == TrackType.Audio && swapAudio)
|
||||
{
|
||||
for(int i = 0; i < 2352; i += 2)
|
||||
{
|
||||
buffer[i + 1] = sector[i];
|
||||
buffer[i] = sector[i + 1];
|
||||
}
|
||||
}
|
||||
else Array.Copy(sector, 0, buffer, 0, track.TrackRawBytesPerSector);
|
||||
|
||||
return buffer;
|
||||
@@ -2496,7 +2471,7 @@ namespace DiscImageChef.DiscImages
|
||||
throw new FeaturedNotSupportedByDiscImageException("Cannot access optical tracks on a hard disk image");
|
||||
|
||||
List<Track> trks = new List<Track>();
|
||||
foreach(Track track in tracks.Values) { if(track.TrackSession == session) trks.Add(track); }
|
||||
foreach(Track track in tracks.Values) if(track.TrackSession == session) trks.Add(track);
|
||||
|
||||
return trks;
|
||||
}
|
||||
|
||||
@@ -323,24 +323,15 @@ namespace DiscImageChef.DiscImages
|
||||
cdtLenMatch = cdtLenRegex.Match(_line);
|
||||
discCatMatch = discCatRegex.Match(_line);
|
||||
|
||||
if(discEntMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found TocEntries at line {0}", line);
|
||||
}
|
||||
else if(discSessMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found Sessions at line {0}", line);
|
||||
}
|
||||
if(discEntMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found TocEntries at line {0}", line);
|
||||
else if(discSessMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found Sessions at line {0}", line);
|
||||
else if(discScrMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found DataTracksScrambled at line {0}",
|
||||
line);
|
||||
scrambled |= discScrMatch.Groups["value"].Value == "1";
|
||||
}
|
||||
else if(cdtLenMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found CDTextLength at line {0}", line);
|
||||
}
|
||||
else if(cdtLenMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found CDTextLength at line {0}", line);
|
||||
else if(discCatMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found Catalog at line {0}", line);
|
||||
@@ -353,10 +344,7 @@ namespace DiscImageChef.DiscImages
|
||||
cdtEntsMatch = cdtEntsRegex.Match(_line);
|
||||
cdtEntMatch = cdtEntRegex.Match(_line);
|
||||
|
||||
if(cdtEntsMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found CD-Text Entries at line {0}", line);
|
||||
}
|
||||
if(cdtEntsMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found CD-Text Entries at line {0}", line);
|
||||
else if(cdtEntMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found CD-Text Entry at line {0}", line);
|
||||
@@ -372,14 +360,8 @@ namespace DiscImageChef.DiscImages
|
||||
sessPregMatch = sessPregRegex.Match(_line);
|
||||
sessSubcMatch = sessSubcRegex.Match(_line);
|
||||
|
||||
if(sessPregMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapMode at line {0}", line);
|
||||
}
|
||||
else if(sessSubcMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapSubC at line {0}", line);
|
||||
}
|
||||
if(sessPregMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapMode at line {0}", line);
|
||||
else if(sessSubcMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapSubC at line {0}", line);
|
||||
}
|
||||
else if(inEntry)
|
||||
{
|
||||
@@ -440,10 +422,7 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found AFrame at line {0}", line);
|
||||
currentEntry.Frame = Convert.ToByte(entAFrameMatch.Groups["value"].Value, 10);
|
||||
}
|
||||
else if(entAlbaMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found ALBA at line {0}", line);
|
||||
}
|
||||
else if(entAlbaMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found ALBA at line {0}", line);
|
||||
else if(entZeroMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found Zero at line {0}", line);
|
||||
@@ -466,10 +445,7 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found PFrame at line {0}", line);
|
||||
currentEntry.PFRAME = Convert.ToByte(entPFrameMatch.Groups["value"].Value, 10);
|
||||
}
|
||||
else if(entPlbaMatch.Success)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CloneCD plugin", "Found PLBA at line {0}", line);
|
||||
}
|
||||
else if(entPlbaMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PLBA at line {0}", line);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -639,7 +615,6 @@ namespace DiscImageChef.DiscImages
|
||||
Array.Copy(sectTest, 20, subHdr2, 0, 4);
|
||||
|
||||
if(subHdr1.SequenceEqual(subHdr2) && !empHdr.SequenceEqual(subHdr1))
|
||||
{
|
||||
if((subHdr1[2] & 0x20) == 0x20)
|
||||
{
|
||||
currentTrack.TrackBytesPerSector = 2324;
|
||||
@@ -704,7 +679,6 @@ namespace DiscImageChef.DiscImages
|
||||
.CdSectorEdc);
|
||||
if(ImageInfo.SectorSize < 2048) ImageInfo.SectorSize = 2048;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
currentTrack.TrackBytesPerSector = 2336;
|
||||
@@ -936,19 +910,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track _track in tracks)
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress <= _track.TrackEndSector)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -957,19 +923,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track _track in tracks)
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress <= _track.TrackEndSector)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -982,13 +940,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track __track in tracks)
|
||||
{
|
||||
if(__track.TrackSequence == track)
|
||||
{
|
||||
_track = __track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1049,7 +1005,6 @@ namespace DiscImageChef.DiscImages
|
||||
dataStream.Seek((long)(_track.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) dataStream.Read(buffer, 0, buffer.Length);
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
@@ -1058,7 +1013,6 @@ namespace DiscImageChef.DiscImages
|
||||
dataStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1071,13 +1025,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track __track in tracks)
|
||||
{
|
||||
if(__track.TrackSequence == track)
|
||||
{
|
||||
_track = __track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1299,7 +1251,6 @@ namespace DiscImageChef.DiscImages
|
||||
dataStream.Seek((long)(_track.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) dataStream.Read(buffer, 0, buffer.Length);
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
@@ -1308,7 +1259,6 @@ namespace DiscImageChef.DiscImages
|
||||
dataStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1326,19 +1276,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector + 1)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -1351,13 +1293,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track __track in tracks)
|
||||
{
|
||||
if(__track.TrackSequence == track)
|
||||
{
|
||||
_track = __track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1488,7 +1428,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override List<Track> GetSessionTracks(DiscImages.Session session)
|
||||
{
|
||||
if(sessions.Contains(session)) { return GetSessionTracks(session.SessionSequence); }
|
||||
if(sessions.Contains(session)) return GetSessionTracks(session.SessionSequence);
|
||||
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
@@ -1496,7 +1436,7 @@ namespace DiscImageChef.DiscImages
|
||||
public override List<Track> GetSessionTracks(ushort session)
|
||||
{
|
||||
List<Track> tracks = new List<Track>();
|
||||
foreach(Track _track in this.tracks) { if(_track.TrackSession == session) tracks.Add(_track); }
|
||||
foreach(Track _track in this.tracks) if(_track.TrackSession == session) tracks.Add(_track);
|
||||
|
||||
return tracks;
|
||||
}
|
||||
|
||||
@@ -704,19 +704,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track _track in tracks)
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress < _track.TrackEndSector)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -725,19 +717,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track _track in tracks)
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress < _track.TrackEndSector)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -750,13 +734,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track __track in tracks)
|
||||
{
|
||||
if(__track.TrackSequence == track)
|
||||
{
|
||||
_track = __track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -831,7 +813,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) imageStream.Read(buffer, 0, buffer.Length);
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
@@ -840,7 +821,6 @@ namespace DiscImageChef.DiscImages
|
||||
imageStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -852,13 +832,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track __track in tracks)
|
||||
{
|
||||
if(__track.TrackSequence == track)
|
||||
{
|
||||
_track = __track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1046,7 +1024,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) imageStream.Read(buffer, 0, buffer.Length);
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
@@ -1055,7 +1032,6 @@ namespace DiscImageChef.DiscImages
|
||||
imageStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1073,19 +1049,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track track in tracks)
|
||||
{
|
||||
if(track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -1098,13 +1066,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.TrackSequence = 0;
|
||||
|
||||
foreach(Track __track in tracks)
|
||||
{
|
||||
if(__track.TrackSequence == track)
|
||||
{
|
||||
_track = __track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.TrackSequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -1139,7 +1105,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) imageStream.Read(buffer, 0, buffer.Length);
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector = new byte[sectorSize];
|
||||
@@ -1148,7 +1113,6 @@ namespace DiscImageChef.DiscImages
|
||||
imageStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1265,7 +1229,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if(sessions.Contains(session)) { return GetSessionTracks(session.SessionSequence); }
|
||||
if(sessions.Contains(session)) return GetSessionTracks(session.SessionSequence);
|
||||
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
@@ -1273,7 +1237,7 @@ namespace DiscImageChef.DiscImages
|
||||
public override List<Track> GetSessionTracks(ushort session)
|
||||
{
|
||||
List<Track> _tracks = new List<Track>();
|
||||
foreach(Track _track in tracks) { if(_track.TrackSession == session) _tracks.Add(_track); }
|
||||
foreach(Track _track in tracks) if(_track.TrackSession == session) _tracks.Add(_track);
|
||||
|
||||
return _tracks;
|
||||
}
|
||||
|
||||
@@ -703,10 +703,8 @@ namespace DiscImageChef.DiscImages
|
||||
byte[] buffer = new byte[length * ImageInfo.SectorSize];
|
||||
|
||||
if(twiggy)
|
||||
{
|
||||
Array.Copy(twiggyCache, (int)sectorAddress * ImageInfo.SectorSize, buffer, 0,
|
||||
length * ImageInfo.SectorSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
Stream stream = dc42ImageFilter.GetDataForkStream();
|
||||
@@ -732,7 +730,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
byte[] buffer = new byte[length * bptag];
|
||||
|
||||
if(twiggy) { Array.Copy(twiggyCacheTags, (int)sectorAddress * bptag, buffer, 0, length * bptag); }
|
||||
if(twiggy) Array.Copy(twiggyCacheTags, (int)sectorAddress * bptag, buffer, 0, length * bptag);
|
||||
else
|
||||
{
|
||||
Stream stream = dc42ImageFilter.GetDataForkStream();
|
||||
|
||||
@@ -258,7 +258,6 @@ namespace DiscImageChef.DiscImages
|
||||
currentTrack.Trackfile = currentTrack.Trackfilter.GetFilename();
|
||||
|
||||
if(currentTrack.StartSector - currentStart > 0)
|
||||
{
|
||||
if(currentTrack.StartSector == 45000)
|
||||
{
|
||||
highDensity = true;
|
||||
@@ -271,7 +270,6 @@ namespace DiscImageChef.DiscImages
|
||||
currentTrack.Pregap = currentTrack.StartSector - currentStart;
|
||||
currentTrack.StartSector -= currentTrack.StartSector - currentStart;
|
||||
}
|
||||
}
|
||||
|
||||
if((currentTrack.Trackfilter.GetDataForkLength() - currentTrack.Offset) % currentTrack.Bps !=
|
||||
0) throw new ImageNotSupportedException("Track size not a multiple of sector size");
|
||||
@@ -292,13 +290,11 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
Session[] _sessions = new Session[2];
|
||||
for(int s = 0; s < _sessions.Length; s++)
|
||||
{
|
||||
if(s == 0)
|
||||
{
|
||||
_sessions[s].SessionSequence = 1;
|
||||
|
||||
foreach(GdiTrack trk in discimage.Tracks)
|
||||
{
|
||||
if(!trk.HighDensity)
|
||||
{
|
||||
if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence;
|
||||
@@ -312,14 +308,12 @@ namespace DiscImageChef.DiscImages
|
||||
if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1)
|
||||
_sessions[s].EndSector = trk.Sectors + trk.StartSector - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_sessions[s].SessionSequence = 2;
|
||||
|
||||
foreach(GdiTrack trk in discimage.Tracks)
|
||||
{
|
||||
if(trk.HighDensity)
|
||||
{
|
||||
if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence;
|
||||
@@ -333,9 +327,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1)
|
||||
_sessions[s].EndSector = trk.Sectors + trk.StartSector - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
discimage.Sessions.Add(_sessions[0]);
|
||||
discimage.Sessions.Add(_sessions[1]);
|
||||
@@ -416,7 +408,6 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.SectorSize = 2352; // All others
|
||||
|
||||
foreach(GdiTrack track in discimage.Tracks)
|
||||
{
|
||||
if((track.Flags & 0x40) == 0x40 && track.Bps == 2352)
|
||||
{
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync);
|
||||
@@ -427,7 +418,6 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEccQ);
|
||||
ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorEdc);
|
||||
}
|
||||
}
|
||||
|
||||
ImageInfo.ImageCreationTime = imageFilter.GetCreationTime();
|
||||
ImageInfo.ImageLastModificationTime = imageFilter.GetLastWriteTime();
|
||||
@@ -499,19 +489,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(GdiTrack gdiTrack in discimage.Tracks)
|
||||
{
|
||||
if(gdiTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < gdiTrack.Sectors)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ulong transitionStart;
|
||||
offsetmap.TryGetValue(0, out transitionStart);
|
||||
@@ -524,19 +506,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(GdiTrack gdiTrack in discimage.Tracks)
|
||||
{
|
||||
if(gdiTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < gdiTrack.Sectors)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ulong transitionStart;
|
||||
offsetmap.TryGetValue(0, out transitionStart);
|
||||
@@ -562,13 +536,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(GdiTrack gdiTrack in discimage.Tracks)
|
||||
{
|
||||
if(gdiTrack.Sequence == track)
|
||||
{
|
||||
_track = gdiTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -640,7 +612,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * remainingSectors));
|
||||
else
|
||||
{
|
||||
for(ulong i = 0; i < remainingSectors; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -649,7 +620,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, (int)(i * sectorSize), sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -672,13 +642,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(GdiTrack gdiTrack in discimage.Tracks)
|
||||
{
|
||||
if(gdiTrack.Sequence == track)
|
||||
{
|
||||
_track = gdiTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -804,7 +772,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * remainingSectors));
|
||||
else
|
||||
{
|
||||
for(ulong i = 0; i < remainingSectors; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -813,7 +780,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, (int)(i * sectorSize), sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -831,19 +797,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(GdiTrack gdiTrack in discimage.Tracks)
|
||||
{
|
||||
if(gdiTrack.Sequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < gdiTrack.Sectors)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
}
|
||||
@@ -864,13 +822,11 @@ namespace DiscImageChef.DiscImages
|
||||
_track.Sequence = 0;
|
||||
|
||||
foreach(GdiTrack gdiTrack in discimage.Tracks)
|
||||
{
|
||||
if(gdiTrack.Sequence == track)
|
||||
{
|
||||
_track = gdiTrack;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_track.Sequence == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image");
|
||||
@@ -942,7 +898,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * remainingSectors));
|
||||
else
|
||||
{
|
||||
for(ulong i = 0; i < remainingSectors; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -951,7 +906,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, (int)(i * sectorSize), sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -1045,7 +999,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if(discimage.Sessions.Contains(session)) { return GetSessionTracks(session.SessionSequence); }
|
||||
if(discimage.Sessions.Contains(session)) return GetSessionTracks(session.SessionSequence);
|
||||
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
@@ -1067,7 +1021,6 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
|
||||
foreach(GdiTrack gdiTrack in discimage.Tracks)
|
||||
{
|
||||
if(gdiTrack.HighDensity == expectedDensity)
|
||||
{
|
||||
Track _track = new Track();
|
||||
@@ -1092,7 +1045,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
tracks.Add(_track);
|
||||
}
|
||||
}
|
||||
|
||||
return tracks;
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ namespace DiscImageChef.DiscImages
|
||||
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; }
|
||||
for(int i = 0; i < 2 * 82; i++) if(fheader.trackMap[i] > 1) return false;
|
||||
|
||||
// TODO: validate the tracks
|
||||
// For now, having a valid header should be sufficient.
|
||||
@@ -268,12 +268,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
// build table of track offsets
|
||||
for(int i = 0; i < ImageInfo.Cylinders * 2; i++)
|
||||
{
|
||||
if(fheader.trackMap[i] == 0)
|
||||
{
|
||||
// track is not present in image
|
||||
trackOffset[i] = -1;
|
||||
}
|
||||
if(fheader.trackMap[i] == 0) trackOffset[i] = -1;
|
||||
else
|
||||
{
|
||||
// track is present, read the block header
|
||||
@@ -295,7 +290,6 @@ namespace DiscImageChef.DiscImages
|
||||
// skip the block data
|
||||
stream.Seek(blkLength, SeekOrigin.Current);
|
||||
}
|
||||
}
|
||||
|
||||
// ensure that the last track is present completely
|
||||
if(currentOffset > stream.Length) return false;
|
||||
@@ -374,10 +368,8 @@ namespace DiscImageChef.DiscImages
|
||||
public override MediaType GetMediaType()
|
||||
{
|
||||
foreach(MediaTypeTableEntry ent in mediaTypes)
|
||||
{
|
||||
if(ent.Tracks == ImageInfo.Cylinders && ent.SectorsPerTrack == ImageInfo.SectorsPerTrack)
|
||||
return ent.MediaType;
|
||||
}
|
||||
|
||||
return MediaType.Unknown;
|
||||
}
|
||||
@@ -410,17 +402,15 @@ namespace DiscImageChef.DiscImages
|
||||
int sIndex = 0; // source buffer position
|
||||
int dIndex = 0; // destination buffer position
|
||||
while(sIndex < compressedLength)
|
||||
{
|
||||
if(cBuffer[sIndex] == escapeByte)
|
||||
{
|
||||
sIndex++; // skip over escape byte
|
||||
fillByte = cBuffer[sIndex++]; // read fill byte
|
||||
fillCount = cBuffer[sIndex++]; // read fill count
|
||||
// fill destination buffer
|
||||
for(int i = 0; i < fillCount; i++) { trackData[dIndex++] = fillByte; }
|
||||
for(int i = 0; i < fillCount; i++) trackData[dIndex++] = fillByte;
|
||||
}
|
||||
else { trackData[dIndex++] = cBuffer[sIndex++]; }
|
||||
}
|
||||
else trackData[dIndex++] = cBuffer[sIndex++];
|
||||
|
||||
// check that the number of bytes decompressed matches a whole track
|
||||
if(dIndex != ImageInfo.SectorSize * ImageInfo.SectorsPerTrack)
|
||||
@@ -443,11 +433,7 @@ namespace DiscImageChef.DiscImages
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found");
|
||||
|
||||
result = new byte[ImageInfo.SectorSize];
|
||||
if(trackOffset[trackNum] == -1)
|
||||
{
|
||||
// track is not present. Fill with zeroes.
|
||||
Array.Clear(result, 0, (int)ImageInfo.SectorSize);
|
||||
}
|
||||
if(trackOffset[trackNum] == -1) Array.Clear(result, 0, (int)ImageInfo.SectorSize);
|
||||
else
|
||||
{
|
||||
// track is present in file, make sure it has been loaded
|
||||
@@ -466,10 +452,7 @@ namespace DiscImageChef.DiscImages
|
||||
if(sectorAddress + length > ImageInfo.Sectors)
|
||||
throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than available");
|
||||
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
ReadSector(sectorAddress + (ulong)i).CopyTo(result, i * ImageInfo.SectorSize);
|
||||
}
|
||||
for(int i = 0; i < length; i++) ReadSector(sectorAddress + (ulong)i).CopyTo(result, i * ImageInfo.SectorSize);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ namespace DiscImageChef.DiscImages
|
||||
stream.Read(bpsbytes, 0, bpsbytes.Length);
|
||||
for(int i = 0; i < spt; i++) bps[i] = BitConverter.ToUInt16(bpsbytes, i * 2);
|
||||
}
|
||||
else { for(int i = 0; i < spt; i++) bps[i] = (ushort)(128 << n); }
|
||||
else for(int i = 0; i < spt; i++) bps[i] = (ushort)(128 << n);
|
||||
|
||||
if(spt > ImageInfo.SectorsPerTrack) ImageInfo.SectorsPerTrack = spt;
|
||||
|
||||
|
||||
@@ -482,14 +482,12 @@ namespace DiscImageChef.DiscImages
|
||||
ulong chunkStartSector = 0;
|
||||
|
||||
foreach(KeyValuePair<ulong, BlockChunk> kvp in chunks)
|
||||
{
|
||||
if(sectorAddress >= kvp.Key)
|
||||
{
|
||||
currentChunk = kvp.Value;
|
||||
chunkFound = true;
|
||||
chunkStartSector = kvp.Key;
|
||||
}
|
||||
}
|
||||
|
||||
long relOff = ((long)sectorAddress - (long)chunkStartSector) * SECTOR_SIZE;
|
||||
|
||||
|
||||
@@ -900,14 +900,8 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("Nero plugin", "footerV2.ChunkID = 0x{0:X8}", footerV2.ChunkId);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset);
|
||||
|
||||
if(footerV2.ChunkId == NeroV2FooterId && footerV2.FirstChunkOffset < (ulong)imageStream.Length)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if(footerV1.ChunkId == NeroV1FooterId && footerV1.FirstChunkOffset < (ulong)imageStream.Length)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if(footerV2.ChunkId == NeroV2FooterId && footerV2.FirstChunkOffset < (ulong)imageStream.Length) return true;
|
||||
if(footerV1.ChunkId == NeroV1FooterId && footerV1.FirstChunkOffset < (ulong)imageStream.Length) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1842,19 +1836,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track _track in imageTracks)
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector)
|
||||
return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -1863,19 +1849,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track _track in imageTracks)
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector)
|
||||
return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -1970,7 +1948,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -1979,7 +1956,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -2201,7 +2177,6 @@ namespace DiscImageChef.DiscImages
|
||||
SeekOrigin.Begin);
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -2210,7 +2185,6 @@ namespace DiscImageChef.DiscImages
|
||||
br.BaseStream.Seek(sectorSkip, SeekOrigin.Current);
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -2228,19 +2202,11 @@ namespace DiscImageChef.DiscImages
|
||||
public override byte[] ReadSectorsLong(ulong sectorAddress, uint length)
|
||||
{
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach(Track _track in imageTracks)
|
||||
{
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if(sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector)
|
||||
return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
|
||||
string.Format("Sector address {0} not found", sectorAddress));
|
||||
@@ -2312,7 +2278,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length));
|
||||
else
|
||||
{
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
@@ -2322,7 +2287,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -217,8 +217,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
// Flux
|
||||
if(next != current)
|
||||
{
|
||||
// Next is used
|
||||
if(next)
|
||||
{
|
||||
extentStart = i;
|
||||
@@ -229,7 +227,6 @@ namespace DiscImageChef.DiscImages
|
||||
extents.Add(extentStart, i);
|
||||
extentsOff.TryGetValue(extentStart, out ulong foo);
|
||||
}
|
||||
}
|
||||
|
||||
if(next && current) blockOff++;
|
||||
|
||||
@@ -300,13 +297,11 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
bool allEmpty = true;
|
||||
for(uint i = 0; i < length; i++)
|
||||
{
|
||||
if(byteMap[sectorAddress + i] != 0)
|
||||
{
|
||||
allEmpty = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(allEmpty) return new byte[pHdr.blockSize * length];
|
||||
|
||||
|
||||
@@ -518,8 +518,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
// Flux
|
||||
if(next != current)
|
||||
{
|
||||
// Next is used
|
||||
if(next)
|
||||
{
|
||||
extentStart = i;
|
||||
@@ -530,7 +528,6 @@ namespace DiscImageChef.DiscImages
|
||||
extents.Add(extentStart, i);
|
||||
extentsOff.TryGetValue(extentStart, out ulong foo);
|
||||
}
|
||||
}
|
||||
|
||||
if(next && current) blockOff++;
|
||||
|
||||
@@ -617,13 +614,11 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
bool allEmpty = true;
|
||||
for(uint i = 0; i < length; i++)
|
||||
{
|
||||
if((bitmap[sectorAddress / 8] & (1 << (int)(sectorAddress % 8))) != 0)
|
||||
{
|
||||
allEmpty = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(allEmpty) return new byte[ImageInfo.SectorSize * length];
|
||||
|
||||
|
||||
@@ -501,7 +501,7 @@ namespace DiscImageChef.DiscImages
|
||||
cnt++;
|
||||
val >>= 1;
|
||||
}
|
||||
if((val & 0x1) == 0) { cnt++; }
|
||||
if((val & 0x1) == 0) cnt++;
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace DiscImageChef.DiscImages
|
||||
byte[] hdr_b = new byte[256];
|
||||
stream.Read(hdr_b, 0, hdr_b.Length);
|
||||
|
||||
for(int i = 4; i < 256; i++) { if(hdr_b[i] != 0) return false; }
|
||||
for(int i = 4; i < 256; i++) if(hdr_b[i] != 0) return false;
|
||||
|
||||
int cylinders = BitConverter.ToInt32(hdr_b, 0);
|
||||
|
||||
@@ -103,7 +103,7 @@ namespace DiscImageChef.DiscImages
|
||||
byte[] hdr_b = new byte[256];
|
||||
stream.Read(hdr_b, 0, hdr_b.Length);
|
||||
|
||||
for(int i = 4; i < 256; i++) { if(hdr_b[i] != 0) return false; }
|
||||
for(int i = 4; i < 256; i++) if(hdr_b[i] != 0) return false;
|
||||
|
||||
int cylinders = BitConverter.ToInt32(hdr_b, 0);
|
||||
|
||||
|
||||
@@ -357,7 +357,7 @@ namespace DiscImageChef.DiscImages
|
||||
inStream.Seek(12, SeekOrigin.Begin);
|
||||
stream.Seek(12, SeekOrigin.Begin);
|
||||
init_Decode();
|
||||
do { if((rd = Decode(out obuf, BUFSZ)) > 0) stream.Write(obuf, 0, rd); }
|
||||
do if((rd = Decode(out obuf, BUFSZ)) > 0) stream.Write(obuf, 0, rd);
|
||||
while(rd == BUFSZ);
|
||||
}
|
||||
else
|
||||
@@ -416,10 +416,8 @@ namespace DiscImageChef.DiscImages
|
||||
aDiskCrcHasFailed |= cmtcrc != commentHeader.Crc;
|
||||
|
||||
for(int i = 0; i < commentBlock.Length; i++)
|
||||
{
|
||||
// Replace NULLs, used by TeleDisk as newline markers, with UNIX newline marker
|
||||
// Replace NULLs, used by TeleDisk as newline markers, with UNIX newline marker
|
||||
if(commentBlock[i] == 0x00) commentBlock[i] = 0x0A;
|
||||
}
|
||||
|
||||
ImageInfo.ImageComments = System.Text.Encoding.ASCII.GetString(commentBlock);
|
||||
|
||||
@@ -527,7 +525,6 @@ namespace DiscImageChef.DiscImages
|
||||
break;
|
||||
|
||||
if(teleDiskTrack.Sectors < ImageInfo.SectorsPerTrack)
|
||||
{
|
||||
if(teleDiskTrack.Cylinder + 1 == totalCylinders)
|
||||
{
|
||||
hasLeadOutOnHead0 |= teleDiskTrack.Head == 0;
|
||||
@@ -535,7 +532,6 @@ namespace DiscImageChef.DiscImages
|
||||
if(ImageInfo.Cylinders == totalCylinders) ImageInfo.Cylinders--;
|
||||
}
|
||||
else ImageInfo.SectorsPerTrack = teleDiskTrack.Sectors;
|
||||
}
|
||||
for(byte processedSectors = 0; processedSectors < teleDiskTrack.Sectors; processedSectors++)
|
||||
{
|
||||
TeleDiskSectorHeader teleDiskSector = new TeleDiskSectorHeader();
|
||||
@@ -676,50 +672,34 @@ namespace DiscImageChef.DiscImages
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "\t\tLBA: {0}", lba);
|
||||
|
||||
if((teleDiskSector.Flags & FLAGS_SECTOR_NO_ID) != FLAGS_SECTOR_NO_ID)
|
||||
{
|
||||
if(sectorsData[teleDiskTrack.Cylinder][teleDiskTrack.Head][teleDiskSector.SectorNumber] != null)
|
||||
{
|
||||
if((teleDiskSector.Flags & FLAGS_SECTOR_DUPLICATE) == FLAGS_SECTOR_DUPLICATE)
|
||||
{
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin",
|
||||
"\t\tSector {0} on cylinder {1} head {2} is duplicate, and marked so",
|
||||
teleDiskSector.SectorNumber, teleDiskSector.Cylinder, teleDiskSector.Head);
|
||||
}
|
||||
else
|
||||
{
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin",
|
||||
"\t\tSector {0} on cylinder {1} head {2} is duplicate, but is not marked so",
|
||||
teleDiskSector.SectorNumber, teleDiskSector.Cylinder, teleDiskSector.Head);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sectorsData[teleDiskTrack.Cylinder][teleDiskTrack.Head][teleDiskSector.SectorNumber] = decodedData;
|
||||
totalDiskSize += (uint)decodedData.Length;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MemoryStream leadOutMs = new MemoryStream();
|
||||
if(hasLeadOutOnHead0)
|
||||
{
|
||||
for(int i = 0; i < sectorsData[totalCylinders - 1][0].Length; i++)
|
||||
{
|
||||
if(sectorsData[totalCylinders - 1][0][i] != null)
|
||||
leadOutMs.Write(sectorsData[totalCylinders - 1][0][i], 0,
|
||||
sectorsData[totalCylinders - 1][0][i].Length);
|
||||
}
|
||||
}
|
||||
if(hasLeadOutOnHead1)
|
||||
{
|
||||
for(int i = 0; i < sectorsData[totalCylinders - 1][1].Length; i++)
|
||||
{
|
||||
if(sectorsData[totalCylinders - 1][1][i] != null)
|
||||
leadOutMs.Write(sectorsData[totalCylinders - 1][1][i], 0,
|
||||
sectorsData[totalCylinders - 1][1][i].Length);
|
||||
}
|
||||
}
|
||||
|
||||
if(leadOutMs.Length != 0)
|
||||
{
|
||||
@@ -911,10 +891,8 @@ namespace DiscImageChef.DiscImages
|
||||
crc ^= (ushort)((buffer[counter] & 0xFF) << 8);
|
||||
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if((crc & 0x8000) > 0) crc = (ushort)((crc << 1) ^ TELE_DISK_CRC_POLY);
|
||||
else crc = (ushort)(crc << 1);
|
||||
}
|
||||
|
||||
counter++;
|
||||
}
|
||||
@@ -1517,14 +1495,12 @@ namespace DiscImageChef.DiscImages
|
||||
/* halven cumulative freq for leaf nodes */
|
||||
j = 0;
|
||||
for(i = 0; i < T; i++)
|
||||
{
|
||||
if(son[i] >= T)
|
||||
{
|
||||
freq[j] = (ushort)((freq[i] + 1) / 2);
|
||||
son[j] = son[i];
|
||||
j++;
|
||||
}
|
||||
}
|
||||
/* make a tree : first, connect children nodes */
|
||||
for(i = 0, j = N_CHAR; j < T; i += 2, j++)
|
||||
{
|
||||
@@ -1543,10 +1519,8 @@ namespace DiscImageChef.DiscImages
|
||||
}
|
||||
/* connect parent nodes */
|
||||
for(i = 0; i < T; i++)
|
||||
{
|
||||
if((k = son[i]) >= T) { prnt[k] = i; }
|
||||
else { prnt[k] = prnt[k + 1] = i; }
|
||||
}
|
||||
if((k = son[i]) >= T) prnt[k] = i;
|
||||
else prnt[k] = prnt[k + 1] = i;
|
||||
}
|
||||
|
||||
/* update freq tree */
|
||||
@@ -1555,7 +1529,7 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
int i, j, k, l;
|
||||
|
||||
if(freq[R] == MAX_FREQ) { Reconst(); }
|
||||
if(freq[R] == MAX_FREQ) Reconst();
|
||||
c = prnt[c + T];
|
||||
do
|
||||
{
|
||||
@@ -1663,7 +1637,6 @@ namespace DiscImageChef.DiscImages
|
||||
buf = new byte[len];
|
||||
int count; // was an unsigned long, seems unnecessary
|
||||
for(count = 0; count < len;)
|
||||
{
|
||||
if(tdctl.Bufcnt == 0)
|
||||
{
|
||||
if((c = DecodeChar()) < 0) return count; // fatal error
|
||||
@@ -1699,7 +1672,6 @@ namespace DiscImageChef.DiscImages
|
||||
// reset bufcnt after copy string from text_buf[]
|
||||
if(tdctl.Bufndx >= tdctl.Bufcnt) tdctl.Bufndx = tdctl.Bufcnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return count; // count == len, success
|
||||
}
|
||||
|
||||
@@ -839,7 +839,6 @@ namespace DiscImageChef.DiscImages
|
||||
{
|
||||
locatorEntriesData = new byte[8][];
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if(thisDynamic.LocatorEntries[i].PlatformCode != 0x00000000)
|
||||
{
|
||||
locatorEntriesData[i] = new byte[thisDynamic.LocatorEntries[i].PlatformDataLength];
|
||||
@@ -873,7 +872,6 @@ namespace DiscImageChef.DiscImages
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int currentLocator = 0;
|
||||
bool locatorFound = false;
|
||||
|
||||
@@ -674,7 +674,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
ulong skipSize = 0;
|
||||
for(ulong i = 0; i < dataBlocks; i++)
|
||||
{
|
||||
if(readChunks == chunkRatio)
|
||||
{
|
||||
if(hasParent)
|
||||
@@ -688,7 +687,6 @@ namespace DiscImageChef.DiscImages
|
||||
blockAllocationTable[i] = BitConverter.ToUInt64(batB, (int)(i * 8 + skipSize));
|
||||
readChunks++;
|
||||
}
|
||||
}
|
||||
|
||||
if(hasParent)
|
||||
{
|
||||
@@ -696,11 +694,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
MemoryStream sectorBmpMs = new MemoryStream();
|
||||
foreach(ulong pt in sectorBitmapPointers)
|
||||
{
|
||||
if((pt & BAT_FLAGS_MASK) == SECTOR_BITMAP_NOT_PRESENT)
|
||||
{
|
||||
sectorBmpMs.Write(new byte[1048576], 0, 1048576);
|
||||
}
|
||||
if((pt & BAT_FLAGS_MASK) == SECTOR_BITMAP_NOT_PRESENT) sectorBmpMs.Write(new byte[1048576], 0, 1048576);
|
||||
else if((pt & BAT_FLAGS_MASK) == SECTOR_BITMAP_PRESENT)
|
||||
{
|
||||
stream.Seek((long)((pt & BAT_FILE_OFFSET_MASK) * 1048576), SeekOrigin.Begin);
|
||||
@@ -713,7 +707,6 @@ namespace DiscImageChef.DiscImages
|
||||
ImageNotSupportedException(string
|
||||
.Format("Unsupported sector bitmap block flags (0x{0:X16}) found, not proceeding.",
|
||||
pt & BAT_FLAGS_MASK));
|
||||
}
|
||||
|
||||
sectorBitmap = sectorBmpMs.ToArray();
|
||||
sectorBmpMs.Close();
|
||||
|
||||
@@ -131,7 +131,6 @@ namespace DiscImageChef.DiscImages
|
||||
else if((extension == ".adf" || extension == ".adl") && imageFilter.GetDataForkLength() == 819200)
|
||||
ImageInfo.SectorSize = 1024;
|
||||
else
|
||||
{
|
||||
switch(imageFilter.GetDataForkLength())
|
||||
{
|
||||
case 242944:
|
||||
@@ -188,7 +187,6 @@ namespace DiscImageChef.DiscImages
|
||||
ImageInfo.SectorSize = 512;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ImageInfo.ImageSize = (ulong)imageFilter.GetDataForkLength();
|
||||
ImageInfo.ImageCreationTime = imageFilter.GetCreationTime();
|
||||
@@ -308,14 +306,12 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
// Sharp X68000 SASI hard disks
|
||||
if(extension == ".hdf")
|
||||
{
|
||||
if(ImageInfo.ImageSize % 256 == 0)
|
||||
{
|
||||
ImageInfo.SectorSize = 256;
|
||||
ImageInfo.Sectors = ImageInfo.ImageSize / ImageInfo.SectorSize;
|
||||
ImageInfo.MediaType = MediaType.GENERIC_HDD;
|
||||
}
|
||||
}
|
||||
|
||||
if(ImageInfo.XmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
@@ -675,7 +671,7 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
if(differentTrackZeroSize) { throw new NotImplementedException("Not yet implemented"); }
|
||||
if(differentTrackZeroSize) throw new NotImplementedException("Not yet implemented");
|
||||
else
|
||||
{
|
||||
if(sectorAddress > ImageInfo.Sectors - 1)
|
||||
@@ -920,7 +916,6 @@ namespace DiscImageChef.DiscImages
|
||||
return MediaType.Unknown;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(ImageInfo.ImageSize)
|
||||
{
|
||||
case 80384: return MediaType.ECMA_66;
|
||||
@@ -1018,7 +1013,6 @@ namespace DiscImageChef.DiscImages
|
||||
|
||||
default: return MediaType.GENERIC_HDD;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
Reference in New Issue
Block a user