diff --git a/DiscImageChef.DiscImages/Alcohol120.cs b/DiscImageChef.DiscImages/Alcohol120.cs index 2482f5c0..6b04b538 100644 --- a/DiscImageChef.DiscImages/Alcohol120.cs +++ b/DiscImageChef.DiscImages/Alcohol120.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Runtime.InteropServices; @@ -124,6 +125,7 @@ namespace DiscImageChef.DiscImages #endregion Internal Structures #region Internal enumerations + [SuppressMessage("ReSharper", "InconsistentNaming")] enum AlcoholMediumType : ushort { CD = 0x00, @@ -133,6 +135,7 @@ namespace DiscImageChef.DiscImages DVDR = 0x12 } + [SuppressMessage("ReSharper", "InconsistentNaming")] enum AlcoholTrackMode : byte { NoData = 0x00, @@ -175,27 +178,29 @@ namespace DiscImageChef.DiscImages { Name = "Alcohol 120% Media Descriptor Structure"; PluginUuid = new Guid("A78FBEBA-0307-4915-BDE3-B8A3B57F843F"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -206,10 +211,9 @@ namespace DiscImageChef.DiscImages byte[] hdr = new byte[88]; stream.Read(hdr, 0, 88); - AlcoholHeader header; IntPtr hdrPtr = Marshal.AllocHGlobal(88); Marshal.Copy(hdr, 0, hdrPtr, 88); - header = (AlcoholHeader)Marshal.PtrToStructure(hdrPtr, typeof(AlcoholHeader)); + AlcoholHeader header = (AlcoholHeader)Marshal.PtrToStructure(hdrPtr, typeof(AlcoholHeader)); Marshal.FreeHGlobal(hdrPtr); return header.signature == "MEDIA DESCRIPTO"; @@ -224,10 +228,9 @@ namespace DiscImageChef.DiscImages isDvd = false; byte[] hdr = new byte[88]; stream.Read(hdr, 0, 88); - AlcoholHeader header; IntPtr hdrPtr = Marshal.AllocHGlobal(88); Marshal.Copy(hdr, 0, hdrPtr, 88); - header = (AlcoholHeader)Marshal.PtrToStructure(hdrPtr, typeof(AlcoholHeader)); + AlcoholHeader header = (AlcoholHeader)Marshal.PtrToStructure(hdrPtr, typeof(AlcoholHeader)); Marshal.FreeHGlobal(hdrPtr); DicConsole.DebugWriteLine("Alcohol 120% plugin", "header.signature = {0}", header.signature); @@ -298,15 +301,11 @@ namespace DiscImageChef.DiscImages Dictionary sesToc = new Dictionary(); for(int i = 0; i < session.allBlocks; i++) { - byte[] trkHdr; - AlcoholTrack track; - IntPtr trkPtr; - - trkHdr = new byte[80]; + byte[] trkHdr = new byte[80]; stream.Read(trkHdr, 0, 80); - trkPtr = Marshal.AllocHGlobal(80); + IntPtr trkPtr = Marshal.AllocHGlobal(80); Marshal.Copy(trkHdr, 0, trkPtr, 80); - track = (AlcoholTrack)Marshal.PtrToStructure(trkPtr, typeof(AlcoholTrack)); + AlcoholTrack track = (AlcoholTrack)Marshal.PtrToStructure(trkPtr, typeof(AlcoholTrack)); Marshal.FreeHGlobal(trkPtr); DicConsole.DebugWriteLine("Alcohol 120% plugin", "session[{2}].track[{1}].mode = {0}", track.mode, @@ -384,8 +383,7 @@ namespace DiscImageChef.DiscImages } else if(isDvd) { - AlcoholTrackExtra extra = new AlcoholTrackExtra(); - extra.sectors = track.extraOffset; + AlcoholTrackExtra extra = new AlcoholTrackExtra {sectors = track.extraOffset}; alcTrackExtras.Add(track.point, extra); } @@ -412,13 +410,10 @@ namespace DiscImageChef.DiscImages if(alcFooter.filenameOffset > 0) { stream.Seek(alcFooter.filenameOffset, SeekOrigin.Begin); - byte[] filename; - if(header.dpmOffset == 0) filename = new byte[stream.Length - stream.Position]; - else filename = new byte[header.dpmOffset - stream.Position]; + byte[] filename = header.dpmOffset == 0 ? new byte[stream.Length - stream.Position] : new byte[header.dpmOffset - stream.Position]; stream.Read(filename, 0, filename.Length); - if(alcFooter.widechar == 1) alcFile = Encoding.Unicode.GetString(filename); - else alcFile = Encoding.Default.GetString(filename); + alcFile = alcFooter.widechar == 1 ? Encoding.Unicode.GetString(filename) : Encoding.Default.GetString(filename); DicConsole.DebugWriteLine("Alcohol 120% plugin", "footer.filename = {0}", alcFile); } @@ -485,8 +480,7 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.DVDPRWDL; break; case DiskCategory.DVDR: - if(pfi0.Value.PartVersion == 6) ImageInfo.MediaType = MediaType.DVDRDL; - else ImageInfo.MediaType = MediaType.DVDR; + ImageInfo.MediaType = pfi0.Value.PartVersion == 6 ? MediaType.DVDRDL : MediaType.DVDR; break; case DiskCategory.DVDRAM: ImageInfo.MediaType = MediaType.DVDRAM; @@ -495,8 +489,7 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.DVDROM; break; case DiskCategory.DVDRW: - if(pfi0.Value.PartVersion == 3) ImageInfo.MediaType = MediaType.DVDRWDL; - else ImageInfo.MediaType = MediaType.DVDRW; + ImageInfo.MediaType = pfi0.Value.PartVersion == 3 ? MediaType.DVDRWDL : MediaType.DVDRW; break; case DiskCategory.HDDVDR: ImageInfo.MediaType = MediaType.HDDVDR; @@ -511,9 +504,7 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.HDDVDRW; break; case DiskCategory.Nintendo: - if(pfi0.Value.DiscSize == DVDSize.Eighty) - ImageInfo.MediaType = MediaType.GOD; - else ImageInfo.MediaType = MediaType.WOD; + ImageInfo.MediaType = pfi0.Value.DiscSize == DVDSize.Eighty ? MediaType.GOD : MediaType.WOD; break; case DiskCategory.UMD: ImageInfo.MediaType = MediaType.UMD; @@ -536,21 +527,21 @@ namespace DiscImageChef.DiscImages bool firstdata = false; bool audio = false; - foreach(AlcoholTrack _track in alcTracks.Values) + foreach(AlcoholTrack alcoholTrack in alcTracks.Values) { // First track is audio - firstaudio |= _track.point == 1 && _track.mode == AlcoholTrackMode.Audio; + firstaudio |= alcoholTrack.point == 1 && alcoholTrack.mode == AlcoholTrackMode.Audio; // First track is data - firstdata |= _track.point == 1 && _track.mode != AlcoholTrackMode.Audio; + firstdata |= alcoholTrack.point == 1 && alcoholTrack.mode != AlcoholTrackMode.Audio; // Any non first track is data - data |= _track.point != 1 && _track.mode != AlcoholTrackMode.Audio; + data |= alcoholTrack.point != 1 && alcoholTrack.mode != AlcoholTrackMode.Audio; // Any non first track is audio - audio |= _track.point != 1 && _track.mode == AlcoholTrackMode.Audio; + audio |= alcoholTrack.point != 1 && alcoholTrack.mode == AlcoholTrackMode.Audio; - switch(_track.mode) + switch(alcoholTrack.mode) { case AlcoholTrackMode.Mode2: case AlcoholTrackMode.Mode2F1: @@ -573,18 +564,15 @@ namespace DiscImageChef.DiscImages foreach(AlcoholSession alcSes in alcSessions.Values) { Session session = new Session(); - AlcoholTrack stTrk; - AlcoholTrack enTrk; - AlcoholTrackExtra enTrkExt; - if(!alcTracks.TryGetValue(alcSes.firstTrack, out stTrk)) break; - if(!alcTracks.TryGetValue(alcSes.lastTrack, out enTrk)) break; - if(!alcTrackExtras.TryGetValue(alcSes.lastTrack, out enTrkExt)) break; + if(!alcTracks.TryGetValue(alcSes.firstTrack, out AlcoholTrack startingTrack)) break; + if(!alcTracks.TryGetValue(alcSes.lastTrack, out AlcoholTrack endingTrack)) break; + if(!alcTrackExtras.TryGetValue(alcSes.lastTrack, out AlcoholTrackExtra endingTrackExtra)) break; - session.StartSector = stTrk.startLba; + session.StartSector = startingTrack.startLba; session.StartTrack = alcSes.firstTrack; session.SessionSequence = alcSes.sessionSequence; - session.EndSector = enTrk.startLba + enTrkExt.sectors - 1; + session.EndSector = endingTrack.startLba + endingTrackExtra.sectors - 1; session.EndTrack = alcSes.lastTrack; sessions.Add(session); @@ -592,26 +580,27 @@ namespace DiscImageChef.DiscImages partitions = new List(); offsetmap = new Dictionary(); - ulong byte_offset = 0; + ulong byteOffset = 0; foreach(AlcoholTrack trk in alcTracks.Values) { - AlcoholTrackExtra extra; - if(alcTrackExtras.TryGetValue(trk.point, out extra)) + if(alcTrackExtras.TryGetValue(trk.point, out AlcoholTrackExtra extra)) { - Partition partition = new Partition(); + Partition partition = new Partition + { + Description = $"Track {trk.point}.", + Start = trk.startLba, + Size = extra.sectors * trk.sectorSize, + Length = extra.sectors, + Sequence = trk.point, + Offset = byteOffset, + Type = trk.mode.ToString() + }; - partition.Description = $"Track {trk.point}."; - partition.Start = trk.startLba; - partition.Size = extra.sectors * trk.sectorSize; - partition.Length = extra.sectors; - partition.Sequence = trk.point; - partition.Offset = byte_offset; - partition.Type = trk.mode.ToString(); partitions.Add(partition); ImageInfo.Sectors += extra.sectors; - byte_offset += partition.Size; + byteOffset += partition.Size; } if(!offsetmap.ContainsKey(trk.point)) offsetmap.Add(trk.point, trk.startLba); @@ -830,9 +819,7 @@ namespace DiscImageChef.DiscImages if(sectorAddress >= kvp.Value) foreach(AlcoholTrack track in alcTracks.Values) { - AlcoholTrackExtra extra; - - if(track.point != kvp.Key || !alcTrackExtras.TryGetValue(track.point, out extra)) continue; + if(track.point != kvp.Key || !alcTrackExtras.TryGetValue(track.point, out AlcoholTrackExtra extra)) continue; if(sectorAddress - kvp.Value < extra.sectors) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); @@ -847,9 +834,7 @@ namespace DiscImageChef.DiscImages if(sectorAddress >= kvp.Value) foreach(AlcoholTrack track in alcTracks.Values) { - AlcoholTrackExtra extra; - - if(track.point != kvp.Key || !alcTrackExtras.TryGetValue(track.point, out extra)) continue; + if(track.point != kvp.Key || !alcTrackExtras.TryGetValue(track.point, out AlcoholTrackExtra extra)) continue; if(sectorAddress - kvp.Value < extra.sectors) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); @@ -860,95 +845,91 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { - AlcoholTrack _track; - AlcoholTrackExtra _extra; - - if(!alcTracks.TryGetValue((int)track, out _track) || !alcTrackExtras.TryGetValue((int)track, out _extra)) + if(!alcTracks.TryGetValue((int)track, out AlcoholTrack alcTrack) || !alcTrackExtras.TryGetValue((int)track, out AlcoholTrackExtra alcExtra)) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _extra.sectors) + if(length + sectorAddress > alcExtra.sectors) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_extra.sectors}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({alcExtra.sectors}), won't cross tracks"); - uint sector_offset; - uint sector_size; - uint sector_skip; + uint sectorOffset; + uint sectorSize; + uint sectorSkip; - switch(_track.mode) + switch(alcTrack.mode) { case AlcoholTrackMode.Mode1: { - sector_offset = 16; - sector_size = 2048; - sector_skip = 288; + sectorOffset = 16; + sectorSize = 2048; + sectorSkip = 288; break; } case AlcoholTrackMode.Mode2: { - sector_offset = 16; - sector_size = 2336; - sector_skip = 0; + sectorOffset = 16; + sectorSize = 2336; + sectorSkip = 0; break; } case AlcoholTrackMode.Mode2F1: case AlcoholTrackMode.Mode2F1Alt: { - sector_offset = 24; - sector_size = 2048; - sector_skip = 280; + sectorOffset = 24; + sectorSize = 2048; + sectorSkip = 280; break; } case AlcoholTrackMode.Mode2F2: { - sector_offset = 24; - sector_size = 2324; - sector_skip = 4; + sectorOffset = 24; + sectorSize = 2324; + sectorSkip = 4; break; } case AlcoholTrackMode.Audio: { - sector_offset = 0; - sector_size = 2352; - sector_skip = 0; + sectorOffset = 0; + sectorSize = 2352; + sectorSkip = 0; break; } case AlcoholTrackMode.DVD: { - sector_offset = 0; - sector_size = 2048; - sector_skip = 0; + sectorOffset = 0; + sectorSize = 2048; + sectorSkip = 0; break; } default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - switch(_track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.None: - sector_skip += 0; + sectorSkip += 0; break; case AlcoholSubchannelMode.Interleaved: - sector_skip += 96; + sectorSkip += 96; break; default: throw new FeatureSupportedButNotImplementedImageException("Unsupported subchannel type"); } - byte[] buffer = new byte[sector_size * length]; + byte[] buffer = new byte[sectorSize * length]; imageStream = alcImage.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.startOffset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip)), + .Seek((long)alcTrack.startOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); - if(sector_offset == 0 && sector_skip == 0) buffer = br.ReadBytes((int)(sector_size * length)); + if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; - br.BaseStream.Seek(sector_offset, SeekOrigin.Current); - sector = br.ReadBytes((int)sector_size); - br.BaseStream.Seek(sector_skip, SeekOrigin.Current); - Array.Copy(sector, 0, buffer, i * sector_size, sector_size); + br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); + byte[] sector = br.ReadBytes((int)sectorSize); + br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); + Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } return buffer; @@ -956,21 +937,18 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { - AlcoholTrack _track; - AlcoholTrackExtra _extra; - - if(!alcTracks.TryGetValue((int)track, out _track) || !alcTrackExtras.TryGetValue((int)track, out _extra)) + if(!alcTracks.TryGetValue((int)track, out AlcoholTrack alcTrack) || !alcTrackExtras.TryGetValue((int)track, out AlcoholTrackExtra alcExtra)) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _extra.sectors) + if(length + sectorAddress > alcExtra.sectors) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length}) than present in track ({_extra.sectors}), won't cross tracks"); + $"Requested more sectors ({length}) than present in track ({alcExtra.sectors}), won't cross tracks"); - uint sector_offset; - uint sector_size; - uint sector_skip; + uint sectorOffset; + uint sectorSize; + uint sectorSkip; - if(_track.mode == AlcoholTrackMode.DVD) + if(alcTrack.mode == AlcoholTrackMode.DVD) throw new ArgumentException("Unsupported tag requested", nameof(tag)); switch(tag) @@ -983,68 +961,68 @@ namespace DiscImageChef.DiscImages case SectorTagType.CdSectorSubchannel: case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSync: break; - case SectorTagType.CdTrackFlags: return new[] {(byte)(_track.adrCtl & 0x0F)}; + case SectorTagType.CdTrackFlags: return new[] {(byte)(alcTrack.adrCtl & 0x0F)}; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } - switch(_track.mode) + switch(alcTrack.mode) { case AlcoholTrackMode.Mode1: switch(tag) { case SectorTagType.CdSectorSync: { - sector_offset = 0; - sector_size = 12; - sector_skip = 2340; + sectorOffset = 0; + sectorSize = 12; + sectorSkip = 2340; break; } case SectorTagType.CdSectorHeader: { - sector_offset = 12; - sector_size = 4; - sector_skip = 2336; + sectorOffset = 12; + sectorSize = 4; + sectorSkip = 2336; break; } case SectorTagType.CdSectorSubHeader: throw new ArgumentException("Unsupported tag requested for this track", nameof(tag)); case SectorTagType.CdSectorEcc: { - sector_offset = 2076; - sector_size = 276; - sector_skip = 0; + sectorOffset = 2076; + sectorSize = 276; + sectorSkip = 0; break; } case SectorTagType.CdSectorEccP: { - sector_offset = 2076; - sector_size = 172; - sector_skip = 104; + sectorOffset = 2076; + sectorSize = 172; + sectorSkip = 104; break; } case SectorTagType.CdSectorEccQ: { - sector_offset = 2248; - sector_size = 104; - sector_skip = 0; + sectorOffset = 2248; + sectorSize = 104; + sectorSkip = 0; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2064; - sector_size = 4; - sector_skip = 284; + sectorOffset = 2064; + sectorSize = 4; + sectorSkip = 284; break; } case SectorTagType.CdSectorSubchannel: { - switch(_track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.Interleaved: - sector_offset = 2352; - sector_size = 96; - sector_skip = 0; + sectorOffset = 2352; + sectorSize = 96; + sectorSkip = 0; break; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } @@ -1067,27 +1045,27 @@ namespace DiscImageChef.DiscImages throw new ArgumentException("Unsupported tag requested for this track", nameof(tag)); case SectorTagType.CdSectorSubHeader: { - sector_offset = 0; - sector_size = 8; - sector_skip = 2328; + sectorOffset = 0; + sectorSize = 8; + sectorSkip = 2328; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2332; - sector_size = 4; - sector_skip = 0; + sectorOffset = 2332; + sectorSize = 4; + sectorSkip = 0; break; } case SectorTagType.CdSectorSubchannel: { - switch(_track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.Interleaved: - sector_offset = 2352; - sector_size = 96; - sector_skip = 0; + sectorOffset = 2352; + sectorSize = 96; + sectorSkip = 0; break; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } @@ -1105,62 +1083,62 @@ namespace DiscImageChef.DiscImages { case SectorTagType.CdSectorSync: { - sector_offset = 0; - sector_size = 12; - sector_skip = 2340; + sectorOffset = 0; + sectorSize = 12; + sectorSkip = 2340; break; } case SectorTagType.CdSectorHeader: { - sector_offset = 12; - sector_size = 4; - sector_skip = 2336; + sectorOffset = 12; + sectorSize = 4; + sectorSkip = 2336; break; } case SectorTagType.CdSectorSubHeader: { - sector_offset = 16; - sector_size = 8; - sector_skip = 2328; + sectorOffset = 16; + sectorSize = 8; + sectorSkip = 2328; break; } case SectorTagType.CdSectorEcc: { - sector_offset = 2076; - sector_size = 276; - sector_skip = 0; + sectorOffset = 2076; + sectorSize = 276; + sectorSkip = 0; break; } case SectorTagType.CdSectorEccP: { - sector_offset = 2076; - sector_size = 172; - sector_skip = 104; + sectorOffset = 2076; + sectorSize = 172; + sectorSkip = 104; break; } case SectorTagType.CdSectorEccQ: { - sector_offset = 2248; - sector_size = 104; - sector_skip = 0; + sectorOffset = 2248; + sectorSize = 104; + sectorSkip = 0; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2072; - sector_size = 4; - sector_skip = 276; + sectorOffset = 2072; + sectorSize = 4; + sectorSkip = 276; break; } case SectorTagType.CdSectorSubchannel: { - switch(_track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.Interleaved: - sector_offset = 2352; - sector_size = 96; - sector_skip = 0; + sectorOffset = 2352; + sectorSize = 96; + sectorSkip = 0; break; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } @@ -1176,41 +1154,41 @@ namespace DiscImageChef.DiscImages { case SectorTagType.CdSectorSync: { - sector_offset = 0; - sector_size = 12; - sector_skip = 2340; + sectorOffset = 0; + sectorSize = 12; + sectorSkip = 2340; break; } case SectorTagType.CdSectorHeader: { - sector_offset = 12; - sector_size = 4; - sector_skip = 2336; + sectorOffset = 12; + sectorSize = 4; + sectorSkip = 2336; break; } case SectorTagType.CdSectorSubHeader: { - sector_offset = 16; - sector_size = 8; - sector_skip = 2328; + sectorOffset = 16; + sectorSize = 8; + sectorSkip = 2328; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2348; - sector_size = 4; - sector_skip = 0; + sectorOffset = 2348; + sectorSize = 4; + sectorSkip = 0; break; } case SectorTagType.CdSectorSubchannel: { - switch(_track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.Interleaved: - sector_offset = 2352; - sector_size = 96; - sector_skip = 0; + sectorOffset = 2352; + sectorSize = 96; + sectorSkip = 0; break; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } @@ -1227,13 +1205,13 @@ namespace DiscImageChef.DiscImages { case SectorTagType.CdSectorSubchannel: { - switch(_track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.Interleaved: - sector_offset = 2352; - sector_size = 96; - sector_skip = 0; + sectorOffset = 2352; + sectorSize = 96; + sectorSkip = 0; break; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } @@ -1248,33 +1226,32 @@ namespace DiscImageChef.DiscImages default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - switch(_track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.None: - sector_skip += 0; + sectorSkip += 0; break; case AlcoholSubchannelMode.Interleaved: - if(tag != SectorTagType.CdSectorSubchannel) sector_skip += 96; + if(tag != SectorTagType.CdSectorSubchannel) sectorSkip += 96; break; default: throw new FeatureSupportedButNotImplementedImageException("Unsupported subchannel type"); } - byte[] buffer = new byte[sector_size * length]; + byte[] buffer = new byte[sectorSize * length]; imageStream = alcImage.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.startOffset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip)), + .Seek((long)alcTrack.startOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); - if(sector_offset == 0 && sector_skip == 0) buffer = br.ReadBytes((int)(sector_size * length)); + if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; - br.BaseStream.Seek(sector_offset, SeekOrigin.Current); - sector = br.ReadBytes((int)sector_size); - br.BaseStream.Seek(sector_skip, SeekOrigin.Current); - Array.Copy(sector, 0, buffer, i * sector_size, sector_size); + br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); + byte[] sector = br.ReadBytes((int)sectorSize); + br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); + Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } return buffer; @@ -1294,13 +1271,11 @@ namespace DiscImageChef.DiscImages { foreach(KeyValuePair kvp in offsetmap) if(sectorAddress >= kvp.Value) - foreach(AlcoholTrack track in alcTracks.Values) + foreach(AlcoholTrack alcTrack in alcTracks.Values) { - AlcoholTrackExtra extra; + if(alcTrack.point != kvp.Key || !alcTrackExtras.TryGetValue(alcTrack.point, out AlcoholTrackExtra alcExtra)) continue; - if(track.point != kvp.Key || !alcTrackExtras.TryGetValue(track.point, out extra)) continue; - - if(sectorAddress - kvp.Value < extra.sectors) + if(sectorAddress - kvp.Value < alcExtra.sectors) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); } @@ -1309,21 +1284,18 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { - AlcoholTrack _track; - AlcoholTrackExtra _extra; - - if(!alcTracks.TryGetValue((int)track, out _track) || !alcTrackExtras.TryGetValue((int)track, out _extra)) + if(!alcTracks.TryGetValue((int)track, out AlcoholTrack alcTrack) || !alcTrackExtras.TryGetValue((int)track, out AlcoholTrackExtra alcExtra)) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _extra.sectors) + if(length + sectorAddress > alcExtra.sectors) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length}) than present in track ({_extra.sectors}), won't cross tracks"); + $"Requested more sectors ({length}) than present in track ({alcExtra.sectors}), won't cross tracks"); - uint sector_offset; - uint sector_size; - uint sector_skip; + uint sectorOffset; + uint sectorSize; + uint sectorSkip; - switch(_track.mode) + switch(alcTrack.mode) { case AlcoholTrackMode.Mode1: case AlcoholTrackMode.Mode2: @@ -1333,22 +1305,20 @@ namespace DiscImageChef.DiscImages case AlcoholTrackMode.Audio: case AlcoholTrackMode.DVD: { - sector_offset = 0; - sector_size = _track.sectorSize; - sector_skip = 0; + sectorOffset = 0; + sectorSize = alcTrack.sectorSize; + sectorSkip = 0; break; } default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - byte[] buffer; - imageStream = alcImage.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.startOffset + (long)(sectorAddress * (sector_offset + sector_size + sector_skip)), + .Seek((long)alcTrack.startOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); - buffer = br.ReadBytes((int)(sector_size * length)); + byte[] buffer = br.ReadBytes((int)(sectorSize * length)); return buffer; } @@ -1382,44 +1352,44 @@ namespace DiscImageChef.DiscImages { List tracks = new List(); - foreach(AlcoholTrack track in alcTracks.Values) + foreach(AlcoholTrack alcTrack in alcTracks.Values) { - ushort sessionNo = (from session in sessions where track.point >= session.StartTrack || track.point <= session.EndTrack select session.SessionSequence).FirstOrDefault(); + ushort sessionNo = (from session in sessions where alcTrack.point >= session.StartTrack || alcTrack.point <= session.EndTrack select session.SessionSequence).FirstOrDefault(); - AlcoholTrackExtra extra; - if(!alcTrackExtras.TryGetValue(track.point, out extra)) continue; + if(!alcTrackExtras.TryGetValue(alcTrack.point, out AlcoholTrackExtra alcExtra)) continue; - Track _track = new Track(); + Track dicTrack = new Track + { + Indexes = new Dictionary {{1, alcTrack.startLba}}, + TrackStartSector = alcTrack.startLba, + TrackEndSector = alcExtra.sectors - 1, + TrackPregap = alcExtra.pregap, + TrackSession = sessionNo, + TrackSequence = alcTrack.point, + TrackType = AlcoholTrackTypeToTrackType(alcTrack.mode), + TrackFilter = alcImage, + TrackFile = alcImage.GetFilename(), + TrackFileOffset = alcTrack.startOffset, + TrackFileType = "BINARY", + TrackRawBytesPerSector = alcTrack.sectorSize, + TrackBytesPerSector = AlcoholTrackModeToCookedBytesPerSector(alcTrack.mode) + }; - _track.Indexes = new Dictionary(); - _track.Indexes.Add(1, track.startLba); - _track.TrackStartSector = track.startLba; - _track.TrackEndSector = extra.sectors - 1; - _track.TrackPregap = extra.pregap; - _track.TrackSession = sessionNo; - _track.TrackSequence = track.point; - _track.TrackType = AlcoholTrackTypeToTrackType(track.mode); - _track.TrackFilter = alcImage; - _track.TrackFile = alcImage.GetFilename(); - _track.TrackFileOffset = track.startOffset; - _track.TrackFileType = "BINARY"; - _track.TrackRawBytesPerSector = track.sectorSize; - _track.TrackBytesPerSector = AlcoholTrackModeToCookedBytesPerSector(track.mode); - switch(track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.Interleaved: - _track.TrackSubchannelFilter = alcImage; - _track.TrackSubchannelFile = alcImage.GetFilename(); - _track.TrackSubchannelOffset = track.startOffset; - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; - _track.TrackRawBytesPerSector += 96; + dicTrack.TrackSubchannelFilter = alcImage; + dicTrack.TrackSubchannelFile = alcImage.GetFilename(); + dicTrack.TrackSubchannelOffset = alcTrack.startOffset; + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackRawBytesPerSector += 96; break; case AlcoholSubchannelMode.None: - _track.TrackSubchannelType = TrackSubchannelType.None; + dicTrack.TrackSubchannelType = TrackSubchannelType.None; break; } - tracks.Add(_track); + tracks.Add(dicTrack); } return tracks; @@ -1436,44 +1406,44 @@ namespace DiscImageChef.DiscImages { List tracks = new List(); - foreach(AlcoholTrack track in alcTracks.Values) + foreach(AlcoholTrack alcTrack in alcTracks.Values) { - ushort sessionNo = (from ses in sessions where track.point >= ses.StartTrack || track.point <= ses.EndTrack select ses.SessionSequence).FirstOrDefault(); + ushort sessionNo = (from ses in sessions where alcTrack.point >= ses.StartTrack || alcTrack.point <= ses.EndTrack select ses.SessionSequence).FirstOrDefault(); - AlcoholTrackExtra extra; - if(!alcTrackExtras.TryGetValue(track.point, out extra) || session != sessionNo) continue; + if(!alcTrackExtras.TryGetValue(alcTrack.point, out AlcoholTrackExtra alcExtra) || session != sessionNo) continue; - Track _track = new Track(); + Track dicTrack = new Track + { + Indexes = new Dictionary {{1, alcTrack.startLba}}, + TrackStartSector = alcTrack.startLba, + TrackEndSector = alcExtra.sectors - 1, + TrackPregap = alcExtra.pregap, + TrackSession = sessionNo, + TrackSequence = alcTrack.point, + TrackType = AlcoholTrackTypeToTrackType(alcTrack.mode), + TrackFilter = alcImage, + TrackFile = alcImage.GetFilename(), + TrackFileOffset = alcTrack.startOffset, + TrackFileType = "BINARY", + TrackRawBytesPerSector = alcTrack.sectorSize, + TrackBytesPerSector = AlcoholTrackModeToCookedBytesPerSector(alcTrack.mode) + }; - _track.Indexes = new Dictionary(); - _track.Indexes.Add(1, track.startLba); - _track.TrackStartSector = track.startLba; - _track.TrackEndSector = extra.sectors - 1; - _track.TrackPregap = extra.pregap; - _track.TrackSession = sessionNo; - _track.TrackSequence = track.point; - _track.TrackType = AlcoholTrackTypeToTrackType(track.mode); - _track.TrackFilter = alcImage; - _track.TrackFile = alcImage.GetFilename(); - _track.TrackFileOffset = track.startOffset; - _track.TrackFileType = "BINARY"; - _track.TrackRawBytesPerSector = track.sectorSize; - _track.TrackBytesPerSector = AlcoholTrackModeToCookedBytesPerSector(track.mode); - switch(track.subMode) + switch(alcTrack.subMode) { case AlcoholSubchannelMode.Interleaved: - _track.TrackSubchannelFilter = alcImage; - _track.TrackSubchannelFile = alcImage.GetFilename(); - _track.TrackSubchannelOffset = track.startOffset; - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; - _track.TrackRawBytesPerSector += 96; + dicTrack.TrackSubchannelFilter = alcImage; + dicTrack.TrackSubchannelFile = alcImage.GetFilename(); + dicTrack.TrackSubchannelOffset = alcTrack.startOffset; + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackRawBytesPerSector += 96; break; case AlcoholSubchannelMode.None: - _track.TrackSubchannelType = TrackSubchannelType.None; + dicTrack.TrackSubchannelType = TrackSubchannelType.None; break; } - tracks.Add(_track); + tracks.Add(dicTrack); } return tracks; @@ -1522,9 +1492,8 @@ namespace DiscImageChef.DiscImages } if(unknownLbas.Count > 0) return null; - if(failingLbas.Count > 0) return false; - return true; + return failingLbas.Count <= 0; } public override bool? VerifySectors(ulong sectorAddress, uint length, uint track, out List failingLbas, diff --git a/DiscImageChef.DiscImages/Anex86.cs b/DiscImageChef.DiscImages/Anex86.cs index a9f74804..016c2fae 100644 --- a/DiscImageChef.DiscImages/Anex86.cs +++ b/DiscImageChef.DiscImages/Anex86.cs @@ -151,6 +151,7 @@ namespace DiscImageChef.DiscImages case 2: ImageInfo.MediaType = MediaType.DOS_525_DS_DD_8; break; } + break; case 9: switch(fdihdr.heads) { @@ -159,6 +160,7 @@ namespace DiscImageChef.DiscImages case 2: ImageInfo.MediaType = MediaType.DOS_525_DS_DD_9; break; } + break; } @@ -236,6 +238,7 @@ namespace DiscImageChef.DiscImages case 2: ImageInfo.MediaType = MediaType.NEC_525_DS; break; } + break; } @@ -250,6 +253,7 @@ namespace DiscImageChef.DiscImages case 2: ImageInfo.MediaType = MediaType.DOS_35_DS_DD_8; break; } + break; case 9: switch(fdihdr.heads) { @@ -258,6 +262,7 @@ namespace DiscImageChef.DiscImages 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; diff --git a/DiscImageChef.DiscImages/Apple2MG.cs b/DiscImageChef.DiscImages/Apple2MG.cs index 87ef9baa..18dedbe6 100644 --- a/DiscImageChef.DiscImages/Apple2MG.cs +++ b/DiscImageChef.DiscImages/Apple2MG.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Text; using DiscImageChef.CommonTypes; @@ -43,7 +44,7 @@ namespace DiscImageChef.DiscImages public class Apple2Mg : ImagePlugin { #region Internal Structures - // DiskCopy 4.2 header, big-endian, data-fork, start of file, 84 bytes + [SuppressMessage("ReSharper", "NotAccessedField.Local")] struct A2ImgHeader { /// @@ -169,27 +170,29 @@ namespace DiscImageChef.DiscImages { Name = "Apple 2IMG"; PluginUuid = new Guid("CBAF8824-BA5F-415F-953A-19A03519B2D1"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) diff --git a/DiscImageChef.DiscImages/AppleDOS.cs b/DiscImageChef.DiscImages/AppleDOS.cs index c46c0c01..7e648906 100644 --- a/DiscImageChef.DiscImages/AppleDOS.cs +++ b/DiscImageChef.DiscImages/AppleDOS.cs @@ -99,10 +99,7 @@ namespace DiscImageChef.DiscImages extension = Path.GetExtension(imageFilter.GetFilename())?.ToLower(); - int[] offsets; - - if(extension == ".do") offsets = dosOffsets; - else offsets = prodosOffsets; + int[] offsets = extension == ".do" ? dosOffsets : prodosOffsets; for(int t = 0; t < 35; t++) { diff --git a/DiscImageChef.DiscImages/AppleNIB.cs b/DiscImageChef.DiscImages/AppleNIB.cs index 9415bfb4..57544f8c 100644 --- a/DiscImageChef.DiscImages/AppleNIB.cs +++ b/DiscImageChef.DiscImages/AppleNIB.cs @@ -69,27 +69,29 @@ namespace DiscImageChef.DiscImages { Name = "Apple NIB"; PluginUuid = new Guid("AE171AE8-6747-49CC-B861-9D450B7CD42E"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -325,8 +327,7 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] temp; - cookedSectors.TryGetValue(sectorAddress, out temp); + cookedSectors.TryGetValue(sectorAddress, out byte[] temp); return temp; } @@ -359,8 +360,7 @@ namespace DiscImageChef.DiscImages if(tag != SectorTagType.FloppyAddressMark) throw new FeatureUnsupportedImageException($"Tag {tag} not supported by image format"); - byte[] temp; - addressFields.TryGetValue(sectorAddress, out temp); + addressFields.TryGetValue(sectorAddress, out byte[] temp); return temp; } @@ -393,8 +393,7 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] temp; - longSectors.TryGetValue(sectorAddress, out temp); + longSectors.TryGetValue(sectorAddress, out byte[] temp); return temp; } diff --git a/DiscImageChef.DiscImages/Apridisk.cs b/DiscImageChef.DiscImages/Apridisk.cs index ebbbb8e6..543e25ba 100644 --- a/DiscImageChef.DiscImages/Apridisk.cs +++ b/DiscImageChef.DiscImages/Apridisk.cs @@ -126,10 +126,10 @@ namespace DiscImageChef.DiscImages if(stream.Length < signature.Length) return false; - byte[] sig_b = new byte[signature.Length]; - stream.Read(sig_b, 0, signature.Length); + byte[] sigB = new byte[signature.Length]; + stream.Read(sigB, 0, signature.Length); - return sig_b.SequenceEqual(signature); + return sigB.SequenceEqual(signature); } public override bool OpenImage(Filter imageFilter) @@ -148,12 +148,11 @@ namespace DiscImageChef.DiscImages // Count cylinders while(stream.Position < stream.Length) { - ApridiskRecord record; - byte[] rec_b = new byte[recordSize]; - stream.Read(rec_b, 0, recordSize); + byte[] recB = new byte[recordSize]; + stream.Read(recB, 0, recordSize); - GCHandle handle = GCHandle.Alloc(rec_b, GCHandleType.Pinned); - record = (ApridiskRecord)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(ApridiskRecord)); + GCHandle handle = GCHandle.Alloc(recB, GCHandleType.Pinned); + ApridiskRecord record = (ApridiskRecord)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(ApridiskRecord)); handle.Free(); switch(record.type) @@ -166,17 +165,17 @@ namespace DiscImageChef.DiscImages case RecordType.Comment: DicConsole.DebugWriteLine("Apridisk plugin", "Found comment record at {0}", stream.Position); stream.Seek(record.headerSize - recordSize, SeekOrigin.Current); - byte[] comment_b = new byte[record.dataSize]; - stream.Read(comment_b, 0, comment_b.Length); - ImageInfo.ImageComments = StringHandlers.CToString(comment_b); + byte[] commentB = new byte[record.dataSize]; + stream.Read(commentB, 0, commentB.Length); + ImageInfo.ImageComments = StringHandlers.CToString(commentB); DicConsole.DebugWriteLine("Apridisk plugin", "Comment: \"{0}\"", ImageInfo.ImageComments); break; case RecordType.Creator: DicConsole.DebugWriteLine("Apridisk plugin", "Found creator record at {0}", stream.Position); stream.Seek(record.headerSize - recordSize, SeekOrigin.Current); - byte[] creator_b = new byte[record.dataSize]; - stream.Read(creator_b, 0, creator_b.Length); - ImageInfo.ImageCreator = StringHandlers.CToString(creator_b); + byte[] creatorB = new byte[record.dataSize]; + stream.Read(creatorB, 0, creatorB.Length); + ImageInfo.ImageCreator = StringHandlers.CToString(creatorB); DicConsole.DebugWriteLine("Apridisk plugin", "Creator: \"{0}\"", ImageInfo.ImageCreator); break; case RecordType.Sector: @@ -238,12 +237,11 @@ namespace DiscImageChef.DiscImages stream.Seek(signature.Length, SeekOrigin.Begin); while(stream.Position < stream.Length) { - ApridiskRecord record; - byte[] rec_b = new byte[recordSize]; - stream.Read(rec_b, 0, recordSize); + byte[] recB = new byte[recordSize]; + stream.Read(recB, 0, recordSize); - GCHandle handle = GCHandle.Alloc(rec_b, GCHandleType.Pinned); - record = (ApridiskRecord)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(ApridiskRecord)); + GCHandle handle = GCHandle.Alloc(recB, GCHandleType.Pinned); + ApridiskRecord record = (ApridiskRecord)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(ApridiskRecord)); handle.Free(); switch(record.type) @@ -318,27 +316,25 @@ namespace DiscImageChef.DiscImages static uint Decompress(byte[] compressed, out byte[] decompressed) { int readp = 0; - ushort blklen; - uint u_len; - int c_len = compressed.Length; + int cLen = compressed.Length; MemoryStream buffer = new MemoryStream(); - u_len = 0; + uint uLen = 0; - while(c_len >= 3) + while(cLen >= 3) { - blklen = BitConverter.ToUInt16(compressed, readp); + ushort blklen = BitConverter.ToUInt16(compressed, readp); readp += 2; for(int i = 0; i < blklen; i++) buffer.WriteByte(compressed[readp]); - u_len += blklen; + uLen += blklen; readp++; - c_len -= 3; + cLen -= 3; } decompressed = buffer.ToArray(); - return u_len; + return uLen; } public override bool ImageHasPartitions() diff --git a/DiscImageChef.DiscImages/BLU.cs b/DiscImageChef.DiscImages/BLU.cs index 52486771..17da9294 100644 --- a/DiscImageChef.DiscImages/BLU.cs +++ b/DiscImageChef.DiscImages/BLU.cs @@ -69,27 +69,29 @@ namespace DiscImageChef.DiscImages { Name = "Basic Lisa Utility"; PluginUuid = new Guid("A153E2F8-4235-432D-9A7F-20807B0BCD74"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -102,8 +104,7 @@ namespace DiscImageChef.DiscImages byte[] header = new byte[0x17]; stream.Read(header, 0, 0x17); - BluHeader tmpHdr = new BluHeader(); - tmpHdr.DeviceName = new byte[0x0D]; + BluHeader tmpHdr = new BluHeader {DeviceName = new byte[0x0D]}; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; Array.Copy(header, 0, tmpHdr.DeviceName, 0, 0x0D); @@ -123,8 +124,7 @@ namespace DiscImageChef.DiscImages Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); - imageHeader = new BluHeader(); - imageHeader.DeviceName = new byte[0x0D]; + imageHeader = new BluHeader {DeviceName = new byte[0x0D]}; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; byte[] header = new byte[0x17]; @@ -159,29 +159,25 @@ namespace DiscImageChef.DiscImages switch(StringHandlers.CToString(imageHeader.DeviceName)) { case PROFILE_NAME: - if(ImageInfo.Sectors == 0x2600) ImageInfo.MediaType = MediaType.AppleProfile; - else ImageInfo.MediaType = MediaType.GENERIC_HDD; + ImageInfo.MediaType = ImageInfo.Sectors == 0x2600 ? MediaType.AppleProfile : MediaType.GENERIC_HDD; ImageInfo.Cylinders = 152; ImageInfo.Heads = 4; ImageInfo.SectorsPerTrack = 16; break; case PROFILE10_NAME: - if(ImageInfo.Sectors == 0x4C00) ImageInfo.MediaType = MediaType.AppleProfile; - else ImageInfo.MediaType = MediaType.GENERIC_HDD; + ImageInfo.MediaType = ImageInfo.Sectors == 0x4C00 ? MediaType.AppleProfile : MediaType.GENERIC_HDD; ImageInfo.Cylinders = 304; ImageInfo.Heads = 4; ImageInfo.SectorsPerTrack = 16; break; case WIDGET_NAME: - if(ImageInfo.Sectors == 0x4C00) ImageInfo.MediaType = MediaType.AppleWidget; - else ImageInfo.MediaType = MediaType.GENERIC_HDD; + ImageInfo.MediaType = ImageInfo.Sectors == 0x4C00 ? MediaType.AppleWidget : MediaType.GENERIC_HDD; ImageInfo.Cylinders = 304; ImageInfo.Heads = 4; ImageInfo.SectorsPerTrack = 16; break; case PRIAM_NAME: - if(ImageInfo.Sectors == 0x022C7C) ImageInfo.MediaType = MediaType.PriamDataTower; - else ImageInfo.MediaType = MediaType.GENERIC_HDD; + ImageInfo.MediaType = ImageInfo.Sectors == 0x022C7C ? MediaType.PriamDataTower : MediaType.GENERIC_HDD; // This values are invented... ImageInfo.Cylinders = 419; ImageInfo.Heads = 4; diff --git a/DiscImageChef.DiscImages/BlindWrite4.cs b/DiscImageChef.DiscImages/BlindWrite4.cs index 68eba49d..87bae225 100644 --- a/DiscImageChef.DiscImages/BlindWrite4.cs +++ b/DiscImageChef.DiscImages/BlindWrite4.cs @@ -77,6 +77,7 @@ namespace DiscImageChef.DiscImages public byte[] Unknown4; // On memory only +#pragma warning disable 649 public string VolumeIdentifier; public string SystemIdentifier; public string Comments; @@ -84,6 +85,7 @@ namespace DiscImageChef.DiscImages public Filter SubchannelFilter; public string DataFile; public string SubchannelFile; +#pragma warning restore 649 } [StructLayout(LayoutKind.Sequential, Pack = 1)] @@ -190,24 +192,26 @@ namespace DiscImageChef.DiscImages { Name = "BlindWrite 4"; PluginUuid = new Guid("664568B2-15D4-4E64-8A7A-20BDA8B8386F"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = true; - ImageInfo.ImageHasSessions = true; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageName = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = true, + ImageHasSessions = true, + ImageVersion = null, + ImageApplicationVersion = null, + ImageName = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -237,8 +241,7 @@ namespace DiscImageChef.DiscImages if(!bw4Signature.SequenceEqual(tmpArray)) return false; - header = new Bw4Header(); - header.Signature = tmpArray; + header = new Bw4Header {Signature = tmpArray}; // Seems to always be 2 stream.Read(tmpUInt, 0, 4); @@ -593,33 +596,28 @@ namespace DiscImageChef.DiscImages { filtersList = new FiltersList(); - subFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), header.SubchannelFile)); - if(subFilter == null) - subFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - header.SubchannelFile.ToLower(CultureInfo - .CurrentCulture))); - if(subFilter == null) - subFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - header.SubchannelFile.ToUpper(CultureInfo - .CurrentCulture))); - if(subFilter == null) - subFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - header.SubchannelFile.Split(new[] {'\\'}, - StringSplitOptions - .RemoveEmptyEntries) - .Last())); - if(subFilter == null) - subFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - header.SubchannelFile.Split(new[] {'\\'}, - StringSplitOptions - .RemoveEmptyEntries) - .Last().ToLower(CultureInfo.CurrentCulture))); - if(subFilter == null) - subFilter = filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - header.SubchannelFile.Split(new[] {'\\'}, - StringSplitOptions - .RemoveEmptyEntries) - .Last().ToUpper(CultureInfo.CurrentCulture))); + subFilter = + ((((filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), header.SubchannelFile)) ?? + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + header.SubchannelFile.ToLower(CultureInfo.CurrentCulture))) + ) ?? + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + header.SubchannelFile.ToUpper(CultureInfo.CurrentCulture))) + ) ?? + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + header.SubchannelFile.Split(new[] {'\\'}, + StringSplitOptions + .RemoveEmptyEntries).Last())) + ) ?? filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + header.SubchannelFile.Split(new[] {'\\'}, + StringSplitOptions + .RemoveEmptyEntries).Last() + .ToLower(CultureInfo.CurrentCulture)))) ?? + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + header.SubchannelFile.Split(new[] {'\\'}, + StringSplitOptions + .RemoveEmptyEntries).Last() + .ToUpper(CultureInfo.CurrentCulture))); } tracks = new List(); @@ -631,9 +629,7 @@ namespace DiscImageChef.DiscImages foreach(Bw4TrackDescriptor bwTrack in bwTracks) if(bwTrack.point < 0xA0) { - Track track = new Track(); - track.TrackDescription = bwTrack.title; - track.TrackEndSector = bwTrack.lastSector; + Track track = new Track {TrackDescription = bwTrack.title, TrackEndSector = bwTrack.lastSector}; if(!string.IsNullOrEmpty(bwTrack.filename)) do @@ -789,10 +785,12 @@ namespace DiscImageChef.DiscImages sessions = new List(); for(ushort i = 1; i <= maxSession; i++) { - Session session = new Session(); - session.SessionSequence = i; - session.StartTrack = uint.MaxValue; - session.StartSector = uint.MaxValue; + Session session = new Session + { + SessionSequence = i, + StartTrack = uint.MaxValue, + StartSector = uint.MaxValue + }; foreach(Track track in tracks.Where(track => track.TrackSession == i)) { @@ -822,21 +820,21 @@ namespace DiscImageChef.DiscImages bool firstdata = false; bool audio = false; - foreach(Track _track in tracks) + foreach(Track bwTrack in tracks) { // First track is audio - firstaudio |= _track.TrackSequence == 1 && _track.TrackType == TrackType.Audio; + firstaudio |= bwTrack.TrackSequence == 1 && bwTrack.TrackType == TrackType.Audio; // First track is data - firstdata |= _track.TrackSequence == 1 && _track.TrackType != TrackType.Audio; + firstdata |= bwTrack.TrackSequence == 1 && bwTrack.TrackType != TrackType.Audio; // Any non first track is data - data |= _track.TrackSequence != 1 && _track.TrackType != TrackType.Audio; + data |= bwTrack.TrackSequence != 1 && bwTrack.TrackType != TrackType.Audio; // Any non first track is audio - audio |= _track.TrackSequence != 1 && _track.TrackType == TrackType.Audio; + audio |= bwTrack.TrackSequence != 1 && bwTrack.TrackType == TrackType.Audio; - switch(_track.TrackType) + switch(bwTrack.TrackType) { case TrackType.CdMode2Formless: mode2 = true; @@ -944,28 +942,26 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { - Track _track = new Track(); - - _track.TrackSequence = 0; + Track dicTrack = new Track {TrackSequence = 0}; foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { - _track = bwTrack; + dicTrack = bwTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector - _track.TrackStartSector + 1) + if(length + sectorAddress > dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector - _track.TrackStartSector + 1}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1}), won't cross tracks"); uint sectorOffset; uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: { @@ -1000,18 +996,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.TrackFilter.GetDataForkStream(); + imageStream = dicTrack.TrackFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1021,28 +1016,27 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { - _track = bwTrack; + dicTrack = bwTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector - _track.TrackStartSector + 1) + if(length + sectorAddress > dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector - _track.TrackStartSector + 1}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1}), won't cross tracks"); uint sectorOffset; uint sectorSize; uint sectorSkip; - if(_track.TrackType == TrackType.Data) + if(dicTrack.TrackType == TrackType.Data) throw new ArgumentException("Unsupported tag requested", nameof(tag)); switch(tag) @@ -1056,14 +1050,13 @@ namespace DiscImageChef.DiscImages case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSync: break; case SectorTagType.CdTrackFlags: - byte flag; - if(trackFlags.TryGetValue(track, out flag)) return new[] {flag}; + if(trackFlags.TryGetValue(track, out byte flag)) return new[] {flag}; throw new ArgumentException("Unsupported tag requested", nameof(tag)); default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: switch(tag) @@ -1163,18 +1156,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.TrackFilter.GetDataForkStream(); + imageStream = dicTrack.TrackFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1208,28 +1200,27 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { - _track = bwTrack; + dicTrack = bwTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector - _track.TrackStartSector + 1) + if(length + sectorAddress > dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector - _track.TrackStartSector + 1}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1}), won't cross tracks"); uint sectorOffset; uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.Audio: case TrackType.CdMode1: @@ -1237,21 +1228,19 @@ namespace DiscImageChef.DiscImages case TrackType.Data: { sectorOffset = 0; - sectorSize = (uint)_track.TrackRawBytesPerSector; + sectorSize = (uint)dicTrack.TrackRawBytesPerSector; sectorSkip = 0; break; } default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - byte[] buffer; - - imageStream = _track.TrackFilter.GetDataForkStream(); + imageStream = dicTrack.TrackFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); - buffer = br.ReadBytes((int)(sectorSize * length)); + byte[] buffer = br.ReadBytes((int)(sectorSize * length)); return buffer; } @@ -1295,7 +1284,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - return tracks.Where(_track => _track.TrackSession == session).ToList(); + return tracks.Where(track => track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/BlindWrite5.cs b/DiscImageChef.DiscImages/BlindWrite5.cs index fad1588e..6b437cd8 100644 --- a/DiscImageChef.DiscImages/BlindWrite5.cs +++ b/DiscImageChef.DiscImages/BlindWrite5.cs @@ -214,24 +214,26 @@ namespace DiscImageChef.DiscImages { Name = "BlindWrite 5"; PluginUuid = new Guid("9CB7A381-0509-4F9F-B801-3F65434BC3EE"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = true; - ImageInfo.ImageHasSessions = true; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageName = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = true, + ImageHasSessions = true, + ImageVersion = null, + ImageApplicationVersion = null, + ImageName = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -450,9 +452,7 @@ namespace DiscImageChef.DiscImages for(int cD = 0; cD < dataBlockCount; cD++) { tmpArray = new byte[52]; - Bw5DataFile dataFile = new Bw5DataFile(); - dataFile.Unknown1 = new uint[4]; - dataFile.Unknown2 = new uint[3]; + Bw5DataFile dataFile = new Bw5DataFile {Unknown1 = new uint[4], Unknown2 = new uint[3]}; stream.Read(tmpArray, 0, tmpArray.Length); dataFile.Type = BitConverter.ToUInt32(tmpArray, 0); @@ -628,14 +628,12 @@ namespace DiscImageChef.DiscImages DicConsole .ErrorWriteLine("BlindWrite5 image ends after expected position. Probably new version with different data. Errors may occur."); - FiltersList filtersList; - filePaths = new List(); foreach(Bw5DataFile dataFile in dataFiles) { DataFileCharacteristics chars = new DataFileCharacteristics(); string path = Path.Combine(dataPath, dataFile.Filename); - filtersList = new FiltersList(); + FiltersList filtersList = new FiltersList(); if(filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), path)) != null) { @@ -777,13 +775,15 @@ namespace DiscImageChef.DiscImages DicConsole.DebugWriteLine("BlindWrite5 plugin", "Building maps"); foreach(Bw5SessionDescriptor ses in bwSessions) { - Session session = new Session(); - session.SessionSequence = ses.Sequence; + // TODO: This does nothing, should it? + /* + Session session = new Session {SessionSequence = ses.Sequence}; if(ses.Start < 0) session.StartSector = 0; else session.StartSector = (ulong)ses.Start; session.EndSector = (ulong)ses.End; session.StartTrack = ses.FirstTrack; session.EndTrack = ses.LastTrack; + */ if(ses.Sequence < firstSession) firstSession = (byte)ses.Sequence; if(ses.Sequence > lastSession) lastSession = (byte)ses.Sequence; @@ -897,8 +897,7 @@ namespace DiscImageChef.DiscImages track.TrackPregap = trk.pregap; track.TrackSequence = trk.point; track.TrackType = BlindWriteTrackTypeToTrackType(trk.type); - track.Indexes = new Dictionary(); - track.Indexes.Add(1, track.TrackStartSector); + track.Indexes = new Dictionary {{1, track.TrackStartSector}}; partition.Description = track.TrackDescription; partition.Size = (track.TrackEndSector - track.TrackStartSector) * @@ -992,8 +991,7 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.DVDPRWDL; break; case DiskCategory.DVDR: - if(pfi0.Value.PartVersion == 6) ImageInfo.MediaType = MediaType.DVDRDL; - else ImageInfo.MediaType = MediaType.DVDR; + ImageInfo.MediaType = pfi0.Value.PartVersion == 6 ? MediaType.DVDRDL : MediaType.DVDR; break; case DiskCategory.DVDRAM: ImageInfo.MediaType = MediaType.DVDRAM; @@ -1002,8 +1000,7 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.DVDROM; break; case DiskCategory.DVDRW: - if(pfi0.Value.PartVersion == 3) ImageInfo.MediaType = MediaType.DVDRWDL; - else ImageInfo.MediaType = MediaType.DVDRW; + ImageInfo.MediaType = pfi0.Value.PartVersion == 3 ? MediaType.DVDRWDL : MediaType.DVDRW; break; case DiskCategory.HDDVDR: ImageInfo.MediaType = MediaType.HDDVDR; @@ -1018,8 +1015,7 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.HDDVDRW; break; case DiskCategory.Nintendo: - if(pfi0.Value.DiscSize == DVDSize.Eighty) ImageInfo.MediaType = MediaType.GOD; - else ImageInfo.MediaType = MediaType.WOD; + ImageInfo.MediaType = pfi0.Value.DiscSize == DVDSize.Eighty ? MediaType.GOD : MediaType.WOD; break; case DiskCategory.UMD: ImageInfo.MediaType = MediaType.UMD; @@ -1038,21 +1034,21 @@ namespace DiscImageChef.DiscImages bool firstdata = false; bool audio = false; - foreach(Track _track in tracks) + foreach(Track bwTrack in tracks) { // First track is audio - firstaudio |= _track.TrackSequence == 1 && _track.TrackType == TrackType.Audio; + firstaudio |= bwTrack.TrackSequence == 1 && bwTrack.TrackType == TrackType.Audio; // First track is data - firstdata |= _track.TrackSequence == 1 && _track.TrackType != TrackType.Audio; + firstdata |= bwTrack.TrackSequence == 1 && bwTrack.TrackType != TrackType.Audio; // Any non first track is data - data |= _track.TrackSequence != 1 && _track.TrackType != TrackType.Audio; + data |= bwTrack.TrackSequence != 1 && bwTrack.TrackType != TrackType.Audio; // Any non first track is audio - audio |= _track.TrackSequence != 1 && _track.TrackType == TrackType.Audio; + audio |= bwTrack.TrackSequence != 1 && bwTrack.TrackType == TrackType.Audio; - switch(_track.TrackType) + switch(bwTrack.TrackType) { case TrackType.CdMode2Formless: case TrackType.CdMode2Form1: @@ -1096,8 +1092,7 @@ namespace DiscImageChef.DiscImages { ATIP.CDATIP atip0 = ATIP.Decode(atip).Value; - if(atip0.DiscType) ImageInfo.MediaType = MediaType.CDRW; - else ImageInfo.MediaType = MediaType.CDR; + ImageInfo.MediaType = atip0.DiscType ? MediaType.CDRW : MediaType.CDR; if(atip0.LeadInStartMin == 97) { @@ -1264,22 +1259,22 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { // TODO: Cross data files - Track _track = new Track(); + Track dicTrack = new Track(); DataFileCharacteristics chars = new DataFileCharacteristics(); - _track.TrackSequence = 0; + dicTrack.TrackSequence = 0; foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { - _track = bwTrack; + dicTrack = bwTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector) + if(length + sectorAddress > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); foreach(DataFileCharacteristics _chars in filePaths.Where(_chars => (long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)) { chars = _chars; @@ -1293,7 +1288,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: { @@ -1359,16 +1354,15 @@ namespace DiscImageChef.DiscImages imageStream = chars.FileFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1379,22 +1373,22 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { // TODO: Cross data files - Track _track = new Track(); + Track dicTrack = new Track(); DataFileCharacteristics chars = new DataFileCharacteristics(); - _track.TrackSequence = 0; + dicTrack.TrackSequence = 0; foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { - _track = bwTrack; + dicTrack = bwTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector) + if(length + sectorAddress > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); foreach(DataFileCharacteristics _chars in filePaths.Where(_chars => (long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)) { chars = _chars; @@ -1404,7 +1398,7 @@ namespace DiscImageChef.DiscImages if(string.IsNullOrEmpty(chars.FilePath) || chars.FileFilter == null) throw new ArgumentOutOfRangeException(nameof(chars.FileFilter), "Track does not exist in disc image"); - if(_track.TrackType == TrackType.Data) + if(dicTrack.TrackType == TrackType.Data) throw new ArgumentException("Unsupported tag requested", nameof(tag)); switch(tag) @@ -1418,8 +1412,7 @@ namespace DiscImageChef.DiscImages case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSync: break; case SectorTagType.CdTrackFlags: - byte flag; - if(trackFlags.TryGetValue(track, out flag)) return new[] {flag}; + if(trackFlags.TryGetValue(track, out byte flag)) return new[] {flag}; throw new ArgumentException("Unsupported tag requested", nameof(tag)); default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); @@ -1429,7 +1422,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: switch(tag) @@ -1638,18 +1631,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.TrackFilter.GetDataForkStream(); + imageStream = dicTrack.TrackFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1677,22 +1669,22 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { // TODO: Cross data files - Track _track = new Track(); + Track dicTrack = new Track(); DataFileCharacteristics chars = new DataFileCharacteristics(); - _track.TrackSequence = 0; + dicTrack.TrackSequence = 0; foreach(Track bwTrack in tracks.Where(bwTrack => bwTrack.TrackSequence == track)) { - _track = bwTrack; + dicTrack = bwTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector) + if(length + sectorAddress > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); foreach(DataFileCharacteristics _chars in filePaths.Where(_chars => (long)sectorAddress >= _chars.StartLba && length < (ulong)_chars.Sectors - sectorAddress)) { chars = _chars; @@ -1706,7 +1698,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: case TrackType.CdMode2Formless: @@ -1745,18 +1737,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.TrackFilter.GetDataForkStream(); + imageStream = dicTrack.TrackFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.TrackFileOffset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1803,7 +1794,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - return tracks.Where(_track => _track.TrackSession == session).ToList(); + return tracks.Where(dicTrack => dicTrack.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/CDRDAO.cs b/DiscImageChef.DiscImages/CDRDAO.cs index ed963ca8..02e1a510 100644 --- a/DiscImageChef.DiscImages/CDRDAO.cs +++ b/DiscImageChef.DiscImages/CDRDAO.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Text; @@ -48,6 +49,7 @@ namespace DiscImageChef.DiscImages public class Cdrdao : ImagePlugin { #region Internal structures + [SuppressMessage("ReSharper", "NotAccessedField.Local")] struct CdrdaoTrackFile { /// Track # @@ -62,6 +64,8 @@ namespace DiscImageChef.DiscImages public string Filetype; } +#pragma warning disable 169 + [SuppressMessage("ReSharper", "NotAccessedField.Local")] struct CdrdaoTrack { /// Track # @@ -108,6 +112,7 @@ namespace DiscImageChef.DiscImages public bool Packedsubchannel; } + [SuppressMessage("ReSharper", "NotAccessedField.Local")] struct CdrdaoDisc { /// Disk title (from CD-Text) @@ -139,6 +144,7 @@ namespace DiscImageChef.DiscImages /// Disk comment public string Comment; } +#pragma warning restore 169 #endregion Internal structures #region Internal consts @@ -161,7 +167,7 @@ namespace DiscImageChef.DiscImages #endregion Internal consts #region Internal variables - Filter imageFilter; + Filter cdrdaoFilter; StreamReader tocStream; Stream imageStream; /// Dictionary, index is track #, value is TrackFile @@ -215,24 +221,26 @@ namespace DiscImageChef.DiscImages { Name = "CDRDAO tocfile"; PluginUuid = new Guid("04D7BA12-1BE8-44D4-97A4-1B48A505463E"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = true; - ImageInfo.ImageHasSessions = true; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageName = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = true, + ImageHasSessions = true, + ImageVersion = null, + ImageApplicationVersion = null, + ImageName = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } #endregion Public methods @@ -263,19 +271,16 @@ namespace DiscImageChef.DiscImages } tocStream = new StreamReader(imageFilter.GetDataForkStream()); - string line; Regex cr = new Regex(COMMENT_REGEX); Regex dr = new Regex(DISK_TYPE_REGEX); - Match dm; - Match cm; while(tocStream.Peek() >= 0) { - line = tocStream.ReadLine(); + string line = tocStream.ReadLine(); - dm = dr.Match(line ?? throw new InvalidOperationException()); - cm = cr.Match(line); + Match dm = dr.Match(line ?? throw new InvalidOperationException()); + Match cm = cr.Match(line); // Skip comments at start of file if(cm.Success) continue; @@ -288,7 +293,7 @@ namespace DiscImageChef.DiscImages catch(Exception ex) { DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", - this.imageFilter.GetFilename()); + cdrdaoFilter.GetFilename()); DicConsole.ErrorWriteLine("Exception: {0}", ex.Message); DicConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace); return false; @@ -299,13 +304,12 @@ namespace DiscImageChef.DiscImages { if(imageFilter == null) return false; - this.imageFilter = imageFilter; + cdrdaoFilter = imageFilter; try { imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); tocStream = new StreamReader(imageFilter.GetDataForkStream()); - int line = 0; bool intrack = false; // Initialize all RegExs @@ -341,37 +345,9 @@ namespace DiscImageChef.DiscImages // Initialize all RegEx matches Match matchComment; Match matchDiskType; - Match matchMcn; - Match matchTrack; - Match matchCopy; - Match matchEmphasis; - Match matchStereo; - Match matchIsrc; - Match matchIndex; - Match matchPregap; - Match matchZeroPregap; - Match matchZeroData; - Match matchZeroAudio; - Match matchAudioFile; - Match matchFile; - Match matchTitle; - Match matchPerformer; - Match matchSongwriter; - Match matchComposer; - Match matchArranger; - Match matchMessage; - Match matchDiscId; - Match matchUpc; - Match matchCdText; - Match matchLanguage; - Match matchClosure; - Match matchLanguageMap; - Match matchLanguageMapping; // Initialize disc - discimage = new CdrdaoDisc(); - discimage.Tracks = new List(); - discimage.Comment = ""; + discimage = new CdrdaoDisc {Tracks = new List(), Comment = ""}; CdrdaoTrack currenttrack = new CdrdaoTrack(); uint currentTrackNumber = 0; @@ -381,16 +357,17 @@ namespace DiscImageChef.DiscImages int nextindex = 2; StringBuilder commentBuilder = new StringBuilder(); - tocStream = new StreamReader(this.imageFilter.GetDataForkStream()); - string _line; + tocStream = new StreamReader(cdrdaoFilter.GetDataForkStream()); + string line; + int lineNumber = 0; while(tocStream.Peek() >= 0) { - line++; - _line = tocStream.ReadLine(); + lineNumber++; + line = tocStream.ReadLine(); - matchDiskType = regexDiskType.Match(_line ?? throw new InvalidOperationException()); - matchComment = regexComment.Match(_line); + matchDiskType = regexDiskType.Match(line ?? throw new InvalidOperationException()); + matchComment = regexComment.Match(line); // Skip comments at start of file if(matchComment.Success) continue; @@ -398,51 +375,50 @@ namespace DiscImageChef.DiscImages if(!matchDiskType.Success) { DicConsole.DebugWriteLine("CDRDAO plugin", "Not a CDRDAO TOC or TOC type not in line {0}.", - line); + lineNumber); return false; } break; } - tocStream = new StreamReader(this.imageFilter.GetDataForkStream()); - FiltersList filtersList; - line = 0; + tocStream = new StreamReader(cdrdaoFilter.GetDataForkStream()); + lineNumber = 0; tocStream.BaseStream.Position = 0; while(tocStream.Peek() >= 0) { - line++; - _line = tocStream.ReadLine(); + lineNumber++; + line = tocStream.ReadLine(); - matchComment = regexComment.Match(_line ?? throw new InvalidOperationException()); - matchDiskType = regexDiskType.Match(_line); - matchMcn = regexMcn.Match(_line); - matchTrack = regexTrack.Match(_line); - matchCopy = regexCopy.Match(_line); - matchEmphasis = regexEmphasis.Match(_line); - matchStereo = regexStereo.Match(_line); - matchIsrc = regexIsrc.Match(_line); - matchIndex = regexIndex.Match(_line); - matchPregap = regexPregap.Match(_line); - matchZeroPregap = regexZeroPregap.Match(_line); - matchZeroData = regexZeroData.Match(_line); - matchZeroAudio = regexZeroAudio.Match(_line); - matchAudioFile = regexAudioFile.Match(_line); - matchFile = regexFile.Match(_line); - matchTitle = regexTitle.Match(_line); - matchPerformer = regexPerformer.Match(_line); - matchSongwriter = regexSongwriter.Match(_line); - matchComposer = regexComposer.Match(_line); - matchArranger = regexArranger.Match(_line); - matchMessage = regexMessage.Match(_line); - matchDiscId = regexDiscId.Match(_line); - matchUpc = regexUpc.Match(_line); - matchCdText = regexCdText.Match(_line); - matchLanguage = regexLanguage.Match(_line); - matchClosure = regexClosure.Match(_line); - matchLanguageMap = regexLanguageMap.Match(_line); - matchLanguageMapping = regexLanguageMapping.Match(_line); + matchComment = regexComment.Match(line ?? throw new InvalidOperationException()); + matchDiskType = regexDiskType.Match(line); + Match matchMcn = regexMcn.Match(line); + Match matchTrack = regexTrack.Match(line); + Match matchCopy = regexCopy.Match(line); + Match matchEmphasis = regexEmphasis.Match(line); + Match matchStereo = regexStereo.Match(line); + Match matchIsrc = regexIsrc.Match(line); + Match matchIndex = regexIndex.Match(line); + Match matchPregap = regexPregap.Match(line); + Match matchZeroPregap = regexZeroPregap.Match(line); + Match matchZeroData = regexZeroData.Match(line); + Match matchZeroAudio = regexZeroAudio.Match(line); + Match matchAudioFile = regexAudioFile.Match(line); + Match matchFile = regexFile.Match(line); + Match matchTitle = regexTitle.Match(line); + Match matchPerformer = regexPerformer.Match(line); + Match matchSongwriter = regexSongwriter.Match(line); + Match matchComposer = regexComposer.Match(line); + Match matchArranger = regexArranger.Match(line); + Match matchMessage = regexMessage.Match(line); + Match matchDiscId = regexDiscId.Match(line); + Match matchUpc = regexUpc.Match(line); + Match matchCdText = regexCdText.Match(line); + Match matchLanguage = regexLanguage.Match(line); + Match matchClosure = regexClosure.Match(line); + Match matchLanguageMap = regexLanguageMap.Match(line); + Match matchLanguageMapping = regexLanguageMapping.Match(line); if(matchComment.Success) { @@ -450,13 +426,13 @@ namespace DiscImageChef.DiscImages if(matchComment.Groups["comment"].Value.StartsWith(" Track ", StringComparison.Ordinal)) continue; - DicConsole.DebugWriteLine("CDRDAO plugin", "Found comment \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found comment \"{1}\" at line {0}", lineNumber, matchComment.Groups["comment"].Value.Trim()); commentBuilder.AppendLine(matchComment.Groups["comment"].Value.Trim()); } else if(matchDiskType.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1} at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1} at line {0}", lineNumber, matchDiskType.Groups["type"].Value); discimage.Disktypestr = matchDiskType.Groups["type"].Value; switch(matchDiskType.Groups["type"].Value) @@ -480,7 +456,7 @@ namespace DiscImageChef.DiscImages } else if(matchMcn.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found CATALOG \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found CATALOG \"{1}\" at line {0}", lineNumber, matchMcn.Groups["catalog"].Value); discimage.Mcn = matchMcn.Groups["catalog"].Value; } @@ -488,11 +464,11 @@ namespace DiscImageChef.DiscImages { if(matchTrack.Groups["subchan"].Value == "") DicConsole.DebugWriteLine("CDRDAO plugin", - "Found TRACK type \"{1}\" with no subchannel at line {0}", line, + "Found TRACK type \"{1}\" with no subchannel at line {0}", lineNumber, matchTrack.Groups["type"].Value); else DicConsole.DebugWriteLine("CDRDAO plugin", - "Found TRACK type \"{1}\" subchannel {2} at line {0}", line, + "Found TRACK type \"{1}\" subchannel {2} at line {0}", lineNumber, matchTrack.Groups["type"].Value, matchTrack.Groups["subchan"].Value); @@ -502,9 +478,7 @@ namespace DiscImageChef.DiscImages if(currenttrack.Pregap != currenttrack.Sectors && !currenttrack.Indexes.ContainsKey(1)) currenttrack.Indexes.Add(1, currenttrack.StartSector + currenttrack.Pregap); discimage.Tracks.Add(currenttrack); - currenttrack = new CdrdaoTrack(); - currenttrack.Indexes = new Dictionary(); - currenttrack.Pregap = 0; + currenttrack = new CdrdaoTrack {Indexes = new Dictionary(), Pregap = 0}; nextindex = 2; } currentTrackNumber++; @@ -554,31 +528,31 @@ namespace DiscImageChef.DiscImages } else if(matchCopy.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1} COPY at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1} COPY at line {0}", lineNumber, matchCopy.Groups["no"].Value); currenttrack.FlagDcp |= intrack && matchCopy.Groups["no"].Value == ""; } else if(matchEmphasis.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1} PRE_EMPHASIS at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1} PRE_EMPHASIS at line {0}", lineNumber, matchEmphasis.Groups["no"].Value); currenttrack.FlagPre |= intrack && matchCopy.Groups["no"].Value == ""; } else if(matchStereo.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1}_CHANNEL_AUDIO at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found {1}_CHANNEL_AUDIO at line {0}", lineNumber, matchStereo.Groups["num"].Value); currenttrack.Flag_4Ch |= intrack && matchCopy.Groups["num"].Value == "FOUR"; } else if(matchIsrc.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found ISRC \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found ISRC \"{1}\" at line {0}", lineNumber, matchIsrc.Groups["isrc"].Value); if(intrack) currenttrack.Isrc = matchIsrc.Groups["isrc"].Value; } else if(matchIndex.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found INDEX \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found INDEX \"{1}\" at line {0}", lineNumber, matchIndex.Groups["address"].Value); string[] lengthString = matchFile.Groups["length"].Value.Split(':'); @@ -589,7 +563,7 @@ namespace DiscImageChef.DiscImages } else if(matchPregap.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found START \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found START \"{1}\" at line {0}", lineNumber, matchPregap.Groups["address"].Value); currenttrack.Indexes.Add(0, currenttrack.StartSector); @@ -603,7 +577,7 @@ namespace DiscImageChef.DiscImages } else if(matchZeroPregap.Success) { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found PREGAP \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found PREGAP \"{1}\" at line {0}", lineNumber, matchZeroPregap.Groups["length"].Value); currenttrack.Indexes.Add(0, currenttrack.StartSector); string[] lengthString = matchZeroPregap.Groups["length"].Value.Split(':'); @@ -611,138 +585,145 @@ namespace DiscImageChef.DiscImages ulong.Parse(lengthString[1]) * 75 + ulong.Parse(lengthString[2]); } else if(matchZeroData.Success) - DicConsole.DebugWriteLine("CDRDAO plugin", "Found ZERO \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found ZERO \"{1}\" at line {0}", lineNumber, matchZeroData.Groups["length"].Value); else if(matchZeroAudio.Success) - DicConsole.DebugWriteLine("CDRDAO plugin", "Found SILENCE \"{1}\" at line {0}", line, + DicConsole.DebugWriteLine("CDRDAO plugin", "Found SILENCE \"{1}\" at line {0}", lineNumber, matchZeroAudio.Groups["length"].Value); - else if(matchAudioFile.Success) + else { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found AUDIOFILE \"{1}\" at line {0}", line, - matchAudioFile.Groups["filename"].Value); - - filtersList = new FiltersList(); - currenttrack.Trackfile = new CdrdaoTrackFile(); - currenttrack.Trackfile.Datafilter = - filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - matchAudioFile.Groups["filename"].Value)); - currenttrack.Trackfile.Datafile = matchAudioFile.Groups["filename"].Value; - currenttrack.Trackfile.Offset = matchAudioFile.Groups["base_offset"].Value != "" - ? ulong.Parse(matchAudioFile.Groups["base_offset"].Value) - : 0; - - currenttrack.Trackfile.Filetype = "BINARY"; - currenttrack.Trackfile.Sequence = currentTrackNumber; - - ulong startSectors = 0; - - if(matchAudioFile.Groups["start"].Value != "") + FiltersList filtersList; + if(matchAudioFile.Success) { - string[] startString = matchAudioFile.Groups["start"].Value.Split(':'); - startSectors = ulong.Parse(startString[0]) * 60 * 75 + ulong.Parse(startString[1]) * 75 + - ulong.Parse(startString[2]); + DicConsole.DebugWriteLine("CDRDAO plugin", "Found AUDIOFILE \"{1}\" at line {0}", lineNumber, + matchAudioFile.Groups["filename"].Value); + + filtersList = new FiltersList(); + currenttrack.Trackfile = new CdrdaoTrackFile + { + Datafilter = + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + matchAudioFile.Groups["filename"].Value)), + Datafile = matchAudioFile.Groups["filename"].Value, + Offset = matchAudioFile.Groups["base_offset"].Value != "" + ? ulong.Parse(matchAudioFile.Groups["base_offset"].Value) + : 0, + Filetype = "BINARY", + Sequence = currentTrackNumber + }; + + ulong startSectors = 0; + + if(matchAudioFile.Groups["start"].Value != "") + { + string[] startString = matchAudioFile.Groups["start"].Value.Split(':'); + startSectors = ulong.Parse(startString[0]) * 60 * 75 + ulong.Parse(startString[1]) * 75 + + ulong.Parse(startString[2]); + } + + currenttrack.Trackfile.Offset += startSectors * currenttrack.Bps; + + if(matchAudioFile.Groups["length"].Value != "") + { + string[] lengthString = matchAudioFile.Groups["length"].Value.Split(':'); + currenttrack.Sectors = ulong.Parse(lengthString[0]) * 60 * 75 + + ulong.Parse(lengthString[1]) * 75 + ulong.Parse(lengthString[2]); + } + else + currenttrack.Sectors = + ((ulong)currenttrack.Trackfile.Datafilter.GetDataForkLength() - + currenttrack.Trackfile.Offset) / currenttrack.Bps; } - - currenttrack.Trackfile.Offset += startSectors * currenttrack.Bps; - - if(matchAudioFile.Groups["length"].Value != "") + else if(matchFile.Success) { - string[] lengthString = matchAudioFile.Groups["length"].Value.Split(':'); - currenttrack.Sectors = ulong.Parse(lengthString[0]) * 60 * 75 + - ulong.Parse(lengthString[1]) * 75 + ulong.Parse(lengthString[2]); + DicConsole.DebugWriteLine("CDRDAO plugin", "Found DATAFILE \"{1}\" at line {0}", lineNumber, + matchFile.Groups["filename"].Value); + + filtersList = new FiltersList(); + currenttrack.Trackfile = new CdrdaoTrackFile + { + Datafilter = + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + matchFile.Groups["filename"].Value)), + Datafile = matchAudioFile.Groups["filename"].Value, + Offset = matchFile.Groups["base_offset"].Value != "" + ? ulong.Parse(matchFile.Groups["base_offset"].Value) + : 0, + Filetype = "BINARY", + Sequence = currentTrackNumber + }; + + if(matchFile.Groups["length"].Value != "") + { + string[] lengthString = matchFile.Groups["length"].Value.Split(':'); + currenttrack.Sectors = ulong.Parse(lengthString[0]) * 60 * 75 + + ulong.Parse(lengthString[1]) * 75 + ulong.Parse(lengthString[2]); + } + else + currenttrack.Sectors = + ((ulong)currenttrack.Trackfile.Datafilter.GetDataForkLength() - + currenttrack.Trackfile.Offset) / currenttrack.Bps; } - else - currenttrack.Sectors = - ((ulong)currenttrack.Trackfile.Datafilter.GetDataForkLength() - - currenttrack.Trackfile.Offset) / currenttrack.Bps; - } - else if(matchFile.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found DATAFILE \"{1}\" at line {0}", line, - matchFile.Groups["filename"].Value); - - filtersList = new FiltersList(); - currenttrack.Trackfile = new CdrdaoTrackFile(); - currenttrack.Trackfile.Datafilter = - filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - matchFile.Groups["filename"].Value)); - currenttrack.Trackfile.Datafile = matchAudioFile.Groups["filename"].Value; - currenttrack.Trackfile.Offset = matchFile.Groups["base_offset"].Value != "" - ? ulong.Parse(matchFile.Groups["base_offset"].Value) - : 0; - - currenttrack.Trackfile.Filetype = "BINARY"; - currenttrack.Trackfile.Sequence = currentTrackNumber; - if(matchFile.Groups["length"].Value != "") + else if(matchTitle.Success) { - string[] lengthString = matchFile.Groups["length"].Value.Split(':'); - currenttrack.Sectors = ulong.Parse(lengthString[0]) * 60 * 75 + - ulong.Parse(lengthString[1]) * 75 + ulong.Parse(lengthString[2]); + DicConsole.DebugWriteLine("CDRDAO plugin", "Found TITLE \"{1}\" at line {0}", lineNumber, + matchTitle.Groups["title"].Value); + if(intrack) currenttrack.Title = matchTitle.Groups["title"].Value; + else discimage.Title = matchTitle.Groups["title"].Value; } - else - currenttrack.Sectors = - ((ulong)currenttrack.Trackfile.Datafilter.GetDataForkLength() - - currenttrack.Trackfile.Offset) / currenttrack.Bps; + else if(matchPerformer.Success) + { + DicConsole.DebugWriteLine("CDRDAO plugin", "Found PERFORMER \"{1}\" at line {0}", lineNumber, + matchPerformer.Groups["performer"].Value); + if(intrack) currenttrack.Performer = matchPerformer.Groups["performer"].Value; + else discimage.Performer = matchPerformer.Groups["performer"].Value; + } + else if(matchSongwriter.Success) + { + DicConsole.DebugWriteLine("CDRDAO plugin", "Found SONGWRITER \"{1}\" at line {0}", lineNumber, + matchSongwriter.Groups["songwriter"].Value); + if(intrack) currenttrack.Songwriter = matchSongwriter.Groups["songwriter"].Value; + else discimage.Songwriter = matchSongwriter.Groups["songwriter"].Value; + } + else if(matchComposer.Success) + { + DicConsole.DebugWriteLine("CDRDAO plugin", "Found COMPOSER \"{1}\" at line {0}", lineNumber, + matchComposer.Groups["composer"].Value); + if(intrack) currenttrack.Composer = matchComposer.Groups["composer"].Value; + else discimage.Composer = matchComposer.Groups["composer"].Value; + } + else if(matchArranger.Success) + { + DicConsole.DebugWriteLine("CDRDAO plugin", "Found ARRANGER \"{1}\" at line {0}", lineNumber, + matchArranger.Groups["arranger"].Value); + if(intrack) currenttrack.Arranger = matchArranger.Groups["arranger"].Value; + else discimage.Arranger = matchArranger.Groups["arranger"].Value; + } + else if(matchMessage.Success) + { + DicConsole.DebugWriteLine("CDRDAO plugin", "Found MESSAGE \"{1}\" at line {0}", lineNumber, + matchMessage.Groups["message"].Value); + if(intrack) currenttrack.Message = matchMessage.Groups["message"].Value; + else discimage.Message = matchMessage.Groups["message"].Value; + } + else if(matchDiscId.Success) + { + DicConsole.DebugWriteLine("CDRDAO plugin", "Found DISC_ID \"{1}\" at line {0}", lineNumber, + matchDiscId.Groups["discid"].Value); + if(!intrack) discimage.DiskId = matchDiscId.Groups["discid"].Value; + } + else if(matchUpc.Success) + { + DicConsole.DebugWriteLine("CDRDAO plugin", "Found UPC_EAN \"{1}\" at line {0}", lineNumber, + matchUpc.Groups["catalog"].Value); + if(!intrack) discimage.Barcode = matchUpc.Groups["catalog"].Value; + } + // Ignored fields + else if(matchCdText.Success || matchLanguage.Success || matchClosure.Success || + matchLanguageMap.Success || matchLanguageMapping.Success) { } + else if(line == "") // Empty line, ignore it + { } } - else if(matchTitle.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found TITLE \"{1}\" at line {0}", line, - matchTitle.Groups["title"].Value); - if(intrack) currenttrack.Title = matchTitle.Groups["title"].Value; - else discimage.Title = matchTitle.Groups["title"].Value; - } - else if(matchPerformer.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found PERFORMER \"{1}\" at line {0}", line, - matchPerformer.Groups["performer"].Value); - if(intrack) currenttrack.Performer = matchPerformer.Groups["performer"].Value; - else discimage.Performer = matchPerformer.Groups["performer"].Value; - } - else if(matchSongwriter.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found SONGWRITER \"{1}\" at line {0}", line, - matchSongwriter.Groups["songwriter"].Value); - if(intrack) currenttrack.Songwriter = matchSongwriter.Groups["songwriter"].Value; - else discimage.Songwriter = matchSongwriter.Groups["songwriter"].Value; - } - else if(matchComposer.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found COMPOSER \"{1}\" at line {0}", line, - matchComposer.Groups["composer"].Value); - if(intrack) currenttrack.Composer = matchComposer.Groups["composer"].Value; - else discimage.Composer = matchComposer.Groups["composer"].Value; - } - else if(matchArranger.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found ARRANGER \"{1}\" at line {0}", line, - matchArranger.Groups["arranger"].Value); - if(intrack) currenttrack.Arranger = matchArranger.Groups["arranger"].Value; - else discimage.Arranger = matchArranger.Groups["arranger"].Value; - } - else if(matchMessage.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found MESSAGE \"{1}\" at line {0}", line, - matchMessage.Groups["message"].Value); - if(intrack) currenttrack.Message = matchMessage.Groups["message"].Value; - else discimage.Message = matchMessage.Groups["message"].Value; - } - else if(matchDiscId.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found DISC_ID \"{1}\" at line {0}", line, - matchDiscId.Groups["discid"].Value); - if(!intrack) discimage.DiskId = matchDiscId.Groups["discid"].Value; - } - else if(matchUpc.Success) - { - DicConsole.DebugWriteLine("CDRDAO plugin", "Found UPC_EAN \"{1}\" at line {0}", line, - matchUpc.Groups["catalog"].Value); - if(!intrack) discimage.Barcode = matchUpc.Groups["catalog"].Value; - } - // Ignored fields - else if(matchCdText.Success || matchLanguage.Success || matchClosure.Success || - matchLanguageMap.Success || matchLanguageMapping.Success) { } - else if(_line == "") // Empty line, ignore it - { } // TODO: Regex CD-TEXT SIZE_INFO /* else // Non-empty unknown field @@ -856,17 +837,18 @@ namespace DiscImageChef.DiscImages if(discimage.Tracks[i].Sequence == 1 && i != 0) throw new ImageNotSupportedException("Unordered tracks"); - Partition partition = new Partition(); - // Index 01 - partition.Description = $"Track {discimage.Tracks[i].Sequence}."; - partition.Name = discimage.Tracks[i].Title; - partition.Start = discimage.Tracks[i].StartSector; - partition.Size = (discimage.Tracks[i].Sectors - index0Len) * discimage.Tracks[i].Bps; - partition.Length = discimage.Tracks[i].Sectors - index0Len; - partition.Sequence = partitionSequence; - partition.Offset = byteOffset; - partition.Type = discimage.Tracks[i].Tracktype; + Partition partition = new Partition + { + Description = $"Track {discimage.Tracks[i].Sequence}.", + Name = discimage.Tracks[i].Title, + Start = discimage.Tracks[i].StartSector, + Size = (discimage.Tracks[i].Sectors - index0Len) * discimage.Tracks[i].Bps, + Length = discimage.Tracks[i].Sectors - index0Len, + Sequence = partitionSequence, + Offset = byteOffset, + Type = discimage.Tracks[i].Tracktype + }; byteOffset += partition.Size; partitionSequence++; @@ -875,8 +857,7 @@ namespace DiscImageChef.DiscImages offsetmap.Add(discimage.Tracks[i].Sequence, partition.Start); else { - ulong oldStart; - offsetmap.TryGetValue(discimage.Tracks[i].Sequence, out oldStart); + offsetmap.TryGetValue(discimage.Tracks[i].Sequence, out ulong oldStart); if(partition.Start < oldStart) { @@ -1074,19 +1055,17 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { - CdrdaoTrack _track = new CdrdaoTrack(); - - _track.Sequence = 0; + CdrdaoTrack dicTrack = new CdrdaoTrack {Sequence = 0}; foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks.Where(cdrdaoTrack => cdrdaoTrack.Sequence == track)) { - _track = cdrdaoTrack; + dicTrack = cdrdaoTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -1094,7 +1073,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case CDRDAO_TRACK_TYPE_MODE1: case CDRDAO_TRACK_TYPE_MODE2_FORM1: @@ -1143,22 +1122,21 @@ namespace DiscImageChef.DiscImages default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - if(_track.Subchannel) sectorSkip += 96; + if(dicTrack.Subchannel) sectorSkip += 96; byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.Trackfile.Datafilter.GetDataForkStream(); + imageStream = dicTrack.Trackfile.Datafilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1168,19 +1146,17 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { - CdrdaoTrack _track = new CdrdaoTrack(); - - _track.Sequence = 0; + CdrdaoTrack dicTrack = new CdrdaoTrack {Sequence = 0}; foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks.Where(cdrdaoTrack => cdrdaoTrack.Sequence == track)) { - _track = cdrdaoTrack; + dicTrack = cdrdaoTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -1188,7 +1164,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip = 0; - if(!_track.Subchannel && tag == SectorTagType.CdSectorSubchannel) + if(!dicTrack.Subchannel && tag == SectorTagType.CdSectorSubchannel) throw new ArgumentException("No tags in image for requested track", nameof(tag)); switch(tag) @@ -1205,21 +1181,21 @@ namespace DiscImageChef.DiscImages { byte[] flags = new byte[1]; - if(_track.Tracktype != CDRDAO_TRACK_TYPE_AUDIO) flags[0] += 0x40; + if(dicTrack.Tracktype != CDRDAO_TRACK_TYPE_AUDIO) flags[0] += 0x40; - if(_track.FlagDcp) flags[0] += 0x20; + if(dicTrack.FlagDcp) flags[0] += 0x20; - if(_track.FlagPre) flags[0] += 0x10; + if(dicTrack.FlagPre) flags[0] += 0x10; - if(_track.Flag_4Ch) flags[0] += 0x80; + if(dicTrack.Flag_4Ch) flags[0] += 0x80; return flags; } - case SectorTagType.CdTrackIsrc: return Encoding.UTF8.GetBytes(_track.Isrc); + case SectorTagType.CdTrackIsrc: return Encoding.UTF8.GetBytes(dicTrack.Isrc); default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case CDRDAO_TRACK_TYPE_MODE1: case CDRDAO_TRACK_TYPE_MODE2_FORM1: @@ -1315,18 +1291,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.Trackfile.Datafilter.GetDataForkStream(); + imageStream = dicTrack.Trackfile.Datafilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1353,19 +1328,17 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { - CdrdaoTrack _track = new CdrdaoTrack(); - - _track.Sequence = 0; + CdrdaoTrack dicTrack = new CdrdaoTrack {Sequence = 0}; foreach(CdrdaoTrack cdrdaoTrack in discimage.Tracks.Where(cdrdaoTrack => cdrdaoTrack.Sequence == track)) { - _track = cdrdaoTrack; + dicTrack = cdrdaoTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -1373,7 +1346,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case CDRDAO_TRACK_TYPE_MODE1: case CDRDAO_TRACK_TYPE_MODE2_FORM1: @@ -1410,24 +1383,23 @@ namespace DiscImageChef.DiscImages default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - if(_track.Subchannel) sectorSkip += 96; + if(dicTrack.Subchannel) sectorSkip += 96; byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.Trackfile.Datafilter.GetDataForkStream(); + imageStream = dicTrack.Trackfile.Datafilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); @@ -1497,36 +1469,38 @@ namespace DiscImageChef.DiscImages foreach(CdrdaoTrack cdrTrack in discimage.Tracks) { - Track _track = new Track(); + Track dicTrack = new Track + { + Indexes = cdrTrack.Indexes, + TrackDescription = cdrTrack.Title, + TrackStartSector = cdrTrack.StartSector, + TrackPregap = cdrTrack.Pregap, + TrackSession = 1, + TrackSequence = cdrTrack.Sequence, + TrackType = CdrdaoTrackTypeToTrackType(cdrTrack.Tracktype), + TrackFilter = cdrTrack.Trackfile.Datafilter, + TrackFile = cdrTrack.Trackfile.Datafilter.GetFilename(), + TrackFileOffset = cdrTrack.Trackfile.Offset, + TrackFileType = cdrTrack.Trackfile.Filetype, + TrackRawBytesPerSector = cdrTrack.Bps, + TrackBytesPerSector = CdrdaoTrackTypeToCookedBytesPerSector(cdrTrack.Tracktype) + }; - _track.Indexes = cdrTrack.Indexes; - _track.TrackDescription = cdrTrack.Title; - if(!cdrTrack.Indexes.TryGetValue(0, out _track.TrackStartSector)) - cdrTrack.Indexes.TryGetValue(1, out _track.TrackStartSector); - _track.TrackStartSector = cdrTrack.StartSector; - _track.TrackEndSector = _track.TrackStartSector + cdrTrack.Sectors - 1; - _track.TrackPregap = cdrTrack.Pregap; - _track.TrackSession = 1; - _track.TrackSequence = cdrTrack.Sequence; - _track.TrackType = CdrdaoTrackTypeToTrackType(cdrTrack.Tracktype); - _track.TrackFilter = cdrTrack.Trackfile.Datafilter; - _track.TrackFile = cdrTrack.Trackfile.Datafilter.GetFilename(); - _track.TrackFileOffset = cdrTrack.Trackfile.Offset; - _track.TrackFileType = cdrTrack.Trackfile.Filetype; - _track.TrackRawBytesPerSector = cdrTrack.Bps; - _track.TrackBytesPerSector = CdrdaoTrackTypeToCookedBytesPerSector(cdrTrack.Tracktype); + dicTrack.TrackEndSector = dicTrack.TrackStartSector + cdrTrack.Sectors - 1; + if(!cdrTrack.Indexes.TryGetValue(0, out dicTrack.TrackStartSector)) + cdrTrack.Indexes.TryGetValue(1, out dicTrack.TrackStartSector); if(cdrTrack.Subchannel) { - _track.TrackSubchannelType = cdrTrack.Packedsubchannel + dicTrack.TrackSubchannelType = cdrTrack.Packedsubchannel ? TrackSubchannelType.PackedInterleaved : TrackSubchannelType.RawInterleaved; - _track.TrackSubchannelFilter = cdrTrack.Trackfile.Datafilter; - _track.TrackSubchannelFile = cdrTrack.Trackfile.Datafilter.GetFilename(); - _track.TrackSubchannelOffset = cdrTrack.Trackfile.Offset; + dicTrack.TrackSubchannelFilter = cdrTrack.Trackfile.Datafilter; + dicTrack.TrackSubchannelFile = cdrTrack.Trackfile.Datafilter.GetFilename(); + dicTrack.TrackSubchannelOffset = cdrTrack.Trackfile.Offset; } - else _track.TrackSubchannelType = TrackSubchannelType.None; + else dicTrack.TrackSubchannelType = TrackSubchannelType.None; - tracks.Add(_track); + tracks.Add(dicTrack); } return tracks; @@ -1582,9 +1556,8 @@ namespace DiscImageChef.DiscImages } if(unknownLbas.Count > 0) return null; - if(failingLbas.Count > 0) return false; - return true; + return failingLbas.Count <= 0; } public override bool? VerifySectors(ulong sectorAddress, uint length, uint track, out List failingLbas, @@ -1613,9 +1586,8 @@ namespace DiscImageChef.DiscImages } if(unknownLbas.Count > 0) return null; - if(failingLbas.Count > 0) return false; - return true; + return failingLbas.Count <= 0; } public override bool? VerifyMediaImage() diff --git a/DiscImageChef.DiscImages/CDRWin.cs b/DiscImageChef.DiscImages/CDRWin.cs index 57e88caa..73c9bec7 100644 --- a/DiscImageChef.DiscImages/CDRWin.cs +++ b/DiscImageChef.DiscImages/CDRWin.cs @@ -241,7 +241,7 @@ namespace DiscImageChef.DiscImages #endregion #region Internal variables - Filter imageFilter; + Filter cdrwinFilter; StreamReader cueStream; Stream imageStream; /// Dictionary, index is track #, value is TrackFile @@ -281,30 +281,32 @@ namespace DiscImageChef.DiscImages { Name = "CDRWin cuesheet"; PluginUuid = new Guid("664568B2-15D4-4E64-8A7A-20BDA8B8386F"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = true; - ImageInfo.ImageHasSessions = true; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageName = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = true, + ImageHasSessions = true, + ImageVersion = null, + ImageApplicationVersion = null, + ImageName = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } // Due to .cue format, this method must parse whole file, ignoring errors (those will be thrown by OpenImage()). public override bool IdentifyImage(Filter imageFilter) { - this.imageFilter = imageFilter; + cdrwinFilter = imageFilter; try { @@ -330,11 +332,11 @@ namespace DiscImageChef.DiscImages return false; } - cueStream = new StreamReader(this.imageFilter.GetDataForkStream()); + cueStream = new StreamReader(cdrwinFilter.GetDataForkStream()); while(cueStream.Peek() >= 0) { - string _line = cueStream.ReadLine(); + string line = cueStream.ReadLine(); Regex sr = new Regex(SESSION_REGEX); Regex rr = new Regex(COMMENT_REGEX); @@ -342,29 +344,21 @@ namespace DiscImageChef.DiscImages Regex fr = new Regex(FILE_REGEX); Regex tr = new Regex(CD_TEXT_REGEX); - Match sm; - Match rm; - Match cm; - Match fm; - Match tm; - // First line must be SESSION, REM, CATALOG, FILE or CDTEXTFILE. - sm = sr.Match(_line ?? throw new InvalidOperationException()); - rm = rr.Match(_line); - cm = cr.Match(_line); - fm = fr.Match(_line); - tm = tr.Match(_line); + Match sm = sr.Match(line ?? throw new InvalidOperationException()); + Match rm = rr.Match(line); + Match cm = cr.Match(line); + Match fm = fr.Match(line); + Match tm = tr.Match(line); - if(!sm.Success && !rm.Success && !cm.Success && !fm.Success && !tm.Success) return false; - - return true; + return sm.Success || rm.Success || cm.Success || fm.Success || tm.Success; } return false; } catch(Exception ex) { - DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", this.imageFilter); + DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", cdrwinFilter); DicConsole.ErrorWriteLine("Exception: {0}", ex.Message); DicConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace); return false; @@ -375,13 +369,13 @@ namespace DiscImageChef.DiscImages { if(imageFilter == null) return false; - this.imageFilter = imageFilter; + cdrwinFilter = imageFilter; try { imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); cueStream = new StreamReader(imageFilter.GetDataForkStream()); - int line = 0; + int lineNumber = 0; bool intrack = false; byte currentsession = 1; @@ -410,64 +404,43 @@ namespace DiscImageChef.DiscImages Regex regexFlags = new Regex(FLAGS_REGEX); // Initialize all RegEx matches - Match matchSession; - Match matchDiskType; - Match matchLeadOut; - Match matchLba; - Match matchDiskId; - Match matchBarCode; - Match matchComment; - Match matchCdText; - Match matchMcn; - Match matchTitle; - Match matchGenre; - Match matchArranger; - Match matchComposer; - Match matchPerformer; - Match matchSongWriter; - Match matchFile; Match matchTrack; - Match matchIsrc; - Match matchIndex; - Match matchPregap; - Match matchPostgap; - Match matchFlags; // Initialize disc - discimage = new CdrWinDisc(); - discimage.Sessions = new List(); - discimage.Tracks = new List(); - discimage.Comment = ""; + discimage = new CdrWinDisc + { + Sessions = new List(), + Tracks = new List(), + Comment = "" + }; - CdrWinTrack currenttrack = new CdrWinTrack(); - currenttrack.Indexes = new Dictionary(); + CdrWinTrack currenttrack = new CdrWinTrack {Indexes = new Dictionary()}; CdrWinTrackFile currentfile = new CdrWinTrackFile(); ulong currentfileoffsetsector = 0; - CdrWinTrack[] cuetracks; int trackCount = 0; while(cueStream.Peek() >= 0) { - line++; - string _line = cueStream.ReadLine(); + lineNumber++; + string line = cueStream.ReadLine(); - matchTrack = regexTrack.Match(_line); + matchTrack = regexTrack.Match(line); if(!matchTrack.Success) continue; uint trackSeq = uint.Parse(matchTrack.Groups[1].Value); if(trackCount + 1 != trackSeq) throw new - FeatureUnsupportedImageException($"Found TRACK {trackSeq} out of order in line {line}"); + FeatureUnsupportedImageException($"Found TRACK {trackSeq} out of order in line {lineNumber}"); trackCount++; } if(trackCount == 0) throw new FeatureUnsupportedImageException("No tracks found"); - cuetracks = new CdrWinTrack[trackCount]; + CdrWinTrack[] cuetracks = new CdrWinTrack[trackCount]; - line = 0; + lineNumber = 0; imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); cueStream = new StreamReader(imageFilter.GetDataForkStream()); @@ -475,35 +448,35 @@ namespace DiscImageChef.DiscImages while(cueStream.Peek() >= 0) { - line++; - string _line = cueStream.ReadLine(); + lineNumber++; + string line = cueStream.ReadLine(); - matchSession = regexSession.Match(_line); - matchDiskType = regexDiskType.Match(_line); - matchComment = regexComment.Match(_line); - matchLba = regexLba.Match(_line); // Unhandled, just ignored - matchLeadOut = regexLeadOut.Match(_line); // Unhandled, just ignored + Match matchSession = regexSession.Match(line); + Match matchDiskType = regexDiskType.Match(line); + Match matchComment = regexComment.Match(line); + Match matchLba = regexLba.Match(line); + Match matchLeadOut = regexLeadOut.Match(line); if(matchDiskType.Success && !intrack) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found REM ORIGINAL MEDIA TYPE at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found REM ORIGINAL MEDIA TYPE at line {0}", lineNumber); discimage.Disktypestr = matchDiskType.Groups[1].Value; } else if(matchDiskType.Success && intrack) throw new - FeatureUnsupportedImageException($"Found REM ORIGINAL MEDIA TYPE field after a track in line {line}"); + FeatureUnsupportedImageException($"Found REM ORIGINAL MEDIA TYPE field after a track in line {lineNumber}"); else if(matchSession.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found REM SESSION at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found REM SESSION at line {0}", lineNumber); currentsession = byte.Parse(matchSession.Groups[1].Value); // What happens between sessions } - else if(matchLba.Success) DicConsole.DebugWriteLine("CDRWin plugin", "Found REM MSF at line {0}", line); - else if(matchLeadOut.Success) DicConsole.DebugWriteLine("CDRWin plugin", "Found REM LEAD-OUT at line {0}", line); + else if(matchLba.Success) DicConsole.DebugWriteLine("CDRWin plugin", "Found REM MSF at line {0}", lineNumber); + else if(matchLeadOut.Success) DicConsole.DebugWriteLine("CDRWin plugin", "Found REM LEAD-OUT at line {0}", lineNumber); else if(matchComment.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found REM at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found REM at line {0}", lineNumber); if(discimage.Comment == "") discimage.Comment = matchComment.Groups[1].Value; // First comment else discimage.Comment += @@ -511,63 +484,63 @@ namespace DiscImageChef.DiscImages } else { - matchTrack = regexTrack.Match(_line); - matchTitle = regexTitle.Match(_line); - matchSongWriter = regexSongWriter.Match(_line); - matchPregap = regexPregap.Match(_line); - matchPostgap = regexPostgap.Match(_line); - matchPerformer = regexPerformer.Match(_line); - matchMcn = regexMcn.Match(_line); - matchIsrc = regexIsrc.Match(_line); - matchIndex = regexIndex.Match(_line); - matchGenre = regexGenre.Match(_line); - matchFlags = regexFlags.Match(_line); - matchFile = regexFile.Match(_line); - matchDiskId = regexDiskId.Match(_line); - matchComposer = regexComposer.Match(_line); - matchCdText = regexCdText.Match(_line); - matchBarCode = regexBarCode.Match(_line); - matchArranger = regexArranger.Match(_line); + matchTrack = regexTrack.Match(line); + Match matchTitle = regexTitle.Match(line); + Match matchSongWriter = regexSongWriter.Match(line); + Match matchPregap = regexPregap.Match(line); + Match matchPostgap = regexPostgap.Match(line); + Match matchPerformer = regexPerformer.Match(line); + Match matchMcn = regexMcn.Match(line); + Match matchIsrc = regexIsrc.Match(line); + Match matchIndex = regexIndex.Match(line); + Match matchGenre = regexGenre.Match(line); + Match matchFlags = regexFlags.Match(line); + Match matchFile = regexFile.Match(line); + Match matchDiskId = regexDiskId.Match(line); + Match matchComposer = regexComposer.Match(line); + Match matchCdText = regexCdText.Match(line); + Match matchBarCode = regexBarCode.Match(line); + Match matchArranger = regexArranger.Match(line); if(matchArranger.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found ARRANGER at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found ARRANGER at line {0}", lineNumber); if(intrack) currenttrack.Arranger = matchArranger.Groups[1].Value; else discimage.Arranger = matchArranger.Groups[1].Value; } else if(matchBarCode.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found UPC_EAN at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found UPC_EAN at line {0}", lineNumber); if(!intrack) discimage.Barcode = matchBarCode.Groups[1].Value; else throw new - FeatureUnsupportedImageException($"Found barcode field in incorrect place at line {line}"); + FeatureUnsupportedImageException($"Found barcode field in incorrect place at line {lineNumber}"); } else if(matchCdText.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found CDTEXTFILE at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found CDTEXTFILE at line {0}", lineNumber); if(!intrack) discimage.Cdtextfile = matchCdText.Groups[1].Value; else throw new - FeatureUnsupportedImageException($"Found CD-Text file field in incorrect place at line {line}"); + FeatureUnsupportedImageException($"Found CD-Text file field in incorrect place at line {lineNumber}"); } else if(matchComposer.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found COMPOSER at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found COMPOSER at line {0}", lineNumber); if(intrack) currenttrack.Composer = matchComposer.Groups[1].Value; else discimage.Composer = matchComposer.Groups[1].Value; } else if(matchDiskId.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found DISC_ID at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found DISC_ID at line {0}", lineNumber); if(!intrack) discimage.DiskId = matchDiskId.Groups[1].Value; else throw new - FeatureUnsupportedImageException($"Found CDDB ID field in incorrect place at line {line}"); + FeatureUnsupportedImageException($"Found CDDB ID field in incorrect place at line {lineNumber}"); } else if(matchFile.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found FILE at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found FILE at line {0}", lineNumber); if(currenttrack.Sequence != 0) { @@ -678,10 +651,10 @@ namespace DiscImageChef.DiscImages } else if(matchFlags.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found FLAGS at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found FLAGS at line {0}", lineNumber); if(!intrack) throw new - FeatureUnsupportedImageException($"Found FLAGS field in incorrect place at line {line}"); + FeatureUnsupportedImageException($"Found FLAGS field in incorrect place at line {lineNumber}"); currenttrack.FlagDcp |= matchFile.Groups["dcp"].Value == "DCP"; currenttrack.Flag4ch |= matchFile.Groups["quad"].Value == "4CH"; @@ -690,16 +663,16 @@ namespace DiscImageChef.DiscImages } else if(matchGenre.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found GENRE at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found GENRE at line {0}", lineNumber); if(intrack) currenttrack.Genre = matchGenre.Groups[1].Value; else discimage.Genre = matchGenre.Groups[1].Value; } else if(matchIndex.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found INDEX at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found INDEX at line {0}", lineNumber); if(!intrack) throw new - FeatureUnsupportedImageException($"Found INDEX before a track {line}"); + FeatureUnsupportedImageException($"Found INDEX before a track {lineNumber}"); int index = int.Parse(matchIndex.Groups[1].Value); ulong offset = CdrWinMsftoLba(matchIndex.Groups[2].Value); @@ -740,61 +713,61 @@ namespace DiscImageChef.DiscImages } else if(matchIsrc.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found ISRC at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found ISRC at line {0}", lineNumber); if(!intrack) throw new - FeatureUnsupportedImageException($"Found ISRC before a track {line}"); + FeatureUnsupportedImageException($"Found ISRC before a track {lineNumber}"); currenttrack.Isrc = matchIsrc.Groups[1].Value; } else if(matchMcn.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found CATALOG at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found CATALOG at line {0}", lineNumber); if(!intrack) discimage.Mcn = matchMcn.Groups[1].Value; else throw new - FeatureUnsupportedImageException($"Found CATALOG field in incorrect place at line {line}"); + FeatureUnsupportedImageException($"Found CATALOG field in incorrect place at line {lineNumber}"); } else if(matchPerformer.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found PERFORMER at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found PERFORMER at line {0}", lineNumber); if(intrack) currenttrack.Performer = matchPerformer.Groups[1].Value; else discimage.Performer = matchPerformer.Groups[1].Value; } else if(matchPostgap.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found POSTGAP at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found POSTGAP at line {0}", lineNumber); if(intrack) currenttrack.Postgap = CdrWinMsftoLba(matchPostgap.Groups[1].Value); else throw new - FeatureUnsupportedImageException($"Found POSTGAP field before a track at line {line}"); + FeatureUnsupportedImageException($"Found POSTGAP field before a track at line {lineNumber}"); } else if(matchPregap.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found PREGAP at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found PREGAP at line {0}", lineNumber); if(intrack) currenttrack.Pregap = CdrWinMsftoLba(matchPregap.Groups[1].Value); else throw new - FeatureUnsupportedImageException($"Found PREGAP field before a track at line {line}"); + FeatureUnsupportedImageException($"Found PREGAP field before a track at line {lineNumber}"); } else if(matchSongWriter.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found SONGWRITER at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found SONGWRITER at line {0}", lineNumber); if(intrack) currenttrack.Songwriter = matchSongWriter.Groups[1].Value; else discimage.Songwriter = matchSongWriter.Groups[1].Value; } else if(matchTitle.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found TITLE at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found TITLE at line {0}", lineNumber); if(intrack) currenttrack.Title = matchTitle.Groups[1].Value; else discimage.Title = matchTitle.Groups[1].Value; } else if(matchTrack.Success) { - DicConsole.DebugWriteLine("CDRWin plugin", "Found TRACK at line {0}", line); + DicConsole.DebugWriteLine("CDRWin plugin", "Found TRACK at line {0}", lineNumber); if(currentfile.Datafilter == null) throw new - FeatureUnsupportedImageException($"Found TRACK field before a file is defined at line {line}"); + FeatureUnsupportedImageException($"Found TRACK field before a file is defined at line {lineNumber}"); if(intrack) { @@ -803,9 +776,11 @@ namespace DiscImageChef.DiscImages currenttrack.Trackfile = currentfile; cuetracks[currenttrack.Sequence - 1] = currenttrack; } - currenttrack = new CdrWinTrack(); - currenttrack.Indexes = new Dictionary(); - currenttrack.Sequence = uint.Parse(matchTrack.Groups[1].Value); + currenttrack = new CdrWinTrack + { + Indexes = new Dictionary(), + Sequence = uint.Parse(matchTrack.Groups[1].Value) + }; DicConsole.DebugWriteLine("CDRWin plugin", "Setting currenttrack.sequence to {0}", currenttrack.Sequence); currentfile.Sequence = currenttrack.Sequence; @@ -814,11 +789,11 @@ namespace DiscImageChef.DiscImages currenttrack.Session = currentsession; intrack = true; } - else if(_line == "") // Empty line, ignore it + else if(line == "") // Empty line, ignore it { } else // Non-empty unknown field throw new - FeatureUnsupportedImageException($"Found unknown field defined at line {line}: \"{_line}\""); + FeatureUnsupportedImageException($"Found unknown field defined at line {lineNumber}: \"{line}\""); } } @@ -1126,8 +1101,7 @@ namespace DiscImageChef.DiscImages offsetmap.Add(discimage.Tracks[i].Sequence, partition.Start); else { - ulong oldStart; - offsetmap.TryGetValue(discimage.Tracks[i].Sequence, out oldStart); + offsetmap.TryGetValue(discimage.Tracks[i].Sequence, out ulong oldStart); if(partition.Start < oldStart) { @@ -1337,19 +1311,17 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { - CdrWinTrack _track = new CdrWinTrack(); - - _track.Sequence = 0; + CdrWinTrack dicTrack = new CdrWinTrack {Sequence = 0}; foreach(CdrWinTrack cdrwinTrack in discimage.Tracks.Where(cdrwinTrack => cdrwinTrack.Sequence == track)) { - _track = cdrwinTrack; + dicTrack = cdrwinTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -1357,7 +1329,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case CDRWIN_TRACK_TYPE_MODE1: case CDRWIN_TRACK_TYPE_MODE2_FORM1: @@ -1422,18 +1394,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.Trackfile.Datafilter.GetDataForkStream(); + imageStream = dicTrack.Trackfile.Datafilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1443,19 +1414,17 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { - CdrWinTrack _track = new CdrWinTrack(); - - _track.Sequence = 0; + CdrWinTrack dicTrack = new CdrWinTrack {Sequence = 0}; foreach(CdrWinTrack cdrwinTrack in discimage.Tracks.Where(cdrwinTrack => cdrwinTrack.Sequence == track)) { - _track = cdrwinTrack; + dicTrack = cdrwinTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -1477,24 +1446,24 @@ namespace DiscImageChef.DiscImages { byte[] flags = new byte[1]; - if(_track.Tracktype != CDRWIN_TRACK_TYPE_AUDIO && _track.Tracktype != CDRWIN_TRACK_TYPE_CDG) + if(dicTrack.Tracktype != CDRWIN_TRACK_TYPE_AUDIO && dicTrack.Tracktype != CDRWIN_TRACK_TYPE_CDG) flags[0] += 0x40; - if(_track.FlagDcp) flags[0] += 0x20; + if(dicTrack.FlagDcp) flags[0] += 0x20; - if(_track.FlagPre) flags[0] += 0x10; + if(dicTrack.FlagPre) flags[0] += 0x10; - if(_track.Flag4ch) flags[0] += 0x80; + if(dicTrack.Flag4ch) flags[0] += 0x80; return flags; } - case SectorTagType.CdTrackIsrc: return Encoding.UTF8.GetBytes(_track.Isrc); + case SectorTagType.CdTrackIsrc: return Encoding.UTF8.GetBytes(dicTrack.Isrc); case SectorTagType.CdTrackText: throw new FeatureSupportedButNotImplementedImageException("Feature not yet implemented"); default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case CDRWIN_TRACK_TYPE_MODE1: case CDRWIN_TRACK_TYPE_MODE2_FORM1: @@ -1605,18 +1574,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.Trackfile.Datafilter.GetDataForkStream(); + imageStream = dicTrack.Trackfile.Datafilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1643,19 +1611,17 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { - CdrWinTrack _track = new CdrWinTrack(); - - _track.Sequence = 0; + CdrWinTrack dicTrack = new CdrWinTrack {Sequence = 0}; foreach(CdrWinTrack cdrwinTrack in discimage.Tracks.Where(cdrwinTrack => cdrwinTrack.Sequence == track)) { - _track = cdrwinTrack; + dicTrack = cdrwinTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -1663,7 +1629,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case CDRWIN_TRACK_TYPE_MODE1: case CDRWIN_TRACK_TYPE_MODE2_FORM1: @@ -1710,20 +1676,19 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = _track.Trackfile.Datafilter.GetDataForkStream(); + imageStream = dicTrack.Trackfile.Datafilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Trackfile.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); @@ -1795,35 +1760,37 @@ namespace DiscImageChef.DiscImages foreach(CdrWinTrack cdrTrack in discimage.Tracks) { - Track _track = new Track(); + Track dicTrack = new Track + { + Indexes = cdrTrack.Indexes, + TrackDescription = cdrTrack.Title, + TrackStartSector = previousStartSector, + TrackPregap = cdrTrack.Pregap, + TrackSession = cdrTrack.Session, + TrackSequence = cdrTrack.Sequence, + TrackType = CdrWinTrackTypeToTrackType(cdrTrack.Tracktype), + TrackFile = cdrTrack.Trackfile.Datafilter.GetFilename(), + TrackFilter = cdrTrack.Trackfile.Datafilter, + TrackFileOffset = cdrTrack.Trackfile.Offset, + TrackFileType = cdrTrack.Trackfile.Filetype, + TrackRawBytesPerSector = cdrTrack.Bps, + TrackBytesPerSector = CdrWinTrackTypeToCookedBytesPerSector(cdrTrack.Tracktype) + }; + dicTrack.TrackEndSector = dicTrack.TrackStartSector + cdrTrack.Sectors - 1; - _track.Indexes = cdrTrack.Indexes; - _track.TrackDescription = cdrTrack.Title; - if(!cdrTrack.Indexes.TryGetValue(0, out _track.TrackStartSector)) - cdrTrack.Indexes.TryGetValue(1, out _track.TrackStartSector); - _track.TrackStartSector = previousStartSector; - _track.TrackEndSector = _track.TrackStartSector + cdrTrack.Sectors - 1; - _track.TrackPregap = cdrTrack.Pregap; - _track.TrackSession = cdrTrack.Session; - _track.TrackSequence = cdrTrack.Sequence; - _track.TrackType = CdrWinTrackTypeToTrackType(cdrTrack.Tracktype); - _track.TrackFile = cdrTrack.Trackfile.Datafilter.GetFilename(); - _track.TrackFilter = cdrTrack.Trackfile.Datafilter; - _track.TrackFileOffset = cdrTrack.Trackfile.Offset; - _track.TrackFileType = cdrTrack.Trackfile.Filetype; - _track.TrackRawBytesPerSector = cdrTrack.Bps; - _track.TrackBytesPerSector = CdrWinTrackTypeToCookedBytesPerSector(cdrTrack.Tracktype); + if(!cdrTrack.Indexes.TryGetValue(0, out dicTrack.TrackStartSector)) + cdrTrack.Indexes.TryGetValue(1, out dicTrack.TrackStartSector); if(cdrTrack.Bps == 2448) { - _track.TrackSubchannelFilter = cdrTrack.Trackfile.Datafilter; - _track.TrackSubchannelFile = cdrTrack.Trackfile.Datafilter.GetFilename(); - _track.TrackSubchannelOffset = cdrTrack.Trackfile.Offset; - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackSubchannelFilter = cdrTrack.Trackfile.Datafilter; + dicTrack.TrackSubchannelFile = cdrTrack.Trackfile.Datafilter.GetFilename(); + dicTrack.TrackSubchannelOffset = cdrTrack.Trackfile.Offset; + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; } - else _track.TrackSubchannelType = TrackSubchannelType.None; + else dicTrack.TrackSubchannelType = TrackSubchannelType.None; - tracks.Add(_track); - previousStartSector = _track.TrackEndSector + 1; + tracks.Add(dicTrack); + previousStartSector = dicTrack.TrackEndSector + 1; } return tracks; @@ -1843,33 +1810,35 @@ namespace DiscImageChef.DiscImages foreach(CdrWinTrack cdrTrack in discimage.Tracks) if(cdrTrack.Session == session) { - Track _track = new Track(); + Track dicTrack = new Track + { + Indexes = cdrTrack.Indexes, + TrackDescription = cdrTrack.Title, + TrackPregap = cdrTrack.Pregap, + TrackSession = cdrTrack.Session, + TrackSequence = cdrTrack.Sequence, + TrackType = CdrWinTrackTypeToTrackType(cdrTrack.Tracktype), + TrackFile = cdrTrack.Trackfile.Datafilter.GetFilename(), + TrackFilter = cdrTrack.Trackfile.Datafilter, + TrackFileOffset = cdrTrack.Trackfile.Offset, + TrackFileType = cdrTrack.Trackfile.Filetype, + TrackRawBytesPerSector = cdrTrack.Bps, + TrackBytesPerSector = CdrWinTrackTypeToCookedBytesPerSector(cdrTrack.Tracktype) + }; - _track.Indexes = cdrTrack.Indexes; - _track.TrackDescription = cdrTrack.Title; - if(!cdrTrack.Indexes.TryGetValue(0, out _track.TrackStartSector)) - cdrTrack.Indexes.TryGetValue(1, out _track.TrackStartSector); - _track.TrackEndSector = _track.TrackStartSector + cdrTrack.Sectors - 1; - _track.TrackPregap = cdrTrack.Pregap; - _track.TrackSession = cdrTrack.Session; - _track.TrackSequence = cdrTrack.Sequence; - _track.TrackType = CdrWinTrackTypeToTrackType(cdrTrack.Tracktype); - _track.TrackFile = cdrTrack.Trackfile.Datafilter.GetFilename(); - _track.TrackFilter = cdrTrack.Trackfile.Datafilter; - _track.TrackFileOffset = cdrTrack.Trackfile.Offset; - _track.TrackFileType = cdrTrack.Trackfile.Filetype; - _track.TrackRawBytesPerSector = cdrTrack.Bps; - _track.TrackBytesPerSector = CdrWinTrackTypeToCookedBytesPerSector(cdrTrack.Tracktype); + if(!cdrTrack.Indexes.TryGetValue(0, out dicTrack.TrackStartSector)) + cdrTrack.Indexes.TryGetValue(1, out dicTrack.TrackStartSector); + dicTrack.TrackEndSector = dicTrack.TrackStartSector + cdrTrack.Sectors - 1; if(cdrTrack.Bps == 2448) { - _track.TrackSubchannelFilter = cdrTrack.Trackfile.Datafilter; - _track.TrackSubchannelFile = cdrTrack.Trackfile.Datafilter.GetFilename(); - _track.TrackSubchannelOffset = cdrTrack.Trackfile.Offset; - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackSubchannelFilter = cdrTrack.Trackfile.Datafilter; + dicTrack.TrackSubchannelFile = cdrTrack.Trackfile.Datafilter.GetFilename(); + dicTrack.TrackSubchannelOffset = cdrTrack.Trackfile.Offset; + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; } - else _track.TrackSubchannelType = TrackSubchannelType.None; + else dicTrack.TrackSubchannelType = TrackSubchannelType.None; - tracks.Add(_track); + tracks.Add(dicTrack); } return tracks; @@ -1963,10 +1932,9 @@ namespace DiscImageChef.DiscImages #region Private methods static ulong CdrWinMsftoLba(string msf) { - string[] msfElements; ulong minute, second, frame, sectors; - msfElements = msf.Split(':'); + string[] msfElements = msf.Split(':'); minute = ulong.Parse(msfElements[0]); second = ulong.Parse(msfElements[1]); frame = ulong.Parse(msfElements[2]); diff --git a/DiscImageChef.DiscImages/CHD.cs b/DiscImageChef.DiscImages/CHD.cs index 39fd7cb5..d2d34f45 100644 --- a/DiscImageChef.DiscImages/CHD.cs +++ b/DiscImageChef.DiscImages/CHD.cs @@ -581,25 +581,27 @@ namespace DiscImageChef.DiscImages { Name = "MAME Compressed Hunks of Data"; PluginUuid = new Guid("0D50233A-08BD-47D4-988B-27EAA0358597"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageApplication = "MAME"; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageApplication = "MAME", + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -616,12 +618,11 @@ namespace DiscImageChef.DiscImages { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); - byte[] buffer; byte[] magic = new byte[8]; stream.Read(magic, 0, 8); if(!chdTag.SequenceEqual(magic)) return false; // Read length - buffer = new byte[4]; + byte[] buffer = new byte[4]; stream.Read(buffer, 0, 4); uint length = BitConverter.ToUInt32(buffer.Reverse().ToArray(), 0); buffer = new byte[4]; @@ -665,7 +666,6 @@ namespace DiscImageChef.DiscImages uint hunkSectorCount = (uint)Math.Ceiling((double)hdrV1.totalhunks * 8 / 512); byte[] hunkSectorBytes = new byte[512]; - HunkSector hunkSector; for(int i = 0; i < hunkSectorCount; i++) { @@ -673,8 +673,7 @@ namespace DiscImageChef.DiscImages // This does the big-endian trick but reverses the order of elements also Array.Reverse(hunkSectorBytes); GCHandle handle = GCHandle.Alloc(hunkSectorBytes, GCHandleType.Pinned); - hunkSector = - (HunkSector)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(HunkSector)); + HunkSector hunkSector = (HunkSector)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(HunkSector)); handle.Free(); // This restores the order of elements Array.Reverse(hunkSector.hunkEntry); @@ -738,7 +737,6 @@ namespace DiscImageChef.DiscImages uint hunkSectorCount = (uint)Math.Ceiling((double)hdrV2.totalhunks * 8 / 512); byte[] hunkSectorBytes = new byte[512]; - HunkSector hunkSector; for(int i = 0; i < hunkSectorCount; i++) { @@ -746,8 +744,7 @@ namespace DiscImageChef.DiscImages // This does the big-endian trick but reverses the order of elements also Array.Reverse(hunkSectorBytes); GCHandle handle = GCHandle.Alloc(hunkSectorBytes, GCHandleType.Pinned); - hunkSector = - (HunkSector)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(HunkSector)); + HunkSector hunkSector = (HunkSector)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(HunkSector)); handle.Free(); // This restores the order of elements Array.Reverse(hunkSector.hunkEntry); @@ -915,7 +912,6 @@ namespace DiscImageChef.DiscImages uint hunkSectorCount = (uint)Math.Ceiling((double)hunkTableSmall.Length * 4 / 512); byte[] hunkSectorBytes = new byte[512]; - HunkSectorSmall hunkSector; stream.Seek((long)hdrV5.mapoffset, SeekOrigin.Begin); @@ -925,9 +921,8 @@ namespace DiscImageChef.DiscImages // This does the big-endian trick but reverses the order of elements also Array.Reverse(hunkSectorBytes); GCHandle handle = GCHandle.Alloc(hunkSectorBytes, GCHandleType.Pinned); - hunkSector = - (HunkSectorSmall)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), - typeof(HunkSectorSmall)); + HunkSectorSmall hunkSector = (HunkSectorSmall)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), + typeof(HunkSectorSmall)); handle.Free(); // This restores the order of elements Array.Reverse(hunkSector.hunkEntry); @@ -963,7 +958,6 @@ namespace DiscImageChef.DiscImages if(mapVersion >= 3) { - byte[] meta; isCdrom = false; isHdd = false; isGdrom = false; @@ -982,7 +976,7 @@ namespace DiscImageChef.DiscImages stream.Read(hdrBytes, 0, hdrBytes.Length); ChdMetadataHeader header = BigEndianMarshal.ByteArrayToStructureBigEndian(hdrBytes); - meta = new byte[header.flagsAndLength & 0xFFFFFF]; + byte[] meta = new byte[header.flagsAndLength & 0xFFFFFF]; stream.Read(meta, 0, meta.Length); DicConsole.DebugWriteLine("CHD plugin", "Found metadata \"{0}\"", Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(header.tag))); @@ -1017,101 +1011,103 @@ namespace DiscImageChef.DiscImages throw new ImageNotSupportedException("Image cannot be a GD-ROM and a CD-ROM at the same time, aborting."); - uint _tracks = BigEndianBitConverter.ToUInt32(meta, 0); + uint chdTracksNumber = BigEndianBitConverter.ToUInt32(meta, 0); // Byteswapped - if(_tracks > 99) + if(chdTracksNumber > 99) { BigEndianBitConverter.IsLittleEndian = !BitConverter.IsLittleEndian; - _tracks = BigEndianBitConverter.ToUInt32(meta, 0); + chdTracksNumber = BigEndianBitConverter.ToUInt32(meta, 0); } currentSector = 0; - for(uint i = 0; i < _tracks; i++) + for(uint i = 0; i < chdTracksNumber; i++) { - ChdTrackOld _trk = new ChdTrackOld(); - _trk.type = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 0)); - _trk.subType = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 4)); - _trk.dataSize = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 8)); - _trk.subSize = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 12)); - _trk.frames = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 16)); - _trk.extraFrames = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 20)); + ChdTrackOld chdTrack = new ChdTrackOld + { + type = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 0)), + subType = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 4)), + dataSize = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 8)), + subSize = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 12)), + frames = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 16)), + extraFrames = BigEndianBitConverter.ToUInt32(meta, (int)(4 + i * 24 + 20)) + }; - Track _track = new Track(); - switch((ChdOldTrackType)_trk.type) + Track dicTrack = new Track(); + switch((ChdOldTrackType)chdTrack.type) { case ChdOldTrackType.Audio: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.Audio; + dicTrack.TrackBytesPerSector = 2352; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.Audio; break; case ChdOldTrackType.Mode1: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode1; break; case ChdOldTrackType.Mode1Raw: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode1; break; case ChdOldTrackType.Mode2: case ChdOldTrackType.Mode2FormMix: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2336; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2336; + dicTrack.TrackType = TrackType.CdMode2Formless; break; case ChdOldTrackType.Mode2Form1: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode2Form1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode2Form1; break; case ChdOldTrackType.Mode2Form2: - _track.TrackBytesPerSector = 2324; - _track.TrackRawBytesPerSector = 2324; - _track.TrackType = TrackType.CdMode2Form2; + dicTrack.TrackBytesPerSector = 2324; + dicTrack.TrackRawBytesPerSector = 2324; + dicTrack.TrackType = TrackType.CdMode2Form2; break; case ChdOldTrackType.Mode2Raw: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode2Formless; break; default: - throw new ImageNotSupportedException($"Unsupported track type {_trk.type}"); + throw new ImageNotSupportedException($"Unsupported track type {chdTrack.type}"); } - switch((ChdOldSubType)_trk.subType) + switch((ChdOldSubType)chdTrack.subType) { case ChdOldSubType.Cooked: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; case ChdOldSubType.None: - _track.TrackSubchannelType = TrackSubchannelType.None; + dicTrack.TrackSubchannelType = TrackSubchannelType.None; break; case ChdOldSubType.Raw: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; default: throw new - ImageNotSupportedException($"Unsupported subchannel type {_trk.type}"); + ImageNotSupportedException($"Unsupported subchannel type {chdTrack.type}"); } - _track.Indexes = new Dictionary(); - _track.TrackDescription = $"Track {i + 1}"; - _track.TrackEndSector = currentSector + _trk.frames - 1; - _track.TrackFile = imageFilter.GetFilename(); - _track.TrackFileType = "BINARY"; - _track.TrackFilter = imageFilter; - _track.TrackStartSector = currentSector; - _track.TrackSequence = i + 1; - _track.TrackSession = 1; - currentSector += _trk.frames + _trk.extraFrames; - tracks.Add(_track.TrackSequence, _track); + dicTrack.Indexes = new Dictionary(); + dicTrack.TrackDescription = $"Track {i + 1}"; + dicTrack.TrackEndSector = currentSector + chdTrack.frames - 1; + dicTrack.TrackFile = imageFilter.GetFilename(); + dicTrack.TrackFileType = "BINARY"; + dicTrack.TrackFilter = imageFilter; + dicTrack.TrackStartSector = currentSector; + dicTrack.TrackSequence = i + 1; + dicTrack.TrackSession = 1; + currentSector += chdTrack.frames + chdTrack.extraFrames; + tracks.Add(dicTrack.TrackSequence, dicTrack); } BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; @@ -1143,50 +1139,50 @@ namespace DiscImageChef.DiscImages if(trackNo != currentTrack) throw new ImageNotSupportedException("Unsorted tracks, cannot proceed."); - Track _track = new Track(); + Track dicTrack = new Track(); switch(tracktype) { case TRACK_TYPE_AUDIO: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.Audio; + dicTrack.TrackBytesPerSector = 2352; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.Audio; break; case TRACK_TYPE_MODE1: case TRACK_TYPE_MODE1_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode1; break; case TRACK_TYPE_MODE1_RAW: case TRACK_TYPE_MODE1_RAW_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode1; break; case TRACK_TYPE_MODE2: case TRACK_TYPE_MODE2_2K: case TRACK_TYPE_MODE2_FM: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2336; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2336; + dicTrack.TrackType = TrackType.CdMode2Formless; break; case TRACK_TYPE_MODE2_F1: case TRACK_TYPE_MODE2_F1_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode2Form1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode2Form1; break; case TRACK_TYPE_MODE2_F2: case TRACK_TYPE_MODE2_F2_2K: - _track.TrackBytesPerSector = 2324; - _track.TrackRawBytesPerSector = 2324; - _track.TrackType = TrackType.CdMode2Form2; + dicTrack.TrackBytesPerSector = 2324; + dicTrack.TrackRawBytesPerSector = 2324; + dicTrack.TrackType = TrackType.CdMode2Form2; break; case TRACK_TYPE_MODE2_RAW: case TRACK_TYPE_MODE2_RAW_2K: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode2Formless; break; default: throw new ImageNotSupportedException($"Unsupported track type {tracktype}"); @@ -1195,35 +1191,35 @@ namespace DiscImageChef.DiscImages switch(subtype) { case SUB_TYPE_COOKED: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; case SUB_TYPE_NONE: - _track.TrackSubchannelType = TrackSubchannelType.None; + dicTrack.TrackSubchannelType = TrackSubchannelType.None; break; case SUB_TYPE_RAW: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; default: throw new ImageNotSupportedException($"Unsupported subchannel type {subtype}"); } - _track.Indexes = new Dictionary(); - _track.TrackDescription = $"Track {trackNo}"; - _track.TrackEndSector = currentSector + frames - 1; - _track.TrackFile = imageFilter.GetFilename(); - _track.TrackFileType = "BINARY"; - _track.TrackFilter = imageFilter; - _track.TrackStartSector = currentSector; - _track.TrackSequence = trackNo; - _track.TrackSession = 1; + dicTrack.Indexes = new Dictionary(); + dicTrack.TrackDescription = $"Track {trackNo}"; + dicTrack.TrackEndSector = currentSector + frames - 1; + dicTrack.TrackFile = imageFilter.GetFilename(); + dicTrack.TrackFileType = "BINARY"; + dicTrack.TrackFilter = imageFilter; + dicTrack.TrackStartSector = currentSector; + dicTrack.TrackSequence = trackNo; + dicTrack.TrackSession = 1; currentSector += frames; currentTrack++; - tracks.Add(_track.TrackSequence, _track); + tracks.Add(dicTrack.TrackSequence, dicTrack); } break; @@ -1257,50 +1253,50 @@ namespace DiscImageChef.DiscImages if(trackNo != currentTrack) throw new ImageNotSupportedException("Unsorted tracks, cannot proceed."); - Track _track = new Track(); + Track dicTrack = new Track(); switch(tracktype) { case TRACK_TYPE_AUDIO: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.Audio; + dicTrack.TrackBytesPerSector = 2352; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.Audio; break; case TRACK_TYPE_MODE1: case TRACK_TYPE_MODE1_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode1; break; case TRACK_TYPE_MODE1_RAW: case TRACK_TYPE_MODE1_RAW_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode1; break; case TRACK_TYPE_MODE2: case TRACK_TYPE_MODE2_2K: case TRACK_TYPE_MODE2_FM: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2336; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2336; + dicTrack.TrackType = TrackType.CdMode2Formless; break; case TRACK_TYPE_MODE2_F1: case TRACK_TYPE_MODE2_F1_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode2Form1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode2Form1; break; case TRACK_TYPE_MODE2_F2: case TRACK_TYPE_MODE2_F2_2K: - _track.TrackBytesPerSector = 2324; - _track.TrackRawBytesPerSector = 2324; - _track.TrackType = TrackType.CdMode2Form2; + dicTrack.TrackBytesPerSector = 2324; + dicTrack.TrackRawBytesPerSector = 2324; + dicTrack.TrackType = TrackType.CdMode2Form2; break; case TRACK_TYPE_MODE2_RAW: case TRACK_TYPE_MODE2_RAW_2K: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode2Formless; break; default: throw new ImageNotSupportedException($"Unsupported track type {tracktype}"); @@ -1309,35 +1305,35 @@ namespace DiscImageChef.DiscImages switch(subtype) { case SUB_TYPE_COOKED: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; case SUB_TYPE_NONE: - _track.TrackSubchannelType = TrackSubchannelType.None; + dicTrack.TrackSubchannelType = TrackSubchannelType.None; break; case SUB_TYPE_RAW: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; default: throw new ImageNotSupportedException($"Unsupported subchannel type {subtype}"); } - _track.Indexes = new Dictionary(); - _track.TrackDescription = $"Track {trackNo}"; - _track.TrackEndSector = currentSector + frames - 1; - _track.TrackFile = imageFilter.GetFilename(); - _track.TrackFileType = "BINARY"; - _track.TrackFilter = imageFilter; - _track.TrackStartSector = currentSector; - _track.TrackSequence = trackNo; - _track.TrackSession = 1; + dicTrack.Indexes = new Dictionary(); + dicTrack.TrackDescription = $"Track {trackNo}"; + dicTrack.TrackEndSector = currentSector + frames - 1; + dicTrack.TrackFile = imageFilter.GetFilename(); + dicTrack.TrackFileType = "BINARY"; + dicTrack.TrackFilter = imageFilter; + dicTrack.TrackStartSector = currentSector; + dicTrack.TrackSequence = trackNo; + dicTrack.TrackSession = 1; currentSector += frames; currentTrack++; - tracks.Add(_track.TrackSequence, _track); + tracks.Add(dicTrack.TrackSequence, dicTrack); } break; @@ -1376,50 +1372,50 @@ namespace DiscImageChef.DiscImages if(trackNo != currentTrack) throw new ImageNotSupportedException("Unsorted tracks, cannot proceed."); - Track _track = new Track(); + Track dicTrack = new Track(); switch(tracktype) { case TRACK_TYPE_AUDIO: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.Audio; + dicTrack.TrackBytesPerSector = 2352; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.Audio; break; case TRACK_TYPE_MODE1: case TRACK_TYPE_MODE1_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode1; break; case TRACK_TYPE_MODE1_RAW: case TRACK_TYPE_MODE1_RAW_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode1; break; case TRACK_TYPE_MODE2: case TRACK_TYPE_MODE2_2K: case TRACK_TYPE_MODE2_FM: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2336; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2336; + dicTrack.TrackType = TrackType.CdMode2Formless; break; case TRACK_TYPE_MODE2_F1: case TRACK_TYPE_MODE2_F1_2K: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; - _track.TrackType = TrackType.CdMode2Form1; + dicTrack.TrackBytesPerSector = 2048; + dicTrack.TrackRawBytesPerSector = 2048; + dicTrack.TrackType = TrackType.CdMode2Form1; break; case TRACK_TYPE_MODE2_F2: case TRACK_TYPE_MODE2_F2_2K: - _track.TrackBytesPerSector = 2324; - _track.TrackRawBytesPerSector = 2324; - _track.TrackType = TrackType.CdMode2Form2; + dicTrack.TrackBytesPerSector = 2324; + dicTrack.TrackRawBytesPerSector = 2324; + dicTrack.TrackType = TrackType.CdMode2Form2; break; case TRACK_TYPE_MODE2_RAW: case TRACK_TYPE_MODE2_RAW_2K: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2352; - _track.TrackType = TrackType.CdMode2Formless; + dicTrack.TrackBytesPerSector = 2336; + dicTrack.TrackRawBytesPerSector = 2352; + dicTrack.TrackType = TrackType.CdMode2Formless; break; default: throw new ImageNotSupportedException($"Unsupported track type {tracktype}"); @@ -1428,35 +1424,35 @@ namespace DiscImageChef.DiscImages switch(subtype) { case SUB_TYPE_COOKED: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.PackedInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; case SUB_TYPE_NONE: - _track.TrackSubchannelType = TrackSubchannelType.None; + dicTrack.TrackSubchannelType = TrackSubchannelType.None; break; case SUB_TYPE_RAW: - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; - _track.TrackSubchannelFilter = imageFilter; + dicTrack.TrackSubchannelFile = imageFilter.GetFilename(); + dicTrack.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + dicTrack.TrackSubchannelFilter = imageFilter; break; default: throw new ImageNotSupportedException($"Unsupported subchannel type {subtype}"); } - _track.Indexes = new Dictionary(); - _track.TrackDescription = $"Track {trackNo}"; - _track.TrackEndSector = currentSector + frames - 1; - _track.TrackFile = imageFilter.GetFilename(); - _track.TrackFileType = "BINARY"; - _track.TrackFilter = imageFilter; - _track.TrackStartSector = currentSector; - _track.TrackSequence = trackNo; - _track.TrackSession = (ushort)(trackNo > 2 ? 2 : 1); + dicTrack.Indexes = new Dictionary(); + dicTrack.TrackDescription = $"Track {trackNo}"; + dicTrack.TrackEndSector = currentSector + frames - 1; + dicTrack.TrackFile = imageFilter.GetFilename(); + dicTrack.TrackFileType = "BINARY"; + dicTrack.TrackFilter = imageFilter; + dicTrack.TrackStartSector = currentSector; + dicTrack.TrackSequence = trackNo; + dicTrack.TrackSession = (ushort)(trackNo > 2 ? 2 : 1); currentSector += frames; currentTrack++; - tracks.Add(_track.TrackSequence, _track); + tracks.Add(dicTrack.TrackSequence, dicTrack); } break; @@ -1512,8 +1508,8 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.CDROM; ImageInfo.XmlMediaType = XmlMediaType.OpticalDisc; - foreach(Track _trk in tracks.Values) - ImageInfo.Sectors += _trk.TrackEndSector - _trk.TrackStartSector + 1; + foreach(Track dicTrack in tracks.Values) + ImageInfo.Sectors += dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1; } else if(isGdrom) { @@ -1522,8 +1518,8 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.GDROM; ImageInfo.XmlMediaType = XmlMediaType.OpticalDisc; - foreach(Track _trk in tracks.Values) - ImageInfo.Sectors += _trk.TrackEndSector - _trk.TrackStartSector + 1; + foreach(Track dicTrack in tracks.Values) + ImageInfo.Sectors += dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1; } else throw new ImageNotSupportedException("Image does not represent a known media, aborting"); } @@ -1533,29 +1529,32 @@ namespace DiscImageChef.DiscImages offsetmap = new Dictionary(); partitions = new List(); ulong partPos = 0; - foreach(Track _track in tracks.Values) + foreach(Track dicTrack in tracks.Values) { - Partition partition = new Partition(); - partition.Description = _track.TrackDescription; - partition.Size = (_track.TrackEndSector - _track.TrackStartSector + 1) * - (ulong)_track.TrackRawBytesPerSector; - partition.Length = _track.TrackEndSector - _track.TrackStartSector + 1; - partition.Sequence = _track.TrackSequence; - partition.Offset = partPos; - partition.Start = _track.TrackStartSector; - partition.Type = _track.TrackType.ToString(); + Partition partition = new Partition + { + Description = dicTrack.TrackDescription, + Size = + (dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1) * + (ulong)dicTrack.TrackRawBytesPerSector, + Length = dicTrack.TrackEndSector - dicTrack.TrackStartSector + 1, + Sequence = dicTrack.TrackSequence, + Offset = partPos, + Start = dicTrack.TrackStartSector, + Type = dicTrack.TrackType.ToString() + }; partPos += partition.Length; - offsetmap.Add(_track.TrackStartSector, _track.TrackSequence); + offsetmap.Add(dicTrack.TrackStartSector, dicTrack.TrackSequence); - if(_track.TrackSubchannelType != TrackSubchannelType.None) + if(dicTrack.TrackSubchannelType != TrackSubchannelType.None) if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSubchannel)) ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: case TrackType.CdMode2Form1: - if(_track.TrackRawBytesPerSector == 2352) + if(dicTrack.TrackRawBytesPerSector == 2352) { if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync)) ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync); @@ -1574,7 +1573,7 @@ namespace DiscImageChef.DiscImages } break; case TrackType.CdMode2Form2: - if(_track.TrackRawBytesPerSector == 2352) + if(dicTrack.TrackRawBytesPerSector == 2352) { if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync)) ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync); @@ -1587,7 +1586,7 @@ namespace DiscImageChef.DiscImages } break; case TrackType.CdMode2Formless: - if(_track.TrackRawBytesPerSector == 2352) + if(dicTrack.TrackRawBytesPerSector == 2352) { if(!ImageInfo.ReadableSectorTags.Contains(SectorTagType.CdSectorSync)) ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSync); @@ -1597,8 +1596,8 @@ namespace DiscImageChef.DiscImages break; } - if(_track.TrackBytesPerSector > ImageInfo.SectorSize) - ImageInfo.SectorSize = (uint)_track.TrackBytesPerSector; + if(dicTrack.TrackBytesPerSector > ImageInfo.SectorSize) + ImageInfo.SectorSize = (uint)dicTrack.TrackBytesPerSector; partitions.Add(partition); } @@ -1632,16 +1631,13 @@ namespace DiscImageChef.DiscImages ulong GetAbsoluteSector(ulong relativeSector, uint track) { - Track _track; - tracks.TryGetValue(track, out _track); - return _track.TrackStartSector + relativeSector; + tracks.TryGetValue(track, out Track dicTrack); + return dicTrack.TrackStartSector + relativeSector; } byte[] GetHunk(ulong hunkNo) { - byte[] hunk; - - if(hunkCache.TryGetValue(hunkNo, out hunk)) return hunk; + if(hunkCache.TryGetValue(hunkNo, out byte[] hunk)) return hunk; switch(mapVersion) { @@ -1885,13 +1881,11 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; Track track = new Track(); + uint sectorSize; - if(!sectorCache.TryGetValue(sectorAddress, out sector)) + if(!sectorCache.TryGetValue(sectorAddress, out byte[] sector)) { - uint sectorSize; - if(isHdd) sectorSize = ImageInfo.SectorSize; else { @@ -1914,8 +1908,7 @@ namespace DiscImageChef.DiscImages if(isHdd) return sector; - uint sector_offset; - uint sector_size; + uint sectorOffset; switch(track.TrackType) { @@ -1924,13 +1917,13 @@ namespace DiscImageChef.DiscImages { if(track.TrackRawBytesPerSector == 2352) { - sector_offset = 16; - sector_size = 2048; + sectorOffset = 16; + sectorSize = 2048; } else { - sector_offset = 0; - sector_size = 2048; + sectorOffset = 0; + sectorSize = 2048; } break; } @@ -1938,13 +1931,13 @@ namespace DiscImageChef.DiscImages { if(track.TrackRawBytesPerSector == 2352) { - sector_offset = 16; - sector_size = 2324; + sectorOffset = 16; + sectorSize = 2324; } else { - sector_offset = 0; - sector_size = 2324; + sectorOffset = 0; + sectorSize = 2324; } break; } @@ -1952,26 +1945,26 @@ namespace DiscImageChef.DiscImages { if(track.TrackRawBytesPerSector == 2352) { - sector_offset = 16; - sector_size = 2336; + sectorOffset = 16; + sectorSize = 2336; } else { - sector_offset = 0; - sector_size = 2336; + sectorOffset = 0; + sectorSize = 2336; } break; } case TrackType.Audio: { - sector_offset = 0; - sector_size = 2352; + sectorOffset = 0; + sectorSize = 2352; break; } default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - byte[] buffer = new byte[sector_size]; + byte[] buffer = new byte[sectorSize]; if(track.TrackType == TrackType.Audio && swapAudio) for(int i = 0; i < 2352; i += 2) @@ -1979,7 +1972,7 @@ namespace DiscImageChef.DiscImages buffer[i + 1] = sector[i]; buffer[i] = sector[i + 1]; } - else Array.Copy(sector, sector_offset, buffer, 0, sector_size); + else Array.Copy(sector, sectorOffset, buffer, 0, sectorSize); return buffer; } @@ -1992,12 +1985,12 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; Track track = new Track(); - if(!sectorCache.TryGetValue(sectorAddress, out sector)) + uint sectorSize; + + if(!sectorCache.TryGetValue(sectorAddress, out byte[] sector)) { - uint sectorSize; track = GetTrack(sectorAddress); sectorSize = (uint)track.TrackRawBytesPerSector; @@ -2017,15 +2010,14 @@ namespace DiscImageChef.DiscImages if(isHdd) return sector; - uint sector_offset; - uint sector_size; + uint sectorOffset; if(tag == SectorTagType.CdSectorSubchannel) 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; + sectorOffset = (uint)track.TrackRawBytesPerSector; + sectorSize = 96; break; default: throw new @@ -2042,14 +2034,14 @@ namespace DiscImageChef.DiscImages { case SectorTagType.CdSectorSync: { - sector_offset = 0; - sector_size = 12; + sectorOffset = 0; + sectorSize = 12; break; } case SectorTagType.CdSectorHeader: { - sector_offset = 12; - sector_size = 4; + sectorOffset = 12; + sectorSize = 4; break; } case SectorTagType.CdSectorSubHeader: @@ -2057,26 +2049,26 @@ namespace DiscImageChef.DiscImages nameof(tag)); case SectorTagType.CdSectorEcc: { - sector_offset = 2076; - sector_size = 276; + sectorOffset = 2076; + sectorSize = 276; break; } case SectorTagType.CdSectorEccP: { - sector_offset = 2076; - sector_size = 172; + sectorOffset = 2076; + sectorSize = 172; break; } case SectorTagType.CdSectorEccQ: { - sector_offset = 2248; - sector_size = 104; + sectorOffset = 2248; + sectorSize = 104; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2064; - sector_size = 4; + sectorOffset = 2064; + sectorSize = 4; break; } default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); @@ -2092,26 +2084,26 @@ namespace DiscImageChef.DiscImages { case SectorTagType.CdSectorSync: { - sector_offset = 0; - sector_size = 12; + sectorOffset = 0; + sectorSize = 12; break; } case SectorTagType.CdSectorHeader: { - sector_offset = 12; - sector_size = 4; + sectorOffset = 12; + sectorSize = 4; break; } case SectorTagType.CdSectorSubHeader: { - sector_offset = 16; - sector_size = 8; + sectorOffset = 16; + sectorSize = 8; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2348; - sector_size = 4; + sectorOffset = 2348; + sectorSize = 4; break; } default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); @@ -2129,14 +2121,14 @@ namespace DiscImageChef.DiscImages nameof(tag)); case SectorTagType.CdSectorSubHeader: { - sector_offset = 0; - sector_size = 8; + sectorOffset = 0; + sectorSize = 8; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2332; - sector_size = 4; + sectorOffset = 2332; + sectorSize = 4; break; } default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); @@ -2158,14 +2150,14 @@ namespace DiscImageChef.DiscImages nameof(tag)); case SectorTagType.CdSectorSubHeader: { - sector_offset = 0; - sector_size = 8; + sectorOffset = 0; + sectorSize = 8; break; } case SectorTagType.CdSectorEdc: { - sector_offset = 2332; - sector_size = 4; + sectorOffset = 2332; + sectorSize = 4; break; } default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); @@ -2179,7 +2171,7 @@ namespace DiscImageChef.DiscImages default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - byte[] buffer = new byte[sector_size]; + byte[] buffer = new byte[sectorSize]; if(track.TrackType == TrackType.Audio && swapAudio) for(int i = 0; i < 2352; i += 2) @@ -2187,7 +2179,7 @@ namespace DiscImageChef.DiscImages buffer[i + 1] = sector[i]; buffer[i] = sector[i + 1]; } - else Array.Copy(sector, sector_offset, buffer, 0, sector_size); + else Array.Copy(sector, sectorOffset, buffer, 0, sectorSize); if(track.TrackType == TrackType.Audio && swapAudio) for(int i = 0; i < 2352; i += 2) @@ -2195,7 +2187,7 @@ namespace DiscImageChef.DiscImages buffer[i + 1] = sector[i]; buffer[i] = sector[i + 1]; } - else Array.Copy(sector, sector_offset, buffer, 0, sector_size); + else Array.Copy(sector, sectorOffset, buffer, 0, sectorSize); return buffer; } @@ -2250,10 +2242,9 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; Track track = new Track(); - if(!sectorCache.TryGetValue(sectorAddress, out sector)) + if(!sectorCache.TryGetValue(sectorAddress, out byte[] sector)) { uint sectorSize; diff --git a/DiscImageChef.DiscImages/CPCDSK.cs b/DiscImageChef.DiscImages/CPCDSK.cs index adfff4f4..5b191f0f 100644 --- a/DiscImageChef.DiscImages/CPCDSK.cs +++ b/DiscImageChef.DiscImages/CPCDSK.cs @@ -207,27 +207,29 @@ namespace DiscImageChef.DiscImages { Name = "CPCEMU Disk-File and Extended CPC Disk-File"; PluginUuid = new Guid("724B16CC-ADB9-492E-BA07-CAEEC1012B16"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -239,10 +241,9 @@ namespace DiscImageChef.DiscImages byte[] headerB = new byte[256]; stream.Read(headerB, 0, 256); - CpcDiskInfo header; IntPtr headerPtr = Marshal.AllocHGlobal(256); Marshal.Copy(headerB, 0, headerPtr, 256); - header = (CpcDiskInfo)Marshal.PtrToStructure(headerPtr, typeof(CpcDiskInfo)); + CpcDiskInfo header = (CpcDiskInfo)Marshal.PtrToStructure(headerPtr, typeof(CpcDiskInfo)); Marshal.FreeHGlobal(headerPtr); DicConsole.DebugWriteLine("CPCDSK plugin", "header.magic = \"{0}\"", @@ -261,10 +262,9 @@ namespace DiscImageChef.DiscImages byte[] headerB = new byte[256]; stream.Read(headerB, 0, 256); - CpcDiskInfo header; IntPtr headerPtr = Marshal.AllocHGlobal(256); Marshal.Copy(headerB, 0, headerPtr, 256); - header = (CpcDiskInfo)Marshal.PtrToStructure(headerPtr, typeof(CpcDiskInfo)); + CpcDiskInfo header = (CpcDiskInfo)Marshal.PtrToStructure(headerPtr, typeof(CpcDiskInfo)); Marshal.FreeHGlobal(headerPtr); if(!cpcdskId.SequenceEqual(header.magic) && !edskId.SequenceEqual(header.magic) && @@ -309,10 +309,9 @@ namespace DiscImageChef.DiscImages byte[] trackB = new byte[256]; stream.Read(trackB, 0, 256); - CpcTrackInfo trackInfo; IntPtr trackPtr = Marshal.AllocHGlobal(256); Marshal.Copy(trackB, 0, trackPtr, 256); - trackInfo = (CpcTrackInfo)Marshal.PtrToStructure(trackPtr, typeof(CpcTrackInfo)); + CpcTrackInfo trackInfo = (CpcTrackInfo)Marshal.PtrToStructure(trackPtr, typeof(CpcTrackInfo)); Marshal.FreeHGlobal(trackPtr); if(!trackId.SequenceEqual(trackInfo.magic)) @@ -365,8 +364,7 @@ namespace DiscImageChef.DiscImages trackInfo.sectorsInfo[k - 1].track, i, j, k); int sectLen; - if(extended) sectLen = trackInfo.sectorsInfo[k - 1].len; - else sectLen = SizeCodeToBytes(trackInfo.sectorsInfo[k - 1].size); + sectLen = extended ? trackInfo.sectorsInfo[k - 1].len : SizeCodeToBytes(trackInfo.sectorsInfo[k - 1].size); byte[] sector = new byte[sectLen]; stream.Read(sector, 0, sectLen); @@ -395,9 +393,8 @@ namespace DiscImageChef.DiscImages amForCrc[5] = trackInfo.sectorsInfo[k - 1].side; amForCrc[6] = trackInfo.sectorsInfo[k - 1].id; amForCrc[7] = (byte)trackInfo.sectorsInfo[k - 1].size; - byte[] amCrc; - Crc16Context.Data(amForCrc, 8, out amCrc); + Crc16Context.Data(amForCrc, 8, out byte[] amCrc); byte[] addressMark = new byte[22]; Array.Copy(amForCrc, 0, addressMark, 12, 8); @@ -551,8 +548,7 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSector(ulong sectorAddress) { - byte[] sector; - if(sectors.TryGetValue(sectorAddress, out sector)) return sector; + if(sectors.TryGetValue(sectorAddress, out byte[] sector)) return sector; throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } @@ -582,8 +578,7 @@ namespace DiscImageChef.DiscImages if(tag != SectorTagType.FloppyAddressMark) throw new FeatureUnsupportedImageException($"Tag {tag} not supported by image format"); - byte[] addressMark; - if(addressMarks.TryGetValue(sectorAddress, out addressMark)) return addressMark; + if(addressMarks.TryGetValue(sectorAddress, out byte[] addressMark)) return addressMark; throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); } diff --git a/DiscImageChef.DiscImages/CisCopy.cs b/DiscImageChef.DiscImages/CisCopy.cs index 70991cf3..29316f4a 100644 --- a/DiscImageChef.DiscImages/CisCopy.cs +++ b/DiscImageChef.DiscImages/CisCopy.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using DiscImageChef.CommonTypes; using DiscImageChef.Console; @@ -57,6 +58,7 @@ namespace DiscImageChef.DiscImages public class CisCopy : ImagePlugin { #region Internal enumerations + [SuppressMessage("ReSharper", "InconsistentNaming")] enum DiskType : byte { MD1DD8 = 1, @@ -91,27 +93,29 @@ namespace DiscImageChef.DiscImages { Name = "CisCopy Disk Image (DC-File)"; PluginUuid = new Guid("EDF20CC7-6012-49E2-9E92-663A53E42130"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } #region Public methods @@ -189,7 +193,6 @@ namespace DiscImageChef.DiscImages { Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); - MemoryStream decodedImage; DiskType type = (DiskType)stream.ReadByte(); byte tracks; @@ -242,7 +245,7 @@ namespace DiscImageChef.DiscImages int headstep = 1; if(type == DiskType.MD1DD || type == DiskType.MD1DD8) headstep = 2; - decodedImage = new MemoryStream(); + MemoryStream decodedImage = new MemoryStream(); for(int i = 0; i < tracks; i += headstep) { diff --git a/DiscImageChef.DiscImages/CloneCD.cs b/DiscImageChef.DiscImages/CloneCD.cs index 52996736..dbbfb6f3 100644 --- a/DiscImageChef.DiscImages/CloneCD.cs +++ b/DiscImageChef.DiscImages/CloneCD.cs @@ -78,13 +78,13 @@ namespace DiscImageChef.DiscImages const string CDTEXT_ENTRY = "^\\s*Entry\\s*(?\\d+)\\s*=\\s*(?([0-9a-fA-F]+\\s*)+)"; #endregion - Filter imageFilter; + Filter ccdFilter; Filter dataFilter; Filter subFilter; StreamReader cueStream; byte[] fulltoc; bool scrambled; - string catalog; + string catalog; // TODO: Use it List sessions; List partitions; List tracks; @@ -97,29 +97,31 @@ namespace DiscImageChef.DiscImages { Name = "CloneCD"; PluginUuid = new Guid("EE9C2975-2E79-427A-8EE9-F86F19165784"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = true; - ImageInfo.ImageHasSessions = true; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageName = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = true, + ImageHasSessions = true, + ImageVersion = null, + ImageApplicationVersion = null, + ImageName = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) { - this.imageFilter = imageFilter; + ccdFilter = imageFilter; try { @@ -145,21 +147,19 @@ namespace DiscImageChef.DiscImages return false; } - cueStream = new StreamReader(this.imageFilter.GetDataForkStream()); + cueStream = new StreamReader(ccdFilter.GetDataForkStream()); - string _line = cueStream.ReadLine(); + string line = cueStream.ReadLine(); Regex hdr = new Regex(CCD_IDENTIFIER); - Match hdm; - - hdm = hdr.Match(_line ?? throw new InvalidOperationException()); + Match hdm = hdr.Match(line ?? throw new InvalidOperationException()); return hdm.Success; } catch(Exception ex) { - DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", this.imageFilter); + DicConsole.ErrorWriteLine("Exception trying to identify image file {0}", ccdFilter); DicConsole.ErrorWriteLine("Exception: {0}", ex.Message); DicConsole.ErrorWriteLine("Stack trace: {0}", ex.StackTrace); return false; @@ -170,13 +170,13 @@ namespace DiscImageChef.DiscImages { if(imageFilter == null) return false; - this.imageFilter = imageFilter; + ccdFilter = imageFilter; try { imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); cueStream = new StreamReader(imageFilter.GetDataForkStream()); - int line = 0; + int lineNumber = 0; Regex ccdIdRegex = new Regex(CCD_IDENTIFIER); Regex discIdRegex = new Regex(DISC_IDENTIFIER); @@ -209,37 +209,6 @@ namespace DiscImageChef.DiscImages Regex cdtEntsRegex = new Regex(CDTEXT_ENTRIES); Regex cdtEntRegex = new Regex(CDTEXT_ENTRY); - Match ccdIdMatch; - Match discIdMatch; - Match sessIdMatch; - Match entryIdMatch; - Match trackIdMatch; - Match cdtIdMatch; - Match ccdVerMatch; - Match discEntMatch; - Match discSessMatch; - Match discScrMatch; - Match cdtLenMatch; - Match discCatMatch; - Match sessPregMatch; - Match sessSubcMatch; - Match entSessMatch; - Match entPointMatch; - Match entAdrMatch; - Match entCtrlMatch; - Match entTnoMatch; - Match entAMinMatch; - Match entASecMatch; - Match entAFrameMatch; - Match entAlbaMatch; - Match entZeroMatch; - Match entPMinMatch; - Match entPSecMatch; - Match entPFrameMatch; - Match entPlbaMatch; - Match cdtEntsMatch; - Match cdtEntMatch; - bool inCcd = false; bool inDisk = false; bool inSession = false; @@ -256,22 +225,22 @@ namespace DiscImageChef.DiscImages while(cueStream.Peek() >= 0) { - line++; - string _line = cueStream.ReadLine(); + lineNumber++; + string line = cueStream.ReadLine(); - ccdIdMatch = ccdIdRegex.Match(_line); - discIdMatch = discIdRegex.Match(_line); - sessIdMatch = sessIdRegex.Match(_line); - entryIdMatch = entryIdRegex.Match(_line); - trackIdMatch = trackIdRegex.Match(_line); - cdtIdMatch = cdtIdRegex.Match(_line); + Match ccdIdMatch = ccdIdRegex.Match(line); + Match discIdMatch = discIdRegex.Match(line); + Match sessIdMatch = sessIdRegex.Match(line); + Match entryIdMatch = entryIdRegex.Match(line); + Match trackIdMatch = trackIdRegex.Match(line); + Match cdtIdMatch = cdtIdRegex.Match(line); // [CloneCD] if(ccdIdMatch.Success) { if(inDisk || inSession || inEntry || inTrack || inCdText) throw new - FeatureUnsupportedImageException($"Found [CloneCD] out of order in line {line}"); + FeatureUnsupportedImageException($"Found [CloneCD] out of order in line {lineNumber}"); inCcd = true; inDisk = false; @@ -300,11 +269,11 @@ namespace DiscImageChef.DiscImages { if(inCcd) { - ccdVerMatch = ccdVerRegex.Match(_line); + Match ccdVerMatch = ccdVerRegex.Match(line); if(!ccdVerMatch.Success) continue; - DicConsole.DebugWriteLine("CloneCD plugin", "Found Version at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found Version at line {0}", lineNumber); ImageInfo.ImageVersion = ccdVerMatch.Groups["value"].Value; if(ImageInfo.ImageVersion != "2" && ImageInfo.ImageVersion != "3") @@ -314,37 +283,37 @@ namespace DiscImageChef.DiscImages } else if(inDisk) { - discEntMatch = discEntRegex.Match(_line); - discSessMatch = discSessRegex.Match(_line); - discScrMatch = discScrRegex.Match(_line); - cdtLenMatch = cdtLenRegex.Match(_line); - discCatMatch = discCatRegex.Match(_line); + Match discEntMatch = discEntRegex.Match(line); + Match discSessMatch = discSessRegex.Match(line); + Match discScrMatch = discScrRegex.Match(line); + Match cdtLenMatch = cdtLenRegex.Match(line); + Match discCatMatch = discCatRegex.Match(line); - if(discEntMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found TocEntries at line {0}", line); - else if(discSessMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found Sessions at line {0}", line); + if(discEntMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found TocEntries at line {0}", lineNumber); + else if(discSessMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found Sessions at line {0}", lineNumber); else if(discScrMatch.Success) { DicConsole.DebugWriteLine("CloneCD plugin", "Found DataTracksScrambled at line {0}", - line); + lineNumber); scrambled |= discScrMatch.Groups["value"].Value == "1"; } - else if(cdtLenMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found CDTextLength at line {0}", line); + else if(cdtLenMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found CDTextLength at line {0}", lineNumber); else if(discCatMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found Catalog at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found Catalog at line {0}", lineNumber); catalog = discCatMatch.Groups["value"].Value; } } // TODO: Do not suppose here entries come sorted else if(inCdText) { - cdtEntsMatch = cdtEntsRegex.Match(_line); - cdtEntMatch = cdtEntRegex.Match(_line); + Match cdtEntsMatch = cdtEntsRegex.Match(line); + Match cdtEntMatch = cdtEntRegex.Match(line); - if(cdtEntsMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found CD-Text Entries at line {0}", line); + if(cdtEntsMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found CD-Text Entries at line {0}", lineNumber); else if(cdtEntMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found CD-Text Entry at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found CD-Text Entry at line {0}", lineNumber); string[] bytes = cdtEntMatch.Groups["value"].Value.Split(new[] {' '}, StringSplitOptions .RemoveEmptyEntries); @@ -354,95 +323,95 @@ namespace DiscImageChef.DiscImages // Is this useful? else if(inSession) { - sessPregMatch = sessPregRegex.Match(_line); - sessSubcMatch = sessSubcRegex.Match(_line); + Match sessPregMatch = sessPregRegex.Match(line); + Match sessSubcMatch = sessSubcRegex.Match(line); - if(sessPregMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapMode at line {0}", line); - else if(sessSubcMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapSubC at line {0}", line); + if(sessPregMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapMode at line {0}", lineNumber); + else if(sessSubcMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PreGapSubC at line {0}", lineNumber); } else if(inEntry) { - entSessMatch = entSessRegex.Match(_line); - entPointMatch = entPointRegex.Match(_line); - entAdrMatch = entAdrRegex.Match(_line); - entCtrlMatch = entCtrlRegex.Match(_line); - entTnoMatch = entTnoRegex.Match(_line); - entAMinMatch = entAMinRegex.Match(_line); - entASecMatch = entASecRegex.Match(_line); - entAFrameMatch = entAFrameRegex.Match(_line); - entAlbaMatch = entAlbaRegex.Match(_line); - entZeroMatch = entZeroRegex.Match(_line); - entPMinMatch = entPMinRegex.Match(_line); - entPSecMatch = entPSecRegex.Match(_line); - entPFrameMatch = entPFrameRegex.Match(_line); - entPlbaMatch = entPlbaRegex.Match(_line); + Match entSessMatch = entSessRegex.Match(line); + Match entPointMatch = entPointRegex.Match(line); + Match entAdrMatch = entAdrRegex.Match(line); + Match entCtrlMatch = entCtrlRegex.Match(line); + Match entTnoMatch = entTnoRegex.Match(line); + Match entAMinMatch = entAMinRegex.Match(line); + Match entASecMatch = entASecRegex.Match(line); + Match entAFrameMatch = entAFrameRegex.Match(line); + Match entAlbaMatch = entAlbaRegex.Match(line); + Match entZeroMatch = entZeroRegex.Match(line); + Match entPMinMatch = entPMinRegex.Match(line); + Match entPSecMatch = entPSecRegex.Match(line); + Match entPFrameMatch = entPFrameRegex.Match(line); + Match entPlbaMatch = entPlbaRegex.Match(line); if(entSessMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found Session at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found Session at line {0}", lineNumber); currentEntry.SessionNumber = Convert.ToByte(entSessMatch.Groups["value"].Value, 10); if(currentEntry.SessionNumber < minSession) minSession = currentEntry.SessionNumber; if(currentEntry.SessionNumber > maxSession) maxSession = currentEntry.SessionNumber; } else if(entPointMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found Point at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found Point at line {0}", lineNumber); currentEntry.POINT = Convert.ToByte(entPointMatch.Groups["value"].Value, 16); } else if(entAdrMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found ADR at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found ADR at line {0}", lineNumber); currentEntry.ADR = Convert.ToByte(entAdrMatch.Groups["value"].Value, 16); } else if(entCtrlMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found Control at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found Control at line {0}", lineNumber); currentEntry.CONTROL = Convert.ToByte(entCtrlMatch.Groups["value"].Value, 16); } else if(entTnoMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found TrackNo at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found TrackNo at line {0}", lineNumber); currentEntry.TNO = Convert.ToByte(entTnoMatch.Groups["value"].Value, 10); } else if(entAMinMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found AMin at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found AMin at line {0}", lineNumber); currentEntry.Min = Convert.ToByte(entAMinMatch.Groups["value"].Value, 10); } else if(entASecMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found ASec at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found ASec at line {0}", lineNumber); currentEntry.Sec = Convert.ToByte(entASecMatch.Groups["value"].Value, 10); } else if(entAFrameMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found AFrame at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found AFrame at line {0}", lineNumber); currentEntry.Frame = Convert.ToByte(entAFrameMatch.Groups["value"].Value, 10); } - else if(entAlbaMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found ALBA at line {0}", line); + else if(entAlbaMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found ALBA at line {0}", lineNumber); else if(entZeroMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found Zero at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found Zero at line {0}", lineNumber); currentEntry.Zero = Convert.ToByte(entZeroMatch.Groups["value"].Value, 10); currentEntry.HOUR = (byte)((currentEntry.Zero & 0xF0) >> 4); currentEntry.PHOUR = (byte)(currentEntry.Zero & 0x0F); } else if(entPMinMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found PMin at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found PMin at line {0}", lineNumber); currentEntry.PMIN = Convert.ToByte(entPMinMatch.Groups["value"].Value, 10); } else if(entPSecMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found PSec at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found PSec at line {0}", lineNumber); currentEntry.PSEC = Convert.ToByte(entPSecMatch.Groups["value"].Value, 10); } else if(entPFrameMatch.Success) { - DicConsole.DebugWriteLine("CloneCD plugin", "Found PFrame at line {0}", line); + DicConsole.DebugWriteLine("CloneCD plugin", "Found PFrame at line {0}", lineNumber); currentEntry.PFRAME = Convert.ToByte(entPFrameMatch.Groups["value"].Value, 10); } - else if(entPlbaMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PLBA at line {0}", line); + else if(entPlbaMatch.Success) DicConsole.DebugWriteLine("CloneCD plugin", "Found PLBA at line {0}", lineNumber); } } } @@ -495,7 +464,6 @@ namespace DiscImageChef.DiscImages Track currentTrack = new Track(); bool firstTrackInSession = true; tracks = new List(); - byte discType; ulong leadOutStart = 0; dataStream = dataFilter.GetDataForkStream(); @@ -521,7 +489,7 @@ namespace DiscImageChef.DiscImages switch(descriptor.POINT) { case 0xA0: - discType = descriptor.PSEC; + byte discType = descriptor.PSEC; DicConsole.DebugWriteLine("CloneCD plugin", "Disc Type: {0}", discType); break; case 0xA2: @@ -540,18 +508,20 @@ namespace DiscImageChef.DiscImages } else firstTrackInSession = false; - currentTrack = new Track(); - currentTrack.TrackBytesPerSector = 2352; - currentTrack.TrackFile = dataFilter.GetFilename(); - currentTrack.TrackFileType = scrambled ? "SCRAMBLED" : "BINARY"; - currentTrack.TrackFilter = dataFilter; - currentTrack.TrackRawBytesPerSector = 2352; - currentTrack.TrackSequence = descriptor.POINT; - currentTrack.TrackStartSector = - GetLba(descriptor.PHOUR, descriptor.PMIN, descriptor.PSEC, - descriptor.PFRAME); + currentTrack = new Track + { + TrackBytesPerSector = 2352, + TrackFile = dataFilter.GetFilename(), + TrackFileType = scrambled ? "SCRAMBLED" : "BINARY", + TrackFilter = dataFilter, + TrackRawBytesPerSector = 2352, + TrackSequence = descriptor.POINT, + TrackStartSector = + GetLba(descriptor.PHOUR, descriptor.PMIN, descriptor.PSEC, + descriptor.PFRAME), + TrackSession = descriptor.SessionNumber + }; currentTrack.TrackFileOffset = currentTrack.TrackStartSector * 2352; - currentTrack.TrackSession = descriptor.SessionNumber; // Need to check exact data type later if((TocControl)(descriptor.CONTROL & 0x0D) == TocControl.DataTrack || @@ -738,10 +708,12 @@ namespace DiscImageChef.DiscImages ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); sessions = new List(); - Session currentSession = new Session(); - currentSession.EndTrack = uint.MinValue; - currentSession.StartTrack = uint.MaxValue; - currentSession.SessionSequence = 1; + Session currentSession = new Session + { + EndTrack = uint.MinValue, + StartTrack = uint.MaxValue, + SessionSequence = 1 + }; partitions = new List(); offsetmap = new Dictionary(); @@ -764,22 +736,26 @@ namespace DiscImageChef.DiscImages else { sessions.Add(currentSession); - currentSession = new Session(); - currentSession.EndTrack = uint.MinValue; - currentSession.StartTrack = uint.MaxValue; - currentSession.SessionSequence = track.TrackSession; + currentSession = new Session + { + EndTrack = uint.MinValue, + StartTrack = uint.MaxValue, + SessionSequence = track.TrackSession + }; } - Partition partition = new Partition(); - partition.Description = track.TrackDescription; - partition.Size = (track.TrackEndSector - track.TrackStartSector + 1) * - (ulong)track.TrackRawBytesPerSector; - partition.Length = track.TrackEndSector - track.TrackStartSector + 1; + Partition partition = new Partition + { + Description = track.TrackDescription, + Size = + (track.TrackEndSector - track.TrackStartSector + 1) * (ulong)track.TrackRawBytesPerSector, + Length = track.TrackEndSector - track.TrackStartSector + 1, + Sequence = track.TrackSequence, + Offset = track.TrackFileOffset, + Start = track.TrackStartSector, + Type = track.TrackType.ToString() + }; ImageInfo.Sectors += partition.Length; - partition.Sequence = track.TrackSequence; - partition.Offset = track.TrackFileOffset; - partition.Start = track.TrackStartSector; - partition.Type = track.TrackType.ToString(); partitions.Add(partition); offsetmap.Add(track.TrackSequence, track.TrackStartSector); } @@ -906,44 +882,42 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in tracks where _track.TrackSequence == kvp.Key where sectorAddress <= _track.TrackEndSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress <= track.TrackEndSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in tracks where _track.TrackSequence == kvp.Key where sectorAddress <= _track.TrackEndSector select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress <= track.TrackEndSector select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; - - foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { - _track = __track; + foreach(Track linqTrack in tracks.Where(linqTrack => linqTrack.TrackSequence == track)) { + dicTrack = linqTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress - 1 > _track.TrackEndSector) + if(length + sectorAddress - 1 > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), string .Format("Requested more sectors ({0} {2}) than present in track ({1}), won't cross tracks", - length + sectorAddress, _track.TrackEndSector, + length + sectorAddress, dicTrack.TrackEndSector, sectorAddress)); uint sectorOffset; uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.Audio: { @@ -985,7 +959,7 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - dataStream.Seek((long)(_track.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin); + dataStream.Seek((long)(dicTrack.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) dataStream.Read(buffer, 0, buffer.Length); else for(int i = 0; i < length; i++) @@ -1003,23 +977,21 @@ namespace DiscImageChef.DiscImages // TODO: Flags public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; - - foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { - _track = __track; + foreach(Track linqTrack in tracks.Where(linqTrack => linqTrack.TrackSequence == track)) { + dicTrack = linqTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress - 1 > _track.TrackEndSector) + if(length + sectorAddress - 1 > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); - if(_track.TrackType == TrackType.Data) + if(dicTrack.TrackType == TrackType.Data) throw new ArgumentException("Unsupported tag requested", nameof(tag)); byte[] buffer; @@ -1035,7 +1007,7 @@ namespace DiscImageChef.DiscImages case SectorTagType.CdSectorSync: break; case SectorTagType.CdSectorSubchannel: buffer = new byte[96 * length]; - subStream.Seek((long)(_track.TrackSubchannelOffset + sectorAddress * 96), SeekOrigin.Begin); + subStream.Seek((long)(dicTrack.TrackSubchannelOffset + sectorAddress * 96), SeekOrigin.Begin); subStream.Read(buffer, 0, buffer.Length); return buffer; default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); @@ -1045,7 +1017,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: switch(tag) @@ -1227,7 +1199,7 @@ namespace DiscImageChef.DiscImages buffer = new byte[sectorSize * length]; - dataStream.Seek((long)(_track.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin); + dataStream.Seek((long)(dicTrack.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) dataStream.Read(buffer, 0, buffer.Length); else for(int i = 0; i < length; i++) @@ -1261,25 +1233,23 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; - - foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { - _track = __track; + foreach(Track linqTrack in tracks.Where(linqTrack => linqTrack.TrackSequence == track)) { + dicTrack = linqTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress - 1 > _track.TrackEndSector) + if(length + sectorAddress - 1 > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); byte[] buffer = new byte[2352 * length]; - dataStream.Seek((long)(_track.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin); + dataStream.Seek((long)(dicTrack.TrackFileOffset + sectorAddress * 2352), SeekOrigin.Begin); dataStream.Read(buffer, 0, buffer.Length); return buffer; @@ -1404,7 +1374,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - return tracks.Where(_track => _track.TrackSession == session).ToList(); + return tracks.Where(track => track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/CopyQM.cs b/DiscImageChef.DiscImages/CopyQM.cs index 1ef7f6a1..3079a0ea 100644 --- a/DiscImageChef.DiscImages/CopyQM.cs +++ b/DiscImageChef.DiscImages/CopyQM.cs @@ -172,27 +172,29 @@ namespace DiscImageChef.DiscImages { Name = "Sydex CopyQM"; PluginUuid = new Guid("147E927D-3A92-4E0C-82CD-142F5A4FA76D"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } #region Public methods @@ -218,7 +220,6 @@ namespace DiscImageChef.DiscImages stream.Seek(0, SeekOrigin.Begin); byte[] hdr = new byte[133]; - byte[] cmt; stream.Read(hdr, 0, 133); header = new CopyQmHeader(); @@ -257,7 +258,7 @@ namespace DiscImageChef.DiscImages DicConsole.DebugWriteLine("CopyQM plugin", "header.skew = {0}", header.skew); DicConsole.DebugWriteLine("CopyQM plugin", "header.drive = {0}", header.drive); - cmt = new byte[header.commentLength]; + byte[] cmt = new byte[header.commentLength]; stream.Read(cmt, 0, header.commentLength); ImageInfo.ImageComments = StringHandlers.CToString(cmt); decodedImage = new MemoryStream(); @@ -290,9 +291,8 @@ namespace DiscImageChef.DiscImages stream.Read(nonRepeated, 0, runLength); decodedImage.Write(nonRepeated, 0, runLength); - for(int i = 0; i < nonRepeated.Length; i++) - calculatedDataCrc = copyQmCrcTable[(nonRepeated[i] ^ calculatedDataCrc) & 0x3F] ^ - (calculatedDataCrc >> 8); + foreach(byte c in nonRepeated) calculatedDataCrc = copyQmCrcTable[(c ^ calculatedDataCrc) & 0x3F] ^ + (calculatedDataCrc >> 8); } } @@ -312,7 +312,7 @@ namespace DiscImageChef.DiscImages FileStream debugStream = new FileStream("debug.img", FileMode.CreateNew, FileAccess.ReadWrite); debugStream.Write(decodedImage.ToArray(), 0, (int)decodedImage.Length); debugStream.Close(); - */ + */ int sum = 0; for(int i = 0; i < hdr.Length - 1; i++) sum += hdr[i]; diff --git a/DiscImageChef.DiscImages/D88.cs b/DiscImageChef.DiscImages/D88.cs index 1734c95e..d79ad8c4 100644 --- a/DiscImageChef.DiscImages/D88.cs +++ b/DiscImageChef.DiscImages/D88.cs @@ -263,11 +263,10 @@ namespace DiscImageChef.DiscImages if(!d88Hdr.reserved.SequenceEqual(reservedEmpty)) return false; int counter = 0; - for(int i = 0; i < d88Hdr.track_table.Length; i++) - { - if(d88Hdr.track_table[i] > 0) counter++; + foreach(int t in d88Hdr.track_table) { + if(t > 0) counter++; - if(d88Hdr.track_table[i] < 0 || d88Hdr.track_table[i] > stream.Length) return false; + if(t < 0 || t > stream.Length) return false; } DicConsole.DebugWriteLine("D88 plugin", "{0} tracks", counter); diff --git a/DiscImageChef.DiscImages/DART.cs b/DiscImageChef.DiscImages/DART.cs index 8418596c..61441e46 100644 --- a/DiscImageChef.DiscImages/DART.cs +++ b/DiscImageChef.DiscImages/DART.cs @@ -104,27 +104,29 @@ namespace DiscImageChef.DiscImages { Name = "Apple Disk Archival/Retrieval Tool"; PluginUuid = new Guid("B3E06BF8-F98D-4F9B-BBE2-342C373BAF3E"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -235,43 +237,42 @@ namespace DiscImageChef.DiscImages if(header.srcType == DISK_MAC_HD || header.srcType == DISK_DOS_HD) bLength = new short[BLOCK_ARRAY_LEN_HIGH]; else bLength = new short[BLOCK_ARRAY_LEN_LOW]; - byte[] tmpShort; for(int i = 0; i < bLength.Length; i++) { - tmpShort = new byte[2]; + byte[] tmpShort = new byte[2]; stream.Read(tmpShort, 0, 2); bLength[i] = BigEndianBitConverter.ToInt16(tmpShort, 0); } - byte[] temp; - byte[] buffer; - MemoryStream dataMs = new MemoryStream(); MemoryStream tagMs = new MemoryStream(); - for(int i = 0; i < bLength.Length; i++) - if(bLength[i] != 0) + foreach(short l in bLength) if(l != 0) + { + byte[] buffer = new byte[BUFFER_SIZE]; + if(l == -1) { - buffer = new byte[BUFFER_SIZE]; - if(bLength[i] == -1) + stream.Read(buffer, 0, BUFFER_SIZE); + dataMs.Write(buffer, 0, DATA_SIZE); + tagMs.Write(buffer, DATA_SIZE, TAG_SIZE); + } + else + { + byte[] temp; + if(header.srcCmp == COMPRESS_RLE) { - stream.Read(buffer, 0, BUFFER_SIZE); - dataMs.Write(buffer, 0, DATA_SIZE); - tagMs.Write(buffer, DATA_SIZE, TAG_SIZE); - } - else if(header.srcCmp == COMPRESS_RLE) - { - temp = new byte[bLength[i] * 2]; + temp = new byte[l * 2]; stream.Read(temp, 0, temp.Length); throw new ImageNotSupportedException("Compressed images not yet supported"); } else { - temp = new byte[bLength[i]]; + temp = new byte[l]; stream.Read(temp, 0, temp.Length); throw new ImageNotSupportedException("Compressed images not yet supported"); } } + } dataCache = dataMs.ToArray(); if(header.srcType == DISK_LISA || header.srcType == DISK_MAC || header.srcType == DISK_APPLE2) @@ -289,45 +290,41 @@ namespace DiscImageChef.DiscImages if(rsrcFork.ContainsKey(0x76657273)) { Resource versRsrc = rsrcFork.GetResource(0x76657273); - if(versRsrc != null) + + byte[] vers = versRsrc?.GetResource(versRsrc.GetIds()[0]); + + if(vers != null) { - byte[] vers = versRsrc.GetResource(versRsrc.GetIds()[0]); + Version version = new Version(vers); - if(vers != null) + string release = null; + string dev = null; + string pre = null; + + string major = $"{version.MajorVersion}"; + string minor = $".{version.MinorVersion / 10}"; + if(version.MinorVersion % 10 > 0) + release = $".{version.MinorVersion % 10}"; + switch(version.DevStage) { - Version version = new Version(vers); - - string major; - string minor; - string release = null; - string dev = null; - string pre = null; - - major = $"{version.MajorVersion}"; - minor = $".{version.MinorVersion / 10}"; - if(version.MinorVersion % 10 > 0) - release = $".{version.MinorVersion % 10}"; - switch(version.DevStage) - { - case Version.DevelopmentStage.Alpha: - dev = "a"; - break; - case Version.DevelopmentStage.Beta: - dev = "b"; - break; - case Version.DevelopmentStage.PreAlpha: - dev = "d"; - break; - } - - if(dev == null && version.PreReleaseVersion > 0) dev = "f"; - - if(dev != null) pre = $"{version.PreReleaseVersion}"; - - ImageInfo.ImageApplicationVersion = $"{major}{minor}{release}{dev}{pre}"; - ImageInfo.ImageApplication = version.VersionString; - ImageInfo.ImageComments = version.VersionMessage; + case Version.DevelopmentStage.Alpha: + dev = "a"; + break; + case Version.DevelopmentStage.Beta: + dev = "b"; + break; + case Version.DevelopmentStage.PreAlpha: + dev = "d"; + break; } + + if(dev == null && version.PreReleaseVersion > 0) dev = "f"; + + if(dev != null) pre = $"{version.PreReleaseVersion}"; + + ImageInfo.ImageApplicationVersion = $"{major}{minor}{release}{dev}{pre}"; + ImageInfo.ImageApplication = version.VersionString; + ImageInfo.ImageComments = version.VersionMessage; } } @@ -339,9 +336,8 @@ namespace DiscImageChef.DiscImages { string dArt = StringHandlers.PascalToString(dartRsrc.GetResource(dartRsrc.GetIds()[0]), Encoding.GetEncoding("macintosh")); - string dArtRegEx = - "(?\\S+), tag checksum=\\$(?[0123456789ABCDEF]{8}), data checksum=\\$(?[0123456789ABCDEF]{8})$"; - Regex dArtEx = new Regex(dArtRegEx); + const string DART_REGEX = "(?\\S+), tag checksum=\\$(?[0123456789ABCDEF]{8}), data checksum=\\$(?[0123456789ABCDEF]{8})$"; + Regex dArtEx = new Regex(DART_REGEX); Match dArtMatch = dArtEx.Match(dArt); if(dArtMatch.Success) @@ -383,8 +379,7 @@ namespace DiscImageChef.DiscImages ImageInfo.SectorSize = SECTOR_SIZE; ImageInfo.XmlMediaType = XmlMediaType.BlockMedia; ImageInfo.ImageSize = ImageInfo.Sectors * SECTOR_SIZE; - if(header.srcCmp == COMPRESS_NONE) ImageInfo.ImageVersion = "1.4"; - else ImageInfo.ImageVersion = "1.5"; + ImageInfo.ImageVersion = header.srcCmp == COMPRESS_NONE ? "1.4" : "1.5"; switch(header.srcSize) { diff --git a/DiscImageChef.DiscImages/DIM.cs b/DiscImageChef.DiscImages/DIM.cs index dfed6543..561a8dbc 100644 --- a/DiscImageChef.DiscImages/DIM.cs +++ b/DiscImageChef.DiscImages/DIM.cs @@ -73,27 +73,29 @@ namespace DiscImageChef.DiscImages { Name = "DIM Disk Image"; PluginUuid = new Guid("0240B7B1-E959-4CDC-B0BD-386D6E467B88"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) diff --git a/DiscImageChef.DiscImages/DiscFerret.cs b/DiscImageChef.DiscImages/DiscFerret.cs index 177a15f7..e894ac8b 100644 --- a/DiscImageChef.DiscImages/DiscFerret.cs +++ b/DiscImageChef.DiscImages/DiscFerret.cs @@ -123,7 +123,6 @@ namespace DiscImageChef.DiscImages TrackLengths = new SortedDictionary(); int t = -1; ushort lastCylinder = 0, lastHead = 0; - bool endOfTrack = false; long offset = 0; while(stream.Position < stream.Length) @@ -177,8 +176,7 @@ namespace DiscImageChef.DiscImages ImageInfo.Cylinders++; ImageInfo.ImageApplication = "DiscFerret"; - if(magic == DFI_MAGIC2) ImageInfo.ImageApplicationVersion = "2.0"; - else ImageInfo.ImageApplicationVersion = "1.0"; + ImageInfo.ImageApplicationVersion = magic == DFI_MAGIC2 ? "2.0" : "1.0"; throw new NotImplementedException("Flux decoding is not yet implemented."); } diff --git a/DiscImageChef.DiscImages/DiscJuggler.cs b/DiscImageChef.DiscImages/DiscJuggler.cs index 1d007208..d94a4f90 100644 --- a/DiscImageChef.DiscImages/DiscJuggler.cs +++ b/DiscImageChef.DiscImages/DiscJuggler.cs @@ -57,24 +57,26 @@ namespace DiscImageChef.DiscImages { Name = "DiscJuggler"; PluginUuid = new Guid("2444DBC6-CD35-424C-A227-39B0C4DB01B2"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = true; - ImageInfo.ImageHasSessions = true; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageName = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = true, + ImageHasSessions = true, + ImageVersion = null, + ImageApplicationVersion = null, + ImageName = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -163,10 +165,12 @@ namespace DiscImageChef.DiscImages DicConsole.DebugWriteLine("DiscJuggler plugin", "maxT = {0}", maxT); sessionSequence++; - Session session = new Session(); - session.SessionSequence = sessionSequence; - session.EndTrack = uint.MinValue; - session.StartTrack = uint.MaxValue; + Session session = new Session + { + SessionSequence = sessionSequence, + EndTrack = uint.MinValue, + StartTrack = uint.MaxValue + }; position += 15; bool addedATrack = false; @@ -496,15 +500,17 @@ namespace DiscImageChef.DiscImages ImageInfo.ReadableSectorTags.Add(SectorTagType.CdSectorSubchannel); } - Partition partition = new Partition(); - partition.Description = track.TrackDescription; - partition.Size = (ulong)(trackLen * track.TrackBytesPerSector); - partition.Length = trackLen; + Partition partition = new Partition + { + Description = track.TrackDescription, + Size = (ulong)(trackLen * track.TrackBytesPerSector), + Length = trackLen, + Sequence = track.TrackSequence, + Offset = track.TrackFileOffset, + Start = track.TrackStartSector, + Type = track.TrackType.ToString() + }; ImageInfo.Sectors += partition.Length; - partition.Sequence = track.TrackSequence; - partition.Offset = track.TrackFileOffset; - partition.Start = track.TrackStartSector; - partition.Type = track.TrackType.ToString(); partitions.Add(partition); offsetmap.Add(track.TrackSequence, track.TrackStartSector); tracks.Add(track); @@ -695,41 +701,39 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in tracks where _track.TrackSequence == kvp.Key where sectorAddress < _track.TrackEndSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in tracks where track.TrackSequence == kvp.Key where sectorAddress < track.TrackEndSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in offsetmap.Where(kvp => sectorAddress >= kvp.Value).Where(kvp => tracks.Where(_track => _track.TrackSequence == kvp.Key).Any(_track => sectorAddress < _track.TrackEndSector))) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in offsetmap.Where(kvp => sectorAddress >= kvp.Value).Where(kvp => tracks.Where(track => track.TrackSequence == kvp.Key).Any(track => sectorAddress < track.TrackEndSector))) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; - - foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { - _track = __track; + foreach(Track linqTrack in tracks.Where(linqTrack => linqTrack.TrackSequence == track)) { + dicTrack = linqTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector) + if(length + sectorAddress > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); uint sectorOffset; uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.Audio: { @@ -739,7 +743,7 @@ namespace DiscImageChef.DiscImages break; } case TrackType.CdMode1: - if(_track.TrackRawBytesPerSector == 2352) + if(dicTrack.TrackRawBytesPerSector == 2352) { sectorOffset = 16; sectorSize = 2048; @@ -753,7 +757,7 @@ namespace DiscImageChef.DiscImages } break; case TrackType.CdMode2Formless: - if(_track.TrackRawBytesPerSector == 2352) + if(dicTrack.TrackRawBytesPerSector == 2352) { sectorOffset = 16; sectorSize = 2336; @@ -769,7 +773,7 @@ namespace DiscImageChef.DiscImages default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - switch(_track.TrackSubchannelType) + switch(dicTrack.TrackSubchannelType) { case TrackSubchannelType.None: sectorSkip += 0; @@ -785,7 +789,7 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream.Seek((long)(_track.TrackFileOffset + sectorAddress * (ulong)_track.TrackRawBytesPerSector), + imageStream.Seek((long)(dicTrack.TrackFileOffset + sectorAddress * (ulong)dicTrack.TrackRawBytesPerSector), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) imageStream.Read(buffer, 0, buffer.Length); else @@ -803,27 +807,24 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; - foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { - _track = __track; + foreach(Track linqTrack in tracks.Where(linqTrack => linqTrack.TrackSequence == track)) { + dicTrack = linqTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector) + if(length + sectorAddress > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); - if(_track.TrackType == TrackType.Data) + if(dicTrack.TrackType == TrackType.Data) throw new ArgumentException("Unsupported tag requested", nameof(tag)); - byte[] buffer; - switch(tag) { case SectorTagType.CdSectorEcc: @@ -835,8 +836,7 @@ namespace DiscImageChef.DiscImages case SectorTagType.CdSectorSubHeader: case SectorTagType.CdSectorSync: break; case SectorTagType.CdTrackFlags: - byte flag; - if(trackFlags.TryGetValue(track, out flag)) return new[] {flag}; + if(trackFlags.TryGetValue(track, out byte flag)) return new[] {flag}; throw new ArgumentException("Unsupported tag requested", nameof(tag)); default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); @@ -846,10 +846,10 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.TrackType) + switch(dicTrack.TrackType) { case TrackType.CdMode1: - if(_track.TrackRawBytesPerSector != 2352) + if(dicTrack.TrackRawBytesPerSector != 2352) throw new ArgumentException("Unsupported tag requested for this track", nameof(tag)); switch(tag) @@ -899,7 +899,7 @@ namespace DiscImageChef.DiscImages break; } case SectorTagType.CdSectorSubchannel: - switch(_track.TrackSubchannelType) { + switch(dicTrack.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"); } @@ -913,7 +913,7 @@ namespace DiscImageChef.DiscImages break; case TrackType.CdMode2Formless: - if(_track.TrackRawBytesPerSector != 2352) + if(dicTrack.TrackRawBytesPerSector != 2352) throw new ArgumentException("Unsupported tag requested for this track", nameof(tag)); { @@ -940,7 +940,7 @@ namespace DiscImageChef.DiscImages break; } case SectorTagType.CdSectorSubchannel: - switch(_track.TrackSubchannelType) { + switch(dicTrack.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"); } @@ -959,7 +959,7 @@ namespace DiscImageChef.DiscImages switch(tag) { case SectorTagType.CdSectorSubchannel: - switch(_track.TrackSubchannelType) { + switch(dicTrack.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"); } @@ -976,7 +976,7 @@ namespace DiscImageChef.DiscImages default: throw new FeatureSupportedButNotImplementedImageException("Unsupported track type"); } - switch(_track.TrackSubchannelType) + switch(dicTrack.TrackSubchannelType) { case TrackSubchannelType.None: sectorSkip += 0; @@ -990,9 +990,9 @@ namespace DiscImageChef.DiscImages default: throw new FeatureSupportedButNotImplementedImageException("Unsupported subchannel type"); } - buffer = new byte[sectorSize * length]; + byte[] buffer = new byte[sectorSize * length]; - imageStream.Seek((long)(_track.TrackFileOffset + sectorAddress * (ulong)_track.TrackRawBytesPerSector), + imageStream.Seek((long)(dicTrack.TrackFileOffset + sectorAddress * (ulong)dicTrack.TrackRawBytesPerSector), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) imageStream.Read(buffer, 0, buffer.Length); else @@ -1027,27 +1027,25 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { - Track _track = new Track(); + Track dicTrack = new Track {TrackSequence = 0}; - _track.TrackSequence = 0; - foreach(Track __track in tracks.Where(__track => __track.TrackSequence == track)) { - _track = __track; + foreach(Track linqTrack in tracks.Where(linqTrack => linqTrack.TrackSequence == track)) { + dicTrack = linqTrack; break; } - if(_track.TrackSequence == 0) + if(dicTrack.TrackSequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length + sectorAddress > _track.TrackEndSector) + if(length + sectorAddress > dicTrack.TrackEndSector) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length + sectorAddress}) than present in track ({_track.TrackEndSector}), won't cross tracks"); + $"Requested more sectors ({length + sectorAddress}) than present in track ({dicTrack.TrackEndSector}), won't cross tracks"); - uint sectorOffset = 0; - uint sectorSize = (uint)_track.TrackRawBytesPerSector; + uint sectorSize = (uint)dicTrack.TrackRawBytesPerSector; uint sectorSkip = 0; - switch(_track.TrackSubchannelType) + switch(dicTrack.TrackSubchannelType) { case TrackSubchannelType.None: sectorSkip += 0; @@ -1063,14 +1061,13 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream.Seek((long)(_track.TrackFileOffset + sectorAddress * (ulong)_track.TrackRawBytesPerSector), + imageStream.Seek((long)(dicTrack.TrackFileOffset + sectorAddress * (ulong)dicTrack.TrackRawBytesPerSector), SeekOrigin.Begin); - if(sectorOffset == 0 && sectorSkip == 0) imageStream.Read(buffer, 0, buffer.Length); + if(sectorSkip == 0) imageStream.Read(buffer, 0, buffer.Length); else for(int i = 0; i < length; i++) { byte[] sector = new byte[sectorSize]; - imageStream.Seek(sectorOffset, SeekOrigin.Current); imageStream.Read(sector, 0, sector.Length); imageStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); @@ -1198,7 +1195,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - return tracks.Where(_track => _track.TrackSession == session).ToList(); + return tracks.Where(track => track.TrackSession == session).ToList(); } public override List GetSessions() diff --git a/DiscImageChef.DiscImages/DiskCopy42.cs b/DiscImageChef.DiscImages/DiskCopy42.cs index 536abb19..9700a749 100644 --- a/DiscImageChef.DiscImages/DiskCopy42.cs +++ b/DiscImageChef.DiscImages/DiskCopy42.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Text; using System.Text.RegularExpressions; @@ -44,6 +45,7 @@ using Version = Resources.Version; namespace DiscImageChef.DiscImages { // Checked using several images and strings inside Apple's DiskImages.framework + [SuppressMessage("ReSharper", "InconsistentNaming")] public class DiskCopy42 : ImagePlugin { #region Internal Structures @@ -135,27 +137,29 @@ namespace DiscImageChef.DiscImages { Name = "Apple DiskCopy 4.2"; PluginUuid = new Guid("0240B7B1-E959-4CDC-B0BD-386D6E467B88"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = "4.2"; - ImageInfo.ImageApplication = "Apple DiskCopy"; - ImageInfo.ImageApplicationVersion = "4.2"; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = "4.2", + ImageApplication = "Apple DiskCopy", + ImageApplicationVersion = "4.2", + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -346,8 +350,7 @@ namespace DiscImageChef.DiscImages switch(header.Format) { case kSonyFormat400K: - if(ImageInfo.Sectors == 1600) ImageInfo.MediaType = MediaType.AppleSonyDS; - else ImageInfo.MediaType = MediaType.AppleSonySS; + ImageInfo.MediaType = ImageInfo.Sectors == 1600 ? MediaType.AppleSonyDS : MediaType.AppleSonySS; break; case kSonyFormat800K: ImageInfo.MediaType = MediaType.AppleSonyDS; @@ -458,45 +461,41 @@ namespace DiscImageChef.DiscImages if(rsrcFork.ContainsKey(0x76657273)) { Resource versRsrc = rsrcFork.GetResource(0x76657273); - if(versRsrc != null) + + byte[] vers = versRsrc?.GetResource(versRsrc.GetIds()[0]); + + if(vers != null) { - byte[] vers = versRsrc.GetResource(versRsrc.GetIds()[0]); + Version version = new Version(vers); - if(vers != null) + string release = null; + string dev = null; + string pre = null; + + string major = $"{version.MajorVersion}"; + string minor = $".{version.MinorVersion / 10}"; + if(version.MinorVersion % 10 > 0) + release = $".{version.MinorVersion % 10}"; + switch(version.DevStage) { - Version version = new Version(vers); - - string major; - string minor; - string release = null; - string dev = null; - string pre = null; - - major = $"{version.MajorVersion}"; - minor = $".{version.MinorVersion / 10}"; - if(version.MinorVersion % 10 > 0) - release = $".{version.MinorVersion % 10}"; - switch(version.DevStage) - { - case Version.DevelopmentStage.Alpha: - dev = "a"; - break; - case Version.DevelopmentStage.Beta: - dev = "b"; - break; - case Version.DevelopmentStage.PreAlpha: - dev = "d"; - break; - } - - if(dev == null && version.PreReleaseVersion > 0) dev = "f"; - - if(dev != null) pre = $"{version.PreReleaseVersion}"; - - ImageInfo.ImageApplicationVersion = $"{major}{minor}{release}{dev}{pre}"; - ImageInfo.ImageApplication = version.VersionString; - ImageInfo.ImageComments = version.VersionMessage; + case Version.DevelopmentStage.Alpha: + dev = "a"; + break; + case Version.DevelopmentStage.Beta: + dev = "b"; + break; + case Version.DevelopmentStage.PreAlpha: + dev = "d"; + break; } + + if(dev == null && version.PreReleaseVersion > 0) dev = "f"; + + if(dev != null) pre = $"{version.PreReleaseVersion}"; + + ImageInfo.ImageApplicationVersion = $"{major}{minor}{release}{dev}{pre}"; + ImageInfo.ImageApplication = version.VersionString; + ImageInfo.ImageComments = version.VersionMessage; } } diff --git a/DiscImageChef.DiscImages/DriDiskCopy.cs b/DiscImageChef.DiscImages/DriDiskCopy.cs index 131093a8..8ee0202e 100644 --- a/DiscImageChef.DiscImages/DriDiskCopy.cs +++ b/DiscImageChef.DiscImages/DriDiskCopy.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Runtime.InteropServices; using System.Text.RegularExpressions; @@ -107,6 +108,7 @@ namespace DiscImageChef.DiscImages /// /// Drive codes change according to CMOS stored valued /// + [SuppressMessage("ReSharper", "InconsistentNaming")] enum DriDriveCodes : byte { /// 5.25" 360k @@ -135,25 +137,27 @@ namespace DiscImageChef.DiscImages { Name = "Digital Research DiskCopy"; PluginUuid = new Guid("9F0BE551-8BAB-4038-8B5A-691F1BF5FFF3"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageApplication = "DiskCopy"; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageApplication = "DiskCopy", + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -166,10 +170,9 @@ namespace DiscImageChef.DiscImages stream.Seek(-buffer.Length, SeekOrigin.End); stream.Read(buffer, 0, buffer.Length); - DriFooter tmpFooter; IntPtr ftrPtr = Marshal.AllocHGlobal(buffer.Length); Marshal.Copy(buffer, 0, ftrPtr, buffer.Length); - tmpFooter = (DriFooter)Marshal.PtrToStructure(ftrPtr, typeof(DriFooter)); + DriFooter tmpFooter = (DriFooter)Marshal.PtrToStructure(ftrPtr, typeof(DriFooter)); Marshal.FreeHGlobal(ftrPtr); string sig = StringHandlers.CToString(tmpFooter.signature); diff --git a/DiscImageChef.DiscImages/GDI.cs b/DiscImageChef.DiscImages/GDI.cs index 38921416..fc11e10f 100644 --- a/DiscImageChef.DiscImages/GDI.cs +++ b/DiscImageChef.DiscImages/GDI.cs @@ -105,24 +105,26 @@ namespace DiscImageChef.DiscImages { Name = "Dreamcast GDI image"; PluginUuid = new Guid("281ECBF2-D2A7-414C-8497-1A33F6DCB2DD"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = true; - ImageInfo.ImageHasSessions = true; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageName = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = true, + ImageHasSessions = true, + ImageVersion = null, + ImageApplicationVersion = null, + ImageName = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } // Due to .gdi format, this method must parse whole file, ignoring errors (those will be thrown by OpenImage()). @@ -153,21 +155,21 @@ namespace DiscImageChef.DiscImages } gdiStream = new StreamReader(imageFilter.GetDataForkStream()); - int line = 0; + int lineNumber = 0; int tracksFound = 0; int tracks = 0; while(gdiStream.Peek() >= 0) { - line++; - string _line = gdiStream.ReadLine(); + lineNumber++; + string line = gdiStream.ReadLine(); - if(line == 1) { if(!int.TryParse(_line, out tracks)) return false; } + if(lineNumber == 1) { if(!int.TryParse(line, out tracks)) return false; } else { Regex regexTrack = new Regex(TRACK_REGEX); - Match trackMatch = regexTrack.Match(_line ?? throw new InvalidOperationException()); + Match trackMatch = regexTrack.Match(line ?? throw new InvalidOperationException()); if(!trackMatch.Success) return false; @@ -196,66 +198,58 @@ namespace DiscImageChef.DiscImages { imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); gdiStream = new StreamReader(imageFilter.GetDataForkStream()); - int line = 0; - int tracksFound = 0; - int tracks = 0; + int lineNumber = 0; bool highDensity = false; // Initialize all RegExs Regex regexTrack = new Regex(TRACK_REGEX); // Initialize all RegEx matches - Match trackMatch; // Initialize disc - discimage = new GdiDisc(); - discimage.Sessions = new List(); - discimage.Tracks = new List(); + discimage = new GdiDisc {Sessions = new List(), Tracks = new List()}; ulong currentStart = 0; offsetmap = new Dictionary(); - GdiTrack currentTrack; densitySeparationSectors = 0; - FiltersList filtersList; - while(gdiStream.Peek() >= 0) { - line++; - string _line = gdiStream.ReadLine(); + lineNumber++; + string line = gdiStream.ReadLine(); - if(line == 1) + if(lineNumber == 1) { - if(!int.TryParse(_line, out tracks)) + if(!int.TryParse(line, out _)) throw new ImageNotSupportedException("Not a correct Dreamcast GDI image"); } else { - trackMatch = regexTrack.Match(_line ?? throw new InvalidOperationException()); + Match trackMatch = regexTrack.Match(line ?? throw new InvalidOperationException()); if(!trackMatch.Success) - throw new ImageNotSupportedException($"Unknown line \"{_line}\" at line {line}"); - - tracksFound++; + throw new ImageNotSupportedException($"Unknown line \"{line}\" at line {lineNumber}"); 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); + trackMatch.Groups["offset"].Value, lineNumber); - filtersList = new FiltersList(); - currentTrack = new GdiTrack(); - currentTrack.Bps = ushort.Parse(trackMatch.Groups["type"].Value); - currentTrack.Flags = (byte)(byte.Parse(trackMatch.Groups["flags"].Value) * 0x10); - 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.Trackfilter = - filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), - trackMatch.Groups["filename"].Value.Replace("\\\"", "\"") - .Trim('"'))); + FiltersList filtersList = new FiltersList(); + GdiTrack currentTrack = new GdiTrack + { + Bps = ushort.Parse(trackMatch.Groups["type"].Value), + Flags = (byte)(byte.Parse(trackMatch.Groups["flags"].Value) * 0x10), + Offset = long.Parse(trackMatch.Groups["offset"].Value), + Sequence = uint.Parse(trackMatch.Groups["track"].Value), + StartSector = ulong.Parse(trackMatch.Groups["start"].Value), + Trackfilter = + filtersList.GetFilter(Path.Combine(imageFilter.GetParentFolder(), + trackMatch.Groups["filename"].Value + .Replace("\\\"", "\"").Trim('"'))) + }; currentTrack.Trackfile = currentTrack.Trackfilter.GetFilename(); if(currentTrack.StartSector - currentStart > 0) @@ -282,52 +276,51 @@ namespace DiscImageChef.DiscImages currentStart += currentTrack.Sectors; currentTrack.HighDensity = highDensity; - if((currentTrack.Flags & 0x40) == 0x40) currentTrack.Tracktype = TrackType.CdMode1; - else currentTrack.Tracktype = TrackType.Audio; + currentTrack.Tracktype = (currentTrack.Flags & 0x40) == 0x40 ? TrackType.CdMode1 : TrackType.Audio; discimage.Tracks.Add(currentTrack); } } - Session[] _sessions = new Session[2]; - for(int s = 0; s < _sessions.Length; s++) + Session[] sessions = new Session[2]; + for(int s = 0; s < sessions.Length; s++) if(s == 0) { - _sessions[s].SessionSequence = 1; + sessions[s].SessionSequence = 1; foreach(GdiTrack trk in discimage.Tracks.Where(trk => !trk.HighDensity)) { - if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence; - else if(_sessions[s].StartTrack > trk.Sequence) _sessions[s].StartTrack = trk.Sequence; + if(sessions[s].StartTrack == 0) sessions[s].StartTrack = trk.Sequence; + else if(sessions[s].StartTrack > trk.Sequence) sessions[s].StartTrack = trk.Sequence; - if(_sessions[s].EndTrack < trk.Sequence) _sessions[s].EndTrack = trk.Sequence; + if(sessions[s].EndTrack < trk.Sequence) sessions[s].EndTrack = trk.Sequence; - if(_sessions[s].StartSector > trk.StartSector) - _sessions[s].StartSector = trk.StartSector; + if(sessions[s].StartSector > trk.StartSector) + sessions[s].StartSector = trk.StartSector; - if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) - _sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; + if(sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) + sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; } } else { - _sessions[s].SessionSequence = 2; + sessions[s].SessionSequence = 2; foreach(GdiTrack trk in discimage.Tracks.Where(trk => trk.HighDensity)) { - if(_sessions[s].StartTrack == 0) _sessions[s].StartTrack = trk.Sequence; - else if(_sessions[s].StartTrack > trk.Sequence) _sessions[s].StartTrack = trk.Sequence; + if(sessions[s].StartTrack == 0) sessions[s].StartTrack = trk.Sequence; + else if(sessions[s].StartTrack > trk.Sequence) sessions[s].StartTrack = trk.Sequence; - if(_sessions[s].EndTrack < trk.Sequence) _sessions[s].EndTrack = trk.Sequence; + if(sessions[s].EndTrack < trk.Sequence) sessions[s].EndTrack = trk.Sequence; - if(_sessions[s].StartSector > trk.StartSector) - _sessions[s].StartSector = trk.StartSector; + if(sessions[s].StartSector > trk.StartSector) + sessions[s].StartSector = trk.StartSector; - if(_sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) - _sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; + if(sessions[s].EndSector < trk.Sectors + trk.StartSector - 1) + sessions[s].EndSector = trk.Sectors + trk.StartSector - 1; } } - discimage.Sessions.Add(_sessions[0]); - discimage.Sessions.Add(_sessions[1]); + discimage.Sessions.Add(sessions[0]); + discimage.Sessions.Add(sessions[1]); discimage.Disktype = MediaType.GDROM; @@ -380,17 +373,18 @@ namespace DiscImageChef.DiscImages if(discimage.Tracks[i].Sequence == 1 && i != 0) throw new ImageNotSupportedException("Unordered tracks"); - Partition partition = new Partition(); - // Index 01 - partition.Description = $"Track {discimage.Tracks[i].Sequence}."; - partition.Name = null; - partition.Start = discimage.Tracks[i].StartSector; - partition.Size = discimage.Tracks[i].Sectors * discimage.Tracks[i].Bps; - partition.Length = discimage.Tracks[i].Sectors; - partition.Sequence = discimage.Tracks[i].Sequence; - partition.Offset = byteOffset; - partition.Type = discimage.Tracks[i].Tracktype.ToString(); + Partition partition = new Partition + { + Description = $"Track {discimage.Tracks[i].Sequence}.", + Name = null, + Start = discimage.Tracks[i].StartSector, + Size = discimage.Tracks[i].Sectors * discimage.Tracks[i].Bps, + Length = discimage.Tracks[i].Sectors, + Sequence = discimage.Tracks[i].Sequence, + Offset = byteOffset, + Type = discimage.Tracks[i].Tracktype.ToString() + }; byteOffset += partition.Size; offsetmap.Add(discimage.Tracks[i].Sequence, partition.Start); @@ -485,8 +479,7 @@ namespace DiscImageChef.DiscImages { foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from gdiTrack in discimage.Tracks where gdiTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < gdiTrack.Sectors select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); - ulong transitionStart; - offsetmap.TryGetValue(0, out transitionStart); + offsetmap.TryGetValue(0, out ulong transitionStart); if(sectorAddress >= transitionStart && sectorAddress < densitySeparationSectors + transitionStart) return ReadSectors(sectorAddress - transitionStart, length, 0); @@ -497,8 +490,7 @@ namespace DiscImageChef.DiscImages { foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from gdiTrack in discimage.Tracks where gdiTrack.Sequence == kvp.Key where sectorAddress - kvp.Value < gdiTrack.Sectors select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); - ulong transitionStart; - offsetmap.TryGetValue(0, out transitionStart); + offsetmap.TryGetValue(0, out ulong transitionStart); if(sectorAddress >= transitionStart && sectorAddress < densitySeparationSectors + transitionStart) return ReadSectorsTag(sectorAddress - transitionStart, length, 0, tag); @@ -516,19 +508,17 @@ namespace DiscImageChef.DiscImages return new byte[length * 2352]; } - GdiTrack _track = new GdiTrack(); - - _track.Sequence = 0; + GdiTrack dicTrack = new GdiTrack {Sequence = 0}; foreach(GdiTrack gdiTrack in discimage.Tracks.Where(gdiTrack => gdiTrack.Sequence == track)) { - _track = gdiTrack; + dicTrack = gdiTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(sectorAddress + length > _track.Sectors) + if(sectorAddress + length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -536,7 +526,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case TrackType.Audio: { @@ -547,7 +537,7 @@ namespace DiscImageChef.DiscImages } case TrackType.CdMode1: { - if(_track.Bps == 2352) + if(dicTrack.Bps == 2352) { sectorOffset = 16; sectorSize = 2048; @@ -568,9 +558,9 @@ namespace DiscImageChef.DiscImages ulong remainingSectors = length; - if(_track.Pregap > 0 && sectorAddress < _track.Pregap) + if(dicTrack.Pregap > 0 && sectorAddress < dicTrack.Pregap) { - ulong remainingPregap = _track.Pregap - sectorAddress; + ulong remainingPregap = dicTrack.Pregap - sectorAddress; byte[] zero; if(length > remainingPregap) { @@ -588,18 +578,17 @@ namespace DiscImageChef.DiscImages if(remainingSectors == 0) return buffer; - imageStream = _track.Trackfilter.GetDataForkStream(); + imageStream = dicTrack.Trackfilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek(_track.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip) + _track.Pregap * _track.Bps), + .Seek(dicTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip) + dicTrack.Pregap * dicTrack.Bps), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * remainingSectors)); else for(ulong i = 0; i < remainingSectors; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, (int)(i * sectorSize), sectorSize); } @@ -620,19 +609,17 @@ namespace DiscImageChef.DiscImages throw new ArgumentException("Unsupported tag requested for this track", nameof(tag)); } - GdiTrack _track = new GdiTrack(); - - _track.Sequence = 0; + GdiTrack dicTrack = new GdiTrack {Sequence = 0}; foreach(GdiTrack gdiTrack in discimage.Tracks.Where(gdiTrack => gdiTrack.Sequence == track)) { - _track = gdiTrack; + dicTrack = gdiTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -652,19 +639,19 @@ namespace DiscImageChef.DiscImages { byte[] flags = new byte[1]; - flags[0] += _track.Flags; + flags[0] += dicTrack.Flags; return flags; } default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case TrackType.Audio: throw new ArgumentException("There are no tags on audio tracks", nameof(tag)); case TrackType.CdMode1: { - if(_track.Bps != 2352) + if(dicTrack.Bps != 2352) throw new FeatureNotPresentImageException("Image does not include tags for mode 1 sectors"); switch(tag) @@ -726,9 +713,9 @@ namespace DiscImageChef.DiscImages ulong remainingSectors = length; - if(_track.Pregap > 0 && sectorAddress < _track.Pregap) + if(dicTrack.Pregap > 0 && sectorAddress < dicTrack.Pregap) { - ulong remainingPregap = _track.Pregap - sectorAddress; + ulong remainingPregap = dicTrack.Pregap - sectorAddress; byte[] zero; if(length > remainingPregap) { @@ -746,18 +733,17 @@ namespace DiscImageChef.DiscImages if(remainingSectors == 0) return buffer; - imageStream = _track.Trackfilter.GetDataForkStream(); + imageStream = dicTrack.Trackfilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek(_track.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip) + _track.Pregap * _track.Bps), + .Seek(dicTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip) + dicTrack.Pregap * dicTrack.Bps), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * remainingSectors)); else for(ulong i = 0; i < remainingSectors; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, (int)(i * sectorSize), sectorSize); } @@ -793,19 +779,17 @@ namespace DiscImageChef.DiscImages return new byte[length * 2352]; } - GdiTrack _track = new GdiTrack(); - - _track.Sequence = 0; + GdiTrack dicTrack = new GdiTrack {Sequence = 0}; foreach(GdiTrack gdiTrack in discimage.Tracks.Where(gdiTrack => gdiTrack.Sequence == track)) { - _track = gdiTrack; + dicTrack = gdiTrack; break; } - if(_track.Sequence == 0) + if(dicTrack.Sequence == 0) throw new ArgumentOutOfRangeException(nameof(track), "Track does not exist in disc image"); - if(sectorAddress + length > _track.Sectors) + if(sectorAddress + length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), "Requested more sectors than present in track, won't cross tracks"); @@ -813,7 +797,7 @@ namespace DiscImageChef.DiscImages uint sectorSize; uint sectorSkip; - switch(_track.Tracktype) + switch(dicTrack.Tracktype) { case TrackType.Audio: { @@ -824,7 +808,7 @@ namespace DiscImageChef.DiscImages } case TrackType.CdMode1: { - if(_track.Bps == 2352) + if(dicTrack.Bps == 2352) { sectorOffset = 0; sectorSize = 2352; @@ -845,9 +829,9 @@ namespace DiscImageChef.DiscImages ulong remainingSectors = length; - if(_track.Pregap > 0 && sectorAddress < _track.Pregap) + if(dicTrack.Pregap > 0 && sectorAddress < dicTrack.Pregap) { - ulong remainingPregap = _track.Pregap - sectorAddress; + ulong remainingPregap = dicTrack.Pregap - sectorAddress; byte[] zero; if(length > remainingPregap) { @@ -865,18 +849,17 @@ namespace DiscImageChef.DiscImages if(remainingSectors == 0) return buffer; - imageStream = _track.Trackfilter.GetDataForkStream(); + imageStream = dicTrack.Trackfilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek(_track.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip) + _track.Pregap * _track.Bps), + .Seek(dicTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip) + dicTrack.Pregap * dicTrack.Bps), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * remainingSectors)); else for(ulong i = 0; i < remainingSectors; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, (int)(i * sectorSize), sectorSize); } @@ -945,27 +928,27 @@ namespace DiscImageChef.DiscImages foreach(GdiTrack gdiTrack in discimage.Tracks) { - Track _track = new Track(); + Track track = new Track + { + Indexes = new Dictionary(), + TrackDescription = null, + TrackStartSector = gdiTrack.StartSector, + TrackPregap = gdiTrack.Pregap, + TrackSession = (ushort)(gdiTrack.HighDensity ? 2 : 1), + TrackSequence = gdiTrack.Sequence, + TrackType = gdiTrack.Tracktype, + TrackFilter = gdiTrack.Trackfilter, + TrackFile = gdiTrack.Trackfile, + TrackFileOffset = (ulong)gdiTrack.Offset, + TrackFileType = "BINARY", + TrackRawBytesPerSector = gdiTrack.Bps, + TrackBytesPerSector = gdiTrack.Tracktype == TrackType.Data ? 2048 : 2352, + TrackSubchannelType = TrackSubchannelType.None + }; - _track.Indexes = new Dictionary(); - _track.TrackDescription = null; - _track.TrackStartSector = gdiTrack.StartSector; - _track.TrackEndSector = _track.TrackStartSector + gdiTrack.Sectors - 1; - _track.TrackPregap = gdiTrack.Pregap; - if(gdiTrack.HighDensity) _track.TrackSession = 2; - else _track.TrackSession = 1; - _track.TrackSequence = gdiTrack.Sequence; - _track.TrackType = gdiTrack.Tracktype; - _track.TrackFilter = gdiTrack.Trackfilter; - _track.TrackFile = gdiTrack.Trackfile; - _track.TrackFileOffset = (ulong)gdiTrack.Offset; - _track.TrackFileType = "BINARY"; - _track.TrackRawBytesPerSector = gdiTrack.Bps; - if(gdiTrack.Tracktype == TrackType.Data) _track.TrackBytesPerSector = 2048; - else _track.TrackBytesPerSector = 2352; - _track.TrackSubchannelType = TrackSubchannelType.None; + track.TrackEndSector = track.TrackStartSector + gdiTrack.Sectors - 1; - tracks.Add(_track); + tracks.Add(track); } return tracks; @@ -997,27 +980,27 @@ namespace DiscImageChef.DiscImages foreach(GdiTrack gdiTrack in discimage.Tracks) if(gdiTrack.HighDensity == expectedDensity) { - Track _track = new Track(); + Track track = new Track + { + Indexes = new Dictionary(), + TrackDescription = null, + TrackStartSector = gdiTrack.StartSector, + TrackPregap = gdiTrack.Pregap, + TrackSession = (ushort)(gdiTrack.HighDensity ? 2 : 1), + TrackSequence = gdiTrack.Sequence, + TrackType = gdiTrack.Tracktype, + TrackFilter = gdiTrack.Trackfilter, + TrackFile = gdiTrack.Trackfile, + TrackFileOffset = (ulong)gdiTrack.Offset, + TrackFileType = "BINARY", + TrackRawBytesPerSector = gdiTrack.Bps, + TrackBytesPerSector = gdiTrack.Tracktype == TrackType.Data ? 2048 : 2352, + TrackSubchannelType = TrackSubchannelType.None + }; - _track.Indexes = new Dictionary(); - _track.TrackDescription = null; - _track.TrackStartSector = gdiTrack.StartSector; - _track.TrackEndSector = _track.TrackStartSector + gdiTrack.Sectors - 1; - _track.TrackPregap = gdiTrack.Pregap; - if(gdiTrack.HighDensity) _track.TrackSession = 2; - else _track.TrackSession = 1; - _track.TrackSequence = gdiTrack.Sequence; - _track.TrackType = gdiTrack.Tracktype; - _track.TrackFilter = gdiTrack.Trackfilter; - _track.TrackFile = gdiTrack.Trackfile; - _track.TrackFileOffset = (ulong)gdiTrack.Offset; - _track.TrackFileType = "BINARY"; - _track.TrackRawBytesPerSector = gdiTrack.Bps; - if(gdiTrack.Tracktype == TrackType.Data) _track.TrackBytesPerSector = 2048; - else _track.TrackBytesPerSector = 2352; - _track.TrackSubchannelType = TrackSubchannelType.None; + track.TrackEndSector = track.TrackStartSector + gdiTrack.Sectors - 1; - tracks.Add(_track); + tracks.Add(track); } return tracks; diff --git a/DiscImageChef.DiscImages/HDCopy.cs b/DiscImageChef.DiscImages/HDCopy.cs index 0684837c..528978ce 100644 --- a/DiscImageChef.DiscImages/HDCopy.cs +++ b/DiscImageChef.DiscImages/HDCopy.cs @@ -172,33 +172,33 @@ namespace DiscImageChef.DiscImages { Name = "HD-Copy disk image"; PluginUuid = new Guid("8D57483F-71A5-42EC-9B87-66AEC439C792"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) { - HdcpFileHeader fheader; - Stream stream = imageFilter.GetDataForkStream(); stream.Seek(0, SeekOrigin.Begin); @@ -209,7 +209,7 @@ namespace DiscImageChef.DiscImages IntPtr hdrPtr = Marshal.AllocHGlobal(2 + 2 * 82); Marshal.Copy(header, 0, hdrPtr, 2 + 2 * 82); - fheader = (HdcpFileHeader)Marshal.PtrToStructure(hdrPtr, typeof(HdcpFileHeader)); + HdcpFileHeader fheader = (HdcpFileHeader)Marshal.PtrToStructure(hdrPtr, typeof(HdcpFileHeader)); Marshal.FreeHGlobal(hdrPtr); /* Some sanity checks on the values we just read. @@ -233,7 +233,6 @@ namespace DiscImageChef.DiscImages public override bool OpenImage(Filter imageFilter) { - HdcpFileHeader fheader; long currentOffset; Stream stream = imageFilter.GetDataForkStream(); @@ -244,7 +243,7 @@ namespace DiscImageChef.DiscImages IntPtr hdrPtr = Marshal.AllocHGlobal(2 + 2 * 82); Marshal.Copy(header, 0, hdrPtr, 2 + 2 * 82); - fheader = (HdcpFileHeader)Marshal.PtrToStructure(hdrPtr, typeof(HdcpFileHeader)); + HdcpFileHeader fheader = (HdcpFileHeader)Marshal.PtrToStructure(hdrPtr, typeof(HdcpFileHeader)); Marshal.FreeHGlobal(hdrPtr); DicConsole.DebugWriteLine("HDCP plugin", "Detected HD-Copy image with {0} tracks and {1} sectors per track.", @@ -376,9 +375,6 @@ namespace DiscImageChef.DiscImages byte[] trackData = new byte[ImageInfo.SectorSize * ImageInfo.SectorsPerTrack]; byte[] blkHeader = new byte[3]; byte escapeByte; - byte fillByte; - byte fillCount; - byte[] cBuffer; short compressedLength; // check that track is present @@ -392,7 +388,7 @@ namespace DiscImageChef.DiscImages compressedLength = (short)(BitConverter.ToInt16(blkHeader, 0) - 1); escapeByte = blkHeader[2]; - cBuffer = new byte[compressedLength]; + byte[] cBuffer = new byte[compressedLength]; stream.Read(cBuffer, 0, compressedLength); // decompress the data @@ -402,8 +398,8 @@ namespace DiscImageChef.DiscImages if(cBuffer[sIndex] == escapeByte) { sIndex++; // skip over escape byte - fillByte = cBuffer[sIndex++]; // read fill byte - fillCount = cBuffer[sIndex++]; // read fill count + byte fillByte = cBuffer[sIndex++]; + byte fillCount = cBuffer[sIndex++]; // fill destination buffer for(int i = 0; i < fillCount; i++) trackData[dIndex++] = fillByte; } @@ -421,7 +417,6 @@ namespace DiscImageChef.DiscImages { int trackNum = (int)(sectorAddress / ImageInfo.SectorsPerTrack); int sectorOffset = (int)(sectorAddress % (ImageInfo.SectorsPerTrack * ImageInfo.SectorSize)); - byte[] result; if(sectorAddress > ImageInfo.Sectors - 1) throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); @@ -429,7 +424,7 @@ namespace DiscImageChef.DiscImages if(trackNum > 2 * ImageInfo.Cylinders) throw new ArgumentOutOfRangeException(nameof(sectorAddress), "Sector address not found"); - result = new byte[ImageInfo.SectorSize]; + byte[] result = new byte[ImageInfo.SectorSize]; if(trackOffset[trackNum] == -1) Array.Clear(result, 0, (int)ImageInfo.SectorSize); else { diff --git a/DiscImageChef.DiscImages/IMD.cs b/DiscImageChef.DiscImages/IMD.cs index 758d309d..b485991f 100644 --- a/DiscImageChef.DiscImages/IMD.cs +++ b/DiscImageChef.DiscImages/IMD.cs @@ -91,27 +91,29 @@ namespace DiscImageChef.DiscImages { Name = "Dunfield's IMD"; PluginUuid = new Guid("0D67162E-38A3-407D-9B1A-CF40080A48CB"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } #region Public methods diff --git a/DiscImageChef.DiscImages/KryoFlux.cs b/DiscImageChef.DiscImages/KryoFlux.cs index 59823184..2653a004 100644 --- a/DiscImageChef.DiscImages/KryoFlux.cs +++ b/DiscImageChef.DiscImages/KryoFlux.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.Linq; @@ -42,6 +43,7 @@ using DiscImageChef.Filters; namespace DiscImageChef.DiscImages { + [SuppressMessage("ReSharper", "InconsistentNaming")] public class KryoFlux : ImagePlugin { #region Internal Structures @@ -55,7 +57,7 @@ namespace DiscImageChef.DiscImages #endregion Internal Structures #region Internal Constants - public enum BlockIds : byte + enum BlockIds : byte { Flux2 = 0x00, Flux2_1 = 0x01, @@ -73,7 +75,7 @@ namespace DiscImageChef.DiscImages Oob = 0x0D } - public enum OobTypes : byte + enum OobTypes : byte { Invalid = 0x00, StreamInfo = 0x01, diff --git a/DiscImageChef.DiscImages/MaxiDisk.cs b/DiscImageChef.DiscImages/MaxiDisk.cs index ec67624a..8a4dd05e 100644 --- a/DiscImageChef.DiscImages/MaxiDisk.cs +++ b/DiscImageChef.DiscImages/MaxiDisk.cs @@ -82,25 +82,27 @@ namespace DiscImageChef.DiscImages { Name = "MAXI Disk image"; PluginUuid = new Guid("D27D924A-7034-466E-ADE1-B81EF37E469E"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageApplication = "MAXI Disk"; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageApplication = "MAXI Disk", + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -113,38 +115,37 @@ namespace DiscImageChef.DiscImages stream.Seek(0, SeekOrigin.Begin); stream.Read(buffer, 0, buffer.Length); - HdkHeader tmp_header; IntPtr ftrPtr = Marshal.AllocHGlobal(buffer.Length); Marshal.Copy(buffer, 0, ftrPtr, buffer.Length); - tmp_header = (HdkHeader)Marshal.PtrToStructure(ftrPtr, typeof(HdkHeader)); + HdkHeader tmpHeader = (HdkHeader)Marshal.PtrToStructure(ftrPtr, typeof(HdkHeader)); Marshal.FreeHGlobal(ftrPtr); - DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.unknown = {0}", tmp_header.unknown); - DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.diskType = {0}", tmp_header.diskType); - DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.heads = {0}", tmp_header.heads); - DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.cylinders = {0}", tmp_header.cylinders); - DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.bytesPerSector = {0}", tmp_header.bytesPerSector); + DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.unknown = {0}", tmpHeader.unknown); + DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.diskType = {0}", tmpHeader.diskType); + DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.heads = {0}", tmpHeader.heads); + DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.cylinders = {0}", tmpHeader.cylinders); + DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.bytesPerSector = {0}", tmpHeader.bytesPerSector); DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.sectorsPerTrack = {0}", - tmp_header.sectorsPerTrack); - DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.unknown2 = {0}", tmp_header.unknown2); - DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.unknown3 = {0}", tmp_header.unknown3); + tmpHeader.sectorsPerTrack); + DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.unknown2 = {0}", tmpHeader.unknown2); + DicConsole.DebugWriteLine("MAXI Disk plugin", "tmp_header.unknown3 = {0}", tmpHeader.unknown3); // This is hardcoded // But its possible values are unknown... //if(tmp_header.diskType > 11) - // return false; + // return false; // Only floppies supported - if(tmp_header.heads == 0 || tmp_header.heads > 2) return false; + if(tmpHeader.heads == 0 || tmpHeader.heads > 2) return false; // No floppies with more than this? - if(tmp_header.cylinders > 90) return false; + if(tmpHeader.cylinders > 90) return false; // Maximum supported bps is 16384 - if(tmp_header.bytesPerSector > 7) return false; + if(tmpHeader.bytesPerSector > 7) return false; - int expectedFileSize = tmp_header.heads * tmp_header.cylinders * tmp_header.sectorsPerTrack * - (128 << tmp_header.bytesPerSector) + 8; + int expectedFileSize = tmpHeader.heads * tmpHeader.cylinders * tmpHeader.sectorsPerTrack * + (128 << tmpHeader.bytesPerSector) + 8; return expectedFileSize == stream.Length; } @@ -159,36 +160,35 @@ namespace DiscImageChef.DiscImages stream.Seek(0, SeekOrigin.Begin); stream.Read(buffer, 0, buffer.Length); - HdkHeader tmp_header; IntPtr ftrPtr = Marshal.AllocHGlobal(buffer.Length); Marshal.Copy(buffer, 0, ftrPtr, buffer.Length); - tmp_header = (HdkHeader)Marshal.PtrToStructure(ftrPtr, typeof(HdkHeader)); + HdkHeader tmpHeader = (HdkHeader)Marshal.PtrToStructure(ftrPtr, typeof(HdkHeader)); Marshal.FreeHGlobal(ftrPtr); // This is hardcoded // But its possible values are unknown... //if(tmp_header.diskType > 11) - // return false; + // return false; // Only floppies supported - if(tmp_header.heads == 0 || tmp_header.heads > 2) return false; + if(tmpHeader.heads == 0 || tmpHeader.heads > 2) return false; // No floppies with more than this? - if(tmp_header.cylinders > 90) return false; + if(tmpHeader.cylinders > 90) return false; // Maximum supported bps is 16384 - if(tmp_header.bytesPerSector > 7) return false; + if(tmpHeader.bytesPerSector > 7) return false; - int expectedFileSize = tmp_header.heads * tmp_header.cylinders * tmp_header.sectorsPerTrack * - (128 << tmp_header.bytesPerSector) + 8; + int expectedFileSize = tmpHeader.heads * tmpHeader.cylinders * tmpHeader.sectorsPerTrack * + (128 << tmpHeader.bytesPerSector) + 8; if(expectedFileSize != stream.Length) return false; - ImageInfo.Cylinders = tmp_header.cylinders; - ImageInfo.Heads = tmp_header.heads; - ImageInfo.SectorsPerTrack = tmp_header.sectorsPerTrack; - ImageInfo.Sectors = (ulong)(tmp_header.heads * tmp_header.cylinders * tmp_header.sectorsPerTrack); - ImageInfo.SectorSize = (uint)(128 << tmp_header.bytesPerSector); + ImageInfo.Cylinders = tmpHeader.cylinders; + ImageInfo.Heads = tmpHeader.heads; + ImageInfo.SectorsPerTrack = tmpHeader.sectorsPerTrack; + ImageInfo.Sectors = (ulong)(tmpHeader.heads * tmpHeader.cylinders * tmpHeader.sectorsPerTrack); + ImageInfo.SectorSize = (uint)(128 << tmpHeader.bytesPerSector); hdkImageFilter = imageFilter; diff --git a/DiscImageChef.DiscImages/NDIF.cs b/DiscImageChef.DiscImages/NDIF.cs index 8d7d30de..14cab274 100644 --- a/DiscImageChef.DiscImages/NDIF.cs +++ b/DiscImageChef.DiscImages/NDIF.cs @@ -194,7 +194,7 @@ namespace DiscImageChef.DiscImages Dictionary chunkCache; const uint MAX_CACHE_SIZE = 16777216; const uint SECTOR_SIZE = 512; - uint maxCachedSectors = MAX_CACHE_SIZE / SECTOR_SIZE; + const uint MAX_CACHED_SECTORS = MAX_CACHE_SIZE / SECTOR_SIZE; uint currentChunkCacheSize; uint buffersize; @@ -204,38 +204,38 @@ namespace DiscImageChef.DiscImages { Name = "Apple New Disk Image Format"; PluginUuid = new Guid("5A7FF7D8-491E-458D-8674-5B5EADBECC24"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) { if(!imageFilter.HasResourceFork() || imageFilter.GetResourceForkLength() == 0) return false; - ResourceFork rsrcFork; - try { - rsrcFork = new ResourceFork(imageFilter.GetResourceForkStream()); + ResourceFork rsrcFork = new ResourceFork(imageFilter.GetResourceForkStream()); if(!rsrcFork.ContainsKey(NDIF_RESOURCE)) return false; Resource rsrc = rsrcFork.GetResource(NDIF_RESOURCE); @@ -375,14 +375,12 @@ namespace DiscImageChef.DiscImages Version version = new Version(vers); - string major; - string minor; string release = null; string dev = null; string pre = null; - major = $"{version.MajorVersion}"; - minor = $".{version.MinorVersion / 10}"; + string major = $"{version.MajorVersion}"; + string minor = $".{version.MinorVersion / 10}"; if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; switch(version.DevStage) { @@ -467,9 +465,7 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; BlockChunk currentChunk = new BlockChunk(); bool chunkFound = false; @@ -493,8 +489,7 @@ namespace DiscImageChef.DiscImages if((currentChunk.type & CHUNK_TYPE_COMPRESSED_MASK) == CHUNK_TYPE_COMPRESSED_MASK) { - byte[] buffer; - if(!chunkCache.TryGetValue(chunkStartSector, out buffer)) + if(!chunkCache.TryGetValue(chunkStartSector, out byte[] buffer)) { byte[] cmpBuffer = new byte[currentChunk.length]; imageStream.Seek(currentChunk.offset, SeekOrigin.Begin); @@ -502,7 +497,7 @@ namespace DiscImageChef.DiscImages MemoryStream cmpMs = new MemoryStream(cmpBuffer); Stream decStream; - if(currentChunk.type == CHUNK_TYPE_ADC) decStream = new ADCStream(cmpMs, CompressionMode.Decompress); + if(currentChunk.type == CHUNK_TYPE_ADC) decStream = new ADCStream(cmpMs); else throw new ImageNotSupportedException($"Unsupported chunk type 0x{currentChunk.type:X8} found"); @@ -524,7 +519,7 @@ namespace DiscImageChef.DiscImages sector = new byte[SECTOR_SIZE]; Array.Copy(buffer, relOff, sector, 0, SECTOR_SIZE); - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); @@ -535,7 +530,7 @@ namespace DiscImageChef.DiscImages case CHUNK_TYPE_NOCOPY: sector = new byte[SECTOR_SIZE]; - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); return sector; @@ -544,7 +539,7 @@ namespace DiscImageChef.DiscImages sector = new byte[SECTOR_SIZE]; imageStream.Read(sector, 0, sector.Length); - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); return sector; diff --git a/DiscImageChef.DiscImages/Nero.cs b/DiscImageChef.DiscImages/Nero.cs index 0458ffd8..bed6a42b 100644 --- a/DiscImageChef.DiscImages/Nero.cs +++ b/DiscImageChef.DiscImages/Nero.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Text; @@ -39,9 +40,13 @@ using DiscImageChef.Checksums; using DiscImageChef.CommonTypes; using DiscImageChef.Console; using DiscImageChef.Filters; +#pragma warning disable 414 +#pragma warning disable 169 namespace DiscImageChef.DiscImages { + [SuppressMessage("ReSharper", "NotAccessedField.Local")] + [SuppressMessage("ReSharper", "CollectionNeverQueried.Local")] public class Nero : ImagePlugin { #region Internal structures @@ -605,51 +610,51 @@ namespace DiscImageChef.DiscImages #region Internal consts // "NERO" - public const uint NeroV1FooterId = 0x4E45524F; + const uint NERO_FOOTER_V1 = 0x4E45524F; // "NER5" - public const uint NeroV2FooterId = 0x4E455235; + const uint NERO_FOOTER_V2 = 0x4E455235; // "CUES" - public const uint NeroV1Cueid = 0x43554553; + const uint NERO_CUE_V1 = 0x43554553; // "CUEX" - public const uint NeroV2Cueid = 0x43554558; + const uint NERO_CUE_V2 = 0x43554558; // "ETNF" - public const uint NeroV1Taoid = 0x45544E46; + const uint NERO_TAO_V1 = 0x45544E46; // "ETN2" - public const uint NeroV2Taoid = 0x45544E32; + const uint NERO_TAO_V2 = 0x45544E32; // "DAOI" - public const uint NeroV1Daoid = 0x44414F49; + const uint NERO_DAO_V1 = 0x44414F49; // "DAOX" - public const uint NeroV2Daoid = 0x44414F58; + const uint NERO_DAO_V2 = 0x44414F58; // "CDTX" - public const uint NeroCdTextId = 0x43445458; + const uint NERO_CDTEXT = 0x43445458; // "SINF" - public const uint NeroSessionId = 0x53494E46; + const uint NERO_SESSION = 0x53494E46; // "MTYP" - public const uint NeroDiskTypeId = 0x4D545950; + const uint NERO_DISC_TYPE = 0x4D545950; // "DINF" - public const uint NeroDiscInfoId = 0x44494E46; + const uint NERO_DISC_INFO = 0x44494E46; // "TOCT" - public const uint NeroTocid = 0x544F4354; + const uint NERO_TOC = 0x544F4354; // "RELO" - public const uint NeroReloId = 0x52454C4F; + const uint NERO_RELOCATION = 0x52454C4F; // "END!" - public const uint NeroEndId = 0x454E4421; + const uint NERO_END = 0x454E4421; - public enum DaoMode : ushort + enum DaoMode : ushort { Data = 0x0000, DataM2F1 = 0x0002, @@ -663,7 +668,8 @@ namespace DiscImageChef.DiscImages } [Flags] - public enum NeroMediaTypes : uint + [SuppressMessage("ReSharper", "InconsistentNaming")] + enum NeroMediaTypes : uint { /// /// No media @@ -833,7 +839,7 @@ namespace DiscImageChef.DiscImages #endregion #region Internal variables - Filter imageFilter; + Filter neroFilter; Stream imageStream; bool imageNewFormat; Dictionary neroSessions; @@ -864,9 +870,11 @@ namespace DiscImageChef.DiscImages Name = "Nero Burning ROM image"; PluginUuid = new Guid("D160F9FF-5941-43FC-B037-AD81DD141F05"); imageNewFormat = false; - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List() + }; neroSessions = new Dictionary(); neroTracks = new Dictionary(); offsetmap = new Dictionary(); @@ -880,12 +888,11 @@ namespace DiscImageChef.DiscImages imageStream = imageFilter.GetDataForkStream(); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - byte[] buffer; NeroV1Footer footerV1 = new NeroV1Footer(); NeroV2Footer footerV2 = new NeroV2Footer(); imageStream.Seek(-8, SeekOrigin.End); - buffer = new byte[8]; + byte[] buffer = new byte[8]; imageStream.Read(buffer, 0, 8); footerV1.ChunkId = BigEndianBitConverter.ToUInt32(buffer, 0); footerV1.FirstChunkOffset = BigEndianBitConverter.ToUInt32(buffer, 4); @@ -902,10 +909,9 @@ namespace DiscImageChef.DiscImages DicConsole.DebugWriteLine("Nero plugin", "footerV2.ChunkID = 0x{0:X8}", footerV2.ChunkId); DicConsole.DebugWriteLine("Nero plugin", "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset); - if(footerV2.ChunkId == NeroV2FooterId && footerV2.FirstChunkOffset < (ulong)imageStream.Length) return true; - if(footerV1.ChunkId == NeroV1FooterId && footerV1.FirstChunkOffset < (ulong)imageStream.Length) return true; + if(footerV2.ChunkId == NERO_FOOTER_V2 && footerV2.FirstChunkOffset < (ulong)imageStream.Length) return true; - return false; + return footerV1.ChunkId == NERO_FOOTER_V1 && footerV1.FirstChunkOffset < (ulong)imageStream.Length; } public override bool OpenImage(Filter imageFilter) @@ -915,12 +921,11 @@ namespace DiscImageChef.DiscImages imageStream = imageFilter.GetDataForkStream(); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - byte[] buffer; NeroV1Footer footerV1 = new NeroV1Footer(); NeroV2Footer footerV2 = new NeroV2Footer(); imageStream.Seek(-8, SeekOrigin.End); - buffer = new byte[8]; + byte[] buffer = new byte[8]; imageStream.Read(buffer, 0, 8); footerV1.ChunkId = BigEndianBitConverter.ToUInt32(buffer, 0); footerV1.FirstChunkOffset = BigEndianBitConverter.ToUInt32(buffer, 4); @@ -941,9 +946,9 @@ namespace DiscImageChef.DiscImages .GetString(BigEndianBitConverter.GetBytes(footerV2.ChunkId))); DicConsole.DebugWriteLine("Nero plugin", "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset); - if(footerV1.ChunkId == NeroV1FooterId && footerV1.FirstChunkOffset < (ulong)imageStream.Length) + if(footerV1.ChunkId == NERO_FOOTER_V1 && footerV1.FirstChunkOffset < (ulong)imageStream.Length) imageNewFormat = false; - else if(footerV2.ChunkId == NeroV2FooterId && footerV2.FirstChunkOffset < (ulong)imageStream.Length) + else if(footerV2.ChunkId == NERO_FOOTER_V2 && footerV2.FirstChunkOffset < (ulong)imageStream.Length) imageNewFormat = true; else { @@ -982,15 +987,17 @@ namespace DiscImageChef.DiscImages switch(chunkId) { - case NeroV1Cueid: + case NERO_CUE_V1: { DicConsole.DebugWriteLine("Nero plugin", "Found \"CUES\" chunk, parsing {0} bytes", chunkLength); - neroCuesheetV1 = new NeroV1Cuesheet(); - neroCuesheetV1.ChunkId = chunkId; - neroCuesheetV1.ChunkSize = chunkLength; - neroCuesheetV1.Entries = new List(); + neroCuesheetV1 = new NeroV1Cuesheet + { + ChunkId = chunkId, + ChunkSize = chunkLength, + Entries = new List() + }; byte[] tmpbuffer = new byte[8]; for(int i = 0; i < neroCuesheetV1.ChunkSize; i += 8) @@ -1026,15 +1033,17 @@ namespace DiscImageChef.DiscImages break; } - case NeroV2Cueid: + case NERO_CUE_V2: { DicConsole.DebugWriteLine("Nero plugin", "Found \"CUEX\" chunk, parsing {0} bytes", chunkLength); - neroCuesheetV2 = new NeroV2Cuesheet(); - neroCuesheetV2.ChunkId = chunkId; - neroCuesheetV2.ChunkSize = chunkLength; - neroCuesheetV2.Entries = new List(); + neroCuesheetV2 = new NeroV2Cuesheet + { + ChunkId = chunkId, + ChunkSize = chunkLength, + Entries = new List() + }; byte[] tmpbuffer = new byte[8]; for(int i = 0; i < neroCuesheetV2.ChunkSize; i += 8) @@ -1064,14 +1073,12 @@ namespace DiscImageChef.DiscImages break; } - case NeroV1Daoid: + case NERO_DAO_V1: { DicConsole.DebugWriteLine("Nero plugin", "Found \"DAOI\" chunk, parsing {0} bytes", chunkLength); - neroDaov1 = new NeroV1Dao(); - neroDaov1.ChunkId = chunkId; - neroDaov1.ChunkSizeBe = chunkLength; + neroDaov1 = new NeroV1Dao {ChunkId = chunkId, ChunkSizeBe = chunkLength}; byte[] tmpbuffer = new byte[22]; imageStream.Read(tmpbuffer, 0, 22); @@ -1137,18 +1144,20 @@ namespace DiscImageChef.DiscImages trackIsrCs.Add(currenttrack, entry.Isrc); if(currenttrack == 1) entry.Index0 = entry.Index1; - NeroTrack neroTrack = new NeroTrack(); - neroTrack.EndOfTrack = entry.EndOfTrack; - neroTrack.Isrc = entry.Isrc; - neroTrack.Length = entry.EndOfTrack - entry.Index0; - neroTrack.Mode = entry.Mode; - neroTrack.Offset = entry.Index0; + NeroTrack neroTrack = new NeroTrack + { + EndOfTrack = entry.EndOfTrack, + Isrc = entry.Isrc, + Length = entry.EndOfTrack - entry.Index0, + Mode = entry.Mode, + Offset = entry.Index0, + SectorSize = entry.SectorSize, + StartLba = ImageInfo.Sectors, + Index0 = entry.Index0, + Index1 = entry.Index1, + Sequence = currenttrack + }; neroTrack.Sectors = neroTrack.Length / entry.SectorSize; - neroTrack.SectorSize = entry.SectorSize; - neroTrack.StartLba = ImageInfo.Sectors; - neroTrack.Index0 = entry.Index0; - neroTrack.Index1 = entry.Index1; - neroTrack.Sequence = currenttrack; neroTracks.Add(currenttrack, neroTrack); ImageInfo.Sectors += neroTrack.Sectors; @@ -1158,14 +1167,12 @@ namespace DiscImageChef.DiscImages break; } - case NeroV2Daoid: + case NERO_DAO_V2: { DicConsole.DebugWriteLine("Nero plugin", "Found \"DAOX\" chunk, parsing {0} bytes", chunkLength); - neroDaov2 = new NeroV2Dao(); - neroDaov2.ChunkId = chunkId; - neroDaov2.ChunkSizeBe = chunkLength; + neroDaov2 = new NeroV2Dao {ChunkId = chunkId, ChunkSizeBe = chunkLength}; byte[] tmpbuffer = new byte[22]; imageStream.Read(tmpbuffer, 0, 22); @@ -1232,18 +1239,20 @@ namespace DiscImageChef.DiscImages if(currenttrack == 1) entry.Index0 = entry.Index1; - NeroTrack neroTrack = new NeroTrack(); - neroTrack.EndOfTrack = entry.EndOfTrack; - neroTrack.Isrc = entry.Isrc; - neroTrack.Length = entry.EndOfTrack - entry.Index0; - neroTrack.Mode = entry.Mode; - neroTrack.Offset = entry.Index0; + NeroTrack neroTrack = new NeroTrack + { + EndOfTrack = entry.EndOfTrack, + Isrc = entry.Isrc, + Length = entry.EndOfTrack - entry.Index0, + Mode = entry.Mode, + Offset = entry.Index0, + SectorSize = entry.SectorSize, + StartLba = ImageInfo.Sectors, + Index0 = entry.Index0, + Index1 = entry.Index1, + Sequence = currenttrack + }; neroTrack.Sectors = neroTrack.Length / entry.SectorSize; - neroTrack.SectorSize = entry.SectorSize; - neroTrack.StartLba = ImageInfo.Sectors; - neroTrack.Index0 = entry.Index0; - neroTrack.Index1 = entry.Index1; - neroTrack.Sequence = currenttrack; neroTracks.Add(currenttrack, neroTrack); ImageInfo.Sectors += neroTrack.Sectors; @@ -1253,15 +1262,17 @@ namespace DiscImageChef.DiscImages break; } - case NeroCdTextId: + case NERO_CDTEXT: { DicConsole.DebugWriteLine("Nero plugin", "Found \"CDTX\" chunk, parsing {0} bytes", chunkLength); - neroCdtxt = new NeroCdText(); - neroCdtxt.ChunkId = chunkId; - neroCdtxt.ChunkSize = chunkLength; - neroCdtxt.Packs = new List(); + neroCdtxt = new NeroCdText + { + ChunkId = chunkId, + ChunkSize = chunkLength, + Packs = new List() + }; byte[] tmpbuffer = new byte[18]; for(int i = 0; i < neroCdtxt.ChunkSize; i += 18) @@ -1296,15 +1307,17 @@ namespace DiscImageChef.DiscImages break; } - case NeroV1Taoid: + case NERO_TAO_V1: { DicConsole.DebugWriteLine("Nero plugin", "Found \"ETNF\" chunk, parsing {0} bytes", chunkLength); - neroTaov1 = new NeroV1Tao(); - neroTaov1.ChunkId = chunkId; - neroTaov1.ChunkSize = chunkLength; - neroTaov1.Tracks = new List(); + neroTaov1 = new NeroV1Tao + { + ChunkId = chunkId, + ChunkSize = chunkLength, + Tracks = new List() + }; byte[] tmpbuffer = new byte[20]; for(int i = 0; i < neroTaov1.ChunkSize; i += 20) @@ -1335,19 +1348,21 @@ namespace DiscImageChef.DiscImages if(NeroTrackModeToBytesPerSector((DaoMode)entry.Mode) > ImageInfo.SectorSize) ImageInfo.SectorSize = NeroTrackModeToBytesPerSector((DaoMode)entry.Mode); - NeroTrack neroTrack = new NeroTrack(); - neroTrack.EndOfTrack = entry.Offset + entry.Length; - neroTrack.Isrc = new byte[12]; - neroTrack.Length = entry.Length; - neroTrack.Mode = entry.Mode; - neroTrack.Offset = entry.Offset; + NeroTrack neroTrack = new NeroTrack + { + EndOfTrack = entry.Offset + entry.Length, + Isrc = new byte[12], + Length = entry.Length, + Mode = entry.Mode, + Offset = entry.Offset, + SectorSize = NeroTrackModeToBytesPerSector((DaoMode)entry.Mode), + StartLba = ImageInfo.Sectors, + Index0 = entry.Offset, + Index1 = entry.Offset, + Sequence = currenttrack + }; neroTrack.Sectors = neroTrack.Length / NeroTrackModeToBytesPerSector((DaoMode)entry.Mode); - neroTrack.SectorSize = NeroTrackModeToBytesPerSector((DaoMode)entry.Mode); - neroTrack.StartLba = ImageInfo.Sectors; - neroTrack.Index0 = entry.Offset; - neroTrack.Index1 = entry.Offset; - neroTrack.Sequence = currenttrack; neroTracks.Add(currenttrack, neroTrack); ImageInfo.Sectors += neroTrack.Sectors; @@ -1357,15 +1372,17 @@ namespace DiscImageChef.DiscImages break; } - case NeroV2Taoid: + case NERO_TAO_V2: { DicConsole.DebugWriteLine("Nero plugin", "Found \"ETN2\" chunk, parsing {0} bytes", chunkLength); - neroTaov2 = new NeroV2Tao(); - neroTaov2.ChunkId = chunkId; - neroTaov2.ChunkSize = chunkLength; - neroTaov2.Tracks = new List(); + neroTaov2 = new NeroV2Tao + { + ChunkId = chunkId, + ChunkSize = chunkLength, + Tracks = new List() + }; byte[] tmpbuffer = new byte[32]; for(int i = 0; i < neroTaov2.ChunkSize; i += 32) @@ -1399,12 +1416,14 @@ namespace DiscImageChef.DiscImages if(NeroTrackModeToBytesPerSector((DaoMode)entry.Mode) > ImageInfo.SectorSize) ImageInfo.SectorSize = NeroTrackModeToBytesPerSector((DaoMode)entry.Mode); - NeroTrack neroTrack = new NeroTrack(); - neroTrack.EndOfTrack = entry.Offset + entry.Length; - neroTrack.Isrc = new byte[12]; - neroTrack.Length = entry.Length; - neroTrack.Mode = entry.Mode; - neroTrack.Offset = entry.Offset; + NeroTrack neroTrack = new NeroTrack + { + EndOfTrack = entry.Offset + entry.Length, + Isrc = new byte[12], + Length = entry.Length, + Mode = entry.Mode, + Offset = entry.Offset + }; neroTrack.Sectors = neroTrack.Length / NeroTrackModeToBytesPerSector((DaoMode)entry.Mode); neroTrack.SectorSize = NeroTrackModeToBytesPerSector((DaoMode)entry.Mode); @@ -1421,7 +1440,7 @@ namespace DiscImageChef.DiscImages break; } - case NeroSessionId: + case NERO_SESSION: { DicConsole.DebugWriteLine("Nero plugin", "Found \"SINF\" chunk, parsing {0} bytes", chunkLength); @@ -1438,15 +1457,12 @@ namespace DiscImageChef.DiscImages currentsession++; break; } - case NeroDiskTypeId: + case NERO_DISC_TYPE: { DicConsole.DebugWriteLine("Nero plugin", "Found \"MTYP\" chunk, parsing {0} bytes", chunkLength); - neroMediaTyp = new NeroMediaType(); - - neroMediaTyp.ChunkId = chunkId; - neroMediaTyp.ChunkSize = chunkLength; + neroMediaTyp = new NeroMediaType {ChunkId = chunkId, ChunkSize = chunkLength}; byte[] tmpbuffer = new byte[4]; imageStream.Read(tmpbuffer, 0, 4); @@ -1459,14 +1475,12 @@ namespace DiscImageChef.DiscImages break; } - case NeroDiscInfoId: + case NERO_DISC_INFO: { DicConsole.DebugWriteLine("Nero plugin", "Found \"DINF\" chunk, parsing {0} bytes", chunkLength); - neroDiscInfo = new NeroDiscInformation(); - neroDiscInfo.ChunkId = chunkId; - neroDiscInfo.ChunkSize = chunkLength; + neroDiscInfo = new NeroDiscInformation {ChunkId = chunkId, ChunkSize = chunkLength}; byte[] tmpbuffer = new byte[4]; imageStream.Read(tmpbuffer, 0, 4); neroDiscInfo.Unknown = BigEndianBitConverter.ToUInt32(tmpbuffer, 0); @@ -1476,14 +1490,12 @@ namespace DiscImageChef.DiscImages break; } - case NeroReloId: + case NERO_RELOCATION: { DicConsole.DebugWriteLine("Nero plugin", "Found \"RELO\" chunk, parsing {0} bytes", chunkLength); - neroRelo = new NeroReloChunk(); - neroRelo.ChunkId = chunkId; - neroRelo.ChunkSize = chunkLength; + neroRelo = new NeroReloChunk {ChunkId = chunkId, ChunkSize = chunkLength}; byte[] tmpbuffer = new byte[4]; imageStream.Read(tmpbuffer, 0, 4); neroRelo.Unknown = BigEndianBitConverter.ToUInt32(tmpbuffer, 0); @@ -1493,14 +1505,12 @@ namespace DiscImageChef.DiscImages break; } - case NeroTocid: + case NERO_TOC: { DicConsole.DebugWriteLine("Nero plugin", "Found \"TOCT\" chunk, parsing {0} bytes", chunkLength); - neroToc = new NeroTocChunk(); - neroToc.ChunkId = chunkId; - neroToc.ChunkSize = chunkLength; + neroToc = new NeroTocChunk {ChunkId = chunkId, ChunkSize = chunkLength}; byte[] tmpbuffer = new byte[2]; imageStream.Read(tmpbuffer, 0, 2); neroToc.Unknown = BigEndianBitConverter.ToUInt16(tmpbuffer, 0); @@ -1510,7 +1520,7 @@ namespace DiscImageChef.DiscImages break; } - case NeroEndId: + case NERO_END: { DicConsole.DebugWriteLine("Nero plugin", "Found \"END!\" chunk, finishing parse"); parsing = false; @@ -1565,16 +1575,14 @@ namespace DiscImageChef.DiscImages DicConsole.DebugWriteLine("Nero plugin", "Building offset, track and session maps"); currentsession = 1; - uint currentsessionmaxtrack; - neroSessions.TryGetValue(1, out currentsessionmaxtrack); + neroSessions.TryGetValue(1, out uint currentsessionmaxtrack); uint currentsessioncurrenttrack = 1; Session currentsessionstruct = new Session(); ulong partitionSequence = 0; ulong partitionStartByte = 0; for(uint i = 1; i <= neroTracks.Count; i++) { - NeroTrack neroTrack; - if(!neroTracks.TryGetValue(i, out neroTrack)) continue; + if(!neroTracks.TryGetValue(i, out NeroTrack neroTrack)) continue; DicConsole.DebugWriteLine("Nero plugin", "\tcurrentsession = {0}", currentsession); DicConsole.DebugWriteLine("Nero plugin", "\tcurrentsessionmaxtrack = {0}", @@ -1582,92 +1590,94 @@ namespace DiscImageChef.DiscImages DicConsole.DebugWriteLine("Nero plugin", "\tcurrentsessioncurrenttrack = {0}", currentsessioncurrenttrack); - Track _track = new Track(); + Track track = new Track(); if(neroTrack.Sequence == 1) neroTrack.Index0 = neroTrack.Index1; - _track.Indexes = new Dictionary(); + track.Indexes = new Dictionary(); 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); - _track.TrackEndSector = neroTrack.Length / neroTrack.SectorSize + neroTrack.StartLba - 1; - _track.TrackPregap = (neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize; - _track.TrackSequence = neroTrack.Sequence; - _track.TrackSession = currentsession; - _track.TrackStartSector = neroTrack.StartLba; - _track.TrackType = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode); - _track.TrackFile = imageFilter.GetFilename(); - _track.TrackFilter = imageFilter; - _track.TrackFileOffset = neroTrack.Offset; - _track.TrackFileType = "BINARY"; - _track.TrackSubchannelType = TrackSubchannelType.None; + track.Indexes.Add(0, neroTrack.Index0 / neroTrack.SectorSize); + track.Indexes.Add(1, neroTrack.Index1 / neroTrack.SectorSize); + track.TrackDescription = StringHandlers.CToString(neroTrack.Isrc); + track.TrackEndSector = neroTrack.Length / neroTrack.SectorSize + neroTrack.StartLba - 1; + track.TrackPregap = (neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize; + track.TrackSequence = neroTrack.Sequence; + track.TrackSession = currentsession; + track.TrackStartSector = neroTrack.StartLba; + track.TrackType = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode); + track.TrackFile = imageFilter.GetFilename(); + track.TrackFilter = imageFilter; + track.TrackFileOffset = neroTrack.Offset; + track.TrackFileType = "BINARY"; + track.TrackSubchannelType = TrackSubchannelType.None; switch((DaoMode)neroTrack.Mode) { case DaoMode.Audio: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2352; + track.TrackBytesPerSector = 2352; + track.TrackRawBytesPerSector = 2352; break; case DaoMode.AudioSub: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2448; - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + track.TrackBytesPerSector = 2352; + track.TrackRawBytesPerSector = 2448; + track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; break; case DaoMode.Data: case DaoMode.DataM2F1: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2048; + track.TrackBytesPerSector = 2048; + track.TrackRawBytesPerSector = 2048; break; case DaoMode.DataM2F2: - _track.TrackBytesPerSector = 2336; - _track.TrackRawBytesPerSector = 2336; + track.TrackBytesPerSector = 2336; + track.TrackRawBytesPerSector = 2336; break; case DaoMode.DataM2Raw: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2352; + track.TrackBytesPerSector = 2352; + track.TrackRawBytesPerSector = 2352; break; case DaoMode.DataM2RawSub: - _track.TrackBytesPerSector = 2352; - _track.TrackRawBytesPerSector = 2448; - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + track.TrackBytesPerSector = 2352; + track.TrackRawBytesPerSector = 2448; + track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; break; case DaoMode.DataRaw: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2352; + track.TrackBytesPerSector = 2048; + track.TrackRawBytesPerSector = 2352; break; case DaoMode.DataRawSub: - _track.TrackBytesPerSector = 2048; - _track.TrackRawBytesPerSector = 2448; - _track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; + track.TrackBytesPerSector = 2048; + track.TrackRawBytesPerSector = 2448; + track.TrackSubchannelType = TrackSubchannelType.RawInterleaved; break; } - if(_track.TrackSubchannelType == TrackSubchannelType.RawInterleaved) + if(track.TrackSubchannelType == TrackSubchannelType.RawInterleaved) { - _track.TrackSubchannelFilter = imageFilter; - _track.TrackSubchannelFile = imageFilter.GetFilename(); - _track.TrackSubchannelOffset = neroTrack.Offset; + track.TrackSubchannelFilter = imageFilter; + track.TrackSubchannelFile = imageFilter.GetFilename(); + track.TrackSubchannelOffset = neroTrack.Offset; } - imageTracks.Add(_track); + imageTracks.Add(track); DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackDescription = {0}", - _track.TrackDescription); + track.TrackDescription); DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackEndSector = {0}", - _track.TrackEndSector); - DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackPregap = {0}", _track.TrackPregap); + track.TrackEndSector); + DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackPregap = {0}", track.TrackPregap); DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackSequence = {0}", - _track.TrackSequence); - DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackSession = {0}", _track.TrackSession); + track.TrackSequence); + DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackSession = {0}", track.TrackSession); DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackStartSector = {0}", - _track.TrackStartSector); - DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackType = {0}", _track.TrackType); + track.TrackStartSector); + DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackType = {0}", track.TrackType); if(currentsessioncurrenttrack == 1) { - currentsessionstruct = new Session(); - currentsessionstruct.SessionSequence = currentsession; - currentsessionstruct.StartSector = _track.TrackStartSector; - currentsessionstruct.StartTrack = _track.TrackSequence; + currentsessionstruct = new Session + { + SessionSequence = currentsession, + StartSector = track.TrackStartSector, + StartTrack = track.TrackSequence + }; } currentsessioncurrenttrack++; if(currentsessioncurrenttrack > currentsessionmaxtrack) @@ -1675,8 +1685,8 @@ namespace DiscImageChef.DiscImages currentsession++; neroSessions.TryGetValue(currentsession, out currentsessionmaxtrack); currentsessioncurrenttrack = 1; - currentsessionstruct.EndTrack = _track.TrackSequence; - currentsessionstruct.EndSector = _track.TrackEndSector; + currentsessionstruct.EndTrack = track.TrackSequence; + currentsessionstruct.EndSector = track.TrackEndSector; imageSessions.Add(currentsessionstruct); } @@ -1684,16 +1694,14 @@ namespace DiscImageChef.DiscImages { neroSessions.TryGetValue(currentsession, out currentsessionmaxtrack); currentsessioncurrenttrack = 1; - currentsessionstruct.EndTrack = _track.TrackSequence; - currentsessionstruct.EndSector = _track.TrackEndSector; + currentsessionstruct.EndTrack = track.TrackSequence; + currentsessionstruct.EndSector = track.TrackEndSector; imageSessions.Add(currentsessionstruct); } - offsetmap.Add(_track.TrackSequence, _track.TrackStartSector); - DicConsole.DebugWriteLine("Nero plugin", "\t\t Offset[{0}]: {1}", _track.TrackSequence, - _track.TrackStartSector); - - Partition partition; + offsetmap.Add(track.TrackSequence, track.TrackStartSector); + DicConsole.DebugWriteLine("Nero plugin", "\t\t Offset[{0}]: {1}", track.TrackSequence, + track.TrackStartSector); /*if(_neroTrack.Index0 < _neroTrack.Index1) { @@ -1710,22 +1718,23 @@ namespace DiscImageChef.DiscImages PartitionSequence++; }*/ - partition = new Partition(); - partition.Description = $"Track {_track.TrackSequence} Index 1"; - partition.Size = neroTrack.EndOfTrack - neroTrack.Index1; - partition.Name = StringHandlers.CToString(neroTrack.Isrc); + Partition partition = new Partition + { + Description = $"Track {track.TrackSequence} Index 1", + Size = neroTrack.EndOfTrack - neroTrack.Index1, + Name = StringHandlers.CToString(neroTrack.Isrc), + Sequence = partitionSequence, + Offset = partitionStartByte, + Start = neroTrack.StartLba + (neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize, + Type = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode).ToString() + }; partition.Length = partition.Size / neroTrack.SectorSize; - partition.Sequence = partitionSequence; - partition.Offset = partitionStartByte; - partition.Start = neroTrack.StartLba + - (neroTrack.Index1 - neroTrack.Index0) / neroTrack.SectorSize; - partition.Type = NeroTrackModeToTrackType((DaoMode)neroTrack.Mode).ToString(); imagePartitions.Add(partition); partitionSequence++; partitionStartByte += partition.Size; } - this.imageFilter = imageFilter; + neroFilter = imageFilter; if(ImageInfo.MediaType == MediaType.Unknown || ImageInfo.MediaType == MediaType.CD) { @@ -1836,34 +1845,32 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectors(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in imageTracks where _track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in imageTracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector select kvp) return ReadSectors(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag) { - foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in imageTracks where _track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in imageTracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector select kvp) return ReadSectorsTag(sectorAddress - kvp.Value, length, kvp.Key, tag); throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } public override byte[] ReadSectors(ulong sectorAddress, uint length, uint track) { - NeroTrack _track; - - if(!neroTracks.TryGetValue(track, out _track)) + if(!neroTracks.TryGetValue(track, out NeroTrack dicTrack)) throw new ArgumentOutOfRangeException(nameof(track), "Track not found"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length}) than present in track ({_track.Sectors}), won't cross tracks"); + $"Requested more sectors ({length}) than present in track ({dicTrack.Sectors}), won't cross tracks"); uint sectorOffset; uint sectorSize; uint sectorSkip; - switch((DaoMode)_track.Mode) + switch((DaoMode)dicTrack.Mode) { case DaoMode.Data: case DaoMode.DataM2F1: @@ -1928,18 +1935,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = imageFilter.GetDataForkStream(); + imageStream = neroFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -1949,14 +1955,12 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag) { - NeroTrack _track; - - if(!neroTracks.TryGetValue(track, out _track)) + if(!neroTracks.TryGetValue(track, out NeroTrack dicTrack)) throw new ArgumentOutOfRangeException(nameof(track), "Track not found"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length}) than present in track ({_track.Sectors}), won't cross tracks"); + $"Requested more sectors ({length}) than present in track ({dicTrack.Sectors}), won't cross tracks"); uint sectorOffset; uint sectorSize; @@ -1977,18 +1981,18 @@ namespace DiscImageChef.DiscImages byte[] flags = new byte[1]; flags[0] = 0x00; - if((DaoMode)_track.Mode != DaoMode.Audio && (DaoMode)_track.Mode != DaoMode.AudioSub) + if((DaoMode)dicTrack.Mode != DaoMode.Audio && (DaoMode)dicTrack.Mode != DaoMode.AudioSub) flags[0] += 0x40; return flags; } - case SectorTagType.CdTrackIsrc: return _track.Isrc; + case SectorTagType.CdTrackIsrc: return dicTrack.Isrc; case SectorTagType.CdTrackText: throw new FeatureSupportedButNotImplementedImageException("Feature not yet implemented"); default: throw new ArgumentException("Unsupported tag requested", nameof(tag)); } - switch((DaoMode)_track.Mode) + switch((DaoMode)dicTrack.Mode) { case DaoMode.Data: case DaoMode.DataM2F1: throw new ArgumentException("No tags in image for requested track", nameof(tag)); @@ -2155,18 +2159,17 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = imageFilter.GetDataForkStream(); + imageStream = neroFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); } @@ -2186,27 +2189,25 @@ namespace DiscImageChef.DiscImages public override byte[] ReadSectorsLong(ulong sectorAddress, uint length) { - foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from _track in imageTracks where _track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < _track.TrackEndSector - _track.TrackStartSector select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); + foreach(KeyValuePair kvp in from kvp in offsetmap where sectorAddress >= kvp.Value from track in imageTracks where track.TrackSequence == kvp.Key where sectorAddress - kvp.Value < track.TrackEndSector - track.TrackStartSector select kvp) return ReadSectorsLong(sectorAddress - kvp.Value, length, kvp.Key); throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); } public override byte[] ReadSectorsLong(ulong sectorAddress, uint length, uint track) { - NeroTrack _track; - - if(!neroTracks.TryGetValue(track, out _track)) + if(!neroTracks.TryGetValue(track, out NeroTrack dicTrack)) throw new ArgumentOutOfRangeException(nameof(track), "Track not found"); - if(length > _track.Sectors) + if(length > dicTrack.Sectors) throw new ArgumentOutOfRangeException(nameof(length), - $"Requested more sectors ({length}) than present in track ({_track.Sectors}), won't cross tracks"); + $"Requested more sectors ({length}) than present in track ({dicTrack.Sectors}), won't cross tracks"); uint sectorOffset; uint sectorSize; uint sectorSkip; - switch((DaoMode)_track.Mode) + switch((DaoMode)dicTrack.Mode) { case DaoMode.Data: case DaoMode.DataM2F1: @@ -2246,20 +2247,19 @@ namespace DiscImageChef.DiscImages byte[] buffer = new byte[sectorSize * length]; - imageStream = imageFilter.GetDataForkStream(); + imageStream = neroFilter.GetDataForkStream(); BinaryReader br = new BinaryReader(imageStream); br.BaseStream - .Seek((long)_track.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), + .Seek((long)dicTrack.Offset + (long)(sectorAddress * (sectorOffset + sectorSize + sectorSkip)), SeekOrigin.Begin); if(sectorOffset == 0 && sectorSkip == 0) buffer = br.ReadBytes((int)(sectorSize * length)); else for(int i = 0; i < length; i++) { - byte[] sector; br.BaseStream.Seek(sectorOffset, SeekOrigin.Current); - sector = br.ReadBytes((int)sectorSize); + byte[] sector = br.ReadBytes((int)sectorSize); br.BaseStream.Seek(sectorSkip, SeekOrigin.Current); Array.Copy(sector, 0, buffer, i * sectorSize, sectorSize); @@ -2325,7 +2325,7 @@ namespace DiscImageChef.DiscImages public override List GetSessionTracks(ushort session) { - return imageTracks.Where(_track => _track.TrackSession == session).ToList(); + return imageTracks.Where(track => track.TrackSession == session).ToList(); } public override List GetSessions() @@ -2371,9 +2371,8 @@ namespace DiscImageChef.DiscImages } if(unknownLbas.Count > 0) return null; - if(failingLbas.Count > 0) return false; - return true; + return failingLbas.Count <= 0; } public override bool? VerifySectors(ulong sectorAddress, uint length, uint track, out List failingLbas, diff --git a/DiscImageChef.DiscImages/Parallels.cs b/DiscImageChef.DiscImages/Parallels.cs index 94fbf2d5..6c675030 100644 --- a/DiscImageChef.DiscImages/Parallels.cs +++ b/DiscImageChef.DiscImages/Parallels.cs @@ -122,33 +122,35 @@ namespace DiscImageChef.DiscImages Dictionary sectorCache; const uint MAX_CACHE_SIZE = 16777216; - uint maxCachedSectors = MAX_CACHE_SIZE / 512; + const uint MAX_CACHED_SECTORS = MAX_CACHE_SIZE / 512; public Parallels() { Name = "Parallels disk image"; PluginUuid = new Guid("E314DE35-C103-48A3-AD36-990F68523C46"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = "2"; - ImageInfo.ImageApplication = "Parallels"; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = "2", + ImageApplication = "Parallels", + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -237,9 +239,7 @@ namespace DiscImageChef.DiscImages if(empty) return new byte[512]; - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; ulong index = sectorAddress / pHdr.cluster_size; ulong secOff = sectorAddress % pHdr.cluster_size; @@ -258,7 +258,7 @@ namespace DiscImageChef.DiscImages sector = new byte[512]; Array.Copy(cluster, (int)(secOff * 512), sector, 0, 512); - if(sectorCache.Count > maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count > MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); diff --git a/DiscImageChef.DiscImages/PartClone.cs b/DiscImageChef.DiscImages/PartClone.cs index b8a8828b..903121c0 100644 --- a/DiscImageChef.DiscImages/PartClone.cs +++ b/DiscImageChef.DiscImages/PartClone.cs @@ -107,7 +107,7 @@ namespace DiscImageChef.DiscImages Dictionary sectorCache; const uint MAX_CACHE_SIZE = 16777216; - uint maxCachedSectors = MAX_CACHE_SIZE / 512; + const uint MAX_CACHED_SECTORS = MAX_CACHE_SIZE / 512; ExtentsULong extents; Dictionary extentsOff; @@ -116,26 +116,28 @@ namespace DiscImageChef.DiscImages { Name = "PartClone disk image"; PluginUuid = new Guid("AB1D7518-B548-4099-A4E2-C29C53DDE0C3"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageApplication = "PartClone"; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageApplication = "PartClone", + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -224,7 +226,7 @@ namespace DiscImageChef.DiscImages else { extents.Add(extentStart, i); - extentsOff.TryGetValue(extentStart, out ulong foo); + extentsOff.TryGetValue(extentStart, out _); } if(next && current) blockOff++; @@ -266,9 +268,7 @@ namespace DiscImageChef.DiscImages if(byteMap[sectorAddress] == 0) return new byte[pHdr.blockSize]; - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; long imageOff = dataOff + (long)(BlockOffset(sectorAddress) * (pHdr.blockSize + CRC_SIZE)); @@ -276,7 +276,7 @@ namespace DiscImageChef.DiscImages imageStream.Seek(imageOff, SeekOrigin.Begin); imageStream.Read(sector, 0, (int)pHdr.blockSize); - if(sectorCache.Count > maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count > MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); diff --git a/DiscImageChef.DiscImages/Partimage.cs b/DiscImageChef.DiscImages/Partimage.cs index 1809d072..d7d962fd 100644 --- a/DiscImageChef.DiscImages/Partimage.cs +++ b/DiscImageChef.DiscImages/Partimage.cs @@ -39,6 +39,7 @@ using DiscImageChef.CommonTypes; using DiscImageChef.Console; using DiscImageChef.Filters; using Extents; +#pragma warning disable 649 namespace DiscImageChef.DiscImages { @@ -253,7 +254,7 @@ namespace DiscImageChef.DiscImages Dictionary sectorCache; const uint MAX_CACHE_SIZE = 16777216; - uint maxCachedSectors = MAX_CACHE_SIZE / 512; + const uint MAX_CACHED_SECTORS = MAX_CACHE_SIZE / 512; ExtentsULong extents; Dictionary extentsOff; @@ -262,26 +263,28 @@ namespace DiscImageChef.DiscImages { Name = "Partimage disk image"; PluginUuid = new Guid("AAFDB99D-2B77-49EA-831C-C9BB58C68C95"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageApplication = "Partimage"; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageApplication = "Partimage", + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -570,9 +573,7 @@ namespace DiscImageChef.DiscImages if((bitmap[sectorAddress / 8] & (1 << (int)(sectorAddress % 8))) == 0) return new byte[ImageInfo.SectorSize]; - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; ulong blockOff = BlockOffset(sectorAddress); @@ -589,7 +590,7 @@ namespace DiscImageChef.DiscImages imageStream.Seek(imageOff, SeekOrigin.Begin); imageStream.Read(sector, 0, (int)ImageInfo.SectorSize); - if(sectorCache.Count > maxCachedSectors) + if(sectorCache.Count > MAX_CACHED_SECTORS) { System.Console.WriteLine("Cache cleared"); sectorCache.Clear(); diff --git a/DiscImageChef.DiscImages/QCOW.cs b/DiscImageChef.DiscImages/QCOW.cs index ef1d6d58..569c67d6 100644 --- a/DiscImageChef.DiscImages/QCOW.cs +++ b/DiscImageChef.DiscImages/QCOW.cs @@ -137,27 +137,29 @@ namespace DiscImageChef.DiscImages { Name = "QEMU Copy-On-Write disk image"; PluginUuid = new Guid("A5C35765-9FE2-469D-BBBF-ACDEBDB7B954"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = "1"; - ImageInfo.ImageApplication = "QEMU"; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = "1", + ImageApplication = "QEMU", + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -279,8 +281,7 @@ namespace DiscImageChef.DiscImages clusterCache = new Dictionary(); ImageInfo.ImageCreationTime = imageFilter.GetCreationTime(); - if(qHdr.mtime > 0) ImageInfo.ImageLastModificationTime = DateHandlers.UNIXUnsignedToDateTime(qHdr.mtime); - else ImageInfo.ImageLastModificationTime = imageFilter.GetLastWriteTime(); + ImageInfo.ImageLastModificationTime = qHdr.mtime > 0 ? DateHandlers.UNIXUnsignedToDateTime(qHdr.mtime) : imageFilter.GetLastWriteTime(); ImageInfo.ImageName = Path.GetFileNameWithoutExtension(imageFilter.GetFilename()); ImageInfo.Sectors = qHdr.size / 512; ImageInfo.SectorSize = 512; @@ -301,10 +302,8 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - // Check cache - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; ulong byteAddress = sectorAddress * 512; @@ -317,9 +316,7 @@ namespace DiscImageChef.DiscImages // TODO: Implement differential images if(l1Table[l1Off] == 0) return new byte[512]; - ulong[] l2Table; - - if(!l2TableCache.TryGetValue(l1Off, out l2Table)) + if(!l2TableCache.TryGetValue(l1Off, out ulong[] l2Table)) { l2Table = new ulong[l2Size]; imageStream.Seek((long)l1Table[l1Off], SeekOrigin.Begin); @@ -342,8 +339,7 @@ namespace DiscImageChef.DiscImages if(offset != 0) { - byte[] cluster; - if(!clusterCache.TryGetValue(offset, out cluster)) + if(!clusterCache.TryGetValue(offset, out byte[] cluster)) { if((offset & QCOW_COMPRESSED) == QCOW_COMPRESSED) { diff --git a/DiscImageChef.DiscImages/QCOW2.cs b/DiscImageChef.DiscImages/QCOW2.cs index 71630864..9fa8154a 100644 --- a/DiscImageChef.DiscImages/QCOW2.cs +++ b/DiscImageChef.DiscImages/QCOW2.cs @@ -157,7 +157,7 @@ namespace DiscImageChef.DiscImages Dictionary clusterCache; Dictionary l2TableCache; - int maxCachedSectors = MAX_CACHE_SIZE / 512; + const int MAX_CACHED_SECTORS = MAX_CACHE_SIZE / 512; int maxL2TableCache; int maxClusterCache; @@ -167,27 +167,29 @@ namespace DiscImageChef.DiscImages { Name = "QEMU Copy-On-Write disk image v2"; PluginUuid = new Guid("F20107CB-95B3-4398-894B-975261F1E8C5"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = "QEMU"; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = "QEMU", + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -347,10 +349,8 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - // Check cache - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; ulong byteAddress = sectorAddress * 512; @@ -363,9 +363,7 @@ namespace DiscImageChef.DiscImages // TODO: Implement differential images if(l1Table[l1Off] == 0) return new byte[512]; - ulong[] l2Table; - - if(!l2TableCache.TryGetValue(l1Off, out l2Table)) + if(!l2TableCache.TryGetValue(l1Off, out ulong[] l2Table)) { l2Table = new ulong[l2Size]; imageStream.Seek((long)(l1Table[l1Off] & QCOW_FLAGS_MASK), SeekOrigin.Begin); @@ -388,8 +386,7 @@ namespace DiscImageChef.DiscImages if((offset & QCOW_FLAGS_MASK) != 0) { - byte[] cluster; - if(!clusterCache.TryGetValue(offset, out cluster)) + if(!clusterCache.TryGetValue(offset, out byte[] cluster)) { if((offset & QCOW_COMPRESSED) == QCOW_COMPRESSED) { @@ -432,7 +429,7 @@ namespace DiscImageChef.DiscImages Array.Copy(cluster, (int)(byteAddress & sectorMask), sector, 0, 512); } - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); diff --git a/DiscImageChef.DiscImages/QED.cs b/DiscImageChef.DiscImages/QED.cs index 10133d90..c7ec1946 100644 --- a/DiscImageChef.DiscImages/QED.cs +++ b/DiscImageChef.DiscImages/QED.cs @@ -138,7 +138,7 @@ namespace DiscImageChef.DiscImages Dictionary clusterCache; Dictionary l2TableCache; - uint maxCachedSectors = MAX_CACHE_SIZE / 512; + const uint MAX_CACHED_SECTORS = MAX_CACHE_SIZE / 512; uint maxL2TableCache; uint maxClusterCache; @@ -309,10 +309,8 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - // Check cache - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; ulong byteAddress = sectorAddress * 512; @@ -325,9 +323,7 @@ namespace DiscImageChef.DiscImages // TODO: Implement differential images if(l1Table[l1Off] == 0) return new byte[512]; - ulong[] l2Table; - - if(!l2TableCache.TryGetValue(l1Off, out l2Table)) + if(!l2TableCache.TryGetValue(l1Off, out ulong[] l2Table)) { l2Table = new ulong[tableSize]; imageStream.Seek((long)l1Table[l1Off], SeekOrigin.Begin); @@ -350,8 +346,7 @@ namespace DiscImageChef.DiscImages if(offset != 0 && offset != 1) { - byte[] cluster; - if(!clusterCache.TryGetValue(offset, out cluster)) + if(!clusterCache.TryGetValue(offset, out byte[] cluster)) { cluster = new byte[qHdr.cluster_size]; imageStream.Seek((long)offset, SeekOrigin.Begin); @@ -365,7 +360,7 @@ namespace DiscImageChef.DiscImages Array.Copy(cluster, (int)(byteAddress & sectorMask), sector, 0, 512); } - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); diff --git a/DiscImageChef.DiscImages/RayDIM.cs b/DiscImageChef.DiscImages/RayDIM.cs index 7236b881..135f3ac8 100644 --- a/DiscImageChef.DiscImages/RayDIM.cs +++ b/DiscImageChef.DiscImages/RayDIM.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Runtime.InteropServices; using System.Text.RegularExpressions; @@ -54,6 +55,7 @@ namespace DiscImageChef.DiscImages public byte heads; } + [SuppressMessage("ReSharper", "InconsistentNaming")] enum RayDiskTypes : byte { Md2dd = 1, @@ -76,25 +78,27 @@ namespace DiscImageChef.DiscImages { Name = "Ray Arachelian's Disk IMage"; PluginUuid = new Guid("F541F4E7-C1E3-4A2D-B07F-D863E87AB961"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageApplication = "Ray Arachelian's Disk IMage"; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageApplication = "Ray Arachelian's Disk IMage", + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -107,10 +111,9 @@ namespace DiscImageChef.DiscImages stream.Seek(0, SeekOrigin.Begin); stream.Read(buffer, 0, buffer.Length); - RayHdr header; IntPtr ftrPtr = Marshal.AllocHGlobal(buffer.Length); Marshal.Copy(buffer, 0, ftrPtr, buffer.Length); - header = (RayHdr)Marshal.PtrToStructure(ftrPtr, typeof(RayHdr)); + RayHdr header = (RayHdr)Marshal.PtrToStructure(ftrPtr, typeof(RayHdr)); Marshal.FreeHGlobal(ftrPtr); string signature = StringHandlers.CToString(header.signature); @@ -141,10 +144,9 @@ namespace DiscImageChef.DiscImages stream.Seek(0, SeekOrigin.Begin); stream.Read(buffer, 0, buffer.Length); - RayHdr header; IntPtr ftrPtr = Marshal.AllocHGlobal(buffer.Length); Marshal.Copy(buffer, 0, ftrPtr, buffer.Length); - header = (RayHdr)Marshal.PtrToStructure(ftrPtr, typeof(RayHdr)); + RayHdr header = (RayHdr)Marshal.PtrToStructure(ftrPtr, typeof(RayHdr)); Marshal.FreeHGlobal(ftrPtr); string signature = StringHandlers.CToString(header.signature); diff --git a/DiscImageChef.DiscImages/SaveDskF.cs b/DiscImageChef.DiscImages/SaveDskF.cs index a649ad0b..984b0805 100644 --- a/DiscImageChef.DiscImages/SaveDskF.cs +++ b/DiscImageChef.DiscImages/SaveDskF.cs @@ -159,7 +159,6 @@ namespace DiscImageChef.DiscImages stream.Seek(0, SeekOrigin.Begin); byte[] hdr = new byte[40]; - byte[] cmt; stream.Read(hdr, 0, 40); header = new SaveDskFHeader(); @@ -190,7 +189,7 @@ namespace DiscImageChef.DiscImages if(header.dataOffset == 0 && header.magic == SDF_MAGIC_OLD) header.dataOffset = 512; - cmt = new byte[header.dataOffset - header.commentOffset]; + byte[] cmt = new byte[header.dataOffset - header.commentOffset]; stream.Seek(header.commentOffset, SeekOrigin.Begin); stream.Read(cmt, 0, cmt.Length); if(cmt.Length > 1) ImageInfo.ImageComments = StringHandlers.CToString(cmt, Encoding.GetEncoding("ibm437")); diff --git a/DiscImageChef.DiscImages/SuperCardPro.cs b/DiscImageChef.DiscImages/SuperCardPro.cs index 35701681..aa4a93ba 100644 --- a/DiscImageChef.DiscImages/SuperCardPro.cs +++ b/DiscImageChef.DiscImages/SuperCardPro.cs @@ -259,9 +259,8 @@ namespace DiscImageChef.DiscImages if(t >= Header.offsets.Length) break; scpStream.Position = Header.offsets[t]; - TrackHeader trk = new TrackHeader(); - trk.Signature = new byte[3]; - trk.Entries = new TrackEntry[Header.revolutions]; + TrackHeader trk = + new TrackHeader {Signature = new byte[3], Entries = new TrackEntry[Header.revolutions]}; scpStream.Read(trk.Signature, 0, trk.Signature.Length); trk.TrackNumber = (byte)scpStream.ReadByte(); @@ -370,13 +369,9 @@ namespace DiscImageChef.DiscImages DicConsole.DebugWriteLine("SuperCardPro plugin", "ImageInfo.imageComments = \"{0}\"", ImageInfo.ImageComments); - if(footer.creationTime != 0) - ImageInfo.ImageCreationTime = DateHandlers.UNIXToDateTime(footer.creationTime); - else ImageInfo.ImageCreationTime = imageFilter.GetCreationTime(); + ImageInfo.ImageCreationTime = footer.creationTime != 0 ? DateHandlers.UNIXToDateTime(footer.creationTime) : imageFilter.GetCreationTime(); - if(footer.modificationTime != 0) - ImageInfo.ImageLastModificationTime = DateHandlers.UNIXToDateTime(footer.modificationTime); - else ImageInfo.ImageLastModificationTime = imageFilter.GetLastWriteTime(); + ImageInfo.ImageLastModificationTime = footer.modificationTime != 0 ? DateHandlers.UNIXToDateTime(footer.modificationTime) : imageFilter.GetLastWriteTime(); DicConsole.DebugWriteLine("SuperCardPro plugin", "ImageInfo.imageCreationTime = {0}", ImageInfo.ImageCreationTime); @@ -407,7 +402,7 @@ namespace DiscImageChef.DiscImages throw new NotImplementedException("Flux decoding is not yet implemented."); } - string ReadPStringUtf8(Stream stream, uint position) + static string ReadPStringUtf8(Stream stream, uint position) { if(position == 0) return null; diff --git a/DiscImageChef.DiscImages/T98.cs b/DiscImageChef.DiscImages/T98.cs index 91bac798..0c0d2509 100644 --- a/DiscImageChef.DiscImages/T98.cs +++ b/DiscImageChef.DiscImages/T98.cs @@ -79,12 +79,12 @@ namespace DiscImageChef.DiscImages if(stream.Length % 256 != 0) return false; - byte[] hdr_b = new byte[256]; - stream.Read(hdr_b, 0, hdr_b.Length); + byte[] hdrB = new byte[256]; + stream.Read(hdrB, 0, hdrB.Length); - for(int i = 4; i < 256; i++) if(hdr_b[i] != 0) return false; + for(int i = 4; i < 256; i++) if(hdrB[i] != 0) return false; - int cylinders = BitConverter.ToInt32(hdr_b, 0); + int cylinders = BitConverter.ToInt32(hdrB, 0); DicConsole.DebugWriteLine("T98 plugin", "cylinders = {0}", cylinders); @@ -100,12 +100,12 @@ namespace DiscImageChef.DiscImages if(stream.Length % 256 != 0) return false; - byte[] hdr_b = new byte[256]; - stream.Read(hdr_b, 0, hdr_b.Length); + byte[] hdrB = new byte[256]; + stream.Read(hdrB, 0, hdrB.Length); - for(int i = 4; i < 256; i++) if(hdr_b[i] != 0) return false; + for(int i = 4; i < 256; i++) if(hdrB[i] != 0) return false; - int cylinders = BitConverter.ToInt32(hdr_b, 0); + int cylinders = BitConverter.ToInt32(hdrB, 0); ImageInfo.MediaType = MediaType.GENERIC_HDD; diff --git a/DiscImageChef.DiscImages/TeleDisk.cs b/DiscImageChef.DiscImages/TeleDisk.cs index 75aefd0e..7ac013cf 100644 --- a/DiscImageChef.DiscImages/TeleDisk.cs +++ b/DiscImageChef.DiscImages/TeleDisk.cs @@ -205,25 +205,27 @@ namespace DiscImageChef.DiscImages { Name = "Sydex TeleDisk"; PluginUuid = new Guid("0240B7B1-E959-4CDC-B0BD-386D6E467B88"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageApplication = "Sydex TeleDisk"; - ImageInfo.ImageComments = null; - ImageInfo.ImageCreator = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageApplication = "Sydex TeleDisk", + ImageComments = null, + ImageCreator = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; aDiskCrcHasFailed = false; sectorsWhereCrcHasFailed = new List(); } @@ -354,11 +356,10 @@ namespace DiscImageChef.DiscImages if(header.Signature == TD_ADV_COMP_MAGIC) { int rd; - byte[] obuf; inStream.Seek(12, SeekOrigin.Begin); stream.Seek(12, SeekOrigin.Begin); init_Decode(); - do if((rd = Decode(out obuf, BUFSZ)) > 0) stream.Write(obuf, 0, rd); + do if((rd = Decode(out byte[] obuf, BUFSZ)) > 0) stream.Write(obuf, 0, rd); while(rd == BUFSZ); } else @@ -380,7 +381,6 @@ namespace DiscImageChef.DiscImages commentHeader = new TeleDiskCommentBlockHeader(); byte[] commentHeaderBytes = new byte[10]; - byte[] commentBlockForCrc; stream.Read(commentHeaderBytes, 0, 10); commentHeader.Crc = BitConverter.ToUInt16(commentHeaderBytes, 0); @@ -395,7 +395,7 @@ namespace DiscImageChef.DiscImages commentBlock = new byte[commentHeader.Length]; stream.Read(commentBlock, 0, commentHeader.Length); - commentBlockForCrc = new byte[commentHeader.Length + 8]; + byte[] commentBlockForCrc = new byte[commentHeader.Length + 8]; Array.Copy(commentHeaderBytes, 2, commentBlockForCrc, 0, 8); Array.Copy(commentBlock, 0, commentBlockForCrc, 8, commentHeader.Length); @@ -452,12 +452,14 @@ namespace DiscImageChef.DiscImages // Count cylinders while(true) { - TeleDiskTrackHeader teleDiskTrack = new TeleDiskTrackHeader(); + TeleDiskTrackHeader teleDiskTrack = new TeleDiskTrackHeader + { + Sectors = (byte)stream.ReadByte(), + Cylinder = (byte)stream.ReadByte(), + Head = (byte)stream.ReadByte(), + Crc = (byte)stream.ReadByte() + }; - teleDiskTrack.Sectors = (byte)stream.ReadByte(); - teleDiskTrack.Cylinder = (byte)stream.ReadByte(); - teleDiskTrack.Head = (byte)stream.ReadByte(); - teleDiskTrack.Crc = (byte)stream.ReadByte(); if(teleDiskTrack.Cylinder > totalCylinders) totalCylinders = teleDiskTrack.Cylinder; if(teleDiskTrack.Head > totalHeads) totalHeads = teleDiskTrack.Head; @@ -470,7 +472,6 @@ namespace DiscImageChef.DiscImages TeleDiskSectorHeader teleDiskSector = new TeleDiskSectorHeader(); TeleDiskDataHeader teleDiskData = new TeleDiskDataHeader(); byte[] dataSizeBytes = new byte[2]; - byte[] data; teleDiskSector.Cylinder = (byte)stream.ReadByte(); teleDiskSector.Head = (byte)stream.ReadByte(); @@ -488,7 +489,7 @@ namespace DiscImageChef.DiscImages teleDiskData.DataSize = BitConverter.ToUInt16(dataSizeBytes, 0); teleDiskData.DataSize--; // Sydex decided to including dataEncoding byte as part of it teleDiskData.DataEncoding = (byte)stream.ReadByte(); - data = new byte[teleDiskData.DataSize]; + byte[] data = new byte[teleDiskData.DataSize]; stream.Read(data, 0, teleDiskData.DataSize); } @@ -514,12 +515,14 @@ namespace DiscImageChef.DiscImages stream.Seek(currentPos, SeekOrigin.Begin); while(true) { - TeleDiskTrackHeader teleDiskTrack = new TeleDiskTrackHeader(); + TeleDiskTrackHeader teleDiskTrack = new TeleDiskTrackHeader + { + Sectors = (byte)stream.ReadByte(), + Cylinder = (byte)stream.ReadByte(), + Head = (byte)stream.ReadByte(), + Crc = (byte)stream.ReadByte() + }; - teleDiskTrack.Sectors = (byte)stream.ReadByte(); - teleDiskTrack.Cylinder = (byte)stream.ReadByte(); - teleDiskTrack.Head = (byte)stream.ReadByte(); - teleDiskTrack.Crc = (byte)stream.ReadByte(); if(teleDiskTrack.Sectors == 0xFF) // End of disk image break; @@ -537,7 +540,6 @@ namespace DiscImageChef.DiscImages TeleDiskSectorHeader teleDiskSector = new TeleDiskSectorHeader(); TeleDiskDataHeader teleDiskData = new TeleDiskDataHeader(); byte[] dataSizeBytes = new byte[2]; - byte[] data; teleDiskSector.Cylinder = (byte)stream.ReadByte(); teleDiskSector.Head = (byte)stream.ReadByte(); @@ -553,7 +555,7 @@ namespace DiscImageChef.DiscImages teleDiskData.DataSize = BitConverter.ToUInt16(dataSizeBytes, 0); teleDiskData.DataSize--; // Sydex decided to including dataEncoding byte as part of it teleDiskData.DataEncoding = (byte)stream.ReadByte(); - data = new byte[teleDiskData.DataSize]; + byte[] data = new byte[teleDiskData.DataSize]; stream.Read(data, 0, teleDiskData.DataSize); } } @@ -617,7 +619,6 @@ namespace DiscImageChef.DiscImages TeleDiskSectorHeader teleDiskSector = new TeleDiskSectorHeader(); TeleDiskDataHeader teleDiskData = new TeleDiskDataHeader(); byte[] dataSizeBytes = new byte[2]; - byte[] data; byte[] decodedData; teleDiskSector.Cylinder = (byte)stream.ReadByte(); @@ -647,7 +648,7 @@ namespace DiscImageChef.DiscImages teleDiskData.DataSize--; // Sydex decided to including dataEncoding byte as part of it ImageInfo.ImageSize += teleDiskData.DataSize; teleDiskData.DataEncoding = (byte)stream.ReadByte(); - data = new byte[teleDiskData.DataSize]; + byte[] data = new byte[teleDiskData.DataSize]; stream.Read(data, 0, teleDiskData.DataSize); DicConsole.DebugWriteLine("TeleDisk plugin", "\t\tData size (in-image): {0}", teleDiskData.DataSize); DicConsole.DebugWriteLine("TeleDisk plugin", "\t\tData encoding: 0x{0:X2}", @@ -673,14 +674,13 @@ namespace DiscImageChef.DiscImages if((teleDiskSector.Flags & FLAGS_SECTOR_NO_ID) == FLAGS_SECTOR_NO_ID) continue; if(sectorsData[teleDiskTrack.Cylinder][teleDiskTrack.Head][teleDiskSector.SectorNumber] != null) - if((teleDiskSector.Flags & FLAGS_SECTOR_DUPLICATE) == FLAGS_SECTOR_DUPLICATE) - DicConsole.DebugWriteLine("TeleDisk plugin", - "\t\tSector {0} on cylinder {1} head {2} is duplicate, and marked so", - teleDiskSector.SectorNumber, teleDiskSector.Cylinder, teleDiskSector.Head); - else - DicConsole.DebugWriteLine("TeleDisk plugin", - "\t\tSector {0} on cylinder {1} head {2} is duplicate, but is not marked so", - teleDiskSector.SectorNumber, teleDiskSector.Cylinder, teleDiskSector.Head); + DicConsole.DebugWriteLine("TeleDisk plugin", + (teleDiskSector.Flags & FLAGS_SECTOR_DUPLICATE) == + FLAGS_SECTOR_DUPLICATE + ? "\t\tSector {0} on cylinder {1} head {2} is duplicate, and marked so" + : "\t\tSector {0} on cylinder {1} head {2} is duplicate, but is not marked so", + teleDiskSector.SectorNumber, teleDiskSector.Cylinder, + teleDiskSector.Head); else { sectorsData[teleDiskTrack.Cylinder][teleDiskTrack.Head][teleDiskSector.SectorNumber] = decodedData; @@ -776,8 +776,7 @@ namespace DiscImageChef.DiscImages MemoryStream buffer = new MemoryStream(); for(uint i = 0; i < length; i++) { - byte[] sector = ReadSector(sectorAddress + i); - if(sector == null) sector = new byte[ImageInfo.SectorSize]; + byte[] sector = ReadSector(sectorAddress + i) ?? new byte[ImageInfo.SectorSize]; buffer.Write(sector, 0, sector.Length); } @@ -969,10 +968,8 @@ namespace DiscImageChef.DiscImages int outs = 0; while(ins < encodedData.Length) { - byte run; byte length; byte encoding; - byte[] piece; encoding = encodedData[ins]; if(encoding == 0x00) @@ -985,10 +982,10 @@ namespace DiscImageChef.DiscImages else { length = (byte)(encoding * 2); - run = encodedData[ins + 1]; + byte run = encodedData[ins + 1]; byte[] part = new byte[length]; Array.Copy(encodedData, ins + 2, part, 0, length); - piece = new byte[length * run]; + byte[] piece = new byte[length * run]; ArrayHelpers.ArrayFill(piece, part); Array.Copy(piece, 0, decodedData, outs, piece.Length); ins += 2 + length; @@ -1326,7 +1323,7 @@ namespace DiscImageChef.DiscImages const int N_CHAR = 256 - THRESHOLD + F; /* character code (= 0..N_CHAR-1) */ const int T = N_CHAR * 2 - 1; /* Size of table */ - const int R = T - 1; /* root position */ + const int ROOT = T - 1; /* root position */ const int MAX_FREQ = 0x8000; /* update when cumulative frequency */ /* reaches to this value */ @@ -1471,7 +1468,7 @@ namespace DiscImageChef.DiscImages i = 0; j = N_CHAR; - while(j <= R) + while(j <= ROOT) { freq[j] = (ushort)(freq[i] + freq[i + 1]); son[j] = (short)i; @@ -1481,7 +1478,7 @@ namespace DiscImageChef.DiscImages } freq[T] = 0xffff; - prnt[R] = 0; + prnt[ROOT] = 0; } /* reconstruct freq tree */ @@ -1489,7 +1486,6 @@ namespace DiscImageChef.DiscImages void Reconst() { short i, j, k; - ushort f, l; /* halven cumulative freq for leaf nodes */ j = 0; @@ -1504,12 +1500,11 @@ namespace DiscImageChef.DiscImages for(i = 0, j = N_CHAR; j < T; i += 2, j++) { k = (short)(i + 1); - f = freq[j] = (ushort)(freq[i] + freq[k]); + ushort f = freq[j] = (ushort)(freq[i] + freq[k]); for(k = (short)(j - 1); f < freq[k]; k--) { } - ; k++; - l = (ushort)((j - k) * 2); + ushort l = (ushort)((j - k) * 2); Array.ConstrainedCopy(freq, k, freq, k + 1, l); freq[k] = f; @@ -1526,15 +1521,14 @@ namespace DiscImageChef.DiscImages void Update(int c) { - int i, j, k, l; - - if(freq[R] == MAX_FREQ) Reconst(); + if(freq[ROOT] == MAX_FREQ) Reconst(); c = prnt[c + T]; do { - k = ++freq[c]; + int k = ++freq[c]; /* swap nodes to keep the tree freq-ordered */ + int l; if(k <= freq[l = c + 1]) continue; while(k > freq[++l]) { } @@ -1543,11 +1537,11 @@ namespace DiscImageChef.DiscImages freq[c] = freq[l]; freq[l] = (ushort)k; - i = son[c]; + int i = son[c]; prnt[i] = (short)l; if(i < T) prnt[i + 1] = (short)l; - j = son[l]; + int j = son[l]; son[l] = (short)i; prnt[j] = (short)c; @@ -1561,10 +1555,9 @@ namespace DiscImageChef.DiscImages short DecodeChar() { - int ret; ushort c; - c = (ushort)son[R]; + c = (ushort)son[ROOT]; /* * start searching tree from the root to leaves. @@ -1573,6 +1566,7 @@ namespace DiscImageChef.DiscImages */ while(c < T) { + int ret; if((ret = GetBit()) < 0) return -1; c += (ushort)ret; @@ -1630,7 +1624,7 @@ namespace DiscImageChef.DiscImages int Decode(out byte[] buf, int len) /* Decoding/Uncompressing */ { - short c, pos; + short c; buf = new byte[len]; int count; // was an unsigned long, seems unnecessary for(count = 0; count < len;) @@ -1647,6 +1641,7 @@ namespace DiscImageChef.DiscImages } else { + short pos; if((pos = DecodePosition()) < 0) return count; // fatal error tdctl.Bufpos = (ushort)((tdctl.R - pos - 1) & (N - 1)); diff --git a/DiscImageChef.DiscImages/UDIF.cs b/DiscImageChef.DiscImages/UDIF.cs index 1bade583..8997b333 100644 --- a/DiscImageChef.DiscImages/UDIF.cs +++ b/DiscImageChef.DiscImages/UDIF.cs @@ -45,6 +45,7 @@ using SharpCompress.Compressors.ADC; using SharpCompress.Compressors.BZip2; using CompressionMode = SharpCompress.Compressors.CompressionMode; using Version = Resources.Version; +#pragma warning disable 612 namespace DiscImageChef.DiscImages { @@ -149,7 +150,7 @@ namespace DiscImageChef.DiscImages Dictionary chunkCache; const uint MAX_CACHE_SIZE = 16777216; const uint SECTOR_SIZE = 512; - uint maxCachedSectors = MAX_CACHE_SIZE / SECTOR_SIZE; + const uint MAX_CACHED_SECTORS = MAX_CACHE_SIZE / SECTOR_SIZE; uint currentChunkCacheSize; uint buffersize; @@ -159,27 +160,29 @@ namespace DiscImageChef.DiscImages { Name = "Apple Universal Disk Image Format"; PluginUuid = new Guid("5BEB9002-CF3D-429C-8E06-9A96F49203FF"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -310,33 +313,25 @@ namespace DiscImageChef.DiscImages NSDictionary plist = (NSDictionary)XmlPropertyListParser.Parse(plistB); if(plist == null) throw new Exception("Could not parse property list."); - NSObject rsrcObj; - - if(!plist.TryGetValue(RESOURCE_FORK_KEY, out rsrcObj)) + if(!plist.TryGetValue(RESOURCE_FORK_KEY, out NSObject rsrcObj)) throw new Exception("Could not retrieve resource fork."); NSDictionary rsrc = (NSDictionary)rsrcObj; - NSObject blkxObj; - - if(!rsrc.TryGetValue(BLOCK_KEY, out blkxObj)) + if(!rsrc.TryGetValue(BLOCK_KEY, out NSObject blkxObj)) throw new Exception("Could not retrieve block chunks array."); NSObject[] blkx = ((NSArray)blkxObj).GetArray(); foreach(NSDictionary part in blkx.Cast()) { - NSObject nameObj, dataObj; + if(!part.TryGetValue("Name", out _)) throw new Exception("Could not retrieve Name"); - if(!part.TryGetValue("Name", out nameObj)) throw new Exception("Could not retrieve Name"); - - if(!part.TryGetValue("Data", out dataObj)) throw new Exception("Could not retrieve Data"); + if(!part.TryGetValue("Data", out NSObject dataObj)) throw new Exception("Could not retrieve Data"); blkxList.Add(((NSData)dataObj).Bytes); } - NSObject versObj; - - if(rsrc.TryGetValue("vers", out versObj)) + if(rsrc.TryGetValue("vers", out NSObject versObj)) { NSObject[] versArray = ((NSArray)versObj).GetArray(); if(versArray.Length >= 1) vers = ((NSData)versArray[0]).Bytes; @@ -346,12 +341,14 @@ namespace DiscImageChef.DiscImages { // Obsolete read-only UDIF only prepended the header and then put the image without any kind of block references. // So let's falsify a block chunk - BlockChunk bChnk = new BlockChunk(); - bChnk.length = footer.dataForkLen; - bChnk.offset = footer.dataForkOff; - bChnk.sector = 0; - bChnk.sectors = footer.sectorCount; - bChnk.type = CHUNK_TYPE_COPY; + BlockChunk bChnk = new BlockChunk + { + length = footer.dataForkLen, + offset = footer.dataForkOff, + sector = 0, + sectors = footer.sectorCount, + type = CHUNK_TYPE_COPY + }; ImageInfo.Sectors = footer.sectorCount; chunks.Add(bChnk.sector, bChnk); buffersize = 2048 * SECTOR_SIZE; @@ -362,14 +359,12 @@ namespace DiscImageChef.DiscImages { Version version = new Version(vers); - string major; - string minor; string release = null; string dev = null; string pre = null; - major = $"{version.MajorVersion}"; - minor = $".{version.MinorVersion / 10}"; + string major = $"{version.MajorVersion}"; + string minor = $".{version.MinorVersion / 10}"; if(version.MinorVersion % 10 > 0) release = $".{version.MinorVersion % 10}"; switch(version.DevStage) { @@ -509,9 +504,7 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; BlockChunk currentChunk = new BlockChunk(); bool chunkFound = false; @@ -535,8 +528,7 @@ namespace DiscImageChef.DiscImages if((currentChunk.type & CHUNK_TYPE_COMPRESSED_MASK) == CHUNK_TYPE_COMPRESSED_MASK) { - byte[] buffer; - if(!chunkCache.TryGetValue(chunkStartSector, out buffer)) + if(!chunkCache.TryGetValue(chunkStartSector, out byte[] buffer)) { byte[] cmpBuffer = new byte[currentChunk.length]; imageStream.Seek((long)currentChunk.offset, SeekOrigin.Begin); @@ -545,7 +537,7 @@ namespace DiscImageChef.DiscImages Stream decStream; switch(currentChunk.type) { - case CHUNK_TYPE_ADC: decStream = new ADCStream(cmpMs, CompressionMode.Decompress); + case CHUNK_TYPE_ADC: decStream = new ADCStream(cmpMs); break; case CHUNK_TYPE_ZLIB: decStream = new ZlibStream(cmpMs, Ionic.Zlib.CompressionMode.Decompress); break; @@ -585,7 +577,7 @@ namespace DiscImageChef.DiscImages sector = new byte[SECTOR_SIZE]; Array.Copy(buffer, relOff, sector, 0, SECTOR_SIZE); - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); @@ -597,7 +589,7 @@ namespace DiscImageChef.DiscImages case CHUNK_TYPE_ZERO: sector = new byte[SECTOR_SIZE]; - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); return sector; @@ -606,7 +598,7 @@ namespace DiscImageChef.DiscImages sector = new byte[SECTOR_SIZE]; imageStream.Read(sector, 0, sector.Length); - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); return sector; diff --git a/DiscImageChef.DiscImages/UkvFdi.cs b/DiscImageChef.DiscImages/UkvFdi.cs index 8ba2157e..e3089dc8 100644 --- a/DiscImageChef.DiscImages/UkvFdi.cs +++ b/DiscImageChef.DiscImages/UkvFdi.cs @@ -122,10 +122,10 @@ namespace DiscImageChef.DiscImages if(stream.Length < Marshal.SizeOf(hdr)) return false; - byte[] hdr_b = new byte[Marshal.SizeOf(hdr)]; - stream.Read(hdr_b, 0, hdr_b.Length); + byte[] hdrB = new byte[Marshal.SizeOf(hdr)]; + stream.Read(hdrB, 0, hdrB.Length); - GCHandle handle = GCHandle.Alloc(hdr_b, GCHandleType.Pinned); + GCHandle handle = GCHandle.Alloc(hdrB, GCHandleType.Pinned); hdr = (FdiHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(FdiHeader)); handle.Free(); @@ -141,10 +141,10 @@ namespace DiscImageChef.DiscImages if(stream.Length < Marshal.SizeOf(hdr)) return false; - byte[] hdr_b = new byte[Marshal.SizeOf(hdr)]; - stream.Read(hdr_b, 0, hdr_b.Length); + byte[] hdrB = new byte[Marshal.SizeOf(hdr)]; + stream.Read(hdrB, 0, hdrB.Length); - GCHandle handle = GCHandle.Alloc(hdr_b, GCHandleType.Pinned); + GCHandle handle = GCHandle.Alloc(hdrB, GCHandleType.Pinned); hdr = (FdiHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(FdiHeader)); handle.Free(); @@ -179,11 +179,11 @@ namespace DiscImageChef.DiscImages for(ushort head = 0; head < hdr.heads; head++) { - byte[] sct_b = new byte[4]; - stream.Read(sct_b, 0, 4); + byte[] sctB = new byte[4]; + stream.Read(sctB, 0, 4); stream.Seek(2, SeekOrigin.Current); byte sectors = (byte)stream.ReadByte(); - uint trkOff = BitConverter.ToUInt32(sct_b, 0); + uint trkOff = BitConverter.ToUInt32(sctB, 0); DicConsole.DebugWriteLine("UkvFdi plugin", "trkhdr.c = {0}", cyl); DicConsole.DebugWriteLine("UkvFdi plugin", "trkhdr.h = {0}", head); @@ -202,9 +202,9 @@ namespace DiscImageChef.DiscImages byte r = (byte)stream.ReadByte(); byte n = (byte)stream.ReadByte(); SectorFlags f = (SectorFlags)stream.ReadByte(); - byte[] off_b = new byte[2]; - stream.Read(off_b, 0, 2); - ushort secOff = BitConverter.ToUInt16(off_b, 0); + byte[] offB = new byte[2]; + stream.Read(offB, 0, 2); + ushort secOff = BitConverter.ToUInt16(offB, 0); DicConsole.DebugWriteLine("UkvFdi plugin", "sechdr.c = {0}", c); DicConsole.DebugWriteLine("UkvFdi plugin", "sechdr.h = {0}", h); diff --git a/DiscImageChef.DiscImages/VDI.cs b/DiscImageChef.DiscImages/VDI.cs index f6a7d50f..2bbed85b 100644 --- a/DiscImageChef.DiscImages/VDI.cs +++ b/DiscImageChef.DiscImages/VDI.cs @@ -108,27 +108,29 @@ namespace DiscImageChef.DiscImages { Name = "VirtualBox Disk Image"; PluginUuid = new Guid("E314DE35-C103-48A3-AD36-990F68523C46"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -243,9 +245,7 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; ulong index = sectorAddress * vHdr.sectorSize / vHdr.blockSize; ulong secOff = sectorAddress * vHdr.sectorSize % vHdr.blockSize; diff --git a/DiscImageChef.DiscImages/VHD.cs b/DiscImageChef.DiscImages/VHD.cs index 5243c76e..89980ee3 100644 --- a/DiscImageChef.DiscImages/VHD.cs +++ b/DiscImageChef.DiscImages/VHD.cs @@ -363,27 +363,29 @@ namespace DiscImageChef.DiscImages { Name = "VirtualPC"; PluginUuid = new Guid("8014d88f-64cd-4484-9441-7635c632958a"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } #region public methods @@ -473,23 +475,25 @@ namespace DiscImageChef.DiscImages throw new ImageNotSupportedException("(VirtualPC plugin): Both header and footer are corrupt, image cannot be opened."); - thisFooter = new HardDiskFooter(); - thisFooter.Cookie = BigEndianBitConverter.ToUInt64(usableHeader, 0x00); - thisFooter.Features = BigEndianBitConverter.ToUInt32(usableHeader, 0x08); - thisFooter.Version = BigEndianBitConverter.ToUInt32(usableHeader, 0x0C); - thisFooter.Offset = BigEndianBitConverter.ToUInt64(usableHeader, 0x10); - thisFooter.Timestamp = BigEndianBitConverter.ToUInt32(usableHeader, 0x18); - thisFooter.CreatorApplication = BigEndianBitConverter.ToUInt32(usableHeader, 0x1C); - thisFooter.CreatorVersion = BigEndianBitConverter.ToUInt32(usableHeader, 0x20); - thisFooter.CreatorHostOs = BigEndianBitConverter.ToUInt32(usableHeader, 0x24); - thisFooter.OriginalSize = BigEndianBitConverter.ToUInt64(usableHeader, 0x28); - thisFooter.CurrentSize = BigEndianBitConverter.ToUInt64(usableHeader, 0x30); - thisFooter.DiskGeometry = BigEndianBitConverter.ToUInt32(usableHeader, 0x38); - thisFooter.DiskType = BigEndianBitConverter.ToUInt32(usableHeader, 0x3C); - thisFooter.Checksum = usableChecksum; - thisFooter.UniqueId = BigEndianBitConverter.ToGuid(usableHeader, 0x44); - thisFooter.SavedState = usableHeader[0x54]; - thisFooter.Reserved = new byte[usableHeader.Length - 0x55]; + thisFooter = new HardDiskFooter + { + Cookie = BigEndianBitConverter.ToUInt64(usableHeader, 0x00), + Features = BigEndianBitConverter.ToUInt32(usableHeader, 0x08), + Version = BigEndianBitConverter.ToUInt32(usableHeader, 0x0C), + Offset = BigEndianBitConverter.ToUInt64(usableHeader, 0x10), + Timestamp = BigEndianBitConverter.ToUInt32(usableHeader, 0x18), + CreatorApplication = BigEndianBitConverter.ToUInt32(usableHeader, 0x1C), + CreatorVersion = BigEndianBitConverter.ToUInt32(usableHeader, 0x20), + CreatorHostOs = BigEndianBitConverter.ToUInt32(usableHeader, 0x24), + OriginalSize = BigEndianBitConverter.ToUInt64(usableHeader, 0x28), + CurrentSize = BigEndianBitConverter.ToUInt64(usableHeader, 0x30), + DiskGeometry = BigEndianBitConverter.ToUInt32(usableHeader, 0x38), + DiskType = BigEndianBitConverter.ToUInt32(usableHeader, 0x3C), + Checksum = usableChecksum, + UniqueId = BigEndianBitConverter.ToGuid(usableHeader, 0x44), + SavedState = usableHeader[0x54], + Reserved = new byte[usableHeader.Length - 0x55] + }; Array.Copy(usableHeader, 0x55, thisFooter.Reserved, 0, usableHeader.Length - 0x55); thisDateTime = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc); @@ -673,9 +677,8 @@ namespace DiscImageChef.DiscImages 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]; + thisDynamic = + new DynamicDiskHeader {LocatorEntries = new ParentLocatorEntry[8], Reserved2 = new byte[256]}; for(int i = 0; i < 8; i++) thisDynamic.LocatorEntries[i] = new ParentLocatorEntry(); @@ -775,7 +778,6 @@ namespace DiscImageChef.DiscImages uint batSectorCount = (uint)Math.Ceiling((double)thisDynamic.MaxTableEntries * 4 / 512); byte[] batSectorBytes = new byte[512]; - BatSector batSector; // Unsafe and fast code. It takes 4 ms to fill a 30720 entries BAT for(int i = 0; i < batSectorCount; i++) @@ -785,7 +787,7 @@ namespace DiscImageChef.DiscImages // This does the big-endian trick but reverses the order of elements also Array.Reverse(batSectorBytes); GCHandle handle = GCHandle.Alloc(batSectorBytes, GCHandleType.Pinned); - batSector = (BatSector)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(BatSector)); + BatSector batSector = (BatSector)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(BatSector)); handle.Free(); // This restores the order of elements Array.Reverse(batSector.blockPointer); @@ -1053,7 +1055,7 @@ namespace DiscImageChef.DiscImages thisStream.Read(bitmap, 0, (int)bitmapSize * 512); byte mask = (byte)(1 << (7 - bitmapBit)); - bool dirty = false || (bitmap[bitmapByte] & mask) == mask; + bool dirty = (bitmap[bitmapByte] & mask) == mask; /* DicConsole.DebugWriteLine("VirtualPC plugin", "bitmapSize = {0}", bitmapSize); @@ -1099,10 +1101,8 @@ namespace DiscImageChef.DiscImages { case TYPE_FIXED: { - Stream thisStream; - byte[] data = new byte[512 * length]; - thisStream = thisFilter.GetDataForkStream(); + Stream thisStream = thisFilter.GetDataForkStream(); thisStream.Seek((long)(sectorAddress * 512), SeekOrigin.Begin); thisStream.Read(data, 0, (int)(512 * length)); @@ -1115,8 +1115,6 @@ namespace DiscImageChef.DiscImages // as long as it is in the block. case TYPE_DYNAMIC: { - Stream thisStream; - // Block number for BAT searching uint blockNumber = (uint)Math.Floor((sectorAddress / (thisDynamic.BlockSize / 512.0))); // Sector number inside of block @@ -1124,8 +1122,6 @@ namespace DiscImageChef.DiscImages // How many sectors before reaching end of block uint remainingInBlock = thisDynamic.BlockSize / 512 - sectorInBlock; - // Data that can be read in this block - byte[] prefix; // Data that needs to be read from another block byte[] suffix = null; @@ -1142,12 +1138,13 @@ namespace DiscImageChef.DiscImages // Offset of sector in file uint sectorOffset = blockAllocationTable[blockNumber] + bitmapSize + sectorInBlock; - prefix = new byte[sectorsToReadHere * 512]; + // Data that can be read in this block + byte[] prefix = new byte[sectorsToReadHere * 512]; // 0xFFFFFFFF means unallocated if(sectorOffset != 0xFFFFFFFF) { - thisStream = thisFilter.GetDataForkStream(); + Stream thisStream = thisFilter.GetDataForkStream(); thisStream.Seek(sectorOffset * 512, SeekOrigin.Begin); thisStream.Read(prefix, 0, (int)(512 * sectorsToReadHere)); } @@ -1192,7 +1189,7 @@ namespace DiscImageChef.DiscImages #endregion #region private methods - static uint VhdChecksum(byte[] data) + static uint VhdChecksum(IEnumerable data) { uint checksum = data.Aggregate(0, (current, b) => current + b); diff --git a/DiscImageChef.DiscImages/VHDX.cs b/DiscImageChef.DiscImages/VHDX.cs index dd2bf9fe..7afcf9d9 100644 --- a/DiscImageChef.DiscImages/VHDX.cs +++ b/DiscImageChef.DiscImages/VHDX.cs @@ -58,6 +58,8 @@ namespace DiscImageChef.DiscImages [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)] public byte[] creator; } +#pragma warning disable 649 +#pragma warning disable 169 struct VhdxHeader { /// @@ -102,6 +104,8 @@ namespace DiscImageChef.DiscImages public ulong LogOffset; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4016)] public byte[] Reserved; } +#pragma warning restore 649 +#pragma warning restore 169 [StructLayout(LayoutKind.Sequential, Pack = 1)] struct VhdxRegionTableHeader @@ -332,27 +336,29 @@ namespace DiscImageChef.DiscImages { Name = "Microsoft VHDX"; PluginUuid = new Guid("536B141B-D09C-4799-AB70-34631286EB9D"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } #region public methods @@ -502,9 +508,11 @@ namespace DiscImageChef.DiscImages stream.Seek(fileParamsOff + metadataOffset, SeekOrigin.Begin); tmp = new byte[8]; stream.Read(tmp, 0, 8); - vFileParms = new VhdxFileParameters(); - vFileParms.blockSize = BitConverter.ToUInt32(tmp, 0); - vFileParms.flags = BitConverter.ToUInt32(tmp, 4); + vFileParms = new VhdxFileParameters + { + blockSize = BitConverter.ToUInt32(tmp, 0), + flags = BitConverter.ToUInt32(tmp, 4) + }; } else throw new Exception("File parameters not found."); @@ -578,7 +586,6 @@ namespace DiscImageChef.DiscImages { parentImage = new Vhdx(); bool parentWorks = false; - Filter parentFilter; foreach(VhdxParentLocatorEntry parentEntry in vPars) { @@ -587,6 +594,7 @@ namespace DiscImageChef.DiscImages stream.Read(tmpKey, 0, tmpKey.Length); string entryType = Encoding.Unicode.GetString(tmpKey); + Filter parentFilter; if(string.Compare(entryType, RELATIVE_PATH_KEY, StringComparison.OrdinalIgnoreCase) == 0) { stream.Seek(parentEntry.valueOffset + metadataOffset, SeekOrigin.Begin); @@ -617,7 +625,8 @@ namespace DiscImageChef.DiscImages parentWorks = true; break; } - catch { } + catch { // ignored + } } else if(string.Compare(entryType, VOLUME_PATH_KEY, StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(entryType, ABSOLUTE_WIN32_PATH_KEY, StringComparison.OrdinalIgnoreCase) == 0) @@ -636,7 +645,8 @@ namespace DiscImageChef.DiscImages parentWorks = true; break; } - catch { } + catch { // ignored + } } } @@ -820,9 +830,7 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; ulong index = sectorAddress * logicalSectorSize / vFileParms.blockSize; ulong secOff = sectorAddress * logicalSectorSize % vFileParms.blockSize; @@ -845,9 +853,7 @@ namespace DiscImageChef.DiscImages if(partialBlock && hasParent && !CheckBitmap(sectorAddress)) return parentImage.ReadSector(sectorAddress); - byte[] block; - - if(!blockCache.TryGetValue(blkPtr & BAT_FILE_OFFSET_MASK, out block)) + if(!blockCache.TryGetValue(blkPtr & BAT_FILE_OFFSET_MASK, out byte[] block)) { block = new byte[vFileParms.blockSize]; imageStream.Seek((long)(blkPtr & BAT_FILE_OFFSET_MASK), SeekOrigin.Begin); diff --git a/DiscImageChef.DiscImages/VMware.cs b/DiscImageChef.DiscImages/VMware.cs index 96cfc716..f0e60200 100644 --- a/DiscImageChef.DiscImages/VMware.cs +++ b/DiscImageChef.DiscImages/VMware.cs @@ -175,7 +175,7 @@ namespace DiscImageChef.DiscImages const uint MAX_CACHE_SIZE = 16777216; const uint SECTOR_SIZE = 512; - uint maxCachedSectors = MAX_CACHE_SIZE / SECTOR_SIZE; + const uint MAX_CACHED_SECTORS = MAX_CACHE_SIZE / SECTOR_SIZE; uint maxCachedGrains; ImagePlugin parentImage; @@ -189,27 +189,29 @@ namespace DiscImageChef.DiscImages { Name = "VMware disk image"; PluginUuid = new Guid("E314DE35-C103-48A3-AD36-990F68523C46"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = "VMware"; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = "VMware", + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -358,13 +360,15 @@ namespace DiscImageChef.DiscImages if(extHdrCow.magic != VMWARE_COW_MAGIC) break; - VMwareExtent newExtent = new VMwareExtent(); - newExtent.Access = "RW"; - newExtent.Filter = extentFilter; - newExtent.Filename = extentFilter.GetFilename(); - newExtent.Offset = 0; - newExtent.Sectors = extHdrCow.sectors; - newExtent.Type = "SPARSE"; + VMwareExtent newExtent = new VMwareExtent + { + Access = "RW", + Filter = extentFilter, + Filename = extentFilter.GetFilename(), + Offset = 0, + Sectors = extHdrCow.sectors, + Type = "SPARSE" + }; DicConsole.DebugWriteLine("VMware plugin", "{0} {1} {2} \"{3}\" {4}", newExtent.Access, newExtent.Sectors, newExtent.Type, newExtent.Filename, @@ -394,31 +398,21 @@ namespace DiscImageChef.DiscImages Regex regexHeads = new Regex(DDB_HEADS_REGEX); Regex regexSectors = new Regex(DDB_SECTORS_REGEX); - Match matchVersion; - Match matchCid; - Match matchParentCid; - Match matchType; - Match matchExtent; - Match matchParent; - Match matchCylinders; - Match matchHeads; - Match matchSectors; - StreamReader ddfStreamRdr = new StreamReader(ddfStream); while(ddfStreamRdr.Peek() >= 0) { string line = ddfStreamRdr.ReadLine(); - matchVersion = regexVersion.Match(line); - matchCid = regexCid.Match(line); - matchParentCid = regexParentCid.Match(line); - matchType = regexType.Match(line); - matchExtent = regexExtent.Match(line); - matchParent = regexParent.Match(line); - matchCylinders = regexCylinders.Match(line); - matchHeads = regexHeads.Match(line); - matchSectors = regexSectors.Match(line); + Match matchVersion = regexVersion.Match(line); + Match matchCid = regexCid.Match(line); + Match matchParentCid = regexParentCid.Match(line); + Match matchType = regexType.Match(line); + Match matchExtent = regexExtent.Match(line); + Match matchParent = regexParent.Match(line); + Match matchCylinders = regexCylinders.Match(line); + Match matchHeads = regexHeads.Match(line); + Match matchSectors = regexSectors.Match(line); if(matchVersion.Success) { @@ -442,8 +436,7 @@ namespace DiscImageChef.DiscImages } else if(matchExtent.Success) { - VMwareExtent newExtent = new VMwareExtent(); - newExtent.Access = matchExtent.Groups["access"].Value; + VMwareExtent newExtent = new VMwareExtent {Access = matchExtent.Groups["access"].Value}; if(!embedded) newExtent.Filter = new FiltersList() @@ -512,7 +505,7 @@ namespace DiscImageChef.DiscImages throw new ImageNotSupportedException($"Dunno how to handle \"{imageType}\" extents."); } - bool oneNoFlat = false || cowD; + bool oneNoFlat = cowD; foreach(VMwareExtent extent in extents.Values) { @@ -689,8 +682,7 @@ namespace DiscImageChef.DiscImages ImageInfo.MediaType = MediaType.GENERIC_HDD; ImageInfo.ImageSize = ImageInfo.Sectors * SECTOR_SIZE; // VMDK version 1 started on VMware 4, so there is a previous version, "COWD" - if(cowD) ImageInfo.ImageVersion = $"{version}"; - else ImageInfo.ImageVersion = $"{version + 3}"; + ImageInfo.ImageVersion = cowD ? $"{version}" : $"{version + 3}"; if(cowD) { @@ -714,9 +706,7 @@ namespace DiscImageChef.DiscImages throw new ArgumentOutOfRangeException(nameof(sectorAddress), $"Sector address {sectorAddress} not found"); - byte[] sector; - - if(sectorCache.TryGetValue(sectorAddress, out sector)) return sector; + if(sectorCache.TryGetValue(sectorAddress, out byte[] sector)) return sector; VMwareExtent currentExtent = new VMwareExtent(); bool extentFound = false; @@ -738,7 +728,7 @@ namespace DiscImageChef.DiscImages case "ZERO": sector = new byte[SECTOR_SIZE]; - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); return sector; @@ -750,7 +740,7 @@ namespace DiscImageChef.DiscImages sector = new byte[SECTOR_SIZE]; dataStream.Read(sector, 0, sector.Length); - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); return sector; @@ -767,15 +757,13 @@ namespace DiscImageChef.DiscImages { sector = new byte[SECTOR_SIZE]; - if(sectorCache.Count >= maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count >= MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); return sector; } - byte[] grain; - - if(!grainCache.TryGetValue(grainOff, out grain)) + if(!grainCache.TryGetValue(grainOff, out byte[] grain)) { grain = new byte[SECTOR_SIZE * grainSize]; dataStream = currentExtent.Filter.GetDataForkStream(); @@ -790,7 +778,7 @@ namespace DiscImageChef.DiscImages sector = new byte[SECTOR_SIZE]; Array.Copy(grain, (int)secOff, sector, 0, SECTOR_SIZE); - if(sectorCache.Count > maxCachedSectors) sectorCache.Clear(); + if(sectorCache.Count > MAX_CACHED_SECTORS) sectorCache.Clear(); sectorCache.Add(sectorAddress, sector); diff --git a/DiscImageChef.DiscImages/ZZZRawImage.cs b/DiscImageChef.DiscImages/ZZZRawImage.cs index 587a1d7b..9ef76a7b 100644 --- a/DiscImageChef.DiscImages/ZZZRawImage.cs +++ b/DiscImageChef.DiscImages/ZZZRawImage.cs @@ -52,27 +52,29 @@ namespace DiscImageChef.DiscImages Name = "Raw Disk Image"; // Non-random UUID to recognize this specific plugin PluginUuid = new Guid("12345678-AAAA-BBBB-CCCC-123456789000"); - ImageInfo = new ImageInfo(); - ImageInfo.ReadableSectorTags = new List(); - ImageInfo.ReadableMediaTags = new List(); - ImageInfo.ImageHasPartitions = false; - ImageInfo.ImageHasSessions = false; - ImageInfo.ImageVersion = null; - ImageInfo.ImageApplication = null; - ImageInfo.ImageApplicationVersion = null; - ImageInfo.ImageCreator = null; - ImageInfo.ImageComments = null; - ImageInfo.MediaManufacturer = null; - ImageInfo.MediaModel = null; - ImageInfo.MediaSerialNumber = null; - ImageInfo.MediaBarcode = null; - ImageInfo.MediaPartNumber = null; - ImageInfo.MediaSequence = 0; - ImageInfo.LastMediaSequence = 0; - ImageInfo.DriveManufacturer = null; - ImageInfo.DriveModel = null; - ImageInfo.DriveSerialNumber = null; - ImageInfo.DriveFirmwareRevision = null; + ImageInfo = new ImageInfo + { + ReadableSectorTags = new List(), + ReadableMediaTags = new List(), + ImageHasPartitions = false, + ImageHasSessions = false, + ImageVersion = null, + ImageApplication = null, + ImageApplicationVersion = null, + ImageCreator = null, + ImageComments = null, + MediaManufacturer = null, + MediaModel = null, + MediaSerialNumber = null, + MediaBarcode = null, + MediaPartNumber = null, + MediaSequence = 0, + LastMediaSequence = 0, + DriveManufacturer = null, + DriveModel = null, + DriveSerialNumber = null, + DriveFirmwareRevision = null + }; } public override bool IdentifyImage(Filter imageFilter) @@ -761,20 +763,21 @@ namespace DiscImageChef.DiscImages if(ImageInfo.XmlMediaType != XmlMediaType.OpticalDisc) throw new FeatureUnsupportedImageException("Feature not supported by image format"); - Track trk = new Track(); - trk.TrackBytesPerSector = (int)ImageInfo.SectorSize; - trk.TrackEndSector = ImageInfo.Sectors - 1; - trk.TrackFile = rawImageFilter.GetFilename(); - trk.TrackFileOffset = 0; - trk.TrackFileType = "BINARY"; - trk.TrackRawBytesPerSector = (int)ImageInfo.SectorSize; - trk.TrackSequence = 1; - trk.TrackStartSector = 0; - trk.TrackSubchannelType = TrackSubchannelType.None; - trk.TrackType = TrackType.Data; - trk.TrackSession = 1; - List lst = new List(); - lst.Add(trk); + Track trk = new Track + { + TrackBytesPerSector = (int)ImageInfo.SectorSize, + TrackEndSector = ImageInfo.Sectors - 1, + TrackFile = rawImageFilter.GetFilename(), + TrackFileOffset = 0, + TrackFileType = "BINARY", + TrackRawBytesPerSector = (int)ImageInfo.SectorSize, + TrackSequence = 1, + TrackStartSector = 0, + TrackSubchannelType = TrackSubchannelType.None, + TrackType = TrackType.Data, + TrackSession = 1 + }; + List lst = new List {trk}; return lst; } @@ -786,21 +789,22 @@ namespace DiscImageChef.DiscImages if(session.SessionSequence != 1) throw new ArgumentOutOfRangeException(nameof(session), "Only a single session is supported"); - Track trk = new Track(); - trk.TrackBytesPerSector = (int)ImageInfo.SectorSize; - trk.TrackEndSector = ImageInfo.Sectors - 1; - trk.TrackFilter = rawImageFilter; - trk.TrackFile = rawImageFilter.GetFilename(); - trk.TrackFileOffset = 0; - trk.TrackFileType = "BINARY"; - trk.TrackRawBytesPerSector = (int)ImageInfo.SectorSize; - trk.TrackSequence = 1; - trk.TrackStartSector = 0; - trk.TrackSubchannelType = TrackSubchannelType.None; - trk.TrackType = TrackType.Data; - trk.TrackSession = 1; - List lst = new List(); - lst.Add(trk); + Track trk = new Track + { + TrackBytesPerSector = (int)ImageInfo.SectorSize, + TrackEndSector = ImageInfo.Sectors - 1, + TrackFilter = rawImageFilter, + TrackFile = rawImageFilter.GetFilename(), + TrackFileOffset = 0, + TrackFileType = "BINARY", + TrackRawBytesPerSector = (int)ImageInfo.SectorSize, + TrackSequence = 1, + TrackStartSector = 0, + TrackSubchannelType = TrackSubchannelType.None, + TrackType = TrackType.Data, + TrackSession = 1 + }; + List lst = new List {trk}; return lst; } @@ -812,21 +816,22 @@ namespace DiscImageChef.DiscImages if(session != 1) throw new ArgumentOutOfRangeException(nameof(session), "Only a single session is supported"); - Track trk = new Track(); - trk.TrackBytesPerSector = (int)ImageInfo.SectorSize; - trk.TrackEndSector = ImageInfo.Sectors - 1; - trk.TrackFilter = rawImageFilter; - trk.TrackFile = rawImageFilter.GetFilename(); - trk.TrackFileOffset = 0; - trk.TrackFileType = "BINARY"; - trk.TrackRawBytesPerSector = (int)ImageInfo.SectorSize; - trk.TrackSequence = 1; - trk.TrackStartSector = 0; - trk.TrackSubchannelType = TrackSubchannelType.None; - trk.TrackType = TrackType.Data; - trk.TrackSession = 1; - List lst = new List(); - lst.Add(trk); + Track trk = new Track + { + TrackBytesPerSector = (int)ImageInfo.SectorSize, + TrackEndSector = ImageInfo.Sectors - 1, + TrackFilter = rawImageFilter, + TrackFile = rawImageFilter.GetFilename(), + TrackFileOffset = 0, + TrackFileType = "BINARY", + TrackRawBytesPerSector = (int)ImageInfo.SectorSize, + TrackSequence = 1, + TrackStartSector = 0, + TrackSubchannelType = TrackSubchannelType.None, + TrackType = TrackType.Data, + TrackSession = 1 + }; + List lst = new List {trk}; return lst; } @@ -835,14 +840,15 @@ namespace DiscImageChef.DiscImages if(ImageInfo.XmlMediaType != XmlMediaType.OpticalDisc) throw new FeatureUnsupportedImageException("Feature not supported by image format"); - Session sess = new Session(); - sess.EndSector = ImageInfo.Sectors - 1; - sess.EndTrack = 1; - sess.SessionSequence = 1; - sess.StartSector = 0; - sess.StartTrack = 1; - List lst = new List(); - lst.Add(sess); + Session sess = new Session + { + EndSector = ImageInfo.Sectors - 1, + EndTrack = 1, + SessionSequence = 1, + StartSector = 0, + StartTrack = 1 + }; + List lst = new List {sess}; return lst; }