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