diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs index b2ba4257..6cea3d38 100644 --- a/SabreTools.Library/DatFiles/Json.cs +++ b/SabreTools.Library/DatFiles/Json.cs @@ -623,6 +623,20 @@ namespace SabreTools.Library.DatFiles #endregion + #region OpenMSX + + case "genmsxid": + machine.GenMSXID = jtr.ReadAsString(); + break; + case "system": + machine.System = jtr.ReadAsString(); + break; + case "country": + machine.Country = jtr.ReadAsString(); + break; + + #endregion + #region SoftwareList case "supported": @@ -1758,6 +1772,26 @@ namespace SabreTools.Library.DatFiles #endregion + #region OpenMSX + + if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.GenMSXID, Header.ExcludeFields))) + { + jtw.WritePropertyName("genmsxid"); + jtw.WriteValue(datItem.Machine.GenMSXID); + } + if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.System, Header.ExcludeFields))) + { + jtw.WritePropertyName("system"); + jtw.WriteValue(datItem.Machine.System); + } + if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Country, Header.ExcludeFields))) + { + jtw.WritePropertyName("country"); + jtw.WriteValue(datItem.Machine.Country); + } + + #endregion + #region SoftwareList if (!Header.ExcludeFields.Contains(Field.Supported) && datItem.Machine.Supported != null) diff --git a/SabreTools.Library/DatFiles/OpenMSX.cs b/SabreTools.Library/DatFiles/OpenMSX.cs index 138b8485..2ff84a44 100644 --- a/SabreTools.Library/DatFiles/OpenMSX.cs +++ b/SabreTools.Library/DatFiles/OpenMSX.cs @@ -135,13 +135,11 @@ namespace SabreTools.Library.DatFiles break; case "genmsxid": - // string id = reader.ReadElementContentAsString(); - reader.Read(); + machine.GenMSXID = reader.ReadElementContentAsString(); break; case "system": - // string system = reader.ReadElementContentAsString(); - reader.Read(); + machine.System = reader.ReadElementContentAsString(); break; case "company": @@ -153,8 +151,7 @@ namespace SabreTools.Library.DatFiles break; case "country": - // string country = reader.ReadElementContentAsString(); - reader.Read(); + machine.Country = reader.ReadElementContentAsString(); break; case "dump": @@ -631,11 +628,11 @@ namespace SabreTools.Library.DatFiles // Build the state based on excluded fields xtw.WriteStartElement("software"); xtw.WriteElementString("title", datItem.GetField(Field.MachineName, Header.ExcludeFields)); - //xtw.WriteElementString("genmsxid", msxid); - //xtw.WriteElementString("system", system)); + 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", country); + xtw.WriteElementString("country", datItem.GetField(Field.Country, Header.ExcludeFields)); xtw.Flush(); } diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index b380827c..8dab7466 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -459,6 +459,22 @@ namespace SabreTools.Library.DatFiles #endregion + #region OpenMSX + + case "Machine.GenMSXID": + machine.GenMSXID = value; + break; + + case "Machine.System": + machine.System = value; + break; + + case "Machine.Country": + machine.Country = value; + break; + + #endregion + #region SoftwareList case "Machine.Supported": @@ -1238,6 +1254,25 @@ namespace SabreTools.Library.DatFiles #endregion + #region OpenMSX + + case "genmsxid": + case "genmsx id": + case "genmsx-id": + case "gen msx id": + case "gen-msx-id": + return "Machine.GenMSXID"; + + case "msxsystem": + case "msx system": + case "msx-system": + return "Machine.System"; + + case "country": + return "Machine.Country"; + + #endregion + #region SoftwareList case "supported": diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs index ec0bd2eb..61f0beb3 100644 --- a/SabreTools.Library/DatItems/DatItem.cs +++ b/SabreTools.Library/DatItems/DatItem.cs @@ -251,6 +251,11 @@ namespace SabreTools.Library.DatItems Field.HasCrc, Field.RelatedTo, + // OpenMSX + Field.GenMSXID, + Field.System, + Field.Country, + // SoftwareList Field.Supported, Field.SharedFeatures, diff --git a/SabreTools.Library/DatItems/Enums.cs b/SabreTools.Library/DatItems/Enums.cs index 9d923def..060a5da4 100644 --- a/SabreTools.Library/DatItems/Enums.cs +++ b/SabreTools.Library/DatItems/Enums.cs @@ -87,6 +87,14 @@ namespace SabreTools.Library.DatItems #endregion + #region OpenMSX + + GenMSXID, + System, + Country, + + #endregion + #region SoftwareList Supported, diff --git a/SabreTools.Library/DatItems/Machine.cs b/SabreTools.Library/DatItems/Machine.cs index 4cba6c45..07b49a79 100644 --- a/SabreTools.Library/DatItems/Machine.cs +++ b/SabreTools.Library/DatItems/Machine.cs @@ -3,8 +3,8 @@ using System.Collections.Generic; using System.Linq; using SabreTools.Library.Filtering; -using Newtonsoft.Json; using SabreTools.Library.Tools; +using Newtonsoft.Json; namespace SabreTools.Library.DatItems { @@ -245,6 +245,28 @@ namespace SabreTools.Library.DatItems #endregion + #region OpenMSX Fields + + /// + /// Generation MSX ID + /// + [JsonProperty("genmsxid")] + public string GenMSXID { get; set; } = null; + + /// + /// MSX System + /// + [JsonProperty("system")] + public string System { get; set; } = null; + + /// + /// Machine country of origin + /// + [JsonProperty("country")] + public string Country { get; set; } = null; + + #endregion + #region SoftwareList Fields /// @@ -412,6 +434,20 @@ namespace SabreTools.Library.DatItems #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: @@ -588,6 +624,19 @@ namespace SabreTools.Library.DatItems #endregion + #region OpenMSX + + if (mappings.Keys.Contains(Field.GenMSXID)) + GenMSXID = mappings[Field.GenMSXID]; + + if (mappings.Keys.Contains(Field.System)) + System = mappings[Field.System]; + + if (mappings.Keys.Contains(Field.Country)) + Country = mappings[Field.Country]; + + #endregion + #region SoftwareList if (mappings.Keys.Contains(Field.Supported)) @@ -710,6 +759,14 @@ namespace SabreTools.Library.DatItems #endregion + #region OpenMSX + + GenMSXID = this.GenMSXID, + System = this.System, + Country = this.Country, + + #endregion + #region SoftwareList Supported = this.Supported, @@ -976,6 +1033,28 @@ namespace SabreTools.Library.DatItems #endregion + #region OpenMSX + + // Filter on Generation MSX ID + if (filter.GenMSXID.MatchesPositiveSet(GenMSXID) == false) + return false; + if (filter.GenMSXID.MatchesNegativeSet(GenMSXID) == true) + return false; + + // Filter on system + if (filter.System.MatchesPositiveSet(System) == false) + return false; + if (filter.System.MatchesNegativeSet(System) == true) + return false; + + // Filter on country + if (filter.Country.MatchesPositiveSet(Country) == false) + return false; + if (filter.Country.MatchesNegativeSet(Country) == true) + return false; + + #endregion + #region SoftwareList // Filter on supported @@ -1115,6 +1194,19 @@ namespace SabreTools.Library.DatItems #endregion + #region OpenMSX + + if (fields.Contains(Field.GenMSXID)) + GenMSXID = null; + + if (fields.Contains(Field.System)) + System = null; + + if (fields.Contains(Field.Country)) + Country = null; + + #endregion + #region SoftwareList if (fields.Contains(Field.Supported)) @@ -1266,6 +1358,19 @@ namespace SabreTools.Library.DatItems #endregion + #region OpenMSX + + if (fields.Contains(Field.GenMSXID)) + GenMSXID = machine.GenMSXID; + + if (fields.Contains(Field.System)) + System = machine.System; + + if (fields.Contains(Field.Country)) + Country = machine.Country; + + #endregion + #region SoftwareList if (fields.Contains(Field.Supported)) diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs index 6a9511b7..67034fe6 100644 --- a/SabreTools.Library/Filtering/Filter.cs +++ b/SabreTools.Library/Filtering/Filter.cs @@ -205,6 +205,25 @@ namespace SabreTools.Library.Filtering #endregion + #region OpenMSX + + /// + /// Include or exclude machine Generation MSX ID + /// + public FilterItem GenMSXID { get; private set; } = new FilterItem(); + + /// + /// Include or exclude machine system + /// + public FilterItem System { get; private set; } = new FilterItem(); + + /// + /// Include or exclude machine country + /// + public FilterItem Country { get; private set; } = new FilterItem(); + + #endregion + #region SoftwareList /// @@ -762,6 +781,31 @@ namespace SabreTools.Library.Filtering #endregion + #region OpenMSX + + case Field.GenMSXID: + if (negate) + GenMSXID.NegativeSet.Add(value); + else + GenMSXID.PositiveSet.Add(value); + break; + + case Field.System: + if (negate) + System.NegativeSet.Add(value); + else + System.PositiveSet.Add(value); + break; + + case Field.Country: + if (negate) + Country.NegativeSet.Add(value); + else + Country.PositiveSet.Add(value); + break; + + #endregion + #region SoftwareList case Field.Supported: diff --git a/SabreTools.Library/Tools/Converters.cs b/SabreTools.Library/Tools/Converters.cs index 22e41e85..d0e75663 100644 --- a/SabreTools.Library/Tools/Converters.cs +++ b/SabreTools.Library/Tools/Converters.cs @@ -293,6 +293,26 @@ namespace SabreTools.Library.Tools #endregion + #region OpenMSX + + case "genmsxid": + case "genmsx id": + case "genmsx-id": + case "gen msx id": + case "gen-msx-id": + return Field.GenMSXID; + + case "system": + case "msxsystem": + case "msx system": + case "msx-system": + return Field.System; + + case "country": + return Field.Country; + + #endregion + #region SoftwareList case "supported":