diff --git a/SabreTools.DatFiles/Formats/SoftwareList.cs b/SabreTools.DatFiles/Formats/SoftwareList.cs
index 5b96f1df..722e1775 100644
--- a/SabreTools.DatFiles/Formats/SoftwareList.cs
+++ b/SabreTools.DatFiles/Formats/SoftwareList.cs
@@ -586,8 +586,108 @@ namespace SabreTools.DatFiles.Formats
///
protected override List GetMissingRequiredFields(DatItem datItem)
{
- // TODO: Check required fields
- return null;
+ List missingFields = new List();
+
+ switch (datItem.ItemType)
+ {
+ case ItemType.DipSwitch:
+ DipSwitch dipSwitch = datItem as DipSwitch;
+ if (!dipSwitch.PartSpecified)
+ {
+ missingFields.Add(DatItemField.Part_Name);
+ missingFields.Add(DatItemField.Part_Interface);
+ }
+ else
+ {
+ if (string.IsNullOrWhiteSpace(dipSwitch.Part.Name))
+ missingFields.Add(DatItemField.Part_Name);
+ if (string.IsNullOrWhiteSpace(dipSwitch.Part.Interface))
+ missingFields.Add(DatItemField.Part_Interface);
+ }
+ if (string.IsNullOrWhiteSpace(dipSwitch.Name))
+ missingFields.Add(DatItemField.Name);
+ if (string.IsNullOrWhiteSpace(dipSwitch.Tag))
+ missingFields.Add(DatItemField.Tag);
+ if (string.IsNullOrWhiteSpace(dipSwitch.Mask))
+ missingFields.Add(DatItemField.Mask);
+ if (dipSwitch.ValuesSpecified)
+ {
+ if (dipSwitch.Values.Any(dv => string.IsNullOrWhiteSpace(dv.Name)))
+ missingFields.Add(DatItemField.Part_Feature_Name);
+ if (dipSwitch.Values.Any(dv => string.IsNullOrWhiteSpace(dv.Value)))
+ missingFields.Add(DatItemField.Part_Feature_Value);
+ }
+
+ break;
+ case ItemType.Disk:
+ Disk disk = datItem as Disk;
+ if (!disk.PartSpecified)
+ {
+ missingFields.Add(DatItemField.Part_Name);
+ missingFields.Add(DatItemField.Part_Interface);
+ }
+ else
+ {
+ if (string.IsNullOrWhiteSpace(disk.Part.Name))
+ missingFields.Add(DatItemField.Part_Name);
+ if (string.IsNullOrWhiteSpace(disk.Part.Interface))
+ missingFields.Add(DatItemField.Part_Interface);
+ }
+ if (!disk.DiskAreaSpecified)
+ {
+ missingFields.Add(DatItemField.AreaName);
+ }
+ else
+ {
+ if (string.IsNullOrWhiteSpace(disk.DiskArea.Name))
+ missingFields.Add(DatItemField.AreaName);
+ }
+ if (string.IsNullOrWhiteSpace(disk.Name))
+ missingFields.Add(DatItemField.Name);
+ break;
+ case ItemType.Info:
+ Info info = datItem as Info;
+ if (string.IsNullOrWhiteSpace(info.Name))
+ missingFields.Add(DatItemField.Name);
+ break;
+ case ItemType.Rom:
+ Rom rom = datItem as Rom;
+ if (!rom.PartSpecified)
+ {
+ missingFields.Add(DatItemField.Part_Name);
+ missingFields.Add(DatItemField.Part_Interface);
+ }
+ else
+ {
+ if (string.IsNullOrWhiteSpace(rom.Part.Name))
+ missingFields.Add(DatItemField.Part_Name);
+ if (string.IsNullOrWhiteSpace(rom.Part.Interface))
+ missingFields.Add(DatItemField.Part_Interface);
+ }
+ if (!rom.DataAreaSpecified)
+ {
+ missingFields.Add(DatItemField.AreaName);
+ missingFields.Add(DatItemField.AreaSize);
+ }
+ else
+ {
+ if (string.IsNullOrWhiteSpace(rom.DataArea.Name))
+ missingFields.Add(DatItemField.AreaName);
+ if (!rom.DataArea.SizeSpecified)
+ missingFields.Add(DatItemField.AreaSize);
+ }
+ break;
+ case ItemType.SharedFeature:
+ SharedFeature sharedFeature = datItem as SharedFeature;
+ if (string.IsNullOrWhiteSpace(sharedFeature.Name))
+ missingFields.Add(DatItemField.Name);
+ break;
+ default:
+ // Unsupported ItemTypes should be caught already
+ return null;
+ }
+
+ return missingFields;
}
///