mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
Reformatted.
This commit is contained in:
@@ -202,37 +202,37 @@ namespace DiscImageChef.ImagePlugins
|
||||
FileStream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
if (stream.Length < 65)
|
||||
if(stream.Length < 65)
|
||||
return false;
|
||||
|
||||
byte[] header = new byte[64];
|
||||
stream.Read(header, 0, 64);
|
||||
|
||||
UInt32 magic = BitConverter.ToUInt32(header, 0x00);
|
||||
if (magic != MAGIC)
|
||||
if(magic != MAGIC)
|
||||
return false;
|
||||
|
||||
UInt32 dataoff = BitConverter.ToUInt32(header, 0x18);
|
||||
if (dataoff > stream.Length)
|
||||
if(dataoff > stream.Length)
|
||||
return false;
|
||||
|
||||
UInt32 datasize = BitConverter.ToUInt32(header, 0x1C);
|
||||
// There seems to be incorrect endian in some images on the wild
|
||||
if (datasize == 0x00800C00)
|
||||
if(datasize == 0x00800C00)
|
||||
datasize = 0x000C8000;
|
||||
if (dataoff + datasize > stream.Length)
|
||||
if(dataoff + datasize > stream.Length)
|
||||
return false;
|
||||
|
||||
UInt32 commentoff = BitConverter.ToUInt32(header, 0x20);
|
||||
if (commentoff > stream.Length)
|
||||
if(commentoff > stream.Length)
|
||||
return false;
|
||||
|
||||
UInt32 commentsize = BitConverter.ToUInt32(header, 0x24);
|
||||
if (commentoff + commentsize > stream.Length)
|
||||
if(commentoff + commentsize > stream.Length)
|
||||
return false;
|
||||
|
||||
UInt32 creatoroff = BitConverter.ToUInt32(header, 0x28);
|
||||
if (creatoroff > stream.Length)
|
||||
if(creatoroff > stream.Length)
|
||||
return false;
|
||||
|
||||
UInt32 creatorsize = BitConverter.ToUInt32(header, 0x2C);
|
||||
@@ -272,7 +272,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageHeader.reserved3 = BitConverter.ToUInt32(header, 0x38);
|
||||
ImageHeader.reserved4 = BitConverter.ToUInt32(header, 0x3C);
|
||||
|
||||
if (ImageHeader.dataSize == 0x00800C00)
|
||||
if(ImageHeader.dataSize == 0x00800C00)
|
||||
{
|
||||
ImageHeader.dataSize = 0x000C8000;
|
||||
DicConsole.DebugWriteLine("2MG plugin", "Detected incorrect endian on data size field, correcting.");
|
||||
@@ -296,17 +296,17 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("2MG plugin", "ImageHeader.reserved3 = 0x{0:X8}", ImageHeader.reserved3);
|
||||
DicConsole.DebugWriteLine("2MG plugin", "ImageHeader.reserved4 = 0x{0:X8}", ImageHeader.reserved4);
|
||||
|
||||
if (ImageHeader.dataSize == 0 && ImageHeader.blocks == 0 && ImageHeader.imageFormat != ProDOSSectorOrder)
|
||||
if(ImageHeader.dataSize == 0 && ImageHeader.blocks == 0 && ImageHeader.imageFormat != ProDOSSectorOrder)
|
||||
return false;
|
||||
|
||||
if (ImageHeader.imageFormat == ProDOSSectorOrder && ImageHeader.blocks == 0)
|
||||
if(ImageHeader.imageFormat == ProDOSSectorOrder && ImageHeader.blocks == 0)
|
||||
return false;
|
||||
|
||||
if (ImageHeader.imageFormat == ProDOSSectorOrder)
|
||||
if(ImageHeader.imageFormat == ProDOSSectorOrder)
|
||||
ImageHeader.dataSize = ImageHeader.blocks * 512;
|
||||
else if (ImageHeader.blocks == 0 && ImageHeader.dataSize != 0)
|
||||
else if(ImageHeader.blocks == 0 && ImageHeader.dataSize != 0)
|
||||
ImageHeader.blocks = ImageHeader.dataSize / 256;
|
||||
else if (ImageHeader.dataSize == 0 && ImageHeader.blocks != 0)
|
||||
else if(ImageHeader.dataSize == 0 && ImageHeader.blocks != 0)
|
||||
ImageHeader.dataSize = ImageHeader.blocks * 256;
|
||||
|
||||
ImageInfo.sectorSize = (uint)(ImageHeader.imageFormat == ProDOSSectorOrder ? 512 : 256);
|
||||
@@ -314,9 +314,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.sectors = ImageHeader.blocks;
|
||||
ImageInfo.imageSize = ImageHeader.dataSize;
|
||||
|
||||
switch (ImageHeader.creator)
|
||||
switch(ImageHeader.creator)
|
||||
{
|
||||
|
||||
|
||||
case CreatorAsimov:
|
||||
ImageInfo.imageApplication = "ASIMOV2";
|
||||
break;
|
||||
@@ -342,7 +342,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ImageInfo.imageVersion = ImageHeader.version.ToString();
|
||||
|
||||
if (ImageHeader.commentOffset != 0 && ImageHeader.commentSize != 0)
|
||||
if(ImageHeader.commentOffset != 0 && ImageHeader.commentSize != 0)
|
||||
{
|
||||
stream.Seek(ImageHeader.commentOffset, SeekOrigin.Begin);
|
||||
|
||||
@@ -432,7 +432,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override MediaType GetMediaType()
|
||||
{
|
||||
switch (ImageInfo.sectors)
|
||||
switch(ImageInfo.sectors)
|
||||
{
|
||||
case 455:
|
||||
return MediaType.Apple32SS;
|
||||
@@ -458,10 +458,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
if (sectorAddress > ImageInfo.sectors - 1)
|
||||
if(sectorAddress > ImageInfo.sectors - 1)
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
|
||||
if (sectorAddress + length > ImageInfo.sectors)
|
||||
if(sectorAddress + length > ImageInfo.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than available");
|
||||
|
||||
byte[] buffer = new byte[length * ImageInfo.sectorSize];
|
||||
@@ -623,7 +623,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
FailingLBAs = new List<ulong>();
|
||||
UnknownLBAs = new List<ulong>();
|
||||
for (ulong i = 0; i < ImageInfo.sectors; i++)
|
||||
for(ulong i = 0; i < ImageInfo.sectors; i++)
|
||||
UnknownLBAs.Add(i);
|
||||
return null;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -164,7 +164,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
stream.Close();
|
||||
|
||||
// Incorrect pascal string length, not DC42
|
||||
if (buffer[0] > 63)
|
||||
if(buffer[0] > 63)
|
||||
return false;
|
||||
|
||||
DC42Header tmp_header = new DC42Header();
|
||||
@@ -193,15 +193,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "tmp_header.valid = {0}", tmp_header.valid);
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "tmp_header.reserved = {0}", tmp_header.reserved);
|
||||
|
||||
if (tmp_header.valid != 1 || tmp_header.reserved != 0)
|
||||
if(tmp_header.valid != 1 || tmp_header.reserved != 0)
|
||||
return false;
|
||||
|
||||
FileInfo fi = new FileInfo(imagePath);
|
||||
|
||||
if (tmp_header.dataSize + tmp_header.tagSize + 0x54 != fi.Length && tmp_header.format != kSigmaFormatTwiggy)
|
||||
if(tmp_header.dataSize + tmp_header.tagSize + 0x54 != fi.Length && tmp_header.format != kSigmaFormatTwiggy)
|
||||
return false;
|
||||
|
||||
if (tmp_header.format != kSonyFormat400K && tmp_header.format != kSonyFormat800K && tmp_header.format != kSonyFormat720K &&
|
||||
if(tmp_header.format != kSonyFormat400K && tmp_header.format != kSonyFormat800K && tmp_header.format != kSonyFormat720K &&
|
||||
tmp_header.format != kSonyFormat1440K && tmp_header.format != kSonyFormat1680K && tmp_header.format != kSigmaFormatTwiggy)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Unknown tmp_header.format = 0x{0:X2} value", tmp_header.format);
|
||||
@@ -209,7 +209,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return false;
|
||||
}
|
||||
|
||||
if (tmp_header.fmtByte != kSonyFmtByte400K && tmp_header.fmtByte != kSonyFmtByte800K && tmp_header.fmtByte != kSonyFmtByte800KIncorrect &&
|
||||
if(tmp_header.fmtByte != kSonyFmtByte400K && tmp_header.fmtByte != kSonyFmtByte800K && tmp_header.fmtByte != kSonyFmtByte800KIncorrect &&
|
||||
tmp_header.fmtByte != kSonyFmtByteProDos && tmp_header.fmtByte != kInvalidFmtByte && tmp_header.fmtByte != kSigmaFmtByteTwiggy)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Unknown tmp_header.fmtByte = 0x{0:X2} value", tmp_header.fmtByte);
|
||||
@@ -217,7 +217,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return false;
|
||||
}
|
||||
|
||||
if (tmp_header.fmtByte == kInvalidFmtByte)
|
||||
if(tmp_header.fmtByte == kInvalidFmtByte)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Image says it's unformatted");
|
||||
|
||||
@@ -239,7 +239,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
stream.Close();
|
||||
|
||||
// Incorrect pascal string length, not DC42
|
||||
if (buffer[0] > 63)
|
||||
if(buffer[0] > 63)
|
||||
return false;
|
||||
|
||||
header = new DC42Header();
|
||||
@@ -266,15 +266,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "header.valid = {0}", header.valid);
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "header.reserved = {0}", header.reserved);
|
||||
|
||||
if (header.valid != 1 || header.reserved != 0)
|
||||
if(header.valid != 1 || header.reserved != 0)
|
||||
return false;
|
||||
|
||||
FileInfo fi = new FileInfo(imagePath);
|
||||
|
||||
if (header.dataSize + header.tagSize + 0x54 != fi.Length && header.format != kSigmaFormatTwiggy)
|
||||
if(header.dataSize + header.tagSize + 0x54 != fi.Length && header.format != kSigmaFormatTwiggy)
|
||||
return false;
|
||||
|
||||
if (header.format != kSonyFormat400K && header.format != kSonyFormat800K && header.format != kSonyFormat720K &&
|
||||
if(header.format != kSonyFormat400K && header.format != kSonyFormat800K && header.format != kSonyFormat720K &&
|
||||
header.format != kSonyFormat1440K && header.format != kSonyFormat1680K && header.format != kSigmaFormatTwiggy)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Unknown header.format = 0x{0:X2} value", header.format);
|
||||
@@ -282,7 +282,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return false;
|
||||
}
|
||||
|
||||
if (header.fmtByte != kSonyFmtByte400K && header.fmtByte != kSonyFmtByte800K && header.fmtByte != kSonyFmtByte800KIncorrect &&
|
||||
if(header.fmtByte != kSonyFmtByte400K && header.fmtByte != kSonyFmtByte800K && header.fmtByte != kSonyFmtByte800KIncorrect &&
|
||||
header.fmtByte != kSonyFmtByteProDos && header.fmtByte != kInvalidFmtByte && header.fmtByte != kSigmaFmtByteTwiggy)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Unknown tmp_header.fmtByte = 0x{0:X2} value", header.fmtByte);
|
||||
@@ -290,7 +290,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return false;
|
||||
}
|
||||
|
||||
if (header.fmtByte == kInvalidFmtByte)
|
||||
if(header.fmtByte == kInvalidFmtByte)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Image says it's unformatted");
|
||||
|
||||
@@ -305,9 +305,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ImageInfo.sectors = header.dataSize / 512;
|
||||
|
||||
if (header.tagSize != 0)
|
||||
if(header.tagSize != 0)
|
||||
{
|
||||
if (header.tagSize / 12 != ImageInfo.sectors)
|
||||
if(header.tagSize / 12 != ImageInfo.sectors)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "header.tagSize / 12 != sectors");
|
||||
|
||||
@@ -322,7 +322,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.imageLastModificationTime = fi.LastWriteTimeUtc;
|
||||
ImageInfo.imageName = header.diskName;
|
||||
|
||||
switch (header.format)
|
||||
switch(header.format)
|
||||
{
|
||||
case kSonyFormat400K:
|
||||
ImageInfo.mediaType = MediaType.AppleSonySS;
|
||||
@@ -365,7 +365,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
for(UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
UnknownLBAs.Add(i);
|
||||
|
||||
return null;
|
||||
@@ -376,7 +376,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
for(UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
UnknownLBAs.Add(i);
|
||||
|
||||
return null;
|
||||
@@ -400,7 +400,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Calculated data checksum = 0x{0:X8}", dataChk);
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Stored data checksum = 0x{0:X8}", header.dataChecksum);
|
||||
|
||||
if (header.tagSize > 0)
|
||||
if(header.tagSize > 0)
|
||||
{
|
||||
DicConsole.DebugWriteLine("DC42 plugin", "Reading tags");
|
||||
FileStream tagstream = new FileStream(dc42ImagePath, FileMode.Open, FileAccess.Read);
|
||||
@@ -449,10 +449,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
if (sectorAddress > ImageInfo.sectors - 1)
|
||||
if(sectorAddress > ImageInfo.sectors - 1)
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
|
||||
if (sectorAddress + length > ImageInfo.sectors)
|
||||
if(sectorAddress + length > ImageInfo.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than available");
|
||||
|
||||
byte[] buffer = new byte[length * ImageInfo.sectorSize];
|
||||
@@ -470,16 +470,16 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsTag(UInt64 sectorAddress, UInt32 length, SectorTagType tag)
|
||||
{
|
||||
if (tag != SectorTagType.AppleSectorTag)
|
||||
if(tag != SectorTagType.AppleSectorTag)
|
||||
throw new FeatureUnsupportedImageException(String.Format("Tag {0} not supported by image format", tag));
|
||||
|
||||
if (header.tagSize == 0)
|
||||
if(header.tagSize == 0)
|
||||
throw new FeatureNotPresentImageException("Disk image does not have tags");
|
||||
|
||||
if (sectorAddress > ImageInfo.sectors - 1)
|
||||
if(sectorAddress > ImageInfo.sectors - 1)
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
|
||||
if (sectorAddress + length > ImageInfo.sectors)
|
||||
if(sectorAddress + length > ImageInfo.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than available");
|
||||
|
||||
byte[] buffer = new byte[length * bptag];
|
||||
@@ -502,17 +502,17 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsLong(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
if (sectorAddress > ImageInfo.sectors - 1)
|
||||
if(sectorAddress > ImageInfo.sectors - 1)
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
|
||||
if (sectorAddress + length > ImageInfo.sectors)
|
||||
if(sectorAddress + length > ImageInfo.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than available");
|
||||
|
||||
byte[] data = ReadSectors(sectorAddress, length);
|
||||
byte[] tags = ReadSectorsTag(sectorAddress, length, SectorTagType.AppleSectorTag);
|
||||
byte[] buffer = new byte[data.Length + tags.Length];
|
||||
|
||||
for (uint i = 0; i < length; i++)
|
||||
for(uint i = 0; i < length; i++)
|
||||
{
|
||||
Array.Copy(data, i * (ImageInfo.sectorSize), buffer, i * (ImageInfo.sectorSize + bptag), ImageInfo.sectorSize);
|
||||
Array.Copy(tags, i * (bptag), buffer, i * (ImageInfo.sectorSize + bptag) + ImageInfo.sectorSize, bptag);
|
||||
@@ -521,22 +521,22 @@ namespace DiscImageChef.ImagePlugins
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
return "Apple DiskCopy 4.2";
|
||||
}
|
||||
|
||||
public override string GetImageVersion()
|
||||
public override string GetImageVersion()
|
||||
{
|
||||
return ImageInfo.imageVersion;
|
||||
}
|
||||
|
||||
public override string GetImageApplication()
|
||||
public override string GetImageApplication()
|
||||
{
|
||||
return ImageInfo.imageApplication;
|
||||
}
|
||||
|
||||
public override string GetImageApplicationVersion()
|
||||
public override string GetImageApplicationVersion()
|
||||
{
|
||||
return ImageInfo.imageApplicationVersion;
|
||||
}
|
||||
@@ -551,7 +551,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.imageLastModificationTime;
|
||||
}
|
||||
|
||||
public override string GetImageName()
|
||||
public override string GetImageName()
|
||||
{
|
||||
return ImageInfo.imageName;
|
||||
}
|
||||
@@ -573,42 +573,42 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.imageCreator;
|
||||
}
|
||||
|
||||
public override string GetImageComments()
|
||||
public override string GetImageComments()
|
||||
{
|
||||
return ImageInfo.imageComments;
|
||||
}
|
||||
|
||||
public override string GetMediaManufacturer()
|
||||
public override string GetMediaManufacturer()
|
||||
{
|
||||
return ImageInfo.mediaManufacturer;
|
||||
}
|
||||
|
||||
public override string GetMediaModel()
|
||||
public override string GetMediaModel()
|
||||
{
|
||||
return ImageInfo.mediaModel;
|
||||
}
|
||||
|
||||
public override string GetMediaSerialNumber()
|
||||
public override string GetMediaSerialNumber()
|
||||
{
|
||||
return ImageInfo.mediaSerialNumber;
|
||||
}
|
||||
|
||||
public override string GetMediaBarcode()
|
||||
public override string GetMediaBarcode()
|
||||
{
|
||||
return ImageInfo.mediaBarcode;
|
||||
}
|
||||
|
||||
public override string GetMediaPartNumber()
|
||||
public override string GetMediaPartNumber()
|
||||
{
|
||||
return ImageInfo.mediaPartNumber;
|
||||
}
|
||||
|
||||
public override int GetMediaSequence()
|
||||
public override int GetMediaSequence()
|
||||
{
|
||||
return ImageInfo.mediaSequence;
|
||||
}
|
||||
|
||||
public override int GetLastDiskSequence()
|
||||
public override int GetLastDiskSequence()
|
||||
{
|
||||
return ImageInfo.lastMediaSequence;
|
||||
}
|
||||
@@ -688,12 +688,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
#region Private methods
|
||||
|
||||
private static UInt32 DC42CheckSum(byte[] buffer)
|
||||
{
|
||||
{
|
||||
UInt32 dc42chk = 0;
|
||||
if ((buffer.Length & 0x01) == 0x01)
|
||||
if((buffer.Length & 0x01) == 0x01)
|
||||
return 0xFFFFFFFF;
|
||||
|
||||
for (UInt32 i = 0; i < buffer.Length; i += 2)
|
||||
for(UInt32 i = 0; i < buffer.Length; i += 2)
|
||||
{
|
||||
dc42chk += (uint)(buffer[i] << 8);
|
||||
dc42chk += buffer[i + 1];
|
||||
|
||||
@@ -143,7 +143,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
int tracksFound = 0;
|
||||
int tracks = 0;
|
||||
|
||||
while (gdiStream.Peek() >= 0)
|
||||
while(gdiStream.Peek() >= 0)
|
||||
{
|
||||
line++;
|
||||
string _line = gdiStream.ReadLine();
|
||||
@@ -171,7 +171,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
return tracks == tracksFound;
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch(Exception ex)
|
||||
{
|
||||
DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", this.imagePath);
|
||||
DicConsole.ErrorWriteLine("Exception: {0}", ex.Message);
|
||||
@@ -182,9 +182,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override bool OpenImage(string imagePath)
|
||||
{
|
||||
if (imagePath == null)
|
||||
if(imagePath == null)
|
||||
return false;
|
||||
if (imagePath == "")
|
||||
if(imagePath == "")
|
||||
return false;
|
||||
|
||||
this.imagePath = imagePath;
|
||||
@@ -214,7 +214,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
GDITrack currentTrack;
|
||||
densitySeparationSectors = 0;
|
||||
|
||||
while (gdiStream.Peek() >= 0)
|
||||
while(gdiStream.Peek() >= 0)
|
||||
{
|
||||
line++;
|
||||
string _line = gdiStream.ReadLine();
|
||||
@@ -233,8 +233,8 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
tracksFound++;
|
||||
|
||||
DicConsole.DebugWriteLine("GDI plugin", "Found track {0} starts at {1} flags {2} type {3} file {4} offset {5} at line {6}",
|
||||
TrackMatch.Groups["track"].Value, TrackMatch.Groups["start"].Value, TrackMatch.Groups["flags"].Value,
|
||||
DicConsole.DebugWriteLine("GDI plugin", "Found track {0} starts at {1} flags {2} type {3} file {4} offset {5} at line {6}",
|
||||
TrackMatch.Groups["track"].Value, TrackMatch.Groups["start"].Value, TrackMatch.Groups["flags"].Value,
|
||||
TrackMatch.Groups["type"].Value, TrackMatch.Groups["filename"].Value, TrackMatch.Groups["offset"].Value, line);
|
||||
|
||||
currentTrack = new GDITrack();
|
||||
@@ -243,7 +243,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
currentTrack.offset = long.Parse(TrackMatch.Groups["offset"].Value);
|
||||
currentTrack.sequence = uint.Parse(TrackMatch.Groups["track"].Value);
|
||||
currentTrack.startSector = ulong.Parse(TrackMatch.Groups["start"].Value);
|
||||
currentTrack.trackfile = TrackMatch.Groups["filename"].Value.Replace("\\\"", "\"").Trim(new []{'"'});
|
||||
currentTrack.trackfile = TrackMatch.Groups["filename"].Value.Replace("\\\"", "\"").Trim(new[] { '"' });
|
||||
|
||||
if((currentTrack.startSector - currentStart) > 0)
|
||||
{
|
||||
@@ -280,7 +280,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
|
||||
Session[] _sessions = new Session[2];
|
||||
for (int s = 0; s < _sessions.Length; s++)
|
||||
for(int s = 0; s < _sessions.Length; s++)
|
||||
{
|
||||
if(s == 0)
|
||||
{
|
||||
@@ -342,7 +342,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
DicConsole.DebugWriteLine("GDI plugin", "Session information:");
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\tDisc contains {0} sessions", discimage.sessions.Count);
|
||||
for (int i = 0; i < discimage.sessions.Count; i++)
|
||||
for(int i = 0; i < discimage.sessions.Count; i++)
|
||||
{
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\tSession {0} information:", i + 1);
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\tStarting track: {0}", discimage.sessions[i].StartTrack);
|
||||
@@ -352,19 +352,19 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
DicConsole.DebugWriteLine("GDI plugin", "Track information:");
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\tDisc contains {0} tracks", discimage.tracks.Count);
|
||||
for (int i = 0; i < discimage.tracks.Count; i++)
|
||||
for(int i = 0; i < discimage.tracks.Count; i++)
|
||||
{
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\tTrack {0} information:", discimage.tracks[i].sequence);
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\t{0} bytes per sector", discimage.tracks[i].bps);
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\tPregap: {0} sectors", discimage.tracks[i].pregap);
|
||||
|
||||
if ((discimage.tracks[i].flags & 0x80) == 0x80)
|
||||
if((discimage.tracks[i].flags & 0x80) == 0x80)
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\tTrack is flagged as quadraphonic");
|
||||
if ((discimage.tracks[i].flags & 0x40) == 0x40)
|
||||
if((discimage.tracks[i].flags & 0x40) == 0x40)
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\tTrack is data");
|
||||
if ((discimage.tracks[i].flags & 0x20) == 0x20)
|
||||
if((discimage.tracks[i].flags & 0x20) == 0x20)
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\tTrack allows digital copy");
|
||||
if ((discimage.tracks[i].flags & 0x10) == 0x10)
|
||||
if((discimage.tracks[i].flags & 0x10) == 0x10)
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\tTrack has pre-emphasis applied");
|
||||
|
||||
DicConsole.DebugWriteLine("GDI plugin", "\t\tTrack resides in file {0}, type defined as {1}, starting at byte {2}",
|
||||
@@ -376,9 +376,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
partitions = new List<Partition>();
|
||||
ulong byte_offset = 0;
|
||||
|
||||
for (int i = 0; i < discimage.tracks.Count; i++)
|
||||
for(int i = 0; i < discimage.tracks.Count; i++)
|
||||
{
|
||||
if (discimage.tracks[i].sequence == 1 && i != 0)
|
||||
if(discimage.tracks[i].sequence == 1 && i != 0)
|
||||
throw new ImageNotSupportedException("Unordered tracks");
|
||||
|
||||
Partition partition = new Partition();
|
||||
@@ -398,16 +398,16 @@ namespace DiscImageChef.ImagePlugins
|
||||
partitions.Add(partition);
|
||||
}
|
||||
|
||||
foreach (GDITrack track in discimage.tracks)
|
||||
foreach(GDITrack track in discimage.tracks)
|
||||
ImageInfo.imageSize += track.bps * track.sectors;
|
||||
foreach (GDITrack track in discimage.tracks)
|
||||
foreach(GDITrack track in discimage.tracks)
|
||||
ImageInfo.sectors += track.sectors;
|
||||
|
||||
ImageInfo.sectors += densitySeparationSectors;
|
||||
|
||||
ImageInfo.sectorSize = 2352; // All others
|
||||
|
||||
foreach (GDITrack track in discimage.tracks)
|
||||
foreach(GDITrack track in discimage.tracks)
|
||||
{
|
||||
if((track.flags & 0x40) == 0x40 && track.bps == 2352)
|
||||
{
|
||||
@@ -434,7 +434,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch(Exception ex)
|
||||
{
|
||||
DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", imagePath);
|
||||
DicConsole.ErrorWriteLine("Exception: {0}", ex.Message);
|
||||
@@ -490,15 +490,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
foreach (KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if (sectorAddress >= kvp.Value)
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
if (gdi_track.sequence == kvp.Key)
|
||||
if(gdi_track.sequence == kvp.Key)
|
||||
{
|
||||
if ((sectorAddress - kvp.Value) < gdi_track.sectors)
|
||||
if((sectorAddress - kvp.Value) < gdi_track.sectors)
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
}
|
||||
}
|
||||
@@ -507,7 +507,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ulong transitionStart;
|
||||
offsetmap.TryGetValue(0, out transitionStart);
|
||||
if (sectorAddress >= transitionStart && sectorAddress < (densitySeparationSectors + transitionStart))
|
||||
if(sectorAddress >= transitionStart && sectorAddress < (densitySeparationSectors + transitionStart))
|
||||
return ReadSectors((sectorAddress - transitionStart), length, 0);
|
||||
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
@@ -515,15 +515,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsTag(UInt64 sectorAddress, UInt32 length, SectorTagType tag)
|
||||
{
|
||||
foreach (KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if (sectorAddress >= kvp.Value)
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
if (gdi_track.sequence == kvp.Key)
|
||||
if(gdi_track.sequence == kvp.Key)
|
||||
{
|
||||
if ((sectorAddress - kvp.Value) < gdi_track.sectors)
|
||||
if((sectorAddress - kvp.Value) < gdi_track.sectors)
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
@@ -532,7 +532,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ulong transitionStart;
|
||||
offsetmap.TryGetValue(0, out transitionStart);
|
||||
if (sectorAddress >= transitionStart && sectorAddress < (densitySeparationSectors + transitionStart))
|
||||
if(sectorAddress >= transitionStart && sectorAddress < (densitySeparationSectors + transitionStart))
|
||||
return ReadSectorsTag((sectorAddress - transitionStart), length, 0, tag);
|
||||
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
@@ -540,7 +540,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
if (track == 0)
|
||||
if(track == 0)
|
||||
{
|
||||
if((sectorAddress + length) > densitySeparationSectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
@@ -552,26 +552,26 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
_track.sequence = 0;
|
||||
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
if (gdi_track.sequence == track)
|
||||
if(gdi_track.sequence == track)
|
||||
{
|
||||
_track = gdi_track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_track.sequence == 0)
|
||||
if(_track.sequence == 0)
|
||||
throw new ArgumentOutOfRangeException("track", "Track does not exist in disc image");
|
||||
|
||||
if ((sectorAddress + length) > _track.sectors)
|
||||
if((sectorAddress + length) > _track.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
uint sector_offset;
|
||||
uint sector_size;
|
||||
uint sector_skip;
|
||||
|
||||
switch (_track.tracktype)
|
||||
switch(_track.tracktype)
|
||||
{
|
||||
case TrackType.Audio:
|
||||
{
|
||||
@@ -582,7 +582,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
case TrackType.CDMode1:
|
||||
{
|
||||
if (_track.bps == 2352)
|
||||
if(_track.bps == 2352)
|
||||
{
|
||||
sector_offset = 16;
|
||||
sector_size = 2048;
|
||||
@@ -604,11 +604,11 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ulong remainingSectors = length;
|
||||
|
||||
if (_track.pregap > 0 && sectorAddress < _track.pregap)
|
||||
if(_track.pregap > 0 && sectorAddress < _track.pregap)
|
||||
{
|
||||
ulong remainingPregap = _track.pregap - sectorAddress;
|
||||
byte[] zero;
|
||||
if (length > remainingPregap)
|
||||
if(length > remainingPregap)
|
||||
{
|
||||
zero = new byte[remainingPregap * sector_size];
|
||||
remainingSectors -= remainingPregap;
|
||||
@@ -626,14 +626,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
return buffer;
|
||||
|
||||
imageStream = new FileStream(_track.trackfile, FileMode.Open, FileAccess.Read);
|
||||
using (BinaryReader br = new BinaryReader(imageStream))
|
||||
using(BinaryReader br = new BinaryReader(imageStream))
|
||||
{
|
||||
br.BaseStream.Seek(_track.offset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip) + _track.pregap * _track.bps), SeekOrigin.Begin);
|
||||
if (sector_offset == 0 && sector_skip == 0)
|
||||
if(sector_offset == 0 && sector_skip == 0)
|
||||
buffer = br.ReadBytes((int)(sector_size * remainingSectors));
|
||||
else
|
||||
{
|
||||
for (ulong i = 0; i < remainingSectors; i++)
|
||||
for(ulong i = 0; i < remainingSectors; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
br.BaseStream.Seek(sector_offset, SeekOrigin.Current);
|
||||
@@ -649,12 +649,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsTag(UInt64 sectorAddress, UInt32 length, UInt32 track, SectorTagType tag)
|
||||
{
|
||||
if (track == 0)
|
||||
if(track == 0)
|
||||
{
|
||||
if((sectorAddress + length) > densitySeparationSectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
if (tag == SectorTagType.CDTrackFlags)
|
||||
if(tag == SectorTagType.CDTrackFlags)
|
||||
return new byte[] { 0x00 };
|
||||
|
||||
throw new ArgumentException("Unsupported tag requested for this track", "tag");
|
||||
@@ -664,26 +664,26 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
_track.sequence = 0;
|
||||
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
if (gdi_track.sequence == track)
|
||||
if(gdi_track.sequence == track)
|
||||
{
|
||||
_track = gdi_track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_track.sequence == 0)
|
||||
if(_track.sequence == 0)
|
||||
throw new ArgumentOutOfRangeException("track", "Track does not exist in disc image");
|
||||
|
||||
if (length > _track.sectors)
|
||||
if(length > _track.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
uint sector_offset;
|
||||
uint sector_size;
|
||||
uint sector_skip;
|
||||
|
||||
switch (tag)
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CDSectorECC:
|
||||
case SectorTagType.CDSectorECC_P:
|
||||
@@ -704,16 +704,16 @@ namespace DiscImageChef.ImagePlugins
|
||||
throw new ArgumentException("Unsupported tag requested", "tag");
|
||||
}
|
||||
|
||||
switch (_track.tracktype)
|
||||
switch(_track.tracktype)
|
||||
{
|
||||
case TrackType.Audio:
|
||||
throw new ArgumentException("There are no tags on audio tracks", "tag");
|
||||
case TrackType.CDMode1:
|
||||
{
|
||||
if (_track.bps != 2352)
|
||||
if(_track.bps != 2352)
|
||||
throw new FeatureNotPresentImageException("Image does not include tags for mode 1 sectors");
|
||||
|
||||
switch (tag)
|
||||
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CDSectorSync:
|
||||
{
|
||||
@@ -773,11 +773,11 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ulong remainingSectors = length;
|
||||
|
||||
if (_track.pregap > 0 && sectorAddress < _track.pregap)
|
||||
if(_track.pregap > 0 && sectorAddress < _track.pregap)
|
||||
{
|
||||
ulong remainingPregap = _track.pregap - sectorAddress;
|
||||
byte[] zero;
|
||||
if (length > remainingPregap)
|
||||
if(length > remainingPregap)
|
||||
{
|
||||
zero = new byte[remainingPregap * sector_size];
|
||||
remainingSectors -= remainingPregap;
|
||||
@@ -795,14 +795,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
return buffer;
|
||||
|
||||
imageStream = new FileStream(_track.trackfile, FileMode.Open, FileAccess.Read);
|
||||
using (BinaryReader br = new BinaryReader(imageStream))
|
||||
using(BinaryReader br = new BinaryReader(imageStream))
|
||||
{
|
||||
br.BaseStream.Seek(_track.offset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip) + _track.pregap * _track.bps), SeekOrigin.Begin);
|
||||
if (sector_offset == 0 && sector_skip == 0)
|
||||
if(sector_offset == 0 && sector_skip == 0)
|
||||
buffer = br.ReadBytes((int)(sector_size * remainingSectors));
|
||||
else
|
||||
{
|
||||
for (ulong i = 0; i < remainingSectors; i++)
|
||||
for(ulong i = 0; i < remainingSectors; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
br.BaseStream.Seek(sector_offset, SeekOrigin.Current);
|
||||
@@ -828,15 +828,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsLong(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
foreach (KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if (sectorAddress >= kvp.Value)
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
if (gdi_track.sequence == kvp.Key)
|
||||
if(gdi_track.sequence == kvp.Key)
|
||||
{
|
||||
if ((sectorAddress - kvp.Value) < gdi_track.sectors)
|
||||
if((sectorAddress - kvp.Value) < gdi_track.sectors)
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
}
|
||||
}
|
||||
@@ -848,7 +848,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsLong(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
if (track == 0)
|
||||
if(track == 0)
|
||||
{
|
||||
if((sectorAddress + length) > densitySeparationSectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
@@ -860,26 +860,26 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
_track.sequence = 0;
|
||||
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
if (gdi_track.sequence == track)
|
||||
if(gdi_track.sequence == track)
|
||||
{
|
||||
_track = gdi_track;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_track.sequence == 0)
|
||||
if(_track.sequence == 0)
|
||||
throw new ArgumentOutOfRangeException("track", "Track does not exist in disc image");
|
||||
|
||||
if ((sectorAddress + length) > _track.sectors)
|
||||
if((sectorAddress + length) > _track.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
uint sector_offset;
|
||||
uint sector_size;
|
||||
uint sector_skip;
|
||||
|
||||
switch (_track.tracktype)
|
||||
switch(_track.tracktype)
|
||||
{
|
||||
case TrackType.Audio:
|
||||
{
|
||||
@@ -890,7 +890,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
case TrackType.CDMode1:
|
||||
{
|
||||
if (_track.bps == 2352)
|
||||
if(_track.bps == 2352)
|
||||
{
|
||||
sector_offset = 0;
|
||||
sector_size = 2352;
|
||||
@@ -912,11 +912,11 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ulong remainingSectors = length;
|
||||
|
||||
if (_track.pregap > 0 && sectorAddress < _track.pregap)
|
||||
if(_track.pregap > 0 && sectorAddress < _track.pregap)
|
||||
{
|
||||
ulong remainingPregap = _track.pregap - sectorAddress;
|
||||
byte[] zero;
|
||||
if (length > remainingPregap)
|
||||
if(length > remainingPregap)
|
||||
{
|
||||
zero = new byte[remainingPregap * sector_size];
|
||||
remainingSectors -= remainingPregap;
|
||||
@@ -934,14 +934,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
return buffer;
|
||||
|
||||
imageStream = new FileStream(_track.trackfile, FileMode.Open, FileAccess.Read);
|
||||
using (BinaryReader br = new BinaryReader(imageStream))
|
||||
using(BinaryReader br = new BinaryReader(imageStream))
|
||||
{
|
||||
br.BaseStream.Seek(_track.offset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip) + _track.pregap * _track.bps), SeekOrigin.Begin);
|
||||
if (sector_offset == 0 && sector_skip == 0)
|
||||
if(sector_offset == 0 && sector_skip == 0)
|
||||
buffer = br.ReadBytes((int)(sector_size * remainingSectors));
|
||||
else
|
||||
{
|
||||
for (ulong i = 0; i < remainingSectors; i++)
|
||||
for(ulong i = 0; i < remainingSectors; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
br.BaseStream.Seek(sector_offset, SeekOrigin.Current);
|
||||
@@ -955,22 +955,22 @@ namespace DiscImageChef.ImagePlugins
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public override string GetImageFormat()
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
return "Dreamcast GDI image";
|
||||
}
|
||||
|
||||
public override string GetImageVersion()
|
||||
public override string GetImageVersion()
|
||||
{
|
||||
return ImageInfo.imageVersion;
|
||||
}
|
||||
|
||||
public override string GetImageApplication()
|
||||
public override string GetImageApplication()
|
||||
{
|
||||
return ImageInfo.imageApplication;
|
||||
}
|
||||
|
||||
public override string GetImageApplicationVersion()
|
||||
public override string GetImageApplicationVersion()
|
||||
{
|
||||
return ImageInfo.imageApplicationVersion;
|
||||
}
|
||||
@@ -985,7 +985,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.imageLastModificationTime;
|
||||
}
|
||||
|
||||
public override string GetImageComments()
|
||||
public override string GetImageComments()
|
||||
{
|
||||
return ImageInfo.imageComments;
|
||||
}
|
||||
@@ -1014,7 +1014,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
List<Track> tracks = new List<Track>();
|
||||
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
Track _track = new Track();
|
||||
|
||||
@@ -1023,7 +1023,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
_track.TrackStartSector = gdi_track.startSector;
|
||||
_track.TrackEndSector = _track.TrackStartSector + gdi_track.sectors - 1;
|
||||
_track.TrackPregap = gdi_track.pregap;
|
||||
if (gdi_track.highDensity)
|
||||
if(gdi_track.highDensity)
|
||||
_track.TrackSession = 2;
|
||||
else
|
||||
_track.TrackSession = 1;
|
||||
@@ -1047,7 +1047,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if (discimage.sessions.Contains(session))
|
||||
if(discimage.sessions.Contains(session))
|
||||
{
|
||||
return GetSessionTracks(session.SessionSequence);
|
||||
}
|
||||
@@ -1071,9 +1071,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
throw new ImageNotSupportedException("Session does not exist in disc image");
|
||||
}
|
||||
|
||||
foreach (GDITrack gdi_track in discimage.tracks)
|
||||
foreach(GDITrack gdi_track in discimage.tracks)
|
||||
{
|
||||
if (gdi_track.highDensity == expectedDensity)
|
||||
if(gdi_track.highDensity == expectedDensity)
|
||||
{
|
||||
Track _track = new Track();
|
||||
|
||||
@@ -1082,7 +1082,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
_track.TrackStartSector = gdi_track.startSector;
|
||||
_track.TrackEndSector = _track.TrackStartSector + gdi_track.sectors - 1;
|
||||
_track.TrackPregap = gdi_track.pregap;
|
||||
if (gdi_track.highDensity)
|
||||
if(gdi_track.highDensity)
|
||||
_track.TrackSession = 2;
|
||||
else
|
||||
_track.TrackSession = 1;
|
||||
@@ -1130,12 +1130,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
Array.Copy(buffer, i * bps, sector, 0, bps);
|
||||
bool? sectorStatus = Checksums.CDChecksums.CheckCDSector(sector);
|
||||
|
||||
switch (sectorStatus)
|
||||
switch(sectorStatus)
|
||||
{
|
||||
case null:
|
||||
UnknownLBAs.Add((ulong)i + sectorAddress);
|
||||
@@ -1146,9 +1146,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
}
|
||||
|
||||
if (UnknownLBAs.Count > 0)
|
||||
if(UnknownLBAs.Count > 0)
|
||||
return null;
|
||||
if (FailingLBAs.Count > 0)
|
||||
if(FailingLBAs.Count > 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -1161,12 +1161,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
Array.Copy(buffer, i * bps, sector, 0, bps);
|
||||
bool? sectorStatus = Checksums.CDChecksums.CheckCDSector(sector);
|
||||
|
||||
switch (sectorStatus)
|
||||
switch(sectorStatus)
|
||||
{
|
||||
case null:
|
||||
UnknownLBAs.Add((ulong)i + sectorAddress);
|
||||
@@ -1177,9 +1177,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
}
|
||||
|
||||
if (UnknownLBAs.Count > 0)
|
||||
if(UnknownLBAs.Count > 0)
|
||||
return null;
|
||||
if (FailingLBAs.Count > 0)
|
||||
if(FailingLBAs.Count > 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -1193,12 +1193,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
#region Unsupported features
|
||||
|
||||
public override int GetMediaSequence()
|
||||
public override int GetMediaSequence()
|
||||
{
|
||||
return ImageInfo.mediaSequence;
|
||||
}
|
||||
|
||||
public override int GetLastDiskSequence()
|
||||
public override int GetLastDiskSequence()
|
||||
{
|
||||
return ImageInfo.lastMediaSequence;
|
||||
}
|
||||
@@ -1233,12 +1233,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.mediaModel;
|
||||
}
|
||||
|
||||
public override string GetImageName()
|
||||
public override string GetImageName()
|
||||
{
|
||||
return ImageInfo.imageName;
|
||||
}
|
||||
|
||||
public override string GetImageCreator()
|
||||
public override string GetImageCreator()
|
||||
{
|
||||
return ImageInfo.imageCreator;
|
||||
}
|
||||
|
||||
@@ -215,31 +215,31 @@ namespace DiscImageChef.ImagePlugins
|
||||
/// Gets the image format.
|
||||
/// </summary>
|
||||
/// <returns>The image format.</returns>
|
||||
public abstract string GetImageFormat();
|
||||
public abstract string GetImageFormat();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the image version.
|
||||
/// </summary>
|
||||
/// <returns>The image version.</returns>
|
||||
public abstract string GetImageVersion();
|
||||
public abstract string GetImageVersion();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the application that created the image.
|
||||
/// </summary>
|
||||
/// <returns>The application that created the image.</returns>
|
||||
public abstract string GetImageApplication();
|
||||
public abstract string GetImageApplication();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the version of the application that created the image.
|
||||
/// </summary>
|
||||
/// <returns>The version of the application that created the image.</returns>
|
||||
public abstract string GetImageApplicationVersion();
|
||||
public abstract string GetImageApplicationVersion();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the image creator.
|
||||
/// </summary>
|
||||
/// <returns>Who created the image.</returns>
|
||||
public abstract string GetImageCreator();
|
||||
public abstract string GetImageCreator();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the image creation time.
|
||||
@@ -257,13 +257,13 @@ namespace DiscImageChef.ImagePlugins
|
||||
/// Gets the name of the image.
|
||||
/// </summary>
|
||||
/// <returns>The image name.</returns>
|
||||
public abstract string GetImageName();
|
||||
public abstract string GetImageName();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the image comments.
|
||||
/// </summary>
|
||||
/// <returns>The image comments.</returns>
|
||||
public abstract string GetImageComments();
|
||||
public abstract string GetImageComments();
|
||||
|
||||
// Functions to get information from disk represented by image
|
||||
|
||||
@@ -271,31 +271,31 @@ namespace DiscImageChef.ImagePlugins
|
||||
/// Gets the media manufacturer.
|
||||
/// </summary>
|
||||
/// <returns>The media manufacturer.</returns>
|
||||
public abstract string GetMediaManufacturer();
|
||||
public abstract string GetMediaManufacturer();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the media model.
|
||||
/// </summary>
|
||||
/// <returns>The media model.</returns>
|
||||
public abstract string GetMediaModel();
|
||||
public abstract string GetMediaModel();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the media serial number.
|
||||
/// </summary>
|
||||
/// <returns>The media serial number.</returns>
|
||||
public abstract string GetMediaSerialNumber();
|
||||
public abstract string GetMediaSerialNumber();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the media (or product) barcode.
|
||||
/// </summary>
|
||||
/// <returns>The media barcode.</returns>
|
||||
public abstract string GetMediaBarcode();
|
||||
public abstract string GetMediaBarcode();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the media part number.
|
||||
/// </summary>
|
||||
/// <returns>The media part number.</returns>
|
||||
public abstract string GetMediaPartNumber();
|
||||
public abstract string GetMediaPartNumber();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the type of the media.
|
||||
@@ -307,13 +307,13 @@ namespace DiscImageChef.ImagePlugins
|
||||
/// Gets the media sequence.
|
||||
/// </summary>
|
||||
/// <returns>The media sequence, starting at 1.</returns>
|
||||
public abstract int GetMediaSequence();
|
||||
public abstract int GetMediaSequence();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the last media in the sequence.
|
||||
/// </summary>
|
||||
/// <returns>The last media in the sequence.</returns>
|
||||
public abstract int GetLastDiskSequence();
|
||||
public abstract int GetLastDiskSequence();
|
||||
|
||||
// Functions to get information from drive used to create image
|
||||
|
||||
@@ -727,7 +727,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
protected FeatureSupportedButNotImplementedImageException(System.Runtime.Serialization.SerializationInfo info,
|
||||
System.Runtime.Serialization.StreamingContext context)
|
||||
{
|
||||
if (info == null)
|
||||
if(info == null)
|
||||
throw new ArgumentNullException("info");
|
||||
}
|
||||
}
|
||||
@@ -763,7 +763,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
protected FeatureUnsupportedImageException(System.Runtime.Serialization.SerializationInfo info,
|
||||
System.Runtime.Serialization.StreamingContext context)
|
||||
{
|
||||
if (info == null)
|
||||
if(info == null)
|
||||
throw new ArgumentNullException("info");
|
||||
}
|
||||
}
|
||||
@@ -799,7 +799,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
protected FeatureNotPresentImageException(System.Runtime.Serialization.SerializationInfo info,
|
||||
System.Runtime.Serialization.StreamingContext context)
|
||||
{
|
||||
if (info == null)
|
||||
if(info == null)
|
||||
throw new ArgumentNullException("info");
|
||||
}
|
||||
}
|
||||
@@ -835,7 +835,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
protected FeaturedNotSupportedByDiscImageException(System.Runtime.Serialization.SerializationInfo info,
|
||||
System.Runtime.Serialization.StreamingContext context)
|
||||
{
|
||||
if (info == null)
|
||||
if(info == null)
|
||||
throw new ArgumentNullException("info");
|
||||
}
|
||||
}
|
||||
@@ -871,7 +871,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
protected ImageNotSupportedException(System.Runtime.Serialization.SerializationInfo info,
|
||||
System.Runtime.Serialization.StreamingContext context)
|
||||
{
|
||||
if (info == null)
|
||||
if(info == null)
|
||||
throw new ArgumentNullException("info");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -908,12 +908,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("Nero plugin", "footerV2.ChunkID = 0x{0:X2} (\"{1}\")", footerV2.ChunkID, System.Text.Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV2.ChunkID)));
|
||||
DicConsole.DebugWriteLine("Nero plugin", "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset);
|
||||
|
||||
if (footerV2.ChunkID == NeroV2FooterID && footerV2.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
if(footerV2.ChunkID == NeroV2FooterID && footerV2.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
{
|
||||
imageStream.Close();
|
||||
return true;
|
||||
}
|
||||
if (footerV1.ChunkID == NeroV1FooterID && footerV1.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
if(footerV1.ChunkID == NeroV1FooterID && footerV1.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
{
|
||||
imageStream.Close();
|
||||
return true;
|
||||
@@ -953,9 +953,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("Nero plugin", "footerV2.ChunkID = 0x{0:X2} (\"{1}\")", footerV2.ChunkID, System.Text.Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV2.ChunkID)));
|
||||
DicConsole.DebugWriteLine("Nero plugin", "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset);
|
||||
|
||||
if (footerV1.ChunkID == NeroV1FooterID && footerV1.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
if(footerV1.ChunkID == NeroV1FooterID && footerV1.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
imageNewFormat = false;
|
||||
else if (footerV2.ChunkID == NeroV2FooterID && footerV2.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
else if(footerV2.ChunkID == NeroV2FooterID && footerV2.FirstChunkOffset < (ulong)imageInfo.Length)
|
||||
imageNewFormat = true;
|
||||
else
|
||||
{
|
||||
@@ -963,7 +963,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return true;
|
||||
}
|
||||
|
||||
if (imageNewFormat)
|
||||
if(imageNewFormat)
|
||||
imageStream.Seek((long)footerV2.FirstChunkOffset, SeekOrigin.Begin);
|
||||
else
|
||||
imageStream.Seek(footerV1.FirstChunkOffset, SeekOrigin.Begin);
|
||||
@@ -979,7 +979,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.sectors = 0;
|
||||
ImageInfo.sectorSize = 0;
|
||||
|
||||
while (parsing)
|
||||
while(parsing)
|
||||
{
|
||||
byte[] ChunkHeaderBuffer = new byte[8];
|
||||
UInt32 ChunkID;
|
||||
@@ -992,7 +992,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("Nero plugin", "ChunkID = 0x{0:X2} (\"{1}\")", ChunkID, System.Text.Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(ChunkID)));
|
||||
DicConsole.DebugWriteLine("Nero plugin", "ChunkLength = {0}", ChunkLength);
|
||||
|
||||
switch (ChunkID)
|
||||
switch(ChunkID)
|
||||
{
|
||||
case NeroV1CUEID:
|
||||
{
|
||||
@@ -1004,7 +1004,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
neroCuesheetV1.Entries = new List<NeroV1CueEntry>();
|
||||
|
||||
byte[] tmpbuffer = new byte[8];
|
||||
for (int i = 0; i < neroCuesheetV1.ChunkSize; i += 8)
|
||||
for(int i = 0; i < neroCuesheetV1.ChunkSize; i += 8)
|
||||
{
|
||||
NeroV1CueEntry _entry = new NeroV1CueEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 8);
|
||||
@@ -1040,7 +1040,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
neroCuesheetV2.Entries = new List<NeroV2CueEntry>();
|
||||
|
||||
byte[] tmpbuffer = new byte[8];
|
||||
for (int i = 0; i < neroCuesheetV2.ChunkSize; i += 8)
|
||||
for(int i = 0; i < neroCuesheetV2.ChunkSize; i += 8)
|
||||
{
|
||||
NeroV2CueEntry _entry = new NeroV2CueEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 8);
|
||||
@@ -1080,10 +1080,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
neroDAOV1.LastTrack = tmpbuffer[21];
|
||||
neroDAOV1.Tracks = new List<NeroV1DAOEntry>();
|
||||
|
||||
if (!ImageInfo.readableMediaTags.Contains(MediaTagType.CD_MCN))
|
||||
if(!ImageInfo.readableMediaTags.Contains(MediaTagType.CD_MCN))
|
||||
ImageInfo.readableMediaTags.Add(MediaTagType.CD_MCN);
|
||||
|
||||
if (!ImageInfo.readableSectorTags.Contains(SectorTagType.CDTrackISRC))
|
||||
if(!ImageInfo.readableSectorTags.Contains(SectorTagType.CDTrackISRC))
|
||||
ImageInfo.readableSectorTags.Add(SectorTagType.CDTrackISRC);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "neroDAOV1.ChunkSizeLe = {0} bytes", neroDAOV1.ChunkSizeLe);
|
||||
@@ -1095,7 +1095,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
UPC = neroDAOV1.UPC;
|
||||
|
||||
tmpbuffer = new byte[30];
|
||||
for (int i = 0; i < (neroDAOV1.ChunkSizeBe - 22); i += 30)
|
||||
for(int i = 0; i < (neroDAOV1.ChunkSizeBe - 22); i += 30)
|
||||
{
|
||||
NeroV1DAOEntry _entry = new NeroV1DAOEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 30);
|
||||
@@ -1119,7 +1119,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
neroDAOV1.Tracks.Add(_entry);
|
||||
|
||||
if (_entry.SectorSize > ImageInfo.sectorSize)
|
||||
if(_entry.SectorSize > ImageInfo.sectorSize)
|
||||
ImageInfo.sectorSize = _entry.SectorSize;
|
||||
|
||||
TrackISRCs.Add(currenttrack, _entry.ISRC);
|
||||
@@ -1163,10 +1163,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
neroDAOV2.LastTrack = tmpbuffer[21];
|
||||
neroDAOV2.Tracks = new List<NeroV2DAOEntry>();
|
||||
|
||||
if (!ImageInfo.readableMediaTags.Contains(MediaTagType.CD_MCN))
|
||||
if(!ImageInfo.readableMediaTags.Contains(MediaTagType.CD_MCN))
|
||||
ImageInfo.readableMediaTags.Add(MediaTagType.CD_MCN);
|
||||
|
||||
if (!ImageInfo.readableSectorTags.Contains(SectorTagType.CDTrackISRC))
|
||||
if(!ImageInfo.readableSectorTags.Contains(SectorTagType.CDTrackISRC))
|
||||
ImageInfo.readableSectorTags.Add(SectorTagType.CDTrackISRC);
|
||||
|
||||
UPC = neroDAOV2.UPC;
|
||||
@@ -1178,7 +1178,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("Nero plugin", "neroDAOV2.LastTrack = {0}", neroDAOV2.LastTrack);
|
||||
|
||||
tmpbuffer = new byte[42];
|
||||
for (int i = 0; i < (neroDAOV2.ChunkSizeBe - 22); i += 42)
|
||||
for(int i = 0; i < (neroDAOV2.ChunkSizeBe - 22); i += 42)
|
||||
{
|
||||
NeroV2DAOEntry _entry = new NeroV2DAOEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 42);
|
||||
@@ -1202,7 +1202,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
neroDAOV2.Tracks.Add(_entry);
|
||||
|
||||
if (_entry.SectorSize > ImageInfo.sectorSize)
|
||||
if(_entry.SectorSize > ImageInfo.sectorSize)
|
||||
ImageInfo.sectorSize = _entry.SectorSize;
|
||||
|
||||
TrackISRCs.Add(currenttrack, _entry.ISRC);
|
||||
@@ -1238,7 +1238,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
neroCDTXT.Packs = new List<NeroCDTextPack>();
|
||||
|
||||
byte[] tmpbuffer = new byte[18];
|
||||
for (int i = 0; i < (neroCDTXT.ChunkSize); i += 18)
|
||||
for(int i = 0; i < (neroCDTXT.ChunkSize); i += 18)
|
||||
{
|
||||
NeroCDTextPack _entry = new NeroCDTextPack();
|
||||
imageStream.Read(tmpbuffer, 0, 18);
|
||||
@@ -1274,7 +1274,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
neroTAOV1.Tracks = new List<NeroV1TAOEntry>();
|
||||
|
||||
byte[] tmpbuffer = new byte[20];
|
||||
for (int i = 0; i < (neroTAOV1.ChunkSize); i += 20)
|
||||
for(int i = 0; i < (neroTAOV1.ChunkSize); i += 20)
|
||||
{
|
||||
NeroV1TAOEntry _entry = new NeroV1TAOEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 20);
|
||||
@@ -1294,7 +1294,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
neroTAOV1.Tracks.Add(_entry);
|
||||
|
||||
if (NeroTrackModeToBytesPerSector((DAOMode)_entry.Mode) > ImageInfo.sectorSize)
|
||||
if(NeroTrackModeToBytesPerSector((DAOMode)_entry.Mode) > ImageInfo.sectorSize)
|
||||
ImageInfo.sectorSize = NeroTrackModeToBytesPerSector((DAOMode)_entry.Mode);
|
||||
|
||||
NeroTrack _neroTrack = new NeroTrack();
|
||||
@@ -1328,7 +1328,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
neroTAOV2.Tracks = new List<NeroV2TAOEntry>();
|
||||
|
||||
byte[] tmpbuffer = new byte[32];
|
||||
for (int i = 0; i < (neroTAOV2.ChunkSize); i += 32)
|
||||
for(int i = 0; i < (neroTAOV2.ChunkSize); i += 32)
|
||||
{
|
||||
NeroV2TAOEntry _entry = new NeroV2TAOEntry();
|
||||
imageStream.Read(tmpbuffer, 0, 32);
|
||||
@@ -1350,7 +1350,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
neroTAOV2.Tracks.Add(_entry);
|
||||
|
||||
if (NeroTrackModeToBytesPerSector((DAOMode)_entry.Mode) > ImageInfo.sectorSize)
|
||||
if(NeroTrackModeToBytesPerSector((DAOMode)_entry.Mode) > ImageInfo.sectorSize)
|
||||
ImageInfo.sectorSize = NeroTrackModeToBytesPerSector((DAOMode)_entry.Mode);
|
||||
|
||||
NeroTrack _neroTrack = new NeroTrack();
|
||||
@@ -1485,7 +1485,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.driveSerialNumber = null;
|
||||
ImageInfo.mediaSequence = 0;
|
||||
ImageInfo.lastMediaSequence = 0;
|
||||
if (imageNewFormat)
|
||||
if(imageNewFormat)
|
||||
{
|
||||
ImageInfo.imageSize = footerV2.FirstChunkOffset;
|
||||
ImageInfo.imageVersion = "Nero Burning ROM >= 5.5";
|
||||
@@ -1500,7 +1500,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.imageApplicationVersion = "<= 5.0";
|
||||
}
|
||||
|
||||
if (neroSessions.Count == 0)
|
||||
if(neroSessions.Count == 0)
|
||||
neroSessions.Add(1, currenttrack);
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "Building offset, track and session maps");
|
||||
@@ -1511,10 +1511,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
uint currentsessioncurrenttrack = 1;
|
||||
Session currentsessionstruct = new Session();
|
||||
ulong PartitionSequence = 0;
|
||||
for (uint i = 1; i <= neroTracks.Count; i++)
|
||||
for(uint i = 1; i <= neroTracks.Count; i++)
|
||||
{
|
||||
NeroTrack _neroTrack;
|
||||
if (neroTracks.TryGetValue(i, out _neroTrack))
|
||||
if(neroTracks.TryGetValue(i, out _neroTrack))
|
||||
{
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\tcurrentsession = {0}", currentsession);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\tcurrentsessionmaxtrack = {0}", currentsessionmaxtrack);
|
||||
@@ -1522,7 +1522,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
Track _track = new Track();
|
||||
_track.Indexes = new Dictionary<int, ulong>();
|
||||
if (_neroTrack.Index0 < _neroTrack.Index1)
|
||||
if(_neroTrack.Index0 < _neroTrack.Index1)
|
||||
_track.Indexes.Add(0, _neroTrack.Index0 / _neroTrack.SectorSize);
|
||||
_track.Indexes.Add(1, _neroTrack.Index1 / _neroTrack.SectorSize);
|
||||
_track.TrackDescription = StringHandlers.CToString(_neroTrack.ISRC);
|
||||
@@ -1591,7 +1591,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackStartSector = {0}", _track.TrackStartSector);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackType = {0}", _track.TrackType);
|
||||
|
||||
if (currentsessioncurrenttrack == 1)
|
||||
if(currentsessioncurrenttrack == 1)
|
||||
{
|
||||
currentsessionstruct = new Session();
|
||||
currentsessionstruct.SessionSequence = currentsession;
|
||||
@@ -1599,7 +1599,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
currentsessionstruct.StartTrack = _track.TrackSequence;
|
||||
}
|
||||
currentsessioncurrenttrack++;
|
||||
if (currentsessioncurrenttrack > currentsessionmaxtrack)
|
||||
if(currentsessioncurrenttrack > currentsessionmaxtrack)
|
||||
{
|
||||
currentsession++;
|
||||
neroSessions.TryGetValue(currentsession, out currentsessionmaxtrack);
|
||||
@@ -1611,10 +1611,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
offsetmap.Add(_track.TrackSequence, _track.TrackStartSector);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t\t Offset[{0}]: {1}", _track.TrackSequence, _track.TrackStartSector);
|
||||
|
||||
|
||||
CommonTypes.Partition partition;
|
||||
|
||||
if (_neroTrack.Index0 < _neroTrack.Index1)
|
||||
if(_neroTrack.Index0 < _neroTrack.Index1)
|
||||
{
|
||||
partition = new CommonTypes.Partition();
|
||||
partition.PartitionDescription = String.Format("Track {0} Index 0", _track.TrackSequence);
|
||||
@@ -1679,7 +1679,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadDiskTag(MediaTagType tag)
|
||||
{
|
||||
switch (tag)
|
||||
switch(tag)
|
||||
{
|
||||
case MediaTagType.CD_MCN:
|
||||
return UPC;
|
||||
@@ -1712,15 +1712,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
foreach (KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if (sectorAddress >= kvp.Value)
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach (Track _track in imageTracks)
|
||||
foreach(Track _track in imageTracks)
|
||||
{
|
||||
if (_track.TrackSequence == kvp.Key)
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if ((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
if((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
return ReadSectors((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
}
|
||||
}
|
||||
@@ -1732,15 +1732,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsTag(UInt64 sectorAddress, UInt32 length, SectorTagType tag)
|
||||
{
|
||||
foreach (KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if (sectorAddress >= kvp.Value)
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach (Track _track in imageTracks)
|
||||
foreach(Track _track in imageTracks)
|
||||
{
|
||||
if (_track.TrackSequence == kvp.Key)
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if ((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
if((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
return ReadSectorsTag((sectorAddress - kvp.Value), length, kvp.Key, tag);
|
||||
}
|
||||
}
|
||||
@@ -1754,17 +1754,17 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
NeroTrack _track;
|
||||
|
||||
if (!neroTracks.TryGetValue(track, out _track))
|
||||
if(!neroTracks.TryGetValue(track, out _track))
|
||||
throw new ArgumentOutOfRangeException("track", "Track not found");
|
||||
|
||||
if (length > _track.Sectors)
|
||||
if(length > _track.Sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
uint sector_offset;
|
||||
uint sector_size;
|
||||
uint sector_skip;
|
||||
|
||||
switch ((DAOMode)_track.Mode)
|
||||
switch((DAOMode)_track.Mode)
|
||||
{
|
||||
case DAOMode.Data:
|
||||
case DAOMode.DataM2F1:
|
||||
@@ -1802,7 +1802,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
sector_skip = 4;
|
||||
break;
|
||||
}
|
||||
// TODO: Supposing Nero suffixes the subchannel to the channel
|
||||
// TODO: Supposing Nero suffixes the subchannel to the channel
|
||||
case DAOMode.DataRawSub:
|
||||
{
|
||||
sector_offset = 16;
|
||||
@@ -1831,14 +1831,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
byte[] buffer = new byte[sector_size * length];
|
||||
|
||||
imageStream = new FileStream(_imagePath, FileMode.Open, FileAccess.Read);
|
||||
using (BinaryReader br = new BinaryReader(imageStream))
|
||||
using(BinaryReader br = new BinaryReader(imageStream))
|
||||
{
|
||||
br.BaseStream.Seek((long)_track.Offset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip)), SeekOrigin.Begin);
|
||||
if (sector_offset == 0 && sector_skip == 0)
|
||||
if(sector_offset == 0 && sector_skip == 0)
|
||||
buffer = br.ReadBytes((int)(sector_size * length));
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < length; i++)
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
br.BaseStream.Seek(sector_offset, SeekOrigin.Current);
|
||||
@@ -1857,17 +1857,17 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
NeroTrack _track;
|
||||
|
||||
if (!neroTracks.TryGetValue(track, out _track))
|
||||
if(!neroTracks.TryGetValue(track, out _track))
|
||||
throw new ArgumentOutOfRangeException("track", "Track not found");
|
||||
|
||||
if (length > _track.Sectors)
|
||||
if(length > _track.Sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
uint sector_offset;
|
||||
uint sector_size;
|
||||
uint sector_skip;
|
||||
|
||||
switch (tag)
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CDSectorECC:
|
||||
case SectorTagType.CDSectorECC_P:
|
||||
@@ -1883,7 +1883,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
byte[] flags = new byte[1];
|
||||
flags[0] = 0x00;
|
||||
|
||||
if ((DAOMode)_track.Mode != DAOMode.Audio && (DAOMode)_track.Mode != DAOMode.AudioSub)
|
||||
if((DAOMode)_track.Mode != DAOMode.Audio && (DAOMode)_track.Mode != DAOMode.AudioSub)
|
||||
flags[0] += 0x40;
|
||||
|
||||
return flags;
|
||||
@@ -1896,14 +1896,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
throw new ArgumentException("Unsupported tag requested", "tag");
|
||||
}
|
||||
|
||||
switch ((DAOMode)_track.Mode)
|
||||
switch((DAOMode)_track.Mode)
|
||||
{
|
||||
case DAOMode.Data:
|
||||
case DAOMode.DataM2F1:
|
||||
throw new ArgumentException("No tags in image for requested track", "tag");
|
||||
case DAOMode.DataM2F2:
|
||||
{
|
||||
switch (tag)
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CDSectorSync:
|
||||
case SectorTagType.CDSectorHeader:
|
||||
@@ -1935,7 +1935,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
throw new ArgumentException("There are no tags on audio tracks", "tag");
|
||||
case DAOMode.DataRaw:
|
||||
{
|
||||
switch (tag)
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CDSectorSync:
|
||||
{
|
||||
@@ -1987,12 +1987,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
break;
|
||||
}
|
||||
// TODO
|
||||
// TODO
|
||||
case DAOMode.DataM2RawSub:
|
||||
throw new FeatureSupportedButNotImplementedImageException("Feature not yet implemented");
|
||||
case DAOMode.DataRawSub:
|
||||
{
|
||||
switch (tag)
|
||||
switch(tag)
|
||||
{
|
||||
case SectorTagType.CDSectorSync:
|
||||
{
|
||||
@@ -2052,7 +2052,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
case DAOMode.AudioSub:
|
||||
{
|
||||
if (tag != SectorTagType.CDSectorSubchannel)
|
||||
if(tag != SectorTagType.CDSectorSubchannel)
|
||||
throw new ArgumentException("Unsupported tag requested for this track", "tag");
|
||||
|
||||
sector_offset = 2352;
|
||||
@@ -2067,14 +2067,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
byte[] buffer = new byte[sector_size * length];
|
||||
|
||||
imageStream = new FileStream(_imagePath, FileMode.Open, FileAccess.Read);
|
||||
using (BinaryReader br = new BinaryReader(imageStream))
|
||||
using(BinaryReader br = new BinaryReader(imageStream))
|
||||
{
|
||||
br.BaseStream.Seek((long)_track.Offset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip)), SeekOrigin.Begin);
|
||||
if (sector_offset == 0 && sector_skip == 0)
|
||||
if(sector_offset == 0 && sector_skip == 0)
|
||||
buffer = br.ReadBytes((int)(sector_size * length));
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < length; i++)
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
br.BaseStream.Seek(sector_offset, SeekOrigin.Current);
|
||||
@@ -2101,15 +2101,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsLong(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
foreach (KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
foreach(KeyValuePair<uint, ulong> kvp in offsetmap)
|
||||
{
|
||||
if (sectorAddress >= kvp.Value)
|
||||
if(sectorAddress >= kvp.Value)
|
||||
{
|
||||
foreach (Track _track in imageTracks)
|
||||
foreach(Track _track in imageTracks)
|
||||
{
|
||||
if (_track.TrackSequence == kvp.Key)
|
||||
if(_track.TrackSequence == kvp.Key)
|
||||
{
|
||||
if ((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
if((sectorAddress - kvp.Value) < (_track.TrackEndSector - _track.TrackStartSector))
|
||||
return ReadSectorsLong((sectorAddress - kvp.Value), length, kvp.Key);
|
||||
}
|
||||
}
|
||||
@@ -2123,17 +2123,17 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
NeroTrack _track;
|
||||
|
||||
if (!neroTracks.TryGetValue(track, out _track))
|
||||
if(!neroTracks.TryGetValue(track, out _track))
|
||||
throw new ArgumentOutOfRangeException("track", "Track not found");
|
||||
|
||||
if (length > _track.Sectors)
|
||||
if(length > _track.Sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than present in track, won't cross tracks");
|
||||
|
||||
uint sector_offset;
|
||||
uint sector_size;
|
||||
uint sector_skip;
|
||||
|
||||
switch ((DAOMode)_track.Mode)
|
||||
switch((DAOMode)_track.Mode)
|
||||
{
|
||||
case DAOMode.Data:
|
||||
case DAOMode.DataM2F1:
|
||||
@@ -2179,11 +2179,11 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
br.BaseStream.Seek((long)_track.Offset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip)), SeekOrigin.Begin);
|
||||
|
||||
if (sector_offset == 0 && sector_skip == 0)
|
||||
if(sector_offset == 0 && sector_skip == 0)
|
||||
buffer = br.ReadBytes((int)(sector_size * length));
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < length; i++)
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
byte[] sector;
|
||||
br.BaseStream.Seek(sector_offset, SeekOrigin.Current);
|
||||
@@ -2256,8 +2256,8 @@ namespace DiscImageChef.ImagePlugins
|
||||
public override List<Track> GetSessionTracks(UInt16 session)
|
||||
{
|
||||
List<Track> sessionTracks = new List<Track>();
|
||||
foreach (Track _track in imageTracks)
|
||||
if (_track.TrackSession == session)
|
||||
foreach(Track _track in imageTracks)
|
||||
if(_track.TrackSession == session)
|
||||
sessionTracks.Add(_track);
|
||||
|
||||
return sessionTracks;
|
||||
@@ -2288,12 +2288,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
Array.Copy(buffer, i * bps, sector, 0, bps);
|
||||
bool? sectorStatus = Checksums.CDChecksums.CheckCDSector(sector);
|
||||
|
||||
switch (sectorStatus)
|
||||
switch(sectorStatus)
|
||||
{
|
||||
case null:
|
||||
UnknownLBAs.Add((ulong)i + sectorAddress);
|
||||
@@ -2304,9 +2304,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
}
|
||||
|
||||
if (UnknownLBAs.Count > 0)
|
||||
if(UnknownLBAs.Count > 0)
|
||||
return null;
|
||||
if (FailingLBAs.Count > 0)
|
||||
if(FailingLBAs.Count > 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -2319,12 +2319,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
for(int i = 0; i < length; i++)
|
||||
{
|
||||
Array.Copy(buffer, i * bps, sector, 0, bps);
|
||||
bool? sectorStatus = Checksums.CDChecksums.CheckCDSector(sector);
|
||||
|
||||
switch (sectorStatus)
|
||||
switch(sectorStatus)
|
||||
{
|
||||
case null:
|
||||
UnknownLBAs.Add((ulong)i + sectorAddress);
|
||||
@@ -2335,9 +2335,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
}
|
||||
|
||||
if (UnknownLBAs.Count > 0)
|
||||
if(UnknownLBAs.Count > 0)
|
||||
return null;
|
||||
if (FailingLBAs.Count > 0)
|
||||
if(FailingLBAs.Count > 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -2353,7 +2353,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
static MediaType NeroMediaTypeToMediaType(NeroMediaTypes type)
|
||||
{
|
||||
switch (type)
|
||||
switch(type)
|
||||
{
|
||||
case NeroMediaTypes.NERO_MTYP_DDCD:
|
||||
return MediaType.DDCD;
|
||||
@@ -2406,7 +2406,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
static TrackType NeroTrackModeToTrackType(DAOMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
switch(mode)
|
||||
{
|
||||
case DAOMode.Data:
|
||||
case DAOMode.DataRaw:
|
||||
@@ -2429,7 +2429,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
static UInt16 NeroTrackModeToBytesPerSector(DAOMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
switch(mode)
|
||||
{
|
||||
case DAOMode.Data:
|
||||
case DAOMode.DataM2F1:
|
||||
|
||||
@@ -242,7 +242,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
header.signature = BitConverter.ToUInt16(headerBytes, 0);
|
||||
|
||||
if (header.signature != tdMagic && header.signature != tdAdvCompMagic)
|
||||
if(header.signature != tdMagic && header.signature != tdAdvCompMagic)
|
||||
return false;
|
||||
|
||||
header.sequence = headerBytes[2];
|
||||
@@ -275,16 +275,16 @@ namespace DiscImageChef.ImagePlugins
|
||||
// This may deny legal images
|
||||
|
||||
// That would be much of a coincidence
|
||||
if (header.crc == calculatedHeaderCRC)
|
||||
if(header.crc == calculatedHeaderCRC)
|
||||
return true;
|
||||
|
||||
if (header.sequence != 0x00)
|
||||
if(header.sequence != 0x00)
|
||||
return false;
|
||||
|
||||
if (header.dataRate != DataRate250kbps && header.dataRate != DataRate300kbps && header.dataRate != DataRate500kbps)
|
||||
if(header.dataRate != DataRate250kbps && header.dataRate != DataRate300kbps && header.dataRate != DataRate500kbps)
|
||||
return false;
|
||||
|
||||
if (header.driveType != DriveType35DD && header.driveType != DriveType35ED && header.driveType != DriveType35HD && header.driveType != DriveType525DD &&
|
||||
if(header.driveType != DriveType35DD && header.driveType != DriveType35ED && header.driveType != DriveType35HD && header.driveType != DriveType525DD &&
|
||||
header.driveType != DriveType525HD && header.driveType != DriveType525HD_DDDisk && header.driveType != DriveType8inch)
|
||||
return false;
|
||||
|
||||
@@ -296,14 +296,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
header = new TD0Header();
|
||||
byte[] headerBytes = new byte[12];
|
||||
FileStream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
|
||||
|
||||
|
||||
stream.Read(headerBytes, 0, 12);
|
||||
|
||||
|
||||
header.signature = BitConverter.ToUInt16(headerBytes, 0);
|
||||
|
||||
if (header.signature != tdMagic && header.signature != tdAdvCompMagic)
|
||||
|
||||
if(header.signature != tdMagic && header.signature != tdAdvCompMagic)
|
||||
return false;
|
||||
|
||||
|
||||
header.sequence = headerBytes[2];
|
||||
header.diskSet = headerBytes[3];
|
||||
header.version = headerBytes[4];
|
||||
@@ -321,7 +321,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
byte[] headerBytesForCRC = new byte[10];
|
||||
Array.Copy(headerBytes, headerBytesForCRC, 10);
|
||||
UInt16 calculatedHeaderCRC = TeleDiskCRC(0x0000, headerBytesForCRC);
|
||||
|
||||
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "header.signature = 0x{0:X4}", header.signature);
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "header.sequence = 0x{0:X2}", header.sequence);
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "header.diskSet = 0x{0:X2}", header.diskSet);
|
||||
@@ -336,30 +336,30 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
// We need more checks as the magic is too simply.
|
||||
// This may deny legal images
|
||||
|
||||
|
||||
// That would be much of a coincidence
|
||||
if (header.crc != calculatedHeaderCRC)
|
||||
if(header.crc != calculatedHeaderCRC)
|
||||
{
|
||||
ADiskCRCHasFailed = true;
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "Calculated CRC does not coincide with stored one.");
|
||||
}
|
||||
|
||||
if (header.sequence != 0x00)
|
||||
if(header.sequence != 0x00)
|
||||
return false;
|
||||
|
||||
if (header.dataRate != DataRate250kbps && header.dataRate != DataRate300kbps && header.dataRate != DataRate500kbps)
|
||||
|
||||
if(header.dataRate != DataRate250kbps && header.dataRate != DataRate300kbps && header.dataRate != DataRate500kbps)
|
||||
return false;
|
||||
|
||||
if (header.driveType != DriveType35DD && header.driveType != DriveType35ED && header.driveType != DriveType35HD && header.driveType != DriveType525DD &&
|
||||
|
||||
if(header.driveType != DriveType35DD && header.driveType != DriveType35ED && header.driveType != DriveType35HD && header.driveType != DriveType525DD &&
|
||||
header.driveType != DriveType525HD && header.driveType != DriveType525HD_DDDisk && header.driveType != DriveType8inch)
|
||||
return false;
|
||||
|
||||
if (header.signature == tdAdvCompMagic)
|
||||
if(header.signature == tdAdvCompMagic)
|
||||
throw new NotImplementedException("TeleDisk Advanced Compression support not yet implemented");
|
||||
|
||||
ImageInfo.imageCreationTime = DateTime.MinValue;
|
||||
|
||||
if ((header.stepping & CommentBlockPresent) == CommentBlockPresent)
|
||||
if((header.stepping & CommentBlockPresent) == CommentBlockPresent)
|
||||
{
|
||||
commentHeader = new TDCommentBlockHeader();
|
||||
|
||||
@@ -398,10 +398,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ADiskCRCHasFailed |= cmtcrc != commentHeader.crc;
|
||||
|
||||
for (int i = 0; i < commentBlock.Length; i++)
|
||||
for(int i = 0; i < commentBlock.Length; i++)
|
||||
{
|
||||
// Replace NULLs, used by TeleDisk as newline markers, with UNIX newline marker
|
||||
if (commentBlock[i] == 0x00)
|
||||
if(commentBlock[i] == 0x00)
|
||||
commentBlock[i] = 0x0A;
|
||||
}
|
||||
|
||||
@@ -415,7 +415,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
|
||||
FileInfo fi = new FileInfo(imagePath);
|
||||
if (ImageInfo.imageCreationTime == DateTime.MinValue)
|
||||
if(ImageInfo.imageCreationTime == DateTime.MinValue)
|
||||
ImageInfo.imageCreationTime = fi.CreationTimeUtc;
|
||||
ImageInfo.imageLastModificationTime = fi.LastWriteTimeUtc;
|
||||
|
||||
@@ -429,7 +429,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.imageSize = 0;
|
||||
sectorsData = new Dictionary<uint, byte[]>();
|
||||
ImageInfo.sectorSize = 0;
|
||||
while (true)
|
||||
while(true)
|
||||
{
|
||||
TDTrackHeader TDTrack = new TDTrackHeader();
|
||||
byte[] TDTrackForCRC = new byte[3];
|
||||
@@ -454,7 +454,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ADiskCRCHasFailed |= TDTrackCalculatedCRC != TDTrack.crc;
|
||||
|
||||
if (TDTrack.sectors == 0xFF) // End of disk image
|
||||
if(TDTrack.sectors == 0xFF) // End of disk image
|
||||
{
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "End of disk image arrived");
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "Total of {0} data sectors, for {1} bytes", sectorsData.Count, totalDiskSize);
|
||||
@@ -462,14 +462,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
break;
|
||||
}
|
||||
|
||||
if (spt != TDTrack.sectors && TDTrack.sectors > 0)
|
||||
if(spt != TDTrack.sectors && TDTrack.sectors > 0)
|
||||
{
|
||||
if (spt != 0)
|
||||
if(spt != 0)
|
||||
throw new FeatureUnsupportedImageException("Variable number of sectors per track. This kind of image is not yet supported");
|
||||
spt = TDTrack.sectors;
|
||||
}
|
||||
|
||||
for (byte processedSectors = 0; processedSectors < TDTrack.sectors; processedSectors++)
|
||||
for(byte processedSectors = 0; processedSectors < TDTrack.sectors; processedSectors++)
|
||||
{
|
||||
TDSectorHeader TDSector = new TDSectorHeader();
|
||||
TDDataHeader TDData = new TDDataHeader();
|
||||
@@ -493,7 +493,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "\t\tSector CRC (plus headers): 0x{0:X2}", TDSector.crc);
|
||||
|
||||
UInt32 LBA = (uint)((TDSector.cylinder * header.sides * spt) + (TDSector.head * spt) + (TDSector.sectorNumber - 1));
|
||||
if ((TDSector.flags & FlagsSectorDataless) != FlagsSectorDataless && (TDSector.flags & FlagsSectorSkipped) != FlagsSectorSkipped)
|
||||
if((TDSector.flags & FlagsSectorDataless) != FlagsSectorDataless && (TDSector.flags & FlagsSectorSkipped) != FlagsSectorSkipped)
|
||||
{
|
||||
stream.Read(dataSizeBytes, 0, 2);
|
||||
TDData.dataSize = BitConverter.ToUInt16(dataSizeBytes, 0);
|
||||
@@ -509,17 +509,17 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
byte TDSectorCalculatedCRC = (byte)(TeleDiskCRC(0, decodedData) & 0xFF);
|
||||
|
||||
if (TDSectorCalculatedCRC != TDSector.crc)
|
||||
if(TDSectorCalculatedCRC != TDSector.crc)
|
||||
{
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "Sector LBA {0} calculated CRC 0x{1:X2} differs from stored CRC 0x{2:X2}", LBA, TDSectorCalculatedCRC, TDSector.crc);
|
||||
if ((TDSector.flags & FlagsSectorNoID) != FlagsSectorNoID)
|
||||
if (!sectorsData.ContainsKey(LBA) && (TDSector.flags & FlagsSectorDuplicate) != FlagsSectorDuplicate)
|
||||
SectorsWhereCRCHasFailed.Add((UInt64)LBA);
|
||||
if((TDSector.flags & FlagsSectorNoID) != FlagsSectorNoID)
|
||||
if(!sectorsData.ContainsKey(LBA) && (TDSector.flags & FlagsSectorDuplicate) != FlagsSectorDuplicate)
|
||||
SectorsWhereCRCHasFailed.Add((UInt64)LBA);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (TDSector.sectorSize)
|
||||
switch(TDSector.sectorSize)
|
||||
{
|
||||
case SectorSize128:
|
||||
decodedData = new byte[128];
|
||||
@@ -550,11 +550,11 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "\t\tLBA: {0}", LBA);
|
||||
|
||||
if ((TDSector.flags & FlagsSectorNoID) != FlagsSectorNoID)
|
||||
if((TDSector.flags & FlagsSectorNoID) != FlagsSectorNoID)
|
||||
{
|
||||
if (sectorsData.ContainsKey(LBA))
|
||||
if(sectorsData.ContainsKey(LBA))
|
||||
{
|
||||
if ((TDSector.flags & FlagsSectorDuplicate) == FlagsSectorDuplicate)
|
||||
if((TDSector.flags & FlagsSectorDuplicate) == FlagsSectorDuplicate)
|
||||
{
|
||||
DicConsole.DebugWriteLine("TeleDisk plugin", "\t\tSector {0} on cylinder {1} head {2} is duplicate, and marked so",
|
||||
TDSector.sectorNumber, TDSector.cylinder, TDSector.head);
|
||||
@@ -571,7 +571,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
totalDiskSize += (uint)decodedData.Length;
|
||||
}
|
||||
}
|
||||
if (decodedData.Length > ImageInfo.sectorSize)
|
||||
if(decodedData.Length > ImageInfo.sectorSize)
|
||||
ImageInfo.sectorSize = (uint)decodedData.Length;
|
||||
}
|
||||
}
|
||||
@@ -613,27 +613,27 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
if (sectorAddress > (ulong)sectorsData.Count - 1)
|
||||
if(sectorAddress > (ulong)sectorsData.Count - 1)
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
|
||||
if (sectorAddress + length > (ulong)sectorsData.Count)
|
||||
if(sectorAddress + length > (ulong)sectorsData.Count)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than available");
|
||||
|
||||
byte[] data = new byte[1]; // To make compiler happy
|
||||
bool first = true;
|
||||
int dataPosition = 0;
|
||||
|
||||
for (ulong i = sectorAddress; i < (sectorAddress + length); i++)
|
||||
for(ulong i = sectorAddress; i < (sectorAddress + length); i++)
|
||||
{
|
||||
if (!sectorsData.ContainsKey((uint)i))
|
||||
if(!sectorsData.ContainsKey((uint)i))
|
||||
throw new ImageNotSupportedException(String.Format("Requested sector {0} not found", i));
|
||||
|
||||
byte[] sector;
|
||||
|
||||
if (!sectorsData.TryGetValue((uint)i, out sector))
|
||||
if(!sectorsData.TryGetValue((uint)i, out sector))
|
||||
throw new ImageNotSupportedException(String.Format("Error reading sector {0}", i));
|
||||
|
||||
if (first)
|
||||
if(first)
|
||||
{
|
||||
data = new byte[sector.Length];
|
||||
Array.Copy(sector, data, sector.Length);
|
||||
@@ -660,22 +660,22 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ReadSectors(sectorAddress, length);
|
||||
}
|
||||
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
return "Sydex TeleDisk";
|
||||
}
|
||||
|
||||
public override string GetImageVersion()
|
||||
public override string GetImageVersion()
|
||||
{
|
||||
return ImageInfo.imageVersion;
|
||||
}
|
||||
|
||||
public override string GetImageApplication()
|
||||
public override string GetImageApplication()
|
||||
{
|
||||
return ImageInfo.imageApplication;
|
||||
}
|
||||
|
||||
public override string GetImageApplicationVersion()
|
||||
public override string GetImageApplicationVersion()
|
||||
{
|
||||
return ImageInfo.imageApplicationVersion;
|
||||
}
|
||||
@@ -690,7 +690,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.imageLastModificationTime;
|
||||
}
|
||||
|
||||
public override string GetImageName()
|
||||
public override string GetImageName()
|
||||
{
|
||||
return ImageInfo.imageName;
|
||||
}
|
||||
@@ -715,8 +715,8 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
if (SectorsWhereCRCHasFailed.Contains(sectorAddress))
|
||||
for(UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
if(SectorsWhereCRCHasFailed.Contains(sectorAddress))
|
||||
FailingLBAs.Add(sectorAddress);
|
||||
|
||||
return FailingLBAs.Count <= 0;
|
||||
@@ -727,7 +727,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
for(UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
UnknownLBAs.Add(i);
|
||||
|
||||
return null;
|
||||
@@ -744,13 +744,13 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
int counter = 0;
|
||||
|
||||
while (counter < buffer.Length)
|
||||
while(counter < buffer.Length)
|
||||
{
|
||||
crc ^= (UInt16)((buffer[counter] & 0xFF) << 8);
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if ((crc & 0x8000) > 0)
|
||||
if((crc & 0x8000) > 0)
|
||||
crc = (UInt16)((crc << 1) ^ TeleDiskCRCPoly);
|
||||
else
|
||||
crc = (UInt16)(crc << 1);
|
||||
@@ -765,7 +765,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
static byte[] DecodeTeleDiskData(byte sectorSize, byte encodingType, byte[] encodedData)
|
||||
{
|
||||
byte[] decodedData;
|
||||
switch (sectorSize)
|
||||
switch(sectorSize)
|
||||
{
|
||||
case SectorSize128:
|
||||
decodedData = new byte[128];
|
||||
@@ -792,7 +792,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
throw new ImageNotSupportedException(String.Format("Sector size {0} is incorrect.", sectorSize));
|
||||
}
|
||||
|
||||
switch (encodingType)
|
||||
switch(encodingType)
|
||||
{
|
||||
case dataBlockCopy:
|
||||
Array.Copy(encodedData, decodedData, decodedData.Length);
|
||||
@@ -801,7 +801,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
int ins = 0;
|
||||
int outs = 0;
|
||||
while (ins < encodedData.Length)
|
||||
while(ins < encodedData.Length)
|
||||
{
|
||||
UInt16 repeatNumber;
|
||||
byte[] repeatValue = new byte[2];
|
||||
@@ -825,7 +825,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
int ins = 0;
|
||||
int outs = 0;
|
||||
while (ins < encodedData.Length)
|
||||
while(ins < encodedData.Length)
|
||||
{
|
||||
byte Run;
|
||||
byte Length;
|
||||
@@ -833,7 +833,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
byte[] Piece;
|
||||
|
||||
Encoding = encodedData[ins];
|
||||
if (Encoding == 0x00)
|
||||
if(Encoding == 0x00)
|
||||
{
|
||||
Length = encodedData[ins + 1];
|
||||
Array.Copy(encodedData, ins + 2, decodedData, outs, Length);
|
||||
@@ -870,18 +870,18 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
MediaType DecodeTeleDiskDiskType()
|
||||
{
|
||||
switch (header.driveType)
|
||||
switch(header.driveType)
|
||||
{
|
||||
case DriveType525DD:
|
||||
case DriveType525HD_DDDisk:
|
||||
case DriveType525HD:
|
||||
{
|
||||
switch (totalDiskSize)
|
||||
switch(totalDiskSize)
|
||||
{
|
||||
case 163840:
|
||||
{
|
||||
// Acorn disk uses 256 bytes/sector
|
||||
if (ImageInfo.sectorSize == 256)
|
||||
if(ImageInfo.sectorSize == 256)
|
||||
return MediaType.ACORN_525_SS_DD_40;
|
||||
else // DOS disks use 512 bytes/sector
|
||||
return MediaType.DOS_525_SS_DD_8;
|
||||
@@ -889,7 +889,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
case 184320:
|
||||
{
|
||||
// Atari disk uses 256 bytes/sector
|
||||
if (ImageInfo.sectorSize == 256)
|
||||
if(ImageInfo.sectorSize == 256)
|
||||
return MediaType.ATARI_525_DD;
|
||||
else // DOS disks use 512 bytes/sector
|
||||
return MediaType.DOS_525_SS_DD_9;
|
||||
@@ -897,7 +897,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
case 327680:
|
||||
{
|
||||
// Acorn disk uses 256 bytes/sector
|
||||
if (ImageInfo.sectorSize == 256)
|
||||
if(ImageInfo.sectorSize == 256)
|
||||
return MediaType.ACORN_525_SS_DD_80;
|
||||
else // DOS disks use 512 bytes/sector
|
||||
return MediaType.DOS_525_DS_DD_8;
|
||||
@@ -947,7 +947,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
case DriveType35ED:
|
||||
case DriveType35HD:
|
||||
{
|
||||
switch (totalDiskSize)
|
||||
switch(totalDiskSize)
|
||||
{
|
||||
case 327680:
|
||||
return MediaType.DOS_35_SS_DD_8;
|
||||
@@ -989,7 +989,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
case DriveType8inch:
|
||||
{
|
||||
switch (totalDiskSize)
|
||||
switch(totalDiskSize)
|
||||
{
|
||||
case 81664:
|
||||
return MediaType.IBM23FD;
|
||||
@@ -1015,7 +1015,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
case 512512:
|
||||
{
|
||||
// DEC disk uses 256 bytes/sector
|
||||
if (ImageInfo.sectorSize == 256)
|
||||
if(ImageInfo.sectorSize == 256)
|
||||
return MediaType.RX02;
|
||||
else // ECMA disks use 128 bytes/sector
|
||||
return MediaType.ECMA_59;
|
||||
@@ -1068,42 +1068,42 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.imageCreator;
|
||||
}
|
||||
|
||||
public override string GetImageComments()
|
||||
public override string GetImageComments()
|
||||
{
|
||||
return ImageInfo.imageComments;
|
||||
}
|
||||
|
||||
public override string GetMediaManufacturer()
|
||||
public override string GetMediaManufacturer()
|
||||
{
|
||||
return ImageInfo.mediaManufacturer;
|
||||
}
|
||||
|
||||
public override string GetMediaModel()
|
||||
public override string GetMediaModel()
|
||||
{
|
||||
return ImageInfo.mediaModel;
|
||||
}
|
||||
|
||||
public override string GetMediaSerialNumber()
|
||||
public override string GetMediaSerialNumber()
|
||||
{
|
||||
return ImageInfo.mediaSerialNumber;
|
||||
}
|
||||
|
||||
public override string GetMediaBarcode()
|
||||
public override string GetMediaBarcode()
|
||||
{
|
||||
return ImageInfo.mediaBarcode;
|
||||
}
|
||||
|
||||
public override string GetMediaPartNumber()
|
||||
public override string GetMediaPartNumber()
|
||||
{
|
||||
return ImageInfo.mediaPartNumber;
|
||||
}
|
||||
|
||||
public override int GetMediaSequence()
|
||||
public override int GetMediaSequence()
|
||||
{
|
||||
return ImageInfo.mediaSequence;
|
||||
}
|
||||
|
||||
public override int GetLastDiskSequence()
|
||||
public override int GetLastDiskSequence()
|
||||
{
|
||||
return ImageInfo.lastMediaSequence;
|
||||
}
|
||||
|
||||
@@ -404,7 +404,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
byte[] headerCookieBytes = new byte[8];
|
||||
byte[] footerCookieBytes = new byte[8];
|
||||
|
||||
if ((imageStream.Length % 2) == 0)
|
||||
if((imageStream.Length % 2) == 0)
|
||||
imageStream.Seek(-512, SeekOrigin.End);
|
||||
else
|
||||
imageStream.Seek(-511, SeekOrigin.End);
|
||||
@@ -429,7 +429,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
imageStream.Seek(0, SeekOrigin.Begin);
|
||||
imageStream.Read(header, 0, 512);
|
||||
|
||||
if ((imageStream.Length % 2) == 0)
|
||||
if((imageStream.Length % 2) == 0)
|
||||
{
|
||||
footer = new byte[512];
|
||||
imageStream.Seek(-512, SeekOrigin.End);
|
||||
@@ -467,12 +467,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
byte[] usableHeader;
|
||||
UInt32 usableChecksum;
|
||||
|
||||
if (headerCookie == ImageCookie && headerChecksum == headerCalculatedChecksum)
|
||||
if(headerCookie == ImageCookie && headerChecksum == headerCalculatedChecksum)
|
||||
{
|
||||
usableHeader = header;
|
||||
usableChecksum = headerChecksum;
|
||||
}
|
||||
else if (footerCookie == ImageCookie && footerChecksum == footerCalculatedChecksum)
|
||||
else if(footerCookie == ImageCookie && footerChecksum == footerCalculatedChecksum)
|
||||
{
|
||||
usableHeader = footer;
|
||||
usableChecksum = footerChecksum;
|
||||
@@ -526,12 +526,12 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "footer.savedState = 0x{0:X2}", thisFooter.savedState);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "footer.reserved's SHA1 = 0x{0}", sha1Ctx.End());
|
||||
|
||||
if (thisFooter.version == Version1)
|
||||
if(thisFooter.version == Version1)
|
||||
ImageInfo.imageVersion = "1.0";
|
||||
else
|
||||
throw new ImageNotSupportedException(String.Format("(VirtualPC plugin): Unknown image type {0} found. Please submit a bug with an example image.", thisFooter.diskType));
|
||||
|
||||
switch (thisFooter.creatorApplication)
|
||||
switch(thisFooter.creatorApplication)
|
||||
{
|
||||
case CreatorQEMU:
|
||||
{
|
||||
@@ -544,7 +544,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
case CreatorVirtualBox:
|
||||
{
|
||||
ImageInfo.imageApplicationVersion = String.Format("{0}.{1:D2}", (thisFooter.creatorVersion & 0xFFFF0000) >> 16, (thisFooter.creatorVersion & 0x0000FFFF));
|
||||
switch (thisFooter.creatorHostOS)
|
||||
switch(thisFooter.creatorHostOS)
|
||||
{
|
||||
case CreatorMacintosh:
|
||||
case CreatorMacintoshOld:
|
||||
@@ -563,7 +563,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
case CreatorVirtualServer:
|
||||
{
|
||||
ImageInfo.imageApplication = "Microsoft Virtual Server";
|
||||
switch (thisFooter.creatorVersion)
|
||||
switch(thisFooter.creatorVersion)
|
||||
{
|
||||
case VersionVirtualServer2004:
|
||||
ImageInfo.imageApplicationVersion = "2004";
|
||||
@@ -576,11 +576,11 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
case CreatorVirtualPC:
|
||||
{
|
||||
switch (thisFooter.creatorHostOS)
|
||||
switch(thisFooter.creatorHostOS)
|
||||
{
|
||||
case CreatorMacintosh:
|
||||
case CreatorMacintoshOld:
|
||||
switch (thisFooter.creatorVersion)
|
||||
switch(thisFooter.creatorVersion)
|
||||
{
|
||||
case VersionVirtualPCMac:
|
||||
ImageInfo.imageApplication = "Connectix Virtual PC";
|
||||
@@ -592,7 +592,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
break;
|
||||
case CreatorWindows:
|
||||
switch (thisFooter.creatorVersion)
|
||||
switch(thisFooter.creatorVersion)
|
||||
{
|
||||
case VersionVirtualPCMac:
|
||||
ImageInfo.imageApplication = "Connectix Virtual PC";
|
||||
@@ -635,8 +635,8 @@ namespace DiscImageChef.ImagePlugins
|
||||
ImageInfo.imageCreationTime = fi.CreationTimeUtc;
|
||||
ImageInfo.imageLastModificationTime = thisDateTime;
|
||||
ImageInfo.imageName = Path.GetFileNameWithoutExtension(imagePath);
|
||||
|
||||
if (thisFooter.diskType == typeDynamic || thisFooter.diskType == typeDifferencing)
|
||||
|
||||
if(thisFooter.diskType == typeDynamic || thisFooter.diskType == typeDifferencing)
|
||||
{
|
||||
imageStream.Seek((long)thisFooter.offset, SeekOrigin.Begin);
|
||||
byte[] dynamicBytes = new byte[1024];
|
||||
@@ -653,14 +653,14 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "Dynamic header checksum = 0x{0:X8}, calculated = 0x{1:X8}", dynamicChecksum, dynamicChecksumCalculated);
|
||||
|
||||
if (dynamicChecksum != dynamicChecksumCalculated)
|
||||
if(dynamicChecksum != dynamicChecksumCalculated)
|
||||
throw new ImageNotSupportedException("(VirtualPC plugin): Both header and footer are corrupt, image cannot be opened.");
|
||||
|
||||
thisDynamic = new DynamicDiskHeader();
|
||||
thisDynamic.locatorEntries = new ParentLocatorEntry[8];
|
||||
thisDynamic.reserved2 = new byte[256];
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
for(int i = 0; i < 8; i++)
|
||||
thisDynamic.locatorEntries[i] = new ParentLocatorEntry();
|
||||
|
||||
thisDynamic.cookie = BigEndianBitConverter.ToUInt64(dynamicBytes, 0x00);
|
||||
@@ -675,7 +675,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
thisDynamic.reserved = BigEndianBitConverter.ToUInt32(dynamicBytes, 0x3C);
|
||||
thisDynamic.parentName = Encoding.BigEndianUnicode.GetString(dynamicBytes, 0x40, 512);
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
thisDynamic.locatorEntries[i].platformCode = BigEndianBitConverter.ToUInt32(dynamicBytes, 0x240 + 0x00 + 24 * i);
|
||||
thisDynamic.locatorEntries[i].platformDataSpace = BigEndianBitConverter.ToUInt32(dynamicBytes, 0x240 + 0x04 + 24 * i);
|
||||
@@ -703,7 +703,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "dynamic.parentID = {0}", thisDynamic.parentID);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "dynamic.parentTimestamp = 0x{0:X8} ({1})", thisDynamic.parentTimestamp, parentDateTime);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "dynamic.reserved = 0x{0:X8}", thisDynamic.reserved);
|
||||
for (int i = 0; i < 8; i++)
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "dynamic.locatorEntries[{0}].platformCode = 0x{1:X8} (\"{2}\")", i, thisDynamic.locatorEntries[i].platformCode,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(thisDynamic.locatorEntries[i].platformCode)));
|
||||
@@ -715,7 +715,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "dynamic.parentName = \"{0}\"", thisDynamic.parentName);
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "dynamic.reserved2's SHA1 = 0x{0}", sha1Ctx.End());
|
||||
|
||||
if (thisDynamic.headerVersion != Version1)
|
||||
if(thisDynamic.headerVersion != Version1)
|
||||
throw new ImageNotSupportedException(String.Format("(VirtualPC plugin): Unknown image type {0} found. Please submit a bug with an example image.", thisFooter.diskType));
|
||||
|
||||
DateTime startTime = DateTime.UtcNow;
|
||||
@@ -741,7 +741,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
BATSector batSector = new BATSector();
|
||||
|
||||
// Unsafe and fast code. It takes 4 ms to fill a 30720 entries BAT
|
||||
for (int i = 0; i < batSectorCount; i++)
|
||||
for(int i = 0; i < batSectorCount; i++)
|
||||
{
|
||||
imageStream.Seek((long)thisDynamic.tableOffset + i * 512, SeekOrigin.Begin);
|
||||
imageStream.Read(batSectorBytes, 0, 512);
|
||||
@@ -752,7 +752,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
handle.Free();
|
||||
// This restores the order of elements
|
||||
Array.Reverse(batSector.blockPointer);
|
||||
if (blockAllocationTable.Length >= (i * 512) / 4 + 512 / 4)
|
||||
if(blockAllocationTable.Length >= (i * 512) / 4 + 512 / 4)
|
||||
Array.Copy(batSector.blockPointer, 0, blockAllocationTable, (i * 512) / 4, 512 / 4);
|
||||
else
|
||||
Array.Copy(batSector.blockPointer, 0, blockAllocationTable, (i * 512) / 4, blockAllocationTable.Length - (i * 512) / 4);
|
||||
@@ -780,7 +780,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ImageInfo.xmlMediaType = XmlMediaType.BlockMedia;
|
||||
|
||||
switch (thisFooter.diskType)
|
||||
switch(thisFooter.diskType)
|
||||
{
|
||||
case typeFixed:
|
||||
case typeDynamic:
|
||||
@@ -792,15 +792,15 @@ namespace DiscImageChef.ImagePlugins
|
||||
case typeDifferencing:
|
||||
{
|
||||
locatorEntriesData = new byte[8][];
|
||||
for (int i = 0; i < 8; i++)
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if (thisDynamic.locatorEntries[i].platformCode != 0x00000000)
|
||||
if(thisDynamic.locatorEntries[i].platformCode != 0x00000000)
|
||||
{
|
||||
locatorEntriesData[i] = new byte[thisDynamic.locatorEntries[i].platformDataLength];
|
||||
imageStream.Seek((long)thisDynamic.locatorEntries[i].platformDataOffset, SeekOrigin.Begin);
|
||||
imageStream.Read(locatorEntriesData[i], 0, (int)thisDynamic.locatorEntries[i].platformDataLength);
|
||||
|
||||
switch (thisDynamic.locatorEntries[i].platformCode)
|
||||
switch(thisDynamic.locatorEntries[i].platformCode)
|
||||
{
|
||||
case platformCodeWindowsAbsolute:
|
||||
case platformCodeWindowsRelative:
|
||||
@@ -825,9 +825,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
bool locatorFound = false;
|
||||
string parentPath = null;
|
||||
|
||||
while (!locatorFound && currentLocator < 8)
|
||||
while(!locatorFound && currentLocator < 8)
|
||||
{
|
||||
switch (thisDynamic.locatorEntries[currentLocator].platformCode)
|
||||
switch(thisDynamic.locatorEntries[currentLocator].platformCode)
|
||||
{
|
||||
case platformCodeWindowsAbsolute:
|
||||
case platformCodeWindowsRelative:
|
||||
@@ -839,7 +839,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
break;
|
||||
case platformCodeMacintoshURI:
|
||||
parentPath = Uri.UnescapeDataString(Encoding.UTF8.GetString(locatorEntriesData[currentLocator]));
|
||||
if (parentPath.StartsWith("file://localhost", StringComparison.InvariantCulture))
|
||||
if(parentPath.StartsWith("file://localhost", StringComparison.InvariantCulture))
|
||||
parentPath = parentPath.Remove(0, 16);
|
||||
else
|
||||
{
|
||||
@@ -849,32 +849,32 @@ namespace DiscImageChef.ImagePlugins
|
||||
break;
|
||||
}
|
||||
|
||||
if (parentPath != null)
|
||||
if(parentPath != null)
|
||||
{
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "Possible parent path: \"{0}\"", parentPath);
|
||||
|
||||
locatorFound |= File.Exists(parentPath);
|
||||
|
||||
if (!locatorFound)
|
||||
if(!locatorFound)
|
||||
parentPath = null;
|
||||
}
|
||||
currentLocator++;
|
||||
}
|
||||
|
||||
if (!locatorFound || parentPath == null)
|
||||
if(!locatorFound || parentPath == null)
|
||||
throw new FileNotFoundException("(VirtualPC plugin): Cannot find parent file for differencing disk image");
|
||||
else
|
||||
{
|
||||
parentImage = new VHD();
|
||||
/* PluginBase plugins = new PluginBase();
|
||||
plugins.RegisterAllPlugins();
|
||||
if (!plugins.ImagePluginsList.TryGetValue(Name.ToLower(), out parentImage))
|
||||
throw new SystemException("(VirtualPC plugin): Unable to open myself");*/
|
||||
/* PluginBase plugins = new PluginBase();
|
||||
plugins.RegisterAllPlugins();
|
||||
if (!plugins.ImagePluginsList.TryGetValue(Name.ToLower(), out parentImage))
|
||||
throw new SystemException("(VirtualPC plugin): Unable to open myself");*/
|
||||
|
||||
if (!parentImage.IdentifyImage(parentPath))
|
||||
if(!parentImage.IdentifyImage(parentPath))
|
||||
throw new ImageNotSupportedException("(VirtualPC plugin): Parent image is not a Virtual PC disk image");
|
||||
|
||||
if (!parentImage.OpenImage(parentPath))
|
||||
if(!parentImage.OpenImage(parentPath))
|
||||
throw new ImageNotSupportedException("(VirtualPC plugin): Cannot open parent disk image");
|
||||
|
||||
// While specification says that parent and child disk images should contain UUID relationship
|
||||
@@ -882,7 +882,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
// the parent never stored itself. So the only real way to know that images are related is
|
||||
// because the parent IS found and SAME SIZE. Ugly...
|
||||
// More funny even, tested parent images show an empty host OS, and child images a correct one.
|
||||
if (parentImage.GetSectors() != GetSectors())
|
||||
if(parentImage.GetSectors() != GetSectors())
|
||||
throw new ImageNotSupportedException("(VirtualPC plugin): Parent image is of different size");
|
||||
}
|
||||
|
||||
@@ -923,7 +923,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
switch (thisFooter.diskType)
|
||||
switch(thisFooter.diskType)
|
||||
{
|
||||
case typeFixed:
|
||||
return "Virtual PC fixed size disk image";
|
||||
@@ -978,7 +978,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSector(ulong sectorAddress)
|
||||
{
|
||||
switch (thisFooter.diskType)
|
||||
switch(thisFooter.diskType)
|
||||
{
|
||||
case typeDifferencing:
|
||||
{
|
||||
@@ -1019,7 +1019,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
*/
|
||||
|
||||
// Sector has been written, read from child image
|
||||
if (dirty)
|
||||
if(dirty)
|
||||
{
|
||||
/* Too noisy
|
||||
DicConsole.DebugWriteLine("VirtualPC plugin", "Sector {0} is dirty", sectorAddress);
|
||||
@@ -1051,7 +1051,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(ulong sectorAddress, uint length)
|
||||
{
|
||||
switch (thisFooter.diskType)
|
||||
switch(thisFooter.diskType)
|
||||
{
|
||||
case typeFixed:
|
||||
{
|
||||
@@ -1066,10 +1066,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
thisStream.Close();
|
||||
return data;
|
||||
}
|
||||
// Contrary to Microsoft's specifications that tell us to check the bitmap
|
||||
// and in case of unused sector just return zeros, as blocks are allocated
|
||||
// as a whole, this would waste time and miss cache, so we read any sector
|
||||
// as long as it is in the block.
|
||||
// Contrary to Microsoft's specifications that tell us to check the bitmap
|
||||
// and in case of unused sector just return zeros, as blocks are allocated
|
||||
// as a whole, this would waste time and miss cache, so we read any sector
|
||||
// as long as it is in the block.
|
||||
case typeDynamic:
|
||||
{
|
||||
FileStream thisStream;
|
||||
@@ -1090,7 +1090,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
UInt32 sectorsToReadHere;
|
||||
|
||||
// Asked to read more sectors than are remaining in block
|
||||
if (length > remainingInBlock)
|
||||
if(length > remainingInBlock)
|
||||
{
|
||||
suffix = ReadSectors(sectorAddress + remainingInBlock, length - remainingInBlock);
|
||||
sectorsToReadHere = remainingInBlock;
|
||||
@@ -1103,7 +1103,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
prefix = new byte[sectorsToReadHere * 512];
|
||||
|
||||
// 0xFFFFFFFF means unallocated
|
||||
if (sectorOffset != 0xFFFFFFFF)
|
||||
if(sectorOffset != 0xFFFFFFFF)
|
||||
{
|
||||
thisStream = new FileStream(thisPath, FileMode.Open, FileAccess.Read);
|
||||
thisStream.Seek((long)(sectorOffset * 512), SeekOrigin.Begin);
|
||||
@@ -1115,7 +1115,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
Array.Clear(prefix, 0, prefix.Length);
|
||||
|
||||
// If we needed to read from another block, join all the data
|
||||
if (suffix != null)
|
||||
if(suffix != null)
|
||||
{
|
||||
byte[] data = new byte[512 * length];
|
||||
Array.Copy(prefix, 0, data, 0, prefix.Length);
|
||||
@@ -1130,7 +1130,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
// As on differencing images, each independent sector can be read from child or parent
|
||||
// image, we must read sector one by one
|
||||
byte[] fullData = new byte[512 * length];
|
||||
for (ulong i = 0; i < length; i++)
|
||||
for(ulong i = 0; i < length; i++)
|
||||
{
|
||||
byte[] oneSector = ReadSector(sectorAddress + i);
|
||||
Array.Copy(oneSector, 0, fullData, (int)(i * 512), 512);
|
||||
@@ -1157,7 +1157,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
static UInt32 VHDChecksum(byte[] data)
|
||||
{
|
||||
UInt32 checksum = 0;
|
||||
foreach (byte b in data)
|
||||
foreach(byte b in data)
|
||||
checksum += b;
|
||||
return ~checksum;
|
||||
}
|
||||
@@ -1315,7 +1315,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
FailingLBAs = new List<ulong>();
|
||||
UnknownLBAs = new List<ulong>();
|
||||
for (ulong i = 0; i < ImageInfo.sectors; i++)
|
||||
for(ulong i = 0; i < ImageInfo.sectors; i++)
|
||||
UnknownLBAs.Add(i);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -85,10 +85,10 @@ namespace DiscImageChef.ImagePlugins
|
||||
FileInfo fi = new FileInfo(imagePath);
|
||||
|
||||
// Check if file is not multiple of 512
|
||||
if ((fi.Length % 512) != 0)
|
||||
if((fi.Length % 512) != 0)
|
||||
{
|
||||
// Check known disk sizes with sectors smaller than 512
|
||||
switch (fi.Length)
|
||||
switch(fi.Length)
|
||||
{
|
||||
case 81664:
|
||||
case 116480:
|
||||
@@ -122,11 +122,11 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
FileInfo fi = new FileInfo(imagePath);
|
||||
string extension = Path.GetExtension(imagePath).ToLower();
|
||||
if (extension == ".iso" && (fi.Length % 2048) == 0)
|
||||
if(extension == ".iso" && (fi.Length % 2048) == 0)
|
||||
ImageInfo.sectorSize = 2048;
|
||||
else
|
||||
{
|
||||
switch (fi.Length)
|
||||
switch(fi.Length)
|
||||
{
|
||||
case 242944:
|
||||
case 256256:
|
||||
@@ -182,7 +182,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
differentTrackZeroSize = false;
|
||||
rawImagePath = imagePath;
|
||||
|
||||
switch (fi.Length)
|
||||
switch(fi.Length)
|
||||
{
|
||||
case 242944:
|
||||
ImageInfo.sectors = 1898;
|
||||
@@ -263,7 +263,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
ImageInfo.mediaType = CalculateDiskType();
|
||||
|
||||
switch (ImageInfo.mediaType)
|
||||
switch(ImageInfo.mediaType)
|
||||
{
|
||||
case MediaType.CD:
|
||||
case MediaType.DVDPR:
|
||||
@@ -309,16 +309,16 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length)
|
||||
{
|
||||
if (differentTrackZeroSize)
|
||||
if(differentTrackZeroSize)
|
||||
{
|
||||
throw new NotImplementedException("Not yet implemented");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sectorAddress > ImageInfo.sectors - 1)
|
||||
if(sectorAddress > ImageInfo.sectors - 1)
|
||||
throw new ArgumentOutOfRangeException("sectorAddress", "Sector address not found");
|
||||
|
||||
if (sectorAddress + length > ImageInfo.sectors)
|
||||
if(sectorAddress + length > ImageInfo.sectors)
|
||||
throw new ArgumentOutOfRangeException("length", "Requested more sectors than available");
|
||||
|
||||
byte[] buffer = new byte[length * ImageInfo.sectorSize];
|
||||
@@ -336,8 +336,8 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
}
|
||||
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
public override string GetImageFormat()
|
||||
{
|
||||
return "Raw disk image (sector by sector copy)";
|
||||
}
|
||||
|
||||
@@ -351,7 +351,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.imageLastModificationTime;
|
||||
}
|
||||
|
||||
public override string GetImageName()
|
||||
public override string GetImageName()
|
||||
{
|
||||
return ImageInfo.imageName;
|
||||
}
|
||||
@@ -376,7 +376,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
for(UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
UnknownLBAs.Add(i);
|
||||
|
||||
return null;
|
||||
@@ -387,7 +387,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
FailingLBAs = new List<UInt64>();
|
||||
UnknownLBAs = new List<UInt64>();
|
||||
|
||||
for (UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
for(UInt64 i = sectorAddress; i < sectorAddress + length; i++)
|
||||
UnknownLBAs.Add(i);
|
||||
|
||||
return null;
|
||||
@@ -400,7 +400,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override List<Track> GetTracks()
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
Track trk = new Track();
|
||||
trk.TrackBytesPerSector = (int)ImageInfo.sectorSize;
|
||||
@@ -424,9 +424,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (session.SessionSequence != 1)
|
||||
if(session.SessionSequence != 1)
|
||||
throw new ArgumentOutOfRangeException("session", "Only a single session is supported");
|
||||
|
||||
Track trk = new Track();
|
||||
@@ -451,9 +451,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override List<Track> GetSessionTracks(UInt16 session)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (session != 1)
|
||||
if(session != 1)
|
||||
throw new ArgumentOutOfRangeException("session", "Only a single session is supported");
|
||||
|
||||
Track trk = new Track();
|
||||
@@ -478,7 +478,7 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override List<Session> GetSessions()
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
Session sess = new Session();
|
||||
sess.EndSector = ImageInfo.sectors - 1;
|
||||
@@ -496,9 +496,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSector(UInt64 sectorAddress, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
if(track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSector(sectorAddress);
|
||||
@@ -509,9 +509,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
if(track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSectors(sectorAddress, length);
|
||||
@@ -522,9 +522,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorLong(UInt64 sectorAddress, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
if(track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSector(sectorAddress);
|
||||
@@ -535,9 +535,9 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
public override byte[] ReadSectorsLong(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
if(ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
if(track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSectors(sectorAddress, length);
|
||||
@@ -550,27 +550,27 @@ namespace DiscImageChef.ImagePlugins
|
||||
|
||||
MediaType CalculateDiskType()
|
||||
{
|
||||
if (ImageInfo.sectorSize == 2048)
|
||||
if(ImageInfo.sectorSize == 2048)
|
||||
{
|
||||
if (ImageInfo.sectors <= 360000)
|
||||
if(ImageInfo.sectors <= 360000)
|
||||
return MediaType.CD;
|
||||
if (ImageInfo.sectors <= 2295104)
|
||||
if(ImageInfo.sectors <= 2295104)
|
||||
return MediaType.DVDPR;
|
||||
if (ImageInfo.sectors <= 2298496)
|
||||
if(ImageInfo.sectors <= 2298496)
|
||||
return MediaType.DVDR;
|
||||
if (ImageInfo.sectors <= 4171712)
|
||||
if(ImageInfo.sectors <= 4171712)
|
||||
return MediaType.DVDRDL;
|
||||
if (ImageInfo.sectors <= 4173824)
|
||||
if(ImageInfo.sectors <= 4173824)
|
||||
return MediaType.DVDPRDL;
|
||||
if (ImageInfo.sectors <= 24438784)
|
||||
if(ImageInfo.sectors <= 24438784)
|
||||
return MediaType.BDR;
|
||||
if (ImageInfo.sectors <= 62500864)
|
||||
if(ImageInfo.sectors <= 62500864)
|
||||
return MediaType.BDRXL;
|
||||
return MediaType.Unknown;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (ImageInfo.imageSize)
|
||||
switch(ImageInfo.imageSize)
|
||||
{
|
||||
case 80384:
|
||||
return MediaType.ECMA_66;
|
||||
@@ -708,17 +708,17 @@ namespace DiscImageChef.ImagePlugins
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override string GetImageVersion()
|
||||
public override string GetImageVersion()
|
||||
{
|
||||
return ImageInfo.imageVersion;
|
||||
}
|
||||
|
||||
public override string GetImageApplication()
|
||||
public override string GetImageApplication()
|
||||
{
|
||||
return ImageInfo.imageApplication;
|
||||
}
|
||||
|
||||
public override string GetImageApplicationVersion()
|
||||
public override string GetImageApplicationVersion()
|
||||
{
|
||||
return ImageInfo.imageApplicationVersion;
|
||||
}
|
||||
@@ -733,42 +733,42 @@ namespace DiscImageChef.ImagePlugins
|
||||
return ImageInfo.imageCreator;
|
||||
}
|
||||
|
||||
public override string GetImageComments()
|
||||
public override string GetImageComments()
|
||||
{
|
||||
return ImageInfo.imageComments;
|
||||
}
|
||||
|
||||
public override string GetMediaManufacturer()
|
||||
public override string GetMediaManufacturer()
|
||||
{
|
||||
return ImageInfo.mediaManufacturer;
|
||||
}
|
||||
|
||||
public override string GetMediaModel()
|
||||
public override string GetMediaModel()
|
||||
{
|
||||
return ImageInfo.mediaModel;
|
||||
}
|
||||
|
||||
public override string GetMediaSerialNumber()
|
||||
public override string GetMediaSerialNumber()
|
||||
{
|
||||
return ImageInfo.mediaSerialNumber;
|
||||
}
|
||||
|
||||
public override string GetMediaBarcode()
|
||||
public override string GetMediaBarcode()
|
||||
{
|
||||
return ImageInfo.mediaBarcode;
|
||||
}
|
||||
|
||||
public override string GetMediaPartNumber()
|
||||
public override string GetMediaPartNumber()
|
||||
{
|
||||
return ImageInfo.mediaPartNumber;
|
||||
}
|
||||
|
||||
public override int GetMediaSequence()
|
||||
public override int GetMediaSequence()
|
||||
{
|
||||
return ImageInfo.mediaSequence;
|
||||
}
|
||||
|
||||
public override int GetLastDiskSequence()
|
||||
public override int GetLastDiskSequence()
|
||||
{
|
||||
return ImageInfo.lastMediaSequence;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user