Finish and use more enum conversions

This commit is contained in:
Matt Nadareski
2020-08-24 13:21:59 -07:00
parent d8fdce88c0
commit df9d908d04
11 changed files with 439 additions and 343 deletions

View File

@@ -565,31 +565,11 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(Header.Comment)) if (!string.IsNullOrWhiteSpace(Header.Comment))
cmpw.WriteStandalone("comment", Header.Comment); cmpw.WriteStandalone("comment", Header.Comment);
switch (Header.ForcePacking) if (Header.ForcePacking != PackingFlag.None)
{ cmpw.WriteStandalone("forcezipping", Header.ForcePacking.FromPackingFlag(true), false);
case PackingFlag.Unzip:
cmpw.WriteStandalone("forcezipping", "no", false);
break;
case PackingFlag.Zip:
cmpw.WriteStandalone("forcezipping", "yes", false);
break;
}
switch (Header.ForceMerging) if (Header.ForceMerging != MergingFlag.None)
{ cmpw.WriteStandalone("forcemerging", Header.ForceMerging.FromMergingFlag(false), false);
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;
}
// End clrmamepro // End clrmamepro
cmpw.WriteEndElement(); cmpw.WriteEndElement();

View File

@@ -1011,8 +1011,8 @@ namespace SabreTools.Library.DatFiles
MachineDescriptionToName(); MachineDescriptionToName();
// If we are using tags from the DAT, set the proper input for split type unless overridden // If we are using tags from the DAT, set the proper input for split type unless overridden
if (useTags && filter.InternalSplit == SplitType.None) if (useTags && filter.InternalSplit == MergingFlag.None)
filter.InternalSplit = Header.ForceMerging.AsSplitType(); filter.InternalSplit = Header.ForceMerging;
// Run internal splitting // Run internal splitting
ProcessSplitType(filter.InternalSplit); ProcessSplitType(filter.InternalSplit);
@@ -1344,30 +1344,30 @@ namespace SabreTools.Library.DatFiles
#region Internal Splitting/Merging #region Internal Splitting/Merging
/// <summary> /// <summary>
/// Process items according to SplitType /// Process items according to split type
/// </summary> /// </summary>
/// <param name="splitType">SplitType to implement</param> /// <param name="splitType">MergingFlag to implement</param>
public void ProcessSplitType(SplitType splitType) public void ProcessSplitType(MergingFlag splitType)
{ {
// Now we pre-process the DAT with the splitting/merging mode // Now we pre-process the DAT with the splitting/merging mode
switch (splitType) switch (splitType)
{ {
case SplitType.None: case MergingFlag.None:
// No-op // No-op
break; break;
case SplitType.DeviceNonMerged: case MergingFlag.Device:
CreateDeviceNonMergedSets(DedupeType.None); CreateDeviceNonMergedSets(DedupeType.None);
break; break;
case SplitType.FullNonMerged: case MergingFlag.Full:
CreateFullyNonMergedSets(DedupeType.None); CreateFullyNonMergedSets(DedupeType.None);
break; break;
case SplitType.NonMerged: case MergingFlag.NonMerged:
CreateNonMergedSets(DedupeType.None); CreateNonMergedSets(DedupeType.None);
break; break;
case SplitType.Merged: case MergingFlag.Merged:
CreateMergedSets(DedupeType.None); CreateMergedSets(DedupeType.None);
break; break;
case SplitType.Split: case MergingFlag.Split:
CreateSplitSets(DedupeType.None); CreateSplitSets(DedupeType.None);
break; break;
} }

View File

@@ -213,6 +213,7 @@ namespace SabreTools.Library.DatFiles
Merged, Merged,
NonMerged, NonMerged,
Full, Full,
Device, // This is not usually defined for Merging flags
} }
/// <summary> /// <summary>
@@ -246,19 +247,6 @@ namespace SabreTools.Library.DatFiles
File, File,
} }
/// <summary>
/// Determines how a DAT will be split internally
/// </summary>
public enum SplitType
{
None = 0,
NonMerged,
Merged,
FullNonMerged,
Split,
DeviceNonMerged
}
/// <summary> /// <summary>
/// Determines what sort of files get externally hashed /// Determines what sort of files get externally hashed
/// </summary> /// </summary>

View File

