diff --git a/SabreTools.Library/DatItems/Machine.cs b/SabreTools.Library/DatItems/Machine.cs
index 5ccb7539..22d78bb1 100644
--- a/SabreTools.Library/DatItems/Machine.cs
+++ b/SabreTools.Library/DatItems/Machine.cs
@@ -155,7 +155,7 @@ namespace SabreTools.Library.DatItems
///
/// List of associated device names
///
- [JsonProperty("devices", DefaultValueHandling = DefaultValueHandling.Ignore)]
+ [JsonProperty("devicereferences", DefaultValueHandling = DefaultValueHandling.Ignore)]
public List DeviceReferences { get; set; } = null;
///
@@ -733,6 +733,12 @@ namespace SabreTools.Library.DatItems
if (filter.Machine_SampleOf.MatchesNegativeSet(SampleOf) == true)
return false;
+ // Machine_Type
+ if (filter.Machine_Type.MatchesPositive(MachineType.NULL, MachineType) == false)
+ return false;
+ if (filter.Machine_Type.MatchesNegative(MachineType.NULL, MachineType) == true)
+ return false;
+
#endregion
#region AttractMode
@@ -783,13 +789,13 @@ namespace SabreTools.Library.DatItems
#region ListXML
- // Filter on source file
+ // Machine_SourceFile
if (filter.Machine_SourceFile.MatchesPositiveSet(SourceFile) == false)
return false;
if (filter.Machine_SourceFile.MatchesNegativeSet(SourceFile) == true)
return false;
- // Filter on runnable
+ // Machine_Runnable
if (filter.Machine_Runnable.MatchesPositive(Runnable.NULL, Runnable) == false)
return false;
if (filter.Machine_Runnable.MatchesNegative(Runnable.NULL, Runnable) == true)
@@ -802,7 +808,7 @@ namespace SabreTools.Library.DatItems
return false;
// Machine_DeviceReference_Name
- if (DeviceReferences.Any())
+ if (DeviceReferences?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -830,7 +836,7 @@ namespace SabreTools.Library.DatItems
return false;
// Machine_Chip_Name
- if (Chips.Any())
+ if (Chips?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -850,7 +856,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Chip_Tag
- if (Chips.Any())
+ if (Chips?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -870,7 +876,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Chip_Type
- if (Chips.Any())
+ if (Chips?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -890,7 +896,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Chip_Clock
- if (Chips.Any())
+ if (Chips?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -918,7 +924,7 @@ namespace SabreTools.Library.DatItems
return false;
// Machine_Display_Tag
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -938,7 +944,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_Type
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -958,7 +964,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_Rotate
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -978,7 +984,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_FlipX
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyNeutral = false;
@@ -993,7 +999,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_Width
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1013,7 +1019,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_Height
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1033,7 +1039,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_Refresh
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1053,7 +1059,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_PixClock
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1073,7 +1079,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_HTotal
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1093,7 +1099,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_HBEnd
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1113,7 +1119,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_HBStart
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1133,7 +1139,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_VTotal
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1153,7 +1159,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_VBEnd
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1173,7 +1179,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Display_VBStart
- if (Displays.Any())
+ if (Displays?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1201,7 +1207,7 @@ namespace SabreTools.Library.DatItems
return false;
// Machine_Sound_Channels
- if (Sounds.Any())
+ if (Sounds?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1222,13 +1228,115 @@ namespace SabreTools.Library.DatItems
#endregion
+ #region Conditions
+ // Machine_Conditions
+ if (filter.Machine_Conditions.MatchesNeutral(null, Conditions?.Any() ?? null) == false)
+ return false;
- // Filter on machine type
- if (filter.Machine_Type.MatchesPositive(MachineType.NULL, MachineType) == false)
- return false;
- if (filter.Machine_Type.MatchesNegative(MachineType.NULL, MachineType) == true)
- return false;
+ // Machine_Condition_Tag
+ if (Conditions?.Any() == true)
+ {
+ bool anyPositive = false;
+ bool anyNegative = false;
+
+ foreach (var condition in Conditions)
+ {
+ if (filter.Machine_Condition_Tag.MatchesPositive(null, condition?.Tag) != false)
+ anyPositive = true;
+ if (filter.Machine_Condition_Tag.MatchesNegative(null, condition?.Tag) == true)
+ anyNegative = true;
+ }
+
+ if (!anyPositive)
+ return false;
+ if (anyNegative)
+ return false;
+ }
+
+ // Machine_Condition_Mask
+ if (Conditions?.Any() == true)
+ {
+ bool anyPositive = false;
+ bool anyNegative = false;
+
+ foreach (var condition in Conditions)
+ {
+ if (filter.Machine_Condition_Mask.MatchesPositive(null, condition?.Mask) != false)
+ anyPositive = true;
+ if (filter.Machine_Condition_Mask.MatchesNegative(null, condition?.Mask) == true)
+ anyNegative = true;
+ }
+
+ if (!anyPositive)
+ return false;
+ if (anyNegative)
+ return false;
+ }
+
+ // Machine_Condition_Relation
+ if (Conditions?.Any() == true)
+ {
+ bool anyPositive = false;
+ bool anyNegative = false;
+
+ foreach (var condition in Conditions)
+ {
+ if (filter.Machine_Condition_Relation.MatchesPositive(null, condition?.Relation) != false)
+ anyPositive = true;
+ if (filter.Machine_Condition_Relation.MatchesNegative(null, condition?.Relation) == true)
+ anyNegative = true;
+ }
+
+ if (!anyPositive)
+ return false;
+ if (anyNegative)
+ return false;
+ }
+
+ // Machine_Condition_Value
+ if (Conditions?.Any() == true)
+ {
+ bool anyPositive = false;
+ bool anyNegative = false;
+
+ foreach (var condition in Conditions)
+ {
+ if (filter.Machine_Condition_Value.MatchesPositive(null, condition?.Value) != false)
+ anyPositive = true;
+ if (filter.Machine_Condition_Value.MatchesNegative(null, condition?.Value) == true)
+ anyNegative = true;
+ }
+
+ if (!anyPositive)
+ return false;
+ if (anyNegative)
+ return false;
+ }
+
+ #endregion
+
+ // TODO: Inputs
+ // TODO: Inputs.Controls
+ // TODO: DipSwitches
+ // TODO: DipSwitches.Locations
+ // TODO: DipSwitches.Values
+ // TODO: Configurations
+ // TODO: Configurations.Locations
+ // TODO: Configurations.Settings
+ // TODO: Ports
+ // TODO: Ports.Analogs
+ // TODO: Adjusters
+ // TODO: Adjusters.Conditions
+ // TODO: Drivers
+ // TODO: Features
+ // TODO: Devices
+ // TODO: Devices.Instances
+ // TODO: Devices.Extensions
+ // TODO: Slots
+ // TODO: Slots.SlotOptions
+ // TODO: SoftwareLists
+ // TODO: RamOptions
#endregion // ListXML
@@ -1341,7 +1449,7 @@ namespace SabreTools.Library.DatItems
return false;
// Machine_Info_Name
- if (Infos.Any())
+ if (Infos?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1361,7 +1469,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_Info_Value
- if (Infos.Any())
+ if (Infos?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1389,7 +1497,7 @@ namespace SabreTools.Library.DatItems
return false;
// Machine_SharedFeature_Name
- if (SharedFeatures.Any())
+ if (SharedFeatures?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;
@@ -1409,7 +1517,7 @@ namespace SabreTools.Library.DatItems
}
// Machine_SharedFeature_Value
- if (SharedFeatures.Any())
+ if (SharedFeatures?.Any() == true)
{
bool anyPositive = false;
bool anyNegative = false;