diff --git a/SabreTools.Core/Enums.cs b/SabreTools.Core/Enums.cs
index 05417c24..3c8c4099 100644
--- a/SabreTools.Core/Enums.cs
+++ b/SabreTools.Core/Enums.cs
@@ -741,6 +741,7 @@ namespace SabreTools.Core
#region ListXML
+ History,
SourceFile,
Runnable,
diff --git a/SabreTools.Core/Tools/Converters.cs b/SabreTools.Core/Tools/Converters.cs
index 1e08106e..9411128b 100644
--- a/SabreTools.Core/Tools/Converters.cs
+++ b/SabreTools.Core/Tools/Converters.cs
@@ -1051,6 +1051,9 @@ namespace SabreTools.Core.Tools
#region ListXML
+ case "history":
+ return MachineField.History;
+
case "sourcefile":
case "source_file":
return MachineField.SourceFile;
diff --git a/SabreTools.DatFiles/Formats/Listxml.cs b/SabreTools.DatFiles/Formats/Listxml.cs
index c068d220..d25f2348 100644
--- a/SabreTools.DatFiles/Formats/Listxml.cs
+++ b/SabreTools.DatFiles/Formats/Listxml.cs
@@ -337,6 +337,10 @@ namespace SabreTools.DatFiles.Formats
machine.Manufacturer = reader.ReadElementContentAsString();
break;
+ case "history":
+ machine.History = reader.ReadElementContentAsString();
+ break;
+
case "adjuster":
var adjuster = new Adjuster
{
@@ -1473,6 +1477,7 @@ namespace SabreTools.DatFiles.Formats
xtw.WriteOptionalElementString("description", datItem.Machine.Description);
xtw.WriteOptionalElementString("year", datItem.Machine.Year);
xtw.WriteOptionalElementString("manufacturer", datItem.Machine.Manufacturer);
+ xtw.WriteOptionalElementString("history", datItem.Machine.History);
xtw.Flush();
}
diff --git a/SabreTools.DatItems/DatItemTool.cs b/SabreTools.DatItems/DatItemTool.cs
index 6f2b5f69..add2ad76 100644
--- a/SabreTools.DatItems/DatItemTool.cs
+++ b/SabreTools.DatItems/DatItemTool.cs
@@ -902,6 +902,9 @@ namespace SabreTools.DatItems
#region ListXML
+ if (fields.Contains(MachineField.History))
+ machine.History = null;
+
if (fields.Contains(MachineField.SourceFile))
machine.SourceFile = null;
@@ -1891,6 +1894,9 @@ namespace SabreTools.DatItems
#region ListXML
+ if (machineFields.Contains(MachineField.History))
+ machine.History = repMachine.History;
+
if (machineFields.Contains(MachineField.SourceFile))
machine.SourceFile = repMachine.SourceFile;
@@ -2839,6 +2845,9 @@ namespace SabreTools.DatItems
#region ListXML
+ if (mappings.Keys.Contains(MachineField.History))
+ machine.History = mappings[MachineField.History];
+
if (mappings.Keys.Contains(MachineField.SourceFile))
machine.SourceFile = mappings[MachineField.SourceFile];
diff --git a/SabreTools.DatItems/Machine.cs b/SabreTools.DatItems/Machine.cs
index efd4a4e1..7a7880a3 100644
--- a/SabreTools.DatItems/Machine.cs
+++ b/SabreTools.DatItems/Machine.cs
@@ -157,6 +157,13 @@ namespace SabreTools.DatItems
#region ListXML
+ ///
+ /// History.dat entry for the machine
+ ///
+ [JsonProperty("history", DefaultValueHandling = DefaultValueHandling.Ignore)]
+ [XmlElement("history")]
+ public string History { get; set; } = null;
+
///
/// Emulator source file related to the machine
///
@@ -370,6 +377,7 @@ namespace SabreTools.DatItems
#region ListXML
+ History = this.History,
SourceFile = this.SourceFile,
Runnable = this.Runnable,
diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs
index 18a05c89..de469664 100644
--- a/SabreTools.Filtering/Cleaner.cs
+++ b/SabreTools.Filtering/Cleaner.cs
@@ -1699,6 +1699,10 @@ namespace SabreTools.Filtering
#region ListXML
+ // Machine_History
+ if (!Filter.PassStringFilter(MachineFilter.History, machine.History))
+ return false;
+
// Machine_SourceFile
if (!Filter.PassStringFilter(MachineFilter.SourceFile, machine.SourceFile))
return false;
diff --git a/SabreTools.Filtering/MachineFilter.cs b/SabreTools.Filtering/MachineFilter.cs
index 38639001..57a8fbfb 100644
--- a/SabreTools.Filtering/MachineFilter.cs
+++ b/SabreTools.Filtering/MachineFilter.cs
@@ -2,6 +2,7 @@
using SabreTools.Core;
using SabreTools.Core.Tools;
+using SabreTools.DatItems;
using SabreTools.Logging;
namespace SabreTools.Filtering
@@ -45,6 +46,7 @@ namespace SabreTools.Filtering
#region ListXML
+ public FilterItem History { get; private set; } = new FilterItem();
public FilterItem SourceFile { get; private set; } = new FilterItem();
public FilterItem Runnable { get; private set; } = new FilterItem() { Positive = Core.Runnable.NULL, Negative = Core.Runnable.NULL };
@@ -221,6 +223,10 @@ namespace SabreTools.Filtering
#region ListXML
+ case MachineField.History:
+ SetStringFilter(History, value, negate);
+ break;
+
case MachineField.SourceFile:
SetStringFilter(SourceFile, value, negate);
break;
diff --git a/SabreTools.Test/TestData/test-listxml.xml b/SabreTools.Test/TestData/test-listxml.xml
index c279de8a..6d7cc7f7 100644
--- a/SabreTools.Test/TestData/test-listxml.xml
+++ b/SabreTools.Test/TestData/test-listxml.xml
@@ -6,6 +6,7 @@
Game! (Version 1)
1980
Manufacturer
+ A long and storied history