using System; using System.Collections.Generic; using System.Linq; using SabreTools.Core; using SabreTools.Core.Tools; namespace SabreTools.DatItems { /// /// Set fields on DatItems /// public static class DatItemTool { /// /// Set fields with given values /// /// DatItem to set fields on /// DatItem mappings dictionary /// Machine mappings dictionary public static void SetFields( DatItem datItem, Dictionary datItemMappings, Dictionary machineMappings) { if (datItem == null) return; #region Common if (machineMappings != null && datItem.Machine != null) SetFields(datItem.Machine, machineMappings); if (datItemMappings == null) return; if (datItemMappings.Keys.Contains(DatItemField.Name)) datItem.SetName(datItemMappings[DatItemField.Name]); #endregion #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 } /// /// Set fields with given values /// /// Machine to set fields on /// Mappings dictionary public static void SetFields(Machine machine, Dictionary mappings) { if (machine == null || mappings == null) return; #region Common if (mappings.Keys.Contains(MachineField.Name)) machine.Name = mappings[MachineField.Name]; if (mappings.Keys.Contains(MachineField.Comment)) machine.Comment = mappings[MachineField.Comment]; if (mappings.Keys.Contains(MachineField.Description)) machine.Description = mappings[MachineField.Description]; if (mappings.Keys.Contains(MachineField.Year)) machine.Year = mappings[MachineField.Year]; if (mappings.Keys.Contains(MachineField.Manufacturer)) machine.Manufacturer = mappings[MachineField.Manufacturer]; if (mappings.Keys.Contains(MachineField.Publisher)) machine.Publisher = mappings[MachineField.Publisher]; if (mappings.Keys.Contains(MachineField.Category)) machine.Category = mappings[MachineField.Category]; if (mappings.Keys.Contains(MachineField.RomOf)) machine.RomOf = mappings[MachineField.RomOf]; if (mappings.Keys.Contains(MachineField.CloneOf)) machine.CloneOf = mappings[MachineField.CloneOf]; if (mappings.Keys.Contains(MachineField.SampleOf)) machine.SampleOf = mappings[MachineField.SampleOf]; if (mappings.Keys.Contains(MachineField.Type)) machine.MachineType = mappings[MachineField.Type].AsMachineType(); #endregion #region AttractMode if (mappings.Keys.Contains(MachineField.Players)) machine.Players = mappings[MachineField.Players]; if (mappings.Keys.Contains(MachineField.Rotation)) machine.Rotation = mappings[MachineField.Rotation]; if (mappings.Keys.Contains(MachineField.Control)) machine.Control = mappings[MachineField.Control]; if (mappings.Keys.Contains(MachineField.Status)) machine.Status = mappings[MachineField.Status]; if (mappings.Keys.Contains(MachineField.DisplayCount)) machine.DisplayCount = mappings[MachineField.DisplayCount]; if (mappings.Keys.Contains(MachineField.DisplayType)) machine.DisplayType = mappings[MachineField.DisplayType]; if (mappings.Keys.Contains(MachineField.Buttons)) machine.Buttons = mappings[MachineField.Buttons]; #endregion #region ListXML if (mappings.Keys.Contains(MachineField.History)) machine.History = mappings[MachineField.History]; if (mappings.Keys.Contains(MachineField.SourceFile)) machine.SourceFile = mappings[MachineField.SourceFile]; if (mappings.Keys.Contains(MachineField.Runnable)) machine.Runnable = mappings[MachineField.Runnable].AsRunnable(); #endregion #region Logiqx if (mappings.Keys.Contains(MachineField.Board)) machine.Board = mappings[MachineField.Board]; if (mappings.Keys.Contains(MachineField.RebuildTo)) machine.RebuildTo = mappings[MachineField.RebuildTo]; #endregion #region Logiqx EmuArc if (mappings.Keys.Contains(MachineField.TitleID)) machine.TitleID = mappings[MachineField.TitleID]; if (mappings.Keys.Contains(MachineField.Developer)) machine.Developer = mappings[MachineField.Developer]; if (mappings.Keys.Contains(MachineField.Genre)) machine.Genre = mappings[MachineField.Genre]; if (mappings.Keys.Contains(MachineField.Subgenre)) machine.Subgenre = mappings[MachineField.Subgenre]; if (mappings.Keys.Contains(MachineField.Ratings)) machine.Ratings = mappings[MachineField.Ratings]; if (mappings.Keys.Contains(MachineField.Score)) machine.Score = mappings[MachineField.Score]; if (mappings.Keys.Contains(MachineField.Enabled)) machine.Enabled = mappings[MachineField.Enabled]; if (mappings.Keys.Contains(MachineField.CRC)) machine.Crc = mappings[MachineField.CRC].AsYesNo(); if (mappings.Keys.Contains(MachineField.RelatedTo)) machine.RelatedTo = mappings[MachineField.RelatedTo]; #endregion #region OpenMSX if (mappings.Keys.Contains(MachineField.GenMSXID)) machine.GenMSXID = mappings[MachineField.GenMSXID]; if (mappings.Keys.Contains(MachineField.System)) machine.System = mappings[MachineField.System]; if (mappings.Keys.Contains(MachineField.Country)) machine.Country = mappings[MachineField.Country]; #endregion #region SoftwareList if (mappings.Keys.Contains(MachineField.Supported)) machine.Supported = mappings[MachineField.Supported].AsSupported(); #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]); } } }