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;
}