@@ -1034,18 +1034,7 @@ namespace SabreTools.Library.DatFiles
if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical)) if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
xtw.WriteAttributeString("ismechanical", "yes"); xtw.WriteAttributeString("ismechanical", "yes");
switch (datItem.Machine.Runnable) xtw.WriteOptionalAttributeString("runnable", datItem.Machine.Runnable.FromRunnable());
{
case Runnable.No:
xtw.WriteAttributeString("runnable", "no");
break;
case Runnable.Partial:
xtw.WriteAttributeString("runnable", "partial");
break;
case Runnable.Yes:
xtw.WriteAttributeString("runnable", "yes");
break;
}
if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase)) if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf); xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
@@ -1150,7 +1139,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteOptionalAttributeString("region", disk.Region); xtw.WriteOptionalAttributeString("region", disk.Region);
xtw.WriteOptionalAttributeString("index", disk.Index); xtw.WriteOptionalAttributeString("index", disk.Index);
xtw.WriteOptionalAttributeString("writable", disk.Writable.FromYesNo()); 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.WriteOptionalAttributeString("optional", disk.Optional.FromYesNo());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -1173,7 +1162,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteOptionalAttributeString("merge", rom.MergeTag); xtw.WriteOptionalAttributeString("merge", rom.MergeTag);
xtw.WriteOptionalAttributeString("region", rom.Region); xtw.WriteOptionalAttributeString("region", rom.Region);
xtw.WriteOptionalAttributeString("offset", rom.Offset); 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.WriteOptionalAttributeString("optional", rom.Optional.FromYesNo());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;

View File

@@ -785,45 +785,10 @@ namespace SabreTools.Library.DatFiles
|| !string.IsNullOrWhiteSpace(Header.HeaderSkipper)) || !string.IsNullOrWhiteSpace(Header.HeaderSkipper))
{ {
xtw.WriteStartElement("clrmamepro"); 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); xtw.WriteOptionalAttributeString("header", Header.HeaderSkipper);
// End clrmamepro // End clrmamepro
@@ -838,43 +803,9 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("romcenter"); xtw.WriteStartElement("romcenter");
xtw.WriteOptionalAttributeString("plugin", Header.System); xtw.WriteOptionalAttributeString("plugin", Header.System);
xtw.WriteOptionalAttributeString("rommode", Header.RomMode.FromMergingFlag(true));
switch (Header.RomMode) xtw.WriteOptionalAttributeString("biosmode", Header.BiosMode.FromMergingFlag(true));
{ xtw.WriteOptionalAttributeString("samplemode", Header.SampleMode.FromMergingFlag(true));
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("lockrommode", Header.LockRomMode.FromYesNo()); xtw.WriteOptionalAttributeString("lockrommode", Header.LockRomMode.FromYesNo());
xtw.WriteOptionalAttributeString("lockbiosmode", Header.LockBiosMode.FromYesNo()); xtw.WriteOptionalAttributeString("lockbiosmode", Header.LockBiosMode.FromYesNo());
xtw.WriteOptionalAttributeString("locksamplemode", Header.LockSampleMode.FromYesNo()); xtw.WriteOptionalAttributeString("locksamplemode", Header.LockSampleMode.FromYesNo());
@@ -921,21 +852,7 @@ namespace SabreTools.Library.DatFiles
if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical)) if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
xtw.WriteAttributeString("ismechanical", "yes"); xtw.WriteAttributeString("ismechanical", "yes");
if (datItem.Machine.Runnable != Runnable.NULL) xtw.WriteOptionalAttributeString("runnable", datItem.Machine.Runnable.FromRunnable());
{
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;
}
}
if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase)) if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf); xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
@@ -1065,7 +982,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteOptionalAttributeString("sha256", disk.SHA256?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha256", disk.SHA256?.ToLowerInvariant());
xtw.WriteOptionalAttributeString("sha384", disk.SHA384?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha384", disk.SHA384?.ToLowerInvariant());
xtw.WriteOptionalAttributeString("sha512", disk.SHA512?.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(); xtw.WriteEndElement();
break; break;
@@ -1095,7 +1012,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteOptionalAttributeString("sha384", rom.SHA384?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha384", rom.SHA384?.ToLowerInvariant());
xtw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant());
xtw.WriteOptionalAttributeString("date", rom.Date); 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.WriteOptionalAttributeString("inverted", rom.Inverted.FromYesNo());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;

View File

@@ -739,7 +739,7 @@ namespace SabreTools.Library.DatFiles
// Default to Rom for converting from other formats // Default to Rom for converting from other formats
case OpenMSXSubType.Rom: case OpenMSXSubType.Rom:
case OpenMSXSubType.NULL: case OpenMSXSubType.NULL:
xtw.WriteStartElement("rom"); xtw.WriteStartElement(datItem.OpenMSXSubType.FromOpenMSXSubType());
xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant()); xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant());
xtw.WriteOptionalElementString("start", rom.Offset); xtw.WriteOptionalElementString("start", rom.Offset);
xtw.WriteOptionalElementString("type", rom.OpenMSXType); xtw.WriteOptionalElementString("type", rom.OpenMSXType);
@@ -748,7 +748,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case OpenMSXSubType.MegaRom: case OpenMSXSubType.MegaRom:
xtw.WriteStartElement("megarom"); xtw.WriteStartElement(datItem.OpenMSXSubType.FromOpenMSXSubType());
xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant()); xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant());
xtw.WriteOptionalElementString("start", rom.Offset); xtw.WriteOptionalElementString("start", rom.Offset);
xtw.WriteOptionalElementString("type", rom.OpenMSXType); xtw.WriteOptionalElementString("type", rom.OpenMSXType);
@@ -757,7 +757,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case OpenMSXSubType.SCCPlusCart: case OpenMSXSubType.SCCPlusCart:
xtw.WriteStartElement("sccpluscart"); xtw.WriteStartElement(datItem.OpenMSXSubType.FromOpenMSXSubType());
xtw.WriteOptionalElementString("boot", rom.Boot); xtw.WriteOptionalElementString("boot", rom.Boot);
xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant()); xtw.WriteRequiredElementString("hash", rom.SHA1?.ToLowerInvariant());
xtw.WriteOptionalElementString("remark", rom.Remark); xtw.WriteOptionalElementString("remark", rom.Remark);

