diff --git a/SabreTools.Library/DatFiles/AttractMode.cs b/SabreTools.Library/DatFiles/AttractMode.cs
index 70eafcbb..08a92487 100644
--- a/SabreTools.Library/DatFiles/AttractMode.cs
+++ b/SabreTools.Library/DatFiles/AttractMode.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Net;
using System.Text;
using SabreTools.Library.Data;
@@ -265,28 +266,35 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- string[] fields = new string[]
+ // Build the state
+ switch (datItem.ItemType)
{
- datItem.GetField(Field.MachineName, Header.ExcludeFields),
- datItem.GetField(Field.Description, Header.ExcludeFields),
- Header.FileName,
- datItem.GetField(Field.CloneOf, Header.ExcludeFields),
- datItem.GetField(Field.Year, Header.ExcludeFields),
- datItem.GetField(Field.Manufacturer, Header.ExcludeFields),
- datItem.GetField(Field.Category, Header.ExcludeFields),
- datItem.GetField(Field.Players, Header.ExcludeFields),
- datItem.GetField(Field.Rotation, Header.ExcludeFields),
- datItem.GetField(Field.Control, Header.ExcludeFields),
- datItem.GetField(Field.Status, Header.ExcludeFields),
- datItem.GetField(Field.DisplayCount, Header.ExcludeFields),
- datItem.GetField(Field.DisplayType, Header.ExcludeFields),
- datItem.GetField(Field.AltName, Header.ExcludeFields),
- datItem.GetField(Field.AltTitle, Header.ExcludeFields),
- datItem.GetField(Field.Comment, Header.ExcludeFields),
- datItem.GetField(Field.Buttons, Header.ExcludeFields),
- };
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+ string[] fields = new string[]
+ {
+ rom.Machine.Name,
+ rom.Machine.Description,
+ Header.FileName,
+ rom.Machine.CloneOf,
+ rom.Machine.Year,
+ rom.Machine.Manufacturer,
+ rom.Machine.Category,
+ rom.Machine.Players,
+ rom.Machine.Rotation,
+ rom.Machine.Control,
+ rom.ItemStatus.ToString(),
+ rom.Machine.DisplayCount,
+ rom.Machine.DisplayType,
+ rom.AltName,
+ rom.AltTitle,
+ rom.Machine.Comment,
+ rom.Machine.Buttons,
+ };
- svw.WriteValues(fields);
+ svw.WriteValues(fields);
+ break;
+ }
svw.Flush();
}
diff --git a/SabreTools.Library/DatFiles/ClrMamePro.cs b/SabreTools.Library/DatFiles/ClrMamePro.cs
index c35f5c6d..2cc824c6 100644
--- a/SabreTools.Library/DatFiles/ClrMamePro.cs
+++ b/SabreTools.Library/DatFiles/ClrMamePro.cs
@@ -618,24 +618,24 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
+ // Build the state
cmpw.WriteStartElement(datItem.Machine.MachineType == MachineType.Bios ? "resource" : "game");
- cmpw.WriteStandalone("name", datItem.GetField(Field.MachineName, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RomOf, Header.ExcludeFields)))
+ cmpw.WriteStandalone("name", datItem.Machine.Name);
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.RomOf))
cmpw.WriteStandalone("romof", datItem.Machine.RomOf);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf))
cmpw.WriteStandalone("cloneof", datItem.Machine.CloneOf);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SampleOf, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.SampleOf))
cmpw.WriteStandalone("sampleof", datItem.Machine.SampleOf);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Description, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
cmpw.WriteStandalone("description", datItem.Machine.Description);
- else if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Description, Header.ExcludeFields)))
+ else if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
cmpw.WriteStandalone("description", datItem.Machine.Name);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Year, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
cmpw.WriteStandalone("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Manufacturer, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Manufacturer))
cmpw.WriteStandalone("manufacturer", datItem.Machine.Manufacturer);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
cmpw.WriteStandalone("category", datItem.Machine.Category);
cmpw.Flush();
@@ -659,8 +659,8 @@ namespace SabreTools.Library.DatFiles
{
try
{
- // Build the state based on excluded fields
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SampleOf, Header.ExcludeFields)))
+ // Build the state
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.SampleOf))
cmpw.WriteStandalone("sampleof", datItem.Machine.SampleOf);
// End game
@@ -696,22 +696,22 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.Archive:
cmpw.WriteStartElement("archive");
- cmpw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
+ cmpw.WriteAttributeString("name", datItem.Name);
cmpw.WriteEndElement();
break;
case ItemType.BiosSet:
var biosSet = datItem as BiosSet;
cmpw.WriteStartElement("biosset");
- cmpw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(biosSet.GetField(Field.BiosDescription, Header.ExcludeFields)))
+ cmpw.WriteAttributeString("name", biosSet.Name);
+ if (!string.IsNullOrWhiteSpace(biosSet.Description))
cmpw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
+ if (biosSet.Default != null)
cmpw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
@@ -719,22 +719,22 @@ namespace SabreTools.Library.DatFiles
case ItemType.Disk:
var disk = datItem as Disk;
cmpw.WriteStartElement("disk");
- cmpw.WriteAttributeString("name", disk.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ cmpw.WriteAttributeString("name", disk.Name);
+ if (!string.IsNullOrWhiteSpace(disk.MD5))
cmpw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
cmpw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA1))
cmpw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA256))
cmpw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA384))
cmpw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA512))
cmpw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
+ if (disk.ItemStatus != ItemStatus.None)
cmpw.WriteAttributeString("flags", disk.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
@@ -742,14 +742,14 @@ namespace SabreTools.Library.DatFiles
case ItemType.Release:
var release = datItem as Release;
cmpw.WriteStartElement("release");
- cmpw.WriteAttributeString("name", release.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Region, Header.ExcludeFields)))
+ cmpw.WriteAttributeString("name", release.Name);
+ if (!string.IsNullOrWhiteSpace(release.Region))
cmpw.WriteAttributeString("region", release.Region);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Language, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Language))
cmpw.WriteAttributeString("language", release.Language);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Date))
cmpw.WriteAttributeString("date", release.Date);
- if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
+ if (release.Default != null)
cmpw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
@@ -757,35 +757,35 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom:
var rom = datItem as Rom;
cmpw.WriteStartElement("rom");
- cmpw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
+ cmpw.WriteAttributeString("name", rom.Name);
+ if (rom.Size != -1)
cmpw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
cmpw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MD5))
cmpw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
cmpw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA1))
cmpw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA256))
cmpw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA384))
cmpw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA512))
cmpw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Date))
cmpw.WriteAttributeString("date", rom.Date);
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
+ if (rom.ItemStatus != ItemStatus.None)
cmpw.WriteAttributeString("flags", rom.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
case ItemType.Sample:
cmpw.WriteStartElement("sample");
- cmpw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
+ cmpw.WriteAttributeString("name", datItem.Name);
cmpw.WriteEndElement();
break;
}
diff --git a/SabreTools.Library/DatFiles/DosCenter.cs b/SabreTools.Library/DatFiles/DosCenter.cs
index 25050faf..e7a10d2b 100644
--- a/SabreTools.Library/DatFiles/DosCenter.cs
+++ b/SabreTools.Library/DatFiles/DosCenter.cs
@@ -409,9 +409,9 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
+ // Build the state
cmpw.WriteStartElement("game");
- cmpw.WriteStandalone("name", $"{datItem.GetField(Field.MachineName, Header.ExcludeFields)}.zip", true);
+ cmpw.WriteStandalone("name", $"{datItem.Machine.Name}.zip", true);
cmpw.Flush();
}
@@ -465,18 +465,18 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.Rom:
var rom = datItem as Rom;
cmpw.WriteStartElement("file");
- cmpw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
+ cmpw.WriteAttributeString("name", datItem.Name);
+ if (rom.Size != -1)
cmpw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Date))
cmpw.WriteAttributeString("date", rom.Date);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
cmpw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
cmpw.WriteEndElement();
break;
diff --git a/SabreTools.Library/DatFiles/EverdriveSmdb.cs b/SabreTools.Library/DatFiles/EverdriveSmdb.cs
index 6ed0646b..0becac3f 100644
--- a/SabreTools.Library/DatFiles/EverdriveSmdb.cs
+++ b/SabreTools.Library/DatFiles/EverdriveSmdb.cs
@@ -182,7 +182,7 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.Rom:
@@ -190,12 +190,12 @@ namespace SabreTools.Library.DatFiles
string[] fields = new string[]
{
- rom.GetField(Field.SHA256, Header.ExcludeFields),
- $"{rom.GetField(Field.MachineName, Header.ExcludeFields)}/",
- rom.GetField(Field.Name, Header.ExcludeFields),
- rom.GetField(Field.SHA1, Header.ExcludeFields),
- rom.GetField(Field.MD5, Header.ExcludeFields),
- rom.GetField(Field.CRC, Header.ExcludeFields),
+ rom.SHA256,
+ $"{rom.Machine.Name}/",
+ rom.Name,
+ rom.SHA1,
+ rom.MD5,
+ rom.CRC,
};
svw.WriteValues(fields);
diff --git a/SabreTools.Library/DatFiles/Hashfile.cs b/SabreTools.Library/DatFiles/Hashfile.cs
index ac1be60b..1c100613 100644
--- a/SabreTools.Library/DatFiles/Hashfile.cs
+++ b/SabreTools.Library/DatFiles/Hashfile.cs
@@ -190,8 +190,32 @@ namespace SabreTools.Library.DatFiles
try
{
- // Build the state based on excluded fields
+ // Build the state
string[] fields = new string[2];
+
+ // Get the name field
+ string name = string.Empty;
+ switch (datItem.ItemType)
+ {
+ case ItemType.Disk:
+ var disk = datItem as Disk;
+ if (Header.GameName)
+ name = $"{disk.Machine.Name}{Path.DirectorySeparatorChar}";
+
+ name += disk.Name;
+ break;
+
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+ if (Header.GameName)
+ name = $"{rom.Machine.Name}{Path.DirectorySeparatorChar}";
+
+ name += rom.Name;
+ break;
+ }
+
+ // Get the hash field and set final fields
+ string hash = string.Empty;
switch (_hash)
{
case Hash.CRC:
@@ -199,45 +223,120 @@ namespace SabreTools.Library.DatFiles
{
case ItemType.Rom:
var rom = datItem as Rom;
- fields[0] = string.Empty;
- if (Header.GameName)
- fields[0] = $"{rom.GetField(Field.MachineName, Header.ExcludeFields)}{Path.DirectorySeparatorChar}";
- fields[0] += rom.GetField(Field.Name, Header.ExcludeFields);
- fields[1] = rom.GetField(Field.CRC, Header.ExcludeFields);
+ fields[0] = name;
+ fields[1] = rom.CRC;
break;
}
+
break;
case Hash.MD5:
-#if NET_FRAMEWORK
- case Hash.RIPEMD160:
-#endif
- case Hash.SHA1:
- case Hash.SHA256:
- case Hash.SHA384:
- case Hash.SHA512:
- Field hashField = _hash.AsField();
-
switch (datItem.ItemType)
{
case ItemType.Disk:
var disk = datItem as Disk;
- fields[0] = disk.GetField(hashField, Header.ExcludeFields);
- fields[1] = string.Empty;
- if (Header.GameName)
- fields[1] = $"{disk.GetField(Field.MachineName, Header.ExcludeFields)}{Path.DirectorySeparatorChar}";
- fields[1] += disk.GetField(Field.Name, Header.ExcludeFields);
+ fields[0] = disk.MD5;
+ fields[1] = name;
break;
case ItemType.Rom:
var rom = datItem as Rom;
- fields[0] = rom.GetField(hashField, Header.ExcludeFields);
- fields[1] = string.Empty;
- if (Header.GameName)
- fields[1] = $"{rom.GetField(Field.MachineName, Header.ExcludeFields)}{Path.DirectorySeparatorChar}";
- fields[1] += rom.GetField(Field.Name, Header.ExcludeFields);
+ fields[0] = rom.MD5;
+ fields[1] = name;
break;
}
+
+ break;
+
+#if NET_FRAMEWORK
+ case Hash.RIPEMD160:
+ switch (datItem.ItemType)
+ {
+ case ItemType.Disk:
+ var disk = datItem as Disk;
+ fields[0] = disk.RIPEMD160;
+ fields[1] = name;
+ break;
+
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+ fields[0] = rom.RIPEMD160;
+ fields[1] = name;
+ break;
+ }
+
+ break;
+#endif
+ case Hash.SHA1:
+ switch (datItem.ItemType)
+ {
+ case ItemType.Disk:
+ var disk = datItem as Disk;
+ fields[0] = disk.SHA1;
+ fields[1] = name;
+ break;
+
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+ fields[0] = rom.SHA1;
+ fields[1] = name;
+ break;
+ }
+
+ break;
+
+ case Hash.SHA256:
+ switch (datItem.ItemType)
+ {
+ case ItemType.Disk:
+ var disk = datItem as Disk;
+ fields[0] = disk.SHA256;
+ fields[1] = name;
+ break;
+
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+ fields[0] = rom.SHA256;
+ fields[1] = name;
+ break;
+ }
+
+ break;
+
+ case Hash.SHA384:
+ switch (datItem.ItemType)
+ {
+ case ItemType.Disk:
+ var disk = datItem as Disk;
+ fields[0] = disk.SHA384;
+ fields[1] = name;
+ break;
+
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+ fields[0] = rom.SHA384;
+ fields[1] = name;
+ break;
+ }
+
+ break;
+
+ case Hash.SHA512:
+ switch (datItem.ItemType)
+ {
+ case ItemType.Disk:
+ var disk = datItem as Disk;
+ fields[0] = disk.SHA512;
+ fields[1] = name;
+ break;
+
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+ fields[0] = rom.SHA512;
+ fields[1] = name;
+ break;
+ }
+
break;
}
diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs
index 2a665c89..1d1e0885 100644
--- a/SabreTools.Library/DatFiles/Json.cs
+++ b/SabreTools.Library/DatFiles/Json.cs
@@ -1583,60 +1583,60 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
+ // Build the state
jtw.WriteStartObject();
#region Common
jtw.WritePropertyName("name");
- jtw.WriteValue(datItem.GetField(Field.MachineName, Header.ExcludeFields));
+ jtw.WriteValue(datItem.Machine.Name);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Comment, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Comment))
{
jtw.WritePropertyName("comment");
jtw.WriteValue(datItem.Machine.Comment);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Description, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
{
jtw.WritePropertyName("description");
jtw.WriteValue(datItem.Machine.Description);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Year, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
{
jtw.WritePropertyName("year");
jtw.WriteValue(datItem.Machine.Year);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Manufacturer, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Manufacturer))
{
jtw.WritePropertyName("manufacturer");
jtw.WriteValue(datItem.Machine.Manufacturer);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Publisher, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
{
jtw.WritePropertyName("publisher");
jtw.WriteValue(datItem.Machine.Publisher);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
{
jtw.WritePropertyName("category");
jtw.WriteValue(datItem.Machine.Category);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RomOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.RomOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
{
jtw.WritePropertyName("romof");
jtw.WriteValue(datItem.Machine.RomOf);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
{
jtw.WritePropertyName("cloneof");
jtw.WriteValue(datItem.Machine.CloneOf);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SampleOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.SampleOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
{
jtw.WritePropertyName("sampleof");
jtw.WriteValue(datItem.Machine.SampleOf);
}
- if (!Header.ExcludeFields.Contains(Field.MachineType))
+ if (datItem.Machine.MachineType != MachineType.NULL)
{
if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
{
@@ -1659,37 +1659,37 @@ namespace SabreTools.Library.DatFiles
#region AttractMode
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Players, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Players))
{
jtw.WritePropertyName("players");
jtw.WriteValue(datItem.Machine.Players);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Rotation, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Rotation))
{
jtw.WritePropertyName("rotation");
jtw.WriteValue(datItem.Machine.Rotation);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Control, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Control))
{
jtw.WritePropertyName("control");
jtw.WriteValue(datItem.Machine.Control);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SupportStatus, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Status))
{
jtw.WritePropertyName("status");
jtw.WriteValue(datItem.Machine.Status);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.DisplayCount, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.DisplayCount))
{
jtw.WritePropertyName("displaycount");
jtw.WriteValue(datItem.Machine.DisplayCount);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.DisplayType, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.DisplayType))
{
jtw.WritePropertyName("displaytype");
jtw.WriteValue(datItem.Machine.DisplayType);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Buttons, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Buttons))
{
jtw.WritePropertyName("buttons");
jtw.WriteValue(datItem.Machine.Buttons);
@@ -1699,12 +1699,12 @@ namespace SabreTools.Library.DatFiles
#region ListXML
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.SourceFile))
{
jtw.WritePropertyName("sourcefile");
jtw.WriteValue(datItem.Machine.SourceFile);
}
- if (!Header.ExcludeFields.Contains(Field.Runnable) && datItem.Machine.Runnable != null)
+ if (datItem.Machine.Runnable != Runnable.NULL)
{
switch (datItem.Machine.Runnable)
{
@@ -1722,7 +1722,7 @@ namespace SabreTools.Library.DatFiles
break;
}
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.DeviceReferences, Header.ExcludeFields)))
+ if (datItem.Machine.DeviceReferences != null)
{
jtw.WritePropertyName("devices");
jtw.WriteStartArray();
@@ -1736,7 +1736,7 @@ namespace SabreTools.Library.DatFiles
// TODO: Add Field.Slots
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Infos, Header.ExcludeFields)))
+ if (datItem.Machine.Infos != null)
{
jtw.WritePropertyName("infos");
jtw.WriteStartArray();
@@ -1755,12 +1755,12 @@ namespace SabreTools.Library.DatFiles
#region Logiqx
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Board, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Board))
{
jtw.WritePropertyName("board");
jtw.WriteValue(datItem.Machine.Board);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RebuildTo, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.RebuildTo))
{
jtw.WritePropertyName("rebuildto");
jtw.WriteValue(datItem.Machine.RebuildTo);
@@ -1770,42 +1770,42 @@ namespace SabreTools.Library.DatFiles
#region Logiqx EmuArc
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.TitleID, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.TitleID))
{
jtw.WritePropertyName("titleid");
jtw.WriteValue(datItem.Machine.TitleID);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Developer, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Developer))
{
jtw.WritePropertyName("developer");
jtw.WriteValue(datItem.Machine.Developer);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Genre, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Genre))
{
jtw.WritePropertyName("genre");
jtw.WriteValue(datItem.Machine.Genre);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Subgenre, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Subgenre))
{
jtw.WritePropertyName("subgenre");
jtw.WriteValue(datItem.Machine.Subgenre);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Ratings, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Ratings))
{
jtw.WritePropertyName("ratings");
jtw.WriteValue(datItem.Machine.Ratings);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Score, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Score))
{
jtw.WritePropertyName("score");
jtw.WriteValue(datItem.Machine.Score);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Enabled, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Enabled))
{
jtw.WritePropertyName("enabled");
jtw.WriteValue(datItem.Machine.Enabled);
}
- if (!Header.ExcludeFields.Contains(Field.HasCrc) && datItem.Machine.HasCrc != null)
+ if (datItem.Machine.HasCrc != null)
{
if (datItem.Machine.HasCrc == true)
{
@@ -1818,7 +1818,7 @@ namespace SabreTools.Library.DatFiles
jtw.WriteValue("no");
}
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RelatedTo, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.RelatedTo))
{
jtw.WritePropertyName("relatedto");
jtw.WriteValue(datItem.Machine.RelatedTo);
@@ -1828,17 +1828,17 @@ namespace SabreTools.Library.DatFiles
#region OpenMSX
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.GenMSXID, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.GenMSXID))
{
jtw.WritePropertyName("genmsxid");
jtw.WriteValue(datItem.Machine.GenMSXID);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.System, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.System))
{
jtw.WritePropertyName("system");
jtw.WriteValue(datItem.Machine.System);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Country, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Country))
{
jtw.WritePropertyName("country");
jtw.WriteValue(datItem.Machine.Country);
@@ -1848,7 +1848,7 @@ namespace SabreTools.Library.DatFiles
#region SoftwareList
- if (!Header.ExcludeFields.Contains(Field.Supported) && datItem.Machine.Supported != Supported.NULL)
+ if (datItem.Machine.Supported != Supported.NULL)
{
switch (datItem.Machine.Supported)
{
@@ -1866,7 +1866,7 @@ namespace SabreTools.Library.DatFiles
break;
}
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SharedFeatures, Header.ExcludeFields)))
+ if (datItem.Machine.SharedFeatures != null)
{
jtw.WritePropertyName("sharedfeat");
jtw.WriteStartArray();
@@ -1880,7 +1880,7 @@ namespace SabreTools.Library.DatFiles
jtw.WriteEndArray();
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.DipSwitches, Header.ExcludeFields)))
+ if (datItem.Machine.DipSwitches != null)
{
jtw.WritePropertyName("dipswitches");
jtw.WriteStartArray();
@@ -1980,7 +1980,7 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
jtw.WriteStartObject();
jtw.WritePropertyName("type");
@@ -1989,20 +1989,20 @@ namespace SabreTools.Library.DatFiles
case ItemType.Archive:
jtw.WriteValue("archive");
jtw.WritePropertyName("name");
- jtw.WriteValue(datItem.GetField(Field.Name, Header.ExcludeFields));
+ jtw.WriteValue(datItem.Name);
break;
case ItemType.BiosSet:
var biosSet = datItem as BiosSet;
jtw.WriteValue("biosset");
jtw.WritePropertyName("name");
- jtw.WriteValue(biosSet.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
+ jtw.WriteValue(biosSet.Name);
+ if (!string.IsNullOrWhiteSpace(biosSet.Description))
{
jtw.WritePropertyName("description");
jtw.WriteValue(biosSet.Description);
}
- if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
+ if (biosSet.Default != null)
{
jtw.WritePropertyName("default");
jtw.WriteValue(biosSet.Default);
@@ -2013,65 +2013,65 @@ namespace SabreTools.Library.DatFiles
var disk = datItem as Disk;
jtw.WriteValue("disk");
jtw.WritePropertyName("name");
- jtw.WriteValue(disk.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.MD5, Header.ExcludeFields)))
+ jtw.WriteValue(disk.Name);
+ if (!string.IsNullOrWhiteSpace(disk.MD5))
{
jtw.WritePropertyName("md5");
jtw.WriteValue(disk.MD5.ToLowerInvariant());
}
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
{
jtw.WritePropertyName("ripemd160");
jtw.WriteValue(disk.RIPEMD160.ToLowerInvariant());
}
#endif
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA1))
{
jtw.WritePropertyName("sha1");
jtw.WriteValue(disk.SHA1.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA256))
{
jtw.WritePropertyName("sha256");
jtw.WriteValue(disk.SHA256.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA384))
{
jtw.WritePropertyName("sha384");
jtw.WriteValue(disk.SHA384.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA512))
{
jtw.WritePropertyName("sha512");
jtw.WriteValue(disk.SHA512.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.Merge, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.MergeTag))
{
jtw.WritePropertyName("merge");
jtw.WriteValue(disk.MergeTag);
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.Region, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.Region))
{
jtw.WritePropertyName("region");
jtw.WriteValue(disk.Region);
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.Index, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.Index))
{
jtw.WritePropertyName("index");
jtw.WriteValue(disk.Index);
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.Writable, Header.ExcludeFields)))
+ if (disk.Writable != null)
{
jtw.WritePropertyName("writable");
jtw.WriteValue(disk.Writable);
}
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
+ if (disk.ItemStatus != ItemStatus.None)
{
jtw.WritePropertyName("status");
jtw.WriteValue(disk.ItemStatus.ToString().ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(disk.GetField(Field.Optional, Header.ExcludeFields)))
+ if (disk.Optional != null)
{
jtw.WritePropertyName("optional");
jtw.WriteValue(disk.Optional);
@@ -2082,23 +2082,23 @@ namespace SabreTools.Library.DatFiles
var release = datItem as Release;
jtw.WriteValue("release");
jtw.WritePropertyName("name");
- jtw.WriteValue(release.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(release.GetField(Field.Region, Header.ExcludeFields)))
+ jtw.WriteValue(release.Name);
+ if (!string.IsNullOrWhiteSpace(release.Region))
{
jtw.WritePropertyName("region");
jtw.WriteValue(release.Region);
}
- if (!string.IsNullOrWhiteSpace(release.GetField(Field.Language, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Language))
{
jtw.WritePropertyName("language");
jtw.WriteValue(release.Language);
}
- if (!string.IsNullOrWhiteSpace(release.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Date))
{
jtw.WritePropertyName("date");
jtw.WriteValue(release.Date);
}
- if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
+ if (release.Default != null)
{
jtw.WritePropertyName("default");
jtw.WriteValue(release.Default);
@@ -2109,85 +2109,85 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
jtw.WriteValue("rom");
jtw.WritePropertyName("name");
- jtw.WriteValue(rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
+ jtw.WriteValue(rom.Name);
+ if (rom.Size != -1)
{
jtw.WritePropertyName("size");
jtw.WriteValue(rom.Size);
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Offset, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Offset))
{
jtw.WritePropertyName("offset");
jtw.WriteValue(rom.Offset);
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
{
jtw.WritePropertyName("crc");
jtw.WriteValue(rom.CRC.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.MD5, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MD5))
{
jtw.WritePropertyName("md5");
jtw.WriteValue(rom.MD5.ToLowerInvariant());
}
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
{
jtw.WritePropertyName("ripemd160");
jtw.WriteValue(rom.RIPEMD160.ToLowerInvariant());
}
#endif
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA1))
{
jtw.WritePropertyName("sha1");
jtw.WriteValue(rom.SHA1.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA256))
{
jtw.WritePropertyName("sha256");
jtw.WriteValue(rom.SHA256.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA384))
{
jtw.WritePropertyName("sha384");
jtw.WriteValue(rom.SHA384.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA512))
{
jtw.WritePropertyName("sha512");
jtw.WriteValue(rom.SHA512.ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Bios, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Bios))
{
jtw.WritePropertyName("bios");
jtw.WriteValue(rom.Bios);
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Merge, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MergeTag))
{
jtw.WritePropertyName("merge");
jtw.WriteValue(rom.MergeTag);
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Region, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Region))
{
jtw.WritePropertyName("region");
jtw.WriteValue(rom.Region);
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Date))
{
jtw.WritePropertyName("date");
jtw.WriteValue(rom.Date);
}
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
+ if (rom.ItemStatus != ItemStatus.None)
{
jtw.WritePropertyName("status");
jtw.WriteValue(rom.ItemStatus.ToString().ToLowerInvariant());
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Optional, Header.ExcludeFields)))
+ if (rom.Optional != null)
{
jtw.WritePropertyName("optional");
jtw.WriteValue(rom.Optional);
}
- if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Inverted, Header.ExcludeFields)))
+ if (rom.Inverted != null)
{
jtw.WritePropertyName("inverted");
jtw.WriteValue(rom.Inverted);
@@ -2197,18 +2197,18 @@ namespace SabreTools.Library.DatFiles
case ItemType.Sample:
jtw.WriteValue("sample");
jtw.WritePropertyName("name");
- jtw.WriteValue(datItem.GetField(Field.Name, Header.ExcludeFields));
+ jtw.WriteValue(datItem.Name);
break;
}
#region AttractMode
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AltName, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.AltName))
{
jtw.WritePropertyName("alt_romname");
jtw.WriteValue(datItem.AltName);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AltTitle, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.AltTitle))
{
jtw.WritePropertyName("alt_title");
jtw.WriteValue(datItem.AltTitle);
@@ -2218,27 +2218,27 @@ namespace SabreTools.Library.DatFiles
#region OpenMSX
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Original, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Original?.Content ?? string.Empty))
{
jtw.WritePropertyName("original");
jtw.WriteValue(datItem.Original.Content);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.OpenMSXSubType, Header.ExcludeFields)))
+ if (datItem.OpenMSXSubType != OpenMSXSubType.NULL)
{
jtw.WritePropertyName("openmsx_subtype");
jtw.WriteValue(datItem.OpenMSXSubType);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.OpenMSXType, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.OpenMSXType))
{
jtw.WritePropertyName("openmsx_type");
jtw.WriteValue(datItem.OpenMSXType);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Remark, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Remark))
{
jtw.WritePropertyName("remark");
jtw.WriteValue(datItem.Remark);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Boot, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Boot))
{
jtw.WritePropertyName("boot");
jtw.WriteValue(datItem.Boot);
@@ -2248,17 +2248,17 @@ namespace SabreTools.Library.DatFiles
#region SoftwareList
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.PartName, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.PartName))
{
jtw.WritePropertyName("partname");
jtw.WriteValue(datItem.PartName);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.PartInterface, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.PartInterface))
{
jtw.WritePropertyName("partinterface");
jtw.WriteValue(datItem.PartInterface);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Features, Header.ExcludeFields)))
+ if (datItem.Features != null)
{
jtw.WritePropertyName("features");
jtw.WriteStartArray();
@@ -2272,32 +2272,32 @@ namespace SabreTools.Library.DatFiles
jtw.WriteEndArray();
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AreaName, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.AreaName))
{
jtw.WritePropertyName("areaname");
jtw.WriteValue(datItem.AreaName);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AreaSize, Header.ExcludeFields)))
+ if (datItem.AreaSize != null)
{
jtw.WritePropertyName("areasize");
jtw.WriteValue(datItem.AreaSize);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AreaWidth, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.AreaWidth))
{
jtw.WritePropertyName("areawidth");
jtw.WriteValue(datItem.AreaWidth);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.AreaEndianness, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.AreaEndianness))
{
jtw.WritePropertyName("areaendianness");
jtw.WriteValue(datItem.AreaEndianness);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Value))
{
jtw.WritePropertyName("value");
jtw.WriteValue(datItem.Value);
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.LoadFlag, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.LoadFlag))
{
jtw.WritePropertyName("loadflag");
jtw.WriteValue(datItem.LoadFlag);
diff --git a/SabreTools.Library/DatFiles/Listrom.cs b/SabreTools.Library/DatFiles/Listrom.cs
index 9e6e93c7..028b3bf9 100644
--- a/SabreTools.Library/DatFiles/Listrom.cs
+++ b/SabreTools.Library/DatFiles/Listrom.cs
@@ -367,8 +367,8 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
rom.Machine.Name = rom.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
- sw.Write($"ROMs required for driver \"{rom.GetField(Field.MachineName, Header.ExcludeFields)}\".\n");
+ // Build the state
+ sw.Write($"ROMs required for driver \"{rom.Machine.Name}\".\n");
sw.Write("Name Size Checksum\n");
sw.Flush();
@@ -423,7 +423,7 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.Disk:
@@ -436,19 +436,19 @@ namespace SabreTools.Library.DatFiles
sw.Write($"{disk.Name} ");
// If we have a baddump, put the first indicator
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus == ItemStatus.BadDump)
+ if (disk.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD");
// If we have a nodump, write out the indicator
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus == ItemStatus.Nodump)
+ if (disk.ItemStatus == ItemStatus.Nodump)
sw.Write(" NO GOOD DUMP KNOWN");
// Otherwise, write out the SHA-1 hash
- else if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ else if (!string.IsNullOrWhiteSpace(disk.SHA1))
sw.Write($" SHA1({disk.SHA1})");
// If we have a baddump, put the second indicator
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus == ItemStatus.BadDump)
+ if (disk.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD_DUMP");
sw.Write("\n");
@@ -468,25 +468,25 @@ namespace SabreTools.Library.DatFiles
sw.Write(rom.Size);
// If we have a baddump, put the first indicator
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus == ItemStatus.BadDump)
+ if (rom.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD");
// If we have a nodump, write out the indicator
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus == ItemStatus.Nodump)
+ if (rom.ItemStatus == ItemStatus.Nodump)
{
sw.Write(" NO GOOD DUMP KNOWN");
}
// Otherwise, write out the CRC and SHA-1 hashes
else
{
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
sw.Write($" CRC({rom.CRC})");
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA1))
sw.Write($" SHA1({rom.SHA1})");
}
// If we have a baddump, put the second indicator
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus == ItemStatus.BadDump)
+ if (rom.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD_DUMP");
sw.Write("\n");
diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs
index 62f98484..f2b6378f 100644
--- a/SabreTools.Library/DatFiles/Listxml.cs
+++ b/SabreTools.Library/DatFiles/Listxml.cs
@@ -1035,13 +1035,13 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
+ // Build the state
xtw.WriteStartElement("machine");
- xtw.WriteAttributeString("name", datItem.GetField(Field.MachineName, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", datItem.Machine.Name);
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.SourceFile))
xtw.WriteAttributeString("sourcefile", datItem.Machine.SourceFile);
- if (!Header.ExcludeFields.Contains(Field.MachineType))
+ if (datItem.Machine.MachineType != MachineType.NULL)
{
if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
xtw.WriteAttributeString("isbios", "yes");
@@ -1051,7 +1051,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("ismechanical", "yes");
}
- if (!Header.ExcludeFields.Contains(Field.Runnable))
+ if (datItem.Machine.Runnable != Runnable.NULL)
{
switch (datItem.Machine.Runnable)
{
@@ -1067,23 +1067,23 @@ namespace SabreTools.Library.DatFiles
}
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
+ 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.GetField(Field.RomOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
+ 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.GetField(Field.SampleOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
+ 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.GetField(Field.Description, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
xtw.WriteElementString("description", datItem.Machine.Description);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Year, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Publisher, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
xtw.WriteElementString("category", datItem.Machine.Category);
- if (!Header.ExcludeFields.Contains(Field.Infos) && datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0)
+ if (datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0)
{
foreach (ListXmlInfo kvp in datItem.Machine.Infos)
{
@@ -1146,16 +1146,16 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.BiosSet:
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("biosset");
- xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", biosSet.Name);
+ if (!string.IsNullOrWhiteSpace(biosSet.Description))
xtw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
+ if (biosSet.Default != null)
xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -1163,32 +1163,32 @@ namespace SabreTools.Library.DatFiles
case ItemType.Disk:
var disk = datItem as Disk;
xtw.WriteStartElement("disk");
- xtw.WriteAttributeString("name", disk.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", disk.Name);
+ if (!string.IsNullOrWhiteSpace(disk.MD5))
xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA1))
xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA256))
xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA384))
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA512))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Merge, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.MergeTag))
xtw.WriteAttributeString("merge", disk.MergeTag);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Region, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.Region))
xtw.WriteAttributeString("region", disk.Region);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Index, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.Index))
xtw.WriteAttributeString("index", disk.Index);
- if (!Header.ExcludeFields.Contains(Field.Writable) && disk.Writable != null)
+ if (disk.Writable != null)
xtw.WriteAttributeString("writable", disk.Writable == true ? "yes" : "no");
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
+ if (disk.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", disk.ItemStatus.ToString());
- if (!Header.ExcludeFields.Contains(Field.Optional) && disk.Optional != null)
+ if (disk.Optional != null)
xtw.WriteAttributeString("optional", disk.Optional == true ? "yes" : "no");
xtw.WriteEndElement();
break;
@@ -1196,43 +1196,43 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom:
var rom = datItem as Rom;
xtw.WriteStartElement("rom");
- xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
+ xtw.WriteAttributeString("name", rom.Name);
+ if (rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MD5))
xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA1))
xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA256))
xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA384))
xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA512))
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Bios, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Bios))
xtw.WriteAttributeString("bios", rom.Bios);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Merge, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MergeTag))
xtw.WriteAttributeString("merge", rom.MergeTag);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Region, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Region))
xtw.WriteAttributeString("region", rom.Region);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Offset))
xtw.WriteAttributeString("offset", rom.Offset);
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
+ if (rom.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
- if (!Header.ExcludeFields.Contains(Field.Optional) && rom.Optional != null)
+ if (rom.Optional != null)
xtw.WriteAttributeString("optional", rom.Optional == true ? "yes" : "no");
xtw.WriteEndElement();
break;
case ItemType.Sample:
xtw.WriteStartElement("sample");
- xtw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
+ xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
}
diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs
index 2f91b691..7489479c 100644
--- a/SabreTools.Library/DatFiles/Logiqx.cs
+++ b/SabreTools.Library/DatFiles/Logiqx.cs
@@ -967,10 +967,10 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
+ // Build the state
xtw.WriteStartElement(_deprecated ? "game" : "machine");
- xtw.WriteAttributeString("name", datItem.GetField(Field.MachineName, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.MachineType))
+ xtw.WriteAttributeString("name", datItem.Machine.Name);
+ if (datItem.Machine.MachineType != MachineType.NULL)
{
if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
xtw.WriteAttributeString("isbios", "yes");
@@ -980,7 +980,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("ismechanical", "yes");
}
- if (!Header.ExcludeFields.Contains(Field.Runnable) && datItem.Machine.Runnable != null)
+ if (datItem.Machine.Runnable != Runnable.NULL)
{
switch (datItem.Machine.Runnable)
{
@@ -996,24 +996,24 @@ namespace SabreTools.Library.DatFiles
}
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
+ 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.GetField(Field.RomOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.RomOf, StringComparison.OrdinalIgnoreCase))
+ 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.GetField(Field.SampleOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.SampleOf, StringComparison.OrdinalIgnoreCase))
+ 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.GetField(Field.Comment, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Comment))
xtw.WriteElementString("comment", datItem.Machine.Comment);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Description, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
xtw.WriteElementString("description", datItem.Machine.Description);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Year, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Publisher, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Manufacturer, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Manufacturer))
xtw.WriteElementString("manufacturer", datItem.Machine.Manufacturer);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
xtw.WriteElementString("category", datItem.Machine.Category);
if (datItem.Machine.TitleID != null
@@ -1028,40 +1028,40 @@ namespace SabreTools.Library.DatFiles
{
xtw.WriteStartElement("trurip");
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.TitleID, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.TitleID))
xtw.WriteElementString("titleid", datItem.Machine.TitleID);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Publisher, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Developer, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Developer))
xtw.WriteElementString("developer", datItem.Machine.Developer);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Year, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Genre, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Genre))
xtw.WriteElementString("genre", datItem.Machine.Genre);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Subgenre, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Subgenre))
xtw.WriteElementString("subgenre", datItem.Machine.Subgenre);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Ratings, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Ratings))
xtw.WriteElementString("ratings", datItem.Machine.Ratings);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Score, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Score))
xtw.WriteElementString("score", datItem.Machine.Score);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Players, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Players))
xtw.WriteElementString("players", datItem.Machine.Players);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Enabled, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Enabled))
xtw.WriteElementString("enabled", datItem.Machine.Enabled);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.TitleID, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.TitleID))
xtw.WriteElementString("titleid", datItem.Machine.TitleID);
- if (!Header.ExcludeFields.Contains(Field.HasCrc) && datItem.Machine.HasCrc != null)
+ 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.GetField(Field.SourceFile, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.SourceFile))
xtw.WriteElementString("source", datItem.Machine.SourceFile);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf))
xtw.WriteElementString("cloneof", datItem.Machine.CloneOf);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RelatedTo, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.RelatedTo))
xtw.WriteElementString("relatedto", datItem.Machine.RelatedTo);
// End trurip
@@ -1120,22 +1120,22 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.Archive:
xtw.WriteStartElement("archive");
- xtw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
+ xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
case ItemType.BiosSet:
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("biosset");
- xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", biosSet.Name);
+ if (!string.IsNullOrWhiteSpace(biosSet.Description))
xtw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
+ if (biosSet.Default != null)
xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -1143,22 +1143,22 @@ namespace SabreTools.Library.DatFiles
case ItemType.Disk:
var disk = datItem as Disk;
xtw.WriteStartElement("disk");
- xtw.WriteAttributeString("name", disk.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", disk.Name);
+ if (!string.IsNullOrWhiteSpace(disk.MD5))
xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA1))
xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA256))
xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA384))
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA512))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
+ if (disk.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -1166,14 +1166,14 @@ namespace SabreTools.Library.DatFiles
case ItemType.Release:
var release = datItem as Release;
xtw.WriteStartElement("release");
- xtw.WriteAttributeString("name", release.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Region, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", release.Name);
+ if (!string.IsNullOrWhiteSpace(release.Region))
xtw.WriteAttributeString("region", release.Region);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Language, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Language))
xtw.WriteAttributeString("language", release.Language);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Date))
xtw.WriteAttributeString("date", release.Date);
- if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
+ if (release.Default != null)
xtw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -1181,37 +1181,37 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom:
var rom = datItem as Rom;
xtw.WriteStartElement("rom");
- xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
+ xtw.WriteAttributeString("name", rom.Name);
+ if (rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MD5))
xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA1))
xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA256))
xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA384))
xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA512))
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Date))
xtw.WriteAttributeString("date", rom.Date);
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
+ if (rom.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
- if (!Header.ExcludeFields.Contains(Field.Inverted) && rom.Inverted != null)
+ if (rom.Inverted != null)
xtw.WriteAttributeString("inverted", rom.Inverted.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
case ItemType.Sample:
xtw.WriteStartElement("sample");
- xtw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
+ xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
}
diff --git a/SabreTools.Library/DatFiles/Missfile.cs b/SabreTools.Library/DatFiles/Missfile.cs
index 8512b221..2ad377d7 100644
--- a/SabreTools.Library/DatFiles/Missfile.cs
+++ b/SabreTools.Library/DatFiles/Missfile.cs
@@ -138,11 +138,11 @@ namespace SabreTools.Library.DatFiles
// Romba mode automatically uses item name
if (Header.OutputDepot.IsActive || Header.UseRomName)
{
- sw.Write($"{datItem.GetField(Field.Name, Header.ExcludeFields)}\n");
+ sw.Write($"{datItem.Name}\n");
}
else if (!Header.UseRomName && datItem.Machine.Name != lastgame)
{
- sw.Write($"{datItem.GetField(Field.MachineName, Header.ExcludeFields)}\n");
+ sw.Write($"{datItem.Machine.Name}\n");
lastgame = datItem.Machine.Name;
}
diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs
index 58a7fc38..39953bb5 100644
--- a/SabreTools.Library/DatFiles/OfflineList.cs
+++ b/SabreTools.Library/DatFiles/OfflineList.cs
@@ -899,20 +899,20 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
xtw.WriteStartElement("game");
xtw.WriteElementString("imageNumber", "1");
xtw.WriteElementString("releaseNumber", "1");
- xtw.WriteElementString("title", datItem.GetField(Field.Name, Header.ExcludeFields) ?? string.Empty);
+ xtw.WriteElementString("title", datItem.Name ?? string.Empty);
xtw.WriteElementString("saveType", "None");
if (datItem.ItemType == ItemType.Rom)
{
var rom = datItem as Rom;
- xtw.WriteElementString("romSize", datItem.GetField(Field.Size, Header.ExcludeFields) ?? string.Empty);
+ xtw.WriteElementString("romSize", rom.Size.ToString() ?? string.Empty);
}
- xtw.WriteElementString("publisher", datItem.GetField(Field.Publisher, Header.ExcludeFields) ?? string.Empty);
+ xtw.WriteElementString("publisher", datItem.Machine.Publisher ?? string.Empty);
xtw.WriteElementString("location", "0");
xtw.WriteElementString("sourceRom", "None");
xtw.WriteElementString("language", "0");
@@ -921,14 +921,14 @@ namespace SabreTools.Library.DatFiles
{
var disk = datItem as Disk;
xtw.WriteStartElement("files");
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.MD5))
{
xtw.WriteStartElement("romMD5");
xtw.WriteAttributeString("extension", ".chd");
xtw.WriteString(disk.MD5.ToUpperInvariant());
xtw.WriteEndElement();
}
- else if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ else if (!string.IsNullOrWhiteSpace(disk.SHA1))
{
xtw.WriteStartElement("romSHA1");
xtw.WriteAttributeString("extension", ".chd");
@@ -945,21 +945,21 @@ namespace SabreTools.Library.DatFiles
string tempext = "." + PathExtensions.GetNormalizedExtension(rom.Name);
xtw.WriteStartElement("files");
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
{
xtw.WriteStartElement("romCRC");
xtw.WriteAttributeString("extension", tempext);
xtw.WriteString(rom.CRC.ToUpperInvariant());
xtw.WriteEndElement();
}
- else if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ else if (!string.IsNullOrWhiteSpace(rom.MD5))
{
xtw.WriteStartElement("romMD5");
xtw.WriteAttributeString("extension", tempext);
xtw.WriteString(rom.MD5.ToUpperInvariant());
xtw.WriteEndElement();
}
- else if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ else if (!string.IsNullOrWhiteSpace(rom.SHA1))
{
xtw.WriteStartElement("romSHA1");
xtw.WriteAttributeString("extension", tempext);
@@ -973,8 +973,8 @@ namespace SabreTools.Library.DatFiles
xtw.WriteElementString("im1CRC", "00000000");
xtw.WriteElementString("im2CRC", "00000000");
- xtw.WriteElementString("comment", datItem.GetField(Field.Comment, Header.ExcludeFields) ?? string.Empty);
- xtw.WriteElementString("duplicateID", datItem.GetField(Field.CloneOf, Header.ExcludeFields) ?? string.Empty);
+ xtw.WriteElementString("comment", datItem.Machine.Comment ?? string.Empty);
+ xtw.WriteElementString("duplicateID", datItem.Machine.CloneOf ?? string.Empty);
// End game
xtw.WriteEndElement();
diff --git a/SabreTools.Library/DatFiles/OpenMSX.cs b/SabreTools.Library/DatFiles/OpenMSX.cs
index 0bd158b1..0859268e 100644
--- a/SabreTools.Library/DatFiles/OpenMSX.cs
+++ b/SabreTools.Library/DatFiles/OpenMSX.cs
@@ -658,14 +658,14 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
+ // Build the state
xtw.WriteStartElement("software");
- xtw.WriteElementString("title", datItem.GetField(Field.MachineName, Header.ExcludeFields));
- xtw.WriteElementString("genmsxid", datItem.GetField(Field.GenMSXID, Header.ExcludeFields));
- xtw.WriteElementString("system", datItem.GetField(Field.System, Header.ExcludeFields));
- xtw.WriteElementString("company", datItem.GetField(Field.Manufacturer, Header.ExcludeFields));
- xtw.WriteElementString("year", datItem.GetField(Field.Year, Header.ExcludeFields));
- xtw.WriteElementString("country", datItem.GetField(Field.Country, Header.ExcludeFields));
+ xtw.WriteElementString("title", datItem.Machine.Name);
+ xtw.WriteElementString("genmsxid", datItem.Machine.GenMSXID);
+ xtw.WriteElementString("system", datItem.Machine.System);
+ xtw.WriteElementString("company", datItem.Machine.Manufacturer);
+ xtw.WriteElementString("year", datItem.Machine.Year);
+ xtw.WriteElementString("country", datItem.Machine.Country);
xtw.Flush();
}
@@ -719,14 +719,14 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.Rom:
var rom = datItem as Rom;
xtw.WriteStartElement("dump");
- if (!Header.ExcludeFields.Contains(Field.Original) && rom.Original != null)
+ if (rom.Original != null)
{
xtw.WriteStartElement("original");
xtw.WriteAttributeString("value", rom.Original.Value == true ? "true" : "false");
@@ -740,34 +740,34 @@ namespace SabreTools.Library.DatFiles
case OpenMSXSubType.Rom:
case OpenMSXSubType.NULL:
xtw.WriteStartElement("rom");
- xtw.WriteElementString("hash", rom.GetField(Field.SHA1, Header.ExcludeFields).ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields)))
+ xtw.WriteElementString("hash", rom.SHA1.ToLowerInvariant());
+ if (!string.IsNullOrWhiteSpace(rom.Offset))
xtw.WriteElementString("start", rom.Offset);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.OpenMSXType, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.OpenMSXType))
xtw.WriteElementString("type", rom.OpenMSXType);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Remark, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Remark))
xtw.WriteElementString("remark", rom.Remark);
xtw.WriteEndElement();
break;
case OpenMSXSubType.MegaRom:
xtw.WriteStartElement("megarom");
- xtw.WriteElementString("hash", rom.GetField(Field.SHA1, Header.ExcludeFields).ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields)))
+ xtw.WriteElementString("hash", rom.SHA1.ToLowerInvariant());
+ if (!string.IsNullOrWhiteSpace(rom.Offset))
xtw.WriteElementString("start", rom.Offset);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.OpenMSXType, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.OpenMSXType))
xtw.WriteElementString("type", rom.OpenMSXType);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Remark, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Remark))
xtw.WriteElementString("remark", rom.Remark);
xtw.WriteEndElement();
break;
case OpenMSXSubType.SCCPlusCart:
xtw.WriteStartElement("sccpluscart");
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Boot, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Boot))
xtw.WriteElementString("boot", rom.Boot);
- xtw.WriteElementString("hash", rom.GetField(Field.SHA1, Header.ExcludeFields).ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Remark, Header.ExcludeFields)))
+ xtw.WriteElementString("hash", rom.SHA1.ToLowerInvariant());
+ if (!string.IsNullOrWhiteSpace(rom.Remark))
xtw.WriteElementString("remark", rom.Remark);
xtw.WriteEndElement();
break;
diff --git a/SabreTools.Library/DatFiles/RomCenter.cs b/SabreTools.Library/DatFiles/RomCenter.cs
index 5f6c94bd..e501f02b 100644
--- a/SabreTools.Library/DatFiles/RomCenter.cs
+++ b/SabreTools.Library/DatFiles/RomCenter.cs
@@ -526,21 +526,29 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
- iw.WriteString($"¬{datItem.GetField(Field.CloneOf, Header.ExcludeFields)}");
- iw.WriteString($"¬{datItem.GetField(Field.CloneOf, Header.ExcludeFields)}");
- iw.WriteString($"¬{datItem.GetField(Field.MachineName, Header.ExcludeFields)}");
- if (string.IsNullOrWhiteSpace(datItem.Machine.Description))
- iw.WriteString($"¬{datItem.GetField(Field.MachineName, Header.ExcludeFields)}");
- else
- iw.WriteString($"¬{datItem.GetField(Field.Description, Header.ExcludeFields)}");
- iw.WriteString($"¬{datItem.GetField(Field.Name, Header.ExcludeFields)}");
- iw.WriteString($"¬{datItem.GetField(Field.CRC, Header.ExcludeFields)}");
- iw.WriteString($"¬{datItem.GetField(Field.Size, Header.ExcludeFields)}");
- iw.WriteString($"¬{datItem.GetField(Field.RomOf, Header.ExcludeFields)}");
- iw.WriteString($"¬{datItem.GetField(Field.Merge, Header.ExcludeFields)}");
- iw.WriteString("¬");
- iw.WriteLine();
+ // Build the state
+ switch (datItem.ItemType)
+ {
+ case ItemType.Rom:
+ var rom = datItem as Rom;
+
+ iw.WriteString($"¬{rom.Machine.CloneOf}");
+ iw.WriteString($"¬{rom.Machine.CloneOf}");
+ iw.WriteString($"¬{rom.Machine.Name}");
+ if (string.IsNullOrWhiteSpace(rom.Machine.Description))
+ iw.WriteString($"¬{rom.Machine.Name}");
+ else
+ iw.WriteString($"¬{rom.Machine.Description}");
+ iw.WriteString($"¬{rom.Name}");
+ iw.WriteString($"¬{rom.CRC}");
+ iw.WriteString($"¬{rom.Size}");
+ iw.WriteString($"¬{rom.Machine.RomOf}");
+ iw.WriteString($"¬{rom.MergeTag}");
+ iw.WriteString("¬");
+ iw.WriteLine();
+
+ break;
+ }
iw.Flush();
}
diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs
index b01f47c0..cffcb04e 100644
--- a/SabreTools.Library/DatFiles/SabreDat.cs
+++ b/SabreTools.Library/DatFiles/SabreDat.cs
@@ -790,14 +790,14 @@ namespace SabreTools.Library.DatFiles
try
{
// No game should start with a path separator
- datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
+ datItem.Machine.Name = datItem.Machine.Name?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty;
- // Build the state based on excluded fields
+ // Build the state
for (int i = (last == -1 ? 0 : last); i < newsplit.Count; i++)
{
xtw.WriteStartElement("directory");
- xtw.WriteAttributeString("name", !Header.ExcludeFields.Contains(Field.MachineName) ? newsplit[i] : string.Empty);
- xtw.WriteAttributeString("description", !Header.ExcludeFields.Contains(Field.MachineName) ? newsplit[i] : string.Empty);
+ xtw.WriteAttributeString("name", newsplit[i]);
+ xtw.WriteAttributeString("description", newsplit[i]);
}
depth = depth - (last == -1 ? 0 : last) + newsplit.Count;
@@ -881,13 +881,13 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
switch (datItem.ItemType)
{
case ItemType.Archive:
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "archive");
- xtw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
+ xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
@@ -895,10 +895,10 @@ namespace SabreTools.Library.DatFiles
var biosSet = datItem as BiosSet;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "biosset");
- xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", biosSet.Name);
+ if (!string.IsNullOrWhiteSpace(biosSet.Description))
xtw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
+ if (biosSet.Default != null)
xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -907,22 +907,22 @@ namespace SabreTools.Library.DatFiles
var disk = datItem as Disk;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "disk");
- xtw.WriteAttributeString("name", disk.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", disk.Name);
+ if (!string.IsNullOrWhiteSpace(disk.MD5))
xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA1))
xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA256))
xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA384))
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA512))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
+ if (disk.ItemStatus != ItemStatus.None)
{
xtw.WriteStartElement("flags");
@@ -941,14 +941,14 @@ namespace SabreTools.Library.DatFiles
var release = datItem as Release;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "release");
- xtw.WriteAttributeString("name", release.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Region, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", release.Name);
+ if (!string.IsNullOrWhiteSpace(release.Region))
xtw.WriteAttributeString("region", release.Region);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Language, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Language))
xtw.WriteAttributeString("language", release.Language);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(release.Date))
xtw.WriteAttributeString("date", release.Date);
- if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
+ if (release.Default != null)
xtw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -957,28 +957,28 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "rom");
- xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
+ xtw.WriteAttributeString("name", rom.Name);
+ if (rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MD5))
xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA1))
xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA256))
xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA384))
xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA512))
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Date))
xtw.WriteAttributeString("date", rom.Date);
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
+ if (rom.ItemStatus != ItemStatus.None)
{
xtw.WriteStartElement("flags");
@@ -996,7 +996,7 @@ namespace SabreTools.Library.DatFiles
case ItemType.Sample:
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "sample");
- xtw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
+ xtw.WriteAttributeString("name", datItem.Name);
xtw.WriteEndElement();
break;
}
diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs
index b600cecf..4b0a1eee 100644
--- a/SabreTools.Library/DatFiles/SeparatedValue.cs
+++ b/SabreTools.Library/DatFiles/SeparatedValue.cs
@@ -1704,14 +1704,14 @@ namespace SabreTools.Library.DatFiles
if (datItem.ItemType != ItemType.Disk && datItem.ItemType != ItemType.Rom)
return true;
- // Build the state based on excluded fields
+ // Build the state
// TODO: Can we have some way of saying what fields to write out? Support for read extends to all fields now
string[] fields = new string[14]; // 17;
fields[0] = Header.FileName;
fields[1] = Header.Name;
fields[2] = Header.Description;
- fields[3] = datItem.GetField(Field.MachineName, Header.ExcludeFields);
- fields[4] = datItem.GetField(Field.Description, Header.ExcludeFields);
+ fields[3] = datItem.Machine.Name;
+ fields[4] = datItem.Machine.Description;
switch (datItem.ItemType)
{
@@ -1719,32 +1719,32 @@ namespace SabreTools.Library.DatFiles
var disk = datItem as Disk;
fields[5] = "disk";
fields[6] = string.Empty;
- fields[7] = disk.GetField(Field.Name, Header.ExcludeFields);
+ fields[7] = disk.Name;
fields[8] = string.Empty;
fields[9] = string.Empty;
- fields[10] = disk.GetField(Field.MD5, Header.ExcludeFields).ToLowerInvariant();
+ fields[10] = disk.MD5.ToLowerInvariant();
//fields[11] = disk.GetField(Field.RIPEMD160, DatHeader.ExcludeFields).ToLowerInvariant();
- fields[11] = disk.GetField(Field.SHA1, Header.ExcludeFields).ToLowerInvariant();
- fields[12] = disk.GetField(Field.SHA256, Header.ExcludeFields).ToLowerInvariant();
+ fields[11] = disk.SHA1.ToLowerInvariant();
+ fields[12] = disk.SHA256.ToLowerInvariant();
//fields[13] = disk.GetField(Field.SHA384, DatHeader.ExcludeFields).ToLowerInvariant();
//fields[14] = disk.GetField(Field.SHA512, DatHeader.ExcludeFields).ToLowerInvariant();
- fields[13] = disk.GetField(Field.Status, Header.ExcludeFields);
+ fields[13] = disk.ItemStatus.ToString();
break;
case ItemType.Rom:
var rom = datItem as Rom;
fields[5] = "rom";
- fields[6] = rom.GetField(Field.Name, Header.ExcludeFields);
+ fields[6] = rom.Name;
fields[7] = string.Empty;
- fields[8] = rom.GetField(Field.Size, Header.ExcludeFields);
- fields[9] = rom.GetField(Field.CRC, Header.ExcludeFields).ToLowerInvariant();
- fields[10] = rom.GetField(Field.MD5, Header.ExcludeFields).ToLowerInvariant();
+ fields[8] = rom.Size.ToString();
+ fields[9] = rom.CRC.ToLowerInvariant();
+ fields[10] = rom.MD5.ToLowerInvariant();
//fields[11] = rom.GetField(Field.RIPEMD160, DatHeader.ExcludeFields).ToLowerInvariant();
- fields[11] = rom.GetField(Field.SHA1, Header.ExcludeFields).ToLowerInvariant();
- fields[12] = rom.GetField(Field.SHA256, Header.ExcludeFields).ToLowerInvariant();
+ fields[11] = rom.SHA1.ToLowerInvariant();
+ fields[12] = rom.SHA256.ToLowerInvariant();
//fields[13] = rom.GetField(Field.SHA384, DatHeader.ExcludeFields).ToLowerInvariant();
//fields[14] = rom.GetField(Field.SHA512, DatHeader.ExcludeFields).ToLowerInvariant();
- fields[13] = rom.GetField(Field.Status, Header.ExcludeFields);
+ fields[13] = rom.ItemStatus.ToString();
break;
}
diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs
index f19291cf..0d2206a6 100644
--- a/SabreTools.Library/DatFiles/SoftwareList.cs
+++ b/SabreTools.Library/DatFiles/SoftwareList.cs
@@ -800,14 +800,14 @@ namespace SabreTools.Library.DatFiles
// No game should start with a path separator
datItem.Machine.Name = datItem.Machine.Name.TrimStart(Path.DirectorySeparatorChar);
- // Build the state based on excluded fields
+ // Build the state
xtw.WriteStartElement("software");
- xtw.WriteAttributeString("name", datItem.GetField(Field.MachineName, Header.ExcludeFields));
+ xtw.WriteAttributeString("name", datItem.Machine.Name);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.CloneOf) && !string.Equals(datItem.Machine.Name, datItem.Machine.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteAttributeString("cloneof", datItem.Machine.CloneOf);
- if (!Header.ExcludeFields.Contains(Field.Supported))
+ if (datItem.Machine.Supported != Supported.NULL)
{
switch (datItem.Machine.Supported)
{
@@ -823,16 +823,16 @@ namespace SabreTools.Library.DatFiles
}
}
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Description, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Description))
xtw.WriteElementString("description", datItem.Machine.Description);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Year, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Year))
xtw.WriteElementString("year", datItem.Machine.Year);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Publisher, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Publisher))
xtw.WriteElementString("publisher", datItem.Machine.Publisher);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(datItem.Machine.Category))
xtw.WriteElementString("category", datItem.Machine.Category);
- if (!Header.ExcludeFields.Contains(Field.Infos) && datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0)
+ if (datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0)
{
foreach (ListXmlInfo kvp in datItem.Machine.Infos)
{
@@ -843,7 +843,7 @@ namespace SabreTools.Library.DatFiles
}
}
- if (!Header.ExcludeFields.Contains(Field.SharedFeatures) && datItem.Machine.SharedFeatures != null && datItem.Machine.SharedFeatures.Count > 0)
+ if (datItem.Machine.SharedFeatures != null && datItem.Machine.SharedFeatures.Count > 0)
{
foreach (SoftwareListSharedFeature kvp in datItem.Machine.SharedFeatures)
{
@@ -854,7 +854,7 @@ namespace SabreTools.Library.DatFiles
}
}
- if (!Header.ExcludeFields.Contains(Field.DipSwitches) && datItem.Machine.DipSwitches != null && datItem.Machine.DipSwitches.Count > 0)
+ if (datItem.Machine.DipSwitches != null && datItem.Machine.DipSwitches.Count > 0)
{
foreach (ListXmlDipSwitch dip in datItem.Machine.DipSwitches)
{
@@ -929,12 +929,12 @@ namespace SabreTools.Library.DatFiles
// Pre-process the item name
ProcessItemName(datItem, true);
- // Build the state based on excluded fields
+ // Build the state
xtw.WriteStartElement("part");
- xtw.WriteAttributeString("name", datItem.GetField(Field.PartName, Header.ExcludeFields));
- xtw.WriteAttributeString("interface", datItem.GetField(Field.PartInterface, Header.ExcludeFields));
+ xtw.WriteAttributeString("name", datItem.PartName);
+ xtw.WriteAttributeString("interface", datItem.PartInterface);
- if (!Header.ExcludeFields.Contains(Field.Features) && datItem.Features != null && datItem.Features.Count > 0)
+ if (datItem.Features != null && datItem.Features.Count > 0)
{
foreach (SoftwareListFeature kvp in datItem.Features)
{
@@ -945,38 +945,38 @@ namespace SabreTools.Library.DatFiles
}
}
- string areaName = datItem.GetField(Field.AreaName, Header.ExcludeFields);
+ string areaName = datItem.AreaName;
switch (datItem.ItemType)
{
case ItemType.Disk:
var disk = datItem as Disk;
- if (!Header.ExcludeFields.Contains(Field.AreaName) && string.IsNullOrWhiteSpace(areaName))
+ if (string.IsNullOrWhiteSpace(areaName))
areaName = "cdrom";
xtw.WriteStartElement("diskarea");
xtw.WriteAttributeString("name", areaName);
- if (!Header.ExcludeFields.Contains(Field.AreaSize) && disk.AreaSize != null)
+ if (disk.AreaSize != null)
xtw.WriteAttributeString("size", disk.AreaSize.ToString());
xtw.WriteStartElement("disk");
- xtw.WriteAttributeString("name", disk.GetField(Field.Name, Header.ExcludeFields));
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ xtw.WriteAttributeString("name", disk.Name);
+ if (!string.IsNullOrWhiteSpace(disk.MD5))
xtw.WriteAttributeString("md5", disk.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.RIPEMD160))
xtw.WriteAttributeString("ripemd160", disk.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA1))
xtw.WriteAttributeString("sha1", disk.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA256))
xtw.WriteAttributeString("sha256", disk.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA384))
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(disk.SHA512))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
+ if (disk.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant());
- if (!Header.ExcludeFields.Contains(Field.Writable) && disk.Writable != null)
+ if (disk.Writable != null)
xtw.WriteAttributeString("writable", disk.Writable == true ? "yes" : "no");
xtw.WriteEndElement();
@@ -986,45 +986,45 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom:
var rom = datItem as Rom;
- if (!Header.ExcludeFields.Contains(Field.AreaName) && string.IsNullOrWhiteSpace(areaName))
+ if (string.IsNullOrWhiteSpace(areaName))
areaName = "rom";
xtw.WriteStartElement("dataarea");
xtw.WriteAttributeString("name", areaName);
- if (!Header.ExcludeFields.Contains(Field.AreaSize) && rom.AreaSize != null)
+ if (rom.AreaSize != null)
xtw.WriteAttributeString("size", rom.AreaSize.ToString());
- if (!Header.ExcludeFields.Contains(Field.AreaWidth) && rom.AreaWidth != null)
+ if (rom.AreaWidth != null)
xtw.WriteAttributeString("width", rom.AreaWidth);
- if (!Header.ExcludeFields.Contains(Field.AreaEndianness) && rom.AreaEndianness != null)
+ if (rom.AreaEndianness != null)
xtw.WriteAttributeString("endianness", rom.AreaEndianness);
xtw.WriteStartElement("rom");
- xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
+ xtw.WriteAttributeString("name", rom.Name);
+ if (rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.CRC))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.MD5, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.MD5))
xtw.WriteAttributeString("md5", rom.MD5.ToLowerInvariant());
#if NET_FRAMEWORK
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.RIPEMD160, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.RIPEMD160))
xtw.WriteAttributeString("ripemd160", rom.RIPEMD160.ToLowerInvariant());
#endif
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA1, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA1))
xtw.WriteAttributeString("sha1", rom.SHA1.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA256, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA256))
xtw.WriteAttributeString("sha256", rom.SHA256.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA384, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA384))
xtw.WriteAttributeString("sha384", rom.SHA384.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.SHA512))
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Offset))
xtw.WriteAttributeString("offset", rom.Offset);
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.Value))
xtw.WriteAttributeString("value", rom.Value);
- if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
+ if (rom.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
- if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.LoadFlag, Header.ExcludeFields)))
+ if (!string.IsNullOrWhiteSpace(rom.LoadFlag))
xtw.WriteAttributeString("loadflag", rom.LoadFlag);
xtw.WriteEndElement();
diff --git a/SabreTools.Library/DatItems/Archive.cs b/SabreTools.Library/DatItems/Archive.cs
index f0b2348d..b04e0be0 100644
--- a/SabreTools.Library/DatItems/Archive.cs
+++ b/SabreTools.Library/DatItems/Archive.cs
@@ -1,8 +1,11 @@
-namespace SabreTools.Library.DatItems
+using Newtonsoft.Json;
+
+namespace SabreTools.Library.DatItems
{
///
/// Represents generic archive files to be included in a set
///
+ [JsonObject("archive")]
public class Archive : DatItem
{
#region Constructors
diff --git a/SabreTools.Library/DatItems/BiosSet.cs b/SabreTools.Library/DatItems/BiosSet.cs
index dbfcf877..743f2474 100644
--- a/SabreTools.Library/DatItems/BiosSet.cs
+++ b/SabreTools.Library/DatItems/BiosSet.cs
@@ -1,15 +1,16 @@
using System.Collections.Generic;
+using System.Linq;
using SabreTools.Library.Filtering;
-using Newtonsoft.Json;
-using System.Linq;
using SabreTools.Library.Tools;
+using Newtonsoft.Json;
namespace SabreTools.Library.DatItems
{
///
/// Represents which BIOS(es) is associated with a set
///
+ [JsonObject("biosset")]
public class BiosSet : DatItem
{
#region Fields
@@ -30,38 +31,6 @@ namespace SabreTools.Library.DatItems
#region Accessors
- ///
- /// Get the value of that field as a string, if possible
- ///
- public override string GetField(Field field, List excludeFields)
- {
- // If the field is to be excluded, return empty string
- if (excludeFields.Contains(field))
- return string.Empty;
-
- // Handle BiosSet-specific fields
- string fieldValue;
- switch (field)
- {
- case Field.Default:
- fieldValue = Default?.ToString();
- break;
- case Field.BiosDescription:
- fieldValue = Description;
- break;
-
- // For everything else, use the base method
- default:
- return base.GetField(field, excludeFields);
- }
-
- // Make sure we don't return null
- if (string.IsNullOrEmpty(fieldValue))
- fieldValue = string.Empty;
-
- return fieldValue;
- }
-
///
/// Set fields with given values
///
diff --git a/SabreTools.Library/DatItems/Blank.cs b/SabreTools.Library/DatItems/Blank.cs
index cd594d27..4c48be9e 100644
--- a/SabreTools.Library/DatItems/Blank.cs
+++ b/SabreTools.Library/DatItems/Blank.cs
@@ -1,8 +1,11 @@
-namespace SabreTools.Library.DatItems
+using Newtonsoft.Json;
+
+namespace SabreTools.Library.DatItems
{
///
/// Represents a blank set from an input DAT
///
+ [JsonObject("blank")]
public class Blank : DatItem
{
#region Constructors
diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs
index e4915602..edb03487 100644
--- a/SabreTools.Library/DatItems/DatItem.cs
+++ b/SabreTools.Library/DatItems/DatItem.cs
@@ -5,18 +5,19 @@ using System.Linq;
using System.Net;
using SabreTools.Library.Data;
-using SabreTools.Library.DatFiles;
using SabreTools.Library.FileTypes;
using SabreTools.Library.Filtering;
using SabreTools.Library.Tools;
using NaturalSort;
using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
namespace SabreTools.Library.DatItems
{
///
/// Base class for all items included in a set
///
+ [JsonObject("datitem")]
public abstract class DatItem : IEquatable, IComparable, ICloneable
{
// TODO: Should any of these be specific to certain types?
@@ -34,7 +35,8 @@ namespace SabreTools.Library.DatItems
///
/// Item type for outputting
///
- [JsonIgnore]
+ [JsonProperty("type")]
+ [JsonConverter(typeof(StringEnumConverter))]
public ItemType ItemType { get; set; }
///
@@ -83,6 +85,7 @@ namespace SabreTools.Library.DatItems
/// OpenMSX sub item type
///
[JsonProperty("openmsx_subtype")]
+ [JsonConverter(typeof(StringEnumConverter))]
public OpenMSXSubType OpenMSXSubType { get; set; }
///
@@ -314,105 +317,6 @@ namespace SabreTools.Library.DatItems
#region Accessors
- ///
- /// Get the value of that field as a string, if possible
- ///
- public virtual string GetField(Field field, List excludeFields)
- {
- // If the field is to be excluded, return empty string
- if (excludeFields.Contains(field))
- return string.Empty;
-
- // Try to get the machine field first
- string fieldValue = Machine.GetField(field, excludeFields);
- if (fieldValue != null)
- return fieldValue;
-
- switch (field)
- {
- #region Common
-
- case Field.Name:
- fieldValue = Name;
- break;
-
- #endregion
-
- #region AttractMode
-
- case Field.AltName:
- fieldValue = AltName;
- break;
- case Field.AltTitle:
- fieldValue = AltTitle;
- break;
-
- #endregion
-
- #region OpenMSX
-
- case Field.Original:
- fieldValue = Original.Content;
- break;
- case Field.OpenMSXSubType:
- fieldValue = OpenMSXSubType.ToString();
- break;
- case Field.OpenMSXType:
- fieldValue = OpenMSXType;
- break;
- case Field.Remark:
- fieldValue = Remark;
- break;
- case Field.Boot:
- fieldValue = Boot;
- break;
-
- #endregion
-
- #region SoftwareList
-
- case Field.PartName:
- fieldValue = PartName;
- break;
- case Field.PartInterface:
- fieldValue = PartInterface;
- break;
- case Field.Features:
- fieldValue = string.Join(";", (Features ?? new List()).Select(f => $"{f.Name}={f.Value}"));
- break;
- case Field.AreaName:
- fieldValue = AreaName;
- break;
- case Field.AreaSize:
- fieldValue = AreaSize?.ToString();
- break;
- case Field.AreaWidth:
- fieldValue = AreaWidth;
- break;
- case Field.AreaEndianness:
- fieldValue = AreaEndianness;
- break;
- case Field.Value:
- fieldValue = Value;
- break;
- case Field.LoadFlag:
- fieldValue = LoadFlag;
- break;
-
- #endregion
-
- case Field.NULL:
- default:
- return string.Empty;
- }
-
- // Make sure we don't return null
- if (string.IsNullOrEmpty(fieldValue))
- fieldValue = string.Empty;
-
- return fieldValue;
- }
-
///
/// Set fields with given values
///
diff --git a/SabreTools.Library/DatItems/Disk.cs b/SabreTools.Library/DatItems/Disk.cs
index a5f4c9a5..064cf895 100644
--- a/SabreTools.Library/DatItems/Disk.cs
+++ b/SabreTools.Library/DatItems/Disk.cs
@@ -1,17 +1,18 @@
using System.Collections.Generic;
using System.Linq;
-using SabreTools.Library.DatFiles;
using SabreTools.Library.FileTypes;
using SabreTools.Library.Filtering;
using SabreTools.Library.Tools;
using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
namespace SabreTools.Library.DatItems
{
///
/// Represents Compressed Hunks of Data (CHD) formatted disks which use internal hashes
///
+ [JsonObject("disk")]
public class Disk : DatItem
{
#region Private instance variables
@@ -119,6 +120,7 @@ namespace SabreTools.Library.DatItems
/// Disk dump status
///
[JsonProperty("status")]
+ [JsonConverter(typeof(StringEnumConverter))]
public ItemStatus ItemStatus { get; set; }
///
@@ -131,70 +133,6 @@ namespace SabreTools.Library.DatItems
#region Accessors
- ///
- /// Get the value of that field as a string, if possible
- ///
- public override string GetField(Field field, List excludeFields)
- {
- // If the field is to be excluded, return empty string
- if (excludeFields.Contains(field))
- return string.Empty;
-
- // Handle Disk-specific fields
- string fieldValue;
- switch (field)
- {
- case Field.MD5:
- fieldValue = MD5;
- break;
-#if NET_FRAMEWORK
- case Field.RIPEMD160:
- fieldValue = RIPEMD160;
- break;
-#endif
- case Field.SHA1:
- fieldValue = SHA1;
- break;
- case Field.SHA256:
- fieldValue = SHA256;
- break;
- case Field.SHA384:
- fieldValue = SHA384;
- break;
- case Field.SHA512:
- fieldValue = SHA512;
- break;
- case Field.Merge:
- fieldValue = MergeTag;
- break;
- case Field.Region:
- fieldValue = Region;
- break;
- case Field.Index:
- fieldValue = Index;
- break;
- case Field.Writable:
- fieldValue = Writable?.ToString();
- break;
- case Field.Optional:
- fieldValue = Optional?.ToString();
- break;
- case Field.Status:
- fieldValue = ItemStatus.ToString();
- break;
-
- // For everything else, use the base method
- default:
- return base.GetField(field, excludeFields);
- }
-
- // Make sure we don't return null
- if (string.IsNullOrEmpty(fieldValue))
- fieldValue = string.Empty;
-
- return fieldValue;
- }
-
///
/// Set fields with given values
///
diff --git a/SabreTools.Library/DatItems/Enums.cs b/SabreTools.Library/DatItems/Enums.cs
index cabf3b91..ad9f9fac 100644
--- a/SabreTools.Library/DatItems/Enums.cs
+++ b/SabreTools.Library/DatItems/Enums.cs
@@ -1,5 +1,7 @@
using System;
+using Newtonsoft.Json;
+
namespace SabreTools.Library.DatItems
{
///
diff --git a/SabreTools.Library/DatItems/Machine.cs b/SabreTools.Library/DatItems/Machine.cs
index 4e63fd13..09a00ffa 100644
--- a/SabreTools.Library/DatItems/Machine.cs
+++ b/SabreTools.Library/DatItems/Machine.cs
@@ -11,6 +11,7 @@ namespace SabreTools.Library.DatItems
///
/// Represents the information specific to a set/game/machine
///
+ [JsonObject("machine")]
public class Machine : ICloneable
{
#region Fields
@@ -330,185 +331,6 @@ namespace SabreTools.Library.DatItems
#region Accessors
- ///
- /// Get the value of that field as a string, if possible
- ///
- public string GetField(Field field, List excludeFields)
- {
- // If the field is to be excluded, return empty string
- if (excludeFields.Contains(field))
- return string.Empty;
-
- string fieldValue = null;
- switch (field)
- {
- #region Common
-
- case Field.MachineName:
- fieldValue = Name;
- break;
- case Field.Comment:
- fieldValue = Comment;
- break;
- case Field.Description:
- fieldValue = Description;
- break;
- case Field.Year:
- fieldValue = Year;
- break;
- case Field.Manufacturer:
- fieldValue = Manufacturer;
- break;
- case Field.Publisher:
- fieldValue = Publisher;
- break;
- case Field.Category:
- fieldValue = Category;
- break;
- case Field.RomOf:
- fieldValue = RomOf;
- break;
- case Field.CloneOf:
- fieldValue = CloneOf;
- break;
- case Field.SampleOf:
- fieldValue = SampleOf;
- break;
- case Field.MachineType:
- fieldValue = MachineType.ToString();
- break;
-
- #endregion
-
- #region AttractMode
-
- case Field.Players:
- fieldValue = Players;
- break;
- case Field.Rotation:
- fieldValue = Rotation;
- break;
- case Field.Control:
- fieldValue = Control;
- break;
- case Field.SupportStatus:
- fieldValue = Status;
- break;
- case Field.DisplayCount:
- fieldValue = DisplayCount;
- break;
- case Field.DisplayType:
- fieldValue = DisplayType;
- break;
- case Field.Buttons:
- fieldValue = Buttons;
- break;
-
- #endregion
-
- #region ListXML
-
- case Field.SourceFile:
- fieldValue = SourceFile;
- break;
- case Field.Runnable:
- fieldValue = Runnable.ToString();
- break;
- case Field.DeviceReferences:
- fieldValue = string.Join(";", DeviceReferences ?? new List());
- break;
- case Field.Slots:
- fieldValue = string.Join(";", Slots ?? new List());
- break;
- case Field.Infos:
- fieldValue = string.Join(";", (Infos ?? new List()).Select(i => $"{i.Name}={i.Value}"));
- break;
-
- #endregion
-
- #region Logiqx
-
- case Field.Board:
- fieldValue = Board;
- break;
- case Field.RebuildTo:
- fieldValue = RebuildTo;
- break;
-
- #endregion
-
- #region Logiqx EmuArc
-
- case Field.TitleID:
- fieldValue = TitleID;
- break;
- case Field.Developer:
- fieldValue = Developer;
- break;
- case Field.Genre:
- fieldValue = Genre;
- break;
- case Field.Subgenre:
- fieldValue = Subgenre;
- break;
- case Field.Ratings:
- fieldValue = Ratings;
- break;
- case Field.Score:
- fieldValue = Score;
- break;
- case Field.Enabled:
- fieldValue = Enabled;
- break;
- case Field.HasCrc:
- fieldValue = HasCrc.ToString();
- break;
- case Field.RelatedTo:
- fieldValue = RelatedTo;
- break;
-
- #endregion
-
- #region OpenMSX
-
- case Field.GenMSXID:
- fieldValue = GenMSXID;
- break;
- case Field.System:
- fieldValue = System;
- break;
- case Field.Country:
- fieldValue = Country;
- break;
-
- #endregion
-
- #region SoftwareList
-
- case Field.Supported:
- fieldValue = Supported.ToString();
- break;
- case Field.SharedFeatures:
- fieldValue = string.Join(";", (SharedFeatures ?? new List()).Select(i => $"{i.Name}={i.Value}"));
- break;
- case Field.DipSwitches:
- // TODO: There is no possible way this will work... use placeholder for now
- fieldValue = "dipswitches";
- break;
-
- #endregion
-
- default:
- return null;
- }
-
- // Make sure we don't return null
- if (string.IsNullOrEmpty(fieldValue))
- fieldValue = string.Empty;
-
- return fieldValue;
- }
-
///
/// Set fields with given values
///
diff --git a/SabreTools.Library/DatItems/Release.cs b/SabreTools.Library/DatItems/Release.cs
index 6353664a..2f752b80 100644
--- a/SabreTools.Library/DatItems/Release.cs
+++ b/SabreTools.Library/DatItems/Release.cs
@@ -10,6 +10,7 @@ namespace SabreTools.Library.DatItems
///
/// Represents release information about a set
///
+ [JsonObject("release")]
public class Release : DatItem
{
#region Fields
@@ -42,44 +43,6 @@ namespace SabreTools.Library.DatItems
#region Accessors
- ///
- /// Get the value of that field as a string, if possible
- ///
- public override string GetField(Field field, List excludeFields)
- {
- // If the field is to be excluded, return empty string
- if (excludeFields.Contains(field))
- return string.Empty;
-
- // Handle Release-specific fields
- string fieldValue;
- switch (field)
- {
- case Field.Region:
- fieldValue = Region;
- break;
- case Field.Language:
- fieldValue = Language;
- break;
- case Field.Date:
- fieldValue = Date;
- break;
- case Field.Default:
- fieldValue = Default?.ToString();
- break;
-
- // For everything else, use the base method
- default:
- return base.GetField(field, excludeFields);
- }
-
- // Make sure we don't return null
- if (string.IsNullOrEmpty(fieldValue))
- fieldValue = string.Empty;
-
- return fieldValue;
- }
-
///
/// Set fields with given values
///
diff --git a/SabreTools.Library/DatItems/Rom.cs b/SabreTools.Library/DatItems/Rom.cs
index 5da49b12..78621429 100644
--- a/SabreTools.Library/DatItems/Rom.cs
+++ b/SabreTools.Library/DatItems/Rom.cs
@@ -3,17 +3,18 @@ using System.Collections.Generic;
using System.Linq;
using SabreTools.Library.Data;
-using SabreTools.Library.DatFiles;
using SabreTools.Library.FileTypes;
using SabreTools.Library.Filtering;
using SabreTools.Library.Tools;
using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
namespace SabreTools.Library.DatItems
{
///
/// Represents a generic file within a set
///
+ [JsonObject("rom")]
public class Rom : DatItem
{
#region Private instance variables
@@ -144,6 +145,7 @@ namespace SabreTools.Library.DatItems
/// Rom dump status
///
[JsonProperty("status")]
+ [JsonConverter(typeof(StringEnumConverter))]
public ItemStatus ItemStatus { get; set; }
///
@@ -162,82 +164,6 @@ namespace SabreTools.Library.DatItems
#region Accessors
- ///
- /// Get the value of that field as a string, if possible
- ///
- public override string GetField(Field field, List excludeFields)
- {
- // If the field is to be excluded, return empty string
- if (excludeFields.Contains(field))
- return string.Empty;
-
- // Handle Rom-specific fields
- string fieldValue;
- switch (field)
- {
- case Field.Bios:
- fieldValue = Bios;
- break;
- case Field.Size:
- fieldValue = Size.ToString();
- break;
- case Field.CRC:
- fieldValue = CRC;
- break;
- case Field.MD5:
- fieldValue = MD5;
- break;
-#if NET_FRAMEWORK
- case Field.RIPEMD160:
- fieldValue = RIPEMD160;
- break;
-#endif
- case Field.SHA1:
- fieldValue = SHA1;
- break;
- case Field.SHA256:
- fieldValue = SHA256;
- break;
- case Field.SHA384:
- fieldValue = SHA384;
- break;
- case Field.SHA512:
- fieldValue = SHA512;
- break;
- case Field.Merge:
- fieldValue = MergeTag;
- break;
- case Field.Region:
- fieldValue = Region;
- break;
- case Field.Offset:
- fieldValue = Offset;
- break;
- case Field.Date:
- fieldValue = Date;
- break;
- case Field.Status:
- fieldValue = ItemStatus.ToString();
- break;
- case Field.Optional:
- fieldValue = Optional?.ToString();
- break;
- case Field.Inverted:
- fieldValue = Inverted?.ToString();
- break;
-
- // For everything else, use the base method
- default:
- return base.GetField(field, excludeFields);
- }
-
- // Make sure we don't return null
- if (string.IsNullOrEmpty(fieldValue))
- fieldValue = string.Empty;
-
- return fieldValue;
- }
-
///
/// Set fields with given values
///
diff --git a/SabreTools.Library/DatItems/Sample.cs b/SabreTools.Library/DatItems/Sample.cs
index d28cca56..3a5ba1e0 100644
--- a/SabreTools.Library/DatItems/Sample.cs
+++ b/SabreTools.Library/DatItems/Sample.cs
@@ -1,8 +1,11 @@
-namespace SabreTools.Library.DatItems
+using Newtonsoft.Json;
+
+namespace SabreTools.Library.DatItems
{
///
/// Represents a (usually WAV-formatted) sample to be included for use in the set
///
+ [JsonObject("sample")]
public class Sample : DatItem
{
#region Constructors
diff --git a/SabreTools.Library/IO/XmlTextWriterExtensions.cs b/SabreTools.Library/IO/XmlTextWriterExtensions.cs
index 12c0ddf9..06caa46d 100644
--- a/SabreTools.Library/IO/XmlTextWriterExtensions.cs
+++ b/SabreTools.Library/IO/XmlTextWriterExtensions.cs
@@ -7,17 +7,29 @@ namespace SabreTools.Library.IO
///
public static class XmlTextWriterExtensions
{
+ ///
+ /// Write an attribute, if the value is not null or empty
+ ///
+ /// 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)
+ {
+ if (string.IsNullOrEmpty(value))
+ writer.WriteAttributeString(localName, value);
+ }
+
///
/// Force writing separate open and start tags, even for empty elements
///
- /// XmlTextWriter to write out with
+ /// XmlTextWriter to write out with
/// Name of the element
/// Value to write in the element
- public static void WriteFullElementString(this XmlTextWriter xmlTextWriter, string localName, string value)
+ public static void WriteFullElementString(this XmlTextWriter writer, string localName, string value)
{
- xmlTextWriter.WriteStartElement(localName);
- xmlTextWriter.WriteRaw(value);
- xmlTextWriter.WriteFullEndElement();
+ writer.WriteStartElement(localName);
+ writer.WriteRaw(value);
+ writer.WriteFullEndElement();
}
}
}