diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs index 6423bc49..c3305b57 100644 --- a/SabreTools.Library/DatFiles/Json.cs +++ b/SabreTools.Library/DatFiles/Json.cs @@ -738,6 +738,8 @@ namespace SabreTools.Library.DatFiles areaName = null, areaWidth = null, areaEndianness = null, + value = null, + loadFlag = null, biosDescription = null, region = null, language = null, @@ -781,6 +783,8 @@ namespace SabreTools.Library.DatFiles datItem.AreaSize = areaSize; datItem.AreaWidth = areaWidth; datItem.AreaEndianness = areaEndianness; + datItem.Value = value; + datItem.LoadFlag = loadFlag; if (itemType == ItemType.BiosSet) { @@ -882,10 +886,10 @@ namespace SabreTools.Library.DatFiles jtr.Read(); // Key string key = jtr.Value as string; - string value = jtr.ReadAsString(); + string featureValue = jtr.ReadAsString(); jtr.Read(); // End object - features.Add(new KeyValuePair(key, value)); + features.Add(new KeyValuePair(key, featureValue)); } break; @@ -910,6 +914,14 @@ namespace SabreTools.Library.DatFiles areaEndianness = jtr.ReadAsString(); break; + case "value": + value = jtr.ReadAsString(); + break; + + case "loadflag": + loadFlag = jtr.ReadAsString(); + break; + case "description": biosDescription = jtr.ReadAsString(); break; @@ -2072,6 +2084,16 @@ namespace SabreTools.Library.DatFiles jtw.WritePropertyName("areaendianness"); jtw.WriteValue(datItem.AreaEndianness); } + if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, Header.ExcludeFields))) + { + jtw.WritePropertyName("value"); + jtw.WriteValue(datItem.Value); + } + if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.LoadFlag, Header.ExcludeFields))) + { + jtw.WritePropertyName("loadflag"); + jtw.WriteValue(datItem.LoadFlag); + } // End item jtw.WriteEndObject(); diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 5fafe75f..85f7d6a2 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -89,6 +89,8 @@ namespace SabreTools.Library.DatFiles areaName = null, areaWidth = null, areaEndianness = null, + slvalue = null, + loadFlag = null, biosDescription = null, crc = null, md5 = null, @@ -545,6 +547,14 @@ namespace SabreTools.Library.DatFiles areaEndianness = value; break; + case "DatItem.Value": + slvalue = value; + break; + + case "DatItem.LoadFlag": + loadFlag = value; + break; + #endregion case "DatItem.Default": @@ -662,6 +672,8 @@ namespace SabreTools.Library.DatFiles AreaSize = areaSize, AreaWidth = areaWidth, AreaEndianness = areaEndianness, + Value = slvalue, + LoadFlag = loadFlag, Source = new Source { @@ -689,6 +701,8 @@ namespace SabreTools.Library.DatFiles AreaSize = areaSize, AreaWidth = areaWidth, AreaEndianness = areaEndianness, + Value = slvalue, + LoadFlag = loadFlag, Description = biosDescription, Default = def, @@ -719,6 +733,8 @@ namespace SabreTools.Library.DatFiles AreaSize = areaSize, AreaWidth = areaWidth, AreaEndianness = areaEndianness, + Value = slvalue, + LoadFlag = loadFlag, MD5 = md5, #if NET_FRAMEWORK @@ -761,6 +777,8 @@ namespace SabreTools.Library.DatFiles AreaSize = areaSize, AreaWidth = areaWidth, AreaEndianness = areaEndianness, + Value = slvalue, + LoadFlag = loadFlag, Region = region, Language = language, @@ -793,6 +811,8 @@ namespace SabreTools.Library.DatFiles AreaSize = areaSize, AreaWidth = areaWidth, AreaEndianness = areaEndianness, + Value = slvalue, + LoadFlag = loadFlag, Bios = bios, Size = size, @@ -839,6 +859,8 @@ namespace SabreTools.Library.DatFiles AreaSize = areaSize, AreaWidth = areaWidth, AreaEndianness = areaEndianness, + Value = slvalue, + LoadFlag = loadFlag, Source = new Source { @@ -1309,6 +1331,14 @@ namespace SabreTools.Library.DatFiles case "area-endianness": return "DatItem.AreaEndianness"; + case "value": + return "DatItem.Value"; + + case "loadflag": + case "load flag": + case "load-flag": + return "DatItem.LoadFlag"; + #endregion case "default": diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index 240d63af..a48ca380 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -331,6 +331,7 @@ namespace SabreTools.Library.DatFiles break; case "dipswitch": + // TODO: Read dipswitches // string dipswitch_name = reader.GetAttribute("name"); // string dipswitch_tag = reader.GetAttribute("tag"); // string dipswitch_mask = reader.GetAttribute("mask"); @@ -413,6 +414,7 @@ namespace SabreTools.Library.DatFiles { ((Rom)lastrom).Size += Sanitizer.CleanSize(reader.GetAttribute("size")); } + Items[key].RemoveAt(index); Items[key].Add(lastrom); reader.Read(); @@ -433,9 +435,7 @@ namespace SabreTools.Library.DatFiles SHA384 = reader.GetAttribute("sha384"), SHA512 = reader.GetAttribute("sha512"), Offset = reader.GetAttribute("offset"), - // Value = reader.GetAttribute("value"); ItemStatus = reader.GetAttribute("status").AsItemStatus(), - // LoadFlag = reader.GetAttribute("loadflag"), // (load16_byte|load16_word|load16_word_swap|load32_byte|load32_word|load32_word_swap|load32_dword|load64_word|load64_word_swap|reload|fill|continue|reload_plain|ignore) PartName = partName, PartInterface = partInterface, @@ -444,6 +444,8 @@ namespace SabreTools.Library.DatFiles AreaSize = areaSize, AreaWidth = areaWidth, AreaEndianness = areaEndianness, + Value = reader.GetAttribute("value"), + LoadFlag = reader.GetAttribute("loadflag"), Source = new Source { @@ -926,12 +928,12 @@ namespace SabreTools.Library.DatFiles xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant()); if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields))) xtw.WriteAttributeString("offset", rom.Offset); - //if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, DatHeader.ExcludeFields))) - // xtw.WriteAttributeString("value", rom.Value); + if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, Header.ExcludeFields))) + xtw.WriteAttributeString("value", rom.Value); if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None) xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant()); - //if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Loadflag, DatHeader.ExcludeFields))) - // xtw.WriteAttributeString("loadflag", rom.Loadflag); + if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.LoadFlag, Header.ExcludeFields))) + xtw.WriteAttributeString("loadflag", rom.LoadFlag); xtw.WriteEndElement(); // End dataarea diff --git a/SabreTools.Library/DatItems/Archive.cs b/SabreTools.Library/DatItems/Archive.cs index 6a53fa6d..d9b5c74c 100644 --- a/SabreTools.Library/DatItems/Archive.cs +++ b/SabreTools.Library/DatItems/Archive.cs @@ -38,6 +38,8 @@ AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, diff --git a/SabreTools.Library/DatItems/BiosSet.cs b/SabreTools.Library/DatItems/BiosSet.cs index 346bc8cf..e0bd14c2 100644 --- a/SabreTools.Library/DatItems/BiosSet.cs +++ b/SabreTools.Library/DatItems/BiosSet.cs @@ -114,6 +114,8 @@ namespace SabreTools.Library.DatItems AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, diff --git a/SabreTools.Library/DatItems/Blank.cs b/SabreTools.Library/DatItems/Blank.cs index cf6d3d8c..9d8aa188 100644 --- a/SabreTools.Library/DatItems/Blank.cs +++ b/SabreTools.Library/DatItems/Blank.cs @@ -38,6 +38,8 @@ AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs index 024913bf..5e20767a 100644 --- a/SabreTools.Library/DatItems/DatItem.cs +++ b/SabreTools.Library/DatItems/DatItem.cs @@ -115,6 +115,19 @@ namespace SabreTools.Library.DatItems [JsonProperty("endianness")] public string AreaEndianness { get; set; } // (big|little) "little" + /// + /// SoftwareList value associated with the item + /// + [JsonProperty("value")] + public string Value { get; set; } + + /// + /// Loading flag + /// + /// TODO: Convert to Enum? + [JsonProperty("loadflag")] + public string LoadFlag { get; set; } // (load16_byte|load16_word|load16_word_swap|load32_byte|load32_word|load32_word_swap|load32_dword|load64_word|load64_word_swap|reload|fill|continue|reload_plain|ignore) + #endregion #region Metadata information @@ -155,6 +168,8 @@ namespace SabreTools.Library.DatItems Field.AreaSize, Field.AreaWidth, Field.AreaEndianness, + Field.Value, + Field.LoadFlag, // BiosSet Field.BiosDescription, @@ -295,6 +310,12 @@ namespace SabreTools.Library.DatItems case Field.AreaEndianness: fieldValue = AreaEndianness; break; + case Field.Value: + fieldValue = Value; + break; + case Field.LoadFlag: + fieldValue = LoadFlag; + break; case Field.NULL: default: @@ -370,6 +391,12 @@ namespace SabreTools.Library.DatItems if (mappings.Keys.Contains(Field.AreaEndianness)) AreaEndianness = mappings[Field.AreaEndianness]; + if (mappings.Keys.Contains(Field.Value)) + Value = mappings[Field.Value]; + + if (mappings.Keys.Contains(Field.LoadFlag)) + LoadFlag = mappings[Field.LoadFlag]; + #endregion } @@ -632,6 +659,18 @@ namespace SabreTools.Library.DatItems if (filter.AreaEndianness.MatchesNegativeSet(AreaEndianness) == true) return false; + // Filter on softwarelist value + if (filter.Value.MatchesPositiveSet(Value) == false) + return false; + if (filter.Value.MatchesNegativeSet(Value) == true) + return false; + + // Filter on load flag + if (filter.LoadFlag.MatchesPositiveSet(LoadFlag) == false) + return false; + if (filter.LoadFlag.MatchesNegativeSet(LoadFlag) == true) + return false; + #endregion return true; @@ -686,6 +725,12 @@ namespace SabreTools.Library.DatItems if (fields.Contains(Field.AreaEndianness)) AreaEndianness = null; + if (fields.Contains(Field.Value)) + Value = null; + + if (fields.Contains(Field.LoadFlag)) + LoadFlag = null; + #endregion } @@ -809,6 +854,12 @@ namespace SabreTools.Library.DatItems if (fields.Contains(Field.AreaEndianness)) AreaEndianness = item.AreaEndianness; + if (fields.Contains(Field.Value)) + Value = item.Value; + + if (fields.Contains(Field.LoadFlag)) + LoadFlag = item.LoadFlag; + #endregion } diff --git a/SabreTools.Library/DatItems/Disk.cs b/SabreTools.Library/DatItems/Disk.cs index 4e61e4b7..595da90a 100644 --- a/SabreTools.Library/DatItems/Disk.cs +++ b/SabreTools.Library/DatItems/Disk.cs @@ -302,6 +302,8 @@ namespace SabreTools.Library.DatItems AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, @@ -346,6 +348,8 @@ namespace SabreTools.Library.DatItems AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, diff --git a/SabreTools.Library/DatItems/Enums.cs b/SabreTools.Library/DatItems/Enums.cs index 0f6e9600..f03fb88b 100644 --- a/SabreTools.Library/DatItems/Enums.cs +++ b/SabreTools.Library/DatItems/Enums.cs @@ -121,6 +121,8 @@ namespace SabreTools.Library.DatItems AreaSize, AreaWidth, AreaEndianness, + Value, + LoadFlag, #endregion diff --git a/SabreTools.Library/DatItems/Release.cs b/SabreTools.Library/DatItems/Release.cs index 13143063..42185b75 100644 --- a/SabreTools.Library/DatItems/Release.cs +++ b/SabreTools.Library/DatItems/Release.cs @@ -142,6 +142,8 @@ namespace SabreTools.Library.DatItems AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, diff --git a/SabreTools.Library/DatItems/Rom.cs b/SabreTools.Library/DatItems/Rom.cs index 9e6802ce..59883223 100644 --- a/SabreTools.Library/DatItems/Rom.cs +++ b/SabreTools.Library/DatItems/Rom.cs @@ -384,6 +384,8 @@ namespace SabreTools.Library.DatItems AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, diff --git a/SabreTools.Library/DatItems/Sample.cs b/SabreTools.Library/DatItems/Sample.cs index df331d6c..f617885f 100644 --- a/SabreTools.Library/DatItems/Sample.cs +++ b/SabreTools.Library/DatItems/Sample.cs @@ -38,6 +38,8 @@ AreaSize = this.AreaSize, AreaWidth = this.AreaWidth, AreaEndianness = this.AreaEndianness, + Value = this.Value, + LoadFlag = this.LoadFlag, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs index a6ae64c7..a60f4588 100644 --- a/SabreTools.Library/Filtering/Filter.cs +++ b/SabreTools.Library/Filtering/Filter.cs @@ -283,6 +283,16 @@ namespace SabreTools.Library.Filtering /// public FilterItem AreaEndianness { get; private set; } = new FilterItem(); + /// + /// Include or exclude softwarelist value + /// + public FilterItem Value { get; private set; } = new FilterItem(); + + /// + /// Include or exclude load flag + /// + public FilterItem LoadFlag { get; private set; } = new FilterItem(); + #endregion /// @@ -895,6 +905,20 @@ namespace SabreTools.Library.Filtering AreaEndianness.PositiveSet.Add(value); break; + case Field.Value: + if (negate) + Value.NegativeSet.Add(value); + else + Value.PositiveSet.Add(value); + break; + + case Field.LoadFlag: + if (negate) + LoadFlag.NegativeSet.Add(value); + else + LoadFlag.PositiveSet.Add(value); + break; + #endregion case Field.Default: diff --git a/SabreTools.Library/Tools/Converters.cs b/SabreTools.Library/Tools/Converters.cs index 11103f6d..677a7bc3 100644 --- a/SabreTools.Library/Tools/Converters.cs +++ b/SabreTools.Library/Tools/Converters.cs @@ -375,6 +375,12 @@ namespace SabreTools.Library.Tools case "area endianness": case "area-endianness": return Field.AreaEndianness; + case "value": + return Field.Value; + case "loadflag": + case "load flag": + case "load-flag": + return Field.LoadFlag; #endregion