View File

@@ -686,70 +686,28 @@ namespace SabreTools.Library.DatFiles
xtw.WriteEndElement(); xtw.WriteEndElement();
} }
switch (Header.ForcePacking) if (Header.ForcePacking != PackingFlag.None)
{ {
case PackingFlag.Unzip:
xtw.WriteStartElement("flag"); xtw.WriteStartElement("flag");
xtw.WriteAttributeString("name", "forcepacking"); xtw.WriteAttributeString("name", "forcepacking");
xtw.WriteAttributeString("value", "unzip"); xtw.WriteOptionalAttributeString("value", Header.ForcePacking.FromPackingFlag(false));
xtw.WriteEndElement(); xtw.WriteEndElement();
break;
case PackingFlag.Zip:
xtw.WriteStartElement("flag");
xtw.WriteAttributeString("name", "forcepacking");
xtw.WriteAttributeString("value", "zip");
xtw.WriteEndElement();
break;
} }
switch (Header.ForceMerging) if (Header.ForceMerging != MergingFlag.None)
{ {
case MergingFlag.Full:
xtw.WriteStartElement("flag"); xtw.WriteStartElement("flag");
xtw.WriteAttributeString("name", "forcemerging"); xtw.WriteAttributeString("name", "forcemerging");
xtw.WriteAttributeString("value", "full"); xtw.WriteAttributeString("value", Header.ForceMerging.FromMergingFlag(false));
xtw.WriteEndElement(); 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;
} }
switch (Header.ForceNodump) if (Header.ForceNodump != NodumpFlag.None)
{ {
case NodumpFlag.Ignore:
xtw.WriteStartElement("flag"); xtw.WriteStartElement("flag");
xtw.WriteAttributeString("name", "forcenodump"); xtw.WriteAttributeString("name", "forcenodump");
xtw.WriteAttributeString("value", "ignore"); xtw.WriteAttributeString("value", Header.ForceNodump.FromNodumpFlag());
xtw.WriteEndElement(); 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;
} }
// End flags // End flags
@@ -916,7 +874,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("flag"); xtw.WriteStartElement("flag");
xtw.WriteAttributeString("name", "status"); xtw.WriteAttributeString("name", "status");
xtw.WriteAttributeString("value", disk.ItemStatus.ToString().ToLowerInvariant()); xtw.WriteAttributeString("value", disk.ItemStatus.FromItemStatus(false));
xtw.WriteEndElement(); xtw.WriteEndElement();
// End flags // End flags
@@ -959,7 +917,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("flag"); xtw.WriteStartElement("flag");
xtw.WriteAttributeString("name", "status"); xtw.WriteAttributeString("name", "status");
xtw.WriteAttributeString("value", rom.ItemStatus.ToString().ToLowerInvariant()); xtw.WriteAttributeString("value", rom.ItemStatus.FromItemStatus(false));
xtw.WriteEndElement(); xtw.WriteEndElement();
// End flags // End flags

