diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs
index f2b6378f..dd83c0d2 100644
--- a/SabreTools.Library/DatFiles/Listxml.cs
+++ b/SabreTools.Library/DatFiles/Listxml.cs
@@ -995,21 +995,17 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("mame");
xtw.WriteAttributeString("build", Header.Name);
- if (Header.Debug != null)
+ switch (Header.Debug)
{
- switch (Header.Debug)
- {
- case true:
- xtw.WriteAttributeString("debug", "yes");
- break;
- case false:
- xtw.WriteAttributeString("debug", "no");
- break;
- }
+ case true:
+ xtw.WriteAttributeString("debug", "yes");
+ break;
+ case false:
+ xtw.WriteAttributeString("debug", "no");
+ break;
}
- if (!string.IsNullOrEmpty(Header.MameConfig))
- xtw.WriteAttributeString("mameconfig", Header.MameConfig);
+ xtw.WriteOptionalAttributeString("mameconfig", Header.MameConfig);
xtw.Flush();
}
@@ -1038,50 +1034,39 @@ namespace SabreTools.Library.DatFiles
// Build the state
xtw.WriteStartElement("machine");
xtw.WriteAttributeString("name", datItem.Machine.Name);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.SourceFile))
- xtw.WriteAttributeString("sourcefile", datItem.Machine.SourceFile);
+ xtw.WriteOptionalAttributeString("sourcefile", datItem.Machine.SourceFile);
- if (datItem.Machine.MachineType != MachineType.NULL)
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
+ xtw.WriteAttributeString("isbios", "yes");
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Device))
+ xtw.WriteAttributeString("isdevice", "yes");
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
+ xtw.WriteAttributeString("ismechanical", "yes");
+
+ switch (datItem.Machine.Runnable)
{
- if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
- xtw.WriteAttributeString("isbios", "yes");
- if (datItem.Machine.MachineType.HasFlag(MachineType.Device))
- xtw.WriteAttributeString("isdevice", "yes");
- if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
- xtw.WriteAttributeString("ismechanical", "yes");
+ 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 (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;
- }
- }
+ if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
+ xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
+ if (!string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
+ xtw.WriteOptionalAttributeString("romof", datItem.Machine.RomOf);
+ if (!string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
+ xtw.WriteOptionalAttributeString("sampleof", datItem.Machine.SampleOf);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
- xtw.WriteAttributeString("cloneof", datItem.Machine.CloneOf);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.RomOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
- xtw.WriteAttributeString("romof", datItem.Machine.RomOf);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.SampleOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
- xtw.WriteAttributeString("sampleof", datItem.Machine.SampleOf);
-
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
- xtw.WriteElementString("description", datItem.Machine.Description);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
- xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
- xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
- xtw.WriteElementString("category", datItem.Machine.Category);
+ xtw.WriteOptionalAttributeString("description", datItem.Machine.Description);
+ xtw.WriteOptionalAttributeString("year", datItem.Machine.Year);
+ xtw.WriteOptionalAttributeString("publisher", datItem.Machine.Publisher);
+ xtw.WriteOptionalAttributeString("category", datItem.Machine.Category);
if (datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0)
{
@@ -1153,10 +1138,8 @@ namespace SabreTools.Library.DatFiles
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("biosset");
xtw.WriteAttributeString("name", biosSet.Name);
- if (!string.IsNullOrWhiteSpace(biosSet.Description))
- xtw.WriteAttributeString("description", biosSet.Description);
- if (biosSet.Default != null)
- xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("description", biosSet.Description);
+ xtw.WriteOptionalAttributeString("default", biosSet.Default?.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -1164,32 +1147,20 @@ namespace SabreTools.Library.DatFiles
var disk = datItem as Disk;
xtw.WriteStartElement("disk");
xtw.WriteAttributeString("name", disk.Name);
- if (!string.IsNullOrWhiteSpace(disk.MD5))
- xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(disk.SHA1))
- xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA256))
- xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA384))
- xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA512))
- xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.MergeTag))
- xtw.WriteAttributeString("merge", disk.MergeTag);
- if (!string.IsNullOrWhiteSpace(disk.Region))
- xtw.WriteAttributeString("region", disk.Region);
- if (!string.IsNullOrWhiteSpace(disk.Index))
- xtw.WriteAttributeString("index", disk.Index);
- if (disk.Writable != null)
- xtw.WriteAttributeString("writable", disk.Writable == true ? "yes" : "no");
- if (disk.ItemStatus != ItemStatus.None)
- xtw.WriteAttributeString("status", disk.ItemStatus.ToString());
- if (disk.Optional != null)
- xtw.WriteAttributeString("optional", disk.Optional == true ? "yes" : "no");
+ xtw.WriteOptionalAttributeString("sha1", disk.SHA1.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha256", disk.SHA256.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha384", disk.SHA384.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha512", disk.SHA512.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("merge", disk.MergeTag);
+ 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("optional", disk.Optional.FromYesNo());
xtw.WriteEndElement();
break;
@@ -1197,36 +1168,22 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.Name);
- if (rom.Size != -1)
- xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(rom.CRC))
- xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.MD5))
- xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
+ if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString());
+ xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(rom.SHA1))
- xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA256))
- xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA384))
- xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA512))
- xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.Bios))
- xtw.WriteAttributeString("bios", rom.Bios);
- if (!string.IsNullOrWhiteSpace(rom.MergeTag))
- xtw.WriteAttributeString("merge", rom.MergeTag);
- if (!string.IsNullOrWhiteSpace(rom.Region))
- xtw.WriteAttributeString("region", rom.Region);
- if (!string.IsNullOrWhiteSpace(rom.Offset))
- xtw.WriteAttributeString("offset", rom.Offset);
- if (rom.ItemStatus != ItemStatus.None)
- xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
- if (rom.Optional != null)
- xtw.WriteAttributeString("optional", rom.Optional == true ? "yes" : "no");
+ xtw.WriteOptionalAttributeString("sha1", rom.SHA1.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha256", rom.SHA256.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha384", rom.SHA384.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha512", rom.SHA512.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("bios", rom.Bios);
+ 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("optional", rom.Optional.FromYesNo());
xtw.WriteEndElement();
break;
diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs
index 7489479c..93536fa4 100644
--- a/SabreTools.Library/DatFiles/Logiqx.cs
+++ b/SabreTools.Library/DatFiles/Logiqx.cs
@@ -762,19 +762,15 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("datafile");
- if (Header.Build != null)
- xtw.WriteAttributeString("build", Header.Build);
- if (Header.Debug != null)
+ xtw.WriteOptionalAttributeString("build", Header.Build);
+ switch (Header.Debug)
{
- switch (Header.Debug)
- {
- case true:
- xtw.WriteAttributeString("debug", "yes");
- break;
- case false:
- xtw.WriteAttributeString("debug", "no");
- break;
- }
+ case true:
+ xtw.WriteAttributeString("debug", "yes");
+ break;
+ case false:
+ xtw.WriteAttributeString("debug", "no");
+ break;
}
xtw.WriteStartElement("header");
@@ -844,8 +840,7 @@ namespace SabreTools.Library.DatFiles
break;
}
- if (!string.IsNullOrWhiteSpace(Header.HeaderSkipper))
- xtw.WriteAttributeString("header", Header.HeaderSkipper);
+ xtw.WriteOptionalAttributeString("header", Header.HeaderSkipper);
// End clrmamepro
xtw.WriteEndElement();
@@ -858,8 +853,7 @@ namespace SabreTools.Library.DatFiles
{
xtw.WriteStartElement("romcenter");
- if (!string.IsNullOrWhiteSpace(Header.System))
- xtw.WriteAttributeString("plugin", Header.System);
+ xtw.WriteOptionalAttributeString("plugin", Header.System);
switch (Header.RomMode)
{
@@ -897,44 +891,9 @@ namespace SabreTools.Library.DatFiles
break;
}
- if (Header.LockRomMode != null)
- {
- switch (Header.LockRomMode)
- {
- case true:
- xtw.WriteAttributeString("lockrommode", "yes");
- break;
- case false:
- xtw.WriteAttributeString("lockrommode", "no");
- break;
- }
- }
-
- if (Header.LockBiosMode != null)
- {
- switch (Header.LockBiosMode)
- {
- case true:
- xtw.WriteAttributeString("lockbiosmode", "yes");
- break;
- case false:
- xtw.WriteAttributeString("lockbiosmode", "no");
- break;
- }
- }
-
- if (Header.LockSampleMode != null)
- {
- switch (Header.LockSampleMode)
- {
- case true:
- xtw.WriteAttributeString("locksamplemode", "yes");
- break;
- case false:
- xtw.WriteAttributeString("locksamplemode", "no");
- break;
- }
- }
+ xtw.WriteOptionalAttributeString("lockrommode", Header.LockRomMode.FromYesNo());
+ xtw.WriteOptionalAttributeString("lockbiosmode", Header.LockBiosMode.FromYesNo());
+ xtw.WriteOptionalAttributeString("locksamplemode", Header.LockSampleMode.FromYesNo());
// End romcenter
xtw.WriteEndElement();
@@ -970,15 +929,13 @@ namespace SabreTools.Library.DatFiles
// Build the state
xtw.WriteStartElement(_deprecated ? "game" : "machine");
xtw.WriteAttributeString("name", datItem.Machine.Name);
- if (datItem.Machine.MachineType != MachineType.NULL)
- {
- if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
- xtw.WriteAttributeString("isbios", "yes");
- if (datItem.Machine.MachineType.HasFlag(MachineType.Device))
- xtw.WriteAttributeString("isdevice", "yes");
- if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
- xtw.WriteAttributeString("ismechanical", "yes");
- }
+
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
+ xtw.WriteAttributeString("isbios", "yes");
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Device))
+ xtw.WriteAttributeString("isdevice", "yes");
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
+ xtw.WriteAttributeString("ismechanical", "yes");
if (datItem.Machine.Runnable != Runnable.NULL)
{
@@ -996,25 +953,19 @@ namespace SabreTools.Library.DatFiles
}
}
- if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
- xtw.WriteAttributeString("cloneof", datItem.Machine.CloneOf);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.RomOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
- xtw.WriteAttributeString("romof", datItem.Machine.RomOf);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.SampleOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
- xtw.WriteAttributeString("sampleof", datItem.Machine.SampleOf);
+ if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
+ xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
+ if (!string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
+ xtw.WriteOptionalAttributeString("romof", datItem.Machine.RomOf);
+ if (!string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
+ xtw.WriteOptionalAttributeString("sampleof", datItem.Machine.SampleOf);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Comment))
- xtw.WriteElementString("comment", datItem.Machine.Comment);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
- xtw.WriteElementString("description", datItem.Machine.Description);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
- xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
- xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Manufacturer))
- xtw.WriteElementString("manufacturer", datItem.Machine.Manufacturer);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
- xtw.WriteElementString("category", datItem.Machine.Category);
+ xtw.WriteOptionalAttributeString("comment", datItem.Machine.Comment);
+ xtw.WriteOptionalAttributeString("description", datItem.Machine.Description);
+ xtw.WriteOptionalAttributeString("year", datItem.Machine.Year);
+ xtw.WriteOptionalAttributeString("publisher", datItem.Machine.Publisher);
+ xtw.WriteOptionalAttributeString("manufacturer", datItem.Machine.Manufacturer);
+ xtw.WriteOptionalAttributeString("category", datItem.Machine.Category);
if (datItem.Machine.TitleID != null
|| datItem.Machine.Developer != null
@@ -1028,41 +979,21 @@ namespace SabreTools.Library.DatFiles
{
xtw.WriteStartElement("trurip");
- if (!string.IsNullOrWhiteSpace(datItem.Machine.TitleID))
- xtw.WriteElementString("titleid", datItem.Machine.TitleID);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
- xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Developer))
- xtw.WriteElementString("developer", datItem.Machine.Developer);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
- xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Genre))
- xtw.WriteElementString("genre", datItem.Machine.Genre);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Subgenre))
- xtw.WriteElementString("subgenre", datItem.Machine.Subgenre);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Ratings))
- xtw.WriteElementString("ratings", datItem.Machine.Ratings);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Score))
- xtw.WriteElementString("score", datItem.Machine.Score);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Players))
- xtw.WriteElementString("players", datItem.Machine.Players);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Enabled))
- xtw.WriteElementString("enabled", datItem.Machine.Enabled);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.TitleID))
- xtw.WriteElementString("titleid", datItem.Machine.TitleID);
- if (datItem.Machine.HasCrc != null)
- {
- if (datItem.Machine.HasCrc == true)
- xtw.WriteElementString("crc", "yes");
- else if (datItem.Machine.HasCrc == false)
- xtw.WriteElementString("crc", "no");
- }
- if (!string.IsNullOrWhiteSpace(datItem.Machine.SourceFile))
- xtw.WriteElementString("source", datItem.Machine.SourceFile);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf))
- xtw.WriteElementString("cloneof", datItem.Machine.CloneOf);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.RelatedTo))
- xtw.WriteElementString("relatedto", datItem.Machine.RelatedTo);
+ xtw.WriteOptionalAttributeString("titleid", datItem.Machine.TitleID);
+ xtw.WriteOptionalAttributeString("publisher", datItem.Machine.Publisher);
+ xtw.WriteOptionalAttributeString("developer", datItem.Machine.Developer);
+ xtw.WriteOptionalAttributeString("year", datItem.Machine.Year);
+ xtw.WriteOptionalAttributeString("genre", datItem.Machine.Genre);
+ xtw.WriteOptionalAttributeString("subgenre", datItem.Machine.Subgenre);
+ xtw.WriteOptionalAttributeString("ratings", datItem.Machine.Ratings);
+ xtw.WriteOptionalAttributeString("score", datItem.Machine.Score);
+ xtw.WriteOptionalAttributeString("players", datItem.Machine.Players);
+ xtw.WriteOptionalAttributeString("enabled", datItem.Machine.Enabled);
+ xtw.WriteOptionalAttributeString("titleid", datItem.Machine.TitleID);
+ xtw.WriteOptionalAttributeString("crc", datItem.Machine.HasCrc.FromYesNo());
+ xtw.WriteOptionalAttributeString("source", datItem.Machine.SourceFile);
+ xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
+ xtw.WriteOptionalAttributeString("relatedto", datItem.Machine.RelatedTo);
// End trurip
xtw.WriteEndElement();
@@ -1133,10 +1064,8 @@ namespace SabreTools.Library.DatFiles
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("biosset");
xtw.WriteAttributeString("name", biosSet.Name);
- if (!string.IsNullOrWhiteSpace(biosSet.Description))
- xtw.WriteAttributeString("description", biosSet.Description);
- if (biosSet.Default != null)
- xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("description", biosSet.Description);
+ xtw.WriteOptionalAttributeString("default", biosSet.Default.FromYesNo());
xtw.WriteEndElement();
break;
@@ -1144,22 +1073,15 @@ namespace SabreTools.Library.DatFiles
var disk = datItem as Disk;
xtw.WriteStartElement("disk");
xtw.WriteAttributeString("name", disk.Name);
- if (!string.IsNullOrWhiteSpace(disk.MD5))
- xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(disk.SHA1))
- xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA256))
- xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA384))
- xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA512))
- xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (disk.ItemStatus != ItemStatus.None)
- xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha1", disk.SHA1.ToLowerInvariant());
+ 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.WriteEndElement();
break;
@@ -1167,14 +1089,10 @@ namespace SabreTools.Library.DatFiles
var release = datItem as Release;
xtw.WriteStartElement("release");
xtw.WriteAttributeString("name", release.Name);
- if (!string.IsNullOrWhiteSpace(release.Region))
- xtw.WriteAttributeString("region", release.Region);
- if (!string.IsNullOrWhiteSpace(release.Language))
- xtw.WriteAttributeString("language", release.Language);
- if (!string.IsNullOrWhiteSpace(release.Date))
- xtw.WriteAttributeString("date", release.Date);
- if (release.Default != null)
- xtw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("region", release.Region);
+ xtw.WriteOptionalAttributeString("language", release.Language);
+ xtw.WriteOptionalAttributeString("date", release.Date);
+ xtw.WriteOptionalAttributeString("default", release.Default.FromYesNo());
xtw.WriteEndElement();
break;
@@ -1184,28 +1102,18 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", rom.Name);
if (rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(rom.CRC))
- xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.MD5))
- xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(rom.SHA1))
- xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA256))
- xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA384))
- xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA512))
- xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.Date))
- xtw.WriteAttributeString("date", rom.Date);
- if (rom.ItemStatus != ItemStatus.None)
- xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
- if (rom.Inverted != null)
- xtw.WriteAttributeString("inverted", rom.Inverted.ToString().ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha1", rom.SHA1.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha256", rom.SHA256.ToLowerInvariant());
+ 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("inverted", rom.Inverted.FromYesNo());
xtw.WriteEndElement();
break;
diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs
index cffcb04e..06bf3d97 100644
--- a/SabreTools.Library/DatFiles/SabreDat.cs
+++ b/SabreTools.Library/DatFiles/SabreDat.cs
@@ -896,10 +896,8 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "biosset");
xtw.WriteAttributeString("name", biosSet.Name);
- if (!string.IsNullOrWhiteSpace(biosSet.Description))
- xtw.WriteAttributeString("description", biosSet.Description);
- if (biosSet.Default != null)
- xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("description", biosSet.Description);
+ xtw.WriteOptionalAttributeString("default", biosSet.Default.FromYesNo());
xtw.WriteEndElement();
break;
@@ -908,20 +906,14 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "disk");
xtw.WriteAttributeString("name", disk.Name);
- if (!string.IsNullOrWhiteSpace(disk.MD5))
- xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(disk.SHA1))
- xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA256))
- xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA384))
- xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA512))
- xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha1", disk.SHA1.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha256", disk.SHA256.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha384", disk.SHA384.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha512", disk.SHA512.ToLowerInvariant());
if (disk.ItemStatus != ItemStatus.None)
{
xtw.WriteStartElement("flags");
@@ -942,14 +934,10 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "release");
xtw.WriteAttributeString("name", release.Name);
- if (!string.IsNullOrWhiteSpace(release.Region))
- xtw.WriteAttributeString("region", release.Region);
- if (!string.IsNullOrWhiteSpace(release.Language))
- xtw.WriteAttributeString("language", release.Language);
- if (!string.IsNullOrWhiteSpace(release.Date))
- xtw.WriteAttributeString("date", release.Date);
- if (release.Default != null)
- xtw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("region", release.Region);
+ xtw.WriteOptionalAttributeString("language", release.Language);
+ xtw.WriteOptionalAttributeString("date", release.Date);
+ xtw.WriteOptionalAttributeString("default", release.Default.FromYesNo());
xtw.WriteEndElement();
break;
@@ -958,26 +946,17 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "rom");
xtw.WriteAttributeString("name", rom.Name);
- if (rom.Size != -1)
- xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(rom.CRC))
- xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.MD5))
- xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
+ if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString());
+ xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(rom.SHA1))
- xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA256))
- xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA384))
- xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA512))
- xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.Date))
- xtw.WriteAttributeString("date", rom.Date);
+ xtw.WriteOptionalAttributeString("sha1", rom.SHA1.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha256", rom.SHA256.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha384", rom.SHA384.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha512", rom.SHA512.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("date", rom.Date);
if (rom.ItemStatus != ItemStatus.None)
{
xtw.WriteStartElement("flags");
diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs
index 0d2206a6..628b983b 100644
--- a/SabreTools.Library/DatFiles/SoftwareList.cs
+++ b/SabreTools.Library/DatFiles/SoftwareList.cs
@@ -804,33 +804,26 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("software");
xtw.WriteAttributeString("name", datItem.Machine.Name);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
- xtw.WriteAttributeString("cloneof", datItem.Machine.CloneOf);
+ if (!string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
+ xtw.WriteOptionalAttributeString("cloneof", datItem.Machine.CloneOf);
- if (datItem.Machine.Supported != Supported.NULL)
+ switch (datItem.Machine.Supported)
{
- 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;
- }
+ case Supported.No:
+ xtw.WriteAttributeString("supported", "no");
+ break;
+ case Supported.Partial:
+ xtw.WriteAttributeString("supported", "partial");
+ break;
+ case Supported.Yes:
+ xtw.WriteAttributeString("supported", "yes");
+ break;
}
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
- xtw.WriteElementString("description", datItem.Machine.Description);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
- xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
- xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
- xtw.WriteElementString("category", datItem.Machine.Category);
+ xtw.WriteOptionalAttributeString("description", datItem.Machine.Description);
+ xtw.WriteOptionalAttributeString("year", datItem.Machine.Year);
+ xtw.WriteOptionalAttributeString("publisher", datItem.Machine.Publisher);
+ xtw.WriteOptionalAttributeString("category", datItem.Machine.Category);
if (datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0)
{
@@ -955,29 +948,20 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("diskarea");
xtw.WriteAttributeString("name", areaName);
- if (disk.AreaSize != null)
- xtw.WriteAttributeString("size", disk.AreaSize.ToString());
+ xtw.WriteOptionalAttributeString("size", disk.AreaSize.ToString());
xtw.WriteStartElement("disk");
xtw.WriteAttributeString("name", disk.Name);
- if (!string.IsNullOrWhiteSpace(disk.MD5))
- xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(disk.SHA1))
- xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA256))
- xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA384))
- xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(disk.SHA512))
- xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (disk.ItemStatus != ItemStatus.None)
- xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant());
- if (disk.Writable != null)
- xtw.WriteAttributeString("writable", disk.Writable == true ? "yes" : "no");
+ xtw.WriteOptionalAttributeString("sha1", disk.SHA1.ToLowerInvariant());
+ 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("writable", disk.Writable.FromYesNo());
xtw.WriteEndElement();
// End diskarea
@@ -991,41 +975,26 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("dataarea");
xtw.WriteAttributeString("name", areaName);
- if (rom.AreaSize != null)
- xtw.WriteAttributeString("size", rom.AreaSize.ToString());
- if (rom.AreaWidth != null)
- xtw.WriteAttributeString("width", rom.AreaWidth);
- if (rom.AreaEndianness != null)
- xtw.WriteAttributeString("endianness", rom.AreaEndianness);
+ xtw.WriteOptionalAttributeString("size", rom.AreaSize.ToString());
+ xtw.WriteOptionalAttributeString("width", rom.AreaWidth);
+ xtw.WriteOptionalAttributeString("endianness", rom.AreaEndianness);
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.Name);
- if (rom.Size != -1)
- xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(rom.CRC))
- xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.MD5))
- xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
+ if (rom.Size != -1) xtw.WriteAttributeString("size", rom.Size.ToString());
+ xtw.WriteOptionalAttributeString("crc", rom.CRC.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
- xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(rom.SHA1))
- xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA256))
- xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA384))
- xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.SHA512))
- xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.Offset))
- xtw.WriteAttributeString("offset", rom.Offset);
- if (!string.IsNullOrWhiteSpace(rom.Value))
- xtw.WriteAttributeString("value", rom.Value);
- if (rom.ItemStatus != ItemStatus.None)
- xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(rom.LoadFlag))
- xtw.WriteAttributeString("loadflag", rom.LoadFlag);
+ xtw.WriteOptionalAttributeString("sha1", rom.SHA1.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha256", rom.SHA256.ToLowerInvariant());
+ xtw.WriteOptionalAttributeString("sha384", rom.SHA384.ToLowerInvariant());
+ 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("loadflag", rom.LoadFlag);
xtw.WriteEndElement();
// End dataarea
diff --git a/SabreTools.Library/IO/XmlTextWriterExtensions.cs b/SabreTools.Library/IO/XmlTextWriterExtensions.cs
index 06caa46d..e053f259 100644
--- a/SabreTools.Library/IO/XmlTextWriterExtensions.cs
+++ b/SabreTools.Library/IO/XmlTextWriterExtensions.cs
@@ -13,7 +13,7 @@ namespace SabreTools.Library.IO
/// XmlTextWriter to write out with
/// Name of the attribute
/// Value to write in the attribute
- public static void WriteAttributeStringIfExists(this XmlTextWriter writer, string localName, string value)
+ public static void WriteOptionalAttributeString(this XmlTextWriter writer, string localName, string value)
{
if (string.IsNullOrEmpty(value))
writer.WriteAttributeString(localName, value);
diff --git a/SabreTools.Library/Tools/Converters.cs b/SabreTools.Library/Tools/Converters.cs
index 90d6f301..46056d78 100644
--- a/SabreTools.Library/Tools/Converters.cs
+++ b/SabreTools.Library/Tools/Converters.cs
@@ -895,7 +895,6 @@ namespace SabreTools.Library.Tools
case "no":
case "false":
return false;
- case "partial":
default:
return null;
}
@@ -906,7 +905,33 @@ namespace SabreTools.Library.Tools
"true" => true,
"no" => false,
"false" => false,
- "partial" => null,
+ _ => null,
+ };
+#endif
+ }
+
+ ///
+ /// Get string value from input bool?
+ ///
+ /// bool? to get value from
+ /// string corresponding to the bool?
+ public static string FromYesNo(this bool? yesno)
+ {
+#if NET_FRAMEWORK
+ switch (yesno)
+ {
+ case true:
+ return "yes";
+ case false:
+ return "no";
+ default:
+ return null;
+ }
+#else
+ return yesno switch
+ {
+ true => "yes",
+ false => "no",
_ => null,
};
#endif