diff --git a/SabreTools.Library/DatFiles/ClrMamePro.cs b/SabreTools.Library/DatFiles/ClrMamePro.cs index 98a9d037..ffba3774 100644 --- a/SabreTools.Library/DatFiles/ClrMamePro.cs +++ b/SabreTools.Library/DatFiles/ClrMamePro.cs @@ -565,31 +565,11 @@ namespace SabreTools.Library.DatFiles if (!string.IsNullOrWhiteSpace(Header.Comment)) cmpw.WriteStandalone("comment", Header.Comment); - switch (Header.ForcePacking) - { - case PackingFlag.Unzip: - cmpw.WriteStandalone("forcezipping", "no", false); - break; - case PackingFlag.Zip: - cmpw.WriteStandalone("forcezipping", "yes", false); - break; - } + if (Header.ForcePacking != PackingFlag.None) + cmpw.WriteStandalone("forcezipping", Header.ForcePacking.FromPackingFlag(true), false); - switch (Header.ForceMerging) - { - case MergingFlag.Full: - cmpw.WriteStandalone("forcemerging", "full", false); - break; - case MergingFlag.Split: - cmpw.WriteStandalone("forcemerging", "split", false); - break; - case MergingFlag.Merged: - cmpw.WriteStandalone("forcemerging", "merged", false); - break; - case MergingFlag.NonMerged: - cmpw.WriteStandalone("forcemerging", "nonmerged", false); - break; - } + if (Header.ForceMerging != MergingFlag.None) + cmpw.WriteStandalone("forcemerging", Header.ForceMerging.FromMergingFlag(false), false); // End clrmamepro cmpw.WriteEndElement(); diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index 4996f93d..20eb3b02 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -1011,8 +1011,8 @@ namespace SabreTools.Library.DatFiles MachineDescriptionToName(); // If we are using tags from the DAT, set the proper input for split type unless overridden - if (useTags && filter.InternalSplit == SplitType.None) - filter.InternalSplit = Header.ForceMerging.AsSplitType(); + if (useTags && filter.InternalSplit == MergingFlag.None) + filter.InternalSplit = Header.ForceMerging; // Run internal splitting ProcessSplitType(filter.InternalSplit); @@ -1344,30 +1344,30 @@ namespace SabreTools.Library.DatFiles #region Internal Splitting/Merging /// - /// Process items according to SplitType + /// Process items according to split type /// - /// SplitType to implement - public void ProcessSplitType(SplitType splitType) + /// MergingFlag to implement + public void ProcessSplitType(MergingFlag splitType) { // Now we pre-process the DAT with the splitting/merging mode switch (splitType) { - case SplitType.None: + case MergingFlag.None: // No-op break; - case SplitType.DeviceNonMerged: + case MergingFlag.Device: CreateDeviceNonMergedSets(DedupeType.None); break; - case SplitType.FullNonMerged: + case MergingFlag.Full: CreateFullyNonMergedSets(DedupeType.None); break; - case SplitType.NonMerged: + case MergingFlag.NonMerged: CreateNonMergedSets(DedupeType.None); break; - case SplitType.Merged: + case MergingFlag.Merged: CreateMergedSets(DedupeType.None); break; - case SplitType.Split: + case MergingFlag.Split: CreateSplitSets(DedupeType.None); break; } diff --git a/SabreTools.Library/DatFiles/Enums.cs b/SabreTools.Library/DatFiles/Enums.cs index b4f4e2ea..60111ec5 100644 --- a/SabreTools.Library/DatFiles/Enums.cs +++ b/SabreTools.Library/DatFiles/Enums.cs @@ -213,6 +213,7 @@ namespace SabreTools.Library.DatFiles Merged, NonMerged, Full, + Device, // This is not usually defined for Merging flags } /// @@ -246,19 +247,6 @@ namespace SabreTools.Library.DatFiles File, } - /// - /// Determines how a DAT will be split internally - /// - public enum SplitType - { - None = 0, - NonMerged, - Merged, - FullNonMerged, - Split, - DeviceNonMerged - } - /// /// Determines what sort of files get externally hashed /// diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index 6a0d8592..52b585f7 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -1034,18 +1034,7 @@ namespace SabreTools.Library.DatFiles if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical)) xtw.WriteAttributeString("ismechanical", "yes"); - switch (datItem.Machine.Runnable) - { - case Runnable.No: - xtw.WriteAttributeString("runnable", "no"); - break; - case Runnable.Partial: - xtw.WriteAttributeString("runnable", "partial"); - break; - case Runnable.Yes: - xtw.WriteAttributeString("runnable", "yes"); - break; - } + xtw.WriteOptionalAttributeString("runnable", datItem.Machine.Runnable.FromRunnable()); if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase)) xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf); @@ -1150,7 +1139,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("region", disk.Region); xtw.WriteOptionalAttributeString("index", disk.Index); xtw.WriteOptionalAttributeString("writable", disk.Writable.FromYesNo()); - if (disk.ItemStatus != ItemStatus.None) xtw.WriteAttributeString("status", disk.ItemStatus.ToString()); + xtw.WriteOptionalAttributeString("status", disk.ItemStatus.FromItemStatus(false)); xtw.WriteOptionalAttributeString("optional", disk.Optional.FromYesNo()); xtw.WriteEndElement(); break; @@ -1173,7 +1162,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("merge", rom.MergeTag); xtw.WriteOptionalAttributeString("region", rom.Region); xtw.WriteOptionalAttributeString("offset", rom.Offset); - if (rom.ItemStatus != ItemStatus.None) xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant()); + xtw.WriteOptionalAttributeString("status", rom.ItemStatus.FromItemStatus(false)); xtw.WriteOptionalAttributeString("optional", rom.Optional.FromYesNo()); xtw.WriteEndElement(); break; diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs index 4576b351..9ace3bc1 100644 --- a/SabreTools.Library/DatFiles/Logiqx.cs +++ b/SabreTools.Library/DatFiles/Logiqx.cs @@ -785,45 +785,10 @@ namespace SabreTools.Library.DatFiles || !string.IsNullOrWhiteSpace(Header.HeaderSkipper)) { xtw.WriteStartElement("clrmamepro"); - switch (Header.ForcePacking) - { - case PackingFlag.Unzip: - xtw.WriteAttributeString("forcepacking", "unzip"); - break; - case PackingFlag.Zip: - xtw.WriteAttributeString("forcepacking", "zip"); - break; - } - - switch (Header.ForceMerging) - { - case MergingFlag.Full: - xtw.WriteAttributeString("forcemerging", "full"); - break; - case MergingFlag.Split: - xtw.WriteAttributeString("forcemerging", "split"); - break; - case MergingFlag.Merged: - xtw.WriteAttributeString("forcemerging", "merged"); - break; - case MergingFlag.NonMerged: - xtw.WriteAttributeString("forcemerging", "nonmerged"); - break; - } - - switch (Header.ForceNodump) - { - case NodumpFlag.Ignore: - xtw.WriteAttributeString("forcenodump", "ignore"); - break; - case NodumpFlag.Obsolete: - xtw.WriteAttributeString("forcenodump", "obsolete"); - break; - case NodumpFlag.Required: - xtw.WriteAttributeString("forcenodump", "required"); - break; - } + xtw.WriteOptionalAttributeString("forcepacking", Header.ForcePacking.FromPackingFlag(false)); + xtw.WriteOptionalAttributeString("forcemerging", Header.ForceMerging.FromMergingFlag(false)); + xtw.WriteOptionalAttributeString("forcenodump", Header.ForceNodump.FromNodumpFlag()); xtw.WriteOptionalAttributeString("header", Header.HeaderSkipper); // End clrmamepro @@ -838,43 +803,9 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartElement("romcenter"); xtw.WriteOptionalAttributeString("plugin", Header.System); - - switch (Header.RomMode) - { - case MergingFlag.Split: - xtw.WriteAttributeString("rommode", "split"); - break; - case MergingFlag.Merged: - xtw.WriteAttributeString("rommode", "merged"); - break; - case MergingFlag.NonMerged: - xtw.WriteAttributeString("rommode", "unmerged"); - break; - } - - switch (Header.BiosMode) - { - case MergingFlag.Split: - xtw.WriteAttributeString("biosmode", "split"); - break; - case MergingFlag.Merged: - xtw.WriteAttributeString("biosmode", "merged"); - break; - case MergingFlag.NonMerged: - xtw.WriteAttributeString("biosmode", "unmerged"); - break; - } - - switch (Header.SampleMode) - { - case MergingFlag.Merged: - xtw.WriteAttributeString("samplemode", "merged"); - break; - case MergingFlag.NonMerged: - xtw.WriteAttributeString("samplemode", "unmerged"); - break; - } - + xtw.WriteOptionalAttributeString("rommode", Header.RomMode.FromMergingFlag(true)); + xtw.WriteOptionalAttributeString("biosmode", Header.BiosMode.FromMergingFlag(true)); + xtw.WriteOptionalAttributeString("samplemode", Header.SampleMode.FromMergingFlag(true)); xtw.WriteOptionalAttributeString("lockrommode", Header.LockRomMode.FromYesNo()); xtw.WriteOptionalAttributeString("lockbiosmode", Header.LockBiosMode.FromYesNo()); xtw.WriteOptionalAttributeString("locksamplemode", Header.LockSampleMode.FromYesNo()); @@ -921,21 +852,7 @@ namespace SabreTools.Library.DatFiles if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical)) xtw.WriteAttributeString("ismechanical", "yes"); - if (datItem.Machine.Runnable != Runnable.NULL) - { - switch (datItem.Machine.Runnable) - { - case Runnable.No: - xtw.WriteAttributeString("runnable", "no"); - break; - case Runnable.Partial: - xtw.WriteAttributeString("runnable", "partial"); - break; - case Runnable.Yes: - xtw.WriteAttributeString("runnable", "yes"); - break; - } - } + xtw.WriteOptionalAttributeString("runnable", datItem.Machine.Runnable.FromRunnable()); if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase)) xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf); @@ -1065,7 +982,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("sha256", disk.SHA256?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha384", disk.SHA384?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha512", disk.SHA512?.ToLowerInvariant()); - if (disk.ItemStatus != ItemStatus.None) xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant()); + xtw.WriteOptionalAttributeString("status", disk.ItemStatus.FromItemStatus(false)); xtw.WriteEndElement(); break; @@ -1095,7 +1012,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("sha384", rom.SHA384?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("date", rom.Date); - if (rom.ItemStatus != ItemStatus.None) xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant()); + xtw.WriteOptionalAttributeString("status", rom.ItemStatus.FromItemStatus(false)); xtw.WriteOptionalAttributeString("inverted", rom.Inverted.FromYesNo()); xtw.WriteEndElement(); break; diff --git a/SabreTools.Library/DatFiles/OpenMSX.cs b/SabreTools.Library/DatFiles/OpenMSX.cs index b2d6ec3b..25620f4f 100644 --- a/SabreTools.Library/DatFiles/OpenMSX.cs +++ b/SabreTools.Library/DatFiles/OpenMSX.cs @@ -739,7 +739,7 @@ namespace SabreTools.Library.DatFiles // Default to Rom for converting from other formats case OpenMSXSubType.Rom: case OpenMSXSubType.NULL: - xtw.WriteStartElement("rom"); + xtw.WriteStartElement(datItem.OpenMSXSubType.FromOpenMSXSubType()); xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant()); xtw.WriteOptionalElementString("start", rom.Offset); xtw.WriteOptionalElementString("type", rom.OpenMSXType); @@ -748,7 +748,7 @@ namespace SabreTools.Library.DatFiles break; case OpenMSXSubType.MegaRom: - xtw.WriteStartElement("megarom"); + xtw.WriteStartElement(datItem.OpenMSXSubType.FromOpenMSXSubType()); xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant()); xtw.WriteOptionalElementString("start", rom.Offset); xtw.WriteOptionalElementString("type", rom.OpenMSXType); @@ -757,7 +757,7 @@ namespace SabreTools.Library.DatFiles break; case OpenMSXSubType.SCCPlusCart: - xtw.WriteStartElement("sccpluscart"); + xtw.WriteStartElement(datItem.OpenMSXSubType.FromOpenMSXSubType()); xtw.WriteOptionalElementString("boot", rom.Boot); xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant()); xtw.WriteOptionalElementString("remark", rom.Remark); diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index 1ed83c2a..f89acb4f 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -686,70 +686,28 @@ namespace SabreTools.Library.DatFiles xtw.WriteEndElement(); } - switch (Header.ForcePacking) + if (Header.ForcePacking != PackingFlag.None) { - case PackingFlag.Unzip: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcepacking"); - xtw.WriteAttributeString("value", "unzip"); - xtw.WriteEndElement(); - break; - case PackingFlag.Zip: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcepacking"); - xtw.WriteAttributeString("value", "zip"); - xtw.WriteEndElement(); - break; + xtw.WriteStartElement("flag"); + xtw.WriteAttributeString("name", "forcepacking"); + xtw.WriteOptionalAttributeString("value", Header.ForcePacking.FromPackingFlag(false)); + xtw.WriteEndElement(); } - switch (Header.ForceMerging) + if (Header.ForceMerging != MergingFlag.None) { - case MergingFlag.Full: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcemerging"); - xtw.WriteAttributeString("value", "full"); - xtw.WriteEndElement(); - break; - case MergingFlag.Split: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcemerging"); - xtw.WriteAttributeString("value", "split"); - xtw.WriteEndElement(); - break; - case MergingFlag.Merged: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcemerging"); - xtw.WriteAttributeString("value", "merged"); - xtw.WriteEndElement(); - break; - case MergingFlag.NonMerged: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcemerging"); - xtw.WriteAttributeString("value", "nonmerged"); - xtw.WriteEndElement(); - break; + xtw.WriteStartElement("flag"); + xtw.WriteAttributeString("name", "forcemerging"); + xtw.WriteAttributeString("value", Header.ForceMerging.FromMergingFlag(false)); + xtw.WriteEndElement(); } - switch (Header.ForceNodump) + if (Header.ForceNodump != NodumpFlag.None) { - case NodumpFlag.Ignore: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcenodump"); - xtw.WriteAttributeString("value", "ignore"); - xtw.WriteEndElement(); - break; - case NodumpFlag.Obsolete: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcenodump"); - xtw.WriteAttributeString("value", "obsolete"); - xtw.WriteEndElement(); - break; - case NodumpFlag.Required: - xtw.WriteStartElement("flag"); - xtw.WriteAttributeString("name", "forcenodump"); - xtw.WriteAttributeString("value", "required"); - xtw.WriteEndElement(); - break; + xtw.WriteStartElement("flag"); + xtw.WriteAttributeString("name", "forcenodump"); + xtw.WriteAttributeString("value", Header.ForceNodump.FromNodumpFlag()); + xtw.WriteEndElement(); } // End flags @@ -916,7 +874,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartElement("flag"); xtw.WriteAttributeString("name", "status"); - xtw.WriteAttributeString("value", disk.ItemStatus.ToString().ToLowerInvariant()); + xtw.WriteAttributeString("value", disk.ItemStatus.FromItemStatus(false)); xtw.WriteEndElement(); // End flags @@ -959,7 +917,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartElement("flag"); xtw.WriteAttributeString("name", "status"); - xtw.WriteAttributeString("value", rom.ItemStatus.ToString().ToLowerInvariant()); + xtw.WriteAttributeString("value", rom.ItemStatus.FromItemStatus(false)); xtw.WriteEndElement(); // End flags diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index e5f8ac73..8b020b57 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -736,45 +736,9 @@ namespace SabreTools.Library.DatFiles xtw.WriteStartElement("softwarelist"); xtw.WriteRequiredAttributeString("name", Header.Name); xtw.WriteRequiredAttributeString("description", Header.Description); - - switch (Header.ForcePacking) - { - case PackingFlag.Unzip: - xtw.WriteAttributeString("forcepacking", "unzip"); - break; - case PackingFlag.Zip: - xtw.WriteAttributeString("forcepacking", "zip"); - break; - } - - switch (Header.ForceMerging) - { - case MergingFlag.Full: - xtw.WriteAttributeString("forcemerging", "full"); - break; - case MergingFlag.Split: - xtw.WriteAttributeString("forcemerging", "split"); - break; - case MergingFlag.Merged: - xtw.WriteAttributeString("forcemerging", "merged"); - break; - case MergingFlag.NonMerged: - xtw.WriteAttributeString("forcemerging", "nonmerged"); - break; - } - - switch (Header.ForceNodump) - { - case NodumpFlag.Ignore: - xtw.WriteAttributeString("forcenodump", "ignore"); - break; - case NodumpFlag.Obsolete: - xtw.WriteAttributeString("forcenodump", "obsolete"); - break; - case NodumpFlag.Required: - xtw.WriteAttributeString("forcenodump", "required"); - break; - } + xtw.WriteOptionalAttributeString("forcepacking", Header.ForcePacking.FromPackingFlag(false)); + xtw.WriteOptionalAttributeString("forcemerging", Header.ForceMerging.FromMergingFlag(false)); + xtw.WriteOptionalAttributeString("forcenodump", Header.ForceNodump.FromNodumpFlag()); xtw.Flush(); } @@ -807,18 +771,7 @@ namespace SabreTools.Library.DatFiles if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase)) xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf); - switch (datItem.Machine.Supported) - { - case Supported.No: - xtw.WriteAttributeString("supported", "no"); - break; - case Supported.Partial: - xtw.WriteAttributeString("supported", "partial"); - break; - case Supported.Yes: - xtw.WriteAttributeString("supported", "yes"); - break; - } + xtw.WriteOptionalAttributeString("supported", datItem.Machine.Supported.FromSupported()); xtw.WriteOptionalElementString("description", datItem.Machine.Description); xtw.WriteOptionalElementString("year", datItem.Machine.Year); @@ -960,7 +913,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("sha256", disk.SHA256?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha384", disk.SHA384?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha512", disk.SHA512?.ToLowerInvariant()); - if (disk.ItemStatus != ItemStatus.None) xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant()); + xtw.WriteOptionalAttributeString("status", disk.ItemStatus.FromItemStatus(false)); xtw.WriteOptionalAttributeString("writable", disk.Writable.FromYesNo()); xtw.WriteEndElement(); @@ -993,7 +946,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("offset", rom.Offset); xtw.WriteOptionalAttributeString("value", rom.Value); - if (rom.ItemStatus != ItemStatus.None) xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant()); + xtw.WriteOptionalAttributeString("status", rom.ItemStatus.FromItemStatus(false)); xtw.WriteOptionalAttributeString("loadflag", rom.LoadFlag); xtw.WriteEndElement(); diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs index e1a492db..2921784b 100644 --- a/SabreTools.Library/Filtering/Filter.cs +++ b/SabreTools.Library/Filtering/Filter.cs @@ -473,7 +473,7 @@ namespace SabreTools.Library.Filtering /// /// Internally split a DatFile /// - public SplitType InternalSplit { get; set; } + public MergingFlag InternalSplit { get; set; } /// /// Remove all unicode characters diff --git a/SabreTools.Library/Tools/Converters.cs b/SabreTools.Library/Tools/Converters.cs index efeea887..411cfd88 100644 --- a/SabreTools.Library/Tools/Converters.cs +++ b/SabreTools.Library/Tools/Converters.cs @@ -6,6 +6,41 @@ namespace SabreTools.Library.Tools { public static class Converters { + #region Enum to Enum + + /// + /// Get the field associated with each hash type + /// + public static Field AsField(this Hash hash) + { + switch (hash) + { + case Hash.CRC: + return Field.CRC; + case Hash.MD5: + return Field.MD5; +#if NET_FRAMEWORK + case Hash.RIPEMD160: + return Field.RIPEMD160; +#endif + case Hash.SHA1: + return Field.SHA1; + case Hash.SHA256: + return Field.SHA256; + case Hash.SHA384: + return Field.SHA384; + case Hash.SHA512: + return Field.SHA512; + + default: + return Field.NULL; + } + } + + #endregion + + #region String to Enum + /// /// Get DatFormat value from input string /// @@ -85,35 +120,6 @@ namespace SabreTools.Library.Tools } } - /// - /// Get the field associated with each hash type - /// - public static Field AsField(this Hash hash) - { - switch (hash) - { - case Hash.CRC: - return Field.CRC; - case Hash.MD5: - return Field.MD5; -#if NET_FRAMEWORK - case Hash.RIPEMD160: - return Field.RIPEMD160; -#endif - case Hash.SHA1: - return Field.SHA1; - case Hash.SHA256: - return Field.SHA256; - case Hash.SHA384: - return Field.SHA384; - case Hash.SHA512: - return Field.SHA512; - - default: - return Field.NULL; - } - } - /// /// Get Field value from input string /// @@ -632,6 +638,8 @@ namespace SabreTools.Library.Tools return MergingFlag.NonMerged; case "full": return MergingFlag.Full; + case "device": + return MergingFlag.Device; case "none": default: return MergingFlag.None; @@ -775,41 +783,6 @@ namespace SabreTools.Library.Tools #endif } - /// - /// Get SplitType value from input ForceMerging - /// - /// ForceMerging to get value from - /// SplitType value corresponding to the string - public static SplitType AsSplitType(this MergingFlag forceMerging) - { -#if NET_FRAMEWORK - switch (forceMerging) - { - case MergingFlag.Split: - return SplitType.Split; - case MergingFlag.Merged: - return SplitType.Merged; - case MergingFlag.NonMerged: - return SplitType.NonMerged; - case MergingFlag.Full: - return SplitType.FullNonMerged; - case MergingFlag.None: - default: - return SplitType.None; - } -#else - return forceMerging switch - { - MergingFlag.Split => SplitType.Split, - MergingFlag.Merged => SplitType.Merged, - MergingFlag.NonMerged => SplitType.NonMerged, - MergingFlag.Full => SplitType.FullNonMerged, - MergingFlag.None => SplitType.None, - _ => SplitType.None, - }; -#endif - } - /// /// Get StatReportFormat value from input string /// @@ -910,13 +883,349 @@ namespace SabreTools.Library.Tools #endif } - // TODO: Write From variants for all above + #endregion + + #region Enum to String + + // TODO: DatFormat -> string + // TODO: Field -> string + + /// + /// Get string value from input ItemStatus + /// + /// ItemStatus to get value from + /// True to use Yes/No format instead + /// String value corresponding to the ItemStatus + public static string FromItemStatus(this ItemStatus status, bool yesno) + { +#if NET_FRAMEWORK + switch (status) + { + case ItemStatus.Good: + return "good"; + case ItemStatus.BadDump: + return "baddump"; + case ItemStatus.Nodump: + return yesno ? "yes" : "nodump"; + case ItemStatus.Verified: + return "verified"; + default: + return null; + } +#else + return status switch + { + ItemStatus.Good => "good", + ItemStatus.BadDump => "baddump", + ItemStatus.Nodump => yesno ? "yes" : "nodump", + ItemStatus.Verified => "verified", + _ => null, + }; +#endif + } + + /// + /// Get string value from input ItemType? + /// + /// ItemType? to get value from + /// String value corresponding to the ItemType? + public static string FromItemType(this ItemType? itemType) + { +#if NET_FRAMEWORK + switch (itemType) + { + case ItemType.Archive: + return "archive"; + case ItemType.BiosSet: + return "biosset"; + case ItemType.Blank: + return "blank"; + case ItemType.Disk: + return "disk"; + case ItemType.Release: + return "release"; + case ItemType.Rom: + return "rom"; + case ItemType.Sample: + return "sample"; + default: + return null; + } +#else + return itemType switch + { + ItemType.Archive => "archive", + ItemType.BiosSet => "biosset", + ItemType.Blank => "blank", + ItemType.Disk => "disk", + ItemType.Release => "release", + ItemType.Rom => "rom", + ItemType.Sample => "sample", + _ => null, + }; +#endif + } + + /// + /// Get string value from input MachineType + /// + /// MachineType to get value from + /// True to use old naming instead + /// String value corresponding to the MachineType + public static string FromMachineType(this MachineType gametype, bool old) + { +#if NET_FRAMEWORK + switch (gametype) + { + case MachineType.Bios: + return "bios"; + case MachineType.Device: + return old ? "dev" : "device"; + case MachineType.Mechanical: + return old ? "mech" : "mechanical"; + default: + return null; + } +#else + return gametype switch + { + MachineType.Bios => "bios", + MachineType.Device => old ? "dev" : "device", + MachineType.Mechanical => old ? "mech" : "mechanical", + _ => null, + }; +#endif + } + + /// + /// Get string value from input MergingFlag + /// + /// MergingFlag to get value from + /// True to use RomCenter naming instead + /// String value corresponding to the MergingFlag + public static string FromMergingFlag(this MergingFlag merging, bool romCenter) + { +#if NET_FRAMEWORK + switch (merging) + { + case MergingFlag.Split: + return "split"; + case MergingFlag.Merged: + return "merged"; + case MergingFlag.NonMerged: + return romCenter ? "unmerged" : "nonmerged"; + case MergingFlag.Full: + return "full"; + case MergingFlag.Device: + return "device"; + default: + return null; + } +#else + return merging switch + { + MergingFlag.Split => "split", + MergingFlag.Merged => "merged", + MergingFlag.NonMerged => romCenter ? "unmerged" : "nonmerged", + MergingFlag.Full => "full", + MergingFlag.Device => "device", + _ => null, + }; +#endif + } + + /// + /// Get string value from input NodumpFlag + /// + /// NodumpFlag to get value from + /// String value corresponding to the NodumpFlag + public static string FromNodumpFlag(this NodumpFlag nodump) + { +#if NET_FRAMEWORK + switch (nodump) + { + case NodumpFlag.Obsolete: + return "obsolete"; + case NodumpFlag.Required: + return "required"; + case NodumpFlag.Ignore: + return "ignore"; + default: + return null; + } +#else + return nodump switch + { + NodumpFlag.Obsolete => "obsolete", + NodumpFlag.Required => "required", + NodumpFlag.Ignore => "ignore", + _ => null, + }; +#endif + } + + /// + /// Get string value from input OpenMSXSubType + /// + /// OpenMSXSubType to get value from + /// String value corresponding to the OpenMSXSubType + public static string FromOpenMSXSubType(this OpenMSXSubType itemType) + { +#if NET_FRAMEWORK + switch (itemType) + { + case OpenMSXSubType.Rom: + return "rom"; + case OpenMSXSubType.MegaRom: + return "megarom"; + case OpenMSXSubType.SCCPlusCart: + return "sccpluscart"; + default: + return null; + } +#else + return itemType switch + { + OpenMSXSubType.Rom => "rom", + OpenMSXSubType.MegaRom => "megarom", + OpenMSXSubType.SCCPlusCart => "sccpluscart", + _ => null, + }; +#endif + } + + /// + /// Get string value from input PackingFlag + /// + /// PackingFlag to get value from + /// True to use Yes/No format instead + /// String value corresponding to the PackingFlag + public static string FromPackingFlag(this PackingFlag packing, bool yesno) + { +#if NET_FRAMEWORK + switch (packing) + { + case PackingFlag.Zip: + return yesno ? "yes" : "zip"; + case PackingFlag.Unzip: + return yesno ? "no" : "unzip"; + default: + return null; + } +#else + return packing switch + { + PackingFlag.Zip => yesno ? "yes" : "zip", + PackingFlag.Unzip => yesno ? "yes" : "zip", + _ => null, + }; +#endif + } + + /// + /// Get string value from input Runnable + /// + /// Runnable to get value from + /// String value corresponding to the Runnable + public static string FromRunnable(this Runnable runnable) + { +#if NET_FRAMEWORK + switch (runnable) + { + case Runnable.No: + return "no"; + case Runnable.Partial: + return "partial"; + case Runnable.Yes: + return "yes"; + default: + return null; + } +#else + return runnable switch + { + Runnable.No => "no", + Runnable.Partial => "partial", + Runnable.Yes => "yes", + _ => null, + }; +#endif + } + + /// + /// Get string value from input StatReportFormat + /// + /// StatReportFormat to get value from + /// String value corresponding to the StatReportFormat + public static string FromStatReportFormat(this StatReportFormat input) + { +#if NET_FRAMEWORK + switch (input) + { + case StatReportFormat.All: + return "all"; + case StatReportFormat.CSV: + return "csv"; + case StatReportFormat.HTML: + return "html"; + case StatReportFormat.SSV: + return "ssv"; + case StatReportFormat.Textfile: + return "text"; + case StatReportFormat.TSV: + return "tsv"; + default: + return null; + } +#else + return input switch + { + StatReportFormat.All => "all", + StatReportFormat.CSV => "csv", + StatReportFormat.HTML => "html", + StatReportFormat.SSV => "ssv", + StatReportFormat.Textfile => "text", + StatReportFormat.TSV => "tsv", + _ => null, + }; +#endif + } + + /// + /// Get string value from input Supported + /// + /// Supported to get value from + /// String value corresponding to the Supported + public static string FromSupported(this Supported supported) + { +#if NET_FRAMEWORK + switch (supported) + { + case Supported.No: + return "no"; + case Supported.Partial: + return "partial"; + case Supported.Yes: + return "yes"; + default: + return null; + } +#else + return supported switch + { + Supported.No => "no", + Supported.Partial => "partial", + Supported.Yes => "yes", + _ => null, + }; +#endif + } /// /// Get string value from input bool? /// /// bool? to get value from - /// string corresponding to the bool? + /// String corresponding to the bool? public static string FromYesNo(this bool? yesno) { #if NET_FRAMEWORK @@ -938,5 +1247,7 @@ namespace SabreTools.Library.Tools }; #endif } + + #endregion } } diff --git a/SabreTools/Features/BaseFeature.cs b/SabreTools/Features/BaseFeature.cs index ced839ed..1427bb42 100644 --- a/SabreTools/Features/BaseFeature.cs +++ b/SabreTools/Features/BaseFeature.cs @@ -2990,19 +2990,19 @@ Some special strings that can be used: /// /// Get SplitType from feature list /// - private SplitType GetSplitType(Dictionary features) + private MergingFlag GetSplitType(Dictionary features) { - SplitType splitType = SplitType.None; + MergingFlag splitType = MergingFlag.None; if (GetBoolean(features, DatDeviceNonMergedValue)) - splitType = SplitType.DeviceNonMerged; + splitType = MergingFlag.Device; else if (GetBoolean(features, DatFullNonMergedValue)) - splitType = SplitType.FullNonMerged; + splitType = MergingFlag.Full; else if (GetBoolean(features, DatMergedValue)) - splitType = SplitType.Merged; + splitType = MergingFlag.Merged; else if (GetBoolean(features, DatNonMergedValue)) - splitType = SplitType.NonMerged; + splitType = MergingFlag.NonMerged; else if (GetBoolean(features, DatSplitValue)) - splitType = SplitType.Split; + splitType = MergingFlag.Split; return splitType; }