View File

@@ -736,45 +736,9 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("softwarelist"); xtw.WriteStartElement("softwarelist");
xtw.WriteRequiredAttributeString("name", Header.Name); xtw.WriteRequiredAttributeString("name", Header.Name);
xtw.WriteRequiredAttributeString("description", Header.Description); xtw.WriteRequiredAttributeString("description", Header.Description);
xtw.WriteOptionalAttributeString("forcepacking", Header.ForcePacking.FromPackingFlag(false));
switch (Header.ForcePacking) xtw.WriteOptionalAttributeString("forcemerging", Header.ForceMerging.FromMergingFlag(false));
{ xtw.WriteOptionalAttributeString("forcenodump", Header.ForceNodump.FromNodumpFlag());
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.Flush(); xtw.Flush();
} }
@@ -807,18 +771,7 @@ namespace SabreTools.Library.DatFiles
if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase)) if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf); xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
switch (datItem.Machine.Supported) xtw.WriteOptionalAttributeString("supported", datItem.Machine.Supported.FromSupported());
{
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.WriteOptionalElementString("description", datItem.Machine.Description); xtw.WriteOptionalElementString("description", datItem.Machine.Description);
xtw.WriteOptionalElementString("year", datItem.Machine.Year); xtw.WriteOptionalElementString("year", datItem.Machine.Year);
@@ -960,7 +913,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteOptionalAttributeString("sha256", disk.SHA256?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha256", disk.SHA256?.ToLowerInvariant());
xtw.WriteOptionalAttributeString("sha384", disk.SHA384?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha384", disk.SHA384?.ToLowerInvariant());
xtw.WriteOptionalAttributeString("sha512", disk.SHA512?.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.WriteOptionalAttributeString("writable", disk.Writable.FromYesNo());
xtw.WriteEndElement(); xtw.WriteEndElement();
@@ -993,7 +946,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant()); xtw.WriteOptionalAttributeString("sha512", rom.SHA512?.ToLowerInvariant());
xtw.WriteOptionalAttributeString("offset", rom.Offset); xtw.WriteOptionalAttributeString("offset", rom.Offset);
xtw.WriteOptionalAttributeString("value", rom.Value); 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.WriteOptionalAttributeString("loadflag", rom.LoadFlag);
xtw.WriteEndElement(); xtw.WriteEndElement();

View File

@@ -473,7 +473,7 @@ namespace SabreTools.Library.Filtering
/// <summary> /// <summary>
/// Internally split a DatFile /// Internally split a DatFile
/// </summary> /// </summary>
public SplitType InternalSplit { get; set; } public MergingFlag InternalSplit { get; set; }
/// <summary> /// <summary>
/// Remove all unicode characters /// Remove all unicode characters

View File

@@ -6,6 +6,41 @@ namespace SabreTools.Library.Tools
{ {
public static class Converters public static class Converters
{ {
#region Enum to Enum
/// <summary>
/// Get the field associated with each hash type
/// </summary>
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
/// <summary> /// <summary>
/// Get DatFormat value from input string /// Get DatFormat value from input string
/// </summary> /// </summary>
@@ -85,35 +120,6 @@ namespace SabreTools.Library.Tools
} }
} }
/// <summary>
/// Get the field associated with each hash type
/// </summary>
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;
}
}
/// <summary> /// <summary>
/// Get Field value from input string /// Get Field value from input string
/// </summary> /// </summary>
@@ -632,6 +638,8 @@ namespace SabreTools.Library.Tools
return MergingFlag.NonMerged; return MergingFlag.NonMerged;
case "full": case "full":
return MergingFlag.Full; return MergingFlag.Full;
case "device":
return MergingFlag.Device;
case "none": case "none":
default: default:
return MergingFlag.None; return MergingFlag.None;
@@ -775,41 +783,6 @@ namespace SabreTools.Library.Tools
#endif #endif
} }
/// <summary>
/// Get SplitType value from input ForceMerging
/// </summary>
/// <param name="forceMerging">ForceMerging to get value from</param>
/// <returns>SplitType value corresponding to the string</returns>
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
}
/// <summary> /// <summary>
/// Get StatReportFormat value from input string /// Get StatReportFormat value from input string
/// </summary> /// </summary>
@@ -910,13 +883,349 @@ namespace SabreTools.Library.Tools
#endif #endif
} }
// TODO: Write From variants for all above #endregion
#region Enum to String
// TODO: DatFormat -> string
// TODO: Field -> string
/// <summary>
/// Get string value from input ItemStatus
/// </summary>
/// <param name="status">ItemStatus to get value from</param>
/// <param name="yesno">True to use Yes/No format instead</param>
/// <returns>String value corresponding to the ItemStatus</returns>
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
}
/// <summary>
/// Get string value from input ItemType?
/// </summary>
/// <param name="itemType">ItemType? to get value from</param>
/// <returns>String value corresponding to the ItemType?</returns>
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
}
/// <summary>
/// Get string value from input MachineType
/// </summary>
/// <param name="gametype">MachineType to get value from</param>
/// <param name="romCenter">True to use old naming instead</param>
/// <returns>String value corresponding to the MachineType</returns>
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
}
/// <summary>
/// Get string value from input MergingFlag
/// </summary>
/// <param name="merging">MergingFlag to get value from</param>
/// <param name="romCenter">True to use RomCenter naming instead</param>
/// <returns>String value corresponding to the MergingFlag</returns>
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
}
/// <summary>
/// Get string value from input NodumpFlag
/// </summary>
/// <param name="nodump">NodumpFlag to get value from</param>
/// <returns>String value corresponding to the NodumpFlag</returns>
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
}
/// <summary>
/// Get string value from input OpenMSXSubType
/// </summary>
/// <param name="itemType">OpenMSXSubType to get value from</param>
/// <returns>String value corresponding to the OpenMSXSubType</returns>
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
}
/// <summary>
/// Get string value from input PackingFlag
/// </summary>
/// <param name="packing">PackingFlag to get value from</param>
/// <param name="yesno">True to use Yes/No format instead</param>
/// <returns>String value corresponding to the PackingFlag</returns>
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
}
/// <summary>
/// Get string value from input Runnable
/// </summary>
/// <param name="runnable">Runnable to get value from</param>
/// <returns>String value corresponding to the Runnable</returns>
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
}
/// <summary>
/// Get string value from input StatReportFormat
/// </summary>
/// <param name="input">StatReportFormat to get value from</param>
/// <returns>String value corresponding to the StatReportFormat</returns>
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
}
/// <summary>
/// Get string value from input Supported
/// </summary>
/// <param name="supported">Supported to get value from</param>
/// <returns>String value corresponding to the Supported</returns>
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
}
/// <summary> /// <summary>
/// Get string value from input bool? /// Get string value from input bool?
/// </summary> /// </summary>
/// <param name="yesno">bool? to get value from</param> /// <param name="yesno">bool? to get value from</param>
/// <returns>string corresponding to the bool?</returns> /// <returns>String corresponding to the bool?</returns>
public static string FromYesNo(this bool? yesno) public static string FromYesNo(this bool? yesno)
{ {
#if NET_FRAMEWORK #if NET_FRAMEWORK
@@ -938,5 +1247,7 @@ namespace SabreTools.Library.Tools
}; };
#endif #endif
} }
#endregion
} }
} }

