diff --git a/SabreTools.DatItems/DatItemTool.cs b/SabreTools.DatItems/DatItemTool.cs index 847f724f..b1225371 100644 --- a/SabreTools.DatItems/DatItemTool.cs +++ b/SabreTools.DatItems/DatItemTool.cs @@ -1062,12 +1062,10 @@ namespace SabreTools.DatItems /// DatItem to set fields on /// DatItem mappings dictionary /// Machine mappings dictionary - /// True if this is a subitem, false otherwise public static void SetFields( DatItem datItem, Dictionary datItemMappings, - Dictionary machineMappings, - bool sub = false) + Dictionary machineMappings) { if (datItem == null) return; @@ -1085,777 +1083,41 @@ namespace SabreTools.DatItems #endregion - #region Adjuster - - if (datItem is Adjuster adjuster) - { - if (datItemMappings.Keys.Contains(DatItemField.Default)) - adjuster.Default = datItemMappings[DatItemField.Default].AsYesNo(); - - // Field.DatItem_Conditions does not apply here - if (adjuster.ConditionsSpecified) - { - foreach (Condition subCondition in adjuster.Conditions) - { - SetFields(subCondition, datItemMappings, machineMappings, true); - } - } - } - - #endregion - - #region Analog - - else if (datItem is Analog analog) - { - if (datItemMappings.Keys.Contains(DatItemField.Analog_Mask)) - analog.Mask = datItemMappings[DatItemField.Analog_Mask]; - } - - #endregion - - #region BiosSet - - else if (datItem is BiosSet biosSet) - { - if (datItemMappings.Keys.Contains(DatItemField.Description)) - biosSet.Description = datItemMappings[DatItemField.Description]; - - if (datItemMappings.Keys.Contains(DatItemField.Default)) - biosSet.Default = datItemMappings[DatItemField.Default].AsYesNo(); - } - - #endregion - - #region Chip - - else if (datItem is Chip chip) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - chip.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.ChipType)) - chip.ChipType = datItemMappings[DatItemField.ChipType].AsChipType(); - - if (datItemMappings.Keys.Contains(DatItemField.Clock)) - chip.Clock = Utilities.CleanLong(datItemMappings[DatItemField.Clock]); - } - - #endregion - - #region Condition - - else if (datItem is Condition condition) - { - if (sub) - { - if (datItemMappings.Keys.Contains(DatItemField.Condition_Tag)) - condition.Tag = datItemMappings[DatItemField.Condition_Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Condition_Mask)) - condition.Mask = datItemMappings[DatItemField.Condition_Mask]; - - if (datItemMappings.Keys.Contains(DatItemField.Condition_Relation)) - condition.Relation = datItemMappings[DatItemField.Condition_Relation].AsRelation(); - - if (datItemMappings.Keys.Contains(DatItemField.Condition_Value)) - condition.Value = datItemMappings[DatItemField.Condition_Value]; - } - else - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - condition.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Mask)) - condition.Mask = datItemMappings[DatItemField.Mask]; - - if (datItemMappings.Keys.Contains(DatItemField.Relation)) - condition.Relation = datItemMappings[DatItemField.Relation].AsRelation(); - - if (datItemMappings.Keys.Contains(DatItemField.Value)) - condition.Value = datItemMappings[DatItemField.Value]; - } - } - - #endregion - - #region Configuration - - else if (datItem is Configuration configuration) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - configuration.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Mask)) - configuration.Mask = datItemMappings[DatItemField.Mask]; - - if (configuration.ConditionsSpecified) - { - foreach (Condition subCondition in configuration.Conditions) - { - SetFields(subCondition, datItemMappings, machineMappings, true); - } - } - - if (configuration.LocationsSpecified) - { - foreach (Location subLocation in configuration.Locations) - { - SetFields(subLocation, datItemMappings, machineMappings); - } - } - - if (configuration.SettingsSpecified) - { - foreach (Setting subSetting in configuration.Settings) - { - SetFields(subSetting, datItemMappings, machineMappings); - } - } - } - - #endregion - - #region Control - - else if (datItem is Control control) - { - if (datItemMappings.Keys.Contains(DatItemField.Control_Type)) - control.ControlType = datItemMappings[DatItemField.Control_Type].AsControlType(); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Player)) - control.Player = Utilities.CleanLong(datItemMappings[DatItemField.Control_Player]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Buttons)) - control.Buttons = Utilities.CleanLong(datItemMappings[DatItemField.Control_Buttons]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_RequiredButtons)) - control.RequiredButtons = Utilities.CleanLong(datItemMappings[DatItemField.Control_RequiredButtons]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Minimum)) - control.Minimum = Utilities.CleanLong(datItemMappings[DatItemField.Control_Minimum]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Maximum)) - control.Maximum = Utilities.CleanLong(datItemMappings[DatItemField.Control_Maximum]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Sensitivity)) - control.Sensitivity = Utilities.CleanLong(datItemMappings[DatItemField.Control_Sensitivity]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_KeyDelta)) - control.KeyDelta = Utilities.CleanLong(datItemMappings[DatItemField.Control_KeyDelta]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Reverse)) - control.Reverse = datItemMappings[DatItemField.Control_Reverse].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Ways)) - control.Ways = datItemMappings[DatItemField.Control_Ways]; - - if (datItemMappings.Keys.Contains(DatItemField.Control_Ways2)) - control.Ways2 = datItemMappings[DatItemField.Control_Ways2]; - - if (datItemMappings.Keys.Contains(DatItemField.Control_Ways3)) - control.Ways3 = datItemMappings[DatItemField.Control_Ways3]; - } - - #endregion - - #region DataArea - - else if (datItem is DataArea dataArea) - { - if (datItemMappings.Keys.Contains(DatItemField.AreaSize)) - dataArea.Size = Utilities.CleanLong(datItemMappings[DatItemField.AreaSize]); - - if (datItemMappings.Keys.Contains(DatItemField.AreaWidth)) - dataArea.Width = Utilities.CleanLong(datItemMappings[DatItemField.AreaWidth]); - - if (datItemMappings.Keys.Contains(DatItemField.AreaEndianness)) - dataArea.Endianness = datItemMappings[DatItemField.AreaEndianness].AsEndianness(); - } - - #endregion - - #region Device - - else if (datItem is Device device) - { - if (datItemMappings.Keys.Contains(DatItemField.DeviceType)) - device.DeviceType = datItemMappings[DatItemField.DeviceType].AsDeviceType(); - - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - device.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.FixedImage)) - device.FixedImage = datItemMappings[DatItemField.FixedImage]; - - if (datItemMappings.Keys.Contains(DatItemField.Mandatory)) - device.Mandatory = Utilities.CleanLong(datItemMappings[DatItemField.Mandatory]); - - if (datItemMappings.Keys.Contains(DatItemField.Interface)) - device.Interface = datItemMappings[DatItemField.Interface]; - - if (device.InstancesSpecified) - { - foreach (Instance subInstance in device.Instances) - { - SetFields(subInstance, datItemMappings, machineMappings); - } - } - - if (device.ExtensionsSpecified) - { - foreach (Extension subExtension in device.Extensions) - { - SetFields(subExtension, datItemMappings, machineMappings); - } - } - } - - #endregion - - #region DipSwitch - - else if (datItem is DipSwitch dipSwitch) - { - #region Common - - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - dipSwitch.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Mask)) - dipSwitch.Mask = datItemMappings[DatItemField.Mask]; - - if (dipSwitch.ConditionsSpecified) - { - foreach (Condition subCondition in dipSwitch.Conditions) - { - SetFields(subCondition, datItemMappings, machineMappings, true); - } - } - - if (dipSwitch.LocationsSpecified) - { - foreach (Location subLocation in dipSwitch.Locations) - { - SetFields(subLocation, datItemMappings, machineMappings); - } - } - - if (dipSwitch.ValuesSpecified) - { - foreach (Setting subValue in dipSwitch.Values) - { - SetFields(subValue, datItemMappings, machineMappings); - } - } - - #endregion - - #region SoftwareList - - // Handle Part-specific fields - if (dipSwitch.Part == null) - dipSwitch.Part = new Part(); - - SetFields(dipSwitch.Part, datItemMappings, machineMappings); - - #endregion - } - - #endregion - - #region Disk - - else if (datItem is Disk disk) - { - #region Common - - if (datItemMappings.Keys.Contains(DatItemField.MD5)) - disk.MD5 = datItemMappings[DatItemField.MD5]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA1)) - disk.SHA1 = datItemMappings[DatItemField.SHA1]; - - if (datItemMappings.Keys.Contains(DatItemField.Merge)) - disk.MergeTag = datItemMappings[DatItemField.Merge]; - - if (datItemMappings.Keys.Contains(DatItemField.Region)) - disk.Region = datItemMappings[DatItemField.Region]; - - if (datItemMappings.Keys.Contains(DatItemField.Index)) - disk.Index = datItemMappings[DatItemField.Index]; - - if (datItemMappings.Keys.Contains(DatItemField.Writable)) - disk.Writable = datItemMappings[DatItemField.Writable].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Status)) - disk.ItemStatus = datItemMappings[DatItemField.Status].AsItemStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.Optional)) - disk.Optional = datItemMappings[DatItemField.Optional].AsYesNo(); - - #endregion - - #region SoftwareList - - if (disk.DiskArea == null) - disk.DiskArea = new DiskArea(); - - SetFields(disk.DiskArea, datItemMappings, machineMappings); - - if (disk.Part == null) - disk.Part = new Part(); - - SetFields(disk.Part, datItemMappings, machineMappings); - - #endregion - } - - #endregion - - #region Display - - else if (datItem is Display display) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - display.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.DisplayType)) - display.DisplayType = datItemMappings[DatItemField.DisplayType].AsDisplayType(); - - if (datItemMappings.Keys.Contains(DatItemField.Rotate)) - display.Rotate = Utilities.CleanLong(datItemMappings[DatItemField.Rotate]); - - if (datItemMappings.Keys.Contains(DatItemField.FlipX)) - display.FlipX = datItemMappings[DatItemField.FlipX].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Width)) - display.Width = Utilities.CleanLong(datItemMappings[DatItemField.Width]); - - if (datItemMappings.Keys.Contains(DatItemField.Height)) - display.Height = Utilities.CleanLong(datItemMappings[DatItemField.Height]); - - if (datItemMappings.Keys.Contains(DatItemField.Refresh)) - { - if (Double.TryParse(datItemMappings[DatItemField.Refresh], out double refresh)) - display.Refresh = refresh; - } - - if (datItemMappings.Keys.Contains(DatItemField.PixClock)) - display.PixClock = Utilities.CleanLong(datItemMappings[DatItemField.PixClock]); - - if (datItemMappings.Keys.Contains(DatItemField.HTotal)) - display.HTotal = Utilities.CleanLong(datItemMappings[DatItemField.HTotal]); - - if (datItemMappings.Keys.Contains(DatItemField.HBEnd)) - display.HBEnd = Utilities.CleanLong(datItemMappings[DatItemField.HBEnd]); - - if (datItemMappings.Keys.Contains(DatItemField.HBStart)) - display.HBStart = Utilities.CleanLong(datItemMappings[DatItemField.HBStart]); - - if (datItemMappings.Keys.Contains(DatItemField.VTotal)) - display.VTotal = Utilities.CleanLong(datItemMappings[DatItemField.VTotal]); - - if (datItemMappings.Keys.Contains(DatItemField.VBEnd)) - display.VBEnd = Utilities.CleanLong(datItemMappings[DatItemField.VBEnd]); - - if (datItemMappings.Keys.Contains(DatItemField.VBStart)) - display.VBStart = Utilities.CleanLong(datItemMappings[DatItemField.VBStart]); - } - - #endregion - - #region Driver - - else if (datItem is Driver driver) - { - if (datItemMappings.Keys.Contains(DatItemField.SupportStatus)) - driver.Status = datItemMappings[DatItemField.SupportStatus].AsSupportStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.EmulationStatus)) - driver.Emulation = datItemMappings[DatItemField.EmulationStatus].AsSupportStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.CocktailStatus)) - driver.Cocktail = datItemMappings[DatItemField.CocktailStatus].AsSupportStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.SaveStateStatus)) - driver.SaveState = datItemMappings[DatItemField.SaveStateStatus].AsSupported(); - } - - #endregion - - #region Feature - - else if (datItem is Feature feature) - { - if (datItemMappings.Keys.Contains(DatItemField.FeatureType)) - feature.Type = datItemMappings[DatItemField.FeatureType].AsFeatureType(); - - if (datItemMappings.Keys.Contains(DatItemField.FeatureStatus)) - feature.Status = datItemMappings[DatItemField.FeatureStatus].AsFeatureStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.FeatureOverall)) - feature.Overall = datItemMappings[DatItemField.FeatureOverall].AsFeatureStatus(); - } - - #endregion - - #region Info - - else if (datItem is Info info) - { - if (datItemMappings.Keys.Contains(DatItemField.Value)) - info.Value = datItemMappings[DatItemField.Value]; - } - - #endregion - - #region Input - - else if (datItem is Input input) - { - if (datItemMappings.Keys.Contains(DatItemField.Service)) - input.Service = datItemMappings[DatItemField.Service].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Tilt)) - input.Tilt = datItemMappings[DatItemField.Tilt].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Players)) - input.Players = Utilities.CleanLong(datItemMappings[DatItemField.Players]); - - if (datItemMappings.Keys.Contains(DatItemField.Coins)) - input.Coins = Utilities.CleanLong(datItemMappings[DatItemField.Coins]); - - if (input.ControlsSpecified) - { - foreach (Control subControl in input.Controls) - { - SetFields(subControl, datItemMappings, machineMappings); - } - } - } - - #endregion - - #region Instance - - else if (datItem is Instance instance) - { - if (datItemMappings.Keys.Contains(DatItemField.Instance_BriefName)) - instance.BriefName = datItemMappings[DatItemField.Instance_BriefName]; - } - - #endregion - - #region Location - - else if (datItem is Location location) - { - if (datItemMappings.Keys.Contains(DatItemField.Location_Number)) - location.Number = Utilities.CleanLong(datItemMappings[DatItemField.Location_Number]); - - if (datItemMappings.Keys.Contains(DatItemField.Location_Inverted)) - location.Inverted = datItemMappings[DatItemField.Location_Inverted].AsYesNo(); - } - - #endregion - - #region Media - - else if (datItem is Media media) - { - if (datItemMappings.Keys.Contains(DatItemField.MD5)) - media.MD5 = datItemMappings[DatItemField.MD5]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA1)) - media.SHA1 = datItemMappings[DatItemField.SHA1]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA256)) - media.SHA256 = datItemMappings[DatItemField.SHA256]; - - if (datItemMappings.Keys.Contains(DatItemField.SpamSum)) - media.SpamSum = datItemMappings[DatItemField.SpamSum]; - } - - #endregion - - #region Part - - else if (datItem is Part part) - { - if (datItemMappings.Keys.Contains(DatItemField.Part_Name)) - part.Name = datItemMappings[DatItemField.Part_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Part_Interface)) - part.Interface = datItemMappings[DatItemField.Part_Interface]; - - if (part.FeaturesSpecified) - { - foreach (PartFeature subPartFeature in part.Features) - { - SetFields(subPartFeature, datItemMappings, machineMappings); - } - } - } - - #endregion - - #region PartFeature - - else if (datItem is PartFeature partFeature) - { - if (datItemMappings.Keys.Contains(DatItemField.Part_Feature_Name)) - partFeature.Name = datItemMappings[DatItemField.Part_Feature_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Part_Feature_Value)) - partFeature.Value = datItemMappings[DatItemField.Part_Feature_Value]; - } - - #endregion - - #region Port - - else if (datItem is Port port) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - port.Tag = datItemMappings[DatItemField.Tag]; - - if (port.AnalogsSpecified) - { - foreach (Analog subAnalog in port.Analogs) - { - SetFields(subAnalog, datItemMappings, machineMappings); - } - } - } - - #endregion - - #region RamOption - - else if (datItem is RamOption ramOption) - { - if (datItemMappings.Keys.Contains(DatItemField.Default)) - ramOption.Default = datItemMappings[DatItemField.Default].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Content)) - ramOption.Content = datItemMappings[DatItemField.Content]; - } - - #endregion - - #region Release - - else if (datItem is Release release) - { - if (datItemMappings.Keys.Contains(DatItemField.Region)) - release.Region = datItemMappings[DatItemField.Region]; - - if (datItemMappings.Keys.Contains(DatItemField.Language)) - release.Language = datItemMappings[DatItemField.Language]; - - if (datItemMappings.Keys.Contains(DatItemField.Date)) - release.Date = datItemMappings[DatItemField.Date]; - - if (datItemMappings.Keys.Contains(DatItemField.Default)) - release.Default = datItemMappings[DatItemField.Default].AsYesNo(); - } - - #endregion - - #region Rom - - else if (datItem is Rom rom) - { - #region Common - - if (datItemMappings.Keys.Contains(DatItemField.Bios)) - rom.Bios = datItemMappings[DatItemField.Bios]; - - if (datItemMappings.Keys.Contains(DatItemField.Size)) - rom.Size = Utilities.CleanLong(datItemMappings[DatItemField.Size]); - - if (datItemMappings.Keys.Contains(DatItemField.CRC)) - rom.CRC = datItemMappings[DatItemField.CRC]; - - if (datItemMappings.Keys.Contains(DatItemField.MD5)) - rom.MD5 = datItemMappings[DatItemField.MD5]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA1)) - rom.SHA1 = datItemMappings[DatItemField.SHA1]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA256)) - rom.SHA256 = datItemMappings[DatItemField.SHA256]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA384)) - rom.SHA384 = datItemMappings[DatItemField.SHA384]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA512)) - rom.SHA512 = datItemMappings[DatItemField.SHA512]; - - if (datItemMappings.Keys.Contains(DatItemField.SpamSum)) - rom.SpamSum = datItemMappings[DatItemField.SpamSum]; - - if (datItemMappings.Keys.Contains(DatItemField.Merge)) - rom.MergeTag = datItemMappings[DatItemField.Merge]; - - if (datItemMappings.Keys.Contains(DatItemField.Region)) - rom.Region = datItemMappings[DatItemField.Region]; - - if (datItemMappings.Keys.Contains(DatItemField.Offset)) - rom.Offset = datItemMappings[DatItemField.Offset]; - - if (datItemMappings.Keys.Contains(DatItemField.Date)) - rom.Date = datItemMappings[DatItemField.Date]; - - if (datItemMappings.Keys.Contains(DatItemField.Status)) - rom.ItemStatus = datItemMappings[DatItemField.Status].AsItemStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.Optional)) - rom.Optional = datItemMappings[DatItemField.Optional].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Inverted)) - rom.Inverted = datItemMappings[DatItemField.Optional].AsYesNo(); - - #endregion - - #region AttractMode - - if (datItemMappings.Keys.Contains(DatItemField.AltName)) - rom.AltName = datItemMappings[DatItemField.AltName]; - - if (datItemMappings.Keys.Contains(DatItemField.AltTitle)) - rom.AltTitle = datItemMappings[DatItemField.AltTitle]; - - #endregion - - #region OpenMSX - - if (datItemMappings.Keys.Contains(DatItemField.Original)) - rom.Original = new Original() { Content = datItemMappings[DatItemField.Original] }; - - if (datItemMappings.Keys.Contains(DatItemField.OpenMSXSubType)) - rom.OpenMSXSubType = datItemMappings[DatItemField.OpenMSXSubType].AsOpenMSXSubType(); - - if (datItemMappings.Keys.Contains(DatItemField.OpenMSXType)) - rom.OpenMSXType = datItemMappings[DatItemField.OpenMSXType]; - - if (datItemMappings.Keys.Contains(DatItemField.Remark)) - rom.Remark = datItemMappings[DatItemField.Remark]; - - if (datItemMappings.Keys.Contains(DatItemField.Boot)) - rom.Boot = datItemMappings[DatItemField.Boot]; - - #endregion - - #region SoftwareList - - if (datItemMappings.Keys.Contains(DatItemField.LoadFlag)) - rom.LoadFlag = datItemMappings[DatItemField.LoadFlag].AsLoadFlag(); - - if (datItemMappings.Keys.Contains(DatItemField.Value)) - rom.Value = datItemMappings[DatItemField.Value]; - - if (rom.DataArea == null) - rom.DataArea = new DataArea(); - - SetFields(rom.DataArea, datItemMappings, machineMappings); - - if (rom.Part == null) - rom.Part = new Part(); - - SetFields(rom.Part, datItemMappings, machineMappings); - - #endregion - } - - #endregion - - #region Setting - - else if (datItem is Setting setting) - { - if (datItemMappings.Keys.Contains(DatItemField.Setting_Name)) - setting.Name = datItemMappings[DatItemField.Setting_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Setting_Value)) - setting.Value = datItemMappings[DatItemField.Setting_Value]; - - if (datItemMappings.Keys.Contains(DatItemField.Setting_Default)) - setting.Default = datItemMappings[DatItemField.Setting_Default].AsYesNo(); - - if (setting.ConditionsSpecified) - { - foreach (Condition subCondition in setting.Conditions) - { - SetFields(subCondition, datItemMappings, machineMappings, true); - } - } - } - - #endregion - - #region SharedFeature - - else if (datItem is SharedFeature sharedFeature) - { - if (datItemMappings.Keys.Contains(DatItemField.Value)) - sharedFeature.Value = datItemMappings[DatItemField.Value]; - } - - #endregion - - #region Slot - - else if (datItem is Slot slot) - { - if (slot.SlotOptionsSpecified) - { - foreach (SlotOption subSlotOption in slot.SlotOptions) - { - SetFields(subSlotOption, datItemMappings, machineMappings); - } - } - } - - #endregion - - #region SlotOption - - else if (datItem is SlotOption slotOption) - { - if (datItemMappings.Keys.Contains(DatItemField.SlotOption_Name)) - slotOption.Name = datItemMappings[DatItemField.SlotOption_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.SlotOption_DeviceName)) - slotOption.DeviceName = datItemMappings[DatItemField.SlotOption_DeviceName]; - - if (datItemMappings.Keys.Contains(DatItemField.SlotOption_Default)) - slotOption.Default = datItemMappings[DatItemField.SlotOption_Default].AsYesNo(); - } - - #endregion - - #region SoftwareList - - else if (datItem is SoftwareList softwareList) - { - if (datItemMappings.Keys.Contains(DatItemField.SoftwareListStatus)) - softwareList.Status = datItemMappings[DatItemField.SoftwareListStatus].AsSoftwareListStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.Filter)) - softwareList.Filter = datItemMappings[DatItemField.Filter]; - } - - #endregion - - #region Sound - - else if (datItem is Sound sound) - { - if (datItemMappings.Keys.Contains(DatItemField.Channels)) - sound.Channels = Utilities.CleanLong(datItemMappings[DatItemField.Channels]); - } + #region Item-Specific + + if (datItem is Adjuster) SetFields(datItem as Adjuster, datItemMappings); + else if (datItem is Analog) SetFields(datItem as Analog, datItemMappings); + else if (datItem is BiosSet) SetFields(datItem as BiosSet, datItemMappings); + else if (datItem is Chip) SetFields(datItem as Chip, datItemMappings); + else if (datItem is Condition) SetFields(datItem as Condition, datItemMappings); + else if (datItem is Configuration) SetFields(datItem as Configuration, datItemMappings); + else if (datItem is Control) SetFields(datItem as Control, datItemMappings); + else if (datItem is DataArea) SetFields(datItem as DataArea, datItemMappings); + else if (datItem is Device) SetFields(datItem as Device, datItemMappings); + else if (datItem is DipSwitch) SetFields(datItem as DipSwitch, datItemMappings); + else if (datItem is Disk) SetFields(datItem as Disk, datItemMappings); + else if (datItem is DiskArea) SetFields(datItem as DiskArea, datItemMappings); + else if (datItem is Display) SetFields(datItem as Display, datItemMappings); + else if (datItem is Driver) SetFields(datItem as Driver, datItemMappings); + else if (datItem is Extension) SetFields(datItem as Extension, datItemMappings); + else if (datItem is Feature) SetFields(datItem as Feature, datItemMappings); + else if (datItem is Info) SetFields(datItem as Info, datItemMappings); + else if (datItem is Input) SetFields(datItem as Input, datItemMappings); + else if (datItem is Instance) SetFields(datItem as Instance, datItemMappings); + else if (datItem is Location) SetFields(datItem as Location, datItemMappings); + else if (datItem is Media) SetFields(datItem as Media, datItemMappings); + else if (datItem is Part) SetFields(datItem as Part, datItemMappings); + else if (datItem is PartFeature) SetFields(datItem as PartFeature, datItemMappings); + else if (datItem is Port) SetFields(datItem as Port, datItemMappings); + else if (datItem is RamOption) SetFields(datItem as RamOption, datItemMappings); + else if (datItem is Release) SetFields(datItem as Release, datItemMappings); + else if (datItem is Rom) SetFields(datItem as Rom, datItemMappings); + else if (datItem is Setting) SetFields(datItem as Setting, datItemMappings); + else if (datItem is SharedFeature) SetFields(datItem as SharedFeature, datItemMappings); + else if (datItem is Slot) SetFields(datItem as Slot, datItemMappings); + else if (datItem is SlotOption) SetFields(datItem as SlotOption, datItemMappings); + else if (datItem is SoftwareList) SetFields(datItem as SoftwareList, datItemMappings); + else if (datItem is Sound) SetFields(datItem as Sound, datItemMappings); #endregion } @@ -2007,6 +1269,840 @@ namespace SabreTools.DatItems #endregion } + /// + /// Set fields with given values + /// + /// Adjuster to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Adjuster adjuster, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Default)) + adjuster.Default = datItemMappings[DatItemField.Default].AsYesNo(); + + // Field.DatItem_Conditions does not apply here + if (adjuster.ConditionsSpecified) + { + foreach (Condition subCondition in adjuster.Conditions) + { + SetFields(subCondition, datItemMappings, true); + } + } + } + + /// + /// Set fields with given values + /// + /// Analog to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Analog analog, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Analog_Mask)) + analog.Mask = datItemMappings[DatItemField.Analog_Mask]; + } + + /// + /// Set fields with given values + /// + /// BiosSet to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(BiosSet biosSet, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Description)) + biosSet.Description = datItemMappings[DatItemField.Description]; + + if (datItemMappings.Keys.Contains(DatItemField.Default)) + biosSet.Default = datItemMappings[DatItemField.Default].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// Chip to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Chip chip, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Tag)) + chip.Tag = datItemMappings[DatItemField.Tag]; + + if (datItemMappings.Keys.Contains(DatItemField.ChipType)) + chip.ChipType = datItemMappings[DatItemField.ChipType].AsChipType(); + + if (datItemMappings.Keys.Contains(DatItemField.Clock)) + chip.Clock = Utilities.CleanLong(datItemMappings[DatItemField.Clock]); + } + + /// + /// Set fields with given values + /// + /// Condition to remove replace fields in + /// DatItem mappings dictionary + /// True if this is a subitem, false otherwise + private static void SetFields(Condition condition, Dictionary datItemMappings, bool sub = false) + { + if (sub) + { + if (datItemMappings.Keys.Contains(DatItemField.Condition_Tag)) + condition.Tag = datItemMappings[DatItemField.Condition_Tag]; + + if (datItemMappings.Keys.Contains(DatItemField.Condition_Mask)) + condition.Mask = datItemMappings[DatItemField.Condition_Mask]; + + if (datItemMappings.Keys.Contains(DatItemField.Condition_Relation)) + condition.Relation = datItemMappings[DatItemField.Condition_Relation].AsRelation(); + + if (datItemMappings.Keys.Contains(DatItemField.Condition_Value)) + condition.Value = datItemMappings[DatItemField.Condition_Value]; + } + else + { + if (datItemMappings.Keys.Contains(DatItemField.Tag)) + condition.Tag = datItemMappings[DatItemField.Tag]; + + if (datItemMappings.Keys.Contains(DatItemField.Mask)) + condition.Mask = datItemMappings[DatItemField.Mask]; + + if (datItemMappings.Keys.Contains(DatItemField.Relation)) + condition.Relation = datItemMappings[DatItemField.Relation].AsRelation(); + + if (datItemMappings.Keys.Contains(DatItemField.Value)) + condition.Value = datItemMappings[DatItemField.Value]; + } + } + + /// + /// Set fields with given values + /// + /// Configuration to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Configuration configuration, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Tag)) + configuration.Tag = datItemMappings[DatItemField.Tag]; + + if (datItemMappings.Keys.Contains(DatItemField.Mask)) + configuration.Mask = datItemMappings[DatItemField.Mask]; + + if (configuration.ConditionsSpecified) + { + foreach (Condition subCondition in configuration.Conditions) + { + SetFields(subCondition, datItemMappings, true); + } + } + + if (configuration.LocationsSpecified) + { + foreach (Location subLocation in configuration.Locations) + { + SetFields(subLocation, datItemMappings); + } + } + + if (configuration.SettingsSpecified) + { + foreach (Setting subSetting in configuration.Settings) + { + SetFields(subSetting, datItemMappings); + } + } + } + + /// + /// Set fields with given values + /// + /// Control to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Control control, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Control_Type)) + control.ControlType = datItemMappings[DatItemField.Control_Type].AsControlType(); + + if (datItemMappings.Keys.Contains(DatItemField.Control_Player)) + control.Player = Utilities.CleanLong(datItemMappings[DatItemField.Control_Player]); + + if (datItemMappings.Keys.Contains(DatItemField.Control_Buttons)) + control.Buttons = Utilities.CleanLong(datItemMappings[DatItemField.Control_Buttons]); + + if (datItemMappings.Keys.Contains(DatItemField.Control_RequiredButtons)) + control.RequiredButtons = Utilities.CleanLong(datItemMappings[DatItemField.Control_RequiredButtons]); + + if (datItemMappings.Keys.Contains(DatItemField.Control_Minimum)) + control.Minimum = Utilities.CleanLong(datItemMappings[DatItemField.Control_Minimum]); + + if (datItemMappings.Keys.Contains(DatItemField.Control_Maximum)) + control.Maximum = Utilities.CleanLong(datItemMappings[DatItemField.Control_Maximum]); + + if (datItemMappings.Keys.Contains(DatItemField.Control_Sensitivity)) + control.Sensitivity = Utilities.CleanLong(datItemMappings[DatItemField.Control_Sensitivity]); + + if (datItemMappings.Keys.Contains(DatItemField.Control_KeyDelta)) + control.KeyDelta = Utilities.CleanLong(datItemMappings[DatItemField.Control_KeyDelta]); + + if (datItemMappings.Keys.Contains(DatItemField.Control_Reverse)) + control.Reverse = datItemMappings[DatItemField.Control_Reverse].AsYesNo(); + + if (datItemMappings.Keys.Contains(DatItemField.Control_Ways)) + control.Ways = datItemMappings[DatItemField.Control_Ways]; + + if (datItemMappings.Keys.Contains(DatItemField.Control_Ways2)) + control.Ways2 = datItemMappings[DatItemField.Control_Ways2]; + + if (datItemMappings.Keys.Contains(DatItemField.Control_Ways3)) + control.Ways3 = datItemMappings[DatItemField.Control_Ways3]; + } + + /// + /// Set fields with given values + /// + /// DataArea to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(DataArea dataArea, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.AreaSize)) + dataArea.Size = Utilities.CleanLong(datItemMappings[DatItemField.AreaSize]); + + if (datItemMappings.Keys.Contains(DatItemField.AreaWidth)) + dataArea.Width = Utilities.CleanLong(datItemMappings[DatItemField.AreaWidth]); + + if (datItemMappings.Keys.Contains(DatItemField.AreaEndianness)) + dataArea.Endianness = datItemMappings[DatItemField.AreaEndianness].AsEndianness(); + } + + /// + /// Set fields with given values + /// + /// Device to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Device device, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.DeviceType)) + device.DeviceType = datItemMappings[DatItemField.DeviceType].AsDeviceType(); + + if (datItemMappings.Keys.Contains(DatItemField.Tag)) + device.Tag = datItemMappings[DatItemField.Tag]; + + if (datItemMappings.Keys.Contains(DatItemField.FixedImage)) + device.FixedImage = datItemMappings[DatItemField.FixedImage]; + + if (datItemMappings.Keys.Contains(DatItemField.Mandatory)) + device.Mandatory = Utilities.CleanLong(datItemMappings[DatItemField.Mandatory]); + + if (datItemMappings.Keys.Contains(DatItemField.Interface)) + device.Interface = datItemMappings[DatItemField.Interface]; + + if (device.InstancesSpecified) + { + foreach (Instance subInstance in device.Instances) + { + SetFields(subInstance, datItemMappings); + } + } + + if (device.ExtensionsSpecified) + { + foreach (Extension subExtension in device.Extensions) + { + SetFields(subExtension, datItemMappings); + } + } + } + + /// + /// Set fields with given values + /// + /// DipSwitch to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(DipSwitch dipSwitch, Dictionary datItemMappings) + { + #region Common + + if (datItemMappings.Keys.Contains(DatItemField.Tag)) + dipSwitch.Tag = datItemMappings[DatItemField.Tag]; + + if (datItemMappings.Keys.Contains(DatItemField.Mask)) + dipSwitch.Mask = datItemMappings[DatItemField.Mask]; + + if (dipSwitch.ConditionsSpecified) + { + foreach (Condition subCondition in dipSwitch.Conditions) + { + SetFields(subCondition, datItemMappings, true); + } + } + + if (dipSwitch.LocationsSpecified) + { + foreach (Location subLocation in dipSwitch.Locations) + { + SetFields(subLocation, datItemMappings); + } + } + + if (dipSwitch.ValuesSpecified) + { + foreach (Setting subValue in dipSwitch.Values) + { + SetFields(subValue, datItemMappings); + } + } + + #endregion + + #region SoftwareList + + // Handle Part-specific fields + if (dipSwitch.Part == null) + dipSwitch.Part = new Part(); + + SetFields(dipSwitch.Part, datItemMappings); + + #endregion + } + + /// + /// Set fields with given values + /// + /// Disk to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Disk disk, Dictionary datItemMappings) + { + #region Common + + if (datItemMappings.Keys.Contains(DatItemField.MD5)) + disk.MD5 = datItemMappings[DatItemField.MD5]; + + if (datItemMappings.Keys.Contains(DatItemField.SHA1)) + disk.SHA1 = datItemMappings[DatItemField.SHA1]; + + if (datItemMappings.Keys.Contains(DatItemField.Merge)) + disk.MergeTag = datItemMappings[DatItemField.Merge]; + + if (datItemMappings.Keys.Contains(DatItemField.Region)) + disk.Region = datItemMappings[DatItemField.Region]; + + if (datItemMappings.Keys.Contains(DatItemField.Index)) + disk.Index = datItemMappings[DatItemField.Index]; + + if (datItemMappings.Keys.Contains(DatItemField.Writable)) + disk.Writable = datItemMappings[DatItemField.Writable].AsYesNo(); + + if (datItemMappings.Keys.Contains(DatItemField.Status)) + disk.ItemStatus = datItemMappings[DatItemField.Status].AsItemStatus(); + + if (datItemMappings.Keys.Contains(DatItemField.Optional)) + disk.Optional = datItemMappings[DatItemField.Optional].AsYesNo(); + + #endregion + + #region SoftwareList + + if (disk.DiskArea == null) + disk.DiskArea = new DiskArea(); + + SetFields(disk.DiskArea, datItemMappings); + + if (disk.Part == null) + disk.Part = new Part(); + + SetFields(disk.Part, datItemMappings); + + #endregion + } + + /// + /// Set fields with given values + /// + /// DiskArea to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(DiskArea diskArea, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.AreaName)) + diskArea.Name = datItemMappings[DatItemField.AreaName]; + } + + /// + /// Set fields with given values + /// + /// Display to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Display display, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Tag)) + display.Tag = datItemMappings[DatItemField.Tag]; + + if (datItemMappings.Keys.Contains(DatItemField.DisplayType)) + display.DisplayType = datItemMappings[DatItemField.DisplayType].AsDisplayType(); + + if (datItemMappings.Keys.Contains(DatItemField.Rotate)) + display.Rotate = Utilities.CleanLong(datItemMappings[DatItemField.Rotate]); + + if (datItemMappings.Keys.Contains(DatItemField.FlipX)) + display.FlipX = datItemMappings[DatItemField.FlipX].AsYesNo(); + + if (datItemMappings.Keys.Contains(DatItemField.Width)) + display.Width = Utilities.CleanLong(datItemMappings[DatItemField.Width]); + + if (datItemMappings.Keys.Contains(DatItemField.Height)) + display.Height = Utilities.CleanLong(datItemMappings[DatItemField.Height]); + + if (datItemMappings.Keys.Contains(DatItemField.Refresh)) + { + if (Double.TryParse(datItemMappings[DatItemField.Refresh], out double refresh)) + display.Refresh = refresh; + } + + if (datItemMappings.Keys.Contains(DatItemField.PixClock)) + display.PixClock = Utilities.CleanLong(datItemMappings[DatItemField.PixClock]); + + if (datItemMappings.Keys.Contains(DatItemField.HTotal)) + display.HTotal = Utilities.CleanLong(datItemMappings[DatItemField.HTotal]); + + if (datItemMappings.Keys.Contains(DatItemField.HBEnd)) + display.HBEnd = Utilities.CleanLong(datItemMappings[DatItemField.HBEnd]); + + if (datItemMappings.Keys.Contains(DatItemField.HBStart)) + display.HBStart = Utilities.CleanLong(datItemMappings[DatItemField.HBStart]); + + if (datItemMappings.Keys.Contains(DatItemField.VTotal)) + display.VTotal = Utilities.CleanLong(datItemMappings[DatItemField.VTotal]); + + if (datItemMappings.Keys.Contains(DatItemField.VBEnd)) + display.VBEnd = Utilities.CleanLong(datItemMappings[DatItemField.VBEnd]); + + if (datItemMappings.Keys.Contains(DatItemField.VBStart)) + display.VBStart = Utilities.CleanLong(datItemMappings[DatItemField.VBStart]); + } + + /// + /// Set fields with given values + /// + /// Driver to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Driver driver, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.SupportStatus)) + driver.Status = datItemMappings[DatItemField.SupportStatus].AsSupportStatus(); + + if (datItemMappings.Keys.Contains(DatItemField.EmulationStatus)) + driver.Emulation = datItemMappings[DatItemField.EmulationStatus].AsSupportStatus(); + + if (datItemMappings.Keys.Contains(DatItemField.CocktailStatus)) + driver.Cocktail = datItemMappings[DatItemField.CocktailStatus].AsSupportStatus(); + + if (datItemMappings.Keys.Contains(DatItemField.SaveStateStatus)) + driver.SaveState = datItemMappings[DatItemField.SaveStateStatus].AsSupported(); + } + + /// + /// Set fields with given values + /// + /// Extension to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Extension extension, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Extension_Name)) + extension.Name = datItemMappings[DatItemField.Extension_Name]; + } + + /// + /// Set fields with given values + /// + /// Feature to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Feature feature, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.FeatureType)) + feature.Type = datItemMappings[DatItemField.FeatureType].AsFeatureType(); + + if (datItemMappings.Keys.Contains(DatItemField.FeatureStatus)) + feature.Status = datItemMappings[DatItemField.FeatureStatus].AsFeatureStatus(); + + if (datItemMappings.Keys.Contains(DatItemField.FeatureOverall)) + feature.Overall = datItemMappings[DatItemField.FeatureOverall].AsFeatureStatus(); + } + + /// + /// Set fields with given values + /// + /// Info to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Info info, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Value)) + info.Value = datItemMappings[DatItemField.Value]; + } + + /// + /// Set fields with given values + /// + /// Input to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Input input, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Service)) + input.Service = datItemMappings[DatItemField.Service].AsYesNo(); + + if (datItemMappings.Keys.Contains(DatItemField.Tilt)) + input.Tilt = datItemMappings[DatItemField.Tilt].AsYesNo(); + + if (datItemMappings.Keys.Contains(DatItemField.Players)) + input.Players = Utilities.CleanLong(datItemMappings[DatItemField.Players]); + + if (datItemMappings.Keys.Contains(DatItemField.Coins)) + input.Coins = Utilities.CleanLong(datItemMappings[DatItemField.Coins]); + + if (input.ControlsSpecified) + { + foreach (Control subControl in input.Controls) + { + SetFields(subControl, datItemMappings); + } + } + } + + /// + /// Set fields with given values + /// + /// Instance to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Instance instance, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Instance_Name)) + instance.BriefName = datItemMappings[DatItemField.Instance_Name]; + + if (datItemMappings.Keys.Contains(DatItemField.Instance_BriefName)) + instance.BriefName = datItemMappings[DatItemField.Instance_BriefName]; + } + + /// + /// Set fields with given values + /// + /// Location to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Location location, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Location_Name)) + location.Name = datItemMappings[DatItemField.Location_Name]; + + if (datItemMappings.Keys.Contains(DatItemField.Location_Number)) + location.Number = Utilities.CleanLong(datItemMappings[DatItemField.Location_Number]); + + if (datItemMappings.Keys.Contains(DatItemField.Location_Inverted)) + location.Inverted = datItemMappings[DatItemField.Location_Inverted].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// Media to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Media media, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.MD5)) + media.MD5 = datItemMappings[DatItemField.MD5]; + + if (datItemMappings.Keys.Contains(DatItemField.SHA1)) + media.SHA1 = datItemMappings[DatItemField.SHA1]; + + if (datItemMappings.Keys.Contains(DatItemField.SHA256)) + media.SHA256 = datItemMappings[DatItemField.SHA256]; + + if (datItemMappings.Keys.Contains(DatItemField.SpamSum)) + media.SpamSum = datItemMappings[DatItemField.SpamSum]; + } + + /// + /// Set fields with given values + /// + /// Part to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Part part, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Part_Name)) + part.Name = datItemMappings[DatItemField.Part_Name]; + + if (datItemMappings.Keys.Contains(DatItemField.Part_Interface)) + part.Interface = datItemMappings[DatItemField.Part_Interface]; + + if (part.FeaturesSpecified) + { + foreach (PartFeature subPartFeature in part.Features) + { + SetFields(subPartFeature, datItemMappings); + } + } + } + + /// + /// Set fields with given values + /// + /// PartFeature to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(PartFeature partFeature, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Part_Feature_Name)) + partFeature.Name = datItemMappings[DatItemField.Part_Feature_Name]; + + if (datItemMappings.Keys.Contains(DatItemField.Part_Feature_Value)) + partFeature.Value = datItemMappings[DatItemField.Part_Feature_Value]; + } + + /// + /// Set fields with given values + /// + /// Port to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Port port, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Tag)) + port.Tag = datItemMappings[DatItemField.Tag]; + + if (port.AnalogsSpecified) + { + foreach (Analog subAnalog in port.Analogs) + { + SetFields(subAnalog, datItemMappings); + } + } + } + + /// + /// Set fields with given values + /// + /// RamOption to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(RamOption ramOption, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Default)) + ramOption.Default = datItemMappings[DatItemField.Default].AsYesNo(); + + if (datItemMappings.Keys.Contains(DatItemField.Content)) + ramOption.Content = datItemMappings[DatItemField.Content]; + } + + /// + /// Set fields with given values + /// + /// Release to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Release release, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Region)) + release.Region = datItemMappings[DatItemField.Region]; + + if (datItemMappings.Keys.Contains(DatItemField.Language)) + release.Language = datItemMappings[DatItemField.Language]; + + if (datItemMappings.Keys.Contains(DatItemField.Date)) + release.Date = datItemMappings[DatItemField.Date]; + + if (datItemMappings.Keys.Contains(DatItemField.Default)) + release.Default = datItemMappings[DatItemField.Default].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// Rom to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Rom rom, Dictionary datItemMappings) + { + #region Common + + if (datItemMappings.Keys.Contains(DatItemField.Bios)) + rom.Bios = datItemMappings[DatItemField.Bios]; + + if (datItemMappings.Keys.Contains(DatItemField.Size)) + rom.Size = Utilities.CleanLong(datItemMappings[DatItemField.Size]); + + if (datItemMappings.Keys.Contains(DatItemField.CRC)) + rom.CRC = datItemMappings[DatItemField.CRC]; + + if (datItemMappings.Keys.Contains(DatItemField.MD5)) + rom.MD5 = datItemMappings[DatItemField.MD5]; + + if (datItemMappings.Keys.Contains(DatItemField.SHA1)) + rom.SHA1 = datItemMappings[DatItemField.SHA1]; + + if (datItemMappings.Keys.Contains(DatItemField.SHA256)) + rom.SHA256 = datItemMappings[DatItemField.SHA256]; + + if (datItemMappings.Keys.Contains(DatItemField.SHA384)) + rom.SHA384 = datItemMappings[DatItemField.SHA384]; + + if (datItemMappings.Keys.Contains(DatItemField.SHA512)) + rom.SHA512 = datItemMappings[DatItemField.SHA512]; + + if (datItemMappings.Keys.Contains(DatItemField.SpamSum)) + rom.SpamSum = datItemMappings[DatItemField.SpamSum]; + + if (datItemMappings.Keys.Contains(DatItemField.Merge)) + rom.MergeTag = datItemMappings[DatItemField.Merge]; + + if (datItemMappings.Keys.Contains(DatItemField.Region)) + rom.Region = datItemMappings[DatItemField.Region]; + + if (datItemMappings.Keys.Contains(DatItemField.Offset)) + rom.Offset = datItemMappings[DatItemField.Offset]; + + if (datItemMappings.Keys.Contains(DatItemField.Date)) + rom.Date = datItemMappings[DatItemField.Date]; + + if (datItemMappings.Keys.Contains(DatItemField.Status)) + rom.ItemStatus = datItemMappings[DatItemField.Status].AsItemStatus(); + + if (datItemMappings.Keys.Contains(DatItemField.Optional)) + rom.Optional = datItemMappings[DatItemField.Optional].AsYesNo(); + + if (datItemMappings.Keys.Contains(DatItemField.Inverted)) + rom.Inverted = datItemMappings[DatItemField.Optional].AsYesNo(); + + #endregion + + #region AttractMode + + if (datItemMappings.Keys.Contains(DatItemField.AltName)) + rom.AltName = datItemMappings[DatItemField.AltName]; + + if (datItemMappings.Keys.Contains(DatItemField.AltTitle)) + rom.AltTitle = datItemMappings[DatItemField.AltTitle]; + + #endregion + + #region OpenMSX + + if (datItemMappings.Keys.Contains(DatItemField.Original)) + rom.Original = new Original() { Content = datItemMappings[DatItemField.Original] }; + + if (datItemMappings.Keys.Contains(DatItemField.OpenMSXSubType)) + rom.OpenMSXSubType = datItemMappings[DatItemField.OpenMSXSubType].AsOpenMSXSubType(); + + if (datItemMappings.Keys.Contains(DatItemField.OpenMSXType)) + rom.OpenMSXType = datItemMappings[DatItemField.OpenMSXType]; + + if (datItemMappings.Keys.Contains(DatItemField.Remark)) + rom.Remark = datItemMappings[DatItemField.Remark]; + + if (datItemMappings.Keys.Contains(DatItemField.Boot)) + rom.Boot = datItemMappings[DatItemField.Boot]; + + #endregion + + #region SoftwareList + + if (datItemMappings.Keys.Contains(DatItemField.LoadFlag)) + rom.LoadFlag = datItemMappings[DatItemField.LoadFlag].AsLoadFlag(); + + if (datItemMappings.Keys.Contains(DatItemField.Value)) + rom.Value = datItemMappings[DatItemField.Value]; + + if (rom.DataArea == null) + rom.DataArea = new DataArea(); + + SetFields(rom.DataArea, datItemMappings); + + if (rom.Part == null) + rom.Part = new Part(); + + SetFields(rom.Part, datItemMappings); + + #endregion + } + + /// + /// Set fields with given values + /// + /// Setting to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Setting setting, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Setting_Name)) + setting.Name = datItemMappings[DatItemField.Setting_Name]; + + if (datItemMappings.Keys.Contains(DatItemField.Setting_Value)) + setting.Value = datItemMappings[DatItemField.Setting_Value]; + + if (datItemMappings.Keys.Contains(DatItemField.Setting_Default)) + setting.Default = datItemMappings[DatItemField.Setting_Default].AsYesNo(); + + if (setting.ConditionsSpecified) + { + foreach (Condition subCondition in setting.Conditions) + { + SetFields(subCondition, datItemMappings, true); + } + } + } + + /// + /// Set fields with given values + /// + /// SharedFeature to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(SharedFeature sharedFeature, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Value)) + sharedFeature.Value = datItemMappings[DatItemField.Value]; + } + + /// + /// Set fields with given values + /// + /// Slot to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Slot slot, Dictionary datItemMappings) + { + if (slot.SlotOptionsSpecified) + { + foreach (SlotOption subSlotOption in slot.SlotOptions) + { + SetFields(subSlotOption, datItemMappings); + } + } + } + + /// + /// Set fields with given values + /// + /// SlotOption to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(SlotOption slotOption, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.SlotOption_Name)) + slotOption.Name = datItemMappings[DatItemField.SlotOption_Name]; + + if (datItemMappings.Keys.Contains(DatItemField.SlotOption_DeviceName)) + slotOption.DeviceName = datItemMappings[DatItemField.SlotOption_DeviceName]; + + if (datItemMappings.Keys.Contains(DatItemField.SlotOption_Default)) + slotOption.Default = datItemMappings[DatItemField.SlotOption_Default].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// SoftwareList to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(SoftwareList softwareList, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.SoftwareListStatus)) + softwareList.Status = datItemMappings[DatItemField.SoftwareListStatus].AsSoftwareListStatus(); + + if (datItemMappings.Keys.Contains(DatItemField.Filter)) + softwareList.Filter = datItemMappings[DatItemField.Filter]; + } + + /// + /// Set fields with given values + /// + /// Sound to remove replace fields in + /// DatItem mappings dictionary + private static void SetFields(Sound sound, Dictionary datItemMappings) + { + if (datItemMappings.Keys.Contains(DatItemField.Channels)) + sound.Channels = Utilities.CleanLong(datItemMappings[DatItemField.Channels]); + } + #endregion ///