REFACTOR: Convert 'if' statement to 'switch' statement.

This commit is contained in:
2017-12-21 04:43:29 +00:00
parent df2fb651e4
commit 9cd1869d1d
55 changed files with 4429 additions and 4192 deletions

View File

@@ -145,12 +145,20 @@ namespace DiscImageChef.DiscImages
switch(fdihdr.spt)
{
case 8:
if(fdihdr.heads == 1) ImageInfo.MediaType = MediaType.DOS_525_SS_DD_8;
else if(fdihdr.heads == 2) ImageInfo.MediaType = MediaType.DOS_525_DS_DD_8;
switch(fdihdr.heads) {
case 1: ImageInfo.MediaType = MediaType.DOS_525_SS_DD_8;
break;
case 2: ImageInfo.MediaType = MediaType.DOS_525_DS_DD_8;
break;
}
break;
case 9:
if(fdihdr.heads == 1) ImageInfo.MediaType = MediaType.DOS_525_SS_DD_9;
else if(fdihdr.heads == 2) ImageInfo.MediaType = MediaType.DOS_525_DS_DD_9;
switch(fdihdr.heads) {
case 1: ImageInfo.MediaType = MediaType.DOS_525_SS_DD_9;
break;
case 2: ImageInfo.MediaType = MediaType.DOS_525_DS_DD_9;
break;
}
break;
}
@@ -222,8 +230,12 @@ namespace DiscImageChef.DiscImages
switch(fdihdr.spt)
{
case 16:
if(fdihdr.heads == 1) ImageInfo.MediaType = MediaType.NEC_525_SS;
else if(fdihdr.heads == 2) ImageInfo.MediaType = MediaType.NEC_525_DS;
switch(fdihdr.heads) {
case 1: ImageInfo.MediaType = MediaType.NEC_525_SS;
break;
case 2: ImageInfo.MediaType = MediaType.NEC_525_DS;
break;
}
break;
}
@@ -232,12 +244,20 @@ namespace DiscImageChef.DiscImages
switch(fdihdr.spt)
{
case 8:
if(fdihdr.heads == 1) ImageInfo.MediaType = MediaType.DOS_35_SS_DD_8;
else if(fdihdr.heads == 2) ImageInfo.MediaType = MediaType.DOS_35_DS_DD_8;
switch(fdihdr.heads) {
case 1: ImageInfo.MediaType = MediaType.DOS_35_SS_DD_8;
break;
case 2: ImageInfo.MediaType = MediaType.DOS_35_DS_DD_8;
break;
}
break;
case 9:
if(fdihdr.heads == 1) ImageInfo.MediaType = MediaType.DOS_35_SS_DD_9;
else if(fdihdr.heads == 2) ImageInfo.MediaType = MediaType.DOS_35_DS_DD_9;
switch(fdihdr.heads) {
case 1: ImageInfo.MediaType = MediaType.DOS_35_SS_DD_9;
break;
case 2: ImageInfo.MediaType = MediaType.DOS_35_DS_DD_9;
break;
}
break;
case 15:
if(fdihdr.heads == 2) ImageInfo.MediaType = MediaType.NEC_35_HD_15;

View File

@@ -288,13 +288,17 @@ namespace DiscImageChef.DiscImages
if(imageHeader.DataSize == 0 && imageHeader.Blocks == 0 &&
imageHeader.ImageFormat != PRODOS_SECTOR_ORDER) return false;
if(imageHeader.ImageFormat == PRODOS_SECTOR_ORDER && imageHeader.Blocks == 0) return false;
if(imageHeader.ImageFormat == PRODOS_SECTOR_ORDER) imageHeader.DataSize = imageHeader.Blocks * 512;
else if(imageHeader.Blocks == 0 && imageHeader.DataSize != 0)
imageHeader.Blocks = imageHeader.DataSize / 256;
else if(imageHeader.DataSize == 0 && imageHeader.Blocks != 0)
imageHeader.DataSize = imageHeader.Blocks * 256;
switch(imageHeader.ImageFormat) {
case PRODOS_SECTOR_ORDER when imageHeader.Blocks == 0: return false;
case PRODOS_SECTOR_ORDER: imageHeader.DataSize = imageHeader.Blocks * 512;
break;
default:
if(imageHeader.Blocks == 0 && imageHeader.DataSize != 0)
imageHeader.Blocks = imageHeader.DataSize / 256;
else if(imageHeader.DataSize == 0 && imageHeader.Blocks != 0)
imageHeader.DataSize = imageHeader.Blocks * 256;
break;
}
ImageInfo.SectorSize = (uint)(imageHeader.ImageFormat == PRODOS_SECTOR_ORDER ? 512 : 256);

View File

@@ -735,12 +735,14 @@ namespace DiscImageChef.DiscImages
long sectorSize = dataFile.Length / dataFile.Sectors;
if(sectorSize > 2352)
if(sectorSize - 2352 == 16) chars.Subchannel = TrackSubchannelType.Q16Interleaved;
else if(sectorSize - 2352 == 96) chars.Subchannel = TrackSubchannelType.PackedInterleaved;
else
{
DicConsole.ErrorWriteLine("BlindWrite5 found unknown subchannel size: {0}", sectorSize - 2352);
return false;
switch(sectorSize - 2352) {
case 16: chars.Subchannel = TrackSubchannelType.Q16Interleaved;
break;
case 96: chars.Subchannel = TrackSubchannelType.PackedInterleaved;
break;
default:
DicConsole.ErrorWriteLine("BlindWrite5 found unknown subchannel size: {0}", sectorSize - 2352);
return false;
}
else chars.Subchannel = TrackSubchannelType.None;
@@ -1114,8 +1116,12 @@ namespace DiscImageChef.DiscImages
if(isBd && ImageInfo.Sectors > 24438784)
{
if(ImageInfo.MediaType == MediaType.BDR) ImageInfo.MediaType = MediaType.BDRXL;
if(ImageInfo.MediaType == MediaType.BDRE) ImageInfo.MediaType = MediaType.BDREXL;
switch(ImageInfo.MediaType) {
case MediaType.BDR: ImageInfo.MediaType = MediaType.BDRXL;
break;
case MediaType.BDRE: ImageInfo.MediaType = MediaType.BDREXL;
break;
}
}
DicConsole.DebugWriteLine("BlindWrite5 plugin", "ImageInfo.mediaType = {0}", ImageInfo.MediaType);

View File

@@ -2038,17 +2038,17 @@ namespace DiscImageChef.DiscImages
uint sector_size;
if(tag == SectorTagType.CdSectorSubchannel)
if(track.TrackSubchannelType == TrackSubchannelType.None)
throw new FeatureNotPresentImageException("Requested sector does not contain subchannel");
else if(track.TrackSubchannelType == TrackSubchannelType.RawInterleaved)
{
sector_offset = (uint)track.TrackRawBytesPerSector;
sector_size = 96;
switch(track.TrackSubchannelType) {
case TrackSubchannelType.None: throw new FeatureNotPresentImageException("Requested sector does not contain subchannel");
case TrackSubchannelType.RawInterleaved:
sector_offset = (uint)track.TrackRawBytesPerSector;
sector_size = 96;
break;
default:
throw new
FeatureSupportedButNotImplementedImageException(string.Format("Unsupported subchannel type {0}",
track.TrackSubchannelType));
}
else
throw new
FeatureSupportedButNotImplementedImageException(string.Format("Unsupported subchannel type {0}",
track.TrackSubchannelType));
else
switch(track.TrackType)
{

View File

@@ -407,9 +407,14 @@ namespace DiscImageChef.DiscImages
ImageInfo.MediaType = MediaType.NEC_8_SD;
else if(bps == IBMSectorSizeCode.QuarterKilo)
{
if(trkCounter == 80 && spt == 16) ImageInfo.MediaType = MediaType.NEC_525_SS;
else if(trkCounter == 154 && spt == 26) ImageInfo.MediaType = MediaType.NEC_8_DD;
else if(trkCounter == 160 && spt == 16) ImageInfo.MediaType = MediaType.NEC_525_DS;
switch(trkCounter) {
case 80 when spt == 16: ImageInfo.MediaType = MediaType.NEC_525_SS;
break;
case 154 when spt == 26: ImageInfo.MediaType = MediaType.NEC_8_DD;
break;
case 160 when spt == 16: ImageInfo.MediaType = MediaType.NEC_525_DS;
break;
}
}
else if(trkCounter == 154 && spt == 8 && bps == IBMSectorSizeCode.Kilo)
ImageInfo.MediaType = MediaType.NEC_525_HD;

View File

@@ -927,10 +927,10 @@ namespace DiscImageChef.DiscImages
break;
}
case SectorTagType.CdSectorSubchannel:
if(_track.TrackSubchannelType == TrackSubchannelType.None)
throw new ArgumentException("Unsupported tag requested for this track", nameof(tag));
if(_track.TrackSubchannelType == TrackSubchannelType.Q16Interleaved)
throw new ArgumentException("Q16 subchannel not yet supported");
switch(_track.TrackSubchannelType) {
case TrackSubchannelType.None: throw new ArgumentException("Unsupported tag requested for this track", nameof(tag));
case TrackSubchannelType.Q16Interleaved: throw new ArgumentException("Q16 subchannel not yet supported");
}
sectorOffset = 2352;
sectorSize = 96;
@@ -968,10 +968,10 @@ namespace DiscImageChef.DiscImages
break;
}
case SectorTagType.CdSectorSubchannel:
if(_track.TrackSubchannelType == TrackSubchannelType.None)
throw new ArgumentException("Unsupported tag requested for this track", nameof(tag));
if(_track.TrackSubchannelType == TrackSubchannelType.Q16Interleaved)
throw new ArgumentException("Q16 subchannel not yet supported");
switch(_track.TrackSubchannelType) {
case TrackSubchannelType.None: throw new ArgumentException("Unsupported tag requested for this track", nameof(tag));
case TrackSubchannelType.Q16Interleaved: throw new ArgumentException("Q16 subchannel not yet supported");
}
sectorOffset = 2352;
sectorSize = 96;
@@ -987,10 +987,10 @@ namespace DiscImageChef.DiscImages
switch(tag)
{
case SectorTagType.CdSectorSubchannel:
if(_track.TrackSubchannelType == TrackSubchannelType.None)
throw new ArgumentException("Unsupported tag requested for this track", nameof(tag));
if(_track.TrackSubchannelType == TrackSubchannelType.Q16Interleaved)
throw new ArgumentException("Q16 subchannel not yet supported");
switch(_track.TrackSubchannelType) {
case TrackSubchannelType.None: throw new ArgumentException("Unsupported tag requested for this track", nameof(tag));
case TrackSubchannelType.Q16Interleaved: throw new ArgumentException("Q16 subchannel not yet supported");
}
sectorOffset = 2352;
sectorSize = 96;

View File

@@ -292,17 +292,21 @@ namespace DiscImageChef.DiscImages
kvp[1] = kvp[1].Trim();
DicConsole.DebugWriteLine("KryoFlux plugin", "\"{0}\" = \"{1}\"", kvp[0], kvp[1]);
if(kvp[0] == hostDate)
{
if(DateTime.TryParseExact(kvp[1], "yyyy.MM.dd", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal, out blockDate))
foundDate = true;
switch(kvp[0]) {
case hostDate:
if(DateTime.TryParseExact(kvp[1], "yyyy.MM.dd", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal, out blockDate))
foundDate = true;
break;
case hostTime:
DateTime.TryParseExact(kvp[1], "HH:mm:ss", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal, out blockTime);
break;
case kfName: ImageInfo.ImageApplication = kvp[1];
break;
case kfVersion: ImageInfo.ImageApplicationVersion = kvp[1];
break;
}
else if(kvp[0] == hostTime)
DateTime.TryParseExact(kvp[1], "HH:mm:ss", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal, out blockTime);
else if(kvp[0] == kfName) ImageInfo.ImageApplication = kvp[1];
else if(kvp[0] == kfVersion) ImageInfo.ImageApplicationVersion = kvp[1];
}
if(foundDate)

View File

@@ -325,14 +325,12 @@ namespace DiscImageChef.DiscImages
bChnk.sector += (uint)ImageInfo.Sectors;
// TODO: Handle compressed chunks
if(bChnk.type == CHUNK_TYPE_KENCODE)
throw new ImageNotSupportedException("Chunks compressed with KenCode are not yet supported.");
if(bChnk.type == CHUNK_TYPE_RLE)
throw new ImageNotSupportedException("Chunks compressed with RLE are not yet supported.");
if(bChnk.type == CHUNK_TYPE_LZH)
throw new ImageNotSupportedException("Chunks compressed with LZH are not yet supported.");
if(bChnk.type == CHUNK_TYPE_STUFFIT)
throw new ImageNotSupportedException("Chunks compressed with StuffIt! are not yet supported.");
switch(bChnk.type) {
case CHUNK_TYPE_KENCODE: throw new ImageNotSupportedException("Chunks compressed with KenCode are not yet supported.");
case CHUNK_TYPE_RLE: throw new ImageNotSupportedException("Chunks compressed with RLE are not yet supported.");
case CHUNK_TYPE_LZH: throw new ImageNotSupportedException("Chunks compressed with LZH are not yet supported.");
case CHUNK_TYPE_STUFFIT: throw new ImageNotSupportedException("Chunks compressed with StuffIt! are not yet supported.");
}
// TODO: Handle compressed chunks
if(bChnk.type > CHUNK_TYPE_COPY && bChnk.type < CHUNK_TYPE_KENCODE ||
@@ -543,26 +541,23 @@ namespace DiscImageChef.DiscImages
return sector;
}
if(currentChunk.type == CHUNK_TYPE_NOCOPY)
{
sector = new byte[SECTOR_SIZE];
switch(currentChunk.type) {
case CHUNK_TYPE_NOCOPY:
sector = new byte[SECTOR_SIZE];
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
sectorCache.Add(sectorAddress, sector);
return sector;
}
sectorCache.Add(sectorAddress, sector);
return sector;
case CHUNK_TYPE_COPY:
imageStream.Seek(currentChunk.offset + relOff, SeekOrigin.Begin);
sector = new byte[SECTOR_SIZE];
imageStream.Read(sector, 0, sector.Length);
if(currentChunk.type == CHUNK_TYPE_COPY)
{
imageStream.Seek(currentChunk.offset + relOff, SeekOrigin.Begin);
sector = new byte[SECTOR_SIZE];
imageStream.Read(sector, 0, sector.Length);
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
sectorCache.Add(sectorAddress, sector);
return sector;
sectorCache.Add(sectorAddress, sector);
return sector;
}
throw new ImageNotSupportedException(string.Format("Unsupported chunk type 0x{0:X8} found",

View File

@@ -461,19 +461,17 @@ namespace DiscImageChef.DiscImages
bChnk.sector += bHdr.sectorStart;
bChnk.offset += bHdr.dataOffset;
// TODO: Handle comments
if(bChnk.type == CHUNK_TYPE_COMMNT) continue;
// TODO: Handle compressed chunks
if(bChnk.type == CHUNK_TYPE_KENCODE)
throw new
ImageNotSupportedException("Chunks compressed with KenCode are not yet supported.");
if(bChnk.type == CHUNK_TYPE_RLE)
throw new ImageNotSupportedException("Chunks compressed with RLE are not yet supported.");
if(bChnk.type == CHUNK_TYPE_LZH)
throw new ImageNotSupportedException("Chunks compressed with LZH are not yet supported.");
if(bChnk.type == CHUNK_TYPE_LZFSE)
throw new ImageNotSupportedException("Chunks compressed with lzfse are not yet supported.");
switch(bChnk.type) {
// TODO: Handle comments
case CHUNK_TYPE_COMMNT: continue;
// TODO: Handle compressed chunks
case CHUNK_TYPE_KENCODE:
throw new
ImageNotSupportedException("Chunks compressed with KenCode are not yet supported.");
case CHUNK_TYPE_RLE: throw new ImageNotSupportedException("Chunks compressed with RLE are not yet supported.");
case CHUNK_TYPE_LZH: throw new ImageNotSupportedException("Chunks compressed with LZH are not yet supported.");
case CHUNK_TYPE_LZFSE: throw new ImageNotSupportedException("Chunks compressed with lzfse are not yet supported.");
}
if(bChnk.type > CHUNK_TYPE_NOCOPY && bChnk.type < CHUNK_TYPE_COMMNT ||
bChnk.type > CHUNK_TYPE_LZFSE && bChnk.type < CHUNK_TYPE_END)
@@ -551,14 +549,17 @@ namespace DiscImageChef.DiscImages
MemoryStream cmpMs = new MemoryStream(cmpBuffer);
Stream decStream;
if(currentChunk.type == CHUNK_TYPE_ADC) decStream = new ADCStream(cmpMs, CompressionMode.Decompress);
else if(currentChunk.type == CHUNK_TYPE_ZLIB)
decStream = new Ionic.Zlib.ZlibStream(cmpMs, Ionic.Zlib.CompressionMode.Decompress);
else if(currentChunk.type == CHUNK_TYPE_BZIP)
decStream = new BZip2Stream(cmpMs, CompressionMode.Decompress);
else
throw new ImageNotSupportedException(string.Format("Unsupported chunk type 0x{0:X8} found",
currentChunk.type));
switch(currentChunk.type) {
case CHUNK_TYPE_ADC: decStream = new ADCStream(cmpMs, CompressionMode.Decompress);
break;
case CHUNK_TYPE_ZLIB: decStream = new Ionic.Zlib.ZlibStream(cmpMs, Ionic.Zlib.CompressionMode.Decompress);
break;
case CHUNK_TYPE_BZIP: decStream = new BZip2Stream(cmpMs, CompressionMode.Decompress);
break;
default:
throw new ImageNotSupportedException(string.Format("Unsupported chunk type 0x{0:X8} found",
currentChunk.type));
}
#if DEBUG
try
@@ -598,26 +599,24 @@ namespace DiscImageChef.DiscImages
return sector;
}
if(currentChunk.type == CHUNK_TYPE_NOCOPY || currentChunk.type == CHUNK_TYPE_ZERO)
{
sector = new byte[SECTOR_SIZE];
switch(currentChunk.type) {
case CHUNK_TYPE_NOCOPY:
case CHUNK_TYPE_ZERO:
sector = new byte[SECTOR_SIZE];
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
sectorCache.Add(sectorAddress, sector);
return sector;
}
sectorCache.Add(sectorAddress, sector);
return sector;
case CHUNK_TYPE_COPY:
imageStream.Seek((long)currentChunk.offset + relOff, SeekOrigin.Begin);
sector = new byte[SECTOR_SIZE];
imageStream.Read(sector, 0, sector.Length);
if(currentChunk.type == CHUNK_TYPE_COPY)
{
imageStream.Seek((long)currentChunk.offset + relOff, SeekOrigin.Begin);
sector = new byte[SECTOR_SIZE];
imageStream.Read(sector, 0, sector.Length);
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
sectorCache.Add(sectorAddress, sector);
return sector;
sectorCache.Add(sectorAddress, sector);
return sector;
}
throw new ImageNotSupportedException(string.Format("Unsupported chunk type 0x{0:X8} found",

View File

@@ -694,19 +694,24 @@ namespace DiscImageChef.DiscImages
MemoryStream sectorBmpMs = new MemoryStream();
foreach(ulong pt in sectorBitmapPointers)
if((pt & BAT_FLAGS_MASK) == SECTOR_BITMAP_NOT_PRESENT) sectorBmpMs.Write(new byte[1048576], 0, 1048576);
else if((pt & BAT_FLAGS_MASK) == SECTOR_BITMAP_PRESENT)
{
stream.Seek((long)((pt & BAT_FILE_OFFSET_MASK) * 1048576), SeekOrigin.Begin);
byte[] bmp = new byte[1048576];
stream.Read(bmp, 0, bmp.Length);
sectorBmpMs.Write(bmp, 0, bmp.Length);
switch(pt & BAT_FLAGS_MASK) {
case SECTOR_BITMAP_NOT_PRESENT: sectorBmpMs.Write(new byte[1048576], 0, 1048576);
break;
case SECTOR_BITMAP_PRESENT:
stream.Seek((long)((pt & BAT_FILE_OFFSET_MASK) * 1048576), SeekOrigin.Begin);
byte[] bmp = new byte[1048576];
stream.Read(bmp, 0, bmp.Length);
sectorBmpMs.Write(bmp, 0, bmp.Length);
break;
default:
if((pt & BAT_FLAGS_MASK) != 0)
throw new
ImageNotSupportedException(string
.Format("Unsupported sector bitmap block flags (0x{0:X16}) found, not proceeding.",
pt & BAT_FLAGS_MASK));
break;
}
else if((pt & BAT_FLAGS_MASK) != 0)
throw new
ImageNotSupportedException(string
.Format("Unsupported sector bitmap block flags (0x{0:X16}) found, not proceeding.",
pt & BAT_FLAGS_MASK));
sectorBitmap = sectorBmpMs.ToArray();
sectorBmpMs.Close();
@@ -835,11 +840,12 @@ namespace DiscImageChef.DiscImages
throw new ImageNotSupportedException(string.Format("Unknown flags (0x{0:X16}) set in block pointer",
blkPtr & BAT_RESERVED_MASK));
if((blkFlags & BAT_FLAGS_MASK) == PAYLOAD_BLOCK_NOT_PRESENT)
return hasParent ? parentImage.ReadSector(sectorAddress) : new byte[logicalSectorSize];
if((blkFlags & BAT_FLAGS_MASK) == PAYLOAD_BLOCK_UNDEFINED || (blkFlags & BAT_FLAGS_MASK) == PAYLOAD_BLOCK_ZERO ||
(blkFlags & BAT_FLAGS_MASK) == PAYLOAD_BLOCK_UNMAPPER) return new byte[logicalSectorSize];
switch(blkFlags & BAT_FLAGS_MASK) {
case PAYLOAD_BLOCK_NOT_PRESENT: return hasParent ? parentImage.ReadSector(sectorAddress) : new byte[logicalSectorSize];
case PAYLOAD_BLOCK_UNDEFINED:
case PAYLOAD_BLOCK_ZERO:
case PAYLOAD_BLOCK_UNMAPPER: return new byte[logicalSectorSize];
}
bool partialBlock;
partialBlock = !((blkFlags & BAT_FLAGS_MASK) == PAYLOAD_BLOCK_FULLY_PRESENT);

View File

@@ -739,28 +739,26 @@ namespace DiscImageChef.DiscImages
Stream dataStream;
if(currentExtent.Type == "ZERO")
{
sector = new byte[SECTOR_SIZE];
switch(currentExtent.Type) {
case "ZERO":
sector = new byte[SECTOR_SIZE];
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
sectorCache.Add(sectorAddress, sector);
return sector;
}
sectorCache.Add(sectorAddress, sector);
return sector;
case "FLAT":
case "VMFS":
dataStream = currentExtent.Filter.GetDataForkStream();
dataStream.Seek((long)((currentExtent.Offset + (sectorAddress - extentStartSector)) * SECTOR_SIZE),
SeekOrigin.Begin);
sector = new byte[SECTOR_SIZE];
dataStream.Read(sector, 0, sector.Length);
if(currentExtent.Type == "FLAT" || currentExtent.Type == "VMFS")
{
dataStream = currentExtent.Filter.GetDataForkStream();
dataStream.Seek((long)((currentExtent.Offset + (sectorAddress - extentStartSector)) * SECTOR_SIZE),
SeekOrigin.Begin);
sector = new byte[SECTOR_SIZE];
dataStream.Read(sector, 0, sector.Length);
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear();
sectorCache.Add(sectorAddress, sector);
return sector;
sectorCache.Add(sectorAddress, sector);
return sector;
}
ulong index = sectorAddress / grainSize;

View File

@@ -123,70 +123,77 @@ namespace DiscImageChef.DiscImages
stream.Seek(0, SeekOrigin.Begin);
extension = Path.GetExtension(imageFilter.GetFilename()).ToLower();
if(extension == ".iso" && imageFilter.GetDataForkLength() % 2048 == 0) ImageInfo.SectorSize = 2048;
else if(extension == ".d81" && imageFilter.GetDataForkLength() == 819200) ImageInfo.SectorSize = 256;
else if((extension == ".adf" || extension == ".adl" || extension == ".ssd" || extension == ".dsd") &&
(imageFilter.GetDataForkLength() == 163840 || imageFilter.GetDataForkLength() == 327680 ||
imageFilter.GetDataForkLength() == 655360)) ImageInfo.SectorSize = 256;
else if((extension == ".adf" || extension == ".adl") && imageFilter.GetDataForkLength() == 819200)
ImageInfo.SectorSize = 1024;
else
switch(imageFilter.GetDataForkLength())
{
case 242944:
case 256256:
case 495872:
case 92160:
case 133120:
ImageInfo.SectorSize = 128;
break;
case 116480:
case 287488: // T0S0 = 128bps
case 988416: // T0S0 = 128bps
case 995072: // T0S0 = 128bps, T0S1 = 256bps
case 1021696: // T0S0 = 128bps, T0S1 = 256bps
case 232960:
case 143360:
case 286720:
case 512512:
case 102400:
case 204800:
case 655360:
case 80384: // T0S0 = 128bps
case 325632: // T0S0 = 128bps, T0S1 = 256bps
case 653312: // T0S0 = 128bps, T0S1 = 256bps
#region Commodore
case 174848:
case 175531:
case 196608:
case 197376:
case 349696:
case 351062:
case 822400:
#endregion Commodore
ImageInfo.SectorSize = 256;
break;
case 81664:
ImageInfo.SectorSize = 319;
break;
case 306432: // T0S0 = 128bps
case 1146624: // T0S0 = 128bps, T0S1 = 256bps
case 1177344: // T0S0 = 128bps, T0S1 = 256bps
ImageInfo.SectorSize = 512;
break;
case 1222400: // T0S0 = 128bps, T0S1 = 256bps
case 1304320: // T0S0 = 128bps, T0S1 = 256bps
case 1255168: // T0S0 = 128bps, T0S1 = 256bps
case 1261568:
case 1638400:
switch(extension) {
case ".iso" when imageFilter.GetDataForkLength() % 2048 == 0: ImageInfo.SectorSize = 2048;
break;
case ".d81" when imageFilter.GetDataForkLength() == 819200: ImageInfo.SectorSize = 256;
break;
default:
if((extension == ".adf" || extension == ".adl" || extension == ".ssd" || extension == ".dsd") &&
(imageFilter.GetDataForkLength() == 163840 || imageFilter.GetDataForkLength() == 327680 ||
imageFilter.GetDataForkLength() == 655360)) ImageInfo.SectorSize = 256;
else if((extension == ".adf" || extension == ".adl") && imageFilter.GetDataForkLength() == 819200)
ImageInfo.SectorSize = 1024;
break;
default:
ImageInfo.SectorSize = 512;
break;
}
else
switch(imageFilter.GetDataForkLength())
{
case 242944:
case 256256:
case 495872:
case 92160:
case 133120:
ImageInfo.SectorSize = 128;
break;
case 116480:
case 287488: // T0S0 = 128bps
case 988416: // T0S0 = 128bps
case 995072: // T0S0 = 128bps, T0S1 = 256bps
case 1021696: // T0S0 = 128bps, T0S1 = 256bps
case 232960:
case 143360:
case 286720:
case 512512:
case 102400:
case 204800:
case 655360:
case 80384: // T0S0 = 128bps
case 325632: // T0S0 = 128bps, T0S1 = 256bps
case 653312: // T0S0 = 128bps, T0S1 = 256bps
#region Commodore
case 174848:
case 175531:
case 196608:
case 197376:
case 349696:
case 351062:
case 822400:
#endregion Commodore
ImageInfo.SectorSize = 256;
break;
case 81664:
ImageInfo.SectorSize = 319;
break;
case 306432: // T0S0 = 128bps
case 1146624: // T0S0 = 128bps, T0S1 = 256bps
case 1177344: // T0S0 = 128bps, T0S1 = 256bps
ImageInfo.SectorSize = 512;
break;
case 1222400: // T0S0 = 128bps, T0S1 = 256bps
case 1304320: // T0S0 = 128bps, T0S1 = 256bps
case 1255168: // T0S0 = 128bps, T0S1 = 256bps
case 1261568:
case 1638400:
ImageInfo.SectorSize = 1024;
break;
default:
ImageInfo.SectorSize = 512;
break;
}
break;
}
ImageInfo.ImageSize = (ulong)imageFilter.GetDataForkLength();
ImageInfo.ImageCreationTime = imageFilter.GetCreationTime();