View File

@@ -2990,19 +2990,19 @@ Some special strings that can be used:
/// <summary> /// <summary>
/// Get SplitType from feature list /// Get SplitType from feature list
/// </summary> /// </summary>
private SplitType GetSplitType(Dictionary<string, Feature> features) private MergingFlag GetSplitType(Dictionary<string, Feature> features)
{ {
SplitType splitType = SplitType.None; MergingFlag splitType = MergingFlag.None;
if (GetBoolean(features, DatDeviceNonMergedValue)) if (GetBoolean(features, DatDeviceNonMergedValue))
splitType = SplitType.DeviceNonMerged; splitType = MergingFlag.Device;
else if (GetBoolean(features, DatFullNonMergedValue)) else if (GetBoolean(features, DatFullNonMergedValue))
splitType = SplitType.FullNonMerged; splitType = MergingFlag.Full;
else if (GetBoolean(features, DatMergedValue)) else if (GetBoolean(features, DatMergedValue))
splitType = SplitType.Merged; splitType = MergingFlag.Merged;
else if (GetBoolean(features, DatNonMergedValue)) else if (GetBoolean(features, DatNonMergedValue))
splitType = SplitType.NonMerged; splitType = MergingFlag.NonMerged;
else if (GetBoolean(features, DatSplitValue)) else if (GetBoolean(features, DatSplitValue))
splitType = SplitType.Split; splitType = MergingFlag.Split;
return splitType; return splitType;
} }