diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index 40bdddc3..0c160083 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -207,19 +207,27 @@ namespace SabreTools.Library.DatFiles break; case "chip": - datItems.Add(new Chip + var chip = new Chip { Name = reader.GetAttribute("name"), Tag = reader.GetAttribute("tag"), ChipType = reader.GetAttribute("type").AsChipType(), - Clock = reader.GetAttribute("clock"), Source = new Source { Index = indexId, Name = filename, }, - }); + }; + + // Set the clock + if (reader.GetAttribute("clock") != null) + { + if (Int64.TryParse(reader.GetAttribute("clock"), out long clock)) + chip.Clock = clock; + } + + datItems.Add(chip); reader.Read(); break; @@ -1430,7 +1438,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteRequiredAttributeString("name", chip.Name); xtw.WriteOptionalAttributeString("tag", chip.Tag); xtw.WriteOptionalAttributeString("type", chip.ChipType.FromChipType()); - xtw.WriteOptionalAttributeString("clock", chip.Clock); + xtw.WriteOptionalAttributeString("clock", chip.Clock?.ToString()); xtw.WriteEndElement(); break; diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index a4c45155..4ec1c350 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -400,7 +400,6 @@ namespace SabreTools.Library.DatFiles Name = reader.GetAttribute("name"), Tag = reader.GetAttribute("tag"), ChipType = reader.GetAttribute("chiptype").AsChipType(), - Clock = reader.GetAttribute("clock"), Source = new Source { @@ -408,6 +407,14 @@ namespace SabreTools.Library.DatFiles Name = filename, }, }; + + // Set the clock + if (reader.GetAttribute("clock") != null) + { + if (Int64.TryParse(reader.GetAttribute("clock"), out long clock)) + (datItem as Chip).Clock = clock; + } + break; case "configuration": @@ -1254,7 +1261,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteRequiredAttributeString("name", chip.Name); xtw.WriteOptionalAttributeString("tag", chip.Tag); xtw.WriteOptionalAttributeString("chiptype", chip.ChipType.FromChipType()); - xtw.WriteOptionalAttributeString("clock", chip.Clock); + xtw.WriteOptionalAttributeString("clock", chip.Clock.ToString()); xtw.WriteEndElement(); break; diff --git a/SabreTools.Library/DatItems/Chip.cs b/SabreTools.Library/DatItems/Chip.cs index 0fe419c9..5e63f97b 100644 --- a/SabreTools.Library/DatItems/Chip.cs +++ b/SabreTools.Library/DatItems/Chip.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Linq; @@ -40,7 +41,7 @@ namespace SabreTools.Library.DatItems /// Clock speed /// [JsonProperty("clock", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Clock { get; set; } + public long? Clock { get; set; } #endregion @@ -75,7 +76,10 @@ namespace SabreTools.Library.DatItems ChipType = mappings[Field.DatItem_ChipType].AsChipType(); if (mappings.Keys.Contains(Field.DatItem_Clock)) - Clock = mappings[Field.DatItem_Clock]; + { + if (Int64.TryParse(mappings[Field.DatItem_Clock], out long clock)) + Clock = clock; + } } #endregion @@ -194,9 +198,9 @@ namespace SabreTools.Library.DatItems return false; // DatItem_Clock - if (filter.DatItem_Clock.MatchesPositiveSet(Clock) == false) + if (filter.DatItem_Clock.MatchesPositive(null, Clock) == false) return false; - if (filter.DatItem_Clock.MatchesNegativeSet(Clock) == true) + if (filter.DatItem_Clock.MatchesNegative(null, Clock) == true) return false; return true; diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs index 08093981..1b15156f 100644 --- a/SabreTools.Library/Filtering/Filter.cs +++ b/SabreTools.Library/Filtering/Filter.cs @@ -165,7 +165,7 @@ namespace SabreTools.Library.Filtering // Chip public FilterItem DatItem_Tag { get; private set; } = new FilterItem(); public FilterItem DatItem_ChipType { get; private set; } = new FilterItem() { Positive = ChipType.NULL, Negative = ChipType.NULL }; - public FilterItem DatItem_Clock { get; private set; } = new FilterItem(); + public FilterItem DatItem_Clock { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; // Condition public FilterItem DatItem_Mask { get; private set; } = new FilterItem(); @@ -730,7 +730,7 @@ namespace SabreTools.Library.Filtering break; case Field.DatItem_Clock: - SetStringFilter(DatItem_Clock, value, negate); + SetOptionalLongFilter(DatItem_Clock, value, negate); break; // Condition