diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index cb2ecfa9..6980ba2c 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -313,7 +313,19 @@ namespace SabreTools.Library.DatFiles foreach (DatItem item in items) { // Add all missing information - item.Part = part; + switch (item.ItemType) + { + case ItemType.DipSwitch: + (item as DipSwitch).Part = part; + break; + case ItemType.Disk: + (item as Disk).Part = part; + break; + case ItemType.Rom: + (item as Rom).Part = part; + break; + } + item.Source = new Source(indexId, filename); item.CopyMachineInformation(machine); @@ -693,12 +705,12 @@ namespace SabreTools.Library.DatFiles diskAreaName = "cdrom"; xtw.WriteStartElement("part"); - xtw.WriteRequiredAttributeString("name", datItem.Part?.Name); - xtw.WriteRequiredAttributeString("interface", datItem.Part?.Interface); + xtw.WriteRequiredAttributeString("name", disk.Part?.Name); + xtw.WriteRequiredAttributeString("interface", disk.Part?.Interface); - if (datItem.Part?.Features != null && datItem.Part?.Features.Count > 0) + if (disk.Part?.Features != null && disk.Part?.Features.Count > 0) { - foreach (PartFeature partFeature in datItem.Part.Features) + foreach (PartFeature partFeature in disk.Part.Features) { xtw.WriteStartElement("feature"); xtw.WriteRequiredAttributeString("name", partFeature.Name); @@ -740,12 +752,12 @@ namespace SabreTools.Library.DatFiles dataAreaName = "rom"; xtw.WriteStartElement("part"); - xtw.WriteRequiredAttributeString("name", datItem.Part?.Name); - xtw.WriteRequiredAttributeString("interface", datItem.Part?.Interface); + xtw.WriteRequiredAttributeString("name", rom.Part?.Name); + xtw.WriteRequiredAttributeString("interface", rom.Part?.Interface); - if (datItem.Part?.Features != null && datItem.Part?.Features.Count > 0) + if (rom.Part?.Features != null && rom.Part?.Features.Count > 0) { - foreach (PartFeature kvp in datItem.Part.Features) + foreach (PartFeature kvp in rom.Part.Features) { xtw.WriteStartElement("feature"); xtw.WriteRequiredAttributeString("name", kvp.Name); diff --git a/SabreTools.Library/DatItems/Adjuster.cs b/SabreTools.Library/DatItems/Adjuster.cs index e732bdcc..800f67a5 100644 --- a/SabreTools.Library/DatItems/Adjuster.cs +++ b/SabreTools.Library/DatItems/Adjuster.cs @@ -107,7 +107,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Analog.cs b/SabreTools.Library/DatItems/Analog.cs index 5f87b7e9..09ad7872 100644 --- a/SabreTools.Library/DatItems/Analog.cs +++ b/SabreTools.Library/DatItems/Analog.cs @@ -70,7 +70,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Archive.cs b/SabreTools.Library/DatItems/Archive.cs index 5121e88f..70fce975 100644 --- a/SabreTools.Library/DatItems/Archive.cs +++ b/SabreTools.Library/DatItems/Archive.cs @@ -83,7 +83,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/BiosSet.cs b/SabreTools.Library/DatItems/BiosSet.cs index f7b4403c..92c3ad7f 100644 --- a/SabreTools.Library/DatItems/BiosSet.cs +++ b/SabreTools.Library/DatItems/BiosSet.cs @@ -101,7 +101,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Blank.cs b/SabreTools.Library/DatItems/Blank.cs index 030e688d..c639e5d7 100644 --- a/SabreTools.Library/DatItems/Blank.cs +++ b/SabreTools.Library/DatItems/Blank.cs @@ -38,7 +38,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Chip.cs b/SabreTools.Library/DatItems/Chip.cs index 8ed3d6ee..99cf05de 100644 --- a/SabreTools.Library/DatItems/Chip.cs +++ b/SabreTools.Library/DatItems/Chip.cs @@ -112,7 +112,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Condition.cs b/SabreTools.Library/DatItems/Condition.cs index 03898c57..1a5b696b 100644 --- a/SabreTools.Library/DatItems/Condition.cs +++ b/SabreTools.Library/DatItems/Condition.cs @@ -105,7 +105,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Configuration.cs b/SabreTools.Library/DatItems/Configuration.cs index 6e071fb8..cab1d571 100644 --- a/SabreTools.Library/DatItems/Configuration.cs +++ b/SabreTools.Library/DatItems/Configuration.cs @@ -146,7 +146,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Control.cs b/SabreTools.Library/DatItems/Control.cs index a82c4abb..3f877deb 100644 --- a/SabreTools.Library/DatItems/Control.cs +++ b/SabreTools.Library/DatItems/Control.cs @@ -170,7 +170,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs index 308d1549..9438f190 100644 --- a/SabreTools.Library/DatItems/DatItem.cs +++ b/SabreTools.Library/DatItems/DatItem.cs @@ -104,12 +104,6 @@ namespace SabreTools.Library.DatItems #region SoftwareList Fields - /// - /// Original hardware part associated with the item - /// - [JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore)] - public Part Part { get; set; } - /// /// SoftwareList value associated with the item /// @@ -769,18 +763,6 @@ namespace SabreTools.Library.DatItems #region SoftwareList - // Filter on part name - if (filter.DatItem_Part_Name.MatchesPositiveSet(Part?.Name) == false) - return false; - if (filter.DatItem_Part_Name.MatchesNegativeSet(Part?.Name) == true) - return false; - - // Filter on part interface - if (filter.DatItem_Part_Interface.MatchesPositiveSet(Part?.Interface) == false) - return false; - if (filter.DatItem_Part_Interface.MatchesNegativeSet(Part?.Interface) == true) - return false; - // Filter on softwarelist value if (filter.DatItem_Value.MatchesPositiveSet(Value) == false) return false; @@ -838,15 +820,6 @@ namespace SabreTools.Library.DatItems #region SoftwareList - if (fields.Contains(Field.DatItem_Part_Name) && Part != null) - Part.Name = null; - - if (fields.Contains(Field.DatItem_Part_Interface) && Part != null) - Part.Interface = null; - - if (fields.Contains(Field.DatItem_Features) && Part != null) - Part.Features = null; - if (fields.Contains(Field.DatItem_Value)) Value = null; @@ -974,30 +947,6 @@ namespace SabreTools.Library.DatItems #region SoftwareList - if (fields.Contains(Field.DatItem_Part_Name)) - { - if (Part == null) - Part = new Part(); - - Part.Name = item.Part?.Name; - } - - if (fields.Contains(Field.DatItem_Part_Interface)) - { - if (Part == null) - Part = new Part(); - - Part.Interface = item.Part?.Interface; - } - - if (fields.Contains(Field.DatItem_Features)) - { - if (Part == null) - Part = new Part(); - - Part.Features = item.Part?.Features; - } - if (fields.Contains(Field.DatItem_Value)) Value = item.Value; diff --git a/SabreTools.Library/DatItems/Device.cs b/SabreTools.Library/DatItems/Device.cs index 89d9fa3b..e6e44d8d 100644 --- a/SabreTools.Library/DatItems/Device.cs +++ b/SabreTools.Library/DatItems/Device.cs @@ -121,7 +121,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/DeviceReference.cs b/SabreTools.Library/DatItems/DeviceReference.cs index ab79f5e0..c63ab391 100644 --- a/SabreTools.Library/DatItems/DeviceReference.cs +++ b/SabreTools.Library/DatItems/DeviceReference.cs @@ -83,7 +83,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/DipSwitch.cs b/SabreTools.Library/DatItems/DipSwitch.cs index 8e3b1a9e..60271747 100644 --- a/SabreTools.Library/DatItems/DipSwitch.cs +++ b/SabreTools.Library/DatItems/DipSwitch.cs @@ -16,6 +16,8 @@ namespace SabreTools.Library.DatItems { #region Fields + #region Common + /// /// Name of the item /// @@ -54,6 +56,18 @@ namespace SabreTools.Library.DatItems #endregion + #region SoftwareList + + /// + /// Original hardware part associated with the item + /// + [JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore)] + public Part Part { get; set; } + + #endregion + + #endregion // Fields + #region Accessors /// @@ -123,7 +137,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, @@ -136,6 +149,8 @@ namespace SabreTools.Library.DatItems Conditions = this.Conditions, Locations = this.Locations, Values = this.Values, + + Part = this.Part, }; } @@ -202,6 +217,8 @@ namespace SabreTools.Library.DatItems if (!base.PassesFilter(filter)) return false; + #region Common + // Filter on item name if (filter.DatItem_Name.MatchesPositiveSet(Name) == false) return false; @@ -224,6 +241,24 @@ namespace SabreTools.Library.DatItems // TODO: Handle DatItem_Location* // TODO: Handle DatItem_Value* + #endregion + + #region SoftwareList + + // Filter on part name + if (filter.DatItem_Part_Name.MatchesPositiveSet(Part?.Name) == false) + return false; + if (filter.DatItem_Part_Name.MatchesNegativeSet(Part?.Name) == true) + return false; + + // Filter on part interface + if (filter.DatItem_Part_Interface.MatchesPositiveSet(Part?.Interface) == false) + return false; + if (filter.DatItem_Part_Interface.MatchesNegativeSet(Part?.Interface) == true) + return false; + + #endregion + return true; } @@ -237,6 +272,9 @@ namespace SabreTools.Library.DatItems base.RemoveFields(fields); // Remove the fields + + #region Common + if (fields.Contains(Field.DatItem_Name)) Name = null; @@ -258,6 +296,21 @@ namespace SabreTools.Library.DatItems // TODO: Handle DatItem_Condition* // TODO: Handle DatItem_Location* // TODO: Handle DatItem_Value* + + #endregion + + #region SoftwareList + + if (fields.Contains(Field.DatItem_Part_Name) && Part != null) + Part.Name = null; + + if (fields.Contains(Field.DatItem_Part_Interface) && Part != null) + Part.Interface = null; + + if (fields.Contains(Field.DatItem_Features) && Part != null) + Part.Features = null; + + #endregion } /// @@ -292,6 +345,9 @@ namespace SabreTools.Library.DatItems DipSwitch newItem = item as DipSwitch; // Replace the fields + + #region Common + if (fields.Contains(Field.DatItem_Name)) Name = newItem.Name; @@ -313,6 +369,36 @@ namespace SabreTools.Library.DatItems // TODO: Handle DatItem_Condition* // TODO: Handle DatItem_Location* // TODO: Handle DatItem_Value* + + #endregion + + #region SoftwareList + + if (fields.Contains(Field.DatItem_Part_Name)) + { + if (Part == null) + Part = new Part(); + + Part.Name = newItem.Part?.Name; + } + + if (fields.Contains(Field.DatItem_Part_Interface)) + { + if (Part == null) + Part = new Part(); + + Part.Interface = newItem.Part?.Interface; + } + + if (fields.Contains(Field.DatItem_Features)) + { + if (Part == null) + Part = new Part(); + + Part.Features = newItem.Part?.Features; + } + + #endregion } #endregion diff --git a/SabreTools.Library/DatItems/Disk.cs b/SabreTools.Library/DatItems/Disk.cs index 03816d31..7be66a36 100644 --- a/SabreTools.Library/DatItems/Disk.cs +++ b/SabreTools.Library/DatItems/Disk.cs @@ -100,6 +100,12 @@ namespace SabreTools.Library.DatItems [JsonProperty("diskarea", DefaultValueHandling = DefaultValueHandling.Ignore)] public DiskArea DiskArea { get; set; } + /// + /// Original hardware part associated with the item + /// + [JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore)] + public Part Part { get; set; } + #endregion #endregion // Fields @@ -212,7 +218,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, @@ -230,6 +235,7 @@ namespace SabreTools.Library.DatItems Optional = this.Optional, DiskArea = this.DiskArea, + Part = this.Part, }; } @@ -254,7 +260,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, @@ -271,6 +276,7 @@ namespace SabreTools.Library.DatItems SHA1 = this.SHA1, DataArea = new DataArea { Name = this.DiskArea.Name }, + Part = this.Part, }; return rom; @@ -418,6 +424,8 @@ namespace SabreTools.Library.DatItems if (!base.PassesFilter(filter)) return false; + #region Common + // Filter on item name if (filter.DatItem_Name.MatchesPositiveSet(Name) == false) return false; @@ -468,12 +476,30 @@ namespace SabreTools.Library.DatItems if (filter.DatItem_Optional.MatchesNeutral(null, Optional) == false) return false; + #endregion + + #region SoftwareList + // Filter on area name if (filter.DatItem_AreaName.MatchesPositiveSet(DiskArea?.Name) == false) return false; if (filter.DatItem_AreaName.MatchesNegativeSet(DiskArea?.Name) == true) return false; + // Filter on part name + if (filter.DatItem_Part_Name.MatchesPositiveSet(Part?.Name) == false) + return false; + if (filter.DatItem_Part_Name.MatchesNegativeSet(Part?.Name) == true) + return false; + + // Filter on part interface + if (filter.DatItem_Part_Interface.MatchesPositiveSet(Part?.Interface) == false) + return false; + if (filter.DatItem_Part_Interface.MatchesNegativeSet(Part?.Interface) == true) + return false; + + #endregion + return true; } @@ -487,6 +513,9 @@ namespace SabreTools.Library.DatItems base.RemoveFields(fields); // Remove the fields + + #region Common + if (fields.Contains(Field.DatItem_Name)) Name = null; @@ -514,11 +543,26 @@ namespace SabreTools.Library.DatItems if (fields.Contains(Field.DatItem_Optional)) Optional = null; + #endregion + + #region SoftwareList + if (fields.Contains(Field.DatItem_AreaName)) { if (DiskArea != null) DiskArea.Name = null; } + + if (fields.Contains(Field.DatItem_Part_Name) && Part != null) + Part.Name = null; + + if (fields.Contains(Field.DatItem_Part_Interface) && Part != null) + Part.Interface = null; + + if (fields.Contains(Field.DatItem_Features) && Part != null) + Part.Features = null; + + #endregion } /// @@ -588,6 +632,9 @@ namespace SabreTools.Library.DatItems Disk newItem = item as Disk; // Replace the fields + + #region Common + if (fields.Contains(Field.DatItem_Name)) Name = newItem.Name; @@ -621,6 +668,10 @@ namespace SabreTools.Library.DatItems if (fields.Contains(Field.DatItem_Optional)) Optional = newItem.Optional; + #endregion + + #region SoftwareList + if (fields.Contains(Field.DatItem_AreaName)) { if (DiskArea == null) @@ -628,6 +679,32 @@ namespace SabreTools.Library.DatItems DiskArea.Name = newItem.DiskArea?.Name; } + + if (fields.Contains(Field.DatItem_Part_Name)) + { + if (Part == null) + Part = new Part(); + + Part.Name = newItem.Part?.Name; + } + + if (fields.Contains(Field.DatItem_Part_Interface)) + { + if (Part == null) + Part = new Part(); + + Part.Interface = newItem.Part?.Interface; + } + + if (fields.Contains(Field.DatItem_Features)) + { + if (Part == null) + Part = new Part(); + + Part.Features = newItem.Part?.Features; + } + + #endregion } #endregion diff --git a/SabreTools.Library/DatItems/Display.cs b/SabreTools.Library/DatItems/Display.cs index c4ade817..57c9d623 100644 --- a/SabreTools.Library/DatItems/Display.cs +++ b/SabreTools.Library/DatItems/Display.cs @@ -187,7 +187,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Driver.cs b/SabreTools.Library/DatItems/Driver.cs index b9fd39cd..cae88abf 100644 --- a/SabreTools.Library/DatItems/Driver.cs +++ b/SabreTools.Library/DatItems/Driver.cs @@ -103,7 +103,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Extension.cs b/SabreTools.Library/DatItems/Extension.cs index 781162f5..b51647bb 100644 --- a/SabreTools.Library/DatItems/Extension.cs +++ b/SabreTools.Library/DatItems/Extension.cs @@ -83,7 +83,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Feature.cs b/SabreTools.Library/DatItems/Feature.cs index da1e669d..fe251126 100644 --- a/SabreTools.Library/DatItems/Feature.cs +++ b/SabreTools.Library/DatItems/Feature.cs @@ -93,7 +93,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Info.cs b/SabreTools.Library/DatItems/Info.cs index 996b10dc..257a278b 100644 --- a/SabreTools.Library/DatItems/Info.cs +++ b/SabreTools.Library/DatItems/Info.cs @@ -91,7 +91,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Input.cs b/SabreTools.Library/DatItems/Input.cs index 400a767e..f6262490 100644 --- a/SabreTools.Library/DatItems/Input.cs +++ b/SabreTools.Library/DatItems/Input.cs @@ -105,7 +105,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Instance.cs b/SabreTools.Library/DatItems/Instance.cs index ef0de7ca..ad46c981 100644 --- a/SabreTools.Library/DatItems/Instance.cs +++ b/SabreTools.Library/DatItems/Instance.cs @@ -92,7 +92,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Location.cs b/SabreTools.Library/DatItems/Location.cs index 024bf023..021147d4 100644 --- a/SabreTools.Library/DatItems/Location.cs +++ b/SabreTools.Library/DatItems/Location.cs @@ -100,7 +100,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Media.cs b/SabreTools.Library/DatItems/Media.cs index cf96aa19..3ef113c7 100644 --- a/SabreTools.Library/DatItems/Media.cs +++ b/SabreTools.Library/DatItems/Media.cs @@ -148,7 +148,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, @@ -183,7 +182,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Port.cs b/SabreTools.Library/DatItems/Port.cs index f3299831..008f03b2 100644 --- a/SabreTools.Library/DatItems/Port.cs +++ b/SabreTools.Library/DatItems/Port.cs @@ -80,7 +80,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/RamOption.cs b/SabreTools.Library/DatItems/RamOption.cs index 89a85c3d..c89529ec 100644 --- a/SabreTools.Library/DatItems/RamOption.cs +++ b/SabreTools.Library/DatItems/RamOption.cs @@ -101,7 +101,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Release.cs b/SabreTools.Library/DatItems/Release.cs index d8033461..3518e254 100644 --- a/SabreTools.Library/DatItems/Release.cs +++ b/SabreTools.Library/DatItems/Release.cs @@ -123,7 +123,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Rom.cs b/SabreTools.Library/DatItems/Rom.cs index 0e18de15..b8b617ea 100644 --- a/SabreTools.Library/DatItems/Rom.cs +++ b/SabreTools.Library/DatItems/Rom.cs @@ -179,6 +179,12 @@ namespace SabreTools.Library.DatItems [JsonProperty("dataarea", DefaultValueHandling = DefaultValueHandling.Ignore)] public DataArea DataArea { get; set; } + /// + /// Original hardware part associated with the item + /// + [JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore)] + public Part Part { get; set; } + #endregion #endregion // Fields @@ -374,7 +380,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, @@ -402,6 +407,7 @@ namespace SabreTools.Library.DatItems Inverted = this.Inverted, DataArea = this.DataArea, + Part = this.Part, }; } @@ -602,6 +608,8 @@ namespace SabreTools.Library.DatItems if (!base.PassesFilter(filter)) return false; + #region Common + // Filter on item name if (filter.DatItem_Name.MatchesPositiveSet(Name) == false) return false; @@ -704,6 +712,10 @@ namespace SabreTools.Library.DatItems if (filter.DatItem_Inverted.MatchesNeutral(null, Inverted) == false) return false; + #endregion + + #region SoftwareList + // Filter on area name if (filter.DatItem_AreaName.MatchesPositiveSet(DataArea?.Name) == false) return false; @@ -730,6 +742,20 @@ namespace SabreTools.Library.DatItems if (filter.DatItem_AreaEndianness.MatchesNegativeSet(DataArea?.Endianness) == true) return false; + // Filter on part name + if (filter.DatItem_Part_Name.MatchesPositiveSet(Part?.Name) == false) + return false; + if (filter.DatItem_Part_Name.MatchesNegativeSet(Part?.Name) == true) + return false; + + // Filter on part interface + if (filter.DatItem_Part_Interface.MatchesPositiveSet(Part?.Interface) == false) + return false; + if (filter.DatItem_Part_Interface.MatchesNegativeSet(Part?.Interface) == true) + return false; + + #endregion + return true; } @@ -743,6 +769,9 @@ namespace SabreTools.Library.DatItems base.RemoveFields(fields); // Remove the fields + + #region Common + if (fields.Contains(Field.DatItem_Name)) Name = null; @@ -796,6 +825,10 @@ namespace SabreTools.Library.DatItems if (fields.Contains(Field.DatItem_Inverted)) Inverted = null; + #endregion + + #region SoftwareList + if (fields.Contains(Field.DatItem_AreaName)) { if (DataArea != null) @@ -819,6 +852,17 @@ namespace SabreTools.Library.DatItems if (DataArea != null) DataArea.Endianness = null; } + + if (fields.Contains(Field.DatItem_Part_Name) && Part != null) + Part.Name = null; + + if (fields.Contains(Field.DatItem_Part_Interface) && Part != null) + Part.Interface = null; + + if (fields.Contains(Field.DatItem_Features) && Part != null) + Part.Features = null; + + #endregion } /// @@ -910,6 +954,9 @@ namespace SabreTools.Library.DatItems Rom newItem = item as Rom; // Replace the fields + + #region Common + if (fields.Contains(Field.DatItem_Name)) Name = newItem.Name; @@ -984,6 +1031,10 @@ namespace SabreTools.Library.DatItems if (fields.Contains(Field.DatItem_Inverted)) Inverted = newItem.Inverted; + #endregion + + #region SoftwareList + if (fields.Contains(Field.DatItem_AreaName)) { if (DataArea == null) @@ -1015,6 +1066,32 @@ namespace SabreTools.Library.DatItems DataArea.Endianness = newItem.DataArea?.Endianness; } + + if (fields.Contains(Field.DatItem_Part_Name)) + { + if (Part == null) + Part = new Part(); + + Part.Name = newItem.Part?.Name; + } + + if (fields.Contains(Field.DatItem_Part_Interface)) + { + if (Part == null) + Part = new Part(); + + Part.Interface = newItem.Part?.Interface; + } + + if (fields.Contains(Field.DatItem_Features)) + { + if (Part == null) + Part = new Part(); + + Part.Features = newItem.Part?.Features; + } + + #endregion } #endregion diff --git a/SabreTools.Library/DatItems/Sample.cs b/SabreTools.Library/DatItems/Sample.cs index 590bacc8..80c59d55 100644 --- a/SabreTools.Library/DatItems/Sample.cs +++ b/SabreTools.Library/DatItems/Sample.cs @@ -83,7 +83,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Setting.cs b/SabreTools.Library/DatItems/Setting.cs index f1604dc0..bcbd931a 100644 --- a/SabreTools.Library/DatItems/Setting.cs +++ b/SabreTools.Library/DatItems/Setting.cs @@ -115,7 +115,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/SharedFeature.cs b/SabreTools.Library/DatItems/SharedFeature.cs index 73f050f5..f96bfd6f 100644 --- a/SabreTools.Library/DatItems/SharedFeature.cs +++ b/SabreTools.Library/DatItems/SharedFeature.cs @@ -91,7 +91,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Slot.cs b/SabreTools.Library/DatItems/Slot.cs index 43260024..0b078246 100644 --- a/SabreTools.Library/DatItems/Slot.cs +++ b/SabreTools.Library/DatItems/Slot.cs @@ -91,7 +91,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/SlotOption.cs b/SabreTools.Library/DatItems/SlotOption.cs index 73a68a2c..2587de61 100644 --- a/SabreTools.Library/DatItems/SlotOption.cs +++ b/SabreTools.Library/DatItems/SlotOption.cs @@ -100,7 +100,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/SoftwareList.cs b/SabreTools.Library/DatItems/SoftwareList.cs index c731068a..5fbb7985 100644 --- a/SabreTools.Library/DatItems/SoftwareList.cs +++ b/SabreTools.Library/DatItems/SoftwareList.cs @@ -103,7 +103,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag, diff --git a/SabreTools.Library/DatItems/Sound.cs b/SabreTools.Library/DatItems/Sound.cs index 12187c63..1af078c1 100644 --- a/SabreTools.Library/DatItems/Sound.cs +++ b/SabreTools.Library/DatItems/Sound.cs @@ -70,7 +70,6 @@ namespace SabreTools.Library.DatItems Remark = this.Remark, Boot = this.Boot, - Part = this.Part, Value = this.Value, LoadFlag = this.LoadFlag,