From fda7fee90c1f5ae7328e8004e048115938f808b6 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 5 Oct 2015 19:58:42 +0100 Subject: [PATCH] Move partitions plugins to a separate library. --- ChangeLog | 5 ++ .../AppleMap.cs | 4 +- .../Atari.cs | 10 +-- DiscImageChef.Partitions/ChangeLog | 12 ++++ .../DiscImageChef.Partitions.csproj | 64 +++++++++++++++++++ .../MBR.cs | 2 +- .../NeXT.cs | 2 +- .../PartPlugin.cs | 0 .../Properties/AssemblyInfo.cs | 27 ++++++++ .../RDB.cs | 36 +++++------ DiscImageChef.sln | 6 ++ DiscImageChef/ChangeLog | 12 ++++ DiscImageChef/DiscImageChef.csproj | 10 ++- DiscImageChef/Plugins.cs | 28 ++++++-- 14 files changed, 178 insertions(+), 40 deletions(-) rename {DiscImageChef/PartPlugins => DiscImageChef.Partitions}/AppleMap.cs (99%) rename {DiscImageChef/PartPlugins => DiscImageChef.Partitions}/Atari.cs (98%) create mode 100644 DiscImageChef.Partitions/ChangeLog create mode 100644 DiscImageChef.Partitions/DiscImageChef.Partitions.csproj rename {DiscImageChef/PartPlugins => DiscImageChef.Partitions}/MBR.cs (99%) rename {DiscImageChef/PartPlugins => DiscImageChef.Partitions}/NeXT.cs (99%) rename {DiscImageChef/PartPlugins => DiscImageChef.Partitions}/PartPlugin.cs (100%) create mode 100644 DiscImageChef.Partitions/Properties/AssemblyInfo.cs rename {DiscImageChef/PartPlugins => DiscImageChef.Partitions}/RDB.cs (98%) diff --git a/ChangeLog b/ChangeLog index a6bdac49f..49e4f3702 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-10-05 Natalia Portillo + + * DiscImageChef.sln: + Move partitions plugins to a separate library. + 2015-10-05 Natalia Portillo * DiscImageChef.sln: diff --git a/DiscImageChef/PartPlugins/AppleMap.cs b/DiscImageChef.Partitions/AppleMap.cs similarity index 99% rename from DiscImageChef/PartPlugins/AppleMap.cs rename to DiscImageChef.Partitions/AppleMap.cs index 56eacd640..80daecacf 100644 --- a/DiscImageChef/PartPlugins/AppleMap.cs +++ b/DiscImageChef.Partitions/AppleMap.cs @@ -54,7 +54,7 @@ namespace DiscImageChef.PartPlugins // "TS", old entry magic const UInt16 APM_OLDENT = 0x5453; - public AppleMap(PluginBase Core) + public AppleMap() { Name = "Apple Partition Map"; PluginUUID = new Guid("36405F8D-4F1A-07F5-209C-223D735D6D22"); @@ -106,7 +106,7 @@ namespace DiscImageChef.PartPlugins { sector_size = 512; APMFromHDDOnCD = true; - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Apple Partition Map Plugin): PM sector size is 512 bytes, but device's 2048"); } else diff --git a/DiscImageChef/PartPlugins/Atari.cs b/DiscImageChef.Partitions/Atari.cs similarity index 98% rename from DiscImageChef/PartPlugins/Atari.cs rename to DiscImageChef.Partitions/Atari.cs index c633bfb47..a3155978e 100644 --- a/DiscImageChef/PartPlugins/Atari.cs +++ b/DiscImageChef.Partitions/Atari.cs @@ -55,7 +55,7 @@ namespace DiscImageChef.PartPlugins const UInt32 TypeNetBSD = 0x004E4244; const UInt32 TypeNetBSDSwap = 0x004E4253; - public AtariPartitions(PluginBase Core) + public AtariPartitions() { Name = "Atari partitions"; PluginUUID = new Guid("d1dd0f24-ec39-4c4d-9072-be31919a3b5e"); @@ -102,7 +102,7 @@ namespace DiscImageChef.PartPlugins table.badLength = BigEndianBitConverter.ToUInt32(sector, 506); table.checksum = BigEndianBitConverter.ToUInt16(sector, 510); - if (MainClass.isDebug) + //if (MainClass.isDebug) { Checksums.SHA1Context sha1Ctx = new Checksums.SHA1Context(); sha1Ctx.Init(); @@ -145,7 +145,7 @@ namespace DiscImageChef.PartPlugins if (table.entries[i].start <= imagePlugin.GetSectors()) { - if (MainClass.isDebug) + //if (MainClass.isDebug) { if ((table.entries[i].start + table.entries[i].length) > imagePlugin.GetSectors()) Console.WriteLine("DEBUG (Atari plugin): WARNING: End of partition goes beyond device size"); @@ -225,7 +225,7 @@ namespace DiscImageChef.PartPlugins validTable = true; if (extendedTable.entries[j].start <= imagePlugin.GetSectors()) { - if (MainClass.isDebug) + //if (MainClass.isDebug) { if ((extendedTable.entries[j].start + extendedTable.entries[j].length) > imagePlugin.GetSectors()) Console.WriteLine("DEBUG (Atari plugin): WARNING: End of partition goes beyond device size"); @@ -296,7 +296,7 @@ namespace DiscImageChef.PartPlugins { if (table.icdEntries[i].start <= imagePlugin.GetSectors()) { - if (MainClass.isDebug) + //if (MainClass.isDebug) { if ((table.icdEntries[i].start + table.icdEntries[i].length) > imagePlugin.GetSectors()) Console.WriteLine("DEBUG (Atari plugin): WARNING: End of partition goes beyond device size"); diff --git a/DiscImageChef.Partitions/ChangeLog b/DiscImageChef.Partitions/ChangeLog new file mode 100644 index 000000000..951edde6b --- /dev/null +++ b/DiscImageChef.Partitions/ChangeLog @@ -0,0 +1,12 @@ +2015-10-05 Natalia Portillo + + * MBR.cs: + * RDB.cs: + * NeXT.cs: + * Atari.cs: + * AppleMap.cs: + * PartPlugin.cs: + * Properties/AssemblyInfo.cs: + * DiscImageChef.Partitions.csproj: + Move partitions plugins to a separate library. + diff --git a/DiscImageChef.Partitions/DiscImageChef.Partitions.csproj b/DiscImageChef.Partitions/DiscImageChef.Partitions.csproj new file mode 100644 index 000000000..139b80a1a --- /dev/null +++ b/DiscImageChef.Partitions/DiscImageChef.Partitions.csproj @@ -0,0 +1,64 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {DA7AB65D-B5BA-4003-8893-A51BB071BA2F} + Library + DiscImageChef.Partitions + DiscImageChef.Partitions + 2.2 + v3.5 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + + + full + true + bin\Release + prompt + 4 + false + + + + + + + + + + + + + + + + + {F2B84194-26EB-4227-B1C5-6602517E85AE} + DiscImageChef.CommonTypes + + + {F8BDF57B-1571-4CD0-84B3-B422088D359A} + DiscImageChef.Helpers + + + {74032CBC-339B-42F3-AF6F-E96C261F3E6A} + DiscImageChef.DiscImages + + + {CC48B324-A532-4A45-87A6-6F91F7141E8D} + DiscImageChef.Checksums + + + \ No newline at end of file diff --git a/DiscImageChef/PartPlugins/MBR.cs b/DiscImageChef.Partitions/MBR.cs similarity index 99% rename from DiscImageChef/PartPlugins/MBR.cs rename to DiscImageChef.Partitions/MBR.cs index c46987553..060a70424 100644 --- a/DiscImageChef/PartPlugins/MBR.cs +++ b/DiscImageChef.Partitions/MBR.cs @@ -47,7 +47,7 @@ namespace DiscImageChef.PartPlugins { const UInt16 MBRSignature = 0xAA55; - public MBR(PluginBase Core) + public MBR() { Name = "Master Boot Record"; PluginUUID = new Guid("5E8A34E8-4F1A-59E6-4BF7-7EA647063A76"); diff --git a/DiscImageChef/PartPlugins/NeXT.cs b/DiscImageChef.Partitions/NeXT.cs similarity index 99% rename from DiscImageChef/PartPlugins/NeXT.cs rename to DiscImageChef.Partitions/NeXT.cs index 4d3f3ca0e..b8d1d0f04 100644 --- a/DiscImageChef/PartPlugins/NeXT.cs +++ b/DiscImageChef.Partitions/NeXT.cs @@ -56,7 +56,7 @@ namespace DiscImageChef.PartPlugins // 180 const UInt16 disktabEntrySize = 0x2C; // 44 - public NeXTDisklabel(PluginBase Core) + public NeXTDisklabel() { Name = "NeXT Disklabel"; PluginUUID = new Guid("246A6D93-4F1A-1F8A-344D-50187A5513A9"); diff --git a/DiscImageChef/PartPlugins/PartPlugin.cs b/DiscImageChef.Partitions/PartPlugin.cs similarity index 100% rename from DiscImageChef/PartPlugins/PartPlugin.cs rename to DiscImageChef.Partitions/PartPlugin.cs diff --git a/DiscImageChef.Partitions/Properties/AssemblyInfo.cs b/DiscImageChef.Partitions/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..7fabc2136 --- /dev/null +++ b/DiscImageChef.Partitions/Properties/AssemblyInfo.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("DiscImageChef.Partitions")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Claunia.com")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("© Claunia.com")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/DiscImageChef/PartPlugins/RDB.cs b/DiscImageChef.Partitions/RDB.cs similarity index 98% rename from DiscImageChef/PartPlugins/RDB.cs rename to DiscImageChef.Partitions/RDB.cs index fc04ba566..acb188696 100644 --- a/DiscImageChef/PartPlugins/RDB.cs +++ b/DiscImageChef.Partitions/RDB.cs @@ -271,7 +271,7 @@ namespace DiscImageChef.PartPlugins /// const UInt32 FlagsNoAutomount = 0x00000002; - public AmigaRigidDiskBlock(PluginBase Core) + public AmigaRigidDiskBlock() { Name = "Amiga Rigid Disk Block"; PluginUUID = new Guid("8D72ED97-1854-4170-9CE4-6E8446FD9863"); @@ -904,12 +904,12 @@ namespace DiscImageChef.PartPlugins byte[] tmpSector = imagePlugin.ReadSector(RDBBlock); UInt32 magic = BigEndianBitConverter.ToUInt32(tmpSector, 0); - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Possible magic at block {0} is 0x{1:X8}", RDBBlock, magic); if (magic == RigidDiskBlockMagic) { - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Found RDB magic at block {0}", RDBBlock); foundRDB = true; @@ -1001,7 +1001,7 @@ namespace DiscImageChef.PartPlugins RDB.reserved24 = BigEndianBitConverter.ToUInt32(sector, 0xF8); RDB.reserved25 = BigEndianBitConverter.ToUInt32(sector, 0xFC); - if (MainClass.isDebug) + //if (MainClass.isDebug) { Console.WriteLine("DEBUG (Amiga RDB plugin): RDB.magic = 0x{0:X8}", RDB.magic); Console.WriteLine("DEBUG (Amiga RDB plugin): RDB.size = {0} longs, {1} bytes", RDB.size, RDB.size * 4); @@ -1067,7 +1067,7 @@ namespace DiscImageChef.PartPlugins nextBlock = RDB.badblock_ptr; while (nextBlock != 0xFFFFFFFF) { - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Going to block {0} in search of a BadBlock block", nextBlock); sector = imagePlugin.ReadSector(nextBlock); @@ -1076,7 +1076,7 @@ namespace DiscImageChef.PartPlugins if (magic != BadBlockListMagic) break; - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Found BadBlock block"); BadBlockList chainEntry = new BadBlockList(); @@ -1090,7 +1090,7 @@ namespace DiscImageChef.PartPlugins ulong entries = (chainEntry.size - 6) / 2; chainEntry.blockPairs = new BadBlockEntry[entries]; - if (MainClass.isDebug) + //if (MainClass.isDebug) { Console.WriteLine("DEBUG (Amiga RDB plugin): chainEntry.magic = 0x{0:X8}", chainEntry.magic); Console.WriteLine("DEBUG (Amiga RDB plugin): chainEntry.size = {0} longs, {1} bytes", chainEntry.size, chainEntry.size * 4); @@ -1105,7 +1105,7 @@ namespace DiscImageChef.PartPlugins chainEntry.blockPairs[i].badBlock = BigEndianBitConverter.ToUInt32(sector, (int)(0x18 + i * 8 + 0)); chainEntry.blockPairs[i].goodBlock = BigEndianBitConverter.ToUInt32(sector, (int)(0x18 + i * 8 + 4)); - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Bad block at {0} replaced with good block at {1}", chainEntry.blockPairs[i].badBlock, chainEntry.blockPairs[i].goodBlock); } @@ -1119,7 +1119,7 @@ namespace DiscImageChef.PartPlugins nextBlock = RDB.partition_ptr; while (nextBlock != 0xFFFFFFFF) { - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Going to block {0} in search of a PartitionEntry block", nextBlock); sector = imagePlugin.ReadSector(nextBlock); @@ -1128,7 +1128,7 @@ namespace DiscImageChef.PartPlugins if (magic != PartitionBlockMagic) break; - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Found PartitionEntry block"); PartitionEntry partEntry = new PartitionEntry(); @@ -1183,7 +1183,7 @@ namespace DiscImageChef.PartPlugins partEntry.dosEnvVec.control = BigEndianBitConverter.ToUInt32(sector, 0xC8); partEntry.dosEnvVec.bootBlocks = BigEndianBitConverter.ToUInt32(sector, 0xCC); - if (MainClass.isDebug) + //if (MainClass.isDebug) { Console.WriteLine("DEBUG (Amiga RDB plugin): partEntry.magic = 0x{0:X8}", partEntry.magic); Console.WriteLine("DEBUG (Amiga RDB plugin): partEntry.size = {0} longs, {1} bytes", partEntry.size, partEntry.size * 4); @@ -1245,7 +1245,7 @@ namespace DiscImageChef.PartPlugins nextBlock = RDB.fsheader_ptr; while (nextBlock != 0xFFFFFFFF) { - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Going to block {0} in search of a FileSystemHeader block", nextBlock); sector = imagePlugin.ReadSector(nextBlock); @@ -1254,7 +1254,7 @@ namespace DiscImageChef.PartPlugins if (magic != FilesystemHeaderMagic) break; - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Found FileSystemHeader block"); FileSystemHeader FSHD = new FileSystemHeader(); @@ -1282,7 +1282,7 @@ namespace DiscImageChef.PartPlugins FSHD.dnode.seglist_ptr = BigEndianBitConverter.ToUInt32(sector, 0x48); FSHD.dnode.global_vec = BigEndianBitConverter.ToUInt32(sector, 0x4C); - if (MainClass.isDebug) + //if (MainClass.isDebug) { Console.WriteLine("DEBUG (Amiga RDB plugin): FSHD.magic = 0x{0:X8}", FSHD.magic); Console.WriteLine("DEBUG (Amiga RDB plugin): FSHD.size = {0} longs, {1} bytes", FSHD.size, FSHD.size * 4); @@ -1313,7 +1313,7 @@ namespace DiscImageChef.PartPlugins sha1Ctx.Init(); while (nextBlock != 0xFFFFFFFF) { - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Going to block {0} in search of a LoadSegment block", nextBlock); sector = imagePlugin.ReadSector(nextBlock); @@ -1322,7 +1322,7 @@ namespace DiscImageChef.PartPlugins if (magicSeg != LoadSegMagic) break; - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): Found LoadSegment block"); thereAreLoadSegments = true; @@ -1335,7 +1335,7 @@ namespace DiscImageChef.PartPlugins loadSeg.loadData = new byte[(loadSeg.size - 5) * 4]; Array.Copy(sector, 0x14, loadSeg.loadData, 0, (loadSeg.size - 5) * 4); - if (MainClass.isDebug) + //if (MainClass.isDebug) { Console.WriteLine("DEBUG (Amiga RDB plugin): loadSeg.magic = 0x{0:X8}", loadSeg.magic); Console.WriteLine("DEBUG (Amiga RDB plugin): loadSeg.size = {0} longs, {1} bytes", loadSeg.size, loadSeg.size * 4); @@ -1352,7 +1352,7 @@ namespace DiscImageChef.PartPlugins if (thereAreLoadSegments) { string loadSegSHA1 = sha1Ctx.End(); - if (MainClass.isDebug) + //if (MainClass.isDebug) Console.WriteLine("DEBUG (Amiga RDB plugin): LoadSegment data SHA1: {0}", loadSegSHA1); } diff --git a/DiscImageChef.sln b/DiscImageChef.sln index 8a12104f2..e6b6e950d 100644 --- a/DiscImageChef.sln +++ b/DiscImageChef.sln @@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.DiscImages", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.CommonTypes", "DiscImageChef.CommonTypes\DiscImageChef.CommonTypes.csproj", "{F2B84194-26EB-4227-B1C5-6602517E85AE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiscImageChef.Partitions", "DiscImageChef.Partitions\DiscImageChef.Partitions.csproj", "{DA7AB65D-B5BA-4003-8893-A51BB071BA2F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 @@ -39,6 +41,10 @@ Global {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Debug|x86.Build.0 = Debug|Any CPU {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Release|x86.ActiveCfg = Release|Any CPU {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Release|x86.Build.0 = Release|Any CPU + {DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Debug|x86.ActiveCfg = Debug|Any CPU + {DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Debug|x86.Build.0 = Debug|Any CPU + {DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Release|x86.ActiveCfg = Release|Any CPU + {DA7AB65D-B5BA-4003-8893-A51BB071BA2F}.Release|x86.Build.0 = Release|Any CPU {F2B84194-26EB-4227-B1C5-6602517E85AE}.Debug|x86.ActiveCfg = Debug|Any CPU {F2B84194-26EB-4227-B1C5-6602517E85AE}.Debug|x86.Build.0 = Debug|Any CPU {F2B84194-26EB-4227-B1C5-6602517E85AE}.Release|x86.ActiveCfg = Release|Any CPU diff --git a/DiscImageChef/ChangeLog b/DiscImageChef/ChangeLog index 28f42a249..faf1e3ca4 100644 --- a/DiscImageChef/ChangeLog +++ b/DiscImageChef/ChangeLog @@ -1,3 +1,15 @@ +2015-10-05 Natalia Portillo + + * Plugins.cs: + * PartPlugins/MBR.cs: + * PartPlugins/RDB.cs: + * PartPlugins/NeXT.cs: + * DiscImageChef.csproj: + * PartPlugins/Atari.cs: + * PartPlugins/AppleMap.cs: + * PartPlugins/PartPlugin.cs: + Move partitions plugins to a separate library. + 2015-10-05 Natalia Portillo * Plugins.cs: diff --git a/DiscImageChef/DiscImageChef.csproj b/DiscImageChef/DiscImageChef.csproj index 53fecdb6f..20592cd5e 100644 --- a/DiscImageChef/DiscImageChef.csproj +++ b/DiscImageChef/DiscImageChef.csproj @@ -47,12 +47,8 @@ - - - - @@ -80,9 +76,7 @@ - - @@ -199,5 +193,9 @@ {F2B84194-26EB-4227-B1C5-6602517E85AE} DiscImageChef.CommonTypes + + {DA7AB65D-B5BA-4003-8893-A51BB071BA2F} + DiscImageChef.Partitions + \ No newline at end of file diff --git a/DiscImageChef/Plugins.cs b/DiscImageChef/Plugins.cs index ae6f62f40..3a573503a 100644 --- a/DiscImageChef/Plugins.cs +++ b/DiscImageChef/Plugins.cs @@ -60,7 +60,9 @@ namespace DiscImageChef public void RegisterAllPlugins() { - Assembly assembly = Assembly.GetAssembly(typeof(ImagePlugin)); + Assembly assembly; + + assembly = Assembly.GetAssembly(typeof(ImagePlugin)); foreach (Type type in assembly.GetTypes()) { @@ -78,6 +80,24 @@ namespace DiscImageChef } } + assembly = Assembly.GetAssembly(typeof(PartPlugin)); + + foreach (Type type in assembly.GetTypes()) + { + try + { + if (type.IsSubclassOf(typeof(PartPlugin))) + { + PartPlugin plugin = (PartPlugin)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }); + RegisterPartPlugin(plugin); + } + } + catch (Exception exception) + { + Console.WriteLine(exception); + } + } + assembly = Assembly.GetExecutingAssembly(); foreach (Type type in assembly.GetTypes()) @@ -89,12 +109,6 @@ namespace DiscImageChef Plugin plugin = (Plugin)type.GetConstructor(new [] { typeof(PluginBase) }).Invoke(new object[] { this }); RegisterPlugin(plugin); } - else if (type.IsSubclassOf(typeof(PartPlugin))) - { - PartPlugin partplugin = (PartPlugin)type.GetConstructor(new [] { typeof(PluginBase) }).Invoke(new object[] { this }); - RegisterPartPlugin(partplugin); - } - } catch (Exception exception) {