diff --git a/SabreTools.Library/DatFiles/AttractMode.cs b/SabreTools.Library/DatFiles/AttractMode.cs index b64d920b..f696344c 100644 --- a/SabreTools.Library/DatFiles/AttractMode.cs +++ b/SabreTools.Library/DatFiles/AttractMode.cs @@ -157,6 +157,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/ClrMamePro.cs b/SabreTools.Library/DatFiles/ClrMamePro.cs index 992e6fb5..9c6b355a 100644 --- a/SabreTools.Library/DatFiles/ClrMamePro.cs +++ b/SabreTools.Library/DatFiles/ClrMamePro.cs @@ -484,6 +484,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index 324d4646..f325c3b4 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -3793,6 +3793,27 @@ namespace SabreTools.Library.DatFiles return Enum.GetValues(typeof(ItemType)) as ItemType[]; } + /// + /// Get if a machine contains any writable items + /// + /// DatItems to check + /// True if the machine contains at least one writable item, false otherwise + /// Empty machines are kept with this + protected bool ContainsWritable(List datItems) + { + // Empty machines are considered writable + if (datItems == null || datItems.Count == 0) + return true; + + foreach (DatItem datItem in datItems) + { + if (GetSupportedTypes().Contains(datItem.ItemType)) + return true; + } + + return false; + } + /// /// Get if an item should be ignored on write /// diff --git a/SabreTools.Library/DatFiles/DosCenter.cs b/SabreTools.Library/DatFiles/DosCenter.cs index 88396458..682ae61d 100644 --- a/SabreTools.Library/DatFiles/DosCenter.cs +++ b/SabreTools.Library/DatFiles/DosCenter.cs @@ -303,6 +303,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/EverdriveSmdb.cs b/SabreTools.Library/DatFiles/EverdriveSmdb.cs index 52ef8556..503d1a0e 100644 --- a/SabreTools.Library/DatFiles/EverdriveSmdb.cs +++ b/SabreTools.Library/DatFiles/EverdriveSmdb.cs @@ -137,6 +137,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/Hashfile.cs b/SabreTools.Library/DatFiles/Hashfile.cs index 63265042..488df195 100644 --- a/SabreTools.Library/DatFiles/Hashfile.cs +++ b/SabreTools.Library/DatFiles/Hashfile.cs @@ -150,6 +150,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items[key]; + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/Listrom.cs b/SabreTools.Library/DatFiles/Listrom.cs index a199d9c1..316713b9 100644 --- a/SabreTools.Library/DatFiles/Listrom.cs +++ b/SabreTools.Library/DatFiles/Listrom.cs @@ -300,6 +300,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index 705b0218..1d41dfcf 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -1197,6 +1197,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs index 0494c268..78feea27 100644 --- a/SabreTools.Library/DatFiles/Logiqx.cs +++ b/SabreTools.Library/DatFiles/Logiqx.cs @@ -716,6 +716,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/Missfile.cs b/SabreTools.Library/DatFiles/Missfile.cs index 321841f0..b18e7e61 100644 --- a/SabreTools.Library/DatFiles/Missfile.cs +++ b/SabreTools.Library/DatFiles/Missfile.cs @@ -67,6 +67,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index 9b35f842..a501d426 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -703,6 +703,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/OpenMSX.cs b/SabreTools.Library/DatFiles/OpenMSX.cs index 3b696081..74e220c0 100644 --- a/SabreTools.Library/DatFiles/OpenMSX.cs +++ b/SabreTools.Library/DatFiles/OpenMSX.cs @@ -557,6 +557,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/RomCenter.cs b/SabreTools.Library/DatFiles/RomCenter.cs index 9149beca..c432797e 100644 --- a/SabreTools.Library/DatFiles/RomCenter.cs +++ b/SabreTools.Library/DatFiles/RomCenter.cs @@ -407,6 +407,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/SabreJSON.cs b/SabreTools.Library/DatFiles/SabreJSON.cs index 0fdf74db..1ee6e94e 100644 --- a/SabreTools.Library/DatFiles/SabreJSON.cs +++ b/SabreTools.Library/DatFiles/SabreJSON.cs @@ -371,6 +371,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/SabreXML.cs b/SabreTools.Library/DatFiles/SabreXML.cs index 76c7454b..4dafb49e 100644 --- a/SabreTools.Library/DatFiles/SabreXML.cs +++ b/SabreTools.Library/DatFiles/SabreXML.cs @@ -218,6 +218,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 390ad102..431b1220 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -145,6 +145,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems); diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index 44f86b33..07a3f304 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -556,6 +556,10 @@ namespace SabreTools.Library.DatFiles { List datItems = Items.FilteredItems(key); + // If this machine doesn't contain any writable items, skip + if (!ContainsWritable(datItems)) + continue; + // Resolve the names in the block datItems = DatItem.ResolveNames(datItems);